@esotericsoftware/spine-core 4.2.116 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +27 -21
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +130 -0
  16. package/dist/BonePose.js +426 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +7 -5
  20. package/dist/ConstraintData.js +5 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +22 -28
  28. package/dist/IkConstraint.js +115 -117
  29. package/dist/IkConstraintData.d.ts +23 -18
  30. package/dist/IkConstraintData.js +32 -22
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -22
  34. package/dist/PathConstraint.js +160 -136
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +102 -94
  43. package/dist/PhysicsConstraintData.d.ts +22 -12
  44. package/dist/PhysicsConstraintData.js +23 -12
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +1 -1
  58. package/dist/SkeletonBinary.js +644 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +892 -641
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +12 -3
  98. package/dist/Utils.js +78 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7651 -6090
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7651 -6090
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
@@ -26,29 +26,16 @@
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 { Physics, Skeleton } from "./Skeleton.js";
29
+ import { Constraint } from "./Constraint.js";
30
+ import { Physics } from "./Physics.js";
31
+ import { PhysicsConstraintPose } from "./PhysicsConstraintPose.js";
32
+ import { Skeleton } from "./Skeleton.js";
30
33
  import { MathUtils } from "./Utils.js";
31
- /** Stores the current pose for a physics constraint. A physics constraint applies physics to bones.
32
- * <p>
34
+ /** Applies physics to a bone.
35
+ *
33
36
  * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
34
- export class PhysicsConstraint {
35
- data;
36
- _bone = null;
37
- /** The bone constrained by this physics constraint. */
38
- set bone(bone) { this._bone = bone; }
39
- get bone() {
40
- if (!this._bone)
41
- throw new Error("Bone not set.");
42
- else
43
- return this._bone;
44
- }
45
- inertia = 0;
46
- strength = 0;
47
- damping = 0;
48
- massInverse = 0;
49
- wind = 0;
50
- gravity = 0;
51
- mix = 0;
37
+ export class PhysicsConstraint extends Constraint {
38
+ bone;
52
39
  _reset = true;
53
40
  ux = 0;
54
41
  uy = 0;
@@ -57,72 +44,81 @@ export class PhysicsConstraint {
57
44
  tx = 0;
58
45
  ty = 0;
59
46
  xOffset = 0;
47
+ xLag = 0;
60
48
  xVelocity = 0;
61
49
  yOffset = 0;
50
+ yLag = 0;
62
51
  yVelocity = 0;
63
52
  rotateOffset = 0;
53
+ rotateLag = 0;
64
54
  rotateVelocity = 0;
65
55
  scaleOffset = 0;
56
+ scaleLag = 0;
66
57
  scaleVelocity = 0;
67
- active = false;
68
- skeleton;
69
58
  remaining = 0;
70
59
  lastTime = 0;
71
60
  constructor(data, skeleton) {
72
- this.data = data;
73
- this.skeleton = skeleton;
74
- this.bone = skeleton.bones[data.bone.index];
75
- this.inertia = data.inertia;
76
- this.strength = data.strength;
77
- this.damping = data.damping;
78
- this.massInverse = data.massInverse;
79
- this.wind = data.wind;
80
- this.gravity = data.gravity;
81
- this.mix = data.mix;
61
+ super(data, new PhysicsConstraintPose(), new PhysicsConstraintPose());
62
+ if (skeleton == null)
63
+ throw new Error("skeleton cannot be null.");
64
+ this.bone = skeleton.bones[data.bone.index].constrainedPose;
82
65
  }
83
- reset() {
66
+ copy(skeleton) {
67
+ var copy = new PhysicsConstraint(this.data, skeleton);
68
+ copy.pose.set(this.pose);
69
+ return copy;
70
+ }
71
+ /** Resets all physics state that was the result of previous movement. Use this after moving a bone to prevent physics from
72
+ * reacting to the movement. */
73
+ reset(skeleton) {
84
74
  this.remaining = 0;
85
- this.lastTime = this.skeleton.time;
75
+ this.lastTime = skeleton.time;
86
76
  this._reset = true;
87
77
  this.xOffset = 0;
78
+ this.xLag = 0;
88
79
  this.xVelocity = 0;
89
80
  this.yOffset = 0;
81
+ this.yLag = 0;
90
82
  this.yVelocity = 0;
91
83
  this.rotateOffset = 0;
84
+ this.rotateLag = 0;
92
85
  this.rotateVelocity = 0;
93
86
  this.scaleOffset = 0;
87
+ this.scaleLag = 0;
94
88
  this.scaleVelocity = 0;
95
89
  }
96
- setToSetupPose() {
97
- const data = this.data;
98
- this.inertia = data.inertia;
99
- this.strength = data.strength;
100
- this.damping = data.damping;
101
- this.massInverse = data.massInverse;
102
- this.wind = data.wind;
103
- this.gravity = data.gravity;
104
- this.mix = data.mix;
90
+ /** Translates the physics constraint so the next {@link update} forces are applied as if the bone moved an
91
+ * additional amount in world space. */
92
+ translate(x, y) {
93
+ this.ux -= x;
94
+ this.uy -= y;
95
+ this.cx -= x;
96
+ this.cy -= y;
105
97
  }
106
- isActive() {
107
- return this.active;
98
+ /** Rotates the physics constraint so the next {@link update} forces are applied as if the bone rotated
99
+ * around the specified point in world space. */
100
+ rotate(x, y, degrees) {
101
+ const r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
102
+ const dx = this.cx - x, dy = this.cy - y;
103
+ this.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);
108
104
  }
109
105
  /** Applies the constraint to the constrained bones. */
110
- update(physics) {
111
- const mix = this.mix;
112
- if (mix == 0)
106
+ update(skeleton, physics) {
107
+ const p = this.appliedPose;
108
+ const mix = p.mix;
109
+ if (mix === 0)
113
110
  return;
114
111
  const x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0;
115
112
  const bone = this.bone;
116
- const l = bone.data.length;
113
+ let l = bone.bone.data.length, t = this.data.step, z = 0;
117
114
  switch (physics) {
118
115
  case Physics.none:
119
116
  return;
117
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: fall through expected
120
118
  case Physics.reset:
121
- this.reset();
122
- // Fall through.
123
- case Physics.update:
124
- const skeleton = this.skeleton;
125
- const delta = Math.max(this.skeleton.time - this.lastTime, 0);
119
+ this.reset(skeleton); // Fall through.
120
+ case Physics.update: {
121
+ const delta = Math.max(skeleton.time - this.lastTime, 0), aa = this.remaining;
126
122
  this.remaining += delta;
127
123
  this.lastTime = skeleton.time;
128
124
  const bx = bone.worldX, by = bone.worldY;
@@ -132,8 +128,7 @@ export class PhysicsConstraint {
132
128
  this.uy = by;
133
129
  }
134
130
  else {
135
- let a = this.remaining, i = this.inertia, t = this.data.step, f = this.skeleton.data.referenceScale, d = -1;
136
- let qx = this.data.limit * delta, qy = qx * Math.abs(skeleton.scaleY);
131
+ let a = this.remaining, i = p.inertia, f = skeleton.data.referenceScale, d = -1, m = 0, e = 0, qx = this.data.limit * delta, qy = qx * Math.abs(skeleton.scaleY);
137
132
  qx *= Math.abs(skeleton.scaleX);
138
133
  if (x || y) {
139
134
  if (x) {
@@ -147,30 +142,37 @@ export class PhysicsConstraint {
147
142
  this.uy = by;
148
143
  }
149
144
  if (a >= t) {
150
- d = Math.pow(this.damping, 60 * t);
151
- const m = this.massInverse * t, e = this.strength, w = this.wind * f * skeleton.scaleX, g = this.gravity * f * skeleton.scaleY;
145
+ const xs = this.xOffset, ys = this.yOffset;
146
+ d = p.damping ** (60 * t);
147
+ m = t * p.massInverse;
148
+ e = p.strength;
149
+ const w = f * p.wind, g = f * p.gravity;
150
+ const ax = (w * skeleton.windX + g * skeleton.gravityX) * skeleton.scaleX;
151
+ const ay = (w * skeleton.windY + g * skeleton.gravityY) * skeleton.scaleY;
152
152
  do {
153
153
  if (x) {
154
- this.xVelocity += (w - this.xOffset * e) * m;
154
+ this.xVelocity += (ax - this.xOffset * e) * m;
155
155
  this.xOffset += this.xVelocity * t;
156
156
  this.xVelocity *= d;
157
157
  }
158
158
  if (y) {
159
- this.yVelocity -= (g + this.yOffset * e) * m;
159
+ this.yVelocity -= (ay + this.yOffset * e) * m;
160
160
  this.yOffset += this.yVelocity * t;
161
161
  this.yVelocity *= d;
162
162
  }
163
163
  a -= t;
164
164
  } while (a >= t);
165
+ this.xLag = this.xOffset - xs;
166
+ this.yLag = this.yOffset - ys;
165
167
  }
168
+ z = Math.max(0, 1 - a / t);
166
169
  if (x)
167
- bone.worldX += this.xOffset * mix * this.data.x;
170
+ bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x;
168
171
  if (y)
169
- bone.worldY += this.yOffset * mix * this.data.y;
172
+ bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y;
170
173
  }
171
174
  if (rotateOrShearX || scaleX) {
172
- let ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0;
173
- let dx = this.cx - bone.worldX, dy = this.cy - bone.worldY;
175
+ let ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0, dx = this.cx - bone.worldX, dy = this.cy - bone.worldY;
174
176
  if (dx > qx)
175
177
  dx = qx;
176
178
  else if (dx < -qx) //
@@ -179,11 +181,13 @@ export class PhysicsConstraint {
179
181
  dy = qy;
180
182
  else if (dy < -qy) //
181
183
  dy = -qy;
184
+ a = this.remaining;
182
185
  if (rotateOrShearX) {
183
186
  mr = (this.data.rotate + this.data.shearX) * mix;
184
- let r = Math.atan2(dy + this.ty, dx + this.tx) - ca - this.rotateOffset * mr;
187
+ z = this.rotateLag * Math.max(0, 1 - aa / t);
188
+ let r = Math.atan2(dy + this.ty, dx + this.tx) - ca - (this.rotateOffset - z) * mr;
185
189
  this.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i;
186
- r = this.rotateOffset * mr + ca;
190
+ r = (this.rotateOffset - z) * mr + ca;
187
191
  c = Math.cos(r);
188
192
  s = Math.sin(r);
189
193
  if (scaleX) {
@@ -195,24 +199,28 @@ export class PhysicsConstraint {
195
199
  else {
196
200
  c = Math.cos(ca);
197
201
  s = Math.sin(ca);
198
- const r = l * bone.getWorldScaleX();
202
+ const r = l * bone.getWorldScaleX() - this.scaleLag * Math.max(0, 1 - aa / t);
199
203
  if (r > 0)
200
204
  this.scaleOffset += (dx * c + dy * s) * i / r;
201
205
  }
202
- a = this.remaining;
203
206
  if (a >= t) {
204
- if (d == -1)
205
- d = Math.pow(this.damping, 60 * t);
206
- const m = this.massInverse * t, e = this.strength, w = this.wind, g = (Skeleton.yDown ? -this.gravity : this.gravity), h = l / f;
207
+ if (d === -1) {
208
+ d = p.damping ** (60 * t);
209
+ m = t * p.massInverse;
210
+ e = p.strength;
211
+ }
212
+ const ax = p.wind * skeleton.windX + p.gravity * skeleton.gravityX;
213
+ const ay = (p.wind * skeleton.windY + p.gravity * skeleton.gravityY) * Skeleton.yDir;
214
+ const rs = this.rotateOffset, ss = this.scaleOffset, h = l / f;
207
215
  while (true) {
208
216
  a -= t;
209
217
  if (scaleX) {
210
- this.scaleVelocity += (w * c - g * s - this.scaleOffset * e) * m;
218
+ this.scaleVelocity += (ax * c - ay * s - this.scaleOffset * e) * m;
211
219
  this.scaleOffset += this.scaleVelocity * t;
212
220
  this.scaleVelocity *= d;
213
221
  }
214
222
  if (rotateOrShearX) {
215
- this.rotateVelocity -= ((w * s + g * c) * h + this.rotateOffset * e) * m;
223
+ this.rotateVelocity -= ((ax * s + ay * c) * h + this.rotateOffset * e) * m;
216
224
  this.rotateOffset += this.rotateVelocity * t;
217
225
  this.rotateVelocity *= d;
218
226
  if (a < t)
@@ -224,21 +232,26 @@ export class PhysicsConstraint {
224
232
  else if (a < t) //
225
233
  break;
226
234
  }
235
+ this.rotateLag = this.rotateOffset - rs;
236
+ this.scaleLag = this.scaleOffset - ss;
227
237
  }
238
+ z = Math.max(0, 1 - a / t);
228
239
  }
229
240
  this.remaining = a;
230
241
  }
231
242
  this.cx = bone.worldX;
232
243
  this.cy = bone.worldY;
233
244
  break;
245
+ }
234
246
  case Physics.pose:
247
+ z = Math.max(0, 1 - this.remaining / t);
235
248
  if (x)
236
- bone.worldX += this.xOffset * mix * this.data.x;
249
+ bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x;
237
250
  if (y)
238
- bone.worldY += this.yOffset * mix * this.data.y;
251
+ bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y;
239
252
  }
240
253
  if (rotateOrShearX) {
241
- let o = this.rotateOffset * mix, s = 0, c = 0, a = 0;
254
+ let o = (this.rotateOffset - this.rotateLag * z) * mix, s = 0, c = 0, a = 0;
242
255
  if (this.data.shearX > 0) {
243
256
  let r = 0;
244
257
  if (this.data.rotate > 0) {
@@ -269,30 +282,25 @@ export class PhysicsConstraint {
269
282
  }
270
283
  }
271
284
  if (scaleX) {
272
- const s = 1 + this.scaleOffset * mix * this.data.scaleX;
285
+ const s = 1 + (this.scaleOffset - this.scaleLag * z) * mix * this.data.scaleX;
273
286
  bone.a *= s;
274
287
  bone.c *= s;
275
288
  }
276
- if (physics != Physics.pose) {
289
+ if (physics !== Physics.pose) {
277
290
  this.tx = l * bone.a;
278
291
  this.ty = l * bone.c;
279
292
  }
280
- bone.updateAppliedTransform();
293
+ bone.modifyWorld(skeleton._update);
281
294
  }
282
- /** Translates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone moved an additional
283
- * amount in world space. */
284
- translate(x, y) {
285
- this.ux -= x;
286
- this.uy -= y;
287
- this.cx -= x;
288
- this.cy -= y;
295
+ sort(skeleton) {
296
+ const bone = this.bone.bone;
297
+ skeleton.sortBone(bone);
298
+ skeleton._updateCache.push(this);
299
+ skeleton.sortReset(bone.children);
300
+ skeleton.constrained(bone);
289
301
  }
290
- /** Rotates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone rotated around the
291
- * specified point in world space. */
292
- rotate(x, y, degrees) {
293
- const r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
294
- const dx = this.cx - x, dy = this.cy - y;
295
- this.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);
302
+ isSourceActive() {
303
+ return this.bone.bone.active;
296
304
  }
297
305
  }
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGh5c2ljc0NvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHdkM7OzBIQUUwSDtBQUMxSCxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLElBQUksQ0FBd0I7SUFDN0IsS0FBSyxHQUFnQixJQUFJLENBQUM7SUFDbEMsdURBQXVEO0lBQ3ZELElBQVcsSUFBSSxDQUFFLElBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBVyxJQUFJO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTs7WUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxHQUFHLENBQUMsQ0FBQztJQUVSLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7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KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBCb25lIH0gZnJvbSBcIi4vQm9uZS5qc1wiO1xuaW1wb3J0IHsgUGh5c2ljc0NvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBQaHlzaWNzLCBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBVcGRhdGFibGUgfSBmcm9tIFwiLi9VcGRhdGFibGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscyB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cblxuLyoqIFN0b3JlcyB0aGUgY3VycmVudCBwb3NlIGZvciBhIHBoeXNpY3MgY29uc3RyYWludC4gQSBwaHlzaWNzIGNvbnN0cmFpbnQgYXBwbGllcyBwaHlzaWNzIHRvIGJvbmVzLlxuICogPHA+XG4gKiBTZWUgPGEgaHJlZj1cImh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1waHlzaWNzLWNvbnN0cmFpbnRzXCI+UGh5c2ljcyBjb25zdHJhaW50czwvYT4gaW4gdGhlIFNwaW5lIFVzZXIgR3VpZGUuICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnQgaW1wbGVtZW50cyBVcGRhdGFibGUge1xuXHRyZWFkb25seSBkYXRhOiBQaHlzaWNzQ29uc3RyYWludERhdGE7XG5cdHByaXZhdGUgX2JvbmU6IEJvbmUgfCBudWxsID0gbnVsbDtcblx0LyoqIFRoZSBib25lIGNvbnN0cmFpbmVkIGJ5IHRoaXMgcGh5c2ljcyBjb25zdHJhaW50LiAqL1xuXHRwdWJsaWMgc2V0IGJvbmUgKGJvbmU6IEJvbmUpIHsgdGhpcy5fYm9uZSA9IGJvbmU7IH1cblx0cHVibGljIGdldCBib25lICgpIHtcblx0XHRpZiAoIXRoaXMuX2JvbmUpIHRocm93IG5ldyBFcnJvcihcIkJvbmUgbm90IHNldC5cIilcblx0XHRlbHNlIHJldHVybiB0aGlzLl9ib25lO1xuXHR9XG5cdGluZXJ0aWEgPSAwO1xuXHRzdHJlbmd0aCA9IDA7XG5cdGRhbXBpbmcgPSAwO1xuXHRtYXNzSW52ZXJzZSA9IDA7XG5cdHdpbmQgPSAwO1xuXHRncmF2aXR5ID0gMDtcblx0bWl4ID0gMDtcblxuXHRfcmVzZXQgPSB0cnVlO1xuXHR1eCA9IDA7XG5cdHV5ID0gMDtcblx0Y3ggPSAwO1xuXHRjeSA9IDA7XG5cdHR4ID0gMDtcblx0dHkgPSAwO1xuXHR4T2Zmc2V0ID0gMDtcblx0eFZlbG9jaXR5ID0gMDtcblx0eU9mZnNldCA9IDA7XG5cdHlWZWxvY2l0eSA9IDA7XG5cdHJvdGF0ZU9mZnNldCA9IDA7XG5cdHJvdGF0ZVZlbG9jaXR5ID0gMDtcblx0c2NhbGVPZmZzZXQgPSAwXG5cdHNjYWxlVmVsb2NpdHkgPSAwO1xuXG5cdGFjdGl2ZSA9IGZhbHNlO1xuXG5cdHJlYWRvbmx5IHNrZWxldG9uOiBTa2VsZXRvbjtcblx0cmVtYWluaW5nID0gMDtcblx0bGFzdFRpbWUgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBQaHlzaWNzQ29uc3RyYWludERhdGEsIHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cdFx0dGhpcy5za2VsZXRvbiA9IHNrZWxldG9uO1xuXG5cdFx0dGhpcy5ib25lID0gc2tlbGV0b24uYm9uZXNbZGF0YS5ib25lLmluZGV4XTtcblxuXHRcdHRoaXMuaW5lcnRpYSA9IGRhdGEuaW5lcnRpYTtcblx0XHR0aGlzLnN0cmVuZ3RoID0gZGF0YS5zdHJlbmd0aDtcblx0XHR0aGlzLmRhbXBpbmcgPSBkYXRhLmRhbXBpbmc7XG5cdFx0dGhpcy5tYXNzSW52ZXJzZSA9IGRhdGEubWFzc0ludmVyc2U7XG5cdFx0dGhpcy53aW5kID0gZGF0YS53aW5kO1xuXHRcdHRoaXMuZ3Jhdml0eSA9IGRhdGEuZ3Jhdml0eTtcblx0XHR0aGlzLm1peCA9IGRhdGEubWl4O1xuXHR9XG5cblx0cmVzZXQgKCkge1xuXHRcdHRoaXMucmVtYWluaW5nID0gMDtcblx0XHR0aGlzLmxhc3RUaW1lID0gdGhpcy5za2VsZXRvbi50aW1lO1xuXHRcdHRoaXMuX3Jlc2V0ID0gdHJ1ZTtcblx0XHR0aGlzLnhPZmZzZXQgPSAwO1xuXHRcdHRoaXMueFZlbG9jaXR5ID0gMDtcblx0XHR0aGlzLnlPZmZzZXQgPSAwO1xuXHRcdHRoaXMueVZlbG9jaXR5ID0gMDtcblx0XHR0aGlzLnJvdGF0ZU9mZnNldCA9IDA7XG5cdFx0dGhpcy5yb3RhdGVWZWxvY2l0eSA9IDA7XG5cdFx0dGhpcy5zY2FsZU9mZnNldCA9IDA7XG5cdFx0dGhpcy5zY2FsZVZlbG9jaXR5ID0gMDtcblx0fVxuXG5cdHNldFRvU2V0dXBQb3NlICgpIHtcblx0XHRjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuXHRcdHRoaXMuaW5lcnRpYSA9IGRhdGEuaW5lcnRpYTtcblx0XHR0aGlzLnN0cmVuZ3RoID0gZGF0YS5zdHJlbmd0aDtcblx0XHR0aGlzLmRhbXBpbmcgPSBkYXRhLmRhbXBpbmc7XG5cdFx0dGhpcy5tYXNzSW52ZXJzZSA9IGRhdGEubWFzc0ludmVyc2U7XG5cdFx0dGhpcy53aW5kID0gZGF0YS53aW5kO1xuXHRcdHRoaXMuZ3Jhdml0eSA9IGRhdGEuZ3Jhdml0eTtcblx0XHR0aGlzLm1peCA9IGRhdGEubWl4O1xuXHR9XG5cblx0aXNBY3RpdmUgKCkge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZTtcblx0fVxuXG5cdC8qKiBBcHBsaWVzIHRoZSBjb25zdHJhaW50IHRvIHRoZSBjb25zdHJhaW5lZCBib25lcy4gKi9cblx0dXBkYXRlIChwaHlzaWNzOiBQaHlzaWNzKSB7XG5cdFx0Y29uc3QgbWl4ID0gdGhpcy5taXg7XG5cdFx0aWYgKG1peCA9PSAwKSByZXR1cm47XG5cblx0XHRjb25zdCB4ID0gdGhpcy5kYXRhLnggPiAwLCB5ID0gdGhpcy5kYXRhLnkgPiAwLCByb3RhdGVPclNoZWFyWCA9IHRoaXMuZGF0YS5yb3RhdGUgPiAwIHx8IHRoaXMuZGF0YS5zaGVhclggPiAwLCBzY2FsZVggPSB0aGlzLmRhdGEuc2NhbGVYID4gMDtcblx0XHRjb25zdCBib25lID0gdGhpcy5ib25lO1xuXHRcdGNvbnN0IGwgPSBib25lLmRhdGEubGVuZ3RoO1xuXG5cdFx0c3dpdGNoIChwaHlzaWNzKSB7XG5cdFx0XHRjYXNlIFBoeXNpY3Mubm9uZTpcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0Y2FzZSBQaHlzaWNzLnJlc2V0OlxuXHRcdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0XHQvLyBGYWxsIHRocm91Z2guXG5cdFx0XHRjYXNlIFBoeXNpY3MudXBkYXRlOlxuXHRcdFx0XHRjb25zdCBza2VsZXRvbiA9IHRoaXMuc2tlbGV0b247XG5cdFx0XHRcdGNvbnN0IGRlbHRhID0gTWF0aC5tYXgodGhpcy5za2VsZXRvbi50aW1lIC0gdGhpcy5sYXN0VGltZSwgMCk7XG5cdFx0XHRcdHRoaXMucmVtYWluaW5nICs9IGRlbHRhO1xuXHRcdFx0XHR0aGlzLmxhc3RUaW1lID0gc2tlbGV0b24udGltZTtcblxuXHRcdFx0XHRjb25zdCBieCA9IGJvbmUud29ybGRYLCBieSA9IGJvbmUud29ybGRZO1xuXHRcdFx0XHRpZiAodGhpcy5fcmVzZXQpIHtcblx0XHRcdFx0XHR0aGlzLl9yZXNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMudXggPSBieDtcblx0XHRcdFx0XHR0aGlzLnV5ID0gYnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV0IGEgPSB0aGlzLnJlbWFpbmluZywgaSA9IHRoaXMuaW5lcnRpYSwgdCA9IHRoaXMuZGF0YS5zdGVwLCBmID0gdGhpcy5za2VsZXRvbi5kYXRhLnJlZmVyZW5jZVNjYWxlLCBkID0gLTE7XG5cdFx0XHRcdFx0bGV0IHF4ID0gdGhpcy5kYXRhLmxpbWl0ICogZGVsdGEsIHF5ID0gcXggKiBNYXRoLmFicyhza2VsZXRvbi5zY2FsZVkpO1xuXHRcdFx0XHRcdHF4ICo9IE1hdGguYWJzKHNrZWxldG9uLnNjYWxlWCk7XG5cdFx0XHRcdFx0aWYgKHggfHwgeSkge1xuXHRcdFx0XHRcdFx0aWYgKHgpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdSA9ICh0aGlzLnV4IC0gYngpICogaTtcblx0XHRcdFx0XHRcdFx0dGhpcy54T2Zmc2V0ICs9IHUgPiBxeCA/IHF4IDogdSA8IC1xeCA/IC1xeCA6IHU7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXggPSBieDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh5KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHUgPSAodGhpcy51eSAtIGJ5KSAqIGk7XG5cdFx0XHRcdFx0XHRcdHRoaXMueU9mZnNldCArPSB1ID4gcXkgPyBxeSA6IHUgPCAtcXkgPyAtcXkgOiB1O1xuXHRcdFx0XHRcdFx0XHR0aGlzLnV5ID0gYnk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYSA+PSB0KSB7XG5cdFx0XHRcdFx0XHRcdGQgPSBNYXRoLnBvdyh0aGlzLmRhbXBpbmcsIDYwICogdCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG0gPSB0aGlzLm1hc3NJbnZlcnNlICogdCwgZSA9IHRoaXMuc3RyZW5ndGgsIHcgPSB0aGlzLndpbmQgKiBmICogc2tlbGV0b24uc2NhbGVYLCBnID0gdGhpcy5ncmF2aXR5ICogZiAqIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnhWZWxvY2l0eSArPSAodyAtIHRoaXMueE9mZnNldCAqIGUpICogbTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMueE9mZnNldCArPSB0aGlzLnhWZWxvY2l0eSAqIHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnhWZWxvY2l0eSAqPSBkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZiAoeSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy55VmVsb2NpdHkgLT0gKGcgKyB0aGlzLnlPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnlPZmZzZXQgKz0gdGhpcy55VmVsb2NpdHkgKiB0O1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy55VmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YSAtPSB0O1xuXHRcdFx0XHRcdFx0XHR9IHdoaWxlIChhID49IHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHgpIGJvbmUud29ybGRYICs9IHRoaXMueE9mZnNldCAqIG1peCAqIHRoaXMuZGF0YS54O1xuXHRcdFx0XHRcdFx0aWYgKHkpIGJvbmUud29ybGRZICs9IHRoaXMueU9mZnNldCAqIG1peCAqIHRoaXMuZGF0YS55O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocm90YXRlT3JTaGVhclggfHwgc2NhbGVYKSB7XG5cdFx0XHRcdFx0XHRsZXQgY2EgPSBNYXRoLmF0YW4yKGJvbmUuYywgYm9uZS5hKSwgYyA9IDAsIHMgPSAwLCBtciA9IDA7XG5cdFx0XHRcdFx0XHRsZXQgZHggPSB0aGlzLmN4IC0gYm9uZS53b3JsZFgsIGR5ID0gdGhpcy5jeSAtIGJvbmUud29ybGRZO1xuXHRcdFx0XHRcdFx0aWYgKGR4ID4gcXgpXG5cdFx0XHRcdFx0XHRcdGR4ID0gcXg7XG5cdFx0XHRcdFx0XHRlbHNlIGlmIChkeCA8IC1xeCkgLy9cblx0XHRcdFx0XHRcdFx0ZHggPSAtcXg7XG5cdFx0XHRcdFx0XHRpZiAoZHkgPiBxeSlcblx0XHRcdFx0XHRcdFx0ZHkgPSBxeTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKGR5IDwgLXF5KSAvL1xuXHRcdFx0XHRcdFx0XHRkeSA9IC1xeTtcblx0XHRcdFx0XHRcdGlmIChyb3RhdGVPclNoZWFyWCkge1xuXHRcdFx0XHRcdFx0XHRtciA9ICh0aGlzLmRhdGEucm90YXRlICsgdGhpcy5kYXRhLnNoZWFyWCkgKiBtaXg7XG5cdFx0XHRcdFx0XHRcdGxldCByID0gTWF0aC5hdGFuMihkeSArIHRoaXMudHksIGR4ICsgdGhpcy50eCkgLSBjYSAtIHRoaXMucm90YXRlT2Zmc2V0ICogbXI7XG5cdFx0XHRcdFx0XHRcdHRoaXMucm90YXRlT2Zmc2V0ICs9IChyIC0gTWF0aC5jZWlsKHIgKiBNYXRoVXRpbHMuaW52UEkyIC0gMC41KSAqIE1hdGhVdGlscy5QSTIpICogaTtcblx0XHRcdFx0XHRcdFx0ciA9IHRoaXMucm90YXRlT2Zmc2V0ICogbXIgKyBjYTtcblx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdFx0XHRzID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0XHRcdGlmIChzY2FsZVgpIHtcblx0XHRcdFx0XHRcdFx0XHRyID0gbCAqIGJvbmUuZ2V0V29ybGRTY2FsZVgoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAociA+IDApIHRoaXMuc2NhbGVPZmZzZXQgKz0gKGR4ICogYyArIGR5ICogcykgKiBpIC8gcjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKGNhKTtcblx0XHRcdFx0XHRcdFx0cyA9IE1hdGguc2luKGNhKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgciA9IGwgKiBib25lLmdldFdvcmxkU2NhbGVYKCk7XG5cdFx0XHRcdFx0XHRcdGlmIChyID4gMCkgdGhpcy5zY2FsZU9mZnNldCArPSAoZHggKiBjICsgZHkgKiBzKSAqIGkgLyByO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YSA9IHRoaXMucmVtYWluaW5nO1xuXHRcdFx0XHRcdFx0aWYgKGEgPj0gdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZCA9PSAtMSkgZCA9IE1hdGgucG93KHRoaXMuZGFtcGluZywgNjAgKiB0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbSA9IHRoaXMubWFzc0ludmVyc2UgKiB0LCBlID0gdGhpcy5zdHJlbmd0aCwgdyA9IHRoaXMud2luZCwgZyA9IChTa2VsZXRvbi55RG93biA/IC10aGlzLmdyYXZpdHkgOiB0aGlzLmdyYXZpdHkpLCBoID0gbCAvIGY7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YSAtPSB0O1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzY2FsZVgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2NhbGVWZWxvY2l0eSArPSAodyAqIGMgLSBnICogcyAtIHRoaXMuc2NhbGVPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNjYWxlT2Zmc2V0ICs9IHRoaXMuc2NhbGVWZWxvY2l0eSAqIHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNjYWxlVmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJvdGF0ZU9yU2hlYXJYKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZVZlbG9jaXR5IC09ICgodyAqIHMgKyBnICogYykgKiBoICsgdGhpcy5yb3RhdGVPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZU9mZnNldCArPSB0aGlzLnJvdGF0ZVZlbG9jaXR5ICogdDtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucm90YXRlVmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhIDwgdCkgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCByID0gdGhpcy5yb3RhdGVPZmZzZXQgKiBtciArIGNhO1xuXHRcdFx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cyA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYSA8IHQpIC8vXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnJlbWFpbmluZyA9IGE7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5jeCA9IGJvbmUud29ybGRYO1xuXHRcdFx0XHR0aGlzLmN5ID0gYm9uZS53b3JsZFk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBQaHlzaWNzLnBvc2U6XG5cdFx0XHRcdGlmICh4KSBib25lLndvcmxkWCArPSB0aGlzLnhPZmZzZXQgKiBtaXggKiB0aGlzLmRhdGEueDtcblx0XHRcdFx0aWYgKHkpIGJvbmUud29ybGRZICs9IHRoaXMueU9mZnNldCAqIG1peCAqIHRoaXMuZGF0YS55O1xuXHRcdH1cblxuXHRcdGlmIChyb3RhdGVPclNoZWFyWCkge1xuXHRcdFx0bGV0IG8gPSB0aGlzLnJvdGF0ZU9mZnNldCAqIG1peCwgcyA9IDAsIGMgPSAwLCBhID0gMDtcblx0XHRcdGlmICh0aGlzLmRhdGEuc2hlYXJYID4gMCkge1xuXHRcdFx0XHRsZXQgciA9IDA7XG5cdFx0XHRcdGlmICh0aGlzLmRhdGEucm90YXRlID4gMCkge1xuXHRcdFx0XHRcdHIgPSBvICogdGhpcy5kYXRhLnJvdGF0ZTtcblx0XHRcdFx0XHRzID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdGEgPSBib25lLmI7XG5cdFx0XHRcdFx0Ym9uZS5iID0gYyAqIGEgLSBzICogYm9uZS5kO1xuXHRcdFx0XHRcdGJvbmUuZCA9IHMgKiBhICsgYyAqIGJvbmUuZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyICs9IG8gKiB0aGlzLmRhdGEuc2hlYXJYO1xuXHRcdFx0XHRzID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdGMgPSBNYXRoLmNvcyhyKTtcblx0XHRcdFx0YSA9IGJvbmUuYTtcblx0XHRcdFx0Ym9uZS5hID0gYyAqIGEgLSBzICogYm9uZS5jO1xuXHRcdFx0XHRib25lLmMgPSBzICogYSArIGMgKiBib25lLmM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvICo9IHRoaXMuZGF0YS5yb3RhdGU7XG5cdFx0XHRcdHMgPSBNYXRoLnNpbihvKTtcblx0XHRcdFx0YyA9IE1hdGguY29zKG8pO1xuXHRcdFx0XHRhID0gYm9uZS5hO1xuXHRcdFx0XHRib25lLmEgPSBjICogYSAtIHMgKiBib25lLmM7XG5cdFx0XHRcdGJvbmUuYyA9IHMgKiBhICsgYyAqIGJvbmUuYztcblx0XHRcdFx0YSA9IGJvbmUuYjtcblx0XHRcdFx0Ym9uZS5iID0gYyAqIGEgLSBzICogYm9uZS5kO1xuXHRcdFx0XHRib25lLmQgPSBzICogYSArIGMgKiBib25lLmQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzY2FsZVgpIHtcblx0XHRcdGNvbnN0IHMgPSAxICsgdGhpcy5zY2FsZU9mZnNldCAqIG1peCAqIHRoaXMuZGF0YS5zY2FsZVg7XG5cdFx0XHRib25lLmEgKj0gcztcblx0XHRcdGJvbmUuYyAqPSBzO1xuXHRcdH1cblx0XHRpZiAocGh5c2ljcyAhPSBQaHlzaWNzLnBvc2UpIHtcblx0XHRcdHRoaXMudHggPSBsICogYm9uZS5hO1xuXHRcdFx0dGhpcy50eSA9IGwgKiBib25lLmM7XG5cdFx0fVxuXHRcdGJvbmUudXBkYXRlQXBwbGllZFRyYW5zZm9ybSgpO1xuXHR9XG5cblx0LyoqIFRyYW5zbGF0ZXMgdGhlIHBoeXNpY3MgY29uc3RyYWludCBzbyBuZXh0IHtAbGluayAjdXBkYXRlKFBoeXNpY3MpfSBmb3JjZXMgYXJlIGFwcGxpZWQgYXMgaWYgdGhlIGJvbmUgbW92ZWQgYW4gYWRkaXRpb25hbFxuXHQgKiBhbW91bnQgaW4gd29ybGQgc3BhY2UuICovXG5cdHRyYW5zbGF0ZSAoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcblx0XHR0aGlzLnV4IC09IHg7XG5cdFx0dGhpcy51eSAtPSB5O1xuXHRcdHRoaXMuY3ggLT0geDtcblx0XHR0aGlzLmN5IC09IHk7XG5cdH1cblxuXHQvKiogUm90YXRlcyB0aGUgcGh5c2ljcyBjb25zdHJhaW50IHNvIG5leHQge0BsaW5rICN1cGRhdGUoUGh5c2ljcyl9IGZvcmNlcyBhcmUgYXBwbGllZCBhcyBpZiB0aGUgYm9uZSByb3RhdGVkIGFyb3VuZCB0aGVcblx0ICogc3BlY2lmaWVkIHBvaW50IGluIHdvcmxkIHNwYWNlLiAqL1xuXHRyb3RhdGUgKHg6IG51bWJlciwgeTogbnVtYmVyLCBkZWdyZWVzOiBudW1iZXIpIHtcblx0XHRjb25zdCByID0gZGVncmVlcyAqIE1hdGhVdGlscy5kZWdSYWQsIGNvcyA9IE1hdGguY29zKHIpLCBzaW4gPSBNYXRoLnNpbihyKTtcblx0XHRjb25zdCBkeCA9IHRoaXMuY3ggLSB4LCBkeSA9IHRoaXMuY3kgLSB5O1xuXHRcdHRoaXMudHJhbnNsYXRlKGR4ICogY29zIC0gZHkgKiBzaW4gLSBkeCwgZHggKiBzaW4gKyBkeSAqIGNvcyAtIGR5KTtcblx0fVxufVxuIl19
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGh5c2ljc0NvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd2Qzs7MEhBRTBIO0FBQzFILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxVQUEyRTtJQUNqSCxJQUFJLENBQVc7SUFFZixNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixXQUFXLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsUUFBUSxHQUFHLENBQUMsQ0FBQTtJQUNaLGFBQWEs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Q0FBQztJQUVELElBQUksQ0FBRSxRQUFrQjtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0NBRUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB0eXBlIHsgQm9uZVBvc2UgfSBmcm9tIFwiLi9Cb25lUG9zZS5qc1wiO1xuaW1wb3J0IHsgQ29uc3RyYWludCB9IGZyb20gXCIuL0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB7IFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzaWNzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBoeXNpY3NDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBNYXRoVXRpbHMgfSBmcm9tIFwiLi9VdGlscy5qc1wiO1xuXG5cbi8qKiBBcHBsaWVzIHBoeXNpY3MgdG8gYSBib25lLlxuICpcbiAqIFNlZSA8YSBocmVmPVwiaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXBoeXNpY3MtY29uc3RyYWludHNcIj5QaHlzaWNzIGNvbnN0cmFpbnRzPC9hPiBpbiB0aGUgU3BpbmUgVXNlciBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludCBleHRlbmRzIENvbnN0cmFpbnQ8UGh5c2ljc0NvbnN0cmFpbnQsIFBoeXNpY3NDb25zdHJhaW50RGF0YSwgUGh5c2ljc0NvbnN0cmFpbnRQb3NlPiB7XG5cdGJvbmU6IEJvbmVQb3NlO1xuXG5cdF9yZXNldCA9IHRydWU7XG5cdHV4ID0gMDtcblx0dXkgPSAwO1xuXHRjeCA9IDA7XG5cdGN5ID0gMDtcblx0dHggPSAwO1xuXHR0eSA9IDA7XG5cdHhPZmZzZXQgPSAwO1xuXHR4TGFnID0gMDtcblx0eFZlbG9jaXR5ID0gMDtcblx0eU9mZnNldCA9IDA7XG5cdHlMYWcgPSAwO1xuXHR5VmVsb2NpdHkgPSAwO1xuXHRyb3RhdGVPZmZzZXQgPSAwO1xuXHRyb3RhdGVMYWcgPSAwO1xuXHRyb3RhdGVWZWxvY2l0eSA9IDA7XG5cdHNjYWxlT2Zmc2V0ID0gMFxuXHRzY2FsZUxhZyA9IDBcblx0c2NhbGVWZWxvY2l0eSA9IDA7XG5cdHJlbWFpbmluZyA9IDA7XG5cdGxhc3RUaW1lID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoZGF0YTogUGh5c2ljc0NvbnN0cmFpbnREYXRhLCBza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHRzdXBlcihkYXRhLCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRQb3NlKCksIG5ldyBQaHlzaWNzQ29uc3RyYWludFBvc2UoKSk7XG5cdFx0aWYgKHNrZWxldG9uID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcInNrZWxldG9uIGNhbm5vdCBiZSBudWxsLlwiKTtcblxuXHRcdHRoaXMuYm9uZSA9IHNrZWxldG9uLmJvbmVzW2RhdGEuYm9uZS5pbmRleF0uY29uc3RyYWluZWRQb3NlO1xuXHR9XG5cblx0cHVibGljIGNvcHkgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdHZhciBjb3B5ID0gbmV3IFBoeXNpY3NDb25zdHJhaW50KHRoaXMuZGF0YSwgc2tlbGV0b24pO1xuXHRcdGNvcHkucG9zZS5zZXQodGhpcy5wb3NlKTtcblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdC8qKiBSZXNldHMgYWxsIHBoeXNpY3Mgc3RhdGUgdGhhdCB3YXMgdGhlIHJlc3VsdCBvZiBwcmV2aW91cyBtb3ZlbWVudC4gVXNlIHRoaXMgYWZ0ZXIgbW92aW5nIGEgYm9uZSB0byBwcmV2ZW50IHBoeXNpY3MgZnJvbVxuXHQgKiByZWFjdGluZyB0byB0aGUgbW92ZW1lbnQuICovXG5cdHJlc2V0IChza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHR0aGlzLnJlbWFpbmluZyA9IDA7XG5cdFx0dGhpcy5sYXN0VGltZSA9IHNrZWxldG9uLnRpbWU7XG5cdFx0dGhpcy5fcmVzZXQgPSB0cnVlO1xuXHRcdHRoaXMueE9mZnNldCA9IDA7XG5cdFx0dGhpcy54TGFnID0gMDtcblx0XHR0aGlzLnhWZWxvY2l0eSA9IDA7XG5cdFx0dGhpcy55T2Zmc2V0ID0gMDtcblx0XHR0aGlzLnlMYWcgPSAwO1xuXHRcdHRoaXMueVZlbG9jaXR5ID0gMDtcblx0XHR0aGlzLnJvdGF0ZU9mZnNldCA9IDA7XG5cdFx0dGhpcy5yb3RhdGVMYWcgPSAwO1xuXHRcdHRoaXMucm90YXRlVmVsb2NpdHkgPSAwO1xuXHRcdHRoaXMuc2NhbGVPZmZzZXQgPSAwO1xuXHRcdHRoaXMuc2NhbGVMYWcgPSAwO1xuXHRcdHRoaXMuc2NhbGVWZWxvY2l0eSA9IDA7XG5cdH1cblxuXHQvKiogVHJhbnNsYXRlcyB0aGUgcGh5c2ljcyBjb25zdHJhaW50IHNvIHRoZSBuZXh0IHtAbGluayB1cGRhdGV9IGZvcmNlcyBhcmUgYXBwbGllZCBhcyBpZiB0aGUgYm9uZSBtb3ZlZCBhblxuXHQgKiBhZGRpdGlvbmFsIGFtb3VudCBpbiB3b3JsZCBzcGFjZS4gKi9cblx0dHJhbnNsYXRlICh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdHRoaXMudXggLT0geDtcblx0XHR0aGlzLnV5IC09IHk7XG5cdFx0dGhpcy5jeCAtPSB4O1xuXHRcdHRoaXMuY3kgLT0geTtcblx0fVxuXG5cdC8qKiBSb3RhdGVzIHRoZSBwaHlzaWNzIGNvbnN0cmFpbnQgc28gdGhlIG5leHQge0BsaW5rIHVwZGF0ZX0gZm9yY2VzIGFyZSBhcHBsaWVkIGFzIGlmIHRoZSBib25lIHJvdGF0ZWRcblx0ICogYXJvdW5kIHRoZSBzcGVjaWZpZWQgcG9pbnQgaW4gd29ybGQgc3BhY2UuICovXG5cdHJvdGF0ZSAoeDogbnVtYmVyLCB5OiBudW1iZXIsIGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGNvbnN0IHIgPSBkZWdyZWVzICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdGNvbnN0IGR4ID0gdGhpcy5jeCAtIHgsIGR5ID0gdGhpcy5jeSAtIHk7XG5cdFx0dGhpcy50cmFuc2xhdGUoZHggKiBjb3MgLSBkeSAqIHNpbiAtIGR4LCBkeCAqIHNpbiArIGR5ICogY29zIC0gZHkpO1xuXHR9XG5cblx0LyoqIEFwcGxpZXMgdGhlIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbmVkIGJvbmVzLiAqL1xuXHR1cGRhdGUgKHNrZWxldG9uOiBTa2VsZXRvbiwgcGh5c2ljczogUGh5c2ljcykge1xuXHRcdGNvbnN0IHAgPSB0aGlzLmFwcGxpZWRQb3NlO1xuXHRcdGNvbnN0IG1peCA9IHAubWl4O1xuXHRcdGlmIChtaXggPT09IDApIHJldHVybjtcblxuXHRcdGNvbnN0IHggPSB0aGlzLmRhdGEueCA+IDAsIHkgPSB0aGlzLmRhdGEueSA+IDAsIHJvdGF0ZU9yU2hlYXJYID0gdGhpcy5kYXRhLnJvdGF0ZSA+IDAgfHwgdGhpcy5kYXRhLnNoZWFyWCA+IDAsIHNjYWxlWCA9IHRoaXMuZGF0YS5zY2FsZVggPiAwO1xuXHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmU7XG5cdFx0bGV0IGwgPSBib25lLmJvbmUuZGF0YS5sZW5ndGgsIHQgPSB0aGlzLmRhdGEuc3RlcCwgeiA9IDA7XG5cblx0XHRzd2l0Y2ggKHBoeXNpY3MpIHtcblx0XHRcdGNhc2UgUGh5c2ljcy5ub25lOlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6IGZhbGwgdGhyb3VnaCBleHBlY3RlZFxuXHRcdFx0Y2FzZSBQaHlzaWNzLnJlc2V0OlxuXHRcdFx0XHR0aGlzLnJlc2V0KHNrZWxldG9uKTsgLy8gRmFsbCB0aHJvdWdoLlxuXHRcdFx0Y2FzZSBQaHlzaWNzLnVwZGF0ZToge1xuXHRcdFx0XHRjb25zdCBkZWx0YSA9IE1hdGgubWF4KHNrZWxldG9uLnRpbWUgLSB0aGlzLmxhc3RUaW1lLCAwKSwgYWEgPSB0aGlzLnJlbWFpbmluZztcblx0XHRcdFx0dGhpcy5yZW1haW5pbmcgKz0gZGVsdGE7XG5cdFx0XHRcdHRoaXMubGFzdFRpbWUgPSBza2VsZXRvbi50aW1lO1xuXG5cdFx0XHRcdGNvbnN0IGJ4ID0gYm9uZS53b3JsZFgsIGJ5ID0gYm9uZS53b3JsZFk7XG5cdFx0XHRcdGlmICh0aGlzLl9yZXNldCkge1xuXHRcdFx0XHRcdHRoaXMuX3Jlc2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy51eCA9IGJ4O1xuXHRcdFx0XHRcdHRoaXMudXkgPSBieTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXQgYSA9IHRoaXMucmVtYWluaW5nLCBpID0gcC5pbmVydGlhLCBmID0gc2tlbGV0b24uZGF0YS5yZWZlcmVuY2VTY2FsZSwgZCA9IC0xLCBtID0gMCwgZSA9IDAsIHF4ID0gdGhpcy5kYXRhLmxpbWl0ICogZGVsdGEsXG5cdFx0XHRcdFx0XHRxeSA9IHF4ICogTWF0aC5hYnMoc2tlbGV0b24uc2NhbGVZKTtcblx0XHRcdFx0XHRxeCAqPSBNYXRoLmFicyhza2VsZXRvbi5zY2FsZVgpO1xuXHRcdFx0XHRcdGlmICh4IHx8IHkpIHtcblx0XHRcdFx0XHRcdGlmICh4KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHUgPSAodGhpcy51eCAtIGJ4KSAqIGk7XG5cdFx0XHRcdFx0XHRcdHRoaXMueE9mZnNldCArPSB1ID4gcXggPyBxeCA6IHUgPCAtcXggPyAtcXggOiB1O1xuXHRcdFx0XHRcdFx0XHR0aGlzLnV4ID0gYng7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoeSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1ID0gKHRoaXMudXkgLSBieSkgKiBpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnlPZmZzZXQgKz0gdSA+IHF5ID8gcXkgOiB1IDwgLXF5ID8gLXF5IDogdTtcblx0XHRcdFx0XHRcdFx0dGhpcy51eSA9IGJ5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGEgPj0gdCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB4cyA9IHRoaXMueE9mZnNldCwgeXMgPSB0aGlzLnlPZmZzZXQ7XG5cdFx0XHRcdFx0XHRcdGQgPSBwLmRhbXBpbmcgKiogKDYwICogdCk7XG5cdFx0XHRcdFx0XHRcdG0gPSB0ICogcC5tYXNzSW52ZXJzZTtcblx0XHRcdFx0XHRcdFx0ZSA9IHAuc3RyZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHcgPSBmICogcC53aW5kLCBnID0gZiAqIHAuZ3Jhdml0eTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXggPSAodyAqIHNrZWxldG9uLndpbmRYICsgZyAqIHNrZWxldG9uLmdyYXZpdHlYKSAqIHNrZWxldG9uLnNjYWxlWDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXkgPSAodyAqIHNrZWxldG9uLndpbmRZICsgZyAqIHNrZWxldG9uLmdyYXZpdHlZKSAqIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnhWZWxvY2l0eSArPSAoYXggLSB0aGlzLnhPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnhPZmZzZXQgKz0gdGhpcy54VmVsb2NpdHkgKiB0O1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy54VmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMueVZlbG9jaXR5IC09IChheSArIHRoaXMueU9mZnNldCAqIGUpICogbTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMueU9mZnNldCArPSB0aGlzLnlWZWxvY2l0eSAqIHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnlWZWxvY2l0eSAqPSBkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhIC09IHQ7XG5cdFx0XHRcdFx0XHRcdH0gd2hpbGUgKGEgPj0gdCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMueExhZyA9IHRoaXMueE9mZnNldCAtIHhzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnlMYWcgPSB0aGlzLnlPZmZzZXQgLSB5cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHogPSBNYXRoLm1heCgwLCAxIC0gYSAvIHQpO1xuXHRcdFx0XHRcdFx0aWYgKHgpIGJvbmUud29ybGRYICs9ICh0aGlzLnhPZmZzZXQgLSB0aGlzLnhMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS54O1xuXHRcdFx0XHRcdFx0aWYgKHkpIGJvbmUud29ybGRZICs9ICh0aGlzLnlPZmZzZXQgLSB0aGlzLnlMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS55O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocm90YXRlT3JTaGVhclggfHwgc2NhbGVYKSB7XG5cdFx0XHRcdFx0XHRsZXQgY2EgPSBNYXRoLmF0YW4yKGJvbmUuYywgYm9uZS5hKSwgYyA9IDAsIHMgPSAwLCBtciA9IDAsIGR4ID0gdGhpcy5jeCAtIGJvbmUud29ybGRYLCBkeSA9IHRoaXMuY3kgLSBib25lLndvcmxkWTtcblx0XHRcdFx0XHRcdGlmIChkeCA+IHF4KVxuXHRcdFx0XHRcdFx0XHRkeCA9IHF4O1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoZHggPCAtcXgpIC8vXG5cdFx0XHRcdFx0XHRcdGR4ID0gLXF4O1xuXHRcdFx0XHRcdFx0aWYgKGR5ID4gcXkpXG5cdFx0XHRcdFx0XHRcdGR5ID0gcXk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmIChkeSA8IC1xeSkgLy9cblx0XHRcdFx0XHRcdFx0ZHkgPSAtcXk7XG5cdFx0XHRcdFx0XHRhID0gdGhpcy5yZW1haW5pbmc7XG5cdFx0XHRcdFx0XHRpZiAocm90YXRlT3JTaGVhclgpIHtcblx0XHRcdFx0XHRcdFx0bXIgPSAodGhpcy5kYXRhLnJvdGF0ZSArIHRoaXMuZGF0YS5zaGVhclgpICogbWl4O1xuXHRcdFx0XHRcdFx0XHR6ID0gdGhpcy5yb3RhdGVMYWcgKiBNYXRoLm1heCgwLCAxIC0gYWEgLyB0KTtcblx0XHRcdFx0XHRcdFx0bGV0IHIgPSBNYXRoLmF0YW4yKGR5ICsgdGhpcy50eSwgZHggKyB0aGlzLnR4KSAtIGNhIC0gKHRoaXMucm90YXRlT2Zmc2V0IC0geikgKiBtcjtcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3RhdGVPZmZzZXQgKz0gKHIgLSBNYXRoLmNlaWwociAqIE1hdGhVdGlscy5pbnZQSTIgLSAwLjUpICogTWF0aFV0aWxzLlBJMikgKiBpO1xuXHRcdFx0XHRcdFx0XHRyID0gKHRoaXMucm90YXRlT2Zmc2V0IC0geikgKiBtciArIGNhO1xuXHRcdFx0XHRcdFx0XHRjID0gTWF0aC5jb3Mocik7XG5cdFx0XHRcdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0XHRcdFx0aWYgKHNjYWxlWCkge1xuXHRcdFx0XHRcdFx0XHRcdHIgPSBsICogYm9uZS5nZXRXb3JsZFNjYWxlWCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChyID4gMCkgdGhpcy5zY2FsZU9mZnNldCArPSAoZHggKiBjICsgZHkgKiBzKSAqIGkgLyByO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjID0gTWF0aC5jb3MoY2EpO1xuXHRcdFx0XHRcdFx0XHRzID0gTWF0aC5zaW4oY2EpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCByID0gbCAqIGJvbmUuZ2V0V29ybGRTY2FsZVgoKSAtIHRoaXMuc2NhbGVMYWcgKiBNYXRoLm1heCgwLCAxIC0gYWEgLyB0KTtcblx0XHRcdFx0XHRcdFx0aWYgKHIgPiAwKSB0aGlzLnNjYWxlT2Zmc2V0ICs9IChkeCAqIGMgKyBkeSAqIHMpICogaSAvIHI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYSA+PSB0KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChkID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdGQgPSBwLmRhbXBpbmcgKiogKDYwICogdCk7XG5cdFx0XHRcdFx0XHRcdFx0bSA9IHQgKiBwLm1hc3NJbnZlcnNlO1xuXHRcdFx0XHRcdFx0XHRcdGUgPSBwLnN0cmVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGF4ID0gcC53aW5kICogc2tlbGV0b24ud2luZFggKyBwLmdyYXZpdHkgKiBza2VsZXRvbi5ncmF2aXR5WDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXkgPSAocC53aW5kICogc2tlbGV0b24ud2luZFkgKyBwLmdyYXZpdHkgKiBza2VsZXRvbi5ncmF2aXR5WSkgKiBTa2VsZXRvbi55RGlyO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBycyA9IHRoaXMucm90YXRlT2Zmc2V0LCBzcyA9IHRoaXMuc2NhbGVPZmZzZXQsIGggPSBsIC8gZjtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRhIC09IHQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNjYWxlWCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zY2FsZVZlbG9jaXR5ICs9IChheCAqIGMgLSBheSAqIHMgLSB0aGlzLnNjYWxlT2Zmc2V0ICogZSkgKiBtO1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zY2FsZU9mZnNldCArPSB0aGlzLnNjYWxlVmVsb2NpdHkgKiB0O1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zY2FsZVZlbG9jaXR5ICo9IGQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChyb3RhdGVPclNoZWFyWCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yb3RhdGVWZWxvY2l0eSAtPSAoKGF4ICogcyArIGF5ICogYykgKiBoICsgdGhpcy5yb3RhdGVPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZU9mZnNldCArPSB0aGlzLnJvdGF0ZVZlbG9jaXR5ICogdDtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucm90YXRlVmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhIDwgdCkgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCByID0gdGhpcy5yb3RhdGVPZmZzZXQgKiBtciArIGNhO1xuXHRcdFx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cyA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYSA8IHQpIC8vXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZUxhZyA9IHRoaXMucm90YXRlT2Zmc2V0IC0gcnM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2NhbGVMYWcgPSB0aGlzLnNjYWxlT2Zmc2V0IC0gc3M7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR6ID0gTWF0aC5tYXgoMCwgMSAtIGEgLyB0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5yZW1haW5pbmcgPSBhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuY3ggPSBib25lLndvcmxkWDtcblx0XHRcdFx0dGhpcy5jeSA9IGJvbmUud29ybGRZO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgUGh5c2ljcy5wb3NlOlxuXHRcdFx0XHR6ID0gTWF0aC5tYXgoMCwgMSAtIHRoaXMucmVtYWluaW5nIC8gdCk7XG5cdFx0XHRcdGlmICh4KSBib25lLndvcmxkWCArPSAodGhpcy54T2Zmc2V0IC0gdGhpcy54TGFnICogeikgKiBtaXggKiB0aGlzLmRhdGEueDtcblx0XHRcdFx0aWYgKHkpIGJvbmUud29ybGRZICs9ICh0aGlzLnlPZmZzZXQgLSB0aGlzLnlMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS55O1xuXHRcdH1cblxuXHRcdGlmIChyb3RhdGVPclNoZWFyWCkge1xuXHRcdFx0bGV0IG8gPSAodGhpcy5yb3RhdGVPZmZzZXQgLSB0aGlzLnJvdGF0ZUxhZyAqIHopICogbWl4LCBzID0gMCwgYyA9IDAsIGEgPSAwO1xuXHRcdFx0aWYgKHRoaXMuZGF0YS5zaGVhclggPiAwKSB7XG5cdFx0XHRcdGxldCByID0gMDtcblx0XHRcdFx0aWYgKHRoaXMuZGF0YS5yb3RhdGUgPiAwKSB7XG5cdFx0XHRcdFx0ciA9IG8gKiB0aGlzLmRhdGEucm90YXRlO1xuXHRcdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0XHRjID0gTWF0aC5jb3Mocik7XG5cdFx0XHRcdFx0YSA9IGJvbmUuYjtcblx0XHRcdFx0XHRib25lLmIgPSBjICogYSAtIHMgKiBib25lLmQ7XG5cdFx0XHRcdFx0Ym9uZS5kID0gcyAqIGEgKyBjICogYm9uZS5kO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHIgKz0gbyAqIHRoaXMuZGF0YS5zaGVhclg7XG5cdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRhID0gYm9uZS5hO1xuXHRcdFx0XHRib25lLmEgPSBjICogYSAtIHMgKiBib25lLmM7XG5cdFx0XHRcdGJvbmUuYyA9IHMgKiBhICsgYyAqIGJvbmUuYztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gKj0gdGhpcy5kYXRhLnJvdGF0ZTtcblx0XHRcdFx0cyA9IE1hdGguc2luKG8pO1xuXHRcdFx0XHRjID0gTWF0aC5jb3Mobyk7XG5cdFx0XHRcdGEgPSBib25lLmE7XG5cdFx0XHRcdGJvbmUuYSA9IGMgKiBhIC0gcyAqIGJvbmUuYztcblx0XHRcdFx0Ym9uZS5jID0gcyAqIGEgKyBjICogYm9uZS5jO1xuXHRcdFx0XHRhID0gYm9uZS5iO1xuXHRcdFx0XHRib25lLmIgPSBjICogYSAtIHMgKiBib25lLmQ7XG5cdFx0XHRcdGJvbmUuZCA9IHMgKiBhICsgYyAqIGJvbmUuZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNjYWxlWCkge1xuXHRcdFx0Y29uc3QgcyA9IDEgKyAodGhpcy5zY2FsZU9mZnNldCAtIHRoaXMuc2NhbGVMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS5zY2FsZVg7XG5cdFx0XHRib25lLmEgKj0gcztcblx0XHRcdGJvbmUuYyAqPSBzO1xuXHRcdH1cblx0XHRpZiAocGh5c2ljcyAhPT0gUGh5c2ljcy5wb3NlKSB7XG5cdFx0XHR0aGlzLnR4ID0gbCAqIGJvbmUuYTtcblx0XHRcdHRoaXMudHkgPSBsICogYm9uZS5jO1xuXHRcdH1cblx0XHRib25lLm1vZGlmeVdvcmxkKHNrZWxldG9uLl91cGRhdGUpO1xuXHR9XG5cblx0c29ydCAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0Y29uc3QgYm9uZSA9IHRoaXMuYm9uZS5ib25lO1xuXHRcdHNrZWxldG9uLnNvcnRCb25lKGJvbmUpO1xuXHRcdHNrZWxldG9uLl91cGRhdGVDYWNoZS5wdXNoKHRoaXMpO1xuXHRcdHNrZWxldG9uLnNvcnRSZXNldChib25lLmNoaWxkcmVuKTtcblx0XHRza2VsZXRvbi5jb25zdHJhaW5lZChib25lKTtcblx0fVxuXG5cdGlzU291cmNlQWN0aXZlICgpIHtcblx0XHRyZXR1cm4gdGhpcy5ib25lLmJvbmUuYWN0aXZlO1xuXHR9XG5cbn1cbiJdfQ==
@@ -26,37 +26,47 @@
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 { PhysicsConstraint } from "./PhysicsConstraint.js";
32
+ import { PhysicsConstraintPose } from "./PhysicsConstraintPose.js";
33
+ import type { Skeleton } from "./Skeleton.js";
31
34
  /** Stores the setup pose for a {@link PhysicsConstraint}.
32
- * <p>
35
+ *
33
36
  * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
34
- export declare class PhysicsConstraintData extends ConstraintData {
35
- private _bone;
37
+ export declare class PhysicsConstraintData extends ConstraintData<PhysicsConstraint, PhysicsConstraintPose> {
36
38
  /** The bone constrained by this physics constraint. */
37
39
  set bone(boneData: BoneData);
38
40
  get bone(): BoneData;
41
+ private _bone;
42
+ /** Physics influence on x translation, 0-1. */
39
43
  x: number;
44
+ /** Physics influence on y translation, 0-1. */
40
45
  y: number;
46
+ /** Physics influence on rotation, 0-1. */
41
47
  rotate: number;
48
+ /** Physics influence on scaleX, 0-1. */
42
49
  scaleX: number;
50
+ /** Physics influence on shearX, 0-1. */
43
51
  shearX: number;
52
+ /** Movement greater than the limit will not have a greater affect on physics. */
44
53
  limit: number;
54
+ /** The time in milliseconds required to advanced the physics simulation one step. */
45
55
  step: number;
46
- inertia: number;
47
- strength: number;
48
- damping: number;
49
- massInverse: number;
50
- wind: number;
51
- gravity: number;
52
- /** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */
53
- mix: number;
56
+ /** True when this constraint's inertia is controlled by global slider timelines. */
54
57
  inertiaGlobal: boolean;
58
+ /** True when this constraint's strength is controlled by global slider timelines. */
55
59
  strengthGlobal: boolean;
60
+ /** True when this constraint's damping is controlled by global slider timelines. */
56
61
  dampingGlobal: boolean;
62
+ /** True when this constraint's mass is controlled by global slider timelines. */
57
63
  massGlobal: boolean;
64
+ /** True when this constraint's wind is controlled by global slider timelines. */
58
65
  windGlobal: boolean;
66
+ /** True when this constraint's gravity is controlled by global slider timelines. */
59
67
  gravityGlobal: boolean;
68
+ /** True when this constraint's mix is controlled by global slider timelines. */
60
69
  mixGlobal: boolean;
61
70
  constructor(name: string);
71
+ create(skeleton: Skeleton): PhysicsConstraint;
62
72
  }
@@ -27,11 +27,12 @@
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
29
  import { ConstraintData } from "./ConstraintData.js";
30
+ import { PhysicsConstraint } from "./PhysicsConstraint.js";
31
+ import { PhysicsConstraintPose } from "./PhysicsConstraintPose.js";
30
32
  /** Stores the setup pose for a {@link PhysicsConstraint}.
31
- * <p>
33
+ *
32
34
  * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
33
35
  export class PhysicsConstraintData extends ConstraintData {
34
- _bone = null;
35
36
  /** The bone constrained by this physics constraint. */
36
37
  set bone(boneData) { this._bone = boneData; }
37
38
  get bone() {
@@ -40,30 +41,40 @@ export class PhysicsConstraintData extends ConstraintData {
40
41
  else
41
42
  return this._bone;
42
43
  }
44
+ _bone = null;
45
+ /** Physics influence on x translation, 0-1. */
43
46
  x = 0;
47
+ /** Physics influence on y translation, 0-1. */
44
48
  y = 0;
49
+ /** Physics influence on rotation, 0-1. */
45
50
  rotate = 0;
51
+ /** Physics influence on scaleX, 0-1. */
46
52
  scaleX = 0;
53
+ /** Physics influence on shearX, 0-1. */
47
54
  shearX = 0;
55
+ /** Movement greater than the limit will not have a greater affect on physics. */
48
56
  limit = 0;
57
+ /** The time in milliseconds required to advanced the physics simulation one step. */
49
58
  step = 0;
50
- inertia = 0;
51
- strength = 0;
52
- damping = 0;
53
- massInverse = 0;
54
- wind = 0;
55
- gravity = 0;
56
- /** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */
57
- mix = 0;
59
+ /** True when this constraint's inertia is controlled by global slider timelines. */
58
60
  inertiaGlobal = false;
61
+ /** True when this constraint's strength is controlled by global slider timelines. */
59
62
  strengthGlobal = false;
63
+ /** True when this constraint's damping is controlled by global slider timelines. */
60
64
  dampingGlobal = false;
65
+ /** True when this constraint's mass is controlled by global slider timelines. */
61
66
  massGlobal = false;
67
+ /** True when this constraint's wind is controlled by global slider timelines. */
62
68
  windGlobal = false;
69
+ /** True when this constraint's gravity is controlled by global slider timelines. */
63
70
  gravityGlobal = false;
71
+ /** True when this constraint's mix is controlled by global slider timelines. */
64
72
  mixGlobal = false;
65
73
  constructor(name) {
66
- super(name, 0, false);
74
+ super(name, new PhysicsConstraintPose());
75
+ }
76
+ create(skeleton) {
77
+ return new PhysicsConstraint(this, skeleton);
67
78
  }
68
79
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BoeXNpY3NDb25zdHJhaW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3JEOzswSEFFMEg7QUFDMUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGNBQWM7SUFDaEQsS0FBSyxHQUFvQixJQUFJLENBQUM7SUFDdEMsdURBQXVEO0lBQ3ZELElBQVcsSUFBSSxDQUFFLFFBQWtCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQVcsSUFBSTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTs7WUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNOLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLGdHQUFnRztJQUNoRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1IsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVsQixZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBCb25lRGF0YSB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgeyBDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL0NvbnN0cmFpbnREYXRhLmpzXCI7XG5cblxuLyoqIFN0b3JlcyB0aGUgc2V0dXAgcG9zZSBmb3IgYSB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnR9LlxuICogPHA+XG4gKiBTZWUgPGEgaHJlZj1cImh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1waHlzaWNzLWNvbnN0cmFpbnRzXCI+UGh5c2ljcyBjb25zdHJhaW50czwvYT4gaW4gdGhlIFNwaW5lIFVzZXIgR3VpZGUuICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnREYXRhIGV4dGVuZHMgQ29uc3RyYWludERhdGEge1xuXHRwcml2YXRlIF9ib25lOiBCb25lRGF0YSB8IG51bGwgPSBudWxsO1xuXHQvKiogVGhlIGJvbmUgY29uc3RyYWluZWQgYnkgdGhpcyBwaHlzaWNzIGNvbnN0cmFpbnQuICovXG5cdHB1YmxpYyBzZXQgYm9uZSAoYm9uZURhdGE6IEJvbmVEYXRhKSB7IHRoaXMuX2JvbmUgPSBib25lRGF0YTsgfVxuXHRwdWJsaWMgZ2V0IGJvbmUgKCkge1xuXHRcdGlmICghdGhpcy5fYm9uZSkgdGhyb3cgbmV3IEVycm9yKFwiQm9uZURhdGEgbm90IHNldC5cIilcblx0XHRlbHNlIHJldHVybiB0aGlzLl9ib25lO1xuXHR9XG5cblx0eCA9IDA7XG5cdHkgPSAwO1xuXHRyb3RhdGUgPSAwO1xuXHRzY2FsZVggPSAwO1xuXHRzaGVhclggPSAwO1xuXHRsaW1pdCA9IDA7XG5cdHN0ZXAgPSAwO1xuXHRpbmVydGlhID0gMDtcblx0c3RyZW5ndGggPSAwO1xuXHRkYW1waW5nID0gMDtcblx0bWFzc0ludmVyc2UgPSAwO1xuXHR3aW5kID0gMDtcblx0Z3Jhdml0eSA9IDA7XG5cdC8qKiBBIHBlcmNlbnRhZ2UgKDAtMSkgdGhhdCBjb250cm9scyB0aGUgbWl4IGJldHdlZW4gdGhlIGNvbnN0cmFpbmVkIGFuZCB1bmNvbnN0cmFpbmVkIHBvc2VzLiAqL1xuXHRtaXggPSAwO1xuXHRpbmVydGlhR2xvYmFsID0gZmFsc2U7XG5cdHN0cmVuZ3RoR2xvYmFsID0gZmFsc2U7XG5cdGRhbXBpbmdHbG9iYWwgPSBmYWxzZTtcblx0bWFzc0dsb2JhbCA9IGZhbHNlO1xuXHR3aW5kR2xvYmFsID0gZmFsc2U7XG5cdGdyYXZpdHlHbG9iYWwgPSBmYWxzZTtcblx0bWl4R2xvYmFsID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUsIDAsIGZhbHNlKTtcblx0fVxufVxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BoeXNpY3NDb25zdHJhaW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSW5FOzswSEFFMEg7QUFDMUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGNBQXdEO0lBQ2xHLHVEQUF1RDtJQUN2RCxJQUFXLElBQUksQ0FBRSxRQUFrQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFXLElBQUk7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7O1lBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBQ08sS0FBSyxHQUFvQixJQUFJLENBQUM7SUFFdEMsK0NBQStDO0lBQy9DLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwrQ0FBK0M7SUFDL0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLDBDQUEwQztJQUMxQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0NBQXdDO0lBQ3hDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3Q0FBd0M7SUFDeEMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLGlGQUFpRjtJQUNqRixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRVYscUZBQXFGO0lBQ3JGLElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCxvRkFBb0Y7SUFDcEYsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixxRkFBcUY7SUFDckYsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUV2QixvRkFBb0Y7SUFDcEYsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixpRkFBaUY7SUFDakYsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVuQixpRkFBaUY7SUFDakYsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVuQixvRkFBb0Y7SUFDcEYsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixnRkFBZ0Y7SUFDaEYsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVsQixZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sTUFBTSxDQUFFLFFBQWtCO1FBQ2hDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmVEYXRhIH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB7IENvbnN0cmFpbnREYXRhIH0gZnJvbSBcIi4vQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFBoeXNpY3NDb25zdHJhaW50IH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB7IFBoeXNpY3NDb25zdHJhaW50UG9zZSB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50UG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5cblxuLyoqIFN0b3JlcyB0aGUgc2V0dXAgcG9zZSBmb3IgYSB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnR9LlxuICpcbiAqIFNlZSA8YSBocmVmPVwiaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXBoeXNpY3MtY29uc3RyYWludHNcIj5QaHlzaWNzIGNvbnN0cmFpbnRzPC9hPiBpbiB0aGUgU3BpbmUgVXNlciBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludERhdGEgZXh0ZW5kcyBDb25zdHJhaW50RGF0YTxQaHlzaWNzQ29uc3RyYWludCwgUGh5c2ljc0NvbnN0cmFpbnRQb3NlPiB7XG5cdC8qKiBUaGUgYm9uZSBjb25zdHJhaW5lZCBieSB0aGlzIHBoeXNpY3MgY29uc3RyYWludC4gKi9cblx0cHVibGljIHNldCBib25lIChib25lRGF0YTogQm9uZURhdGEpIHsgdGhpcy5fYm9uZSA9IGJvbmVEYXRhOyB9XG5cdHB1YmxpYyBnZXQgYm9uZSAoKSB7XG5cdFx0aWYgKCF0aGlzLl9ib25lKSB0aHJvdyBuZXcgRXJyb3IoXCJCb25lRGF0YSBub3Qgc2V0LlwiKVxuXHRcdGVsc2UgcmV0dXJuIHRoaXMuX2JvbmU7XG5cdH1cblx0cHJpdmF0ZSBfYm9uZTogQm9uZURhdGEgfCBudWxsID0gbnVsbDtcblxuXHQvKiogUGh5c2ljcyBpbmZsdWVuY2Ugb24geCB0cmFuc2xhdGlvbiwgMC0xLiAqL1xuXHR4ID0gMDtcblxuXHQvKiogUGh5c2ljcyBpbmZsdWVuY2Ugb24geSB0cmFuc2xhdGlvbiwgMC0xLiAqL1xuXHR5ID0gMDtcblxuXHQvKiogUGh5c2ljcyBpbmZsdWVuY2Ugb24gcm90YXRpb24sIDAtMS4gKi9cblx0cm90YXRlID0gMDtcblxuXHQvKiogUGh5c2ljcyBpbmZsdWVuY2Ugb24gc2NhbGVYLCAwLTEuICovXG5cdHNjYWxlWCA9IDA7XG5cblx0LyoqIFBoeXNpY3MgaW5mbHVlbmNlIG9uIHNoZWFyWCwgMC0xLiAqL1xuXHRzaGVhclggPSAwO1xuXG5cdC8qKiBNb3ZlbWVudCBncmVhdGVyIHRoYW4gdGhlIGxpbWl0IHdpbGwgbm90IGhhdmUgYSBncmVhdGVyIGFmZmVjdCBvbiBwaHlzaWNzLiAqL1xuXHRsaW1pdCA9IDA7XG5cblx0LyoqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyByZXF1aXJlZCB0byBhZHZhbmNlZCB0aGUgcGh5c2ljcyBzaW11bGF0aW9uIG9uZSBzdGVwLiAqL1xuXHRzdGVwID0gMDtcblxuXHQvKiogVHJ1ZSB3aGVuIHRoaXMgY29uc3RyYWludCdzIGluZXJ0aWEgaXMgY29udHJvbGxlZCBieSBnbG9iYWwgc2xpZGVyIHRpbWVsaW5lcy4gKi9cblx0aW5lcnRpYUdsb2JhbCA9IGZhbHNlO1xuXG5cdC8qKiBUcnVlIHdoZW4gdGhpcyBjb25zdHJhaW50J3Mgc3RyZW5ndGggaXMgY29udHJvbGxlZCBieSBnbG9iYWwgc2xpZGVyIHRpbWVsaW5lcy4gKi9cblx0c3RyZW5ndGhHbG9iYWwgPSBmYWxzZTtcblxuXHQvKiogVHJ1ZSB3aGVuIHRoaXMgY29uc3RyYWludCdzIGRhbXBpbmcgaXMgY29udHJvbGxlZCBieSBnbG9iYWwgc2xpZGVyIHRpbWVsaW5lcy4gKi9cblx0ZGFtcGluZ0dsb2JhbCA9IGZhbHNlO1xuXG5cdC8qKiBUcnVlIHdoZW4gdGhpcyBjb25zdHJhaW50J3MgbWFzcyBpcyBjb250cm9sbGVkIGJ5IGdsb2JhbCBzbGlkZXIgdGltZWxpbmVzLiAqL1xuXHRtYXNzR2xvYmFsID0gZmFsc2U7XG5cblx0LyoqIFRydWUgd2hlbiB0aGlzIGNvbnN0cmFpbnQncyB3aW5kIGlzIGNvbnRyb2xsZWQgYnkgZ2xvYmFsIHNsaWRlciB0aW1lbGluZXMuICovXG5cdHdpbmRHbG9iYWwgPSBmYWxzZTtcblxuXHQvKiogVHJ1ZSB3aGVuIHRoaXMgY29uc3RyYWludCdzIGdyYXZpdHkgaXMgY29udHJvbGxlZCBieSBnbG9iYWwgc2xpZGVyIHRpbWVsaW5lcy4gKi9cblx0Z3Jhdml0eUdsb2JhbCA9IGZhbHNlO1xuXG5cdC8qKiBUcnVlIHdoZW4gdGhpcyBjb25zdHJhaW50J3MgbWl4IGlzIGNvbnRyb2xsZWQgYnkgZ2xvYmFsIHNsaWRlciB0aW1lbGluZXMuICovXG5cdG1peEdsb2JhbCA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lLCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRQb3NlKCkpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZSAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0cmV0dXJuIG5ldyBQaHlzaWNzQ29uc3RyYWludCh0aGlzLCBza2VsZXRvbik7XG5cdH1cbn1cbiJdfQ==