@plait/core 0.55.0 → 0.56.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.
Files changed (40) hide show
  1. package/board/board.component.d.ts +2 -0
  2. package/core/element/element-ref.d.ts +5 -0
  3. package/core/element/plugin-element.d.ts +9 -6
  4. package/esm2022/board/board.component.mjs +10 -5
  5. package/esm2022/core/element/element-ref.mjs +2 -0
  6. package/esm2022/core/element/plugin-element.mjs +16 -7
  7. package/esm2022/core/list-render.mjs +4 -3
  8. package/esm2022/interfaces/board.mjs +1 -1
  9. package/esm2022/interfaces/element.mjs +5 -2
  10. package/esm2022/plugins/create-board.mjs +2 -2
  11. package/esm2022/plugins/with-hotkey.mjs +2 -2
  12. package/esm2022/plugins/with-moving.mjs +88 -10
  13. package/esm2022/plugins/with-related-fragment.mjs +20 -13
  14. package/esm2022/public-api.mjs +3 -2
  15. package/esm2022/services/context.service.mjs +30 -0
  16. package/esm2022/utils/angle.mjs +24 -1
  17. package/esm2022/utils/common.mjs +5 -3
  18. package/esm2022/utils/dom/common.mjs +1 -21
  19. package/esm2022/utils/fragment.mjs +10 -8
  20. package/esm2022/utils/group.mjs +25 -22
  21. package/esm2022/utils/math.mjs +36 -1
  22. package/esm2022/utils/selected-element.mjs +3 -2
  23. package/esm2022/utils/selection.mjs +2 -3
  24. package/esm2022/utils/weak-maps.mjs +2 -1
  25. package/esm2022/utils/z-index.mjs +2 -2
  26. package/fesm2022/plait-core.mjs +235 -80
  27. package/fesm2022/plait-core.mjs.map +1 -1
  28. package/interfaces/board.d.ts +1 -1
  29. package/interfaces/element.d.ts +6 -4
  30. package/package.json +1 -1
  31. package/plugins/with-moving.d.ts +3 -1
  32. package/public-api.d.ts +2 -1
  33. package/services/{image-context.service.d.ts → context.service.d.ts} +3 -0
  34. package/utils/angle.d.ts +2 -0
  35. package/utils/dom/common.d.ts +1 -2
  36. package/utils/fragment.d.ts +2 -2
  37. package/utils/group.d.ts +5 -5
  38. package/utils/math.d.ts +1 -0
  39. package/utils/weak-maps.d.ts +2 -0
  40. package/esm2022/services/image-context.service.mjs +0 -22
@@ -1,19 +1,20 @@
1
1
  import { PlaitBoard } from '../interfaces/board';
2
2
  import { isInPlaitBoard } from '../utils/board';
3
- import { isMainPointer } from '../utils/dom/common';
3
+ import { createG, isMainPointer } from '../utils/dom/common';
4
4
  import { Transforms } from '../transforms';
5
5
  import { getHitElementByPoint, getSelectedElements } from '../utils/selected-element';
6
6
  import { PlaitNode } from '../interfaces/node';
7
7
  import { throttleRAF } from '../utils/common';
8
8
  import { cacheMovingElements, getMovingElements, isMovingElements, removeMovingElements } from '../utils/moving-element';
9
9
  import { MERGING } from '../interfaces/history';
10
- import { isPreventTouchMove, preventTouchMove, handleTouchTarget, getRectangleByElements, distanceBetweenPointAndPoint, toHostPoint, toViewBoxPoint, hotkeys, getElementsInGroupByElement, getRectangleByAngle, getSelectionAngle } from '../utils';
10
+ import { isPreventTouchMove, preventTouchMove, handleTouchTarget, getRectangleByElements, distanceBetweenPointAndPoint, toHostPoint, toViewBoxPoint, hotkeys, getElementsInGroupByElement, getRectangleByAngle, getSelectionAngle, duplicateElements, drawRectangle, depthFirstRecursion, getAngleByElement, setAngleForG } from '../utils';
11
11
  import { getSnapMovingRef } from '../utils/snap/snap-moving';
12
- import { PlaitGroupElement, PlaitPointerType, RectangleClient } from '../interfaces';
12
+ import { PlaitGroupElement, PlaitPointerType, RectangleClient, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';
13
13
  import { ACTIVE_MOVING_CLASS_NAME, PRESS_AND_MOVE_BUFFER } from '../constants';
14
14
  import { addSelectionWithTemporaryElements } from '../transforms/selection';
15
+ import { isKeyHotkey } from 'is-hotkey';
15
16
  export function withMoving(board) {
16
- const { pointerDown, pointerMove, globalPointerUp, globalPointerMove } = board;
17
+ const { pointerDown, pointerMove, globalPointerUp, globalPointerMove, globalKeyDown, keyUp } = board;
17
18
  let offsetX = 0;
18
19
  let offsetY = 0;
19
20
  let isPreventDefault = false;
@@ -24,6 +25,31 @@ export function withMoving(board) {
24
25
  let selectedTargetElements = null;
25
26
  let hitTargetElement = undefined;
26
27
  let isHitSelectedTarget = undefined;
28
+ let pendingNodesG = null;
29
+ board.globalKeyDown = (event) => {
30
+ if (!PlaitBoard.isReadonly(board)) {
31
+ if (isKeyHotkey('option', event)) {
32
+ event.preventDefault();
33
+ if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
34
+ pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);
35
+ pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);
36
+ }
37
+ }
38
+ }
39
+ globalKeyDown(event);
40
+ };
41
+ board.keyUp = (event) => {
42
+ if (!PlaitBoard.isReadonly(board)) {
43
+ if (event.altKey && pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
44
+ event.preventDefault();
45
+ const currentElements = updatePoints(board, activeElements, offsetX, offsetY);
46
+ PlaitBoard.getBoardContainer(board).classList.add('element-moving');
47
+ cacheMovingElements(board, currentElements);
48
+ }
49
+ }
50
+ pendingNodesG?.remove();
51
+ keyUp(event);
52
+ };
27
53
  board.pointerDown = (event) => {
28
54
  if (PlaitBoard.isReadonly(board) ||
29
55
  !PlaitBoard.isPointer(board, PlaitPointerType.selection) ||
@@ -69,6 +95,7 @@ export function withMoving(board) {
69
95
  isPreventDefault = true;
70
96
  }
71
97
  snapG?.remove();
98
+ pendingNodesG?.remove();
72
99
  const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
73
100
  offsetX = endPoint[0] - startPoint[0];
74
101
  offsetY = endPoint[1] - startPoint[1];
@@ -97,9 +124,15 @@ export function withMoving(board) {
97
124
  snapG.classList.add(ACTIVE_MOVING_CLASS_NAME);
98
125
  PlaitBoard.getElementActiveHost(board).append(snapG);
99
126
  handleTouchTarget(board);
100
- const currentElements = updatePoints(board, activeElements, offsetX, offsetY);
101
- PlaitBoard.getBoardContainer(board).classList.add('element-moving');
102
- cacheMovingElements(board, currentElements);
127
+ if (event.altKey) {
128
+ pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);
129
+ pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);
130
+ }
131
+ else {
132
+ const currentElements = updatePoints(board, activeElements, offsetX, offsetY);
133
+ PlaitBoard.getBoardContainer(board).classList.add('element-moving');
134
+ cacheMovingElements(board, currentElements);
135
+ }
103
136
  });
104
137
  }
105
138
  }
@@ -119,6 +152,11 @@ export function withMoving(board) {
119
152
  globalPointerMove(event);
120
153
  };
