@esotericsoftware/spine-core 4.2.116 → 4.3.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 (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +27 -21
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +130 -0
  16. package/dist/BonePose.js +426 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +7 -5
  20. package/dist/ConstraintData.js +5 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +22 -28
  28. package/dist/IkConstraint.js +115 -117
  29. package/dist/IkConstraintData.d.ts +23 -18
  30. package/dist/IkConstraintData.js +32 -22
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -22
  34. package/dist/PathConstraint.js +160 -136
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +102 -94
  43. package/dist/PhysicsConstraintData.d.ts +22 -12
  44. package/dist/PhysicsConstraintData.js +23 -12
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +1 -1
  58. package/dist/SkeletonBinary.js +644 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +892 -641
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +12 -3
  98. package/dist/Utils.js +78 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7651 -6090
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7651 -6090
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
@@ -0,0 +1,426 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated April 5, 2025. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2025, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
13
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
+ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import { Inherit } from "./BoneData.js";
30
+ import { MathUtils } from "./Utils.js";
31
+ /** The applied local pose and world transform for a bone. This is the {@link Bone.getPose} with constraints applied and the
32
+ * world transform computed by {@link Skeleton.updateWorldTransform} and {@link updateWorldTransform}.
33
+ *
34
+ * If the world transform is changed, call {@link updateLocalTransform} before using the local transform. The local
35
+ * transform may be needed by other code (eg to apply another constraint).
36
+ *
37
+ * After changing the world transform, call {@link updateWorldTransform} on every descendant bone. It may be more
38
+ * convenient to modify the local transform instead, then call {@link Skeleton.updateWorldTransform} to update the world
39
+ * transforms for all bones and apply constraints. */
40
+ export class BonePose {
41
+ bone;
42
+ /** The local x translation. */
43
+ x = 0;
44
+ /** The local y translation. */
45
+ y = 0;
46
+ /** The local rotation in degrees, counter clockwise. */
47
+ rotation = 0;
48
+ /** The local scaleX. */
49
+ scaleX = 0;
50
+ /** The local scaleY. */
51
+ scaleY = 0;
52
+ /** The local shearX. */
53
+ shearX = 0;
54
+ /** The local shearY. */
55
+ shearY = 0;
56
+ inherit = Inherit.Normal;
57
+ /** The world transform `[a b][c d]` x-axis x component. */
58
+ a = 0;
59
+ /** The world transform `[a b][c d]` y-axis x component. */
60
+ b = 0;
61
+ /** The world transform `[a b][c d]` x-axis y component. */
62
+ c = 0;
63
+ /** The world transform `[a b][c d]` y-axis y component. */
64
+ d = 0;
65
+ /** The world X position. If changed, {@link updateLocalTransform} should be called. */
66
+ worldY = 0;
67
+ /** The world Y position. If changed, {@link updateLocalTransform} should be called. */
68
+ worldX = 0;
69
+ world = 0;
70
+ local = 0;
71
+ set(pose) {
72
+ if (pose == null)
73
+ throw new Error("pose cannot be null.");
74
+ this.x = pose.x;
75
+ this.y = pose.y;
76
+ this.rotation = pose.rotation;
77
+ this.scaleX = pose.scaleX;
78
+ this.scaleY = pose.scaleY;
79
+ this.shearX = pose.shearX;
80
+ this.shearY = pose.shearY;
81
+ this.inherit = pose.inherit;
82
+ }
83
+ setPosition(x, y) {
84
+ this.x = x;
85
+ this.y = y;
86
+ }
87
+ setScale(scaleOrX, scaleY) {
88
+ this.scaleX = scaleOrX;
89
+ this.scaleY = scaleY === undefined ? scaleOrX : scaleY;
90
+ }
91
+ /** Determines how parent world transforms affect this bone. */
92
+ getInherit() {
93
+ return this.inherit;
94
+ }
95
+ setInherit(inherit) {
96
+ if (inherit == null)
97
+ throw new Error("inherit cannot be null.");
98
+ this.inherit = inherit;
99
+ }
100
+ /** Called by {@link Skeleton.updateCache} to compute the world transform, if needed. */
101
+ update(skeleton, physics) {
102
+ if (this.world !== skeleton._update)
103
+ this.updateWorldTransform(skeleton);
104
+ }
105
+ /** Computes the world transform using the parent bone's world transform and this applied local pose. Child bones are not
106
+ * updated.
107
+ *
108
+ * See <a href="https://esotericsoftware.com/spine-runtime-skeletons#World-transforms">World transforms</a> in the Spine
109
+ * Runtimes Guide. */
110
+ updateWorldTransform(skeleton) {
111
+ if (this.local === skeleton._update)
112
+ this.updateLocalTransform(skeleton);
113
+ else
114
+ this.world = skeleton._update;
115
+ const rotation = this.rotation;
116
+ const scaleX = this.scaleX;
117
+ const scaleY = this.scaleY;
118
+ const shearX = this.shearX;
119
+ const shearY = this.shearY;
120
+ if (!this.bone.parent) { // Root bone.
121
+ const sx = skeleton.scaleX, sy = skeleton.scaleY;
122
+ const rx = (rotation + shearX) * MathUtils.degRad;
123
+ const ry = (rotation + 90 + shearY) * MathUtils.degRad;
124
+ this.a = Math.cos(rx) * scaleX * sx;
125
+ this.b = Math.cos(ry) * scaleY * sx;
126
+ this.c = Math.sin(rx) * scaleX * sy;
127
+ this.d = Math.sin(ry) * scaleY * sy;
128
+ this.worldX = this.x * sx + skeleton.x;
129
+ this.worldY = this.y * sy + skeleton.y;
130
+ return;
131
+ }
132
+ const parent = this.bone.parent.appliedPose;
133
+ let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
134
+ this.worldX = pa * this.x + pb * this.y + parent.worldX;
135
+ this.worldY = pc * this.x + pd * this.y + parent.worldY;
136
+ switch (this.inherit) {
137
+ case Inherit.Normal: {
138
+ const rx = (rotation + shearX) * MathUtils.degRad;
139
+ const ry = (rotation + 90 + shearY) * MathUtils.degRad;
140
+ const la = Math.cos(rx) * scaleX;
141
+ const lb = Math.cos(ry) * scaleY;
142
+ const lc = Math.sin(rx) * scaleX;
143
+ const ld = Math.sin(ry) * scaleY;
144
+ this.a = pa * la + pb * lc;
145
+ this.b = pa * lb + pb * ld;
146
+ this.c = pc * la + pd * lc;
147
+ this.d = pc * lb + pd * ld;
148
+ return;
149
+ }
150
+ case Inherit.OnlyTranslation: {
151
+ const rx = (rotation + shearX) * MathUtils.degRad;
152
+ const ry = (rotation + 90 + shearY) * MathUtils.degRad;
153
+ this.a = Math.cos(rx) * scaleX;
154
+ this.b = Math.cos(ry) * scaleY;
155
+ this.c = Math.sin(rx) * scaleX;
156
+ this.d = Math.sin(ry) * scaleY;
157
+ break;
158
+ }
159
+ case Inherit.NoRotationOrReflection: {
160
+ const sx = 1 / skeleton.scaleX, sy = 1 / skeleton.scaleY;
161
+ pa *= sx;
162
+ pc *= sy;
163
+ let s = pa * pa + pc * pc;
164
+ let prx = 0;
165
+ if (s > 0.0001) {
166
+ s = Math.abs(pa * pd * sy - pb * sx * pc) / s;
167
+ pb = pc * s;
168
+ pd = pa * s;
169
+ prx = MathUtils.atan2Deg(pc, pa);
170
+ }
171
+ else {
172
+ pa = 0;
173
+ pc = 0;
174
+ prx = 90 - MathUtils.atan2Deg(pd, pb);
175
+ }
176
+ const rx = (rotation + shearX - prx) * MathUtils.degRad;
177
+ const ry = (rotation + shearY - prx + 90) * MathUtils.degRad;
178
+ const la = Math.cos(rx) * scaleX;
179
+ const lb = Math.cos(ry) * scaleY;
180
+ const lc = Math.sin(rx) * scaleX;
181
+ const ld = Math.sin(ry) * scaleY;
182
+ this.a = pa * la - pb * lc;
183
+ this.b = pa * lb - pb * ld;
184
+ this.c = pc * la + pd * lc;
185
+ this.d = pc * lb + pd * ld;
186
+ break;
187
+ }
188
+ case Inherit.NoScale:
189
+ case Inherit.NoScaleOrReflection: {
190
+ let r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
191
+ let za = (pa * cos + pb * sin) / skeleton.scaleX;
192
+ let zc = (pc * cos + pd * sin) / skeleton.scaleY;
193
+ let s = Math.sqrt(za * za + zc * zc);
194
+ if (s > 0.00001)
195
+ s = 1 / s;
196
+ za *= s;
197
+ zc *= s;
198
+ s = Math.sqrt(za * za + zc * zc);
199
+ if (this.inherit === Inherit.NoScale && (pa * pd - pb * pc < 0) !== (skeleton.scaleX < 0 !== skeleton.scaleY < 0))
200
+ s = -s;
201
+ r = Math.PI / 2 + Math.atan2(zc, za);
202
+ const zb = Math.cos(r) * s;
203
+ const zd = Math.sin(r) * s;
204
+ const rx = shearX * MathUtils.degRad;
205
+ const ry = (90 + shearY) * MathUtils.degRad;
206
+ const la = Math.cos(rx) * scaleX;
207
+ const lb = Math.cos(ry) * scaleY;
208
+ const lc = Math.sin(rx) * scaleX;
209
+ const ld = Math.sin(ry) * scaleY;
210
+ this.a = za * la + zb * lc;
211
+ this.b = za * lb + zb * ld;
212
+ this.c = zc * la + zd * lc;
213
+ this.d = zc * lb + zd * ld;
214
+ break;
215
+ }
216
+ }
217
+ this.a *= skeleton.scaleX;
218
+ this.b *= skeleton.scaleX;
219
+ this.c *= skeleton.scaleY;
220
+ this.d *= skeleton.scaleY;
221
+ }
222
+ /** Computes the local transform values from the world transform.
223
+ *
224
+ * If the world transform is modified (by a constraint, {@link rotateWorld}, etc) then this method should be called so
225
+ * the local transform matches the world transform. The local transform may be needed by other code (eg to apply another
226
+ * constraint).
227
+ *
228
+ * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local transform after
229
+ * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */
230
+ updateLocalTransform(skeleton) {
231
+ this.local = 0;
232
+ this.world = skeleton._update;
233
+ if (!this.bone.parent) {
234
+ this.x = this.worldX - skeleton.x;
235
+ this.y = this.worldY - skeleton.y;
236
+ const a = this.a, b = this.b, c = this.c, d = this.d;
237
+ this.rotation = MathUtils.atan2Deg(c, a);
238
+ this.scaleX = Math.sqrt(a * a + c * c);
239
+ this.scaleY = Math.sqrt(b * b + d * d);
240
+ this.shearX = 0;
241
+ this.shearY = MathUtils.atan2Deg(a * b + c * d, a * d - b * c);
242
+ return;
243
+ }
244
+ const parent = this.bone.parent.appliedPose;
245
+ let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
246
+ let pid = 1 / (pa * pd - pb * pc);
247
+ let ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;
248
+ const dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
249
+ this.x = (dx * ia - dy * ib);
250
+ this.y = (dy * id - dx * ic);
251
+ let ra, rb, rc, rd;
252
+ if (this.inherit === Inherit.OnlyTranslation) {
253
+ ra = this.a;
254
+ rb = this.b;
255
+ rc = this.c;
256
+ rd = this.d;
257
+ }
258
+ else {
259
+ switch (this.inherit) {
260
+ case Inherit.NoRotationOrReflection: {
261
+ const s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
262
+ pb = -pc * skeleton.scaleX * s / skeleton.scaleY;
263
+ pd = pa * skeleton.scaleY * s / skeleton.scaleX;
264
+ pid = 1 / (pa * pd - pb * pc);
265
+ ia = pd * pid;
266
+ ib = pb * pid;
267
+ break;
268
+ }
269
+ case Inherit.NoScale:
270
+ case Inherit.NoScaleOrReflection: {
271
+ let r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
272
+ pa = (pa * cos + pb * sin) / skeleton.scaleX;
273
+ pc = (pc * cos + pd * sin) / skeleton.scaleY;
274
+ let s = Math.sqrt(pa * pa + pc * pc);
275
+ if (s > 0.00001)
276
+ s = 1 / s;
277
+ pa *= s;
278
+ pc *= s;
279
+ s = Math.sqrt(pa * pa + pc * pc);
280
+ if (this.inherit === Inherit.NoScale && pid < 0 !== (skeleton.scaleX < 0 !== skeleton.scaleY < 0))
281
+ s = -s;
282
+ r = MathUtils.PI / 2 + Math.atan2(pc, pa);
283
+ pb = Math.cos(r) * s;
284
+ pd = Math.sin(r) * s;
285
+ pid = 1 / (pa * pd - pb * pc);
286
+ ia = pd * pid;
287
+ ib = pb * pid;
288
+ ic = pc * pid;
289
+ id = pa * pid;
290
+ }
291
+ }
292
+ ra = ia * this.a - ib * this.c;
293
+ rb = ia * this.b - ib * this.d;
294
+ rc = id * this.c - ic * this.a;
295
+ rd = id * this.d - ic * this.b;
296
+ }
297
+ this.shearX = 0;
298
+ this.scaleX = Math.sqrt(ra * ra + rc * rc);
299
+ if (this.scaleX > 0.0001) {
300
+ const det = ra * rd - rb * rc;
301
+ this.scaleY = det / this.scaleX;
302
+ this.shearY = -MathUtils.atan2Deg(ra * rb + rc * rd, det);
303
+ this.rotation = MathUtils.atan2Deg(rc, ra);
304
+ }
305
+ else {
306
+ this.scaleX = 0;
307
+ this.scaleY = Math.sqrt(rb * rb + rd * rd);
308
+ this.shearY = 0;
309
+ this.rotation = 90 - MathUtils.atan2Deg(rd, rb);
310
+ }
311
+ }
312
+ /** If the world transform has been modified by constraints and the local transform no longer matches,
313
+ * {@link updateLocalTransform} is called. Call this after {@link Skeleton.updateWorldTransform} before
314
+ * using the applied local transform. */
315
+ validateLocalTransform(skeleton) {
316
+ if (this.local === skeleton._update)
317
+ this.updateLocalTransform(skeleton);
318
+ }
319
+ modifyLocal(skeleton) {
320
+ if (this.local === skeleton._update)
321
+ this.updateLocalTransform(skeleton);
322
+ this.world = 0;
323
+ this.resetWorld(skeleton._update);
324
+ }
325
+ modifyWorld(update) {
326
+ this.local = update;
327
+ this.world = update;
328
+ this.resetWorld(update);
329
+ }
330
+ resetWorld(update) {
331
+ const children = this.bone.children;
332
+ for (let i = 0, n = children.length; i < n; i++) {
333
+ const child = children[i].appliedPose;
334
+ if (child.world === update) {
335
+ child.world = 0;
336
+ child.local = 0;
337
+ child.resetWorld(update);
338
+ }
339
+ }
340
+ }
341
+ /** The world rotation for the X axis, calculated using {@link a} and {@link c}. This is the direction the bone is
342
+ * pointing. */
343
+ getWorldRotationX() {
344
+ return MathUtils.atan2Deg(this.c, this.a);
345
+ }
346
+ /** The world rotation for the Y axis, calculated using {@link b} and {@link d}. */
347
+ getWorldRotationY() {
348
+ return MathUtils.atan2Deg(this.d, this.b);
349
+ }
350
+ /** The magnitude (always positive) of the world scale X, calculated using {@link a} and {@link c}. */
351
+ getWorldScaleX() {
352
+ return Math.sqrt(this.a * this.a + this.c * this.c);
353
+ }
354
+ /** The magnitude (always positive) of the world scale Y, calculated using {@link b} and {@link d}. */
355
+ getWorldScaleY() {
356
+ return Math.sqrt(this.b * this.b + this.d * this.d);
357
+ }
358
+ // public Matrix3 getWorldTransform (Matrix3 worldTransform) {
359
+ // if (worldTransform == null) throw new IllegalArgumentException("worldTransform cannot be null.");
360
+ // float[] val = worldTransform.val;
361
+ // val[M00] = a;
362
+ // val[M01] = b;
363
+ // val[M10] = c;
364
+ // val[M11] = d;
365
+ // val[M02] = worldX;
366
+ // val[M12] = worldY;
367
+ // val[M20] = 0;
368
+ // val[M21] = 0;
369
+ // val[M22] = 1;
370
+ // return worldTransform;
371
+ // }
372
+ /** Transforms a point from world coordinates to the bone's local coordinates. */
373
+ worldToLocal(world) {
374
+ if (world == null)
375
+ throw new Error("world cannot be null.");
376
+ const det = this.a * this.d - this.b * this.c;
377
+ const x = world.x - this.worldX, y = world.y - this.worldY;
378
+ world.x = (x * this.d - y * this.b) / det;
379
+ world.y = (y * this.a - x * this.c) / det;
380
+ return world;
381
+ }
382
+ /** Transforms a point from the bone's local coordinates to world coordinates. */
383
+ localToWorld(local) {
384
+ if (local == null)
385
+ throw new Error("local cannot be null.");
386
+ const x = local.x, y = local.y;
387
+ local.x = x * this.a + y * this.b + this.worldX;
388
+ local.y = x * this.c + y * this.d + this.worldY;
389
+ return local;
390
+ }
391
+ /** Transforms a point from world coordinates to the parent bone's local coordinates. */
392
+ worldToParent(world) {
393
+ if (world == null)
394
+ throw new Error("world cannot be null.");
395
+ return this.bone.parent == null ? world : this.bone.parent.appliedPose.worldToLocal(world);
396
+ }
397
+ /** Transforms a point from the parent bone's coordinates to world coordinates. */
398
+ parentToWorld(world) {
399
+ if (world == null)
400
+ throw new Error("world cannot be null.");
401
+ return this.bone.parent == null ? world : this.bone.parent.appliedPose.localToWorld(world);
402
+ }
403
+ /** Transforms a world rotation to a local rotation. */
404
+ worldToLocalRotation(worldRotation) {
405
+ worldRotation *= MathUtils.degRad;
406
+ const sin = Math.sin(worldRotation), cos = Math.cos(worldRotation);
407
+ return MathUtils.atan2Deg(this.a * sin - this.c * cos, this.d * cos - this.b * sin) + this.rotation - this.shearX;
408
+ }
409
+ /** Transforms a local rotation to a world rotation. */
410
+ localToWorldRotation(localRotation) {
411
+ localRotation = (localRotation - this.rotation - this.shearX) * MathUtils.degRad;
412
+ const sin = Math.sin(localRotation), cos = Math.cos(localRotation);
413
+ return MathUtils.atan2Deg(cos * this.c + sin * this.d, cos * this.a + sin * this.b);
414
+ }
415
+ /** Rotates the world transform the specified amount. */
416
+ rotateWorld(degrees) {
417
+ degrees *= MathUtils.degRad;
418
+ const sin = Math.sin(degrees), cos = Math.cos(degrees);
419
+ const ra = this.a, rb = this.b;
420
+ this.a = cos * ra - sin * this.c;
421
+ this.b = cos * rb - sin * this.d;
422
+ this.c = sin * ra + cos * this.c;
423
+ this.d = sin * rb + cos * this.d;
424
+ }
425
+ }
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZVBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9uZVBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLeEMsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFFckQ7Ozs7Ozs7O3FEQVFxRDtBQUNyRCxNQUFNLE9BQU8sUUFBUTtJQUNwQixJQUFJLENBQVE7SUFFWiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLCtCQUErQjtJQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sd0RBQXdEO0lBQ3hELFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFYix3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRXpCLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sMkRBQTJEO0lBQzNELENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwyREFBMkQ7SUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sdUZBQXVGO0lBQ3ZGLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1RkFBdUY7SUFDdkYsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRVYsR0FBRyxDQUFFLElBQWM7UUFDbEIsSUFBSSxJQUFJ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cEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFeEQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIs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QUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDakMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUCxDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7aUlBTzZIO0lBQ3RILG9CQUFvQixDQUFFLFFBQWtCO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNSLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDNUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFN0IsSUFBSSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNaLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDWixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUM7YUFBTSxDQUFDO1lBQ1AsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztvQkFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUM1RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDakQsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUNoRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNkLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNkLE1BQU07Z0JBQ1AsQ0FBQztnQkFDRCxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLEtBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3QyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsR0FBRyxPQUFPO3dCQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNSLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ1IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFHLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLEdB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SUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZSB9IGZyb20gXCIuL1Bvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgfSBmcm9tIFwiLi9VcGRhdGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscywgdHlwZSBWZWN0b3IyIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBhcHBsaWVkIGxvY2FsIHBvc2UgYW5kIHdvcmxkIHRyYW5zZm9ybSBmb3IgYSBib25lLiBUaGlzIGlzIHRoZSB7QGxpbmsgQm9uZS5nZXRQb3NlfSB3aXRoIGNvbnN0cmFpbnRzIGFwcGxpZWQgYW5kIHRoZVxuICogd29ybGQgdHJhbnNmb3JtIGNvbXB1dGVkIGJ5IHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYW5kIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0uXG4gKlxuICogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBpcyBjaGFuZ2VkLCBjYWxsIHtAbGluayB1cGRhdGVMb2NhbFRyYW5zZm9ybX0gYmVmb3JlIHVzaW5nIHRoZSBsb2NhbCB0cmFuc2Zvcm0uIFRoZSBsb2NhbFxuICogdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlciBjb25zdHJhaW50KS5cbiAqXG4gKiBBZnRlciBjaGFuZ2luZyB0aGUgd29ybGQgdHJhbnNmb3JtLCBjYWxsIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0gb24gZXZlcnkgZGVzY2VuZGFudCBib25lLiBJdCBtYXkgYmUgbW9yZVxuICogY29udmVuaWVudCB0byBtb2RpZnkgdGhlIGxvY2FsIHRyYW5zZm9ybSBpbnN0ZWFkLCB0aGVuIGNhbGwge0BsaW5rIFNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byB1cGRhdGUgdGhlIHdvcmxkXG4gKiB0cmFuc2Zvcm1zIGZvciBhbGwgYm9uZXMgYW5kIGFwcGx5IGNvbnN0cmFpbnRzLiAqL1xuZXhwb3J0IGNsYXNzIEJvbmVQb3NlIGltcGxlbWVudHMgUG9zZTxCb25lUG9zZT4sIFVwZGF0ZSB7XG5cdGJvbmUhOiBCb25lO1xuXG5cdC8qKiBUaGUgbG9jYWwgeCB0cmFuc2xhdGlvbi4gKi9cblx0eCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCB5IHRyYW5zbGF0aW9uLiAqL1xuXHR5ID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHJvdGF0aW9uIGluIGRlZ3JlZXMsIGNvdW50ZXIgY2xvY2t3aXNlLiAqL1xuXHRyb3RhdGlvbiA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVguICovXG5cdHNjYWxlWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVkuICovXG5cdHNjYWxlWSA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclguICovXG5cdHNoZWFyWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclkuICovXG5cdHNoZWFyWSA9IDA7XG5cblx0aW5oZXJpdCA9IEluaGVyaXQuTm9ybWFsO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGEgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGIgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGMgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGQgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWCBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFkgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWSBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFggPSAwO1xuXG5cdHdvcmxkID0gMDtcblx0bG9jYWwgPSAwO1xuXG5cdHNldCAocG9zZTogQm9uZVBvc2UpOiB2b2lkIHtcblx0XHRpZiAocG9zZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJwb3NlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnggPSBwb3NlLng7XG5cdFx0dGhpcy55ID0gcG9zZS55O1xuXHRcdHRoaXMucm90YXRpb24gPSBwb3NlLnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGVYID0gcG9zZS5zY2FsZVg7XG5cdFx0dGhpcy5zY2FsZVkgPSBwb3NlLnNjYWxlWTtcblx0XHR0aGlzLnNoZWFyWCA9IHBvc2Uuc2hlYXJYO1xuXHRcdHRoaXMuc2hlYXJZID0gcG9zZS5zaGVhclk7XG5cdFx0dGhpcy5pbmhlcml0ID0gcG9zZS5pbmhlcml0O1xuXHR9XG5cblx0c2V0UG9zaXRpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0c2V0U2NhbGUgKHNjYWxlWDogbnVtYmVyLCBzY2FsZVk6IG51bWJlcik6IHZvaWQ7XG5cdHNldFNjYWxlIChzY2FsZTogbnVtYmVyKTogdm9pZDtcblx0c2V0U2NhbGUgKHNjYWxlT3JYOiBudW1iZXIsIHNjYWxlWT86IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuc2NhbGVYID0gc2NhbGVPclg7XG5cdFx0dGhpcy5zY2FsZVkgPSBzY2FsZVkgPT09IHVuZGVmaW5lZCA/IHNjYWxlT3JYIDogc2NhbGVZO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgaG93IHBhcmVudCB3b3JsZCB0cmFuc2Zvcm1zIGFmZmVjdCB0aGlzIGJvbmUuICovXG5cdHB1YmxpYyBnZXRJbmhlcml0ICgpOiBJbmhlcml0IHtcblx0XHRyZXR1cm4gdGhpcy5pbmhlcml0O1xuXHR9XG5cblx0cHVibGljIHNldEluaGVyaXQgKGluaGVyaXQ6IEluaGVyaXQpOiB2b2lkIHtcblx0XHRpZiAoaW5oZXJpdCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJpbmhlcml0IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmluaGVyaXQgPSBpbmhlcml0O1xuXHR9XG5cblx0LyoqIENhbGxlZCBieSB7QGxpbmsgU2tlbGV0b24udXBkYXRlQ2FjaGV9IHRvIGNvbXB1dGUgdGhlIHdvcmxkIHRyYW5zZm9ybSwgaWYgbmVlZGVkLiAqL1xuXHRwdWJsaWMgdXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpOiB2b2lkIHtcblx0XHRpZiAodGhpcy53b3JsZCAhPT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgcGFyZW50IGJvbmUncyB3b3JsZCB0cmFuc2Zvcm0gYW5kIHRoaXMgYXBwbGllZCBsb2NhbCBwb3NlLiBDaGlsZCBib25lcyBhcmUgbm90XG5cdCAqIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNrZWxldG9ucyNXb3JsZC10cmFuc2Zvcm1zXCI+V29ybGQgdHJhbnNmb3JtczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHR1cGRhdGVXb3JsZFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpXG5cdFx0XHR0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblx0XHRjb25zdCBzY2FsZVggPSB0aGlzLnNjYWxlWDtcblx0XHRjb25zdCBzY2FsZVkgPSB0aGlzLnNjYWxlWTtcblx0XHRjb25zdCBzaGVhclggPSB0aGlzLnNoZWFyWDtcblx0XHRjb25zdCBzaGVhclkgPSB0aGlzLnNoZWFyWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHsgLy8gUm9vdCBib25lLlxuXHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdHRoaXMuYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWCAqIHN4O1xuXHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHR0aGlzLmMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVggKiBzeTtcblx0XHRcdHRoaXMuZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWSAqIHN5O1xuXHRcdFx0dGhpcy53b3JsZFggPSB0aGlzLnggKiBzeCArIHNrZWxldG9uLng7XG5cdFx0XHR0aGlzLndvcmxkWSA9IHRoaXMueSAqIHN5ICsgc2tlbGV0b24ueTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlO1xuXHRcdGxldCBwYSA9IHBhcmVudC5hLCBwYiA9IHBhcmVudC5iLCBwYyA9IHBhcmVudC5jLCBwZCA9IHBhcmVudC5kO1xuXHRcdHRoaXMud29ybGRYID0gcGEgKiB0aGlzLnggKyBwYiAqIHRoaXMueSArIHBhcmVudC53b3JsZFg7XG5cdFx0dGhpcy53b3JsZFkgPSBwYyAqIHRoaXMueCArIHBkICogdGhpcy55ICsgcGFyZW50LndvcmxkWTtcblxuXHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9ybWFsOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgbGEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxiID0gTWF0aC5jb3MocnkpICogc2NhbGVZO1xuXHRcdFx0XHRjb25zdCBsYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYSA9IHBhICogbGEgKyBwYiAqIGxjO1xuXHRcdFx0XHR0aGlzLmIgPSBwYSAqIGxiICsgcGIgKiBsZDtcblx0XHRcdFx0dGhpcy5jID0gcGMgKiBsYSArIHBkICogbGM7XG5cdFx0XHRcdHRoaXMuZCA9IHBjICogbGIgKyBwZCAqIGxkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0dGhpcy5hID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHR0aGlzLmIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0dGhpcy5kID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4ID0gMSAvIHNrZWxldG9uLnNjYWxlWCwgc3kgPSAxIC8gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRwYSAqPSBzeDtcblx0XHRcdFx0cGMgKj0gc3k7XG5cdFx0XHRcdGxldCBzID0gcGEgKiBwYSArIHBjICogcGM7XG5cdFx0XHRcdGxldCBwcnggPSAwO1xuXHRcdFx0XHRpZiAocyA+IDAuMDAwMSkge1xuXHRcdFx0XHRcdHMgPSBNYXRoLmFicyhwYSAqIHBkICogc3kgLSBwYiAqIHN4ICogcGMpIC8gcztcblx0XHRcdFx0XHRwYiA9IHBjICogcztcblx0XHRcdFx0XHRwZCA9IHBhICogcztcblx0XHRcdFx0XHRwcnggPSBNYXRoVXRpbHMuYXRhbjJEZWcocGMsIHBhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYSA9IDA7XG5cdFx0XHRcdFx0cGMgPSAwO1xuXHRcdFx0XHRcdHByeCA9IDkwIC0gTWF0aFV0aWxzLmF0YW4yRGVnKHBkLCBwYik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclggLSBwcngpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyBzaGVhclkgLSBwcnggKyA5MCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGNvbnN0IGxjID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5hID0gcGEgKiBsYSAtIHBiICogbGM7XG5cdFx0XHRcdHRoaXMuYiA9IHBhICogbGIgLSBwYiAqIGxkO1xuXHRcdFx0XHR0aGlzLmMgPSBwYyAqIGxhICsgcGQgKiBsYztcblx0XHRcdFx0dGhpcy5kID0gcGMgKiBsYiArIHBkICogbGQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGU6XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZU9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRsZXQgciA9IHJvdGF0aW9uICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRsZXQgemEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdGxldCB6YyA9IChwYyAqIGNvcyArIHBkICogc2luKSAvIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQoemEgKiB6YSArIHpjICogemMpO1xuXHRcdFx0XHRpZiAocyA+IDAuMDAwMDEpIHMgPSAxIC8gcztcblx0XHRcdFx0emEgKj0gcztcblx0XHRcdFx0emMgKj0gcztcblx0XHRcdFx0cyA9IE1hdGguc3FydCh6YSAqIHphICsgemMgKiB6Yyk7XG5cdFx0XHRcdGlmICh0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiAocGEgKiBwZCAtIHBiICogcGMgPCAwKSAhPT0gKHNrZWxldG9uLnNjYWxlWCA8IDAgIT09IHNrZWxldG9uLnNjYWxlWSA8IDApKSBzID0gLXM7XG5cdFx0XHRcdHIgPSBNYXRoLlBJIC8gMiArIE1hdGguYXRhbjIoemMsIHphKTtcblx0XHRcdFx0Y29uc3QgemIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdGNvbnN0IHpkID0gTWF0aC5zaW4ocikgKiBzO1xuXHRcdFx0XHRjb25zdCByeCA9IHNoZWFyWCAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKDkwICsgc2hlYXJZKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGxhID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxkID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHR0aGlzLmEgPSB6YSAqIGxhICsgemIgKiBsYztcblx0XHRcdFx0dGhpcy5iID0gemEgKiBsYiArIHpiICogbGQ7XG5cdFx0XHRcdHRoaXMuYyA9IHpjICogbGEgKyB6ZCAqIGxjO1xuXHRcdFx0XHR0aGlzLmQgPSB6YyAqIGxiICsgemQgKiBsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYSAqPSBza2VsZXRvbi5zY2FsZVg7XG5cdFx0dGhpcy5iICo9IHNrZWxldG9uLnNjYWxlWDtcblx0XHR0aGlzLmMgKj0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdHRoaXMuZCAqPSBza2VsZXRvbi5zY2FsZVk7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIGxvY2FsIHRyYW5zZm9ybSB2YWx1ZXMgZnJvbSB0aGUgd29ybGQgdHJhbnNmb3JtLlxuXHQgKlxuXHQgKiBJZiB0aGUgd29ybGQgdHJhbnNmb3JtIGlzIG1vZGlmaWVkIChieSBhIGNvbnN0cmFpbnQsIHtAbGluayByb3RhdGVXb3JsZH0sIGV0YykgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHNvXG5cdCAqIHRoZSBsb2NhbCB0cmFuc2Zvcm0gbWF0Y2hlcyB0aGUgd29ybGQgdHJhbnNmb3JtLiBUaGUgbG9jYWwgdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlclxuXHQgKiBjb25zdHJhaW50KS5cblx0ICpcblx0ICogU29tZSBpbmZvcm1hdGlvbiBpcyBhbWJpZ3VvdXMgaW4gdGhlIHdvcmxkIHRyYW5zZm9ybSwgc3VjaCBhcyAtMSwtMSBzY2FsZSB2ZXJzdXMgMTgwIHJvdGF0aW9uLiBUaGUgbG9jYWwgdHJhbnNmb3JtIGFmdGVyXG5cdCAqIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byB0aGUgbG9jYWwgdHJhbnNmb3JtIHVzZWQgdG8gY29tcHV0ZSB0aGUgd29ybGQgdHJhbnNmb3JtLCBidXQgbWF5IG5vdCBiZSBpZGVudGljYWwuICovXG5cdHB1YmxpYyB1cGRhdGVMb2NhbFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbCA9IDA7XG5cdFx0dGhpcy53b3JsZCA9IHNrZWxldG9uLl91cGRhdGU7XG5cblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHtcblx0XHRcdHRoaXMueCA9IHRoaXMud29ybGRYIC0gc2tlbGV0b24ueDtcblx0XHRcdHRoaXMueSA9IHRoaXMud29ybGRZIC0gc2tlbGV0b24ueTtcblx0XHRcdGNvbnN0IGEgPSB0aGlzLmEsIGIgPSB0aGlzLmIsIGMgPSB0aGlzLmMsIGQgPSB0aGlzLmQ7XG5cdFx0XHR0aGlzLnJvdGF0aW9uID0gTWF0aFV0aWxzLmF0YW4yRGVnKGMsIGEpO1xuXHRcdFx0dGhpcy5zY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBjICogYyk7XG5cdFx0XHR0aGlzLnNjYWxlWSA9IE1hdGguc3FydChiICogYiArIGQgKiBkKTtcblx0XHRcdHRoaXMuc2hlYXJYID0gMDtcblx0XHRcdHRoaXMuc2hlYXJZID0gTWF0aFV0aWxzLmF0YW4yRGVnKGEgKiBiICsgYyAqIGQsIGEgKiBkIC0gYiAqIGMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2U7XG5cdFx0bGV0IHBhID0gcGFyZW50LmEsIHBiID0gcGFyZW50LmIsIHBjID0gcGFyZW50LmMsIHBkID0gcGFyZW50LmQ7XG5cdFx0bGV0IHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdGxldCBpYSA9IHBkICogcGlkLCBpYiA9IHBiICogcGlkLCBpYyA9IHBjICogcGlkLCBpZCA9IHBhICogcGlkO1xuXHRcdGNvbnN0IGR4ID0gdGhpcy53b3JsZFggLSBwYXJlbnQud29ybGRYLCBkeSA9IHRoaXMud29ybGRZIC0gcGFyZW50LndvcmxkWTtcblx0XHR0aGlzLnggPSAoZHggKiBpYSAtIGR5ICogaWIpO1xuXHRcdHRoaXMueSA9IChkeSAqIGlkIC0gZHggKiBpYyk7XG5cblx0XHRsZXQgcmE6IG51bWJlciwgcmI6IG51bWJlciwgcmM6IG51bWJlciwgcmQ6IG51bWJlcjtcblx0XHRpZiAodGhpcy5pbmhlcml0ID09PSBJbmhlcml0Lk9ubHlUcmFuc2xhdGlvbikge1xuXHRcdFx0cmEgPSB0aGlzLmE7XG5cdFx0XHRyYiA9IHRoaXMuYjtcblx0XHRcdHJjID0gdGhpcy5jO1xuXHRcdFx0cmQgPSB0aGlzLmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdFx0Y29uc3QgcyA9IE1hdGguYWJzKHBhICogcGQgLSBwYiAqIHBjKSAvIChwYSAqIHBhICsgcGMgKiBwYyk7XG5cdFx0XHRcdFx0cGIgPSAtcGMgKiBza2VsZXRvbi5zY2FsZVggKiBzIC8gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRcdHBkID0gcGEgKiBza2VsZXRvbi5zY2FsZVkgKiBzIC8gc2tlbGV0b24uc2NhbGVYO1xuXHRcdFx0XHRcdHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdFx0XHRcdGlhID0gcGQgKiBwaWQ7XG5cdFx0XHRcdFx0aWIgPSBwYiAqIHBpZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGVPclJlZmxlY3Rpb246IHtcblx0XHRcdFx0XHRsZXQgciA9IHRoaXMucm90YXRpb24gKiBNYXRoVXRpbHMuZGVnUmFkLCBjb3MgPSBNYXRoLmNvcyhyKSwgc2luID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0cGEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdFx0cGMgPSAocGMgKiBjb3MgKyBwZCAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVk7XG5cdFx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQocGEgKiBwYSArIHBjICogcGMpO1xuXHRcdFx0XHRcdGlmIChzID4gMC4wMDAwMSkgcyA9IDEgLyBzO1xuXHRcdFx0XHRcdHBhICo9IHM7XG5cdFx0XHRcdFx0cGMgKj0gcztcblx0XHRcdFx0XHRzID0gTWF0aC5zcXJ0KHBhICogcGEgKyBwYyAqIHBjKTtcblx0XHRcdFx0XHRpZiAodGhpcy5pbmhlcml0ID09PSBJbmhlcml0Lk5vU2NhbGUgJiYgcGlkIDwgMCAhPT0gKHNrZWxldG9uLnNjYWxlWCA8IDAgIT09IHNrZWxldG9uLnNjYWxlWSA8IDApKSBzID0gLXM7XG5cdFx0XHRcdFx0ciA9IE1hdGhVdGlscy5QSSAvIDIgKyBNYXRoLmF0YW4yKHBjLCBwYSk7XG5cdFx0XHRcdFx0cGIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdFx0cGQgPSBNYXRoLnNpbihyKSAqIHM7XG5cdFx0XHRcdFx0cGlkID0gMSAvIChwYSAqIHBkIC0gcGIgKiBwYyk7XG5cdFx0XHRcdFx0aWEgPSBwZCAqIHBpZDtcblx0XHRcdFx0XHRpYiA9IHBiICogcGlkO1xuXHRcdFx0XHRcdGljID0gcGMgKiBwaWQ7XG5cdFx0XHRcdFx0aWQgPSBwYSAqIHBpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmEgPSBpYSAqIHRoaXMuYSAtIGliICogdGhpcy5jO1xuXHRcdFx0cmIgPSBpYSAqIHRoaXMuYiAtIGliICogdGhpcy5kO1xuXHRcdFx0cmMgPSBpZCAqIHRoaXMuYyAtIGljICogdGhpcy5hO1xuXHRcdFx0cmQgPSBpZCAqIHRoaXMuZCAtIGljICogdGhpcy5iO1xuXHRcdH1cblxuXHRcdHRoaXMuc2hlYXJYID0gMDtcblx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydChyYSAqIHJhICsgcmMgKiByYyk7XG5cdFx0aWYgKHRoaXMuc2NhbGVYID4gMC4wMDAxKSB7XG5cdFx0XHRjb25zdCBkZXQgPSByYSAqIHJkIC0gcmIgKiByYztcblx0XHRcdHRoaXMuc2NhbGVZID0gZGV0IC8gdGhpcy5zY2FsZVg7XG5cdFx0XHR0aGlzLnNoZWFyWSA9IC1NYXRoVXRpbHMuYXRhbjJEZWcocmEgKiByYiArIHJjICogcmQsIGRldCk7XG5cdFx0XHR0aGlzLnJvdGF0aW9uID0gTWF0aFV0aWxzLmF0YW4yRGVnKHJjLCByYSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2NhbGVYID0gMDtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHJiICogcmIgKyByZCAqIHJkKTtcblx0XHRcdHRoaXMuc2hlYXJZID0gMDtcblx0XHRcdHRoaXMucm90YXRpb24gPSA5MCAtIE1hdGhVdGlscy5hdGFuMkRlZyhyZCwgcmIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBJZiB0aGUgd29ybGQgdHJhbnNmb3JtIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGNvbnN0cmFpbnRzIGFuZCB0aGUgbG9jYWwgdHJhbnNmb3JtIG5vIGxvbmdlciBtYXRjaGVzLFxuXHQgKiB7QGxpbmsgdXBkYXRlTG9jYWxUcmFuc2Zvcm19IGlzIGNhbGxlZC4gQ2FsbCB0aGlzIGFmdGVyIHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYmVmb3JlXG5cdCAqIHVzaW5nIHRoZSBhcHBsaWVkIGxvY2FsIHRyYW5zZm9ybS4gKi9cblx0cHVibGljIHZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0gKHNrZWxldG9uOiBTa2VsZXRvbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2FsID09PSBza2VsZXRvbi5fdXBkYXRlKSB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0fVxuXG5cdG1vZGlmeUxvY2FsIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbCA9PT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybShza2VsZXRvbik7XG5cdFx0dGhpcy53b3JsZCA9IDA7XG5cdFx0dGhpcy5yZXNldFdvcmxkKHNrZWxldG9uLl91cGRhdGUpO1xuXHR9XG5cblx0bW9kaWZ5V29ybGQgKHVwZGF0ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbCA9IHVwZGF0ZTtcblx0XHR0aGlzLndvcmxkID0gdXBkYXRlO1xuXHRcdHRoaXMucmVzZXRXb3JsZCh1cGRhdGUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldFdvcmxkICh1cGRhdGU6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5ib25lLmNoaWxkcmVuO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldLmFwcGxpZWRQb3NlO1xuXHRcdFx0aWYgKGNoaWxkLndvcmxkID09PSB1cGRhdGUpIHtcblx0XHRcdFx0Y2hpbGQud29ybGQgPSAwO1xuXHRcdFx0XHRjaGlsZC5sb2NhbCA9IDA7XG5cdFx0XHRcdGNoaWxkLnJlc2V0V29ybGQodXBkYXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogVGhlIHdvcmxkIHJvdGF0aW9uIGZvciB0aGUgWCBheGlzLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBhfSBhbmQge0BsaW5rIGN9LiBUaGlzIGlzIHRoZSBkaXJlY3Rpb24gdGhlIGJvbmUgaXNcblx0ICogcG9pbnRpbmcuICovXG5cdHB1YmxpYyBnZXRXb3JsZFJvdGF0aW9uWCAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuYywgdGhpcy5hKTtcblx0fVxuXG5cdC8qKiBUaGUgd29ybGQgcm90YXRpb24gZm9yIHRoZSBZIGF4aXMsIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rIGJ9IGFuZCB7QGxpbmsgZH0uICovXG5cdHB1YmxpYyBnZXRXb3JsZFJvdGF0aW9uWSAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuZCwgdGhpcy5iKTtcblx0fVxuXG5cdC8qKiBUaGUgbWFnbml0dWRlIChhbHdheXMgcG9zaXRpdmUpIG9mIHRoZSB3b3JsZCBzY2FsZSBYLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBhfSBhbmQge0BsaW5rIGN9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRTY2FsZVggKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmEgKiB0aGlzLmEgKyB0aGlzLmMgKiB0aGlzLmMpO1xuXHR9XG5cblx0LyoqIFRoZSBtYWduaXR1ZGUgKGFsd2F5cyBwb3NpdGl2ZSkgb2YgdGhlIHdvcmxkIHNjYWxlIFksIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rIGJ9IGFuZCB7QGxpbmsgZH0uICovXG5cdHB1YmxpYyBnZXRXb3JsZFNjYWxlWSAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuYiAqIHRoaXMuYiArIHRoaXMuZCAqIHRoaXMuZCk7XG5cdH1cblxuXHQvLyBwdWJsaWMgTWF0cml4MyBnZXRXb3JsZFRyYW5zZm9ybSAoTWF0cml4MyB3b3JsZFRyYW5zZm9ybSkge1xuXHQvLyBcdGlmICh3b3JsZFRyYW5zZm9ybSA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFwid29ybGRUcmFuc2Zvcm0gY2Fubm90IGJlIG51bGwuXCIpO1xuXHQvLyBcdGZsb2F0W10gdmFsID0gd29ybGRUcmFuc2Zvcm0udmFsO1xuXHQvLyBcdHZhbFtNMDBdID0gYTtcblx0Ly8gXHR2YWxbTTAxXSA9IGI7XG5cdC8vIFx0dmFsW00xMF0gPSBjO1xuXHQvLyBcdHZhbFtNMTFdID0gZDtcblx0Ly8gXHR2YWxbTTAyXSA9IHdvcmxkWDtcblx0Ly8gXHR2YWxbTTEyXSA9IHdvcmxkWTtcblx0Ly8gXHR2YWxbTTIwXSA9IDA7XG5cdC8vIFx0dmFsW00yMV0gPSAwO1xuXHQvLyBcdHZhbFtNMjJdID0gMTtcblx0Ly8gXHRyZXR1cm4gd29ybGRUcmFuc2Zvcm07XG5cdC8vIH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gd29ybGQgY29vcmRpbmF0ZXMgdG8gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIHdvcmxkVG9Mb2NhbCAod29ybGQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAod29ybGQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwid29ybGQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IGRldCA9IHRoaXMuYSAqIHRoaXMuZCAtIHRoaXMuYiAqIHRoaXMuYztcblx0XHRjb25zdCB4ID0gd29ybGQueCAtIHRoaXMud29ybGRYLCB5ID0gd29ybGQueSAtIHRoaXMud29ybGRZO1xuXHRcdHdvcmxkLnggPSAoeCAqIHRoaXMuZCAtIHkgKiB0aGlzLmIpIC8gZGV0O1xuXHRcdHdvcmxkLnkgPSAoeSAqIHRoaXMuYSAtIHggKiB0aGlzLmMpIC8gZGV0O1xuXHRcdHJldHVybiB3b3JsZDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLiAqL1xuXHRwdWJsaWMgbG9jYWxUb1dvcmxkIChsb2NhbDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmIChsb2NhbCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJsb2NhbCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgeCA9IGxvY2FsLngsIHkgPSBsb2NhbC55O1xuXHRcdGxvY2FsLnggPSB4ICogdGhpcy5hICsgeSAqIHRoaXMuYiArIHRoaXMud29ybGRYO1xuXHRcdGxvY2FsLnkgPSB4ICogdGhpcy5jICsgeSAqIHRoaXMuZCArIHRoaXMud29ybGRZO1xuXHRcdHJldHVybiBsb2NhbDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB3b3JsZCBjb29yZGluYXRlcyB0byB0aGUgcGFyZW50IGJvbmUncyBsb2NhbCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIHdvcmxkVG9QYXJlbnQgKHdvcmxkOiBWZWN0b3IyKTogVmVjdG9yMiB7XG5cdFx0aWYgKHdvcmxkID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIndvcmxkIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRyZXR1cm4gdGhpcy5ib25lLnBhcmVudCA9PSBudWxsID8gd29ybGQgOiB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlLndvcmxkVG9Mb2NhbCh3b3JsZCk7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gdGhlIHBhcmVudCBib25lJ3MgY29vcmRpbmF0ZXMgdG8gd29ybGQgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyBwYXJlbnRUb1dvcmxkICh3b3JsZDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmICh3b3JsZCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JsZCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5wYXJlbnQgPT0gbnVsbCA/IHdvcmxkIDogdGhpcy5ib25lLnBhcmVudC5hcHBsaWVkUG9zZS5sb2NhbFRvV29ybGQod29ybGQpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSB3b3JsZCByb3RhdGlvbiB0byBhIGxvY2FsIHJvdGF0aW9uLiAqL1xuXHRwdWJsaWMgd29ybGRUb0xvY2FsUm90YXRpb24gKHdvcmxkUm90YXRpb246IG51bWJlcik6IG51bWJlciB7XG5cdFx0d29ybGRSb3RhdGlvbiAqPSBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKHdvcmxkUm90YXRpb24pLCBjb3MgPSBNYXRoLmNvcyh3b3JsZFJvdGF0aW9uKTtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuYSAqIHNpbiAtIHRoaXMuYyAqIGNvcywgdGhpcy5kICogY29zIC0gdGhpcy5iICogc2luKSArIHRoaXMucm90YXRpb24gLSB0aGlzLnNoZWFyWDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgbG9jYWwgcm90YXRpb24gdG8gYSB3b3JsZCByb3RhdGlvbi4gKi9cblx0bG9jYWxUb1dvcmxkUm90YXRpb24gKGxvY2FsUm90YXRpb246IG51bWJlcik6IG51bWJlciB7XG5cdFx0bG9jYWxSb3RhdGlvbiA9IChsb2NhbFJvdGF0aW9uIC0gdGhpcy5yb3RhdGlvbiAtIHRoaXMuc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4obG9jYWxSb3RhdGlvbiksIGNvcyA9IE1hdGguY29zKGxvY2FsUm90YXRpb24pO1xuXHRcdHJldHVybiBNYXRoVXRpbHMuYXRhbjJEZWcoY29zICogdGhpcy5jICsgc2luICogdGhpcy5kLCBjb3MgKiB0aGlzLmEgKyBzaW4gKiB0aGlzLmIpO1xuXHR9XG5cblx0LyoqIFJvdGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gKi9cblx0cm90YXRlV29ybGQgKGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGRlZ3JlZXMgKj0gTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbihkZWdyZWVzKSwgY29zID0gTWF0aC5jb3MoZGVncmVlcyk7XG5cdFx0Y29uc3QgcmEgPSB0aGlzLmEsIHJiID0gdGhpcy5iO1xuXHRcdHRoaXMuYSA9IGNvcyAqIHJhIC0gc2luICogdGhpcy5jO1xuXHRcdHRoaXMuYiA9IGNvcyAqIHJiIC0gc2luICogdGhpcy5kO1xuXHRcdHRoaXMuYyA9IHNpbiAqIHJhICsgY29zICogdGhpcy5jO1xuXHRcdHRoaXMuZCA9IHNpbiAqIHJiICsgY29zICogdGhpcy5kO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,41 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated April 5, 2025. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2025, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
13
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
+ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import type { ConstraintData } from "./ConstraintData.js";
30
+ import type { Physics } from "./Physics.js";
31
+ import type { Pose } from "./Pose.js";
32
+ import { PosedActive } from "./PosedActive.js";
33
+ import type { Skeleton } from "./Skeleton.js";
34
+ import type { Update } from "./Update.js";
35
+ export declare abstract class Constraint<T extends Constraint<T, D, P>, D extends ConstraintData<T, P>, P extends Pose<P>> extends PosedActive<D, P> implements Update {
36
+ constructor(data: D, pose: P, constrained: P);
37
+ abstract copy(skeleton: Skeleton): T;
38
+ abstract sort(skeleton: Skeleton): void;
39
+ abstract update(skeleton: Skeleton, physics: Physics): void;
40
+ isSourceActive(): boolean;
41
+ }
@@ -0,0 +1,38 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated April 5, 2025. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2025, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
13
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
+ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import { PosedActive } from "./PosedActive.js";
30
+ export class Constraint extends PosedActive {
31
+ constructor(data, pose, constrained) {
32
+ super(data, pose, constrained);
33
+ }
34
+ isSourceActive() {
35
+ return true;
36
+ }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Db25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUsvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJL0MsTUFBTSxPQUFnQixVQUlyQixTQUFRLFdBQWlCO0lBRXpCLFlBQWEsSUFBTyxFQUFFLElBQU8sRUFBRSxXQUFjO1FBQzVDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFRRCxjQUFjO1FBQ2IsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB0eXBlIHsgQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9Db25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaHlzaWNzIH0gZnJvbSBcIi4vUGh5c2ljcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3NlIH0gZnJvbSBcIi4vUG9zZS5qc1wiO1xuaW1wb3J0IHsgUG9zZWRBY3RpdmUgfSBmcm9tIFwiLi9Qb3NlZEFjdGl2ZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVwZGF0ZSB9IGZyb20gXCIuL1VwZGF0ZS5qc1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29uc3RyYWludDxcblx0VCBleHRlbmRzIENvbnN0cmFpbnQ8VCwgRCwgUD4sXG5cdEQgZXh0ZW5kcyBDb25zdHJhaW50RGF0YTxULCBQPixcblx0UCBleHRlbmRzIFBvc2U8UD4+XG5cdGV4dGVuZHMgUG9zZWRBY3RpdmU8RCwgUD4gaW1wbGVtZW50cyBVcGRhdGUge1xuXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBELCBwb3NlOiBQLCBjb25zdHJhaW5lZDogUCkge1xuXHRcdHN1cGVyKGRhdGEsIHBvc2UsIGNvbnN0cmFpbmVkKTtcblx0fVxuXG5cdGFic3RyYWN0IGNvcHkgKHNrZWxldG9uOiBTa2VsZXRvbik6IFQ7XG5cblx0YWJzdHJhY3Qgc29ydCAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZDtcblxuXHRhYnN0cmFjdCB1cGRhdGUgKHNrZWxldG9uOiBTa2VsZXRvbiwgcGh5c2ljczogUGh5c2ljcyk6IHZvaWQ7XG5cblx0aXNTb3VyY2VBY3RpdmUgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG4iXX0=
@@ -26,10 +26,12 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
+ import type { Constraint } from "./Constraint.js";
30
+ import type { Pose } from "./Pose.js";
31
+ import { PosedData } from "./PosedData.js";
32
+ import type { Skeleton } from "./Skeleton.js";
29
33
  /** The base class for all constraint datas. */
30
- export declare abstract class ConstraintData {
31
- name: string;
32
- order: number;
33
- skinRequired: boolean;
34
- constructor(name: string, order: number, skinRequired: boolean);
34
+ export declare abstract class ConstraintData<T extends Constraint<T, ConstraintData<T, P>, P>, P extends Pose<P>> extends PosedData<P> {
35
+ constructor(name: string, setup: P);
36
+ abstract create(skeleton: Skeleton): T;
35
37
  }