@esotericsoftware/spine-core 4.0.7 → 4.0.11

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 (95) hide show
  1. package/dist/Animation.js +577 -710
  2. package/dist/AnimationState.js +239 -259
  3. package/dist/AnimationStateData.js +15 -17
  4. package/dist/AssetManagerBase.d.ts +3 -0
  5. package/dist/AssetManagerBase.js +168 -147
  6. package/dist/AtlasAttachmentLoader.js +20 -22
  7. package/dist/Bone.js +89 -91
  8. package/dist/BoneData.js +4 -6
  9. package/dist/ConstraintData.js +4 -6
  10. package/dist/Event.js +4 -6
  11. package/dist/EventData.js +4 -6
  12. package/dist/IkConstraint.js +48 -50
  13. package/dist/IkConstraintData.js +12 -31
  14. package/dist/PathConstraint.js +116 -118
  15. package/dist/PathConstraintData.js +9 -28
  16. package/dist/Skeleton.d.ts +0 -4
  17. package/dist/Skeleton.js +190 -213
  18. package/dist/SkeletonBinary.js +352 -363
  19. package/dist/SkeletonBounds.js +79 -81
  20. package/dist/SkeletonClipping.js +86 -88
  21. package/dist/SkeletonData.d.ts +0 -2
  22. package/dist/SkeletonData.js +46 -66
  23. package/dist/SkeletonJson.js +307 -307
  24. package/dist/Skin.js +65 -69
  25. package/dist/Slot.js +16 -18
  26. package/dist/SlotData.js +4 -6
  27. package/dist/Texture.js +14 -39
  28. package/dist/TextureAtlas.js +56 -85
  29. package/dist/TransformConstraint.js +77 -79
  30. package/dist/TransformConstraintData.js +20 -39
  31. package/dist/Triangulator.js +71 -73
  32. package/dist/Updatable.js +1 -1
  33. package/dist/Utils.js +183 -245
  34. package/dist/VertexEffect.js +1 -1
  35. package/dist/attachments/Attachment.js +41 -62
  36. package/dist/attachments/AttachmentLoader.js +1 -1
  37. package/dist/attachments/BoundingBoxAttachment.js +9 -28
  38. package/dist/attachments/ClippingAttachment.js +9 -28
  39. package/dist/attachments/MeshAttachment.js +29 -48
  40. package/dist/attachments/PathAttachment.js +11 -30
  41. package/dist/attachments/PointAttachment.js +16 -35
  42. package/dist/attachments/RegionAttachment.js +82 -101
  43. package/dist/attachments/index.js +1 -1
  44. package/dist/iife/spine-core.js +89 -85
  45. package/dist/iife/spine-core.js.map +2 -2
  46. package/dist/iife/spine-core.min.js +2 -2
  47. package/dist/index.js +1 -1
  48. package/dist/polyfills.js +2 -2
  49. package/dist/vertexeffects/JitterEffect.js +10 -12
  50. package/dist/vertexeffects/SwirlEffect.js +18 -20
  51. package/package.json +1 -1
  52. package/dist/Animation.js.map +0 -1
  53. package/dist/AnimationState.js.map +0 -1
  54. package/dist/AnimationStateData.js.map +0 -1
  55. package/dist/AssetManagerBase.js.map +0 -1
  56. package/dist/AtlasAttachmentLoader.js.map +0 -1
  57. package/dist/Bone.js.map +0 -1
  58. package/dist/BoneData.js.map +0 -1
  59. package/dist/ConstraintData.js.map +0 -1
  60. package/dist/Event.js.map +0 -1
  61. package/dist/EventData.js.map +0 -1
  62. package/dist/IkConstraint.js.map +0 -1
  63. package/dist/IkConstraintData.js.map +0 -1
  64. package/dist/PathConstraint.js.map +0 -1
  65. package/dist/PathConstraintData.js.map +0 -1
  66. package/dist/Skeleton.js.map +0 -1
  67. package/dist/SkeletonBinary.js.map +0 -1
  68. package/dist/SkeletonBounds.js.map +0 -1
  69. package/dist/SkeletonClipping.js.map +0 -1
  70. package/dist/SkeletonData.js.map +0 -1
  71. package/dist/SkeletonJson.js.map +0 -1
  72. package/dist/Skin.js.map +0 -1
  73. package/dist/Slot.js.map +0 -1
  74. package/dist/SlotData.js.map +0 -1
  75. package/dist/Texture.js.map +0 -1
  76. package/dist/TextureAtlas.js.map +0 -1
  77. package/dist/TransformConstraint.js.map +0 -1
  78. package/dist/TransformConstraintData.js.map +0 -1
  79. package/dist/Triangulator.js.map +0 -1
  80. package/dist/Updatable.js.map +0 -1
  81. package/dist/Utils.js.map +0 -1
  82. package/dist/VertexEffect.js.map +0 -1
  83. package/dist/attachments/Attachment.js.map +0 -1
  84. package/dist/attachments/AttachmentLoader.js.map +0 -1
  85. package/dist/attachments/BoundingBoxAttachment.js.map +0 -1
  86. package/dist/attachments/ClippingAttachment.js.map +0 -1
  87. package/dist/attachments/MeshAttachment.js.map +0 -1
  88. package/dist/attachments/PathAttachment.js.map +0 -1
  89. package/dist/attachments/PointAttachment.js.map +0 -1
  90. package/dist/attachments/RegionAttachment.js.map +0 -1
  91. package/dist/attachments/index.js.map +0 -1
  92. package/dist/index.js.map +0 -1
  93. package/dist/polyfills.js.map +0 -1
  94. package/dist/vertexeffects/JitterEffect.js.map +0 -1
  95. package/dist/vertexeffects/SwirlEffect.js.map +0 -1
