@plait/core 0.53.0 → 0.55.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 (84) hide show
  1. package/board/board.component.d.ts +5 -2
  2. package/constants/index.d.ts +2 -0
  3. package/constants/selection.d.ts +1 -0
  4. package/core/element/context.d.ts +6 -2
  5. package/core/element/plugin-element.d.ts +13 -4
  6. package/core/list-render.d.ts +16 -0
  7. package/esm2022/board/board.component.mjs +28 -23
  8. package/esm2022/constants/index.mjs +3 -1
  9. package/esm2022/constants/selection.mjs +2 -1
  10. package/esm2022/core/element/context.mjs +1 -1
  11. package/esm2022/core/element/plugin-element.mjs +79 -12
  12. package/esm2022/core/list-render.mjs +209 -0
  13. package/esm2022/interfaces/board.mjs +6 -2
  14. package/esm2022/interfaces/element.mjs +28 -2
  15. package/esm2022/interfaces/node.mjs +18 -1
  16. package/esm2022/interfaces/path.mjs +56 -57
  17. package/esm2022/interfaces/rectangle-client.mjs +4 -1
  18. package/esm2022/interfaces/selection.mjs +2 -2
  19. package/esm2022/plugins/create-board.mjs +15 -13
  20. package/esm2022/plugins/with-hotkey.mjs +33 -4
  21. package/esm2022/plugins/with-moving.mjs +15 -14
  22. package/esm2022/plugins/with-related-fragment.mjs +5 -5
  23. package/esm2022/plugins/with-selection.mjs +7 -5
  24. package/esm2022/public-api.mjs +1 -3
  25. package/esm2022/transforms/element.mjs +2 -2
  26. package/esm2022/transforms/group.mjs +23 -6
  27. package/esm2022/transforms/index.mjs +6 -3
  28. package/esm2022/transforms/z-index.mjs +20 -0
  29. package/esm2022/utils/angle.mjs +56 -3
  30. package/esm2022/utils/clipboard/clipboard.mjs +5 -5
  31. package/esm2022/utils/clipboard/common.mjs +5 -5
  32. package/esm2022/utils/clipboard/types.mjs +1 -1
  33. package/esm2022/utils/common.mjs +29 -2
  34. package/esm2022/utils/debug.mjs +16 -1
  35. package/esm2022/utils/element.mjs +3 -3
  36. package/esm2022/utils/fragment.mjs +24 -0
  37. package/esm2022/utils/group.mjs +37 -5
  38. package/esm2022/utils/helper.mjs +37 -1
  39. package/esm2022/utils/index.mjs +5 -1
  40. package/esm2022/utils/math.mjs +37 -1
  41. package/esm2022/utils/position.mjs +3 -3
  42. package/esm2022/utils/selection.mjs +2 -3
  43. package/esm2022/utils/snap/snap-moving.mjs +199 -0
  44. package/esm2022/utils/snap/snap.mjs +208 -0
  45. package/esm2022/utils/to-image.mjs +2 -2
  46. package/esm2022/utils/weak-maps.mjs +4 -1
  47. package/esm2022/utils/z-index.mjs +166 -0
  48. package/fesm2022/plait-core.mjs +2110 -1458
  49. package/fesm2022/plait-core.mjs.map +1 -1
  50. package/interfaces/board.d.ts +9 -7
  51. package/interfaces/element.d.ts +5 -0
  52. package/interfaces/node.d.ts +1 -0
  53. package/interfaces/rectangle-client.d.ts +1 -0
  54. package/interfaces/selection.d.ts +1 -1
  55. package/package.json +1 -1
  56. package/public-api.d.ts +0 -2
  57. package/styles/styles.scss +9 -0
  58. package/transforms/group.d.ts +4 -0
  59. package/transforms/index.d.ts +3 -2
  60. package/transforms/z-index.d.ts +13 -0
  61. package/utils/angle.d.ts +8 -1
  62. package/utils/clipboard/common.d.ts +1 -1
  63. package/utils/clipboard/types.d.ts +1 -1
  64. package/utils/common.d.ts +8 -0
  65. package/utils/debug.d.ts +1 -0
  66. package/utils/fragment.d.ts +4 -0
  67. package/utils/group.d.ts +4 -2
  68. package/utils/helper.d.ts +4 -1
  69. package/utils/index.d.ts +4 -0
  70. package/utils/math.d.ts +1 -0
  71. package/utils/position.d.ts +1 -1
  72. package/utils/selection.d.ts +1 -1
  73. package/utils/snap/snap-moving.d.ts +5 -0
  74. package/utils/snap/snap.d.ts +31 -0
  75. package/utils/weak-maps.d.ts +3 -0
  76. package/utils/z-index.d.ts +5 -0
  77. package/core/children/children.component.d.ts +0 -17
  78. package/core/children/effect.d.ts +0 -2
  79. package/core/element/element.component.d.ts +0 -30
  80. package/esm2022/core/children/children.component.mjs +0 -60
  81. package/esm2022/core/children/effect.mjs +0 -2
  82. package/esm2022/core/element/element.component.mjs +0 -105
  83. package/esm2022/utils/reaction-manager.mjs +0 -371
  84. package/utils/reaction-manager.d.ts +0 -41