121
154
  board.globalPointerUp = event => {
155
+ if (event.altKey && activeElements.length) {
156
+ const validElements = getValidElements(board, activeElements);
157
+ const rectangle = getRectangleByElements(board, validElements, false);
158
+ duplicateElements(board, validElements, [rectangle.x + offsetX, rectangle.y + offsetY]);
159
+ }
122
160
  isPreventDefault = false;
123
161
  hitTargetElement = undefined;
124
162
  selectedTargetElements = null;
@@ -131,6 +169,7 @@ export function withMoving(board) {
131
169
  };
132
170
  function cancelMove(board) {
133
171
  snapG?.remove();
172
+ pendingNodesG?.remove();
134
173
  startPoint = null;
135
174
  activeElementsRectangle = null;
136
175
  offsetX = 0;
@@ -194,8 +233,12 @@ export function getSelectedTargetElements(board) {
194
233
  targetElements.push(...relatedElements);
195
234
  return targetElements;
196
235
  }
197
- export function updatePoints(board, targetElements, offsetX, offsetY) {
198
- const validElements = targetElements.filter(element => !PlaitGroupElement.isGroup(element) && board.children.findIndex(item => item.id === element.id) > -1);
236
+ export function getValidElements(board, activeElements) {
237
+ const validElements = [...activeElements].filter(element => !PlaitGroupElement.isGroup(element) && board.children.findIndex(item => item.id === element.id) > -1);
238
+ return validElements;
239
+ }
240
+ export function updatePoints(board, activeElements, offsetX, offsetY) {
241
+ const validElements = getValidElements(board, activeElements);
199
242
  const currentElements = validElements.map(element => {
200
243
  const points = element.points || [];
201
244
  const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]);
@@ -208,4 +251,39 @@ export function updatePoints(board, targetElements, offsetX, offsetY) {
208
251
  });
209
252
  return currentElements;
210
253
  }
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUNILGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsV0FBVyxFQUNYLGNBQWMsRUFDZCxPQUFPLEVBQ1AsMkJBQTJCLEVBQzNCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDcEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxj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LENBQUM7SUFDSCxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgaXNJblBsYWl0Qm9hcmQgfSBmcm9tICcuLi91dGlscy9ib2FyZCc7XG5pbXBvcnQgeyBpc01haW5Qb2ludGVyIH0gZnJvbSAnLi4vdXRpbHMvZG9tL2NvbW1vbic7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IGdldEhpdEVsZW1lbnRCeVBvaW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQtZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgdGhyb3R0bGVSQUYgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgY2FjaGVNb3ZpbmdFbGVtZW50cywgZ2V0TW92aW5nRWxlbWVudHMsIGlzTW92aW5nRWxlbWVudHMsIHJlbW92ZU1vdmluZ0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvbW92aW5nLWVsZW1lbnQnO1xuaW1wb3J0IHsgTUVSR0lORyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGlzdG9yeSc7XG5pbXBvcnQge1xuICAgIGlzUHJldmVudFRvdWNoTW92ZSxcbiAgICBwcmV2ZW50VG91Y2hNb3ZlLFxuICAgIGhhbmRsZVRvdWNoVGFyZ2V0LFxuICAgIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICBob3RrZXlzLFxuICAgIGdldEVsZW1lbnRzSW5Hcm91cEJ5RWxlbWVudCxcbiAgICBnZXRSZWN0YW5nbGVCeUFuZ2xlLFxuICAgIGdldFNlbGVjdGlvbkFuZ2xlXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldFNuYXBNb3ZpbmdSZWYgfSBmcm9tICcuLi91dGlscy9zbmFwL3NuYXAtbW92aW5nJztcbmltcG9ydCB7IFBsYWl0R3JvdXBFbGVtZW50LCBQbGFpdFBvaW50ZXJUeXBlLCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFDVElWRV9NT1ZJTkdfQ0xBU1NfTkFNRSwgUFJFU1NfQU5EX01PVkVfQlVGRkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyB9IGZyb20gJy4uL3RyYW5zZm9ybXMvc2VsZWN0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb3ZpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwLCBnbG9iYWxQb2ludGVyTW92ZSB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuICAgIGxldCBpc1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgbGV0IHNuYXBHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGhpdFRhcmdldEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXNIaXRTZWxlY3RlZFRhcmdldDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSB8fFxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbikgfHxcbiAgICAgICAgICAgIGlzUHJldmVudFRvdWNoTW92ZShib2FyZCkgfHxcbiAgICAgICAgICAgICFpc01haW5Qb2ludGVyKGV2ZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIHBvaW50LCBlbCA9PiBib2FyZC5pc01vdmFibGUoZWwpKTtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpc0hpdFNlbGVjdGVkVGFyZ2V0ID0gaGl0VGFyZ2V0RWxlbWVudCAmJiBzZWxlY3RlZFRhcmdldEVsZW1lbnRzLmluY2x1ZGVzKGhpdFRhcmdldEVsZW1lbnQpO1xuICAgICAgICBpZiAoaGl0VGFyZ2V0RWxlbWVudCAmJiBpc0hpdFNlbGVjdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCB0cnVlKTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRUYXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRWxlbWVudHMgPSBib2FyZC5nZXRSZWxhdGVkRnJhZ21lbnQoW10sIFtoaXRUYXJnZXRFbGVtZW50XSk7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IFsuLi5nZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGhpdFRhcmdldEVsZW1lbnQpLCAuLi5yZWxhdGVkRWxlbWVudHNdO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgdHJ1ZSk7XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlj6rmnInliKTlrprnlKjmiLfmnKrlh7vkuK3lhYPntKDkuYvlkI7miY3lj6/ku6Xpqozor4HnlKjmiLfmmK/lkKblh7vkuK3kuoblt7LpgInlhYPntKDmiYDlnKjnmoTnqbrnmb3ljLrln59cbiAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSB1c2VyIGhhcyBub3QgaGl0IHRoZSBlbGVtZW50IGNhbiBpdCBiZSB2ZXJpZmllZCB3aGV0aGVyIHRoZSB1c2VyIGhpdCB0aGUgYmxhbmsgYXJlYSB3aGVyZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBsb2NhdGVkLlxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwICYmIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0SW5UYXJnZXRSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGUgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdEluVGFyZ2V0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cztcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IHRhcmdldFJlY3RhbmdsZTtcbiAgICAgICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgICAgICBvZmZzZXRYID0gZW5kUG9pbnRbMF0gLSBzdGFydFBvaW50WzBdO1xuICAgICAgICAgICAgb2Zmc2V0WSA9IGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5lbmRQb2ludCwgLi4uc3RhcnRQb2ludCk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBQUkVTU19BTkRfTU9WRV9CVUZGRVIgfHwgZ2V0TW92aW5nRWxlbWVudHMoYm9hcmQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoaGl0VGFyZ2V0RWxlbWVudCAmJiAhaXNIaXRTZWxlY3RlZFRhcmdldCAmJiBzZWxlY3RlZFRhcmdldEVsZW1lbnRzICYmIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRTZWxlY3Rpb25XaXRoVGVtcG9yYXJ5RWxlbWVudHMoYm9hcmQsIFtdKTtcbiAgICAgICAgICAgICAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlzSGl0U2VsZWN0ZWRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm90dGxlUkFGKGJvYXJkLCAnd2l0aC1tb3ZpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSZWN0YW5nbGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5hY3RpdmVFbGVtZW50c1JlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLnggKyBvZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUueSArIG9mZnNldFlcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUFuZ2xlKG5ld1JlY3RhbmdsZSwgZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpKSB8fCBuZXdSZWN0YW5nbGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBNb3ZpbmdSZWYoYm9hcmQsIGFjdGl2ZVJlY3RhbmdsZSwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYICs9IHJlZi5kZWx0YVg7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFkgKz0gcmVmLmRlbHRhWTtcbiAgICAgICAgICAgICAgICAgICAgc25hcEcgPSByZWYuc25hcEc7XG4gICAgICAgICAgICAgICAgICAgIHNuYXBHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHNuYXBHKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB1cGRhdGVQb2ludHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVNb3ZpbmdFbGVtZW50cyhib2FyZCwgY3VycmVudEVsZW1lbnRzIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gUHJldmVudCBjYW52YXMgc2Nyb2xsaW5nIGJlaGF2aW9yIGZyb20gYmVpbmcgdHJpZ2dlcmVkIGR1cmluZyBtb3ZlXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2xvYmFsUG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoc3RhcnRQb2ludCkge1xuICAgICAgICAgICAgY29uc3QgaW5QbGFpdEJvYXJkRWxlbWVudCA9IGlzSW5QbGFpdEJvYXJkKGJvYXJkLCBldmVudC54LCBldmVudC55KTtcbiAgICAgICAgICAgIGlmICghaW5QbGFpdEJvYXJkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNhbmNlbE1vdmUoYm9hcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2xvYmFsUG9pbnRlclVwID0gZXZlbnQgPT4ge1xuICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgIGhpdFRhcmdldEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgPSBudWxsO1xuICAgICAgICBpc0hpdFNlbGVjdGVkVGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc3RhcnRQb2ludCkge1xuICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgZ2xvYmFsUG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FuY2VsTW92ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICBzbmFwRz8ucmVtb3ZlKCk7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGlzTW92aW5nRWxlbWVudHMoYm9hcmQpKSB7XG4gICAgICAgICAgICByZW1vdmVNb3ZpbmdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEFycm93TW92aW5nKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBcnJvd01vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIChob3RrZXlzLmlzQXJyb3coZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRBcnJvdyhldmVudCkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTaGlmdCA9IGV2ZW50LnNoaWZ0S2V5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gaXNTaGlmdCA/IDEwIDogMTtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVVcChldmVudCkgfHwgaG90a2V5cy5pc0V4dGVuZFVwKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSAtYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmREb3duKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRCYWNrd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gLWJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRXh0ZW5kRm9yd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLWFycm93LW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2ludHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBvZmZzZXRbMF0sIG9mZnNldFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUYXJnZXRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdKTtcbiAgICB0YXJnZXRFbGVtZW50cy5wdXNoKC4uLnJlbGF0ZWRFbGVtZW50cyk7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCB0YXJnZXRFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IHRhcmdldEVsZW1lbnRzLmZpbHRlcihcbiAgICAgICAgZWxlbWVudCA9PiAhUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChlbGVtZW50KSAmJiBib2FyZC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKSA+IC0xXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB2YWxpZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBib2FyZC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaW5kZXhdXG4gICAgICAgICk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFtpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50RWxlbWVudHM7XG59XG4iXX0=
254
+ export function drawPendingNodesG(board, activeElements, offsetX, offsetY) {
255
+ let pendingNodesG = null;
256
+ const elements = [];
257
+ const validElements = getValidElements(board, activeElements);
258
+ validElements.forEach(element => {
259
+ depthFirstRecursion(element, node => {
260
+ elements.push(node);
261
+ }, () => true);
262
+ });
263
+ elements.forEach(item => {
264
+ let rectangle = board.getRectangle(item);
265
+ if (rectangle) {
266
+ rectangle = {
267
+ x: rectangle.x + offsetX,
268
+ y: rectangle.y + offsetY,
269
+ width: rectangle.width,
270
+ height: rectangle.height
271
+ };
272
+ const movingG = drawRectangle(board, rectangle, {
273
+ stroke: SELECTION_BORDER_COLOR,
274
+ strokeWidth: 1,
275
+ fill: SELECTION_FILL_COLOR,
276
+ fillStyle: 'solid'
277
+ });
278
+ if (!pendingNodesG) {
279
+ pendingNodesG = createG();
280
+ pendingNodesG.classList.add(ACTIVE_MOVING_CLASS_NAME);
281
+ }
282
+ const angle = getAngleByElement(item);
283
+ angle && setAngleForG(movingG, RectangleClient.getCenterPoint(rectangle), angle);
284
+ pendingNodesG.append(movingG);
285
+ }
286
+ });
287
+ return pendingNodesG;
288
+ }
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsT0FBTyxFQUNQLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixZQUFZLEVBQ2YsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVB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T0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBVSxFQUFFO2dCQUM3QyxNQUFNLEVBQUUsc0JBQXNCO2dCQUM5QixXQUFXLEVBQUUsQ0FBQztnQkFDZCxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixTQUFTLEVBQUUsT0FBTzthQUNyQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pCLGFBQWEsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsS0FBSyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sYUFBYSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBpc0luUGxhaXRCb2FyZCB9IGZyb20gJy4uL3V0aWxzL2JvYXJkJztcbmltcG9ydCB7IGNyZWF0ZUcsIGlzTWFpblBvaW50ZXIgfSBmcm9tICcuLi91dGlscy9kb20vY29tbW9uJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgZ2V0SGl0RWxlbWVudEJ5UG9pbnQsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9zZWxlY3RlZC1lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0Tm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyB0aHJvdHRsZVJBRiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBjYWNoZU1vdmluZ0VsZW1lbnRzLCBnZXRNb3ZpbmdFbGVtZW50cywgaXNNb3ZpbmdFbGVtZW50cywgcmVtb3ZlTW92aW5nRWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9tb3ZpbmctZWxlbWVudCc7XG5pbXBvcnQgeyBNRVJHSU5HIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9oaXN0b3J5JztcbmltcG9ydCB7XG4gICAgaXNQcmV2ZW50VG91Y2hNb3ZlLFxuICAgIHByZXZlbnRUb3VjaE1vdmUsXG4gICAgaGFuZGxlVG91Y2hUYXJnZXQsXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50LFxuICAgIGhvdGtleXMsXG4gICAgZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50LFxuICAgIGdldFJlY3RhbmdsZUJ5QW5nbGUsXG4gICAgZ2V0U2VsZWN0aW9uQW5nbGUsXG4gICAgZHVwbGljYXRlRWxlbWVudHMsXG4gICAgZHJhd1JlY3RhbmdsZSxcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uLFxuICAgIGdldEFuZ2xlQnlFbGVtZW50LFxuICAgIHNldEFuZ2xlRm9yR1xufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRTbmFwTW92aW5nUmVmIH0gZnJvbSAnLi4vdXRpbHMvc25hcC9zbmFwLW1vdmluZyc7XG5pbXBvcnQgeyBQbGFpdEdyb3VwRWxlbWVudCwgUGxhaXRQb2ludGVyVHlwZSwgUmVjdGFuZ2xlQ2xpZW50LCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLCBTRUxFQ1RJT05fRklMTF9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQUNUSVZFX01PVklOR19DTEFTU19OQU1FLCBQUkVTU19BTkRfTU9WRV9CVUZGRVIgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYWRkU2VsZWN0aW9uV2l0aFRlbXBvcmFyeUVsZW1lbnRzIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcy9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgaXNLZXlIb3RrZXkgfSBmcm9tICdpcy1ob3RrZXknO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE1vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAsIGdsb2JhbFBvaW50ZXJNb3ZlLCBnbG9iYWxLZXlEb3duLCBrZXlVcCB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuICAgIGxldCBpc1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgbGV0IHNuYXBHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGhpdFRhcmdldEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXNIaXRTZWxlY3RlZFRhcmdldDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVuZGluZ05vZGVzRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLmdsb2JhbEtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoaXNLZXlIb3RrZXkoJ29wdGlvbicsIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ05vZGVzRyA9IGRyYXdQZW5kaW5nTm9kZXNHKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxLZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIHBlbmRpbmdOb2Rlc0cgJiYgc3RhcnRQb2ludCAmJiBhY3RpdmVFbGVtZW50cy5sZW5ndGggJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICAgICAgICAgICAgICBjYWNoZU1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICBrZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSB8fFxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbikgfHxcbiAgICAgICAgICAgIGlzUHJldmVudFRvdWNoTW92ZShib2FyZCkgfHxcbiAgICAgICAgICAgICFpc01haW5Qb2ludGVyKGV2ZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIHBvaW50LCBlbCA9PiBib2FyZC5pc01vdmFibGUoZWwpKTtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpc0hpdFNlbGVjdGVkVGFyZ2V0ID0gaGl0VGFyZ2V0RWxlbWVudCAmJiBzZWxlY3RlZFRhcmdldEVsZW1lbnRzLmluY2x1ZGVzKGhpdFRhcmdldEVsZW1lbnQpO1xuICAgICAgICBpZiAoaGl0VGFyZ2V0RWxlbWVudCAmJiBpc0hpdFNlbGVjdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCB0cnVlKTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRUYXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRWxlbWVudHMgPSBib2FyZC5nZXRSZWxhdGVkRnJhZ21lbnQoW10sIFtoaXRUYXJnZXRFbGVtZW50XSk7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IFsuLi5nZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGhpdFRhcmdldEVsZW1lbnQpLCAuLi5yZWxhdGVkRWxlbWVudHNdO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgdHJ1ZSk7XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlj6rmnInliKTlrprnlKjmiLfmnKrlh7vkuK3lhYPntKDkuYvlkI7miY3lj6/ku6Xpqozor4HnlKjmiLfmmK/lkKblh7vkuK3kuoblt7LpgInlhYPntKDmiYDlnKjnmoTnqbrnmb3ljLrln59cbiAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSB1c2VyIGhhcyBub3QgaGl0IHRoZSBlbGVtZW50IGNhbiBpdCBiZSB2ZXJpZmllZCB3aGV0aGVyIHRoZSB1c2VyIGhpdCB0aGUgYmxhbmsgYXJlYSB3aGVyZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBsb2NhdGVkLlxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwICYmIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0SW5UYXJnZXRSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGUgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdEluVGFyZ2V0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cztcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IHRhcmdldFJlY3RhbmdsZTtcbiAgICAgICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF07XG4gICAgICAgICAgICBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZFBvaW50LCAuLi5zdGFydFBvaW50KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUiB8fCBnZXRNb3ZpbmdFbGVtZW50cyhib2FyZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRFbGVtZW50ICYmICFpc0hpdFNlbGVjdGVkVGFyZ2V0ICYmIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgW10pO1xuICAgICAgICAgICAgICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhcmdldEVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUueCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZS55ICsgb2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUFuZ2xlKG5ld1JlY3RhbmdsZSwgZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpKSB8fCBuZXdSZWN0YW5nbGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBNb3ZpbmdSZWYoYm9hcmQsIGFjdGl2ZVJlY3RhbmdsZSwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYICs9IHJlZi5kZWx0YVg7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFkgKz0gcmVmLmRlbHRhWTtcbiAgICAgICAgICAgICAgICAgICAgc25hcEcgPSByZWYuc25hcEc7XG4gICAgICAgICAgICAgICAgICAgIHNuYXBHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHNuYXBHKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gZHJhd1BlbmRpbmdOb2Rlc0coYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdlbGVtZW50LW1vdmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNb3ZpbmdFbGVtZW50cyhib2FyZCwgY3VycmVudEVsZW1lbnRzIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGNhbnZhcyBzY3JvbGxpbmcgYmVoYXZpb3IgZnJvbSBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nIG1vdmVcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgdmFsaWRFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgZHVwbGljYXRlRWxlbWVudHMoYm9hcmQsIHZhbGlkRWxlbWVudHMsIFtyZWN0YW5nbGUueCArIG9mZnNldFgsIHJlY3RhbmdsZS55ICsgb2Zmc2V0WV0pO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IG51bGw7XG4gICAgICAgIGlzSGl0U2VsZWN0ZWRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjYW5jZWxNb3ZlKGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgZmFsc2UpO1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxNb3ZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgcGVuZGluZ05vZGVzRz8ucmVtb3ZlKCk7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGlzTW92aW5nRWxlbWVudHMoYm9hcmQpKSB7XG4gICAgICAgICAgICByZW1vdmVNb3ZpbmdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEFycm93TW92aW5nKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBcnJvd01vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIChob3RrZXlzLmlzQXJyb3coZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRBcnJvdyhldmVudCkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTaGlmdCA9IGV2ZW50LnNoaWZ0S2V5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gaXNTaGlmdCA/IDEwIDogMTtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVVcChldmVudCkgfHwgaG90a2V5cy5pc0V4dGVuZFVwKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSAtYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmREb3duKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRCYWNrd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gLWJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRXh0ZW5kRm9yd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLWFycm93LW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2ludHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBvZmZzZXRbMF0sIG9mZnNldFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUYXJnZXRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdKTtcbiAgICB0YXJnZXRFbGVtZW50cy5wdXNoKC4uLnJlbGF0ZWRFbGVtZW50cyk7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IFsuLi5hY3RpdmVFbGVtZW50c10uZmlsdGVyKFxuICAgICAgICBlbGVtZW50ID0+ICFQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpICYmIGJvYXJkLmNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQuaWQpID4gLTFcbiAgICApO1xuICAgIHJldHVybiB2YWxpZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB2YWxpZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBib2FyZC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaW5kZXhdXG4gICAgICAgICk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFtpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50RWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3UGVuZGluZ05vZGVzRyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCBvZmZzZXRYOiBudW1iZXIsIG9mZnNldFk6IG51bWJlcikge1xuICAgIGxldCBwZW5kaW5nTm9kZXNHOiBTVkdFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICB2YWxpZEVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgbGV0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShpdGVtKTtcbiAgICAgICAgaWYgKHJlY3RhbmdsZSkge1xuICAgICAgICAgICAgcmVjdGFuZ2xlID0ge1xuICAgICAgICAgICAgICAgIHg6IHJlY3RhbmdsZS54ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiByZWN0YW5nbGUueSArIG9mZnNldFksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBtb3ZpbmdHID0gZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlISwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBmaWxsOiBTRUxFQ1RJT05fRklMTF9DT0xPUixcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFwZW5kaW5nTm9kZXNHKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGVzRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0QW5nbGVCeUVsZW1lbnQoaXRlbSk7XG4gICAgICAgICAgICBhbmdsZSAmJiBzZXRBbmdsZUZvckcobW92aW5nRywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSksIGFuZ2xlKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cuYXBwZW5kKG1vdmluZ0cpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBlbmRpbmdOb2Rlc0c7XG59XG4iXX0=
@@ -1,20 +1,27 @@
1
1
  import { createClipboardContext, WritableClipboardType, addClipboardContext } from '../utils';
2
2
  export function withRelatedFragment(board) {
3
3
  const { buildFragment } = board;
4
- board.buildFragment = (clipboardContext, rectangle, type) => {
5
- const relatedFragment = board.getRelatedFragment([]);
6
- if (!clipboardContext) {
7
- clipboardContext = createClipboardContext(WritableClipboardType.elements, relatedFragment, '');
4
+ board.buildFragment = (clipboardContext, rectangle, type, originData) => {
5
+ let relatedFragment = board.getRelatedFragment(originData || []);
6
+ if (relatedFragment) {
7
+ if (originData?.length) {
8
+ relatedFragment = relatedFragment.filter(item => !originData.map(element => element.id).includes(item.id));
9
+ }
10
+ if (relatedFragment.length) {
11
+ if (!clipboardContext) {
12
+ clipboardContext = createClipboardContext(WritableClipboardType.elements, relatedFragment, '');
13
+ }
14
+ else {
15
+ clipboardContext = addClipboardContext(clipboardContext, {
16
+ text: '',
17
+ type: WritableClipboardType.elements,
18
+ elements: relatedFragment
19
+ });
20
+ }
21
+ }
8
22
  }
9
- else {
10
- clipboardContext = addClipboardContext(clipboardContext, {
11
- text: '',
12
- type: WritableClipboardType.elements,
13
- elements: relatedFragment
14
- });
15
- }
16
- return buildFragment(clipboardContext, rectangle, type);
23
+ return buildFragment(clipboardContext, rectangle, type, originData);
17
24
  };
18
25
  return board;
19
26
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWxhdGVkLWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy93aXRoLXJlbGF0ZWQtZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVILHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ3RCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFpQjtJQUNqRCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FDbEIsZ0JBQWlELEVBQ2pELFNBQWlDLEVBQ2pDLElBQW9CLEVBQ3RCLEVBQUU7UUFDQSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEIsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRyxDQUFDO2FBQU0sQ0FBQztZQUNKLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFO2dCQUNyRCxJQUFJLEVBQUUsRUFBRTtnQkFDUixJQUFJLEVBQUUscUJBQXFCLENBQUMsUUFBUTtnQkFDcEMsUUFBUSxFQUFFLGVBQWU7YUFDNUIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBjcmVhdGVDbGlwYm9hcmRDb250ZXh0LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkVHlwZSxcbiAgICBhZGRDbGlwYm9hcmRDb250ZXh0XG59IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWxhdGVkRnJhZ21lbnQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGJ1aWxkRnJhZ21lbnQgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuYnVpbGRGcmFnbWVudCA9IChcbiAgICAgICAgY2xpcGJvYXJkQ29udGV4dDogV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0IHwgbnVsbCxcbiAgICAgICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQgfCBudWxsLFxuICAgICAgICB0eXBlOiAnY29weScgfCAnY3V0J1xuICAgICkgPT4ge1xuICAgICAgICBjb25zdCByZWxhdGVkRnJhZ21lbnQgPSBib2FyZC5nZXRSZWxhdGVkRnJhZ21lbnQoW10pO1xuICAgICAgICBpZiAoIWNsaXBib2FyZENvbnRleHQpIHtcbiAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBjcmVhdGVDbGlwYm9hcmRDb250ZXh0KFdyaXRhYmxlQ2xpcGJvYXJkVHlwZS5lbGVtZW50cywgcmVsYXRlZEZyYWdtZW50LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGlwYm9hcmRDb250ZXh0ID0gYWRkQ2xpcGJvYXJkQ29udGV4dChjbGlwYm9hcmRDb250ZXh0LCB7XG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIGVsZW1lbnRzOiByZWxhdGVkRnJhZ21lbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZEZyYWdtZW50KGNsaXBib2FyZENvbnRleHQsIHJlY3RhbmdsZSwgdHlwZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn1cbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWxhdGVkLWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy93aXRoLXJlbGF0ZWQtZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUE0QixzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV4SCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBaUI7SUFDakQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVoQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQ2xCLGdCQUFpRCxFQUNqRCxTQUFpQyxFQUNqQyxJQUFvQixFQUNwQixVQUEyQixFQUM3QixFQUFFO1FBQ0EsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDcEIsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkcsQ0FBQztxQkFBTSxDQUFDO29CQUNKLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFO3dCQUNyRCxJQUFJLEVBQUUsRUFBRTt3QkFDUixJQUFJLEVBQUUscUJBQXFCLENBQUMsUUFBUTt3QkFDcEMsUUFBUSxFQUFFLGVBQWU7cUJBQzVCLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0LCBjcmVhdGVDbGlwYm9hcmRDb250ZXh0LCBXcml0YWJsZUNsaXBib2FyZFR5cGUsIGFkZENsaXBib2FyZENvbnRleHQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVsYXRlZEZyYWdtZW50KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBidWlsZEZyYWdtZW50IH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmJ1aWxkRnJhZ21lbnQgPSAoXG4gICAgICAgIGNsaXBib2FyZENvbnRleHQ6IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCB8IG51bGwsXG4gICAgICAgIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCxcbiAgICAgICAgdHlwZTogJ2NvcHknIHwgJ2N1dCcsXG4gICAgICAgIG9yaWdpbkRhdGE/OiBQbGFpdEVsZW1lbnRbXVxuICAgICkgPT4ge1xuICAgICAgICBsZXQgcmVsYXRlZEZyYWdtZW50ID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KG9yaWdpbkRhdGEgfHwgW10pO1xuICAgICAgICBpZiAocmVsYXRlZEZyYWdtZW50KSB7XG4gICAgICAgICAgICBpZiAob3JpZ2luRGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVsYXRlZEZyYWdtZW50ID0gcmVsYXRlZEZyYWdtZW50LmZpbHRlcihpdGVtID0+ICFvcmlnaW5EYXRhLm1hcChlbGVtZW50ID0+IGVsZW1lbnQuaWQpLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWxhdGVkRnJhZ21lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBjcmVhdGVDbGlwYm9hcmRDb250ZXh0KFdyaXRhYmxlQ2xpcGJvYXJkVHlwZS5lbGVtZW50cywgcmVsYXRlZEZyYWdtZW50LCAnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkQ29udGV4dCA9IGFkZENsaXBib2FyZENvbnRleHQoY2xpcGJvYXJkQ29udGV4dCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBXcml0YWJsZUNsaXBib2FyZFR5cGUuZWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogcmVsYXRlZEZyYWdtZW50XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVpbGRGcmFnbWVudChjbGlwYm9hcmRDb250ZXh0LCByZWN0YW5nbGUsIHR5cGUsIG9yaWdpbkRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG4iXX0=
@@ -6,6 +6,7 @@ export * from './constants';
6
6
  export * from './core/element/plugin-element';
7
7
  export * from './core/element/context-change';
8
8
  export * from './core/island/island-base.component';
9
+ export * from './core/element/element-ref';
9
10
  export * from './interfaces';
10
11
  export * from './transforms';
11
12
  export * from './utils';
@@ -13,6 +14,6 @@ export * from './plugins/with-selection';
13
14
  export * from './plugins/with-moving';
14
15
  export * from './plugins/with-options';
15
16
  export * from './testing';
16
- export * from './services/image-context.service';
17
+ export * from './services/context.service';
17
18
  export * from './utils/debug';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHBsYWl0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9ib2FyZC9ib2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL2VsZW1lbnQvcGx1Z2luLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL2VsZW1lbnQvY29udGV4dC1jaGFuZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL2lzbGFuZC9pc2xhbmQtYmFzZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucy93aXRoLXNlbGVjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvd2l0aC1tb3ZpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW5zL3dpdGgtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9pbWFnZS1jb250ZXh0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9kZWJ1Zyc7XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgcGxhaXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2JvYXJkL2JvYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvZWxlbWVudC9wbHVnaW4tZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvZWxlbWVudC9jb250ZXh0LWNoYW5nZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvaXNsYW5kL2lzbGFuZC1iYXNlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvZWxlbWVudC9lbGVtZW50LXJlZic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2Zvcm1zJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW5zL3dpdGgtc2VsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucy93aXRoLW1vdmluZyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvd2l0aC1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2NvbnRleHQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2RlYnVnJztcbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class PlaitContextService {
5
+ constructor() {
6
+ this._stable = new Subject();
7
+ this.uploadingFiles = [];
8
+ }
9
+ getUploadingFile(url) {
10
+ return this.uploadingFiles.find(file => file.url === url);
11
+ }
12
+ setUploadingFile(file) {
13
+ return this.uploadingFiles.push(file);
14
+ }
15
+ removeUploadingFile(fileEntry) {
16
+ this.uploadingFiles = this.uploadingFiles.filter(file => file.url !== fileEntry.url);
17
+ }
18
+ onStable() {
19
+ return this._stable.asObservable();
20
+ }
21
+ nextStable() {
22
+ this._stable.next('');
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
25
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitContextService }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitContextService, decorators: [{
28
+ type: Injectable
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvc2VydmljZXMvY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHL0IsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUVZLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXhCLG1CQUFjLEdBQWlCLEVBQUUsQ0FBQztLQXFCN0M7SUFuQkcsZ0JBQWdCLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBZ0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBcUI7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQzs4R0F2QlEsbUJBQW1CO2tIQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWFnZUVudHJ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbGFpdENvbnRleHRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9zdGFibGUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSB1cGxvYWRpbmdGaWxlczogSW1hZ2VFbnRyeVtdID0gW107XG5cbiAgICBnZXRVcGxvYWRpbmdGaWxlKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZGluZ0ZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLnVybCA9PT0gdXJsKTtcbiAgICB9XG5cbiAgICBzZXRVcGxvYWRpbmdGaWxlKGZpbGU6IEltYWdlRW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkaW5nRmlsZXMucHVzaChmaWxlKTtcbiAgICB9XG5cbiAgICByZW1vdmVVcGxvYWRpbmdGaWxlKGZpbGVFbnRyeTogSW1hZ2VFbnRyeSkge1xuICAgICAgICB0aGlzLnVwbG9hZGluZ0ZpbGVzID0gdGhpcy51cGxvYWRpbmdGaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLnVybCAhPT0gZmlsZUVudHJ5LnVybCk7XG4gICAgfVxuXG4gICAgb25TdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFibGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgbmV4dFN0YWJsZSgpIHtcbiAgICAgICAgdGhpcy5fc3RhYmxlLm5leHQoJycpO1xuICAgIH1cbn1cbiJdfQ==
@@ -125,4 +125,27 @@ export const getAngleBetweenPoints = (startPoint, endPoint, centerPoint) => {
125
125
  const endAngle = (5 * Math.PI) / 2 + Math.atan2(endPoint[1] - centerPoint[1], endPoint[0] - centerPoint[0]);
126
126
  return normalizeAngle(endAngle - startAngle);
127
127
  };
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9hbmdsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUksTUFBUyxFQUFFLFdBQWtCLEVBQUUsS0FBYSxFQUFLLEVBQUU7SUFDL0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBTSxDQUFDO0lBQ3BGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBUSxNQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFNLENB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USxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE9BQU8sY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwcm94aW1hdGVseSwgcm90YXRlIH0gZnJvbSAnLi9tYXRoJztcblxuZXhwb3J0IGNvbnN0IHJvdGF0ZVBvaW50cyA9IDxUPihwb2ludHM6IFQsIGNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcik6IFQgPT4ge1xuICAgIGlmICghYW5nbGUpIHtcbiAgICAgICAgYW5nbGUgPSAwO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwb2ludHMpICYmIHR5cGVvZiBwb2ludHNbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiByb3RhdGUocG9pbnRzWzBdLCBwb2ludHNbMV0sIGNlbnRlclBvaW50WzBdLCBjZW50ZXJQb2ludFsxXSwgYW5nbGUpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChwb2ludHMgYXMgUG9pbnRbXSkubWFwKHBvaW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGUocG9pbnRbMF0sIHBvaW50WzFdLCBjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0sIGFuZ2xlKTtcbiAgICAgICAgfSkgYXMgVDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uQW5nbGUgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IGFuZ2xlID0gZWxlbWVudHNbMF0/LmFuZ2xlIHx8IDA7XG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uYW5nbGUgIT09IGFuZ2xlICYmICFhcHByb3hpbWF0ZWx5KChpdGVtLmFuZ2xlICUgKE1hdGguUEkgLyAyKSkgLSAoYW5nbGUgJSAoTWF0aC5QSSAvIDIpKSwgMCkpIHtcbiAgICAgICAgICAgIGFuZ2xlID0gMDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhbmdsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTYW1lQW5nbGUgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gZWxlbWVudHNbMF0uYW5nbGU7XG4gICAgaWYgKGFuZ2xlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhZWxlbWVudHMuc29tZShpdGVtID0+IGl0ZW0uYW5nbGUgIT09IGFuZ2xlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUgPSAocmVjdGFuZ2xlc0Nvcm5lclBvaW50czogW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XVtdLCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgbGV0IHJlY3RhbmdsZXNGcm9tT3JpZ2luOiBSZWN0YW5nbGVDbGllbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSByZWN0YW5nbGVzQ29ybmVyUG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKGNvcm5lclBvaW50cywgWzAsIDBdLCAtYW5nbGUpO1xuICAgICAgICByZWN0YW5nbGVzRnJvbU9yaWdpbi5wdXNoKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uUmVjdGFuZ2xlRnJvbU9yaWdpbiA9IFJlY3RhbmdsZUNsaWVudC5nZXRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzRnJvbU9yaWdpbik7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29ybmVyUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhzZWxlY3Rpb25SZWN0YW5nbGVGcm9tT3JpZ2luKTtcbiAgICBjb25zdCBjb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKHNlbGVjdGlvbkNvcm5lclBvaW50cywgWzAsIDBdLCBhbmdsZSk7XG4gICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGNvcm5lclBvaW50c0Zyb21PcmlnaW4pKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJvdGF0ZVBvaW50cyhjb3JuZXJQb2ludHNGcm9tT3JpZ2luLCBjZW50ZXJQb2ludCwgLWFuZ2xlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T2Zmc2V0QWZ0ZXJSb3RhdGUgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJvdGF0ZUNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHRhcmdldENlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSk7XG4gICAgY29uc3QgW3JvdGF0ZWRDZW50ZXJQb2ludF0gPSByb3RhdGVQb2ludHMoW3RhcmdldENlbnRlclBvaW50XSwgcm90YXRlQ2VudGVyUG9pbnQsIGFuZ2xlKTtcbiAgICBjb25zdCBvZmZzZXRYID0gcm90YXRlZENlbnRlclBvaW50WzBdIC0gdGFyZ2V0Q2VudGVyUG9pbnRbMF07XG4gICAgY29uc3Qgb2Zmc2V0WSA9IHJvdGF0ZWRDZW50ZXJQb2ludFsxXSAtIHRhcmdldENlbnRlclBvaW50WzFdO1xuICAgIHJldHVybiB7IG9mZnNldFgsIG9mZnNldFkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByb3RhdGVkRGF0YVBvaW50cyA9IChwb2ludHM6IFBvaW50W10sIHJvdGF0ZUNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcik6IFBvaW50W10gPT4ge1xuICAgIGNvbnN0IHsgb2Zmc2V0WCwgb2Zmc2V0WSB9ID0gZ2V0T2Zmc2V0QWZ0ZXJSb3RhdGUoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyksIHJvdGF0ZUNlbnRlclBvaW50LCBhbmdsZSk7XG4gICAgcmV0dXJuIHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuZ2xlID0gKG5vZGU6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBub2RlLmFuZ2xlICYmIG5vZGUuYW5nbGUgIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgcm90YXRlUG9pbnRzQnlFbGVtZW50ID0gPFQ+KHBvaW50czogVCwgZWxlbWVudDogUGxhaXRFbGVtZW50KTogVCB8IG51bGwgPT4ge1xuICAgIGlmIChoYXNWYWxpZEFuZ2xlKGVsZW1lbnQpKSB7XG4gICAgICAgIGxldCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhwb2ludHMsIGNlbnRlclBvaW50LCBlbGVtZW50LmFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudCA9IDxUPihwb2ludHM6IFQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCk6IFQgfCBudWxsID0+IHtcbiAgICBpZiAoaGFzVmFsaWRBbmdsZShlbGVtZW50KSkge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzISk7XG4gICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiByb3RhdGVQb2ludHMocG9pbnRzLCBjZW50ZXJQb2ludCwgLWVsZW1lbnQuYW5nbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVCeUFuZ2xlID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgIGNvbnN0IGNvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyb3RhdGVQb2ludHMoY29ybmVyUG9pbnRzLCBjZW50ZXJQb2ludCwgYW5nbGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUgPSAoYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHVuaXRBbmdsZSA9IE1hdGguYWJzKGFuZ2xlKSAlIE1hdGguUEk7XG4gICAgcmV0dXJuIHVuaXRBbmdsZSA+PSAoMSAvIDQpICogTWF0aC5QSSAmJiB1bml0QW5nbGUgPD0gKDMgLyA0KSAqIE1hdGguUEk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoZCAvIDE4MCkgKiBNYXRoLlBJO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFkaWFuc1RvRGVncmVlcyhyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAociAvIE1hdGguUEkpICogMTgwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlRWxlbWVudHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgYW5nbGU6IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoc2VsZWN0aW9uUmVjdGFuZ2xlKTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5BbmdsZSA9IGl0ZW0uYW5nbGU7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKGl0ZW0ucG9pbnRzISwgc2VsZWN0aW9uQ2VudGVyUG9pbnQsIG5vcm1hbGl6ZUFuZ2xlKGFuZ2xlKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBpdGVtKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50cywgYW5nbGU6IG5vcm1hbGl6ZUFuZ2xlKG9yaWdpbkFuZ2xlICsgYW5nbGUpIH0sIHBhdGgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplQW5nbGUgPSAoYW5nbGU6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgaWYgKGFuZ2xlIDwgMCkge1xuICAgICAgICByZXR1cm4gYW5nbGUgKyAyICogTWF0aC5QSTtcbiAgICB9XG4gICAgaWYgKGFuZ2xlID49IDIgKiBNYXRoLlBJKSB7XG4gICAgICAgIHJldHVybiBhbmdsZSAtIDIgKiBNYXRoLlBJO1xuICAgIH1cbiAgICByZXR1cm4gYW5nbGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QW5nbGVCZXR3ZWVuUG9pbnRzID0gKHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQsIGNlbnRlclBvaW50OiBQb2ludCk6IG51bWJlciA9PiB7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9ICg1ICogTWF0aC5QSSkgLyAyICsgTWF0aC5hdGFuMihzdGFydFBvaW50WzFdIC0gY2VudGVyUG9pbnRbMV0sIHN0YXJ0UG9pbnRbMF0gLSBjZW50ZXJQb2ludFswXSk7XG4gICAgY29uc3QgZW5kQW5nbGUgPSAoNSAqIE1hdGguUEkpIC8gMiArIE1hdGguYXRhbjIoZW5kUG9pbnRbMV0gLSBjZW50ZXJQb2ludFsxXSwgZW5kUG9pbnRbMF0gLSBjZW50ZXJQb2ludFswXSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUFuZ2xlKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG59O1xuIl19
128
+ export const getAngleByElement = (element) => {
129
+ return element?.angle;
130
+ };
131
+ export const setAngleForG = (g, centerPoint, angle) => {
132
+ if (angle === 0) {
133
+ g.removeAttribute('transform');
134
+ return;
135
+ }
136
+ var centerX = centerPoint[0];
137
+ var centerY = centerPoint[1];
138
+ let cosTheta = Math.cos(angle);
139
+ let sinTheta = Math.sin(angle);
140
+ let transformMatrix = [
141
+ cosTheta,
142
+ sinTheta,
143
+ -sinTheta,
144
+ cosTheta,
145
+ centerX * (1 - cosTheta) + centerY * sinTheta,
146
+ centerY * (1 - cosTheta) - centerX * sinTheta
147
+ ];
148
+ let matrix = 'matrix(' + transformMatrix.join(',') + ')';
149
+ g.setAttribute('transform', `${matrix}`);
150
+ };
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9hbmdsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUksTUFBUyxFQUFFLFdBQWtCLEVBQUUsS0FBYSxFQUFLLEVBQUU7SUFDL0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBTSxDQUFDO0lBQ3BGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBUSxNQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFNLENBQUM7SUFDWixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUF3QixFQUFFLEVBQUU7SUFDMUQsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDcEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUF3QixFQUFFLEVBQUU7SUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNoQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsc0JBQXNELEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDakgsSUFBSSxvQkFBb0IsR0FBc0IsRUFBRSxDQUFDO0lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLDRCQUE0QixHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsTUFBTSw0QkFBNEIsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoRyxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM1RixNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDakgsT0FBTyxlQUFlLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDM0csQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxTQUEwQixFQUFFLGlCQUF3QixFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQ3hHLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDaEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFlLEVBQUUsaUJBQXdCLEVBQUUsS0FBYSxFQUFXLEVBQUU7SUFDbkcsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUgsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBWSxDQUFDO0FBQ3hFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQWtCLEVBQUUsRUFBRTtJQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBSSxNQUFTLEVBQUUsT0FBcUIsRUFBWSxFQUFFO0lBQ25GLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekIsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFPLENBQUMsQ0FBQztRQUN0RSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUksTUFBUyxFQUFFLE9BQXFCLEVBQVksRUFBRTtJQUN2RixJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pCLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTyxDQUFDLENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsU0FBMEIsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUM3RSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDNUMsT0FBTyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1RSxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsQ0FBUztJQUN0QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFTO0lBQ3RDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFpQixFQUFFLFFBQXdCLEVBQUUsS0FBYTtJQUNyRixNQUFNLGtCQUFrQixHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUUsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDaEYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRTtJQUNwRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNaLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFVBQWlCLEVBQUUsUUFBZSxFQUFFLFdBQWtCLEVBQVUsRUFBRTtJQUNwRyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE9BQU8sY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQXFCLEVBQVUsRUFBRTtJQUMvRCxPQUFPLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFDMUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBYyxFQUFFLFdBQWtCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDOUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLE9BQU87SUFDWCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0IsSUFBSSxlQUFlLEdBQUc7UUFDbEIsUUFBUTtRQUNSLFFBQVE7UUFDUixDQUFDLFFBQVE7UUFDVCxRQUFRO1FBQ1IsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLE9BQU8sR0FBRyxRQUFRO1FBQzdDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxPQUFPLEdBQUcsUUFBUTtLQUNoRCxDQUFDO0lBRUYsSUFBSSxNQUFNLEdBQUcsU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwcm94aW1hdGVseSwgcm90YXRlIH0gZnJvbSAnLi9tYXRoJztcblxuZXhwb3J0IGNvbnN0IHJvdGF0ZVBvaW50cyA9IDxUPihwb2ludHM6IFQsIGNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcik6IFQgPT4ge1xuICAgIGlmICghYW5nbGUpIHtcbiAgICAgICAgYW5nbGUgPSAwO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwb2ludHMpICYmIHR5cGVvZiBwb2ludHNbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiByb3RhdGUocG9pbnRzWzBdLCBwb2ludHNbMV0sIGNlbnRlclBvaW50WzBdLCBjZW50ZXJQb2ludFsxXSwgYW5nbGUpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChwb2ludHMgYXMgUG9pbnRbXSkubWFwKHBvaW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGUocG9pbnRbMF0sIHBvaW50WzFdLCBjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0sIGFuZ2xlKTtcbiAgICAgICAgfSkgYXMgVDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uQW5nbGUgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IGFuZ2xlID0gZWxlbWVudHNbMF0/LmFuZ2xlIHx8IDA7XG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uYW5nbGUgIT09IGFuZ2xlICYmICFhcHByb3hpbWF0ZWx5KChpdGVtLmFuZ2xlICUgKE1hdGguUEkgLyAyKSkgLSAoYW5nbGUgJSAoTWF0aC5QSSAvIDIpKSwgMCkpIHtcbiAgICAgICAgICAgIGFuZ2xlID0gMDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhbmdsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTYW1lQW5nbGUgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gZWxlbWVudHNbMF0uYW5nbGU7XG4gICAgaWYgKGFuZ2xlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhZWxlbWVudHMuc29tZShpdGVtID0+IGl0ZW0uYW5nbGUgIT09IGFuZ2xlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUgPSAocmVjdGFuZ2xlc0Nvcm5lclBvaW50czogW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XVtdLCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgbGV0IHJlY3RhbmdsZXNGcm9tT3JpZ2luOiBSZWN0YW5nbGVDbGllbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSByZWN0YW5nbGVzQ29ybmVyUG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKGNvcm5lclBvaW50cywgWzAsIDBdLCAtYW5nbGUpO1xuICAgICAgICByZWN0YW5nbGVzRnJvbU9yaWdpbi5wdXNoKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhpbnZlcnRDb3JuZXJQb2ludHNGcm9tT3JpZ2luKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uUmVjdGFuZ2xlRnJvbU9yaWdpbiA9IFJlY3RhbmdsZUNsaWVudC5nZXRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzRnJvbU9yaWdpbik7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29ybmVyUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhzZWxlY3Rpb25SZWN0YW5nbGVGcm9tT3JpZ2luKTtcbiAgICBjb25zdCBjb3JuZXJQb2ludHNGcm9tT3JpZ2luID0gcm90YXRlUG9pbnRzKHNlbGVjdGlvbkNvcm5lclBvaW50cywgWzAsIDBdLCBhbmdsZSk7XG4gICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGNvcm5lclBvaW50c0Zyb21PcmlnaW4pKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJvdGF0ZVBvaW50cyhjb3JuZXJQb2ludHNGcm9tT3JpZ2luLCBjZW50ZXJQb2ludCwgLWFuZ2xlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T2Zmc2V0QWZ0ZXJSb3RhdGUgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJvdGF0ZUNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHRhcmdldENlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSk7XG4gICAgY29uc3QgW3JvdGF0ZWRDZW50ZXJQb2ludF0gPSByb3RhdGVQb2ludHMoW3RhcmdldENlbnRlclBvaW50XSwgcm90YXRlQ2VudGVyUG9pbnQsIGFuZ2xlKTtcbiAgICBjb25zdCBvZmZzZXRYID0gcm90YXRlZENlbnRlclBvaW50WzBdIC0gdGFyZ2V0Q2VudGVyUG9pbnRbMF07XG4gICAgY29uc3Qgb2Zmc2V0WSA9IHJvdGF0ZWRDZW50ZXJQb2ludFsxXSAtIHRhcmdldENlbnRlclBvaW50WzFdO1xuICAgIHJldHVybiB7IG9mZnNldFgsIG9mZnNldFkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByb3RhdGVkRGF0YVBvaW50cyA9IChwb2ludHM6IFBvaW50W10sIHJvdGF0ZUNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcik6IFBvaW50W10gPT4ge1xuICAgIGNvbnN0IHsgb2Zmc2V0WCwgb2Zmc2V0WSB9ID0gZ2V0T2Zmc2V0QWZ0ZXJSb3RhdGUoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyksIHJvdGF0ZUNlbnRlclBvaW50LCBhbmdsZSk7XG4gICAgcmV0dXJuIHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuZ2xlID0gKG5vZGU6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBub2RlLmFuZ2xlICYmIG5vZGUuYW5nbGUgIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgcm90YXRlUG9pbnRzQnlFbGVtZW50ID0gPFQ+KHBvaW50czogVCwgZWxlbWVudDogUGxhaXRFbGVtZW50KTogVCB8IG51bGwgPT4ge1xuICAgIGlmIChoYXNWYWxpZEFuZ2xlKGVsZW1lbnQpKSB7XG4gICAgICAgIGxldCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhwb2ludHMsIGNlbnRlclBvaW50LCBlbGVtZW50LmFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudCA9IDxUPihwb2ludHM6IFQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCk6IFQgfCBudWxsID0+IHtcbiAgICBpZiAoaGFzVmFsaWRBbmdsZShlbGVtZW50KSkge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzISk7XG4gICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiByb3RhdGVQb2ludHMocG9pbnRzLCBjZW50ZXJQb2ludCwgLWVsZW1lbnQuYW5nbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVCeUFuZ2xlID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgIGNvbnN0IGNvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyb3RhdGVQb2ludHMoY29ybmVyUG9pbnRzLCBjZW50ZXJQb2ludCwgYW5nbGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUgPSAoYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHVuaXRBbmdsZSA9IE1hdGguYWJzKGFuZ2xlKSAlIE1hdGguUEk7XG4gICAgcmV0dXJuIHVuaXRBbmdsZSA+PSAoMSAvIDQpICogTWF0aC5QSSAmJiB1bml0QW5nbGUgPD0gKDMgLyA0KSAqIE1hdGguUEk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoZCAvIDE4MCkgKiBNYXRoLlBJO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFkaWFuc1RvRGVncmVlcyhyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAociAvIE1hdGguUEkpICogMTgwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlRWxlbWVudHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgYW5nbGU6IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoc2VsZWN0aW9uUmVjdGFuZ2xlKTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5BbmdsZSA9IGl0ZW0uYW5nbGU7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKGl0ZW0ucG9pbnRzISwgc2VsZWN0aW9uQ2VudGVyUG9pbnQsIG5vcm1hbGl6ZUFuZ2xlKGFuZ2xlKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBpdGVtKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50cywgYW5nbGU6IG5vcm1hbGl6ZUFuZ2xlKG9yaWdpbkFuZ2xlICsgYW5nbGUpIH0sIHBhdGgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplQW5nbGUgPSAoYW5nbGU6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgaWYgKGFuZ2xlIDwgMCkge1xuICAgICAgICByZXR1cm4gYW5nbGUgKyAyICogTWF0aC5QSTtcbiAgICB9XG4gICAgaWYgKGFuZ2xlID49IDIgKiBNYXRoLlBJKSB7XG4gICAgICAgIHJldHVybiBhbmdsZSAtIDIgKiBNYXRoLlBJO1xuICAgIH1cbiAgICByZXR1cm4gYW5nbGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QW5nbGVCZXR3ZWVuUG9pbnRzID0gKHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQsIGNlbnRlclBvaW50OiBQb2ludCk6IG51bWJlciA9PiB7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9ICg1ICogTWF0aC5QSSkgLyAyICsgTWF0aC5hdGFuMihzdGFydFBvaW50WzFdIC0gY2VudGVyUG9pbnRbMV0sIHN0YXJ0UG9pbnRbMF0gLSBjZW50ZXJQb2ludFswXSk7XG4gICAgY29uc3QgZW5kQW5nbGUgPSAoNSAqIE1hdGguUEkpIC8gMiArIE1hdGguYXRhbjIoZW5kUG9pbnRbMV0gLSBjZW50ZXJQb2ludFsxXSwgZW5kUG9pbnRbMF0gLSBjZW50ZXJQb2ludFswXSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUFuZ2xlKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QW5nbGVCeUVsZW1lbnQgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gZWxlbWVudD8uYW5nbGU7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0QW5nbGVGb3JHID0gKGc6IFNWR0dFbGVtZW50LCBjZW50ZXJQb2ludDogUG9pbnQsIGFuZ2xlOiBudW1iZXIpID0+IHtcbiAgICBpZiAoYW5nbGUgPT09IDApIHtcbiAgICAgICAgZy5yZW1vdmVBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjZW50ZXJYID0gY2VudGVyUG9pbnRbMF07XG4gICAgdmFyIGNlbnRlclkgPSBjZW50ZXJQb2ludFsxXTtcblxuICAgIGxldCBjb3NUaGV0YSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICBsZXQgc2luVGhldGEgPSBNYXRoLnNpbihhbmdsZSk7XG5cbiAgICBsZXQgdHJhbnNmb3JtTWF0cml4ID0gW1xuICAgICAgICBjb3NUaGV0YSxcbiAgICAgICAgc2luVGhldGEsXG4gICAgICAgIC1zaW5UaGV0YSxcbiAgICAgICAgY29zVGhldGEsXG4gICAgICAgIGNlbnRlclggKiAoMSAtIGNvc1RoZXRhKSArIGNlbnRlclkgKiBzaW5UaGV0YSxcbiAgICAgICAgY2VudGVyWSAqICgxIC0gY29zVGhldGEpIC0gY2VudGVyWCAqIHNpblRoZXRhXG4gICAgXTtcblxuICAgIGxldCBtYXRyaXggPSAnbWF0cml4KCcgKyB0cmFuc2Zvcm1NYXRyaXguam9pbignLCcpICsgJyknO1xuICAgIGcuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBgJHttYXRyaXh9YCk7XG59O1xuIl19
@@ -49,9 +49,11 @@ export const debounce = (func, wait, options) => {
49
49
  };
50
50
  export const getElementsIndices = (board, elements) => {
51
51
  sortElements(board, elements);
52
- return elements.map(item => {
52
+ return elements
53
+ .map(item => {
53
54
  return board.children.map(item => item.id).indexOf(item.id);
54
- });
55
+ })
56
+ .filter(item => item >= 0);
55
57
  };
56
58
  export const getHighestIndexOfElement = (board, elements) => {
57
59
  const indices = getElementsIndices(board, elements);
@@ -71,4 +73,4 @@ export const moveElementsToNewPath = (board, moveOptions) => {
71
73
  action();
72
74
  });
73
75
  };
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBZ0QsQ0FBQztBQU9qRixNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN0QyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsR0FBVyxFQUFFLEVBQWMsRUFBRSxFQUFFO0lBQzFFLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRTtRQUN0QixJQUFJLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNsQixZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFB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QUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztTQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNkLE1BQU0sRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXRoLCBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vZGVUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcy9ub2RlJztcbmltcG9ydCB7IHNvcnRFbGVtZW50cyB9IGZyb20gJy4vcG9zaXRpb24nO1xuXG5jb25zdCBCT0FSRF9UT19SQUYgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCB7IFtrZXk6IHN0cmluZ106IG51bWJlciB8IG51bGwgfT4oKTtcblxuZXhwb3J0IGludGVyZmFjZSBNb3ZlTm9kZU9wdGlvbiB7XG4gICAgZWxlbWVudDogUGxhaXRFbGVtZW50O1xuICAgIG5ld1BhdGg6IFBhdGg7XG59XG5cbmNvbnN0IGdldFRpbWVySWQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRSQUZTdGF0ZShib2FyZCk7XG4gICAgcmV0dXJuIHN0YXRlW2tleV0gfHwgbnVsbDtcbn07XG5cbmNvbnN0IGdldFJBRlN0YXRlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX1JBRi5nZXQoYm9hcmQpIHx8IHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IHRocm90dGxlUkFGID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBrZXk6IHN0cmluZywgZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICBjb25zdCBzY2hlZHVsZUZ1bmMgPSAoKSA9PiB7XG4gICAgICAgIGxldCB0aW1lcklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gQk9BUkRfVE9fUkFGLmdldChib2FyZCkgfHwge307XG4gICAgICAgICAgICB2YWx1ZVtrZXldID0gbnVsbDtcbiAgICAgICAgICAgIEJPQVJEX1RPX1JBRi5zZXQoYm9hcmQsIHZhbHVlKTtcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuaXNBbGl2ZShib2FyZCkgJiYgZm4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0UkFGU3RhdGUoYm9hcmQpO1xuICAgICAgICBzdGF0ZVtrZXldID0gdGltZXJJZDtcbiAgICAgICAgQk9BUkRfVE9fUkFGLnNldChib2FyZCwgc3RhdGUpO1xuICAgIH07XG4gICAgbGV0IHRpbWVySWQgPSBnZXRUaW1lcklkKGJvYXJkLCBrZXkpO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpO1xuICAgIH1cbiAgICBzY2hlZHVsZUZ1bmMoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IChmdW5jOiAoKSA9PiB2b2lkLCB3YWl0OiBudW1iZXIsIG9wdGlvbnM/OiB7IGxlYWRpbmc6IGJvb2xlYW4gfSkgPT4ge1xuICAgIGxldCB0aW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVyU3Vic2NyaXB0aW9uICYmICF0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHdhaXQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuYygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucz8ubGVhZGluZykge1xuICAgICAgICAgICAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIod2FpdCkuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzSW5kaWNlcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKTogbnVtYmVyW10gPT4ge1xuICAgIHNvcnRFbGVtZW50cyhib2FyZCwgZWxlbWVudHMpO1xuICAgIHJldHVybiBlbGVtZW50cy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBib2FyZC5jaGlsZHJlbi5tYXAoaXRlbSA9PiBpdGVtLmlkKS5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RJbmRleE9mRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IGdldEVsZW1lbnRzSW5kaWNlcyhib2FyZCwgZWxlbWVudHMpO1xuICAgIHJldHVybiBpbmRpY2VzW2luZGljZXMubGVuZ3RoLTFdO1xufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVFbGVtZW50c1RvTmV3UGF0aCA9IChib2FyZDogUGxhaXRCb2FyZCwgbW92ZU9wdGlvbnM6IE1vdmVOb2RlT3B0aW9uW10pID0+IHtcbiAgICBtb3ZlT3B0aW9uc1xuICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGl0ZW0uZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBib2FyZC5wYXRoUmVmKHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCAmJiBOb2RlVHJhbnNmb3Jtcy5tb3ZlTm9kZShib2FyZCwgcmVmLmN1cnJlbnQsIGl0ZW0ubmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgcmVmLnVucmVmKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgIH0pO1xufTtcbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBZ0QsQ0FBQztBQU9qRixNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN0QyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsR0FBVyxFQUFFLEVBQWMsRUFBRSxFQUFFO0lBQzFFLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRTtRQUN0QixJQUFJLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNsQixZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFB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QUFHLEVBQUU7WUFDUixHQUFHLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7U0FDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDZCxNQUFNLEVBQUUsQ0FBQztJQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aCwgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb2RlVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMvbm9kZSc7XG5pbXBvcnQgeyBzb3J0RWxlbWVudHMgfSBmcm9tICcuL3Bvc2l0aW9uJztcblxuY29uc3QgQk9BUkRfVE9fUkFGID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCBudWxsIH0+KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW92ZU5vZGVPcHRpb24ge1xuICAgIGVsZW1lbnQ6IFBsYWl0RWxlbWVudDtcbiAgICBuZXdQYXRoOiBQYXRoO1xufVxuXG5jb25zdCBnZXRUaW1lcklkID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0UkFGU3RhdGUoYm9hcmQpO1xuICAgIHJldHVybiBzdGF0ZVtrZXldIHx8IG51bGw7XG59O1xuXG5jb25zdCBnZXRSQUZTdGF0ZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBCT0FSRF9UT19SQUYuZ2V0KGJvYXJkKSB8fCB7fTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aHJvdHRsZVJBRiA9IChib2FyZDogUGxhaXRCb2FyZCwga2V5OiBzdHJpbmcsIGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgY29uc3Qgc2NoZWR1bGVGdW5jID0gKCkgPT4ge1xuICAgICAgICBsZXQgdGltZXJJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEJPQVJEX1RPX1JBRi5nZXQoYm9hcmQpIHx8IHt9O1xuICAgICAgICAgICAgdmFsdWVba2V5XSA9IG51bGw7XG4gICAgICAgICAgICBCT0FSRF9UT19SQUYuc2V0KGJvYXJkLCB2YWx1ZSk7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmlzQWxpdmUoYm9hcmQpICYmIGZuKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGdldFJBRlN0YXRlKGJvYXJkKTtcbiAgICAgICAgc3RhdGVba2V5XSA9IHRpbWVySWQ7XG4gICAgICAgIEJPQVJEX1RPX1JBRi5zZXQoYm9hcmQsIHN0YXRlKTtcbiAgICB9O1xuICAgIGxldCB0aW1lcklkID0gZ2V0VGltZXJJZChib2FyZCwga2V5KTtcbiAgICBpZiAodGltZXJJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICB9XG4gICAgc2NoZWR1bGVGdW5jKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSAoZnVuYzogKCkgPT4gdm9pZCwgd2FpdDogbnVtYmVyLCBvcHRpb25zPzogeyBsZWFkaW5nOiBib29sZWFuIH0pID0+IHtcbiAgICBsZXQgdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICh0aW1lclN1YnNjcmlwdGlvbiAmJiAhdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih3YWl0KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZ1bmMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmxlYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmdW5jKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHdhaXQpLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c0luZGljZXMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSk6IG51bWJlcltdID0+IHtcbiAgICBzb3J0RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICByZXR1cm4gZWxlbWVudHNcbiAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBib2FyZC5jaGlsZHJlbi5tYXAoaXRlbSA9PiBpdGVtLmlkKS5pbmRleE9mKGl0ZW0uaWQpO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSA+PSAwKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0SW5kZXhPZkVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IGluZGljZXMgPSBnZXRFbGVtZW50c0luZGljZXMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICByZXR1cm4gaW5kaWNlc1tpbmRpY2VzLmxlbmd0aCAtIDFdO1xufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVFbGVtZW50c1RvTmV3UGF0aCA9IChib2FyZDogUGxhaXRCb2FyZCwgbW92ZU9wdGlvbnM6IE1vdmVOb2RlT3B0aW9uW10pID0+IHtcbiAgICBtb3ZlT3B0aW9uc1xuICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGl0ZW0uZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBib2FyZC5wYXRoUmVmKHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCAmJiBOb2RlVHJhbnNmb3Jtcy5tb3ZlTm9kZShib2FyZCwgcmVmLmN1cnJlbnQsIGl0ZW0ubmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgcmVmLnVucmVmKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgIH0pO1xufTtcbiJdfQ==