@esotericsoftware/spine-core 4.3.0 → 4.3.2

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.
@@ -97,6 +97,8 @@ export declare class BonePose implements Pose<BonePose>, Update {
97
97
  * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local transform after
98
98
  * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */
99
99
  updateLocalTransform(skeleton: Skeleton): void;
100
+ private set4;
101
+ private set5;
100
102
  /** If the world transform has been modified by constraints and the local transform no longer matches,
101
103
  * {@link updateLocalTransform} is called. Call this after {@link Skeleton.updateWorldTransform} before
102
104
  * using the applied local transform. */
package/dist/BonePose.js CHANGED
@@ -148,76 +148,71 @@ export class BonePose {
148
148
  return;
149
149
  }
150
150
  case Inherit.OnlyTranslation: {
151
+ const sx = skeleton.scaleX, sy = skeleton.scaleY;
151
152
  const rx = (rotation + shearX) * MathUtils.degRad;
152
153
  const ry = (rotation + 90 + shearY) * MathUtils.degRad;
153
- this.a = Math.cos(rx) * scaleX;
154
- this.b = Math.cos(ry) * scaleY;
155
- this.c = Math.sin(rx) * scaleX;
156
- this.d = Math.sin(ry) * scaleY;
154
+ this.a = Math.cos(rx) * scaleX * sx;
155
+ this.b = Math.cos(ry) * scaleY * sx;
156
+ this.c = Math.sin(rx) * scaleX * sy;
157
+ this.d = Math.sin(ry) * scaleY * sy;
157
158
  break;
158
159
  }
159
160
  case Inherit.NoRotationOrReflection: {
160
- const sx = 1 / skeleton.scaleX, sy = 1 / skeleton.scaleY;
161
- pa *= sx;
162
- pc *= sy;
161
+ const sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;
162
+ pa *= sxi;
163
+ pc *= syi;
163
164
  let s = pa * pa + pc * pc;
164
- let prx = 0;
165
- if (s > 0.0001) {
166
- s = Math.abs(pa * pd * sy - pb * sx * pc) / s;
165
+ let r = 0;
166
+ if (s > MathUtils.epsilon2) {
167
+ s = Math.abs(pa * pd * syi - pb * sxi * pc) / s;
167
168
  pb = pc * s;
168
169
  pd = pa * s;
169
- prx = MathUtils.atan2Deg(pc, pa);
170
+ r = rotation - MathUtils.atan2Deg(pc, pa);
170
171
  }
171
172
  else {
172
173
  pa = 0;
173
174
  pc = 0;
174
- prx = 90 - MathUtils.atan2Deg(pd, pb);
175
+ r = rotation - 90 + MathUtils.atan2Deg(pd, pb);
175
176
  }
176
- const rx = (rotation + shearX - prx) * MathUtils.degRad;
177
- const ry = (rotation + shearY - prx + 90) * MathUtils.degRad;
177
+ const rx = (r + shearX) * MathUtils.degRad;
178
+ const ry = (r + shearY + 90) * MathUtils.degRad;
178
179
  const la = Math.cos(rx) * scaleX;
179
180
  const lb = Math.cos(ry) * scaleY;
180
181
  const lc = Math.sin(rx) * scaleX;
181
182
  const ld = Math.sin(ry) * scaleY;
182
- this.a = pa * la - pb * lc;
183
- this.b = pa * lb - pb * ld;
184
- this.c = pc * la + pd * lc;
185
- this.d = pc * lb + pd * ld;
183
+ this.a = (pa * la - pb * lc) * sx;
184
+ this.b = (pa * lb - pb * ld) * sx;
185
+ this.c = (pc * la + pd * lc) * sy;
186
+ this.d = (pc * lb + pd * ld) * sy;
186
187
  break;
187
188
  }
188
189
  case Inherit.NoScale:
189
190
  case Inherit.NoScaleOrReflection: {
190
- let r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
191
- let za = (pa * cos + pb * sin) / skeleton.scaleX;
192
- let zc = (pc * cos + pd * sin) / skeleton.scaleY;
193
- let s = Math.sqrt(za * za + zc * zc);
194
- if (s > 0.00001)
195
- s = 1 / s;
191
+ const sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;
192
+ const r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
193
+ let za = (pa * cos + pb * sin) * sxi;
194
+ let zc = (pc * cos + pd * sin) * syi;
195
+ const s = 1 / Math.sqrt(za * za + zc * zc);
196
196
  za *= s;
197
197
  zc *= s;
198
- s = Math.sqrt(za * za + zc * zc);
199
- if (this.inherit === Inherit.NoScale && (pa * pd - pb * pc < 0) !== (skeleton.scaleX < 0 !== skeleton.scaleY < 0))
200
- s = -s;
201
- r = Math.PI / 2 + Math.atan2(zc, za);
202
- const zb = Math.cos(r) * s;
203
- const zd = Math.sin(r) * s;
198
+ let zb = -zc, zd = za;
199
+ if (this.inherit === Inherit.NoScale && pa * pd - pb * pc < 0 !== (sx < 0 !== sy < 0)) {
200
+ zb = -zb;
201
+ zd = -zd;
202
+ }
204
203
  const rx = shearX * MathUtils.degRad;
205
204
  const ry = (90 + shearY) * MathUtils.degRad;
206
205
  const la = Math.cos(rx) * scaleX;
207
206
  const lb = Math.cos(ry) * scaleY;
208
207
  const lc = Math.sin(rx) * scaleX;
209
208
  const ld = Math.sin(ry) * scaleY;
210
- this.a = za * la + zb * lc;
211
- this.b = za * lb + zb * ld;
212
- this.c = zc * la + zd * lc;
213
- this.d = zc * lb + zd * ld;
209
+ this.a = (za * la + zb * lc) * sx;
210
+ this.b = (za * lb + zb * ld) * sx;
211
+ this.c = (zc * la + zd * lc) * sy;
212
+ this.d = (zc * lb + zd * ld) * sy;
214
213
  break;
215
214
  }
216
215
  }
217
- this.a *= skeleton.scaleX;
218
- this.b *= skeleton.scaleX;
219
- this.c *= skeleton.scaleY;
220
- this.d *= skeleton.scaleY;
221
216
  }