@@ -1,4 +1,3 @@
1
- import produce from 'immer';
2
1
  export const Path = {
3
2
  /**
4
3
  * Get a list of ancestor paths for a given path.
@@ -53,9 +52,12 @@ export const Path = {
53
52
  },
54
53
  previous(path) {
55
54
  if (path.length === 0) {
56
- throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);
55
+ throw new Error(`Cannot get the previous path of a root path [${path}], because it has no previous index.`);
57
56
  }
58
57
  const last = path[path.length - 1];
58
+ if (last <= 0) {
59
+ throw new Error(`Cannot get the previous path of a first child path [${path}] because it would result in a negative index.`);
60
+ }
59
61
  return path.slice(0, -1).concat(last - 1);
60
62
  },
61
63
  /**
@@ -113,72 +115,69 @@ export const Path = {
113
115
  return al !== bl && Path.equals(as, bs);
114
116
  },
115
117
  transform(path, operation) {
116
- return produce(path, p => {
117
- // PERF: Exit early if the operation is guaranteed not to have an effect.
118
- if (!path || path?.length === 0) {
119
- return;
118
+ if (!path)
119
+ return null;
120
+ // PERF: use destructing instead of immer
121
+ const p = [...path];
122
+ // PERF: Exit early if the operation is guaranteed not to have an effect.
123
+ if (path.length === 0) {
124
+ return p;
125
+ }
126
+ switch (operation.type) {
127
+ case 'insert_node': {
128
+ const { path: op } = operation;
129
+ if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {
130
+ p[op.length - 1] += 1;
131
+ }
132
+ break;
120
133
  }
121
- if (p === null) {
122
- return null;
134
+ case 'remove_node': {
135
+ const { path: op } = operation;
136
+ if (Path.equals(op, p) || Path.isAncestor(op, p)) {
137
+ return null;
138
+ }
139
+ else if (Path.endsBefore(op, p)) {
140
+ p[op.length - 1] -= 1;
141
+ }
142
+ break;
123
143
  }
124
- switch (operation.type) {
125
- case 'insert_node': {
126
- const { path: op } = operation;
127
- if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {
128
- p[op.length - 1] += 1;
129
- }
130
- break;
144
+ case 'move_node': {
145
+ const { path: op, newPath: onp } = operation;
146
+ // If the old and new path are the same, it's a no-op.
147
+ if (Path.equals(op, onp)) {
148
+ return p;
131
149
  }
132
- case 'remove_node': {
133
- const { path: op } = operation;
134
- if (Path.equals(op, p) || Path.isAncestor(op, p)) {
135
- return null;
136
- }
137
- else if (Path.endsBefore(op, p)) {
138
- p[op.length - 1] -= 1;
150
+ if (Path.isAncestor(op, p) || Path.equals(op, p)) {
151
+ const copy = onp.slice();
152
+ if (Path.endsBefore(op, onp) && op.length < onp.length) {
153
+ copy[op.length - 1] -= 1;
139
154
  }
140
- break;
155
+ return copy.concat(p.slice(op.length));
141
156
  }
142
- case 'move_node': {
143
- const { path: op, newPath: onp } = operation;
144
- // If the old and new path are the same, it's a no-op.
145
- if (Path.equals(op, onp)) {
146
- return;
157
+ else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {
158
+ if (Path.endsBefore(op, p)) {
159
+ p[op.length - 1] -= 1;
147
160
  }
148
- if (Path.isAncestor(op, p) || Path.equals(op, p)) {
149
- const copy = onp.slice();
150
- // op.length <= onp.length is different for slate
151
- // resolve drag from [0, 0] to [0, 3] issue
152
- if (Path.endsBefore(op, onp) && op.length <= onp.length) {
153
- copy[op.length - 1] -= 1;
154
- }
155
- return copy.concat(p.slice(op.length));
161
+ else {
162
+ p[op.length - 1] += 1;
156
163
  }
157
- else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {
158
- if (Path.endsBefore(op, p)) {
159
- p[op.length - 1] -= 1;
160
- }
161
- else {
162
- p[op.length - 1] += 1;
163
- }
164
+ }
165
+ else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {
166
+ if (Path.endsBefore(op, p)) {
167
+ p[op.length - 1] -= 1;
164
168
  }
165
- else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {
166
- if (Path.endsBefore(op, p)) {
167
- p[op.length - 1] -= 1;
168
- }
169
+ p[onp.length - 1] += 1;
170
+ }
171
+ else if (Path.endsBefore(op, p)) {
172
+ if (Path.equals(onp, p)) {
169
173
  p[onp.length - 1] += 1;
170
174
  }
171
- else if (Path.endsBefore(op, p)) {
172
- if (Path.equals(onp, p)) {
173
- p[onp.length - 1] += 1;
174
- }
175
- p[op.length - 1] -= 1;
176
- }
177
- break;
175
+ p[op.length - 1] -= 1;
178
176
  }
177
+ break;
179
178
  }
180
- return p;
181
- });
179
+ }
180
+ return p;
182
181
  }
183
182
  };
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxPQUFPLENBQUM7QUFTNUIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHO0lBQ2hCOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLElBQVUsRUFBRSxVQUE2QixFQUFFO1FBQ2pELE1BQU0sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3BDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLElBQVUsRUFBRSxVQUE2QixFQUFFO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFXLEVBQUUsQ0FBQztRQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNW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ImltcG9ydCBwcm9kdWNlIGZyb20gJ2ltbWVyJztcbmltcG9ydCB7IFBsYWl0T3BlcmF0aW9uIH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhdGhMZXZlbHNPcHRpb25zIHtcbiAgICByZXZlcnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUGF0aCA9IG51bWJlcltdO1xuXG5leHBvcnQgY29uc3QgUGF0aCA9IHtcbiAgICAvKipcbiAgICAgKiBHZXQgYSBsaXN0IG9mIGFuY2VzdG9yIHBhdGhzIGZvciBhIGdpdmVuIHBhdGguXG4gICAgICpcbiAgICAgKiBUaGUgcGF0aHMgYXJlIHNvcnRlZCBmcm9tIHNoYWxsb3dlc3QgdG8gZGVlcGVzdCBhbmNlc3Rvci4gSG93ZXZlciwgaWYgdGhlXG4gICAgICogYHJldmVyc2U6IHRydWVgIG9wdGlvbiBpcyBwYXNzZWQsIHRoZXkgYXJlIHJldmVyc2VkLlxuICAgICAqL1xuICAgIGFuY2VzdG9ycyhwYXRoOiBQYXRoLCBvcHRpb25zOiBQYXRoTGV2ZWxzT3B0aW9ucyA9IHt9KTogUGF0aFtdIHtcbiAgICAgICAgY29uc3QgeyByZXZlcnNlID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgICAgIGxldCBwYXRocyA9IFBhdGgubGV2ZWxzKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICBwYXRocyA9IHBhdGhzLnNsaWNlKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0aHMgPSBwYXRocy5zbGljZSgwLCAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGF0aHM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgYSBsaXN0IG9mIHBhdGhzIGF0IGV2ZXJ5IGxldmVsIGRvd24gdG8gYSBwYXRoLiBOb3RlOiB0aGlzIGlzIHRoZSBzYW1lXG4gICAgICogYXMgYFBhdGguYW5jZXN0b3JzYCwgYnV0IGluY2x1ZGluZyB0aGUgcGF0aCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBUaGUgcGF0aHMgYXJlIHNvcnRlZCBmcm9tIHNoYWxsb3dlc3QgdG8gZGVlcGVzdC4gSG93ZXZlciwgaWYgdGhlIGByZXZlcnNlOlxuICAgICAqIHRydWVgIG9wdGlvbiBpcyBwYXNzZWQsIHRoZXkgYXJlIHJldmVyc2VkLlxuICAgICAqL1xuICAgIGxldmVscyhwYXRoOiBQYXRoLCBvcHRpb25zOiBQYXRoTGV2ZWxzT3B0aW9ucyA9IHt9KTogUGF0aFtdIHtcbiAgICAgICAgY29uc3QgeyByZXZlcnNlID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxpc3Q6IFBhdGhbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxpc3QucHVzaChwYXRoLnNsaWNlKDAsIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICBsaXN0LnJldmVyc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sXG4gICAgcGFyZW50KHBhdGg6IFBhdGgpOiBQYXRoIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgdGhlIHBhcmVudCBwYXRoIG9mIHRoZSByb290IHBhdGggWyR7cGF0aH1dLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgLTEpO1xuICAgIH0sXG4gICAgbmV4dChwYXRoOiBQYXRoKTogUGF0aCB7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBuZXh0IHBhdGggb2YgYSByb290IHBhdGggWyR7cGF0aH1dLCBiZWNhdXNlIGl0IGhhcyBubyBuZXh0IGluZGV4LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQobGFzdCArIDEpO1xuICAgIH0sXG4gICAgaGFzUHJldmlvdXMocGF0aDogUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdID4gMDtcbiAgICB9LFxuICAgIHByZXZpb3VzKHBhdGg6IFBhdGgpOiBQYXRoIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgdGhlIG5leHQgcGF0aCBvZiBhIHJvb3QgcGF0aCBbJHtwYXRofV0sIGJlY2F1c2UgaXQgaGFzIG5vIHByZXZpb3VzIGluZGV4LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQobGFzdCAtIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBwYXRoIGlzIGFuIGFuY2VzdG9yIG9mIGFub3RoZXIuXG4gICAgICovXG5cbiAgICBpc0FuY2VzdG9yKHBhdGg6IFBhdGgsIGFub3RoZXI6IFBhdGgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgYW5vdGhlci5sZW5ndGggJiYgUGF0aC5jb21wYXJlKHBhdGgsIGFub3RoZXIpID09PSAwO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSBhIHBhdGggdG8gYW5vdGhlciwgcmV0dXJuaW5nIGFuIGludGVnZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBwYXRoXG4gICAgICogd2FzIGJlZm9yZSwgYXQsIG9yIGFmdGVyIHRoZSBvdGhlci5cbiAgICAgKlxuICAgICAqIE5vdGU6IFR3byBwYXRocyBvZiB1bmVxdWFsIGxlbmd0aCBjYW4gc3RpbGwgcmVjZWl2ZSBhIGAwYCByZXN1bHQgaWYgb25lIGlzXG4gICAgICogZGlyZWN0bHkgYWJvdmUgb3IgYmVsb3cgdGhlIG90aGVyLiBJZiB5b3Ugd2FudCBleGFjdCBtYXRjaGluZywgdXNlXG4gICAgICogW1tQYXRoLmVxdWFsc11dIGluc3RlYWQuXG4gICAgICovXG4gICAgY29tcGFyZShwYXRoOiBQYXRoLCBhbm90aGVyOiBQYXRoKTogLTEgfCAwIHwgMSB7XG4gICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHBhdGgubGVuZ3RoLCBhbm90aGVyLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgICAgICAgaWYgKHBhdGhbaV0gPCBhbm90aGVyW2ldKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAocGF0aFtpXSA+IGFub3RoZXJbaV0pIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgcGF0aCBpcyBleGFjdGx5IGVxdWFsIHRvIGFub3RoZXIuXG4gICAgICovXG5cbiAgICBlcXVhbHMocGF0aDogUGF0aCwgYW5vdGhlcjogUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGF0aC5sZW5ndGggPT09IGFub3RoZXIubGVuZ3RoICYmIHBhdGguZXZlcnkoKG4sIGkpID0+IG4gPT09IGFub3RoZXJbaV0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBwYXRoIGVuZHMgYmVmb3JlIG9uZSBvZiB0aGUgaW5kZXhlcyBpbiBhbm90aGVyLlxuICAgICAqL1xuXG4gICAgZW5kc0JlZm9yZShwYXRoOiBQYXRoLCBhbm90aGVyOiBQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGkgPSBwYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGFzID0gcGF0aC5zbGljZSgwLCBpKTtcbiAgICAgICAgY29uc3QgYnMgPSBhbm90aGVyLnNsaWNlKDAsIGkpO1xuICAgICAgICBjb25zdCBhdiA9IHBhdGhbaV07XG4gICAgICAgIGNvbnN0IGJ2ID0gYW5vdGhlcltpXTtcbiAgICAgICAgcmV0dXJuIFBhdGguZXF1YWxzKGFzLCBicykgJiYgYXYgPCBidjtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgcGF0aCBpcyBhIHNpYmxpbmcgb2YgYW5vdGhlci5cbiAgICAgKi9cbiAgICBpc1NpYmxpbmcocGF0aDogUGF0aCwgYW5vdGhlcjogUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocGF0aC5sZW5ndGggIT09IGFub3RoZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcyA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgICBjb25zdCBicyA9IGFub3RoZXIuc2xpY2UoMCwgLTEpO1xuICAgICAgICBjb25zdCBhbCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgYmwgPSBhbm90aGVyW2Fub3RoZXIubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBhbCAhPT0gYmwgJiYgUGF0aC5lcXVhbHMoYXMsIGJzKTtcbiAgICB9LFxuICAgIHRyYW5zZm9ybShwYXRoOiBQYXRoIHwgbnVsbCwgb3BlcmF0aW9uOiBQbGFpdE9wZXJhdGlvbik6IFBhdGggfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHByb2R1Y2UocGF0aCwgcCA9PiB7XG4gICAgICAgICAgICAvLyBQRVJGOiBFeGl0IGVhcmx5IGlmIHRoZSBvcGVyYXRpb24gaXMgZ3VhcmFudGVlZCBub3QgdG8gaGF2ZSBhbiBlZmZlY3QuXG4gICAgICAgICAgICBpZiAoIXBhdGggfHwgcGF0aD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0X25vZGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aDogb3AgfSA9IG9wZXJhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoUGF0aC5lcXVhbHMob3AsIHApIHx8IFBhdGguZW5kc0JlZm9yZShvcCwgcCkgfHwgUGF0aC5pc0FuY2VzdG9yKG9wLCBwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcFtvcC5sZW5ndGggLSAxXSArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAncmVtb3ZlX25vZGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aDogb3AgfSA9IG9wZXJhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoUGF0aC5lcXVhbHMob3AsIHApIHx8IFBhdGguaXNBbmNlc3RvcihvcCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFBhdGguZW5kc0JlZm9yZShvcCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBbb3AubGVuZ3RoIC0gMV0gLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ21vdmVfbm9kZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwYXRoOiBvcCwgbmV3UGF0aDogb25wIH0gPSBvcGVyYXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9sZCBhbmQgbmV3IHBhdGggYXJlIHRoZSBzYW1lLCBpdCdzIGEgbm8tb3AuXG4gICAgICAgICAgICAgICAgICAgIGlmIChQYXRoLmVxdWFscyhvcCwgb25wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFBhdGguaXNBbmNlc3RvcihvcCwgcCkgfHwgUGF0aC5lcXVhbHMob3AsIHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5ID0gb25wLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcC5sZW5ndGggPD0gb25wLmxlbmd0aCBpcyBkaWZmZXJlbnQgZm9yIHNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlIGRyYWcgZnJvbSBbMCwgMF0gdG8gWzAsIDNdIGlzc3VlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGF0aC5lbmRzQmVmb3JlKG9wLCBvbnApICYmIG9wLmxlbmd0aCA8PSBvbnAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVtvcC5sZW5ndGggLSAxXSAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weS5jb25jYXQocC5zbGljZShvcC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQYXRoLmlzU2libGluZyhvcCwgb25wKSAmJiAoUGF0aC5pc0FuY2VzdG9yKG9ucCwgcCkgfHwgUGF0aC5lcXVhbHMob25wLCBwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQYXRoLmVuZHNCZWZvcmUob3AsIHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtvcC5sZW5ndGggLSAxXSAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW29wLmxlbmd0aCAtIDFdICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGF0aC5lbmRzQmVmb3JlKG9ucCwgcCkgfHwgUGF0aC5lcXVhbHMob25wLCBwKSB8fCBQYXRoLmlzQW5jZXN0b3Iob25wLCBwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBhdGguZW5kc0JlZm9yZShvcCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW29wLmxlbmd0aCAtIDFdIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBbb25wLmxlbmd0aCAtIDFdICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGF0aC5lbmRzQmVmb3JlKG9wLCBwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBhdGguZXF1YWxzKG9ucCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW29ucC5sZW5ndGggLSAxXSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwW29wLmxlbmd0aCAtIDFdIC09IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiJdfQ==
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUc7SUFDaEI7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsSUFBVSxFQUFFLFVBQTZCLEVBQUU7UUFDakQsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDcEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBVSxFQUFFLFVBQTZCLEVBQUU7UUFDOUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQVcsRUFBRSxDQUFDO1FBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25C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ZW50IjpbImltcG9ydCB7IFBsYWl0T3BlcmF0aW9uIH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhdGhMZXZlbHNPcHRpb25zIHtcbiAgICByZXZlcnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUGF0aCA9IG51bWJlcltdO1xuXG5leHBvcnQgY29uc3QgUGF0aCA9IHtcbiAgICAvKipcbiAgICAgKiBHZXQgYSBsaXN0IG9mIGFuY2VzdG9yIHBhdGhzIGZvciBhIGdpdmVuIHBhdGguXG4gICAgICpcbiAgICAgKiBUaGUgcGF0aHMgYXJlIHNvcnRlZCBmcm9tIHNoYWxsb3dlc3QgdG8gZGVlcGVzdCBhbmNlc3Rvci4gSG93ZXZlciwgaWYgdGhlXG4gICAgICogYHJldmVyc2U6IHRydWVgIG9wdGlvbiBpcyBwYXNzZWQsIHRoZXkgYXJlIHJldmVyc2VkLlxuICAgICAqL1xuICAgIGFuY2VzdG9ycyhwYXRoOiBQYXRoLCBvcHRpb25zOiBQYXRoTGV2ZWxzT3B0aW9ucyA9IHt9KTogUGF0aFtdIHtcbiAgICAgICAgY29uc3QgeyByZXZlcnNlID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgICAgIGxldCBwYXRocyA9IFBhdGgubGV2ZWxzKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICBwYXRocyA9IHBhdGhzLnNsaWNlKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0aHMgPSBwYXRocy5zbGljZSgwLCAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGF0aHM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgYSBsaXN0IG9mIHBhdGhzIGF0IGV2ZXJ5IGxldmVsIGRvd24gdG8gYSBwYXRoLiBOb3RlOiB0aGlzIGlzIHRoZSBzYW1lXG4gICAgICogYXMgYFBhdGguYW5jZXN0b3JzYCwgYnV0IGluY2x1ZGluZyB0aGUgcGF0aCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBUaGUgcGF0aHMgYXJlIHNvcnRlZCBmcm9tIHNoYWxsb3dlc3QgdG8gZGVlcGVzdC4gSG93ZXZlciwgaWYgdGhlIGByZXZlcnNlOlxuICAgICAqIHRydWVgIG9wdGlvbiBpcyBwYXNzZWQsIHRoZXkgYXJlIHJldmVyc2VkLlxuICAgICAqL1xuICAgIGxldmVscyhwYXRoOiBQYXRoLCBvcHRpb25zOiBQYXRoTGV2ZWxzT3B0aW9ucyA9IHt9KTogUGF0aFtdIHtcbiAgICAgICAgY29uc3QgeyByZXZlcnNlID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxpc3Q6IFBhdGhbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxpc3QucHVzaChwYXRoLnNsaWNlKDAsIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICBsaXN0LnJldmVyc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sXG4gICAgcGFyZW50KHBhdGg6IFBhdGgpOiBQYXRoIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgdGhlIHBhcmVudCBwYXRoIG9mIHRoZSByb290IHBhdGggWyR7cGF0aH1dLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgLTEpO1xuICAgIH0sXG4gICAgbmV4dChwYXRoOiBQYXRoKTogUGF0aCB7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBuZXh0IHBhdGggb2YgYSByb290IHBhdGggWyR7cGF0aH1dLCBiZWNhdXNlIGl0IGhhcyBubyBuZXh0IGluZGV4LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQobGFzdCArIDEpO1xuICAgIH0sXG4gICAgaGFzUHJldmlvdXMocGF0aDogUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdID4gMDtcbiAgICB9LFxuICAgIHByZXZpb3VzKHBhdGg6IFBhdGgpOiBQYXRoIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgdGhlIHByZXZpb3VzIHBhdGggb2YgYSByb290IHBhdGggWyR7cGF0aH1dLCBiZWNhdXNlIGl0IGhhcyBubyBwcmV2aW91cyBpbmRleC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKGxhc3QgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBwcmV2aW91cyBwYXRoIG9mIGEgZmlyc3QgY2hpbGQgcGF0aCBbJHtwYXRofV0gYmVjYXVzZSBpdCB3b3VsZCByZXN1bHQgaW4gYSBuZWdhdGl2ZSBpbmRleC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQobGFzdCAtIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBwYXRoIGlzIGFuIGFuY2VzdG9yIG9mIGFub3RoZXIuXG4gICAgICovXG5cbiAgICBpc0FuY2VzdG9yKHBhdGg6IFBhdGgsIGFub3RoZXI6IFBhdGgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgYW5vdGhlci5sZW5ndGggJiYgUGF0aC5jb21wYXJlKHBhdGgsIGFub3RoZXIpID09PSAwO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSBhIHBhdGggdG8gYW5vdGhlciwgcmV0dXJuaW5nIGFuIGludGVnZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBwYXRoXG4gICAgICogd2FzIGJlZm9yZSwgYXQsIG9yIGFmdGVyIHRoZSBvdGhlci5cbiAgICAgKlxuICAgICAqIE5vdGU6IFR3byBwYXRocyBvZiB1bmVxdWFsIGxlbmd0aCBjYW4gc3RpbGwgcmVjZWl2ZSBhIGAwYCByZXN1bHQgaWYgb25lIGlzXG4gICAgICogZGlyZWN0bHkgYWJvdmUgb3IgYmVsb3cgdGhlIG90aGVyLiBJZiB5b3Ugd2FudCBleGFjdCBtYXRjaGluZywgdXNlXG4gICAgICogW1tQYXRoLmVxdWFsc11dIGluc3RlYWQuXG4gICAgICovXG4gICAgY29tcGFyZShwYXRoOiBQYXRoLCBhbm90aGVyOiBQYXRoKTogLTEgfCAwIHwgMSB7XG4gICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHBhdGgubGVuZ3RoLCBhbm90aGVyLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgICAgICAgaWYgKHBhdGhbaV0gPCBhbm90aGVyW2ldKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAocGF0aFtpXSA+IGFub3RoZXJbaV0pIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgcGF0aCBpcyBleGFjdGx5IGVxdWFsIHRvIGFub3RoZXIuXG4gICAgICovXG5cbiAgICBlcXVhbHMocGF0aDogUGF0aCwgYW5vdGhlcjogUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcGF0aC5sZW5ndGggPT09IGFub3RoZXIubGVuZ3RoICYmIHBhdGguZXZlcnkoKG4sIGkpID0+IG4gPT09IGFub3RoZXJbaV0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBwYXRoIGVuZHMgYmVmb3JlIG9uZSBvZiB0aGUgaW5kZXhlcyBpbiBhbm90aGVyLlxuICAgICAqL1xuXG4gICAgZW5kc0JlZm9yZShwYXRoOiBQYXRoLCBhbm90aGVyOiBQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGkgPSBwYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGFzID0gcGF0aC5zbGljZSgwLCBpKTtcbiAgICAgICAgY29uc3QgYnMgPSBhbm90aGVyLnNsaWNlKDAsIGkpO1xuICAgICAgICBjb25zdCBhdiA9IHBhdGhbaV07XG4gICAgICAgIGNvbnN0IGJ2ID0gYW5vdGhlcltpXTtcbiAgICAgICAgcmV0dXJuIFBhdGguZXF1YWxzKGFzLCBicykgJiYgYXYgPCBidjtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgcGF0aCBpcyBhIHNpYmxpbmcgb2YgYW5vdGhlci5cbiAgICAgKi9cbiAgICBpc1NpYmxpbmcocGF0aDogUGF0aCwgYW5vdGhlcjogUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocGF0aC5sZW5ndGggIT09IGFub3RoZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcyA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgICBjb25zdCBicyA9IGFub3RoZXIuc2xpY2UoMCwgLTEpO1xuICAgICAgICBjb25zdCBhbCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgYmwgPSBhbm90aGVyW2Fub3RoZXIubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBhbCAhPT0gYmwgJiYgUGF0aC5lcXVhbHMoYXMsIGJzKTtcbiAgICB9LFxuICAgIHRyYW5zZm9ybShwYXRoOiBQYXRoIHwgbnVsbCwgb3BlcmF0aW9uOiBQbGFpdE9wZXJhdGlvbik6IFBhdGggfCBudWxsIHtcbiAgICAgICAgaWYgKCFwYXRoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gUEVSRjogdXNlIGRlc3RydWN0aW5nIGluc3RlYWQgb2YgaW1tZXJcbiAgICAgICAgY29uc3QgcCA9IFsuLi5wYXRoXTtcblxuICAgICAgICAvLyBQRVJGOiBFeGl0IGVhcmx5IGlmIHRoZSBvcGVyYXRpb24gaXMgZ3VhcmFudGVlZCBub3QgdG8gaGF2ZSBhbiBlZmZlY3QuXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdpbnNlcnRfbm9kZSc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBhdGg6IG9wIH0gPSBvcGVyYXRpb247XG5cbiAgICAgICAgICAgICAgICBpZiAoUGF0aC5lcXVhbHMob3AsIHApIHx8IFBhdGguZW5kc0JlZm9yZShvcCwgcCkgfHwgUGF0aC5pc0FuY2VzdG9yKG9wLCBwKSkge1xuICAgICAgICAgICAgICAgICAgICBwW29wLmxlbmd0aCAtIDFdICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZV9ub2RlJzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aDogb3AgfSA9IG9wZXJhdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChQYXRoLmVxdWFscyhvcCwgcCkgfHwgUGF0aC5pc0FuY2VzdG9yKG9wLCBwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFBhdGguZW5kc0JlZm9yZShvcCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFtvcC5sZW5ndGggLSAxXSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdtb3ZlX25vZGUnOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwYXRoOiBvcCwgbmV3UGF0aDogb25wIH0gPSBvcGVyYXRpb247XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIGFuZCBuZXcgcGF0aCBhcmUgdGhlIHNhbWUsIGl0J3MgYSBuby1vcC5cbiAgICAgICAgICAgICAgICBpZiAoUGF0aC5lcXVhbHMob3AsIG9ucCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFBhdGguaXNBbmNlc3RvcihvcCwgcCkgfHwgUGF0aC5lcXVhbHMob3AsIHApKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBvbnAuc2xpY2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoUGF0aC5lbmRzQmVmb3JlKG9wLCBvbnApICYmIG9wLmxlbmd0aCA8IG9ucC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlbb3AubGVuZ3RoIC0gMV0gLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5LmNvbmNhdChwLnNsaWNlKG9wLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGF0aC5pc1NpYmxpbmcob3AsIG9ucCkgJiYgKFBhdGguaXNBbmNlc3RvcihvbnAsIHApIHx8IFBhdGguZXF1YWxzKG9ucCwgcCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQYXRoLmVuZHNCZWZvcmUob3AsIHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwW29wLmxlbmd0aCAtIDFdIC09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwW29wLmxlbmd0aCAtIDFdICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFBhdGguZW5kc0JlZm9yZShvbnAsIHApIHx8IFBhdGguZXF1YWxzKG9ucCwgcCkgfHwgUGF0aC5pc0FuY2VzdG9yKG9ucCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFBhdGguZW5kc0JlZm9yZShvcCwgcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBbb3AubGVuZ3RoIC0gMV0gLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBbb25wLmxlbmd0aCAtIDFdICs9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQYXRoLmVuZHNCZWZvcmUob3AsIHApKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQYXRoLmVxdWFscyhvbnAsIHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwW29ucC5sZW5ndGggLSAxXSArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcFtvcC5sZW5ndGggLSAxXSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbn07XG4iXX0=
@@ -99,6 +99,9 @@ export const RectangleClient = {
99
99
  getCenterPoint: (rectangle) => {
100
100
  return [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
101
101
  },
102
+ getCenterPointByPoints: (points) => {
103
+ return RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(points));
104
+ },
102
105
  getEdgeCenterPoints: (rectangle) => {
103
106
  return [
104
107
  [rectangle.x + rectangle.width / 2, rectangle.y],
@@ -151,4 +154,4 @@ export const RectangleClient = {
151
154
  };
152
155
  }
153
156
  };
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLEtBQUssRUFBRSxDQUFDLE1BQXVCLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1FBQ3hELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUNELE1BQU0sRUFBRSxDQUFDLE1BQXVCLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1FBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuSCx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEtBQUssQ0FB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Q04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByb3RhdGUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vcG9pbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3RhbmdsZUNsaWVudCB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFt4LCB5XSB4LHkgYmV0d2VlbiAwIGFuZCAxXG4gKiByZXByZXNlbnRzIGEgcG9pbnQgaW4gdGhlIHJlY3RhbmdsZVxuICovXG5leHBvcnQgdHlwZSBQb2ludE9mUmVjdGFuZ2xlID0gW251bWJlciwgbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFJlY3RhbmdsZUNsaWVudCA9IHtcbiAgICBpc0hpdDogKG9yaWdpbjogUmVjdGFuZ2xlQ2xpZW50LCB0YXJnZXQ6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0WChvcmlnaW4sIHRhcmdldCkgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzSGl0WShvcmlnaW4sIHRhcmdldCk7XG4gICAgfSxcbiAgICBpc0hpdFg6IChvcmlnaW46IFJlY3RhbmdsZUNsaWVudCwgdGFyZ2V0OiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgbWluWCA9IG9yaWdpbi54IDwgdGFyZ2V0LnggPyBvcmlnaW4ueCA6IHRhcmdldC54O1xuICAgICAgICBjb25zdCBtYXhYID0gb3JpZ2luLnggKyBvcmlnaW4ud2lkdGggPiB0YXJnZXQueCArIHRhcmdldC53aWR0aCA/IG9yaWdpbi54ICsgb3JpZ2luLndpZHRoIDogdGFyZ2V0LnggKyB0YXJnZXQud2lkdGg7XG4gICAgICAgIC8vIGZsb2F0IGNhbGN1bGF0ZSBlcnJvciggZWc6IDEuNDIxMDg1NDcxNTIwMjAwNGUtMTQgPiAwKVxuICAgICAgICBpZiAoTWF0aC5mbG9vcihtYXhYIC0gbWluWCAtIG9yaWdpbi53aWR0aCAtIHRhcmdldC53aWR0aCkgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGlzSGl0WTogKG9yaWdpbjogUmVjdGFuZ2xlQ2xpZW50LCB0YXJnZXQ6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBtaW5ZID0gb3JpZ2luLnkgPCB0YXJnZXQueSA/IG9yaWdpbi55IDogdGFyZ2V0Lnk7XG4gICAgICAgIGNvbnN0IG1heFkgPSBvcmlnaW4ueSArIG9yaWdpbi5oZWlnaHQgPiB0YXJnZXQueSArIHRhcmdldC5oZWlnaHQgPyBvcmlnaW4ueSArIG9yaWdpbi5oZWlnaHQgOiB0YXJnZXQueSArIHRhcmdldC5oZWlnaHQ7XG4gICAgICAgIC8vIGZsb2F0IGNhbGN1bGF0ZSBlcnJvciggZWc6IDEuNDIxMDg1NDcxNTIwMjAwNGUtMTQgPiAwKVxuICAgICAgICBpZiAoTWF0aC5mbG9vcihtYXhZIC0gbWluWSAtIG9yaWdpbi5oZWlnaHQgLSB0YXJnZXQuaGVpZ2h0KSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XVxuICAgICAgICBdIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChwb2ludDogUG9pbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludChbcG9pbnRbMF0gLSB3aWR0aCAvIDIsIHBvaW50WzFdIC0gaGVpZ2h0IC8gMl0sIHdpZHRoLCBoZWlnaHQpO1xuICAgIH0sXG4gICAgZ2V0UmVjdGFuZ2xlQnlQb2ludChwb2ludDogUG9pbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHBvaW50WzBdLFxuICAgICAgICAgICAgeTogcG9pbnRbMV0sXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzOiBQb2ludFtdKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICAgICAgY29uc3QgeEFycmF5ID0gcG9pbnRzLm1hcChlbGUgPT4gZWxlWzBdKTtcbiAgICAgICAgY29uc3QgeUFycmF5ID0gcG9pbnRzLm1hcChlbGUgPT4gZWxlWzFdKTtcbiAgICAgICAgY29uc3QgeE1pbiA9IE1hdGgubWluKC4uLnhBcnJheSk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBNYXRoLm1heCguLi54QXJyYXkpO1xuICAgICAgICBjb25zdCB5TWluID0gTWF0aC5taW4oLi4ueUFycmF5KTtcbiAgICAgICAgY29uc3QgeU1heCA9IE1hdGgubWF4KC4uLnlBcnJheSk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB7IHg6IHhNaW4sIHk6IHlNaW4sIHdpZHRoOiB4TWF4IC0geE1pbiwgaGVpZ2h0OiB5TWF4IC0geU1pbiB9O1xuICAgICAgICByZXR1cm4gcmVjdDtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50c0J5UG9pbnRzKHBvaW50czogUG9pbnRbXSkge1xuICAgICAgICBjb25zdCB4QXJyYXkgPSBwb2ludHMubWFwKGVsZSA9PiBlbGVbMF0pO1xuICAgICAgICBjb25zdCB5QXJyYXkgPSBwb2ludHMubWFwKGVsZSA9PiBlbGVbMV0pO1xuICAgICAgICBjb25zdCB4TWluID0gTWF0aC5taW4oLi4ueEFycmF5KTtcbiAgICAgICAgY29uc3QgeE1heCA9IE1hdGgubWF4KC4uLnhBcnJheSk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbiguLi55QXJyYXkpO1xuICAgICAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgoLi4ueUFycmF5KTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFt4TWluLCB5TWluXSxcbiAgICAgICAgICAgIFt4TWF4LCB5TWluXSxcbiAgICAgICAgICAgIFt4TWF4LCB5TWF4XSxcbiAgICAgICAgICAgIFt4TWluLCB5TWF4XVxuICAgICAgICBdIGFzIFtQb2ludCwgUG9pbnQsIFBvaW50LCBQb2ludF07XG4gICAgfSxcbiAgICBnZXRPdXRsaW5lUmVjdGFuZ2xlOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0YW5nbGUueCArIG9mZnNldCxcbiAgICAgICAgICAgIHk6IHJlY3RhbmdsZS55ICsgb2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IHJlY3RhbmdsZS53aWR0aCAtIG9mZnNldCAqIDIsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgLSBvZmZzZXQgKiAyXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBpbmZsYXRlOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGRlbHRhOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgaGFsZiA9IGRlbHRhIC8gMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHJlY3RhbmdsZS54IC0gaGFsZixcbiAgICAgICAgICAgIHk6IHJlY3RhbmdsZS55IC0gaGFsZixcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggKyBoYWxmICogMixcbiAgICAgICAgICAgIGhlaWdodDogcmVjdGFuZ2xlLmhlaWdodCArIGhhbGYgKiAyXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBpc0VxdWFsOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG90aGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY3RhbmdsZS54ID09PSBvdGhlclJlY3RhbmdsZS54ICYmXG4gICAgICAgICAgICByZWN0YW5nbGUueSA9PT0gb3RoZXJSZWN0YW5nbGUueSAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoID09PSBvdGhlclJlY3RhbmdsZS53aWR0aCAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCA9PT0gb3RoZXJSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgfSxcbiAgICBnZXRDb3JuZXJQb2ludHM6IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XVxuICAgICAgICBdIGFzIFtQb2ludCwgUG9pbnQsIFBvaW50LCBQb2ludF07XG4gICAgfSxcbiAgICBnZXRDZW50ZXJQb2ludDogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSBhcyBQb2ludDtcbiAgICB9LFxuXG4gICAgZ2V0RWRnZUNlbnRlclBvaW50czogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdGlvblBvaW50OiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludE9mUmVjdGFuZ2xlKSA9PiB7XG4gICAgICAgIHJldHVybiBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiBwb2ludFswXSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0ICogcG9pbnRbMV1dIGFzIFBvaW50O1xuICAgIH0sXG4gICAgZXhwYW5kKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyID0gbGVmdCwgcmlnaHQ6IG51bWJlciA9IGxlZnQsIGJvdHRvbTogbnVtYmVyID0gdG9wKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0YW5nbGUueCAtIGxlZnQsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSAtIHRvcCxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggKyBsZWZ0ICsgcmlnaHQsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgKyB0b3AgKyBib3R0b21cbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdldEdhcENlbnRlcihyZWN0YW5nbGUxOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTI6IFJlY3RhbmdsZUNsaWVudCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAneCcgOiAneSc7XG4gICAgICAgIGNvbnN0IHNpZGUgPSBpc0hvcml6b250YWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGFsaWduID0gW3JlY3RhbmdsZTFbYXhpc10sIHJlY3RhbmdsZTFbYXhpc10gKyByZWN0YW5nbGUxW3NpZGVdLCByZWN0YW5nbGUyW2F4aXNdLCByZWN0YW5nbGUyW2F4aXNdICsgcmVjdGFuZ2xlMltzaWRlXV07XG4gICAgICAgIGNvbnN0IHNvcnRBcnIgPSBhbGlnbi5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIHJldHVybiAoc29ydEFyclsxXSArIHNvcnRBcnJbMl0pIC8gMjtcbiAgICB9LFxuICAgIGlzUG9pbnRJblJlY3RhbmdsZShyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHggPSBwb2ludFswXSxcbiAgICAgICAgICAgIHkgPSBwb2ludFsxXTtcbiAgICAgICAgcmV0dXJuIHggPiByZWN0YW5nbGUueCAmJiB4IDwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggJiYgeSA+IHJlY3RhbmdsZS55ICYmIHkgPCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQ7XG4gICAgfSxcbiAgICBnZXRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXSk6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgICAgIGlmIChyZWN0YW5nbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWN0YW5nbGVzIGNhbiBub3QgYmUgZW1wdHkgYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluWCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIGxldCBtaW5ZID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgbGV0IG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGxldCBtYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICByZWN0YW5nbGVzLmZvckVhY2gocmVjdCA9PiB7XG4gICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcmVjdC54KTtcbiAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHJlY3QueCArIHJlY3Qud2lkdGgpO1xuICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QueSArIHJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBtaW5YLFxuICAgICAgICAgICAgeTogbWluWSxcbiAgICAgICAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICAgICAgICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLEtBQUssRUFBRSxDQUFDLE1BQXVCLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1FBQ3hELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUNELE1BQU0sRUFBRSxDQUFDLE1BQXVCLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1FBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuSCx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sRUFBRSxDQUFDLE1BQXVCLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1FBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2SCx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUNELFNBQVMsQ0FBQyxTQUEwQjtRQUNoQyxPQUFPO1lBQ0gsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQ2hELENBQUM7SUFDeEIsQ0FBQztJQUNELHlCQUF5QixDQUFDLEtBQVksRUFBRSxLQUFhLEVBQUUsTUFBYztRQUNqRSxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsS0FBYSxFQUFFLE1BQWM7UUFDM0QsT0FBTztZQUNILENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxLQUFLO1lBQ0wsTUFBTTtTQUNULENBQUM7SUFDTixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsTUFBZTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxNQUFlO1FBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLE9BQU87WUFDSCxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7WUFDWixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7WUFDWixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7WUFDWixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7U0FDaUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxTQUEwQixFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ2hFLE9BQU87WUFDSCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNO1lBQ3ZCLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU07WUFDdkIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUM7WUFDbkMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUM7U0FDeEMsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUEwQixFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQ25ELE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDdkIsT0FBTztZQUNILENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDckIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtZQUNyQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNqQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQztTQUN0QyxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLFNBQTBCLEVBQUUsY0FBK0IsRUFBRSxFQUFFO1FBQ3JFLE9BQU8sQ0FDSCxTQUFTLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDaEMsU0FBUyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsS0FBSztZQUN4QyxTQUFTLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQzdDLENBQUM7SUFDTixDQUFDO0lBQ0QsZUFBZSxFQUFFLENBQUMsU0FBMEIsRUFBRSxFQUFFO1FBQzVDLE9BQU87WUFDSCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUMvRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQ2hCLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLFNBQTBCLEVBQUUsRUFBRTtRQUMzQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFVLENBQUM7SUFDNUYsQ0FBQztJQUNELHNCQUFzQixFQUFFLENBQUMsTUFBZSxFQUFFLEVBQUU7UUFDeEMsT0FBTyxlQUFlLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxtQkFBbUIsRUFBRSxDQUFDLFNBQTBCLEVBQUUsRUFBRTtRQUNoRCxPQUFPO1lBQ0gsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNuRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ25FLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCLENBQUM7SUFDdEMsQ0FBQztJQUNELGtCQUFrQixFQUFFLENBQUMsU0FBMEIsRUFBRSxLQUF1QixFQUFFLEVBQUU7UUFDeEUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBVSxDQUFDO0lBQzFHLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBMEIsRUFBRSxJQUFZLEVBQUUsTUFBYyxJQUFJLEVBQUUsUUFBZ0IsSUFBSSxFQUFFLFNBQWlCLEdBQUc7UUFDM0csT0FBTztZQUNILENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDckIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUNwQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSztZQUNyQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTTtTQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUNELFlBQVksQ0FBQyxVQUEyQixFQUFFLFVBQTJCLEVBQUUsWUFBcUI7UUFDeEYsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3SCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDdkQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNkLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDekgsQ0FBQztJQUNELG9CQUFvQixDQUFDLFVBQTZCO1FBQzlDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDNUIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUM1QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDcEMsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0gsQ0FBQyxFQUFFLElBQUk7WUFDUCxDQUFDLEVBQUUsSUFBSTtZQUNQLEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSTtZQUNsQixNQUFNLEVBQUUsSUFBSSxHQUFHLElBQUk7U0FDdEIsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcm90YXRlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50JztcblxuZXhwb3J0IGludGVyZmFjZSBSZWN0YW5nbGVDbGllbnQge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBbeCwgeV0geCx5IGJldHdlZW4gMCBhbmQgMVxuICogcmVwcmVzZW50cyBhIHBvaW50IGluIHRoZSByZWN0YW5nbGVcbiAqL1xuZXhwb3J0IHR5cGUgUG9pbnRPZlJlY3RhbmdsZSA9IFtudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSZWN0YW5nbGVDbGllbnQgPSB7XG4gICAgaXNIaXQ6IChvcmlnaW46IFJlY3RhbmdsZUNsaWVudCwgdGFyZ2V0OiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdFgob3JpZ2luLCB0YXJnZXQpICYmIFJlY3RhbmdsZUNsaWVudC5pc0hpdFkob3JpZ2luLCB0YXJnZXQpO1xuICAgIH0sXG4gICAgaXNIaXRYOiAob3JpZ2luOiBSZWN0YW5nbGVDbGllbnQsIHRhcmdldDogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG1pblggPSBvcmlnaW4ueCA8IHRhcmdldC54ID8gb3JpZ2luLnggOiB0YXJnZXQueDtcbiAgICAgICAgY29uc3QgbWF4WCA9IG9yaWdpbi54ICsgb3JpZ2luLndpZHRoID4gdGFyZ2V0LnggKyB0YXJnZXQud2lkdGggPyBvcmlnaW4ueCArIG9yaWdpbi53aWR0aCA6IHRhcmdldC54ICsgdGFyZ2V0LndpZHRoO1xuICAgICAgICAvLyBmbG9hdCBjYWxjdWxhdGUgZXJyb3IoIGVnOiAxLjQyMTA4NTQ3MTUyMDIwMDRlLTE0ID4gMClcbiAgICAgICAgaWYgKE1hdGguZmxvb3IobWF4WCAtIG1pblggLSBvcmlnaW4ud2lkdGggLSB0YXJnZXQud2lkdGgpIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc0hpdFk6IChvcmlnaW46IFJlY3RhbmdsZUNsaWVudCwgdGFyZ2V0OiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgbWluWSA9IG9yaWdpbi55IDwgdGFyZ2V0LnkgPyBvcmlnaW4ueSA6IHRhcmdldC55O1xuICAgICAgICBjb25zdCBtYXhZID0gb3JpZ2luLnkgKyBvcmlnaW4uaGVpZ2h0ID4gdGFyZ2V0LnkgKyB0YXJnZXQuaGVpZ2h0ID8gb3JpZ2luLnkgKyBvcmlnaW4uaGVpZ2h0IDogdGFyZ2V0LnkgKyB0YXJnZXQuaGVpZ2h0O1xuICAgICAgICAvLyBmbG9hdCBjYWxjdWxhdGUgZXJyb3IoIGVnOiAxLjQyMTA4NTQ3MTUyMDIwMDRlLTE0ID4gMClcbiAgICAgICAgaWYgKE1hdGguZmxvb3IobWF4WSAtIG1pblkgLSBvcmlnaW4uaGVpZ2h0IC0gdGFyZ2V0LmhlaWdodCkgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldFBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICB9LFxuICAgIGdldFJlY3RhbmdsZUJ5Q2VudGVyUG9pbnQocG9pbnQ6IFBvaW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnQoW3BvaW50WzBdIC0gd2lkdGggLyAyLCBwb2ludFsxXSAtIGhlaWdodCAvIDJdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9LFxuICAgIGdldFJlY3RhbmdsZUJ5UG9pbnQocG9pbnQ6IFBvaW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwb2ludFswXSxcbiAgICAgICAgICAgIHk6IHBvaW50WzFdLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50czogUG9pbnRbXSk6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgICAgIGNvbnN0IHhBcnJheSA9IHBvaW50cy5tYXAoZWxlID0+IGVsZVswXSk7XG4gICAgICAgIGNvbnN0IHlBcnJheSA9IHBvaW50cy5tYXAoZWxlID0+IGVsZVsxXSk7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBNYXRoLm1pbiguLi54QXJyYXkpO1xuICAgICAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgoLi4ueEFycmF5KTtcbiAgICAgICAgY29uc3QgeU1pbiA9IE1hdGgubWluKC4uLnlBcnJheSk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBNYXRoLm1heCguLi55QXJyYXkpO1xuICAgICAgICBjb25zdCByZWN0ID0geyB4OiB4TWluLCB5OiB5TWluLCB3aWR0aDogeE1heCAtIHhNaW4sIGhlaWdodDogeU1heCAtIHlNaW4gfTtcbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfSxcbiAgICBnZXRDb3JuZXJQb2ludHNCeVBvaW50cyhwb2ludHM6IFBvaW50W10pIHtcbiAgICAgICAgY29uc3QgeEFycmF5ID0gcG9pbnRzLm1hcChlbGUgPT4gZWxlWzBdKTtcbiAgICAgICAgY29uc3QgeUFycmF5ID0gcG9pbnRzLm1hcChlbGUgPT4gZWxlWzFdKTtcbiAgICAgICAgY29uc3QgeE1pbiA9IE1hdGgubWluKC4uLnhBcnJheSk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBNYXRoLm1heCguLi54QXJyYXkpO1xuICAgICAgICBjb25zdCB5TWluID0gTWF0aC5taW4oLi4ueUFycmF5KTtcbiAgICAgICAgY29uc3QgeU1heCA9IE1hdGgubWF4KC4uLnlBcnJheSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbeE1pbiwgeU1pbl0sXG4gICAgICAgICAgICBbeE1heCwgeU1pbl0sXG4gICAgICAgICAgICBbeE1heCwgeU1heF0sXG4gICAgICAgICAgICBbeE1pbiwgeU1heF1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0T3V0bGluZVJlY3RhbmdsZTogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvZmZzZXQ6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcmVjdGFuZ2xlLnggKyBvZmZzZXQsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSArIG9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggLSBvZmZzZXQgKiAyLFxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0YW5nbGUuaGVpZ2h0IC0gb2Zmc2V0ICogMlxuICAgICAgICB9O1xuICAgIH0sXG4gICAgaW5mbGF0ZTogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBkZWx0YTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbGYgPSBkZWx0YSAvIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0YW5nbGUueCAtIGhhbGYsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSAtIGhhbGYsXG4gICAgICAgICAgICB3aWR0aDogcmVjdGFuZ2xlLndpZHRoICsgaGFsZiAqIDIsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgKyBoYWxmICogMlxuICAgICAgICB9O1xuICAgIH0sXG4gICAgaXNFcXVhbDogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByZWN0YW5nbGUueCA9PT0gb3RoZXJSZWN0YW5nbGUueCAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLnkgPT09IG90aGVyUmVjdGFuZ2xlLnkgJiZcbiAgICAgICAgICAgIHJlY3RhbmdsZS53aWR0aCA9PT0gb3RoZXJSZWN0YW5nbGUud2lkdGggJiZcbiAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgPT09IG90aGVyUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICApO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0Q2VudGVyUG9pbnQ6IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0gYXMgUG9pbnQ7XG4gICAgfSxcbiAgICBnZXRDZW50ZXJQb2ludEJ5UG9pbnRzOiAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cykpO1xuICAgIH0sXG4gICAgZ2V0RWRnZUNlbnRlclBvaW50czogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdGlvblBvaW50OiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludE9mUmVjdGFuZ2xlKSA9PiB7XG4gICAgICAgIHJldHVybiBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiBwb2ludFswXSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0ICogcG9pbnRbMV1dIGFzIFBvaW50O1xuICAgIH0sXG4gICAgZXhwYW5kKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyID0gbGVmdCwgcmlnaHQ6IG51bWJlciA9IGxlZnQsIGJvdHRvbTogbnVtYmVyID0gdG9wKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0YW5nbGUueCAtIGxlZnQsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSAtIHRvcCxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggKyBsZWZ0ICsgcmlnaHQsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgKyB0b3AgKyBib3R0b21cbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdldEdhcENlbnRlcihyZWN0YW5nbGUxOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTI6IFJlY3RhbmdsZUNsaWVudCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAneCcgOiAneSc7XG4gICAgICAgIGNvbnN0IHNpZGUgPSBpc0hvcml6b250YWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGFsaWduID0gW3JlY3RhbmdsZTFbYXhpc10sIHJlY3RhbmdsZTFbYXhpc10gKyByZWN0YW5nbGUxW3NpZGVdLCByZWN0YW5nbGUyW2F4aXNdLCByZWN0YW5nbGUyW2F4aXNdICsgcmVjdGFuZ2xlMltzaWRlXV07XG4gICAgICAgIGNvbnN0IHNvcnRBcnIgPSBhbGlnbi5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIHJldHVybiAoc29ydEFyclsxXSArIHNvcnRBcnJbMl0pIC8gMjtcbiAgICB9LFxuICAgIGlzUG9pbnRJblJlY3RhbmdsZShyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHggPSBwb2ludFswXSxcbiAgICAgICAgICAgIHkgPSBwb2ludFsxXTtcbiAgICAgICAgcmV0dXJuIHggPiByZWN0YW5nbGUueCAmJiB4IDwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggJiYgeSA+IHJlY3RhbmdsZS55ICYmIHkgPCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQ7XG4gICAgfSxcbiAgICBnZXRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXSk6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgICAgIGlmIChyZWN0YW5nbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWN0YW5nbGVzIGNhbiBub3QgYmUgZW1wdHkgYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluWCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIGxldCBtaW5ZID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgbGV0IG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGxldCBtYXhZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICByZWN0YW5nbGVzLmZvckVhY2gocmVjdCA9PiB7XG4gICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcmVjdC54KTtcbiAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHJlY3QueCArIHJlY3Qud2lkdGgpO1xuICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QueSArIHJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBtaW5YLFxuICAgICAgICAgICAgeTogbWluWSxcbiAgICAgICAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICAgICAgICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19
@@ -1,5 +1,5 @@
1
1
  export const SELECTION_BORDER_COLOR = '#6698FF';
2
- export const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度
2
+ export const SELECTION_FILL_COLOR = '#6698FF25'; // opacity 0.25
3
3
  export const Selection = {
4
4
  isCollapsed(selection) {
5
5
  if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {
@@ -10,4 +10,4 @@ export const Selection = {
10
10
  }
11
11
  }
12
12
  };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvaW50ZXJmYWNlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxDQUFDLGFBQWE7QUFPOUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFdBQVcsQ0FBQyxTQUFvQjtRQUM1QixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi9wb2ludCc7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SID0gJyM2Njk4RkYnO1xuZXhwb3J0IGNvbnN0IFNFTEVDVElPTl9GSUxMX0NPTE9SID0gJyM2Njk4RkYxOSc7IC8vIOS4u+iJsiAwLjEg6YCP5piO5bqmXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uIHtcbiAgICBhbmNob3I6IFBvaW50O1xuICAgIGZvY3VzOiBQb2ludDtcbn1cblxuZXhwb3J0IGNvbnN0IFNlbGVjdGlvbiA9IHtcbiAgICBpc0NvbGxhcHNlZChzZWxlY3Rpb246IFNlbGVjdGlvbikge1xuICAgICAgICBpZiAoc2VsZWN0aW9uLmFuY2hvclswXSA9PSBzZWxlY3Rpb24uZm9jdXNbMF0gJiYgc2VsZWN0aW9uLmFuY2hvclsxXSA9PT0gc2VsZWN0aW9uLmZvY3VzWzFdKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvaW50ZXJmYWNlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxDQUFDLGVBQWU7QUFPaEUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFdBQVcsQ0FBQyxTQUFvQjtRQUM1QixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi9wb2ludCc7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SID0gJyM2Njk4RkYnO1xuZXhwb3J0IGNvbnN0IFNFTEVDVElPTl9GSUxMX0NPTE9SID0gJyM2Njk4RkYyNSc7IC8vIG9wYWNpdHkgMC4yNVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbiB7XG4gICAgYW5jaG9yOiBQb2ludDtcbiAgICBmb2N1czogUG9pbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBTZWxlY3Rpb24gPSB7XG4gICAgaXNDb2xsYXBzZWQoc2VsZWN0aW9uOiBTZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5hbmNob3JbMF0gPT0gc2VsZWN0aW9uLmZvY3VzWzBdICYmIHNlbGVjdGlvbi5hbmNob3JbMV0gPT09IHNlbGVjdGlvbi5mb2N1c1sxXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIl19
@@ -4,7 +4,7 @@ import { FLUSHING, PATH_REFS } from '../utils/weak-maps';
4
4
  import { PathRef } from '../interfaces/path-ref';
5
5
  import { ThemeColorMode } from '../interfaces/theme';
6
6
  import { CoreTransforms } from '../transforms/element';
7
- import { setClipboardData } from '../utils';
7
+ import { drawEntireActiveRectangleG } from '../utils';
8
8
  export function createBoard(children, options) {
9
9
  const board = {
10
10
  viewport: {
@@ -69,6 +69,9 @@ export function createBoard(children, options) {
69
69
  },
70
70
  onChange: () => { },
71
71
  afterChange: () => { },
72
+ drawActiveRectangle: () => {
73
+ return drawEntireActiveRectangleG(board);
74
+ },
72
75
  mousedown: (event) => { },
73
76
  mousemove: (event) => { },
74
77
  mouseleave: (event) => { },
@@ -79,19 +82,16 @@ export function createBoard(children, options) {
79
82
  globalKeyDown: (event) => { },
80
83
  keyUp: (event) => { },
81
84
  dblClick: (event) => { },
82
- setFragment: (data, clipboardContext) => {
83
- setClipboardData(data, clipboardContext);
84
- },
85
- insertFragment: (data) => { },
86
- deleteFragment: (data) => {
87
- const elements = board.getDeletedFragment([]);
85
+ buildFragment: (clipboardContext) => clipboardContext,
86
+ insertFragment: () => { },
87
+ deleteFragment: (elements) => {
88
88
  CoreTransforms.removeElements(board, elements);
89
89
  },
90
90
  getDeletedFragment: (data) => data,
91
- getRelatedFragment: (data) => data,
92
- drawElement: (context) => [],
93
- redrawElement: (context, previousContext) => { },
94
- destroyElement: (context) => { },
91
+ getRelatedFragment: (data, originData) => data,
92
+ drawElement: (context) => {
93
+ throw new Error(`can not resolve plugin element component type: ${context.element.type}`);
94
+ },
95
95
  isWithinSelection: element => false,
96
96
  isRectangleHit: element => false,
97
97
  isHit: element => false,
@@ -110,8 +110,10 @@ export function createBoard(children, options) {
110
110
  globalPointerMove: pointer => { },
111
111
  globalPointerUp: pointer => { },
112
112
  isImageBindingAllowed: (element) => false,
113
- canAddToGroup: (element) => true
113
+ canAddToGroup: (element) => true,
114
+ canSetZIndex: (element) => true,
115
+ isExpanded: (element) => true
114
116
  };
115
117
  return board;
116
118
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy9jcmVhdGUtYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXRFLE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBd0IsRUFBRSxPQUEyQjtJQUM3RSxNQUFNLEtBQUssR0FBZTtRQUN0QixRQUFRLEVBQUU7WUFDTixJQUFJLEVBQUUsQ0FBQztTQUNWO1FBQ0QsUUFBUTtRQUNSLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQ2pELFVBQVUsRUFBRSxFQUFFO1FBQ2QsT0FBTyxFQUFFO1lBQ0wsS0FBSyxFQUFFLEVBQUU7WUFDVCxLQUFLLEVBQUUsRUFBRTtTQUNaO1FBQ0QsU0FBUyxFQUFFLElBQUk7UUFDZixPQUFPLEVBQUUsT0FBTyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsYUFBYSxFQUFFLEtBQUs7WUFDcEIsd0JBQXdCLEVBQUUsS0FBSztTQUNsQztRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFn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QUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJO1FBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUs7UUFDM0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSTtRQUM3QixVQUFVLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsR0FBRSxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUs7UUFDekIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUUsQ0FBQztRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRSxDQUFDO1FBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFFLENBQUM7UUFDeEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUUsQ0FBQztRQUM1QixVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRSxDQUFDO1FBQ3pCLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFFLENBQUM7UUFDM0IsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRSxDQUFDO1FBQ2hDLGVBQWUsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFFLENBQUM7UUFDOUIscUJBQXFCLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLO1FBQ3ZELGFBQWEsRUFBRSxDQUFDLE9BQXFCLEVBQUUsRUFBRSxDQUFDLElBQUk7S0FDakQsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEJvYXJkT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgUGxhaXRQb2ludGVyVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnRlcic7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCB9IGZyb20gJy4uL2NvcmUvZWxlbWVudC9jb250ZXh0JztcbmltcG9ydCB7IFBsYWl0T3BlcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9vcGVyYXRpb24nO1xuaW1wb3J0IHsgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgRkxVU0hJTkcsIFBBVEhfUkVGUyB9IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBQYXRoUmVmLCBQYXRoUmVmT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGF0aC1yZWYnO1xuaW1wb3J0IHsgUGF0aCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGF0aCc7XG5pbXBvcnQgeyBUaGVtZUNvbG9yTW9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGhlbWUnO1xuaW1wb3J0IHsgQ29yZVRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zL2VsZW1lbnQnO1xuaW1wb3J0IHsgV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0LCBzZXRDbGlwYm9hcmREYXRhIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQm9hcmQoY2hpbGRyZW46IFBsYWl0RWxlbWVudFtdLCBvcHRpb25zPzogUGxhaXRCb2FyZE9wdGlvbnMpOiBQbGFpdEJvYXJkIHtcbiAgICBjb25zdCBib2FyZDogUGxhaXRCb2FyZCA9IHtcbiAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgIHpvb206IDFcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHRoZW1lOiB7IHRoZW1lQ29sb3JNb2RlOiBUaGVtZUNvbG9yTW9kZS5kZWZhdWx0IH0sXG4gICAgICAgIG9wZXJhdGlvbnM6IFtdLFxuICAgICAgICBoaXN0b3J5OiB7XG4gICAgICAgICAgICByZWRvczogW10sXG4gICAgICAgICAgICB1bmRvczogW11cbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0aW9uOiBudWxsLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zIHx8IHtcbiAgICAgICAgICAgIHJlYWRvbmx5OiBmYWxzZSxcbiAgICAgICAgICAgIGhpZGVTY3JvbGxiYXI6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZWRTY3JvbGxPbk5vbkZvY3VzOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBwb2ludGVyOiBvcHRpb25zPy5yZWFkb25seSA/IFBsYWl0UG9pbnRlclR5cGUuaGFuZCA6IFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uLFxuICAgICAgICB1bmRvOiAoKSA9PiB7fSxcbiAgICAgICAgcmVkbzogKCkgPT4ge30sXG4gICAgICAgIGFwcGx5OiAob3BlcmF0aW9uOiBQbGFpdE9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWYgb2YgYm9hcmQucGF0aFJlZnMoKSkge1xuICAgICAgICAgICAgICAgIFBhdGhSZWYudHJhbnNmb3JtKHJlZiwgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYm9hcmQub3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbik7XG5cbiAgICAgICAgICAgIFRyYW5zZm9ybXMudHJhbnNmb3JtKGJvYXJkLCBvcGVyYXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoIUZMVVNISU5HLmdldChib2FyZCkpIHtcbiAgICAgICAgICAgICAgICBGTFVTSElORy5zZXQoYm9hcmQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEZMVVNISU5HLnNldChib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBib2FyZC5vbkNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICBib2FyZC5hZnRlckNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICBib2FyZC5vcGVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGhSZWY6IChwYXRoOiBQYXRoLCBvcHRpb25zPzogUGF0aFJlZk9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFmZmluaXR5ID0gb3B0aW9ucz8uYWZmaW5pdHkgfHwgJ2ZvcndhcmQnO1xuICAgICAgICAgICAgY29uc3QgcmVmOiBQYXRoUmVmID0ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHBhdGgsXG4gICAgICAgICAgICAgICAgYWZmaW5pdHksXG4gICAgICAgICAgICAgICAgdW5yZWYoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudCB9ID0gcmVmO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoUmVmcyA9IGJvYXJkLnBhdGhSZWZzKCk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhSZWZzLmRlbGV0ZShyZWYpO1xuICAgICAgICAgICAgICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZnMgPSBib2FyZC5wYXRoUmVmcygpO1xuICAgICAgICAgICAgcmVmcy5hZGQocmVmKTtcbiAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGhSZWZzOiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVmcyA9IFBBVEhfUkVGUy5nZXQoYm9hcmQpO1xuXG4gICAgICAgICAgICBpZiAoIXJlZnMpIHtcbiAgICAgICAgICAgICAgICByZWZzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIFBBVEhfUkVGUy5zZXQoYm9hcmQsIHJlZnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVmcztcbiAgICAgICAgfSxcbiAgICAgICAgb25DaGFuZ2U6ICgpID0+IHt9LFxuICAgICAgICBhZnRlckNoYW5nZTogKCkgPT4ge30sXG4gICAgICAgIG1vdXNlZG93bjogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7fSxcbiAgICAgICAgbW91c2Vtb3ZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHt9LFxuICAgICAgICBtb3VzZWxlYXZlOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHt9LFxuICAgICAgICBnbG9iYWxNb3VzZW1vdmU6IChldmVudDogTW91c2VFdmVudCkgPT4ge30sXG4gICAgICAgIG1vdXNldXA6IChldmVudDogTW91c2VFdmVudCkgPT4ge30sXG4gICAgICAgIGdsb2JhbE1vdXNldXA6IChldmVudDogTW91c2VFdmVudCkgPT4ge30sXG4gICAgICAgIGtleURvd246IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge30sXG4gICAgICAgIGdsb2JhbEtleURvd246IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge30sXG4gICAgICAgIGtleVVwOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHt9LFxuICAgICAgICBkYmxDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7fSxcbiAgICAgICAgc2V0RnJhZ21lbnQ6IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCBjbGlwYm9hcmRDb250ZXh0OiBXcml0YWJsZUNsaXBib2FyZENvbnRleHQgfCBudWxsKSA9PiB7XG4gICAgICAgICAgICBzZXRDbGlwYm9hcmREYXRhKGRhdGEsIGNsaXBib2FyZENvbnRleHQpO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRGcmFnbWVudDogKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHt9LFxuICAgICAgICBkZWxldGVGcmFnbWVudDogKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYm9hcmQuZ2V0RGVsZXRlZEZyYWdtZW50KFtdKTtcbiAgICAgICAgICAgIENvcmVUcmFuc2Zvcm1zLnJlbW92ZUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldERlbGV0ZWRGcmFnbWVudDogKGRhdGE6IFBsYWl0RWxlbWVudFtdKSA9PiBkYXRhLFxuICAgICAgICBnZXRSZWxhdGVkRnJhZ21lbnQ6IChkYXRhOiBQbGFpdEVsZW1lbnRbXSkgPT4gZGF0YSxcbiAgICAgICAgZHJhd0VsZW1lbnQ6IChjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0KSA9PiBbXSxcbiAgICAgICAgcmVkcmF3RWxlbWVudDogKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQsIHByZXZpb3VzQ29udGV4dCkgPT4ge30sXG4gICAgICAgIGRlc3Ryb3lFbGVtZW50OiAoY29udGV4dDogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCkgPT4ge30sXG4gICAgICAgIGlzV2l0aGluU2VsZWN0aW9uOiBlbGVtZW50ID0+IGZhbHNlLFxuICAgICAgICBpc1JlY3RhbmdsZUhpdDogZWxlbWVudCA9PiBmYWxzZSxcbiAgICAgICAgaXNIaXQ6IGVsZW1lbnQgPT4gZmFsc2UsXG4gICAgICAgIGlzSW5zaWRlUG9pbnQ6IGVsZW1lbnQgPT4gZmFsc2UsXG4gICAgICAgIGlzUmVjdXJzaW9uOiBlbGVtZW50ID0+IHRydWUsXG4gICAgICAgIGlzTW92YWJsZTogZWxlbWVudCA9PiBmYWxzZSxcbiAgICAgICAgZ2V0UmVjdGFuZ2xlOiBlbGVtZW50ID0+IG51bGwsXG4gICAgICAgIGFwcGx5VGhlbWU6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHt9LFxuICAgICAgICBpc0FsaWduOiBlbGVtZW50ID0+IGZhbHNlLFxuICAgICAgICBwb2ludGVyRG93bjogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlck1vdmU6IHBvaW50ZXIgPT4ge30sXG4gICAgICAgIHBvaW50ZXJVcDogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlckNhbmNlbDogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlck91dDogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlckxlYXZlOiBwb2ludGVyID0+IHt9LFxuICAgICAgICBnbG9iYWxQb2ludGVyTW92ZTogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgZ2xvYmFsUG9pbnRlclVwOiBwb2ludGVyID0+IHt9LFxuICAgICAgICBpc0ltYWdlQmluZGluZ0FsbG93ZWQ6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGZhbHNlLFxuICAgICAgICBjYW5BZGRUb0dyb3VwOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gYm9hcmQ7XG59XG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy9jcmVhdGUtYm9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQTRCLDBCQUEwQixFQUFvQixNQUFNLFVBQVUsQ0FBQztBQUVsRyxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQXdCLEVBQUUsT0FBMkI7SUFDN0UsTUFBTSxLQUFLLEdBQWU7UUFDdEIsUUFBUSxFQUFFO1lBQ04sSUFBSSxFQUFFLENBQUM7U0FDVjtRQUNELFFBQVE7UUFDUixLQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRTtRQUNqRCxVQUFVLEVBQUUsRUFBRTtRQUNkLE9BQU8sRUFBRTtZQUNMLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUU7U0FDWjtRQUNELFNBQVMsRUFBRSxJQUFJO1FBQ2YsT0FBTyxFQUFFLE9BQU8sSUFBSTtZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLHdCQUF3QixFQUFFLEtBQUs7U0FDbEM7UUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFB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QUs7UUFDM0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSTtRQUM3QixVQUFVLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsR0FBRSxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUs7UUFDekIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUUsQ0FBQztRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRSxDQUFDO1FBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFFLENBQUM7UUFDeEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUUsQ0FBQztRQUM1QixVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRSxDQUFDO1FBQ3pCLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFFLENBQUM7UUFDM0IsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRSxDQUFDO1FBQ2hDLGVBQWUsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFFLENBQUM7UUFDOUIscUJBQXFCLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLO1FBQ3ZELGFBQWEsRUFBRSxDQUFDLE9BQXFCLEVBQUUsRUFBRSxDQUFDLElBQUk7UUFDOUMsWUFBWSxFQUFFLENBQUMsT0FBcUIsRUFBRSxFQUFFLENBQUMsSUFBSTtRQUM3QyxVQUFVLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJO0tBQzlDLENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRCb2FyZE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0UG9pbnRlclR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50ZXInO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQgfSBmcm9tICcuLi9jb3JlL2VsZW1lbnQvY29udGV4dCc7XG5pbXBvcnQgeyBQbGFpdE9wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvb3BlcmF0aW9uJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IEZMVVNISU5HLCBQQVRIX1JFRlMgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgUGF0aFJlZiwgUGF0aFJlZk9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BhdGgtcmVmJztcbmltcG9ydCB7IFBhdGggfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BhdGgnO1xuaW1wb3J0IHsgVGhlbWVDb2xvck1vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RoZW1lJztcbmltcG9ydCB7IENvcmVUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcy9lbGVtZW50JztcbmltcG9ydCB7IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCwgZHJhd0VudGlyZUFjdGl2ZVJlY3RhbmdsZUcsIHNldENsaXBib2FyZERhdGEgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCb2FyZChjaGlsZHJlbjogUGxhaXRFbGVtZW50W10sIG9wdGlvbnM/OiBQbGFpdEJvYXJkT3B0aW9ucyk6IFBsYWl0Qm9hcmQge1xuICAgIGNvbnN0IGJvYXJkOiBQbGFpdEJvYXJkID0ge1xuICAgICAgICB2aWV3cG9ydDoge1xuICAgICAgICAgICAgem9vbTogMVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGhlbWU6IHsgdGhlbWVDb2xvck1vZGU6IFRoZW1lQ29sb3JNb2RlLmRlZmF1bHQgfSxcbiAgICAgICAgb3BlcmF0aW9uczogW10sXG4gICAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgICAgIHJlZG9zOiBbXSxcbiAgICAgICAgICAgIHVuZG9zOiBbXVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb246IG51bGwsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMgfHwge1xuICAgICAgICAgICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgICAgICAgICAgaGlkZVNjcm9sbGJhcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlZFNjcm9sbE9uTm9uRm9jdXM6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHBvaW50ZXI6IG9wdGlvbnM/LnJlYWRvbmx5ID8gUGxhaXRQb2ludGVyVHlwZS5oYW5kIDogUGxhaXRQb2ludGVyVHlwZS5zZWxlY3Rpb24sXG4gICAgICAgIHVuZG86ICgpID0+IHt9LFxuICAgICAgICByZWRvOiAoKSA9PiB7fSxcbiAgICAgICAgYXBwbHk6IChvcGVyYXRpb246IFBsYWl0T3BlcmF0aW9uKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBib2FyZC5wYXRoUmVmcygpKSB7XG4gICAgICAgICAgICAgICAgUGF0aFJlZi50cmFuc2Zvcm0ocmVmLCBvcGVyYXRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2FyZC5vcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcblxuICAgICAgICAgICAgVHJhbnNmb3Jtcy50cmFuc2Zvcm0oYm9hcmQsIG9wZXJhdGlvbik7XG5cbiAgICAgICAgICAgIGlmICghRkxVU0hJTkcuZ2V0KGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIEZMVVNISU5HLnNldChib2FyZCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgRkxVU0hJTkcuc2V0KGJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGJvYXJkLm9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJvYXJkLmFmdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJvYXJkLm9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGF0aFJlZjogKHBhdGg6IFBhdGgsIG9wdGlvbnM/OiBQYXRoUmVmT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBvcHRpb25zPy5hZmZpbml0eSB8fCAnZm9yd2FyZCc7XG4gICAgICAgICAgICBjb25zdCByZWY6IFBhdGhSZWYgPSB7XG4gICAgICAgICAgICAgICAgY3VycmVudDogcGF0aCxcbiAgICAgICAgICAgICAgICBhZmZpbml0eSxcbiAgICAgICAgICAgICAgICB1bnJlZigpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50IH0gPSByZWY7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhSZWZzID0gYm9hcmQucGF0aFJlZnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFJlZnMuZGVsZXRlKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVmcyA9IGJvYXJkLnBhdGhSZWZzKCk7XG4gICAgICAgICAgICByZWZzLmFkZChyZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aFJlZnM6ICgpID0+IHtcbiAgICAgICAgICAgIGxldCByZWZzID0gUEFUSF9SRUZTLmdldChib2FyZCk7XG5cbiAgICAgICAgICAgIGlmICghcmVmcykge1xuICAgICAgICAgICAgICAgIHJlZnMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgUEFUSF9SRUZTLnNldChib2FyZCwgcmVmcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZWZzO1xuICAgICAgICB9LFxuICAgICAgICBvbkNoYW5nZTogKCkgPT4ge30sXG4gICAgICAgIGFmdGVyQ2hhbmdlOiAoKSA9PiB7fSxcbiAgICAgICAgZHJhd0FjdGl2ZVJlY3RhbmdsZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRyYXdFbnRpcmVBY3RpdmVSZWN0YW5nbGVHKGJvYXJkKTtcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2Vkb3duOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHt9LFxuICAgICAgICBtb3VzZW1vdmU6IChldmVudDogTW91c2VFdmVudCkgPT4ge30sXG4gICAgICAgIG1vdXNlbGVhdmU6IChldmVudDogTW91c2VFdmVudCkgPT4ge30sXG4gICAgICAgIGdsb2JhbE1vdXNlbW92ZTogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7fSxcbiAgICAgICAgbW91c2V1cDogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7fSxcbiAgICAgICAgZ2xvYmFsTW91c2V1cDogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7fSxcbiAgICAgICAga2V5RG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7fSxcbiAgICAgICAgZ2xvYmFsS2V5RG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7fSxcbiAgICAgICAga2V5VXA6IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge30sXG4gICAgICAgIGRibENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHt9LFxuICAgICAgICBidWlsZEZyYWdtZW50OiAoY2xpcGJvYXJkQ29udGV4dDogV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0IHwgbnVsbCkgPT4gY2xpcGJvYXJkQ29udGV4dCxcbiAgICAgICAgaW5zZXJ0RnJhZ21lbnQ6ICgpID0+IHt9LFxuICAgICAgICBkZWxldGVGcmFnbWVudDogKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgQ29yZVRyYW5zZm9ybXMucmVtb3ZlRWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RGVsZXRlZEZyYWdtZW50OiAoZGF0YTogUGxhaXRFbGVtZW50W10pID0+IGRhdGEsXG4gICAgICAgIGdldFJlbGF0ZWRGcmFnbWVudDogKGRhdGE6IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5EYXRhPzogUGxhaXRFbGVtZW50W10pID0+IGRhdGEsXG4gICAgICAgIGRyYXdFbGVtZW50OiAoY29udGV4dDogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4gbm90IHJlc29sdmUgcGx1Z2luIGVsZW1lbnQgY29tcG9uZW50IHR5cGU6ICR7Y29udGV4dC5lbGVtZW50LnR5cGV9YCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzV2l0aGluU2VsZWN0aW9uOiBlbGVtZW50ID0+IGZhbHNlLFxuICAgICAgICBpc1JlY3RhbmdsZUhpdDogZWxlbWVudCA9PiBmYWxzZSxcbiAgICAgICAgaXNIaXQ6IGVsZW1lbnQgPT4gZmFsc2UsXG4gICAgICAgIGlzSW5zaWRlUG9pbnQ6IGVsZW1lbnQgPT4gZmFsc2UsXG4gICAgICAgIGlzUmVjdXJzaW9uOiBlbGVtZW50ID0+IHRydWUsXG4gICAgICAgIGlzTW92YWJsZTogZWxlbWVudCA9PiBmYWxzZSxcbiAgICAgICAgZ2V0UmVjdGFuZ2xlOiBlbGVtZW50ID0+IG51bGwsXG4gICAgICAgIGFwcGx5VGhlbWU6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHt9LFxuICAgICAgICBpc0FsaWduOiBlbGVtZW50ID0+IGZhbHNlLFxuICAgICAgICBwb2ludGVyRG93bjogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlck1vdmU6IHBvaW50ZXIgPT4ge30sXG4gICAgICAgIHBvaW50ZXJVcDogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlckNhbmNlbDogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlck91dDogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgcG9pbnRlckxlYXZlOiBwb2ludGVyID0+IHt9LFxuICAgICAgICBnbG9iYWxQb2ludGVyTW92ZTogcG9pbnRlciA9PiB7fSxcbiAgICAgICAgZ2xvYmFsUG9pbnRlclVwOiBwb2ludGVyID0+IHt9LFxuICAgICAgICBpc0ltYWdlQmluZGluZ0FsbG93ZWQ6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGZhbHNlLFxuICAgICAgICBjYW5BZGRUb0dyb3VwOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB0cnVlLFxuICAgICAgICBjYW5TZXRaSW5kZXg6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHRydWUsXG4gICAgICAgIGlzRXhwYW5kZWQ6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBib2FyZDtcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
- import { isHotkey } from 'is-hotkey';
1
+ import { isHotkey, isKeyHotkey } from 'is-hotkey';
2
2
  import { PlaitBoard, PlaitPluginKey } from '../interfaces';
3
3
  import { BoardTransforms, Transforms } from '../transforms';
4
- import { depthFirstRecursion, getSelectedElements, hotkeys } from '../utils';
4
+ import { deleteFragment, depthFirstRecursion, duplicateElements, getSelectedElements, hotkeys } from '../utils';
5
5
  export const withHotkey = (board) => {
6
6
  const { keyDown, keyUp, globalKeyDown } = board;
7
7
  board.keyDown = (event) => {
@@ -25,12 +25,41 @@ export const withHotkey = (board) => {
25
25
  Transforms.addSelectionWithTemporaryElements(board, elements);
26
26
  return;
27
27
  }
28
+ if (!PlaitBoard.isReadonly(board)) {
29
+ if (isKeyHotkey('mod+]', event)) {
30
+ event.preventDefault();
31
+ Transforms.moveUp(board);
32
+ return;
33
+ }
34
+ if (isKeyHotkey('mod+[', event)) {
35
+ event.preventDefault();
36
+ Transforms.moveDown(board);
37
+ return;
38
+ }
39
+ if (isKeyHotkey('mod+option+‘', event)) {
40
+ event.preventDefault();
41
+ Transforms.moveToTop(board);
42
+ return;
43
+ }
44
+ if (isKeyHotkey('mod+option+“', event)) {
45
+ event.preventDefault();
46
+ Transforms.moveToBottom(board);
47
+ return;
48
+ }
49
+ }
28
50
  const selectedElements = getSelectedElements(board);
51
+ if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0) {
52
+ if (isKeyHotkey('mod+d', event)) {
53
+ event.preventDefault();
54
+ duplicateElements(board, selectedElements);
55
+ return;
56
+ }
57
+ }
29
58
  if (!PlaitBoard.isReadonly(board) &&
30
59
  selectedElements.length > 0 &&
31
60
  (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {
32
61
  event.preventDefault();
33
- board.deleteFragment(null);
62
+ deleteFragment(board);
34
63
  }
35
64
  keyDown(event);
36
65
  };
@@ -64,4 +93,4 @@ export const withHotkey = (board) => {
64
93
  };
65
94
  return board;
66
95
  };
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ob3RrZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtaG90a2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFZLFVBQVUsRUFBZ0IsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJN0UsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzVDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVoRCxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFJLEtBQTJCLENBQUMsZ0JBQWdCLENBQW9CLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxRQUFRLEdBQW1CLEVBQUUsQ0FBQztZQUNsQyxtQkFBbUIsQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLEVBQUU7Z0JBQ0gsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzNCLE9BQU87Z0JBQ1gsQ0FBQztnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLElB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LENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNIb3RrZXkgfSBmcm9tICdpcy1ob3RrZXknO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRQbHVnaW5LZXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJvYXJkVHJhbnNmb3JtcywgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiwgZ2V0U2VsZWN0ZWRFbGVtZW50cywgaG90a2V5cyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFBsYWl0T3B0aW9uc0JvYXJkIH0gZnJvbSAnLi93aXRoLW9wdGlvbnMnO1xuaW1wb3J0IHsgV2l0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3dpdGgtc2VsZWN0aW9uJztcblxuZXhwb3J0IGNvbnN0IHdpdGhIb3RrZXkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IGtleURvd24sIGtleVVwLCBnbG9iYWxLZXlEb3duIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChib2FyZCBhcyBQbGFpdE9wdGlvbnNCb2FyZCkuZ2V0UGx1Z2luT3B0aW9uczxXaXRoUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbik7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJiBvcHRpb25zLmlzTXVsdGlwbGUgJiYgaXNIb3RrZXkoJ21vZCthJywgZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbGV0IGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgICAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG5vZGUgYXMgUGxhaXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuYWRkU2VsZWN0aW9uV2l0aFRlbXBvcmFyeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIChob3RrZXlzLmlzRGVsZXRlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNEZWxldGVGb3J3YXJkKGV2ZW50KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgYm9hcmQuZGVsZXRlRnJhZ21lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmdldE1vdmluZ1BvaW50SW5Cb2FyZChib2FyZCkgfHwgUGxhaXRCb2FyZC5pc01vdmluZ1BvaW50SW5Cb2FyZChib2FyZCkpIHtcbiAgICAgICAgICAgIGlmIChpc0hvdGtleShbJ21vZCs9JywgJ21vZCsrJ10sIHsgYnlLZXk6IHRydWUgfSkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlWm9vbShib2FyZCwgYm9hcmQudmlld3BvcnQuem9vbSArIDAuMSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0hvdGtleShbJ21vZCtzaGlmdCs9JywgJ21vZCtzaGlmdCsrJ10sIHsgYnlLZXk6IHRydWUgfSkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMuZml0Vmlld3BvcnQoYm9hcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0hvdGtleShbJ21vZCstJywgJ21vZCtzaGlmdCstJ10pKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVpvb20oYm9hcmQsIGJvYXJkLnZpZXdwb3J0Lnpvb20gLSAwLjEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0hvdGtleShbJ21vZCswJywgJ21vZCtzaGlmdCswJ10sIHsgYnlLZXk6IHRydWUgfSkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlWm9vbShib2FyZCwgMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbEtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ob3RrZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtaG90a2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xELE9BQU8sRUFBWSxVQUFVLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUloSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDNUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWhELEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsTUFBTSxPQUFPLEdBQUksS0FBMkIsQ0FBQyxnQkFBZ0IsQ0FBb0IsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLFFBQVEsR0FBbUIsRUFBRSxDQUFDO1lBQ2xDLG1CQUFtQixDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsRUFBRTtnQkFDSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsT0FBTztnQkFDWCxD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LGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0hvdGtleSwgaXNLZXlIb3RrZXkgfSBmcm9tICdpcy1ob3RrZXknO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRQbHVnaW5LZXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJvYXJkVHJhbnNmb3JtcywgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZGVsZXRlRnJhZ21lbnQsIGRlcHRoRmlyc3RSZWN1cnNpb24sIGR1cGxpY2F0ZUVsZW1lbnRzLCBnZXRTZWxlY3RlZEVsZW1lbnRzLCBob3RrZXlzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGxhaXRPcHRpb25zQm9hcmQgfSBmcm9tICcuL3dpdGgtb3B0aW9ucyc7XG5pbXBvcnQgeyBXaXRoUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vd2l0aC1zZWxlY3Rpb24nO1xuXG5leHBvcnQgY29uc3Qgd2l0aEhvdGtleSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAsIGdsb2JhbEtleURvd24gfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQua2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gKGJvYXJkIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5nZXRQbHVnaW5PcHRpb25zPFdpdGhQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmIG9wdGlvbnMuaXNNdWx0aXBsZSAmJiBpc0hvdGtleSgnbW9kK2EnLCBldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobm9kZSBhcyBQbGFpdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5hZGRTZWxlY3Rpb25XaXRoVGVtcG9yYXJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGlmIChpc0tleUhvdGtleSgnbW9kK10nLCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZVVwKGJvYXJkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNLZXlIb3RrZXkoJ21vZCtbJywgZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmVEb3duKGJvYXJkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNLZXlIb3RrZXkoJ21vZCtvcHRpb24r4oCYJywgZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmVUb1RvcChib2FyZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2Qrb3B0aW9uK+KAnCcsIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlVG9Cb3R0b20oYm9hcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmIHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2QrZCcsIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlRWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAoaG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRGVsZXRlRm9yd2FyZChldmVudCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGRlbGV0ZUZyYWdtZW50KGJvYXJkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5rZXlVcCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBrZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbEtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0Qm9hcmQuZ2V0TW92aW5nUG9pbnRJbkJvYXJkKGJvYXJkKSB8fCBQbGFpdEJvYXJkLmlzTW92aW5nUG9pbnRJbkJvYXJkKGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKGlzSG90a2V5KFsnbW9kKz0nLCAnbW9kKysnXSwgeyBieUtleTogdHJ1ZSB9KShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEJvYXJkVHJhbnNmb3Jtcy51cGRhdGVab29tKGJvYXJkLCBib2FyZC52aWV3cG9ydC56b29tICsgMC4xLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSG90a2V5KFsnbW9kK3NoaWZ0Kz0nLCAnbW9kK3NoaWZ0KysnXSwgeyBieUtleTogdHJ1ZSB9KShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEJvYXJkVHJhbnNmb3Jtcy5maXRWaWV3cG9ydChib2FyZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSG90a2V5KFsnbW9kKy0nLCAnbW9kK3NoaWZ0Ky0nXSkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlWm9vbShib2FyZCwgYm9hcmQudmlld3BvcnQuem9vbSAtIDAuMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSG90a2V5KFsnbW9kKzAnLCAnbW9kK3NoaWZ0KzAnXSwgeyBieUtleTogdHJ1ZSB9KShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEJvYXJkVHJhbnNmb3Jtcy51cGRhdGVab29tKGJvYXJkLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=