@plait/draw 0.75.0-next.7 → 0.75.0-next.9
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/engines/basic-shapes/cloud.d.ts +15 -0
- package/esm2022/engines/basic-shapes/cloud.mjs +107 -17
- package/esm2022/geometry.component.mjs +3 -3
- package/esm2022/plugins/with-arrow-line-auto-complete.mjs +2 -1
- package/esm2022/plugins/with-draw-resize.mjs +8 -8
- package/esm2022/table.component.mjs +3 -3
- package/esm2022/utils/hit.mjs +30 -4
- package/fesm2022/plait-draw.mjs +217 -102
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -16,7 +16,7 @@ export function withDrawResize(board) {
|
|
|
16
16
|
const canResize = () => {
|
|
17
17
|
const elements = getSelectedElements(board);
|
|
18
18
|
return (elements.length >= 1 &&
|
|
19
|
-
elements.every(el => (PlaitDrawElement.isDrawElement(el) || PlaitDrawElement.isCustomGeometryElement(board, el)) &&
|
|
19
|
+
elements.every((el) => (PlaitDrawElement.isDrawElement(el) || (PlaitDrawElement.isCustomGeometryElement(board, el) && el.points.length > 1)) &&
|
|
20
20
|
!isSingleSelectLine(board) &&
|
|
21
21
|
!isSingleSelectSwimlane(board)));
|
|
22
22
|
};
|
|
@@ -69,7 +69,7 @@ export function withDrawResize(board) {
|
|
|
69
69
|
PlaitBoard.getElementActiveHost(board).append(snapG);
|
|
70
70
|
if (bulkRotationRef) {
|
|
71
71
|
const boundingBoxCornerPoints = RectangleClient.getPoints(resizeRef.rectangle);
|
|
72
|
-
const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map(p => {
|
|
72
|
+
const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map((p) => {
|
|
73
73
|
return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
|
|
74
74
|
});
|
|
75
75
|
const newBoundingBox = RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints);
|
|
@@ -84,7 +84,7 @@ export function withDrawResize(board) {
|
|
|
84
84
|
});
|
|
85
85
|
debugGenerator.isDebug() && debugGenerator.drawRectangle(board, adjustedNewBoundingBoxPoints);
|
|
86
86
|
}
|
|
87
|
-
resizeRef.element.forEach(target => {
|
|
87
|
+
resizeRef.element.forEach((target) => {
|
|
88
88
|
const path = PlaitBoard.findPath(board, target);
|
|
89
89
|
let points;
|
|
90
90
|
if (bulkRotationRef) {
|
|
@@ -92,7 +92,7 @@ export function withDrawResize(board) {
|
|
|
92
92
|
points = reversedPoints.map((p) => {
|
|
93
93
|
return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
|
|
94
94
|
});
|
|
95
|
-
const adjustTargetPoints = points.map(p => [
|
|
95
|
+
const adjustTargetPoints = points.map((p) => [
|
|
96
96
|
p[0] + bulkRotationRef.offsetX,
|
|
97
97
|
p[1] + bulkRotationRef.offsetY
|
|
98
98
|
]);
|
|
@@ -106,7 +106,7 @@ export function withDrawResize(board) {
|
|
|
106
106
|
points = getResizePointsByOtherwiseAxis(board, target.points, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
|
|
107
107
|
}
|
|
108
108
|
else {
|
|
109
|
-
points = target.points.map(p => {
|
|
109
|
+
points = target.points.map((p) => {
|
|
110
110
|
return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
|
|
111
111
|
});
|
|
112
112
|
}
|
|
@@ -171,7 +171,7 @@ export function withDrawResize(board) {
|
|
|
171
171
|
const centerPoint = RectangleClient.getCenterPoint(boundingRectangle);
|
|
172
172
|
corners = rotatePoints(corners, centerPoint, angle);
|
|
173
173
|
}
|
|
174
|
-
corners.forEach(corner => {
|
|
174
|
+
corners.forEach((corner) => {
|
|
175
175
|
const g = drawHandle(board, corner);
|
|
176
176
|
handleG && handleG.append(g);
|
|
177
177
|
});
|
|
@@ -252,11 +252,11 @@ export const getResizePointsByOtherwiseAxis = (board, points, resizeOriginPoint,
|
|
|
252
252
|
let resultPoints = points;
|
|
253
253
|
resultPoints = rotatePoints(resultPoints, RectangleClient.getCenterPoint(currentRectangle), (1 / 2) * Math.PI);
|
|
254
254
|
debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints, { stroke: 'blue' });
|
|
255
|
-
resultPoints = resultPoints.map(p => {
|
|
255
|
+
resultPoints = resultPoints.map((p) => {
|
|
256
256
|
return movePointByZoomAndOriginPoint(p, resizeOriginPoint, xZoom, yZoom);
|
|
257
257
|
});
|
|
258
258
|
debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints);
|
|
259
259
|
const newRectangle = RectangleClient.getRectangleByPoints(resultPoints);
|
|
260
260
|
return rotatePoints(resultPoints, RectangleClient.getCenterPoint(newRectangle), -(1 / 2) * Math.PI);
|
|
261
261
|
};
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILFVBQVUsRUFDVixLQUFLLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBQ1Asc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFekIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTdGLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQ25ELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBU3RELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBaUI7SUFDNUMsTUFBTSxFQUFF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LEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJlc2l6ZVJlZixcbiAgICBSZXNpemVTdGF0ZSxcbiAgICBXaXRoUmVzaXplT3B0aW9ucyxcbiAgICBkcmF3SGFuZGxlLFxuICAgIGdldEZpcnN0VGV4dE1hbmFnZSxcbiAgICBnZXRJbmRleEJ5UmVzaXplSGFuZGxlLFxuICAgIGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleCxcbiAgICBnZXRTeW1tZXRyaWNIYW5kbGVJbmRleCxcbiAgICBpc0Nvcm5lckhhbmRsZSxcbiAgICB3aXRoUmVzaXplLFxuICAgIHJlc2V0UG9pbnRzQWZ0ZXJSZXNpemUsXG4gICAgbm9ybWFsaXplU2hhcGVQb2ludHNcbn0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgY3JlYXRlRyxcbiAgICBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgaXNTZWxlY3Rpb25Nb3ZpbmcsXG4gICAgZ2V0U2VsZWN0aW9uQW5nbGUsXG4gICAgcm90YXRlUG9pbnRzLFxuICAgIHJvdGF0ZWREYXRhUG9pbnRzLFxuICAgIGNyZWF0ZURlYnVnR2VuZXJhdG9yLFxuICAgIGhhc1ZhbGlkQW5nbGUsXG4gICAgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUsXG4gICAgZHJhd1JlY3RhbmdsZSxcbiAgICBBQ1RJVkVfU1RST0tFX1dJRFRILFxuICAgIFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgUGF0aFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmIH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0U25hcFJlc2l6aW5nUmVmT3B0aW9ucywgZ2V0U25hcFJlc2l6aW5nUmVmIH0gZnJvbSAnLi4vdXRpbHMvc25hcC1yZXNpemluZyc7XG5pbXBvcnQgeyBpc0dlb21ldHJ5SW5jbHVkZVRleHQsIGlzU2luZ2xlU2VsZWN0TGluZSwgaXNTaW5nbGVTZWxlY3RTd2ltbGFuZSB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgZGVidWdLZXkgPSAnZGVidWc6cGxhaXQ6cmVzaXplLWZvci1yb3RhdGlvbic7XG5jb25zdCBkZWJ1Z0dlbmVyYXRvciA9IGNyZWF0ZURlYnVnR2VuZXJhdG9yKGRlYnVnS2V5KTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrUm90YXRpb25SZWYge1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBuZXdDZW50ZXJQb2ludDogUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRHJhd1Jlc2l6ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgYWZ0ZXJDaGFuZ2UsIGRyYXdTZWxlY3Rpb25SZWN0YW5nbGUgfSA9IGJvYXJkO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsO1xuICAgIGxldCBoYW5kbGVHOiBTVkdHRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzaXplQWN0aXZlUG9pbnRzOiBQb2ludFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCBjYW5SZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBlbGVtZW50cy5sZW5ndGggPj0gMSAmJlxuICAgICAgICAgICAgZWxlbWVudHMuZXZlcnkoXG4gICAgICAgICAgICAgICAgZWwgPT5cbiAgICAgICAgICAgICAgICAgICAgKFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbCkgfHwgUGxhaXREcmF3RWxlbWVudC5pc0N1c3RvbUdlb21ldHJ5RWxlbWVudChib2FyZCwgZWwpKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNTaW5nbGVTZWxlY3RMaW5lKGJvYXJkKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNTaW5nbGVTZWxlY3RTd2ltbGFuZShib2FyZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3B0aW9uczogV2l0aFJlc2l6ZU9wdGlvbnM8UGxhaXREcmF3RWxlbWVudFtdPiA9IHtcbiAgICAgICAga2V5OiAnZHJhdy1lbGVtZW50cycsXG4gICAgICAgIGNhblJlc2l6ZSxcbiAgICAgICAgaGl0VGVzdDogKHBvaW50OiBQb2ludCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBQbGFpdERyYXdFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlZiA9IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZihib2FyZCwgYm91bmRpbmdSZWN0YW5nbGUsIHBvaW50LCBhbmdsZSk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlUmVmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogWy4uLmVsZW1lbnRzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlOiBib3VuZGluZ1JlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGVSZWYuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnRbXT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBpc0Zyb21Db3JuZXIgPSBpc0Nvcm5lckhhbmRsZShib2FyZCwgcmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCBpc0FzcGVjdFJhdGlvID0gcmVzaXplU3RhdGUuaXNTaGlmdCB8fCAocmVzaXplUmVmLmVsZW1lbnQubGVuZ3RoID09PSAxICYmIFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShyZXNpemVSZWYuZWxlbWVudFswXSkpO1xuICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVzaXplUmVmLnJlY3RhbmdsZSEpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlSW5kZXggPSBnZXRJbmRleEJ5UmVzaXplSGFuZGxlKHJlc2l6ZVJlZi5oYW5kbGUpO1xuICAgICAgICAgICAgY29uc3QgeyBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQgfSA9IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQoYm9hcmQsIGhhbmRsZUluZGV4LCByZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKHJlc2l6ZVJlZi5lbGVtZW50KTtcbiAgICAgICAgICAgIGxldCBidWxrUm90YXRpb25SZWY6IEJ1bGtSb3RhdGlvblJlZiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgICAgIGJ1bGtSb3RhdGlvblJlZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYW5nbGU6IGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiAwLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiAwLFxuICAgICAgICAgICAgICAgICAgICBuZXdDZW50ZXJQb2ludDogWzAsIDBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBbcm90YXRlZFN0YXJ0UG9pbnQsIHJvdGF0ZUVuZFBvaW50XSA9IHJvdGF0ZVBvaW50cyhcbiAgICAgICAgICAgICAgICAgICAgW3Jlc2l6ZVN0YXRlLnN0YXJ0UG9pbnQsIHJlc2l6ZVN0YXRlLmVuZFBvaW50XSxcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIC1idWxrUm90YXRpb25SZWYuYW5nbGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnQgPSByb3RhdGVkU3RhcnRQb2ludDtcbiAgICAgICAgICAgICAgICByZXNpemVTdGF0ZS5lbmRQb2ludCA9IHJvdGF0ZUVuZFBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzaXplU25hcFJlZk9wdGlvbnMgPSBnZXRTbmFwUmVzaXppbmdSZWZPcHRpb25zKFxuICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZixcbiAgICAgICAgICAgICAgICByZXNpemVTdGF0ZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVQb2ludFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaXNBc3BlY3RSYXRpbyxcbiAgICAgICAgICAgICAgICBpc0Zyb21Db3JuZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByZXNpemVTbmFwUmVmID0gZ2V0U25hcFJlc2l6aW5nUmVmKGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCwgcmVzaXplU25hcFJlZk9wdGlvbnMpO1xuICAgICAgICAgICAgcmVzaXplQWN0aXZlUG9pbnRzID0gcmVzaXplU25hcFJlZi5hY3RpdmVQb2ludHM7XG4gICAgICAgICAgICBzbmFwRyA9IHJlc2l6ZVNuYXBSZWYuc25hcEc7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoc25hcEcpO1xuXG4gICAgICAgICAgICBpZiAoYnVsa1JvdGF0aW9uUmVmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdCb3hDb3JuZXJQb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNpemVkQm91bmRpbmdCb3hDb3JuZXJQb2ludHMgPSBib3VuZGluZ0JveENvcm5lclBvaW50cy5tYXAocCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCBvcmlnaW5Qb2ludCwgcmVzaXplU25hcFJlZi54Wm9vbSwgcmVzaXplU25hcFJlZi55Wm9vbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Qm91bmRpbmdCb3ggPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplZEJvdW5kaW5nQm94Q29ybmVyUG9pbnRzKTtcblxuICAgICAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCBuZXdCb3VuZGluZ0JveCwgeyBzdHJva2U6ICdibHVlJyB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0JvdW5kaW5nQm94Q2VudGVyID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KG5ld0JvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RlZE5ld0JvdW5kaW5nQm94UG9pbnRzID0gcmVzZXRQb2ludHNBZnRlclJlc2l6ZShcbiAgICAgICAgICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGJvdW5kaW5nQm94Q29ybmVyUG9pbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyksXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlclBvaW50LFxuICAgICAgICAgICAgICAgICAgICBuZXdCb3VuZGluZ0JveENlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmLmFuZ2xlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMpKTtcbiAgICAgICAgICAgICAgICBidWxrUm90YXRpb25SZWYgPSBPYmplY3QuYXNzaWduKGJ1bGtSb3RhdGlvblJlZiwge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiBuZXdDZW50ZXJbMF0gLSBuZXdCb3VuZGluZ0JveENlbnRlclswXSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogbmV3Q2VudGVyWzFdIC0gbmV3Qm91bmRpbmdCb3hDZW50ZXJbMV0sXG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50OiBuZXdDZW50ZXJcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCBhZGp1c3RlZE5ld0JvdW5kaW5nQm94UG9pbnRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzaXplUmVmLmVsZW1lbnQuZm9yRWFjaCh0YXJnZXQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGxldCBwb2ludHM7XG4gICAgICAgICAgICAgICAgaWYgKGJ1bGtSb3RhdGlvblJlZikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlZFBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKHRhcmdldC5wb2ludHMsIGNlbnRlclBvaW50LCAtYnVsa1JvdGF0aW9uUmVmLmFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcmV2ZXJzZWRQb2ludHMubWFwKChwOiBQb2ludCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgW1BvaW50LCBQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdFRhcmdldFBvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBwWzBdICsgYnVsa1JvdGF0aW9uUmVmIS5vZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSArIGJ1bGtSb3RhdGlvblJlZiEub2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICBdKSBhcyBQb2ludFtdO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSByb3RhdGVkRGF0YVBvaW50cyhhZGp1c3RUYXJnZXRQb2ludHMsIGJ1bGtSb3RhdGlvblJlZi5uZXdDZW50ZXJQb2ludCwgYnVsa1JvdGF0aW9uUmVmLmFuZ2xlKSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVmFsaWRBbmdsZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVmFsaWRBbmdsZSh0YXJnZXQpICYmIGlzQXhpc0NoYW5nZWRCeUFuZ2xlKHRhcmdldC5hbmdsZSEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBnZXRSZXNpemVQb2ludHNCeU90aGVyd2lzZUF4aXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTbmFwUmVmLnhab29tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueVpvb21cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSB0YXJnZXQucG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgb3JpZ2luUG9pbnQsIHJlc2l6ZVNuYXBSZWYueFpvb20sIHJlc2l6ZVNuYXBSZWYueVpvb20pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh0YXJnZXQpICYmIGlzR2VvbWV0cnlJbmNsdWRlVGV4dCh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogdGV4dEhlaWdodCB9ID0gZ2V0Rmlyc3RUZXh0TWFuYWdlKHRhcmdldCkuZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMucmVzaXplR2VvbWV0cnkoYm9hcmQsIHBvaW50cyBhcyBbUG9pbnQsIFBvaW50XSwgdGV4dEhlaWdodCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBub3JtYWxpemVTaGFwZVBvaW50cyhwb2ludHMgYXMgW1BvaW50LCBQb2ludF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50cyB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKHRhcmdldCkgfHxcbiAgICAgICAgICAgICAgICAgICAgUGxhaXREcmF3RWxlbWVudC5pc0N1c3RvbUdlb21ldHJ5RWxlbWVudChib2FyZCwgdGFyZ2V0KSB8fFxuICAgICAgICAgICAgICAgICAgICBQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZSh0YXJnZXQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHMgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50cyB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbWFnZSBlbGVtZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgcmVzaXplLCBidXQgbW92ZXMgYmFzZWQgb24gdGhlIGNlbnRlciBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyh0YXJnZXQucG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHRhcmdldFJlY3RhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZW50ZXJQb2ludCA9IG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlclBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueFpvb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi55Wm9vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhcmdldFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeUNlbnRlclBvaW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50czogUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhuZXdUYXJnZXRSZWN0YW5nbGUpIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXREcmF3RWxlbWVudFtdPikgPT4ge1xuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgc25hcEcgPSBudWxsO1xuICAgICAgICAgICAgaWYgKG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgICAgICBuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVzaXplQWN0aXZlUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5hZGRTZWxlY3Rpb25XaXRoVGVtcG9yYXJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdpdGhSZXNpemU8UGxhaXREcmF3RWxlbWVudFtdPihib2FyZCwgb3B0aW9ucyk7XG5cbiAgICBib2FyZC5hZnRlckNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgYWZ0ZXJDaGFuZ2UoKTtcbiAgICAgICAgaWYgKGhhbmRsZUcpIHtcbiAgICAgICAgICAgIGhhbmRsZUcucmVtb3ZlKCk7XG4gICAgICAgICAgICBoYW5kbGVHID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuUmVzaXplKCkgJiYgIWlzU2VsZWN0aW9uTW92aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgaGFuZGxlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgUGxhaXREcmF3RWxlbWVudFtdO1xuICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0YW5nbGUgPSBuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlXG4gICAgICAgICAgICAgICAgPyBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplQWN0aXZlUG9pbnRzISlcbiAgICAgICAgICAgICAgICA6IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBsZXQgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMoYm91bmRpbmdSZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBnZXRTZWxlY3Rpb25BbmdsZShlbGVtZW50cyk7XG4gICAgICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChib3VuZGluZ1JlY3RhbmdsZSk7XG4gICAgICAgICAgICAgICAgY29ybmVycyA9IHJvdGF0ZVBvaW50cyhjb3JuZXJzLCBjZW50ZXJQb2ludCwgYW5nbGUpIGFzIFtQb2ludCwgUG9pbnQsIFBvaW50LCBQb2ludF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3JuZXJzLmZvckVhY2goY29ybmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZHJhd0hhbmRsZShib2FyZCwgY29ybmVyKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVHICYmIGhhbmRsZUcuYXBwZW5kKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoaGFuZGxlRyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYm9hcmQuZHJhd1NlbGVjdGlvblJlY3RhbmdsZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVBY3RpdmVQb2ludHMhKTtcbiAgICAgICAgICAgIHJldHVybiBkcmF3UmVjdGFuZ2xlKGJvYXJkLCBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIEFDVElWRV9TVFJPS0VfV0lEVEgpLCB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBBQ1RJVkVfU1RST0tFX1dJRFRIXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHJhd1NlbGVjdGlvblJlY3RhbmdsZSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVPcmlnaW5Qb2ludEFuZEhhbmRsZVBvaW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoYW5kbGVJbmRleDogbnVtYmVyLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgIGNvbnN0IHN5bW1ldHJpY0hhbmRsZUluZGV4ID0gZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXgoYm9hcmQsIGhhbmRsZUluZGV4KTtcbiAgICBjb25zdCBvcmlnaW5Qb2ludCA9IGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleChyZWN0YW5nbGUgYXMgUmVjdGFuZ2xlQ2xpZW50LCBzeW1tZXRyaWNIYW5kbGVJbmRleCk7XG4gICAgY29uc3QgaGFuZGxlUG9pbnQgPSBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXgocmVjdGFuZ2xlIGFzIFJlY3RhbmdsZUNsaWVudCwgaGFuZGxlSW5kZXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICBoYW5kbGVQb2ludFxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplWm9vbSA9IChcbiAgICByZXNpemVTdGFydEFuZEVuZDogW1BvaW50LCBQb2ludF0sXG4gICAgcmVzaXplT3JpZ2luUG9pbnQ6IFBvaW50LFxuICAgIHJlc2l6ZUhhbmRsZVBvaW50OiBQb2ludCxcbiAgICBpc0Zyb21Db3JuZXI6IGJvb2xlYW4sXG4gICAgaXNBc3BlY3RSYXRpbzogYm9vbGVhblxuKSA9PiB7XG4gICAgY29uc3QgW3N0YXJ0UG9pbnQsIGVuZFBvaW50XSA9IHJlc2l6ZVN0YXJ0QW5kRW5kO1xuICAgIGxldCB4Wm9vbSA9IDA7XG4gICAgbGV0IHlab29tID0gMDtcbiAgICBpZiAoaXNGcm9tQ29ybmVyKSB7XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFggPSBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHhab29tID0gbm9ybWFsaXplZE9mZnNldFggLyAocmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSk7XG4gICAgICAgICAgICB5Wm9vbSA9IHhab29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXRYID0gUG9pbnQuZ2V0T2Zmc2V0WChzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFkgPSBQb2ludC5nZXRPZmZzZXRZKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHhab29tID0gbm9ybWFsaXplZE9mZnNldFggLyAocmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSk7XG4gICAgICAgICAgICB5Wm9vbSA9IG5vcm1hbGl6ZWRPZmZzZXRZIC8gKHJlc2l6ZUhhbmRsZVBvaW50WzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gUG9pbnQuaXNIb3Jpem9udGFsKHJlc2l6ZU9yaWdpblBvaW50LCByZXNpemVIYW5kbGVQb2ludCwgMC4xKSB8fCBmYWxzZTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXQgPSBpc0hvcml6b250YWwgPyBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KSA6IFBvaW50LmdldE9mZnNldFkoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICBsZXQgYmVuY2htYXJrT2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gcmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSA6IHJlc2l6ZUhhbmRsZVBvaW50WzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV07XG4gICAgICAgIGNvbnN0IHpvb20gPSBub3JtYWxpemVkT2Zmc2V0IC8gYmVuY2htYXJrT2Zmc2V0O1xuICAgICAgICBpZiAoaXNBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgeFpvb20gPSB6b29tO1xuICAgICAgICAgICAgeVpvb20gPSB6b29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIHhab29tID0gem9vbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeVpvb20gPSB6b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHhab29tLCB5Wm9vbSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50ID0gKHA6IFBvaW50LCByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsIHhab29tOiBudW1iZXIsIHlab29tOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBvZmZzZXRYID0gKHBbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSkgKiB4Wm9vbTtcbiAgICBjb25zdCBvZmZzZXRZID0gKHBbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXSkgKiB5Wm9vbTtcbiAgICByZXR1cm4gW3BbMF0gKyBvZmZzZXRYLCBwWzFdICsgb2Zmc2V0WV0gYXMgUG9pbnQ7XG59O1xuXG4vKipcbiAqIDEuIFJvdGF0ZSA5MMKwXG4gKiAyLiBTY2FsZSBiYXNlZCBvbiB0aGUgcm90YXRlZCBwb2ludHNcbiAqIDMuIFJldmVyc2Ugcm90YXRlIHRoZSBzY2FsZWQgcG9pbnRzIGJ5IDkwwrBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZVBvaW50c0J5T3RoZXJ3aXNlQXhpcyA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludHM6IFBvaW50W10sXG4gICAgcmVzaXplT3JpZ2luUG9pbnQ6IFBvaW50LFxuICAgIHhab29tOiBudW1iZXIsXG4gICAgeVpvb206IG51bWJlclxuKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpO1xuICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCBjdXJyZW50UmVjdGFuZ2xlLCB7IHN0cm9rZTogJ2JsYWNrJyB9KTtcbiAgICBsZXQgcmVzdWx0UG9pbnRzID0gcG9pbnRzO1xuICAgIHJlc3VsdFBvaW50cyA9IHJvdGF0ZVBvaW50cyhyZXN1bHRQb2ludHMsIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChjdXJyZW50UmVjdGFuZ2xlKSwgKDEgLyAyKSAqIE1hdGguUEkpO1xuICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCByZXN1bHRQb2ludHMsIHsgc3Ryb2tlOiAnYmx1ZScgfSk7XG4gICAgcmVzdWx0UG9pbnRzID0gcmVzdWx0UG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIHJlc2l6ZU9yaWdpblBvaW50LCB4Wm9vbSwgeVpvb20pO1xuICAgIH0pO1xuICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCByZXN1bHRQb2ludHMpO1xuICAgIGNvbnN0IG5ld1JlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXN1bHRQb2ludHMpO1xuICAgIHJldHVybiByb3RhdGVQb2ludHMocmVzdWx0UG9pbnRzLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQobmV3UmVjdGFuZ2xlKSwgLSgxIC8gMikgKiBNYXRoLlBJKTtcbn07XG4iXX0=
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILFVBQVUsRUFDVixLQUFLLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBQ1Asc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFekIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTdGLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQ25ELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBU3RELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBaUI7SUFDNUMsTUFBTSxFQUFF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QztJQUM5RSxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEUsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBSZXNpemVSZWYsXG4gICAgUmVzaXplU3RhdGUsXG4gICAgV2l0aFJlc2l6ZU9wdGlvbnMsXG4gICAgZHJhd0hhbmRsZSxcbiAgICBnZXRGaXJzdFRleHRNYW5hZ2UsXG4gICAgZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZSxcbiAgICBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXgsXG4gICAgZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXgsXG4gICAgaXNDb3JuZXJIYW5kbGUsXG4gICAgd2l0aFJlc2l6ZSxcbiAgICByZXNldFBvaW50c0FmdGVyUmVzaXplLFxuICAgIG5vcm1hbGl6ZVNoYXBlUG9pbnRzXG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGNyZWF0ZUcsXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzLFxuICAgIGlzU2VsZWN0aW9uTW92aW5nLFxuICAgIGdldFNlbGVjdGlvbkFuZ2xlLFxuICAgIHJvdGF0ZVBvaW50cyxcbiAgICByb3RhdGVkRGF0YVBvaW50cyxcbiAgICBjcmVhdGVEZWJ1Z0dlbmVyYXRvcixcbiAgICBoYXNWYWxpZEFuZ2xlLFxuICAgIGlzQXhpc0NoYW5nZWRCeUFuZ2xlLFxuICAgIGRyYXdSZWN0YW5nbGUsXG4gICAgQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgIFBhdGhcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHJhd1RyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZiB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMsIGdldFNuYXBSZXNpemluZ1JlZiB9IGZyb20gJy4uL3V0aWxzL3NuYXAtcmVzaXppbmcnO1xuaW1wb3J0IHsgaXNHZW9tZXRyeUluY2x1ZGVUZXh0LCBpc1NpbmdsZVNlbGVjdExpbmUsIGlzU2luZ2xlU2VsZWN0U3dpbWxhbmUgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnS2V5ID0gJ2RlYnVnOnBsYWl0OnJlc2l6ZS1mb3Itcm90YXRpb24nO1xuY29uc3QgZGVidWdHZW5lcmF0b3IgPSBjcmVhdGVEZWJ1Z0dlbmVyYXRvcihkZWJ1Z0tleSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVsa1JvdGF0aW9uUmVmIHtcbiAgICBhbmdsZTogbnVtYmVyO1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgbmV3Q2VudGVyUG9pbnQ6IFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERyYXdSZXNpemUoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGFmdGVyQ2hhbmdlLCBkcmF3U2VsZWN0aW9uUmVjdGFuZ2xlIH0gPSBib2FyZDtcbiAgICBsZXQgc25hcEc6IFNWR0dFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgaGFuZGxlRzogU1ZHR0VsZW1lbnQgfCBudWxsO1xuICAgIGxldCBuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlID0gZmFsc2U7XG4gICAgbGV0IHJlc2l6ZUFjdGl2ZVBvaW50czogUG9pbnRbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3QgY2FuUmVzaXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZWxlbWVudHMubGVuZ3RoID49IDEgJiZcbiAgICAgICAgICAgIGVsZW1lbnRzLmV2ZXJ5KFxuICAgICAgICAgICAgICAgIChlbCkgPT5cbiAgICAgICAgICAgICAgICAgICAgKFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbCkgfHwgKFBsYWl0RHJhd0VsZW1lbnQuaXNDdXN0b21HZW9tZXRyeUVsZW1lbnQoYm9hcmQsIGVsKSAmJiBlbC5wb2ludHMubGVuZ3RoID4gMSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc1NpbmdsZVNlbGVjdExpbmUoYm9hcmQpICYmXG4gICAgICAgICAgICAgICAgICAgICFpc1NpbmdsZVNlbGVjdFN3aW1sYW5lKGJvYXJkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdERyYXdFbGVtZW50W10+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWVsZW1lbnRzJyxcbiAgICAgICAgY2FuUmVzaXplLFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmID0gZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmKGJvYXJkLCBib3VuZGluZ1JlY3RhbmdsZSwgcG9pbnQsIGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBbLi4uZWxlbWVudHNdLFxuICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGU6IGJvdW5kaW5nUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IGhhbmRsZVJlZi5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvckNsYXNzOiBoYW5kbGVSZWYuY3Vyc29yQ2xhc3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXREcmF3RWxlbWVudFtdPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBzbmFwRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRnJvbUNvcm5lciA9IGlzQ29ybmVySGFuZGxlKGJvYXJkLCByZXNpemVSZWYuaGFuZGxlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzQXNwZWN0UmF0aW8gPSByZXNpemVTdGF0ZS5pc1NoaWZ0IHx8IChyZXNpemVSZWYuZWxlbWVudC5sZW5ndGggPT09IDEgJiYgUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKHJlc2l6ZVJlZi5lbGVtZW50WzBdKSk7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpblBvaW50LCBoYW5kbGVQb2ludCB9ID0gZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludChib2FyZCwgaGFuZGxlSW5kZXgsIHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUocmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGJ1bGtSb3RhdGlvblJlZjogQnVsa1JvdGF0aW9uUmVmIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmID0ge1xuICAgICAgICAgICAgICAgICAgICBhbmdsZTogYW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50OiBbMCwgMF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyb3RhdGVkU3RhcnRQb2ludCwgcm90YXRlRW5kUG9pbnRdID0gcm90YXRlUG9pbnRzKFxuICAgICAgICAgICAgICAgICAgICBbcmVzaXplU3RhdGUuc3RhcnRQb2ludCwgcmVzaXplU3RhdGUuZW5kUG9pbnRdLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgLWJ1bGtSb3RhdGlvblJlZi5hbmdsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmVzaXplU3RhdGUuc3RhcnRQb2ludCA9IHJvdGF0ZWRTdGFydFBvaW50O1xuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLmVuZFBvaW50ID0gcm90YXRlRW5kUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNpemVTbmFwUmVmT3B0aW9ucyA9IGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLFxuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVBvaW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpc0FzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgIGlzRnJvbUNvcm5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVNuYXBSZWYgPSBnZXRTbmFwUmVzaXppbmdSZWYoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50LCByZXNpemVTbmFwUmVmT3B0aW9ucyk7XG4gICAgICAgICAgICByZXNpemVBY3RpdmVQb2ludHMgPSByZXNpemVTbmFwUmVmLmFjdGl2ZVBvaW50cztcbiAgICAgICAgICAgIHNuYXBHID0gcmVzaXplU25hcFJlZi5zbmFwRztcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChzbmFwRyk7XG5cbiAgICAgICAgICAgIGlmIChidWxrUm90YXRpb25SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveENvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMocmVzaXplUmVmLnJlY3RhbmdsZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyA9IGJvdW5kaW5nQm94Q29ybmVyUG9pbnRzLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgb3JpZ2luUG9pbnQsIHJlc2l6ZVNuYXBSZWYueFpvb20sIHJlc2l6ZVNuYXBSZWYueVpvb20pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0JvdW5kaW5nQm94ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyk7XG5cbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgbmV3Qm91bmRpbmdCb3gsIHsgc3Ryb2tlOiAnYmx1ZScgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZGluZ0JveENlbnRlciA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChuZXdCb3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cyA9IHJlc2V0UG9pbnRzQWZ0ZXJSZXNpemUoXG4gICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhib3VuZGluZ0JveENvcm5lclBvaW50cyksXG4gICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVkQm91bmRpbmdCb3hDb3JuZXJQb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgbmV3Qm91bmRpbmdCb3hDZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIGJ1bGtSb3RhdGlvblJlZi5hbmdsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhhZGp1c3RlZE5ld0JvdW5kaW5nQm94UG9pbnRzKSk7XG4gICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmID0gT2JqZWN0LmFzc2lnbihidWxrUm90YXRpb25SZWYsIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogbmV3Q2VudGVyWzBdIC0gbmV3Qm91bmRpbmdCb3hDZW50ZXJbMF0sXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IG5ld0NlbnRlclsxXSAtIG5ld0JvdW5kaW5nQm94Q2VudGVyWzFdLFxuICAgICAgICAgICAgICAgICAgICBuZXdDZW50ZXJQb2ludDogbmV3Q2VudGVyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc2l6ZVJlZi5lbGVtZW50LmZvckVhY2goKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGxldCBwb2ludHM7XG4gICAgICAgICAgICAgICAgaWYgKGJ1bGtSb3RhdGlvblJlZikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlZFBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKHRhcmdldC5wb2ludHMsIGNlbnRlclBvaW50LCAtYnVsa1JvdGF0aW9uUmVmLmFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcmV2ZXJzZWRQb2ludHMubWFwKChwOiBQb2ludCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgW1BvaW50LCBQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdFRhcmdldFBvaW50cyA9IHBvaW50cy5tYXAoKHApID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gKyBidWxrUm90YXRpb25SZWYhLm9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwWzFdICsgYnVsa1JvdGF0aW9uUmVmIS5vZmZzZXRZXG4gICAgICAgICAgICAgICAgICAgIF0pIGFzIFBvaW50W107XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKGFkanVzdFRhcmdldFBvaW50cywgYnVsa1JvdGF0aW9uUmVmLm5ld0NlbnRlclBvaW50LCBidWxrUm90YXRpb25SZWYuYW5nbGUpIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkgJiYgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUodGFyZ2V0LmFuZ2xlISkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IGdldFJlc2l6ZVBvaW50c0J5T3RoZXJ3aXNlQXhpcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueFpvb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi55Wm9vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHRhcmdldC5wb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodGFyZ2V0KSAmJiBpc0dlb21ldHJ5SW5jbHVkZVRleHQodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHRleHRIZWlnaHQgfSA9IGdldEZpcnN0VGV4dE1hbmFnZSh0YXJnZXQpLmdldFNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUdlb21ldHJ5KGJvYXJkLCBwb2ludHMgYXMgW1BvaW50LCBQb2ludF0sIHRleHRIZWlnaHQsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gbm9ybWFsaXplU2hhcGVQb2ludHMocG9pbnRzIGFzIFtQb2ludCwgUG9pbnRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHMgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBQbGFpdERyYXdFbGVtZW50LmlzTGluZSh0YXJnZXQpIHx8XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0RHJhd0VsZW1lbnQuaXNDdXN0b21HZW9tZXRyeUVsZW1lbnQoYm9hcmQsIHRhcmdldCkgfHxcbiAgICAgICAgICAgICAgICAgICAgUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUodGFyZ2V0KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHMgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW1hZ2UgZWxlbWVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIHJlc2l6ZSwgYnV0IG1vdmVzIGJhc2VkIG9uIHRoZSBjZW50ZXIgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHModGFyZ2V0LnBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludCh0YXJnZXRSZWN0YW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyUG9pbnQgPSBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTbmFwUmVmLnhab29tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueVpvb21cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUYXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHM6IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMobmV3VGFyZ2V0UmVjdGFuZ2xlKSB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnRbXT4pID0+IHtcbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHNuYXBHID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgbmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc2l6ZUFjdGl2ZVBvaW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuYWRkU2VsZWN0aW9uV2l0aFRlbXBvcmFyeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB3aXRoUmVzaXplPFBsYWl0RHJhd0VsZW1lbnRbXT4oYm9hcmQsIG9wdGlvbnMpO1xuXG4gICAgYm9hcmQuYWZ0ZXJDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGFmdGVyQ2hhbmdlKCk7XG4gICAgICAgIGlmIChoYW5kbGVHKSB7XG4gICAgICAgICAgICBoYW5kbGVHLnJlbW92ZSgpO1xuICAgICAgICAgICAgaGFuZGxlRyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhblJlc2l6ZSgpICYmICFpc1NlbGVjdGlvbk1vdmluZyhib2FyZCkpIHtcbiAgICAgICAgICAgIGhhbmRsZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdGFuZ2xlID0gbmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZVxuICAgICAgICAgICAgICAgID8gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZUFjdGl2ZVBvaW50cyEpXG4gICAgICAgICAgICAgICAgOiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGNvcm5lcnMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKGJvdW5kaW5nUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoYm91bmRpbmdSZWN0YW5nbGUpO1xuICAgICAgICAgICAgICAgIGNvcm5lcnMgPSByb3RhdGVQb2ludHMoY29ybmVycywgY2VudGVyUG9pbnQsIGFuZ2xlKSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29ybmVycy5mb3JFYWNoKChjb3JuZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZHJhd0hhbmRsZShib2FyZCwgY29ybmVyKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVHICYmIGhhbmRsZUcuYXBwZW5kKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoaGFuZGxlRyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYm9hcmQuZHJhd1NlbGVjdGlvblJlY3RhbmdsZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVBY3RpdmVQb2ludHMhKTtcbiAgICAgICAgICAgIHJldHVybiBkcmF3UmVjdGFuZ2xlKGJvYXJkLCBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIEFDVElWRV9TVFJPS0VfV0lEVEgpLCB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBBQ1RJVkVfU1RST0tFX1dJRFRIXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHJhd1NlbGVjdGlvblJlY3RhbmdsZSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVPcmlnaW5Qb2ludEFuZEhhbmRsZVBvaW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoYW5kbGVJbmRleDogbnVtYmVyLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgIGNvbnN0IHN5bW1ldHJpY0hhbmRsZUluZGV4ID0gZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXgoYm9hcmQsIGhhbmRsZUluZGV4KTtcbiAgICBjb25zdCBvcmlnaW5Qb2ludCA9IGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleChyZWN0YW5nbGUgYXMgUmVjdGFuZ2xlQ2xpZW50LCBzeW1tZXRyaWNIYW5kbGVJbmRleCk7XG4gICAgY29uc3QgaGFuZGxlUG9pbnQgPSBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXgocmVjdGFuZ2xlIGFzIFJlY3RhbmdsZUNsaWVudCwgaGFuZGxlSW5kZXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICBoYW5kbGVQb2ludFxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplWm9vbSA9IChcbiAgICByZXNpemVTdGFydEFuZEVuZDogW1BvaW50LCBQb2ludF0sXG4gICAgcmVzaXplT3JpZ2luUG9pbnQ6IFBvaW50LFxuICAgIHJlc2l6ZUhhbmRsZVBvaW50OiBQb2ludCxcbiAgICBpc0Zyb21Db3JuZXI6IGJvb2xlYW4sXG4gICAgaXNBc3BlY3RSYXRpbzogYm9vbGVhblxuKSA9PiB7XG4gICAgY29uc3QgW3N0YXJ0UG9pbnQsIGVuZFBvaW50XSA9IHJlc2l6ZVN0YXJ0QW5kRW5kO1xuICAgIGxldCB4Wm9vbSA9IDA7XG4gICAgbGV0IHlab29tID0gMDtcbiAgICBpZiAoaXNGcm9tQ29ybmVyKSB7XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFggPSBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHhab29tID0gbm9ybWFsaXplZE9mZnNldFggLyAocmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSk7XG4gICAgICAgICAgICB5Wm9vbSA9IHhab29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXRYID0gUG9pbnQuZ2V0T2Zmc2V0WChzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFkgPSBQb2ludC5nZXRPZmZzZXRZKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHhab29tID0gbm9ybWFsaXplZE9mZnNldFggLyAocmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSk7XG4gICAgICAgICAgICB5Wm9vbSA9IG5vcm1hbGl6ZWRPZmZzZXRZIC8gKHJlc2l6ZUhhbmRsZVBvaW50WzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gUG9pbnQuaXNIb3Jpem9udGFsKHJlc2l6ZU9yaWdpblBvaW50LCByZXNpemVIYW5kbGVQb2ludCwgMC4xKSB8fCBmYWxzZTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXQgPSBpc0hvcml6b250YWwgPyBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KSA6IFBvaW50LmdldE9mZnNldFkoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICBsZXQgYmVuY2htYXJrT2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gcmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSA6IHJlc2l6ZUhhbmRsZVBvaW50WzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV07XG4gICAgICAgIGNvbnN0IHpvb20gPSBub3JtYWxpemVkT2Zmc2V0IC8gYmVuY2htYXJrT2Zmc2V0O1xuICAgICAgICBpZiAoaXNBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgeFpvb20gPSB6b29tO1xuICAgICAgICAgICAgeVpvb20gPSB6b29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIHhab29tID0gem9vbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeVpvb20gPSB6b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHhab29tLCB5Wm9vbSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50ID0gKHA6IFBvaW50LCByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsIHhab29tOiBudW1iZXIsIHlab29tOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBvZmZzZXRYID0gKHBbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSkgKiB4Wm9vbTtcbiAgICBjb25zdCBvZmZzZXRZID0gKHBbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXSkgKiB5Wm9vbTtcbiAgICByZXR1cm4gW3BbMF0gKyBvZmZzZXRYLCBwWzFdICsgb2Zmc2V0WV0gYXMgUG9pbnQ7XG59O1xuXG4vKipcbiAqIDEuIFJvdGF0ZSA5MMKwXG4gKiAyLiBTY2FsZSBiYXNlZCBvbiB0aGUgcm90YXRlZCBwb2ludHNcbiAqIDMuIFJldmVyc2Ugcm90YXRlIHRoZSBzY2FsZWQgcG9pbnRzIGJ5IDkwwrBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZVBvaW50c0J5T3RoZXJ3aXNlQXhpcyA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludHM6IFBvaW50W10sXG4gICAgcmVzaXplT3JpZ2luUG9pbnQ6IFBvaW50LFxuICAgIHhab29tOiBudW1iZXIsXG4gICAgeVpvb206IG51bWJlclxuKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpO1xuICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCBjdXJyZW50UmVjdGFuZ2xlLCB7IHN0cm9rZTogJ2JsYWNrJyB9KTtcbiAgICBsZXQgcmVzdWx0UG9pbnRzID0gcG9pbnRzO1xuICAgIHJlc3VsdFBvaW50cyA9IHJvdGF0ZVBvaW50cyhyZXN1bHRQb2ludHMsIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChjdXJyZW50UmVjdGFuZ2xlKSwgKDEgLyAyKSAqIE1hdGguUEkpO1xuICAgIGRlYnVnR2VuZXJhdG9yLmlzRGVidWcoKSAmJiBkZWJ1Z0dlbmVyYXRvci5kcmF3UmVjdGFuZ2xlKGJvYXJkLCByZXN1bHRQb2ludHMsIHsgc3Ryb2tlOiAnYmx1ZScgfSk7XG4gICAgcmVzdWx0UG9pbnRzID0gcmVzdWx0UG9pbnRzLm1hcCgocCkgPT4ge1xuICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgcmVzaXplT3JpZ2luUG9pbnQsIHhab29tLCB5Wm9vbSk7XG4gICAgfSk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIHJlc3VsdFBvaW50cyk7XG4gICAgY29uc3QgbmV3UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc3VsdFBvaW50cyk7XG4gICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhyZXN1bHRQb2ludHMsIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChuZXdSZWN0YW5nbGUpLCAtKDEgLyAyKSAqIE1hdGguUEkpO1xufTtcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PlaitBoard, ACTIVE_STROKE_WIDTH, RectangleClient, setAngleForG, degreesToRadians } from '@plait/core';
|
|
2
|
-
import { ActiveGenerator, CommonElementFlavour,
|
|
2
|
+
import { ActiveGenerator, CommonElementFlavour, hasResizeHandle } from '@plait/common';
|
|
3
3
|
import { PlaitTableElement } from './interfaces/table';
|
|
4
4
|
import { TextGenerator } from './generators/text.generator';
|
|
5
5
|
import { TableGenerator } from './generators/table.generator';
|
|
@@ -35,7 +35,7 @@ export class TableComponent extends CommonElementFlavour {
|
|
|
35
35
|
if (cells?.length) {
|
|
36
36
|
return false;
|
|
37
37
|
}
|
|
38
|
-
return
|
|
38
|
+
return hasResizeHandle(this.board, this.element);
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
this.tableGenerator = new TableGenerator(this.board);
|
|
@@ -152,4 +152,4 @@ export class TableComponent extends CommonElementFlavour {
|
|
|
152
152
|
this.lineAutoCompleteGenerator.destroy();
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixZQUFZLEVBQ1osZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQStDLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEcsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUNILGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ25CLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFakcsTUFBTSxPQUFPLGNBQXFDLFNBQVEsb0JBQW1DO0lBU3pGO1FBQ0ks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Q0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyRyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIE9uQ29udGV4dENoYW5nZWQsXG4gICAgQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIGRlZ3JlZXNUb1JhZGlhbnNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZlR2VuZXJhdG9yLCBDb21tb25FbGVtZW50Rmxhdm91ciwgVGV4dE1hbmFnZUNoYW5nZURhdGEsIGNhblJlc2l6ZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSwgUGxhaXRUYWJsZUJvYXJkLCBQbGFpdFRhYmxlQ2VsbCwgUGxhaXRUYWJsZUVsZW1lbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgRHJhd1RleHRJbmZvLCBUZXh0R2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL3RleHQuZ2VuZXJhdG9yJztcbmltcG9ydCB7IFRhYmxlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL3RhYmxlLmdlbmVyYXRvcic7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRDZWxsV2l0aFBvaW50cywgZ2V0VGV4dE1hbmFnZUJ5Q2VsbCwgaXNDZWxsSW5jbHVkZVRleHQgfSBmcm9tICcuL3V0aWxzL3RhYmxlJztcbmltcG9ydCB7XG4gICAgY2xlYXJTZWxlY3RlZENlbGxzLFxuICAgIGdldENlbGxzUmVjdGFuZ2xlLFxuICAgIGdldFNlbGVjdGVkQ2VsbHMsXG4gICAgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQsXG4gICAgbWVtb3JpemVMYXRlc3RUZXh0LFxuICAgIHNldFNlbGVjdGVkQ2VsbHNcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuL2VuZ2luZXMnO1xuaW1wb3J0IHsgVGFibGVTeW1ib2xzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldEhvcml6b250YWxUZXh0UmVjdGFuZ2xlIH0gZnJvbSAnLi9lbmdpbmVzL3RhYmxlL3RhYmxlJztcbmltcG9ydCB7IFNoYXBlRGVmYXVsdFNwYWNlIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXJyb3dMaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL2Fycm93LWxpbmUtYXV0by1jb21wbGV0ZS5nZW5lcmF0b3InO1xuXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFBsYWl0VGFibGU+IGV4dGVuZHMgQ29tbW9uRWxlbWVudEZsYXZvdXI8VCwgUGxhaXRCb2FyZD4gaW1wbGVtZW50cyBPbkNvbnRleHRDaGFuZ2VkPFQsIFBsYWl0Qm9hcmQ+IHtcbiAgICBhY3RpdmVHZW5lcmF0b3IhOiBBY3RpdmVHZW5lcmF0b3I8VD47XG5cbiAgICB0YWJsZUdlbmVyYXRvciE6IFRhYmxlR2VuZXJhdG9yPFQ+O1xuXG4gICAgdGV4dEdlbmVyYXRvciE6IFRleHRHZW5lcmF0b3I8VD47XG5cbiAgICBsaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yITogQXJyb3dMaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yPFBsYWl0VGFibGU+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdlbmVyYXRvcigpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVHZW5lcmF0b3IgPSBuZXcgQWN0aXZlR2VuZXJhdG9yPFQ+KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFDVElWRV9TVFJPS0VfV0lEVEg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0U3Ryb2tlT3BhY2l0eTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFJlY3RhbmdsZTogKHZhbHVlOiBUKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBnZXRTZWxlY3RlZENlbGxzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2VsbHNSZWN0YW5nbGUodGhpcy5ib2FyZCBhcyBQbGFpdFRhYmxlQm9hcmQsIHRoaXMuZWxlbWVudCwgY2VsbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHZhbHVlLnBvaW50cyEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1Jlc2l6ZUhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gZ2V0U2VsZWN0ZWRDZWxscyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChjZWxscz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhblJlc2l6ZSh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZUdlbmVyYXRvciA9IG5ldyBUYWJsZUdlbmVyYXRvcjxUPih0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGV4dE1hbmFnZSgpO1xuICAgICAgICB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IgPSBuZXcgQXJyb3dMaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmdldFJlZigpLmFkZEdlbmVyYXRvcihBcnJvd0xpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3Iua2V5LCB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplR2VuZXJhdG9yKCk7XG4gICAgICAgIHRoaXMuZHJhdygpO1xuICAgIH1cblxuICAgIGRyYXcoKSB7XG4gICAgICAgIHRoaXMudGFibGVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50LCB0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICB0aGlzLnRleHRHZW5lcmF0b3IuZHJhdyh0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICB0aGlzLnJvdGF0ZVZlcnRpY2FsVGV4dCgpO1xuICAgICAgICB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50LCBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KHRoaXMuYm9hcmQpLCB7XG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByb3RhdGVWZXJ0aWNhbFRleHQoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gKHRoaXMuYm9hcmQgYXMgUGxhaXRUYWJsZUJvYXJkKS5idWlsZFRhYmxlKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRhYmxlLmNlbGxzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoUGxhaXRUYWJsZUVsZW1lbnQuaXNWZXJ0aWNhbFRleHQoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWFuYWdlID0gZ2V0VGV4dE1hbmFnZUJ5Q2VsbCh0aGlzLmJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAodGV4dE1hbmFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmU8UGxhaXRUYWJsZT4oVGFibGVTeW1ib2xzLnRhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZW5naW5lLmdldFRleHRSZWN0YW5nbGUhKHRoaXMuZWxlbWVudCwgeyBpZDogaXRlbS5pZCwgYm9hcmQ6IHRoaXMuYm9hcmQgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRleHRNYW5hZ2UuZy5jbGFzc0xpc3QuYWRkKCd2ZXJ0aWNhbC1jZWxsLXRleHQnKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QW5nbGVGb3JHKHRleHRNYW5hZ2UuZywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSksIGRlZ3JlZXNUb1JhZGlhbnMoLTkwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREcmF3U2hhcGVUZXh0cyhjZWxsczogUGxhaXRUYWJsZUNlbGxbXSk6IERyYXdUZXh0SW5mb1tdIHtcbiAgICAgICAgcmV0dXJuIGNlbGxzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXNDZWxsSW5jbHVkZVRleHQoaXRlbSkpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQhLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0SGVpZ2h0OiBpdGVtLnRleHRIZWlnaHQhLFxuICAgICAgICAgICAgICAgICAgICBib2FyZDogdGhpcy5ib2FyZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVGV4dE1hbmFnZSgpIHtcbiAgICAgICAgY29uc3QgdGV4dHMgPSB0aGlzLmdldERyYXdTaGFwZVRleHRzKHRoaXMuZWxlbWVudC5jZWxscyk7XG4gICAgICAgIHRoaXMudGV4dEdlbmVyYXRvciA9IG5ldyBUZXh0R2VuZXJhdG9yKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCwgdGV4dHMsIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IFBsYWl0VGFibGUsIGRhdGE6IFRleHRNYW5hZ2VDaGFuZ2VEYXRhLCB0ZXh0OiBEcmF3VGV4dEluZm8pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aCh0aGlzLmJvYXJkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubmV3VGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5zZXRUYWJsZVRleHQodGhpcy5ib2FyZCwgcGF0aCwgdGV4dC5pZCwgZGF0YS5uZXdUZXh0LCBkYXRhLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEub3BlcmF0aW9ucyAmJiBtZW1vcml6ZUxhdGVzdFRleHQodmFsdWUsIGRhdGEub3BlcmF0aW9ucyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0UmVuZGVyUmVjdGFuZ2xlOiAodmFsdWU6IFBsYWl0VGFibGUsIHRleHQ6IERyYXdUZXh0SW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBnZXRDZWxsV2l0aFBvaW50cyh0aGlzLmJvYXJkLCB2YWx1ZSwgdGV4dC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0VGFibGVFbGVtZW50LmlzVmVydGljYWxUZXh0KGNlbGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoY2VsbC5wb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IGNlbGwudGV4dEhlaWdodCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjZWxsUmVjdGFuZ2xlLmhlaWdodCAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCA+IDAgPyBoZWlnaHQgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogY2VsbFJlY3RhbmdsZS54ICsgU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCArIHN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY2VsbFJlY3RhbmdsZS55ICsgKGNlbGxSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SG9yaXpvbnRhbFRleHRSZWN0YW5nbGUoY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50ZXh0R2VuZXJhdG9yLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKHZhbHVlOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PFQsIFBsYWl0Qm9hcmQ+LCBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxULCBQbGFpdEJvYXJkPikge1xuICAgICAgICBpZiAodmFsdWUuZWxlbWVudCAhPT0gcHJldmlvdXMuZWxlbWVudCB8fCB2YWx1ZS5oYXNUaGVtZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0ZWRDZWxscyA9IGdldFNlbGVjdGVkQ2VsbHMocHJldmlvdXMuZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNTZWxlY3RlZENlbGxzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjbGVhclNlbGVjdGVkQ2VsbHMocHJldmlvdXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxscyh2YWx1ZS5lbGVtZW50LCBwcmV2aW91c1NlbGVjdGVkQ2VsbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyh2YWx1ZS5lbGVtZW50LCB0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodmFsdWUuZWxlbWVudCwgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdCh0aGlzLmJvYXJkKSwgeyBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVGV4dHMgPSB0aGlzLmdldERyYXdTaGFwZVRleHRzKHByZXZpb3VzLmVsZW1lbnQuY2VsbHMpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRleHRzID0gdGhpcy5nZXREcmF3U2hhcGVUZXh0cyh2YWx1ZS5lbGVtZW50LmNlbGxzKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEdlbmVyYXRvci51cGRhdGUodmFsdWUuZWxlbWVudCwgcHJldmlvdXNUZXh0cywgY3VycmVudFRleHRzLCB0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICAgICAgdGhpcy5yb3RhdGVWZXJ0aWNhbFRleHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NhbWVTZWxlY3RlZCA9IHZhbHVlLnNlbGVjdGVkID09PSBwcmV2aW91cy5zZWxlY3RlZDtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NhbWVIYW5kbGVTdGF0ZSA9IHRoaXMuYWN0aXZlR2VuZXJhdG9yLm9wdGlvbnMuaGFzUmVzaXplSGFuZGxlKCkgPT09IHRoaXMuYWN0aXZlR2VuZXJhdG9yLmhhc1Jlc2l6ZUhhbmRsZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZENlbGxzID0gZ2V0U2VsZWN0ZWRDZWxscyh2YWx1ZS5lbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghaGFzU2FtZVNlbGVjdGVkIHx8ICFoYXNTYW1lSGFuZGxlU3RhdGUgfHwgY3VycmVudFNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKHZhbHVlLmVsZW1lbnQsIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QodGhpcy5ib2FyZCksIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0ZWRDZWxscyh2YWx1ZS5lbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50LCBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KHRoaXMuYm9hcmQpLCB7XG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50YWJsZUdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGV4dEdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubGluZUF1dG9Db21wbGV0ZUdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgfVxufVxuIl19
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixZQUFZLEVBQ1osZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQXdCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQStDLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEcsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUNILGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ25CLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFakcsTUFBTSxPQUFPLGNBQXFDLFNBQVEsb0JBQW1DO0lBU3pGO1FBQ0ks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Q0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyRyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIE9uQ29udGV4dENoYW5nZWQsXG4gICAgQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIGRlZ3JlZXNUb1JhZGlhbnNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZlR2VuZXJhdG9yLCBDb21tb25FbGVtZW50Rmxhdm91ciwgVGV4dE1hbmFnZUNoYW5nZURhdGEsIGhhc1Jlc2l6ZUhhbmRsZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSwgUGxhaXRUYWJsZUJvYXJkLCBQbGFpdFRhYmxlQ2VsbCwgUGxhaXRUYWJsZUVsZW1lbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgRHJhd1RleHRJbmZvLCBUZXh0R2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL3RleHQuZ2VuZXJhdG9yJztcbmltcG9ydCB7IFRhYmxlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL3RhYmxlLmdlbmVyYXRvcic7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRDZWxsV2l0aFBvaW50cywgZ2V0VGV4dE1hbmFnZUJ5Q2VsbCwgaXNDZWxsSW5jbHVkZVRleHQgfSBmcm9tICcuL3V0aWxzL3RhYmxlJztcbmltcG9ydCB7XG4gICAgY2xlYXJTZWxlY3RlZENlbGxzLFxuICAgIGdldENlbGxzUmVjdGFuZ2xlLFxuICAgIGdldFNlbGVjdGVkQ2VsbHMsXG4gICAgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQsXG4gICAgbWVtb3JpemVMYXRlc3RUZXh0LFxuICAgIHNldFNlbGVjdGVkQ2VsbHNcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuL2VuZ2luZXMnO1xuaW1wb3J0IHsgVGFibGVTeW1ib2xzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldEhvcml6b250YWxUZXh0UmVjdGFuZ2xlIH0gZnJvbSAnLi9lbmdpbmVzL3RhYmxlL3RhYmxlJztcbmltcG9ydCB7IFNoYXBlRGVmYXVsdFNwYWNlIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXJyb3dMaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL2Fycm93LWxpbmUtYXV0by1jb21wbGV0ZS5nZW5lcmF0b3InO1xuXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFBsYWl0VGFibGU+IGV4dGVuZHMgQ29tbW9uRWxlbWVudEZsYXZvdXI8VCwgUGxhaXRCb2FyZD4gaW1wbGVtZW50cyBPbkNvbnRleHRDaGFuZ2VkPFQsIFBsYWl0Qm9hcmQ+IHtcbiAgICBhY3RpdmVHZW5lcmF0b3IhOiBBY3RpdmVHZW5lcmF0b3I8VD47XG5cbiAgICB0YWJsZUdlbmVyYXRvciE6IFRhYmxlR2VuZXJhdG9yPFQ+O1xuXG4gICAgdGV4dEdlbmVyYXRvciE6IFRleHRHZW5lcmF0b3I8VD47XG5cbiAgICBsaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yITogQXJyb3dMaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yPFBsYWl0VGFibGU+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdlbmVyYXRvcigpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVHZW5lcmF0b3IgPSBuZXcgQWN0aXZlR2VuZXJhdG9yPFQ+KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFDVElWRV9TVFJPS0VfV0lEVEg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0U3Ryb2tlT3BhY2l0eTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFJlY3RhbmdsZTogKHZhbHVlOiBUKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBnZXRTZWxlY3RlZENlbGxzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2VsbHNSZWN0YW5nbGUodGhpcy5ib2FyZCBhcyBQbGFpdFRhYmxlQm9hcmQsIHRoaXMuZWxlbWVudCwgY2VsbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHZhbHVlLnBvaW50cyEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1Jlc2l6ZUhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gZ2V0U2VsZWN0ZWRDZWxscyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChjZWxscz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Jlc2l6ZUhhbmRsZSh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZUdlbmVyYXRvciA9IG5ldyBUYWJsZUdlbmVyYXRvcjxUPih0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGV4dE1hbmFnZSgpO1xuICAgICAgICB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IgPSBuZXcgQXJyb3dMaW5lQXV0b0NvbXBsZXRlR2VuZXJhdG9yKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmdldFJlZigpLmFkZEdlbmVyYXRvcihBcnJvd0xpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3Iua2V5LCB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplR2VuZXJhdG9yKCk7XG4gICAgICAgIHRoaXMuZHJhdygpO1xuICAgIH1cblxuICAgIGRyYXcoKSB7XG4gICAgICAgIHRoaXMudGFibGVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50LCB0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICB0aGlzLnRleHRHZW5lcmF0b3IuZHJhdyh0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICB0aGlzLnJvdGF0ZVZlcnRpY2FsVGV4dCgpO1xuICAgICAgICB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50LCBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KHRoaXMuYm9hcmQpLCB7XG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByb3RhdGVWZXJ0aWNhbFRleHQoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gKHRoaXMuYm9hcmQgYXMgUGxhaXRUYWJsZUJvYXJkKS5idWlsZFRhYmxlKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRhYmxlLmNlbGxzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoUGxhaXRUYWJsZUVsZW1lbnQuaXNWZXJ0aWNhbFRleHQoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWFuYWdlID0gZ2V0VGV4dE1hbmFnZUJ5Q2VsbCh0aGlzLmJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAodGV4dE1hbmFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmU8UGxhaXRUYWJsZT4oVGFibGVTeW1ib2xzLnRhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZW5naW5lLmdldFRleHRSZWN0YW5nbGUhKHRoaXMuZWxlbWVudCwgeyBpZDogaXRlbS5pZCwgYm9hcmQ6IHRoaXMuYm9hcmQgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRleHRNYW5hZ2UuZy5jbGFzc0xpc3QuYWRkKCd2ZXJ0aWNhbC1jZWxsLXRleHQnKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QW5nbGVGb3JHKHRleHRNYW5hZ2UuZywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSksIGRlZ3JlZXNUb1JhZGlhbnMoLTkwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREcmF3U2hhcGVUZXh0cyhjZWxsczogUGxhaXRUYWJsZUNlbGxbXSk6IERyYXdUZXh0SW5mb1tdIHtcbiAgICAgICAgcmV0dXJuIGNlbGxzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXNDZWxsSW5jbHVkZVRleHQoaXRlbSkpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQhLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0SGVpZ2h0OiBpdGVtLnRleHRIZWlnaHQhLFxuICAgICAgICAgICAgICAgICAgICBib2FyZDogdGhpcy5ib2FyZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVGV4dE1hbmFnZSgpIHtcbiAgICAgICAgY29uc3QgdGV4dHMgPSB0aGlzLmdldERyYXdTaGFwZVRleHRzKHRoaXMuZWxlbWVudC5jZWxscyk7XG4gICAgICAgIHRoaXMudGV4dEdlbmVyYXRvciA9IG5ldyBUZXh0R2VuZXJhdG9yKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCwgdGV4dHMsIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IFBsYWl0VGFibGUsIGRhdGE6IFRleHRNYW5hZ2VDaGFuZ2VEYXRhLCB0ZXh0OiBEcmF3VGV4dEluZm8pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aCh0aGlzLmJvYXJkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubmV3VGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5zZXRUYWJsZVRleHQodGhpcy5ib2FyZCwgcGF0aCwgdGV4dC5pZCwgZGF0YS5uZXdUZXh0LCBkYXRhLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEub3BlcmF0aW9ucyAmJiBtZW1vcml6ZUxhdGVzdFRleHQodmFsdWUsIGRhdGEub3BlcmF0aW9ucyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0UmVuZGVyUmVjdGFuZ2xlOiAodmFsdWU6IFBsYWl0VGFibGUsIHRleHQ6IERyYXdUZXh0SW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBnZXRDZWxsV2l0aFBvaW50cyh0aGlzLmJvYXJkLCB2YWx1ZSwgdGV4dC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0VGFibGVFbGVtZW50LmlzVmVydGljYWxUZXh0KGNlbGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoY2VsbC5wb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IGNlbGwudGV4dEhlaWdodCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjZWxsUmVjdGFuZ2xlLmhlaWdodCAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCA+IDAgPyBoZWlnaHQgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogY2VsbFJlY3RhbmdsZS54ICsgU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCArIHN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY2VsbFJlY3RhbmdsZS55ICsgKGNlbGxSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SG9yaXpvbnRhbFRleHRSZWN0YW5nbGUoY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50ZXh0R2VuZXJhdG9yLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKHZhbHVlOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PFQsIFBsYWl0Qm9hcmQ+LCBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxULCBQbGFpdEJvYXJkPikge1xuICAgICAgICBpZiAodmFsdWUuZWxlbWVudCAhPT0gcHJldmlvdXMuZWxlbWVudCB8fCB2YWx1ZS5oYXNUaGVtZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0ZWRDZWxscyA9IGdldFNlbGVjdGVkQ2VsbHMocHJldmlvdXMuZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNTZWxlY3RlZENlbGxzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjbGVhclNlbGVjdGVkQ2VsbHMocHJldmlvdXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxscyh2YWx1ZS5lbGVtZW50LCBwcmV2aW91c1NlbGVjdGVkQ2VsbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyh2YWx1ZS5lbGVtZW50LCB0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodmFsdWUuZWxlbWVudCwgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdCh0aGlzLmJvYXJkKSwgeyBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVGV4dHMgPSB0aGlzLmdldERyYXdTaGFwZVRleHRzKHByZXZpb3VzLmVsZW1lbnQuY2VsbHMpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRleHRzID0gdGhpcy5nZXREcmF3U2hhcGVUZXh0cyh2YWx1ZS5lbGVtZW50LmNlbGxzKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEdlbmVyYXRvci51cGRhdGUodmFsdWUuZWxlbWVudCwgcHJldmlvdXNUZXh0cywgY3VycmVudFRleHRzLCB0aGlzLmdldEVsZW1lbnRHKCkpO1xuICAgICAgICAgICAgdGhpcy5yb3RhdGVWZXJ0aWNhbFRleHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NhbWVTZWxlY3RlZCA9IHZhbHVlLnNlbGVjdGVkID09PSBwcmV2aW91cy5zZWxlY3RlZDtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NhbWVIYW5kbGVTdGF0ZSA9IHRoaXMuYWN0aXZlR2VuZXJhdG9yLm9wdGlvbnMuaGFzUmVzaXplSGFuZGxlKCkgPT09IHRoaXMuYWN0aXZlR2VuZXJhdG9yLmhhc1Jlc2l6ZUhhbmRsZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZENlbGxzID0gZ2V0U2VsZWN0ZWRDZWxscyh2YWx1ZS5lbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghaGFzU2FtZVNlbGVjdGVkIHx8ICFoYXNTYW1lSGFuZGxlU3RhdGUgfHwgY3VycmVudFNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKHZhbHVlLmVsZW1lbnQsIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QodGhpcy5ib2FyZCksIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0ZWRDZWxscyh2YWx1ZS5lbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpbmVBdXRvQ29tcGxldGVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50LCBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KHRoaXMuYm9hcmQpLCB7XG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50YWJsZUdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGV4dEdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubGluZUF1dG9Db21wbGV0ZUdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgfVxufVxuIl19
|
package/esm2022/utils/hit.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RectangleClient, isLineHitRectangle, distanceBetweenPointAndSegments, distanceBetweenPointAndPoint, HIT_DISTANCE_BUFFER, rotateAntiPointsByElement, isPointInPolygon, rotatePointsByAngle } from '@plait/core';
|
|
2
|
-
import { PlaitDrawElement } from '../interfaces';
|
|
1
|
+
import { RectangleClient, isLineHitRectangle, distanceBetweenPointAndSegments, distanceBetweenPointAndPoint, HIT_DISTANCE_BUFFER, rotateAntiPointsByElement, isPointInPolygon, rotatePointsByAngle, createDebugGenerator, getNearestPointBetweenPointAndArc, getEllipseArcCenter } from '@plait/core';
|
|
2
|
+
import { BasicShapes, PlaitDrawElement } from '../interfaces';
|
|
3
3
|
import { getNearestPoint } from './geometry';
|
|
4
4
|
import { getArrowLinePoints } from './arrow-line/arrow-line-basic';
|
|
5
5
|
import { getFillByElement } from './style/stroke';
|
|
@@ -11,6 +11,7 @@ import { isMultipleTextGeometry } from './multi-text-geometry';
|
|
|
11
11
|
import { getFirstTextEditor, isFilled, sortElementsByArea } from '@plait/common';
|
|
12
12
|
import { getVectorLinePoints } from './vector-line';
|
|
13
13
|
import { Editor } from 'slate';
|
|
14
|
+
import { generateCloudPath } from '../engines/basic-shapes/cloud';
|
|
14
15
|
export const isTextExceedingBounds = (geometry) => {
|
|
15
16
|
const client = RectangleClient.getRectangleByPoints(geometry.points);
|
|
16
17
|
if (geometry.textHeight && geometry.textHeight > client.height) {
|
|
@@ -146,10 +147,35 @@ export const getFirstTextOrLineElement = (elements) => {
|
|
|
146
147
|
}
|
|
147
148
|
return null;
|
|
148
149
|
};
|
|
150
|
+
const debugKey = 'debug:plait:hit:shape:edge:sample-points';
|
|
151
|
+
const debugGenerator = createDebugGenerator(debugKey);
|
|
152
|
+
const shapes = [BasicShapes.cloud];
|
|
149
153
|
export const isHitDrawElement = (board, element, point, isStrict = true) => {
|
|
150
154
|
const rectangle = board.getRectangle(element);
|
|
151
155
|
point = rotateAntiPointsByElement(point, element) || point;
|
|
152
|
-
if (PlaitDrawElement.isGeometry(element)) {
|
|
156
|
+
if (PlaitDrawElement.isGeometry(element) && rectangle) {
|
|
157
|
+
if (debugGenerator.isDebug() && shapes.includes(element.shape)) {
|
|
158
|
+
debugGenerator.clear();
|
|
159
|
+
const { startPoint, arcs } = generateCloudPath(rectangle);
|
|
160
|
+
const points = [startPoint, ...arcs.map((arc) => [arc.endX, arc.endY])];
|
|
161
|
+
debugGenerator.drawCircles(board, points, 5, false);
|
|
162
|
+
let minDistance = Infinity;
|
|
163
|
+
let nearestPoint = point;
|
|
164
|
+
let currentStart = startPoint;
|
|
165
|
+
for (const arc of arcs) {
|
|
166
|
+
const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arc);
|
|
167
|
+
const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);
|
|
168
|
+
const { center } = getEllipseArcCenter(currentStart, arc);
|
|
169
|
+
debugGenerator.drawCircles(board, [center], 8, false, { fill: 'yellow' });
|
|
170
|
+
if (distance < minDistance) {
|
|
171
|
+
minDistance = distance;
|
|
172
|
+
nearestPoint = arcNearestPoint;
|
|
173
|
+
}
|
|
174
|
+
currentStart = [arc.endX, arc.endY];
|
|
175
|
+
}
|
|
176
|
+
debugGenerator.drawCircles(board, [point], 12, false, { fill: 'black', stroke: 'black' });
|
|
177
|
+
debugGenerator.drawCircles(board, [nearestPoint], 12, false, { fill: 'green', stroke: 'green' });
|
|
178
|
+
}
|
|
153
179
|
if (isHitEdgeOfShape(board, element, point, HIT_DISTANCE_BUFFER)) {
|
|
154
180
|
return true;
|
|
155
181
|
}
|
|
@@ -213,4 +239,4 @@ export const isHitElementInside = (board, element, point) => {
|
|
|
213
239
|
}
|
|
214
240
|
return null;
|
|
215
241
|
};
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBR2Ysa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFJSCxnQkFBZ0IsRUFJbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFO0lBQzdE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ImltcG9ydCB7XG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBTZWxlY3Rpb24sXG4gICAgUGxhaXRCb2FyZCxcbiAgICBpc0xpbmVIaXRSZWN0YW5nbGUsXG4gICAgUG9pbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIEhJVF9ESVNUQU5DRV9CVUZGRVIsXG4gICAgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudCxcbiAgICBpc1BvaW50SW5Qb2x5Z29uLFxuICAgIHJvdGF0ZVBvaW50c0J5QW5nbGVcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBQbGFpdEFycm93TGluZSxcbiAgICBQbGFpdENvbW1vbkdlb21ldHJ5LFxuICAgIFBsYWl0Q3VzdG9tR2VvbWV0cnksXG4gICAgUGxhaXREcmF3RWxlbWVudCxcbiAgICBQbGFpdEdlb21ldHJ5LFxuICAgIFBsYWl0U2hhcGVFbGVtZW50LFxuICAgIFBsYWl0VmVjdG9yTGluZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldE5lYXJlc3RQb2ludCB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0QXJyb3dMaW5lUG9pbnRzIH0gZnJvbSAnLi9hcnJvdy1saW5lL2Fycm93LWxpbmUtYmFzaWMnO1xuaW1wb3J0IHsgZ2V0RmlsbEJ5RWxlbWVudCB9IGZyb20gJy4vc3R5bGUvc3Ryb2tlJztcbmltcG9ydCB7IGdldEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgZ2V0RWxlbWVudFNoYXBlIH0gZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgeyBnZXRIaXRBcnJvd0xpbmVUZXh0SW5kZXggfSBmcm9tICcuL3Bvc2l0aW9uL2Fycm93LWxpbmUnO1xuaW1wb3J0IHsgZ2V0VGV4dFJlY3RhbmdsZSwgaXNDbG9zZWRDdXN0b21HZW9tZXRyeSwgaXNDbG9zZWREcmF3RWxlbWVudCwgaXNDbG9zZWRQb2ludHMsIGlzRHJhd0VsZW1lbnRJbmNsdWRlVGV4dCB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkgfSBmcm9tICcuL211bHRpLXRleHQtZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0Rmlyc3RUZXh0RWRpdG9yLCBpc0ZpbGxlZCwgc29ydEVsZW1lbnRzQnlBcmVhIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRWZWN0b3JMaW5lUG9pbnRzIH0gZnJvbSAnLi92ZWN0b3ItbGluZSc7XG5pbXBvcnQgeyBFZGl0b3IsIEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBpc1RleHRFeGNlZWRpbmdCb3VuZHMgPSAoZ2VvbWV0cnk6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZ2VvbWV0cnkucG9pbnRzKTtcbiAgICBpZiAoZ2VvbWV0cnkudGV4dEhlaWdodCAmJiBnZW9tZXRyeS50ZXh0SGVpZ2h0ID4gY2xpZW50LmhlaWdodCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0QXJyb3dMaW5lVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRBcnJvd0xpbmUsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIHJldHVybiBnZXRIaXRBcnJvd0xpbmVUZXh0SW5kZXgoYm9hcmQsIGVsZW1lbnQsIHBvaW50KSAhPT0gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRQb2x5TGluZSA9IChwYXRoUG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudHMocGF0aFBvaW50cywgcG9pbnQpO1xuICAgIHJldHVybiBkaXN0YW5jZSA8PSBISVRfRElTVEFOQ0VfQlVGRkVSO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0QXJyb3dMaW5lID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEFycm93TGluZSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0QXJyb3dMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBpc0hpdFRleHQgPSBpc0hpdEFycm93TGluZVRleHQoYm9hcmQsIGVsZW1lbnQgYXMgUGxhaXRBcnJvd0xpbmUsIHBvaW50KTtcbiAgICByZXR1cm4gaXNIaXRUZXh0IHx8IGlzSGl0UG9seUxpbmUocG9pbnRzLCBwb2ludCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRWZWN0b3JMaW5lID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdFZlY3RvckxpbmUsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHBvaW50cyA9IGdldFZlY3RvckxpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpITtcbiAgICBpZiAoaXNDbG9zZWRQb2ludHMoZWxlbWVudC5wb2ludHMpKSB7XG4gICAgICAgIHJldHVybiBpc1BvaW50SW5Qb2x5Z29uKHBvaW50LCBwb2ludHMpIHx8IGlzSGl0UG9seUxpbmUocG9pbnRzLCBwb2ludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0UG9seUxpbmUocG9pbnRzLCBwb2ludCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjdGFuZ2xlSGl0RWxlbWVudFRleHQgPSAoZWxlbWVudDogUGxhaXRDb21tb25HZW9tZXRyeSwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmU8UGxhaXRDb21tb25HZW9tZXRyeT4oZWxlbWVudC5zaGFwZSk7XG4gICAgaWYgKGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgdGV4dHMgPSBlbGVtZW50LnRleHRzO1xuICAgICAgICByZXR1cm4gdGV4dHMuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlIShlbGVtZW50LCB7IGlkOiBpdGVtLmlkIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0Um90YXRlZFBvaW50cyhyZWN0YW5nbGUsIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHModGV4dENsaWVudCksIGVsZW1lbnQuYW5nbGUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZW5naW5lLmdldFRleHRSZWN0YW5nbGUgPyBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KSA6IGdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMocmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRleHRDbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRFbGVtZW50VGV4dCA9IChlbGVtZW50OiBQbGFpdENvbW1vbkdlb21ldHJ5LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmU8UGxhaXRDb21tb25HZW9tZXRyeT4oZWxlbWVudC5zaGFwZSk7XG4gICAgaWYgKGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgdGV4dHMgPSBlbGVtZW50LnRleHRzO1xuICAgICAgICByZXR1cm4gdGV4dHMuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlIShlbGVtZW50LCB7IGlkOiBpdGVtLmlkIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGV4dENsaWVudCwgcG9pbnQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZW5naW5lLmdldFRleHRSZWN0YW5nbGUgPyBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KSA6IGdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eVRleHRFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnkpID0+IHtcbiAgICBpZiAoIWlzRHJhd0VsZW1lbnRJbmNsdWRlVGV4dChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZWRpdG9yID0gZ2V0Rmlyc3RUZXh0RWRpdG9yKGVsZW1lbnQpO1xuICAgIHJldHVybiBFZGl0b3IuaXNFbXB0eShlZGl0b3IsIGVkaXRvci5jaGlsZHJlblswXSBhcyBFbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3NlbGVjdGlvbi5hbmNob3IsIHNlbGVjdGlvbi5mb2N1c10pO1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgaXNIaXRFbGVtZW50ID0gaXNSZWN0YW5nbGVIaXRSb3RhdGVkRWxlbWVudChib2FyZCwgcmFuZ2VSZWN0YW5nbGUsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNIaXRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXNIaXRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNFbXB0eVRleHRFbGVtZW50KGVsZW1lbnQpICYmIGlzUmVjdGFuZ2xlSGl0RWxlbWVudFRleHQoZWxlbWVudCwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQoYm9hcmQsIHJhbmdlUmVjdGFuZ2xlLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRBcnJvd0xpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaXNMaW5lSGl0UmVjdGFuZ2xlKHBvaW50cywgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRWZWN0b3JMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KSE7XG4gICAgICAgIHJldHVybiBpc0xpbmVIaXRSZWN0YW5nbGUocG9pbnRzLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWN0YW5nbGVIaXRSb3RhdGVkRWxlbWVudCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCxcbiAgICBlbGVtZW50OiBQbGFpdEVsZW1lbnQgJiB7IHBvaW50czogUG9pbnRbXSB9XG4pID0+IHtcbiAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMocmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKGNsaWVudCksIGVsZW1lbnQuYW5nbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjdGFuZ2xlSGl0Um90YXRlZFBvaW50cyA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRzOiBQb2ludFtdLCBhbmdsZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgbGV0IHJvdGF0ZWRQb2ludHMgPSByb3RhdGVQb2ludHNCeUFuZ2xlKHBvaW50cywgYW5nbGUpIHx8IHBvaW50cztcbiAgICByZXR1cm4gaXNMaW5lSGl0UmVjdGFuZ2xlKHJvdGF0ZWRQb2ludHMsIHJlY3RhbmdsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RHJhd0VsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiAoUGxhaXREcmF3RWxlbWVudCB8IFBsYWl0Q3VzdG9tR2VvbWV0cnkpW10pID0+IHtcbiAgICBsZXQgZmlyc3RGaWxsZWRFbGVtZW50ID0gZ2V0Rmlyc3RGaWxsZWREcmF3RWxlbWVudChib2FyZCwgZWxlbWVudHMpO1xuICAgIGxldCBlbmRJbmRleCA9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoZmlyc3RGaWxsZWRFbGVtZW50KSB7XG4gICAgICAgIGVuZEluZGV4ID0gZWxlbWVudHMuaW5kZXhPZihmaXJzdEZpbGxlZEVsZW1lbnQpICsgMTtcbiAgICB9XG4gICAgY29uc3QgbmV3RWxlbWVudHMgPSBlbGVtZW50cy5zbGljZSgwLCBlbmRJbmRleCk7XG4gICAgY29uc3QgZWxlbWVudCA9IGdldEZpcnN0VGV4dE9yTGluZUVsZW1lbnQobmV3RWxlbWVudHMpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzb3J0RWxlbWVudHMgPSBzb3J0RWxlbWVudHNCeUFyZWEoYm9hcmQsIG5ld0VsZW1lbnRzLCAnYXNjJyk7XG4gICAgcmV0dXJuIHNvcnRFbGVtZW50c1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaXJzdEZpbGxlZERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogKFBsYWl0RHJhd0VsZW1lbnQgfCBQbGFpdEN1c3RvbUdlb21ldHJ5KVtdKSA9PiB7XG4gICAgbGV0IGZpbGxlZEVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdEN1c3RvbUdlb21ldHJ5IHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbaV07XG4gICAgICAgIGlmIChpc0Nsb3NlZEN1c3RvbUdlb21ldHJ5KGJvYXJkLCBlbGVtZW50KSB8fCBpc0Nsb3NlZERyYXdFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxsID0gZ2V0RmlsbEJ5RWxlbWVudChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaXNGaWxsZWQoZmlsbCkpIHtcbiAgICAgICAgICAgICAgICBmaWxsZWRFbGVtZW50ID0gZWxlbWVudCBhcyBQbGFpdEdlb21ldHJ5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWxsZWRFbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRmlsbGVkRHJhd0VsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RHJhd0VsZW1lbnQgfCBQbGFpdEN1c3RvbUdlb21ldHJ5KSA9PiB7XG4gICAgcmV0dXJuIGdldEZpcnN0RmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIFtlbGVtZW50XSkgIT09IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RUZXh0T3JMaW5lRWxlbWVudCA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCB0ZXh0cyA9IGVsZW1lbnRzLmZpbHRlcigoaXRlbSkgPT4gUGxhaXREcmF3RWxlbWVudC5pc1RleHQoaXRlbSkpO1xuICAgIGlmICh0ZXh0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRleHRzWzBdO1xuICAgIH1cbiAgICBjb25zdCBsaW5lcyA9IGVsZW1lbnRzLmZpbHRlcigoaXRlbSkgPT4gUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShpdGVtKSk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGluZXNbMF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RHJhd0VsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50LCBpc1N0cmljdDogYm9vbGVhbiA9IHRydWUpID0+IHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBib2FyZC5nZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgcG9pbnQgPSByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBlbGVtZW50KSB8fCBwb2ludDtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChpc0hpdEVkZ2VPZlNoYXBlKGJvYXJkLCBlbGVtZW50LCBwb2ludCwgSElUX0RJU1RBTkNFX0JVRkZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZ2luZSA9IGdldEVuZ2luZShnZXRFbGVtZW50U2hhcGUoZWxlbWVudCkpO1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGV4dENsaWVudCwgcG9pbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWlzU3RyaWN0ICYmIGlzRW1wdHlUZXh0RWxlbWVudChlbGVtZW50KSAmJiAhaXNGaWxsZWREcmF3RWxlbWVudChib2FyZCwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0hpdFRleHQgPSBpc0hpdEVsZW1lbnRUZXh0KGVsZW1lbnQsIHBvaW50KTtcbiAgICAgICAgcmV0dXJuIGlzSGl0VGV4dCB8fCBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUoY2xpZW50LCBwb2ludCk7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0hpdEFycm93TGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRWZWN0b3JMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RWRnZU9mU2hhcGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50LCBwb2ludDogUG9pbnQsIGhpdERpc3RhbmNlQnVmZmVyOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZWFyZXN0UG9pbnQgPSBnZXROZWFyZXN0UG9pbnQoZWxlbWVudCwgcG9pbnQpO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChuZWFyZXN0UG9pbnRbMF0sIG5lYXJlc3RQb2ludFsxXSwgcG9pbnRbMF0sIHBvaW50WzFdKTtcbiAgICByZXR1cm4gZGlzdGFuY2UgPD0gaGl0RGlzdGFuY2VCdWZmZXI7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJbnNpZGVPZlNoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50LCBoaXREaXN0YW5jZUJ1ZmZlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKSwgaGl0RGlzdGFuY2VCdWZmZXIpO1xuICAgIHJldHVybiBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKS5pc0luc2lkZVBvaW50KGNsaWVudCwgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RWxlbWVudEluc2lkZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBib2FyZC5nZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgcG9pbnQgPSByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBlbGVtZW50KSB8fCBwb2ludDtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpICYmICFQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnlCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGVuZ2luZSA9IGdldEVuZ2luZShnZXRFbGVtZW50U2hhcGUoZWxlbWVudCkpO1xuICAgICAgICBjb25zdCBpc0hpdEluc2lkZSA9IGVuZ2luZS5pc0luc2lkZVBvaW50KHJlY3RhbmdsZSEsIHBvaW50KTtcbiAgICAgICAgaWYgKGlzSGl0SW5zaWRlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNIaXRJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBpc0hpdFRleHQgPSBpc0hpdEVsZW1lbnRUZXh0KGVsZW1lbnQsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdFRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNIaXRUZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUoY2xpZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0QXJyb3dMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNWZWN0b3JMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0hpdFZlY3RvckxpbmUoYm9hcmQsIGVsZW1lbnQsIHBvaW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iXX0=
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBR2Ysa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixpQ0FBaUMsRUFDakMsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxXQUFXLEVBS1gsZ0JBQWdCLEVBSW5CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFP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O1FBQzVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEUsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFNlbGVjdGlvbixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGlzTGluZUhpdFJlY3RhbmdsZSxcbiAgICBQb2ludCxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgSElUX0RJU1RBTkNFX0JVRkZFUixcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50LFxuICAgIGlzUG9pbnRJblBvbHlnb24sXG4gICAgcm90YXRlUG9pbnRzQnlBbmdsZSxcbiAgICBjcmVhdGVEZWJ1Z0dlbmVyYXRvcixcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRBcmMsXG4gICAgZ2V0RWxsaXBzZUFyY0NlbnRlclxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQge1xuICAgIEJhc2ljU2hhcGVzLFxuICAgIEdlb21ldHJ5U2hhcGVzLFxuICAgIFBsYWl0QXJyb3dMaW5lLFxuICAgIFBsYWl0Q29tbW9uR2VvbWV0cnksXG4gICAgUGxhaXRDdXN0b21HZW9tZXRyeSxcbiAgICBQbGFpdERyYXdFbGVtZW50LFxuICAgIFBsYWl0R2VvbWV0cnksXG4gICAgUGxhaXRTaGFwZUVsZW1lbnQsXG4gICAgUGxhaXRWZWN0b3JMaW5lXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50IH0gZnJvbSAnLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRBcnJvd0xpbmVQb2ludHMgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBnZXRGaWxsQnlFbGVtZW50IH0gZnJvbSAnLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IGdldEhpdEFycm93TGluZVRleHRJbmRleCB9IGZyb20gJy4vcG9zaXRpb24vYXJyb3ctbGluZSc7XG5pbXBvcnQgeyBnZXRUZXh0UmVjdGFuZ2xlLCBpc0Nsb3NlZEN1c3RvbUdlb21ldHJ5LCBpc0Nsb3NlZERyYXdFbGVtZW50LCBpc0Nsb3NlZFBvaW50cywgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgaXNNdWx0aXBsZVRleHRHZW9tZXRyeSB9IGZyb20gJy4vbXVsdGktdGV4dC1nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRGaXJzdFRleHRFZGl0b3IsIGlzRmlsbGVkLCBzb3J0RWxlbWVudHNCeUFyZWEgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldFZlY3RvckxpbmVQb2ludHMgfSBmcm9tICcuL3ZlY3Rvci1saW5lJztcbmltcG9ydCB7IEVkaXRvciwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGdlbmVyYXRlQ2xvdWRQYXRoIH0gZnJvbSAnLi4vZW5naW5lcy9iYXNpYy1zaGFwZXMvY2xvdWQnO1xuXG5leHBvcnQgY29uc3QgaXNUZXh0RXhjZWVkaW5nQm91bmRzID0gKGdlb21ldHJ5OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGdlb21ldHJ5LnBvaW50cyk7XG4gICAgaWYgKGdlb21ldHJ5LnRleHRIZWlnaHQgJiYgZ2VvbWV0cnkudGV4dEhlaWdodCA+IGNsaWVudC5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEFycm93TGluZVRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZ2V0SGl0QXJyb3dMaW5lVGV4dEluZGV4KGJvYXJkLCBlbGVtZW50LCBwb2ludCkgIT09IC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0UG9seUxpbmUgPSAocGF0aFBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBhdGhQb2ludHMsIHBvaW50KTtcbiAgICByZXR1cm4gZGlzdGFuY2UgPD0gSElUX0RJU1RBTkNFX0JVRkZFUjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEFycm93TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRBcnJvd0xpbmUsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHBvaW50cyA9IGdldEFycm93TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRBcnJvd0xpbmVUZXh0KGJvYXJkLCBlbGVtZW50IGFzIFBsYWl0QXJyb3dMaW5lLCBwb2ludCk7XG4gICAgcmV0dXJuIGlzSGl0VGV4dCB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0VmVjdG9yTGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRWZWN0b3JMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBwb2ludHMgPSBnZXRWZWN0b3JMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KSE7XG4gICAgaWYgKGlzQ2xvc2VkUG9pbnRzKGVsZW1lbnQucG9pbnRzKSkge1xuICAgICAgICByZXR1cm4gaXNQb2ludEluUG9seWdvbihwb2ludCwgcG9pbnRzKSB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdEVsZW1lbnRUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnksIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lPFBsYWl0Q29tbW9uR2VvbWV0cnk+KGVsZW1lbnQuc2hhcGUpO1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cztcbiAgICAgICAgcmV0dXJuIHRleHRzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSEoZWxlbWVudCwgeyBpZDogaXRlbS5pZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMocmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRleHRDbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXRSb3RhdGVkUG9pbnRzKHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyh0ZXh0Q2xpZW50KSwgZWxlbWVudC5hbmdsZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RWxlbWVudFRleHQgPSAoZWxlbWVudDogUGxhaXRDb21tb25HZW9tZXRyeSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lPFBsYWl0Q29tbW9uR2VvbWV0cnk+KGVsZW1lbnQuc2hhcGUpO1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cztcbiAgICAgICAgcmV0dXJuIHRleHRzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSEoZWxlbWVudCwgeyBpZDogaXRlbS5pZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0ZXh0Q2xpZW50LCBwb2ludCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlUZXh0RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdENvbW1vbkdlb21ldHJ5KSA9PiB7XG4gICAgaWYgKCFpc0RyYXdFbGVtZW50SW5jbHVkZVRleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVkaXRvciA9IGdldEZpcnN0VGV4dEVkaXRvcihlbGVtZW50KTtcbiAgICByZXR1cm4gRWRpdG9yLmlzRW1wdHkoZWRpdG9yLCBlZGl0b3IuY2hpbGRyZW5bMF0gYXMgRWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xuICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtzZWxlY3Rpb24uYW5jaG9yLCBzZWxlY3Rpb24uZm9jdXNdKTtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGlzSGl0RWxlbWVudCA9IGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQoYm9hcmQsIHJhbmdlUmVjdGFuZ2xlLCBlbGVtZW50KTtcbiAgICAgICAgaWYgKGlzSGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzRW1wdHlUZXh0RWxlbWVudChlbGVtZW50KSAmJiBpc1JlY3RhbmdsZUhpdEVsZW1lbnRUZXh0KGVsZW1lbnQsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRFbGVtZW50KGJvYXJkLCByYW5nZVJlY3RhbmdsZSwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0QXJyb3dMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShwb2ludHMsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0VmVjdG9yTGluZVBvaW50cyhib2FyZCwgZWxlbWVudCkhO1xuICAgICAgICByZXR1cm4gaXNMaW5lSGl0UmVjdGFuZ2xlKHBvaW50cywgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgZWxlbWVudDogUGxhaXRFbGVtZW50ICYgeyBwb2ludHM6IFBvaW50W10gfVxuKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXRSb3RhdGVkUG9pbnRzKHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhjbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50czogUG9pbnRbXSwgYW5nbGU6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGxldCByb3RhdGVkUG9pbnRzID0gcm90YXRlUG9pbnRzQnlBbmdsZShwb2ludHMsIGFuZ2xlKSB8fCBwb2ludHM7XG4gICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShyb3RhdGVkUG9pbnRzLCByZWN0YW5nbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogKFBsYWl0RHJhd0VsZW1lbnQgfCBQbGFpdEN1c3RvbUdlb21ldHJ5KVtdKSA9PiB7XG4gICAgbGV0IGZpcnN0RmlsbGVkRWxlbWVudCA9IGdldEZpcnN0RmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICBsZXQgZW5kSW5kZXggPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKGZpcnN0RmlsbGVkRWxlbWVudCkge1xuICAgICAgICBlbmRJbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZmlyc3RGaWxsZWRFbGVtZW50KSArIDE7XG4gICAgfVxuICAgIGNvbnN0IG5ld0VsZW1lbnRzID0gZWxlbWVudHMuc2xpY2UoMCwgZW5kSW5kZXgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRGaXJzdFRleHRPckxpbmVFbGVtZW50KG5ld0VsZW1lbnRzKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc29ydEVsZW1lbnRzID0gc29ydEVsZW1lbnRzQnlBcmVhKGJvYXJkLCBuZXdFbGVtZW50cywgJ2FzYycpO1xuICAgIHJldHVybiBzb3J0RWxlbWVudHNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RGaWxsZWREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IChQbGFpdERyYXdFbGVtZW50IHwgUGxhaXRDdXN0b21HZW9tZXRyeSlbXSkgPT4ge1xuICAgIGxldCBmaWxsZWRFbGVtZW50OiBQbGFpdEdlb21ldHJ5IHwgUGxhaXRDdXN0b21HZW9tZXRyeSB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICBpZiAoaXNDbG9zZWRDdXN0b21HZW9tZXRyeShib2FyZCwgZWxlbWVudCkgfHwgaXNDbG9zZWREcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZmlsbCA9IGdldEZpbGxCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGlzRmlsbGVkKGZpbGwpKSB7XG4gICAgICAgICAgICAgICAgZmlsbGVkRWxlbWVudCA9IGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsbGVkRWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZpbGxlZERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdERyYXdFbGVtZW50IHwgUGxhaXRDdXN0b21HZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiBnZXRGaXJzdEZpbGxlZERyYXdFbGVtZW50KGJvYXJkLCBbZWxlbWVudF0pICE9PSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0VGV4dE9yTGluZUVsZW1lbnQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGl0ZW0pKTtcbiAgICBpZiAodGV4dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0ZXh0c1swXTtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSBlbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoaXRlbSkpO1xuICAgIGlmIChsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxpbmVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGRlYnVnS2V5ID0gJ2RlYnVnOnBsYWl0OmhpdDpzaGFwZTplZGdlOnNhbXBsZS1wb2ludHMnO1xuY29uc3QgZGVidWdHZW5lcmF0b3IgPSBjcmVhdGVEZWJ1Z0dlbmVyYXRvcihkZWJ1Z0tleSk7XG5jb25zdCBzaGFwZXM6IEdlb21ldHJ5U2hhcGVzW10gPSBbQmFzaWNTaGFwZXMuY2xvdWRdO1xuXG5leHBvcnQgY29uc3QgaXNIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQsIGlzU3RyaWN0OiBib29sZWFuID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICBwb2ludCA9IHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQocG9pbnQsIGVsZW1lbnQpIHx8IHBvaW50O1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkgJiYgcmVjdGFuZ2xlKSB7XG4gICAgICAgIGlmIChkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgc2hhcGVzLmluY2x1ZGVzKGVsZW1lbnQuc2hhcGUpKSB7XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydFBvaW50LCBhcmNzIH0gPSBnZW5lcmF0ZUNsb3VkUGF0aChyZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW3N0YXJ0UG9pbnQsIC4uLmFyY3MubWFwKChhcmMpID0+IFthcmMuZW5kWCwgYXJjLmVuZFldKV0gYXMgUG9pbnRbXTtcbiAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmRyYXdDaXJjbGVzKGJvYXJkLCBwb2ludHMsIDUsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICAgICAgbGV0IG5lYXJlc3RQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdGFydCA9IHN0YXJ0UG9pbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyYyBvZiBhcmNzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJjTmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjKHBvaW50LCBjdXJyZW50U3RhcnQsIGFyYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgYXJjTmVhcmVzdFBvaW50WzBdLCBhcmNOZWFyZXN0UG9pbnRbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyIH0gPSBnZXRFbGxpcHNlQXJjQ2VudGVyKGN1cnJlbnRTdGFydCwgYXJjKTtcbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW2NlbnRlcl0sIDgsIGZhbHNlLCB7IGZpbGw6ICd5ZWxsb3cnIH0pO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IGFyY05lYXJlc3RQb2ludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXJ0ID0gW2FyYy5lbmRYLCBhcmMuZW5kWV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW3BvaW50XSwgMTIsIGZhbHNlLCB7IGZpbGw6ICdibGFjaycsIHN0cm9rZTogJ2JsYWNrJyB9KTtcbiAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmRyYXdDaXJjbGVzKGJvYXJkLCBbbmVhcmVzdFBvaW50XSwgMTIsIGZhbHNlLCB7IGZpbGw6ICdncmVlbicsIHN0cm9rZTogJ2dyZWVuJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIaXRFZGdlT2ZTaGFwZShib2FyZCwgZWxlbWVudCwgcG9pbnQsIEhJVF9ESVNUQU5DRV9CVUZGRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFpc1N0cmljdCAmJiBpc0VtcHR5VGV4dEVsZW1lbnQoZWxlbWVudCkgJiYgIWlzRmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRFbGVtZW50VGV4dChlbGVtZW50LCBwb2ludCk7XG4gICAgICAgIHJldHVybiBpc0hpdFRleHQgfHwgZW5naW5lLmlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlISwgcG9pbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKGNsaWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRBcnJvd0xpbmUoYm9hcmQsIGVsZW1lbnQsIHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0VmVjdG9yTGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVkZ2VPZlNoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50LCBoaXREaXN0YW5jZUJ1ZmZlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGVsZW1lbnQsIHBvaW50KTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQobmVhcmVzdFBvaW50WzBdLCBuZWFyZXN0UG9pbnRbMV0sIHBvaW50WzBdLCBwb2ludFsxXSk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIDw9IGhpdERpc3RhbmNlQnVmZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW5zaWRlT2ZTaGFwZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsIHBvaW50OiBQb2ludCwgaGl0RGlzdGFuY2VCdWZmZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyksIGhpdERpc3RhbmNlQnVmZmVyKTtcbiAgICByZXR1cm4gZ2V0RW5naW5lKGdldEVsZW1lbnRTaGFwZShlbGVtZW50KSkuaXNJbnNpZGVQb2ludChjbGllbnQsIHBvaW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVsZW1lbnRJbnNpZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIHBvaW50ID0gcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChwb2ludCwgZWxlbWVudCkgfHwgcG9pbnQ7XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSAmJiAhUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgaXNIaXRJbnNpZGUgPSBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgIGlmIChpc0hpdEluc2lkZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0SW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRFbGVtZW50VGV4dChlbGVtZW50LCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSGl0VGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKGNsaWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0hpdEFycm93TGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRWZWN0b3JMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
|