belowjs 1.2.0 → 1.4.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.
package/dist/belowjs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as u from "three";
2
- import { Controls as Gi, Vector3 as D, MOUSE as Ce, TOUCH as pe, Quaternion as Ue, Spherical as vt, Vector2 as H, Ray as Pi, Plane as Ni, MathUtils as It, TrianglesDrawMode as Ui, TriangleFanDrawMode as lt, TriangleStripDrawMode as oi, Loader as Et, LoaderUtils as xe, FileLoader as le, MeshPhysicalMaterial as ee, Color as re, LinearSRGBColorSpace as Y, SRGBColorSpace as se, SpotLight as Hi, PointLight as Vi, DirectionalLight as Oi, Matrix4 as Re, InstancedMesh as qi, InstancedBufferAttribute as ji, Object3D as Bt, TextureLoader as Ki, ImageBitmapLoader as zi, BufferAttribute as ve, InterleavedBuffer as Yi, InterleavedBufferAttribute as Ae, LinearMipmapLinearFilter as Ve, NearestMipmapLinearFilter as Ji, LinearMipmapNearestFilter as Wi, NearestMipmapNearestFilter as Xi, LinearFilter as he, NearestFilter as ni, RepeatWrapping as ct, MirroredRepeatWrapping as Zi, ClampToEdgeWrapping as $i, PointsMaterial as es, Material as je, LineBasicMaterial as ts, MeshStandardMaterial as ri, DoubleSide as is, MeshBasicMaterial as fe, PropertyBinding as ss, BufferGeometry as ai, SkinnedMesh as os, Mesh as Qt, LineSegments as ns, Line as rs, LineLoop as as, Points as As, Group as Ke, PerspectiveCamera as ls, OrthographicCamera as cs, Skeleton as hs, AnimationClip as ds, Bone as gs, InterpolateDiscrete as us, InterpolateLinear as Ai, Texture as Dt, VectorKeyframeTrack as Rt, NumberKeyframeTrack as Lt, QuaternionKeyframeTrack as Tt, ColorManagement as ht, FrontSide as ps, Interpolant as fs, Box3 as Oe, Sphere as wt, CompressedCubeTexture as ms, CompressedArrayTexture as bs, CompressedTexture as li, NoColorSpace as Ft, RGBA_BPTC_Format as dt, RGBA_S3TC_DXT5_Format as gt, RGBA_S3TC_DXT3_Format as kt, RGB_S3TC_DXT1_Format as _t, RGBA_S3TC_DXT1_Format as ut, RGBA_ASTC_6x6_Format as Gt, RGBA_ASTC_4x4_Format as Ge, RGBA_ETC2_EAC_Format as ci, RGB_ETC2_Format as hi, RedFormat as Se, RGFormat as Me, RGBAFormat as me, UnsignedByteType as z, HalfFloatType as be, FloatType as De, DataTexture as Cs, Data3DTexture as Is, RGB_PVRTC_4BPPV1_Format as Es, RGB_ETC1_Format as Bs, RGBA_PVRTC_4BPPV1_Format as Qs, RGB_BPTC_UNSIGNED_Format as ws, SphereGeometry as ys, InstancedBufferGeometry as Ss, Float32BufferAttribute as Pt, InstancedInterleavedBuffer as pt, WireframeGeometry as Ms, ShaderMaterial as xs, ShaderLib as Pe, UniformsUtils as di, UniformsLib as Ne, Vector4 as Le, Line3 as vs } from "three";
3
- class yt {
2
+ import { Controls as Oi, Vector3 as R, MOUSE as Ce, TOUCH as pe, Quaternion as Ue, Spherical as Dt, Vector2 as V, Ray as Hi, Plane as qi, MathUtils as Bt, TrianglesDrawMode as ji, TriangleFanDrawMode as ht, TriangleStripDrawMode as li, Loader as yt, LoaderUtils as ve, FileLoader as le, MeshPhysicalMaterial as ee, Color as re, LinearSRGBColorSpace as Y, SRGBColorSpace as se, SpotLight as Ki, PointLight as zi, DirectionalLight as Yi, Matrix4 as Ie, InstancedMesh as ci, InstancedBufferAttribute as Ji, Object3D as Oe, TextureLoader as Wi, ImageBitmapLoader as Xi, BufferAttribute as Re, InterleavedBuffer as Zi, InterleavedBufferAttribute as Ae, LinearMipmapLinearFilter as He, NearestMipmapLinearFilter as $i, LinearMipmapNearestFilter as es, NearestMipmapNearestFilter as ts, LinearFilter as he, NearestFilter as hi, RepeatWrapping as dt, MirroredRepeatWrapping as is, ClampToEdgeWrapping as ss, PointsMaterial as os, Material as ze, LineBasicMaterial as ns, MeshStandardMaterial as wt, DoubleSide as rs, MeshBasicMaterial as fe, PropertyBinding as as, BufferGeometry as di, SkinnedMesh as As, Mesh as Qt, LineSegments as ls, Line as cs, LineLoop as hs, Points as ds, Group as Ye, PerspectiveCamera as gs, OrthographicCamera as us, Skeleton as ps, AnimationClip as fs, Bone as ms, InterpolateDiscrete as bs, InterpolateLinear as gi, Texture as Tt, VectorKeyframeTrack as Lt, NumberKeyframeTrack as Ft, QuaternionKeyframeTrack as kt, ColorManagement as gt, FrontSide as Cs, Interpolant as Es, Box3 as qe, Sphere as St, CompressedCubeTexture as Is, CompressedArrayTexture as Bs, CompressedTexture as ui, NoColorSpace as _t, RGBA_BPTC_Format as ut, RGBA_S3TC_DXT5_Format as pt, RGBA_S3TC_DXT3_Format as Gt, RGB_S3TC_DXT1_Format as Pt, RGBA_S3TC_DXT1_Format as ft, RGBA_ASTC_6x6_Format as Nt, RGBA_ASTC_4x4_Format as Ge, RGBA_ETC2_EAC_Format as pi, RGB_ETC2_Format as fi, RedFormat as Me, RGFormat as xe, RGBAFormat as me, UnsignedByteType as z, HalfFloatType as be, FloatType as De, DataTexture as ys, Data3DTexture as ws, RGB_PVRTC_4BPPV1_Format as Qs, RGB_ETC1_Format as Ss, RGBA_PVRTC_4BPPV1_Format as Ms, RGB_BPTC_UNSIGNED_Format as xs, SphereGeometry as mi, BoxGeometry as vs, DynamicDrawUsage as Rs, InstancedBufferGeometry as Ds, Float32BufferAttribute as Ut, InstancedInterleavedBuffer as mt, WireframeGeometry as Ts, ShaderMaterial as Ls, ShaderLib as Pe, UniformsUtils as bi, UniformsLib as Ne, Vector4 as Te, Line3 as Fs } from "three";
3
+ class je {
4
4
  /**
5
5
  * Creates a new EventSystem instance
6
6
  */
@@ -96,7 +96,7 @@ class yt {
96
96
  return this.events = {}, this;
97
97
  }
98
98
  }
99
- class qe {
99
+ class Ke {
100
100
  /**
101
101
  * @param {object} schema - Defines validation rules for each configuration key.
102
102
  */
@@ -116,7 +116,7 @@ class qe {
116
116
  const o = this.schema[s], n = i[s];
117
117
  if (o.type === "object" && o.schema) {
118
118
  const r = n ?? o.default;
119
- t[s] = new qe(o.schema).validate(r || {});
119
+ t[s] = new Ke(o.schema).validate(r || {});
120
120
  } else if (n == null)
121
121
  t[s] = o.default;
122
122
  else if (this.isTypeValid(n, o.type))
@@ -143,7 +143,7 @@ class qe {
143
143
  return Array.isArray(t) ? t.some((s) => i(e, s)) : i(e, t);
144
144
  }
145
145
  }
146
- class Ds {
146
+ class ks {
147
147
  constructor(e = {}) {
148
148
  this.config = e, this.scene = new u.Scene(), this.init();
149
149
  }
@@ -164,7 +164,7 @@ class Ds {
164
164
  this.scene.clear();
165
165
  }
166
166
  }
167
- const Nt = { type: "change" }, St = { type: "start" }, gi = { type: "end" }, Te = new Pi(), Ut = new Ni(), Rs = Math.cos(70 * It.DEG2RAD), k = new D(), U = 2 * Math.PI, x = {
167
+ const Vt = { type: "change" }, Mt = { type: "start" }, Ci = { type: "end" }, Le = new Hi(), Ot = new qi(), _s = Math.cos(70 * Bt.DEG2RAD), k = new R(), U = 2 * Math.PI, x = {
168
168
  NONE: -1,
169
169
  ROTATE: 0,
170
170
  DOLLY: 1,
@@ -173,8 +173,8 @@ const Nt = { type: "change" }, St = { type: "start" }, gi = { type: "end" }, Te
173
173
  TOUCH_PAN: 4,
174
174
  TOUCH_DOLLY_PAN: 5,
175
175
  TOUCH_DOLLY_ROTATE: 6
176
- }, ze = 1e-6;
177
- class Ls extends Gi {
176
+ }, Je = 1e-6;
177
+ class Gs extends Oi {
178
178
  /**
179
179
  * Constructs a new controls instance.
180
180
  *
@@ -182,7 +182,7 @@ class Ls extends Gi {
182
182
  * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
183
183
  */
184
184
  constructor(e, t = null) {
185
- super(e, t), this.state = x.NONE, this.target = new D(), this.cursor = new D(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: Ce.ROTATE, MIDDLE: Ce.DOLLY, RIGHT: Ce.PAN }, this.touches = { ONE: pe.ROTATE, TWO: pe.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new D(), this._lastQuaternion = new Ue(), this._lastTargetPosition = new D(), this._quat = new Ue().setFromUnitVectors(e.up, new D(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new vt(), this._sphericalDelta = new vt(), this._scale = 1, this._panOffset = new D(), this._rotateStart = new H(), this._rotateEnd = new H(), this._rotateDelta = new H(), this._panStart = new H(), this._panEnd = new H(), this._panDelta = new H(), this._dollyStart = new H(), this._dollyEnd = new H(), this._dollyDelta = new H(), this._dollyDirection = new D(), this._mouse = new H(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = Fs.bind(this), this._onPointerDown = Ts.bind(this), this._onPointerUp = ks.bind(this), this._onContextMenu = Vs.bind(this), this._onMouseWheel = Ps.bind(this), this._onKeyDown = Ns.bind(this), this._onTouchStart = Us.bind(this), this._onTouchMove = Hs.bind(this), this._onMouseDown = _s.bind(this), this._onMouseMove = Gs.bind(this), this._interceptControlDown = Os.bind(this), this._interceptControlUp = qs.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
185
+ super(e, t), this.state = x.NONE, this.target = new R(), this.cursor = new R(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: Ce.ROTATE, MIDDLE: Ce.DOLLY, RIGHT: Ce.PAN }, this.touches = { ONE: pe.ROTATE, TWO: pe.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new R(), this._lastQuaternion = new Ue(), this._lastTargetPosition = new R(), this._quat = new Ue().setFromUnitVectors(e.up, new R(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new Dt(), this._sphericalDelta = new Dt(), this._scale = 1, this._panOffset = new R(), this._rotateStart = new V(), this._rotateEnd = new V(), this._rotateDelta = new V(), this._panStart = new V(), this._panEnd = new V(), this._panDelta = new V(), this._dollyStart = new V(), this._dollyEnd = new V(), this._dollyDelta = new V(), this._dollyDirection = new R(), this._mouse = new V(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = Ns.bind(this), this._onPointerDown = Ps.bind(this), this._onPointerUp = Us.bind(this), this._onContextMenu = zs.bind(this), this._onMouseWheel = Hs.bind(this), this._onKeyDown = qs.bind(this), this._onTouchStart = js.bind(this), this._onTouchMove = Ks.bind(this), this._onMouseDown = Vs.bind(this), this._onMouseMove = Os.bind(this), this._interceptControlDown = Ys.bind(this), this._interceptControlUp = Js.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
186
186
  }
187
187
  connect(e) {
188
188
  super.connect(e), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: !1 }), this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, { passive: !0, capture: !0 }), this.domElement.style.touchAction = "none";
@@ -243,7 +243,7 @@ class Ls extends Gi {
243
243
  * was called, or the initial state.
244
244
  */
245
245
  reset() {
246
- this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(Nt), this.update(), this.state = x.NONE;
246
+ this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(Vt), this.update(), this.state = x.NONE;
247
247
  }
248
248
  update(e = null) {
249
249
  const t = this.object.position;
@@ -265,20 +265,20 @@ class Ls extends Gi {
265
265
  const A = r - n;
266
266
  this.object.position.addScaledVector(this._dollyDirection, A), this.object.updateMatrixWorld(), o = !!A;
267
267
  } else if (this.object.isOrthographicCamera) {
268
- const r = new D(this._mouse.x, this._mouse.y, 0);
268
+ const r = new R(this._mouse.x, this._mouse.y, 0);
269
269
  r.unproject(this.object);
270
270
  const A = this.object.zoom;
271
271
  this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), this.object.updateProjectionMatrix(), o = A !== this.object.zoom;
272
- const a = new D(this._mouse.x, this._mouse.y, 0);
272
+ const a = new R(this._mouse.x, this._mouse.y, 0);
273
273
  a.unproject(this.object), this.object.position.sub(a).add(r), this.object.updateMatrixWorld(), n = k.length();
274
274
  } else
275
275
  console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1;
276
- n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (Te.origin.copy(this.object.position), Te.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(Te.direction)) < Rs ? this.object.lookAt(this.target) : (Ut.setFromNormalAndCoplanarPoint(this.object.up, this.target), Te.intersectPlane(Ut, this.target))));
276
+ n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (Le.origin.copy(this.object.position), Le.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(Le.direction)) < _s ? this.object.lookAt(this.target) : (Ot.setFromNormalAndCoplanarPoint(this.object.up, this.target), Le.intersectPlane(Ot, this.target))));
277
277
  } else if (this.object.isOrthographicCamera) {
278
278
  const n = this.object.zoom;
279
279
  this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), n !== this.object.zoom && (this.object.updateProjectionMatrix(), o = !0);
280
280
  }
281
- return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > ze || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > ze || this._lastTargetPosition.distanceToSquared(this.target) > ze ? (this.dispatchEvent(Nt), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
281
+ return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > Je || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > Je || this._lastTargetPosition.distanceToSquared(this.target) > Je ? (this.dispatchEvent(Vt), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
282
282
  }
283
283
  _getAutoRotationAngle(e) {
284
284
  return e !== null ? U / 60 * this.autoRotateSpeed * e : U / 60 / 60 * this.autoRotateSpeed;
@@ -446,7 +446,7 @@ class Ls extends Gi {
446
446
  }
447
447
  _trackPointer(e) {
448
448
  let t = this._pointerPositions[e.pointerId];
449
- t === void 0 && (t = new H(), this._pointerPositions[e.pointerId] = t), t.set(e.pageX, e.pageY);
449
+ t === void 0 && (t = new V(), this._pointerPositions[e.pointerId] = t), t.set(e.pageX, e.pageY);
450
450
  }
451
451
  _getSecondPointerPosition(e) {
452
452
  const t = e.pointerId === this._pointers[0] ? this._pointers[1] : this._pointers[0];
@@ -470,16 +470,16 @@ class Ls extends Gi {
470
470
  return e.ctrlKey && !this._controlActive && (i.deltaY *= 10), i;
471
471
  }
472
472
  }
473
- function Ts(c) {
473
+ function Ps(c) {
474
474
  this.enabled !== !1 && (this._pointers.length === 0 && (this.domElement.setPointerCapture(c.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), !this._isTrackingPointer(c) && (this._addPointer(c), c.pointerType === "touch" ? this._onTouchStart(c) : this._onMouseDown(c)));
475
475
  }
476
- function Fs(c) {
476
+ function Ns(c) {
477
477
  this.enabled !== !1 && (c.pointerType === "touch" ? this._onTouchMove(c) : this._onMouseMove(c));
478
478
  }
479
- function ks(c) {
479
+ function Us(c) {
480
480
  switch (this._removePointer(c), this._pointers.length) {
481
481
  case 0:
482
- this.domElement.releasePointerCapture(c.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(gi), this.state = x.NONE;
482
+ this.domElement.releasePointerCapture(c.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(Ci), this.state = x.NONE;
483
483
  break;
484
484
  case 1:
485
485
  const e = this._pointers[0], t = this._pointerPositions[e];
@@ -487,7 +487,7 @@ function ks(c) {
487
487
  break;
488
488
  }
489
489
  }
490
- function _s(c) {
490
+ function Vs(c) {
491
491
  let e;
492
492
  switch (c.button) {
493
493
  case 0:
@@ -528,9 +528,9 @@ function _s(c) {
528
528
  default:
529
529
  this.state = x.NONE;
530
530
  }
531
- this.state !== x.NONE && this.dispatchEvent(St);
531
+ this.state !== x.NONE && this.dispatchEvent(Mt);
532
532
  }
533
- function Gs(c) {
533
+ function Os(c) {
534
534
  switch (this.state) {
535
535
  case x.ROTATE:
536
536
  if (this.enableRotate === !1) return;
@@ -546,13 +546,13 @@ function Gs(c) {
546
546
  break;
547
547
  }
548
548
  }
549
- function Ps(c) {
550
- this.enabled === !1 || this.enableZoom === !1 || this.state !== x.NONE || (c.preventDefault(), this.dispatchEvent(St), this._handleMouseWheel(this._customWheelEvent(c)), this.dispatchEvent(gi));
549
+ function Hs(c) {
550
+ this.enabled === !1 || this.enableZoom === !1 || this.state !== x.NONE || (c.preventDefault(), this.dispatchEvent(Mt), this._handleMouseWheel(this._customWheelEvent(c)), this.dispatchEvent(Ci));
551
551
  }
552
- function Ns(c) {
552
+ function qs(c) {
553
553
  this.enabled !== !1 && this._handleKeyDown(c);
554
554
  }
555
- function Us(c) {
555
+ function js(c) {
556
556
  switch (this._trackPointer(c), this._pointers.length) {
557
557
  case 1:
558
558
  switch (this.touches.ONE) {
@@ -585,9 +585,9 @@ function Us(c) {
585
585
  default:
586
586
  this.state = x.NONE;
587
587
  }
588
- this.state !== x.NONE && this.dispatchEvent(St);
588
+ this.state !== x.NONE && this.dispatchEvent(Mt);
589
589
  }
590
- function Hs(c) {
590
+ function Ks(c) {
591
591
  switch (this._trackPointer(c), this.state) {
592
592
  case x.TOUCH_ROTATE:
593
593
  if (this.enableRotate === !1) return;
@@ -609,16 +609,16 @@ function Hs(c) {
609
609
  this.state = x.NONE;
610
610
  }
611
611
  }
612
- function Vs(c) {
612
+ function zs(c) {
613
613
  this.enabled !== !1 && c.preventDefault();
614
614
  }
615
- function Os(c) {
615
+ function Ys(c) {
616
616
  c.key === "Control" && (this._controlActive = !0, this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
617
617
  }
618
- function qs(c) {
618
+ function Js(c) {
619
619
  c.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
620
620
  }
621
- class js extends yt {
621
+ class Ws extends je {
622
622
  /**
623
623
  * Creates a new Camera instance
624
624
  *
@@ -639,7 +639,7 @@ class js extends yt {
639
639
  }
640
640
  initControls(e) {
641
641
  if (!this.controls) {
642
- this.controls = new Ls(this.camera, e);
642
+ this.controls = new Gs(this.camera, e);
643
643
  const t = this.config.desktop || {};
644
644
  this.controls.enableDamping = t.enableDamping ?? !0, this.controls.dampingFactor = t.dampingFactor ?? 0.08, this.controls.maxDistance = t.maxDistance ?? 100, this.controls.minDistance = t.minDistance ?? 0.5, this.controls.addEventListener("change", () => {
645
645
  this.emit("change");
@@ -739,9 +739,9 @@ class js extends yt {
739
739
  }
740
740
  }
741
741
  function Ht(c, e) {
742
- if (e === Ui)
742
+ if (e === ji)
743
743
  return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), c;
744
- if (e === lt || e === oi) {
744
+ if (e === ht || e === li) {
745
745
  let t = c.getIndex();
746
746
  if (t === null) {
747
747
  const n = [], r = c.getAttribute("position");
@@ -753,7 +753,7 @@ function Ht(c, e) {
753
753
  return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), c;
754
754
  }
755
755
  const i = t.count - 2, s = [];
756
- if (e === lt)
756
+ if (e === ht)
757
757
  for (let n = 1; n <= i; n++)
758
758
  s.push(t.getX(0)), s.push(t.getX(n)), s.push(t.getX(n + 1));
759
759
  else
@@ -765,7 +765,7 @@ function Ht(c, e) {
765
765
  } else
766
766
  return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", e), c;
767
767
  }
768
- class ui extends Et {
768
+ class xt extends yt {
769
769
  /**
770
770
  * Constructs a new glTF loader.
771
771
  *
@@ -773,39 +773,39 @@ class ui extends Et {
773
773
  */
774
774
  constructor(e) {
775
775
  super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(t) {
776
- return new Ws(t);
776
+ return new to(t);
777
777
  }), this.register(function(t) {
778
- return new Xs(t);
778
+ return new io(t);
779
779
  }), this.register(function(t) {
780
- return new ro(t);
780
+ return new ho(t);
781
781
  }), this.register(function(t) {
782
- return new ao(t);
782
+ return new go(t);
783
783
  }), this.register(function(t) {
784
- return new Ao(t);
784
+ return new uo(t);
785
785
  }), this.register(function(t) {
786
- return new $s(t);
786
+ return new oo(t);
787
787
  }), this.register(function(t) {
788
- return new eo(t);
788
+ return new no(t);
789
789
  }), this.register(function(t) {
790
- return new to(t);
790
+ return new ro(t);
791
791
  }), this.register(function(t) {
792
- return new io(t);
792
+ return new ao(t);
793
793
  }), this.register(function(t) {
794
- return new Js(t);
794
+ return new eo(t);
795
795
  }), this.register(function(t) {
796
- return new so(t);
796
+ return new Ao(t);
797
797
  }), this.register(function(t) {
798
- return new Zs(t);
798
+ return new so(t);
799
799
  }), this.register(function(t) {
800
- return new no(t);
800
+ return new co(t);
801
801
  }), this.register(function(t) {
802
- return new oo(t);
802
+ return new lo(t);
803
803
  }), this.register(function(t) {
804
- return new zs(t);
804
+ return new Zs(t);
805
805
  }), this.register(function(t) {
806
- return new lo(t);
806
+ return new po(t);
807
807
  }), this.register(function(t) {
808
- return new co(t);
808
+ return new fo(t);
809
809
  });
810
810
  }
811
811
  /**
@@ -823,10 +823,10 @@ class ui extends Et {
823
823
  if (this.resourcePath !== "")
824
824
  n = this.resourcePath;
825
825
  else if (this.path !== "") {
826
- const a = xe.extractUrlBase(e);
827
- n = xe.resolveURL(a, this.path);
826
+ const a = ve.extractUrlBase(e);
827
+ n = ve.resolveURL(a, this.path);
828
828
  } else
829
- n = xe.extractUrlBase(e);
829
+ n = ve.extractUrlBase(e);
830
830
  this.manager.itemStart(e);
831
831
  const r = function(a) {
832
832
  s ? s(a) : console.error(a), o.manager.itemError(e), o.manager.itemEnd(e);
@@ -905,9 +905,9 @@ class ui extends Et {
905
905
  if (typeof e == "string")
906
906
  o = JSON.parse(e);
907
907
  else if (e instanceof ArrayBuffer)
908
- if (A.decode(new Uint8Array(e, 0, 4)) === pi) {
908
+ if (A.decode(new Uint8Array(e, 0, 4)) === Ei) {
909
909
  try {
910
- n[S.KHR_BINARY_GLTF] = new ho(e);
910
+ n[S.KHR_BINARY_GLTF] = new mo(e);
911
911
  } catch (h) {
912
912
  s && s(h);
913
913
  return;
@@ -921,7 +921,7 @@ class ui extends Et {
921
921
  s && s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
922
922
  return;
923
923
  }
924
- const a = new yo(o, {
924
+ const a = new Ro(o, {
925
925
  path: t || this.resourcePath || "",
926
926
  crossOrigin: this.crossOrigin,
927
927
  requestHeader: this.requestHeader,
@@ -939,16 +939,16 @@ class ui extends Et {
939
939
  const h = o.extensionsUsed[l], d = o.extensionsRequired || [];
940
940
  switch (h) {
941
941
  case S.KHR_MATERIALS_UNLIT:
942
- n[h] = new Ys();
942
+ n[h] = new $s();
943
943
  break;
944
944
  case S.KHR_DRACO_MESH_COMPRESSION:
945
- n[h] = new go(o, this.dracoLoader);
945
+ n[h] = new bo(o, this.dracoLoader);
946
946
  break;
947
947
  case S.KHR_TEXTURE_TRANSFORM:
948
- n[h] = new uo();
948
+ n[h] = new Co();
949
949
  break;
950
950
  case S.KHR_MESH_QUANTIZATION:
951
- n[h] = new po();
951
+ n[h] = new Eo();
952
952
  break;
953
953
  default:
954
954
  d.indexOf(h) >= 0 && r[h] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + h + '".');
@@ -971,7 +971,7 @@ class ui extends Et {
971
971
  });
972
972
  }
973
973
  }
974
- function Ks() {
974
+ function Xs() {
975
975
  let c = {};
976
976
  return {
977
977
  get: function(e) {
@@ -1012,7 +1012,7 @@ const S = {
1012
1012
  EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression",
1013
1013
  EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing"
1014
1014
  };
1015
- class zs {
1015
+ class Zs {
1016
1016
  constructor(e) {
1017
1017
  this.parser = e, this.name = S.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
1018
1018
  }
@@ -1034,13 +1034,13 @@ class zs {
1034
1034
  const h = A.range !== void 0 ? A.range : 0;
1035
1035
  switch (A.type) {
1036
1036
  case "directional":
1037
- a = new Oi(l), a.target.position.set(0, 0, -1), a.add(a.target);
1037
+ a = new Yi(l), a.target.position.set(0, 0, -1), a.add(a.target);
1038
1038
  break;
1039
1039
  case "point":
1040
- a = new Vi(l), a.distance = h;
1040
+ a = new zi(l), a.distance = h;
1041
1041
  break;
1042
1042
  case "spot":
1043
- a = new Hi(l), a.distance = h, A.spot = A.spot || {}, A.spot.innerConeAngle = A.spot.innerConeAngle !== void 0 ? A.spot.innerConeAngle : 0, A.spot.outerConeAngle = A.spot.outerConeAngle !== void 0 ? A.spot.outerConeAngle : Math.PI / 4, a.angle = A.spot.outerConeAngle, a.penumbra = 1 - A.spot.innerConeAngle / A.spot.outerConeAngle, a.target.position.set(0, 0, -1), a.add(a.target);
1043
+ a = new Ki(l), a.distance = h, A.spot = A.spot || {}, A.spot.innerConeAngle = A.spot.innerConeAngle !== void 0 ? A.spot.innerConeAngle : 0, A.spot.outerConeAngle = A.spot.outerConeAngle !== void 0 ? A.spot.outerConeAngle : Math.PI / 4, a.angle = A.spot.outerConeAngle, a.penumbra = 1 - A.spot.innerConeAngle / A.spot.outerConeAngle, a.target.position.set(0, 0, -1), a.add(a.target);
1044
1044
  break;
1045
1045
  default:
1046
1046
  throw new Error("THREE.GLTFLoader: Unexpected light type: " + A.type);
@@ -1058,7 +1058,7 @@ class zs {
1058
1058
  });
1059
1059
  }
1060
1060
  }
1061
- class Ys {
1061
+ class $s {
1062
1062
  constructor() {
1063
1063
  this.name = S.KHR_MATERIALS_UNLIT;
1064
1064
  }
@@ -1079,7 +1079,7 @@ class Ys {
1079
1079
  return Promise.all(s);
1080
1080
  }
1081
1081
  }
1082
- class Js {
1082
+ class eo {
1083
1083
  constructor(e) {
1084
1084
  this.parser = e, this.name = S.KHR_MATERIALS_EMISSIVE_STRENGTH;
1085
1085
  }
@@ -1091,7 +1091,7 @@ class Js {
1091
1091
  return o !== void 0 && (t.emissiveIntensity = o), Promise.resolve();
1092
1092
  }
1093
1093
  }
1094
- class Ws {
1094
+ class to {
1095
1095
  constructor(e) {
1096
1096
  this.parser = e, this.name = S.KHR_MATERIALS_CLEARCOAT;
1097
1097
  }
@@ -1106,12 +1106,12 @@ class Ws {
1106
1106
  const o = [], n = s.extensions[this.name];
1107
1107
  if (n.clearcoatFactor !== void 0 && (t.clearcoat = n.clearcoatFactor), n.clearcoatTexture !== void 0 && o.push(i.assignTexture(t, "clearcoatMap", n.clearcoatTexture)), n.clearcoatRoughnessFactor !== void 0 && (t.clearcoatRoughness = n.clearcoatRoughnessFactor), n.clearcoatRoughnessTexture !== void 0 && o.push(i.assignTexture(t, "clearcoatRoughnessMap", n.clearcoatRoughnessTexture)), n.clearcoatNormalTexture !== void 0 && (o.push(i.assignTexture(t, "clearcoatNormalMap", n.clearcoatNormalTexture)), n.clearcoatNormalTexture.scale !== void 0)) {
1108
1108
  const r = n.clearcoatNormalTexture.scale;
1109
- t.clearcoatNormalScale = new H(r, r);
1109
+ t.clearcoatNormalScale = new V(r, r);
1110
1110
  }
1111
1111
  return Promise.all(o);
1112
1112
  }
1113
1113
  }
1114
- class Xs {
1114
+ class io {
1115
1115
  constructor(e) {
1116
1116
  this.parser = e, this.name = S.KHR_MATERIALS_DISPERSION;
1117
1117
  }
@@ -1127,7 +1127,7 @@ class Xs {
1127
1127
  return t.dispersion = o.dispersion !== void 0 ? o.dispersion : 0, Promise.resolve();
1128
1128
  }
1129
1129
  }
1130
- class Zs {
1130
+ class so {
1131
1131
  constructor(e) {
1132
1132
  this.parser = e, this.name = S.KHR_MATERIALS_IRIDESCENCE;
1133
1133
  }
@@ -1143,7 +1143,7 @@ class Zs {
1143
1143
  return n.iridescenceFactor !== void 0 && (t.iridescence = n.iridescenceFactor), n.iridescenceTexture !== void 0 && o.push(i.assignTexture(t, "iridescenceMap", n.iridescenceTexture)), n.iridescenceIor !== void 0 && (t.iridescenceIOR = n.iridescenceIor), t.iridescenceThicknessRange === void 0 && (t.iridescenceThicknessRange = [100, 400]), n.iridescenceThicknessMinimum !== void 0 && (t.iridescenceThicknessRange[0] = n.iridescenceThicknessMinimum), n.iridescenceThicknessMaximum !== void 0 && (t.iridescenceThicknessRange[1] = n.iridescenceThicknessMaximum), n.iridescenceThicknessTexture !== void 0 && o.push(i.assignTexture(t, "iridescenceThicknessMap", n.iridescenceThicknessTexture)), Promise.all(o);
1144
1144
  }
1145
1145
  }
1146
- class $s {
1146
+ class oo {
1147
1147
  constructor(e) {
1148
1148
  this.parser = e, this.name = S.KHR_MATERIALS_SHEEN;
1149
1149
  }
@@ -1165,7 +1165,7 @@ class $s {
1165
1165
  return n.sheenRoughnessFactor !== void 0 && (t.sheenRoughness = n.sheenRoughnessFactor), n.sheenColorTexture !== void 0 && o.push(i.assignTexture(t, "sheenColorMap", n.sheenColorTexture, se)), n.sheenRoughnessTexture !== void 0 && o.push(i.assignTexture(t, "sheenRoughnessMap", n.sheenRoughnessTexture)), Promise.all(o);
1166
1166
  }
1167
1167
  }
1168
- class eo {
1168
+ class no {
1169
1169
  constructor(e) {
1170
1170
  this.parser = e, this.name = S.KHR_MATERIALS_TRANSMISSION;
1171
1171
  }
@@ -1181,7 +1181,7 @@ class eo {
1181
1181
  return n.transmissionFactor !== void 0 && (t.transmission = n.transmissionFactor), n.transmissionTexture !== void 0 && o.push(i.assignTexture(t, "transmissionMap", n.transmissionTexture)), Promise.all(o);
1182
1182
  }
1183
1183
  }
1184
- class to {
1184
+ class ro {
1185
1185
  constructor(e) {
1186
1186
  this.parser = e, this.name = S.KHR_MATERIALS_VOLUME;
1187
1187
  }
@@ -1199,7 +1199,7 @@ class to {
1199
1199
  return t.attenuationColor = new re().setRGB(r[0], r[1], r[2], Y), Promise.all(o);
1200
1200
  }
1201
1201
  }
1202
- class io {
1202
+ class ao {
1203
1203
  constructor(e) {
1204
1204
  this.parser = e, this.name = S.KHR_MATERIALS_IOR;
1205
1205
  }
@@ -1215,7 +1215,7 @@ class io {
1215
1215
  return t.ior = o.ior !== void 0 ? o.ior : 1.5, Promise.resolve();
1216
1216
  }
1217
1217
  }
1218
- class so {
1218
+ class Ao {
1219
1219
  constructor(e) {
1220
1220
  this.parser = e, this.name = S.KHR_MATERIALS_SPECULAR;
1221
1221
  }
@@ -1233,7 +1233,7 @@ class so {
1233
1233
  return t.specularColor = new re().setRGB(r[0], r[1], r[2], Y), n.specularColorTexture !== void 0 && o.push(i.assignTexture(t, "specularColorMap", n.specularColorTexture, se)), Promise.all(o);
1234
1234
  }
1235
1235
  }
1236
- class oo {
1236
+ class lo {
1237
1237
  constructor(e) {
1238
1238
  this.parser = e, this.name = S.EXT_MATERIALS_BUMP;
1239
1239
  }
@@ -1249,7 +1249,7 @@ class oo {
1249
1249
  return t.bumpScale = n.bumpFactor !== void 0 ? n.bumpFactor : 1, n.bumpTexture !== void 0 && o.push(i.assignTexture(t, "bumpMap", n.bumpTexture)), Promise.all(o);
1250
1250
  }
1251
1251
  }
1252
- class no {
1252
+ class co {
1253
1253
  constructor(e) {
1254
1254
  this.parser = e, this.name = S.KHR_MATERIALS_ANISOTROPY;
1255
1255
  }
@@ -1265,7 +1265,7 @@ class no {
1265
1265
  return n.anisotropyStrength !== void 0 && (t.anisotropy = n.anisotropyStrength), n.anisotropyRotation !== void 0 && (t.anisotropyRotation = n.anisotropyRotation), n.anisotropyTexture !== void 0 && o.push(i.assignTexture(t, "anisotropyMap", n.anisotropyTexture)), Promise.all(o);
1266
1266
  }
1267
1267
  }
1268
- class ro {
1268
+ class ho {
1269
1269
  constructor(e) {
1270
1270
  this.parser = e, this.name = S.KHR_TEXTURE_BASISU;
1271
1271
  }
@@ -1282,7 +1282,7 @@ class ro {
1282
1282
  return t.loadTextureImage(e, o.source, n);
1283
1283
  }
1284
1284
  }
1285
- class ao {
1285
+ class go {
1286
1286
  constructor(e) {
1287
1287
  this.parser = e, this.name = S.EXT_TEXTURE_WEBP;
1288
1288
  }
@@ -1299,7 +1299,7 @@ class ao {
1299
1299
  return i.loadTextureImage(e, n.source, A);
1300
1300
  }
1301
1301
  }
1302
- class Ao {
1302
+ class uo {
1303
1303
  constructor(e) {
1304
1304
  this.parser = e, this.name = S.EXT_TEXTURE_AVIF;
1305
1305
  }
@@ -1316,7 +1316,7 @@ class Ao {
1316
1316
  return i.loadTextureImage(e, n.source, A);
1317
1317
  }
1318
1318
  }
1319
- class lo {
1319
+ class po {
1320
1320
  constructor(e) {
1321
1321
  this.name = S.EXT_MESHOPT_COMPRESSION, this.parser = e;
1322
1322
  }
@@ -1342,7 +1342,7 @@ class lo {
1342
1342
  return null;
1343
1343
  }
1344
1344
  }
1345
- class co {
1345
+ class fo {
1346
1346
  constructor(e) {
1347
1347
  this.name = S.EXT_MESH_GPU_INSTANCING, this.parser = e;
1348
1348
  }
@@ -1360,44 +1360,44 @@ class co {
1360
1360
  return r.length < 1 ? null : (r.push(this.parser.createNodeMesh(e)), Promise.all(r).then((a) => {
1361
1361
  const l = a.pop(), h = l.isGroup ? l.children : [l], d = a[0].count, g = [];
1362
1362
  for (const p of h) {
1363
- const C = new Re(), I = new D(), f = new Ue(), m = new D(1, 1, 1), E = new qi(p.geometry, p.material, d);
1363
+ const C = new Ie(), E = new R(), f = new Ue(), m = new R(1, 1, 1), I = new ci(p.geometry, p.material, d);
1364
1364
  for (let b = 0; b < d; b++)
1365
- A.TRANSLATION && I.fromBufferAttribute(A.TRANSLATION, b), A.ROTATION && f.fromBufferAttribute(A.ROTATION, b), A.SCALE && m.fromBufferAttribute(A.SCALE, b), E.setMatrixAt(b, C.compose(I, f, m));
1365
+ A.TRANSLATION && E.fromBufferAttribute(A.TRANSLATION, b), A.ROTATION && f.fromBufferAttribute(A.ROTATION, b), A.SCALE && m.fromBufferAttribute(A.SCALE, b), I.setMatrixAt(b, C.compose(E, f, m));
1366
1366
  for (const b in A)
1367
1367
  if (b === "_COLOR_0") {
1368
1368
  const B = A[b];
1369
- E.instanceColor = new ji(B.array, B.itemSize, B.normalized);
1369
+ I.instanceColor = new Ji(B.array, B.itemSize, B.normalized);
1370
1370
  } else b !== "TRANSLATION" && b !== "ROTATION" && b !== "SCALE" && p.geometry.setAttribute(b, A[b]);
1371
- Bt.prototype.copy.call(E, p), this.parser.assignFinalMaterial(E), g.push(E);
1371
+ Oe.prototype.copy.call(I, p), this.parser.assignFinalMaterial(I), g.push(I);
1372
1372
  }
1373
1373
  return l.isGroup ? (l.clear(), l.add(...g), l) : g[0];
1374
1374
  }));
1375
1375
  }
1376
1376
  }
1377
- const pi = "glTF", we = 12, Vt = { JSON: 1313821514, BIN: 5130562 };
1378
- class ho {
1377
+ const Ei = "glTF", Qe = 12, qt = { JSON: 1313821514, BIN: 5130562 };
1378
+ class mo {
1379
1379
  constructor(e) {
1380
1380
  this.name = S.KHR_BINARY_GLTF, this.content = null, this.body = null;
1381
- const t = new DataView(e, 0, we), i = new TextDecoder();
1381
+ const t = new DataView(e, 0, Qe), i = new TextDecoder();
1382
1382
  if (this.header = {
1383
1383
  magic: i.decode(new Uint8Array(e.slice(0, 4))),
1384
1384
  version: t.getUint32(4, !0),
1385
1385
  length: t.getUint32(8, !0)
1386
- }, this.header.magic !== pi)
1386
+ }, this.header.magic !== Ei)
1387
1387
  throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
1388
1388
  if (this.header.version < 2)
1389
1389
  throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
1390
- const s = this.header.length - we, o = new DataView(e, we);
1390
+ const s = this.header.length - Qe, o = new DataView(e, Qe);
1391
1391
  let n = 0;
1392
1392
  for (; n < s; ) {
1393
1393
  const r = o.getUint32(n, !0);
1394
1394
  n += 4;
1395
1395
  const A = o.getUint32(n, !0);
1396
- if (n += 4, A === Vt.JSON) {
1397
- const a = new Uint8Array(e, we + n, r);
1396
+ if (n += 4, A === qt.JSON) {
1397
+ const a = new Uint8Array(e, Qe + n, r);
1398
1398
  this.content = i.decode(a);
1399
- } else if (A === Vt.BIN) {
1400
- const a = we + n;
1399
+ } else if (A === qt.BIN) {
1400
+ const a = Qe + n;
1401
1401
  this.body = e.slice(a, a + r);
1402
1402
  }
1403
1403
  n += r;
@@ -1406,7 +1406,7 @@ class ho {
1406
1406
  throw new Error("THREE.GLTFLoader: JSON content not found.");
1407
1407
  }
1408
1408
  }
1409
- class go {
1409
+ class bo {
1410
1410
  constructor(e, t) {
1411
1411
  if (!t)
1412
1412
  throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
@@ -1415,13 +1415,13 @@ class go {
1415
1415
  decodePrimitive(e, t) {
1416
1416
  const i = this.json, s = this.dracoLoader, o = e.extensions[this.name].bufferView, n = e.extensions[this.name].attributes, r = {}, A = {}, a = {};
1417
1417
  for (const l in n) {
1418
- const h = ft[l] || l.toLowerCase();
1418
+ const h = bt[l] || l.toLowerCase();
1419
1419
  r[h] = n[l];
1420
1420
  }
1421
1421
  for (const l in e.attributes) {
1422
- const h = ft[l] || l.toLowerCase();
1422
+ const h = bt[l] || l.toLowerCase();
1423
1423
  if (n[l] !== void 0) {
1424
- const d = i.accessors[e.attributes[l]], g = Ie[d.componentType];
1424
+ const d = i.accessors[e.attributes[l]], g = Ee[d.componentType];
1425
1425
  a[h] = g.name, A[h] = d.normalized === !0;
1426
1426
  }
1427
1427
  }
@@ -1429,8 +1429,8 @@ class go {
1429
1429
  return new Promise(function(h, d) {
1430
1430
  s.decodeDracoFile(l, function(g) {
1431
1431
  for (const p in g.attributes) {
1432
- const C = g.attributes[p], I = A[p];
1433
- I !== void 0 && (C.normalized = I);
1432
+ const C = g.attributes[p], E = A[p];
1433
+ E !== void 0 && (C.normalized = E);
1434
1434
  }
1435
1435
  h(g);
1436
1436
  }, r, a, Y, d);
@@ -1438,7 +1438,7 @@ class go {
1438
1438
  });
1439
1439
  }
1440
1440
  }
1441
- class uo {
1441
+ class Co {
1442
1442
  constructor() {
1443
1443
  this.name = S.KHR_TEXTURE_TRANSFORM;
1444
1444
  }
@@ -1446,12 +1446,12 @@ class uo {
1446
1446
  return (t.texCoord === void 0 || t.texCoord === e.channel) && t.offset === void 0 && t.rotation === void 0 && t.scale === void 0 || (e = e.clone(), t.texCoord !== void 0 && (e.channel = t.texCoord), t.offset !== void 0 && e.offset.fromArray(t.offset), t.rotation !== void 0 && (e.rotation = t.rotation), t.scale !== void 0 && e.repeat.fromArray(t.scale), e.needsUpdate = !0), e;
1447
1447
  }
1448
1448
  }
1449
- class po {
1449
+ class Eo {
1450
1450
  constructor() {
1451
1451
  this.name = S.KHR_MESH_QUANTIZATION;
1452
1452
  }
1453
1453
  }
1454
- class fi extends fs {
1454
+ class Ii extends Es {
1455
1455
  constructor(e, t, i, s) {
1456
1456
  super(e, t, i, s);
1457
1457
  }
@@ -1462,19 +1462,19 @@ class fi extends fs {
1462
1462
  return t;
1463
1463
  }
1464
1464
  interpolate_(e, t, i, s) {
1465
- const o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, A = r * 2, a = r * 3, l = s - t, h = (i - t) / l, d = h * h, g = d * h, p = e * a, C = p - a, I = -2 * g + 3 * d, f = g - d, m = 1 - I, E = f - d + h;
1465
+ const o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, A = r * 2, a = r * 3, l = s - t, h = (i - t) / l, d = h * h, g = d * h, p = e * a, C = p - a, E = -2 * g + 3 * d, f = g - d, m = 1 - E, I = f - d + h;
1466
1466
  for (let b = 0; b !== r; b++) {
1467
- const B = n[C + b + r], Q = n[C + b + A] * l, w = n[p + b + r], T = n[p + b] * l;
1468
- o[b] = m * B + E * Q + I * w + f * T;
1467
+ const B = n[C + b + r], y = n[C + b + A] * l, w = n[p + b + r], L = n[p + b] * l;
1468
+ o[b] = m * B + I * y + E * w + f * L;
1469
1469
  }
1470
1470
  return o;
1471
1471
  }
1472
1472
  }
1473
- const fo = new Ue();
1474
- class mo extends fi {
1473
+ const Io = new Ue();
1474
+ class Bo extends Ii {
1475
1475
  interpolate_(e, t, i, s) {
1476
1476
  const o = super.interpolate_(e, t, i, s);
1477
- return fo.fromArray(o).normalize().toArray(o), o;
1477
+ return Io.fromArray(o).normalize().toArray(o), o;
1478
1478
  }
1479
1479
  }
1480
1480
  const j = {
@@ -1485,25 +1485,25 @@ const j = {
1485
1485
  TRIANGLES: 4,
1486
1486
  TRIANGLE_STRIP: 5,
1487
1487
  TRIANGLE_FAN: 6
1488
- }, Ie = {
1488
+ }, Ee = {
1489
1489
  5120: Int8Array,
1490
1490
  5121: Uint8Array,
1491
1491
  5122: Int16Array,
1492
1492
  5123: Uint16Array,
1493
1493
  5125: Uint32Array,
1494
1494
  5126: Float32Array
1495
- }, Ot = {
1496
- 9728: ni,
1495
+ }, jt = {
1496
+ 9728: hi,
1497
1497
  9729: he,
1498
- 9984: Xi,
1499
- 9985: Wi,
1500
- 9986: Ji,
1501
- 9987: Ve
1502
- }, qt = {
1503
- 33071: $i,
1504
- 33648: Zi,
1505
- 10497: ct
1506
- }, Ye = {
1498
+ 9984: ts,
1499
+ 9985: es,
1500
+ 9986: $i,
1501
+ 9987: He
1502
+ }, Kt = {
1503
+ 33071: ss,
1504
+ 33648: is,
1505
+ 10497: dt
1506
+ }, We = {
1507
1507
  SCALAR: 1,
1508
1508
  VEC2: 2,
1509
1509
  VEC3: 3,
@@ -1511,7 +1511,7 @@ const j = {
1511
1511
  MAT2: 4,
1512
1512
  MAT3: 9,
1513
1513
  MAT4: 16
1514
- }, ft = {
1514
+ }, bt = {
1515
1515
  POSITION: "position",
1516
1516
  NORMAL: "normal",
1517
1517
  TANGENT: "tangent",
@@ -1527,26 +1527,26 @@ const j = {
1527
1527
  translation: "position",
1528
1528
  rotation: "quaternion",
1529
1529
  weights: "morphTargetInfluences"
1530
- }, bo = {
1530
+ }, yo = {
1531
1531
  CUBICSPLINE: void 0,
1532
1532
  // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
1533
1533
  // keyframe track will be initialized with a default interpolation type, then modified.
1534
- LINEAR: Ai,
1535
- STEP: us
1536
- }, Je = {
1534
+ LINEAR: gi,
1535
+ STEP: bs
1536
+ }, Xe = {
1537
1537
  OPAQUE: "OPAQUE",
1538
1538
  MASK: "MASK",
1539
1539
  BLEND: "BLEND"
1540
1540
  };
1541
- function Co(c) {
1542
- return c.DefaultMaterial === void 0 && (c.DefaultMaterial = new ri({
1541
+ function wo(c) {
1542
+ return c.DefaultMaterial === void 0 && (c.DefaultMaterial = new wt({
1543
1543
  color: 16777215,
1544
1544
  emissive: 0,
1545
1545
  metalness: 1,
1546
1546
  roughness: 1,
1547
1547
  transparent: !1,
1548
1548
  depthTest: !0,
1549
- side: ps
1549
+ side: Cs
1550
1550
  })), c.DefaultMaterial;
1551
1551
  }
1552
1552
  function ae(c, e, t) {
@@ -1556,7 +1556,7 @@ function ae(c, e, t) {
1556
1556
  function ie(c, e) {
1557
1557
  e.extras !== void 0 && (typeof e.extras == "object" ? Object.assign(c.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras));
1558
1558
  }
1559
- function Io(c, e, t) {
1559
+ function Qo(c, e, t) {
1560
1560
  let i = !1, s = !1, o = !1;
1561
1561
  for (let a = 0, l = e.length; a < l; a++) {
1562
1562
  const h = e[a];
@@ -1588,7 +1588,7 @@ function Io(c, e, t) {
1588
1588
  return i && (c.morphAttributes.position = l), s && (c.morphAttributes.normal = h), o && (c.morphAttributes.color = d), c.morphTargetsRelative = !0, c;
1589
1589
  });
1590
1590
  }
1591
- function Eo(c, e) {
1591
+ function So(c, e) {
1592
1592
  if (c.updateMorphTargets(), e.weights !== void 0)
1593
1593
  for (let t = 0, i = e.weights.length; t < i; t++)
1594
1594
  c.morphTargetInfluences[t] = e.weights[t];
@@ -1602,22 +1602,22 @@ function Eo(c, e) {
1602
1602
  console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
1603
1603
  }
1604
1604
  }
1605
- function Bo(c) {
1605
+ function Mo(c) {
1606
1606
  let e;
1607
1607
  const t = c.extensions && c.extensions[S.KHR_DRACO_MESH_COMPRESSION];
1608
- if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" + We(t.attributes) : e = c.indices + ":" + We(c.attributes) + ":" + c.mode, c.targets !== void 0)
1608
+ if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" + Ze(t.attributes) : e = c.indices + ":" + Ze(c.attributes) + ":" + c.mode, c.targets !== void 0)
1609
1609
  for (let i = 0, s = c.targets.length; i < s; i++)
1610
- e += ":" + We(c.targets[i]);
1610
+ e += ":" + Ze(c.targets[i]);
1611
1611
  return e;
1612
1612
  }
1613
- function We(c) {
1613
+ function Ze(c) {
1614
1614
  let e = "";
1615
1615
  const t = Object.keys(c).sort();
1616
1616
  for (let i = 0, s = t.length; i < s; i++)
1617
1617
  e += t[i] + ":" + c[t[i]] + ";";
1618
1618
  return e;
1619
1619
  }
1620
- function mt(c) {
1620
+ function Ct(c) {
1621
1621
  switch (c) {
1622
1622
  case Int8Array:
1623
1623
  return 1 / 127;
@@ -1631,13 +1631,13 @@ function mt(c) {
1631
1631
  throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
1632
1632
  }
1633
1633
  }
1634
- function Qo(c) {
1634
+ function xo(c) {
1635
1635
  return c.search(/\.jpe?g($|\?)/i) > 0 || c.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : c.search(/\.webp($|\?)/i) > 0 || c.search(/^data\:image\/webp/) === 0 ? "image/webp" : c.search(/\.ktx2($|\?)/i) > 0 || c.search(/^data\:image\/ktx2/) === 0 ? "image/ktx2" : "image/png";
1636
1636
  }
1637
- const wo = new Re();
1638
- class yo {
1637
+ const vo = new Ie();
1638
+ class Ro {
1639
1639
  constructor(e = {}, t = {}) {
1640
- this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new Ks(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
1640
+ this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new Xs(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
1641
1641
  let i = !1, s = -1, o = !1, n = -1;
1642
1642
  if (typeof navigator < "u") {
1643
1643
  const r = navigator.userAgent;
@@ -1645,7 +1645,7 @@ class yo {
1645
1645
  const A = r.match(/Version\/(\d+)/);
1646
1646
  s = i && A ? parseInt(A[1], 10) : -1, o = r.indexOf("Firefox") > -1, n = o ? r.match(/Firefox\/([0-9]+)\./)[1] : -1;
1647
1647
  }
1648
- typeof createImageBitmap > "u" || i && s < 17 || o && n < 98 ? this.textureLoader = new Ki(this.options.manager) : this.textureLoader = new zi(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new le(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
1648
+ typeof createImageBitmap > "u" || i && s < 17 || o && n < 98 ? this.textureLoader = new Wi(this.options.manager) : this.textureLoader = new Xi(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new le(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
1649
1649
  }
1650
1650
  setExtensions(e) {
1651
1651
  this.extensions = e;
@@ -1856,7 +1856,7 @@ class yo {
1856
1856
  return Promise.resolve(this.extensions[S.KHR_BINARY_GLTF].body);
1857
1857
  const s = this.options;
1858
1858
  return new Promise(function(o, n) {
1859
- i.load(xe.resolveURL(t.uri, s.path), o, void 0, function() {
1859
+ i.load(ve.resolveURL(t.uri, s.path), o, void 0, function() {
1860
1860
  n(new Error('THREE.GLTFLoader: Failed to load buffer "' + t.uri + '".'));
1861
1861
  });
1862
1862
  });
@@ -1885,29 +1885,29 @@ class yo {
1885
1885
  loadAccessor(e) {
1886
1886
  const t = this, i = this.json, s = this.json.accessors[e];
1887
1887
  if (s.bufferView === void 0 && s.sparse === void 0) {
1888
- const n = Ye[s.type], r = Ie[s.componentType], A = s.normalized === !0, a = new r(s.count * n);
1889
- return Promise.resolve(new ve(a, n, A));
1888
+ const n = We[s.type], r = Ee[s.componentType], A = s.normalized === !0, a = new r(s.count * n);
1889
+ return Promise.resolve(new Re(a, n, A));
1890
1890
  }
1891
1891
  const o = [];
1892
1892
  return s.bufferView !== void 0 ? o.push(this.getDependency("bufferView", s.bufferView)) : o.push(null), s.sparse !== void 0 && (o.push(this.getDependency("bufferView", s.sparse.indices.bufferView)), o.push(this.getDependency("bufferView", s.sparse.values.bufferView))), Promise.all(o).then(function(n) {
1893
- const r = n[0], A = Ye[s.type], a = Ie[s.componentType], l = a.BYTES_PER_ELEMENT, h = l * A, d = s.byteOffset || 0, g = s.bufferView !== void 0 ? i.bufferViews[s.bufferView].byteStride : void 0, p = s.normalized === !0;
1894
- let C, I;
1893
+ const r = n[0], A = We[s.type], a = Ee[s.componentType], l = a.BYTES_PER_ELEMENT, h = l * A, d = s.byteOffset || 0, g = s.bufferView !== void 0 ? i.bufferViews[s.bufferView].byteStride : void 0, p = s.normalized === !0;
1894
+ let C, E;
1895
1895
  if (g && g !== h) {
1896
1896
  const f = Math.floor(d / g), m = "InterleavedBuffer:" + s.bufferView + ":" + s.componentType + ":" + f + ":" + s.count;
1897
- let E = t.cache.get(m);
1898
- E || (C = new a(r, f * g, s.count * g / l), E = new Yi(C, g / l), t.cache.add(m, E)), I = new Ae(E, A, d % g / l, p);
1897
+ let I = t.cache.get(m);
1898
+ I || (C = new a(r, f * g, s.count * g / l), I = new Zi(C, g / l), t.cache.add(m, I)), E = new Ae(I, A, d % g / l, p);
1899
1899
  } else
1900
- r === null ? C = new a(s.count * A) : C = new a(r, d, s.count * A), I = new ve(C, A, p);
1900
+ r === null ? C = new a(s.count * A) : C = new a(r, d, s.count * A), E = new Re(C, A, p);
1901
1901
  if (s.sparse !== void 0) {
1902
- const f = Ye.SCALAR, m = Ie[s.sparse.indices.componentType], E = s.sparse.indices.byteOffset || 0, b = s.sparse.values.byteOffset || 0, B = new m(n[1], E, s.sparse.count * f), Q = new a(n[2], b, s.sparse.count * A);
1903
- r !== null && (I = new ve(I.array.slice(), I.itemSize, I.normalized)), I.normalized = !1;
1904
- for (let w = 0, T = B.length; w < T; w++) {
1905
- const R = B[w];
1906
- if (I.setX(R, Q[w * A]), A >= 2 && I.setY(R, Q[w * A + 1]), A >= 3 && I.setZ(R, Q[w * A + 2]), A >= 4 && I.setW(R, Q[w * A + 3]), A >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
1902
+ const f = We.SCALAR, m = Ee[s.sparse.indices.componentType], I = s.sparse.indices.byteOffset || 0, b = s.sparse.values.byteOffset || 0, B = new m(n[1], I, s.sparse.count * f), y = new a(n[2], b, s.sparse.count * A);
1903
+ r !== null && (E = new Re(E.array.slice(), E.itemSize, E.normalized)), E.normalized = !1;
1904
+ for (let w = 0, L = B.length; w < L; w++) {
1905
+ const D = B[w];
1906
+ if (E.setX(D, y[w * A]), A >= 2 && E.setY(D, y[w * A + 1]), A >= 3 && E.setZ(D, y[w * A + 2]), A >= 4 && E.setW(D, y[w * A + 3]), A >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
1907
1907
  }
1908
- I.normalized = p;
1908
+ E.normalized = p;
1909
1909
  }
1910
- return I;
1910
+ return E;
1911
1911
  });
1912
1912
  }
1913
1913
  /**
@@ -1933,7 +1933,7 @@ class yo {
1933
1933
  const a = this.loadImageSource(t, i).then(function(l) {
1934
1934
  l.flipY = !1, l.name = n.name || r.name || "", l.name === "" && typeof r.uri == "string" && r.uri.startsWith("data:image/") === !1 && (l.name = r.uri);
1935
1935
  const d = (o.samplers || {})[n.sampler] || {};
1936
- return l.magFilter = Ot[d.magFilter] || he, l.minFilter = Ot[d.minFilter] || Ve, l.wrapS = qt[d.wrapS] || ct, l.wrapT = qt[d.wrapT] || ct, l.generateMipmaps = !l.isCompressedTexture && l.minFilter !== ni && l.minFilter !== he, s.associations.set(l, { textures: e }), l;
1936
+ return l.magFilter = jt[d.magFilter] || he, l.minFilter = jt[d.minFilter] || He, l.wrapS = Kt[d.wrapS] || dt, l.wrapT = Kt[d.wrapT] || dt, l.generateMipmaps = !l.isCompressedTexture && l.minFilter !== hi && l.minFilter !== he, s.associations.set(l, { textures: e }), l;
1937
1937
  }).catch(function() {
1938
1938
  return null;
1939
1939
  });
@@ -1957,12 +1957,12 @@ class yo {
1957
1957
  return new Promise(function(d, g) {
1958
1958
  let p = d;
1959
1959
  t.isImageBitmapLoader === !0 && (p = function(C) {
1960
- const I = new Dt(C);
1961
- I.needsUpdate = !0, d(I);
1962
- }), t.load(xe.resolveURL(h, o.path), p, void 0, g);
1960
+ const E = new Tt(C);
1961
+ E.needsUpdate = !0, d(E);
1962
+ }), t.load(ve.resolveURL(h, o.path), p, void 0, g);
1963
1963
  });
1964
1964
  }).then(function(h) {
1965
- return a === !0 && r.revokeObjectURL(A), ie(h, n), h.userData.mimeType = n.mimeType || Qo(n.uri), h;
1965
+ return a === !0 && r.revokeObjectURL(A), ie(h, n), h.userData.mimeType = n.mimeType || xo(n.uri), h;
1966
1966
  }).catch(function(h) {
1967
1967
  throw console.error("THREE.GLTFLoader: Couldn't load texture", A), h;
1968
1968
  });
@@ -2009,11 +2009,11 @@ class yo {
2009
2009
  if (e.isPoints) {
2010
2010
  const r = "PointsMaterial:" + i.uuid;
2011
2011
  let A = this.cache.get(r);
2012
- A || (A = new es(), je.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, A.sizeAttenuation = !1, this.cache.add(r, A)), i = A;
2012
+ A || (A = new os(), ze.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, A.sizeAttenuation = !1, this.cache.add(r, A)), i = A;
2013
2013
  } else if (e.isLine) {
2014
2014
  const r = "LineBasicMaterial:" + i.uuid;
2015
2015
  let A = this.cache.get(r);
2016
- A || (A = new ts(), je.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, this.cache.add(r, A)), i = A;
2016
+ A || (A = new ns(), ze.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, this.cache.add(r, A)), i = A;
2017
2017
  }
2018
2018
  if (s || o || n) {
2019
2019
  let r = "ClonedMaterial:" + i.uuid + ":";
@@ -2024,7 +2024,7 @@ class yo {
2024
2024
  e.material = i;
2025
2025
  }
2026
2026
  getMaterialType() {
2027
- return ri;
2027
+ return wt;
2028
2028
  }
2029
2029
  /**
2030
2030
  * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
@@ -2052,9 +2052,9 @@ class yo {
2052
2052
  return d.extendMaterialParams && d.extendMaterialParams(e, r);
2053
2053
  })));
2054
2054
  }
2055
- o.doubleSided === !0 && (r.side = is);
2056
- const l = o.alphaMode || Je.OPAQUE;
2057
- if (l === Je.BLEND ? (r.transparent = !0, r.depthWrite = !1) : (r.transparent = !1, l === Je.MASK && (r.alphaTest = o.alphaCutoff !== void 0 ? o.alphaCutoff : 0.5)), o.normalTexture !== void 0 && n !== fe && (a.push(t.assignTexture(r, "normalMap", o.normalTexture)), r.normalScale = new H(1, 1), o.normalTexture.scale !== void 0)) {
2055
+ o.doubleSided === !0 && (r.side = rs);
2056
+ const l = o.alphaMode || Xe.OPAQUE;
2057
+ if (l === Xe.BLEND ? (r.transparent = !0, r.depthWrite = !1) : (r.transparent = !1, l === Xe.MASK && (r.alphaTest = o.alphaCutoff !== void 0 ? o.alphaCutoff : 0.5)), o.normalTexture !== void 0 && n !== fe && (a.push(t.assignTexture(r, "normalMap", o.normalTexture)), r.normalScale = new V(1, 1), o.normalTexture.scale !== void 0)) {
2058
2058
  const h = o.normalTexture.scale;
2059
2059
  r.normalScale.set(h, h);
2060
2060
  }
@@ -2075,7 +2075,7 @@ class yo {
2075
2075
  * @return {string}
2076
2076
  */
2077
2077
  createUniqueName(e) {
2078
- const t = ss.sanitizeNodeName(e || "");
2078
+ const t = as.sanitizeNodeName(e || "");
2079
2079
  return t in this.nodeNamesUsed ? t + "_" + ++this.nodeNamesUsed[t] : (this.nodeNamesUsed[t] = 0, t);
2080
2080
  }
2081
2081
  /**
@@ -2091,17 +2091,17 @@ class yo {
2091
2091
  const t = this, i = this.extensions, s = this.primitiveCache;
2092
2092
  function o(r) {
2093
2093
  return i[S.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(r, t).then(function(A) {
2094
- return jt(A, r, t);
2094
+ return zt(A, r, t);
2095
2095
  });
2096
2096
  }
2097
2097
  const n = [];
2098
2098
  for (let r = 0, A = e.length; r < A; r++) {
2099
- const a = e[r], l = Bo(a), h = s[l];
2099
+ const a = e[r], l = Mo(a), h = s[l];
2100
2100
  if (h)
2101
2101
  n.push(h.promise);
2102
2102
  else {
2103
2103
  let d;
2104
- a.extensions && a.extensions[S.KHR_DRACO_MESH_COMPRESSION] ? d = o(a) : d = jt(new ai(), a, t), s[l] = { primitive: a, promise: d }, n.push(d);
2104
+ a.extensions && a.extensions[S.KHR_DRACO_MESH_COMPRESSION] ? d = o(a) : d = zt(new di(), a, t), s[l] = { primitive: a, promise: d }, n.push(d);
2105
2105
  }
2106
2106
  }
2107
2107
  return Promise.all(n);
@@ -2116,28 +2116,28 @@ class yo {
2116
2116
  loadMesh(e) {
2117
2117
  const t = this, i = this.json, s = this.extensions, o = i.meshes[e], n = o.primitives, r = [];
2118
2118
  for (let A = 0, a = n.length; A < a; A++) {
2119
- const l = n[A].material === void 0 ? Co(this.cache) : this.getDependency("material", n[A].material);
2119
+ const l = n[A].material === void 0 ? wo(this.cache) : this.getDependency("material", n[A].material);
2120
2120
  r.push(l);
2121
2121
  }
2122
2122
  return r.push(t.loadGeometries(n)), Promise.all(r).then(function(A) {
2123
2123
  const a = A.slice(0, A.length - 1), l = A[A.length - 1], h = [];
2124
2124
  for (let g = 0, p = l.length; g < p; g++) {
2125
- const C = l[g], I = n[g];
2125
+ const C = l[g], E = n[g];
2126
2126
  let f;
2127
2127
  const m = a[g];
2128
- if (I.mode === j.TRIANGLES || I.mode === j.TRIANGLE_STRIP || I.mode === j.TRIANGLE_FAN || I.mode === void 0)
2129
- f = o.isSkinnedMesh === !0 ? new os(C, m) : new Qt(C, m), f.isSkinnedMesh === !0 && f.normalizeSkinWeights(), I.mode === j.TRIANGLE_STRIP ? f.geometry = Ht(f.geometry, oi) : I.mode === j.TRIANGLE_FAN && (f.geometry = Ht(f.geometry, lt));
2130
- else if (I.mode === j.LINES)
2131
- f = new ns(C, m);
2132
- else if (I.mode === j.LINE_STRIP)
2133
- f = new rs(C, m);
2134
- else if (I.mode === j.LINE_LOOP)
2135
- f = new as(C, m);
2136
- else if (I.mode === j.POINTS)
2137
- f = new As(C, m);
2128
+ if (E.mode === j.TRIANGLES || E.mode === j.TRIANGLE_STRIP || E.mode === j.TRIANGLE_FAN || E.mode === void 0)
2129
+ f = o.isSkinnedMesh === !0 ? new As(C, m) : new Qt(C, m), f.isSkinnedMesh === !0 && f.normalizeSkinWeights(), E.mode === j.TRIANGLE_STRIP ? f.geometry = Ht(f.geometry, li) : E.mode === j.TRIANGLE_FAN && (f.geometry = Ht(f.geometry, ht));
2130
+ else if (E.mode === j.LINES)
2131
+ f = new ls(C, m);
2132
+ else if (E.mode === j.LINE_STRIP)
2133
+ f = new cs(C, m);
2134
+ else if (E.mode === j.LINE_LOOP)
2135
+ f = new hs(C, m);
2136
+ else if (E.mode === j.POINTS)
2137
+ f = new ds(C, m);
2138
2138
  else
2139
- throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + I.mode);
2140
- Object.keys(f.geometry.morphAttributes).length > 0 && Eo(f, o), f.name = t.createUniqueName(o.name || "mesh_" + e), ie(f, o), I.extensions && ae(s, f, I), t.assignFinalMaterial(f), h.push(f);
2139
+ throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + E.mode);
2140
+ Object.keys(f.geometry.morphAttributes).length > 0 && So(f, o), f.name = t.createUniqueName(o.name || "mesh_" + e), ie(f, o), E.extensions && ae(s, f, E), t.assignFinalMaterial(f), h.push(f);
2141
2141
  }
2142
2142
  for (let g = 0, p = h.length; g < p; g++)
2143
2143
  t.associations.set(h[g], {
@@ -2146,7 +2146,7 @@ class yo {
2146
2146
  });
2147
2147
  if (h.length === 1)
2148
2148
  return o.extensions && ae(s, h[0], o), h[0];
2149
- const d = new Ke();
2149
+ const d = new Ye();
2150
2150
  o.extensions && ae(s, d, o), t.associations.set(d, { meshes: e });
2151
2151
  for (let g = 0, p = h.length; g < p; g++)
2152
2152
  d.add(h[g]);
@@ -2167,7 +2167,7 @@ class yo {
2167
2167
  console.warn("THREE.GLTFLoader: Missing camera parameters.");
2168
2168
  return;
2169
2169
  }
2170
- return i.type === "perspective" ? t = new ls(It.radToDeg(s.yfov), s.aspectRatio || 1, s.znear || 1, s.zfar || 2e6) : i.type === "orthographic" && (t = new cs(-s.xmag, s.xmag, s.ymag, -s.ymag, s.znear, s.zfar)), i.name && (t.name = this.createUniqueName(i.name)), ie(t, i), Promise.resolve(t);
2170
+ return i.type === "perspective" ? t = new gs(Bt.radToDeg(s.yfov), s.aspectRatio || 1, s.znear || 1, s.zfar || 2e6) : i.type === "orthographic" && (t = new us(-s.xmag, s.xmag, s.ymag, -s.ymag, s.znear, s.zfar)), i.name && (t.name = this.createUniqueName(i.name)), ie(t, i), Promise.resolve(t);
2171
2171
  }
2172
2172
  /**
2173
2173
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
@@ -2186,12 +2186,12 @@ class yo {
2186
2186
  const h = n[a];
2187
2187
  if (h) {
2188
2188
  r.push(h);
2189
- const d = new Re();
2189
+ const d = new Ie();
2190
2190
  o !== null && d.fromArray(o.array, a * 16), A.push(d);
2191
2191
  } else
2192
2192
  console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[a]);
2193
2193
  }
2194
- return new hs(r, A);
2194
+ return new ps(r, A);
2195
2195
  });
2196
2196
  }
2197
2197
  /**
@@ -2204,8 +2204,8 @@ class yo {
2204
2204
  loadAnimation(e) {
2205
2205
  const t = this.json, i = this, s = t.animations[e], o = s.name ? s.name : "animation_" + e, n = [], r = [], A = [], a = [], l = [];
2206
2206
  for (let h = 0, d = s.channels.length; h < d; h++) {
2207
- const g = s.channels[h], p = s.samplers[g.sampler], C = g.target, I = C.node, f = s.parameters !== void 0 ? s.parameters[p.input] : p.input, m = s.parameters !== void 0 ? s.parameters[p.output] : p.output;
2208
- C.node !== void 0 && (n.push(this.getDependency("node", I)), r.push(this.getDependency("accessor", f)), A.push(this.getDependency("accessor", m)), a.push(p), l.push(C));
2207
+ const g = s.channels[h], p = s.samplers[g.sampler], C = g.target, E = C.node, f = s.parameters !== void 0 ? s.parameters[p.input] : p.input, m = s.parameters !== void 0 ? s.parameters[p.output] : p.output;
2208
+ C.node !== void 0 && (n.push(this.getDependency("node", E)), r.push(this.getDependency("accessor", f)), A.push(this.getDependency("accessor", m)), a.push(p), l.push(C));
2209
2209
  }
2210
2210
  return Promise.all([
2211
2211
  Promise.all(n),
@@ -2214,17 +2214,17 @@ class yo {
2214
2214
  Promise.all(a),
2215
2215
  Promise.all(l)
2216
2216
  ]).then(function(h) {
2217
- const d = h[0], g = h[1], p = h[2], C = h[3], I = h[4], f = [];
2218
- for (let m = 0, E = d.length; m < E; m++) {
2219
- const b = d[m], B = g[m], Q = p[m], w = C[m], T = I[m];
2217
+ const d = h[0], g = h[1], p = h[2], C = h[3], E = h[4], f = [];
2218
+ for (let m = 0, I = d.length; m < I; m++) {
2219
+ const b = d[m], B = g[m], y = p[m], w = C[m], L = E[m];
2220
2220
  if (b === void 0) continue;
2221
2221
  b.updateMatrix && b.updateMatrix();
2222
- const R = i._createAnimationTracks(b, B, Q, w, T);
2223
- if (R)
2224
- for (let y = 0; y < R.length; y++)
2225
- f.push(R[y]);
2222
+ const D = i._createAnimationTracks(b, B, y, w, L);
2223
+ if (D)
2224
+ for (let Q = 0; Q < D.length; Q++)
2225
+ f.push(D[Q]);
2226
2226
  }
2227
- return new ds(o, void 0, f);
2227
+ return new fs(o, void 0, f);
2228
2228
  });
2229
2229
  }
2230
2230
  createNodeMesh(e) {
@@ -2257,7 +2257,7 @@ class yo {
2257
2257
  ]).then(function(a) {
2258
2258
  const l = a[0], h = a[1], d = a[2];
2259
2259
  d !== null && l.traverse(function(g) {
2260
- g.isSkinnedMesh && g.bind(d, wo);
2260
+ g.isSkinnedMesh && g.bind(d, vo);
2261
2261
  });
2262
2262
  for (let g = 0, p = h.length; g < p; g++)
2263
2263
  l.add(h[g]);
@@ -2281,11 +2281,11 @@ class yo {
2281
2281
  r.push(a);
2282
2282
  }), this.nodeCache[e] = Promise.all(r).then(function(a) {
2283
2283
  let l;
2284
- if (o.isBone === !0 ? l = new gs() : a.length > 1 ? l = new Ke() : a.length === 1 ? l = a[0] : l = new Bt(), l !== a[0])
2284
+ if (o.isBone === !0 ? l = new ms() : a.length > 1 ? l = new Ye() : a.length === 1 ? l = a[0] : l = new Oe(), l !== a[0])
2285
2285
  for (let h = 0, d = a.length; h < d; h++)
2286
2286
  l.add(a[h]);
2287
2287
  if (o.name && (l.userData.name = o.name, l.name = n), ie(l, o), o.extensions && ae(i, l, o), o.matrix !== void 0) {
2288
- const h = new Re();
2288
+ const h = new Ie();
2289
2289
  h.fromArray(o.matrix), l.applyMatrix4(h);
2290
2290
  } else
2291
2291
  o.translation !== void 0 && l.position.fromArray(o.translation), o.rotation !== void 0 && l.quaternion.fromArray(o.rotation), o.scale !== void 0 && l.scale.fromArray(o.scale);
@@ -2306,7 +2306,7 @@ class yo {
2306
2306
  * @return {Promise<Group>}
2307
2307
  */
2308
2308
  loadScene(e) {
2309
- const t = this.extensions, i = this.json.scenes[e], s = this, o = new Ke();
2309
+ const t = this.extensions, i = this.json.scenes[e], s = this, o = new Ye();
2310
2310
  i.name && (o.name = s.createUniqueName(i.name)), ie(o, i), i.extensions && ae(t, o, i);
2311
2311
  const n = i.nodes || [], r = [];
2312
2312
  for (let A = 0, a = n.length; A < a; A++)
@@ -2317,7 +2317,7 @@ class yo {
2317
2317
  const a = (l) => {
2318
2318
  const h = /* @__PURE__ */ new Map();
2319
2319
  for (const [d, g] of s.associations)
2320
- (d instanceof je || d instanceof Dt) && h.set(d, g);
2320
+ (d instanceof ze || d instanceof Tt) && h.set(d, g);
2321
2321
  return l.traverse((d) => {
2322
2322
  const g = s.associations.get(d);
2323
2323
  g != null && h.set(d, g);
@@ -2334,29 +2334,29 @@ class yo {
2334
2334
  let a;
2335
2335
  switch (ne[o.path]) {
2336
2336
  case ne.weights:
2337
- a = Lt;
2337
+ a = Ft;
2338
2338
  break;
2339
2339
  case ne.rotation:
2340
- a = Tt;
2340
+ a = kt;
2341
2341
  break;
2342
2342
  case ne.translation:
2343
2343
  case ne.scale:
2344
- a = Rt;
2344
+ a = Lt;
2345
2345
  break;
2346
2346
  default:
2347
2347
  switch (i.itemSize) {
2348
2348
  case 1:
2349
- a = Lt;
2349
+ a = Ft;
2350
2350
  break;
2351
2351
  case 2:
2352
2352
  case 3:
2353
2353
  default:
2354
- a = Rt;
2354
+ a = Lt;
2355
2355
  break;
2356
2356
  }
2357
2357
  break;
2358
2358
  }
2359
- const l = s.interpolation !== void 0 ? bo[s.interpolation] : Ai, h = this._getArrayFromAccessor(i);
2359
+ const l = s.interpolation !== void 0 ? yo[s.interpolation] : gi, h = this._getArrayFromAccessor(i);
2360
2360
  for (let d = 0, g = A.length; d < g; d++) {
2361
2361
  const p = new a(
2362
2362
  A[d] + "." + ne[o.path],
@@ -2371,7 +2371,7 @@ class yo {
2371
2371
  _getArrayFromAccessor(e) {
2372
2372
  let t = e.array;
2373
2373
  if (e.normalized) {
2374
- const i = mt(t.constructor), s = new Float32Array(t.length);
2374
+ const i = Ct(t.constructor), s = new Float32Array(t.length);
2375
2375
  for (let o = 0, n = t.length; o < n; o++)
2376
2376
  s[o] = t[o] * i;
2377
2377
  t = s;
@@ -2380,21 +2380,21 @@ class yo {
2380
2380
  }
2381
2381
  _createCubicSplineTrackInterpolant(e) {
2382
2382
  e.createInterpolant = function(i) {
2383
- const s = this instanceof Tt ? mo : fi;
2383
+ const s = this instanceof kt ? Bo : Ii;
2384
2384
  return new s(this.times, this.values, this.getValueSize() / 3, i);
2385
2385
  }, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
2386
2386
  }
2387
2387
  }
2388
- function So(c, e, t) {
2389
- const i = e.attributes, s = new Oe();
2388
+ function Do(c, e, t) {
2389
+ const i = e.attributes, s = new qe();
2390
2390
  if (i.POSITION !== void 0) {
2391
2391
  const r = t.json.accessors[i.POSITION], A = r.min, a = r.max;
2392
2392
  if (A !== void 0 && a !== void 0) {
2393
2393
  if (s.set(
2394
- new D(A[0], A[1], A[2]),
2395
- new D(a[0], a[1], a[2])
2394
+ new R(A[0], A[1], A[2]),
2395
+ new R(a[0], a[1], a[2])
2396
2396
  ), r.normalized) {
2397
- const l = mt(Ie[r.componentType]);
2397
+ const l = Ct(Ee[r.componentType]);
2398
2398
  s.min.multiplyScalar(l), s.max.multiplyScalar(l);
2399
2399
  }
2400
2400
  } else {
@@ -2405,14 +2405,14 @@ function So(c, e, t) {
2405
2405
  return;
2406
2406
  const o = e.targets;
2407
2407
  if (o !== void 0) {
2408
- const r = new D(), A = new D();
2408
+ const r = new R(), A = new R();
2409
2409
  for (let a = 0, l = o.length; a < l; a++) {
2410
2410
  const h = o[a];
2411
2411
  if (h.POSITION !== void 0) {
2412
2412
  const d = t.json.accessors[h.POSITION], g = d.min, p = d.max;
2413
2413
  if (g !== void 0 && p !== void 0) {
2414
2414
  if (A.setX(Math.max(Math.abs(g[0]), Math.abs(p[0]))), A.setY(Math.max(Math.abs(g[1]), Math.abs(p[1]))), A.setZ(Math.max(Math.abs(g[2]), Math.abs(p[2]))), d.normalized) {
2415
- const C = mt(Ie[d.componentType]);
2415
+ const C = Ct(Ee[d.componentType]);
2416
2416
  A.multiplyScalar(C);
2417
2417
  }
2418
2418
  r.max(A);
@@ -2423,10 +2423,10 @@ function So(c, e, t) {
2423
2423
  s.expandByVector(r);
2424
2424
  }
2425
2425
  c.boundingBox = s;
2426
- const n = new wt();
2426
+ const n = new St();
2427
2427
  s.getCenter(n.center), n.radius = s.min.distanceTo(s.max) / 2, c.boundingSphere = n;
2428
2428
  }
2429
- function jt(c, e, t) {
2429
+ function zt(c, e, t) {
2430
2430
  const i = e.attributes, s = [];
2431
2431
  function o(n, r) {
2432
2432
  return t.getDependency("accessor", n).then(function(A) {
@@ -2434,7 +2434,7 @@ function jt(c, e, t) {
2434
2434
  });
2435
2435
  }
2436
2436
  for (const n in i) {
2437
- const r = ft[n] || n.toLowerCase();
2437
+ const r = bt[n] || n.toLowerCase();
2438
2438
  r in c.attributes || s.push(o(i[n], r));
2439
2439
  }
2440
2440
  if (e.indices !== void 0 && !c.index) {
@@ -2443,12 +2443,12 @@ function jt(c, e, t) {
2443
2443
  });
2444
2444
  s.push(n);
2445
2445
  }
2446
- return ht.workingColorSpace !== Y && "COLOR_0" in i && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ht.workingColorSpace}" not supported.`), ie(c, e), So(c, e, t), Promise.all(s).then(function() {
2447
- return e.targets !== void 0 ? Io(c, e.targets, t) : c;
2446
+ return gt.workingColorSpace !== Y && "COLOR_0" in i && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${gt.workingColorSpace}" not supported.`), ie(c, e), Do(c, e, t), Promise.all(s).then(function() {
2447
+ return e.targets !== void 0 ? Qo(c, e.targets, t) : c;
2448
2448
  });
2449
2449
  }
2450
- const Xe = /* @__PURE__ */ new WeakMap();
2451
- class Mo extends Et {
2450
+ const $e = /* @__PURE__ */ new WeakMap();
2451
+ class To extends yt {
2452
2452
  /**
2453
2453
  * Constructs a new Draco loader.
2454
2454
  *
@@ -2534,8 +2534,8 @@ class Mo extends Et {
2534
2534
  }
2535
2535
  decodeGeometry(e, t) {
2536
2536
  const i = JSON.stringify(t);
2537
- if (Xe.has(e)) {
2538
- const A = Xe.get(e);
2537
+ if ($e.has(e)) {
2538
+ const A = $e.get(e);
2539
2539
  if (A.key === i)
2540
2540
  return A.promise;
2541
2541
  if (e.byteLength === 0)
@@ -2549,16 +2549,16 @@ class Mo extends Et {
2549
2549
  }))).then((A) => this._createGeometry(A.geometry));
2550
2550
  return r.catch(() => !0).then(() => {
2551
2551
  s && o && this._releaseTask(s, o);
2552
- }), Xe.set(e, {
2552
+ }), $e.set(e, {
2553
2553
  key: i,
2554
2554
  promise: r
2555
2555
  }), r;
2556
2556
  }
2557
2557
  _createGeometry(e) {
2558
- const t = new ai();
2559
- e.index && t.setIndex(new ve(e.index.array, 1));
2558
+ const t = new di();
2559
+ e.index && t.setIndex(new Re(e.index.array, 1));
2560
2560
  for (let i = 0; i < e.attributes.length; i++) {
2561
- const s = e.attributes[i], o = s.name, n = s.array, r = s.itemSize, A = new ve(n, r);
2561
+ const s = e.attributes[i], o = s.name, n = s.array, r = s.itemSize, A = new Re(n, r);
2562
2562
  o === "color" && (this._assignVertexColorSpace(A, s.vertexColorSpace), A.normalized = !(n instanceof Float32Array)), t.setAttribute(o, A);
2563
2563
  }
2564
2564
  return t;
@@ -2567,7 +2567,7 @@ class Mo extends Et {
2567
2567
  if (t !== se) return;
2568
2568
  const i = new re();
2569
2569
  for (let s = 0, o = e.count; s < o; s++)
2570
- i.fromBufferAttribute(e, s), ht.colorSpaceToWorking(i, se), e.setXYZ(s, i.r, i.g, i.b);
2570
+ i.fromBufferAttribute(e, s), gt.colorSpaceToWorking(i, se), e.setXYZ(s, i.r, i.g, i.b);
2571
2571
  }
2572
2572
  _loadLibrary(e, t) {
2573
2573
  const i = new le(this.manager);
@@ -2584,7 +2584,7 @@ class Mo extends Et {
2584
2584
  return e ? t.push(this._loadLibrary("draco_decoder.js", "text")) : (t.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), t.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(t).then((i) => {
2585
2585
  const s = i[0];
2586
2586
  e || (this.decoderConfig.wasmBinary = i[1]);
2587
- const o = xo.toString(), n = [
2587
+ const o = Lo.toString(), n = [
2588
2588
  "/* draco decoder */",
2589
2589
  s,
2590
2590
  "",
@@ -2632,7 +2632,7 @@ class Mo extends Et {
2632
2632
  return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
2633
2633
  }
2634
2634
  }
2635
- function xo() {
2635
+ function Lo() {
2636
2636
  let c, e;
2637
2637
  onmessage = function(n) {
2638
2638
  const r = n.data;
@@ -2673,17 +2673,17 @@ function xo() {
2673
2673
  if (!g.ok() || d.ptr === 0)
2674
2674
  throw new Error("THREE.DRACOLoader: Decoding failed: " + g.error_msg());
2675
2675
  const C = { index: null, attributes: [] };
2676
- for (const I in l) {
2677
- const f = self[h[I]];
2678
- let m, E;
2676
+ for (const E in l) {
2677
+ const f = self[h[E]];
2678
+ let m, I;
2679
2679
  if (a.useUniqueIDs)
2680
- E = l[I], m = r.GetAttributeByUniqueId(d, E);
2680
+ I = l[E], m = r.GetAttributeByUniqueId(d, I);
2681
2681
  else {
2682
- if (E = r.GetAttributeId(d, n[l[I]]), E === -1) continue;
2683
- m = r.GetAttribute(d, E);
2682
+ if (I = r.GetAttributeId(d, n[l[E]]), I === -1) continue;
2683
+ m = r.GetAttribute(d, I);
2684
2684
  }
2685
- const b = s(n, r, d, I, f, m);
2686
- I === "color" && (b.vertexColorSpace = a.vertexColorSpace), C.attributes.push(b);
2685
+ const b = s(n, r, d, E, f, m);
2686
+ E === "color" && (b.vertexColorSpace = a.vertexColorSpace), C.attributes.push(b);
2687
2687
  }
2688
2688
  return p === n.TRIANGULAR_MESH && (C.index = i(n, r, d)), n.destroy(d), C;
2689
2689
  }
@@ -2694,8 +2694,8 @@ function xo() {
2694
2694
  return n._free(d), { array: g, itemSize: 1 };
2695
2695
  }
2696
2696
  function s(n, r, A, a, l, h) {
2697
- const d = h.num_components(), p = A.num_points() * d, C = p * l.BYTES_PER_ELEMENT, I = o(n, l), f = n._malloc(C);
2698
- r.GetAttributeDataArrayForAllPoints(A, h, I, C, f);
2697
+ const d = h.num_components(), p = A.num_points() * d, C = p * l.BYTES_PER_ELEMENT, E = o(n, l), f = n._malloc(C);
2698
+ r.GetAttributeDataArrayForAllPoints(A, h, E, C, f);
2699
2699
  const m = new l(n.HEAPF32.buffer, f, p).slice();
2700
2700
  return n._free(f), {
2701
2701
  name: a,
@@ -2722,7 +2722,7 @@ function xo() {
2722
2722
  }
2723
2723
  }
2724
2724
  }
2725
- class vo {
2725
+ class Fo {
2726
2726
  /**
2727
2727
  * Constructs a new Worker pool.
2728
2728
  *
@@ -2788,13 +2788,13 @@ class vo {
2788
2788
  this.workers.forEach((e) => e.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
2789
2789
  }
2790
2790
  }
2791
- const Do = 0, Kt = 2, Ro = 1, zt = 2, Lo = 0, To = 1, Fo = 10, ko = 0, mi = 9, bi = 15, Ci = 16, Ii = 22, Ei = 37, Bi = 43, Qi = 76, wi = 83, yi = 97, Si = 100, Mi = 103, xi = 109, _o = 131, Go = 132, Po = 133, No = 134, Uo = 137, Ho = 138, Vo = 141, Oo = 142, qo = 145, jo = 146, vi = 148, Di = 152, Ko = 157, zo = 158, Ri = 165, Li = 166, Mt = 1000066e3;
2792
- class Yo {
2791
+ const ko = 0, Yt = 2, _o = 1, Jt = 2, Go = 0, Po = 1, No = 10, Uo = 0, Bi = 9, yi = 15, wi = 16, Qi = 22, Si = 37, Mi = 43, xi = 76, vi = 83, Ri = 97, Di = 100, Ti = 103, Li = 109, Vo = 131, Oo = 132, Ho = 133, qo = 134, jo = 137, Ko = 138, zo = 141, Yo = 142, Jo = 145, Wo = 146, Fi = 148, ki = 152, Xo = 157, Zo = 158, _i = 165, Gi = 166, vt = 1000066e3;
2792
+ class $o {
2793
2793
  constructor() {
2794
2794
  this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null;
2795
2795
  }
2796
2796
  }
2797
- class ye {
2797
+ class Se {
2798
2798
  constructor(e, t, i, s) {
2799
2799
  this._dataView = void 0, this._littleEndian = void 0, this._offset = void 0, this._dataView = new DataView(e.buffer, e.byteOffset + t, i), this._littleEndian = s, this._offset = 0;
2800
2800
  }
@@ -2834,68 +2834,68 @@ class ye {
2834
2834
  }
2835
2835
  }
2836
2836
  const N = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
2837
- function Yt(c) {
2837
+ function Wt(c) {
2838
2838
  return new TextDecoder().decode(c);
2839
2839
  }
2840
- function Jo(c) {
2840
+ function en(c) {
2841
2841
  const e = new Uint8Array(c.buffer, c.byteOffset, N.length);
2842
2842
  if (e[0] !== N[0] || e[1] !== N[1] || e[2] !== N[2] || e[3] !== N[3] || e[4] !== N[4] || e[5] !== N[5] || e[6] !== N[6] || e[7] !== N[7] || e[8] !== N[8] || e[9] !== N[9] || e[10] !== N[10] || e[11] !== N[11]) throw new Error("Missing KTX 2.0 identifier.");
2843
- const t = new Yo(), i = 17 * Uint32Array.BYTES_PER_ELEMENT, s = new ye(c, N.length, i, !0);
2843
+ const t = new $o(), i = 17 * Uint32Array.BYTES_PER_ELEMENT, s = new Se(c, N.length, i, !0);
2844
2844
  t.vkFormat = s._nextUint32(), t.typeSize = s._nextUint32(), t.pixelWidth = s._nextUint32(), t.pixelHeight = s._nextUint32(), t.pixelDepth = s._nextUint32(), t.layerCount = s._nextUint32(), t.faceCount = s._nextUint32();
2845
2845
  const o = s._nextUint32();
2846
2846
  t.supercompressionScheme = s._nextUint32();
2847
- const n = s._nextUint32(), r = s._nextUint32(), A = s._nextUint32(), a = s._nextUint32(), l = s._nextUint64(), h = s._nextUint64(), d = new ye(c, N.length + i, 3 * o * 8, !0);
2847
+ const n = s._nextUint32(), r = s._nextUint32(), A = s._nextUint32(), a = s._nextUint32(), l = s._nextUint64(), h = s._nextUint64(), d = new Se(c, N.length + i, 3 * o * 8, !0);
2848
2848
  for (let F = 0; F < o; F++) t.levels.push({ levelData: new Uint8Array(c.buffer, c.byteOffset + d._nextUint64(), d._nextUint64()), uncompressedByteLength: d._nextUint64() });
2849
- const g = new ye(c, n, r, !0), p = { vendorId: g._skip(4)._nextUint16(), descriptorType: g._nextUint16(), versionNumber: g._nextUint16(), descriptorBlockSize: g._nextUint16(), colorModel: g._nextUint8(), colorPrimaries: g._nextUint8(), transferFunction: g._nextUint8(), flags: g._nextUint8(), texelBlockDimension: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], bytesPlane: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], samples: [] }, C = (p.descriptorBlockSize / 4 - 6) / 4;
2849
+ const g = new Se(c, n, r, !0), p = { vendorId: g._skip(4)._nextUint16(), descriptorType: g._nextUint16(), versionNumber: g._nextUint16(), descriptorBlockSize: g._nextUint16(), colorModel: g._nextUint8(), colorPrimaries: g._nextUint8(), transferFunction: g._nextUint8(), flags: g._nextUint8(), texelBlockDimension: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], bytesPlane: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], samples: [] }, C = (p.descriptorBlockSize / 4 - 6) / 4;
2850
2850
  for (let F = 0; F < C; F++) {
2851
- const O = { bitOffset: g._nextUint16(), bitLength: g._nextUint8(), channelType: g._nextUint8(), samplePosition: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
2852
- 64 & O.channelType ? (O.sampleLower = g._nextInt32(), O.sampleUpper = g._nextInt32()) : (O.sampleLower = g._nextUint32(), O.sampleUpper = g._nextUint32()), p.samples[F] = O;
2851
+ const H = { bitOffset: g._nextUint16(), bitLength: g._nextUint8(), channelType: g._nextUint8(), samplePosition: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
2852
+ 64 & H.channelType ? (H.sampleLower = g._nextInt32(), H.sampleUpper = g._nextInt32()) : (H.sampleLower = g._nextUint32(), H.sampleUpper = g._nextUint32()), p.samples[F] = H;
2853
2853
  }
2854
2854
  t.dataFormatDescriptor.length = 0, t.dataFormatDescriptor.push(p);
2855
- const I = new ye(c, A, a, !0);
2856
- for (; I._offset < a; ) {
2857
- const F = I._nextUint32(), O = I._scan(F), oe = Yt(O);
2858
- if (t.keyValue[oe] = I._nextUint8Array(F - O.byteLength - 1), oe.match(/^ktx/i)) {
2859
- const Qe = Yt(t.keyValue[oe]);
2860
- t.keyValue[oe] = Qe.substring(0, Qe.lastIndexOf("\0"));
2855
+ const E = new Se(c, A, a, !0);
2856
+ for (; E._offset < a; ) {
2857
+ const F = E._nextUint32(), H = E._scan(F), oe = Wt(H);
2858
+ if (t.keyValue[oe] = E._nextUint8Array(F - H.byteLength - 1), oe.match(/^ktx/i)) {
2859
+ const we = Wt(t.keyValue[oe]);
2860
+ t.keyValue[oe] = we.substring(0, we.lastIndexOf("\0"));
2861
2861
  }
2862
- I._skip(F % 4 ? 4 - F % 4 : 0);
2862
+ E._skip(F % 4 ? 4 - F % 4 : 0);
2863
2863
  }
2864
2864
  if (h <= 0) return t;
2865
- const f = new ye(c, l, h, !0), m = f._nextUint16(), E = f._nextUint16(), b = f._nextUint32(), B = f._nextUint32(), Q = f._nextUint32(), w = f._nextUint32(), T = [];
2866
- for (let F = 0; F < o; F++) T.push({ imageFlags: f._nextUint32(), rgbSliceByteOffset: f._nextUint32(), rgbSliceByteLength: f._nextUint32(), alphaSliceByteOffset: f._nextUint32(), alphaSliceByteLength: f._nextUint32() });
2867
- const R = l + f._offset, y = R + b, v = y + B, M = v + Q, J = new Uint8Array(c.buffer, c.byteOffset + R, b), W = new Uint8Array(c.buffer, c.byteOffset + y, B), Be = new Uint8Array(c.buffer, c.byteOffset + v, Q), q = new Uint8Array(c.buffer, c.byteOffset + M, w);
2868
- return t.globalData = { endpointCount: m, selectorCount: E, imageDescs: T, endpointsData: J, selectorsData: W, tablesData: Be, extendedData: q }, t;
2865
+ const f = new Se(c, l, h, !0), m = f._nextUint16(), I = f._nextUint16(), b = f._nextUint32(), B = f._nextUint32(), y = f._nextUint32(), w = f._nextUint32(), L = [];
2866
+ for (let F = 0; F < o; F++) L.push({ imageFlags: f._nextUint32(), rgbSliceByteOffset: f._nextUint32(), rgbSliceByteLength: f._nextUint32(), alphaSliceByteOffset: f._nextUint32(), alphaSliceByteLength: f._nextUint32() });
2867
+ const D = l + f._offset, Q = D + b, v = Q + B, M = v + y, J = new Uint8Array(c.buffer, c.byteOffset + D, b), W = new Uint8Array(c.buffer, c.byteOffset + Q, B), ye = new Uint8Array(c.buffer, c.byteOffset + v, y), q = new Uint8Array(c.buffer, c.byteOffset + M, w);
2868
+ return t.globalData = { endpointCount: m, selectorCount: I, imageDescs: L, endpointsData: J, selectorsData: W, tablesData: ye, extendedData: q }, t;
2869
2869
  }
2870
- let Ze, te, bt;
2871
- const $e = { env: { emscripten_notify_memory_growth: function(c) {
2872
- bt = new Uint8Array(te.exports.memory.buffer);
2870
+ let et, te, Et;
2871
+ const tt = { env: { emscripten_notify_memory_growth: function(c) {
2872
+ Et = new Uint8Array(te.exports.memory.buffer);
2873
2873
  } } };
2874
- class Wo {
2874
+ class tn {
2875
2875
  init() {
2876
- return Ze || (Ze = typeof fetch < "u" ? fetch("data:application/wasm;base64," + Jt).then((e) => e.arrayBuffer()).then((e) => WebAssembly.instantiate(e, $e)).then(this._init) : WebAssembly.instantiate(Buffer.from(Jt, "base64"), $e).then(this._init), Ze);
2876
+ return et || (et = typeof fetch < "u" ? fetch("data:application/wasm;base64," + Xt).then((e) => e.arrayBuffer()).then((e) => WebAssembly.instantiate(e, tt)).then(this._init) : WebAssembly.instantiate(Buffer.from(Xt, "base64"), tt).then(this._init), et);
2877
2877
  }
2878
2878
  _init(e) {
2879
- te = e.instance, $e.env.emscripten_notify_memory_growth(0);
2879
+ te = e.instance, tt.env.emscripten_notify_memory_growth(0);
2880
2880
  }
2881
2881
  decode(e, t = 0) {
2882
2882
  if (!te) throw new Error("ZSTDDecoder: Await .init() before decoding.");
2883
2883
  const i = e.byteLength, s = te.exports.malloc(i);
2884
- bt.set(e, s), t = t || Number(te.exports.ZSTD_findDecompressedSize(s, i));
2885
- const o = te.exports.malloc(t), n = te.exports.ZSTD_decompress(o, t, s, i), r = bt.slice(o, o + n);
2884
+ Et.set(e, s), t = t || Number(te.exports.ZSTD_findDecompressedSize(s, i));
2885
+ const o = te.exports.malloc(t), n = te.exports.ZSTD_decompress(o, t, s, i), r = Et.slice(o, o + n);
2886
2886
  return te.exports.free(s), te.exports.free(o), r;
2887
2887
  }
2888
2888
  }
2889
- const Jt = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", Xo = "display-p3", Zo = "display-p3-linear", et = /* @__PURE__ */ new WeakMap();
2890
- let tt = 0, it;
2891
- class K extends Et {
2889
+ const Xt = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", sn = "display-p3", on = "display-p3-linear", it = /* @__PURE__ */ new WeakMap();
2890
+ let st = 0, ot;
2891
+ class K extends yt {
2892
2892
  /**
2893
2893
  * Constructs a new KTX2 loader.
2894
2894
  *
2895
2895
  * @param {LoadingManager} [manager] - The loading manager.
2896
2896
  */
2897
2897
  constructor(e) {
2898
- super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new vo(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn(
2898
+ super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new Fo(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn(
2899
2899
  'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.'
2900
2900
  );
2901
2901
  }
@@ -2990,9 +2990,9 @@ class K extends Et {
2990
2990
  const a = new Worker(this.workerSourceURL), l = this.transcoderBinary.slice(0);
2991
2991
  return a.postMessage({ type: "init", config: this.workerConfig, transcoderBinary: l }, [l]), a;
2992
2992
  });
2993
- }), tt > 0 && console.warn(
2993
+ }), st > 0 && console.warn(
2994
2994
  "THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."
2995
- ), tt++;
2995
+ ), st++;
2996
2996
  }
2997
2997
  return this.transcoderPending;
2998
2998
  }
@@ -3024,8 +3024,8 @@ class K extends Et {
3024
3024
  parse(e, t, i) {
3025
3025
  if (this.workerConfig === null)
3026
3026
  throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
3027
- if (et.has(e))
3028
- return et.get(e).promise.then(t).catch(i);
3027
+ if (it.has(e))
3028
+ return it.get(e).promise.then(t).catch(i);
3029
3029
  this._createTexture(e).then((s) => t ? t(s) : null).catch(i);
3030
3030
  }
3031
3031
  _createTextureFrom(e, t) {
@@ -3033,12 +3033,12 @@ class K extends Et {
3033
3033
  if (i === "error") return Promise.reject(s);
3034
3034
  let h;
3035
3035
  if (t.faceCount === 6)
3036
- h = new ms(o, A, a);
3036
+ h = new Is(o, A, a);
3037
3037
  else {
3038
3038
  const d = o[0].mipmaps;
3039
- h = t.layerCount > 1 ? new bs(d, n, r, t.layerCount, A, a) : new li(d, n, r, A, a);
3039
+ h = t.layerCount > 1 ? new Bs(d, n, r, t.layerCount, A, a) : new ui(d, n, r, A, a);
3040
3040
  }
3041
- return h.minFilter = o[0].mipmaps.length === 1 ? he : Ve, h.magFilter = he, h.generateMipmaps = !1, h.needsUpdate = !0, h.colorSpace = Ti(t), h.premultiplyAlpha = !!(l & Ro), h;
3041
+ return h.minFilter = o[0].mipmaps.length === 1 ? he : He, h.magFilter = he, h.generateMipmaps = !1, h.needsUpdate = !0, h.colorSpace = Pi(t), h.premultiplyAlpha = !!(l & _o), h;
3042
3042
  }
3043
3043
  /**
3044
3044
  * @private
@@ -3047,18 +3047,18 @@ class K extends Et {
3047
3047
  * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
3048
3048
  */
3049
3049
  async _createTexture(e, t = {}) {
3050
- const i = Jo(new Uint8Array(e)), s = i.vkFormat === Mt && i.dataFormatDescriptor[0].colorModel === 167;
3051
- if (!(i.vkFormat === ko || s && !this.workerConfig.astcHDRSupported))
3052
- return en(i);
3050
+ const i = en(new Uint8Array(e)), s = i.vkFormat === vt && i.dataFormatDescriptor[0].colorModel === 167;
3051
+ if (!(i.vkFormat === Uo || s && !this.workerConfig.astcHDRSupported))
3052
+ return rn(i);
3053
3053
  const n = t, r = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: e, taskConfig: n }, [e])).then((A) => this._createTextureFrom(A.data, i));
3054
- return et.set(e, { promise: r }), r;
3054
+ return it.set(e, { promise: r }), r;
3055
3055
  }
3056
3056
  /**
3057
3057
  * Frees internal resources. This method should be called
3058
3058
  * when the loader is no longer required.
3059
3059
  */
3060
3060
  dispose() {
3061
- this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), tt--;
3061
+ this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), st--;
3062
3062
  }
3063
3063
  }
3064
3064
  K.BasisFormat = {
@@ -3091,15 +3091,15 @@ K.TranscoderFormat = {
3091
3091
  K.EngineFormat = {
3092
3092
  RGBAFormat: me,
3093
3093
  RGBA_ASTC_4x4_Format: Ge,
3094
- RGB_BPTC_UNSIGNED_Format: ws,
3095
- RGBA_BPTC_Format: dt,
3096
- RGBA_ETC2_EAC_Format: ci,
3097
- RGBA_PVRTC_4BPPV1_Format: Qs,
3098
- RGBA_S3TC_DXT5_Format: gt,
3099
- RGB_ETC1_Format: Bs,
3100
- RGB_ETC2_Format: hi,
3101
- RGB_PVRTC_4BPPV1_Format: Es,
3102
- RGBA_S3TC_DXT1_Format: ut
3094
+ RGB_BPTC_UNSIGNED_Format: xs,
3095
+ RGBA_BPTC_Format: ut,
3096
+ RGBA_ETC2_EAC_Format: pi,
3097
+ RGBA_PVRTC_4BPPV1_Format: Ms,
3098
+ RGBA_S3TC_DXT5_Format: pt,
3099
+ RGB_ETC1_Format: Ss,
3100
+ RGB_ETC2_Format: fi,
3101
+ RGB_PVRTC_4BPPV1_Format: Qs,
3102
+ RGBA_S3TC_DXT1_Format: ft
3103
3103
  };
3104
3104
  K.EngineType = {
3105
3105
  UnsignedByteType: z,
@@ -3118,10 +3118,10 @@ K.BasisWorker = function() {
3118
3118
  case "transcode":
3119
3119
  e.then(() => {
3120
3120
  try {
3121
- const { faces: I, buffers: f, width: m, height: E, hasAlpha: b, format: B, type: Q, dfdFlags: w } = A(C.buffer);
3122
- self.postMessage({ type: "transcode", id: C.id, data: { faces: I, width: m, height: E, hasAlpha: b, format: B, type: Q, dfdFlags: w } }, f);
3123
- } catch (I) {
3124
- console.error(I), self.postMessage({ type: "error", id: C.id, error: I.message });
3121
+ const { faces: E, buffers: f, width: m, height: I, hasAlpha: b, format: B, type: y, dfdFlags: w } = A(C.buffer);
3122
+ self.postMessage({ type: "transcode", id: C.id, data: { faces: E, width: m, height: I, hasAlpha: b, format: B, type: y, dfdFlags: w } }, f);
3123
+ } catch (E) {
3124
+ console.error(E), self.postMessage({ type: "error", id: C.id, error: E.message });
3125
3125
  }
3126
3126
  });
3127
3127
  break;
@@ -3136,11 +3136,11 @@ K.BasisWorker = function() {
3136
3136
  }
3137
3137
  function A(p) {
3138
3138
  const C = new t.KTX2File(new Uint8Array(p));
3139
- function I() {
3139
+ function E() {
3140
3140
  C.close(), C.delete();
3141
3141
  }
3142
3142
  if (!C.isValid())
3143
- throw I(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
3143
+ throw E(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
3144
3144
  let f;
3145
3145
  if (C.isUASTC())
3146
3146
  f = n.UASTC;
@@ -3150,32 +3150,32 @@ K.BasisWorker = function() {
3150
3150
  f = n.UASTC_HDR;
3151
3151
  else
3152
3152
  throw new Error("THREE.KTX2Loader: Unknown Basis encoding");
3153
- const m = C.getWidth(), E = C.getHeight(), b = C.getLayers() || 1, B = C.getLevels(), Q = C.getFaces(), w = C.getHasAlpha(), T = C.getDFDFlags(), { transcoderFormat: R, engineFormat: y, engineType: v } = h(f, m, E, w);
3154
- if (!m || !E || !B)
3155
- throw I(), new Error("THREE.KTX2Loader: Invalid texture");
3153
+ const m = C.getWidth(), I = C.getHeight(), b = C.getLayers() || 1, B = C.getLevels(), y = C.getFaces(), w = C.getHasAlpha(), L = C.getDFDFlags(), { transcoderFormat: D, engineFormat: Q, engineType: v } = h(f, m, I, w);
3154
+ if (!m || !I || !B)
3155
+ throw E(), new Error("THREE.KTX2Loader: Invalid texture");
3156
3156
  if (!C.startTranscoding())
3157
- throw I(), new Error("THREE.KTX2Loader: .startTranscoding failed");
3157
+ throw E(), new Error("THREE.KTX2Loader: .startTranscoding failed");
3158
3158
  const M = [], J = [];
3159
- for (let W = 0; W < Q; W++) {
3160
- const Be = [];
3159
+ for (let W = 0; W < y; W++) {
3160
+ const ye = [];
3161
3161
  for (let q = 0; q < B; q++) {
3162
3162
  const F = [];
3163
- let O, oe;
3163
+ let H, oe;
3164
3164
  for (let de = 0; de < b; de++) {
3165
3165
  const ge = C.getImageLevelInfo(q, de, W);
3166
- W === 0 && q === 0 && de === 0 && (ge.origWidth % 4 !== 0 || ge.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), B > 1 ? (O = ge.origWidth, oe = ge.origHeight) : (O = ge.width, oe = ge.height);
3167
- let ue = new Uint8Array(C.getImageTranscodedSizeInBytes(q, de, 0, R));
3168
- const _i = C.transcodeImage(ue, q, de, W, R, 0, -1, -1);
3169
- if (v === s.HalfFloatType && (ue = new Uint16Array(ue.buffer, ue.byteOffset, ue.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !_i)
3170
- throw I(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
3166
+ W === 0 && q === 0 && de === 0 && (ge.origWidth % 4 !== 0 || ge.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), B > 1 ? (H = ge.origWidth, oe = ge.origHeight) : (H = ge.width, oe = ge.height);
3167
+ let ue = new Uint8Array(C.getImageTranscodedSizeInBytes(q, de, 0, D));
3168
+ const Vi = C.transcodeImage(ue, q, de, W, D, 0, -1, -1);
3169
+ if (v === s.HalfFloatType && (ue = new Uint16Array(ue.buffer, ue.byteOffset, ue.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !Vi)
3170
+ throw E(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
3171
3171
  F.push(ue);
3172
3172
  }
3173
- const Qe = g(F);
3174
- Be.push({ data: Qe, width: O, height: oe }), J.push(Qe.buffer);
3173
+ const we = g(F);
3174
+ ye.push({ data: we, width: H, height: oe }), J.push(we.buffer);
3175
3175
  }
3176
- M.push({ mipmaps: Be, width: m, height: E, format: y, type: v });
3176
+ M.push({ mipmaps: ye, width: m, height: I, format: Q, type: v });
3177
3177
  }
3178
- return I(), { faces: M, buffers: J, width: m, height: E, hasAlpha: w, dfdFlags: T, format: y, type: v };
3178
+ return E(), { faces: M, buffers: J, width: m, height: I, hasAlpha: w, dfdFlags: L, format: Q, type: v };
3179
3179
  }
3180
3180
  const a = [
3181
3181
  {
@@ -3274,13 +3274,13 @@ K.BasisWorker = function() {
3274
3274
  [n.UASTC]: a.filter((p) => p.basisFormat.includes(n.UASTC)).sort((p, C) => p.priorityUASTC - C.priorityUASTC),
3275
3275
  [n.UASTC_HDR]: a.filter((p) => p.basisFormat.includes(n.UASTC_HDR)).sort((p, C) => p.priorityHDR - C.priorityHDR)
3276
3276
  };
3277
- function h(p, C, I, f) {
3277
+ function h(p, C, E, f) {
3278
3278
  const m = l[p];
3279
- for (let E = 0; E < m.length; E++) {
3280
- const b = m[E];
3281
- if (b.if && !c[b.if] || !b.basisFormat.includes(p) || f && b.transcoderFormat.length < 2 || b.needsPowerOfTwo && !(d(C) && d(I))) continue;
3282
- const B = b.transcoderFormat[f ? 1 : 0], Q = b.engineFormat[f ? 1 : 0], w = b.engineType[0];
3283
- return { transcoderFormat: B, engineFormat: Q, engineType: w };
3279
+ for (let I = 0; I < m.length; I++) {
3280
+ const b = m[I];
3281
+ if (b.if && !c[b.if] || !b.basisFormat.includes(p) || f && b.transcoderFormat.length < 2 || b.needsPowerOfTwo && !(d(C) && d(E))) continue;
3282
+ const B = b.transcoderFormat[f ? 1 : 0], y = b.engineFormat[f ? 1 : 0], w = b.engineType[0];
3283
+ return { transcoderFormat: B, engineFormat: y, engineType: w };
3284
3284
  }
3285
3285
  throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.");
3286
3286
  }
@@ -3291,92 +3291,92 @@ K.BasisWorker = function() {
3291
3291
  if (p.length === 1) return p[0];
3292
3292
  let C = 0;
3293
3293
  for (let m = 0; m < p.length; m++) {
3294
- const E = p[m];
3295
- C += E.byteLength;
3294
+ const I = p[m];
3295
+ C += I.byteLength;
3296
3296
  }
3297
- const I = new Uint8Array(C);
3297
+ const E = new Uint8Array(C);
3298
3298
  let f = 0;
3299
3299
  for (let m = 0; m < p.length; m++) {
3300
- const E = p[m];
3301
- I.set(E, f), f += E.byteLength;
3300
+ const I = p[m];
3301
+ E.set(I, f), f += I.byteLength;
3302
3302
  }
3303
- return I;
3303
+ return E;
3304
3304
  }
3305
3305
  };
3306
- const $o = /* @__PURE__ */ new Set([me, Me, Se]), st = {
3307
- [xi]: me,
3308
- [yi]: me,
3309
- [Ei]: me,
3310
- [Bi]: me,
3311
- [Mi]: Me,
3312
- [wi]: Me,
3313
- [Ci]: Me,
3314
- [Ii]: Me,
3315
- [Si]: Se,
3316
- [Qi]: Se,
3317
- [bi]: Se,
3318
- [mi]: Se,
3319
- [vi]: hi,
3320
- [Di]: ci,
3321
- [Mt]: Ge,
3322
- [zo]: Ge,
3323
- [Ko]: Ge,
3324
- [Li]: Gt,
3325
- [Ri]: Gt,
3326
- [Po]: ut,
3327
- [No]: ut,
3328
- [_o]: _t,
3329
- [Go]: _t,
3330
- [Ho]: kt,
3331
- [Uo]: kt,
3332
- [Oo]: gt,
3333
- [Vo]: gt,
3334
- [jo]: dt,
3335
- [qo]: dt
3336
- }, ot = {
3337
- [xi]: De,
3338
- [yi]: be,
3339
- [Ei]: z,
3306
+ const nn = /* @__PURE__ */ new Set([me, xe, Me]), nt = {
3307
+ [Li]: me,
3308
+ [Ri]: me,
3309
+ [Si]: me,
3310
+ [Mi]: me,
3311
+ [Ti]: xe,
3312
+ [vi]: xe,
3313
+ [wi]: xe,
3314
+ [Qi]: xe,
3315
+ [Di]: Me,
3316
+ [xi]: Me,
3317
+ [yi]: Me,
3318
+ [Bi]: Me,
3319
+ [Fi]: fi,
3320
+ [ki]: pi,
3321
+ [vt]: Ge,
3322
+ [Zo]: Ge,
3323
+ [Xo]: Ge,
3324
+ [Gi]: Nt,
3325
+ [_i]: Nt,
3326
+ [Ho]: ft,
3327
+ [qo]: ft,
3328
+ [Vo]: Pt,
3329
+ [Oo]: Pt,
3330
+ [Ko]: Gt,
3331
+ [jo]: Gt,
3332
+ [Yo]: pt,
3333
+ [zo]: pt,
3334
+ [Wo]: ut,
3335
+ [Jo]: ut
3336
+ }, rt = {
3337
+ [Li]: De,
3338
+ [Ri]: be,
3339
+ [Si]: z,
3340
+ [Mi]: z,
3341
+ [Ti]: De,
3342
+ [vi]: be,
3343
+ [wi]: z,
3344
+ [Qi]: z,
3345
+ [Di]: De,
3346
+ [xi]: be,
3347
+ [yi]: z,
3340
3348
  [Bi]: z,
3341
- [Mi]: De,
3342
- [wi]: be,
3343
- [Ci]: z,
3344
- [Ii]: z,
3345
- [Si]: De,
3346
- [Qi]: be,
3347
- [bi]: z,
3348
- [mi]: z,
3349
- [vi]: z,
3350
- [Di]: z,
3351
- [Mt]: be,
3352
- [Li]: z,
3353
- [Ri]: z
3349
+ [Fi]: z,
3350
+ [ki]: z,
3351
+ [vt]: be,
3352
+ [Gi]: z,
3353
+ [_i]: z
3354
3354
  };
3355
- async function en(c) {
3355
+ async function rn(c) {
3356
3356
  const { vkFormat: e } = c;
3357
- if (st[e] === void 0)
3357
+ if (nt[e] === void 0)
3358
3358
  throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
3359
3359
  let t;
3360
- c.supercompressionScheme === Kt && (it || (it = new Promise(async (o) => {
3361
- const n = new Wo();
3360
+ c.supercompressionScheme === Yt && (ot || (ot = new Promise(async (o) => {
3361
+ const n = new tn();
3362
3362
  await n.init(), o(n);
3363
- })), t = await it);
3363
+ })), t = await ot);
3364
3364
  const i = [];
3365
3365
  for (let o = 0; o < c.levels.length; o++) {
3366
3366
  const n = Math.max(1, c.pixelWidth >> o), r = Math.max(1, c.pixelHeight >> o), A = c.pixelDepth ? Math.max(1, c.pixelDepth >> o) : 0, a = c.levels[o];
3367
3367
  let l;
3368
- if (c.supercompressionScheme === Do)
3368
+ if (c.supercompressionScheme === ko)
3369
3369
  l = a.levelData;
3370
- else if (c.supercompressionScheme === Kt)
3370
+ else if (c.supercompressionScheme === Yt)
3371
3371
  l = t.decode(a.levelData, a.uncompressedByteLength);
3372
3372
  else
3373
3373
  throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
3374
3374
  let h;
3375
- ot[e] === De ? h = new Float32Array(
3375
+ rt[e] === De ? h = new Float32Array(
3376
3376
  l.buffer,
3377
3377
  l.byteOffset,
3378
3378
  l.byteLength / Float32Array.BYTES_PER_ELEMENT
3379
- ) : ot[e] === be ? h = new Uint16Array(
3379
+ ) : rt[e] === be ? h = new Uint16Array(
3380
3380
  l.buffer,
3381
3381
  l.byteOffset,
3382
3382
  l.byteLength / Uint16Array.BYTES_PER_ELEMENT
@@ -3388,19 +3388,19 @@ async function en(c) {
3388
3388
  });
3389
3389
  }
3390
3390
  let s;
3391
- if ($o.has(st[e]))
3392
- s = c.pixelDepth === 0 ? new Cs(i[0].data, c.pixelWidth, c.pixelHeight) : new Is(i[0].data, c.pixelWidth, c.pixelHeight, c.pixelDepth);
3391
+ if (nn.has(nt[e]))
3392
+ s = c.pixelDepth === 0 ? new ys(i[0].data, c.pixelWidth, c.pixelHeight) : new ws(i[0].data, c.pixelWidth, c.pixelHeight, c.pixelDepth);
3393
3393
  else {
3394
3394
  if (c.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
3395
- s = new li(i, c.pixelWidth, c.pixelHeight), s.minFilter = i.length === 1 ? he : Ve, s.magFilter = he;
3395
+ s = new ui(i, c.pixelWidth, c.pixelHeight), s.minFilter = i.length === 1 ? he : He, s.magFilter = he;
3396
3396
  }
3397
- return s.mipmaps = i, s.type = ot[e], s.format = st[e], s.colorSpace = Ti(c), s.needsUpdate = !0, Promise.resolve(s);
3397
+ return s.mipmaps = i, s.type = rt[e], s.format = nt[e], s.colorSpace = Pi(c), s.needsUpdate = !0, Promise.resolve(s);
3398
3398
  }
3399
- function Ti(c) {
3399
+ function Pi(c) {
3400
3400
  const e = c.dataFormatDescriptor[0];
3401
- return e.colorPrimaries === To ? e.transferFunction === zt ? se : Y : e.colorPrimaries === Fo ? e.transferFunction === zt ? Xo : Zo : e.colorPrimaries === Lo ? Ft : (console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`), Ft);
3401
+ return e.colorPrimaries === Po ? e.transferFunction === Jt ? se : Y : e.colorPrimaries === No ? e.transferFunction === Jt ? sn : on : e.colorPrimaries === Go ? _t : (console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`), _t);
3402
3402
  }
3403
- var tn = function() {
3403
+ var an = function() {
3404
3404
  var c = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb", e = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb", t = new Uint8Array([
3405
3405
  0,
3406
3406
  97,
@@ -3523,19 +3523,19 @@ var tn = function() {
3523
3523
  o = f.instance, o.exports.__wasm_call_ctors();
3524
3524
  });
3525
3525
  function r(f) {
3526
- for (var m = new Uint8Array(f.length), E = 0; E < f.length; ++E) {
3527
- var b = f.charCodeAt(E);
3528
- m[E] = b > 96 ? b - 97 : b > 64 ? b - 39 : b + 4;
3526
+ for (var m = new Uint8Array(f.length), I = 0; I < f.length; ++I) {
3527
+ var b = f.charCodeAt(I);
3528
+ m[I] = b > 96 ? b - 97 : b > 64 ? b - 39 : b + 4;
3529
3529
  }
3530
- for (var B = 0, E = 0; E < f.length; ++E)
3531
- m[B++] = m[E] < 60 ? i[m[E]] : (m[E] - 60) * 64 + m[++E];
3530
+ for (var B = 0, I = 0; I < f.length; ++I)
3531
+ m[B++] = m[I] < 60 ? i[m[I]] : (m[I] - 60) * 64 + m[++I];
3532
3532
  return m.buffer.slice(0, B);
3533
3533
  }
3534
- function A(f, m, E, b, B, Q, w) {
3535
- var T = f.exports.sbrk, R = b + 3 & -4, y = T(R * B), v = T(Q.length), M = new Uint8Array(f.exports.memory.buffer);
3536
- M.set(Q, v);
3537
- var J = m(y, b, B, v, Q.length);
3538
- if (J == 0 && w && w(y, R, B), E.set(M.subarray(y, y + b * B)), T(y - T(0)), J != 0)
3534
+ function A(f, m, I, b, B, y, w) {
3535
+ var L = f.exports.sbrk, D = b + 3 & -4, Q = L(D * B), v = L(y.length), M = new Uint8Array(f.exports.memory.buffer);
3536
+ M.set(y, v);
3537
+ var J = m(Q, b, B, v, y.length);
3538
+ if (J == 0 && w && w(Q, D, B), I.set(M.subarray(Q, Q + b * B)), L(Q - L(0)), J != 0)
3539
3539
  throw new Error("Malformed buffer data: " + J);
3540
3540
  }
3541
3541
  var a = {
@@ -3554,34 +3554,34 @@ var tn = function() {
3554
3554
  pending: 0,
3555
3555
  requests: {}
3556
3556
  };
3557
- return m.object.onmessage = function(E) {
3558
- var b = E.data;
3557
+ return m.object.onmessage = function(I) {
3558
+ var b = I.data;
3559
3559
  m.pending -= b.count, m.requests[b.id][b.action](b.value), delete m.requests[b.id];
3560
3560
  }, m;
3561
3561
  }
3562
3562
  function p(f) {
3563
- for (var m = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(s) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + I.name + ";" + A.toString() + I.toString(), E = new Blob([m], { type: "text/javascript" }), b = URL.createObjectURL(E), B = h.length; B < f; ++B)
3563
+ for (var m = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(s) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + E.name + ";" + A.toString() + E.toString(), I = new Blob([m], { type: "text/javascript" }), b = URL.createObjectURL(I), B = h.length; B < f; ++B)
3564
3564
  h[B] = g(b);
3565
3565
  for (var B = f; B < h.length; ++B)
3566
3566
  h[B].object.postMessage({});
3567
3567
  h.length = f, URL.revokeObjectURL(b);
3568
3568
  }
3569
- function C(f, m, E, b, B) {
3570
- for (var Q = h[0], w = 1; w < h.length; ++w)
3571
- h[w].pending < Q.pending && (Q = h[w]);
3572
- return new Promise(function(T, R) {
3573
- var y = new Uint8Array(E), v = ++d;
3574
- Q.pending += f, Q.requests[v] = { resolve: T, reject: R }, Q.object.postMessage({ id: v, count: f, size: m, source: y, mode: b, filter: B }, [y.buffer]);
3569
+ function C(f, m, I, b, B) {
3570
+ for (var y = h[0], w = 1; w < h.length; ++w)
3571
+ h[w].pending < y.pending && (y = h[w]);
3572
+ return new Promise(function(L, D) {
3573
+ var Q = new Uint8Array(I), v = ++d;
3574
+ y.pending += f, y.requests[v] = { resolve: L, reject: D }, y.object.postMessage({ id: v, count: f, size: m, source: Q, mode: b, filter: B }, [Q.buffer]);
3575
3575
  });
3576
3576
  }
3577
- function I(f) {
3577
+ function E(f) {
3578
3578
  var m = f.data;
3579
3579
  if (!m.id)
3580
3580
  return self.close();
3581
- self.ready.then(function(E) {
3581
+ self.ready.then(function(I) {
3582
3582
  try {
3583
3583
  var b = new Uint8Array(m.count * m.size);
3584
- A(E, E.exports[m.mode], b, m.count, m.size, m.source, E.exports[m.filter]), self.postMessage({ id: m.id, count: m.count, action: "resolve", value: b }, [b.buffer]);
3584
+ A(I, I.exports[m.mode], b, m.count, m.size, m.source, I.exports[m.filter]), self.postMessage({ id: m.id, count: m.count, action: "resolve", value: b }, [b.buffer]);
3585
3585
  } catch (B) {
3586
3586
  self.postMessage({ id: m.id, count: m.count, action: "reject", value: B });
3587
3587
  }
@@ -3593,27 +3593,27 @@ var tn = function() {
3593
3593
  useWorkers: function(f) {
3594
3594
  p(f);
3595
3595
  },
3596
- decodeVertexBuffer: function(f, m, E, b, B) {
3597
- A(o, o.exports.meshopt_decodeVertexBuffer, f, m, E, b, o.exports[a[B]]);
3596
+ decodeVertexBuffer: function(f, m, I, b, B) {
3597
+ A(o, o.exports.meshopt_decodeVertexBuffer, f, m, I, b, o.exports[a[B]]);
3598
3598
  },
3599
- decodeIndexBuffer: function(f, m, E, b) {
3600
- A(o, o.exports.meshopt_decodeIndexBuffer, f, m, E, b);
3599
+ decodeIndexBuffer: function(f, m, I, b) {
3600
+ A(o, o.exports.meshopt_decodeIndexBuffer, f, m, I, b);
3601
3601
  },
3602
- decodeIndexSequence: function(f, m, E, b) {
3603
- A(o, o.exports.meshopt_decodeIndexSequence, f, m, E, b);
3602
+ decodeIndexSequence: function(f, m, I, b) {
3603
+ A(o, o.exports.meshopt_decodeIndexSequence, f, m, I, b);
3604
3604
  },
3605
- decodeGltfBuffer: function(f, m, E, b, B, Q) {
3606
- A(o, o.exports[l[B]], f, m, E, b, o.exports[a[Q]]);
3605
+ decodeGltfBuffer: function(f, m, I, b, B, y) {
3606
+ A(o, o.exports[l[B]], f, m, I, b, o.exports[a[y]]);
3607
3607
  },
3608
- decodeGltfBufferAsync: function(f, m, E, b, B) {
3609
- return h.length > 0 ? C(f, m, E, l[b], a[B]) : n.then(function() {
3610
- var Q = new Uint8Array(f * m);
3611
- return A(o, o.exports[l[b]], Q, f, m, E, o.exports[a[B]]), Q;
3608
+ decodeGltfBufferAsync: function(f, m, I, b, B) {
3609
+ return h.length > 0 ? C(f, m, I, l[b], a[B]) : n.then(function() {
3610
+ var y = new Uint8Array(f * m);
3611
+ return A(o, o.exports[l[b]], y, f, m, I, o.exports[a[B]]), y;
3612
3612
  });
3613
3613
  }
3614
3614
  };
3615
3615
  }();
3616
- function sn(c) {
3616
+ function An(c) {
3617
3617
  if (!c) return;
3618
3618
  (Array.isArray(c) ? c : [c]).forEach((t) => {
3619
3619
  t && (Object.keys(t).forEach((i) => {
@@ -3622,26 +3622,26 @@ function sn(c) {
3622
3622
  }), typeof t.dispose == "function" && t.dispose());
3623
3623
  });
3624
3624
  }
3625
- function nt(c) {
3625
+ function at(c) {
3626
3626
  !c || !c.traverse || c.traverse((e) => {
3627
- e.geometry && e.geometry.dispose(), e.material && sn(e.material);
3627
+ e.geometry && e.geometry.dispose(), e.material && An(e.material);
3628
3628
  });
3629
3629
  }
3630
- function on() {
3630
+ function ln() {
3631
3631
  u.Cache && typeof u.Cache.clear == "function" && u.Cache.clear();
3632
3632
  }
3633
- class V {
3633
+ class O {
3634
3634
  constructor(e = null) {
3635
- this.renderer = e, this.isIOSWebKit = V.isIOSWebKit(), this.platformKey = V.getPlatformKey(), this.loader = new ui(), this.dracoLoader = new Mo(), this.ktx2Loader = null, this.loadQueue = Promise.resolve(), this.activeIOSLoad = !1, this.dracoLoader.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"), this.isIOSWebKit && typeof this.dracoLoader.setWorkerLimit == "function" && this.dracoLoader.setWorkerLimit(1), this.loader.setDRACOLoader(this.dracoLoader), this.loader.setMeshoptDecoder(tn), this.cache = /* @__PURE__ */ new Map(), this.ktx2SetupComplete = !1, this.setupKTX2Loader();
3635
+ this.renderer = e, this.isIOSWebKit = O.isIOSWebKit(), this.platformKey = O.getPlatformKey(), this.loader = new xt(), this.dracoLoader = new To(), this.ktx2Loader = null, this.loadQueue = Promise.resolve(), this.activeIOSLoad = !1, this.dracoLoader.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"), this.isIOSWebKit && typeof this.dracoLoader.setWorkerLimit == "function" && this.dracoLoader.setWorkerLimit(1), this.loader.setDRACOLoader(this.dracoLoader), this.loader.setMeshoptDecoder(an), this.cache = /* @__PURE__ */ new Map(), this.ktx2SetupComplete = !1, this.setupKTX2Loader();
3636
3636
  }
3637
3637
  setupKTX2Loader() {
3638
3638
  const e = this.platformKey;
3639
3639
  try {
3640
- if (!V.sharedKTX2Loaders.has(e)) {
3640
+ if (!O.sharedKTX2Loaders.has(e)) {
3641
3641
  const t = new K();
3642
- t.setTranscoderPath("https://cdn.jsdelivr.net/npm/three@0.177.0/examples/jsm/libs/basis/"), this.isIOSWebKit && typeof t.setWorkerLimit == "function" && t.setWorkerLimit(1), V.sharedKTX2Loaders.set(e, t), V.sharedKTX2SetupComplete.set(e, !1);
3642
+ t.setTranscoderPath("https://cdn.jsdelivr.net/npm/three@0.177.0/examples/jsm/libs/basis/"), this.isIOSWebKit && typeof t.setWorkerLimit == "function" && t.setWorkerLimit(1), O.sharedKTX2Loaders.set(e, t), O.sharedKTX2SetupComplete.set(e, !1);
3643
3643
  }
3644
- this.ktx2Loader = V.sharedKTX2Loaders.get(e), this.loader.setKTX2Loader(this.ktx2Loader), this.ktx2SetupComplete = V.sharedKTX2SetupComplete.get(e) || !1, this.renderer && !this.ktx2SetupComplete && this.ensureKTX2Support();
3644
+ this.ktx2Loader = O.sharedKTX2Loaders.get(e), this.loader.setKTX2Loader(this.ktx2Loader), this.ktx2SetupComplete = O.sharedKTX2SetupComplete.get(e) || !1, this.renderer && !this.ktx2SetupComplete && this.ensureKTX2Support();
3645
3645
  } catch (t) {
3646
3646
  console.warn("KTX2 loader setup failed, falling back to standard textures:", t), this.ktx2Loader = null;
3647
3647
  }
@@ -3650,12 +3650,12 @@ class V {
3650
3650
  if (!this.ktx2Loader || !this.renderer)
3651
3651
  return;
3652
3652
  const e = this.platformKey;
3653
- if (V.sharedKTX2SetupComplete.get(e)) {
3653
+ if (O.sharedKTX2SetupComplete.get(e)) {
3654
3654
  this.ktx2SetupComplete = !0;
3655
3655
  return;
3656
3656
  }
3657
3657
  try {
3658
- this.ktx2Loader.detectSupport(this.renderer), V.sharedKTX2SetupComplete.set(e, !0), this.ktx2SetupComplete = !0;
3658
+ this.ktx2Loader.detectSupport(this.renderer), O.sharedKTX2SetupComplete.set(e, !0), this.ktx2SetupComplete = !0;
3659
3659
  } catch (t) {
3660
3660
  console.warn("Failed to set up KTX2 loader with renderer:", t);
3661
3661
  }
@@ -3726,7 +3726,9 @@ class V {
3726
3726
  flatShading: !1
3727
3727
  });
3728
3728
  r.map && (l.map = r.map), r.alphaMap && (l.alphaMap = r.alphaMap), r.aoMap && (l.aoMap = r.aoMap), typeof r.aoMapIntensity == "number" && (l.aoMapIntensity = r.aoMapIntensity), r.envMap && (l.envMap = r.envMap), typeof r.reflectivity == "number" && (l.reflectivity = r.reflectivity), typeof r.refractionRatio == "number" && (l.refractionRatio = r.refractionRatio), r.combine !== void 0 && (l.combine = r.combine), r.transparent !== void 0 && (l.transparent = r.transparent), typeof r.opacity == "number" && (l.opacity = r.opacity), r.normalMap && (l.normalMap = r.normalMap, l.normalScale = r.normalScale || new u.Vector2(1, 1)), l.map && i !== null && (l.map.anisotropy = i, l.map.needsUpdate = !0), l.normalMap && i !== null && (l.normalMap.anisotropy = i, l.normalMap.needsUpdate = !0), l.needsUpdate = !0, Array.isArray(o.material) ? o.material[A] = l : o.material = l, r !== l && typeof r?.dispose == "function" && r.dispose();
3729
- } else (r.type === "MeshStandardMaterial" || r.type === "MeshPhysicalMaterial") && (r.needsUpdate = !0);
3729
+ } else (r.type === "MeshStandardMaterial" || r.type === "MeshPhysicalMaterial") && (i !== null && ["map", "normalMap", "roughnessMap", "metalnessMap", "aoMap", "emissiveMap"].forEach((h) => {
3730
+ r[h] && (r[h].anisotropy = i, r[h].needsUpdate = !0);
3731
+ }), r.needsUpdate = !0);
3730
3732
  const a = Array.isArray(o.material) ? o.material[A] : o.material;
3731
3733
  a && a.needsUpdate !== void 0 && (a.needsUpdate = !0);
3732
3734
  }), o.geometry && (o.geometry.computeVertexNormals(), o.geometry.normalizeNormals(), n.some((A) => A.normalMap) && o.geometry.computeTangents());
@@ -3796,7 +3798,7 @@ class V {
3796
3798
  }
3797
3799
  releaseParserCaches(e) {
3798
3800
  const t = e?.parser;
3799
- t && (t.cache && typeof t.cache.removeAll == "function" && t.cache.removeAll(), t.associations && typeof t.associations.clear == "function" && t.associations.clear(), t.primitiveCache = {}, t.nodeCache = {}, t.meshCache = { refs: {}, uses: {} }, t.cameraCache = { refs: {}, uses: {} }, t.lightCache = { refs: {}, uses: {} }, t.sourceCache = {}, t.textureCache = {}, t.nodeNamesUsed = {}, t.json = null, t.extensions = null, t.plugins = null, t.options = null, t.textureLoader = null, e.parser = null, on());
3801
+ t && (t.cache && typeof t.cache.removeAll == "function" && t.cache.removeAll(), t.associations && typeof t.associations.clear == "function" && t.associations.clear(), t.primitiveCache = {}, t.nodeCache = {}, t.meshCache = { refs: {}, uses: {} }, t.cameraCache = { refs: {}, uses: {} }, t.lightCache = { refs: {}, uses: {} }, t.sourceCache = {}, t.textureCache = {}, t.nodeNamesUsed = {}, t.json = null, t.extensions = null, t.plugins = null, t.options = null, t.textureLoader = null, e.parser = null, ln());
3800
3802
  }
3801
3803
  dispose() {
3802
3804
  this.dracoLoader && this.dracoLoader.dispose(), this.cache.forEach((e) => {
@@ -3810,12 +3812,12 @@ class V {
3810
3812
  return !!(/iPhone|iPad|iPod/.test(t) || t === "MacIntel" && navigator.maxTouchPoints > 1 || /AppleWebKit/.test(e) && /Mobile/.test(e) && !/Chrome|CriOS|FxiOS/.test(e));
3811
3813
  }
3812
3814
  static getPlatformKey() {
3813
- return V.isIOSWebKit() ? "ios" : "default";
3815
+ return O.isIOSWebKit() ? "ios" : "default";
3814
3816
  }
3815
3817
  }
3816
- V.sharedKTX2Loaders = /* @__PURE__ */ new Map();
3817
- V.sharedKTX2SetupComplete = /* @__PURE__ */ new Map();
3818
- class Ee {
3818
+ O.sharedKTX2Loaders = /* @__PURE__ */ new Map();
3819
+ O.sharedKTX2SetupComplete = /* @__PURE__ */ new Map();
3820
+ class Be {
3819
3821
  /**
3820
3822
  * Constructs a new VR button.
3821
3823
  *
@@ -3869,7 +3871,7 @@ class Ee {
3869
3871
  }
3870
3872
  if ("xr" in navigator)
3871
3873
  return i.id = "VRButton", i.style.display = "none", A(i), navigator.xr.isSessionSupported("immersive-vr").then(function(a) {
3872
- a ? s() : n(), a && Ee.xrSessionIsGranted && i.click();
3874
+ a ? s() : n(), a && Be.xrSessionIsGranted && i.click();
3873
3875
  }).catch(r), i;
3874
3876
  {
3875
3877
  const a = document.createElement("a");
@@ -3885,14 +3887,14 @@ class Ee {
3885
3887
  if (typeof navigator < "u" && "xr" in navigator) {
3886
3888
  if (/WebXRViewer\//i.test(navigator.userAgent)) return;
3887
3889
  navigator.xr.addEventListener("sessiongranted", () => {
3888
- Ee.xrSessionIsGranted = !0;
3890
+ Be.xrSessionIsGranted = !0;
3889
3891
  });
3890
3892
  }
3891
3893
  }
3892
3894
  }
3893
- Ee.xrSessionIsGranted = !1;
3894
- Ee.registerSessionGrantedListener();
3895
- class nn {
3895
+ Be.xrSessionIsGranted = !1;
3896
+ Be.registerSessionGrantedListener();
3897
+ class cn {
3896
3898
  constructor(e, t, i, s = null) {
3897
3899
  this.renderer = e, this.camera = t, this.scene = i, this.container = s || document.body, this.isVRSupported = !1, this.isVRPresenting = !1, this.isQuest2 = !1, this.isQuest3 = !1, this.vrButton = null, this.onSessionStart = null, this.onSessionEnd = null;
3898
3900
  }
@@ -3924,14 +3926,9 @@ class nn {
3924
3926
  try {
3925
3927
  this.waitForVRCSS().then(() => {
3926
3928
  const e = {
3927
- optionalFeatures: [
3928
- "hand-tracking",
3929
- "local-floor",
3930
- "bounded-floor",
3931
- "layers"
3932
- ]
3929
+ optionalFeatures: this.getOptionalFeatures()
3933
3930
  };
3934
- this.vrButton = Ee.createButton(this.renderer, e), this.vrButton.innerHTML = '<span class="vr-icon">🥽</span>ENTER VR', this.vrButton.className = "vr-button--glass vr-button-available", this.vrButton.disabled = !1, this.vrButton.style.cssText = `
3931
+ this.vrButton = Be.createButton(this.renderer, e), this.vrButton.innerHTML = '<span class="vr-icon">🥽</span>ENTER VR', this.vrButton.className = "vr-button--glass vr-button-available", this.vrButton.disabled = !1, this.vrButton.style.cssText = `
3935
3932
  position: fixed !important;
3936
3933
  bottom: 80px !important;
3937
3934
  left: 50% !important;
@@ -3948,6 +3945,38 @@ class nn {
3948
3945
  console.error("❌ VR button creation failed:", e);
3949
3946
  }
3950
3947
  }
3948
+ getOptionalFeatures() {
3949
+ const e = ["hand-tracking", "local-floor"];
3950
+ try {
3951
+ this.supportsBoundedFloor() && e.push("bounded-floor");
3952
+ } catch (t) {
3953
+ console.warn("VR optional feature detection failed:", t);
3954
+ }
3955
+ return e;
3956
+ }
3957
+ supportsBoundedFloor() {
3958
+ if (typeof navigator > "u" || this.isPolyfilledXR())
3959
+ return !1;
3960
+ const e = navigator.xr;
3961
+ return e ? Array.isArray(e.supportedReferenceSpaceTypes) ? e.supportedReferenceSpaceTypes.includes("bounded-floor") : typeof window < "u" && typeof window.XRBoundedReferenceSpace < "u" : !1;
3962
+ }
3963
+ isPolyfilledXR() {
3964
+ if (typeof window < "u" && typeof window.WebXRPolyfill < "u")
3965
+ return !0;
3966
+ if (typeof navigator > "u" || !navigator.xr)
3967
+ return !1;
3968
+ const e = navigator.xr, t = e.constructor && e.constructor.name;
3969
+ if (t && t.toLowerCase().includes("polyfill"))
3970
+ return !0;
3971
+ try {
3972
+ const i = e.requestSession && e.requestSession.toString();
3973
+ if (typeof i == "string" && !i.includes("[native code]"))
3974
+ return !0;
3975
+ } catch {
3976
+ return !0;
3977
+ }
3978
+ return !1;
3979
+ }
3951
3980
  styleVRButton() {
3952
3981
  const e = () => {
3953
3982
  const t = document.querySelector("button.vr-button--glass") || document.querySelector("button") || this.vrButton;
@@ -4024,7 +4053,7 @@ class nn {
4024
4053
  this.vrButton && this.vrButton.parentNode && this.vrButton.parentNode.removeChild(this.vrButton), this.isQuest2 = !1, this.isQuest3 = !1, this.isVRSupported = !1, this.isVRPresenting = !1;
4025
4054
  }
4026
4055
  }
4027
- const L = {
4056
+ const T = {
4028
4057
  ComponentState: Object.freeze({
4029
4058
  DEFAULT: "default",
4030
4059
  TOUCHED: "touched",
@@ -4050,23 +4079,23 @@ const L = {
4050
4079
  VISIBILITY: "visibility"
4051
4080
  })
4052
4081
  };
4053
- async function Fi(c) {
4082
+ async function Ni(c) {
4054
4083
  const e = await fetch(c);
4055
4084
  if (e.ok)
4056
4085
  return e.json();
4057
4086
  throw new Error(e.statusText);
4058
4087
  }
4059
- async function rn(c) {
4088
+ async function hn(c) {
4060
4089
  if (!c)
4061
4090
  throw new Error("No basePath supplied");
4062
- return await Fi(`${c}/profilesList.json`);
4091
+ return await Ni(`${c}/profilesList.json`);
4063
4092
  }
4064
- async function an(c, e, t = null, i = !0) {
4093
+ async function dn(c, e, t = null, i = !0) {
4065
4094
  if (!c)
4066
4095
  throw new Error("No xrInputSource supplied");
4067
4096
  if (!e)
4068
4097
  throw new Error("No basePath supplied");
4069
- const s = await rn(e);
4098
+ const s = await hn(e);
4070
4099
  let o;
4071
4100
  if (c.profiles.some((A) => {
4072
4101
  const a = s[A];
@@ -4087,7 +4116,7 @@ async function an(c, e, t = null, i = !0) {
4087
4116
  deprecated: !!A.deprecated
4088
4117
  };
4089
4118
  }
4090
- const n = await Fi(o.profilePath);
4119
+ const n = await Ni(o.profilePath);
4091
4120
  let r;
4092
4121
  if (i) {
4093
4122
  let A;
@@ -4099,13 +4128,13 @@ async function an(c, e, t = null, i = !0) {
4099
4128
  }
4100
4129
  return { profile: n, assetPath: r };
4101
4130
  }
4102
- const An = {
4131
+ const gn = {
4103
4132
  xAxis: 0,
4104
4133
  yAxis: 0,
4105
4134
  button: 0,
4106
- state: L.ComponentState.DEFAULT
4135
+ state: T.ComponentState.DEFAULT
4107
4136
  };
4108
- function ln(c = 0, e = 0) {
4137
+ function un(c = 0, e = 0) {
4109
4138
  let t = c, i = e;
4110
4139
  if (Math.sqrt(c * c + e * e) > 1) {
4111
4140
  const n = Math.atan2(e, c);
@@ -4116,9 +4145,9 @@ function ln(c = 0, e = 0) {
4116
4145
  normalizedYAxis: i * 0.5 + 0.5
4117
4146
  };
4118
4147
  }
4119
- class cn {
4148
+ class pn {
4120
4149
  constructor(e) {
4121
- this.componentProperty = e.componentProperty, this.states = e.states, this.valueNodeName = e.valueNodeName, this.valueNodeProperty = e.valueNodeProperty, this.valueNodeProperty === L.VisualResponseProperty.TRANSFORM && (this.minNodeName = e.minNodeName, this.maxNodeName = e.maxNodeName), this.value = 0, this.updateFromComponent(An);
4150
+ this.componentProperty = e.componentProperty, this.states = e.states, this.valueNodeName = e.valueNodeName, this.valueNodeProperty = e.valueNodeProperty, this.valueNodeProperty === T.VisualResponseProperty.TRANSFORM && (this.minNodeName = e.minNodeName, this.maxNodeName = e.maxNodeName), this.value = 0, this.updateFromComponent(gn);
4122
4151
  }
4123
4152
  /**
4124
4153
  * Computes the visual response's interpolation weight based on component state
@@ -4134,26 +4163,26 @@ class cn {
4134
4163
  button: i,
4135
4164
  state: s
4136
4165
  }) {
4137
- const { normalizedXAxis: o, normalizedYAxis: n } = ln(e, t);
4166
+ const { normalizedXAxis: o, normalizedYAxis: n } = un(e, t);
4138
4167
  switch (this.componentProperty) {
4139
- case L.ComponentProperty.X_AXIS:
4168
+ case T.ComponentProperty.X_AXIS:
4140
4169
  this.value = this.states.includes(s) ? o : 0.5;
4141
4170
  break;
4142
- case L.ComponentProperty.Y_AXIS:
4171
+ case T.ComponentProperty.Y_AXIS:
4143
4172
  this.value = this.states.includes(s) ? n : 0.5;
4144
4173
  break;
4145
- case L.ComponentProperty.BUTTON:
4174
+ case T.ComponentProperty.BUTTON:
4146
4175
  this.value = this.states.includes(s) ? i : 0;
4147
4176
  break;
4148
- case L.ComponentProperty.STATE:
4149
- this.valueNodeProperty === L.VisualResponseProperty.VISIBILITY ? this.value = this.states.includes(s) : this.value = this.states.includes(s) ? 1 : 0;
4177
+ case T.ComponentProperty.STATE:
4178
+ this.valueNodeProperty === T.VisualResponseProperty.VISIBILITY ? this.value = this.states.includes(s) : this.value = this.states.includes(s) ? 1 : 0;
4150
4179
  break;
4151
4180
  default:
4152
4181
  throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);
4153
4182
  }
4154
4183
  }
4155
4184
  }
4156
- class hn {
4185
+ class fn {
4157
4186
  /**
4158
4187
  * @param {Object} componentId - Id of the component
4159
4188
  * @param {Object} componentDescription - Description of the component to be created
@@ -4162,10 +4191,10 @@ class hn {
4162
4191
  if (!e || !t || !t.visualResponses || !t.gamepadIndices || Object.keys(t.gamepadIndices).length === 0)
4163
4192
  throw new Error("Invalid arguments supplied");
4164
4193
  this.id = e, this.type = t.type, this.rootNodeName = t.rootNodeName, this.touchPointNodeName = t.touchPointNodeName, this.visualResponses = {}, Object.keys(t.visualResponses).forEach((i) => {
4165
- const s = new cn(t.visualResponses[i]);
4194
+ const s = new pn(t.visualResponses[i]);
4166
4195
  this.visualResponses[i] = s;
4167
4196
  }), this.gamepadIndices = Object.assign({}, t.gamepadIndices), this.values = {
4168
- state: L.ComponentState.DEFAULT,
4197
+ state: T.ComponentState.DEFAULT,
4169
4198
  button: this.gamepadIndices.button !== void 0 ? 0 : void 0,
4170
4199
  xAxis: this.gamepadIndices.xAxis !== void 0 ? 0 : void 0,
4171
4200
  yAxis: this.gamepadIndices.yAxis !== void 0 ? 0 : void 0
@@ -4179,16 +4208,16 @@ class hn {
4179
4208
  * @param {Object} gamepad - The gamepad object from which the component data should be polled
4180
4209
  */
4181
4210
  updateFromGamepad(e) {
4182
- if (this.values.state = L.ComponentState.DEFAULT, this.gamepadIndices.button !== void 0 && e.buttons.length > this.gamepadIndices.button) {
4211
+ if (this.values.state = T.ComponentState.DEFAULT, this.gamepadIndices.button !== void 0 && e.buttons.length > this.gamepadIndices.button) {
4183
4212
  const t = e.buttons[this.gamepadIndices.button];
4184
- this.values.button = t.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, t.pressed || this.values.button === 1 ? this.values.state = L.ComponentState.PRESSED : (t.touched || this.values.button > L.ButtonTouchThreshold) && (this.values.state = L.ComponentState.TOUCHED);
4213
+ this.values.button = t.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, t.pressed || this.values.button === 1 ? this.values.state = T.ComponentState.PRESSED : (t.touched || this.values.button > T.ButtonTouchThreshold) && (this.values.state = T.ComponentState.TOUCHED);
4185
4214
  }
4186
- this.gamepadIndices.xAxis !== void 0 && e.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = e.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state === L.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > L.AxisTouchThreshold && (this.values.state = L.ComponentState.TOUCHED)), this.gamepadIndices.yAxis !== void 0 && e.axes.length > this.gamepadIndices.yAxis && (this.values.yAxis = e.axes[this.gamepadIndices.yAxis], this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis, this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis, this.values.state === L.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > L.AxisTouchThreshold && (this.values.state = L.ComponentState.TOUCHED)), Object.values(this.visualResponses).forEach((t) => {
4215
+ this.gamepadIndices.xAxis !== void 0 && e.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = e.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state === T.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > T.AxisTouchThreshold && (this.values.state = T.ComponentState.TOUCHED)), this.gamepadIndices.yAxis !== void 0 && e.axes.length > this.gamepadIndices.yAxis && (this.values.yAxis = e.axes[this.gamepadIndices.yAxis], this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis, this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis, this.values.state === T.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > T.AxisTouchThreshold && (this.values.state = T.ComponentState.TOUCHED)), Object.values(this.visualResponses).forEach((t) => {
4187
4216
  t.updateFromComponent(this.values);
4188
4217
  });
4189
4218
  }
4190
4219
  }
4191
- class dn {
4220
+ class mn {
4192
4221
  /**
4193
4222
  * @param {Object} xrInputSource - The XRInputSource to build the MotionController around
4194
4223
  * @param {Object} profile - The best matched profile description for the supplied xrInputSource
@@ -4201,7 +4230,7 @@ class dn {
4201
4230
  throw new Error("No profile supplied");
4202
4231
  this.xrInputSource = e, this.assetUrl = i, this.id = t.profileId, this.layoutDescription = t.layouts[e.handedness], this.components = {}, Object.keys(this.layoutDescription.components).forEach((s) => {
4203
4232
  const o = this.layoutDescription.components[s];
4204
- this.components[s] = new hn(s, o);
4233
+ this.components[s] = new fn(s, o);
4205
4234
  }), this.updateFromGamepad();
4206
4235
  }
4207
4236
  get gripSpace() {
@@ -4228,8 +4257,8 @@ class dn {
4228
4257
  });
4229
4258
  }
4230
4259
  }
4231
- const gn = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles", un = "generic-trigger";
4232
- class pn extends Bt {
4260
+ const bn = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles", Cn = "generic-trigger";
4261
+ class En extends Oe {
4233
4262
  /**
4234
4263
  * Constructs a new XR controller model.
4235
4264
  */
@@ -4258,7 +4287,7 @@ class pn extends Bt {
4258
4287
  super.updateMatrixWorld(e), this.motionController && (this.motionController.updateFromGamepad(), Object.values(this.motionController.components).forEach((t) => {
4259
4288
  Object.values(t.visualResponses).forEach((i) => {
4260
4289
  const { valueNode: s, minNode: o, maxNode: n, value: r, valueNodeProperty: A } = i;
4261
- s && (A === L.VisualResponseProperty.VISIBILITY ? s.visible = r : A === L.VisualResponseProperty.TRANSFORM && (s.quaternion.slerpQuaternions(
4290
+ s && (A === T.VisualResponseProperty.VISIBILITY ? s.visible = r : A === T.VisualResponseProperty.TRANSFORM && (s.quaternion.slerpQuaternions(
4262
4291
  o.quaternion,
4263
4292
  n.quaternion,
4264
4293
  r
@@ -4271,18 +4300,18 @@ class pn extends Bt {
4271
4300
  }));
4272
4301
  }
4273
4302
  }
4274
- function fn(c, e) {
4303
+ function In(c, e) {
4275
4304
  Object.values(c.components).forEach((t) => {
4276
4305
  const { type: i, touchPointNodeName: s, visualResponses: o } = t;
4277
- if (i === L.ComponentType.TOUCHPAD)
4306
+ if (i === T.ComponentType.TOUCHPAD)
4278
4307
  if (t.touchPointNode = e.getObjectByName(s), t.touchPointNode) {
4279
- const n = new ys(1e-3), r = new fe({ color: 255 }), A = new Qt(n, r);
4308
+ const n = new mi(1e-3), r = new fe({ color: 255 }), A = new Qt(n, r);
4280
4309
  t.touchPointNode.add(A);
4281
4310
  } else
4282
4311
  console.warn(`Could not find touch dot, ${t.touchPointNodeName}, in touchpad component ${t.id}`);
4283
4312
  Object.values(o).forEach((n) => {
4284
4313
  const { valueNodeName: r, minNodeName: A, maxNodeName: a, valueNodeProperty: l } = n;
4285
- if (l === L.VisualResponseProperty.TRANSFORM) {
4314
+ if (l === T.VisualResponseProperty.TRANSFORM) {
4286
4315
  if (n.minNode = e.getObjectByName(A), n.maxNode = e.getObjectByName(a), !n.minNode) {
4287
4316
  console.warn(`Could not find ${A} in the model`);
4288
4317
  return;
@@ -4296,12 +4325,12 @@ function fn(c, e) {
4296
4325
  });
4297
4326
  });
4298
4327
  }
4299
- function Wt(c, e) {
4300
- fn(c.motionController, e), c.envMap && e.traverse((t) => {
4328
+ function Zt(c, e) {
4329
+ In(c.motionController, e), c.envMap && e.traverse((t) => {
4301
4330
  t.isMesh && (t.material.envMap = c.envMap, t.material.needsUpdate = !0);
4302
4331
  }), c.add(e);
4303
4332
  }
4304
- class mn {
4333
+ class Bn {
4305
4334
  /**
4306
4335
  * Constructs a new XR controller model factory.
4307
4336
  *
@@ -4309,7 +4338,7 @@ class mn {
4309
4338
  * @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
4310
4339
  */
4311
4340
  constructor(e = null, t = null) {
4312
- this.gltfLoader = e, this.path = gn, this._assetCache = {}, this.onLoad = t, this.gltfLoader || (this.gltfLoader = new ui());
4341
+ this.gltfLoader = e, this.path = bn, this._assetCache = {}, this.onLoad = t, this.gltfLoader || (this.gltfLoader = new xt());
4313
4342
  }
4314
4343
  /**
4315
4344
  * Sets the path to the model repository.
@@ -4327,26 +4356,26 @@ class mn {
4327
4356
  * @return {XRControllerModel} The XR controller model.
4328
4357
  */
4329
4358
  createControllerModel(e) {
4330
- const t = new pn();
4359
+ const t = new En();
4331
4360
  let i = null;
4332
4361
  return e.addEventListener("connected", (s) => {
4333
4362
  const o = s.data;
4334
- o.targetRayMode !== "tracked-pointer" || !o.gamepad || o.hand || an(o, this.path, un).then(({ profile: n, assetPath: r }) => {
4335
- t.motionController = new dn(
4363
+ o.targetRayMode !== "tracked-pointer" || !o.gamepad || o.hand || dn(o, this.path, Cn).then(({ profile: n, assetPath: r }) => {
4364
+ t.motionController = new mn(
4336
4365
  o,
4337
4366
  n,
4338
4367
  r
4339
4368
  );
4340
4369
  const A = this._assetCache[t.motionController.assetUrl];
4341
4370
  if (A)
4342
- i = A.scene.clone(), Wt(t, i), this.onLoad && this.onLoad(i);
4371
+ i = A.scene.clone(), Zt(t, i), this.onLoad && this.onLoad(i);
4343
4372
  else {
4344
4373
  if (!this.gltfLoader)
4345
4374
  throw new Error("GLTFLoader not set.");
4346
4375
  this.gltfLoader.setPath(""), this.gltfLoader.load(
4347
4376
  t.motionController.assetUrl,
4348
4377
  (a) => {
4349
- this._assetCache[t.motionController.assetUrl] = a, i = a.scene.clone(), Wt(t, i), this.onLoad && this.onLoad(i);
4378
+ this._assetCache[t.motionController.assetUrl] = a, i = a.scene.clone(), Zt(t, i), this.onLoad && this.onLoad(i);
4350
4379
  },
4351
4380
  null,
4352
4381
  () => {
@@ -4362,7 +4391,7 @@ class mn {
4362
4391
  }), t;
4363
4392
  }
4364
4393
  }
4365
- class bn {
4394
+ class yn {
4366
4395
  constructor(e, t) {
4367
4396
  this.renderer = e, this.camera = t, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this.buttonStates = /* @__PURE__ */ new Map(), this.inputDeadzone = 0.15, this.turnSmoothingFactor = 0.1, this.lastTurnInput = 0, this.onSelectStart = null, this.onSelectEnd = null, this.onSqueezeStart = null, this.onSqueezeEnd = null, this.onModeToggle = null, this.onMovementStart = null, this.onMovementStop = null, this.handsActive = !1, this.handStates = {
4368
4397
  left: { pinch: !1, fist: !1, direction: new u.Vector3() },
@@ -4420,7 +4449,7 @@ class bn {
4420
4449
  }
4421
4450
  }
4422
4451
  initControllers() {
4423
- const e = new mn();
4452
+ const e = new Bn();
4424
4453
  for (let t = 0; t < 2; t++) {
4425
4454
  const i = this.renderer.xr.getController(t), s = this.renderer.xr.getControllerGrip(t);
4426
4455
  s.add(e.createControllerModel(s)), this.camera.parent.add(i), this.camera.parent.add(s), this.controllers.push(i), this.controllerGrips.push(s);
@@ -4517,7 +4546,7 @@ class bn {
4517
4546
  }), this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this.buttonStates.clear();
4518
4547
  }
4519
4548
  }
4520
- class Cn {
4549
+ class wn {
4521
4550
  constructor(e, t) {
4522
4551
  this.scene = e, this.camera = t, this.teleportController = null, this.teleportMarker = null, this.teleportCurve = null, this.teleportFloor = null, this.validTeleportPosition = null, this.teleportThreshold = 0.7, this.teleportReleaseThreshold = 0.3, this.teleportPressed = !1, this.teleportMaxMagnitude = 0, this.teleportFloorHeight = null, this.teleportFloorMin = -10, this.teleportFloorMax = 10, this.lastSnapTurnTime = 0, this.onTeleport = null, this.onTeleportStart = null, this.onTeleportEnd = null;
4523
4552
  }
@@ -4623,44 +4652,44 @@ class Cn {
4623
4652
  const s = 3, o = 30, n = Math.min(this.teleportMaxMagnitude / this.teleportThreshold, 1), r = o - s, A = Math.pow(n, 0.7), a = s + r * A, l = [], h = 40, d = -9.8;
4624
4653
  let g = Math.sqrt(a * Math.abs(d) / 2);
4625
4654
  if (i.y > 0.3 ? g *= 1 - i.y * 0.5 : i.y < -0.5 && (g *= 1 + Math.abs(i.y) * 0.3), Math.sqrt(i.x * i.x + i.z * i.z) > 0.1) {
4626
- const y = Math.min(1, a / (g * 2));
4627
- g *= y;
4628
- }
4629
- const C = i.x * g, I = Math.max(i.y * g, g * 0.3), f = i.z * g, m = I / Math.abs(d), E = Math.max(m * 2.2, 1.5), b = this.teleportFloorHeight;
4630
- let B = null, Q = !1, w = e.y, T = 0;
4631
- const R = 8;
4632
- for (let y = 0; y <= h; y++) {
4633
- const v = y / h * E, M = new u.Vector3(
4655
+ const Q = Math.min(1, a / (g * 2));
4656
+ g *= Q;
4657
+ }
4658
+ const C = i.x * g, E = Math.max(i.y * g, g * 0.3), f = i.z * g, m = E / Math.abs(d), I = Math.max(m * 2.2, 1.5), b = this.teleportFloorHeight;
4659
+ let B = null, y = !1, w = e.y, L = 0;
4660
+ const D = 8;
4661
+ for (let Q = 0; Q <= h; Q++) {
4662
+ const v = Q / h * I, M = new u.Vector3(
4634
4663
  e.x + C * v,
4635
- e.y + I * v + 0.5 * d * v * v,
4664
+ e.y + E * v + 0.5 * d * v * v,
4636
4665
  e.z + f * v
4637
4666
  );
4638
- Math.abs(M.y - e.y) > R && (M.y = e.y + Math.sign(M.y - e.y) * R), !Q && M.y < w && (Q = !0, T = v), l.push(M);
4639
- const J = Q ? v - T : 0, W = Q && J > 0.1;
4667
+ Math.abs(M.y - e.y) > D && (M.y = e.y + Math.sign(M.y - e.y) * D), !y && M.y < w && (y = !0, L = v), l.push(M);
4668
+ const J = y ? v - L : 0, W = y && J > 0.1;
4640
4669
  if (!B && W && M.y <= b) {
4641
- if (y > 0) {
4642
- const q = l[y - 1], F = (b - q.y) / (M.y - q.y);
4670
+ if (Q > 0) {
4671
+ const q = l[Q - 1], F = (b - q.y) / (M.y - q.y);
4643
4672
  B = new u.Vector3().lerpVectors(q, M, F), B.y = b;
4644
4673
  } else
4645
4674
  B = M.clone(), B.y = b;
4646
- l[y] = B, l.length = y + 1;
4675
+ l[Q] = B, l.length = Q + 1;
4647
4676
  break;
4648
4677
  }
4649
4678
  if (w = M.y, Math.sqrt(
4650
4679
  Math.pow(M.x - e.x, 2) + Math.pow(M.z - e.z, 2)
4651
4680
  ) > o) {
4652
- W && (B = new u.Vector3(M.x, b, M.z), l[y] = B, l.length = y + 1);
4681
+ W && (B = new u.Vector3(M.x, b, M.z), l[Q] = B, l.length = Q + 1);
4653
4682
  break;
4654
4683
  }
4655
4684
  }
4656
4685
  if (!B && l.length > 0) {
4657
- let y = l[0], v = 0;
4686
+ let Q = l[0], v = 0;
4658
4687
  for (let M = 1; M < l.length; M++)
4659
- l[M].y < y.y && (y = l[M], v = M);
4660
- v > l.length / 3 && (B = new u.Vector3(y.x, b, y.z), l.length = v + 1, l[v] = B);
4688
+ l[M].y < Q.y && (Q = l[M], v = M);
4689
+ v > l.length / 3 && (B = new u.Vector3(Q.x, b, Q.z), l.length = v + 1, l[v] = B);
4661
4690
  }
4662
4691
  if (l.length > 1) {
4663
- const y = new u.CatmullRomCurve3(l), v = new u.TubeGeometry(y, 20, 0.03, 6, !1);
4692
+ const Q = new u.CatmullRomCurve3(l), v = new u.TubeGeometry(Q, 20, 0.03, 6, !1);
4664
4693
  this.teleportCurve.geometry && this.teleportCurve.geometry.dispose(), this.teleportCurve.geometry = v;
4665
4694
  }
4666
4695
  this.teleportMarker && B && (this.teleportMarker.position.copy(B), this.teleportMarker.visible = !0, this.teleportFloorHeight < -0.5 ? this.teleportMarker.material.color.setHex(8965375) : this.teleportFloorHeight > 0.5 ? this.teleportMarker.material.color.setHex(16777096) : this.teleportMarker.material.color.setHex(16777215));
@@ -4704,7 +4733,7 @@ class Cn {
4704
4733
  this.lastSnapTurnTime = 0;
4705
4734
  }
4706
4735
  }
4707
- class In {
4736
+ class Qn {
4708
4737
  constructor(e, t) {
4709
4738
  this.camera = e, this.renderer = t, this.MOVE_SPEED = 2, this.TURN_SPEED = 1.5, this.FLY_SPEED = 1, this.currentSpeed = 0, this.targetSpeed = 0, this.currentBoostLevel = 0, this.targetBoostLevel = 0, this.SPEED_RAMP_RATE = 3, this.BOOST_RAMP_RATE = 6, this.handMoveActive = !1, this.handMoveBoost = !1, this.handMoveDirection = new u.Vector3(), this.isMoving = !1, this.inputDeadzone = 0.15, this.turnSmoothingFactor = 0.1, this.lastTurnInput = 0, this.comfortSettings = {
4710
4739
  locomotionMode: "smooth",
@@ -4769,28 +4798,28 @@ class In {
4769
4798
  continue;
4770
4799
  const g = d.gamepad, C = d.handedness === "left" ? t.controller1 : t.controller2;
4771
4800
  if (!C) continue;
4772
- const I = g.axes[2] || 0, f = g.axes[3] || 0;
4801
+ const E = g.axes[2] || 0, f = g.axes[3] || 0;
4773
4802
  if (d.handedness === "left") {
4774
- const m = g.buttons[1], E = m && m.pressed ? 3 : 1, b = this.comfortSettings.reducedMotion ? this.comfortSettings.comfortSpeed : 1;
4803
+ const m = g.buttons[1], I = m && m.pressed ? 3 : 1, b = this.comfortSettings.reducedMotion ? this.comfortSettings.comfortSpeed : 1;
4775
4804
  if (m && m.pressed && (o = !0), this.comfortSettings.locomotionMode === "teleport" && this.teleportSystem) {
4776
- this.teleportSystem.processTeleportation(C, I, f);
4805
+ this.teleportSystem.processTeleportation(C, E, f);
4777
4806
  continue;
4778
4807
  } else {
4779
4808
  const B = new u.Vector3();
4780
4809
  this.camera.getWorldDirection(B), B.y = 0, B.normalize();
4781
- const Q = new u.Vector3().crossVectors(B, this.camera.up).normalize();
4810
+ const y = new u.Vector3().crossVectors(B, this.camera.up).normalize();
4782
4811
  if (Math.abs(f) > 0.1) {
4783
- const w = this.MOVE_SPEED * E * b * this.currentSpeed * e;
4812
+ const w = this.MOVE_SPEED * I * b * this.currentSpeed * e;
4784
4813
  this.camera.parent.position.addScaledVector(B, -f * w), s = !0;
4785
4814
  }
4786
- if (Math.abs(I) > 0.1) {
4787
- const w = this.MOVE_SPEED * E * b * this.currentSpeed * e;
4788
- this.camera.parent.position.addScaledVector(Q, I * w), s = !0;
4815
+ if (Math.abs(E) > 0.1) {
4816
+ const w = this.MOVE_SPEED * I * b * this.currentSpeed * e;
4817
+ this.camera.parent.position.addScaledVector(y, E * w), s = !0;
4789
4818
  }
4790
4819
  }
4791
4820
  }
4792
4821
  if (d.handedness === "right") {
4793
- const m = g.buttons[1], E = m && m.pressed ? 3 : 1, b = this.comfortSettings.reducedMotion ? this.comfortSettings.comfortSpeed : 1;
4822
+ const m = g.buttons[1], I = m && m.pressed ? 3 : 1, b = this.comfortSettings.reducedMotion ? this.comfortSettings.comfortSpeed : 1;
4794
4823
  if (m && m.pressed && Math.abs(f) > 0.1 && (o = !0), this.teleportSystem && this.teleportSystem.teleportPressed && this.teleportSystem.teleportCurve && this.teleportSystem.teleportCurve.visible) {
4795
4824
  if (Math.abs(f) > 0.1) {
4796
4825
  const B = 4 * e;
@@ -4798,17 +4827,17 @@ class In {
4798
4827
  }
4799
4828
  } else {
4800
4829
  if (this.comfortSettings.turningMode === "snap" && this.teleportSystem)
4801
- this.teleportSystem.processSnapTurn(I, this.comfortSettings.snapTurnAngle);
4802
- else if (Math.abs(I) > this.inputDeadzone) {
4803
- const B = this.lastTurnInput * this.turnSmoothingFactor + I * (1 - this.turnSmoothingFactor);
4830
+ this.teleportSystem.processSnapTurn(E, this.comfortSettings.snapTurnAngle);
4831
+ else if (Math.abs(E) > this.inputDeadzone) {
4832
+ const B = this.lastTurnInput * this.turnSmoothingFactor + E * (1 - this.turnSmoothingFactor);
4804
4833
  if (this.lastTurnInput = B, Math.abs(B) > this.inputDeadzone) {
4805
- const Q = this.comfortSettings.reducedMotion ? this.TURN_SPEED * 0.5 : this.TURN_SPEED, w = B * Q * Math.min(e, 1 / 30);
4834
+ const y = this.comfortSettings.reducedMotion ? this.TURN_SPEED * 0.5 : this.TURN_SPEED, w = B * y * Math.min(e, 1 / 30);
4806
4835
  this.camera.parent.rotation.y -= w, this.camera.parent.rotation.y = this.normalizeAngle(this.camera.parent.rotation.y);
4807
4836
  }
4808
4837
  } else
4809
4838
  this.lastTurnInput *= 0.9;
4810
4839
  if (Math.abs(f) > 0.1) {
4811
- const B = this.FLY_SPEED * E * b * this.currentSpeed * e;
4840
+ const B = this.FLY_SPEED * I * b * this.currentSpeed * e;
4812
4841
  this.camera.parent.position.y -= f * B, s = !0;
4813
4842
  }
4814
4843
  }
@@ -4891,7 +4920,7 @@ class In {
4891
4920
  };
4892
4921
  }
4893
4922
  }
4894
- class En {
4923
+ class Sn {
4895
4924
  constructor() {
4896
4925
  this.soundEnabled = !1, this.audioContext = null, this._basePath = "./sound/", this.dpvSound = null, this.dpvHighSound = null, this.ambienceSound = null, this.currentMovementSound = null, this.currentBoostSound = null, this.currentAmbienceSound = null, this.baseGainNode = null, this.boostGainNode = null, this.ambienceGainNode = null, this.baseVolumeMultiplier = 1.52, this.boostVolumeMultiplier = 1.01, this.ambienceVolume = 0.1;
4897
4926
  }
@@ -5026,7 +5055,7 @@ class En {
5026
5055
  this.dpvSound = null, this.dpvHighSound = null, this.ambienceSound = null, this.currentMovementSound = null, this.currentBoostSound = null, this.currentAmbienceSound = null, this.baseGainNode = null, this.boostGainNode = null, this.ambienceGainNode = null, this.soundEnabled = !1;
5027
5056
  }
5028
5057
  }
5029
- class Bn {
5058
+ class Mn {
5030
5059
  /**
5031
5060
  * Creates a new VRManager instance
5032
5061
  *
@@ -5037,7 +5066,7 @@ class Bn {
5037
5066
  * @param {boolean} [enableAudio=false] - Enable VR audio system
5038
5067
  */
5039
5068
  constructor(e, t, i, s = "./sound/", o = !1, n = null) {
5040
- this.renderer = e, this.camera = t, this.scene = i, this.audioPath = s, this.enableAudio = o, this.container = n, this.vrCore = new nn(e, t, i, n), this.vrControllers = new bn(e, t), this.vrTeleport = new Cn(i, t), this.vrLocomotion = new In(t, e), this.vrAudio = this.enableAudio ? new En() : null, this.isVRSupported = !1, this.isVRPresenting = !1, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this._preVRCameraState = {
5069
+ this.renderer = e, this.camera = t, this.scene = i, this.audioPath = s, this.enableAudio = o, this.container = n, this.vrCore = new cn(e, t, i, n), this.vrControllers = new yn(e, t), this.vrTeleport = new wn(i, t), this.vrLocomotion = new Qn(t, e), this.vrAudio = this.enableAudio ? new Sn() : null, this.isVRSupported = !1, this.isVRPresenting = !1, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this._preVRCameraState = {
5041
5070
  target: null,
5042
5071
  position: null,
5043
5072
  zoom: null,
@@ -5261,7 +5290,583 @@ class Bn {
5261
5290
  return this.vrLocomotion.normalizeAngle(e);
5262
5291
  }
5263
5292
  }
5264
- class Xt {
5293
+ class xn {
5294
+ /**
5295
+ * Constructs a new AR button.
5296
+ *
5297
+ * @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
5298
+ * @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
5299
+ * @return {HTMLElement} The button or an error message if `immersive-ar` isn't supported.
5300
+ */
5301
+ static createButton(e, t = {}) {
5302
+ const i = document.createElement("button");
5303
+ function s() {
5304
+ if (t.domOverlay === void 0) {
5305
+ const d = document.createElement("div");
5306
+ d.style.display = "none", document.body.appendChild(d);
5307
+ const g = document.createElementNS("http://www.w3.org/2000/svg", "svg");
5308
+ g.setAttribute("width", 38), g.setAttribute("height", 38), g.style.position = "absolute", g.style.right = "20px", g.style.top = "20px", g.addEventListener("click", function() {
5309
+ a.end();
5310
+ }), d.appendChild(g);
5311
+ const p = document.createElementNS("http://www.w3.org/2000/svg", "path");
5312
+ p.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28"), p.setAttribute("stroke", "#fff"), p.setAttribute("stroke-width", 2), g.appendChild(p), t.optionalFeatures === void 0 && (t.optionalFeatures = []), t.optionalFeatures.push("dom-overlay"), t.domOverlay = { root: d };
5313
+ }
5314
+ let a = null;
5315
+ async function l(d) {
5316
+ d.addEventListener("end", h), e.xr.setReferenceSpaceType("local"), await e.xr.setSession(d), i.textContent = "STOP AR", t.domOverlay.root.style.display = "", a = d;
5317
+ }
5318
+ function h() {
5319
+ a.removeEventListener("end", h), i.textContent = "START AR", t.domOverlay.root.style.display = "none", a = null;
5320
+ }
5321
+ i.style.display = "", i.style.cursor = "pointer", i.style.left = "calc(50% - 50px)", i.style.width = "100px", i.textContent = "START AR", i.onmouseenter = function() {
5322
+ i.style.opacity = "1.0";
5323
+ }, i.onmouseleave = function() {
5324
+ i.style.opacity = "0.5";
5325
+ }, i.onclick = function() {
5326
+ a === null ? navigator.xr.requestSession("immersive-ar", t).then(l) : (a.end(), navigator.xr.offerSession !== void 0 && navigator.xr.offerSession("immersive-ar", t).then(l).catch((d) => {
5327
+ console.warn(d);
5328
+ }));
5329
+ }, navigator.xr.offerSession !== void 0 && navigator.xr.offerSession("immersive-ar", t).then(l).catch((d) => {
5330
+ console.warn(d);
5331
+ });
5332
+ }
5333
+ function o() {
5334
+ i.style.display = "", i.style.cursor = "auto", i.style.left = "calc(50% - 75px)", i.style.width = "150px", i.onmouseenter = null, i.onmouseleave = null, i.onclick = null;
5335
+ }
5336
+ function n() {
5337
+ o(), i.textContent = "AR NOT SUPPORTED";
5338
+ }
5339
+ function r(a) {
5340
+ o(), console.warn("Exception when trying to call xr.isSessionSupported", a), i.textContent = "AR NOT ALLOWED";
5341
+ }
5342
+ function A(a) {
5343
+ a.style.position = "absolute", a.style.bottom = "20px", a.style.padding = "12px 6px", a.style.border = "1px solid #fff", a.style.borderRadius = "4px", a.style.background = "rgba(0,0,0,0.1)", a.style.color = "#fff", a.style.font = "normal 13px sans-serif", a.style.textAlign = "center", a.style.opacity = "0.5", a.style.outline = "none", a.style.zIndex = "999";
5344
+ }
5345
+ if ("xr" in navigator)
5346
+ return i.id = "ARButton", i.style.display = "none", A(i), navigator.xr.isSessionSupported("immersive-ar").then(function(a) {
5347
+ a ? s() : n();
5348
+ }).catch(r), i;
5349
+ {
5350
+ const a = document.createElement("a");
5351
+ return window.isSecureContext === !1 ? (a.href = document.location.href.replace(/^http:/, "https:"), a.innerHTML = "WEBXR NEEDS HTTPS") : (a.href = "https://immersiveweb.dev/", a.innerHTML = "WEBXR NOT AVAILABLE"), a.style.left = "calc(50% - 90px)", a.style.width = "180px", a.style.textDecoration = "none", A(a), a;
5352
+ }
5353
+ }
5354
+ }
5355
+ class vn {
5356
+ constructor(e, t, i, s = null) {
5357
+ this.renderer = e, this.camera = t, this.scene = i, this.container = s || document.body, this.isARSupported = !1, this.isARPresenting = !1, this.isQuest2 = !1, this.isQuest3 = !1, this.arButton = null, this.buttonObserver = null, this.onSessionStart = null, this.onSessionEnd = null;
5358
+ }
5359
+ init() {
5360
+ this.renderer.xr.enabled = !0, this.removeExistingARButtons(), this.checkARSupported().then(() => {
5361
+ this.isARSupported && (document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", () => {
5362
+ this.createARButton();
5363
+ }) : this.createARButton());
5364
+ }), this.setupSessionListeners(), "xr" in navigator ? navigator.xr.isSessionSupported("immersive-ar").then((e) => {
5365
+ e || this.startARButtonMonitoring();
5366
+ }).catch(() => {
5367
+ this.startARButtonMonitoring();
5368
+ }) : this.startARButtonMonitoring();
5369
+ }
5370
+ checkARSupported() {
5371
+ return new Promise((e) => {
5372
+ try {
5373
+ "xr" in navigator ? navigator.xr.isSessionSupported("immersive-ar").then((t) => {
5374
+ this.isARSupported = t, e();
5375
+ }).catch(() => {
5376
+ this.isARSupported = !1, e();
5377
+ }) : (this.isARSupported = !1, e());
5378
+ } catch {
5379
+ this.isARSupported = !1, e();
5380
+ }
5381
+ });
5382
+ }
5383
+ createARButton() {
5384
+ this.waitForARCSS().then(() => {
5385
+ const e = {
5386
+ requiredFeatures: ["local"],
5387
+ optionalFeatures: this.getOptionalFeatures()
5388
+ };
5389
+ this.arButton = xn.createButton(this.renderer, e), this.arButton.innerHTML = '<span class="ar-icon">👁️</span>ENTER AR', this.arButton.className = "ar-button--glass ar-button-available", this.arButton.disabled = !1, this.arButton.style.cssText = `
5390
+ position: fixed !important;
5391
+ bottom: 140px !important;
5392
+ left: 50% !important;
5393
+ transform: translateX(-50%) !important;
5394
+ z-index: 2147483647 !important;
5395
+ display: flex !important;
5396
+ visibility: visible !important;
5397
+ opacity: 1 !important;
5398
+ pointer-events: auto !important;
5399
+ cursor: pointer !important;
5400
+ `, this.container.appendChild(this.arButton), this.styleARButton();
5401
+ });
5402
+ }
5403
+ getOptionalFeatures() {
5404
+ return ["hand-tracking"];
5405
+ }
5406
+ styleARButton() {
5407
+ const e = () => {
5408
+ const t = document.querySelector("button.ar-button--glass") || this.arButton;
5409
+ return t ? (t.style.display = "flex", t.style.visibility = "visible", t.style.opacity = "1", t.innerHTML = '<span class="ar-icon">👁️</span>ENTER AR', t.classList.contains("ar-button--glass") || t.classList.add("ar-button--glass"), t.disabled = !1, t.classList.remove("ar-generic-disabled"), !0) : !1;
5410
+ };
5411
+ e() || (setTimeout(e, 100), setTimeout(e, 300), setTimeout(e, 500));
5412
+ }
5413
+ setupSessionListeners() {
5414
+ this.renderer.xr.addEventListener("sessionstart", () => {
5415
+ this.isARPresenting = !0;
5416
+ const e = this.detectQuestDevice();
5417
+ this.applyQuestOptimizations(e), this.onSessionStart && this.onSessionStart();
5418
+ }), this.renderer.xr.addEventListener("sessionend", () => {
5419
+ this.isARPresenting = !1, this.onSessionEnd && this.onSessionEnd();
5420
+ });
5421
+ }
5422
+ detectQuestDevice() {
5423
+ try {
5424
+ const e = navigator.userAgent.toLowerCase();
5425
+ return e.includes("quest 2") || e.includes("oculus quest 2") || e.includes("oculus") && e.includes("android") && !e.includes("quest 3") ? (this.isQuest2 = !0, "quest2") : e.includes("quest 3") || e.includes("oculus quest 3") || e.includes("meta quest 3") ? (this.isQuest3 = !0, "quest3") : "unknown";
5426
+ } catch {
5427
+ return "unknown";
5428
+ }
5429
+ }
5430
+ applyQuestOptimizations(e) {
5431
+ (e === "quest2" || e === "quest3") && (this.camera.far = 2e3, this.camera.updateProjectionMatrix());
5432
+ }
5433
+ async waitForARCSS() {
5434
+ return new Promise((e) => {
5435
+ const t = () => {
5436
+ const i = document.createElement("div");
5437
+ i.className = "ar-mode-active", i.style.display = "none", this.container.appendChild(i);
5438
+ const s = window.getComputedStyle(i), o = s.getPropertyValue("--ar-css-loaded") === "true" || s.opacity === "0.998";
5439
+ this.container.removeChild(i), o ? e() : setTimeout(t, 50);
5440
+ };
5441
+ setTimeout(t, 100);
5442
+ });
5443
+ }
5444
+ removeExistingARButtons() {
5445
+ document.querySelectorAll('button.legacy-ar-button, a[href="#AR"]').forEach((t) => {
5446
+ t.parentNode && t.parentNode.removeChild(t);
5447
+ });
5448
+ }
5449
+ startARButtonMonitoring() {
5450
+ this.buttonObserver || (this.buttonObserver = new MutationObserver((e) => {
5451
+ e.forEach((t) => {
5452
+ t.addedNodes.forEach((i) => {
5453
+ if (i.nodeType === Node.ELEMENT_NODE) {
5454
+ const s = i.querySelectorAll ? i.querySelectorAll('button.legacy-ar-button, a[href="#AR"]') : [];
5455
+ if (s.length > 0 || i.tagName === "BUTTON" && i.classList.contains("legacy-ar-button")) {
5456
+ const o = s.length > 0 ? s[0] : i;
5457
+ o.style.display = "none";
5458
+ }
5459
+ }
5460
+ });
5461
+ });
5462
+ }), this.buttonObserver.observe(document.body, { childList: !0, subtree: !0 }));
5463
+ }
5464
+ getARStatus() {
5465
+ return {
5466
+ supported: this.isARSupported,
5467
+ presenting: this.isARPresenting,
5468
+ isQuest2: this.isQuest2,
5469
+ isQuest3: this.isQuest3
5470
+ };
5471
+ }
5472
+ dispose() {
5473
+ this.buttonObserver && (this.buttonObserver.disconnect(), this.buttonObserver = null), this.arButton && this.arButton.parentNode && this.arButton.parentNode.removeChild(this.arButton), this.isQuest2 = !1, this.isQuest3 = !1, this.isARSupported = !1, this.isARPresenting = !1;
5474
+ }
5475
+ }
5476
+ const $t = new Ie(), ei = new R();
5477
+ class ti {
5478
+ /**
5479
+ * Constructs a new XR hand primitive model.
5480
+ *
5481
+ * @param {XRHandModel} handModel - The hand model.
5482
+ * @param {Group} controller - The WebXR controller.
5483
+ * @param {string} path - The model path.
5484
+ * @param {XRHandedness} handedness - The handedness of the XR input source.
5485
+ * @param {XRHandPrimitiveModel~Options} options - The model options.
5486
+ */
5487
+ constructor(e, t, i, s, o) {
5488
+ this.controller = t, this.handModel = e, this.envMap = null;
5489
+ let n;
5490
+ !o || !o.primitive || o.primitive === "sphere" ? n = new mi(1, 10, 10) : o.primitive === "box" && (n = new vs(1, 1, 1));
5491
+ const r = new wt();
5492
+ this.handMesh = new ci(n, r, 30), this.handMesh.frustumCulled = !1, this.handMesh.instanceMatrix.setUsage(Rs), this.handMesh.castShadow = !0, this.handMesh.receiveShadow = !0, this.handModel.add(this.handMesh), this.joints = [
5493
+ "wrist",
5494
+ "thumb-metacarpal",
5495
+ "thumb-phalanx-proximal",
5496
+ "thumb-phalanx-distal",
5497
+ "thumb-tip",
5498
+ "index-finger-metacarpal",
5499
+ "index-finger-phalanx-proximal",
5500
+ "index-finger-phalanx-intermediate",
5501
+ "index-finger-phalanx-distal",
5502
+ "index-finger-tip",
5503
+ "middle-finger-metacarpal",
5504
+ "middle-finger-phalanx-proximal",
5505
+ "middle-finger-phalanx-intermediate",
5506
+ "middle-finger-phalanx-distal",
5507
+ "middle-finger-tip",
5508
+ "ring-finger-metacarpal",
5509
+ "ring-finger-phalanx-proximal",
5510
+ "ring-finger-phalanx-intermediate",
5511
+ "ring-finger-phalanx-distal",
5512
+ "ring-finger-tip",
5513
+ "pinky-finger-metacarpal",
5514
+ "pinky-finger-phalanx-proximal",
5515
+ "pinky-finger-phalanx-intermediate",
5516
+ "pinky-finger-phalanx-distal",
5517
+ "pinky-finger-tip"
5518
+ ];
5519
+ }
5520
+ /**
5521
+ * Updates the mesh based on the tracked XR joints data.
5522
+ */
5523
+ updateMesh() {
5524
+ const t = this.controller.joints;
5525
+ let i = 0;
5526
+ for (let s = 0; s < this.joints.length; s++) {
5527
+ const o = t[this.joints[s]];
5528
+ o.visible && (ei.setScalar(o.jointRadius || 8e-3), $t.compose(o.position, o.quaternion, ei), this.handMesh.setMatrixAt(s, $t), i++);
5529
+ }
5530
+ this.handMesh.count = i, this.handMesh.instanceMatrix.needsUpdate = !0;
5531
+ }
5532
+ }
5533
+ const Rn = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/";
5534
+ class Dn {
5535
+ /**
5536
+ * Constructs a new XR hand mesh model.
5537
+ *
5538
+ * @param {XRHandModel} handModel - The hand model.
5539
+ * @param {Group} controller - The WebXR controller.
5540
+ * @param {?string} path - The model path.
5541
+ * @param {XRHandedness} handedness - The handedness of the XR input source.
5542
+ * @param {?Loader} [loader=null] - The loader. If not provided, an instance of `GLTFLoader` will be used to load models.
5543
+ * @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
5544
+ */
5545
+ constructor(e, t, i, s, o = null, n = null) {
5546
+ this.controller = t, this.handModel = e, this.bones = [], o === null && (o = new xt(), o.setPath(i || Rn)), o.load(`${s}.glb`, (r) => {
5547
+ const A = r.scene.children[0];
5548
+ this.handModel.add(A);
5549
+ const a = A.getObjectByProperty("type", "SkinnedMesh");
5550
+ a.frustumCulled = !1, a.castShadow = !0, a.receiveShadow = !0, [
5551
+ "wrist",
5552
+ "thumb-metacarpal",
5553
+ "thumb-phalanx-proximal",
5554
+ "thumb-phalanx-distal",
5555
+ "thumb-tip",
5556
+ "index-finger-metacarpal",
5557
+ "index-finger-phalanx-proximal",
5558
+ "index-finger-phalanx-intermediate",
5559
+ "index-finger-phalanx-distal",
5560
+ "index-finger-tip",
5561
+ "middle-finger-metacarpal",
5562
+ "middle-finger-phalanx-proximal",
5563
+ "middle-finger-phalanx-intermediate",
5564
+ "middle-finger-phalanx-distal",
5565
+ "middle-finger-tip",
5566
+ "ring-finger-metacarpal",
5567
+ "ring-finger-phalanx-proximal",
5568
+ "ring-finger-phalanx-intermediate",
5569
+ "ring-finger-phalanx-distal",
5570
+ "ring-finger-tip",
5571
+ "pinky-finger-metacarpal",
5572
+ "pinky-finger-phalanx-proximal",
5573
+ "pinky-finger-phalanx-intermediate",
5574
+ "pinky-finger-phalanx-distal",
5575
+ "pinky-finger-tip"
5576
+ ].forEach((h) => {
5577
+ const d = A.getObjectByName(h);
5578
+ d !== void 0 ? d.jointName = h : console.warn(`Couldn't find ${h} in ${s} hand mesh`), this.bones.push(d);
5579
+ }), n && n(A);
5580
+ });
5581
+ }
5582
+ /**
5583
+ * Updates the mesh based on the tracked XR joints data.
5584
+ */
5585
+ updateMesh() {
5586
+ const e = this.controller.joints;
5587
+ for (let t = 0; t < this.bones.length; t++) {
5588
+ const i = this.bones[t];
5589
+ if (i) {
5590
+ const s = e[i.jointName];
5591
+ if (s.visible) {
5592
+ const o = s.position;
5593
+ i.position.copy(o), i.quaternion.copy(s.quaternion);
5594
+ }
5595
+ }
5596
+ }
5597
+ }
5598
+ }
5599
+ class Tn extends Oe {
5600
+ /**
5601
+ * Constructs a new XR hand model.
5602
+ *
5603
+ * @param {Group} controller - The hand controller.
5604
+ */
5605
+ constructor(e) {
5606
+ super(), this.controller = e, this.motionController = null, this.envMap = null, this.mesh = null;
5607
+ }
5608
+ /**
5609
+ * Overwritten with a custom implementation. Makes sure the motion controller updates the mesh.
5610
+ *
5611
+ * @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
5612
+ * when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
5613
+ */
5614
+ updateMatrixWorld(e) {
5615
+ super.updateMatrixWorld(e), this.motionController && this.motionController.updateMesh();
5616
+ }
5617
+ }
5618
+ class Ln {
5619
+ /**
5620
+ * Constructs a new XR hand model factory.
5621
+ *
5622
+ * @param {?GLTFLoader} [gltfLoader=null] - A glTF loader that is used to load hand models.
5623
+ * @param {?Function} [onLoad=null] - A callback that is executed when a hand model has been loaded.
5624
+ */
5625
+ constructor(e = null, t = null) {
5626
+ this.gltfLoader = e, this.path = null, this.onLoad = t;
5627
+ }
5628
+ /**
5629
+ * Sets the path to the hand model repository.
5630
+ *
5631
+ * @param {string} path - The path to set.
5632
+ * @return {XRHandModelFactory} A reference to this instance.
5633
+ */
5634
+ setPath(e) {
5635
+ return this.path = e, this;
5636
+ }
5637
+ /**
5638
+ * Creates a controller model for the given WebXR hand controller.
5639
+ *
5640
+ * @param {Group} controller - The hand controller.
5641
+ * @param {('spheres'|'boxes'|'mesh')} [profile] - The model profile that defines the model type.
5642
+ * @return {XRHandModel} The XR hand model.
5643
+ */
5644
+ createHandModel(e, t) {
5645
+ const i = new Tn(e);
5646
+ return e.addEventListener("connected", (s) => {
5647
+ const o = s.data;
5648
+ o.hand && !i.motionController && (i.xrInputSource = o, t === void 0 || t === "spheres" ? i.motionController = new ti(i, e, this.path, o.handedness, { primitive: "sphere" }) : t === "boxes" ? i.motionController = new ti(i, e, this.path, o.handedness, { primitive: "box" }) : t === "mesh" && (i.motionController = new Dn(i, e, this.path, o.handedness, this.gltfLoader, this.onLoad))), e.visible = !0;
5649
+ }), e.addEventListener("disconnected", () => {
5650
+ e.visible = !1;
5651
+ }), i;
5652
+ }
5653
+ }
5654
+ class Fn {
5655
+ constructor(e) {
5656
+ this.renderer = e, this.handModelFactory = new Ln(), this.hand1 = null, this.hand2 = null, this.interactionEnabled = !0, this.dragging = !1, this.scaling = !1, this.rotating = !1, this.dragStartPos = new u.Vector3(), this.scaleStartDistance = 0, this.rotateStartAngle = 0, this.pinchIntent = {
5657
+ hand1Start: 0,
5658
+ hand2Start: 0,
5659
+ delay: 100
5660
+ }, this.inertiaActive = !1, this.posVelocity = new u.Vector3(), this.rotVelocity = 0, this.scaleVelocity = 0, this.POSITION_DAMPING = 100, this.ROTATION_DAMPING = 8, this.SCALE_DAMPING = 8, this.MAX_ROT_VELOCITY = Math.PI, this.MAX_SCALE_VELOCITY = 0.5, this.MIN_SCALE = 0.01, this.MAX_SCALE = 1, this.VELOCITY_DEAD_ZONE = 1e-3, this.DISTANCE_GAIN_THRESHOLD = 5, this.MAX_DISTANCE_GAIN = 3, this.MAX_DELTA_PER_FRAME = 0.5, this.VELOCITY_SMOOTHING = 0.3, this.tempVec1 = new u.Vector3(), this.tempVec2 = new u.Vector3(), this.onGestureStart = null, this.onGestureEnd = null;
5661
+ }
5662
+ init(e) {
5663
+ this.hand1 = this.setupHand(e, 0, "hand1Start"), this.hand2 = this.setupHand(e, 1, "hand2Start");
5664
+ }
5665
+ setupHand(e, t, i) {
5666
+ const s = this.renderer.xr.getHand(t);
5667
+ s.userData.pinch = !1, s.addEventListener("pinchstart", () => {
5668
+ s.userData.pinch = !0, this.pinchIntent[i] = performance.now();
5669
+ }), s.addEventListener("pinchend", () => {
5670
+ s.userData.pinch = !1, this.onPinchEnd();
5671
+ });
5672
+ const o = this.handModelFactory.createHandModel(s, "mesh");
5673
+ return s.add(o), e.add(s), o.addEventListener("connected", () => {
5674
+ this.styleHandModel(o, 16777215, 0.5);
5675
+ }), s;
5676
+ }
5677
+ styleHandModel(e, t, i) {
5678
+ e.traverse((s) => {
5679
+ s.isMesh && (s.material = new u.MeshStandardMaterial({
5680
+ color: t,
5681
+ roughness: 0.8,
5682
+ metalness: 0.2,
5683
+ transparent: !0,
5684
+ opacity: i
5685
+ }));
5686
+ });
5687
+ }
5688
+ update(e, t, i) {
5689
+ t && (this.handleGestures(e, t, i), this.inertiaActive && !this.dragging && !this.scaling && !this.rotating && this.applyInertia(e, t));
5690
+ }
5691
+ handleGestures(e, t, i) {
5692
+ if (!this.interactionEnabled || !this.hand1 || !this.hand2) return;
5693
+ const s = this.hand1.joints?.["index-finger-tip"], o = this.hand2.joints?.["index-finger-tip"];
5694
+ if (!s || !o) {
5695
+ (this.dragging || this.scaling || this.rotating) && this.onPinchEnd();
5696
+ return;
5697
+ }
5698
+ const n = performance.now(), r = this.hand1.userData.pinch && n - this.pinchIntent.hand1Start >= this.pinchIntent.delay, A = this.hand2.userData.pinch && n - this.pinchIntent.hand2Start >= this.pinchIntent.delay;
5699
+ if (r && !this.hand2.userData.pinch || A && !this.hand1.userData.pinch) {
5700
+ const l = (r ? this.hand1 : this.hand2).joints["index-finger-tip"];
5701
+ if (!this.dragging)
5702
+ (this.scaling || this.rotating) && (this.rotVelocity = 0, this.scaleVelocity = 0), this.dragging = !0, this.scaling = !1, this.rotating = !1, l.getWorldPosition(this.dragStartPos), this.onGestureStart && this.onGestureStart("drag");
5703
+ else {
5704
+ l.getWorldPosition(this.tempVec1);
5705
+ let h = this.tempVec1.clone().sub(this.dragStartPos);
5706
+ if (h.length() > this.MAX_DELTA_PER_FRAME && h.normalize().multiplyScalar(this.MAX_DELTA_PER_FRAME), i) {
5707
+ const d = i.position.distanceTo(t.position);
5708
+ if (d > this.DISTANCE_GAIN_THRESHOLD) {
5709
+ const g = Math.min(
5710
+ this.MAX_DISTANCE_GAIN,
5711
+ 1 + (d - this.DISTANCE_GAIN_THRESHOLD) / 7.5
5712
+ );
5713
+ h.multiplyScalar(g);
5714
+ }
5715
+ }
5716
+ if (t.position.add(h), e > 0) {
5717
+ const d = h.clone().divideScalar(e);
5718
+ this.posVelocity.lerp(d, this.VELOCITY_SMOOTHING);
5719
+ }
5720
+ this.dragStartPos.copy(this.tempVec1);
5721
+ }
5722
+ } else if (r && A)
5723
+ if (s.getWorldPosition(this.tempVec1), o.getWorldPosition(this.tempVec2), !this.scaling && !this.rotating) {
5724
+ this.dragging = !1, this.scaling = !0, this.rotating = !0, this.scaleStartDistance = this.tempVec1.distanceTo(this.tempVec2);
5725
+ const a = this.tempVec2.x - this.tempVec1.x, l = this.tempVec2.z - this.tempVec1.z;
5726
+ this.rotateStartAngle = Math.atan2(l, a), this.onGestureStart && this.onGestureStart("two-hand");
5727
+ } else {
5728
+ const a = this.tempVec1.distanceTo(this.tempVec2), l = a / this.scaleStartDistance, h = Math.log(t.scale.x), d = Math.log(l), g = h + d, p = Math.max(this.MIN_SCALE, Math.min(this.MAX_SCALE, Math.exp(g)));
5729
+ if (t.scale.setScalar(p), e > 0) {
5730
+ const I = d / e, b = Math.max(-this.MAX_SCALE_VELOCITY, Math.min(this.MAX_SCALE_VELOCITY, I));
5731
+ this.scaleVelocity = this.scaleVelocity * (1 - this.VELOCITY_SMOOTHING) + b * this.VELOCITY_SMOOTHING;
5732
+ }
5733
+ this.scaleStartDistance = a;
5734
+ const C = this.tempVec2.x - this.tempVec1.x, E = this.tempVec2.z - this.tempVec1.z, f = Math.atan2(E, C);
5735
+ let m = f - this.rotateStartAngle;
5736
+ if (m > Math.PI && (m -= 2 * Math.PI), m < -Math.PI && (m += 2 * Math.PI), t.rotation.y -= m, e > 0) {
5737
+ const I = -m / e, b = Math.max(-this.MAX_ROT_VELOCITY, Math.min(this.MAX_ROT_VELOCITY, I));
5738
+ this.rotVelocity = this.rotVelocity * (1 - this.VELOCITY_SMOOTHING) + b * this.VELOCITY_SMOOTHING;
5739
+ }
5740
+ this.rotateStartAngle = f;
5741
+ }
5742
+ }
5743
+ onPinchEnd() {
5744
+ if (!this.hand1.userData.pinch && !this.hand2.userData.pinch) {
5745
+ const e = this.dragging || this.scaling || this.rotating;
5746
+ this.dragging = !1, this.scaling = !1, this.rotating = !1, e && (this.onGestureEnd && this.onGestureEnd(), this.posVelocity.lengthSq() < this.VELOCITY_DEAD_ZONE && this.posVelocity.set(0, 0, 0), Math.abs(this.rotVelocity) < this.VELOCITY_DEAD_ZONE && (this.rotVelocity = 0), Math.abs(this.scaleVelocity) < this.VELOCITY_DEAD_ZONE && (this.scaleVelocity = 0), (this.posVelocity.lengthSq() > 0 || Math.abs(this.rotVelocity) > 0 || Math.abs(this.scaleVelocity) > 0) && (this.inertiaActive = !0));
5747
+ } else (!this.hand1.userData.pinch || !this.hand2.userData.pinch) && (this.scaling = !1, this.rotating = !1, this.rotVelocity = 0, this.scaleVelocity = 0);
5748
+ }
5749
+ applyInertia(e, t) {
5750
+ const i = Math.exp(-this.POSITION_DAMPING * e), s = Math.exp(-this.ROTATION_DAMPING * e), o = Math.exp(-this.SCALE_DAMPING * e);
5751
+ this.posVelocity.multiplyScalar(i), this.rotVelocity *= s, this.scaleVelocity *= o, t.position.addScaledVector(this.posVelocity, e), t.rotation.y += this.rotVelocity * e;
5752
+ const r = Math.log(t.scale.x) + this.scaleVelocity * e, A = Math.max(this.MIN_SCALE, Math.min(this.MAX_SCALE, Math.exp(r)));
5753
+ t.scale.setScalar(A), this.posVelocity.lengthSq() < this.VELOCITY_DEAD_ZONE && this.posVelocity.set(0, 0, 0), Math.abs(this.rotVelocity) < this.VELOCITY_DEAD_ZONE && (this.rotVelocity = 0), Math.abs(this.scaleVelocity) < this.VELOCITY_DEAD_ZONE && (this.scaleVelocity = 0), this.posVelocity.lengthSq() === 0 && this.rotVelocity === 0 && this.scaleVelocity === 0 && (this.inertiaActive = !1);
5754
+ }
5755
+ stop() {
5756
+ this.dragging = !1, this.scaling = !1, this.rotating = !1, this.inertiaActive = !1, this.posVelocity.set(0, 0, 0), this.rotVelocity = 0, this.scaleVelocity = 0;
5757
+ }
5758
+ /**
5759
+ * Enable or disable hand gesture interactions.
5760
+ * When disabled, all gestures are silently ignored (useful for remote scenarios).
5761
+ * @param {boolean} enabled - true to allow interactions, false to block them
5762
+ */
5763
+ setInteractionEnabled(e) {
5764
+ this.interactionEnabled = e, e || this.stop();
5765
+ }
5766
+ dispose() {
5767
+ this.hand1 && this.hand1.clear(), this.hand2 && this.hand2.clear(), this.stop();
5768
+ }
5769
+ }
5770
+ class kn extends je {
5771
+ constructor(e, t, i, s = {}, o = null) {
5772
+ super(), this.renderer = e, this.camera = t, this.scene = i, this.config = {
5773
+ enableHandTracking: !0,
5774
+ enableWorldCube: !0,
5775
+ defaultScale: 0.05,
5776
+ worldCubeSize: 1e3,
5777
+ worldCubeOpacity: 0.1,
5778
+ ...s
5779
+ }, this.container = o, this.arCore = new vn(e, t, i, o), this.handTracking = this.config.enableHandTracking ? new Fn(e) : null, this.modelGroup = new u.Group(), this.modelGroup.name = "AR Model Group", this.scene.add(this.modelGroup), this.currentModel = null, this.pendingModel = null, this.pendingModelConfig = null, this.currentModelScale = this.config.defaultScale, this.worldCube = null, this.config.enableWorldCube && this.createWorldCube(), this.isARPresenting = !1, this.previousGestureType = null, this.init();
5780
+ }
5781
+ init() {
5782
+ this.arCore.init(), this.handTracking && (this.handTracking.init(this.scene), this.handTracking.onGestureStart = (e) => {
5783
+ this.previousGestureType !== e && (this.emit("gesture-start", e), this.previousGestureType = e);
5784
+ }, this.handTracking.onGestureEnd = () => {
5785
+ this.previousGestureType && (this.emit("gesture-end", this.previousGestureType), this.previousGestureType = null);
5786
+ }), this.setupSessionLifecycle();
5787
+ }
5788
+ setupSessionLifecycle() {
5789
+ this.arCore.onSessionStart = () => {
5790
+ this.isARPresenting = !0, this.activateModel(), this.worldCube && (this.worldCube.visible = !0), this.emit("session-start");
5791
+ }, this.arCore.onSessionEnd = () => {
5792
+ this.isARPresenting = !1, this.worldCube && (this.worldCube.visible = !1), this.handTracking && this.handTracking.stop(), this.emit("session-end");
5793
+ };
5794
+ }
5795
+ prepareModel(e, t = null) {
5796
+ if (this.handTracking && this.handTracking.stop(), this.pendingModel = e, this.pendingModelConfig = t, e) {
5797
+ const i = t?.defaultScale || e.userData?.defaultScale || this.config.defaultScale;
5798
+ this.currentModelScale = i, this.isARPresenting && this.activateModel();
5799
+ } else
5800
+ this.isARPresenting && this.activateModel();
5801
+ }
5802
+ activateModel() {
5803
+ if (this.currentModel)
5804
+ for (this.modelGroup.remove(this.currentModel); this.modelGroup.children.length > 0; )
5805
+ this.modelGroup.remove(this.modelGroup.children[0]);
5806
+ this.currentModel = this.pendingModel, this.currentModel && (this.modelGroup.add(this.currentModel), this.modelGroup.position.set(0, 0, 0), this.modelGroup.rotation.set(0, 0, 0), this.modelGroup.scale.setScalar(this.currentModelScale));
5807
+ }
5808
+ setTargetModel(e, t = null) {
5809
+ this.prepareModel(e, t);
5810
+ }
5811
+ update(e) {
5812
+ if (!this.isActive() || !this.currentModel) return;
5813
+ const t = e / 1e3;
5814
+ this.handTracking && this.handTracking.update(t, this.modelGroup, this.camera);
5815
+ }
5816
+ createWorldCube() {
5817
+ const e = this.config.worldCubeSize, t = new u.BoxGeometry(e, e, e), i = new u.MeshBasicMaterial({
5818
+ color: 0,
5819
+ transparent: !0,
5820
+ opacity: this.config.worldCubeOpacity,
5821
+ side: u.BackSide,
5822
+ depthWrite: !1
5823
+ });
5824
+ this.worldCube = new u.Mesh(t, i), this.worldCube.name = "AR World Cube", this.worldCube.visible = !1, this.scene.add(this.worldCube);
5825
+ }
5826
+ setWorldCubeOpacity(e) {
5827
+ this.worldCube && (this.worldCube.material.opacity = Math.max(0, Math.min(1, e)));
5828
+ }
5829
+ setModelScale(e) {
5830
+ this.modelGroup && this.modelGroup.scale.setScalar(Math.max(0.01, Math.min(1, e)));
5831
+ }
5832
+ setModelOpacity(e) {
5833
+ this.currentModel && this.currentModel.traverse((t) => {
5834
+ t.isMesh && t.material && (t.material.transparent = !0, t.material.opacity = Math.max(0, Math.min(1, e)));
5835
+ });
5836
+ }
5837
+ getModelTransform() {
5838
+ return {
5839
+ position: {
5840
+ x: this.modelGroup.position.x,
5841
+ y: this.modelGroup.position.y,
5842
+ z: this.modelGroup.position.z
5843
+ },
5844
+ rotation: {
5845
+ x: this.modelGroup.rotation.x,
5846
+ y: this.modelGroup.rotation.y,
5847
+ z: this.modelGroup.rotation.z
5848
+ },
5849
+ scale: {
5850
+ x: this.modelGroup.scale.x,
5851
+ y: this.modelGroup.scale.y,
5852
+ z: this.modelGroup.scale.z
5853
+ }
5854
+ };
5855
+ }
5856
+ setModelTransform(e) {
5857
+ e.position && this.modelGroup.position.set(e.position.x, e.position.y, e.position.z), e.rotation && this.modelGroup.rotation.set(e.rotation.x, e.rotation.y, e.rotation.z), e.scale && this.modelGroup.scale.set(e.scale.x, e.scale.y, e.scale.z);
5858
+ }
5859
+ isActive() {
5860
+ return this.isARPresenting;
5861
+ }
5862
+ getARStatus() {
5863
+ return this.arCore.getARStatus();
5864
+ }
5865
+ dispose() {
5866
+ this.arCore && this.arCore.dispose(), this.handTracking && this.handTracking.dispose(), this.worldCube && (this.scene.remove(this.worldCube), this.worldCube.geometry.dispose(), this.worldCube.material.dispose()), this.modelGroup && this.scene.remove(this.modelGroup), this.isARPresenting = !1, this.currentModel = null;
5867
+ }
5868
+ }
5869
+ class ii {
5265
5870
  /**
5266
5871
  * Initialize debug commands with a BelowViewer instance
5267
5872
  *
@@ -5406,7 +6011,7 @@ class Xt {
5406
6011
  typeof window > "u" || (delete window.camera, delete window.scene, delete window.models, delete window.particles, delete window.vr, delete window.debugHelp, delete window.belowViewer);
5407
6012
  }
5408
6013
  }
5409
- class Qn extends yt {
6014
+ class _n extends je {
5410
6015
  /**
5411
6016
  * Creates a new BelowViewer instance
5412
6017
  *
@@ -5469,14 +6074,31 @@ class Qn extends yt {
5469
6074
  enabled: { type: "boolean", default: !0 }
5470
6075
  }
5471
6076
  },
6077
+ ar: {
6078
+ type: "object",
6079
+ default: {
6080
+ enabled: !1,
6081
+ settings: {
6082
+ enableHandTracking: !0,
6083
+ enableWorldCube: !0,
6084
+ defaultScale: 0.05,
6085
+ worldCubeSize: 20,
6086
+ worldCubeOpacity: 0.1
6087
+ }
6088
+ },
6089
+ schema: {
6090
+ enabled: { type: "boolean", default: !1 },
6091
+ settings: { type: "object", default: {} }
6092
+ }
6093
+ },
5472
6094
  audioPath: { type: "string", default: "./sound/" },
5473
6095
  enableVRAudio: { type: "boolean", default: !1 }
5474
6096
  };
5475
- this.config = new qe(i).validate(t), this.renderer = null, this.sceneManager = null, this.cameraManager = null, this.modelLoader = null, this.vrManager = null, this.isVREnabled = this.config.vr?.enabled !== !1, this.dolly = null, this.isInitialized = !1, this.loadedModels = [], this.currentAbortController = null, this.skipRenderDuringLoad = !1, this.pixelRatioBeforeThrottle = 1, this.originalPixelRatio = 1, this.isConstrainedSafari = !1, this.init();
6097
+ this.config = new Ke(i).validate(t), this.renderer = null, this.sceneManager = null, this.cameraManager = null, this.modelLoader = null, this.vrManager = null, this.arManager = null, this.isVREnabled = this.config.vr?.enabled !== !1, this.isAREnabled = this.config.ar?.enabled === !0, this.dolly = null, this.isInitialized = !1, this.loadedModels = [], this.currentAbortController = null, this.skipRenderDuringLoad = !1, this.pixelRatioBeforeThrottle = 1, this.originalPixelRatio = 1, this.isConstrainedSafari = !1, this.init();
5476
6098
  }
5477
6099
  init() {
5478
6100
  try {
5479
- this.initRenderer(), this.sceneManager = new Ds(this.config.scene), this.cameraManager = new js(this.config.camera), this.modelLoader = new V(this.renderer), this.isConstrainedSafari = this.modelLoader?.isIOSWebKit || !1, this.renderer?.getPixelRatio ? this.originalPixelRatio = this.renderer.getPixelRatio() : typeof window < "u" && (this.originalPixelRatio = window.devicePixelRatio || 1), this.pixelRatioBeforeThrottle = this.originalPixelRatio, this.isVREnabled && this.initVR(), this.cameraManager.initControls(this.renderer.domElement), this.setupEventListeners(), this.startRenderLoop(), this.isInitialized = !0, typeof window < "u" && Xt.init(this), this.emit("initialized");
6101
+ this.initRenderer(), this.sceneManager = new ks(this.config.scene), this.cameraManager = new Ws(this.config.camera), this.modelLoader = new O(this.renderer), this.isConstrainedSafari = this.modelLoader?.isIOSWebKit || !1, this.renderer?.getPixelRatio ? this.originalPixelRatio = this.renderer.getPixelRatio() : typeof window < "u" && (this.originalPixelRatio = window.devicePixelRatio || 1), this.pixelRatioBeforeThrottle = this.originalPixelRatio, this.isVREnabled && this.initVR(), this.isAREnabled && this.initAR(), this.cameraManager.initControls(this.renderer.domElement), this.setupEventListeners(), this.startRenderLoop(), this.isInitialized = !0, typeof window < "u" && ii.init(this), this.emit("initialized");
5480
6102
  } catch (e) {
5481
6103
  console.error("Failed to initialize BelowViewer:", e), this.emit("error", e);
5482
6104
  }
@@ -5500,7 +6122,7 @@ class Qn extends yt {
5500
6122
  initVR() {
5501
6123
  this.dolly = new u.Group(), this.dolly.add(this.cameraManager.camera), this.sceneManager.scene.add(this.dolly);
5502
6124
  const e = this.config.audioPath || "./sound/", t = this.config.enableVRAudio === !0;
5503
- this.vrManager = new Bn(this.renderer, this.cameraManager.camera, this.sceneManager.scene, e, t, this.container), this.vrManager.setControls(this.cameraManager.controls), this.config.initialPositions && this.vrManager.setInitialPositions(this.config.initialPositions), this.vrManager.onModeToggle = () => {
6125
+ this.vrManager = new Mn(this.renderer, this.cameraManager.camera, this.sceneManager.scene, e, t, this.container), this.vrManager.setControls(this.cameraManager.controls), this.config.initialPositions && this.vrManager.setInitialPositions(this.config.initialPositions), this.vrManager.onModeToggle = () => {
5504
6126
  this.emit("vr-mode-toggle");
5505
6127
  }, this.vrManager.onMovementStart = () => {
5506
6128
  this.emit("vr-movement-start");
@@ -5518,6 +6140,26 @@ class Qn extends yt {
5518
6140
  this.cameraManager.controls && (this.cameraManager.controls.enabled = !0), this.dolly.position.set(0, 0, 0), this.dolly.rotation.set(0, 0, 0), this.emit("vr-session-end");
5519
6141
  };
5520
6142
  }
6143
+ initAR() {
6144
+ const e = this.config.ar?.settings || {};
6145
+ this.arManager = new kn(
6146
+ this.renderer,
6147
+ this.cameraManager.camera,
6148
+ this.sceneManager.scene,
6149
+ e,
6150
+ this.container
6151
+ ), this.arManager.on("session-start", () => {
6152
+ this.cameraManager.controls && (this.cameraManager.controls.enabled = !1), this.emit("ar-session-start");
6153
+ }), this.arManager.on("session-end", () => {
6154
+ this.cameraManager.controls && (this.cameraManager.controls.enabled = !0), this.emit("ar-session-end");
6155
+ }), this.arManager.on("gesture-start", (t) => {
6156
+ this.emit("ar-gesture-start", t);
6157
+ }), this.arManager.on("gesture-end", (t) => {
6158
+ this.emit("ar-gesture-end", t);
6159
+ }), this.on("model-loaded", ({ model: t, options: i }) => {
6160
+ this.arManager && this.arManager.setTargetModel(t, i);
6161
+ });
6162
+ }
5521
6163
  setupEventListeners() {
5522
6164
  window.addEventListener("resize", this.onWindowResize.bind(this)), this.cameraManager && this.cameraManager.on("change", () => {
5523
6165
  this.emit("camera-change");
@@ -5612,7 +6254,7 @@ class Qn extends yt {
5612
6254
  let e = 0;
5613
6255
  const t = (i) => {
5614
6256
  const s = Math.min((i - e) / 1e3, 0.1);
5615
- e = i, this.vrManager && this.vrManager.update(s), this.cameraManager && this.cameraManager.update(), this.emit("before-render", s);
6257
+ e = i, this.vrManager && this.vrManager.update(s), this.arManager && this.arManager.update(s * 1e3), this.cameraManager && this.cameraManager.update(), this.emit("before-render", s);
5616
6258
  const o = this.renderer?.xr?.isPresenting;
5617
6259
  this.renderer && this.sceneManager && this.cameraManager && (!this.skipRenderDuringLoad || o) && this.renderer.render(this.sceneManager.scene, this.cameraManager.camera);
5618
6260
  };
@@ -5706,13 +6348,14 @@ class Qn extends yt {
5706
6348
  const t = this.loadedModels.findIndex((i) => i.model === e);
5707
6349
  if (t >= 0) {
5708
6350
  const { url: i } = this.loadedModels[t];
5709
- this.sceneManager.remove(e), nt(e), this.loadedModels.splice(t, 1), this.emit("model-removed", { model: e }), !this.loadedModels.some((o) => o.url === i) && this.modelLoader && this.modelLoader.releaseFromCache(i);
6351
+ this.sceneManager.remove(e), at(e), this.loadedModels.splice(t, 1), this.emit("model-removed", { model: e }), !this.loadedModels.some((o) => o.url === i) && this.modelLoader && this.modelLoader.releaseFromCache(i);
5710
6352
  }
5711
6353
  }
5712
6354
  clearModels() {
6355
+ this.arManager && this.arManager.setTargetModel(null);
5713
6356
  const e = new Set(this.loadedModels.map(({ url: t }) => t));
5714
6357
  this.loadedModels.forEach(({ model: t }) => {
5715
- nt(t), this.sceneManager.remove(t);
6358
+ at(t), this.sceneManager.remove(t);
5716
6359
  }), this.loadedModels.length = 0, e.forEach((t) => {
5717
6360
  this.modelLoader && this.modelLoader.releaseFromCache(t);
5718
6361
  }), this.emit("models-cleared");
@@ -5733,8 +6376,8 @@ class Qn extends yt {
5733
6376
  * @since 1.0.0
5734
6377
  */
5735
6378
  dispose() {
5736
- this.currentAbortController && this.currentAbortController.abort(), typeof window < "u" && Xt.cleanup(), this.vrManager && (this.vrManager.dispose(), this.vrManager = null), this.renderer && this.renderer.setAnimationLoop(null), this.loadedModels.forEach(({ model: e }) => {
5737
- e.parent && e.parent.remove(e), nt(e);
6379
+ this.currentAbortController && this.currentAbortController.abort(), typeof window < "u" && ii.cleanup(), this.vrManager && (this.vrManager.dispose(), this.vrManager = null), this.arManager && (this.arManager.dispose(), this.arManager = null), this.renderer && this.renderer.setAnimationLoop(null), this.loadedModels.forEach(({ model: e }) => {
6380
+ e.parent && e.parent.remove(e), at(e);
5738
6381
  }), this.loadedModels = [], this.cameraManager && (this.cameraManager.dispose(), this.cameraManager = null), this.renderer && (this.renderer.dispose(), this.renderer.domElement && this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement), this.renderer = null), this.modelLoader && (this.modelLoader.dispose(), this.modelLoader = null), window.removeEventListener("resize", this.onWindowResize.bind(this)), this.removeAllListeners(), this.isInitialized = !1;
5739
6382
  }
5740
6383
  applyDesktopPositions(e) {
@@ -5820,15 +6463,15 @@ class Qn extends yt {
5820
6463
  t && e.vr && this.vrManager ? this.vrManager.applyVRPositions(e) : !t && e.desktop && this.applyDesktopPositions(e.desktop);
5821
6464
  }
5822
6465
  }
5823
- const Zt = new Oe(), Fe = new D();
5824
- class ki extends Ss {
6466
+ const si = new qe(), Fe = new R();
6467
+ class Ui extends Ds {
5825
6468
  /**
5826
6469
  * Constructs a new line segments geometry.
5827
6470
  */
5828
6471
  constructor() {
5829
6472
  super(), this.isLineSegmentsGeometry = !0, this.type = "LineSegmentsGeometry";
5830
6473
  const e = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0], t = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2], i = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];
5831
- this.setIndex(i), this.setAttribute("position", new Pt(e, 3)), this.setAttribute("uv", new Pt(t, 2));
6474
+ this.setIndex(i), this.setAttribute("position", new Ut(e, 3)), this.setAttribute("uv", new Ut(t, 2));
5832
6475
  }
5833
6476
  /**
5834
6477
  * Applies the given 4x4 transformation matrix to the geometry.
@@ -5850,7 +6493,7 @@ class ki extends Ss {
5850
6493
  setPositions(e) {
5851
6494
  let t;
5852
6495
  e instanceof Float32Array ? t = e : Array.isArray(e) && (t = new Float32Array(e));
5853
- const i = new pt(t, 6, 1);
6496
+ const i = new mt(t, 6, 1);
5854
6497
  return this.setAttribute("instanceStart", new Ae(i, 3, 0)), this.setAttribute("instanceEnd", new Ae(i, 3, 3)), this.instanceCount = this.attributes.instanceStart.count, this.computeBoundingBox(), this.computeBoundingSphere(), this;
5855
6498
  }
5856
6499
  /**
@@ -5863,7 +6506,7 @@ class ki extends Ss {
5863
6506
  setColors(e) {
5864
6507
  let t;
5865
6508
  e instanceof Float32Array ? t = e : Array.isArray(e) && (t = new Float32Array(e));
5866
- const i = new pt(t, 6, 1);
6509
+ const i = new mt(t, 6, 1);
5867
6510
  return this.setAttribute("instanceColorStart", new Ae(i, 3, 0)), this.setAttribute("instanceColorEnd", new Ae(i, 3, 3)), this;
5868
6511
  }
5869
6512
  /**
@@ -5891,7 +6534,7 @@ class ki extends Ss {
5891
6534
  * @return {LineSegmentsGeometry} A reference to this geometry.
5892
6535
  */
5893
6536
  fromMesh(e) {
5894
- return this.fromWireframeGeometry(new Ms(e.geometry)), this;
6537
+ return this.fromWireframeGeometry(new Ts(e.geometry)), this;
5895
6538
  }
5896
6539
  /**
5897
6540
  * Setups this line segments geometry from the given line segments.
@@ -5905,12 +6548,12 @@ class ki extends Ss {
5905
6548
  return this.setPositions(t.attributes.position.array), this;
5906
6549
  }
5907
6550
  computeBoundingBox() {
5908
- this.boundingBox === null && (this.boundingBox = new Oe());
6551
+ this.boundingBox === null && (this.boundingBox = new qe());
5909
6552
  const e = this.attributes.instanceStart, t = this.attributes.instanceEnd;
5910
- e !== void 0 && t !== void 0 && (this.boundingBox.setFromBufferAttribute(e), Zt.setFromBufferAttribute(t), this.boundingBox.union(Zt));
6553
+ e !== void 0 && t !== void 0 && (this.boundingBox.setFromBufferAttribute(e), si.setFromBufferAttribute(t), this.boundingBox.union(si));
5911
6554
  }
5912
6555
  computeBoundingSphere() {
5913
- this.boundingSphere === null && (this.boundingSphere = new wt()), this.boundingBox === null && this.computeBoundingBox();
6556
+ this.boundingSphere === null && (this.boundingSphere = new St()), this.boundingBox === null && this.computeBoundingBox();
5914
6557
  const e = this.attributes.instanceStart, t = this.attributes.instanceEnd;
5915
6558
  if (e !== void 0 && t !== void 0) {
5916
6559
  const i = this.boundingSphere.center;
@@ -5927,7 +6570,7 @@ class ki extends Ss {
5927
6570
  Ne.line = {
5928
6571
  worldUnits: { value: 1 },
5929
6572
  linewidth: { value: 1 },
5930
- resolution: { value: new H(1, 1) },
6573
+ resolution: { value: new V(1, 1) },
5931
6574
  dashOffset: { value: 0 },
5932
6575
  dashScale: { value: 1 },
5933
6576
  dashSize: { value: 1 },
@@ -5935,7 +6578,7 @@ Ne.line = {
5935
6578
  // todo FIX - maybe change to totalSize
5936
6579
  };
5937
6580
  Pe.line = {
5938
- uniforms: di.merge([
6581
+ uniforms: bi.merge([
5939
6582
  Ne.common,
5940
6583
  Ne.fog,
5941
6584
  Ne.line
@@ -6318,7 +6961,7 @@ Pe.line = {
6318
6961
  `
6319
6962
  )
6320
6963
  };
6321
- class He extends xs {
6964
+ class Ve extends Ls {
6322
6965
  /**
6323
6966
  * Constructs a new line segments geometry.
6324
6967
  *
@@ -6331,7 +6974,7 @@ class He extends xs {
6331
6974
  constructor(e) {
6332
6975
  super({
6333
6976
  type: "LineMaterial",
6334
- uniforms: di.clone(Pe.line.uniforms),
6977
+ uniforms: bi.clone(Pe.line.uniforms),
6335
6978
  vertexShader: Pe.line.vertexShader,
6336
6979
  fragmentShader: Pe.line.fragmentShader,
6337
6980
  clipping: !0
@@ -6473,16 +7116,16 @@ class He extends xs {
6473
7116
  this.defines && (e === !0 !== this.alphaToCoverage && (this.needsUpdate = !0), e === !0 ? this.defines.USE_ALPHA_TO_COVERAGE = "" : delete this.defines.USE_ALPHA_TO_COVERAGE);
6474
7117
  }
6475
7118
  }
6476
- const rt = new Le(), $t = new D(), ei = new D(), _ = new Le(), G = new Le(), X = new Le(), at = new D(), At = new Re(), P = new vs(), ti = new D(), ke = new Oe(), _e = new wt(), Z = new Le();
7119
+ const At = new Te(), oi = new R(), ni = new R(), _ = new Te(), G = new Te(), X = new Te(), lt = new R(), ct = new Ie(), P = new Fs(), ri = new R(), ke = new qe(), _e = new St(), Z = new Te();
6477
7120
  let $, ce;
6478
- function ii(c, e, t) {
7121
+ function ai(c, e, t) {
6479
7122
  return Z.set(0, 0, -e, 1).applyMatrix4(c.projectionMatrix), Z.multiplyScalar(1 / Z.w), Z.x = ce / t.width, Z.y = ce / t.height, Z.applyMatrix4(c.projectionMatrixInverse), Z.multiplyScalar(1 / Z.w), Math.abs(Math.max(Z.x, Z.y));
6480
7123
  }
6481
- function wn(c, e) {
7124
+ function Gn(c, e) {
6482
7125
  const t = c.matrixWorld, i = c.geometry, s = i.attributes.instanceStart, o = i.attributes.instanceEnd, n = Math.min(i.instanceCount, s.count);
6483
7126
  for (let r = 0, A = n; r < A; r++) {
6484
7127
  P.start.fromBufferAttribute(s, r), P.end.fromBufferAttribute(o, r), P.applyMatrix4(t);
6485
- const a = new D(), l = new D();
7128
+ const a = new R(), l = new R();
6486
7129
  $.distanceSqToSegment(P.start, P.end, l, a), l.distanceTo(a) < ce * 0.5 && e.push({
6487
7130
  point: l,
6488
7131
  pointOnLine: a,
@@ -6495,29 +7138,29 @@ function wn(c, e) {
6495
7138
  });
6496
7139
  }
6497
7140
  }
6498
- function yn(c, e, t) {
7141
+ function Pn(c, e, t) {
6499
7142
  const i = e.projectionMatrix, o = c.material.resolution, n = c.matrixWorld, r = c.geometry, A = r.attributes.instanceStart, a = r.attributes.instanceEnd, l = Math.min(r.instanceCount, A.count), h = -e.near;
6500
- $.at(1, X), X.w = 1, X.applyMatrix4(e.matrixWorldInverse), X.applyMatrix4(i), X.multiplyScalar(1 / X.w), X.x *= o.x / 2, X.y *= o.y / 2, X.z = 0, at.copy(X), At.multiplyMatrices(e.matrixWorldInverse, n);
7143
+ $.at(1, X), X.w = 1, X.applyMatrix4(e.matrixWorldInverse), X.applyMatrix4(i), X.multiplyScalar(1 / X.w), X.x *= o.x / 2, X.y *= o.y / 2, X.z = 0, lt.copy(X), ct.multiplyMatrices(e.matrixWorldInverse, n);
6501
7144
  for (let d = 0, g = l; d < g; d++) {
6502
- if (_.fromBufferAttribute(A, d), G.fromBufferAttribute(a, d), _.w = 1, G.w = 1, _.applyMatrix4(At), G.applyMatrix4(At), _.z > h && G.z > h)
7145
+ if (_.fromBufferAttribute(A, d), G.fromBufferAttribute(a, d), _.w = 1, G.w = 1, _.applyMatrix4(ct), G.applyMatrix4(ct), _.z > h && G.z > h)
6503
7146
  continue;
6504
7147
  if (_.z > h) {
6505
- const E = _.z - G.z, b = (_.z - h) / E;
7148
+ const I = _.z - G.z, b = (_.z - h) / I;
6506
7149
  _.lerp(G, b);
6507
7150
  } else if (G.z > h) {
6508
- const E = G.z - _.z, b = (G.z - h) / E;
7151
+ const I = G.z - _.z, b = (G.z - h) / I;
6509
7152
  G.lerp(_, b);
6510
7153
  }
6511
7154
  _.applyMatrix4(i), G.applyMatrix4(i), _.multiplyScalar(1 / _.w), G.multiplyScalar(1 / G.w), _.x *= o.x / 2, _.y *= o.y / 2, G.x *= o.x / 2, G.y *= o.y / 2, P.start.copy(_), P.start.z = 0, P.end.copy(G), P.end.z = 0;
6512
- const C = P.closestPointToPointParameter(at, !0);
6513
- P.at(C, ti);
6514
- const I = It.lerp(_.z, G.z, C), f = I >= -1 && I <= 1, m = at.distanceTo(ti) < ce * 0.5;
7155
+ const C = P.closestPointToPointParameter(lt, !0);
7156
+ P.at(C, ri);
7157
+ const E = Bt.lerp(_.z, G.z, C), f = E >= -1 && E <= 1, m = lt.distanceTo(ri) < ce * 0.5;
6515
7158
  if (f && m) {
6516
7159
  P.start.fromBufferAttribute(A, d), P.end.fromBufferAttribute(a, d), P.start.applyMatrix4(n), P.end.applyMatrix4(n);
6517
- const E = new D(), b = new D();
6518
- $.distanceSqToSegment(P.start, P.end, b, E), t.push({
7160
+ const I = new R(), b = new R();
7161
+ $.distanceSqToSegment(P.start, P.end, b, I), t.push({
6519
7162
  point: b,
6520
- pointOnLine: E,
7163
+ pointOnLine: I,
6521
7164
  distance: $.origin.distanceTo(b),
6522
7165
  object: c,
6523
7166
  face: null,
@@ -6528,14 +7171,14 @@ function yn(c, e, t) {
6528
7171
  }
6529
7172
  }
6530
7173
  }
6531
- class Sn extends Qt {
7174
+ class Nn extends Qt {
6532
7175
  /**
6533
7176
  * Constructs a new wide line.
6534
7177
  *
6535
7178
  * @param {LineSegmentsGeometry} [geometry] - The line geometry.
6536
7179
  * @param {LineMaterial} [material] - The line material.
6537
7180
  */
6538
- constructor(e = new ki(), t = new He({ color: Math.random() * 16777215 })) {
7181
+ constructor(e = new Ui(), t = new Ve({ color: Math.random() * 16777215 })) {
6539
7182
  super(e, t), this.isLineSegments2 = !0, this.type = "LineSegments2";
6540
7183
  }
6541
7184
  /**
@@ -6548,8 +7191,8 @@ class Sn extends Qt {
6548
7191
  computeLineDistances() {
6549
7192
  const e = this.geometry, t = e.attributes.instanceStart, i = e.attributes.instanceEnd, s = new Float32Array(2 * t.count);
6550
7193
  for (let n = 0, r = 0, A = t.count; n < A; n++, r += 2)
6551
- $t.fromBufferAttribute(t, n), ei.fromBufferAttribute(i, n), s[r] = r === 0 ? 0 : s[r - 1], s[r + 1] = s[r] + $t.distanceTo(ei);
6552
- const o = new pt(s, 2, 1);
7194
+ oi.fromBufferAttribute(t, n), ni.fromBufferAttribute(i, n), s[r] = r === 0 ? 0 : s[r - 1], s[r + 1] = s[r] + oi.distanceTo(ni);
7195
+ const o = new mt(s, 2, 1);
6553
7196
  return e.setAttribute("instanceDistanceStart", new Ae(o, 1, 0)), e.setAttribute("instanceDistanceEnd", new Ae(o, 1, 1)), this;
6554
7197
  }
6555
7198
  /**
@@ -6570,7 +7213,7 @@ class Sn extends Qt {
6570
7213
  a = ce * 0.5;
6571
7214
  else {
6572
7215
  const h = Math.max(s.near, _e.distanceToPoint($.origin));
6573
- a = ii(s, h, A.resolution);
7216
+ a = ai(s, h, A.resolution);
6574
7217
  }
6575
7218
  if (_e.radius += a, $.intersectsSphere(_e) === !1)
6576
7219
  return;
@@ -6580,16 +7223,16 @@ class Sn extends Qt {
6580
7223
  l = ce * 0.5;
6581
7224
  else {
6582
7225
  const h = Math.max(s.near, ke.distanceToPoint($.origin));
6583
- l = ii(s, h, A.resolution);
7226
+ l = ai(s, h, A.resolution);
6584
7227
  }
6585
- ke.expandByScalar(l), $.intersectsBox(ke) !== !1 && (i ? wn(this, t) : yn(this, s, t));
7228
+ ke.expandByScalar(l), $.intersectsBox(ke) !== !1 && (i ? Gn(this, t) : Pn(this, s, t));
6586
7229
  }
6587
7230
  onBeforeRender(e) {
6588
7231
  const t = this.material.uniforms;
6589
- t && t.resolution && (e.getViewport(rt), this.material.uniforms.resolution.value.set(rt.z, rt.w));
7232
+ t && t.resolution && (e.getViewport(At), this.material.uniforms.resolution.value.set(At.z, At.w));
6590
7233
  }
6591
7234
  }
6592
- class Ct extends ki {
7235
+ class It extends Ui {
6593
7236
  /**
6594
7237
  * Constructs a new line geometry.
6595
7238
  */
@@ -6643,18 +7286,18 @@ class Ct extends ki {
6643
7286
  return this.setPositions(t.attributes.position.array), this;
6644
7287
  }
6645
7288
  }
6646
- class si extends Sn {
7289
+ class Ai extends Nn {
6647
7290
  /**
6648
7291
  * Constructs a new wide line.
6649
7292
  *
6650
7293
  * @param {LineGeometry} [geometry] - The line geometry.
6651
7294
  * @param {LineMaterial} [material] - The line material.
6652
7295
  */
6653
- constructor(e = new Ct(), t = new He({ color: Math.random() * 16777215 })) {
7296
+ constructor(e = new It(), t = new Ve({ color: Math.random() * 16777215 })) {
6654
7297
  super(e, t), this.isLine2 = !0, this.type = "Line2";
6655
7298
  }
6656
7299
  }
6657
- class Mn {
7300
+ class Un {
6658
7301
  /**
6659
7302
  * Set the objects to use for raycasting during measurement
6660
7303
  *
@@ -6714,7 +7357,7 @@ class Mn {
6714
7357
  }
6715
7358
  l && h ? (this.attachVR({ controller1: l, controller2: h, controllerGrip1: d, controllerGrip2: g }), this.ghostSpheres && this.ghostSpheres.left && this.ghostSpheres.right && (this.ghostSpheres.left.visible = !0, this.ghostSpheres.right.visible = !0)) : (this._ghostSphereAttachRetries || (this._ghostSphereAttachRetries = 0), this._ghostSphereAttachRetries < 40 ? (this._ghostSphereAttachRetries++, setTimeout(a, 250)) : typeof window < "u" && window.console && console.warn("[MeasurementSystem] Could not find VR controllers to attach ghost spheres after multiple attempts."));
6716
7359
  };
6717
- if (a(), i && i.xr && i.xr.addEventListener && i.xr.addEventListener("sessionstart", a), this.sphereGeometry = new u.SphereGeometry(0.02, 8, 6), this.placedMaterial = new u.MeshBasicMaterial({ color: 16777215 }), this.vrLineMaterial = new He({
7360
+ if (a(), i && i.xr && i.xr.addEventListener && i.xr.addEventListener("sessionstart", a), this.sphereGeometry = new u.SphereGeometry(0.02, 8, 6), this.placedMaterial = new u.MeshBasicMaterial({ color: 16777215 }), this.vrLineMaterial = new Ve({
6718
7361
  color: 16777215,
6719
7362
  linewidth: 3,
6720
7363
  transparent: !0,
@@ -6722,7 +7365,7 @@ class Mn {
6722
7365
  depthTest: !1,
6723
7366
  vertexColors: !1,
6724
7367
  dashed: !1
6725
- }), this.desktopLineMaterial = new He({
7368
+ }), this.desktopLineMaterial = new Ve({
6726
7369
  color: 16777215,
6727
7370
  linewidth: 3,
6728
7371
  transparent: !0,
@@ -6842,7 +7485,7 @@ class Mn {
6842
7485
  s.position.copy(i), this.scene.add(s), this.desktopMeasurementPoints.push(s);
6843
7486
  }
6844
7487
  if (this.desktopMeasurementPoints.length === 2) {
6845
- const e = new Ct();
7488
+ const e = new It();
6846
7489
  e.setPositions([
6847
7490
  this.desktopMeasurementPoints[0].position.x,
6848
7491
  this.desktopMeasurementPoints[0].position.y,
@@ -6850,7 +7493,7 @@ class Mn {
6850
7493
  this.desktopMeasurementPoints[1].position.x,
6851
7494
  this.desktopMeasurementPoints[1].position.y,
6852
7495
  this.desktopMeasurementPoints[1].position.z
6853
- ]), this.desktopMeasurementLine = new si(e, this.desktopLineMaterial), this.desktopMeasurementLine.computeLineDistances(), this.scene.add(this.desktopMeasurementLine);
7496
+ ]), this.desktopMeasurementLine = new Ai(e, this.desktopLineMaterial), this.desktopMeasurementLine.computeLineDistances(), this.scene.add(this.desktopMeasurementLine);
6854
7497
  const t = this.desktopMeasurementPoints[0].position.distanceTo(this.desktopMeasurementPoints[1].position);
6855
7498
  if (this.createMeasurementDisplay(t), this.measurementSprite) {
6856
7499
  const i = new u.Vector3();
@@ -6872,8 +7515,8 @@ class Mn {
6872
7515
  e <= 2 ? a = 0.4 + e / 2 * 0.3 : e <= 4 ? a = 0.7 + (e - 2) / 2 * 0.2 : a = 0.9 + Math.min((e - 4) / 16, 1) * 0.5;
6873
7516
  const l = Math.round(A * a);
6874
7517
  r.font = `600 ${l}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif`;
6875
- const h = `${e.toFixed(2)}m`, g = r.measureText(h).width, p = l, C = Math.max(6, l * 0.3), I = g + C * 2, f = p + C * 2, m = (i - I) / 2, E = (s - f) / 2;
6876
- if (r.fillStyle = "rgba(0, 0, 0, 0.8)", r.beginPath(), r.roundRect(m, E, I, f, Math.max(4, l * 0.2)), r.fill(), r.fillStyle = "white", r.textAlign = "center", r.textBaseline = "middle", r.fillText(h, i / 2, s / 2), r.restore(), this.measurementTexture ? this.measurementTexture.needsUpdate = !0 : (this.measurementTexture = new u.CanvasTexture(this.measurementCanvas), this.measurementTexture.minFilter = u.LinearFilter, this.measurementTexture.magFilter = u.LinearFilter), !this.measurementSprite) {
7518
+ const h = `${e.toFixed(2)}m`, g = r.measureText(h).width, p = l, C = Math.max(6, l * 0.3), E = g + C * 2, f = p + C * 2, m = (i - E) / 2, I = (s - f) / 2;
7519
+ if (r.fillStyle = "rgba(0, 0, 0, 0.8)", r.beginPath(), r.roundRect(m, I, E, f, Math.max(4, l * 0.2)), r.fill(), r.fillStyle = "white", r.textAlign = "center", r.textBaseline = "middle", r.fillText(h, i / 2, s / 2), r.restore(), this.measurementTexture ? this.measurementTexture.needsUpdate = !0 : (this.measurementTexture = new u.CanvasTexture(this.measurementCanvas), this.measurementTexture.minFilter = u.LinearFilter, this.measurementTexture.magFilter = u.LinearFilter), !this.measurementSprite) {
6877
7520
  const w = new u.SpriteMaterial({
6878
7521
  map: this.measurementTexture,
6879
7522
  depthTest: !1,
@@ -6881,8 +7524,8 @@ class Mn {
6881
7524
  });
6882
7525
  this.measurementSprite = new u.Sprite(w);
6883
7526
  }
6884
- const B = 0.3 * a, Q = i / s;
6885
- return this.measurementSprite.scale.set(B * Q, B, 1), this.measurementSprite;
7527
+ const B = 0.3 * a, y = i / s;
7528
+ return this.measurementSprite.scale.set(B * y, B, 1), this.measurementSprite;
6886
7529
  }
6887
7530
  /**
6888
7531
  * Attach VR controllers for VR measurement mode
@@ -6990,7 +7633,7 @@ class Mn {
6990
7633
  */
6991
7634
  updateUnifiedMeasurementLine() {
6992
7635
  if (this.unifiedMeasurementLine && (this.scene.remove(this.unifiedMeasurementLine), this.unifiedMeasurementLine = null), this.unifiedMeasurementPoints.length === 2) {
6993
- const e = this.unifiedMeasurementPoints[0].position, t = this.unifiedMeasurementPoints[1].position, i = new Ct();
7636
+ const e = this.unifiedMeasurementPoints[0].position, t = this.unifiedMeasurementPoints[1].position, i = new It();
6994
7637
  i.setPositions([
6995
7638
  e.x,
6996
7639
  e.y,
@@ -6998,7 +7641,7 @@ class Mn {
6998
7641
  t.x,
6999
7642
  t.y,
7000
7643
  t.z
7001
- ]), this.unifiedMeasurementLine = new si(i, this.desktopLineMaterial), this.unifiedMeasurementLine.computeLineDistances(), this.unifiedMeasurementLine.userData.isMeasurementLine = !0, this.scene.add(this.unifiedMeasurementLine);
7644
+ ]), this.unifiedMeasurementLine = new Ai(i, this.desktopLineMaterial), this.unifiedMeasurementLine.computeLineDistances(), this.unifiedMeasurementLine.userData.isMeasurementLine = !0, this.scene.add(this.unifiedMeasurementLine);
7002
7645
  const s = e.distanceTo(t);
7003
7646
  if (this.createMeasurementDisplay(s), this.measurementSprite) {
7004
7647
  const o = new u.Vector3();
@@ -7166,7 +7809,7 @@ class Mn {
7166
7809
  }
7167
7810
  }
7168
7811
  }
7169
- class xt {
7812
+ class Rt {
7170
7813
  constructor(e, t = {}) {
7171
7814
  this.vrManager = e, this.isComfortMode = !1, this._iconRendered = !1, this.options = {
7172
7815
  containerId: t.containerId || "modelSelector",
@@ -7455,10 +8098,10 @@ class xt {
7455
8098
  this.vrManager = null;
7456
8099
  }
7457
8100
  static create(e, t = {}) {
7458
- return new xt(e, t);
8101
+ return new Rt(e, t);
7459
8102
  }
7460
8103
  }
7461
- class xn {
8104
+ class Vn {
7462
8105
  constructor(e) {
7463
8106
  this.scene = e, this.particleBounds = {
7464
8107
  min: new u.Vector3(-50, -25, -50),
@@ -7649,7 +8292,7 @@ class xn {
7649
8292
  this.particles && (this.scene.remove(this.particles), this.particles.geometry && this.particles.geometry.dispose(), this.particles.material && this.particles.material.dispose(), this.particles = null);
7650
8293
  }
7651
8294
  }
7652
- class vn {
8295
+ class On {
7653
8296
  constructor(e) {
7654
8297
  this.scene = e, this.controllerSpotlight = null, this.spotlightTarget = null, this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.createSpotlight();
7655
8298
  }
@@ -7756,7 +8399,7 @@ class vn {
7756
8399
  this.controllerSpotlight && (this.scene.remove(this.controllerSpotlight), this.controllerSpotlight = null), this.spotlightTarget && (this.scene.remove(this.spotlightTarget), this.spotlightTarget = null);
7757
8400
  }
7758
8401
  }
7759
- class Dn {
8402
+ class Hn {
7760
8403
  constructor(e) {
7761
8404
  this.scene = e, this.overheadLight = null, this.clearModeDirectionalLight = null, this.clearModeHemisphereLight = null, this.isTransitioning = !1, this.currentMode = "survey", this.pendingAnimations = /* @__PURE__ */ new Set(), this.isDisposed = !1, this.initializeLighting();
7762
8405
  }
@@ -7807,12 +8450,12 @@ class Dn {
7807
8450
  return;
7808
8451
  }
7809
8452
  try {
7810
- const C = p - a, I = Math.min(C / n, 1), f = 1 - Math.pow(1 - I, 3);
8453
+ const C = p - a, E = Math.min(C / n, 1), f = 1 - Math.pow(1 - E, 3);
7811
8454
  if (!e || this.scene && !this.scene.children.includes(e)) {
7812
8455
  this.pendingAnimations.delete(A), r && r();
7813
8456
  return;
7814
8457
  }
7815
- e.intensity = t + l * f, h && d && e.color && e.color.lerpColors(h, d, f), I < 1 ? requestAnimationFrame(g) : (this.pendingAnimations.delete(A), r && r());
8458
+ e.intensity = t + l * f, h && d && e.color && e.color.lerpColors(h, d, f), E < 1 ? requestAnimationFrame(g) : (this.pendingAnimations.delete(A), r && r());
7816
8459
  } catch (C) {
7817
8460
  console.error("Error in lighting animation:", C), this.pendingAnimations.delete(A), r && r();
7818
8461
  }
@@ -7846,9 +8489,9 @@ class Dn {
7846
8489
  });
7847
8490
  }
7848
8491
  }
7849
- class Rn {
8492
+ class qn {
7850
8493
  constructor(e, t, i) {
7851
- this.scene = e, this.renderer = t, this.camera = i, this.isDiveModeEnabled = !1, this.currentVRMode = null, this.lighting = new Dn(e), this.particles = new xn(e), this.torch = new vn(e), this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.applyModeSettings();
8494
+ this.scene = e, this.renderer = t, this.camera = i, this.isDiveModeEnabled = !1, this.currentVRMode = null, this.lighting = new Hn(e), this.particles = new Vn(e), this.torch = new On(e), this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.applyModeSettings();
7852
8495
  }
7853
8496
  /**
7854
8497
  * Toggle between dive and survey modes
@@ -8009,7 +8652,7 @@ class Rn {
8009
8652
  this.lighting.dispose(), this.particles.dispose(), this.torch.dispose();
8010
8653
  }
8011
8654
  }
8012
- class Tn extends yt {
8655
+ class Kn extends je {
8013
8656
  /**
8014
8657
  * Creates a new ModelViewer instance
8015
8658
  *
@@ -8025,6 +8668,7 @@ class Tn extends yt {
8025
8668
  showStatus: { type: "boolean", default: !1 },
8026
8669
  showInfo: { type: "boolean", default: !1 },
8027
8670
  enableVR: { type: "boolean", default: !1 },
8671
+ enableAR: { type: "boolean", default: !1 },
8028
8672
  enableMeasurement: { type: "boolean", default: !0 },
8029
8673
  measurementTheme: { type: "string", default: "dark" },
8030
8674
  showMeasurementLabels: { type: "boolean", default: !1 },
@@ -8046,16 +8690,21 @@ class Tn extends yt {
8046
8690
  initialModel: { type: "string", default: null },
8047
8691
  initialPositions: { type: "object", default: null }
8048
8692
  };
8049
- this.config = new qe(i).validate(t), this.options = this.config, this.currentModelKey = null, this.belowViewer = null, this.ui = {}, this.measurementSystem = null, this.comfortGlyph = null, this.diveSystem = null, this.fullscreenButton = null, this.screenshotButton = null, this.lastComfortMode = null, this.isLoading = !1, this.loadingMessage = "", this.loadingModelName = "", this.loadingPercentage = 0, this.lastManualLoadingMessage = "", this.stageOverrideActive = !1, this.vrUpdateLoop = null, typeof window < "u" && (window.modelViewer = this), this.init();
8693
+ this.config = new Ke(i).validate(t), this.options = this.config, this.currentModelKey = null, this.belowViewer = null, this.ui = {}, this.measurementSystem = null, this.comfortGlyph = null, this.diveSystem = null, this.fullscreenButton = null, this.screenshotButton = null, this.lastComfortMode = null, this.isLoading = !1, this.loadingMessage = "", this.loadingModelName = "", this.loadingPercentage = 0, this.lastManualLoadingMessage = "", this.stageOverrideActive = !1, this.vrUpdateLoop = null, typeof window < "u" && (window.modelViewer = this), this.init();
8050
8694
  }
8051
8695
  init() {
8052
8696
  const e = {
8053
8697
  ...this.config.viewerConfig,
8054
- ...this.config.enableVR && { vr: { enabled: !0 } },
8698
+ // Enable VR only if AR is not enabled
8699
+ ...this.config.enableVR && !this.config.enableAR && { vr: { enabled: !0 } },
8700
+ // Enable AR if requested
8701
+ ...this.config.enableAR && { ar: { enabled: !0, ...this.config.viewerConfig?.ar || {} } },
8702
+ // Explicitly disable VR when AR is enabled
8703
+ ...this.config.enableAR && { vr: { enabled: !1 } },
8055
8704
  ...this.config.audioPath && { audioPath: this.config.audioPath },
8056
8705
  ...typeof this.config.enableVRAudio < "u" && { enableVRAudio: this.config.enableVRAudio }
8057
8706
  };
8058
- if (this.belowViewer = new Qn(this.container, e), this.setupEventForwarding(), this.belowViewer.on("initialized", () => {
8707
+ if (this.belowViewer = new _n(this.container, e), this.setupEventForwarding(), this.belowViewer.on("initialized", () => {
8059
8708
  this.setupFocusInteraction(), this._maybeAttachMeasurementSystem(), this._maybeAttachVRComfortGlyph(), this._maybeAttachDiveSystem(), this._maybeAttachScreenshotButton(), this._maybeAttachFullscreenButton();
8060
8709
  }), this.belowViewer.isInitialized && (this.setupFocusInteraction(), this._maybeAttachMeasurementSystem(), this._maybeAttachVRComfortGlyph(), this._maybeAttachDiveSystem(), this._maybeAttachScreenshotButton(), this._maybeAttachFullscreenButton()), Object.keys(this.config.models).length > 0 && (this.createUI(), this.populateDropdown(), this.config.autoLoadFirst)) {
8061
8710
  const t = Object.keys(this.config.models)[0];
@@ -8064,7 +8713,7 @@ class Tn extends yt {
8064
8713
  }
8065
8714
  _maybeAttachMeasurementSystem() {
8066
8715
  if (!this.config.enableMeasurement || this.measurementSystem) return;
8067
- this.measurementSystem = new Mn({
8716
+ this.measurementSystem = new Un({
8068
8717
  scene: this.belowViewer.sceneManager.scene,
8069
8718
  camera: this.belowViewer.cameraManager.camera,
8070
8719
  renderer: this.belowViewer.renderer,
@@ -8090,7 +8739,7 @@ class Tn extends yt {
8090
8739
  }
8091
8740
  async _maybeAttachVRComfortGlyph() {
8092
8741
  if (!(!this.config.enableVRComfortGlyph || this.comfortGlyph) && this.belowViewer.vrManager && this.belowViewer.vrManager.vrCore && (await this.belowViewer.vrManager.vrCore.checkVRSupported(), !!this.belowViewer.vrManager.vrCore.isVRSupported)) {
8093
- if (this.comfortGlyph = new xt(this.belowViewer.vrManager, {
8742
+ if (this.comfortGlyph = new Rt(this.belowViewer.vrManager, {
8094
8743
  position: "bottom-right",
8095
8744
  offsetX: 20,
8096
8745
  offsetY: 70
@@ -8111,7 +8760,7 @@ class Tn extends yt {
8111
8760
  }
8112
8761
  _maybeAttachDiveSystem() {
8113
8762
  if (!this.config.enableDiveSystem || this.diveSystem) return;
8114
- this.diveSystem = new Rn(
8763
+ this.diveSystem = new qn(
8115
8764
  this.belowViewer.sceneManager.scene,
8116
8765
  this.belowViewer.renderer,
8117
8766
  this.belowViewer.cameraManager.camera
@@ -8392,8 +9041,8 @@ class Tn extends yt {
8392
9041
  transparent: !0
8393
9042
  });
8394
9043
  this.vrLoadingSprite = new u.Sprite(p);
8395
- const C = 0.7, I = o / n;
8396
- this.vrLoadingSprite.scale.set(C * I, C, 1);
9044
+ const C = 0.7, E = o / n;
9045
+ this.vrLoadingSprite.scale.set(C * E, C, 1);
8397
9046
  }
8398
9047
  return this.vrLoadingSprite;
8399
9048
  }
@@ -8740,15 +9389,15 @@ class Tn extends yt {
8740
9389
  }
8741
9390
  }
8742
9391
  export {
8743
- Qn as BelowViewer,
8744
- js as Camera,
8745
- qe as ConfigValidator,
8746
- yt as EventSystem,
8747
- si as Line2,
8748
- Ct as LineGeometry,
8749
- He as LineMaterial,
8750
- V as ModelLoader,
8751
- Tn as ModelViewer,
8752
- Ds as Scene,
8753
- Bn as VRManager
9392
+ _n as BelowViewer,
9393
+ Ws as Camera,
9394
+ Ke as ConfigValidator,
9395
+ je as EventSystem,
9396
+ Ai as Line2,
9397
+ It as LineGeometry,
9398
+ Ve as LineMaterial,
9399
+ O as ModelLoader,
9400
+ Kn as ModelViewer,
9401
+ ks as Scene,
9402
+ Mn as VRManager
8754
9403
  };