@plait/draw 0.75.0-next.9 → 0.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/engines/basic-shapes/cloud.d.ts +2 -12
- package/engines/uml/provided-interface.d.ts +0 -5
- package/esm2022/engines/basic-shapes/cloud.mjs +10 -11
- package/esm2022/engines/flowchart/note-curly-left.mjs +48 -12
- package/esm2022/engines/flowchart/note-curly-right.mjs +49 -10
- package/esm2022/engines/uml/actor.mjs +61 -44
- package/esm2022/engines/uml/assembly.mjs +72 -23
- package/esm2022/engines/uml/component.mjs +78 -33
- package/esm2022/engines/uml/deletion.mjs +28 -6
- package/esm2022/engines/uml/package.mjs +51 -21
- package/esm2022/engines/uml/provided-interface.mjs +53 -26
- package/esm2022/engines/uml/required-interface.mjs +51 -7
- package/esm2022/plugins/with-arrow-line-text-move.mjs +2 -2
- package/esm2022/plugins/with-table.mjs +3 -2
- package/esm2022/utils/hit.mjs +5 -5
- package/fesm2022/plait-draw.mjs +489 -178
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/package.json +1 -1
package/esm2022/utils/hit.mjs
CHANGED
|
@@ -23,7 +23,7 @@ export const isHitArrowLineText = (board, element, point) => {
|
|
|
23
23
|
return getHitArrowLineTextIndex(board, element, point) !== -1;
|
|
24
24
|
};
|
|
25
25
|
export const isHitPolyLine = (pathPoints, point) => {
|
|
26
|
-
const distance = distanceBetweenPointAndSegments(
|
|
26
|
+
const distance = distanceBetweenPointAndSegments(point, pathPoints);
|
|
27
27
|
return distance <= HIT_DISTANCE_BUFFER;
|
|
28
28
|
};
|
|
29
29
|
export const isHitArrowLine = (board, element, point) => {
|
|
@@ -156,13 +156,13 @@ export const isHitDrawElement = (board, element, point, isStrict = true) => {
|
|
|
156
156
|
if (PlaitDrawElement.isGeometry(element) && rectangle) {
|
|
157
157
|
if (debugGenerator.isDebug() && shapes.includes(element.shape)) {
|
|
158
158
|
debugGenerator.clear();
|
|
159
|
-
const { startPoint,
|
|
160
|
-
const points = [startPoint, ...
|
|
159
|
+
const { startPoint, arcCommands } = generateCloudPath(rectangle);
|
|
160
|
+
const points = [startPoint, ...arcCommands.map((arc) => [arc.endX, arc.endY])];
|
|
161
161
|
debugGenerator.drawCircles(board, points, 5, false);
|
|
162
162
|
let minDistance = Infinity;
|
|
163
163
|
let nearestPoint = point;
|
|
164
164
|
let currentStart = startPoint;
|
|
165
|
-
for (const arc of
|
|
165
|
+
for (const arc of arcCommands) {
|
|
166
166
|
const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arc);
|
|
167
167
|
const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);
|
|
168
168
|
const { center } = getEllipseArcCenter(currentStart, arc);
|
|
@@ -239,4 +239,4 @@ export const isHitElementInside = (board, element, point) => {
|
|
|
239
239
|
}
|
|
240
240
|
return null;
|
|
241
241
|
};
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBR2Ysa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixpQ0FBaUMsRUFDakMsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxXQUFXLEVBS1gsZ0JBQWdCLEVBSW5CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFP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O1FBQzVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEUsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFNlbGVjdGlvbixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGlzTGluZUhpdFJlY3RhbmdsZSxcbiAgICBQb2ludCxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgSElUX0RJU1RBTkNFX0JVRkZFUixcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50LFxuICAgIGlzUG9pbnRJblBvbHlnb24sXG4gICAgcm90YXRlUG9pbnRzQnlBbmdsZSxcbiAgICBjcmVhdGVEZWJ1Z0dlbmVyYXRvcixcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRBcmMsXG4gICAgZ2V0RWxsaXBzZUFyY0NlbnRlclxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQge1xuICAgIEJhc2ljU2hhcGVzLFxuICAgIEdlb21ldHJ5U2hhcGVzLFxuICAgIFBsYWl0QXJyb3dMaW5lLFxuICAgIFBsYWl0Q29tbW9uR2VvbWV0cnksXG4gICAgUGxhaXRDdXN0b21HZW9tZXRyeSxcbiAgICBQbGFpdERyYXdFbGVtZW50LFxuICAgIFBsYWl0R2VvbWV0cnksXG4gICAgUGxhaXRTaGFwZUVsZW1lbnQsXG4gICAgUGxhaXRWZWN0b3JMaW5lXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50IH0gZnJvbSAnLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRBcnJvd0xpbmVQb2ludHMgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBnZXRGaWxsQnlFbGVtZW50IH0gZnJvbSAnLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IGdldEhpdEFycm93TGluZVRleHRJbmRleCB9IGZyb20gJy4vcG9zaXRpb24vYXJyb3ctbGluZSc7XG5pbXBvcnQgeyBnZXRUZXh0UmVjdGFuZ2xlLCBpc0Nsb3NlZEN1c3RvbUdlb21ldHJ5LCBpc0Nsb3NlZERyYXdFbGVtZW50LCBpc0Nsb3NlZFBvaW50cywgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgaXNNdWx0aXBsZVRleHRHZW9tZXRyeSB9IGZyb20gJy4vbXVsdGktdGV4dC1nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRGaXJzdFRleHRFZGl0b3IsIGlzRmlsbGVkLCBzb3J0RWxlbWVudHNCeUFyZWEgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldFZlY3RvckxpbmVQb2ludHMgfSBmcm9tICcuL3ZlY3Rvci1saW5lJztcbmltcG9ydCB7IEVkaXRvciwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGdlbmVyYXRlQ2xvdWRQYXRoIH0gZnJvbSAnLi4vZW5naW5lcy9iYXNpYy1zaGFwZXMvY2xvdWQnO1xuXG5leHBvcnQgY29uc3QgaXNUZXh0RXhjZWVkaW5nQm91bmRzID0gKGdlb21ldHJ5OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGdlb21ldHJ5LnBvaW50cyk7XG4gICAgaWYgKGdlb21ldHJ5LnRleHRIZWlnaHQgJiYgZ2VvbWV0cnkudGV4dEhlaWdodCA+IGNsaWVudC5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEFycm93TGluZVRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZ2V0SGl0QXJyb3dMaW5lVGV4dEluZGV4KGJvYXJkLCBlbGVtZW50LCBwb2ludCkgIT09IC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0UG9seUxpbmUgPSAocGF0aFBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBhdGhQb2ludHMsIHBvaW50KTtcbiAgICByZXR1cm4gZGlzdGFuY2UgPD0gSElUX0RJU1RBTkNFX0JVRkZFUjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEFycm93TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRBcnJvd0xpbmUsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHBvaW50cyA9IGdldEFycm93TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRBcnJvd0xpbmVUZXh0KGJvYXJkLCBlbGVtZW50IGFzIFBsYWl0QXJyb3dMaW5lLCBwb2ludCk7XG4gICAgcmV0dXJuIGlzSGl0VGV4dCB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0VmVjdG9yTGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRWZWN0b3JMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBwb2ludHMgPSBnZXRWZWN0b3JMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KSE7XG4gICAgaWYgKGlzQ2xvc2VkUG9pbnRzKGVsZW1lbnQucG9pbnRzKSkge1xuICAgICAgICByZXR1cm4gaXNQb2ludEluUG9seWdvbihwb2ludCwgcG9pbnRzKSB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdEVsZW1lbnRUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnksIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lPFBsYWl0Q29tbW9uR2VvbWV0cnk+KGVsZW1lbnQuc2hhcGUpO1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cztcbiAgICAgICAgcmV0dXJuIHRleHRzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSEoZWxlbWVudCwgeyBpZDogaXRlbS5pZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMocmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRleHRDbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXRSb3RhdGVkUG9pbnRzKHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyh0ZXh0Q2xpZW50KSwgZWxlbWVudC5hbmdsZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RWxlbWVudFRleHQgPSAoZWxlbWVudDogUGxhaXRDb21tb25HZW9tZXRyeSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lPFBsYWl0Q29tbW9uR2VvbWV0cnk+KGVsZW1lbnQuc2hhcGUpO1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cztcbiAgICAgICAgcmV0dXJuIHRleHRzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSEoZWxlbWVudCwgeyBpZDogaXRlbS5pZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0ZXh0Q2xpZW50LCBwb2ludCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlUZXh0RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdENvbW1vbkdlb21ldHJ5KSA9PiB7XG4gICAgaWYgKCFpc0RyYXdFbGVtZW50SW5jbHVkZVRleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVkaXRvciA9IGdldEZpcnN0VGV4dEVkaXRvcihlbGVtZW50KTtcbiAgICByZXR1cm4gRWRpdG9yLmlzRW1wdHkoZWRpdG9yLCBlZGl0b3IuY2hpbGRyZW5bMF0gYXMgRWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xuICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtzZWxlY3Rpb24uYW5jaG9yLCBzZWxlY3Rpb24uZm9jdXNdKTtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGlzSGl0RWxlbWVudCA9IGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQoYm9hcmQsIHJhbmdlUmVjdGFuZ2xlLCBlbGVtZW50KTtcbiAgICAgICAgaWYgKGlzSGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzRW1wdHlUZXh0RWxlbWVudChlbGVtZW50KSAmJiBpc1JlY3RhbmdsZUhpdEVsZW1lbnRUZXh0KGVsZW1lbnQsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRFbGVtZW50KGJvYXJkLCByYW5nZVJlY3RhbmdsZSwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0QXJyb3dMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShwb2ludHMsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0VmVjdG9yTGluZVBvaW50cyhib2FyZCwgZWxlbWVudCkhO1xuICAgICAgICByZXR1cm4gaXNMaW5lSGl0UmVjdGFuZ2xlKHBvaW50cywgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgZWxlbWVudDogUGxhaXRFbGVtZW50ICYgeyBwb2ludHM6IFBvaW50W10gfVxuKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXRSb3RhdGVkUG9pbnRzKHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhjbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50czogUG9pbnRbXSwgYW5nbGU6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGxldCByb3RhdGVkUG9pbnRzID0gcm90YXRlUG9pbnRzQnlBbmdsZShwb2ludHMsIGFuZ2xlKSB8fCBwb2ludHM7XG4gICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShyb3RhdGVkUG9pbnRzLCByZWN0YW5nbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogKFBsYWl0RHJhd0VsZW1lbnQgfCBQbGFpdEN1c3RvbUdlb21ldHJ5KVtdKSA9PiB7XG4gICAgbGV0IGZpcnN0RmlsbGVkRWxlbWVudCA9IGdldEZpcnN0RmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICBsZXQgZW5kSW5kZXggPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKGZpcnN0RmlsbGVkRWxlbWVudCkge1xuICAgICAgICBlbmRJbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZmlyc3RGaWxsZWRFbGVtZW50KSArIDE7XG4gICAgfVxuICAgIGNvbnN0IG5ld0VsZW1lbnRzID0gZWxlbWVudHMuc2xpY2UoMCwgZW5kSW5kZXgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRGaXJzdFRleHRPckxpbmVFbGVtZW50KG5ld0VsZW1lbnRzKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc29ydEVsZW1lbnRzID0gc29ydEVsZW1lbnRzQnlBcmVhKGJvYXJkLCBuZXdFbGVtZW50cywgJ2FzYycpO1xuICAgIHJldHVybiBzb3J0RWxlbWVudHNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RGaWxsZWREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IChQbGFpdERyYXdFbGVtZW50IHwgUGxhaXRDdXN0b21HZW9tZXRyeSlbXSkgPT4ge1xuICAgIGxldCBmaWxsZWRFbGVtZW50OiBQbGFpdEdlb21ldHJ5IHwgUGxhaXRDdXN0b21HZW9tZXRyeSB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICBpZiAoaXNDbG9zZWRDdXN0b21HZW9tZXRyeShib2FyZCwgZWxlbWVudCkgfHwgaXNDbG9zZWREcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZmlsbCA9IGdldEZpbGxCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGlzRmlsbGVkKGZpbGwpKSB7XG4gICAgICAgICAgICAgICAgZmlsbGVkRWxlbWVudCA9IGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsbGVkRWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZpbGxlZERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdERyYXdFbGVtZW50IHwgUGxhaXRDdXN0b21HZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiBnZXRGaXJzdEZpbGxlZERyYXdFbGVtZW50KGJvYXJkLCBbZWxlbWVudF0pICE9PSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0VGV4dE9yTGluZUVsZW1lbnQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGl0ZW0pKTtcbiAgICBpZiAodGV4dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0ZXh0c1swXTtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSBlbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoaXRlbSkpO1xuICAgIGlmIChsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxpbmVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGRlYnVnS2V5ID0gJ2RlYnVnOnBsYWl0OmhpdDpzaGFwZTplZGdlOnNhbXBsZS1wb2ludHMnO1xuY29uc3QgZGVidWdHZW5lcmF0b3IgPSBjcmVhdGVEZWJ1Z0dlbmVyYXRvcihkZWJ1Z0tleSk7XG5jb25zdCBzaGFwZXM6IEdlb21ldHJ5U2hhcGVzW10gPSBbQmFzaWNTaGFwZXMuY2xvdWRdO1xuXG5leHBvcnQgY29uc3QgaXNIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQsIGlzU3RyaWN0OiBib29sZWFuID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICBwb2ludCA9IHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQocG9pbnQsIGVsZW1lbnQpIHx8IHBvaW50O1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkgJiYgcmVjdGFuZ2xlKSB7XG4gICAgICAgIGlmIChkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgc2hhcGVzLmluY2x1ZGVzKGVsZW1lbnQuc2hhcGUpKSB7XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydFBvaW50LCBhcmNzIH0gPSBnZW5lcmF0ZUNsb3VkUGF0aChyZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW3N0YXJ0UG9pbnQsIC4uLmFyY3MubWFwKChhcmMpID0+IFthcmMuZW5kWCwgYXJjLmVuZFldKV0gYXMgUG9pbnRbXTtcbiAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmRyYXdDaXJjbGVzKGJvYXJkLCBwb2ludHMsIDUsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICAgICAgbGV0IG5lYXJlc3RQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdGFydCA9IHN0YXJ0UG9pbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyYyBvZiBhcmNzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJjTmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjKHBvaW50LCBjdXJyZW50U3RhcnQsIGFyYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgYXJjTmVhcmVzdFBvaW50WzBdLCBhcmNOZWFyZXN0UG9pbnRbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyIH0gPSBnZXRFbGxpcHNlQXJjQ2VudGVyKGN1cnJlbnRTdGFydCwgYXJjKTtcbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW2NlbnRlcl0sIDgsIGZhbHNlLCB7IGZpbGw6ICd5ZWxsb3cnIH0pO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IGFyY05lYXJlc3RQb2ludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXJ0ID0gW2FyYy5lbmRYLCBhcmMuZW5kWV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW3BvaW50XSwgMTIsIGZhbHNlLCB7IGZpbGw6ICdibGFjaycsIHN0cm9rZTogJ2JsYWNrJyB9KTtcbiAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmRyYXdDaXJjbGVzKGJvYXJkLCBbbmVhcmVzdFBvaW50XSwgMTIsIGZhbHNlLCB7IGZpbGw6ICdncmVlbicsIHN0cm9rZTogJ2dyZWVuJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIaXRFZGdlT2ZTaGFwZShib2FyZCwgZWxlbWVudCwgcG9pbnQsIEhJVF9ESVNUQU5DRV9CVUZGRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFpc1N0cmljdCAmJiBpc0VtcHR5VGV4dEVsZW1lbnQoZWxlbWVudCkgJiYgIWlzRmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRFbGVtZW50VGV4dChlbGVtZW50LCBwb2ludCk7XG4gICAgICAgIHJldHVybiBpc0hpdFRleHQgfHwgZW5naW5lLmlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlISwgcG9pbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKGNsaWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRBcnJvd0xpbmUoYm9hcmQsIGVsZW1lbnQsIHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0VmVjdG9yTGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVkZ2VPZlNoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50LCBoaXREaXN0YW5jZUJ1ZmZlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGVsZW1lbnQsIHBvaW50KTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQobmVhcmVzdFBvaW50WzBdLCBuZWFyZXN0UG9pbnRbMV0sIHBvaW50WzBdLCBwb2ludFsxXSk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIDw9IGhpdERpc3RhbmNlQnVmZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW5zaWRlT2ZTaGFwZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsIHBvaW50OiBQb2ludCwgaGl0RGlzdGFuY2VCdWZmZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyksIGhpdERpc3RhbmNlQnVmZmVyKTtcbiAgICByZXR1cm4gZ2V0RW5naW5lKGdldEVsZW1lbnRTaGFwZShlbGVtZW50KSkuaXNJbnNpZGVQb2ludChjbGllbnQsIHBvaW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVsZW1lbnRJbnNpZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIHBvaW50ID0gcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChwb2ludCwgZWxlbWVudCkgfHwgcG9pbnQ7XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSAmJiAhUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgaXNIaXRJbnNpZGUgPSBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgIGlmIChpc0hpdEluc2lkZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0SW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRFbGVtZW50VGV4dChlbGVtZW50LCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSGl0VGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKGNsaWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0hpdEFycm93TGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRWZWN0b3JMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBR2Ysa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixpQ0FBaUMsRUFDakMsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxXQUFXLEVBS1gsZ0JBQWdCLEVBSW5CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFP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O1FBQzVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEUsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFNlbGVjdGlvbixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGlzTGluZUhpdFJlY3RhbmdsZSxcbiAgICBQb2ludCxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgSElUX0RJU1RBTkNFX0JVRkZFUixcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50LFxuICAgIGlzUG9pbnRJblBvbHlnb24sXG4gICAgcm90YXRlUG9pbnRzQnlBbmdsZSxcbiAgICBjcmVhdGVEZWJ1Z0dlbmVyYXRvcixcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRBcmMsXG4gICAgZ2V0RWxsaXBzZUFyY0NlbnRlclxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQge1xuICAgIEJhc2ljU2hhcGVzLFxuICAgIEdlb21ldHJ5U2hhcGVzLFxuICAgIFBsYWl0QXJyb3dMaW5lLFxuICAgIFBsYWl0Q29tbW9uR2VvbWV0cnksXG4gICAgUGxhaXRDdXN0b21HZW9tZXRyeSxcbiAgICBQbGFpdERyYXdFbGVtZW50LFxuICAgIFBsYWl0R2VvbWV0cnksXG4gICAgUGxhaXRTaGFwZUVsZW1lbnQsXG4gICAgUGxhaXRWZWN0b3JMaW5lXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50IH0gZnJvbSAnLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRBcnJvd0xpbmVQb2ludHMgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBnZXRGaWxsQnlFbGVtZW50IH0gZnJvbSAnLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IGdldEhpdEFycm93TGluZVRleHRJbmRleCB9IGZyb20gJy4vcG9zaXRpb24vYXJyb3ctbGluZSc7XG5pbXBvcnQgeyBnZXRUZXh0UmVjdGFuZ2xlLCBpc0Nsb3NlZEN1c3RvbUdlb21ldHJ5LCBpc0Nsb3NlZERyYXdFbGVtZW50LCBpc0Nsb3NlZFBvaW50cywgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgaXNNdWx0aXBsZVRleHRHZW9tZXRyeSB9IGZyb20gJy4vbXVsdGktdGV4dC1nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRGaXJzdFRleHRFZGl0b3IsIGlzRmlsbGVkLCBzb3J0RWxlbWVudHNCeUFyZWEgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldFZlY3RvckxpbmVQb2ludHMgfSBmcm9tICcuL3ZlY3Rvci1saW5lJztcbmltcG9ydCB7IEVkaXRvciwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGdlbmVyYXRlQ2xvdWRQYXRoIH0gZnJvbSAnLi4vZW5naW5lcy9iYXNpYy1zaGFwZXMvY2xvdWQnO1xuXG5leHBvcnQgY29uc3QgaXNUZXh0RXhjZWVkaW5nQm91bmRzID0gKGdlb21ldHJ5OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGdlb21ldHJ5LnBvaW50cyk7XG4gICAgaWYgKGdlb21ldHJ5LnRleHRIZWlnaHQgJiYgZ2VvbWV0cnkudGV4dEhlaWdodCA+IGNsaWVudC5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEFycm93TGluZVRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZ2V0SGl0QXJyb3dMaW5lVGV4dEluZGV4KGJvYXJkLCBlbGVtZW50LCBwb2ludCkgIT09IC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0UG9seUxpbmUgPSAocGF0aFBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBwYXRoUG9pbnRzKTtcbiAgICByZXR1cm4gZGlzdGFuY2UgPD0gSElUX0RJU1RBTkNFX0JVRkZFUjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEFycm93TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRBcnJvd0xpbmUsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHBvaW50cyA9IGdldEFycm93TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRBcnJvd0xpbmVUZXh0KGJvYXJkLCBlbGVtZW50IGFzIFBsYWl0QXJyb3dMaW5lLCBwb2ludCk7XG4gICAgcmV0dXJuIGlzSGl0VGV4dCB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0VmVjdG9yTGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRWZWN0b3JMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBwb2ludHMgPSBnZXRWZWN0b3JMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KSE7XG4gICAgaWYgKGlzQ2xvc2VkUG9pbnRzKGVsZW1lbnQucG9pbnRzKSkge1xuICAgICAgICByZXR1cm4gaXNQb2ludEluUG9seWdvbihwb2ludCwgcG9pbnRzKSB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdEVsZW1lbnRUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnksIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lPFBsYWl0Q29tbW9uR2VvbWV0cnk+KGVsZW1lbnQuc2hhcGUpO1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cztcbiAgICAgICAgcmV0dXJuIHRleHRzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSEoZWxlbWVudCwgeyBpZDogaXRlbS5pZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMocmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRleHRDbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXRSb3RhdGVkUG9pbnRzKHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyh0ZXh0Q2xpZW50KSwgZWxlbWVudC5hbmdsZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RWxlbWVudFRleHQgPSAoZWxlbWVudDogUGxhaXRDb21tb25HZW9tZXRyeSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lPFBsYWl0Q29tbW9uR2VvbWV0cnk+KGVsZW1lbnQuc2hhcGUpO1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cztcbiAgICAgICAgcmV0dXJuIHRleHRzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSEoZWxlbWVudCwgeyBpZDogaXRlbS5pZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0ZXh0Q2xpZW50LCBwb2ludCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlUZXh0RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdENvbW1vbkdlb21ldHJ5KSA9PiB7XG4gICAgaWYgKCFpc0RyYXdFbGVtZW50SW5jbHVkZVRleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVkaXRvciA9IGdldEZpcnN0VGV4dEVkaXRvcihlbGVtZW50KTtcbiAgICByZXR1cm4gRWRpdG9yLmlzRW1wdHkoZWRpdG9yLCBlZGl0b3IuY2hpbGRyZW5bMF0gYXMgRWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xuICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtzZWxlY3Rpb24uYW5jaG9yLCBzZWxlY3Rpb24uZm9jdXNdKTtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGlzSGl0RWxlbWVudCA9IGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQoYm9hcmQsIHJhbmdlUmVjdGFuZ2xlLCBlbGVtZW50KTtcbiAgICAgICAgaWYgKGlzSGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzRW1wdHlUZXh0RWxlbWVudChlbGVtZW50KSAmJiBpc1JlY3RhbmdsZUhpdEVsZW1lbnRUZXh0KGVsZW1lbnQsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRFbGVtZW50KGJvYXJkLCByYW5nZVJlY3RhbmdsZSwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0QXJyb3dMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShwb2ludHMsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0VmVjdG9yTGluZVBvaW50cyhib2FyZCwgZWxlbWVudCkhO1xuICAgICAgICByZXR1cm4gaXNMaW5lSGl0UmVjdGFuZ2xlKHBvaW50cywgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjdGFuZ2xlSGl0Um90YXRlZEVsZW1lbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgZWxlbWVudDogUGxhaXRFbGVtZW50ICYgeyBwb2ludHM6IFBvaW50W10gfVxuKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXRSb3RhdGVkUG9pbnRzKHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhjbGllbnQpLCBlbGVtZW50LmFuZ2xlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdFJvdGF0ZWRQb2ludHMgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50czogUG9pbnRbXSwgYW5nbGU6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGxldCByb3RhdGVkUG9pbnRzID0gcm90YXRlUG9pbnRzQnlBbmdsZShwb2ludHMsIGFuZ2xlKSB8fCBwb2ludHM7XG4gICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShyb3RhdGVkUG9pbnRzLCByZWN0YW5nbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogKFBsYWl0RHJhd0VsZW1lbnQgfCBQbGFpdEN1c3RvbUdlb21ldHJ5KVtdKSA9PiB7XG4gICAgbGV0IGZpcnN0RmlsbGVkRWxlbWVudCA9IGdldEZpcnN0RmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICBsZXQgZW5kSW5kZXggPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKGZpcnN0RmlsbGVkRWxlbWVudCkge1xuICAgICAgICBlbmRJbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZmlyc3RGaWxsZWRFbGVtZW50KSArIDE7XG4gICAgfVxuICAgIGNvbnN0IG5ld0VsZW1lbnRzID0gZWxlbWVudHMuc2xpY2UoMCwgZW5kSW5kZXgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRGaXJzdFRleHRPckxpbmVFbGVtZW50KG5ld0VsZW1lbnRzKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc29ydEVsZW1lbnRzID0gc29ydEVsZW1lbnRzQnlBcmVhKGJvYXJkLCBuZXdFbGVtZW50cywgJ2FzYycpO1xuICAgIHJldHVybiBzb3J0RWxlbWVudHNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RGaWxsZWREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IChQbGFpdERyYXdFbGVtZW50IHwgUGxhaXRDdXN0b21HZW9tZXRyeSlbXSkgPT4ge1xuICAgIGxldCBmaWxsZWRFbGVtZW50OiBQbGFpdEdlb21ldHJ5IHwgUGxhaXRDdXN0b21HZW9tZXRyeSB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICBpZiAoaXNDbG9zZWRDdXN0b21HZW9tZXRyeShib2FyZCwgZWxlbWVudCkgfHwgaXNDbG9zZWREcmF3RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZmlsbCA9IGdldEZpbGxCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGlzRmlsbGVkKGZpbGwpKSB7XG4gICAgICAgICAgICAgICAgZmlsbGVkRWxlbWVudCA9IGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsbGVkRWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZpbGxlZERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdERyYXdFbGVtZW50IHwgUGxhaXRDdXN0b21HZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiBnZXRGaXJzdEZpbGxlZERyYXdFbGVtZW50KGJvYXJkLCBbZWxlbWVudF0pICE9PSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0VGV4dE9yTGluZUVsZW1lbnQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGl0ZW0pKTtcbiAgICBpZiAodGV4dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0ZXh0c1swXTtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSBlbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoaXRlbSkpO1xuICAgIGlmIChsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxpbmVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGRlYnVnS2V5ID0gJ2RlYnVnOnBsYWl0OmhpdDpzaGFwZTplZGdlOnNhbXBsZS1wb2ludHMnO1xuY29uc3QgZGVidWdHZW5lcmF0b3IgPSBjcmVhdGVEZWJ1Z0dlbmVyYXRvcihkZWJ1Z0tleSk7XG5jb25zdCBzaGFwZXM6IEdlb21ldHJ5U2hhcGVzW10gPSBbQmFzaWNTaGFwZXMuY2xvdWRdO1xuXG5leHBvcnQgY29uc3QgaXNIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQsIGlzU3RyaWN0OiBib29sZWFuID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICBwb2ludCA9IHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQocG9pbnQsIGVsZW1lbnQpIHx8IHBvaW50O1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkgJiYgcmVjdGFuZ2xlKSB7XG4gICAgICAgIGlmIChkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgc2hhcGVzLmluY2x1ZGVzKGVsZW1lbnQuc2hhcGUpKSB7XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydFBvaW50LCBhcmNDb21tYW5kcyB9ID0gZ2VuZXJhdGVDbG91ZFBhdGgocmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IFtzdGFydFBvaW50LCAuLi5hcmNDb21tYW5kcy5tYXAoKGFyYykgPT4gW2FyYy5lbmRYLCBhcmMuZW5kWV0pXSBhcyBQb2ludFtdO1xuICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuZHJhd0NpcmNsZXMoYm9hcmQsIHBvaW50cywgNSwgZmFsc2UpO1xuICAgICAgICAgICAgbGV0IG1pbkRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgICAgICAgICBsZXQgbmVhcmVzdFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBsZXQgY3VycmVudFN0YXJ0ID0gc3RhcnRQb2ludDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJjIG9mIGFyY0NvbW1hbmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJjTmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjKHBvaW50LCBjdXJyZW50U3RhcnQsIGFyYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgYXJjTmVhcmVzdFBvaW50WzBdLCBhcmNOZWFyZXN0UG9pbnRbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyIH0gPSBnZXRFbGxpcHNlQXJjQ2VudGVyKGN1cnJlbnRTdGFydCwgYXJjKTtcbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW2NlbnRlcl0sIDgsIGZhbHNlLCB7IGZpbGw6ICd5ZWxsb3cnIH0pO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IGFyY05lYXJlc3RQb2ludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXJ0ID0gW2FyYy5lbmRYLCBhcmMuZW5kWV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW3BvaW50XSwgMTIsIGZhbHNlLCB7IGZpbGw6ICdibGFjaycsIHN0cm9rZTogJ2JsYWNrJyB9KTtcbiAgICAgICAgICAgIGRlYnVnR2VuZXJhdG9yLmRyYXdDaXJjbGVzKGJvYXJkLCBbbmVhcmVzdFBvaW50XSwgMTIsIGZhbHNlLCB7IGZpbGw6ICdncmVlbicsIHN0cm9rZTogJ2dyZWVuJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIaXRFZGdlT2ZTaGFwZShib2FyZCwgZWxlbWVudCwgcG9pbnQsIEhJVF9ESVNUQU5DRV9CVUZGRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFpc1N0cmljdCAmJiBpc0VtcHR5VGV4dEVsZW1lbnQoZWxlbWVudCkgJiYgIWlzRmlsbGVkRHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRFbGVtZW50VGV4dChlbGVtZW50LCBwb2ludCk7XG4gICAgICAgIHJldHVybiBpc0hpdFRleHQgfHwgZW5naW5lLmlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlISwgcG9pbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKGNsaWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRBcnJvd0xpbmUoYm9hcmQsIGVsZW1lbnQsIHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0VmVjdG9yTGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVkZ2VPZlNoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50LCBoaXREaXN0YW5jZUJ1ZmZlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGVsZW1lbnQsIHBvaW50KTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQobmVhcmVzdFBvaW50WzBdLCBuZWFyZXN0UG9pbnRbMV0sIHBvaW50WzBdLCBwb2ludFsxXSk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIDw9IGhpdERpc3RhbmNlQnVmZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW5zaWRlT2ZTaGFwZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsIHBvaW50OiBQb2ludCwgaGl0RGlzdGFuY2VCdWZmZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyksIGhpdERpc3RhbmNlQnVmZmVyKTtcbiAgICByZXR1cm4gZ2V0RW5naW5lKGdldEVsZW1lbnRTaGFwZShlbGVtZW50KSkuaXNJbnNpZGVQb2ludChjbGllbnQsIHBvaW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVsZW1lbnRJbnNpZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIHBvaW50ID0gcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChwb2ludCwgZWxlbWVudCkgfHwgcG9pbnQ7XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSAmJiAhUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgaXNIaXRJbnNpZGUgPSBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgIGlmIChpc0hpdEluc2lkZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0SW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRFbGVtZW50VGV4dChlbGVtZW50LCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSGl0VGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKGNsaWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0hpdEFycm93TGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRWZWN0b3JMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
|