222
217
  /** Computes the local transform values from the world transform.
223
218
  *
@@ -230,83 +225,118 @@ export class BonePose {
230
225
  updateLocalTransform(skeleton) {
231
226
  this.local = 0;
232
227
  this.world = skeleton._update;
228
+ const sx = skeleton.scaleX, sy = skeleton.scaleY;
233
229
  if (!this.bone.parent) {
234
- this.x = this.worldX - skeleton.x;
235
- this.y = this.worldY - skeleton.y;
236
- const a = this.a, b = this.b, c = this.c, d = this.d;
237
- this.rotation = MathUtils.atan2Deg(c, a);
238
- this.scaleX = Math.sqrt(a * a + c * c);
239
- this.scaleY = Math.sqrt(b * b + d * d);
240
- this.shearX = 0;
241
- this.shearY = MathUtils.atan2Deg(a * b + c * d, a * d - b * c);
230
+ const sxi = 1 / sx, syi = 1 / sy;
231
+ this.x = (this.worldX - skeleton.x) * sxi;
232
+ this.y = (this.worldY - skeleton.y) * syi;
233
+ this.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);
242
234
  return;
243
235
  }
244
236
  const parent = this.bone.parent.appliedPose;
245
237
  let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
246
- let pid = 1 / (pa * pd - pb * pc);
247
- let ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;
238
+ const pad = pa * pd - pb * pc, pid = 1 / (pa * pd - pb * pc);
239
+ const ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;
248
240
  const dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
249
- this.x = (dx * ia - dy * ib);
250
- this.y = (dy * id - dx * ic);
251
- let ra, rb, rc, rd;
252
- if (this.inherit === Inherit.OnlyTranslation) {
253
- ra = this.a;
254
- rb = this.b;
255
- rc = this.c;
256
- rd = this.d;
241
+ this.x = dx * ia - dy * ib;
242
+ this.y = dy * id - dx * ic;
243
+ switch (this.inherit) {
244
+ case Inherit.Normal:
245
+ this.set5(ia * this.a - ib * this.c, ia * this.b - ib * this.d, id * this.c - ic * this.a, id * this.d - ic * this.b, 0);
246
+ break;
247
+ case Inherit.OnlyTranslation: {
248
+ const sxi = 1 / sx, syi = 1 / sy;
249
+ this.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);
250
+ break;
251
+ }
252
+ case Inherit.NoRotationOrReflection: {
253
+ const sxi = 1 / sx, syi = 1 / sy;
254
+ pa *= sxi;
255
+ pc *= syi;
256
+ const wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;
257
+ const s = 1 / (pa * pa + pc * pc), det = 1 / Math.abs(pad * sxi * syi);
258
+ this.set5((pa * wa + pc * wc) * s, (pa * wb + pc * wd) * s, (pa * wc - pc * wa) * det, (pa * wd - pc * wb) * det, MathUtils.atan2Deg(pc, pa));
259
+ break;
260
+ }
261
+ case Inherit.NoScale:
262
+ case Inherit.NoScaleOrReflection: {
263
+ const sxi = 1 / sx, syi = 1 / sy;
264
+ const wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;
265
+ let tx = pd * this.a - pb * this.c, ty = pa * this.c - pc * this.a;
266
+ if (pad < 0) {
267
+ tx = -tx;
268
+ ty = -ty;
269
+ }
270
+ let r = MathUtils.atan2Deg(ty, tx);
271
+ this.rotation = r;
272
+ r *= MathUtils.degRad;
273
+ const cos = Math.cos(r), sin = Math.sin(r);
274
+ let za = (pa * cos + pb * sin) * sxi;
275
+ let zc = (pc * cos + pd * sin) * syi;
276
+ const s = 1 / Math.sqrt(za * za + zc * zc);
277
+ za *= s;
278
+ zc *= s;
279
+ const si = this.inherit === Inherit.NoScale && pad < 0 !== (sx < 0 !== sy < 0) ? -1 : 1;
280
+ this.set4(za * wa + zc * wc, za * wb + zc * wd, (za * wc - zc * wa) * si, (za * wd - zc * wb) * si);
281
+ }
282
+ }
283
+ }
284
+ set4(ra, rb, rc, rd) {
285
+ const x = ra * ra + rc * rc, y = rb * rb + rd * rd;
286
+ if (x > MathUtils.epsilon2) {
287
+ this.shearX = MathUtils.atan2Deg(rc, ra);
288
+ this.scaleX = Math.sqrt(x);
257
289
  }
258
290
  else {
259
- switch (this.inherit) {
260
- case Inherit.NoRotationOrReflection: {
261
- const s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
262
- pb = -pc * skeleton.scaleX * s / skeleton.scaleY;
263
- pd = pa * skeleton.scaleY * s / skeleton.scaleX;
264
- pid = 1 / (pa * pd - pb * pc);
265
- ia = pd * pid;
266
- ib = pb * pid;
267
- break;
268
- }
269
- case Inherit.NoScale:
270
- case Inherit.NoScaleOrReflection: {
271
- let r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
272
- pa = (pa * cos + pb * sin) / skeleton.scaleX;
273
- pc = (pc * cos + pd * sin) / skeleton.scaleY;
274
- let s = Math.sqrt(pa * pa + pc * pc);
275
- if (s > 0.00001)
276
- s = 1 / s;
277
- pa *= s;
278
- pc *= s;
279
- s = Math.sqrt(pa * pa + pc * pc);
280
- if (this.inherit === Inherit.NoScale && pid < 0 !== (skeleton.scaleX < 0 !== skeleton.scaleY < 0))
281
- s = -s;
282
- r = MathUtils.PI / 2 + Math.atan2(pc, pa);
283
- pb = Math.cos(r) * s;
284
- pd = Math.sin(r) * s;
285
- pid = 1 / (pa * pd - pb * pc);
286
- ia = pd * pid;
287
- ib = pb * pid;
288
- ic = pc * pid;
289
- id = pa * pid;
290
- }
291
+ this.shearX = 0;
292
+ this.scaleX = 0;
293
+ }
294
+ this.scaleY = Math.sqrt(y);
295
+ if (y > MathUtils.epsilon2) {
296
+ this.shearY = MathUtils.atan2Deg(rd, rb);
297
+ if (ra * rd - rb * rc < 0) {
298
+ this.scaleY = -this.scaleY;
299
+ this.shearY += 90;
291
300
  }
292
- ra = ia * this.a - ib * this.c;
293
- rb = ia * this.b - ib * this.d;
294
- rc = id * this.c - ic * this.a;
295
- rd = id * this.d - ic * this.b;
301
+ else
302
+ this.shearY -= 90;
303
+ if (this.shearY > 180)
304
+ this.shearY -= 360;
305
+ else if (this.shearY <= -180) //
306
+ this.shearY += 360;
296
307
  }
308
+ else
309
+ this.shearY = 0;
310
+ }
311
+ set5(ra, rb, rc, rd, ro) {
297
312
  this.shearX = 0;
298
- this.scaleX = Math.sqrt(ra * ra + rc * rc);
299
- if (this.scaleX > 0.0001) {
300
- const det = ra * rd - rb * rc;
301
- this.scaleY = det / this.scaleX;
302
- this.shearY = -MathUtils.atan2Deg(ra * rb + rc * rd, det);
303
- this.rotation = MathUtils.atan2Deg(rc, ra);
313
+ const x = ra * ra + rc * rc, y = rb * rb + rd * rd;
314
+ if (x > MathUtils.epsilon2) {
315
+ const r = MathUtils.atan2Deg(rc, ra);
316
+ this.rotation = r + ro;
317
+ this.scaleX = Math.sqrt(x);
318
+ this.scaleY = Math.sqrt(y);
319
+ if (y > MathUtils.epsilon2) {
320
+ this.shearY = MathUtils.atan2Deg(rd, rb);
321
+ if (ra * rd - rb * rc < 0) {
322
+ this.scaleY = -this.scaleY;
323
+ this.shearY += 90 - r;
324
+ }
325
+ else
326
+ this.shearY -= 90 + r;
327
+ if (this.shearY > 180)
328
+ this.shearY -= 360;
329
+ else if (this.shearY <= -180) //
330
+ this.shearY += 360;
331
+ }
332
+ else
333
+ this.shearY = 0;
304
334
  }
305
335
  else {
306
336
  this.scaleX = 0;
307
- this.scaleY = Math.sqrt(rb * rb + rd * rd);
337
+ this.scaleY = Math.sqrt(y);
308
338
  this.shearY = 0;
309
- this.rotation = 90 - MathUtils.atan2Deg(rd, rb);
339
+ this.rotation = y > MathUtils.epsilon2 ? MathUtils.atan2Deg(rd, rb) - 90 + ro : ro;
310
340
  }
311
341
  }
312
342
  /** If the world transform has been modified by constraints and the local transform no longer matches,
@@ -423,4 +453,4 @@ export class BonePose {
423
453
  this.d = sin * rb + cos * this.d;
424
454
  }
425
455
  }
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZVBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9uZVBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLeEMsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFFckQ7Ozs7Ozs7O3FEQVFxRDtBQUNyRCxNQUFNLE9BQU8sUUFBUTtJQUNwQixJQUFJLENBQVE7SUFFWiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLCtCQUErQjtJQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sd0RBQXdEO0lBQ3hELFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFYix3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRXpCLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sMkRBQTJEO0lBQzNELENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwyREFBMkQ7SUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sdUZBQXVGO0lBQ3ZGLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1RkFBdUY7SUFDdkYsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRVYsR0FBRyxDQUFFLElBQWM7UUFDbEIsSUFBSSxJQUFJ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cEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFeEQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIs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QUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDakMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUCxDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7aUlBTzZIO0lBQ3RILG9CQUFvQixDQUFFLFFBQWtCO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNSLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDNUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFN0IsSUFBSSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNaLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDWixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUM7YUFBTSxDQUFDO1lBQ1AsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztvQkFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUM1RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDakQsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUNoRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNkLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNkLE1BQU07Z0JBQ1AsQ0FBQztnQkFDRCxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLEtBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3QyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsR0FBRyxPQUFPO3dCQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNSLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ1IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFHLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLEdB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SUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZSB9IGZyb20gXCIuL1Bvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgfSBmcm9tIFwiLi9VcGRhdGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscywgdHlwZSBWZWN0b3IyIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBhcHBsaWVkIGxvY2FsIHBvc2UgYW5kIHdvcmxkIHRyYW5zZm9ybSBmb3IgYSBib25lLiBUaGlzIGlzIHRoZSB7QGxpbmsgQm9uZS5nZXRQb3NlfSB3aXRoIGNvbnN0cmFpbnRzIGFwcGxpZWQgYW5kIHRoZVxuICogd29ybGQgdHJhbnNmb3JtIGNvbXB1dGVkIGJ5IHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYW5kIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0uXG4gKlxuICogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBpcyBjaGFuZ2VkLCBjYWxsIHtAbGluayB1cGRhdGVMb2NhbFRyYW5zZm9ybX0gYmVmb3JlIHVzaW5nIHRoZSBsb2NhbCB0cmFuc2Zvcm0uIFRoZSBsb2NhbFxuICogdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlciBjb25zdHJhaW50KS5cbiAqXG4gKiBBZnRlciBjaGFuZ2luZyB0aGUgd29ybGQgdHJhbnNmb3JtLCBjYWxsIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0gb24gZXZlcnkgZGVzY2VuZGFudCBib25lLiBJdCBtYXkgYmUgbW9yZVxuICogY29udmVuaWVudCB0byBtb2RpZnkgdGhlIGxvY2FsIHRyYW5zZm9ybSBpbnN0ZWFkLCB0aGVuIGNhbGwge0BsaW5rIFNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byB1cGRhdGUgdGhlIHdvcmxkXG4gKiB0cmFuc2Zvcm1zIGZvciBhbGwgYm9uZXMgYW5kIGFwcGx5IGNvbnN0cmFpbnRzLiAqL1xuZXhwb3J0IGNsYXNzIEJvbmVQb3NlIGltcGxlbWVudHMgUG9zZTxCb25lUG9zZT4sIFVwZGF0ZSB7XG5cdGJvbmUhOiBCb25lO1xuXG5cdC8qKiBUaGUgbG9jYWwgeCB0cmFuc2xhdGlvbi4gKi9cblx0eCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCB5IHRyYW5zbGF0aW9uLiAqL1xuXHR5ID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHJvdGF0aW9uIGluIGRlZ3JlZXMsIGNvdW50ZXIgY2xvY2t3aXNlLiAqL1xuXHRyb3RhdGlvbiA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVguICovXG5cdHNjYWxlWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVkuICovXG5cdHNjYWxlWSA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclguICovXG5cdHNoZWFyWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclkuICovXG5cdHNoZWFyWSA9IDA7XG5cblx0aW5oZXJpdCA9IEluaGVyaXQuTm9ybWFsO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGEgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGIgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGMgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGQgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWCBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFkgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWSBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFggPSAwO1xuXG5cdHdvcmxkID0gMDtcblx0bG9jYWwgPSAwO1xuXG5cdHNldCAocG9zZTogQm9uZVBvc2UpOiB2b2lkIHtcblx0XHRpZiAocG9zZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJwb3NlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnggPSBwb3NlLng7XG5cdFx0dGhpcy55ID0gcG9zZS55O1xuXHRcdHRoaXMucm90YXRpb24gPSBwb3NlLnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGVYID0gcG9zZS5zY2FsZVg7XG5cdFx0dGhpcy5zY2FsZVkgPSBwb3NlLnNjYWxlWTtcblx0XHR0aGlzLnNoZWFyWCA9IHBvc2Uuc2hlYXJYO1xuXHRcdHRoaXMuc2hlYXJZID0gcG9zZS5zaGVhclk7XG5cdFx0dGhpcy5pbmhlcml0ID0gcG9zZS5pbmhlcml0O1xuXHR9XG5cblx0c2V0UG9zaXRpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0c2V0U2NhbGUgKHNjYWxlWDogbnVtYmVyLCBzY2FsZVk6IG51bWJlcik6IHZvaWQ7XG5cdHNldFNjYWxlIChzY2FsZTogbnVtYmVyKTogdm9pZDtcblx0c2V0U2NhbGUgKHNjYWxlT3JYOiBudW1iZXIsIHNjYWxlWT86IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuc2NhbGVYID0gc2NhbGVPclg7XG5cdFx0dGhpcy5zY2FsZVkgPSBzY2FsZVkgPT09IHVuZGVmaW5lZCA/IHNjYWxlT3JYIDogc2NhbGVZO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgaG93IHBhcmVudCB3b3JsZCB0cmFuc2Zvcm1zIGFmZmVjdCB0aGlzIGJvbmUuICovXG5cdHB1YmxpYyBnZXRJbmhlcml0ICgpOiBJbmhlcml0IHtcblx0XHRyZXR1cm4gdGhpcy5pbmhlcml0O1xuXHR9XG5cblx0cHVibGljIHNldEluaGVyaXQgKGluaGVyaXQ6IEluaGVyaXQpOiB2b2lkIHtcblx0XHRpZiAoaW5oZXJpdCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJpbmhlcml0IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmluaGVyaXQgPSBpbmhlcml0O1xuXHR9XG5cblx0LyoqIENhbGxlZCBieSB7QGxpbmsgU2tlbGV0b24udXBkYXRlQ2FjaGV9IHRvIGNvbXB1dGUgdGhlIHdvcmxkIHRyYW5zZm9ybSwgaWYgbmVlZGVkLiAqL1xuXHRwdWJsaWMgdXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpOiB2b2lkIHtcblx0XHRpZiAodGhpcy53b3JsZCAhPT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgcGFyZW50IGJvbmUncyB3b3JsZCB0cmFuc2Zvcm0gYW5kIHRoaXMgYXBwbGllZCBsb2NhbCBwb3NlLiBDaGlsZCBib25lcyBhcmUgbm90XG5cdCAqIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNrZWxldG9ucyNXb3JsZC10cmFuc2Zvcm1zXCI+V29ybGQgdHJhbnNmb3JtczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHR1cGRhdGVXb3JsZFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpXG5cdFx0XHR0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblx0XHRjb25zdCBzY2FsZVggPSB0aGlzLnNjYWxlWDtcblx0XHRjb25zdCBzY2FsZVkgPSB0aGlzLnNjYWxlWTtcblx0XHRjb25zdCBzaGVhclggPSB0aGlzLnNoZWFyWDtcblx0XHRjb25zdCBzaGVhclkgPSB0aGlzLnNoZWFyWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHsgLy8gUm9vdCBib25lLlxuXHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdHRoaXMuYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWCAqIHN4O1xuXHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHR0aGlzLmMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVggKiBzeTtcblx0XHRcdHRoaXMuZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWSAqIHN5O1xuXHRcdFx0dGhpcy53b3JsZFggPSB0aGlzLnggKiBzeCArIHNrZWxldG9uLng7XG5cdFx0XHR0aGlzLndvcmxkWSA9IHRoaXMueSAqIHN5ICsgc2tlbGV0b24ueTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlO1xuXHRcdGxldCBwYSA9IHBhcmVudC5hLCBwYiA9IHBhcmVudC5iLCBwYyA9IHBhcmVudC5jLCBwZCA9IHBhcmVudC5kO1xuXHRcdHRoaXMud29ybGRYID0gcGEgKiB0aGlzLnggKyBwYiAqIHRoaXMueSArIHBhcmVudC53b3JsZFg7XG5cdFx0dGhpcy53b3JsZFkgPSBwYyAqIHRoaXMueCArIHBkICogdGhpcy55ICsgcGFyZW50LndvcmxkWTtcblxuXHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9ybWFsOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgbGEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxiID0gTWF0aC5jb3MocnkpICogc2NhbGVZO1xuXHRcdFx0XHRjb25zdCBsYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYSA9IHBhICogbGEgKyBwYiAqIGxjO1xuXHRcdFx0XHR0aGlzLmIgPSBwYSAqIGxiICsgcGIgKiBsZDtcblx0XHRcdFx0dGhpcy5jID0gcGMgKiBsYSArIHBkICogbGM7XG5cdFx0XHRcdHRoaXMuZCA9IHBjICogbGIgKyBwZCAqIGxkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0dGhpcy5hID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHR0aGlzLmIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0dGhpcy5kID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4ID0gMSAvIHNrZWxldG9uLnNjYWxlWCwgc3kgPSAxIC8gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRwYSAqPSBzeDtcblx0XHRcdFx0cGMgKj0gc3k7XG5cdFx0XHRcdGxldCBzID0gcGEgKiBwYSArIHBjICogcGM7XG5cdFx0XHRcdGxldCBwcnggPSAwO1xuXHRcdFx0XHRpZiAocyA+IDAuMDAwMSkge1xuXHRcdFx0XHRcdHMgPSBNYXRoLmFicyhwYSAqIHBkICogc3kgLSBwYiAqIHN4ICogcGMpIC8gcztcblx0XHRcdFx0XHRwYiA9IHBjICogcztcblx0XHRcdFx0XHRwZCA9IHBhICogcztcblx0XHRcdFx0XHRwcnggPSBNYXRoVXRpbHMuYXRhbjJEZWcocGMsIHBhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYSA9IDA7XG5cdFx0XHRcdFx0cGMgPSAwO1xuXHRcdFx0XHRcdHByeCA9IDkwIC0gTWF0aFV0aWxzLmF0YW4yRGVnKHBkLCBwYik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclggLSBwcngpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyBzaGVhclkgLSBwcnggKyA5MCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGNvbnN0IGxjID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5hID0gcGEgKiBsYSAtIHBiICogbGM7XG5cdFx0XHRcdHRoaXMuYiA9IHBhICogbGIgLSBwYiAqIGxkO1xuXHRcdFx0XHR0aGlzLmMgPSBwYyAqIGxhICsgcGQgKiBsYztcblx0XHRcdFx0dGhpcy5kID0gcGMgKiBsYiArIHBkICogbGQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGU6XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZU9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRsZXQgciA9IHJvdGF0aW9uICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRsZXQgemEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdGxldCB6YyA9IChwYyAqIGNvcyArIHBkICogc2luKSAvIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQoemEgKiB6YSArIHpjICogemMpO1xuXHRcdFx0XHRpZiAocyA+IDAuMDAwMDEpIHMgPSAxIC8gcztcblx0XHRcdFx0emEgKj0gcztcblx0XHRcdFx0emMgKj0gcztcblx0XHRcdFx0cyA9IE1hdGguc3FydCh6YSAqIHphICsgemMgKiB6Yyk7XG5cdFx0XHRcdGlmICh0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiAocGEgKiBwZCAtIHBiICogcGMgPCAwKSAhPT0gKHNrZWxldG9uLnNjYWxlWCA8IDAgIT09IHNrZWxldG9uLnNjYWxlWSA8IDApKSBzID0gLXM7XG5cdFx0XHRcdHIgPSBNYXRoLlBJIC8gMiArIE1hdGguYXRhbjIoemMsIHphKTtcblx0XHRcdFx0Y29uc3QgemIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdGNvbnN0IHpkID0gTWF0aC5zaW4ocikgKiBzO1xuXHRcdFx0XHRjb25zdCByeCA9IHNoZWFyWCAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKDkwICsgc2hlYXJZKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGxhID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxkID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHR0aGlzLmEgPSB6YSAqIGxhICsgemIgKiBsYztcblx0XHRcdFx0dGhpcy5iID0gemEgKiBsYiArIHpiICogbGQ7XG5cdFx0XHRcdHRoaXMuYyA9IHpjICogbGEgKyB6ZCAqIGxjO1xuXHRcdFx0XHR0aGlzLmQgPSB6YyAqIGxiICsgemQgKiBsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYSAqPSBza2VsZXRvbi5zY2FsZVg7XG5cdFx0dGhpcy5iICo9IHNrZWxldG9uLnNjYWxlWDtcblx0XHR0aGlzLmMgKj0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdHRoaXMuZCAqPSBza2VsZXRvbi5zY2FsZVk7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIGxvY2FsIHRyYW5zZm9ybSB2YWx1ZXMgZnJvbSB0aGUgd29ybGQgdHJhbnNmb3JtLlxuXHQgKlxuXHQgKiBJZiB0aGUgd29ybGQgdHJhbnNmb3JtIGlzIG1vZGlmaWVkIChieSBhIGNvbnN0cmFpbnQsIHtAbGluayByb3RhdGVXb3JsZH0sIGV0YykgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHNvXG5cdCAqIHRoZSBsb2NhbCB0cmFuc2Zvcm0gbWF0Y2hlcyB0aGUgd29ybGQgdHJhbnNmb3JtLiBUaGUgbG9jYWwgdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlclxuXHQgKiBjb25zdHJhaW50KS5cblx0ICpcblx0ICogU29tZSBpbmZvcm1hdGlvbiBpcyBhbWJpZ3VvdXMgaW4gdGhlIHdvcmxkIHRyYW5zZm9ybSwgc3VjaCBhcyAtMSwtMSBzY2FsZSB2ZXJzdXMgMTgwIHJvdGF0aW9uLiBUaGUgbG9jYWwgdHJhbnNmb3JtIGFmdGVyXG5cdCAqIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byB0aGUgbG9jYWwgdHJhbnNmb3JtIHVzZWQgdG8gY29tcHV0ZSB0aGUgd29ybGQgdHJhbnNmb3JtLCBidXQgbWF5IG5vdCBiZSBpZGVudGljYWwuICovXG5cdHB1YmxpYyB1cGRhdGVMb2NhbFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbCA9IDA7XG5cdFx0dGhpcy53b3JsZCA9IHNrZWxldG9uLl91cGRhdGU7XG5cblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHtcblx0XHRcdHRoaXMueCA9IHRoaXMud29ybGRYIC0gc2tlbGV0b24ueDtcblx0XHRcdHRoaXMueSA9IHRoaXMud29ybGRZIC0gc2tlbGV0b24ueTtcblx0XHRcdGNvbnN0IGEgPSB0aGlzLmEsIGIgPSB0aGlzLmIsIGMgPSB0aGlzLmMsIGQgPSB0aGlzLmQ7XG5cdFx0XHR0aGlzLnJvdGF0aW9uID0gTWF0aFV0aWxzLmF0YW4yRGVnKGMsIGEpO1xuXHRcdFx0dGhpcy5zY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBjICogYyk7XG5cdFx0XHR0aGlzLnNjYWxlWSA9IE1hdGguc3FydChiICogYiArIGQgKiBkKTtcblx0XHRcdHRoaXMuc2hlYXJYID0gMDtcblx0XHRcdHRoaXMuc2hlYXJZID0gTWF0aFV0aWxzLmF0YW4yRGVnKGEgKiBiICsgYyAqIGQsIGEgKiBkIC0gYiAqIGMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2U7XG5cdFx0bGV0IHBhID0gcGFyZW50LmEsIHBiID0gcGFyZW50LmIsIHBjID0gcGFyZW50LmMsIHBkID0gcGFyZW50LmQ7XG5cdFx0bGV0IHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdGxldCBpYSA9IHBkICogcGlkLCBpYiA9IHBiICogcGlkLCBpYyA9IHBjICogcGlkLCBpZCA9IHBhICogcGlkO1xuXHRcdGNvbnN0IGR4ID0gdGhpcy53b3JsZFggLSBwYXJlbnQud29ybGRYLCBkeSA9IHRoaXMud29ybGRZIC0gcGFyZW50LndvcmxkWTtcblx0XHR0aGlzLnggPSAoZHggKiBpYSAtIGR5ICogaWIpO1xuXHRcdHRoaXMueSA9IChkeSAqIGlkIC0gZHggKiBpYyk7XG5cblx0XHRsZXQgcmE6IG51bWJlciwgcmI6IG51bWJlciwgcmM6IG51bWJlciwgcmQ6IG51bWJlcjtcblx0XHRpZiAodGhpcy5pbmhlcml0ID09PSBJbmhlcml0Lk9ubHlUcmFuc2xhdGlvbikge1xuXHRcdFx0cmEgPSB0aGlzLmE7XG5cdFx0XHRyYiA9IHRoaXMuYjtcblx0XHRcdHJjID0gdGhpcy5jO1xuXHRcdFx0cmQgPSB0aGlzLmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdFx0Y29uc3QgcyA9IE1hdGguYWJzKHBhICogcGQgLSBwYiAqIHBjKSAvIChwYSAqIHBhICsgcGMgKiBwYyk7XG5cdFx0XHRcdFx0cGIgPSAtcGMgKiBza2VsZXRvbi5zY2FsZVggKiBzIC8gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRcdHBkID0gcGEgKiBza2VsZXRvbi5zY2FsZVkgKiBzIC8gc2tlbGV0b24uc2NhbGVYO1xuXHRcdFx0XHRcdHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdFx0XHRcdGlhID0gcGQgKiBwaWQ7XG5cdFx0XHRcdFx0aWIgPSBwYiAqIHBpZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGVPclJlZmxlY3Rpb246IHtcblx0XHRcdFx0XHRsZXQgciA9IHRoaXMucm90YXRpb24gKiBNYXRoVXRpbHMuZGVnUmFkLCBjb3MgPSBNYXRoLmNvcyhyKSwgc2luID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0cGEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdFx0cGMgPSAocGMgKiBjb3MgKyBwZCAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVk7XG5cdFx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQocGEgKiBwYSArIHBjICogcGMpO1xuXHRcdFx0XHRcdGlmIChzID4gMC4wMDAwMSkgcyA9IDEgLyBzO1xuXHRcdFx0XHRcdHBhICo9IHM7XG5cdFx0XHRcdFx0cGMgKj0gcztcblx0XHRcdFx0XHRzID0gTWF0aC5zcXJ0KHBhICogcGEgKyBwYyAqIHBjKTtcblx0XHRcdFx0XHRpZiAodGhpcy5pbmhlcml0ID09PSBJbmhlcml0Lk5vU2NhbGUgJiYgcGlkIDwgMCAhPT0gKHNrZWxldG9uLnNjYWxlWCA8IDAgIT09IHNrZWxldG9uLnNjYWxlWSA8IDApKSBzID0gLXM7XG5cdFx0XHRcdFx0ciA9IE1hdGhVdGlscy5QSSAvIDIgKyBNYXRoLmF0YW4yKHBjLCBwYSk7XG5cdFx0XHRcdFx0cGIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdFx0cGQgPSBNYXRoLnNpbihyKSAqIHM7XG5cdFx0XHRcdFx0cGlkID0gMSAvIChwYSAqIHBkIC0gcGIgKiBwYyk7XG5cdFx0XHRcdFx0aWEgPSBwZCAqIHBpZDtcblx0XHRcdFx0XHRpYiA9IHBiICogcGlkO1xuXHRcdFx0XHRcdGljID0gcGMgKiBwaWQ7XG5cdFx0XHRcdFx0aWQgPSBwYSAqIHBpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmEgPSBpYSAqIHRoaXMuYSAtIGliICogdGhpcy5jO1xuXHRcdFx0cmIgPSBpYSAqIHRoaXMuYiAtIGliICogdGhpcy5kO1xuXHRcdFx0cmMgPSBpZCAqIHRoaXMuYyAtIGljICogdGhpcy5hO1xuXHRcdFx0cmQgPSBpZCAqIHRoaXMuZCAtIGljICogdGhpcy5iO1xuXHRcdH1cblxuXHRcdHRoaXMuc2hlYXJYID0gMDtcblx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydChyYSAqIHJhICsgcmMgKiByYyk7XG5cdFx0aWYgKHRoaXMuc2NhbGVYID4gMC4wMDAxKSB7XG5cdFx0XHRjb25zdCBkZXQgPSByYSAqIHJkIC0gcmIgKiByYztcblx0XHRcdHRoaXMuc2NhbGVZID0gZGV0IC8gdGhpcy5zY2FsZVg7XG5cdFx0XHR0aGlzLnNoZWFyWSA9IC1NYXRoVXRpbHMuYXRhbjJEZWcocmEgKiByYiArIHJjICogcmQsIGRldCk7XG5cdFx0XHR0aGlzLnJvdGF0aW9uID0gTWF0aFV0aWxzLmF0YW4yRGVnKHJjLCByYSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2NhbGVYID0gMDtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHJiICogcmIgKyByZCAqIHJkKTtcblx0XHRcdHRoaXMuc2hlYXJZID0gMDtcblx0XHRcdHRoaXMucm90YXRpb24gPSA5MCAtIE1hdGhVdGlscy5hdGFuMkRlZyhyZCwgcmIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBJZiB0aGUgd29ybGQgdHJhbnNmb3JtIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGNvbnN0cmFpbnRzIGFuZCB0aGUgbG9jYWwgdHJhbnNmb3JtIG5vIGxvbmdlciBtYXRjaGVzLFxuXHQgKiB7QGxpbmsgdXBkYXRlTG9jYWxUcmFuc2Zvcm19IGlzIGNhbGxlZC4gQ2FsbCB0aGlzIGFmdGVyIHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYmVmb3JlXG5cdCAqIHVzaW5nIHRoZSBhcHBsaWVkIGxvY2FsIHRyYW5zZm9ybS4gKi9cblx0cHVibGljIHZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0gKHNrZWxldG9uOiBTa2VsZXRvbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2FsID09PSBza2VsZXRvbi5fdXBkYXRlKSB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0fVxuXG5cdG1vZGlmeUxvY2FsIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbCA9PT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybShza2VsZXRvbik7XG5cdFx0dGhpcy53b3JsZCA9IDA7XG5cdFx0dGhpcy5yZXNldFdvcmxkKHNrZWxldG9uLl91cGRhdGUpO1xuXHR9XG5cblx0bW9kaWZ5V29ybGQgKHVwZGF0ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbCA9IHVwZGF0ZTtcblx0XHR0aGlzLndvcmxkID0gdXBkYXRlO1xuXHRcdHRoaXMucmVzZXRXb3JsZCh1cGRhdGUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldFdvcmxkICh1cGRhdGU6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5ib25lLmNoaWxkcmVuO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldLmFwcGxpZWRQb3NlO1xuXHRcdFx0aWYgKGNoaWxkLndvcmxkID09PSB1cGRhdGUpIHtcblx0XHRcdFx0Y2hpbGQud29ybGQgPSAwO1xuXHRcdFx0XHRjaGlsZC5sb2NhbCA9IDA7XG5cdFx0XHRcdGNoaWxkLnJlc2V0V29ybGQodXBkYXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogVGhlIHdvcmxkIHJvdGF0aW9uIGZvciB0aGUgWCBheGlzLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBhfSBhbmQge0BsaW5rIGN9LiBUaGlzIGlzIHRoZSBkaXJlY3Rpb24gdGhlIGJvbmUgaXNcblx0ICogcG9pbnRpbmcuICovXG5cdHB1YmxpYyBnZXRXb3JsZFJvdGF0aW9uWCAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuYywgdGhpcy5hKTtcblx0fVxuXG5cdC8qKiBUaGUgd29ybGQgcm90YXRpb24gZm9yIHRoZSBZIGF4aXMsIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rIGJ9IGFuZCB7QGxpbmsgZH0uICovXG5cdHB1YmxpYyBnZXRXb3JsZFJvdGF0aW9uWSAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuZCwgdGhpcy5iKTtcblx0fVxuXG5cdC8qKiBUaGUgbWFnbml0dWRlIChhbHdheXMgcG9zaXRpdmUpIG9mIHRoZSB3b3JsZCBzY2FsZSBYLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBhfSBhbmQge0BsaW5rIGN9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRTY2FsZVggKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmEgKiB0aGlzLmEgKyB0aGlzLmMgKiB0aGlzLmMpO1xuXHR9XG5cblx0LyoqIFRoZSBtYWduaXR1ZGUgKGFsd2F5cyBwb3NpdGl2ZSkgb2YgdGhlIHdvcmxkIHNjYWxlIFksIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rIGJ9IGFuZCB7QGxpbmsgZH0uICovXG5cdHB1YmxpYyBnZXRXb3JsZFNjYWxlWSAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuYiAqIHRoaXMuYiArIHRoaXMuZCAqIHRoaXMuZCk7XG5cdH1cblxuXHQvLyBwdWJsaWMgTWF0cml4MyBnZXRXb3JsZFRyYW5zZm9ybSAoTWF0cml4MyB3b3JsZFRyYW5zZm9ybSkge1xuXHQvLyBcdGlmICh3b3JsZFRyYW5zZm9ybSA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFwid29ybGRUcmFuc2Zvcm0gY2Fubm90IGJlIG51bGwuXCIpO1xuXHQvLyBcdGZsb2F0W10gdmFsID0gd29ybGRUcmFuc2Zvcm0udmFsO1xuXHQvLyBcdHZhbFtNMDBdID0gYTtcblx0Ly8gXHR2YWxbTTAxXSA9IGI7XG5cdC8vIFx0dmFsW00xMF0gPSBjO1xuXHQvLyBcdHZhbFtNMTFdID0gZDtcblx0Ly8gXHR2YWxbTTAyXSA9IHdvcmxkWDtcblx0Ly8gXHR2YWxbTTEyXSA9IHdvcmxkWTtcblx0Ly8gXHR2YWxbTTIwXSA9IDA7XG5cdC8vIFx0dmFsW00yMV0gPSAwO1xuXHQvLyBcdHZhbFtNMjJdID0gMTtcblx0Ly8gXHRyZXR1cm4gd29ybGRUcmFuc2Zvcm07XG5cdC8vIH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gd29ybGQgY29vcmRpbmF0ZXMgdG8gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIHdvcmxkVG9Mb2NhbCAod29ybGQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAod29ybGQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwid29ybGQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IGRldCA9IHRoaXMuYSAqIHRoaXMuZCAtIHRoaXMuYiAqIHRoaXMuYztcblx0XHRjb25zdCB4ID0gd29ybGQueCAtIHRoaXMud29ybGRYLCB5ID0gd29ybGQueSAtIHRoaXMud29ybGRZO1xuXHRcdHdvcmxkLnggPSAoeCAqIHRoaXMuZCAtIHkgKiB0aGlzLmIpIC8gZGV0O1xuXHRcdHdvcmxkLnkgPSAoeSAqIHRoaXMuYSAtIHggKiB0aGlzLmMpIC8gZGV0O1xuXHRcdHJldHVybiB3b3JsZDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLiAqL1xuXHRwdWJsaWMgbG9jYWxUb1dvcmxkIChsb2NhbDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmIChsb2NhbCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJsb2NhbCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgeCA9IGxvY2FsLngsIHkgPSBsb2NhbC55O1xuXHRcdGxvY2FsLnggPSB4ICogdGhpcy5hICsgeSAqIHRoaXMuYiArIHRoaXMud29ybGRYO1xuXHRcdGxvY2FsLnkgPSB4ICogdGhpcy5jICsgeSAqIHRoaXMuZCArIHRoaXMud29ybGRZO1xuXHRcdHJldHVybiBsb2NhbDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB3b3JsZCBjb29yZGluYXRlcyB0byB0aGUgcGFyZW50IGJvbmUncyBsb2NhbCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIHdvcmxkVG9QYXJlbnQgKHdvcmxkOiBWZWN0b3IyKTogVmVjdG9yMiB7XG5cdFx0aWYgKHdvcmxkID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIndvcmxkIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRyZXR1cm4gdGhpcy5ib25lLnBhcmVudCA9PSBudWxsID8gd29ybGQgOiB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlLndvcmxkVG9Mb2NhbCh3b3JsZCk7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gdGhlIHBhcmVudCBib25lJ3MgY29vcmRpbmF0ZXMgdG8gd29ybGQgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyBwYXJlbnRUb1dvcmxkICh3b3JsZDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmICh3b3JsZCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JsZCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5wYXJlbnQgPT0gbnVsbCA/IHdvcmxkIDogdGhpcy5ib25lLnBhcmVudC5hcHBsaWVkUG9zZS5sb2NhbFRvV29ybGQod29ybGQpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSB3b3JsZCByb3RhdGlvbiB0byBhIGxvY2FsIHJvdGF0aW9uLiAqL1xuXHRwdWJsaWMgd29ybGRUb0xvY2FsUm90YXRpb24gKHdvcmxkUm90YXRpb246IG51bWJlcik6IG51bWJlciB7XG5cdFx0d29ybGRSb3RhdGlvbiAqPSBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKHdvcmxkUm90YXRpb24pLCBjb3MgPSBNYXRoLmNvcyh3b3JsZFJvdGF0aW9uKTtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuYSAqIHNpbiAtIHRoaXMuYyAqIGNvcywgdGhpcy5kICogY29zIC0gdGhpcy5iICogc2luKSArIHRoaXMucm90YXRpb24gLSB0aGlzLnNoZWFyWDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgbG9jYWwgcm90YXRpb24gdG8gYSB3b3JsZCByb3RhdGlvbi4gKi9cblx0bG9jYWxUb1dvcmxkUm90YXRpb24gKGxvY2FsUm90YXRpb246IG51bWJlcik6IG51bWJlciB7XG5cdFx0bG9jYWxSb3RhdGlvbiA9IChsb2NhbFJvdGF0aW9uIC0gdGhpcy5yb3RhdGlvbiAtIHRoaXMuc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4obG9jYWxSb3RhdGlvbiksIGNvcyA9IE1hdGguY29zKGxvY2FsUm90YXRpb24pO1xuXHRcdHJldHVybiBNYXRoVXRpbHMuYXRhbjJEZWcoY29zICogdGhpcy5jICsgc2luICogdGhpcy5kLCBjb3MgKiB0aGlzLmEgKyBzaW4gKiB0aGlzLmIpO1xuXHR9XG5cblx0LyoqIFJvdGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gKi9cblx0cm90YXRlV29ybGQgKGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGRlZ3JlZXMgKj0gTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbihkZWdyZWVzKSwgY29zID0gTWF0aC5jb3MoZGVncmVlcyk7XG5cdFx0Y29uc3QgcmEgPSB0aGlzLmEsIHJiID0gdGhpcy5iO1xuXHRcdHRoaXMuYSA9IGNvcyAqIHJhIC0gc2luICogdGhpcy5jO1xuXHRcdHRoaXMuYiA9IGNvcyAqIHJiIC0gc2luICogdGhpcy5kO1xuXHRcdHRoaXMuYyA9IHNpbiAqIHJhICsgY29zICogdGhpcy5jO1xuXHRcdHRoaXMuZCA9IHNpbiAqIHJiICsgY29zICogdGhpcy5kO1xuXHR9XG59XG4iXX0=
456
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZVBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9uZVBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLeEMsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFFckQ7Ozs7Ozs7O3FEQVFxRDtBQUNyRCxNQUFNLE9BQU8sUUFBUTtJQUNwQixJQUFJLENBQVE7SUFFWiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLCtCQUErQjtJQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sd0RBQXdEO0lBQ3hELFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFYix3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRXpCLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sMkRBQTJEO0lBQzNELENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwyREFBMkQ7SUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sdUZBQXVGO0lBQ3ZGLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1RkFBdUY7SUFDdkYsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRVYsR0FBRyxDQUFFLElBQWM7UUFDbEIsSUFBSSxJQUFJ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cEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFeEQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIs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LENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU07WUFDUCxDQUFDO1lBQ0QsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLEtBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0UsTUFBTSxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNyQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDUixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxF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RSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDakUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFM0IsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUs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RyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELFdBQVcsQ0FBRSxPQUFlO1FBQzNCLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZSB9IGZyb20gXCIuL1Bvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgfSBmcm9tIFwiLi9VcGRhdGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscywgdHlwZSBWZWN0b3IyIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBhcHBsaWVkIGxvY2FsIHBvc2UgYW5kIHdvcmxkIHRyYW5zZm9ybSBmb3IgYSBib25lLiBUaGlzIGlzIHRoZSB7QGxpbmsgQm9uZS5nZXRQb3NlfSB3aXRoIGNvbnN0cmFpbnRzIGFwcGxpZWQgYW5kIHRoZVxuICogd29ybGQgdHJhbnNmb3JtIGNvbXB1dGVkIGJ5IHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYW5kIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0uXG4gKlxuICogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBpcyBjaGFuZ2VkLCBjYWxsIHtAbGluayB1cGRhdGVMb2NhbFRyYW5zZm9ybX0gYmVmb3JlIHVzaW5nIHRoZSBsb2NhbCB0cmFuc2Zvcm0uIFRoZSBsb2NhbFxuICogdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlciBjb25zdHJhaW50KS5cbiAqXG4gKiBBZnRlciBjaGFuZ2luZyB0aGUgd29ybGQgdHJhbnNmb3JtLCBjYWxsIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0gb24gZXZlcnkgZGVzY2VuZGFudCBib25lLiBJdCBtYXkgYmUgbW9yZVxuICogY29udmVuaWVudCB0byBtb2RpZnkgdGhlIGxvY2FsIHRyYW5zZm9ybSBpbnN0ZWFkLCB0aGVuIGNhbGwge0BsaW5rIFNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byB1cGRhdGUgdGhlIHdvcmxkXG4gKiB0cmFuc2Zvcm1zIGZvciBhbGwgYm9uZXMgYW5kIGFwcGx5IGNvbnN0cmFpbnRzLiAqL1xuZXhwb3J0IGNsYXNzIEJvbmVQb3NlIGltcGxlbWVudHMgUG9zZTxCb25lUG9zZT4sIFVwZGF0ZSB7XG5cdGJvbmUhOiBCb25lO1xuXG5cdC8qKiBUaGUgbG9jYWwgeCB0cmFuc2xhdGlvbi4gKi9cblx0eCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCB5IHRyYW5zbGF0aW9uLiAqL1xuXHR5ID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHJvdGF0aW9uIGluIGRlZ3JlZXMsIGNvdW50ZXIgY2xvY2t3aXNlLiAqL1xuXHRyb3RhdGlvbiA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVguICovXG5cdHNjYWxlWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVkuICovXG5cdHNjYWxlWSA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclguICovXG5cdHNoZWFyWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclkuICovXG5cdHNoZWFyWSA9IDA7XG5cblx0aW5oZXJpdCA9IEluaGVyaXQuTm9ybWFsO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGEgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGIgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGMgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGQgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWCBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFkgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWSBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFggPSAwO1xuXG5cdHdvcmxkID0gMDtcblx0bG9jYWwgPSAwO1xuXG5cdHNldCAocG9zZTogQm9uZVBvc2UpOiB2b2lkIHtcblx0XHRpZiAocG9zZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJwb3NlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnggPSBwb3NlLng7XG5cdFx0dGhpcy55ID0gcG9zZS55O1xuXHRcdHRoaXMucm90YXRpb24gPSBwb3NlLnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGVYID0gcG9zZS5zY2FsZVg7XG5cdFx0dGhpcy5zY2FsZVkgPSBwb3NlLnNjYWxlWTtcblx0XHR0aGlzLnNoZWFyWCA9IHBvc2Uuc2hlYXJYO1xuXHRcdHRoaXMuc2hlYXJZID0gcG9zZS5zaGVhclk7XG5cdFx0dGhpcy5pbmhlcml0ID0gcG9zZS5pbmhlcml0O1xuXHR9XG5cblx0c2V0UG9zaXRpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0c2V0U2NhbGUgKHNjYWxlWDogbnVtYmVyLCBzY2FsZVk6IG51bWJlcik6IHZvaWQ7XG5cdHNldFNjYWxlIChzY2FsZTogbnVtYmVyKTogdm9pZDtcblx0c2V0U2NhbGUgKHNjYWxlT3JYOiBudW1iZXIsIHNjYWxlWT86IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuc2NhbGVYID0gc2NhbGVPclg7XG5cdFx0dGhpcy5zY2FsZVkgPSBzY2FsZVkgPT09IHVuZGVmaW5lZCA/IHNjYWxlT3JYIDogc2NhbGVZO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgaG93IHBhcmVudCB3b3JsZCB0cmFuc2Zvcm1zIGFmZmVjdCB0aGlzIGJvbmUuICovXG5cdHB1YmxpYyBnZXRJbmhlcml0ICgpOiBJbmhlcml0IHtcblx0XHRyZXR1cm4gdGhpcy5pbmhlcml0O1xuXHR9XG5cblx0cHVibGljIHNldEluaGVyaXQgKGluaGVyaXQ6IEluaGVyaXQpOiB2b2lkIHtcblx0XHRpZiAoaW5oZXJpdCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJpbmhlcml0IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmluaGVyaXQgPSBpbmhlcml0O1xuXHR9XG5cblx0LyoqIENhbGxlZCBieSB7QGxpbmsgU2tlbGV0b24udXBkYXRlQ2FjaGV9IHRvIGNvbXB1dGUgdGhlIHdvcmxkIHRyYW5zZm9ybSwgaWYgbmVlZGVkLiAqL1xuXHRwdWJsaWMgdXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpOiB2b2lkIHtcblx0XHRpZiAodGhpcy53b3JsZCAhPT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgcGFyZW50IGJvbmUncyB3b3JsZCB0cmFuc2Zvcm0gYW5kIHRoaXMgYXBwbGllZCBsb2NhbCBwb3NlLiBDaGlsZCBib25lcyBhcmUgbm90XG5cdCAqIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNrZWxldG9ucyNXb3JsZC10cmFuc2Zvcm1zXCI+V29ybGQgdHJhbnNmb3JtczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHR1cGRhdGVXb3JsZFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpXG5cdFx0XHR0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblx0XHRjb25zdCBzY2FsZVggPSB0aGlzLnNjYWxlWDtcblx0XHRjb25zdCBzY2FsZVkgPSB0aGlzLnNjYWxlWTtcblx0XHRjb25zdCBzaGVhclggPSB0aGlzLnNoZWFyWDtcblx0XHRjb25zdCBzaGVhclkgPSB0aGlzLnNoZWFyWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHsgLy8gUm9vdCBib25lLlxuXHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdHRoaXMuYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWCAqIHN4O1xuXHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHR0aGlzLmMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVggKiBzeTtcblx0XHRcdHRoaXMuZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWSAqIHN5O1xuXHRcdFx0dGhpcy53b3JsZFggPSB0aGlzLnggKiBzeCArIHNrZWxldG9uLng7XG5cdFx0XHR0aGlzLndvcmxkWSA9IHRoaXMueSAqIHN5ICsgc2tlbGV0b24ueTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlO1xuXHRcdGxldCBwYSA9IHBhcmVudC5hLCBwYiA9IHBhcmVudC5iLCBwYyA9IHBhcmVudC5jLCBwZCA9IHBhcmVudC5kO1xuXHRcdHRoaXMud29ybGRYID0gcGEgKiB0aGlzLnggKyBwYiAqIHRoaXMueSArIHBhcmVudC53b3JsZFg7XG5cdFx0dGhpcy53b3JsZFkgPSBwYyAqIHRoaXMueCArIHBkICogdGhpcy55ICsgcGFyZW50LndvcmxkWTtcblxuXHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9ybWFsOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgbGEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxiID0gTWF0aC5jb3MocnkpICogc2NhbGVZO1xuXHRcdFx0XHRjb25zdCBsYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYSA9IHBhICogbGEgKyBwYiAqIGxjO1xuXHRcdFx0XHR0aGlzLmIgPSBwYSAqIGxiICsgcGIgKiBsZDtcblx0XHRcdFx0dGhpcy5jID0gcGMgKiBsYSArIHBkICogbGM7XG5cdFx0XHRcdHRoaXMuZCA9IHBjICogbGIgKyBwZCAqIGxkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4ID0gc2tlbGV0b24uc2NhbGVYLCBzeSA9IHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyA5MCArIHNoZWFyWSkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHR0aGlzLmEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVggKiBzeDtcblx0XHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHRcdHRoaXMuYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWCAqIHN5O1xuXHRcdFx0XHR0aGlzLmQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVkgKiBzeTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9Sb3RhdGlvbk9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRjb25zdCBzeCA9IHNrZWxldG9uLnNjYWxlWCwgc3kgPSBza2VsZXRvbi5zY2FsZVksIHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0XHRwYSAqPSBzeGk7XG5cdFx0XHRcdHBjICo9IHN5aTtcblx0XHRcdFx0bGV0IHMgPSBwYSAqIHBhICsgcGMgKiBwYztcblx0XHRcdFx0bGV0IHIgPSAwO1xuXHRcdFx0XHRpZiAocyA+IE1hdGhVdGlscy5lcHNpbG9uMikge1xuXHRcdFx0XHRcdHMgPSBNYXRoLmFicyhwYSAqIHBkICogc3lpIC0gcGIgKiBzeGkgKiBwYykgLyBzO1xuXHRcdFx0XHRcdHBiID0gcGMgKiBzO1xuXHRcdFx0XHRcdHBkID0gcGEgKiBzO1xuXHRcdFx0XHRcdHIgPSByb3RhdGlvbiAtIE1hdGhVdGlscy5hdGFuMkRlZyhwYywgcGEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhID0gMDtcblx0XHRcdFx0XHRwYyA9IDA7XG5cdFx0XHRcdFx0ciA9IHJvdGF0aW9uIC0gOTAgKyBNYXRoVXRpbHMuYXRhbjJEZWcocGQsIHBiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByeCA9IChyICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHIgKyBzaGVhclkgKyA5MCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGNvbnN0IGxjID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5hID0gKHBhICogbGEgLSBwYiAqIGxjKSAqIHN4O1xuXHRcdFx0XHR0aGlzLmIgPSAocGEgKiBsYiAtIHBiICogbGQpICogc3g7XG5cdFx0XHRcdHRoaXMuYyA9IChwYyAqIGxhICsgcGQgKiBsYykgKiBzeTtcblx0XHRcdFx0dGhpcy5kID0gKHBjICogbGIgKyBwZCAqIGxkKSAqIHN5O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlOlxuXHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGVPclJlZmxlY3Rpb246IHtcblx0XHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZLCBzeGkgPSAxIC8gc3gsIHN5aSA9IDEgLyBzeTtcblx0XHRcdFx0Y29uc3QgciA9IHJvdGF0aW9uICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRsZXQgemEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgKiBzeGk7XG5cdFx0XHRcdGxldCB6YyA9IChwYyAqIGNvcyArIHBkICogc2luKSAqIHN5aTtcblx0XHRcdFx0Y29uc3QgcyA9IDEgLyBNYXRoLnNxcnQoemEgKiB6YSArIHpjICogemMpO1xuXHRcdFx0XHR6YSAqPSBzO1xuXHRcdFx0XHR6YyAqPSBzO1xuXHRcdFx0XHRsZXQgemIgPSAtemMsIHpkID0gemE7XG5cdFx0XHRcdGlmICh0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiBwYSAqIHBkIC0gcGIgKiBwYyA8IDAgIT09IChzeCA8IDAgIT09IHN5IDwgMCkpIHtcblx0XHRcdFx0XHR6YiA9IC16Yjtcblx0XHRcdFx0XHR6ZCA9IC16ZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByeCA9IHNoZWFyWCAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKDkwICsgc2hlYXJZKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGxhID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxkID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHR0aGlzLmEgPSAoemEgKiBsYSArIHpiICogbGMpICogc3g7XG5cdFx0XHRcdHRoaXMuYiA9ICh6YSAqIGxiICsgemIgKiBsZCkgKiBzeDtcblx0XHRcdFx0dGhpcy5jID0gKHpjICogbGEgKyB6ZCAqIGxjKSAqIHN5O1xuXHRcdFx0XHR0aGlzLmQgPSAoemMgKiBsYiArIHpkICogbGQpICogc3k7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBDb21wdXRlcyB0aGUgbG9jYWwgdHJhbnNmb3JtIHZhbHVlcyBmcm9tIHRoZSB3b3JsZCB0cmFuc2Zvcm0uXG5cdCAqXG5cdCAqIElmIHRoZSB3b3JsZCB0cmFuc2Zvcm0gaXMgbW9kaWZpZWQgKGJ5IGEgY29uc3RyYWludCwge0BsaW5rIHJvdGF0ZVdvcmxkfSwgZXRjKSB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgc29cblx0ICogdGhlIGxvY2FsIHRyYW5zZm9ybSBtYXRjaGVzIHRoZSB3b3JsZCB0cmFuc2Zvcm0uIFRoZSBsb2NhbCB0cmFuc2Zvcm0gbWF5IGJlIG5lZWRlZCBieSBvdGhlciBjb2RlIChlZyB0byBhcHBseSBhbm90aGVyXG5cdCAqIGNvbnN0cmFpbnQpLlxuXHQgKlxuXHQgKiBTb21lIGluZm9ybWF0aW9uIGlzIGFtYmlndW91cyBpbiB0aGUgd29ybGQgdHJhbnNmb3JtLCBzdWNoIGFzIC0xLC0xIHNjYWxlIHZlcnN1cyAxODAgcm90YXRpb24uIFRoZSBsb2NhbCB0cmFuc2Zvcm0gYWZ0ZXJcblx0ICogY2FsbGluZyB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBsb2NhbCB0cmFuc2Zvcm0gdXNlZCB0byBjb21wdXRlIHRoZSB3b3JsZCB0cmFuc2Zvcm0sIGJ1dCBtYXkgbm90IGJlIGlkZW50aWNhbC4gKi9cblx0cHVibGljIHVwZGF0ZUxvY2FsVHJhbnNmb3JtIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHR0aGlzLmxvY2FsID0gMDtcblx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHN4ID0gc2tlbGV0b24uc2NhbGVYLCBzeSA9IHNrZWxldG9uLnNjYWxlWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHtcblx0XHRcdGNvbnN0IHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0dGhpcy54ID0gKHRoaXMud29ybGRYIC0gc2tlbGV0b24ueCkgKiBzeGk7XG5cdFx0XHR0aGlzLnkgPSAodGhpcy53b3JsZFkgLSBza2VsZXRvbi55KSAqIHN5aTtcblx0XHRcdHRoaXMuc2V0NSh0aGlzLmEgKiBzeGksIHRoaXMuYiAqIHN4aSwgdGhpcy5jICogc3lpLCB0aGlzLmQgKiBzeWksIDApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2U7XG5cdFx0bGV0IHBhID0gcGFyZW50LmEsIHBiID0gcGFyZW50LmIsIHBjID0gcGFyZW50LmMsIHBkID0gcGFyZW50LmQ7XG5cdFx0Y29uc3QgcGFkID0gcGEgKiBwZCAtIHBiICogcGMsIHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdGNvbnN0IGlhID0gcGQgKiBwaWQsIGliID0gcGIgKiBwaWQsIGljID0gcGMgKiBwaWQsIGlkID0gcGEgKiBwaWQ7XG5cdFx0Y29uc3QgZHggPSB0aGlzLndvcmxkWCAtIHBhcmVudC53b3JsZFgsIGR5ID0gdGhpcy53b3JsZFkgLSBwYXJlbnQud29ybGRZO1xuXHRcdHRoaXMueCA9IGR4ICogaWEgLSBkeSAqIGliO1xuXHRcdHRoaXMueSA9IGR5ICogaWQgLSBkeCAqIGljO1xuXG5cdFx0c3dpdGNoICh0aGlzLmluaGVyaXQpIHtcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob3JtYWw6IHRoaXMuc2V0NShpYSAqIHRoaXMuYSAtIGliICogdGhpcy5jLCBpYSAqIHRoaXMuYiAtIGliICogdGhpcy5kLCBpZCAqIHRoaXMuYyAtIGljICogdGhpcy5hLCBpZCAqIHRoaXMuZCAtIGljICogdGhpcy5iLCAwKTsgYnJlYWs7XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0XHR0aGlzLnNldDUodGhpcy5hICogc3hpLCB0aGlzLmIgKiBzeGksIHRoaXMuYyAqIHN5aSwgdGhpcy5kICogc3lpLCAwKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9Sb3RhdGlvbk9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRjb25zdCBzeGkgPSAxIC8gc3gsIHN5aSA9IDEgLyBzeTtcblx0XHRcdFx0cGEgKj0gc3hpO1xuXHRcdFx0XHRwYyAqPSBzeWk7XG5cdFx0XHRcdGNvbnN0IHdhID0gdGhpcy5hICogc3hpLCB3YiA9IHRoaXMuYiAqIHN4aSwgd2MgPSB0aGlzLmMgKiBzeWksIHdkID0gdGhpcy5kICogc3lpO1xuXHRcdFx0XHRjb25zdCBzID0gMSAvIChwYSAqIHBhICsgcGMgKiBwYyksIGRldCA9IDEgLyBNYXRoLmFicyhwYWQgKiBzeGkgKiBzeWkpO1xuXHRcdFx0XHR0aGlzLnNldDUoKHBhICogd2EgKyBwYyAqIHdjKSAqIHMsIChwYSAqIHdiICsgcGMgKiB3ZCkgKiBzLCAocGEgKiB3YyAtIHBjICogd2EpICogZGV0LCAocGEgKiB3ZCAtIHBjICogd2IpICogZGV0LFxuXHRcdFx0XHRcdE1hdGhVdGlscy5hdGFuMkRlZyhwYywgcGEpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0XHRjb25zdCB3YSA9IHRoaXMuYSAqIHN4aSwgd2IgPSB0aGlzLmIgKiBzeGksIHdjID0gdGhpcy5jICogc3lpLCB3ZCA9IHRoaXMuZCAqIHN5aTtcblx0XHRcdFx0bGV0IHR4ID0gcGQgKiB0aGlzLmEgLSBwYiAqIHRoaXMuYywgdHkgPSBwYSAqIHRoaXMuYyAtIHBjICogdGhpcy5hO1xuXHRcdFx0XHRpZiAocGFkIDwgMCkge1xuXHRcdFx0XHRcdHR4ID0gLXR4O1xuXHRcdFx0XHRcdHR5ID0gLXR5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCByID0gTWF0aFV0aWxzLmF0YW4yRGVnKHR5LCB0eCk7XG5cdFx0XHRcdHRoaXMucm90YXRpb24gPSByO1xuXHRcdFx0XHRyICo9IE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGNvcyA9IE1hdGguY29zKHIpLCBzaW4gPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0bGV0IHphID0gKHBhICogY29zICsgcGIgKiBzaW4pICogc3hpO1xuXHRcdFx0XHRsZXQgemMgPSAocGMgKiBjb3MgKyBwZCAqIHNpbikgKiBzeWk7XG5cdFx0XHRcdGNvbnN0IHMgPSAxIC8gTWF0aC5zcXJ0KHphICogemEgKyB6YyAqIHpjKTtcblx0XHRcdFx0emEgKj0gcztcblx0XHRcdFx0emMgKj0gcztcblx0XHRcdFx0Y29uc3Qgc2kgPSB0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiBwYWQgPCAwICE9PSAoc3ggPCAwICE9PSBzeSA8IDApID8gLTEgOiAxO1xuXHRcdFx0XHR0aGlzLnNldDQoemEgKiB3YSArIHpjICogd2MsIHphICogd2IgKyB6YyAqIHdkLCAoemEgKiB3YyAtIHpjICogd2EpICogc2ksICh6YSAqIHdkIC0gemMgKiB3YikgKiBzaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzZXQ0IChyYTogbnVtYmVyLCByYjogbnVtYmVyLCByYzogbnVtYmVyLCByZDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgeCA9IHJhICogcmEgKyByYyAqIHJjLCB5ID0gcmIgKiByYiArIHJkICogcmQ7XG5cdFx0aWYgKHggPiBNYXRoVXRpbHMuZXBzaWxvbjIpIHtcblx0XHRcdHRoaXMuc2hlYXJYID0gTWF0aFV0aWxzLmF0YW4yRGVnKHJjLCByYSk7XG5cdFx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydCh4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaGVhclggPSAwO1xuXHRcdFx0dGhpcy5zY2FsZVggPSAwO1xuXHRcdH1cblx0XHR0aGlzLnNjYWxlWSA9IE1hdGguc3FydCh5KTtcblx0XHRpZiAoeSA+IE1hdGhVdGlscy5lcHNpbG9uMikge1xuXHRcdFx0dGhpcy5zaGVhclkgPSBNYXRoVXRpbHMuYXRhbjJEZWcocmQsIHJiKTtcblx0XHRcdGlmIChyYSAqIHJkIC0gcmIgKiByYyA8IDApIHtcblx0XHRcdFx0dGhpcy5zY2FsZVkgPSAtdGhpcy5zY2FsZVk7XG5cdFx0XHRcdHRoaXMuc2hlYXJZICs9IDkwO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHRoaXMuc2hlYXJZIC09IDkwO1xuXHRcdFx0aWYgKHRoaXMuc2hlYXJZID4gMTgwKVxuXHRcdFx0XHR0aGlzLnNoZWFyWSAtPSAzNjA7XG5cdFx0XHRlbHNlIGlmICh0aGlzLnNoZWFyWSA8PSAtMTgwKSAvL1xuXHRcdFx0XHR0aGlzLnNoZWFyWSArPSAzNjA7XG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLnNoZWFyWSA9IDA7XG5cdH1cblxuXHRwcml2YXRlIHNldDUgKHJhOiBudW1iZXIsIHJiOiBudW1iZXIsIHJjOiBudW1iZXIsIHJkOiBudW1iZXIsIHJvOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLnNoZWFyWCA9IDA7XG5cdFx0Y29uc3QgeCA9IHJhICogcmEgKyByYyAqIHJjLCB5ID0gcmIgKiByYiArIHJkICogcmQ7XG5cdFx0aWYgKHggPiBNYXRoVXRpbHMuZXBzaWxvbjIpIHtcblx0XHRcdGNvbnN0IHIgPSBNYXRoVXRpbHMuYXRhbjJEZWcocmMsIHJhKTtcblx0XHRcdHRoaXMucm90YXRpb24gPSByICsgcm87XG5cdFx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydCh4KTtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHkpO1xuXHRcdFx0aWYgKHkgPiBNYXRoVXRpbHMuZXBzaWxvbjIpIHtcblx0XHRcdFx0dGhpcy5zaGVhclkgPSBNYXRoVXRpbHMuYXRhbjJEZWcocmQsIHJiKTtcblx0XHRcdFx0aWYgKHJhICogcmQgLSByYiAqIHJjIDwgMCkge1xuXHRcdFx0XHRcdHRoaXMuc2NhbGVZID0gLXRoaXMuc2NhbGVZO1xuXHRcdFx0XHRcdHRoaXMuc2hlYXJZICs9IDkwIC0gcjtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0dGhpcy5zaGVhclkgLT0gOTAgKyByO1xuXHRcdFx0XHRpZiAodGhpcy5zaGVhclkgPiAxODApXG5cdFx0XHRcdFx0dGhpcy5zaGVhclkgLT0gMzYwO1xuXHRcdFx0XHRlbHNlIGlmICh0aGlzLnNoZWFyWSA8PSAtMTgwKSAvL1xuXHRcdFx0XHRcdHRoaXMuc2hlYXJZICs9IDM2MDtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHR0aGlzLnNoZWFyWSA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2NhbGVYID0gMDtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHkpO1xuXHRcdFx0dGhpcy5zaGVhclkgPSAwO1xuXHRcdFx0dGhpcy5yb3RhdGlvbiA9IHkgPiBNYXRoVXRpbHMuZXBzaWxvbjIgPyBNYXRoVXRpbHMuYXRhbjJEZWcocmQsIHJiKSAtIDkwICsgcm8gOiBybztcblx0XHR9XG5cdH1cblxuXHQvKiogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBoYXMgYmVlbiBtb2RpZmllZCBieSBjb25zdHJhaW50cyBhbmQgdGhlIGxvY2FsIHRyYW5zZm9ybSBubyBsb25nZXIgbWF0Y2hlcyxcblx0ICoge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBpcyBjYWxsZWQuIENhbGwgdGhpcyBhZnRlciB7QGxpbmsgU2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm19IGJlZm9yZVxuXHQgKiB1c2luZyB0aGUgYXBwbGllZCBsb2NhbCB0cmFuc2Zvcm0uICovXG5cdHB1YmxpYyB2YWxpZGF0ZUxvY2FsVHJhbnNmb3JtIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbCA9PT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHRtb2RpZnlMb2NhbCAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpIHRoaXMudXBkYXRlTG9jYWxUcmFuc2Zvcm0oc2tlbGV0b24pO1xuXHRcdHRoaXMud29ybGQgPSAwO1xuXHRcdHRoaXMucmVzZXRXb3JsZChza2VsZXRvbi5fdXBkYXRlKTtcblx0fVxuXG5cdG1vZGlmeVdvcmxkICh1cGRhdGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubG9jYWwgPSB1cGRhdGU7XG5cdFx0dGhpcy53b3JsZCA9IHVwZGF0ZTtcblx0XHR0aGlzLnJlc2V0V29ybGQodXBkYXRlKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRXb3JsZCAodXBkYXRlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuYm9uZS5jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXS5hcHBsaWVkUG9zZTtcblx0XHRcdGlmIChjaGlsZC53b3JsZCA9PT0gdXBkYXRlKSB7XG5cdFx0XHRcdGNoaWxkLndvcmxkID0gMDtcblx0XHRcdFx0Y2hpbGQubG9jYWwgPSAwO1xuXHRcdFx0XHRjaGlsZC5yZXNldFdvcmxkKHVwZGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIFRoZSB3b3JsZCByb3RhdGlvbiBmb3IgdGhlIFggYXhpcywgY2FsY3VsYXRlZCB1c2luZyB7QGxpbmsgYX0gYW5kIHtAbGluayBjfS4gVGhpcyBpcyB0aGUgZGlyZWN0aW9uIHRoZSBib25lIGlzXG5cdCAqIHBvaW50aW5nLiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRSb3RhdGlvblggKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGhVdGlscy5hdGFuMkRlZyh0aGlzLmMsIHRoaXMuYSk7XG5cdH1cblxuXHQvKiogVGhlIHdvcmxkIHJvdGF0aW9uIGZvciB0aGUgWSBheGlzLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBifSBhbmQge0BsaW5rIGR9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRSb3RhdGlvblkgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGhVdGlscy5hdGFuMkRlZyh0aGlzLmQsIHRoaXMuYik7XG5cdH1cblxuXHQvKiogVGhlIG1hZ25pdHVkZSAoYWx3YXlzIHBvc2l0aXZlKSBvZiB0aGUgd29ybGQgc2NhbGUgWCwgY2FsY3VsYXRlZCB1c2luZyB7QGxpbmsgYX0gYW5kIHtAbGluayBjfS4gKi9cblx0cHVibGljIGdldFdvcmxkU2NhbGVYICgpOiBudW1iZXIge1xuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy5hICogdGhpcy5hICsgdGhpcy5jICogdGhpcy5jKTtcblx0fVxuXG5cdC8qKiBUaGUgbWFnbml0dWRlIChhbHdheXMgcG9zaXRpdmUpIG9mIHRoZSB3b3JsZCBzY2FsZSBZLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBifSBhbmQge0BsaW5rIGR9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRTY2FsZVkgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmIgKiB0aGlzLmIgKyB0aGlzLmQgKiB0aGlzLmQpO1xuXHR9XG5cblx0Ly8gcHVibGljIE1hdHJpeDMgZ2V0V29ybGRUcmFuc2Zvcm0gKE1hdHJpeDMgd29ybGRUcmFuc2Zvcm0pIHtcblx0Ly8gXHRpZiAod29ybGRUcmFuc2Zvcm0gPT0gbnVsbCkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihcIndvcmxkVHJhbnNmb3JtIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0Ly8gXHRmbG9hdFtdIHZhbCA9IHdvcmxkVHJhbnNmb3JtLnZhbDtcblx0Ly8gXHR2YWxbTTAwXSA9IGE7XG5cdC8vIFx0dmFsW00wMV0gPSBiO1xuXHQvLyBcdHZhbFtNMTBdID0gYztcblx0Ly8gXHR2YWxbTTExXSA9IGQ7XG5cdC8vIFx0dmFsW00wMl0gPSB3b3JsZFg7XG5cdC8vIFx0dmFsW00xMl0gPSB3b3JsZFk7XG5cdC8vIFx0dmFsW00yMF0gPSAwO1xuXHQvLyBcdHZhbFtNMjFdID0gMDtcblx0Ly8gXHR2YWxbTTIyXSA9IDE7XG5cdC8vIFx0cmV0dXJuIHdvcmxkVHJhbnNmb3JtO1xuXHQvLyB9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSBwb2ludCBmcm9tIHdvcmxkIGNvb3JkaW5hdGVzIHRvIHRoZSBib25lJ3MgbG9jYWwgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyB3b3JsZFRvTG9jYWwgKHdvcmxkOiBWZWN0b3IyKTogVmVjdG9yMiB7XG5cdFx0aWYgKHdvcmxkID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIndvcmxkIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBkZXQgPSB0aGlzLmEgKiB0aGlzLmQgLSB0aGlzLmIgKiB0aGlzLmM7XG5cdFx0Y29uc3QgeCA9IHdvcmxkLnggLSB0aGlzLndvcmxkWCwgeSA9IHdvcmxkLnkgLSB0aGlzLndvcmxkWTtcblx0XHR3b3JsZC54ID0gKHggKiB0aGlzLmQgLSB5ICogdGhpcy5iKSAvIGRldDtcblx0XHR3b3JsZC55ID0gKHkgKiB0aGlzLmEgLSB4ICogdGhpcy5jKSAvIGRldDtcblx0XHRyZXR1cm4gd29ybGQ7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlcyB0byB3b3JsZCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIGxvY2FsVG9Xb3JsZCAobG9jYWw6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAobG9jYWwgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwibG9jYWwgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHggPSBsb2NhbC54LCB5ID0gbG9jYWwueTtcblx0XHRsb2NhbC54ID0geCAqIHRoaXMuYSArIHkgKiB0aGlzLmIgKyB0aGlzLndvcmxkWDtcblx0XHRsb2NhbC55ID0geCAqIHRoaXMuYyArIHkgKiB0aGlzLmQgKyB0aGlzLndvcmxkWTtcblx0XHRyZXR1cm4gbG9jYWw7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gd29ybGQgY29vcmRpbmF0ZXMgdG8gdGhlIHBhcmVudCBib25lJ3MgbG9jYWwgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyB3b3JsZFRvUGFyZW50ICh3b3JsZDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmICh3b3JsZCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JsZCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5wYXJlbnQgPT0gbnVsbCA/IHdvcmxkIDogdGhpcy5ib25lLnBhcmVudC5hcHBsaWVkUG9zZS53b3JsZFRvTG9jYWwod29ybGQpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSBwb2ludCBmcm9tIHRoZSBwYXJlbnQgYm9uZSdzIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLiAqL1xuXHRwdWJsaWMgcGFyZW50VG9Xb3JsZCAod29ybGQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAod29ybGQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwid29ybGQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHJldHVybiB0aGlzLmJvbmUucGFyZW50ID09IG51bGwgPyB3b3JsZCA6IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2UubG9jYWxUb1dvcmxkKHdvcmxkKTtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgd29ybGQgcm90YXRpb24gdG8gYSBsb2NhbCByb3RhdGlvbi4gKi9cblx0cHVibGljIHdvcmxkVG9Mb2NhbFJvdGF0aW9uICh3b3JsZFJvdGF0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHdvcmxkUm90YXRpb24gKj0gTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbih3b3JsZFJvdGF0aW9uKSwgY29zID0gTWF0aC5jb3Mod29ybGRSb3RhdGlvbik7XG5cdFx0cmV0dXJuIE1hdGhVdGlscy5hdGFuMkRlZyh0aGlzLmEgKiBzaW4gLSB0aGlzLmMgKiBjb3MsIHRoaXMuZCAqIGNvcyAtIHRoaXMuYiAqIHNpbikgKyB0aGlzLnJvdGF0aW9uIC0gdGhpcy5zaGVhclg7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIGxvY2FsIHJvdGF0aW9uIHRvIGEgd29ybGQgcm90YXRpb24uICovXG5cdGxvY2FsVG9Xb3JsZFJvdGF0aW9uIChsb2NhbFJvdGF0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGxvY2FsUm90YXRpb24gPSAobG9jYWxSb3RhdGlvbiAtIHRoaXMucm90YXRpb24gLSB0aGlzLnNoZWFyWCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKGxvY2FsUm90YXRpb24pLCBjb3MgPSBNYXRoLmNvcyhsb2NhbFJvdGF0aW9uKTtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKGNvcyAqIHRoaXMuYyArIHNpbiAqIHRoaXMuZCwgY29zICogdGhpcy5hICsgc2luICogdGhpcy5iKTtcblx0fVxuXG5cdC8qKiBSb3RhdGVzIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdGhlIHNwZWNpZmllZCBhbW91bnQuICovXG5cdHJvdGF0ZVdvcmxkIChkZWdyZWVzOiBudW1iZXIpIHtcblx0XHRkZWdyZWVzICo9IE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4oZGVncmVlcyksIGNvcyA9IE1hdGguY29zKGRlZ3JlZXMpO1xuXHRcdGNvbnN0IHJhID0gdGhpcy5hLCByYiA9IHRoaXMuYjtcblx0XHR0aGlzLmEgPSBjb3MgKiByYSAtIHNpbiAqIHRoaXMuYztcblx0XHR0aGlzLmIgPSBjb3MgKiByYiAtIHNpbiAqIHRoaXMuZDtcblx0XHR0aGlzLmMgPSBzaW4gKiByYSArIGNvcyAqIHRoaXMuYztcblx0XHR0aGlzLmQgPSBzaW4gKiByYiArIGNvcyAqIHRoaXMuZDtcblx0fVxufVxuIl19
@@ -35,3 +35,12 @@ export declare abstract class ConstraintData<T extends Constraint<T, ConstraintD
35
35
  constructor(name: string, setup: P);
36
36
  abstract create(skeleton: Skeleton): T;
37
37
  }
38
+ /** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} is set. */
39
+ export declare enum ScaleYMode {
40
+ /** scaleY is not changed. */
41
+ None = 0,
42
+ /** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */
43
+ Uniform = 1,
44
+ /** scaleY is divided by the scaleX factor, preserving the bone's area. */
45
+ Volume = 2
46
+ }
@@ -33,4 +33,14 @@ export class ConstraintData extends PosedData {
33
33
  super(name, setup);
34
34
  }
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RyYWludERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29uc3RyYWludERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQywrQ0FBK0M7QUFDL0MsTUFBTSxPQUFnQixjQUdyQixTQUFRLFNBQVk7SUFFcEIsWUFBYSxJQUFZLEVBQUUsS0FBUTtRQUNsQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FHRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBDb25zdHJhaW50IH0gZnJvbSBcIi4vQ29uc3RyYWludC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3NlIH0gZnJvbSBcIi4vUG9zZS5qc1wiO1xuaW1wb3J0IHsgUG9zZWREYXRhIH0gZnJvbSBcIi4vUG9zZWREYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgY29uc3RyYWludCBkYXRhcy4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb25zdHJhaW50RGF0YTxcblx0VCBleHRlbmRzIENvbnN0cmFpbnQ8VCwgQ29uc3RyYWludERhdGE8VCwgUD4sIFA+LFxuXHRQIGV4dGVuZHMgUG9zZTxQPj5cblx0ZXh0ZW5kcyBQb3NlZERhdGE8UD4ge1xuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcsIHNldHVwOiBQKSB7XG5cdFx0c3VwZXIobmFtZSwgc2V0dXApO1xuXHR9XG5cblx0YWJzdHJhY3QgY3JlYXRlIChza2VsZXRvbjogU2tlbGV0b24pOiBUO1xufVxuIl19
36
+ /** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} is set. */
37
+ export var ScaleYMode;
38
+ (function (ScaleYMode) {
39
+ /** scaleY is not changed. */
40
+ ScaleYMode[ScaleYMode["None"] = 0] = "None";
41
+ /** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */
42
+ ScaleYMode[ScaleYMode["Uniform"] = 1] = "Uniform";
43
+ /** scaleY is divided by the scaleX factor, preserving the bone's area. */
44
+ ScaleYMode[ScaleYMode["Volume"] = 2] = "Volume";
45
+ })(ScaleYMode || (ScaleYMode = {}));
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RyYWludERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29uc3RyYWludERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQywrQ0FBK0M7QUFDL0MsTUFBTSxPQUFnQixjQUdyQixTQUFRLFNBQVk7SUFFcEIsWUFBYSxJQUFZLEVBQUUsS0FBUTtRQUNsQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FHRDtBQUVELDhGQUE4RjtBQUM5RixNQUFNLENBQU4sSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3JCLDZCQUE2QjtJQUM3QiwyQ0FBSSxDQUFBO0lBQ0oscUZBQXFGO0lBQ3JGLGlEQUFPLENBQUE7SUFDUCwwRUFBMEU7SUFDMUUsK0NBQU0sQ0FBQTtBQUNQLENBQUMsRUFQVyxVQUFVLEtBQVYsVUFBVSxRQU9yQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBCb25lUG9zZSB9IGZyb20gXCIuL0JvbmVQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnN0cmFpbnQgfSBmcm9tIFwiLi9Db25zdHJhaW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2UgfSBmcm9tIFwiLi9Qb3NlLmpzXCI7XG5pbXBvcnQgeyBQb3NlZERhdGEgfSBmcm9tIFwiLi9Qb3NlZERhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJhaW50IGRhdGFzLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnN0cmFpbnREYXRhPFxuXHRUIGV4dGVuZHMgQ29uc3RyYWludDxULCBDb25zdHJhaW50RGF0YTxULCBQPiwgUD4sXG5cdFAgZXh0ZW5kcyBQb3NlPFA+PlxuXHRleHRlbmRzIFBvc2VkRGF0YTxQPiB7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZywgc2V0dXA6IFApIHtcblx0XHRzdXBlcihuYW1lLCBzZXR1cCk7XG5cdH1cblxuXHRhYnN0cmFjdCBjcmVhdGUgKHNrZWxldG9uOiBTa2VsZXRvbik6IFQ7XG59XG5cbi8qKiBEZXRlcm1pbmVzIGhvdyB0aGUge0BsaW5rIEJvbmVQb3NlLnNjYWxlWX0gY2hhbmdlcyB3aGVuIHtAbGluayBCb25lUG9zZS5zY2FsZVh9IGlzIHNldC4gKi9cbmV4cG9ydCBlbnVtIFNjYWxlWU1vZGUge1xuXHQvKiogc2NhbGVZIGlzIG5vdCBjaGFuZ2VkLiAqL1xuXHROb25lLFxuXHQvKiogc2NhbGVZIGlzIG11bHRpcGxpZWQgYnkgdGhlIHNjYWxlWCBmYWN0b3IsIHByZXNlcnZpbmcgdGhlIGJvbmUncyBhc3BlY3QgcmF0aW8uICovXG5cdFVuaWZvcm0sXG5cdC8qKiBzY2FsZVkgaXMgZGl2aWRlZCBieSB0aGUgc2NhbGVYIGZhY3RvciwgcHJlc2VydmluZyB0aGUgYm9uZSdzIGFyZWEuICovXG5cdFZvbHVtZVxufVxuIl19
@@ -29,7 +29,8 @@
29
29
  import type { Bone } from "./Bone.js";
30
30
  import type { BonePose } from "./BonePose.js";
31
31
  import { Constraint } from "./Constraint.js";
32
- import { type IkConstraintData, ScaleYMode } from "./IkConstraintData.js";
32
+ import { ScaleYMode } from "./ConstraintData.js";
33
+ import type { IkConstraintData } from "./IkConstraintData.js";
33
34
  import { IkConstraintPose } from "./IkConstraintPose.js";
34
35
  import type { Physics } from "./Physics.js";
35
36
  import type { Skeleton } from "./Skeleton.js";