@@ -30,8 +30,8 @@ import { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment";
30
30
  import { Pool, Utils } from "./Utils";
31
31
  /** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are
32
32
  * provided along with convenience methods for doing hit detection. */
33
- var SkeletonBounds = /** @class */ (function () {
34
- function SkeletonBounds() {
33
+ export class SkeletonBounds {
34
+ constructor() {
35
35
  /** The left edge of the axis aligned bounding box. */
36
36
  this.minX = 0;
37
37
  /** The bottom edge of the axis aligned bounding box. */
@@ -44,7 +44,7 @@ var SkeletonBounds = /** @class */ (function () {
44
44
  this.boundingBoxes = new Array();
45
45
  /** The world vertices for the bounding box polygons. */
46
46
  this.polygons = new Array();
47
- this.polygonPool = new Pool(function () {
47
+ this.polygonPool = new Pool(() => {
48
48
  return Utils.newFloatArray(16);
49
49
  });
50
50
  }
@@ -52,26 +52,26 @@ var SkeletonBounds = /** @class */ (function () {
52
52
  * box's polygon.
53
53
  * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the
54
54
  * SkeletonBounds AABB methods will always return true. */
55
- SkeletonBounds.prototype.update = function (skeleton, updateAabb) {
55
+ update(skeleton, updateAabb) {
56
56
  if (!skeleton)
57
57
  throw new Error("skeleton cannot be null.");
58
- var boundingBoxes = this.boundingBoxes;
59
- var polygons = this.polygons;
60
- var polygonPool = this.polygonPool;
61
- var slots = skeleton.slots;
62
- var slotCount = slots.length;
58
+ let boundingBoxes = this.boundingBoxes;
59
+ let polygons = this.polygons;
60
+ let polygonPool = this.polygonPool;
61
+ let slots = skeleton.slots;
62
+ let slotCount = slots.length;
63
63
  boundingBoxes.length = 0;
64
64
  polygonPool.freeAll(polygons);
65
65
  polygons.length = 0;
66
- for (var i = 0; i < slotCount; i++) {
67
- var slot = slots[i];
66
+ for (let i = 0; i < slotCount; i++) {
67
+ let slot = slots[i];
68
68
  if (!slot.bone.active)
69
69
  continue;
70
- var attachment = slot.getAttachment();
70
+ let attachment = slot.getAttachment();
71
71
  if (attachment instanceof BoundingBoxAttachment) {
72
- var boundingBox = attachment;
72
+ let boundingBox = attachment;
73
73
  boundingBoxes.push(boundingBox);
74
- var polygon = polygonPool.obtain();
74
+ let polygon = polygonPool.obtain();
75
75
  if (polygon.length != boundingBox.worldVerticesLength) {
76
76
  polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);
77
77
  }
@@ -88,16 +88,16 @@ var SkeletonBounds = /** @class */ (function () {
88
88
  this.maxX = Number.NEGATIVE_INFINITY;
89
89
  this.maxY = Number.NEGATIVE_INFINITY;
90
90
  }
91
- };
92
- SkeletonBounds.prototype.aabbCompute = function () {
93
- var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
94
- var polygons = this.polygons;
95
- for (var i = 0, n = polygons.length; i < n; i++) {
96
- var polygon = polygons[i];
97
- var vertices = polygon;
98
- for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {
99
- var x = vertices[ii];
100
- var y = vertices[ii + 1];
91
+ }
92
+ aabbCompute() {
93
+ let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
94
+ let polygons = this.polygons;
95
+ for (let i = 0, n = polygons.length; i < n; i++) {
96
+ let polygon = polygons[i];
97
+ let vertices = polygon;
98
+ for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {
99
+ let x = vertices[ii];
100
+ let y = vertices[ii + 1];
101
101
  minX = Math.min(minX, x);
102
102
  minY = Math.min(minY, y);
103
103
  maxX = Math.max(maxX, x);
@@ -108,90 +108,90 @@ var SkeletonBounds = /** @class */ (function () {
108
108
  this.minY = minY;
109
109
  this.maxX = maxX;
110
110
  this.maxY = maxY;
111
- };
111
+ }
112
112
  /** Returns true if the axis aligned bounding box contains the point. */
113
- SkeletonBounds.prototype.aabbContainsPoint = function (x, y) {
113
+ aabbContainsPoint(x, y) {
114
114
  return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;
115
- };
115
+ }
116
116
  /** Returns true if the axis aligned bounding box intersects the line segment. */
117
- SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) {
118
- var minX = this.minX;
119
- var minY = this.minY;
120
- var maxX = this.maxX;
121
- var maxY = this.maxY;
117
+ aabbIntersectsSegment(x1, y1, x2, y2) {
118
+ let minX = this.minX;
119
+ let minY = this.minY;
120
+ let maxX = this.maxX;
121
+ let maxY = this.maxY;
122
122
  if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))
123
123
  return false;
124
- var m = (y2 - y1) / (x2 - x1);
125
- var y = m * (minX - x1) + y1;
124
+ let m = (y2 - y1) / (x2 - x1);
125
+ let y = m * (minX - x1) + y1;
126
126
  if (y > minY && y < maxY)
127
127
  return true;
128
128
  y = m * (maxX - x1) + y1;
129
129
  if (y > minY && y < maxY)
130
130
  return true;
131
- var x = (minY - y1) / m + x1;
131
+ let x = (minY - y1) / m + x1;
132
132
  if (x > minX && x < maxX)
133
133
  return true;
134
134
  x = (maxY - y1) / m + x1;
135
135
  if (x > minX && x < maxX)
136
136
  return true;
137
137
  return false;
138
- };
138
+ }
139
139
  /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */
140
- SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) {
140
+ aabbIntersectsSkeleton(bounds) {
141
141
  return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
142
- };
142
+ }
143
143
  /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
144
144
  * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */
145
- SkeletonBounds.prototype.containsPoint = function (x, y) {
146
- var polygons = this.polygons;
147
- for (var i = 0, n = polygons.length; i < n; i++)
145
+ containsPoint(x, y) {
146
+ let polygons = this.polygons;
147
+ for (let i = 0, n = polygons.length; i < n; i++)
148
148
  if (this.containsPointPolygon(polygons[i], x, y))
149
149
  return this.boundingBoxes[i];
150
150
  return null;
151
- };
151
+ }
152
152
  /** Returns true if the polygon contains the point. */
153
- SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) {
154
- var vertices = polygon;
155
- var nn = polygon.length;
156
- var prevIndex = nn - 2;
157
- var inside = false;
158
- for (var ii = 0; ii < nn; ii += 2) {
159
- var vertexY = vertices[ii + 1];
160
- var prevY = vertices[prevIndex + 1];
153
+ containsPointPolygon(polygon, x, y) {
154
+ let vertices = polygon;
155
+ let nn = polygon.length;
156
+ let prevIndex = nn - 2;
157
+ let inside = false;
158
+ for (let ii = 0; ii < nn; ii += 2) {
159
+ let vertexY = vertices[ii + 1];
160
+ let prevY = vertices[prevIndex + 1];
161
161
  if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {
162
- var vertexX = vertices[ii];
162
+ let vertexX = vertices[ii];
163
163
  if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)
164
164
  inside = !inside;
165
165
  }
166
166
  prevIndex = ii;
167
167
  }
168
168
  return inside;
169
- };
169
+ }
170
170
  /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
171
171
  * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns
172
172
  * true. */
173
- SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) {
174
- var polygons = this.polygons;
175
- for (var i = 0, n = polygons.length; i < n; i++)
173
+ intersectsSegment(x1, y1, x2, y2) {
174
+ let polygons = this.polygons;
175
+ for (let i = 0, n = polygons.length; i < n; i++)
176
176
  if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))
177
177
  return this.boundingBoxes[i];
178
178
  return null;
179
- };
179
+ }
180
180
  /** Returns true if the polygon contains any part of the line segment. */
181
- SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) {
182
- var vertices = polygon;
183
- var nn = polygon.length;
184
- var width12 = x1 - x2, height12 = y1 - y2;
185
- var det1 = x1 * y2 - y1 * x2;
186
- var x3 = vertices[nn - 2], y3 = vertices[nn - 1];
187
- for (var ii = 0; ii < nn; ii += 2) {
188
- var x4 = vertices[ii], y4 = vertices[ii + 1];
189
- var det2 = x3 * y4 - y3 * x4;
190
- var width34 = x3 - x4, height34 = y3 - y4;
191
- var det3 = width12 * height34 - height12 * width34;
192
- var x = (det1 * width34 - width12 * det2) / det3;
181
+ intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {
182
+ let vertices = polygon;
183
+ let nn = polygon.length;
184
+ let width12 = x1 - x2, height12 = y1 - y2;
185
+ let det1 = x1 * y2 - y1 * x2;
186
+ let x3 = vertices[nn - 2], y3 = vertices[nn - 1];
187
+ for (let ii = 0; ii < nn; ii += 2) {
188
+ let x4 = vertices[ii], y4 = vertices[ii + 1];
189
+ let det2 = x3 * y4 - y3 * x4;
190
+ let width34 = x3 - x4, height34 = y3 - y4;
191
+ let det3 = width12 * height34 - height12 * width34;
192
+ let x = (det1 * width34 - width12 * det2) / det3;
193
193
  if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {
194
- var y = (det1 * height34 - height12 * det2) / det3;
194
+ let y = (det1 * height34 - height12 * det2) / det3;
195
195
  if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))
196
196
  return true;
197
197
  }
@@ -199,23 +199,21 @@ var SkeletonBounds = /** @class */ (function () {
199
199
  y3 = y4;
200
200
  }
201
201
  return false;
202
- };
202
+ }
203
203
  /** Returns the polygon for the specified bounding box, or null. */
204
- SkeletonBounds.prototype.getPolygon = function (boundingBox) {
204
+ getPolygon(boundingBox) {
205
205
  if (!boundingBox)
206
206
  throw new Error("boundingBox cannot be null.");
207
- var index = this.boundingBoxes.indexOf(boundingBox);
207
+ let index = this.boundingBoxes.indexOf(boundingBox);
208
208
  return index == -1 ? null : this.polygons[index];
209
- };
209
+ }
210
210
  /** The width of the axis aligned bounding box. */
211
- SkeletonBounds.prototype.getWidth = function () {
211
+ getWidth() {
212
212
  return this.maxX - this.minX;
213
- };
213
+ }
214
214
  /** The height of the axis aligned bounding box. */
215
- SkeletonBounds.prototype.getHeight = function () {
215
+ getHeight() {
216
216
  return this.maxY - this.minY;
217
- };
218
- return SkeletonBounds;
219
- }());
220
- export { SkeletonBounds };
221
- //# sourceMappingURL=SkeletonBounds.js.map
217
+ }
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Cb3VuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25Cb3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTVFLE9BQU8sRUFBbUIsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV2RDtzRUFDc0U7QUFDdEUsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFFQyxzREFBc0Q7UUFDdEQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULHdEQUF3RDtRQUN4RCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRVQsdURBQXVEO1FBQ3ZELFNBQUksR0FBRyxDQUFDLENBQUM7UUFFVCxxREFBcUQ7UUFDckQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULGtDQUFrQztRQUNsQyxrQkFBYSxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBRW5ELHdEQUF3RDtRQUN4RCxhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFFaEMsZ0JBQVcsR0FBRyxJQUFJLElBQUksQ0FBa0IsR0FBRyxFQUFFO1lBQ3BELE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQThLSixDQUFDO0lBNUtBOzs7d0VBR29FO0lBQ3BFLE1BQU0sQ0FBRSxRQUFrQixFQUFFLFVBQW1CO1FBQzlDLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFD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
@@ -28,8 +28,8 @@
28
28
  *****************************************************************************/
29
29
  import { Triangulator } from "./Triangulator";
30
30
  import { Utils } from "./Utils";
31
- var SkeletonClipping = /** @class */ (function () {
32
- function SkeletonClipping() {
31
+ export class SkeletonClipping {
32
+ constructor() {
33
33
  this.triangulator = new Triangulator();
34
34
  this.clippingPolygon = new Array();
35
35
  this.clipOutput = new Array();
@@ -37,29 +37,29 @@ var SkeletonClipping = /** @class */ (function () {
37
37
  this.clippedTriangles = new Array();
38
38
  this.scratch = new Array();
39
39
  }
40
- SkeletonClipping.prototype.clipStart = function (slot, clip) {
40
+ clipStart(slot, clip) {
41
41
  if (this.clipAttachment)
42
42
  return 0;
43
43
  this.clipAttachment = clip;
44
- var n = clip.worldVerticesLength;
45
- var vertices = Utils.setArraySize(this.clippingPolygon, n);
44
+ let n = clip.worldVerticesLength;
45
+ let vertices = Utils.setArraySize(this.clippingPolygon, n);
46
46
  clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);
47
- var clippingPolygon = this.clippingPolygon;
47
+ let clippingPolygon = this.clippingPolygon;
48
48
  SkeletonClipping.makeClockwise(clippingPolygon);
49
- var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));
50
- for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {
51
- var polygon = clippingPolygons[i];
49
+ let clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));
50
+ for (let i = 0, n = clippingPolygons.length; i < n; i++) {
51
+ let polygon = clippingPolygons[i];
52
52
  SkeletonClipping.makeClockwise(polygon);
53
53
  polygon.push(polygon[0]);
54
54
  polygon.push(polygon[1]);
55
55
  }
56
56
  return clippingPolygons.length;
57
- };
58
- SkeletonClipping.prototype.clipEndWithSlot = function (slot) {
57
+ }
58
+ clipEndWithSlot(slot) {
59
59
  if (this.clipAttachment && this.clipAttachment.endSlot == slot.data)
60
60
  this.clipEnd();
61
- };
62
- SkeletonClipping.prototype.clipEnd = function () {
61
+ }
62
+ clipEnd() {
63
63
  if (!this.clipAttachment)
64
64
  return;
65
65
  this.clipAttachment = null;
@@ -67,52 +67,52 @@ var SkeletonClipping = /** @class */ (function () {
67
67
  this.clippedVertices.length = 0;
68
68
  this.clippedTriangles.length = 0;
69
69
  this.clippingPolygon.length = 0;
70
- };
71
- SkeletonClipping.prototype.isClipping = function () {
70
+ }
71
+ isClipping() {
72
72
  return this.clipAttachment != null;
73
- };
74
- SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
75
- var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
76
- var clippedTriangles = this.clippedTriangles;
77
- var polygons = this.clippingPolygons;
78
- var polygonsCount = this.clippingPolygons.length;
79
- var vertexSize = twoColor ? 12 : 8;
80
- var index = 0;
73
+ }
74
+ clipTriangles(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
75
+ let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
76
+ let clippedTriangles = this.clippedTriangles;
77
+ let polygons = this.clippingPolygons;
78
+ let polygonsCount = this.clippingPolygons.length;
79
+ let vertexSize = twoColor ? 12 : 8;
80
+ let index = 0;
81
81
  clippedVertices.length = 0;
82
82
  clippedTriangles.length = 0;
83
- outer: for (var i = 0; i < trianglesLength; i += 3) {
84
- var vertexOffset = triangles[i] << 1;
85
- var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
86
- var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
83
+ outer: for (let i = 0; i < trianglesLength; i += 3) {
84
+ let vertexOffset = triangles[i] << 1;
85
+ let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
86
+ let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
87
87
  vertexOffset = triangles[i + 1] << 1;
88
- var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
89
- var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
88
+ let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
89
+ let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
90
90
  vertexOffset = triangles[i + 2] << 1;
91
- var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
92
- var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
93
- for (var p = 0; p < polygonsCount; p++) {
94
- var s = clippedVertices.length;
91
+ let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
92
+ let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
93
+ for (let p = 0; p < polygonsCount; p++) {
94
+ let s = clippedVertices.length;
95
95
  if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
96
- var clipOutputLength = clipOutput.length;
96
+ let clipOutputLength = clipOutput.length;
97
97
  if (clipOutputLength == 0)
98
98
  continue;
99
- var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
100
- var d = 1 / (d0 * d2 + d1 * (y1 - y3));
101
- var clipOutputCount = clipOutputLength >> 1;
102
- var clipOutputItems = this.clipOutput;
103
- var clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
104
- for (var ii = 0; ii < clipOutputLength; ii += 2) {
105
- var x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
99
+ let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
100
+ let d = 1 / (d0 * d2 + d1 * (y1 - y3));
101
+ let clipOutputCount = clipOutputLength >> 1;
102
+ let clipOutputItems = this.clipOutput;
103
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
104
+ for (let ii = 0; ii < clipOutputLength; ii += 2) {
105
+ let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
106
106
  clippedVerticesItems[s] = x;
107
107
  clippedVerticesItems[s + 1] = y;
108
108
  clippedVerticesItems[s + 2] = light.r;
109
109
  clippedVerticesItems[s + 3] = light.g;
110
110
  clippedVerticesItems[s + 4] = light.b;
111
111
  clippedVerticesItems[s + 5] = light.a;
112
- var c0 = x - x3, c1 = y - y3;
113
- var a = (d0 * c0 + d1 * c1) * d;
114
- var b = (d4 * c0 + d2 * c1) * d;
115
- var c = 1 - a - b;
112
+ let c0 = x - x3, c1 = y - y3;
113
+ let a = (d0 * c0 + d1 * c1) * d;
114
+ let b = (d4 * c0 + d2 * c1) * d;
115
+ let c = 1 - a - b;
116
116
  clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
117
117
  clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
118
118
  if (twoColor) {
@@ -124,9 +124,9 @@ var SkeletonClipping = /** @class */ (function () {
124
124
  s += vertexSize;
125
125
  }
126
126
  s = clippedTriangles.length;
127
- var clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
127
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
128
128
  clipOutputCount--;
129
- for (var ii = 1; ii < clipOutputCount; ii++) {
129
+ for (let ii = 1; ii < clipOutputCount; ii++) {
130
130
  clippedTrianglesItems[s] = index;
131
131
  clippedTrianglesItems[s + 1] = (index + ii);
132
132
  clippedTrianglesItems[s + 2] = (index + ii + 1);
@@ -135,7 +135,7 @@ var SkeletonClipping = /** @class */ (function () {
135
135
  index += clipOutputCount + 1;
136
136
  }
137
137
  else {
138
- var clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
138
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
139
139
  clippedVerticesItems[s] = x1;
140
140
  clippedVerticesItems[s + 1] = y1;
141
141
  clippedVerticesItems[s + 2] = light.r;
@@ -195,7 +195,7 @@ var SkeletonClipping = /** @class */ (function () {
195
195
  clippedVerticesItems[s + 35] = dark.a;
196
196
  }
197
197
  s = clippedTriangles.length;
198
- var clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
198
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
199
199
  clippedTrianglesItems[s] = index;
200
200
  clippedTrianglesItems[s + 1] = (index + 1);
201
201
  clippedTrianglesItems[s + 2] = (index + 2);
@@ -204,14 +204,14 @@ var SkeletonClipping = /** @class */ (function () {
204
204
  }
205
205
  }
206
206
  }
207
- };
207
+ }
208
208
  /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping
209
209
  * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */
210
- SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) {
211
- var originalOutput = output;
212
- var clipped = false;
210
+ clip(x1, y1, x2, y2, x3, y3, clippingArea, output) {
211
+ let originalOutput = output;
212
+ let clipped = false;
213
213
  // Avoid copy at the end.
214
- var input = null;
214
+ let input = null;
215
215
  if (clippingArea.length % 4 >= 2) {
216
216
  input = output;
217
217
  output = this.scratch;
@@ -228,18 +228,18 @@ var SkeletonClipping = /** @class */ (function () {
228
228
  input.push(x1);
229
229
  input.push(y1);
230
230
  output.length = 0;
231
- var clippingVertices = clippingArea;
232
- var clippingVerticesLast = clippingArea.length - 4;
233
- for (var i = 0;; i += 2) {
234
- var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
235
- var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
236
- var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
237
- var inputVertices = input;
238
- var inputVerticesLength = input.length - 2, outputStart = output.length;
239
- for (var ii = 0; ii < inputVerticesLength; ii += 2) {
240
- var inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
241
- var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
242
- var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
231
+ let clippingVertices = clippingArea;
232
+ let clippingVerticesLast = clippingArea.length - 4;
233
+ for (let i = 0;; i += 2) {
234
+ let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
235
+ let edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
236
+ let deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
237
+ let inputVertices = input;
238
+ let inputVerticesLength = input.length - 2, outputStart = output.length;
239
+ for (let ii = 0; ii < inputVerticesLength; ii += 2) {
240
+ let inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
241
+ let inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
242
+ let side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
243
243
  if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {
244
244
  if (side2) { // v1 inside, v2 inside
245
245
  output.push(inputX2);
@@ -247,10 +247,10 @@ var SkeletonClipping = /** @class */ (function () {
247
247
  continue;
248
248
  }
249
249
  // v1 inside, v2 outside
250
- var c0 = inputY2 - inputY, c2 = inputX2 - inputX;
251
- var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
250
+ let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
251
+ let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
252
252
  if (Math.abs(s) > 0.000001) {
253
- var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
253
+ let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
254
254
  output.push(edgeX + (edgeX2 - edgeX) * ua);
255
255
  output.push(edgeY + (edgeY2 - edgeY) * ua);
256
256
  }
@@ -260,10 +260,10 @@ var SkeletonClipping = /** @class */ (function () {
260
260
  }
261
261
  }
262
262
  else if (side2) { // v1 outside, v2 inside
263
- var c0 = inputY2 - inputY, c2 = inputX2 - inputX;
264
- var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
263
+ let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
264
+ let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
265
265
  if (Math.abs(s) > 0.000001) {
266
- var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
266
+ let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
267
267
  output.push(edgeX + (edgeX2 - edgeX) * ua);
268
268
  output.push(edgeY + (edgeY2 - edgeY) * ua);
269
269
  }
@@ -284,25 +284,25 @@ var SkeletonClipping = /** @class */ (function () {
284
284
  output.push(output[1]);
285
285
  if (i == clippingVerticesLast)
286
286
  break;
287
- var temp = output;
287
+ let temp = output;
288
288
  output = input;
289
289
  output.length = 0;
290
290
  input = temp;
291
291
  }
292
292
  if (originalOutput != output) {
293
293
  originalOutput.length = 0;
294
- for (var i = 0, n = output.length - 2; i < n; i++)
294
+ for (let i = 0, n = output.length - 2; i < n; i++)
295
295
  originalOutput[i] = output[i];
296
296
  }
297
297
  else
298
298
  originalOutput.length = originalOutput.length - 2;
299
299
  return clipped;
300
- };
301
- SkeletonClipping.makeClockwise = function (polygon) {
302
- var vertices = polygon;
303
- var verticeslength = polygon.length;
304
- var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;
305
- for (var i = 0, n = verticeslength - 3; i < n; i += 2) {
300
+ }
301
+ static makeClockwise(polygon) {
302
+ let vertices = polygon;
303
+ let verticeslength = polygon.length;
304
+ let area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;
305
+ for (let i = 0, n = verticeslength - 3; i < n; i += 2) {
306
306
  p1x = vertices[i];
307
307
  p1y = vertices[i + 1];
308
308
  p2x = vertices[i + 2];
@@ -311,16 +311,14 @@ var SkeletonClipping = /** @class */ (function () {
311
311
  }
312
312
  if (area < 0)
313
313
  return;
314
- for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {
315
- var x = vertices[i], y = vertices[i + 1];
316
- var other = lastX - i;
314
+ for (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {
315
+ let x = vertices[i], y = vertices[i + 1];
316
+ let other = lastX - i;
317
317
  vertices[i] = vertices[other];
318
318
  vertices[i + 1] = vertices[other + 1];
319
319
  vertices[other] = x;
320
320
  vertices[other + 1] = y;
321
321
  }
322
- };
323
- return SkeletonClipping;
324
- }());
325
- export { SkeletonClipping };
326
- //# sourceMappingURL=SkeletonClipping.js.map
322
+ }
323
+ }
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25DbGlwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2VsZXRvbkNsaXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUkvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBMEIsTUFBTSxTQUFTLENBQUM7QUFFeEQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUNTLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxvQkFBZSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDdEMsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDekMsb0JBQWUsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ3RDLHFCQUFnQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDL0IsWUFBTyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFxVHZDLENBQUM7SUFoVEEsU0FBUyxDQUFFLElBQVUsRUFBRSxJQUF3QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNDLGdCQUFnQixDQUFDLGFBQWEsQ0FB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QkFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFFakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBRWxDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUNsQzt5QkFBTTt3QkFDTixvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDckMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3JDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFFdEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUV0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFD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QUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7cUJBQzNDO3lCQUFNO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ25CO2lCQUNEO3FCQUFNLElBQUksS0FBSyxFQUFFLEVBQUUsd0JBQXdCO29CQUMzQyxJQUFJLEVBQUUsR0FBRyxPQUFPLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO29CQUNqRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO29CQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFO3dCQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FB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