@esotericsoftware/spine-core 4.2.115 → 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 +29 -23
  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 +2 -2
  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 +13 -4
  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
@@ -27,118 +27,110 @@
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
29
  import { Inherit } from "./BoneData.js";
30
+ import { Constraint } from "./Constraint.js";
31
+ import { ScaleYMode } from "./IkConstraintData.js";
32
+ import { IkConstraintPose } from "./IkConstraintPose.js";
30
33
  import { MathUtils } from "./Utils.js";
31
- /** Stores the current pose for an IK constraint. An IK constraint adjusts the rotation of 1 or 2 constrained bones so the tip of
32
- * the last bone is as close to the target bone as possible.
34
+ /** Adjusts the local rotation of 1 or 2 constrained bones so the world position of the tip of the last bone is as close to the
35
+ * target bone as possible.
33
36
  *
34
37
  * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */
35
- export class IkConstraint {
36
- /** The IK constraint's setup pose data. */
37
- data;
38
- /** The bones that will be modified by this IK constraint. */
38
+ export class IkConstraint extends Constraint {
39
+ /** The 1 or 2 bones that will be modified by this IK constraint. */
39
40
  bones;
40
41
  /** The bone that is the IK target. */
41
42
  target;
42
- /** Controls the bend direction of the IK bones, either 1 or -1. */
43
- bendDirection = 0;
44
- /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */
45
- compress = false;
46
- /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained
47
- * and the parent bone has local nonuniform scale, stretch is not applied. */
48
- stretch = false;
49
- /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */
50
- mix = 1;
51
- /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */
52
- softness = 0;
53
- active = false;
54
43
  constructor(data, skeleton) {
55
- if (!data)
56
- throw new Error("data cannot be null.");
44
+ super(data, new IkConstraintPose(), new IkConstraintPose());
57
45
  if (!skeleton)
58
46
  throw new Error("skeleton cannot be null.");
59
- this.data = data;
60
- this.bones = new Array();
61
- for (let i = 0; i < data.bones.length; i++) {
62
- let bone = skeleton.findBone(data.bones[i].name);
63
- if (!bone)
64
- throw new Error(`Couldn't find bone ${data.bones[i].name}`);
65
- this.bones.push(bone);
66
- }
67
- let target = skeleton.findBone(data.target.name);
68
- if (!target)
69
- throw new Error(`Couldn't find bone ${data.target.name}`);
70
- this.target = target;
71
- this.mix = data.mix;
72
- this.softness = data.softness;
73
- this.bendDirection = data.bendDirection;
74
- this.compress = data.compress;
75
- this.stretch = data.stretch;
76
- }
77
- isActive() {
78
- return this.active;
47
+ this.bones = [];
48
+ for (const boneData of data.bones)
49
+ this.bones.push(skeleton.bones[boneData.index].constrainedPose);
50
+ this.target = skeleton.bones[data.target.index];
79
51
  }
80
- setToSetupPose() {
81
- const data = this.data;
82
- this.mix = data.mix;
83
- this.softness = data.softness;
84
- this.bendDirection = data.bendDirection;
85
- this.compress = data.compress;
86
- this.stretch = data.stretch;
52
+ copy(skeleton) {
53
+ var copy = new IkConstraint(this.data, skeleton);
54
+ copy.pose.set(this.pose);
55
+ return copy;
87
56
  }
88
- update(physics) {
89
- if (this.mix == 0)
57
+ update(skeleton, physics) {
58
+ const p = this.appliedPose;
59
+ if (p.mix === 0)
90
60
  return;
91
- let target = this.target;
92
- let bones = this.bones;
61
+ const target = this.target.appliedPose;
62
+ const bones = this.bones;
93
63
  switch (bones.length) {
94
64
  case 1:
95
- this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);
65
+ IkConstraint.apply(skeleton, bones[0], target.worldX, target.worldY, p.compress, p.stretch, this.data.scaleYMode, p.mix);
96
66
  break;
97
67
  case 2:
98
- this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix);
68
+ IkConstraint.apply(skeleton, bones[0], bones[1], target.worldX, target.worldY, p.bendDirection, p.stretch, this.data.scaleYMode, p.softness, p.mix);
99
69
  break;
100
70
  }
101
71
  }
102
- /** Applies 1 bone IK. The target is specified in the world coordinate system. */
103
- apply1(bone, targetX, targetY, compress, stretch, uniform, alpha) {
104
- let p = bone.parent;
105
- if (!p)
106
- throw new Error("IK bone must have parent.");
72
+ sort(skeleton) {
73
+ skeleton.sortBone(this.target);
74
+ const parent = this.bones[0].bone;
75
+ skeleton.sortBone(parent);
76
+ skeleton._updateCache.push(this);
77
+ parent.sorted = false;
78
+ skeleton.sortReset(parent.children);
79
+ skeleton.constrained(parent);
80
+ if (this.bones.length > 1)
81
+ skeleton.constrained(this.bones[1].bone);
82
+ }
83
+ isSourceActive() {
84
+ return this.target.active;
85
+ }
86
+ static apply(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY, stretchOrBendDir, scaleYModeOrStretch, mixOrScaleYMode, softness, mix) {
87
+ if (typeof targetXorChild === "number")
88
+ IkConstraint.apply1(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY, stretchOrBendDir, scaleYModeOrStretch, mixOrScaleYMode);
89
+ else
90
+ IkConstraint.apply2(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY, stretchOrBendDir, scaleYModeOrStretch, mixOrScaleYMode, softness, mix);
91
+ }
92
+ static apply1(skeleton, bone, targetX, targetY, compress, stretch, scaleYMode, mix) {
93
+ bone.modifyLocal(skeleton);
94
+ // biome-ignore lint/style/noNonNullAssertion: reference runtime
95
+ const p = bone.bone.parent.appliedPose;
107
96
  let pa = p.a, pb = p.b, pc = p.c, pd = p.d;
108
- let rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0;
97
+ let rotationIK = -bone.shearX - bone.rotation, tx = 0, ty = 0;
109
98
  switch (bone.inherit) {
110
99
  case Inherit.OnlyTranslation:
111
- tx = (targetX - bone.worldX) * MathUtils.signum(bone.skeleton.scaleX);
112
- ty = (targetY - bone.worldY) * MathUtils.signum(bone.skeleton.scaleY);
100
+ tx = (targetX - bone.worldX) * MathUtils.signum(skeleton.scaleX);
101
+ ty = (targetY - bone.worldY) * MathUtils.signum(skeleton.scaleY);
113
102
  break;
114
- case Inherit.NoRotationOrReflection:
115
- let s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001, pa * pa + pc * pc);
116
- let sa = pa / bone.skeleton.scaleX;
117
- let sc = pc / bone.skeleton.scaleY;
118
- pb = -sc * s * bone.skeleton.scaleX;
119
- pd = sa * s * bone.skeleton.scaleY;
120
- rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;
103
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime
104
+ case Inherit.NoRotationOrReflection: {
105
+ const s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001, pa * pa + pc * pc);
106
+ const sa = pa / skeleton.scaleX;
107
+ const sc = pc / skeleton.scaleY;
108
+ pb = -sc * s * skeleton.scaleX;
109
+ pd = sa * s * skeleton.scaleY;
110
+ rotationIK += MathUtils.atan2Deg(sc, sa);
111
+ }
121
112
  // Fall through
122
- default:
123
- let x = targetX - p.worldX, y = targetY - p.worldY;
124
- let d = pa * pd - pb * pc;
113
+ default: {
114
+ const x = targetX - p.worldX, y = targetY - p.worldY;
115
+ const d = pa * pd - pb * pc;
125
116
  if (Math.abs(d) <= 0.0001) {
126
117
  tx = 0;
127
118
  ty = 0;
128
119
  }
129
120
  else {
130
- tx = (x * pd - y * pb) / d - bone.ax;
131
- ty = (y * pa - x * pc) / d - bone.ay;
121
+ tx = (x * pd - y * pb) / d - bone.x;
122
+ ty = (y * pa - x * pc) / d - bone.y;
132
123
  }
124
+ }
133
125
  }
134
- rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg;
135
- if (bone.ascaleX < 0)
126
+ rotationIK += MathUtils.atan2Deg(ty, tx);
127
+ if (bone.scaleX < 0)
136
128
  rotationIK += 180;
137
129
  if (rotationIK > 180)
138
130
  rotationIK -= 360;
139
131
  else if (rotationIK < -180)
140
132
  rotationIK += 360;
141
- let sx = bone.ascaleX, sy = bone.ascaleY;
133
+ bone.rotation += rotationIK * mix;
142
134
  if (compress || stretch) {
143
135
  switch (bone.inherit) {
144
136
  case Inherit.NoScale:
@@ -146,25 +138,30 @@ export class IkConstraint {
146
138
  tx = targetX - bone.worldX;
147
139
  ty = targetY - bone.worldY;
148
140
  }
149
- const b = bone.data.length * sx;
141
+ const b = bone.bone.data.length * bone.scaleX;
150
142
  if (b > 0.0001) {
151
143
  const dd = tx * tx + ty * ty;
152
144
  if ((compress && dd < b * b) || (stretch && dd > b * b)) {
153
- const s = (Math.sqrt(dd) / b - 1) * alpha + 1;
154
- sx *= s;
155
- if (uniform)
156
- sy *= s;
145
+ const s = (Math.sqrt(dd) / b - 1) * mix + 1;
146
+ bone.scaleX *= s;
147
+ switch (scaleYMode) {
148
+ case ScaleYMode.Uniform:
149
+ bone.scaleY *= s;
150
+ break;
151
+ case ScaleYMode.Volume: bone.scaleY /= s;
152
+ }
157
153
  }
158
154
  }
159
155
  }
160
- bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);
161
156
  }
162
157
  /** Applies 2 bone IK. The target is specified in the world coordinate system.
163
158
  * @param child A direct descendant of the parent bone. */
164
- apply2(parent, child, targetX, targetY, bendDir, stretch, uniform, softness, alpha) {
165
- if (parent.inherit != Inherit.Normal || child.inherit != Inherit.Normal)
159
+ static apply2(skeleton, parent, child, targetX, targetY, bendDir, stretch, scaleYMode, softness, mix) {
160
+ if (parent.inherit !== Inherit.Normal || child.inherit !== Inherit.Normal)
166
161
  return;
167
- let px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX;
162
+ parent.modifyLocal(skeleton);
163
+ child.modifyLocal(skeleton);
164
+ let px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX;
168
165
  let os1 = 0, os2 = 0, s2 = 0;
169
166
  if (psx < 0) {
170
167
  psx = -psx;
@@ -185,41 +182,39 @@ export class IkConstraint {
185
182
  }
186
183
  else
187
184
  os2 = 0;
188
- let cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;
189
- let u = Math.abs(psx - psy) <= 0.0001;
185
+ let cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;
186
+ const u = Math.abs(psx - psy) <= 0.0001;
190
187
  if (!u || stretch) {
191
- cy = 0;
192
- cwx = a * cx + parent.worldX;
193
- cwy = c * cx + parent.worldY;
188
+ child.y = 0;
189
+ cwx = a * child.x + parent.worldX;
190
+ cwy = c * child.x + parent.worldY;
194
191
  }
195
192
  else {
196
- cy = child.ay;
197
- cwx = a * cx + b * cy + parent.worldX;
198
- cwy = c * cx + d * cy + parent.worldY;
193
+ cwx = a * child.x + b * child.y + parent.worldX;
194
+ cwy = c * child.x + d * child.y + parent.worldY;
199
195
  }
200
- let pp = parent.parent;
201
- if (!pp)
202
- throw new Error("IK parent must itself have a parent.");
196
+ // biome-ignore lint/style/noNonNullAssertion: reference runtime
197
+ const pp = parent.bone.parent.appliedPose;
203
198
  a = pp.a;
204
199
  b = pp.b;
205
200
  c = pp.c;
206
201
  d = pp.d;
207
202
  let id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY;
208
203
  id = Math.abs(id) <= 0.0001 ? 0 : 1 / id;
209
- let dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;
210
- let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;
204
+ const dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;
205
+ let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.bone.data.length * csx, a1, a2;
211
206
  if (l1 < 0.0001) {
212
- this.apply1(parent, targetX, targetY, false, stretch, false, alpha);
213
- child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);
207
+ IkConstraint.apply(skeleton, parent, targetX, targetY, false, stretch, ScaleYMode.None, mix);
208
+ child.rotation = 0;
214
209
  return;
215
210
  }
216
211
  x = targetX - pp.worldX;
217
212
  y = targetY - pp.worldY;
218
213
  let tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;
219
214
  let dd = tx * tx + ty * ty;
220
- if (softness != 0) {
215
+ if (softness !== 0) {
221
216
  softness *= psx * (csx + 1) * 0.5;
222
- let td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;
217
+ const td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;
223
218
  if (sd > 0) {
224
219
  let p = Math.min(1, sd / (softness * 2)) - 1;
225
220
  p = (sd - softness * (1 - p * p)) / td;
@@ -228,6 +223,7 @@ export class IkConstraint {
228
223
  dd = tx * tx + ty * ty;
229
224
  }
230
225
  }
226
+ // biome-ignore lint/suspicious/noConfusingLabels: reference runtime
231
227
  outer: if (u) {
232
228
  l2 *= psx;
233
229
  let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);
@@ -239,10 +235,14 @@ export class IkConstraint {
239
235
  cos = 1;
240
236
  a2 = 0;
241
237
  if (stretch) {
242
- a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;
243
- sx *= a;
244
- if (uniform)
245
- sy *= a;
238
+ a = (Math.sqrt(dd) / (l1 + l2) - 1) * mix + 1;
239
+ parent.scaleX *= a;
240
+ switch (scaleYMode) {
241
+ case ScaleYMode.Uniform:
242
+ parent.scaleY *= a;
243
+ break;
244
+ case ScaleYMode.Volume: parent.scaleY /= a;
245
+ }
246
246
  }
247
247
  }
248
248
  else
@@ -254,9 +254,9 @@ export class IkConstraint {
254
254
  else {
255
255
  a = psx * l2;
256
256
  b = psy * l2;
257
- let aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);
257
+ const aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);
258
258
  c = bb * l1 * l1 + aa * dd - aa * bb;
259
- let c1 = -2 * bb * l1, c2 = bb - aa;
259
+ const c1 = -2 * bb * l1, c2 = bb - aa;
260
260
  d = c1 * c1 - 4 * c2 * c;
261
261
  if (d >= 0) {
262
262
  let q = Math.sqrt(d);
@@ -264,7 +264,7 @@ export class IkConstraint {
264
264
  q = -q;
265
265
  q = -(c1 + q) * 0.5;
266
266
  let r0 = q / c2, r1 = c / q;
267
- let r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;
267
+ const r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;
268
268
  r0 = dd - r * r;
269
269
  if (r0 >= 0) {
270
270
  y = Math.sqrt(r0) * bendDir;
@@ -303,21 +303,19 @@ export class IkConstraint {
303
303
  a2 = maxAngle * bendDir;
304
304
  }
305
305
  }
306
- let os = Math.atan2(cy, cx) * s2;
307
- let rotation = parent.arotation;
308
- a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation;
306
+ const os = Math.atan2(child.y, child.x) * s2;
307
+ a1 = (a1 - os) * MathUtils.radDeg + os1 - parent.rotation;
309
308
  if (a1 > 180)
310
309
  a1 -= 360;
311
310
  else if (a1 < -180) //
312
311
  a1 += 360;
313
- parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0);
314
- rotation = child.arotation;
315
- a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;
312
+ parent.rotation += a1 * mix;
313
+ a2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2 - child.rotation;
316
314
  if (a2 > 180)
317
315
  a2 -= 360;
318
316
  else if (a2 < -180) //
319
317
  a2 += 360;
320
- child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);
318
+ child.rotation += a2 * mix;
321
319
  }
322
320
  }
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWtDb25zdHJhaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0lrQ29uc3RyYWludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDOzs7cUdBR3FHO0FBQ3JHLE1BQU0sT0FBTyxZQUFZO0lBQ3hCLDJDQUEyQztJQUMzQyxJQUFJLENBQW1CO0lBRXZCLDZEQUE2RDtJQUM3RCxLQUFLLENBQWM7SUFFbkIsc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBTztJQUViLG1FQUFtRTtJQUNuRSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLHlIQUF5SDtJQUN6SCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCO2lGQUM2RTtJQUM3RSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLG9HQUFvRztJQUNwRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBRVIsaUdBQWlHO0lBQ2pHLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWYsWUFBYSxJQUFzQixFQUFFLFFBQWtCO1FBQ3RELElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVEsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVB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QUNSLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUixDQUFDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDYixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDWCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDYixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDWCxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ1gsQ0FBQzs7WUFDQSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1AsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM3QixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ1AsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDZCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDdEMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1QsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVCxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNULENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDbkUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDNUUsSUFBSSxFQUFFLEdBQUcs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LFFBQVEsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzSCxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB7IElrQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9Ja0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBQaHlzaWNzLCBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBVcGRhdGFibGUgfSBmcm9tIFwiLi9VcGRhdGFibGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBTdG9yZXMgdGhlIGN1cnJlbnQgcG9zZSBmb3IgYW4gSUsgY29uc3RyYWludC4gQW4gSUsgY29uc3RyYWludCBhZGp1c3RzIHRoZSByb3RhdGlvbiBvZiAxIG9yIDIgY29uc3RyYWluZWQgYm9uZXMgc28gdGhlIHRpcCBvZlxuICogdGhlIGxhc3QgYm9uZSBpcyBhcyBjbG9zZSB0byB0aGUgdGFyZ2V0IGJvbmUgYXMgcG9zc2libGUuXG4gKlxuICogU2VlIFtJSyBjb25zdHJhaW50c10oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWlrLWNvbnN0cmFpbnRzKSBpbiB0aGUgU3BpbmUgVXNlciBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBJa0NvbnN0cmFpbnQgaW1wbGVtZW50cyBVcGRhdGFibGUge1xuXHQvKiogVGhlIElLIGNvbnN0cmFpbnQncyBzZXR1cCBwb3NlIGRhdGEuICovXG5cdGRhdGE6IElrQ29uc3RyYWludERhdGE7XG5cblx0LyoqIFRoZSBib25lcyB0aGF0IHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhpcyBJSyBjb25zdHJhaW50LiAqL1xuXHRib25lczogQXJyYXk8Qm9uZT47XG5cblx0LyoqIFRoZSBib25lIHRoYXQgaXMgdGhlIElLIHRhcmdldC4gKi9cblx0dGFyZ2V0OiBCb25lO1xuXG5cdC8qKiBDb250cm9scyB0aGUgYmVuZCBkaXJlY3Rpb24gb2YgdGhlIElLIGJvbmVzLCBlaXRoZXIgMSBvciAtMS4gKi9cblx0YmVuZERpcmVjdGlvbiA9IDA7XG5cblx0LyoqIFdoZW4gdHJ1ZSBhbmQgb25seSBhIHNpbmdsZSBib25lIGlzIGJlaW5nIGNvbnN0cmFpbmVkLCBpZiB0aGUgdGFyZ2V0IGlzIHRvbyBjbG9zZSwgdGhlIGJvbmUgaXMgc2NhbGVkIHRvIHJlYWNoIGl0LiAqL1xuXHRjb21wcmVzcyA9IGZhbHNlO1xuXG5cdC8qKiBXaGVuIHRydWUsIGlmIHRoZSB0YXJnZXQgaXMgb3V0IG9mIHJhbmdlLCB0aGUgcGFyZW50IGJvbmUgaXMgc2NhbGVkIHRvIHJlYWNoIGl0LiBJZiBtb3JlIHRoYW4gb25lIGJvbmUgaXMgYmVpbmcgY29uc3RyYWluZWRcblx0ICogYW5kIHRoZSBwYXJlbnQgYm9uZSBoYXMgbG9jYWwgbm9udW5pZm9ybSBzY2FsZSwgc3RyZXRjaCBpcyBub3QgYXBwbGllZC4gKi9cblx0c3RyZXRjaCA9IGZhbHNlO1xuXG5cdC8qKiBBIHBlcmNlbnRhZ2UgKDAtMSkgdGhhdCBjb250cm9scyB0aGUgbWl4IGJldHdlZW4gdGhlIGNvbnN0cmFpbmVkIGFuZCB1bmNvbnN0cmFpbmVkIHJvdGF0aW9ucy4gKi9cblx0bWl4ID0gMTtcblxuXHQvKiogRm9yIHR3byBib25lIElLLCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbWF4aW11bSByZWFjaCBvZiB0aGUgYm9uZXMgdGhhdCByb3RhdGlvbiB3aWxsIHNsb3cuICovXG5cdHNvZnRuZXNzID0gMDtcblx0YWN0aXZlID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKGRhdGE6IElrQ29uc3RyYWludERhdGEsIHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0aWYgKCFza2VsZXRvbikgdGhyb3cgbmV3IEVycm9yKFwic2tlbGV0b24gY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cblx0XHR0aGlzLmJvbmVzID0gbmV3IEFycmF5PEJvbmU+KCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmJvbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgYm9uZSA9IHNrZWxldG9uLmZpbmRCb25lKGRhdGEuYm9uZXNbaV0ubmFtZSk7XG5cdFx0XHRpZiAoIWJvbmUpIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBib25lICR7ZGF0YS5ib25lc1tpXS5uYW1lfWApO1xuXHRcdFx0dGhpcy5ib25lcy5wdXNoKGJvbmUpO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0ID0gc2tlbGV0b24uZmluZEJvbmUoZGF0YS50YXJnZXQubmFtZSk7XG5cdFx0aWYgKCF0YXJnZXQpIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBib25lICR7ZGF0YS50YXJnZXQubmFtZX1gKTtcblxuXHRcdHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuXHRcdHRoaXMubWl4ID0gZGF0YS5taXg7XG5cdFx0dGhpcy5zb2Z0bmVzcyA9IGRhdGEuc29mdG5lc3M7XG5cdFx0dGhpcy5iZW5kRGlyZWN0aW9uID0gZGF0YS5iZW5kRGlyZWN0aW9uO1xuXHRcdHRoaXMuY29tcHJlc3MgPSBkYXRhLmNvbXByZXNzO1xuXHRcdHRoaXMuc3RyZXRjaCA9IGRhdGEuc3RyZXRjaDtcblx0fVxuXG5cdGlzQWN0aXZlICgpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmU7XG5cdH1cblxuXHRzZXRUb1NldHVwUG9zZSAoKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcblx0XHR0aGlzLm1peCA9IGRhdGEubWl4O1xuXHRcdHRoaXMuc29mdG5lc3MgPSBkYXRhLnNvZnRuZXNzO1xuXHRcdHRoaXMuYmVuZERpcmVjdGlvbiA9IGRhdGEuYmVuZERpcmVjdGlvbjtcblx0XHR0aGlzLmNvbXByZXNzID0gZGF0YS5jb21wcmVzcztcblx0XHR0aGlzLnN0cmV0Y2ggPSBkYXRhLnN0cmV0Y2g7XG5cdH1cblxuXHR1cGRhdGUgKHBoeXNpY3M6IFBoeXNpY3MpIHtcblx0XHRpZiAodGhpcy5taXggPT0gMCkgcmV0dXJuO1xuXHRcdGxldCB0YXJnZXQgPSB0aGlzLnRhcmdldDtcblx0XHRsZXQgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdHN3aXRjaCAoYm9uZXMubGVuZ3RoKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHRoaXMuYXBwbHkxKGJvbmVzWzBdLCB0YXJnZXQud29ybGRYLCB0YXJnZXQud29ybGRZLCB0aGlzLmNvbXByZXNzLCB0aGlzLnN0cmV0Y2gsIHRoaXMuZGF0YS51bmlmb3JtLCB0aGlzLm1peCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHR0aGlzLmFwcGx5Mihib25lc1swXSwgYm9uZXNbMV0sIHRhcmdldC53b3JsZFgsIHRhcmdldC53b3JsZFksIHRoaXMuYmVuZERpcmVjdGlvbiwgdGhpcy5zdHJldGNoLCB0aGlzLmRhdGEudW5pZm9ybSwgdGhpcy5zb2Z0bmVzcywgdGhpcy5taXgpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKiogQXBwbGllcyAxIGJvbmUgSUsuIFRoZSB0YXJnZXQgaXMgc3BlY2lmaWVkIGluIHRoZSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0YXBwbHkxIChib25lOiBCb25lLCB0YXJnZXRYOiBudW1iZXIsIHRhcmdldFk6IG51bWJlciwgY29tcHJlc3M6IGJvb2xlYW4sIHN0cmV0Y2g6IGJvb2xlYW4sIHVuaWZvcm06IGJvb2xlYW4sIGFscGhhOiBudW1iZXIpIHtcblx0XHRsZXQgcCA9IGJvbmUucGFyZW50O1xuXHRcdGlmICghcCkgdGhyb3cgbmV3IEVycm9yKFwiSUsgYm9uZSBtdXN0IGhhdmUgcGFyZW50LlwiKTtcblx0XHRsZXQgcGEgPSBwLmEsIHBiID0gcC5iLCBwYyA9IHAuYywgcGQgPSBwLmQ7XG5cdFx0bGV0IHJvdGF0aW9uSUsgPSAtYm9uZS5hc2hlYXJYIC0gYm9uZS5hcm90YXRpb24sIHR4ID0gMCwgdHkgPSAwO1xuXG5cdFx0c3dpdGNoIChib25lLmluaGVyaXQpIHtcblx0XHRcdGNhc2UgSW5oZXJpdC5Pbmx5VHJhbnNsYXRpb246XG5cdFx0XHRcdHR4ID0gKHRhcmdldFggLSBib25lLndvcmxkWCkgKiBNYXRoVXRpbHMuc2lnbnVtKGJvbmUuc2tlbGV0b24uc2NhbGVYKTtcblx0XHRcdFx0dHkgPSAodGFyZ2V0WSAtIGJvbmUud29ybGRZKSAqIE1hdGhVdGlscy5zaWdudW0oYm9uZS5za2VsZXRvbi5zY2FsZVkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOlxuXHRcdFx0XHRsZXQgcyA9IE1hdGguYWJzKHBhICogcGQgLSBwYiAqIHBjKSAvIE1hdGgubWF4KDAuMDAwMSwgcGEgKiBwYSArIHBjICogcGMpO1xuXHRcdFx0XHRsZXQgc2EgPSBwYSAvIGJvbmUuc2tlbGV0b24uc2NhbGVYO1xuXHRcdFx0XHRsZXQgc2MgPSBwYyAvIGJvbmUuc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRwYiA9IC1zYyAqIHMgKiBib25lLnNrZWxldG9uLnNjYWxlWDtcblx0XHRcdFx0cGQgPSBzYSAqIHMgKiBib25lLnNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0cm90YXRpb25JSyArPSBNYXRoLmF0YW4yKHNjLCBzYSkgKiBNYXRoVXRpbHMucmFkRGVnO1xuXHRcdFx0Ly8gRmFsbCB0aHJvdWdoXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRsZXQgeCA9IHRhcmdldFggLSBwLndvcmxkWCwgeSA9IHRhcmdldFkgLSBwLndvcmxkWTtcblx0XHRcdFx0bGV0IGQgPSBwYSAqIHBkIC0gcGIgKiBwYztcblx0XHRcdFx0aWYgKE1hdGguYWJzKGQpIDw9IDAuMDAwMSkge1xuXHRcdFx0XHRcdHR4ID0gMDtcblx0XHRcdFx0XHR0eSA9IDA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHggPSAoeCAqIHBkIC0geSAqIHBiKSAvIGQgLSBib25lLmF4O1xuXHRcdFx0XHRcdHR5ID0gKHkgKiBwYSAtIHggKiBwYykgLyBkIC0gYm9uZS5heTtcblx0XHRcdFx0fVxuXHRcdH1cblx0XHRyb3RhdGlvbklLICs9IE1hdGguYXRhbjIodHksIHR4KSAqIE1hdGhVdGlscy5yYWREZWc7XG5cdFx0aWYgKGJvbmUuYXNjYWxlWCA8IDApIHJvdGF0aW9uSUsgKz0gMTgwO1xuXHRcdGlmIChyb3RhdGlvbklLID4gMTgwKVxuXHRcdFx0cm90YXRpb25JSyAtPSAzNjA7XG5cdFx0ZWxzZSBpZiAocm90YXRpb25JSyA8IC0xODApXG5cdFx0XHRyb3RhdGlvbklLICs9IDM2MDtcblx0XHRsZXQgc3ggPSBib25lLmFzY2FsZVgsIHN5ID0gYm9uZS5hc2NhbGVZO1xuXHRcdGlmIChjb21wcmVzcyB8fCBzdHJldGNoKSB7XG5cdFx0XHRzd2l0Y2ggKGJvbmUuaW5oZXJpdCkge1xuXHRcdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGVPclJlZmxlY3Rpb246XG5cdFx0XHRcdFx0dHggPSB0YXJnZXRYIC0gYm9uZS53b3JsZFg7XG5cdFx0XHRcdFx0dHkgPSB0YXJnZXRZIC0gYm9uZS53b3JsZFk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBiID0gYm9uZS5kYXRhLmxlbmd0aCAqIHN4O1xuXHRcdFx0aWYgKGIgPiAwLjAwMDEpIHtcblx0XHRcdFx0Y29uc3QgZGQgPSB0eCAqIHR4ICsgdHkgKiB0eTtcblx0XHRcdFx0aWYgKChjb21wcmVzcyAmJiBkZCA8IGIgKiBiKSB8fCAoc3RyZXRjaCAmJiBkZCA+IGIgKiBiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHMgPSAoTWF0aC5zcXJ0KGRkKSAvIGIgLSAxKSAqIGFscGhhICsgMTtcblx0XHRcdFx0XHRzeCAqPSBzO1xuXHRcdFx0XHRcdGlmICh1bmlmb3JtKSBzeSAqPSBzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGJvbmUudXBkYXRlV29ybGRUcmFuc2Zvcm1XaXRoKGJvbmUuYXgsIGJvbmUuYXksIGJvbmUuYXJvdGF0aW9uICsgcm90YXRpb25JSyAqIGFscGhhLCBzeCwgc3ksIGJvbmUuYXNoZWFyWCxcblx0XHRcdGJvbmUuYXNoZWFyWSk7XG5cdH1cblxuXHQvKiogQXBwbGllcyAyIGJvbmUgSUsuIFRoZSB0YXJnZXQgaXMgc3BlY2lmaWVkIGluIHRoZSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS5cblx0ICogQHBhcmFtIGNoaWxkIEEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgdGhlIHBhcmVudCBib25lLiAqL1xuXHRhcHBseTIgKHBhcmVudDogQm9uZSwgY2hpbGQ6IEJvbmUsIHRhcmdldFg6IG51bWJlciwgdGFyZ2V0WTogbnVtYmVyLCBiZW5kRGlyOiBudW1iZXIsIHN0cmV0Y2g6IGJvb2xlYW4sIHVuaWZvcm06IGJvb2xlYW4sIHNvZnRuZXNzOiBudW1iZXIsIGFscGhhOiBudW1iZXIpIHtcblx0XHRpZiAocGFyZW50LmluaGVyaXQgIT0gSW5oZXJpdC5Ob3JtYWwgfHwgY2hpbGQuaW5oZXJpdCAhPSBJbmhlcml0Lk5vcm1hbCkgcmV0dXJuO1xuXHRcdGxldCBweCA9IHBhcmVudC5heCwgcHkgPSBwYXJlbnQuYXksIHBzeCA9IHBhcmVudC5hc2NhbGVYLCBwc3kgPSBwYXJlbnQuYXNjYWxlWSwgc3ggPSBwc3gsIHN5ID0gcHN5LCBjc3ggPSBjaGlsZC5hc2NhbGVYO1xuXHRcdGxldCBvczEgPSAwLCBvczIgPSAwLCBzMiA9IDA7XG5cdFx0aWYgKHBzeCA8IDApIHtcblx0XHRcdHBzeCA9IC1wc3g7XG5cdFx0XHRvczEgPSAxODA7XG5cdFx0XHRzMiA9IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvczEgPSAwO1xuXHRcdFx0czIgPSAxO1xuXHRcdH1cblx0XHRpZiAocHN5IDwgMCkge1xuXHRcdFx0cHN5ID0gLXBzeTtcblx0XHRcdHMyID0gLXMyO1xuXHRcdH1cblx0XHRpZiAoY3N4IDwgMCkge1xuXHRcdFx0Y3N4ID0gLWNzeDtcblx0XHRcdG9zMiA9IDE4MDtcblx0XHR9IGVsc2Vcblx0XHRcdG9zMiA9IDA7XG5cdFx0bGV0IGN4ID0gY2hpbGQuYXgsIGN5ID0gMCwgY3d4ID0gMCwgY3d5ID0gMCwgYSA9IHBhcmVudC5hLCBiID0gcGFyZW50LmIsIGMgPSBwYXJlbnQuYywgZCA9IHBhcmVudC5kO1xuXHRcdGxldCB1ID0gTWF0aC5hYnMocHN4IC0gcHN5KSA8PSAwLjAwMDE7XG5cdFx0aWYgKCF1IHx8IHN0cmV0Y2gpIHtcblx0XHRcdGN5ID0gMDtcblx0XHRcdGN3eCA9IGEgKiBjeCArIHBhcmVudC53b3JsZFg7XG5cdFx0XHRjd3kgPSBjICogY3ggKyBwYXJlbnQud29ybGRZO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjeSA9IGNoaWxkLmF5O1xuXHRcdFx0Y3d4ID0gYSAqIGN4ICsgYiAqIGN5ICsgcGFyZW50LndvcmxkWDtcblx0XHRcdGN3eSA9IGMgKiBjeCArIGQgKiBjeSArIHBhcmVudC53b3JsZFk7XG5cdFx0fVxuXHRcdGxldCBwcCA9IHBhcmVudC5wYXJlbnQ7XG5cdFx0aWYgKCFwcCkgdGhyb3cgbmV3IEVycm9yKFwiSUsgcGFyZW50IG11c3QgaXRzZWxmIGhhdmUgYSBwYXJlbnQuXCIpO1xuXHRcdGEgPSBwcC5hO1xuXHRcdGIgPSBwcC5iO1xuXHRcdGMgPSBwcC5jO1xuXHRcdGQgPSBwcC5kO1xuXHRcdGxldCBpZCA9IGEgKiBkIC0gYiAqIGMsIHggPSBjd3ggLSBwcC53b3JsZFgsIHkgPSBjd3kgLSBwcC53b3JsZFk7XG5cdFx0aWQgPSBNYXRoLmFicyhpZCkgPD0gMC4wMDAxID8gMCA6IDEgLyBpZDtcblx0XHRsZXQgZHggPSAoeCAqIGQgLSB5ICogYikgKiBpZCAtIHB4LCBkeSA9ICh5ICogYSAtIHggKiBjKSAqIGlkIC0gcHk7XG5cdFx0bGV0IGwxID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSwgbDIgPSBjaGlsZC5kYXRhLmxlbmd0aCAqIGNzeCwgYTEsIGEyO1xuXHRcdGlmIChsMSA8IDAuMDAwMSkge1xuXHRcdFx0dGhpcy5hcHBseTEocGFyZW50LCB0YXJnZXRYLCB0YXJnZXRZLCBmYWxzZSwgc3RyZXRjaCwgZmFsc2UsIGFscGhhKTtcblx0XHRcdGNoaWxkLnVwZGF0ZVdvcmxkVHJhbnNmb3JtV2l0aChjeCwgY3ksIDAsIGNoaWxkLmFzY2FsZVgsIGNoaWxkLmFzY2FsZVksIGNoaWxkLmFzaGVhclgsIGNoaWxkLmFzaGVhclkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR4ID0gdGFyZ2V0WCAtIHBwLndvcmxkWDtcblx0XHR5ID0gdGFyZ2V0WSAtIHBwLndvcmxkWTtcblx0XHRsZXQgdHggPSAoeCAqIGQgLSB5ICogYikgKiBpZCAtIHB4LCB0eSA9ICh5ICogYSAtIHggKiBjKSAqIGlkIC0gcHk7XG5cdFx0bGV0IGRkID0gdHggKiB0eCArIHR5ICogdHk7XG5cdFx0aWYgKHNvZnRuZXNzICE9IDApIHtcblx0XHRcdHNvZnRuZXNzICo9IHBzeCAqIChjc3ggKyAxKSAqIDAuNTtcblx0XHRcdGxldCB0ZCA9IE1hdGguc3FydChkZCksIHNkID0gdGQgLSBsMSAtIGwyICogcHN4ICsgc29mdG5lc3M7XG5cdFx0XHRpZiAoc2QgPiAwKSB7XG5cdFx0XHRcdGxldCBwID0gTWF0aC5taW4oMSwgc2QgLyAoc29mdG5lc3MgKiAyKSkgLSAxO1xuXHRcdFx0XHRwID0gKHNkIC0gc29mdG5lc3MgKiAoMSAtIHAgKiBwKSkgLyB0ZDtcblx0XHRcdFx0dHggLT0gcCAqIHR4O1xuXHRcdFx0XHR0eSAtPSBwICogdHk7XG5cdFx0XHRcdGRkID0gdHggKiB0eCArIHR5ICogdHk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG91dGVyOlxuXHRcdGlmICh1KSB7XG5cdFx0XHRsMiAqPSBwc3g7XG5cdFx0XHRsZXQgY29zID0gKGRkIC0gbDEgKiBsMSAtIGwyICogbDIpIC8gKDIgKiBsMSAqIGwyKTtcblx0XHRcdGlmIChjb3MgPCAtMSkge1xuXHRcdFx0XHRjb3MgPSAtMTtcblx0XHRcdFx0YTIgPSBNYXRoLlBJICogYmVuZERpcjtcblx0XHRcdH0gZWxzZSBpZiAoY29zID4gMSkge1xuXHRcdFx0XHRjb3MgPSAxO1xuXHRcdFx0XHRhMiA9IDA7XG5cdFx0XHRcdGlmIChzdHJldGNoKSB7XG5cdFx0XHRcdFx0YSA9IChNYXRoLnNxcnQoZGQpIC8gKGwxICsgbDIpIC0gMSkgKiBhbHBoYSArIDE7XG5cdFx0XHRcdFx0c3ggKj0gYTtcblx0XHRcdFx0XHRpZiAodW5pZm9ybSkgc3kgKj0gYTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGEyID0gTWF0aC5hY29zKGNvcykgKiBiZW5kRGlyO1xuXHRcdFx0YSA9IGwxICsgbDIgKiBjb3M7XG5cdFx0XHRiID0gbDIgKiBNYXRoLnNpbihhMik7XG5cdFx0XHRhMSA9IE1hdGguYXRhbjIodHkgKiBhIC0gdHggKiBiLCB0eCAqIGEgKyB0eSAqIGIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhID0gcHN4ICogbDI7XG5cdFx0XHRiID0gcHN5ICogbDI7XG5cdFx0XHRsZXQgYWEgPSBhICogYSwgYmIgPSBiICogYiwgdGEgPSBNYXRoLmF0YW4yKHR5LCB0eCk7XG5cdFx0XHRjID0gYmIgKiBsMSAqIGwxICsgYWEgKiBkZCAtIGFhICogYmI7XG5cdFx0XHRsZXQgYzEgPSAtMiAqIGJiICogbDEsIGMyID0gYmIgLSBhYTtcblx0XHRcdGQgPSBjMSAqIGMxIC0gNCAqIGMyICogYztcblx0XHRcdGlmIChkID49IDApIHtcblx0XHRcdFx0bGV0IHEgPSBNYXRoLnNxcnQoZCk7XG5cdFx0XHRcdGlmIChjMSA8IDApIHEgPSAtcTtcblx0XHRcdFx0cSA9IC0oYzEgKyBxKSAqIDAuNTtcblx0XHRcdFx0bGV0IHIwID0gcSAvIGMyLCByMSA9IGMgLyBxO1xuXHRcdFx0XHRsZXQgciA9IE1hdGguYWJzKHIwKSA8IE1hdGguYWJzKHIxKSA/IHIwIDogcjE7XG5cdFx0XHRcdHIwID0gZGQgLSByICogcjtcblx0XHRcdFx0aWYgKHIwID49IDApIHtcblx0XHRcdFx0XHR5ID0gTWF0aC5zcXJ0KHIwKSAqIGJlbmREaXI7XG5cdFx0XHRcdFx0YTEgPSB0YSAtIE1hdGguYXRhbjIoeSwgcik7XG5cdFx0XHRcdFx0YTIgPSBNYXRoLmF0YW4yKHkgLyBwc3ksIChyIC0gbDEpIC8gcHN4KTtcblx0XHRcdFx0XHRicmVhayBvdXRlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IG1pbkFuZ2xlID0gTWF0aFV0aWxzLlBJLCBtaW5YID0gbDEgLSBhLCBtaW5EaXN0ID0gbWluWCAqIG1pblgsIG1pblkgPSAwO1xuXHRcdFx0bGV0IG1heEFuZ2xlID0gMCwgbWF4WCA9IGwxICsgYSwgbWF4RGlzdCA9IG1heFggKiBtYXhYLCBtYXhZID0gMDtcblx0XHRcdGMgPSAtYSAqIGwxIC8gKGFhIC0gYmIpO1xuXHRcdFx0aWYgKGMgPj0gLTEgJiYgYyA8PSAxKSB7XG5cdFx0XHRcdGMgPSBNYXRoLmFjb3MoYyk7XG5cdFx0XHRcdHggPSBhICogTWF0aC5jb3MoYykgKyBsMTtcblx0XHRcdFx0eSA9IGIgKiBNYXRoLnNpbihjKTtcblx0XHRcdFx0ZCA9IHggKiB4ICsgeSAqIHk7XG5cdFx0XHRcdGlmIChkIDwgbWluRGlzdCkge1xuXHRcdFx0XHRcdG1pbkFuZ2xlID0gYztcblx0XHRcdFx0XHRtaW5EaXN0ID0gZDtcblx0XHRcdFx0XHRtaW5YID0geDtcblx0XHRcdFx0XHRtaW5ZID0geTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZCA+IG1heERpc3QpIHtcblx0XHRcdFx0XHRtYXhBbmdsZSA9IGM7XG5cdFx0XHRcdFx0bWF4RGlzdCA9IGQ7XG5cdFx0XHRcdFx0bWF4WCA9IHg7XG5cdFx0XHRcdFx0bWF4WSA9IHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkZCA8PSAobWluRGlzdCArIG1heERpc3QpICogMC41KSB7XG5cdFx0XHRcdGExID0gdGEgLSBNYXRoLmF0YW4yKG1pblkgKiBiZW5kRGlyLCBtaW5YKTtcblx0XHRcdFx0YTIgPSBtaW5BbmdsZSAqIGJlbmREaXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhMSA9IHRhIC0gTWF0aC5hdGFuMihtYXhZICogYmVuZERpciwgbWF4WCk7XG5cdFx0XHRcdGEyID0gbWF4QW5nbGUgKiBiZW5kRGlyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgb3MgPSBNYXRoLmF0YW4yKGN5LCBjeCkgKiBzMjtcblx0XHRsZXQgcm90YXRpb24gPSBwYXJlbnQuYXJvdGF0aW9uO1xuXHRcdGExID0gKGExIC0gb3MpICogTWF0aFV0aWxzLnJhZERlZyArIG9zMSAtIHJvdGF0aW9uO1xuXHRcdGlmIChhMSA+IDE4MClcblx0XHRcdGExIC09IDM2MDtcblx0XHRlbHNlIGlmIChhMSA8IC0xODApIC8vXG5cdFx0XHRhMSArPSAzNjA7XG5cdFx0cGFyZW50LnVwZGF0ZVdvcmxkVHJhbnNmb3JtV2l0aChweCwgcHksIHJvdGF0aW9uICsgYTEgKiBhbHBoYSwgc3gsIHN5LCAwLCAwKTtcblx0XHRyb3RhdGlvbiA9IGNoaWxkLmFyb3RhdGlvbjtcblx0XHRhMiA9ICgoYTIgKyBvcykgKiBNYXRoVXRpbHMucmFkRGVnIC0gY2hpbGQuYXNoZWFyWCkgKiBzMiArIG9zMiAtIHJvdGF0aW9uO1xuXHRcdGlmIChhMiA+IDE4MClcblx0XHRcdGEyIC09IDM2MDtcblx0XHRlbHNlIGlmIChhMiA8IC0xODApIC8vXG5cdFx0XHRhMiArPSAzNjA7XG5cdFx0Y2hpbGQudXBkYXRlV29ybGRUcmFuc2Zvcm1XaXRoKGN4LCBjeSwgcm90YXRpb24gKyBhMiAqIGFscGhhLCBjaGlsZC5hc2NhbGVYLCBjaGlsZC5hc2NhbGVZLCBjaGlsZC5hc2hlYXJYLCBjaGlsZC5hc2hlYXJZKTtcblx0fVxufVxuIl19
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWtDb25zdHJhaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0lrQ29uc3RyYWludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUF5QixVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDOzs7cUdBR3FHO0FBQ3JHLE1BQU0sT0FBTyxZQUFhLFNBQVEsVUFBNEQ7SUFDN0Ysb0VBQW9FO0lBQzNELEtBQUssQ0FBa0I7SUFFaEMsc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBTztJQUViLFlBQWEsSUFBc0IsRUFBRSxRQUFrQjtRQUN0RCxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQWdCLENBQUM7UUFDOUIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxD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LEdBQUcsR0FBRztZQUNYLEVBQUUsSUFBSSxHQUFHLENBQUM7YUFDTixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3JCLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDWCxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDNUIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgQm9uZVBvc2UgfSBmcm9tIFwiLi9Cb25lUG9zZS5qc1wiO1xuaW1wb3J0IHsgQ29uc3RyYWludCB9IGZyb20gXCIuL0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB7IHR5cGUgSWtDb25zdHJhaW50RGF0YSwgU2NhbGVZTW9kZSB9IGZyb20gXCIuL0lrQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IElrQ29uc3RyYWludFBvc2UgfSBmcm9tIFwiLi9Ja0NvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzaWNzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBBZGp1c3RzIHRoZSBsb2NhbCByb3RhdGlvbiBvZiAxIG9yIDIgY29uc3RyYWluZWQgYm9uZXMgc28gdGhlIHdvcmxkIHBvc2l0aW9uIG9mIHRoZSB0aXAgb2YgdGhlIGxhc3QgYm9uZSBpcyBhcyBjbG9zZSB0byB0aGVcbiAqIHRhcmdldCBib25lIGFzIHBvc3NpYmxlLlxuICpcbiAqIFNlZSBbSUsgY29uc3RyYWludHNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1pay1jb25zdHJhaW50cykgaW4gdGhlIFNwaW5lIFVzZXIgR3VpZGUuICovXG5leHBvcnQgY2xhc3MgSWtDb25zdHJhaW50IGV4dGVuZHMgQ29uc3RyYWludDxJa0NvbnN0cmFpbnQsIElrQ29uc3RyYWludERhdGEsIElrQ29uc3RyYWludFBvc2U+IHtcblx0LyoqIFRoZSAxIG9yIDIgYm9uZXMgdGhhdCB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoaXMgSUsgY29uc3RyYWludC4gKi9cblx0cmVhZG9ubHkgYm9uZXM6IEFycmF5PEJvbmVQb3NlPjtcblxuXHQvKiogVGhlIGJvbmUgdGhhdCBpcyB0aGUgSUsgdGFyZ2V0LiAqL1xuXHR0YXJnZXQ6IEJvbmU7XG5cblx0Y29uc3RydWN0b3IgKGRhdGE6IElrQ29uc3RyYWludERhdGEsIHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdHN1cGVyKGRhdGEsIG5ldyBJa0NvbnN0cmFpbnRQb3NlKCksIG5ldyBJa0NvbnN0cmFpbnRQb3NlKCkpO1xuXHRcdGlmICghc2tlbGV0b24pIHRocm93IG5ldyBFcnJvcihcInNrZWxldG9uIGNhbm5vdCBiZSBudWxsLlwiKTtcblxuXHRcdHRoaXMuYm9uZXMgPSBbXSBhcyBCb25lUG9zZVtdO1xuXHRcdGZvciAoY29uc3QgYm9uZURhdGEgb2YgZGF0YS5ib25lcylcblx0XHRcdHRoaXMuYm9uZXMucHVzaChza2VsZXRvbi5ib25lc1tib25lRGF0YS5pbmRleF0uY29uc3RyYWluZWRQb3NlKTtcblxuXHRcdHRoaXMudGFyZ2V0ID0gc2tlbGV0b24uYm9uZXNbZGF0YS50YXJnZXQuaW5kZXhdO1xuXHR9XG5cblx0Y29weSAoc2tlbGV0b246IFNrZWxldG9uKTogSWtDb25zdHJhaW50IHtcblx0XHR2YXIgY29weSA9IG5ldyBJa0NvbnN0cmFpbnQodGhpcy5kYXRhLCBza2VsZXRvbik7XG5cdFx0Y29weS5wb3NlLnNldCh0aGlzLnBvc2UpO1xuXHRcdHJldHVybiBjb3B5O1xuXHR9XG5cblx0dXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpIHtcblx0XHRjb25zdCBwID0gdGhpcy5hcHBsaWVkUG9zZTtcblx0XHRpZiAocC5taXggPT09IDApIHJldHVybjtcblx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldC5hcHBsaWVkUG9zZTtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0c3dpdGNoIChib25lcy5sZW5ndGgpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0SWtDb25zdHJhaW50LmFwcGx5KHNrZWxldG9uLCBib25lc1swXSwgdGFyZ2V0LndvcmxkWCwgdGFyZ2V0LndvcmxkWSwgcC5jb21wcmVzcywgcC5zdHJldGNoLCB0aGlzLmRhdGEuc2NhbGVZTW9kZSwgcC5taXgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0SWtDb25zdHJhaW50LmFwcGx5KHNrZWxldG9uLCBib25lc1swXSwgYm9uZXNbMV0sIHRhcmdldC53b3JsZFgsIHRhcmdldC53b3JsZFksIHAuYmVuZERpcmVjdGlvbiwgcC5zdHJldGNoLCB0aGlzLmRhdGEuc2NhbGVZTW9kZSxcblx0XHRcdFx0XHRwLnNvZnRuZXNzLCBwLm1peCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHNvcnQgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdHNrZWxldG9uLnNvcnRCb25lKHRoaXMudGFyZ2V0KTtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmVzWzBdLmJvbmU7XG5cdFx0c2tlbGV0b24uc29ydEJvbmUocGFyZW50KTtcblx0XHRza2VsZXRvbi5fdXBkYXRlQ2FjaGUucHVzaCh0aGlzKTtcblx0XHRwYXJlbnQuc29ydGVkID0gZmFsc2U7XG5cdFx0c2tlbGV0b24uc29ydFJlc2V0KHBhcmVudC5jaGlsZHJlbik7XG5cdFx0c2tlbGV0b24uY29uc3RyYWluZWQocGFyZW50KTtcblx0XHRpZiAodGhpcy5ib25lcy5sZW5ndGggPiAxKSBza2VsZXRvbi5jb25zdHJhaW5lZCh0aGlzLmJvbmVzWzFdLmJvbmUpO1xuXHR9XG5cblx0aXNTb3VyY2VBY3RpdmUgKCkge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldC5hY3RpdmU7XG5cdH1cblxuXHQvKiogQXBwbGllcyAxIGJvbmUgSUsuIFRoZSB0YXJnZXQgaXMgc3BlY2lmaWVkIGluIHRoZSB3b3JsZCBjb29yZGluYXRlIHN5c3RlbS4gKi9cblx0cHVibGljIHN0YXRpYyBhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBib25lOiBCb25lUG9zZSwgdGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIGNvbXByZXNzOiBib29sZWFuLCBzdHJldGNoOiBib29sZWFuLCBzY2FsZVlNb2RlOiBTY2FsZVlNb2RlLCBtaXg6IG51bWJlcik6IHZvaWQ7XG5cblx0LyoqIEFwcGxpZXMgMiBib25lIElLLiBUaGUgdGFyZ2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0uXG5cdCAqIEBwYXJhbSBjaGlsZCBBIGRpcmVjdCBkZXNjZW5kYW50IG9mIHRoZSBwYXJlbnQgYm9uZS4gKi9cblx0cHVibGljIHN0YXRpYyBhcHBseSAoc2tlbGV0b246IFNrZWxldG9uLCBwYXJlbnQ6IEJvbmVQb3NlLCBjaGlsZDogQm9uZVBvc2UsIHRhcmdldFg6IG51bWJlciwgdGFyZ2V0WTogbnVtYmVyLCBiZW5kRGlyOiBudW1iZXIsIHN0cmV0Y2g6IGJvb2xlYW4sIHNjYWxlWU1vZGU6IFNjYWxlWU1vZGUsIHNvZnRuZXNzOiBudW1iZXIsIG1peDogbnVtYmVyKTogdm9pZDtcblxuXHRwdWJsaWMgc3RhdGljIGFwcGx5IChza2VsZXRvbjogU2tlbGV0b24sIGJvbmVPclBhcmVudDogQm9uZVBvc2UsIHRhcmdldFhvckNoaWxkOiBudW1iZXIgfCBCb25lUG9zZSwgdGFyZ2V0WU9yVGFyZ2V0WDogbnVtYmVyLCBjb21wcmVzc09yVGFyZ2V0WTogYm9vbGVhbiB8IG51bWJlcixcblx0XHRzdHJldGNoT3JCZW5kRGlyOiBib29sZWFuIHwgbnVtYmVyLCBzY2FsZVlNb2RlT3JTdHJldGNoOiBTY2FsZVlNb2RlIHwgYm9vbGVhbiwgbWl4T3JTY2FsZVlNb2RlOiBudW1iZXIgfCBib29sZWFuLCBzb2Z0bmVzcz86IG51bWJlciwgbWl4PzogbnVtYmVyKSB7XG5cblx0XHRpZiAodHlwZW9mIHRhcmdldFhvckNoaWxkID09PSBcIm51bWJlclwiKVxuXHRcdFx0SWtDb25zdHJhaW50LmFwcGx5MShza2VsZXRvbiwgYm9uZU9yUGFyZW50LCB0YXJnZXRYb3JDaGlsZCwgdGFyZ2V0WU9yVGFyZ2V0WCwgY29tcHJlc3NPclRhcmdldFkgYXMgYm9vbGVhbiwgc3RyZXRjaE9yQmVuZERpciBhcyBib29sZWFuLCBzY2FsZVlNb2RlT3JTdHJldGNoIGFzIFNjYWxlWU1vZGUsIG1peE9yU2NhbGVZTW9kZSBhcyBudW1iZXIpO1xuXHRcdGVsc2Vcblx0XHRcdElrQ29uc3RyYWludC5hcHBseTIoc2tlbGV0b24sIGJvbmVPclBhcmVudCwgdGFyZ2V0WG9yQ2hpbGQgYXMgQm9uZVBvc2UsIHRhcmdldFlPclRhcmdldFgsIGNvbXByZXNzT3JUYXJnZXRZIGFzIG51bWJlciwgc3RyZXRjaE9yQmVuZERpciBhcyBudW1iZXIsXG5cdFx0XHRcdHNjYWxlWU1vZGVPclN0cmV0Y2ggYXMgYm9vbGVhbiwgbWl4T3JTY2FsZVlNb2RlIGFzIFNjYWxlWU1vZGUsIHNvZnRuZXNzIGFzIG51bWJlciwgbWl4IGFzIG51bWJlcik7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBhcHBseTEgKHNrZWxldG9uOiBTa2VsZXRvbiwgYm9uZTogQm9uZVBvc2UsIHRhcmdldFg6IG51bWJlciwgdGFyZ2V0WTogbnVtYmVyLCBjb21wcmVzczogYm9vbGVhbiwgc3RyZXRjaDogYm9vbGVhbiwgc2NhbGVZTW9kZTogU2NhbGVZTW9kZSwgbWl4OiBudW1iZXIpIHtcblx0XHRib25lLm1vZGlmeUxvY2FsKHNrZWxldG9uKTtcblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTm9uTnVsbEFzc2VydGlvbjogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRjb25zdCBwID0gYm9uZS5ib25lLnBhcmVudCEuYXBwbGllZFBvc2U7XG5cblx0XHRsZXQgcGEgPSBwLmEsIHBiID0gcC5iLCBwYyA9IHAuYywgcGQgPSBwLmQ7XG5cdFx0bGV0IHJvdGF0aW9uSUsgPSAtYm9uZS5zaGVhclggLSBib25lLnJvdGF0aW9uLCB0eCA9IDAsIHR5ID0gMDtcblxuXHRcdHN3aXRjaCAoYm9uZS5pbmhlcml0KSB7XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOlxuXHRcdFx0XHR0eCA9ICh0YXJnZXRYIC0gYm9uZS53b3JsZFgpICogTWF0aFV0aWxzLnNpZ251bShza2VsZXRvbi5zY2FsZVgpO1xuXHRcdFx0XHR0eSA9ICh0YXJnZXRZIC0gYm9uZS53b3JsZFkpICogTWF0aFV0aWxzLnNpZ251bShza2VsZXRvbi5zY2FsZVkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHMgPSBNYXRoLmFicyhwYSAqIHBkIC0gcGIgKiBwYykgLyBNYXRoLm1heCgwLjAwMDEsIHBhICogcGEgKyBwYyAqIHBjKTtcblx0XHRcdFx0Y29uc3Qgc2EgPSBwYSAvIHNrZWxldG9uLnNjYWxlWDtcblx0XHRcdFx0Y29uc3Qgc2MgPSBwYyAvIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0cGIgPSAtc2MgKiBzICogc2tlbGV0b24uc2NhbGVYO1xuXHRcdFx0XHRwZCA9IHNhICogcyAqIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0cm90YXRpb25JSyArPSBNYXRoVXRpbHMuYXRhbjJEZWcoc2MsIHNhKTtcblx0XHRcdH1cblx0XHRcdC8vIEZhbGwgdGhyb3VnaFxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRjb25zdCB4ID0gdGFyZ2V0WCAtIHAud29ybGRYLCB5ID0gdGFyZ2V0WSAtIHAud29ybGRZO1xuXHRcdFx0XHRjb25zdCBkID0gcGEgKiBwZCAtIHBiICogcGM7XG5cdFx0XHRcdGlmIChNYXRoLmFicyhkKSA8PSAwLjAwMDEpIHtcblx0XHRcdFx0XHR0eCA9IDA7XG5cdFx0XHRcdFx0dHkgPSAwO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHR4ID0gKHggKiBwZCAtIHkgKiBwYikgLyBkIC0gYm9uZS54O1xuXHRcdFx0XHRcdHR5ID0gKHkgKiBwYSAtIHggKiBwYykgLyBkIC0gYm9uZS55O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJvdGF0aW9uSUsgKz0gTWF0aFV0aWxzLmF0YW4yRGVnKHR5LCB0eCk7XG5cdFx0aWYgKGJvbmUuc2NhbGVYIDwgMCkgcm90YXRpb25JSyArPSAxODA7XG5cdFx0aWYgKHJvdGF0aW9uSUsgPiAxODApXG5cdFx0XHRyb3RhdGlvbklLIC09IDM2MDtcblx0XHRlbHNlIGlmIChyb3RhdGlvbklLIDwgLTE4MClcblx0XHRcdHJvdGF0aW9uSUsgKz0gMzYwO1xuXHRcdGJvbmUucm90YXRpb24gKz0gcm90YXRpb25JSyAqIG1peDtcblx0XHRpZiAoY29tcHJlc3MgfHwgc3RyZXRjaCkge1xuXHRcdFx0c3dpdGNoIChib25lLmluaGVyaXQpIHtcblx0XHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGU6XG5cdFx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlT3JSZWZsZWN0aW9uOlxuXHRcdFx0XHRcdHR4ID0gdGFyZ2V0WCAtIGJvbmUud29ybGRYO1xuXHRcdFx0XHRcdHR5ID0gdGFyZ2V0WSAtIGJvbmUud29ybGRZO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYiA9IGJvbmUuYm9uZS5kYXRhLmxlbmd0aCAqIGJvbmUuc2NhbGVYO1xuXHRcdFx0aWYgKGIgPiAwLjAwMDEpIHtcblx0XHRcdFx0Y29uc3QgZGQgPSB0eCAqIHR4ICsgdHkgKiB0eTtcblx0XHRcdFx0aWYgKChjb21wcmVzcyAmJiBkZCA8IGIgKiBiKSB8fCAoc3RyZXRjaCAmJiBkZCA+IGIgKiBiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHMgPSAoTWF0aC5zcXJ0KGRkKSAvIGIgLSAxKSAqIG1peCArIDE7XG5cdFx0XHRcdFx0Ym9uZS5zY2FsZVggKj0gcztcblx0XHRcdFx0XHRzd2l0Y2ggKHNjYWxlWU1vZGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgU2NhbGVZTW9kZS5Vbmlmb3JtOiBib25lLnNjYWxlWSAqPSBzOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgU2NhbGVZTW9kZS5Wb2x1bWU6IGJvbmUuc2NhbGVZIC89IHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIEFwcGxpZXMgMiBib25lIElLLiBUaGUgdGFyZ2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgd29ybGQgY29vcmRpbmF0ZSBzeXN0ZW0uXG5cdCAqIEBwYXJhbSBjaGlsZCBBIGRpcmVjdCBkZXNjZW5kYW50IG9mIHRoZSBwYXJlbnQgYm9uZS4gKi9cblx0cHJpdmF0ZSBzdGF0aWMgYXBwbHkyIChza2VsZXRvbjogU2tlbGV0b24sIHBhcmVudDogQm9uZVBvc2UsIGNoaWxkOiBCb25lUG9zZSwgdGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIGJlbmREaXI6IG51bWJlciwgc3RyZXRjaDogYm9vbGVhbiwgc2NhbGVZTW9kZTogU2NhbGVZTW9kZSwgc29mdG5lc3M6IG51bWJlciwgbWl4OiBudW1iZXIpIHtcblx0XHRpZiAocGFyZW50LmluaGVyaXQgIT09IEluaGVyaXQuTm9ybWFsIHx8IGNoaWxkLmluaGVyaXQgIT09IEluaGVyaXQuTm9ybWFsKSByZXR1cm47XG5cdFx0cGFyZW50Lm1vZGlmeUxvY2FsKHNrZWxldG9uKTtcblx0XHRjaGlsZC5tb2RpZnlMb2NhbChza2VsZXRvbik7XG5cdFx0bGV0IHB4ID0gcGFyZW50LngsIHB5ID0gcGFyZW50LnksIHBzeCA9IHBhcmVudC5zY2FsZVgsIHBzeSA9IHBhcmVudC5zY2FsZVksIGNzeCA9IGNoaWxkLnNjYWxlWDtcblx0XHRsZXQgb3MxID0gMCwgb3MyID0gMCwgczIgPSAwO1xuXHRcdGlmIChwc3ggPCAwKSB7XG5cdFx0XHRwc3ggPSAtcHN4O1xuXHRcdFx0b3MxID0gMTgwO1xuXHRcdFx0czIgPSAtMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3MxID0gMDtcblx0XHRcdHMyID0gMTtcblx0XHR9XG5cdFx0aWYgKHBzeSA8IDApIHtcblx0XHRcdHBzeSA9IC1wc3k7XG5cdFx0XHRzMiA9IC1zMjtcblx0XHR9XG5cdFx0aWYgKGNzeCA8IDApIHtcblx0XHRcdGNzeCA9IC1jc3g7XG5cdFx0XHRvczIgPSAxODA7XG5cdFx0fSBlbHNlXG5cdFx0XHRvczIgPSAwO1xuXHRcdGxldCBjd3ggPSAwLCBjd3kgPSAwLCBhID0gcGFyZW50LmEsIGIgPSBwYXJlbnQuYiwgYyA9IHBhcmVudC5jLCBkID0gcGFyZW50LmQ7XG5cdFx0Y29uc3QgdSA9IE1hdGguYWJzKHBzeCAtIHBzeSkgPD0gMC4wMDAxO1xuXHRcdGlmICghdSB8fCBzdHJldGNoKSB7XG5cdFx0XHRjaGlsZC55ID0gMDtcblx0XHRcdGN3eCA9IGEgKiBjaGlsZC54ICsgcGFyZW50LndvcmxkWDtcblx0XHRcdGN3eSA9IGMgKiBjaGlsZC54ICsgcGFyZW50LndvcmxkWTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3d4ID0gYSAqIGNoaWxkLnggKyBiICogY2hpbGQueSArIHBhcmVudC53b3JsZFg7XG5cdFx0XHRjd3kgPSBjICogY2hpbGQueCArIGQgKiBjaGlsZC55ICsgcGFyZW50LndvcmxkWTtcblx0XHR9XG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3R5bGUvbm9Ob25OdWxsQXNzZXJ0aW9uOiByZWZlcmVuY2UgcnVudGltZVxuXHRcdGNvbnN0IHBwID0gcGFyZW50LmJvbmUucGFyZW50IS5hcHBsaWVkUG9zZTtcblx0XHRhID0gcHAuYTtcblx0XHRiID0gcHAuYjtcblx0XHRjID0gcHAuYztcblx0XHRkID0gcHAuZDtcblx0XHRsZXQgaWQgPSBhICogZCAtIGIgKiBjLCB4ID0gY3d4IC0gcHAud29ybGRYLCB5ID0gY3d5IC0gcHAud29ybGRZO1xuXHRcdGlkID0gTWF0aC5hYnMoaWQpIDw9IDAuMDAwMSA/IDAgOiAxIC8gaWQ7XG5cdFx0Y29uc3QgZHggPSAoeCAqIGQgLSB5ICogYikgKiBpZCAtIHB4LCBkeSA9ICh5ICogYSAtIHggKiBjKSAqIGlkIC0gcHk7XG5cdFx0bGV0IGwxID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSwgbDIgPSBjaGlsZC5ib25lLmRhdGEubGVuZ3RoICogY3N4LCBhMTogbnVtYmVyLCBhMjogbnVtYmVyO1xuXHRcdGlmIChsMSA8IDAuMDAwMSkge1xuXHRcdFx0SWtDb25zdHJhaW50LmFwcGx5KHNrZWxldG9uLCBwYXJlbnQsIHRhcmdldFgsIHRhcmdldFksIGZhbHNlLCBzdHJldGNoLCBTY2FsZVlNb2RlLk5vbmUsIG1peCk7XG5cdFx0XHRjaGlsZC5yb3RhdGlvbiA9IDA7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHggPSB0YXJnZXRYIC0gcHAud29ybGRYO1xuXHRcdHkgPSB0YXJnZXRZIC0gcHAud29ybGRZO1xuXHRcdGxldCB0eCA9ICh4ICogZCAtIHkgKiBiKSAqIGlkIC0gcHgsIHR5ID0gKHkgKiBhIC0geCAqIGMpICogaWQgLSBweTtcblx0XHRsZXQgZGQgPSB0eCAqIHR4ICsgdHkgKiB0eTtcblx0XHRpZiAoc29mdG5lc3MgIT09IDApIHtcblx0XHRcdHNvZnRuZXNzICo9IHBzeCAqIChjc3ggKyAxKSAqIDAuNTtcblx0XHRcdGNvbnN0IHRkID0gTWF0aC5zcXJ0KGRkKSwgc2QgPSB0ZCAtIGwxIC0gbDIgKiBwc3ggKyBzb2Z0bmVzcztcblx0XHRcdGlmIChzZCA+IDApIHtcblx0XHRcdFx0bGV0IHAgPSBNYXRoLm1pbigxLCBzZCAvIChzb2Z0bmVzcyAqIDIpKSAtIDE7XG5cdFx0XHRcdHAgPSAoc2QgLSBzb2Z0bmVzcyAqICgxIC0gcCAqIHApKSAvIHRkO1xuXHRcdFx0XHR0eCAtPSBwICogdHg7XG5cdFx0XHRcdHR5IC09IHAgKiB0eTtcblx0XHRcdFx0ZGQgPSB0eCAqIHR4ICsgdHkgKiB0eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbmZ1c2luZ0xhYmVsczogcmVmZXJlbmNlIHJ1bnRpbWVcblx0XHRvdXRlcjpcblx0XHRpZiAodSkge1xuXHRcdFx0bDIgKj0gcHN4O1xuXHRcdFx0bGV0IGNvcyA9IChkZCAtIGwxICogbDEgLSBsMiAqIGwyKSAvICgyICogbDEgKiBsMik7XG5cdFx0XHRpZiAoY29zIDwgLTEpIHtcblx0XHRcdFx0Y29zID0gLTE7XG5cdFx0XHRcdGEyID0gTWF0aC5QSSAqIGJlbmREaXI7XG5cdFx0XHR9IGVsc2UgaWYgKGNvcyA+IDEpIHtcblx0XHRcdFx0Y29zID0gMTtcblx0XHRcdFx0YTIgPSAwO1xuXHRcdFx0XHRpZiAoc3RyZXRjaCkge1xuXHRcdFx0XHRcdGEgPSAoTWF0aC5zcXJ0KGRkKSAvIChsMSArIGwyKSAtIDEpICogbWl4ICsgMTtcblx0XHRcdFx0XHRwYXJlbnQuc2NhbGVYICo9IGE7XG5cdFx0XHRcdFx0c3dpdGNoIChzY2FsZVlNb2RlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFNjYWxlWU1vZGUuVW5pZm9ybTogcGFyZW50LnNjYWxlWSAqPSBhOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgU2NhbGVZTW9kZS5Wb2x1bWU6IHBhcmVudC5zY2FsZVkgLz0gYTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRhMiA9IE1hdGguYWNvcyhjb3MpICogYmVuZERpcjtcblx0XHRcdGEgPSBsMSArIGwyICogY29zO1xuXHRcdFx0YiA9IGwyICogTWF0aC5zaW4oYTIpO1xuXHRcdFx0YTEgPSBNYXRoLmF0YW4yKHR5ICogYSAtIHR4ICogYiwgdHggKiBhICsgdHkgKiBiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YSA9IHBzeCAqIGwyO1xuXHRcdFx0YiA9IHBzeSAqIGwyO1xuXHRcdFx0Y29uc3QgYWEgPSBhICogYSwgYmIgPSBiICogYiwgdGEgPSBNYXRoLmF0YW4yKHR5LCB0eCk7XG5cdFx0XHRjID0gYmIgKiBsMSAqIGwxICsgYWEgKiBkZCAtIGFhICogYmI7XG5cdFx0XHRjb25zdCBjMSA9IC0yICogYmIgKiBsMSwgYzIgPSBiYiAtIGFhO1xuXHRcdFx0ZCA9IGMxICogYzEgLSA0ICogYzIgKiBjO1xuXHRcdFx0aWYgKGQgPj0gMCkge1xuXHRcdFx0XHRsZXQgcSA9IE1hdGguc3FydChkKTtcblx0XHRcdFx0aWYgKGMxIDwgMCkgcSA9IC1xO1xuXHRcdFx0XHRxID0gLShjMSArIHEpICogMC41O1xuXHRcdFx0XHRsZXQgcjAgPSBxIC8gYzIsIHIxID0gYyAvIHE7XG5cdFx0XHRcdGNvbnN0IHIgPSBNYXRoLmFicyhyMCkgPCBNYXRoLmFicyhyMSkgPyByMCA6IHIxO1xuXHRcdFx0XHRyMCA9IGRkIC0gciAqIHI7XG5cdFx0XHRcdGlmIChyMCA+PSAwKSB7XG5cdFx0XHRcdFx0eSA9IE1hdGguc3FydChyMCkgKiBiZW5kRGlyO1xuXHRcdFx0XHRcdGExID0gdGEgLSBNYXRoLmF0YW4yKHksIHIpO1xuXHRcdFx0XHRcdGEyID0gTWF0aC5hdGFuMih5IC8gcHN5LCAociAtIGwxKSAvIHBzeCk7XG5cdFx0XHRcdFx0YnJlYWsgb3V0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxldCBtaW5BbmdsZSA9IE1hdGhVdGlscy5QSSwgbWluWCA9IGwxIC0gYSwgbWluRGlzdCA9IG1pblggKiBtaW5YLCBtaW5ZID0gMDtcblx0XHRcdGxldCBtYXhBbmdsZSA9IDAsIG1heFggPSBsMSArIGEsIG1heERpc3QgPSBtYXhYICogbWF4WCwgbWF4WSA9IDA7XG5cdFx0XHRjID0gLWEgKiBsMSAvIChhYSAtIGJiKTtcblx0XHRcdGlmIChjID49IC0xICYmIGMgPD0gMSkge1xuXHRcdFx0XHRjID0gTWF0aC5hY29zKGMpO1xuXHRcdFx0XHR4ID0gYSAqIE1hdGguY29zKGMpICsgbDE7XG5cdFx0XHRcdHkgPSBiICogTWF0aC5zaW4oYyk7XG5cdFx0XHRcdGQgPSB4ICogeCArIHkgKiB5O1xuXHRcdFx0XHRpZiAoZCA8IG1pbkRpc3QpIHtcblx0XHRcdFx0XHRtaW5BbmdsZSA9IGM7XG5cdFx0XHRcdFx0bWluRGlzdCA9IGQ7XG5cdFx0XHRcdFx0bWluWCA9IHg7XG5cdFx0XHRcdFx0bWluWSA9IHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGQgPiBtYXhEaXN0KSB7XG5cdFx0XHRcdFx0bWF4QW5nbGUgPSBjO1xuXHRcdFx0XHRcdG1heERpc3QgPSBkO1xuXHRcdFx0XHRcdG1heFggPSB4O1xuXHRcdFx0XHRcdG1heFkgPSB5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGQgPD0gKG1pbkRpc3QgKyBtYXhEaXN0KSAqIDAuNSkge1xuXHRcdFx0XHRhMSA9IHRhIC0gTWF0aC5hdGFuMihtaW5ZICogYmVuZERpciwgbWluWCk7XG5cdFx0XHRcdGEyID0gbWluQW5nbGUgKiBiZW5kRGlyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YTEgPSB0YSAtIE1hdGguYXRhbjIobWF4WSAqIGJlbmREaXIsIG1heFgpO1xuXHRcdFx0XHRhMiA9IG1heEFuZ2xlICogYmVuZERpcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgb3MgPSBNYXRoLmF0YW4yKGNoaWxkLnksIGNoaWxkLngpICogczI7XG5cdFx0YTEgPSAoYTEgLSBvcykgKiBNYXRoVXRpbHMucmFkRGVnICsgb3MxIC0gcGFyZW50LnJvdGF0aW9uO1xuXHRcdGlmIChhMSA+IDE4MClcblx0XHRcdGExIC09IDM2MDtcblx0XHRlbHNlIGlmIChhMSA8IC0xODApIC8vXG5cdFx0XHRhMSArPSAzNjA7XG5cdFx0cGFyZW50LnJvdGF0aW9uICs9IGExICogbWl4O1xuXHRcdGEyID0gKChhMiArIG9zKSAqIE1hdGhVdGlscy5yYWREZWcgLSBjaGlsZC5zaGVhclgpICogczIgKyBvczIgLSBjaGlsZC5yb3RhdGlvbjtcblx0XHRpZiAoYTIgPiAxODApXG5cdFx0XHRhMiAtPSAzNjA7XG5cdFx0ZWxzZSBpZiAoYTIgPCAtMTgwKSAvL1xuXHRcdFx0YTIgKz0gMzYwO1xuXHRcdGNoaWxkLnJvdGF0aW9uICs9IGEyICogbWl4O1xuXHR9XG59XG4iXX0=
@@ -26,31 +26,36 @@
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 { BoneData } from "./BoneData.js";
29
+ import type { BoneData } from "./BoneData.js";
30
30
  import { ConstraintData } from "./ConstraintData.js";
31
+ import { IkConstraint } from "./IkConstraint.js";
32
+ import { IkConstraintPose } from "./IkConstraintPose.js";
33
+ import type { Skeleton } from "./Skeleton.js";
31
34
  /** Stores the setup pose for an {@link IkConstraint}.
32
- * <p>
35
+ *
33
36
  * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */
34
- export declare class IkConstraintData extends ConstraintData {
37
+ export declare class IkConstraintData extends ConstraintData<IkConstraint, IkConstraintPose> {
35
38
  /** The bones that are constrained by this IK constraint. */
36
39
  bones: BoneData[];
37
- /** The bone that is the IK target. */
38
40
  private _target;
41
+ /** The bone that is the IK target. */
39
42
  set target(boneData: BoneData);
40
43
  get target(): BoneData;
41
- /** Controls the bend direction of the IK bones, either 1 or -1. */
42
- bendDirection: number;
43
- /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */
44
- compress: boolean;
45
- /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained
46
- * and the parent bone has local nonuniform scale, stretch is not applied. */
47
- stretch: boolean;
48
- /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone
49
- * is scaled on both the X and Y axes. */
50
- uniform: boolean;
51
- /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */
52
- mix: number;
53
- /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */
54
- softness: number;
44
+ /** Determines how the {@link BonePose.scaleY} changes when {@link IkConstraintPose.compress} or
45
+ * {@link IkConstraintPose.stretch} set {@link BonePose.scaleX}. */
46
+ _scaleYMode: ScaleYMode;
47
+ set scaleYMode(scaleYMode: ScaleYMode);
48
+ get scaleYMode(): ScaleYMode;
55
49
  constructor(name: string);
50
+ create(skeleton: Skeleton): IkConstraint;
51
+ }
52
+ /** Determines how the {@link BonePose.scaleY} changes when {@link IkConstraintPose.compress} or
53
+ * {@link IkConstraintPose.stretch} set {@link BonePose.scaleX}. */
54
+ export declare enum ScaleYMode {
55
+ /** scaleY is not changed. */
56
+ None = 0,
57
+ /** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */
58
+ Uniform = 1,
59
+ /** scaleY is divided by the scaleX factor, preserving the bone's area. */
60
+ Volume = 2
56
61
  }