@esotericsoftware/spine-core 4.2.117 → 4.3.1

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 +132 -0
  16. package/dist/BonePose.js +456 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +16 -5
  20. package/dist/ConstraintData.js +15 -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 +23 -28
  28. package/dist/IkConstraint.js +122 -124
  29. package/dist/IkConstraintData.d.ts +14 -19
  30. package/dist/IkConstraintData.js +22 -23
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -23
  34. package/dist/PathConstraint.js +162 -139
  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 +114 -94
  43. package/dist/PhysicsConstraintData.d.ts +28 -13
  44. package/dist/PhysicsConstraintData.js +35 -13
  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 +655 -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 +895 -640
  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 +14 -3
  98. package/dist/Utils.js +80 -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 +7747 -6116
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7747 -6116
  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
package/dist/Skin.js CHANGED
@@ -30,25 +30,30 @@ import { MeshAttachment } from "./attachments/MeshAttachment.js";
30
30
  import { Color } from "./Utils.js";
31
31
  /** Stores an entry in the skin consisting of the slot index, name, and attachment **/
32
32
  export class SkinEntry {
33
- slotIndex;
34
- name;
33
+ /** The {@link Skeleton.slots} index. */
34
+ slotIndex = 0;
35
+ placeholder;
36
+ /** The attachment for this skin entry. */
35
37
  attachment;
36
- constructor(slotIndex = 0, name, attachment) {
38
+ constructor(slotIndex = 0, placeholder, attachment) {
37
39
  this.slotIndex = slotIndex;
38
- this.name = name;
40
+ this.placeholder = placeholder;
39
41
  this.attachment = attachment;
40
42
  }
41
43
  }
42
- /** Stores attachments by slot index and attachment name.
44
+ /** Stores attachments by slot index and placeholder name. Multiple {@link Skeleton} instances can use the same skins.
43
45
  *
44
- * See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and
46
+ * See {@link SkeletonData.defaultSkin}, {@link Skeleton.skin}, and
45
47
  * [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */
46
48
  export class Skin {
47
- /** The skin's name, which is unique across all skins in the skeleton. */
49
+ /** The skin's name, unique across all skins in the skeleton.
50
+ *
51
+ * See {@link SkeletonData.findSkin}. */
48
52
  name;
49
- attachments = new Array();
50
- bones = Array();
51
- constraints = new Array();
53
+ attachments = [];
54
+ bones = [];
55
+ // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types
56
+ constraints = [];
52
57
  /** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */
53
58
  color = new Color(0.99607843, 0.61960787, 0.30980393, 1); // fe9e4fff
54
59
  constructor(name) {
@@ -57,23 +62,23 @@ export class Skin {
57
62
  this.name = name;
58
63
  }
59
64
  /** Adds an attachment to the skin for the specified slot index and name. */
60
- setAttachment(slotIndex, name, attachment) {
65
+ setAttachment(slotIndex, placeholder, attachment) {
61
66
  if (!attachment)
62
67
  throw new Error("attachment cannot be null.");
63
- let attachments = this.attachments;
68
+ const attachments = this.attachments;
64
69
  if (slotIndex >= attachments.length)
65
70
  attachments.length = slotIndex + 1;
66
71
  if (!attachments[slotIndex])
67
72
  attachments[slotIndex] = {};
68
- attachments[slotIndex][name] = attachment;
73
+ attachments[slotIndex][placeholder] = attachment;
69
74
  }
70
75
  /** Adds all attachments, bones, and constraints from the specified skin to this skin. */
71
76
  addSkin(skin) {
72
77
  for (let i = 0; i < skin.bones.length; i++) {
73
- let bone = skin.bones[i];
78
+ const bone = skin.bones[i];
74
79
  let contained = false;
75
80
  for (let ii = 0; ii < this.bones.length; ii++) {
76
- if (this.bones[ii] == bone) {
81
+ if (this.bones[ii] === bone) {
77
82
  contained = true;
78
83
  break;
79
84
  }
@@ -82,10 +87,10 @@ export class Skin {
82
87
  this.bones.push(bone);
83
88
  }
84
89
  for (let i = 0; i < skin.constraints.length; i++) {
85
- let constraint = skin.constraints[i];
90
+ const constraint = skin.constraints[i];
86
91
  let contained = false;
87
92
  for (let ii = 0; ii < this.constraints.length; ii++) {
88
- if (this.constraints[ii] == constraint) {
93
+ if (this.constraints[ii] === constraint) {
89
94
  contained = true;
90
95
  break;
91
96
  }
@@ -93,20 +98,20 @@ export class Skin {
93
98
  if (!contained)
94
99
  this.constraints.push(constraint);
95
100
  }
96
- let attachments = skin.getAttachments();
101
+ const attachments = skin.getAttachments();
97
102
  for (let i = 0; i < attachments.length; i++) {
98
- var attachment = attachments[i];
99
- this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
103
+ const attachment = attachments[i];
104
+ this.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment);
100
105
  }
101
106
  }
102
107
  /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not
103
108
  * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */
104
109
  copySkin(skin) {
105
110
  for (let i = 0; i < skin.bones.length; i++) {
106
- let bone = skin.bones[i];
111
+ const bone = skin.bones[i];
107
112
  let contained = false;
108
113
  for (let ii = 0; ii < this.bones.length; ii++) {
109
- if (this.bones[ii] == bone) {
114
+ if (this.bones[ii] === bone) {
110
115
  contained = true;
111
116
  break;
112
117
  }
@@ -115,10 +120,10 @@ export class Skin {
115
120
  this.bones.push(bone);
116
121
  }
117
122
  for (let i = 0; i < skin.constraints.length; i++) {
118
- let constraint = skin.constraints[i];
123
+ const constraint = skin.constraints[i];
119
124
  let contained = false;
120
125
  for (let ii = 0; ii < this.constraints.length; ii++) {
121
- if (this.constraints[ii] == constraint) {
126
+ if (this.constraints[ii] === constraint) {
122
127
  contained = true;
123
128
  break;
124
129
  }
@@ -126,40 +131,40 @@ export class Skin {
126
131
  if (!contained)
127
132
  this.constraints.push(constraint);
128
133
  }
129
- let attachments = skin.getAttachments();
134
+ const attachments = skin.getAttachments();
130
135
  for (let i = 0; i < attachments.length; i++) {
131
- var attachment = attachments[i];
136
+ const attachment = attachments[i];
132
137
  if (!attachment.attachment)
133
138
  continue;
134
139
  if (attachment.attachment instanceof MeshAttachment) {
135
140
  attachment.attachment = attachment.attachment.newLinkedMesh();
136
- this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
141
+ this.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment);
137
142
  }
138
143
  else {
139
144
  attachment.attachment = attachment.attachment.copy();
140
- this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
145
+ this.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment);
141
146
  }
142
147
  }
143
148
  }
144
- /** Returns the attachment for the specified slot index and name, or null. */
145
- getAttachment(slotIndex, name) {
146
- let dictionary = this.attachments[slotIndex];
147
- return dictionary ? dictionary[name] : null;
149
+ /** Returns the attachment for the specified slot index and placeholder, or null. */
150
+ getAttachment(slotIndex, placeholder) {
151
+ const dictionary = this.attachments[slotIndex];
152
+ return dictionary ? dictionary[placeholder] : null;
148
153
  }
149
- /** Removes the attachment in the skin for the specified slot index and name, if any. */
150
- removeAttachment(slotIndex, name) {
151
- let dictionary = this.attachments[slotIndex];
154
+ /** Removes the attachment in the skin for the specified slot index and placeholder, if any. */
155
+ removeAttachment(slotIndex, placeholder) {
156
+ const dictionary = this.attachments[slotIndex];
152
157
  if (dictionary)
153
- delete dictionary[name];
158
+ delete dictionary[placeholder];
154
159
  }
155
160
  /** Returns all attachments in this skin. */
156
161
  getAttachments() {
157
- let entries = new Array();
158
- for (var i = 0; i < this.attachments.length; i++) {
159
- let slotAttachments = this.attachments[i];
162
+ const entries = [];
163
+ for (let i = 0; i < this.attachments.length; i++) {
164
+ const slotAttachments = this.attachments[i];
160
165
  if (slotAttachments) {
161
- for (let name in slotAttachments) {
162
- let attachment = slotAttachments[name];
166
+ for (const name in slotAttachments) {
167
+ const attachment = slotAttachments[name];
163
168
  if (attachment)
164
169
  entries.push(new SkinEntry(i, name, attachment));
165
170
  }
@@ -169,10 +174,10 @@ export class Skin {
169
174
  }
170
175
  /** Returns all attachments in this skin for the specified slot index. */
171
176
  getAttachmentsForSlot(slotIndex, attachments) {
172
- let slotAttachments = this.attachments[slotIndex];
177
+ const slotAttachments = this.attachments[slotIndex];
173
178
  if (slotAttachments) {
174
- for (let name in slotAttachments) {
175
- let attachment = slotAttachments[name];
179
+ for (const name in slotAttachments) {
180
+ const attachment = slotAttachments[name];
176
181
  if (attachment)
177
182
  attachments.push(new SkinEntry(slotIndex, name, attachment));
178
183
  }
@@ -188,16 +193,16 @@ export class Skin {
188
193
  attachAll(skeleton, oldSkin) {
189
194
  let slotIndex = 0;
190
195
  for (let i = 0; i < skeleton.slots.length; i++) {
191
- let slot = skeleton.slots[i];
192
- let slotAttachment = slot.getAttachment();
196
+ const slot = skeleton.slots[i];
197
+ const slotAttachment = slot.pose.getAttachment();
193
198
  if (slotAttachment && slotIndex < oldSkin.attachments.length) {
194
- let dictionary = oldSkin.attachments[slotIndex];
195
- for (let key in dictionary) {
196
- let skinAttachment = dictionary[key];
197
- if (slotAttachment == skinAttachment) {
198
- let attachment = this.getAttachment(slotIndex, key);
199
+ const dictionary = oldSkin.attachments[slotIndex];
200
+ for (const placeholder in dictionary) {
201
+ const skinAttachment = dictionary[placeholder];
202
+ if (slotAttachment === skinAttachment) {
203
+ const attachment = this.getAttachment(slotIndex, placeholder);
199
204
  if (attachment)
200
- slot.setAttachment(attachment);
205
+ slot.pose.setAttachment(attachment);
201
206
  break;
202
207
  }
203
208
  }
@@ -206,4 +211,4 @@ export class Skin {
206
211
  }
207
212
  }
208
213
  }
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJakUsT0FBTyxFQUFFLEtBQUssRUFBYSxNQUFNLFlBQVksQ0FBQztBQUU5QyxzRkFBc0Y7QUFDdEYsTUFBTSxPQUFPLFNBQVM7SUFDRDtJQUE4QjtJQUFxQjtJQUF2RSxZQUFvQixZQUFvQixDQUFDLEVBQVMsSUFBWSxFQUFTLFVBQXNCO1FBQXpFLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7Q0FDbEc7QUFFRDs7O21HQUdtRztBQUNuRyxNQUFNLE9BQU8sSUFBSTtJQUNoQix5RUFBeUU7SUFDekUsSUFBSSxDQUFTO0lBRWIsV0FBVyxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO0lBQ2pELEtBQUssR0FBRyxLQUFLLEVBQVksQ0FBQztJQUMxQixXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7SUFFMUMsMEdBQTBHO0lBQzFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7SUFFckUsWUFBYSxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsYUFBYSxDQUFFLFNBQWlCLEVBQUUsSUFBWSxFQUFFLFVBQXNCO1FBQ3JFLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FB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QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGlIQUFpSDtJQUNqSCxTQUFTLENBQUUsUUFBa0IsRUFBRSxPQUFhO1FBQzNDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQyxJQUFJLGNBQWMsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUQsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEQsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxjQUFjLEdBQWUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLGNBQWMsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDdEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3BELElBQUksVUFBVTs0QkFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUMvQyxNQUFNO29CQUNQLENBQUM7Z0JBQ0YsQ0FBQztZQUNGLENBQUM7WUFDRCxTQUFTLEVBQUUsQ0FBQztRQUNiLENBQUM7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9BdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgeyBNZXNoQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL01lc2hBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgeyBCb25lRGF0YSB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgeyBDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBDb2xvciwgU3RyaW5nTWFwIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFN0b3JlcyBhbiBlbnRyeSBpbiB0aGUgc2tpbiBjb25zaXN0aW5nIG9mIHRoZSBzbG90IGluZGV4LCBuYW1lLCBhbmQgYXR0YWNobWVudCAqKi9cbmV4cG9ydCBjbGFzcyBTa2luRW50cnkge1xuXHRjb25zdHJ1Y3RvciAocHVibGljIHNsb3RJbmRleDogbnVtYmVyID0gMCwgcHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHsgfVxufVxuXG4vKiogU3RvcmVzIGF0dGFjaG1lbnRzIGJ5IHNsb3QgaW5kZXggYW5kIGF0dGFjaG1lbnQgbmFtZS5cbiAqXG4gKiBTZWUgU2tlbGV0b25EYXRhIHtAbGluayBTa2VsZXRvbkRhdGEjZGVmYXVsdFNraW59LCBTa2VsZXRvbiB7QGxpbmsgU2tlbGV0b24jc2tpbn0sIGFuZFxuICogW1J1bnRpbWUgc2tpbnNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNraW5zKSBpbiB0aGUgU3BpbmUgUnVudGltZXMgR3VpZGUuICovXG5leHBvcnQgY2xhc3MgU2tpbiB7XG5cdC8qKiBUaGUgc2tpbidzIG5hbWUsIHdoaWNoIGlzIHVuaXF1ZSBhY3Jvc3MgYWxsIHNraW5zIGluIHRoZSBza2VsZXRvbi4gKi9cblx0bmFtZTogc3RyaW5nO1xuXG5cdGF0dGFjaG1lbnRzID0gbmV3IEFycmF5PFN0cmluZ01hcDxBdHRhY2htZW50Pj4oKTtcblx0Ym9uZXMgPSBBcnJheTxCb25lRGF0YT4oKTtcblx0Y29uc3RyYWludHMgPSBuZXcgQXJyYXk8Q29uc3RyYWludERhdGE+KCk7XG5cblx0LyoqIFRoZSBjb2xvciBvZiB0aGUgc2tpbiBhcyBpdCB3YXMgaW4gU3BpbmUsIG9yIGEgZGVmYXVsdCBjb2xvciBpZiBub25lc3NlbnRpYWwgZGF0YSB3YXMgbm90IGV4cG9ydGVkLiAqL1xuXHRjb2xvciA9IG5ldyBDb2xvcigwLjk5NjA3ODQzLCAwLjYxOTYwNzg3LCAwLjMwOTgwMzkzLCAxKTsgLy8gZmU5ZTRmZmZcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHR9XG5cblx0LyoqIEFkZHMgYW4gYXR0YWNobWVudCB0byB0aGUgc2tpbiBmb3IgdGhlIHNwZWNpZmllZCBzbG90IGluZGV4IGFuZCBuYW1lLiAqL1xuXHRzZXRBdHRhY2htZW50IChzbG90SW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nLCBhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG5cdFx0aWYgKCFhdHRhY2htZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJhdHRhY2htZW50IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRsZXQgYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzO1xuXHRcdGlmIChzbG90SW5kZXggPj0gYXR0YWNobWVudHMubGVuZ3RoKSBhdHRhY2htZW50cy5sZW5ndGggPSBzbG90SW5kZXggKyAxO1xuXHRcdGlmICghYXR0YWNobWVudHNbc2xvdEluZGV4XSkgYXR0YWNobWVudHNbc2xvdEluZGV4XSA9IHt9O1xuXHRcdGF0dGFjaG1lbnRzW3Nsb3RJbmRleF1bbmFtZV0gPSBhdHRhY2htZW50O1xuXHR9XG5cblx0LyoqIEFkZHMgYWxsIGF0dGFjaG1lbnRzLCBib25lcywgYW5kIGNvbnN0cmFpbnRzIGZyb20gdGhlIHNwZWNpZmllZCBza2luIHRvIHRoaXMgc2tpbi4gKi9cblx0YWRkU2tpbiAoc2tpbjogU2tpbikge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2tpbi5ib25lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IGJvbmUgPSBza2luLmJvbmVzW2ldO1xuXHRcdFx0bGV0IGNvbnRhaW5lZCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IHRoaXMuYm9uZXMubGVuZ3RoOyBpaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmJvbmVzW2lpXSA9PSBib25lKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFjb250YWluZWQpIHRoaXMuYm9uZXMucHVzaChib25lKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNraW4uY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCBjb25zdHJhaW50ID0gc2tpbi5jb25zdHJhaW50c1tpXTtcblx0XHRcdGxldCBjb250YWluZWQgPSBmYWxzZTtcblx0XHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCB0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaWkrKykge1xuXHRcdFx0XHRpZiAodGhpcy5jb25zdHJhaW50c1tpaV0gPT0gY29uc3RyYWludCkge1xuXHRcdFx0XHRcdGNvbnRhaW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghY29udGFpbmVkKSB0aGlzLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludCk7XG5cdFx0fVxuXG5cdFx0bGV0IGF0dGFjaG1lbnRzID0gc2tpbi5nZXRBdHRhY2htZW50cygpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhdHRhY2htZW50ID0gYXR0YWNobWVudHNbaV07XG5cdFx0XHR0aGlzLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudC5zbG90SW5kZXgsIGF0dGFjaG1lbnQubmFtZSwgYXR0YWNobWVudC5hdHRhY2htZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKiogQWRkcyBhbGwgYm9uZXMgYW5kIGNvbnN0cmFpbnRzIGFuZCBjb3BpZXMgb2YgYWxsIGF0dGFjaG1lbnRzIGZyb20gdGhlIHNwZWNpZmllZCBza2luIHRvIHRoaXMgc2tpbi4gTWVzaCBhdHRhY2htZW50cyBhcmUgbm90XG5cdCAqIGNvcGllZCwgaW5zdGVhZCBhIG5ldyBsaW5rZWQgbWVzaCBpcyBjcmVhdGVkLiBUaGUgYXR0YWNobWVudCBjb3BpZXMgY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvcmlnaW5hbHMuICovXG5cdGNvcHlTa2luIChza2luOiBTa2luKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBza2luLmJvbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgYm9uZSA9IHNraW4uYm9uZXNbaV07XG5cdFx0XHRsZXQgY29udGFpbmVkID0gZmFsc2U7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwgdGhpcy5ib25lcy5sZW5ndGg7IGlpKyspIHtcblx0XHRcdFx0aWYgKHRoaXMuYm9uZXNbaWldID09IGJvbmUpIHtcblx0XHRcdFx0XHRjb250YWluZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNvbnRhaW5lZCkgdGhpcy5ib25lcy5wdXNoKGJvbmUpO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2tpbi5jb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IGNvbnN0cmFpbnQgPSBza2luLmNvbnN0cmFpbnRzW2ldO1xuXHRcdFx0bGV0IGNvbnRhaW5lZCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IHRoaXMuY29uc3RyYWludHMubGVuZ3RoOyBpaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmNvbnN0cmFpbnRzW2lpXSA9PSBjb25zdHJhaW50KSB7XG5cdFx0XHRcdFx0Y29udGFpbmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFjb250YWluZWQpIHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcblx0XHR9XG5cblx0XHRsZXQgYXR0YWNobWVudHMgPSBza2luLmdldEF0dGFjaG1lbnRzKCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1tpXTtcblx0XHRcdGlmICghYXR0YWNobWVudC5hdHRhY2htZW50KSBjb250aW51ZTtcblx0XHRcdGlmIChhdHRhY2htZW50LmF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRhdHRhY2htZW50LmF0dGFjaG1lbnQgPSBhdHRhY2htZW50LmF0dGFjaG1lbnQubmV3TGlua2VkTWVzaCgpO1xuXHRcdFx0XHR0aGlzLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudC5zbG90SW5kZXgsIGF0dGFjaG1lbnQubmFtZSwgYXR0YWNobWVudC5hdHRhY2htZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQuYXR0YWNobWVudC5jb3B5KCk7XG5cdFx0XHRcdHRoaXMuc2V0QXR0YWNobWVudChhdHRhY2htZW50LnNsb3RJbmRleCwgYXR0YWNobWVudC5uYW1lLCBhdHRhY2htZW50LmF0dGFjaG1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBhdHRhY2htZW50IGZvciB0aGUgc3BlY2lmaWVkIHNsb3QgaW5kZXggYW5kIG5hbWUsIG9yIG51bGwuICovXG5cdGdldEF0dGFjaG1lbnQgKHNsb3RJbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpOiBBdHRhY2htZW50IHwgbnVsbCB7XG5cdFx0bGV0IGRpY3Rpb25hcnkgPSB0aGlzLmF0dGFjaG1lbnRzW3Nsb3RJbmRleF07XG5cdFx0cmV0dXJuIGRpY3Rpb25hcnkgPyBkaWN0aW9uYXJ5W25hbWVdIDogbnVsbDtcblx0fVxuXG5cdC8qKiBSZW1vdmVzIHRoZSBhdHRhY2htZW50IGluIHRoZSBza2luIGZvciB0aGUgc3BlY2lmaWVkIHNsb3QgaW5kZXggYW5kIG5hbWUsIGlmIGFueS4gKi9cblx0cmVtb3ZlQXR0YWNobWVudCAoc2xvdEluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZykge1xuXHRcdGxldCBkaWN0aW9uYXJ5ID0gdGhpcy5hdHRhY2htZW50c1tzbG90SW5kZXhdO1xuXHRcdGlmIChkaWN0aW9uYXJ5KSBkZWxldGUgZGljdGlvbmFyeVtuYW1lXTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGFsbCBhdHRhY2htZW50cyBpbiB0aGlzIHNraW4uICovXG5cdGdldEF0dGFjaG1lbnRzICgpOiBBcnJheTxTa2luRW50cnk+IHtcblx0XHRsZXQgZW50cmllcyA9IG5ldyBBcnJheTxTa2luRW50cnk+KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgc2xvdEF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c1tpXTtcblx0XHRcdGlmIChzbG90QXR0YWNobWVudHMpIHtcblx0XHRcdFx0Zm9yIChsZXQgbmFtZSBpbiBzbG90QXR0YWNobWVudHMpIHtcblx0XHRcdFx0XHRsZXQgYXR0YWNobWVudCA9IHNsb3RBdHRhY2htZW50c1tuYW1lXTtcblx0XHRcdFx0XHRpZiAoYXR0YWNobWVudCkgZW50cmllcy5wdXNoKG5ldyBTa2luRW50cnkoaSwgbmFtZSwgYXR0YWNobWVudCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBlbnRyaWVzO1xuXHR9XG5cblx0LyoqIFJldHVybnMgYWxsIGF0dGFjaG1lbnRzIGluIHRoaXMgc2tpbiBmb3IgdGhlIHNwZWNpZmllZCBzbG90IGluZGV4LiAqL1xuXHRnZXRBdHRhY2htZW50c0ZvclNsb3QgKHNsb3RJbmRleDogbnVtYmVyLCBhdHRhY2htZW50czogQXJyYXk8U2tpbkVudHJ5Pikge1xuXHRcdGxldCBzbG90QXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzW3Nsb3RJbmRleF07XG5cdFx0aWYgKHNsb3RBdHRhY2htZW50cykge1xuXHRcdFx0Zm9yIChsZXQgbmFtZSBpbiBzbG90QXR0YWNobWVudHMpIHtcblx0XHRcdFx0bGV0IGF0dGFjaG1lbnQgPSBzbG90QXR0YWNobWVudHNbbmFtZV07XG5cdFx0XHRcdGlmIChhdHRhY2htZW50KSBhdHRhY2htZW50cy5wdXNoKG5ldyBTa2luRW50cnkoc2xvdEluZGV4LCBuYW1lLCBhdHRhY2htZW50KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIENsZWFycyBhbGwgYXR0YWNobWVudHMsIGJvbmVzLCBhbmQgY29uc3RyYWludHMuICovXG5cdGNsZWFyICgpIHtcblx0XHR0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9IDA7XG5cdFx0dGhpcy5ib25lcy5sZW5ndGggPSAwO1xuXHRcdHRoaXMuY29uc3RyYWludHMubGVuZ3RoID0gMDtcblx0fVxuXG5cdC8qKiBBdHRhY2ggZWFjaCBhdHRhY2htZW50IGluIHRoaXMgc2tpbiBpZiB0aGUgY29ycmVzcG9uZGluZyBhdHRhY2htZW50IGluIHRoZSBvbGQgc2tpbiBpcyBjdXJyZW50bHkgYXR0YWNoZWQuICovXG5cdGF0dGFjaEFsbCAoc2tlbGV0b246IFNrZWxldG9uLCBvbGRTa2luOiBTa2luKSB7XG5cdFx0bGV0IHNsb3RJbmRleCA9IDA7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBza2VsZXRvbi5zbG90cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IHNsb3QgPSBza2VsZXRvbi5zbG90c1tpXTtcblx0XHRcdGxldCBzbG90QXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXHRcdFx0aWYgKHNsb3RBdHRhY2htZW50ICYmIHNsb3RJbmRleCA8IG9sZFNraW4uYXR0YWNobWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdGxldCBkaWN0aW9uYXJ5ID0gb2xkU2tpbi5hdHRhY2htZW50c1tzbG90SW5kZXhdO1xuXHRcdFx0XHRmb3IgKGxldCBrZXkgaW4gZGljdGlvbmFyeSkge1xuXHRcdFx0XHRcdGxldCBza2luQXR0YWNobWVudDogQXR0YWNobWVudCA9IGRpY3Rpb25hcnlba2V5XTtcblx0XHRcdFx0XHRpZiAoc2xvdEF0dGFjaG1lbnQgPT0gc2tpbkF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRcdGxldCBhdHRhY2htZW50ID0gdGhpcy5nZXRBdHRhY2htZW50KHNsb3RJbmRleCwga2V5KTtcblx0XHRcdFx0XHRcdGlmIChhdHRhY2htZW50KSBzbG90LnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNsb3RJbmRleCsrO1xuXHRcdH1cblx0fVxufVxuIl19
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLakUsT0FBTyxFQUFFLEtBQUssRUFBa0IsTUFBTSxZQUFZLENBQUM7QUFFbkQsc0ZBQXNGO0FBQ3RGLE1BQU0sT0FBTyxTQUFTO0lBRXJCLHdDQUF3QztJQUN4QyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBRXRCLFdBQVcsQ0FBUztJQUVwQiwwQ0FBMEM7SUFDMUMsVUFBVSxDQUFZO0lBRXRCLFlBQWEsWUFBb0IsQ0FBQyxFQUFFLFdBQW1CLEVBQUUsVUFBc0I7UUFDOUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDOUIsQ0FBQztDQUNEO0FBRUQ7OzttR0FHbUc7QUFDbkcsTUFBTSxPQUFPLElBQUk7SUFDaEI7OzRDQUV3QztJQUN4QyxJQUFJLENBQVM7SUFFYixXQUFXLEdBQUcsRUFBNkIsQ0FBQztJQUM1QyxLQUFLLEdBQUcsRUFBZ0IsQ0FBQztJQUN6QixvR0FBb0c7SUFDcEcsV0FBVyxHQUFHLEVBQWdDLENBQUM7SUFFL0MsMEdBQTBHO0lBQzFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7SUFFckUsWUFBYSxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw0RUFB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ZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRhY2htZW50IH0gZnJvbSBcIi4vYXR0YWNobWVudHMvQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgTWVzaEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9NZXNoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25lRGF0YSB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbkRhdGEgfSBmcm9tIFwiLi9Ta2VsZXRvbkRhdGEuanNcIjtcbmltcG9ydCB7IENvbG9yLCB0eXBlIFN0cmluZ01hcCB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBTdG9yZXMgYW4gZW50cnkgaW4gdGhlIHNraW4gY29uc2lzdGluZyBvZiB0aGUgc2xvdCBpbmRleCwgbmFtZSwgYW5kIGF0dGFjaG1lbnQgKiovXG5leHBvcnQgY2xhc3MgU2tpbkVudHJ5IHtcblxuXHQvKiogVGhlIHtAbGluayBTa2VsZXRvbi5zbG90c30gaW5kZXguICovXG5cdHNsb3RJbmRleDogbnVtYmVyID0gMDtcblxuXHRwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG5cdC8qKiBUaGUgYXR0YWNobWVudCBmb3IgdGhpcyBza2luIGVudHJ5LiAqL1xuXHRhdHRhY2htZW50OiBBdHRhY2htZW50XG5cblx0Y29uc3RydWN0b3IgKHNsb3RJbmRleDogbnVtYmVyID0gMCwgcGxhY2Vob2xkZXI6IHN0cmluZywgYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuXHRcdHRoaXMuc2xvdEluZGV4ID0gc2xvdEluZGV4O1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcblx0XHR0aGlzLmF0dGFjaG1lbnQgPSBhdHRhY2htZW50O1xuXHR9XG59XG5cbi8qKiBTdG9yZXMgYXR0YWNobWVudHMgYnkgc2xvdCBpbmRleCBhbmQgcGxhY2Vob2xkZXIgbmFtZS4gTXVsdGlwbGUge0BsaW5rIFNrZWxldG9ufSBpbnN0YW5jZXMgY2FuIHVzZSB0aGUgc2FtZSBza2lucy5cbiAqXG4gKiBTZWUge0BsaW5rIFNrZWxldG9uRGF0YS5kZWZhdWx0U2tpbn0sIHtAbGluayBTa2VsZXRvbi5za2lufSwgYW5kXG4gKiBbUnVudGltZSBza2luc10oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tpbnMpIGluIHRoZSBTcGluZSBSdW50aW1lcyBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBTa2luIHtcblx0LyoqIFRoZSBza2luJ3MgbmFtZSwgdW5pcXVlIGFjcm9zcyBhbGwgc2tpbnMgaW4gdGhlIHNrZWxldG9uLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIFNrZWxldG9uRGF0YS5maW5kU2tpbn0uICovXG5cdG5hbWU6IHN0cmluZztcblxuXHRhdHRhY2htZW50cyA9IFtdIGFzIFN0cmluZ01hcDxBdHRhY2htZW50PltdO1xuXHRib25lcyA9IFtdIGFzIEJvbmVEYXRhW107XG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogcmVmZXJlbmNlIHJ1bnRpbWUgZG9lcyBub3QgcmVzdHJpY3QgdG8gc3BlY2lmaWMgdHlwZXNcblx0Y29uc3RyYWludHMgPSBbXSBhcyBDb25zdHJhaW50RGF0YTxhbnksIGFueT5bXTtcblxuXHQvKiogVGhlIGNvbG9yIG9mIHRoZSBza2luIGFzIGl0IHdhcyBpbiBTcGluZSwgb3IgYSBkZWZhdWx0IGNvbG9yIGlmIG5vbmVzc2VudGlhbCBkYXRhIHdhcyBub3QgZXhwb3J0ZWQuICovXG5cdGNvbG9yID0gbmV3IENvbG9yKDAuOTk2MDc4NDMsIDAuNjE5NjA3ODcsIDAuMzA5ODAzOTMsIDEpOyAvLyBmZTllNGZmZlxuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihcIm5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdH1cblxuXHQvKiogQWRkcyBhbiBhdHRhY2htZW50IHRvIHRoZSBza2luIGZvciB0aGUgc3BlY2lmaWVkIHNsb3QgaW5kZXggYW5kIG5hbWUuICovXG5cdHNldEF0dGFjaG1lbnQgKHNsb3RJbmRleDogbnVtYmVyLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG5cdFx0aWYgKCFhdHRhY2htZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJhdHRhY2htZW50IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBhdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHM7XG5cdFx0aWYgKHNsb3RJbmRleCA+PSBhdHRhY2htZW50cy5sZW5ndGgpIGF0dGFjaG1lbnRzLmxlbmd0aCA9IHNsb3RJbmRleCArIDE7XG5cdFx0aWYgKCFhdHRhY2htZW50c1tzbG90SW5kZXhdKSBhdHRhY2htZW50c1tzbG90SW5kZXhdID0ge307XG5cdFx0YXR0YWNobWVudHNbc2xvdEluZGV4XVtwbGFjZWhvbGRlcl0gPSBhdHRhY2htZW50O1xuXHR9XG5cblx0LyoqIEFkZHMgYWxsIGF0dGFjaG1lbnRzLCBib25lcywgYW5kIGNvbnN0cmFpbnRzIGZyb20gdGhlIHNwZWNpZmllZCBza2luIHRvIHRoaXMgc2tpbi4gKi9cblx0YWRkU2tpbiAoc2tpbjogU2tpbikge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2tpbi5ib25lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IHNraW4uYm9uZXNbaV07XG5cdFx0XHRsZXQgY29udGFpbmVkID0gZmFsc2U7XG5cdFx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwgdGhpcy5ib25lcy5sZW5ndGg7IGlpKyspIHtcblx0XHRcdFx0aWYgKHRoaXMuYm9uZXNbaWldID09PSBib25lKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFjb250YWluZWQpIHRoaXMuYm9uZXMucHVzaChib25lKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNraW4uY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBza2luLmNvbnN0cmFpbnRzW2ldO1xuXHRcdFx0bGV0IGNvbnRhaW5lZCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IHRoaXMuY29uc3RyYWludHMubGVuZ3RoOyBpaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmNvbnN0cmFpbnRzW2lpXSA9PT0gY29uc3RyYWludCkge1xuXHRcdFx0XHRcdGNvbnRhaW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghY29udGFpbmVkKSB0aGlzLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXR0YWNobWVudHMgPSBza2luLmdldEF0dGFjaG1lbnRzKCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IGF0dGFjaG1lbnRzW2ldO1xuXHRcdFx0dGhpcy5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQuc2xvdEluZGV4LCBhdHRhY2htZW50LnBsYWNlaG9sZGVyLCBhdHRhY2htZW50LmF0dGFjaG1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBBZGRzIGFsbCBib25lcyBhbmQgY29uc3RyYWludHMgYW5kIGNvcGllcyBvZiBhbGwgYXR0YWNobWVudHMgZnJvbSB0aGUgc3BlY2lmaWVkIHNraW4gdG8gdGhpcyBza2luLiBNZXNoIGF0dGFjaG1lbnRzIGFyZSBub3Rcblx0ICogY29waWVkLCBpbnN0ZWFkIGEgbmV3IGxpbmtlZCBtZXNoIGlzIGNyZWF0ZWQuIFRoZSBhdHRhY2htZW50IGNvcGllcyBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG9yaWdpbmFscy4gKi9cblx0Y29weVNraW4gKHNraW46IFNraW4pIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNraW4uYm9uZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGJvbmUgPSBza2luLmJvbmVzW2ldO1xuXHRcdFx0bGV0IGNvbnRhaW5lZCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChsZXQgaWkgPSAwOyBpaSA8IHRoaXMuYm9uZXMubGVuZ3RoOyBpaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmJvbmVzW2lpXSA9PT0gYm9uZSkge1xuXHRcdFx0XHRcdGNvbnRhaW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghY29udGFpbmVkKSB0aGlzLmJvbmVzLnB1c2goYm9uZSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBza2luLmNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50ID0gc2tpbi5jb25zdHJhaW50c1tpXTtcblx0XHRcdGxldCBjb250YWluZWQgPSBmYWxzZTtcblx0XHRcdGZvciAobGV0IGlpID0gMDsgaWkgPCB0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaWkrKykge1xuXHRcdFx0XHRpZiAodGhpcy5jb25zdHJhaW50c1tpaV0gPT09IGNvbnN0cmFpbnQpIHtcblx0XHRcdFx0XHRjb250YWluZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNvbnRhaW5lZCkgdGhpcy5jb25zdHJhaW50cy5wdXNoKGNvbnN0cmFpbnQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF0dGFjaG1lbnRzID0gc2tpbi5nZXRBdHRhY2htZW50cygpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1tpXTtcblx0XHRcdGlmICghYXR0YWNobWVudC5hdHRhY2htZW50KSBjb250aW51ZTtcblx0XHRcdGlmIChhdHRhY2htZW50LmF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRhdHRhY2htZW50LmF0dGFjaG1lbnQgPSBhdHRhY2htZW50LmF0dGFjaG1lbnQubmV3TGlua2VkTWVzaCgpO1xuXHRcdFx0XHR0aGlzLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudC5zbG90SW5kZXgsIGF0dGFjaG1lbnQucGxhY2Vob2xkZXIsIGF0dGFjaG1lbnQuYXR0YWNobWVudCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhdHRhY2htZW50LmF0dGFjaG1lbnQgPSBhdHRhY2htZW50LmF0dGFjaG1lbnQuY29weSgpO1xuXHRcdFx0XHR0aGlzLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudC5zbG90SW5kZXgsIGF0dGFjaG1lbnQucGxhY2Vob2xkZXIsIGF0dGFjaG1lbnQuYXR0YWNobWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGF0dGFjaG1lbnQgZm9yIHRoZSBzcGVjaWZpZWQgc2xvdCBpbmRleCBhbmQgcGxhY2Vob2xkZXIsIG9yIG51bGwuICovXG5cdGdldEF0dGFjaG1lbnQgKHNsb3RJbmRleDogbnVtYmVyLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmF0dGFjaG1lbnRzW3Nsb3RJbmRleF07XG5cdFx0cmV0dXJuIGRpY3Rpb25hcnkgPyBkaWN0aW9uYXJ5W3BsYWNlaG9sZGVyXSA6IG51bGw7XG5cdH1cblxuXHQvKiogUmVtb3ZlcyB0aGUgYXR0YWNobWVudCBpbiB0aGUgc2tpbiBmb3IgdGhlIHNwZWNpZmllZCBzbG90IGluZGV4IGFuZCBwbGFjZWhvbGRlciwgaWYgYW55LiAqL1xuXHRyZW1vdmVBdHRhY2htZW50IChzbG90SW5kZXg6IG51bWJlciwgcGxhY2Vob2xkZXI6IHN0cmluZykge1xuXHRcdGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmF0dGFjaG1lbnRzW3Nsb3RJbmRleF07XG5cdFx0aWYgKGRpY3Rpb25hcnkpIGRlbGV0ZSBkaWN0aW9uYXJ5W3BsYWNlaG9sZGVyXTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGFsbCBhdHRhY2htZW50cyBpbiB0aGlzIHNraW4uICovXG5cdGdldEF0dGFjaG1lbnRzICgpOiBBcnJheTxTa2luRW50cnk+IHtcblx0XHRjb25zdCBlbnRyaWVzOiBTa2luRW50cnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdEF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c1tpXTtcblx0XHRcdGlmIChzbG90QXR0YWNobWVudHMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBuYW1lIGluIHNsb3RBdHRhY2htZW50cykge1xuXHRcdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90QXR0YWNobWVudHNbbmFtZV07XG5cdFx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIGVudHJpZXMucHVzaChuZXcgU2tpbkVudHJ5KGksIG5hbWUsIGF0dGFjaG1lbnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZW50cmllcztcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGFsbCBhdHRhY2htZW50cyBpbiB0aGlzIHNraW4gZm9yIHRoZSBzcGVjaWZpZWQgc2xvdCBpbmRleC4gKi9cblx0Z2V0QXR0YWNobWVudHNGb3JTbG90IChzbG90SW5kZXg6IG51bWJlciwgYXR0YWNobWVudHM6IEFycmF5PFNraW5FbnRyeT4pIHtcblx0XHRjb25zdCBzbG90QXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzW3Nsb3RJbmRleF07XG5cdFx0aWYgKHNsb3RBdHRhY2htZW50cykge1xuXHRcdFx0Zm9yIChjb25zdCBuYW1lIGluIHNsb3RBdHRhY2htZW50cykge1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdEF0dGFjaG1lbnRzW25hbWVdO1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCkgYXR0YWNobWVudHMucHVzaChuZXcgU2tpbkVudHJ5KHNsb3RJbmRleCwgbmFtZSwgYXR0YWNobWVudCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBDbGVhcnMgYWxsIGF0dGFjaG1lbnRzLCBib25lcywgYW5kIGNvbnN0cmFpbnRzLiAqL1xuXHRjbGVhciAoKSB7XG5cdFx0dGhpcy5hdHRhY2htZW50cy5sZW5ndGggPSAwO1xuXHRcdHRoaXMuYm9uZXMubGVuZ3RoID0gMDtcblx0XHR0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aCA9IDA7XG5cdH1cblxuXHQvKiogQXR0YWNoIGVhY2ggYXR0YWNobWVudCBpbiB0aGlzIHNraW4gaWYgdGhlIGNvcnJlc3BvbmRpbmcgYXR0YWNobWVudCBpbiB0aGUgb2xkIHNraW4gaXMgY3VycmVudGx5IGF0dGFjaGVkLiAqL1xuXHRhdHRhY2hBbGwgKHNrZWxldG9uOiBTa2VsZXRvbiwgb2xkU2tpbjogU2tpbikge1xuXHRcdGxldCBzbG90SW5kZXggPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2tlbGV0b24uc2xvdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3QgPSBza2VsZXRvbi5zbG90c1tpXTtcblx0XHRcdGNvbnN0IHNsb3RBdHRhY2htZW50ID0gc2xvdC5wb3NlLmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmIChzbG90QXR0YWNobWVudCAmJiBzbG90SW5kZXggPCBvbGRTa2luLmF0dGFjaG1lbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBkaWN0aW9uYXJ5ID0gb2xkU2tpbi5hdHRhY2htZW50c1tzbG90SW5kZXhdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBsYWNlaG9sZGVyIGluIGRpY3Rpb25hcnkpIHtcblx0XHRcdFx0XHRjb25zdCBza2luQXR0YWNobWVudDogQXR0YWNobWVudCA9IGRpY3Rpb25hcnlbcGxhY2Vob2xkZXJdO1xuXHRcdFx0XHRcdGlmIChzbG90QXR0YWNobWVudCA9PT0gc2tpbkF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB0aGlzLmdldEF0dGFjaG1lbnQoc2xvdEluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0XHRcdFx0XHRpZiAoYXR0YWNobWVudCkgc2xvdC5wb3NlLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNsb3RJbmRleCsrO1xuXHRcdH1cblx0fVxufVxuIl19
@@ -0,0 +1,46 @@
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 { Bone } from "./Bone.js";
30
+ import { Constraint } from "./Constraint.js";
31
+ import type { Physics } from "./Physics.js";
32
+ import type { Skeleton } from "./Skeleton.js";
33
+ import type { SliderData } from "./SliderData.js";
34
+ import { SliderPose } from "./SliderPose.js";
35
+ /** Applies an animation based on either the slider's {@link SliderPose.time} or a bone's transform property.
36
+ *
37
+ * See <a href="https://esotericsoftware.com/spine-sliders">Sliders</a> in the Spine User Guide. */
38
+ export declare class Slider extends Constraint<Slider, SliderData, SliderPose> {
39
+ private static readonly offsets;
40
+ /** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */
41
+ bone: Bone | null;
42
+ constructor(data: SliderData, skeleton: Skeleton);
43
+ copy(skeleton: Skeleton): Slider;
44
+ update(skeleton: Skeleton, physics: Physics): void;
45
+ sort(skeleton: Skeleton): void;
46
+ }
package/dist/Slider.js ADDED
@@ -0,0 +1,115 @@
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 { DrawOrderFolderTimeline, DrawOrderTimeline, isConstraintTimeline, isSlotTimeline, PhysicsConstraintTimeline } from "./Animation.js";
30
+ import { Constraint } from "./Constraint.js";
31
+ import { SliderPose } from "./SliderPose.js";
32
+ /** Applies an animation based on either the slider's {@link SliderPose.time} or a bone's transform property.
33
+ *
34
+ * See <a href="https://esotericsoftware.com/spine-sliders">Sliders</a> in the Spine User Guide. */
35
+ export class Slider extends Constraint {
36
+ static offsets = [0, 0, 0, 0, 0, 0];
37
+ /** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */
38
+ bone = null;
39
+ constructor(data, skeleton) {
40
+ super(data, new SliderPose(), new SliderPose());
41
+ if (!skeleton)
42
+ throw new Error("skeleton cannot be null.");
43
+ if (data.bone != null)
44
+ this.bone = skeleton.bones[data.bone.index];
45
+ }
46
+ copy(skeleton) {
47
+ var copy = new Slider(this.data, skeleton);
48
+ copy.pose.set(this.pose);
49
+ return copy;
50
+ }
51
+ update(skeleton, physics) {
52
+ const p = this.appliedPose;
53
+ if (p.mix === 0)
54
+ return;
55
+ const data = this.data, animation = data.animation, bone = this.bone;
56
+ if (bone !== null) {
57
+ if (!bone.active)
58
+ return;
59
+ if (data.local)
60
+ bone.appliedPose.validateLocalTransform(skeleton);
61
+ p.time = data.offset
62
+ + (data.property.value(skeleton, bone.appliedPose, data.local, Slider.offsets) - data.property.offset) * data.scale;
63
+ if (data.loop)
64
+ p.time = animation.duration + (p.time % animation.duration);
65
+ else
66
+ p.time = Math.max(0, p.time);
67
+ }
68
+ const bones = skeleton.bones;
69
+ const indices = animation.bones;
70
+ for (let i = 0, n = animation.bones.length; i < n; i++)
71
+ bones[indices[i]].appliedPose.modifyLocal(skeleton);
72
+ animation.apply(skeleton, p.time, p.time, data.loop, null, p.mix, false, data.additive, false, true);
73
+ }
74
+ sort(skeleton) {
75
+ const bone = this.bone;
76
+ const data = this.data;
77
+ if (bone && !data.local)
78
+ skeleton.sortBone(bone);
79
+ skeleton._updateCache.push(this);
80
+ const bones = skeleton.bones;
81
+ const indices = data.animation.bones;
82
+ for (let i = 0, n = data.animation.bones.length; i < n; i++) {
83
+ const bone = bones[indices[i]];
84
+ bone.sorted = false;
85
+ skeleton.sortReset(bone.children);
86
+ skeleton.constrained(bone);
87
+ }
88
+ const timelines = data.animation.timelines;
89
+ const slots = skeleton.slots;
90
+ const constraints = skeleton.constraints;
91
+ const physics = skeleton.physics;
92
+ const physicsCount = skeleton.physics.length;
93
+ for (let i = 0, n = data.animation.timelines.length; i < n; i++) {
94
+ const t = timelines[i];
95
+ if (isSlotTimeline(t))
96
+ skeleton.constrained(slots[t.slotIndex]);
97
+ else if (t instanceof DrawOrderTimeline || t instanceof DrawOrderFolderTimeline)
98
+ skeleton.drawOrder.constrained();
99
+ else if (t instanceof PhysicsConstraintTimeline) {
100
+ if (t.constraintIndex === -1) {
101
+ for (let ii = 0; ii < physicsCount; ii++)
102
+ skeleton.constrained(physics[ii]);
103
+ }
104
+ else
105
+ skeleton.constrained(constraints[t.constraintIndex]);
106
+ }
107
+ else if (isConstraintTimeline(t)) {
108
+ const constraintIndex = t.constraintIndex;
109
+ if (constraintIndex !== -1)
110
+ skeleton.constrained(constraints[constraintIndex]);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NsaWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUk3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7O21HQUVtRztBQUNuRyxNQUFNLE9BQU8sTUFBTyxTQUFRLFVBQTBDO0lBQzdELE1BQU0sQ0FBVSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJELG1HQUFtRztJQUNuRyxJQUFJLEdBQWdCLElBQUksQ0FBQztJQUV6QixZQUFhLElBQWdCLEVBQUUsUUFBa0I7UUFDaEQsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUUzRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTSxJQUFJLENBQUUsUUFBa0I7UUFDOUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFFLFFBQWtCLEVBQUUsT0FBZ0I7UUFDbEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyRSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTTtrQkFDakIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDckgsSUFBSSxJQUFJLENBQUMsSUFBSTtnQkFDWixDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Z0JBRTVELENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJELFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsSUFBSSxDQUFFLFFBQWtCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDckMsSUFBSSxDQUFDLFlBQVksaUJBQWlCLElBQUksQ0FBQyxZQUFZLHVCQUF1QjtnQkFDOUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDN0IsSUFBSSxDQUFDLFlBQVkseUJBQXlCLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxZQUFZLEVBQUUsRUFBRSxFQUFFO3dCQUN2QyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDOztvQkFDQSxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO2lCQUFNLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDMUMsSUFBSSxlQUFlLEtBQUssQ0FBQyxDQUFDO29CQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDaEYsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBEcmF3T3JkZXJGb2xkZXJUaW1lbGluZSwgRHJhd09yZGVyVGltZWxpbmUsIGlzQ29uc3RyYWludFRpbWVsaW5lLCBpc1Nsb3RUaW1lbGluZSwgUGh5c2ljc0NvbnN0cmFpbnRUaW1lbGluZSB9IGZyb20gXCIuL0FuaW1hdGlvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25lIH0gZnJvbSBcIi4vQm9uZS5qc1wiO1xuaW1wb3J0IHsgQ29uc3RyYWludCB9IGZyb20gXCIuL0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbGlkZXJEYXRhIH0gZnJvbSBcIi4vU2xpZGVyRGF0YS5qc1wiO1xuaW1wb3J0IHsgU2xpZGVyUG9zZSB9IGZyb20gXCIuL1NsaWRlclBvc2UuanNcIjtcblxuLyoqIEFwcGxpZXMgYW4gYW5pbWF0aW9uIGJhc2VkIG9uIGVpdGhlciB0aGUgc2xpZGVyJ3Mge0BsaW5rIFNsaWRlclBvc2UudGltZX0gb3IgYSBib25lJ3MgdHJhbnNmb3JtIHByb3BlcnR5LlxuICpcbiAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1zbGlkZXJzXCI+U2xpZGVyczwvYT4gaW4gdGhlIFNwaW5lIFVzZXIgR3VpZGUuICovXG5leHBvcnQgY2xhc3MgU2xpZGVyIGV4dGVuZHMgQ29uc3RyYWludDxTbGlkZXIsIFNsaWRlckRhdGEsIFNsaWRlclBvc2U+IHtcblx0cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgb2Zmc2V0cyA9IFswLCAwLCAwLCAwLCAwLCAwXTtcblxuXHQvKiogV2hlbiBzZXQsIHRoZSBib25lJ3MgdHJhbnNmb3JtIHByb3BlcnR5IGlzIHVzZWQgdG8gc2V0IHRoZSBzbGlkZXIncyB7QGxpbmsgU2xpZGVyUG9zZS50aW1lfS4gKi9cblx0Ym9uZTogQm9uZSB8IG51bGwgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBTbGlkZXJEYXRhLCBza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHRzdXBlcihkYXRhLCBuZXcgU2xpZGVyUG9zZSgpLCBuZXcgU2xpZGVyUG9zZSgpKTtcblx0XHRpZiAoIXNrZWxldG9uKSB0aHJvdyBuZXcgRXJyb3IoXCJza2VsZXRvbiBjYW5ub3QgYmUgbnVsbC5cIik7XG5cblx0XHRpZiAoZGF0YS5ib25lICE9IG51bGwpIHRoaXMuYm9uZSA9IHNrZWxldG9uLmJvbmVzW2RhdGEuYm9uZS5pbmRleF07XG5cdH1cblxuXHRwdWJsaWMgY29weSAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0dmFyIGNvcHkgPSBuZXcgU2xpZGVyKHRoaXMuZGF0YSwgc2tlbGV0b24pO1xuXHRcdGNvcHkucG9zZS5zZXQodGhpcy5wb3NlKTtcblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGUgKHNrZWxldG9uOiBTa2VsZXRvbiwgcGh5c2ljczogUGh5c2ljcykge1xuXHRcdGNvbnN0IHAgPSB0aGlzLmFwcGxpZWRQb3NlO1xuXHRcdGlmIChwLm1peCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuZGF0YSwgYW5pbWF0aW9uID0gZGF0YS5hbmltYXRpb24sIGJvbmUgPSB0aGlzLmJvbmU7XG5cdFx0aWYgKGJvbmUgIT09IG51bGwpIHtcblx0XHRcdGlmICghYm9uZS5hY3RpdmUpIHJldHVybjtcblx0XHRcdGlmIChkYXRhLmxvY2FsKSBib25lLmFwcGxpZWRQb3NlLnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0oc2tlbGV0b24pO1xuXHRcdFx0cC50aW1lID0gZGF0YS5vZmZzZXRcblx0XHRcdFx0KyAoZGF0YS5wcm9wZXJ0eS52YWx1ZShza2VsZXRvbiwgYm9uZS5hcHBsaWVkUG9zZSwgZGF0YS5sb2NhbCwgU2xpZGVyLm9mZnNldHMpIC0gZGF0YS5wcm9wZXJ0eS5vZmZzZXQpICogZGF0YS5zY2FsZTtcblx0XHRcdGlmIChkYXRhLmxvb3ApXG5cdFx0XHRcdHAudGltZSA9IGFuaW1hdGlvbi5kdXJhdGlvbiArIChwLnRpbWUgJSBhbmltYXRpb24uZHVyYXRpb24pO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRwLnRpbWUgPSBNYXRoLm1heCgwLCBwLnRpbWUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJvbmVzID0gc2tlbGV0b24uYm9uZXM7XG5cdFx0Y29uc3QgaW5kaWNlcyA9IGFuaW1hdGlvbi5ib25lcztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGFuaW1hdGlvbi5ib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRib25lc1tpbmRpY2VzW2ldXS5hcHBsaWVkUG9zZS5tb2RpZnlMb2NhbChza2VsZXRvbik7XG5cblx0XHRhbmltYXRpb24uYXBwbHkoc2tlbGV0b24sIHAudGltZSwgcC50aW1lLCBkYXRhLmxvb3AsIG51bGwsIHAubWl4LCBmYWxzZSwgZGF0YS5hZGRpdGl2ZSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0c29ydCAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0Y29uc3QgYm9uZSA9IHRoaXMuYm9uZTtcblx0XHRjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuXHRcdGlmIChib25lICYmICFkYXRhLmxvY2FsKSBza2VsZXRvbi5zb3J0Qm9uZShib25lKTtcblx0XHRza2VsZXRvbi5fdXBkYXRlQ2FjaGUucHVzaCh0aGlzKTtcblxuXHRcdGNvbnN0IGJvbmVzID0gc2tlbGV0b24uYm9uZXM7XG5cdFx0Y29uc3QgaW5kaWNlcyA9IGRhdGEuYW5pbWF0aW9uLmJvbmVzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZGF0YS5hbmltYXRpb24uYm9uZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbaW5kaWNlc1tpXV07XG5cdFx0XHRib25lLnNvcnRlZCA9IGZhbHNlO1xuXHRcdFx0c2tlbGV0b24uc29ydFJlc2V0KGJvbmUuY2hpbGRyZW4pO1xuXHRcdFx0c2tlbGV0b24uY29uc3RyYWluZWQoYm9uZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGltZWxpbmVzID0gZGF0YS5hbmltYXRpb24udGltZWxpbmVzO1xuXHRcdGNvbnN0IHNsb3RzID0gc2tlbGV0b24uc2xvdHM7XG5cdFx0Y29uc3QgY29uc3RyYWludHMgPSBza2VsZXRvbi5jb25zdHJhaW50cztcblx0XHRjb25zdCBwaHlzaWNzID0gc2tlbGV0b24ucGh5c2ljcztcblx0XHRjb25zdCBwaHlzaWNzQ291bnQgPSBza2VsZXRvbi5waHlzaWNzLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRhdGEuYW5pbWF0aW9uLnRpbWVsaW5lcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHQgPSB0aW1lbGluZXNbaV07XG5cdFx0XHRpZiAoaXNTbG90VGltZWxpbmUodCkpXG5cdFx0XHRcdHNrZWxldG9uLmNvbnN0cmFpbmVkKHNsb3RzW3Quc2xvdEluZGV4XSk7XG5cdFx0XHRlbHNlIGlmICh0IGluc3RhbmNlb2YgRHJhd09yZGVyVGltZWxpbmUgfHwgdCBpbnN0YW5jZW9mIERyYXdPcmRlckZvbGRlclRpbWVsaW5lKVxuXHRcdFx0XHRza2VsZXRvbi5kcmF3T3JkZXIuY29uc3RyYWluZWQoKTtcblx0XHRcdGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBQaHlzaWNzQ29uc3RyYWludFRpbWVsaW5lKSB7XG5cdFx0XHRcdGlmICh0LmNvbnN0cmFpbnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpaSA9IDA7IGlpIDwgcGh5c2ljc0NvdW50OyBpaSsrKVxuXHRcdFx0XHRcdFx0c2tlbGV0b24uY29uc3RyYWluZWQocGh5c2ljc1tpaV0pO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRza2VsZXRvbi5jb25zdHJhaW5lZChjb25zdHJhaW50c1t0LmNvbnN0cmFpbnRJbmRleF0pO1xuXHRcdFx0fSBlbHNlIGlmIChpc0NvbnN0cmFpbnRUaW1lbGluZSh0KSkge1xuXHRcdFx0XHRjb25zdCBjb25zdHJhaW50SW5kZXggPSB0LmNvbnN0cmFpbnRJbmRleDtcblx0XHRcdFx0aWYgKGNvbnN0cmFpbnRJbmRleCAhPT0gLTEpIHNrZWxldG9uLmNvbnN0cmFpbmVkKGNvbnN0cmFpbnRzW2NvbnN0cmFpbnRJbmRleF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl19
@@ -0,0 +1,58 @@
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 { Animation } from "./Animation.js";
30
+ import type { BoneData } from "./BoneData.js";
31
+ import { ConstraintData } from "./ConstraintData.js";
32
+ import type { Skeleton } from "./Skeleton.js";
33
+ import { Slider } from "./Slider.js";
34
+ import { SliderPose } from "./SliderPose.js";
35
+ import type { FromProperty } from "./TransformConstraintData.js";
36
+ /** Stores the setup pose for a {@link Slider}.
37
+ *
38
+ * See <a href="https://esotericsoftware.com/spine-slider-constraints">Slider constraints</a> in the Spine User Guide. */
39
+ export declare class SliderData extends ConstraintData<Slider, SliderPose> {
40
+ /** The animation the slider will apply. */
41
+ animation: Animation;
42
+ /** When true, the animation is applied by adding it to the current pose rather than overwriting it. */
43
+ additive: boolean;
44
+ /** When true, the animation repeats after its duration, otherwise the last frame is used. */
45
+ loop: boolean;
46
+ /** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */
47
+ bone: BoneData | null;
48
+ /** When a bone is set, the specified transform property is used to set the slider's {@link SliderPose.time}. */
49
+ property: FromProperty;
50
+ /** When a bone is set, this is the scale of the {@link property} value in relation to the slider time. */
51
+ scale: number;
52
+ /** When a bone is set, the offset is added to the property. */
53
+ offset: number;
54
+ /** When true and a bone is set, the bone's local transform property is read instead of its world transform. */
55
+ local: boolean;
56
+ constructor(name: string);
57
+ create(skeleton: Skeleton): Slider;
58
+ }
@@ -0,0 +1,59 @@
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 { ConstraintData } from "./ConstraintData.js";
30
+ import { Slider } from "./Slider.js";
31
+ import { SliderPose } from "./SliderPose.js";
32
+ /** Stores the setup pose for a {@link Slider}.
33
+ *
34
+ * See <a href="https://esotericsoftware.com/spine-slider-constraints">Slider constraints</a> in the Spine User Guide. */
35
+ export class SliderData extends ConstraintData {
36
+ /** The animation the slider will apply. */
37
+ animation;
38
+ /** When true, the animation is applied by adding it to the current pose rather than overwriting it. */
39
+ additive = false;
40
+ /** When true, the animation repeats after its duration, otherwise the last frame is used. */
41
+ loop = false;
42
+ /** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */
43
+ bone = null;
44
+ /** When a bone is set, the specified transform property is used to set the slider's {@link SliderPose.time}. */
45
+ property;
46
+ /** When a bone is set, this is the scale of the {@link property} value in relation to the slider time. */
47
+ scale = 0;
48
+ /** When a bone is set, the offset is added to the property. */
49
+ offset = 0;
50
+ /** When true and a bone is set, the bone's local transform property is read instead of its world transform. */
51
+ local = false;
52
+ constructor(name) {
53
+ super(name, new SliderPose());
54
+ }
55
+ create(skeleton) {
56
+ return new Slider(this, skeleton);
57
+ }
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpZGVyRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TbGlkZXJEYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHN0M7O3lIQUV5SDtBQUN6SCxNQUFNLE9BQU8sVUFBVyxTQUFRLGNBQWtDO0lBRWpFLDJDQUEyQztJQUMzQyxTQUFTLENBQWE7SUFFdEIsdUdBQXVHO0lBQ3ZHLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsNkZBQTZGO0lBQzdGLElBQUksR0FBRyxLQUFLLENBQUM7SUFFYixtR0FBbUc7SUFDbkcsSUFBSSxHQUFvQixJQUFJLENBQUM7SUFFN0IsZ0hBQWdIO0lBQ2hILFFBQVEsQ0FBZ0I7SUFFeEIsMEdBQTBHO0lBQzFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFViwrREFBK0Q7SUFDL0QsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLCtHQUErRztJQUMvRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRWQsWUFBYSxJQUFZO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNLENBQUUsUUFBa0I7UUFDaEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEFuaW1hdGlvbiB9IGZyb20gXCIuL0FuaW1hdGlvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25lRGF0YSB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgeyBDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcbmltcG9ydCB7IFNsaWRlciB9IGZyb20gXCIuL1NsaWRlci5qc1wiO1xuaW1wb3J0IHsgU2xpZGVyUG9zZSB9IGZyb20gXCIuL1NsaWRlclBvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgRnJvbVByb3BlcnR5IH0gZnJvbSBcIi4vVHJhbnNmb3JtQ29uc3RyYWludERhdGEuanNcIjtcblxuLyoqIFN0b3JlcyB0aGUgc2V0dXAgcG9zZSBmb3IgYSB7QGxpbmsgU2xpZGVyfS5cbiAqXG4gKiBTZWUgPGEgaHJlZj1cImh0dHBzOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtc2xpZGVyLWNvbnN0cmFpbnRzXCI+U2xpZGVyIGNvbnN0cmFpbnRzPC9hPiBpbiB0aGUgU3BpbmUgVXNlciBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBTbGlkZXJEYXRhIGV4dGVuZHMgQ29uc3RyYWludERhdGE8U2xpZGVyLCBTbGlkZXJQb3NlPiB7XG5cblx0LyoqIFRoZSBhbmltYXRpb24gdGhlIHNsaWRlciB3aWxsIGFwcGx5LiAqL1xuXHRhbmltYXRpb24hOiBBbmltYXRpb247XG5cblx0LyoqIFdoZW4gdHJ1ZSwgdGhlIGFuaW1hdGlvbiBpcyBhcHBsaWVkIGJ5IGFkZGluZyBpdCB0byB0aGUgY3VycmVudCBwb3NlIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIGl0LiAqL1xuXHRhZGRpdGl2ZSA9IGZhbHNlO1xuXG5cdC8qKiBXaGVuIHRydWUsIHRoZSBhbmltYXRpb24gcmVwZWF0cyBhZnRlciBpdHMgZHVyYXRpb24sIG90aGVyd2lzZSB0aGUgbGFzdCBmcmFtZSBpcyB1c2VkLiAqL1xuXHRsb29wID0gZmFsc2U7XG5cblx0LyoqIFdoZW4gc2V0LCB0aGUgYm9uZSdzIHRyYW5zZm9ybSBwcm9wZXJ0eSBpcyB1c2VkIHRvIHNldCB0aGUgc2xpZGVyJ3Mge0BsaW5rIFNsaWRlclBvc2UudGltZX0uICovXG5cdGJvbmU6IEJvbmVEYXRhIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFdoZW4gYSBib25lIGlzIHNldCwgdGhlIHNwZWNpZmllZCB0cmFuc2Zvcm0gcHJvcGVydHkgaXMgdXNlZCB0byBzZXQgdGhlIHNsaWRlcidzIHtAbGluayBTbGlkZXJQb3NlLnRpbWV9LiAqL1xuXHRwcm9wZXJ0eSE6IEZyb21Qcm9wZXJ0eTtcblxuXHQvKiogV2hlbiBhIGJvbmUgaXMgc2V0LCB0aGlzIGlzIHRoZSBzY2FsZSBvZiB0aGUge0BsaW5rIHByb3BlcnR5fSB2YWx1ZSBpbiByZWxhdGlvbiB0byB0aGUgc2xpZGVyIHRpbWUuICovXG5cdHNjYWxlID0gMDtcblxuXHQvKiogV2hlbiBhIGJvbmUgaXMgc2V0LCB0aGUgb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBwcm9wZXJ0eS4gKi9cblx0b2Zmc2V0ID0gMDtcblxuXHQvKiogV2hlbiB0cnVlIGFuZCBhIGJvbmUgaXMgc2V0LCB0aGUgYm9uZSdzIGxvY2FsIHRyYW5zZm9ybSBwcm9wZXJ0eSBpcyByZWFkIGluc3RlYWQgb2YgaXRzIHdvcmxkIHRyYW5zZm9ybS4gKi9cblx0bG9jYWwgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSwgbmV3IFNsaWRlclBvc2UoKSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlIChza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHRyZXR1cm4gbmV3IFNsaWRlcih0aGlzLCBza2VsZXRvbik7XG5cdH1cbn1cbiJdfQ==