@needle-tools/engine 5.1.9 → 5.1.10
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/CHANGELOG.md +6 -0
- package/SKILL.md +62 -4
- package/components.needle.json +1 -1
- package/dist/{needle-engine.bundle-XZ6cKssu.js → needle-engine.bundle-DP--RGAU.js} +3144 -3021
- package/dist/{needle-engine.bundle-CHq9xqXv.min.js → needle-engine.bundle-DZD-GG7l.min.js} +122 -121
- package/dist/{needle-engine.bundle-DYPk7VZg.umd.cjs → needle-engine.bundle-Dv5TidOk.umd.cjs} +132 -131
- package/dist/needle-engine.d.ts +90 -17
- package/dist/needle-engine.js +610 -606
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/three-examples.js +727 -781
- package/dist/three-examples.min.js +12 -12
- package/dist/three-examples.umd.cjs +9 -9
- package/lib/engine/api.d.ts +1 -1
- package/lib/engine/api.js +1 -1
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_init.js +2 -2
- package/lib/engine/engine_init.js.map +1 -1
- package/lib/engine/engine_license.d.ts +7 -7
- package/lib/engine/engine_license.js +71 -71
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_materialpropertyblock.d.ts +13 -4
- package/lib/engine/engine_materialpropertyblock.js +16 -5
- package/lib/engine/engine_materialpropertyblock.js.map +1 -1
- package/lib/engine/engine_networking_blob.js +3 -3
- package/lib/engine/engine_networking_blob.js.map +1 -1
- package/lib/engine/engine_utils_qrcode.js +2 -2
- package/lib/engine/engine_utils_qrcode.js.map +1 -1
- package/lib/engine/postprocessing/postprocessing.d.ts +18 -0
- package/lib/engine/postprocessing/postprocessing.js +31 -2
- package/lib/engine/postprocessing/postprocessing.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.js +2 -2
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
- package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
- package/lib/engine/xr/TempXRContext.js +2 -2
- package/lib/engine/xr/TempXRContext.js.map +1 -1
- package/lib/engine/xr/XRHandMeshModel.d.ts +31 -0
- package/lib/engine/xr/XRHandMeshModel.js +153 -0
- package/lib/engine/xr/XRHandMeshModel.js.map +1 -0
- package/lib/engine-components/ReflectionProbe.js +3 -3
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/RendererLightmap.js +1 -1
- package/lib/engine-components/RendererLightmap.js.map +1 -1
- package/lib/engine-components/SyncedRoom.js +5 -0
- package/lib/engine-components/SyncedRoom.js.map +1 -1
- package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +10 -2
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -1
- package/lib/engine-components/postprocessing/index.d.ts +4 -0
- package/lib/engine-components/postprocessing/index.js +7 -0
- package/lib/engine-components/postprocessing/index.js.map +1 -1
- package/lib/engine-components/utils/LookAt.d.ts +13 -4
- package/lib/engine-components/utils/LookAt.js +13 -4
- package/lib/engine-components/utils/LookAt.js.map +1 -1
- package/lib/engine-components/webxr/WebXR.js +1 -1
- package/lib/engine-components/webxr/WebXR.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +12 -7
- package/lib/engine-components/webxr/controllers/XRControllerModel.js.map +1 -1
- package/package.json +2 -2
- package/plugins/common/license.js +4 -4
- package/plugins/vite/license.js +4 -4
- package/src/engine/api.ts +1 -1
- package/src/engine/engine_init.ts +2 -2
- package/src/engine/engine_license.ts +68 -68
- package/src/engine/engine_materialpropertyblock.ts +17 -5
- package/src/engine/engine_networking_blob.ts +3 -3
- package/src/engine/engine_utils_qrcode.ts +2 -2
- package/src/engine/postprocessing/postprocessing.ts +32 -2
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
- package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
- package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
- package/src/engine/webcomponents/needle-engine.ts +2 -2
- package/src/engine/xr/TempXRContext.ts +2 -2
- package/src/engine/xr/XRHandMeshModel.ts +179 -0
- package/src/engine-components/ReflectionProbe.ts +3 -3
- package/src/engine-components/RendererLightmap.ts +1 -1
- package/src/engine-components/SyncedRoom.ts +5 -0
- package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +10 -2
- package/src/engine-components/postprocessing/index.ts +7 -0
- package/src/engine-components/utils/LookAt.ts +13 -4
- package/src/engine-components/webxr/WebXR.ts +1 -1
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +13 -7
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";const r=require("./three-core.umd.cjs");class ks extends r.Mesh{constructor(e,A,n,t=128){if(A<=0||n<=0||t<=0)throw new Error("GroundedSkybox height, radius, and resolution must be positive.");const i=new r.SphereGeometry(n,2*t,t);i.scale(1,1,-1);const s=i.getAttribute("position"),o=new r.Vector3;for(let c=0;c<s.count;++c)if(o.fromBufferAttribute(s,c),o.y<0){const g=-A*3/2,l=o.y<g?-A/o.y:1-o.y*o.y/(3*g*g);o.multiplyScalar(l),o.toArray(s.array,3*c)}s.needsUpdate=!0,super(i,new r.MeshBasicMaterial({map:e,depthWrite:!1}))}}function Ls(a,e,A=!0){if(!e||!e.isReady)throw new Error("BufferGeometryUtils: Initialized MikkTSpace library required.");if(!a.hasAttribute("position")||!a.hasAttribute("normal")||!a.hasAttribute("uv"))throw new Error('BufferGeometryUtils: Tangents require "position", "normal", and "uv" attributes.');function n(s){if(s.normalized||s.isInterleavedBufferAttribute){const o=new Float32Array(s.count*s.itemSize);for(let c=0,g=0;c<s.count;c++)o[g++]=s.getX(c),o[g++]=s.getY(c),s.itemSize>2&&(o[g++]=s.getZ(c));return o}return s.array instanceof Float32Array?s.array:new Float32Array(s.array)}const t=a.index?a.toNonIndexed():a,i=e.generateTangents(n(t.attributes.position),n(t.attributes.normal),n(t.attributes.uv));if(A)for(let s=3;s<i.length;s+=4)i[s]*=-1;return t.setAttribute("tangent",new r.BufferAttribute(i,4)),a!==t&&a.copy(t),a}function vs(a,e=!1){const A=a[0].index!==null,n=new Set(Object.keys(a[0].attributes)),t=new Set(Object.keys(a[0].morphAttributes)),i={},s={},o=a[0].morphTargetsRelative,c=new r.BufferGeometry;let g=0;for(let l=0;l<a.length;++l){const h=a[l];let I=0;if(A!==(h.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const B in h.attributes){if(!n.has(B))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+'. All geometries must have compatible attributes; make sure "'+B+'" attribute exists among all geometries, or in none of them.'),null;i[B]===void 0&&(i[B]=[]),i[B].push(h.attributes[B]),I++}if(I!==n.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". Make sure all geometries have the same number of attributes."),null;if(o!==h.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const B in h.morphAttributes){if(!t.has(B))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". .morphAttributes must be consistent throughout all geometries."),null;s[B]===void 0&&(s[B]=[]),s[B].push(h.morphAttributes[B])}if(e){let B;if(A)B=h.index.count;else if(h.attributes.position!==void 0)B=h.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". The geometry must have either an index or a position attribute"),null;c.addGroup(g,B,l),g+=B}}if(A){let l=0;const h=[];for(let I=0;I<a.length;++I){const B=a[I].index;for(let f=0;f<B.count;++f)h.push(B.getX(f)+l);l+=a[I].attributes.position.count}c.setIndex(h)}for(const l in i){const h=Jt(i[l]);if(!h)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+l+" attribute."),null;c.setAttribute(l,h)}for(const l in s){const h=s[l][0].length;if(h===0)break;c.morphAttributes=c.morphAttributes||{},c.morphAttributes[l]=[];for(let I=0;I<h;++I){const B=[];for(let C=0;C<s[l].length;++C)B.push(s[l][C][I]);const f=Jt(B);if(!f)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+l+" morphAttribute."),null;c.morphAttributes[l].push(f)}}return c}function Jt(a){let e,A,n,t=-1,i=0;for(let g=0;g<a.length;++g){const l=a[g];if(e===void 0&&(e=l.array.constructor),e!==l.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(A===void 0&&(A=l.itemSize),A!==l.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(n===void 0&&(n=l.normalized),n!==l.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(t===-1&&(t=l.gpuType),t!==l.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;i+=l.count*A}const s=new e(i),o=new r.BufferAttribute(s,A,n);let c=0;for(let g=0;g<a.length;++g){const l=a[g];if(l.isInterleavedBufferAttribute){const h=c/A;for(let I=0,B=l.count;I<B;I++)for(let f=0;f<A;f++){const C=l.getComponent(I,f);o.setComponent(I+h,f,C)}}else s.set(l.array,c);c+=l.count*A}return t!==void 0&&(o.gpuType=t),o}function Ns(a){return a.isInstancedInterleavedBufferAttribute||a.isInterleavedBufferAttribute?Bt(a):a.isInstancedBufferAttribute?new r.InstancedBufferAttribute().copy(a):new r.BufferAttribute().copy(a)}function Us(a){let e,A=0,n=0;for(let g=0,l=a.length;g<l;++g){const h=a[g];if(e===void 0&&(e=h.array.constructor),e!==h.array.constructor)return console.error("AttributeBuffers of different types cannot be interleaved"),null;A+=h.array.length,n+=h.itemSize}const t=new r.InterleavedBuffer(new e(A),n);let i=0;const s=[],o=["getX","getY","getZ","getW"],c=["setX","setY","setZ","setW"];for(let g=0,l=a.length;g<l;g++){const h=a[g],I=h.itemSize,B=h.count,f=new r.InterleavedBufferAttribute(t,I,i,h.normalized);s.push(f),i+=I;for(let C=0;C<B;C++)for(let E=0;E<I;E++)f[c[E]](C,h[o[E]](C))}return s}function Bt(a){const e=a.data.array.constructor,A=a.count,n=a.itemSize,t=a.normalized,i=new e(A*n);let s;a.isInstancedInterleavedBufferAttribute?s=new r.InstancedBufferAttribute(i,n,t,a.meshPerAttribute):s=new r.BufferAttribute(i,n,t);for(let o=0;o<A;o++)s.setX(o,a.getX(o)),n>=2&&s.setY(o,a.getY(o)),n>=3&&s.setZ(o,a.getZ(o)),n>=4&&s.setW(o,a.getW(o));return s}function _s(a){const e=a.attributes,A=a.morphTargets,n=new Map;for(const t in e){const i=e[t];i.isInterleavedBufferAttribute&&(n.has(i)||n.set(i,Bt(i)),e[t]=n.get(i))}for(const t in A){const i=A[t];i.isInterleavedBufferAttribute&&(n.has(i)||n.set(i,Bt(i)),A[t]=n.get(i))}}function Ps(a){let e=0;for(const n in a.attributes){const t=a.getAttribute(n);e+=t.count*t.itemSize*t.array.BYTES_PER_ELEMENT}const A=a.getIndex();return e+=A?A.count*A.itemSize*A.array.BYTES_PER_ELEMENT:0,e}function ci(a,e=1e-4){e=Math.max(e,Number.EPSILON);const A={},n=a.getIndex(),t=a.getAttribute("position"),i=n?n.count:t.count;let s=0;const o=Object.keys(a.attributes),c={},g={},l=[],h=["getX","getY","getZ","getW"],I=["setX","setY","setZ","setW"];for(let y=0,Q=o.length;y<Q;y++){const b=o[y],w=a.attributes[b];c[b]=new w.constructor(new w.array.constructor(w.count*w.itemSize),w.itemSize,w.normalized);const R=a.morphAttributes[b];R&&(g[b]||(g[b]=[]),R.forEach((F,D)=>{const M=new F.array.constructor(F.count*F.itemSize);g[b][D]=new F.constructor(M,F.itemSize,F.normalized)}))}const B=e*.5,f=Math.log10(1/e),C=Math.pow(10,f),E=B*C;for(let y=0;y<i;y++){const Q=n?n.getX(y):y;let b="";for(let w=0,R=o.length;w<R;w++){const F=o[w],D=a.getAttribute(F),M=D.itemSize;for(let N=0;N<M;N++)b+=`${~~(D[h[N]](Q)*C+E)},`}if(b in A)l.push(A[b]);else{for(let w=0,R=o.length;w<R;w++){const F=o[w],D=a.getAttribute(F),M=a.morphAttributes[F],N=D.itemSize,_=c[F],P=g[F];for(let z=0;z<N;z++){const U=h[z],q=I[z];if(_[q](s,D[U](Q)),M)for(let H=0,Z=M.length;H<Z;H++)P[H][q](s,M[H][U](Q))}}A[b]=s,l.push(s),s++}}const d=a.clone();for(const y in a.attributes){const Q=c[y];if(d.setAttribute(y,new Q.constructor(Q.array.slice(0,s*Q.itemSize),Q.itemSize,Q.normalized)),y in g)for(let b=0;b<g[y].length;b++){const w=g[y][b];d.morphAttributes[y][b]=new w.constructor(w.array.slice(0,s*w.itemSize),w.itemSize,w.normalized)}}return d.setIndex(l),d}function jt(a,e){if(e===r.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),a;if(e===r.TriangleFanDrawMode||e===r.TriangleStripDrawMode){let A=a.getIndex();if(A===null){const s=[],o=a.getAttribute("position");if(o!==void 0){for(let c=0;c<o.count;c++)s.push(c);a.setIndex(s),A=a.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),a}const n=A.count-2,t=[];if(e===r.TriangleFanDrawMode)for(let s=1;s<=n;s++)t.push(A.getX(0)),t.push(A.getX(s)),t.push(A.getX(s+1));else for(let s=0;s<n;s++)s%2===0?(t.push(A.getX(s)),t.push(A.getX(s+1)),t.push(A.getX(s+2))):(t.push(A.getX(s+2)),t.push(A.getX(s+1)),t.push(A.getX(s)));t.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const i=a.clone();return i.setIndex(t),i.clearGroups(),i}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),a}function Hs(a){const e=new r.Vector3,A=new r.Vector3,n=new r.Vector3,t=new r.Vector3,i=new r.Vector3,s=new r.Vector3,o=new r.Vector3,c=new r.Vector3,g=new r.Vector3;function l(ee,re,Ae,W,te,ge,he,ne){e.fromBufferAttribute(re,te),A.fromBufferAttribute(re,ge),n.fromBufferAttribute(re,he);const Te=ee.morphTargetInfluences;if(Ae&&Te){o.set(0,0,0),c.set(0,0,0),g.set(0,0,0);for(let Se=0,hA=Ae.length;Se<hA;Se++){const _e=Te[Se],Je=Ae[Se];_e!==0&&(t.fromBufferAttribute(Je,te),i.fromBufferAttribute(Je,ge),s.fromBufferAttribute(Je,he),W?(o.addScaledVector(t,_e),c.addScaledVector(i,_e),g.addScaledVector(s,_e)):(o.addScaledVector(t.sub(e),_e),c.addScaledVector(i.sub(A),_e),g.addScaledVector(s.sub(n),_e)))}e.add(o),A.add(c),n.add(g)}ee.isSkinnedMesh&&(ee.applyBoneTransform(te,e),ee.applyBoneTransform(ge,A),ee.applyBoneTransform(he,n)),ne[te*3+0]=e.x,ne[te*3+1]=e.y,ne[te*3+2]=e.z,ne[ge*3+0]=A.x,ne[ge*3+1]=A.y,ne[ge*3+2]=A.z,ne[he*3+0]=n.x,ne[he*3+1]=n.y,ne[he*3+2]=n.z}const h=a.geometry,I=a.material;let B,f,C;const E=h.index,d=h.attributes.position,y=h.morphAttributes.position,Q=h.morphTargetsRelative,b=h.attributes.normal,w=h.morphAttributes.position,R=h.groups,F=h.drawRange;let D,M,N,_,P,z,U;const q=new Float32Array(d.count*d.itemSize),H=new Float32Array(b.count*b.itemSize);if(E!==null)if(Array.isArray(I))for(D=0,N=R.length;D<N;D++)for(P=R[D],z=Math.max(P.start,F.start),U=Math.min(P.start+P.count,F.start+F.count),M=z,_=U;M<_;M+=3)B=E.getX(M),f=E.getX(M+1),C=E.getX(M+2),l(a,d,y,Q,B,f,C,q),l(a,b,w,Q,B,f,C,H);else for(z=Math.max(0,F.start),U=Math.min(E.count,F.start+F.count),D=z,N=U;D<N;D+=3)B=E.getX(D),f=E.getX(D+1),C=E.getX(D+2),l(a,d,y,Q,B,f,C,q),l(a,b,w,Q,B,f,C,H);else if(Array.isArray(I))for(D=0,N=R.length;D<N;D++)for(P=R[D],z=Math.max(P.start,F.start),U=Math.min(P.start+P.count,F.start+F.count),M=z,_=U;M<_;M+=3)B=M,f=M+1,C=M+2,l(a,d,y,Q,B,f,C,q),l(a,b,w,Q,B,f,C,H);else for(z=Math.max(0,F.start),U=Math.min(d.count,F.start+F.count),D=z,N=U;D<N;D+=3)B=D,f=D+1,C=D+2,l(a,d,y,Q,B,f,C,q),l(a,b,w,Q,B,f,C,H);const Z=new r.Float32BufferAttribute(q,3),se=new r.Float32BufferAttribute(H,3);return{positionAttribute:d,normalAttribute:b,morphedPositionAttribute:Z,morphedNormalAttribute:se}}function Os(a){if(a.groups.length===0)return console.warn("THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge."),a;let e=a.groups;if(e=e.sort((s,o)=>s.materialIndex!==o.materialIndex?s.materialIndex-o.materialIndex:s.start-o.start),a.getIndex()===null){const s=a.getAttribute("position"),o=[];for(let c=0;c<s.count;c+=3)o.push(c,c+1,c+2);a.setIndex(o)}const A=a.getIndex(),n=[];for(let s=0;s<e.length;s++){const o=e[s],c=o.start,g=c+o.count;for(let l=c;l<g;l++)n.push(A.getX(l))}a.dispose(),a.setIndex(n);let t=0;for(let s=0;s<e.length;s++){const o=e[s];o.start=t,t+=o.count}let i=e[0];a.groups=[i];for(let s=1;s<e.length;s++){const o=e[s];i.materialIndex===o.materialIndex?i.count+=o.count:(i=o,a.groups.push(i))}return a}function qs(a,e=Math.PI/3){const A=Math.cos(e),n=(1+1e-10)*100,t=[new r.Vector3,new r.Vector3,new r.Vector3],i=new r.Vector3,s=new r.Vector3,o=new r.Vector3,c=new r.Vector3;function g(C){const E=~~(C.x*n),d=~~(C.y*n),y=~~(C.z*n);return`${E},${d},${y}`}const l=a.index?a.toNonIndexed():a,h=l.attributes.position,I={};for(let C=0,E=h.count/3;C<E;C++){const d=3*C,y=t[0].fromBufferAttribute(h,d+0),Q=t[1].fromBufferAttribute(h,d+1),b=t[2].fromBufferAttribute(h,d+2);i.subVectors(b,Q),s.subVectors(y,Q);const w=new r.Vector3().crossVectors(i,s).normalize();for(let R=0;R<3;R++){const F=t[R],D=g(F);D in I||(I[D]=[]),I[D].push(w)}}const B=new Float32Array(h.count*3),f=new r.BufferAttribute(B,3,!1);for(let C=0,E=h.count/3;C<E;C++){const d=3*C,y=t[0].fromBufferAttribute(h,d+0),Q=t[1].fromBufferAttribute(h,d+1),b=t[2].fromBufferAttribute(h,d+2);i.subVectors(b,Q),s.subVectors(y,Q),o.crossVectors(i,s).normalize();for(let w=0;w<3;w++){const R=t[w],F=g(R),D=I[F];c.set(0,0,0);for(let M=0,N=D.length;M<N;M++){const _=D[M];o.dot(_)>A&&c.add(_)}c.normalize(),f.setXYZ(d+w,c.x,c.y,c.z)}}return l.setAttribute("normal",f),l}const Ks=Object.freeze(Object.defineProperty({__proto__:null,computeMikkTSpaceTangents:Ls,computeMorphedAttributes:Hs,deepCloneAttribute:Ns,deinterleaveAttribute:Bt,deinterleaveGeometry:_s,estimateBytesUsed:Ps,interleaveAttributes:Us,mergeAttributes:Jt,mergeGeometries:vs,mergeGroups:Os,mergeVertices:ci,toCreasedNormals:qs,toTrianglesDrawMode:jt},Symbol.toStringTag,{value:"Module"}));class sn extends r.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(A){return new zs(A)}),this.register(function(A){return new Xs(A)}),this.register(function(A){return new so(A)}),this.register(function(A){return new oo(A)}),this.register(function(A){return new ro(A)}),this.register(function(A){return new Zs(A)}),this.register(function(A){return new $s(A)}),this.register(function(A){return new eo(A)}),this.register(function(A){return new Ao(A)}),this.register(function(A){return new Vs(A)}),this.register(function(A){return new to(A)}),this.register(function(A){return new Ws(A)}),this.register(function(A){return new io(A)}),this.register(function(A){return new no(A)}),this.register(function(A){return new Js(A)}),this.register(function(A){return new ao(A)}),this.register(function(A){return new co(A)})}load(e,A,n,t){const i=this;let s;if(this.resourcePath!=="")s=this.resourcePath;else if(this.path!==""){const g=r.LoaderUtils.extractUrlBase(e);s=r.LoaderUtils.resolveURL(g,this.path)}else s=r.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);const o=function(g){t?t(g):console.error(g),i.manager.itemError(e),i.manager.itemEnd(e)},c=new r.FileLoader(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(g){try{i.parse(g,s,function(l){A(l),i.manager.itemEnd(e)},o)}catch(l){o(l)}},n,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,A,n,t){let i,s;const o={},c={},g=new TextDecoder;if(typeof e=="string")try{i=JSON.parse(e)}catch(h){s=e,t&&t(h);return}else if(e instanceof ArrayBuffer)if(g.decode(new Uint8Array(e,0,4))===gi){try{o[ae.KHR_BINARY_GLTF]=new go(e)}catch(I){t&&t(I);return}try{i=JSON.parse(o[ae.KHR_BINARY_GLTF].content)}catch(I){s=o[ae.KHR_BINARY_GLTF].content,t&&t(I);return}}else try{i=JSON.parse(g.decode(e))}catch(I){s=g.decode(e),t&&t(I);return}else i=e;if(i.asset===void 0||i.asset.version[0]<2){t&&t(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}this.json=i,this.jsonErrorData=s;const l=new yo(i,{path:A||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h<this.pluginCallbacks.length;h++){const I=this.pluginCallbacks[h](l);I.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),c[I.name]=I,o[I.name]=!0}if(i.extensionsUsed)for(let h=0;h<i.extensionsUsed.length;++h){const I=i.extensionsUsed[h],B=i.extensionsRequired||[];switch(I){case ae.KHR_MATERIALS_UNLIT:o[I]=new js;break;case ae.KHR_DRACO_MESH_COMPRESSION:o[I]=new lo(i,this.dracoLoader);break;case ae.KHR_TEXTURE_TRANSFORM:o[I]=new ho;break;case ae.KHR_MESH_QUANTIZATION:o[I]=new Io;break;default:B.indexOf(I)>=0&&c[I]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+I+'".')}}l.setExtensions(o),l.setPlugins(c),l.parse(n,t)}parseAsync(e,A){const n=this;return new Promise(function(t,i){n.parse(e,A,t,i)})}}function Ys(){let a={};return{get:function(e){return a[e]},add:function(e,A){a[e]=A},remove:function(e){delete a[e]},removeAll:function(){a={}}}}const ae={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class Js{constructor(e){this.parser=e,this.name=ae.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,A=this.parser.json.nodes||[];for(let n=0,t=A.length;n<t;n++){const i=A[n];i.extensions&&i.extensions[this.name]&&i.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,i.extensions[this.name].light)}}_loadLight(e){const A=this.parser,n="light:"+e;let t=A.cache.get(n);if(t)return t;const i=A.json,c=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let g;const l=new r.Color(16777215);c.color!==void 0&&l.setRGB(c.color[0],c.color[1],c.color[2],r.LinearSRGBColorSpace);const h=c.range!==void 0?c.range:0;switch(c.type){case"directional":g=new r.DirectionalLight(l),g.target.position.set(0,0,-1),g.add(g.target);break;case"point":g=new r.PointLight(l),g.distance=h;break;case"spot":g=new r.SpotLight(l),g.distance=h,c.spot=c.spot||{},c.spot.innerConeAngle=c.spot.innerConeAngle!==void 0?c.spot.innerConeAngle:0,c.spot.outerConeAngle=c.spot.outerConeAngle!==void 0?c.spot.outerConeAngle:Math.PI/4,g.angle=c.spot.outerConeAngle,g.penumbra=1-c.spot.innerConeAngle/c.spot.outerConeAngle,g.target.position.set(0,0,-1),g.add(g.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+c.type)}return g.position.set(0,0,0),g.decay=2,gA(g,c),c.intensity!==void 0&&(g.intensity=c.intensity),g.name=A.createUniqueName(c.name||"light_"+e),t=Promise.resolve(g),A.cache.add(n,t),t}getDependency(e,A){if(e==="light")return this._loadLight(A)}createNodeAttachment(e){const A=this,n=this.parser,i=n.json.nodes[e],o=(i.extensions&&i.extensions[this.name]||{}).light;return o===void 0?null:this._loadLight(o).then(function(c){return n._getNodeRef(A.cache,o,c)})}}let js=class{constructor(){this.name=ae.KHR_MATERIALS_UNLIT}getMaterialType(){return r.MeshBasicMaterial}extendParams(e,A,n){const t=[];e.color=new r.Color(1,1,1),e.opacity=1;const i=A.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const s=i.baseColorFactor;e.color.setRGB(s[0],s[1],s[2],r.LinearSRGBColorSpace),e.opacity=s[3]}i.baseColorTexture!==void 0&&t.push(n.assignTexture(e,"map",i.baseColorTexture,r.SRGBColorSpace))}return Promise.all(t)}},Vs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,A){const t=this.parser.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=t.extensions[this.name].emissiveStrength;return i!==void 0&&(A.emissiveIntensity=i),Promise.resolve()}},zs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];if(s.clearcoatFactor!==void 0&&(A.clearcoat=s.clearcoatFactor),s.clearcoatTexture!==void 0&&i.push(n.assignTexture(A,"clearcoatMap",s.clearcoatTexture)),s.clearcoatRoughnessFactor!==void 0&&(A.clearcoatRoughness=s.clearcoatRoughnessFactor),s.clearcoatRoughnessTexture!==void 0&&i.push(n.assignTexture(A,"clearcoatRoughnessMap",s.clearcoatRoughnessTexture)),s.clearcoatNormalTexture!==void 0&&(i.push(n.assignTexture(A,"clearcoatNormalMap",s.clearcoatNormalTexture)),s.clearcoatNormalTexture.scale!==void 0)){const o=s.clearcoatNormalTexture.scale;A.clearcoatNormalScale=new r.Vector2(o,o)}return Promise.all(i)}},Xs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_DISPERSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const t=this.parser.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=t.extensions[this.name];return A.dispersion=i.dispersion!==void 0?i.dispersion:0,Promise.resolve()}},Ws=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return s.iridescenceFactor!==void 0&&(A.iridescence=s.iridescenceFactor),s.iridescenceTexture!==void 0&&i.push(n.assignTexture(A,"iridescenceMap",s.iridescenceTexture)),s.iridescenceIor!==void 0&&(A.iridescenceIOR=s.iridescenceIor),A.iridescenceThicknessRange===void 0&&(A.iridescenceThicknessRange=[100,400]),s.iridescenceThicknessMinimum!==void 0&&(A.iridescenceThicknessRange[0]=s.iridescenceThicknessMinimum),s.iridescenceThicknessMaximum!==void 0&&(A.iridescenceThicknessRange[1]=s.iridescenceThicknessMaximum),s.iridescenceThicknessTexture!==void 0&&i.push(n.assignTexture(A,"iridescenceThicknessMap",s.iridescenceThicknessTexture)),Promise.all(i)}},Zs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_SHEEN}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[];A.sheenColor=new r.Color(0,0,0),A.sheenRoughness=0,A.sheen=1;const s=t.extensions[this.name];if(s.sheenColorFactor!==void 0){const o=s.sheenColorFactor;A.sheenColor.setRGB(o[0],o[1],o[2],r.LinearSRGBColorSpace)}return s.sheenRoughnessFactor!==void 0&&(A.sheenRoughness=s.sheenRoughnessFactor),s.sheenColorTexture!==void 0&&i.push(n.assignTexture(A,"sheenColorMap",s.sheenColorTexture,r.SRGBColorSpace)),s.sheenRoughnessTexture!==void 0&&i.push(n.assignTexture(A,"sheenRoughnessMap",s.sheenRoughnessTexture)),Promise.all(i)}},$s=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return s.transmissionFactor!==void 0&&(A.transmission=s.transmissionFactor),s.transmissionTexture!==void 0&&i.push(n.assignTexture(A,"transmissionMap",s.transmissionTexture)),Promise.all(i)}},eo=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_VOLUME}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];A.thickness=s.thicknessFactor!==void 0?s.thicknessFactor:0,s.thicknessTexture!==void 0&&i.push(n.assignTexture(A,"thicknessMap",s.thicknessTexture)),A.attenuationDistance=s.attenuationDistance||1/0;const o=s.attenuationColor||[1,1,1];return A.attenuationColor=new r.Color().setRGB(o[0],o[1],o[2],r.LinearSRGBColorSpace),Promise.all(i)}},Ao=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_IOR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const t=this.parser.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=t.extensions[this.name];return A.ior=i.ior!==void 0?i.ior:1.5,Promise.resolve()}},to=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_SPECULAR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];A.specularIntensity=s.specularFactor!==void 0?s.specularFactor:1,s.specularTexture!==void 0&&i.push(n.assignTexture(A,"specularIntensityMap",s.specularTexture));const o=s.specularColorFactor||[1,1,1];return A.specularColor=new r.Color().setRGB(o[0],o[1],o[2],r.LinearSRGBColorSpace),s.specularColorTexture!==void 0&&i.push(n.assignTexture(A,"specularColorMap",s.specularColorTexture,r.SRGBColorSpace)),Promise.all(i)}},no=class{constructor(e){this.parser=e,this.name=ae.EXT_MATERIALS_BUMP}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return A.bumpScale=s.bumpFactor!==void 0?s.bumpFactor:1,s.bumpTexture!==void 0&&i.push(n.assignTexture(A,"bumpMap",s.bumpTexture)),Promise.all(i)}},io=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return s.anisotropyStrength!==void 0&&(A.anisotropy=s.anisotropyStrength),s.anisotropyRotation!==void 0&&(A.anisotropyRotation=s.anisotropyRotation),s.anisotropyTexture!==void 0&&i.push(n.assignTexture(A,"anisotropyMap",s.anisotropyTexture)),Promise.all(i)}};class so{constructor(e){this.parser=e,this.name=ae.KHR_TEXTURE_BASISU}loadTexture(e){const A=this.parser,n=A.json,t=n.textures[e];if(!t.extensions||!t.extensions[this.name])return null;const i=t.extensions[this.name],s=A.options.ktx2Loader;if(!s){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return A.loadTextureImage(e,i.source,s)}}class oo{constructor(e){this.parser=e,this.name=ae.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const A=this.name,n=this.parser,t=n.json,i=t.textures[e];if(!i.extensions||!i.extensions[A])return null;const s=i.extensions[A],o=t.images[s.source];let c=n.textureLoader;if(o.uri){const g=n.options.manager.getHandler(o.uri);g!==null&&(c=g)}return this.detectSupport().then(function(g){if(g)return n.loadTextureImage(e,s.source,c);if(t.extensionsRequired&&t.extensionsRequired.indexOf(A)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const A=new Image;A.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",A.onload=A.onerror=function(){e(A.height===1)}})),this.isSupported}}class ro{constructor(e){this.parser=e,this.name=ae.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const A=this.name,n=this.parser,t=n.json,i=t.textures[e];if(!i.extensions||!i.extensions[A])return null;const s=i.extensions[A],o=t.images[s.source];let c=n.textureLoader;if(o.uri){const g=n.options.manager.getHandler(o.uri);g!==null&&(c=g)}return this.detectSupport().then(function(g){if(g)return n.loadTextureImage(e,s.source,c);if(t.extensionsRequired&&t.extensionsRequired.indexOf(A)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const A=new Image;A.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",A.onload=A.onerror=function(){e(A.height===1)}})),this.isSupported}}class ao{constructor(e){this.name=ae.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const A=this.parser.json,n=A.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const t=n.extensions[this.name],i=this.parser.getDependency("buffer",t.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(A.extensionsRequired&&A.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return i.then(function(o){const c=t.byteOffset||0,g=t.byteLength||0,l=t.count,h=t.byteStride,I=new Uint8Array(o,c,g);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(l,h,I,t.mode,t.filter).then(function(B){return B.buffer}):s.ready.then(function(){const B=new ArrayBuffer(l*h);return s.decodeGltfBuffer(new Uint8Array(B),l,h,I,t.mode,t.filter),B})})}else return null}}let co=class{constructor(e){this.name=ae.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const A=this.parser.json,n=A.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;const t=A.meshes[n.mesh];for(const g of t.primitives)if(g.mode!==We.TRIANGLES&&g.mode!==We.TRIANGLE_STRIP&&g.mode!==We.TRIANGLE_FAN&&g.mode!==void 0)return null;const s=n.extensions[this.name].attributes,o=[],c={};for(const g in s)o.push(this.parser.getDependency("accessor",s[g]).then(l=>(c[g]=l,c[g])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(g=>{const l=g.pop(),h=l.isGroup?l.children:[l],I=g[0].count,B=[];for(const f of h){const C=new r.Matrix4,E=new r.Vector3,d=new r.Quaternion,y=new r.Vector3(1,1,1),Q=new r.InstancedMesh(f.geometry,f.material,I);for(let b=0;b<I;b++)c.TRANSLATION&&E.fromBufferAttribute(c.TRANSLATION,b),c.ROTATION&&d.fromBufferAttribute(c.ROTATION,b),c.SCALE&&y.fromBufferAttribute(c.SCALE,b),Q.setMatrixAt(b,C.compose(E,d,y));for(const b in c)if(b==="_COLOR_0"){const w=c[b];Q.instanceColor=new r.InstancedBufferAttribute(w.array,w.itemSize,w.normalized)}else b!=="TRANSLATION"&&b!=="ROTATION"&&b!=="SCALE"&&f.geometry.setAttribute(b,c[b]);r.Object3D.prototype.copy.call(Q,f),this.parser.assignFinalMaterial(Q),B.push(Q)}return l.isGroup?(l.clear(),l.add(...B),l):B[0]}))}};const gi="glTF",TA=12,En={JSON:1313821514,BIN:5130562};class go{constructor(e){this.name=ae.KHR_BINARY_GLTF,this.content=null,this.body=null;const A=new DataView(e,0,TA),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:A.getUint32(4,!0),length:A.getUint32(8,!0)},this.header.magic!==gi)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const t=this.header.length-TA,i=new DataView(e,TA);let s=0;for(;s<t;){const o=i.getUint32(s,!0);s+=4;const c=i.getUint32(s,!0);if(s+=4,c===En.JSON){const g=new Uint8Array(e,TA+s,o);this.content=n.decode(g)}else if(c===En.BIN){const g=TA+s;this.body=e.slice(g,g+o)}s+=o}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class lo{constructor(e,A){if(!A)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=ae.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=A,this.dracoLoader.preload()}decodePrimitive(e,A){const n=this.json,t=this.dracoLoader,i=e.extensions[this.name].bufferView,s=e.extensions[this.name].attributes,o={},c={},g={};for(const l in s){const h=Vt[l]||l.toLowerCase();o[h]=s[l]}for(const l in e.attributes){const h=Vt[l]||l.toLowerCase();if(s[l]!==void 0){const I=n.accessors[e.attributes[l]],B=FA[I.componentType];g[h]=B.name,c[h]=I.normalized===!0}}return A.getDependency("bufferView",i).then(function(l){return new Promise(function(h,I){t.decodeDracoFile(l,function(B){for(const f in B.attributes){const C=B.attributes[f],E=c[f];E!==void 0&&(C.normalized=E)}h(B)},o,g,r.LinearSRGBColorSpace,I)})})}}class ho{constructor(){this.name=ae.KHR_TEXTURE_TRANSFORM}extendTexture(e,A){return(A.texCoord===void 0||A.texCoord===e.channel)&&A.offset===void 0&&A.rotation===void 0&&A.scale===void 0||(e=e.clone(),A.texCoord!==void 0&&(e.channel=A.texCoord),A.offset!==void 0&&e.offset.fromArray(A.offset),A.rotation!==void 0&&(e.rotation=A.rotation),A.scale!==void 0&&e.repeat.fromArray(A.scale),e.needsUpdate=!0),e}}class Io{constructor(){this.name=ae.KHR_MESH_QUANTIZATION}}class li extends r.Interpolant{constructor(e,A,n,t){super(e,A,n,t)}copySampleValue_(e){const A=this.resultBuffer,n=this.sampleValues,t=this.valueSize,i=e*t*3+t;for(let s=0;s!==t;s++)A[s]=n[i+s];return A}interpolate_(e,A,n,t){const i=this.resultBuffer,s=this.sampleValues,o=this.valueSize,c=o*2,g=o*3,l=t-A,h=(n-A)/l,I=h*h,B=I*h,f=e*g,C=f-g,E=-2*B+3*I,d=B-I,y=1-E,Q=d-I+h;for(let b=0;b!==o;b++){const w=s[C+b+o],R=s[C+b+c]*l,F=s[f+b+o],D=s[f+b]*l;i[b]=y*w+Q*R+E*F+d*D}return i}}const uo=new r.Quaternion;class Bo extends li{interpolate_(e,A,n,t){const i=super.interpolate_(e,A,n,t);return uo.fromArray(i).normalize().toArray(i),i}}const We={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},FA={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},dn={9728:r.NearestFilter,9729:r.LinearFilter,9984:r.NearestMipmapNearestFilter,9985:r.LinearMipmapNearestFilter,9986:r.NearestMipmapLinearFilter,9987:r.LinearMipmapLinearFilter},Qn={33071:r.ClampToEdgeWrapping,33648:r.MirroredRepeatWrapping,10497:r.RepeatWrapping},dt={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Vt={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},uA={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},fo={CUBICSPLINE:void 0,LINEAR:r.InterpolateLinear,STEP:r.InterpolateDiscrete},Qt={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function Co(a){return a.DefaultMaterial===void 0&&(a.DefaultMaterial=new r.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:r.FrontSide})),a.DefaultMaterial}function dA(a,e,A){for(const n in A.extensions)a[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=A.extensions[n])}function gA(a,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(a.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function po(a,e,A){let n=!1,t=!1,i=!1;for(let g=0,l=e.length;g<l;g++){const h=e[g];if(h.POSITION!==void 0&&(n=!0),h.NORMAL!==void 0&&(t=!0),h.COLOR_0!==void 0&&(i=!0),n&&t&&i)break}if(!n&&!t&&!i)return Promise.resolve(a);const s=[],o=[],c=[];for(let g=0,l=e.length;g<l;g++){const h=e[g];if(n){const I=h.POSITION!==void 0?A.getDependency("accessor",h.POSITION):a.attributes.position;s.push(I)}if(t){const I=h.NORMAL!==void 0?A.getDependency("accessor",h.NORMAL):a.attributes.normal;o.push(I)}if(i){const I=h.COLOR_0!==void 0?A.getDependency("accessor",h.COLOR_0):a.attributes.color;c.push(I)}}return Promise.all([Promise.all(s),Promise.all(o),Promise.all(c)]).then(function(g){const l=g[0],h=g[1],I=g[2];return n&&(a.morphAttributes.position=l),t&&(a.morphAttributes.normal=h),i&&(a.morphAttributes.color=I),a.morphTargetsRelative=!0,a})}function Eo(a,e){if(a.updateMorphTargets(),e.weights!==void 0)for(let A=0,n=e.weights.length;A<n;A++)a.morphTargetInfluences[A]=e.weights[A];if(e.extras&&Array.isArray(e.extras.targetNames)){const A=e.extras.targetNames;if(a.morphTargetInfluences.length===A.length){a.morphTargetDictionary={};for(let n=0,t=A.length;n<t;n++)a.morphTargetDictionary[A[n]]=n}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function Qo(a){let e;const A=a.extensions&&a.extensions[ae.KHR_DRACO_MESH_COMPRESSION];if(A?e="draco:"+A.bufferView+":"+A.indices+":"+mt(A.attributes):e=a.indices+":"+mt(a.attributes)+":"+a.mode,a.targets!==void 0)for(let n=0,t=a.targets.length;n<t;n++)e+=":"+mt(a.targets[n]);return e}function mt(a){let e="";const A=Object.keys(a).sort();for(let n=0,t=A.length;n<t;n++)e+=A[n]+":"+a[A[n]]+";";return e}function zt(a){switch(a){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function mo(a){return a.search(/\.jpe?g($|\?)/i)>0||a.search(/^data\:image\/jpeg/)===0?"image/jpeg":a.search(/\.webp($|\?)/i)>0||a.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const bo=new r.Matrix4;class yo{constructor(e={},A={}){this.json=e,this.extensions={},this.plugins={},this.options=A,this.cache=new Ys,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,t=-1,i=!1,s=-1;if(typeof navigator<"u"){const o=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(o)===!0;const c=o.match(/Version\/(\d+)/);t=n&&c?parseInt(c[1],10):-1,i=o.indexOf("Firefox")>-1,s=i?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||n&&t<17||i&&s<98?this.textureLoader=new r.TextureLoader(this.options.manager):this.textureLoader=new r.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new r.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,A){const n=this,t=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(s){return s._markDefs&&s._markDefs()}),Promise.all(this._invokeAll(function(s){return s.beforeRoot&&s.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(s){const o={scene:s[0][t.scene||0],scenes:s[0],animations:s[1],cameras:s[2],asset:t.asset,parser:n,userData:{}};return dA(i,o,t),gA(o,t),Promise.all(n._invokeAll(function(c){return c.afterRoot&&c.afterRoot(o)})).then(function(){for(const c of o.scenes)c.updateMatrixWorld();e(o)})}).catch(A)}_markDefs(){const e=this.json.nodes||[],A=this.json.skins||[],n=this.json.meshes||[];for(let t=0,i=A.length;t<i;t++){const s=A[t].joints;for(let o=0,c=s.length;o<c;o++)e[s[o]].isBone=!0}for(let t=0,i=e.length;t<i;t++){const s=e[t];s.mesh!==void 0&&(this._addNodeRef(this.meshCache,s.mesh),s.skin!==void 0&&(n[s.mesh].isSkinnedMesh=!0)),s.camera!==void 0&&this._addNodeRef(this.cameraCache,s.camera)}}_addNodeRef(e,A){A!==void 0&&(e.refs[A]===void 0&&(e.refs[A]=e.uses[A]=0),e.refs[A]++)}_getNodeRef(e,A,n){if(e.refs[A]<=1)return n;const t=n.clone(),i=(s,o)=>{const c=this.associations.get(s);c!=null&&this.associations.set(o,c);for(const[g,l]of s.children.entries())i(l,o.children[g])};return i(n,t),t.name+="_instance_"+e.uses[A]++,t}_invokeOne(e){const A=Object.values(this.plugins);A.push(this);for(let n=0;n<A.length;n++){const t=e(A[n]);if(t)return t}return null}_invokeAll(e){const A=Object.values(this.plugins);A.unshift(this);const n=[];for(let t=0;t<A.length;t++){const i=e(A[t]);i&&n.push(i)}return n}getDependency(e,A){const n=e+":"+A;let t=this.cache.get(n);if(!t){switch(e){case"scene":t=this.loadScene(A);break;case"node":t=this._invokeOne(function(i){return i.loadNode&&i.loadNode(A)});break;case"mesh":t=this._invokeOne(function(i){return i.loadMesh&&i.loadMesh(A)});break;case"accessor":t=this.loadAccessor(A);break;case"bufferView":t=this._invokeOne(function(i){return i.loadBufferView&&i.loadBufferView(A)});break;case"buffer":t=this.loadBuffer(A);break;case"material":t=this._invokeOne(function(i){return i.loadMaterial&&i.loadMaterial(A)});break;case"texture":t=this._invokeOne(function(i){return i.loadTexture&&i.loadTexture(A)});break;case"skin":t=this.loadSkin(A);break;case"animation":t=this._invokeOne(function(i){return i.loadAnimation&&i.loadAnimation(A)});break;case"camera":t=this.loadCamera(A);break;default:if(t=this._invokeOne(function(i){return i!=this&&i.getDependency&&i.getDependency(e,A)}),!t)throw new Error("Unknown type: "+e);break}this.cache.add(n,t)}return t}getDependencies(e){let A=this.cache.get(e);if(!A){const n=this,t=this.json[e+(e==="mesh"?"es":"s")]||[];A=Promise.all(t.map(function(i,s){return n.getDependency(e,s)})),this.cache.add(e,A)}return A}loadBuffer(e){const A=this.json.buffers[e],n=this.fileLoader;if(A.type&&A.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+A.type+" buffer type is not supported.");if(A.uri===void 0&&e===0)return Promise.resolve(this.extensions[ae.KHR_BINARY_GLTF].body);const t=this.options;return new Promise(function(i,s){n.load(r.LoaderUtils.resolveURL(A.uri,t.path),i,void 0,function(){s(new Error('THREE.GLTFLoader: Failed to load buffer "'+A.uri+'".'))})})}loadBufferView(e){const A=this.json.bufferViews[e];return this.getDependency("buffer",A.buffer).then(function(n){const t=A.byteLength||0,i=A.byteOffset||0;return n.slice(i,i+t)})}loadAccessor(e){const A=this,n=this.json,t=this.json.accessors[e];if(t.bufferView===void 0&&t.sparse===void 0){const s=dt[t.type],o=FA[t.componentType],c=t.normalized===!0,g=new o(t.count*s);return Promise.resolve(new r.BufferAttribute(g,s,c))}const i=[];return t.bufferView!==void 0?i.push(this.getDependency("bufferView",t.bufferView)):i.push(null),t.sparse!==void 0&&(i.push(this.getDependency("bufferView",t.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",t.sparse.values.bufferView))),Promise.all(i).then(function(s){const o=s[0],c=dt[t.type],g=FA[t.componentType],l=g.BYTES_PER_ELEMENT,h=l*c,I=t.byteOffset||0,B=t.bufferView!==void 0?n.bufferViews[t.bufferView].byteStride:void 0,f=t.normalized===!0;let C,E;if(B&&B!==h){const d=Math.floor(I/B),y="InterleavedBuffer:"+t.bufferView+":"+t.componentType+":"+d+":"+t.count;let Q=A.cache.get(y);Q||(C=new g(o,d*B,t.count*B/l),Q=new r.InterleavedBuffer(C,B/l),A.cache.add(y,Q)),E=new r.InterleavedBufferAttribute(Q,c,I%B/l,f)}else o===null?C=new g(t.count*c):C=new g(o,I,t.count*c),E=new r.BufferAttribute(C,c,f);if(t.sparse!==void 0){const d=dt.SCALAR,y=FA[t.sparse.indices.componentType],Q=t.sparse.indices.byteOffset||0,b=t.sparse.values.byteOffset||0,w=new y(s[1],Q,t.sparse.count*d),R=new g(s[2],b,t.sparse.count*c);o!==null&&(E=new r.BufferAttribute(E.array.slice(),E.itemSize,E.normalized)),E.normalized=!1;for(let F=0,D=w.length;F<D;F++){const M=w[F];if(E.setX(M,R[F*c]),c>=2&&E.setY(M,R[F*c+1]),c>=3&&E.setZ(M,R[F*c+2]),c>=4&&E.setW(M,R[F*c+3]),c>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}E.normalized=f}return E})}loadTexture(e){const A=this.json,n=this.options,i=A.textures[e].source,s=A.images[i];let o=this.textureLoader;if(s.uri){const c=n.manager.getHandler(s.uri);c!==null&&(o=c)}return this.loadTextureImage(e,i,o)}loadTextureImage(e,A,n){const t=this,i=this.json,s=i.textures[e],o=i.images[A],c=(o.uri||o.bufferView)+":"+s.sampler;if(this.textureCache[c])return this.textureCache[c];const g=this.loadImageSource(A,n).then(function(l){l.flipY=!1,l.name=s.name||o.name||"",l.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(l.name=o.uri);const I=(i.samplers||{})[s.sampler]||{};return l.magFilter=dn[I.magFilter]||r.LinearFilter,l.minFilter=dn[I.minFilter]||r.LinearMipmapLinearFilter,l.wrapS=Qn[I.wrapS]||r.RepeatWrapping,l.wrapT=Qn[I.wrapT]||r.RepeatWrapping,l.anisotropy=4,t.associations.set(l,{textures:e}),l}).catch(function(){return null});return this.textureCache[c]=g,g}loadImageSource(e,A){const n=this,t=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(h=>h.clone());const s=t.images[e],o=self.URL||self.webkitURL;let c=s.uri||"",g=!1;if(s.bufferView!==void 0)c=n.getDependency("bufferView",s.bufferView).then(function(h){g=!0;const I=new Blob([h],{type:s.mimeType});return c=o.createObjectURL(I),c});else if(s.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(c).then(function(h){return new Promise(function(I,B){let f=I;A.isImageBitmapLoader===!0&&(f=function(C){const E=new r.Texture(C);E.needsUpdate=!0,I(E)}),A.load(r.LoaderUtils.resolveURL(h,i.path),f,void 0,B)})}).then(function(h){return g===!0&&o.revokeObjectURL(c),gA(h,s),h.userData.mimeType=s.mimeType||mo(s.uri),h}).catch(function(h){throw console.error("THREE.GLTFLoader: Couldn't load texture",c),h});return this.sourceCache[e]=l,l}assignTexture(e,A,n,t){const i=this;return this.getDependency("texture",n.index).then(function(s){if(!s)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(s=s.clone(),s.channel=n.texCoord),i.extensions[ae.KHR_TEXTURE_TRANSFORM]){const o=n.extensions!==void 0?n.extensions[ae.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const c=i.associations.get(s);s=i.extensions[ae.KHR_TEXTURE_TRANSFORM].extendTexture(s,o),i.associations.set(s,c)}}return t!==void 0&&(s.colorSpace=t),e[A]=s,s})}assignFinalMaterial(e){const A=e.geometry;let n=e.material;const t=A.attributes.tangent===void 0,i=A.attributes.color!==void 0,s=A.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+n.uuid;let c=this.cache.get(o);c||(c=new r.PointsMaterial,r.Material.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,c.sizeAttenuation=!1,this.cache.add(o,c)),n=c}else if(e.isLine){const o="LineBasicMaterial:"+n.uuid;let c=this.cache.get(o);c||(c=new r.LineBasicMaterial,r.Material.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,this.cache.add(o,c)),n=c}if(t||i||s){let o="ClonedMaterial:"+n.uuid+":";t&&(o+="derivative-tangents:"),i&&(o+="vertex-colors:"),s&&(o+="flat-shading:");let c=this.cache.get(o);c||(c=n.clone(),i&&(c.vertexColors=!0),s&&(c.flatShading=!0),t&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(o,c),this.associations.set(c,this.associations.get(n))),n=c}e.material=n}getMaterialType(){return r.MeshStandardMaterial}loadMaterial(e){const A=this,n=this.json,t=this.extensions,i=n.materials[e];let s;const o={},c=i.extensions||{},g=[];if(c[ae.KHR_MATERIALS_UNLIT]){const h=t[ae.KHR_MATERIALS_UNLIT];s=h.getMaterialType(),g.push(h.extendParams(o,i,A))}else{const h=i.pbrMetallicRoughness||{};if(o.color=new r.Color(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){const I=h.baseColorFactor;o.color.setRGB(I[0],I[1],I[2],r.LinearSRGBColorSpace),o.opacity=I[3]}h.baseColorTexture!==void 0&&g.push(A.assignTexture(o,"map",h.baseColorTexture,r.SRGBColorSpace)),o.metalness=h.metallicFactor!==void 0?h.metallicFactor:1,o.roughness=h.roughnessFactor!==void 0?h.roughnessFactor:1,h.metallicRoughnessTexture!==void 0&&(g.push(A.assignTexture(o,"metalnessMap",h.metallicRoughnessTexture)),g.push(A.assignTexture(o,"roughnessMap",h.metallicRoughnessTexture))),s=this._invokeOne(function(I){return I.getMaterialType&&I.getMaterialType(e)}),g.push(Promise.all(this._invokeAll(function(I){return I.extendMaterialParams&&I.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=r.DoubleSide);const l=i.alphaMode||Qt.OPAQUE;if(l===Qt.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===Qt.MASK&&(o.alphaTest=i.alphaCutoff!==void 0?i.alphaCutoff:.5)),i.normalTexture!==void 0&&s!==r.MeshBasicMaterial&&(g.push(A.assignTexture(o,"normalMap",i.normalTexture)),o.normalScale=new r.Vector2(1,1),i.normalTexture.scale!==void 0)){const h=i.normalTexture.scale;o.normalScale.set(h,h)}if(i.occlusionTexture!==void 0&&s!==r.MeshBasicMaterial&&(g.push(A.assignTexture(o,"aoMap",i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&s!==r.MeshBasicMaterial){const h=i.emissiveFactor;o.emissive=new r.Color().setRGB(h[0],h[1],h[2],r.LinearSRGBColorSpace)}return i.emissiveTexture!==void 0&&s!==r.MeshBasicMaterial&&g.push(A.assignTexture(o,"emissiveMap",i.emissiveTexture,r.SRGBColorSpace)),Promise.all(g).then(function(){const h=new s(o);return i.name&&(h.name=i.name),gA(h,i),A.associations.set(h,{materials:e}),i.extensions&&dA(t,h,i),h})}createUniqueName(e){const A=r.PropertyBinding.sanitizeNodeName(e||"");return A in this.nodeNamesUsed?A+"_"+ ++this.nodeNamesUsed[A]:(this.nodeNamesUsed[A]=0,A)}loadGeometries(e){const A=this,n=this.extensions,t=this.primitiveCache;function i(o){return n[ae.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,A).then(function(c){return mn(c,o,A)})}const s=[];for(let o=0,c=e.length;o<c;o++){const g=e[o],l=Qo(g),h=t[l];if(h)s.push(h.promise);else{let I;g.extensions&&g.extensions[ae.KHR_DRACO_MESH_COMPRESSION]?I=i(g):I=mn(new r.BufferGeometry,g,A),t[l]={primitive:g,promise:I},s.push(I)}}return Promise.all(s)}loadMesh(e){const A=this,n=this.json,t=this.extensions,i=n.meshes[e],s=i.primitives,o=[];for(let c=0,g=s.length;c<g;c++){const l=s[c].material===void 0?Co(this.cache):this.getDependency("material",s[c].material);o.push(l)}return o.push(A.loadGeometries(s)),Promise.all(o).then(function(c){const g=c.slice(0,c.length-1),l=c[c.length-1],h=[];for(let B=0,f=l.length;B<f;B++){const C=l[B],E=s[B];let d;const y=g[B];if(E.mode===We.TRIANGLES||E.mode===We.TRIANGLE_STRIP||E.mode===We.TRIANGLE_FAN||E.mode===void 0)d=i.isSkinnedMesh===!0?new r.SkinnedMesh(C,y):new r.Mesh(C,y),d.isSkinnedMesh===!0&&d.normalizeSkinWeights(),E.mode===We.TRIANGLE_STRIP?d.geometry=jt(d.geometry,r.TriangleStripDrawMode):E.mode===We.TRIANGLE_FAN&&(d.geometry=jt(d.geometry,r.TriangleFanDrawMode));else if(E.mode===We.LINES)d=new r.LineSegments(C,y);else if(E.mode===We.LINE_STRIP)d=new r.Line(C,y);else if(E.mode===We.LINE_LOOP)d=new r.LineLoop(C,y);else if(E.mode===We.POINTS)d=new r.Points(C,y);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+E.mode);Object.keys(d.geometry.morphAttributes).length>0&&Eo(d,i),d.name=A.createUniqueName(i.name||"mesh_"+e),gA(d,i),E.extensions&&dA(t,d,E),A.assignFinalMaterial(d),h.push(d)}for(let B=0,f=h.length;B<f;B++)A.associations.set(h[B],{meshes:e,primitives:B});if(h.length===1)return i.extensions&&dA(t,h[0],i),h[0];const I=new r.Group;i.extensions&&dA(t,I,i),A.associations.set(I,{meshes:e});for(let B=0,f=h.length;B<f;B++)I.add(h[B]);return I})}loadCamera(e){let A;const n=this.json.cameras[e],t=n[n.type];if(!t){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return n.type==="perspective"?A=new r.PerspectiveCamera(r.MathUtils.radToDeg(t.yfov),t.aspectRatio||1,t.znear||1,t.zfar||2e6):n.type==="orthographic"&&(A=new r.OrthographicCamera(-t.xmag,t.xmag,t.ymag,-t.ymag,t.znear,t.zfar)),n.name&&(A.name=this.createUniqueName(n.name)),gA(A,n),Promise.resolve(A)}loadSkin(e){const A=this.json.skins[e],n=[];for(let t=0,i=A.joints.length;t<i;t++)n.push(this._loadNodeShallow(A.joints[t]));return A.inverseBindMatrices!==void 0?n.push(this.getDependency("accessor",A.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(t){const i=t.pop(),s=t,o=[],c=[];for(let g=0,l=s.length;g<l;g++){const h=s[g];if(h){o.push(h);const I=new r.Matrix4;i!==null&&I.fromArray(i.array,g*16),c.push(I)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',A.joints[g])}return new r.Skeleton(o,c)})}loadAnimation(e){const A=this.json,n=this,t=A.animations[e],i=t.name?t.name:"animation_"+e,s=[],o=[],c=[],g=[],l=[];let h=0,I=t.channels.length;for(h=0,I=t.channels.length;h<I;h++){const B=t.channels[h],f=t.samplers[B.sampler],C=B.target,E=C.node,d=t.parameters!==void 0?t.parameters[f.input]:f.input,y=t.parameters!==void 0?t.parameters[f.output]:f.output;C.node!==void 0&&(s.push(this.getDependency("node",E)),o.push(this.getDependency("accessor",d)),c.push(this.getDependency("accessor",y)),g.push(f),l.push(C))}return Promise.all([Promise.all(s),Promise.all(o),Promise.all(c),Promise.all(g),Promise.all(l)]).then(function(B){const f=B[0],C=B[1],E=B[2],d=B[3],y=B[4],Q=[];for(h=0,I=f.length;h<I;h++){const b=f[h],w=C[h],R=E[h],F=d[h],D=y[h];if(b===void 0)continue;b.updateMatrix&&b.updateMatrix();const M=n._createAnimationTracks(b,w,R,F,D);if(M)for(let N=0;N<M.length;N++)Q.push(M[N])}return new r.AnimationClip(i,void 0,Q)})}createNodeMesh(e){const A=this.json,n=this,t=A.nodes[e];return t.mesh===void 0?null:n.getDependency("mesh",t.mesh).then(function(i){const s=n._getNodeRef(n.meshCache,t.mesh,i);return t.weights!==void 0&&s.traverse(function(o){if(o.isMesh)for(let c=0,g=t.weights.length;c<g;c++)o.morphTargetInfluences[c]=t.weights[c]}),s})}loadNode(e){const A=this.json,n=this,t=A.nodes[e],i=n._loadNodeShallow(e),s=[],o=t.children||[];for(let g=0,l=o.length;g<l;g++)s.push(n.getDependency("node",o[g]));const c=t.skin===void 0?Promise.resolve(null):n.getDependency("skin",t.skin);return Promise.all([i,Promise.all(s),c]).then(function(g){const l=g[0],h=g[1],I=g[2];I!==null&&l.traverse(function(B){B.isSkinnedMesh&&B.bind(I,bo)});for(let B=0,f=h.length;B<f;B++)l.add(h[B]);return l})}_loadNodeShallow(e){const A=this.json,n=this.extensions,t=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const i=A.nodes[e],s=i.name?t.createUniqueName(i.name):"",o=[],c=t._invokeOne(function(g){return g.createNodeMesh&&g.createNodeMesh(e)});return c&&o.push(c),i.camera!==void 0&&o.push(t.getDependency("camera",i.camera).then(function(g){return t._getNodeRef(t.cameraCache,i.camera,g)})),t._invokeAll(function(g){return g.createNodeAttachment&&g.createNodeAttachment(e)}).forEach(function(g){o.push(g)}),this.nodeCache[e]=Promise.all(o).then(function(g){let l;if(i.isBone===!0?l=new r.Bone:g.length>1?l=new r.Group:g.length===1?l=g[0]:l=new r.Object3D,l!==g[0])for(let h=0,I=g.length;h<I;h++)l.add(g[h]);if(i.name&&(l.userData.name=i.name,l.name=s),gA(l,i),i.extensions&&dA(n,l,i),i.matrix!==void 0){const h=new r.Matrix4;h.fromArray(i.matrix),l.applyMatrix4(h)}else i.translation!==void 0&&l.position.fromArray(i.translation),i.rotation!==void 0&&l.quaternion.fromArray(i.rotation),i.scale!==void 0&&l.scale.fromArray(i.scale);return t.associations.has(l)||t.associations.set(l,{}),t.associations.get(l).nodes=e,l}),this.nodeCache[e]}loadScene(e){const A=this.extensions,n=this.json.scenes[e],t=this,i=new r.Group;n.name&&(i.name=t.createUniqueName(n.name)),gA(i,n),n.extensions&&dA(A,i,n);const s=n.nodes||[],o=[];for(let c=0,g=s.length;c<g;c++)o.push(t.getDependency("node",s[c]));return Promise.all(o).then(function(c){for(let l=0,h=c.length;l<h;l++)i.add(c[l]);const g=l=>{const h=new Map;for(const[I,B]of t.associations)(I instanceof r.Material||I instanceof r.Texture)&&h.set(I,B);return l.traverse(I=>{const B=t.associations.get(I);B!=null&&h.set(I,B)}),h};return t.associations=g(i),i})}_createAnimationTracks(e,A,n,t,i){const s=[],o=e.name?e.name:e.uuid,c=[];uA[i.path]===uA.weights?e.traverse(function(I){I.morphTargetInfluences&&c.push(I.name?I.name:I.uuid)}):c.push(o);let g;switch(uA[i.path]){case uA.weights:g=r.NumberKeyframeTrack;break;case uA.rotation:g=r.QuaternionKeyframeTrack;break;case uA.position:case uA.scale:g=r.VectorKeyframeTrack;break;default:n.itemSize===1?g=r.NumberKeyframeTrack:g=r.VectorKeyframeTrack;break}const l=t.interpolation!==void 0?fo[t.interpolation]:r.InterpolateLinear,h=this._getArrayFromAccessor(n);for(let I=0,B=c.length;I<B;I++){const f=new g(c[I]+"."+uA[i.path],A.array,h,l);t.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(f),s.push(f)}return s}_getArrayFromAccessor(e){let A=e.array;if(e.normalized){const n=zt(A.constructor),t=new Float32Array(A.length);for(let i=0,s=A.length;i<s;i++)t[i]=A[i]*n;A=t}return A}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){const t=this instanceof r.QuaternionKeyframeTrack?Bo:li;return new t(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function wo(a,e,A){const n=e.attributes,t=new r.Box3;if(n.POSITION!==void 0){const o=A.json.accessors[n.POSITION],c=o.min,g=o.max;if(c!==void 0&&g!==void 0){if(t.set(new r.Vector3(c[0],c[1],c[2]),new r.Vector3(g[0],g[1],g[2])),o.normalized){const l=zt(FA[o.componentType]);t.min.multiplyScalar(l),t.max.multiplyScalar(l)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const i=e.targets;if(i!==void 0){const o=new r.Vector3,c=new r.Vector3;for(let g=0,l=i.length;g<l;g++){const h=i[g];if(h.POSITION!==void 0){const I=A.json.accessors[h.POSITION],B=I.min,f=I.max;if(B!==void 0&&f!==void 0){if(c.setX(Math.max(Math.abs(B[0]),Math.abs(f[0]))),c.setY(Math.max(Math.abs(B[1]),Math.abs(f[1]))),c.setZ(Math.max(Math.abs(B[2]),Math.abs(f[2]))),I.normalized){const C=zt(FA[I.componentType]);c.multiplyScalar(C)}o.max(c)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}t.expandByVector(o)}a.boundingBox=t;const s=new r.Sphere;t.getCenter(s.center),s.radius=t.min.distanceTo(t.max)/2,a.boundingSphere=s}function mn(a,e,A){const n=e.attributes,t=[];function i(s,o){return A.getDependency("accessor",s).then(function(c){a.setAttribute(o,c)})}for(const s in n){const o=Vt[s]||s.toLowerCase();o in a.attributes||t.push(i(n[s],o))}if(e.indices!==void 0&&!a.index){const s=A.getDependency("accessor",e.indices).then(function(o){a.setIndex(o)});t.push(s)}return r.ColorManagement.workingColorSpace!==r.LinearSRGBColorSpace&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${r.ColorManagement.workingColorSpace}" not supported.`),gA(a,e),wo(a,e,A),Promise.all(t).then(function(){return e.targets!==void 0?po(a,e.targets,A):a})}var Do=(function(){var a="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok: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;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp: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:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp: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:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;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:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;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:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb",A=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var t=WebAssembly.validate(A)?e:a,i,s=WebAssembly.instantiate(o(t),{}).then(function(d){i=d.instance,i.exports.__wasm_call_ctors()});function o(d){for(var y=new Uint8Array(d.length),Q=0;Q<d.length;++Q){var b=d.charCodeAt(Q);y[Q]=b>96?b-97:b>64?b-39:b+4}for(var w=0,Q=0;Q<d.length;++Q)y[w++]=y[Q]<60?n[y[Q]]:(y[Q]-60)*64+y[++Q];return y.buffer.slice(0,w)}function c(d,y,Q,b,w,R){var F=i.exports.sbrk,D=Q+3&-4,M=F(D*b),N=F(w.length),_=new Uint8Array(i.exports.memory.buffer);_.set(w,N);var P=d(M,Q,b,N,w.length);if(P==0&&R&&R(M,D,b),y.set(_.subarray(M,M+Q*b)),F(M-F(0)),P!=0)throw new Error("Malformed buffer data: "+P)}var g={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},l={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},h=[],I=0;function B(d){var y={object:new Worker(d),pending:0,requests:{}};return y.object.onmessage=function(Q){var b=Q.data;y.pending-=b.count,y.requests[b.id][b.action](b.value),delete y.requests[b.id]},y}function f(d){for(var y="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(o(t))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+c.toString()+E.toString(),Q=new Blob([y],{type:"text/javascript"}),b=URL.createObjectURL(Q),w=0;w<d;++w)h[w]=B(b);URL.revokeObjectURL(b)}function C(d,y,Q,b,w){for(var R=h[0],F=1;F<h.length;++F)h[F].pending<R.pending&&(R=h[F]);return new Promise(function(D,M){var N=new Uint8Array(Q),_=I++;R.pending+=d,R.requests[_]={resolve:D,reject:M},R.object.postMessage({id:_,count:d,size:y,source:N,mode:b,filter:w},[N.buffer])})}function E(d){s.then(function(){var y=d.data;try{var Q=new Uint8Array(y.count*y.size);c(i.exports[y.mode],Q,y.count,y.size,y.source,i.exports[y.filter]),self.postMessage({id:y.id,count:y.count,action:"resolve",value:Q},[Q.buffer])}catch(b){self.postMessage({id:y.id,count:y.count,action:"reject",value:b})}})}return{ready:s,supported:!0,useWorkers:function(d){f(d)},decodeVertexBuffer:function(d,y,Q,b,w){c(i.exports.meshopt_decodeVertexBuffer,d,y,Q,b,i.exports[g[w]])},decodeIndexBuffer:function(d,y,Q,b){c(i.exports.meshopt_decodeIndexBuffer,d,y,Q,b)},decodeIndexSequence:function(d,y,Q,b){c(i.exports.meshopt_decodeIndexSequence,d,y,Q,b)},decodeGltfBuffer:function(d,y,Q,b,w,R){c(i.exports[l[w]],d,y,Q,b,i.exports[g[R]])},decodeGltfBufferAsync:function(d,y,Q,b,w){return h.length>0?C(d,y,Q,l[b],g[w]):s.then(function(){var R=new Uint8Array(d*y);return c(i.exports[l[b]],R,d,y,Q,i.exports[g[w]]),R})}}})();const bt=new WeakMap;class So extends r.Loader{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,A,n,t){const i=new r.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,s=>{this.parse(s,A,t)},n,t)}parse(e,A,n=()=>{}){this.decodeDracoFile(e,A,null,null,r.SRGBColorSpace,n).catch(n)}decodeDracoFile(e,A,n,t,i=r.LinearSRGBColorSpace,s=()=>{}){const o={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:t||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:i};return this.decodeGeometry(e,o).then(A).catch(s)}decodeGeometry(e,A){const n=JSON.stringify(A);if(bt.has(e)){const c=bt.get(e);if(c.key===n)return c.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let t;const i=this.workerNextTaskID++,s=e.byteLength,o=this._getWorker(i,s).then(c=>(t=c,new Promise((g,l)=>{t._callbacks[i]={resolve:g,reject:l},t.postMessage({type:"decode",id:i,taskConfig:A,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return o.catch(()=>!0).then(()=>{t&&i&&this._releaseTask(t,i)}),bt.set(e,{key:n,promise:o}),o}_createGeometry(e){const A=new r.BufferGeometry;e.index&&A.setIndex(new r.BufferAttribute(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const t=e.attributes[n],i=t.name,s=t.array,o=t.itemSize,c=new r.BufferAttribute(s,o);i==="color"&&(this._assignVertexColorSpace(c,t.vertexColorSpace),c.normalized=!(s instanceof Float32Array)),A.setAttribute(i,c)}return A}_assignVertexColorSpace(e,A){if(A!==r.SRGBColorSpace)return;const n=new r.Color;for(let t=0,i=e.count;t<i;t++)n.fromBufferAttribute(e,t),r.ColorManagement.toWorkingColorSpace(n,r.SRGBColorSpace),e.setXYZ(t,n.r,n.g,n.b)}_loadLibrary(e,A){const n=new r.FileLoader(this.manager);return n.setPath(this.decoderPath),n.setResponseType(A),n.setWithCredentials(this.withCredentials),new Promise((t,i)=>{n.load(e,t,void 0,i)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",A=[];return e?A.push(this._loadLibrary("draco_decoder.js","text")):(A.push(this._loadLibrary("draco_wasm_wrapper.js","text")),A.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(A).then(n=>{const t=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const i=xo.toString(),s=["/* draco decoder */",t,"","/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join(`
|
|
2
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,A){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const t=new Worker(this.workerSourceURL);t._callbacks={},t._taskCosts={},t._taskLoad=0,t.postMessage({type:"init",decoderConfig:this.decoderConfig}),t.onmessage=function(i){const s=i.data;switch(s.type){case"decode":t._callbacks[s.id].resolve(s);break;case"error":t._callbacks[s.id].reject(s);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+s.type+'"')}},this.workerPool.push(t)}else this.workerPool.sort(function(t,i){return t._taskLoad>i._taskLoad?-1:1});const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=A,n._taskLoad+=A,n})}_releaseTask(e,A){e._taskLoad-=e._taskCosts[A],delete e._callbacks[A],delete e._taskCosts[A]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function xo(){let a,e;onmessage=function(s){const o=s.data;switch(o.type){case"init":a=o.decoderConfig,e=new Promise(function(l){a.onModuleLoaded=function(h){l({draco:h})},DracoDecoderModule(a)});break;case"decode":const c=o.buffer,g=o.taskConfig;e.then(l=>{const h=l.draco,I=new h.Decoder;try{const B=A(h,I,new Int8Array(c),g),f=B.attributes.map(C=>C.array.buffer);B.index&&f.push(B.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:B},f)}catch(B){console.error(B),self.postMessage({type:"error",id:o.id,error:B.message})}finally{h.destroy(I)}});break}};function A(s,o,c,g){const l=g.attributeIDs,h=g.attributeTypes;let I,B;const f=o.GetEncodedGeometryType(c);if(f===s.TRIANGULAR_MESH)I=new s.Mesh,B=o.DecodeArrayToMesh(c,c.byteLength,I);else if(f===s.POINT_CLOUD)I=new s.PointCloud,B=o.DecodeArrayToPointCloud(c,c.byteLength,I);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!B.ok()||I.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+B.error_msg());const C={index:null,attributes:[]};for(const E in l){const d=self[h[E]];let y,Q;if(g.useUniqueIDs)Q=l[E],y=o.GetAttributeByUniqueId(I,Q);else{if(Q=o.GetAttributeId(I,s[l[E]]),Q===-1)continue;y=o.GetAttribute(I,Q)}const b=t(s,o,I,E,d,y);E==="color"&&(b.vertexColorSpace=g.vertexColorSpace),C.attributes.push(b)}return f===s.TRIANGULAR_MESH&&(C.index=n(s,o,I)),s.destroy(I),C}function n(s,o,c){const l=c.num_faces()*3,h=l*4,I=s._malloc(h);o.GetTrianglesUInt32Array(c,h,I);const B=new Uint32Array(s.HEAPF32.buffer,I,l).slice();return s._free(I),{array:B,itemSize:1}}function t(s,o,c,g,l,h){const I=h.num_components(),f=c.num_points()*I,C=f*l.BYTES_PER_ELEMENT,E=i(s,l),d=s._malloc(C);o.GetAttributeDataArrayForAllPoints(c,h,E,C,d);const y=new l(s.HEAPF32.buffer,d,f).slice();return s._free(d),{name:g,array:y,itemSize:I}}function i(s,o){switch(o){case Float32Array:return s.DT_FLOAT32;case Int8Array:return s.DT_INT8;case Int16Array:return s.DT_INT16;case Int32Array:return s.DT_INT32;case Uint8Array:return s.DT_UINT8;case Uint16Array:return s.DT_UINT16;case Uint32Array:return s.DT_UINT32}}}class Mo{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const A=this.workerCreator();A.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=A}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,A){const n=this.workersResolve[e];if(n&&n(A),this.queue.length){const{resolve:t,msg:i,transfer:s}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,s)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,A){return new Promise(n=>{const t=this._getIdleWorker();t!==-1?(this._initWorker(t),this.workerStatus|=1<<t,this.workersResolve[t]=n,this.workers[t].postMessage(e,A)):this.queue.push({resolve:n,msg:e,transfer:A})})}dispose(){this.workers.forEach(e=>e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const Fo=0,bn=2,Ro=1,yn=2,Go=0,To=1,ko=10,Lo=0,hi=9,Ii=15,ui=16,Bi=22,fi=37,Ci=43,pi=76,Ei=83,di=97,Qi=100,mi=103,bi=109,yi=122,wi=123,vo=131,No=132,Uo=133,_o=134,Po=137,Ho=138,Oo=141,qo=142,Ko=145,Yo=146,Di=148,Si=152,Jo=157,jo=158,xi=165,Mi=166,on=1000066e3;class kA{constructor(e,A,n,t){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+A,n),this._littleEndian=t,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){const A=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,A}_skip(e){return this._offset+=e,this}_scan(e,A=0){const n=this._offset;let t=0;for(;this._dataView.getUint8(this._offset)!==A&&t<e;)t++,this._offset++;return t<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,t)}}const ve=[171,75,84,88,32,50,48,187,13,10,26,10];function wn(a){return new TextDecoder().decode(a)}function Vo(a){const e=new Uint8Array(a.buffer,a.byteOffset,ve.length);if(e[0]!==ve[0]||e[1]!==ve[1]||e[2]!==ve[2]||e[3]!==ve[3]||e[4]!==ve[4]||e[5]!==ve[5]||e[6]!==ve[6]||e[7]!==ve[7]||e[8]!==ve[8]||e[9]!==ve[9]||e[10]!==ve[10]||e[11]!==ve[11])throw new Error("Missing KTX 2.0 identifier.");const A={vkFormat:0,typeSize:1,pixelWidth:0,pixelHeight:0,pixelDepth:0,layerCount:0,faceCount:1,levelCount:0,supercompressionScheme:0,levels:[],dataFormatDescriptor:[{vendorId:0,descriptorType: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:[]}],keyValue:{},globalData:null},n=17*Uint32Array.BYTES_PER_ELEMENT,t=new kA(a,ve.length,n,!0);A.vkFormat=t._nextUint32(),A.typeSize=t._nextUint32(),A.pixelWidth=t._nextUint32(),A.pixelHeight=t._nextUint32(),A.pixelDepth=t._nextUint32(),A.layerCount=t._nextUint32(),A.faceCount=t._nextUint32(),A.levelCount=t._nextUint32(),A.supercompressionScheme=t._nextUint32();const i=t._nextUint32(),s=t._nextUint32(),o=t._nextUint32(),c=t._nextUint32(),g=t._nextUint64(),l=t._nextUint64(),h=3*Math.max(A.levelCount,1)*8,I=new kA(a,ve.length+n,h,!0);for(let Ae=0,W=Math.max(A.levelCount,1);Ae<W;Ae++)A.levels.push({levelData:new Uint8Array(a.buffer,a.byteOffset+I._nextUint64(),I._nextUint64()),uncompressedByteLength:I._nextUint64()});const B=new kA(a,i,s,!0);B._skip(4);const f=B._nextUint16(),C=B._nextUint16(),E=B._nextUint16(),d=B._nextUint16(),y={vendorId:f,descriptorType:C,versionNumber:E,colorModel:B._nextUint8(),colorPrimaries:B._nextUint8(),transferFunction:B._nextUint8(),flags:B._nextUint8(),texelBlockDimension:[B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8()],bytesPlane:[B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8()],samples:[]},Q=(d/4-6)/4;for(let Ae=0;Ae<Q;Ae++){const W={bitOffset:B._nextUint16(),bitLength:B._nextUint8(),channelType:B._nextUint8(),samplePosition:[B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8()],sampleLower:Number.NEGATIVE_INFINITY,sampleUpper:Number.POSITIVE_INFINITY};64&W.channelType?(W.sampleLower=B._nextInt32(),W.sampleUpper=B._nextInt32()):(W.sampleLower=B._nextUint32(),W.sampleUpper=B._nextUint32()),y.samples[Ae]=W}A.dataFormatDescriptor.length=0,A.dataFormatDescriptor.push(y);const b=new kA(a,o,c,!0);for(;b._offset<c;){const Ae=b._nextUint32(),W=b._scan(Ae),te=wn(W);if(A.keyValue[te]=b._nextUint8Array(Ae-W.byteLength-1),te.match(/^ktx/i)){const ge=wn(A.keyValue[te]);A.keyValue[te]=ge.substring(0,ge.lastIndexOf("\0"))}b._skip(Ae%4?4-Ae%4:0)}if(l<=0)return A;const w=new kA(a,g,l,!0),R=w._nextUint16(),F=w._nextUint16(),D=w._nextUint32(),M=w._nextUint32(),N=w._nextUint32(),_=w._nextUint32(),P=[];for(let Ae=0,W=Math.max(A.levelCount,1);Ae<W;Ae++)P.push({imageFlags:w._nextUint32(),rgbSliceByteOffset:w._nextUint32(),rgbSliceByteLength:w._nextUint32(),alphaSliceByteOffset:w._nextUint32(),alphaSliceByteLength:w._nextUint32()});const z=g+w._offset,U=z+D,q=U+M,H=q+N,Z=new Uint8Array(a.buffer,a.byteOffset+z,D),se=new Uint8Array(a.buffer,a.byteOffset+U,M),ee=new Uint8Array(a.buffer,a.byteOffset+q,N),re=new Uint8Array(a.buffer,a.byteOffset+H,_);return A.globalData={endpointCount:R,selectorCount:F,imageDescs:P,endpointsData:Z,selectorsData:se,tablesData:ee,extendedData:re},A}let yt,cA,Xt;const wt={env:{emscripten_notify_memory_growth:function(a){Xt=new Uint8Array(cA.exports.memory.buffer)}}};class zo{init(){return yt||(yt=typeof fetch<"u"?fetch("data:application/wasm;base64,"+Dn).then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,wt)).then(this._init):WebAssembly.instantiate(Buffer.from(Dn,"base64"),wt).then(this._init),yt)}_init(e){cA=e.instance,wt.env.emscripten_notify_memory_growth(0)}decode(e,A=0){if(!cA)throw new Error("ZSTDDecoder: Await .init() before decoding.");const n=e.byteLength,t=cA.exports.malloc(n);Xt.set(e,t),A=A||Number(cA.exports.ZSTD_findDecompressedSize(t,n));const i=cA.exports.malloc(A),s=cA.exports.ZSTD_decompress(i,A,t,n),o=Xt.slice(i,i+s);return cA.exports.free(t),cA.exports.free(i),o}}const Dn="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/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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",Xo="display-p3",Wo="display-p3-linear",Dt=new WeakMap;let St=0,xt;class Ze extends r.Loader{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Mo,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:await e.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return e.isWebGPURenderer===!0?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bptc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),astcHDRSupported:e.extensions.has("WEBGL_compressed_texture_astc")&&e.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new r.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const A=e.loadAsync("basis_transcoder.js"),n=new r.FileLoader(this.manager);n.setPath(this.transcoderPath),n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials);const t=n.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([A,t]).then(([i,s])=>{const o=Ze.BasisWorker.toString(),c=["/* constants */","let _EngineFormat = "+JSON.stringify(Ze.EngineFormat),"let _EngineType = "+JSON.stringify(Ze.EngineType),"let _TranscoderFormat = "+JSON.stringify(Ze.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(Ze.BasisFormat),"/* basis_transcoder.js */",i,"/* worker */",o.substring(o.indexOf("{")+1,o.lastIndexOf("}"))].join(`
|
|
3
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([c])),this.transcoderBinary=s,this.workerPool.setWorkerCreator(()=>{const g=new Worker(this.workerSourceURL),l=this.transcoderBinary.slice(0);return g.postMessage({type:"init",config:this.workerConfig,transcoderBinary:l},[l]),g})}),St>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),St++}return this.transcoderPending}load(e,A,n,t){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const i=new r.FileLoader(this.manager);i.setPath(this.path),i.setCrossOrigin(this.crossOrigin),i.setWithCredentials(this.withCredentials),i.setResponseType("arraybuffer"),i.load(e,s=>{this.parse(s,A,t)},n,t)}parse(e,A,n){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Dt.has(e))return Dt.get(e).promise.then(A).catch(n);this._createTexture(e).then(t=>A?A(t):null).catch(n)}_createTextureFrom(e,A){const{type:n,error:t,data:{faces:i,width:s,height:o,format:c,type:g,dfdFlags:l}}=e;if(n==="error")return Promise.reject(t);let h;if(A.faceCount===6)h=new r.CompressedCubeTexture(i,c,g);else{const I=i[0].mipmaps;h=A.layerCount>1?new r.CompressedArrayTexture(I,s,o,A.layerCount,c,g):new r.CompressedTexture(I,s,o,c,g)}return h.minFilter=i[0].mipmaps.length===1?r.LinearFilter:r.LinearMipmapLinearFilter,h.magFilter=r.LinearFilter,h.generateMipmaps=!1,h.needsUpdate=!0,h.colorSpace=Fi(A),h.premultiplyAlpha=!!(l&Ro),h}async _createTexture(e,A={}){const n=Vo(new Uint8Array(e)),t=n.vkFormat===on&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===Lo||t&&!this.workerConfig.astcHDRSupported))return $o(n);const s=A,o=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:s},[e])).then(c=>this._createTextureFrom(c.data,n));return Dt.set(e,{promise:o}),o}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),St--}}Ze.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2};Ze.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25};Ze.EngineFormat={RGBAFormat:r.RGBAFormat,RGBA_ASTC_4x4_Format:r.RGBA_ASTC_4x4_Format,RGB_BPTC_UNSIGNED_Format:r.RGB_BPTC_UNSIGNED_Format,RGBA_BPTC_Format:r.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:r.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:r.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:r.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:r.RGB_ETC1_Format,RGB_ETC2_Format:r.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:r.RGB_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format:r.RGBA_S3TC_DXT1_Format};Ze.EngineType={UnsignedByteType:r.UnsignedByteType,HalfFloatType:r.HalfFloatType,FloatType:r.FloatType};Ze.BasisWorker=function(){let a,e,A;const n=_EngineFormat,t=_EngineType,i=_TranscoderFormat,s=_BasisFormat;self.addEventListener("message",function(f){const C=f.data;switch(C.type){case"init":a=C.config,o(C.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:E,buffers:d,width:y,height:Q,hasAlpha:b,format:w,type:R,dfdFlags:F}=c(C.buffer);self.postMessage({type:"transcode",id:C.id,data:{faces:E,width:y,height:Q,hasAlpha:b,format:w,type:R,dfdFlags:F}},d)}catch(E){console.error(E),self.postMessage({type:"error",id:C.id,error:E.message})}});break}});function o(f){e=new Promise(C=>{A={wasmBinary:f,onRuntimeInitialized:C},BASIS(A)}).then(()=>{A.initializeBasis(),A.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function c(f){const C=new A.KTX2File(new Uint8Array(f));function E(){C.close(),C.delete()}if(!C.isValid())throw E(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let d;if(C.isUASTC())d=s.UASTC;else if(C.isETC1S())d=s.ETC1S;else if(C.isHDR())d=s.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const y=C.getWidth(),Q=C.getHeight(),b=C.getLayers()||1,w=C.getLevels(),R=C.getFaces(),F=C.getHasAlpha(),D=C.getDFDFlags(),{transcoderFormat:M,engineFormat:N,engineType:_}=h(d,y,Q,F);if(!y||!Q||!w)throw E(),new Error("THREE.KTX2Loader: Invalid texture");if(!C.startTranscoding())throw E(),new Error("THREE.KTX2Loader: .startTranscoding failed");const P=[],z=[];for(let U=0;U<R;U++){const q=[];for(let H=0;H<w;H++){const Z=[];let se,ee;for(let Ae=0;Ae<b;Ae++){const W=C.getImageLevelInfo(H,Ae,U);U===0&&H===0&&Ae===0&&(W.origWidth%4!==0||W.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),w>1?(se=W.origWidth,ee=W.origHeight):(se=W.width,ee=W.height);let te=new Uint8Array(C.getImageTranscodedSizeInBytes(H,Ae,0,M));const ge=C.transcodeImage(te,H,Ae,U,M,0,-1,-1);if(_===t.HalfFloatType&&(te=new Uint16Array(te.buffer,te.byteOffset,te.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!ge)throw E(),new Error("THREE.KTX2Loader: .transcodeImage failed.");Z.push(te)}const re=B(Z);q.push({data:re,width:se,height:ee}),z.push(re.buffer)}P.push({mipmaps:q,width:y,height:Q,format:N,type:_})}return E(),{faces:P,buffers:z,width:y,height:Q,hasAlpha:F,dfdFlags:D,format:N,type:_}}const g=[{if:"astcSupported",basisFormat:[s.UASTC],transcoderFormat:[i.ASTC_4x4,i.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],engineType:[t.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.BC7_M5,i.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],engineType:[t.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.BC1,i.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],engineType:[t.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.ETC1,i.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],engineType:[t.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.ETC1],engineFormat:[n.RGB_ETC1_Format],engineType:[t.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.PVRTC1_4_RGB,i.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],engineType:[t.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[s.UASTC_HDR],transcoderFormat:[i.BC6H],engineFormat:[n.RGB_BPTC_UNSIGNED_Format],engineType:[t.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.RGBA32,i.RGBA32],engineFormat:[n.RGBAFormat,n.RGBAFormat],engineType:[t.UnsignedByteType,t.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[s.UASTC_HDR],transcoderFormat:[i.RGBA_HALF],engineFormat:[n.RGBAFormat],engineType:[t.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],l={[s.ETC1S]:g.filter(f=>f.basisFormat.includes(s.ETC1S)).sort((f,C)=>f.priorityUASTC-C.priorityUASTC),[s.UASTC]:g.filter(f=>f.basisFormat.includes(s.UASTC)).sort((f,C)=>f.priorityUASTC-C.priorityUASTC),[s.UASTC_HDR]:g.filter(f=>f.basisFormat.includes(s.UASTC_HDR)).sort((f,C)=>f.priorityHDR-C.priorityHDR)};function h(f,C,E,d){const y=l[f];for(let Q=0;Q<y.length;Q++){const b=y[Q];if(b.if&&!a[b.if]||!b.basisFormat.includes(f)||d&&b.transcoderFormat.length<2||b.needsPowerOfTwo&&!(I(C)&&I(E)))continue;const w=b.transcoderFormat[d?1:0],R=b.engineFormat[d?1:0],F=b.engineType[0];return{transcoderFormat:w,engineFormat:R,engineType:F}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function I(f){return f<=2?!0:(f&f-1)===0&&f!==0}function B(f){if(f.length===1)return f[0];let C=0;for(let y=0;y<f.length;y++){const Q=f[y];C+=Q.byteLength}const E=new Uint8Array(C);let d=0;for(let y=0;y<f.length;y++){const Q=f[y];E.set(Q,d),d+=Q.byteLength}return E}};const Zo=new Set([r.RGBAFormat,r.RGBFormat,r.RGFormat,r.RedFormat]),Mt={[bi]:r.RGBAFormat,[di]:r.RGBAFormat,[fi]:r.RGBAFormat,[Ci]:r.RGBAFormat,[mi]:r.RGFormat,[Ei]:r.RGFormat,[ui]:r.RGFormat,[Bi]:r.RGFormat,[Qi]:r.RedFormat,[pi]:r.RedFormat,[Ii]:r.RedFormat,[hi]:r.RedFormat,[wi]:r.RGBFormat,[yi]:r.RGBFormat,[Di]:r.RGB_ETC2_Format,[Si]:r.RGBA_ETC2_EAC_Format,[on]:r.RGBA_ASTC_4x4_Format,[jo]:r.RGBA_ASTC_4x4_Format,[Jo]:r.RGBA_ASTC_4x4_Format,[Mi]:r.RGBA_ASTC_6x6_Format,[xi]:r.RGBA_ASTC_6x6_Format,[Uo]:r.RGBA_S3TC_DXT1_Format,[_o]:r.RGBA_S3TC_DXT1_Format,[vo]:r.RGB_S3TC_DXT1_Format,[No]:r.RGB_S3TC_DXT1_Format,[Ho]:r.RGBA_S3TC_DXT3_Format,[Po]:r.RGBA_S3TC_DXT3_Format,[qo]:r.RGBA_S3TC_DXT5_Format,[Oo]:r.RGBA_S3TC_DXT5_Format,[Yo]:r.RGBA_BPTC_Format,[Ko]:r.RGBA_BPTC_Format},LA={[bi]:r.FloatType,[di]:r.HalfFloatType,[fi]:r.UnsignedByteType,[Ci]:r.UnsignedByteType,[mi]:r.FloatType,[Ei]:r.HalfFloatType,[ui]:r.UnsignedByteType,[Bi]:r.UnsignedByteType,[Qi]:r.FloatType,[pi]:r.HalfFloatType,[Ii]:r.UnsignedByteType,[hi]:r.UnsignedByteType,[wi]:r.UnsignedInt5999Type,[yi]:r.UnsignedInt101111Type,[Di]:r.UnsignedByteType,[Si]:r.UnsignedByteType,[on]:r.HalfFloatType,[Mi]:r.UnsignedByteType,[xi]:r.UnsignedByteType};async function $o(a){const{vkFormat:e}=a;if(Mt[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let A;a.supercompressionScheme===bn&&(xt||(xt=new Promise(async s=>{const o=new zo;await o.init(),s(o)})),A=await xt);const n=[];for(let s=0;s<a.levels.length;s++){const o=Math.max(1,a.pixelWidth>>s),c=Math.max(1,a.pixelHeight>>s),g=a.pixelDepth?Math.max(1,a.pixelDepth>>s):0,l=a.levels[s];let h;if(a.supercompressionScheme===Fo)h=l.levelData;else if(a.supercompressionScheme===bn)h=A.decode(l.levelData,l.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let I;LA[e]===r.FloatType?I=new Float32Array(h.buffer,h.byteOffset,h.byteLength/Float32Array.BYTES_PER_ELEMENT):LA[e]===r.HalfFloatType?I=new Uint16Array(h.buffer,h.byteOffset,h.byteLength/Uint16Array.BYTES_PER_ELEMENT):LA[e]===r.UnsignedInt5999Type||LA[e]===r.UnsignedInt101111Type?I=new Uint32Array(h.buffer,h.byteOffset,h.byteLength/Uint32Array.BYTES_PER_ELEMENT):I=h,n.push({data:I,width:o,height:c,depth:g})}const t=a.levelCount===0||n.length>1;let i;if(Zo.has(Mt[e]))i=a.pixelDepth===0?new r.DataTexture(n[0].data,a.pixelWidth,a.pixelHeight):new r.Data3DTexture(n[0].data,a.pixelWidth,a.pixelHeight,a.pixelDepth),i.minFilter=t?r.NearestMipmapNearestFilter:r.NearestFilter,i.magFilter=r.NearestFilter,i.generateMipmaps=a.levelCount===0;else{if(a.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");i=new r.CompressedTexture(n,a.pixelWidth,a.pixelHeight),i.minFilter=t?r.LinearMipmapLinearFilter:r.LinearFilter,i.magFilter=r.LinearFilter}return i.mipmaps=n,i.type=LA[e],i.format=Mt[e],i.colorSpace=Fi(a),i.needsUpdate=!0,Promise.resolve(i)}function Fi(a){const e=a.dataFormatDescriptor[0];return e.colorPrimaries===To?e.transferFunction===yn?r.SRGBColorSpace:r.LinearSRGBColorSpace:e.colorPrimaries===ko?e.transferFunction===yn?Xo:Wo:(e.colorPrimaries===Go||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),r.NoColorSpace)}const Ri=new r.NodeFrame;Ri.camera=new r.PerspectiveCamera;r.ShaderLib.basic,r.ShaderLib.basic,r.ShaderLib.points,r.ShaderLib.standard,r.ShaderLib.physical,r.ShaderLib.phong;var jA=function(){var a=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(l){l.preventDefault(),n(++a%e.children.length)},!1);function A(l){return e.appendChild(l.dom),l}function n(l){for(var h=0;h<e.children.length;h++)e.children[h].style.display=h===l?"block":"none";a=l}var t=(performance||Date).now(),i=t,s=0,o=A(new jA.Panel("FPS","#0ff","#002")),c=A(new jA.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var g=A(new jA.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:e,addPanel:A,showPanel:n,begin:function(){t=(performance||Date).now()},end:function(){s++;var l=(performance||Date).now();if(c.update(l-t,200),l>=i+1e3&&(o.update(s*1e3/(l-i),100),i=l,s=0,g)){var h=performance.memory;g.update(h.usedJSHeapSize/1048576,h.jsHeapSizeLimit/1048576)}return l},update:function(){t=this.end()},domElement:e,setMode:n}};jA.Panel=function(a,e,A){var n=1/0,t=0,i=Math.round,s=i(window.devicePixelRatio||1),o=80*s,c=48*s,g=3*s,l=2*s,h=3*s,I=15*s,B=74*s,f=30*s,C=document.createElement("canvas");C.width=o,C.height=c,C.style.cssText="width:80px;height:48px";var E=C.getContext("2d");return E.font="bold "+9*s+"px Helvetica,Arial,sans-serif",E.textBaseline="top",E.fillStyle=A,E.fillRect(0,0,o,c),E.fillStyle=e,E.fillText(a,g,l),E.fillRect(h,I,B,f),E.fillStyle=A,E.globalAlpha=.9,E.fillRect(h,I,B,f),{dom:C,update:function(d,y){n=Math.min(n,d),t=Math.max(t,d),E.fillStyle=A,E.globalAlpha=1,E.fillRect(0,0,o,I),E.fillStyle=e,E.fillText(i(d)+" "+a+" ("+i(n)+"-"+i(t)+")",g,l),E.drawImage(C,h+s,I,B-s,f,h,I,B-s,f),E.fillRect(h+B-s,I,s,f),E.fillStyle=A,E.globalAlpha=.9,E.fillRect(h+B-s,I,s,i((1-d/y)*f))}}};class er extends r.ExtrudeGeometry{constructor(e,A={}){const n=A.font;if(n===void 0)super();else{const t=n.generateShapes(e,A.size);A.depth===void 0&&A.height!==void 0&&console.warn("THREE.TextGeometry: .height is now depreciated. Please use .depth instead"),A.depth=A.depth!==void 0?A.depth:A.height!==void 0?A.height:50,A.bevelThickness===void 0&&(A.bevelThickness=10),A.bevelSize===void 0&&(A.bevelSize=8),A.bevelEnabled===void 0&&(A.bevelEnabled=!1),super(t,A)}this.type="TextGeometry"}}class Ar extends r.Loader{constructor(e){super(e)}load(e,A,n,t){const i=this,s=new r.FileLoader(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,function(o){const c=i.parse(JSON.parse(o));A&&A(c)},n,t)}parse(e){return new Gi(e)}}class Gi{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,A=100){const n=[],t=tr(e,A,this.data);for(let i=0,s=t.length;i<s;i++)n.push(...t[i].toShapes());return n}}function tr(a,e,A){const n=Array.from(a),t=e/A.resolution,i=(A.boundingBox.yMax-A.boundingBox.yMin+A.underlineThickness)*t,s=[];let o=0,c=0;for(let g=0;g<n.length;g++){const l=n[g];if(l===`
|
|
4
|
-
`)o=0,c-=i;else{const h=nr(l,t,o,c,A);o+=h.offsetX,s.push(h.path)}}return s}function nr(a,e,A,n,t){const i=t.glyphs[a]||t.glyphs["?"];if(!i){console.error('THREE.Font: character "'+a+'" does not exists in font family '+t.familyName+".");return}const s=new r.ShapePath;let o,c,g,l,h,I,B,f;if(i.o){const C=i._cachedOutline||(i._cachedOutline=i.o.split(" "));for(let E=0,d=C.length;E<d;)switch(C[E++]){case"m":o=C[E++]*e+A,c=C[E++]*e+n,s.moveTo(o,c);break;case"l":o=C[E++]*e+A,c=C[E++]*e+n,s.lineTo(o,c);break;case"q":g=C[E++]*e+A,l=C[E++]*e+n,h=C[E++]*e+A,I=C[E++]*e+n,s.quadraticCurveTo(h,I,g,l);break;case"b":g=C[E++]*e+A,l=C[E++]*e+n,h=C[E++]*e+A,I=C[E++]*e+n,B=C[E++]*e+A,f=C[E++]*e+n,s.bezierCurveTo(h,I,B,f,g,l);break}}return{offsetX:i.ha*e,path:s}}var ye=Uint8Array,Ke=Uint16Array,rn=Int32Array,ft=new ye([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ct=new ye([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wt=new ye([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ti=function(a,e){for(var A=new Ke(31),n=0;n<31;++n)A[n]=e+=1<<a[n-1];for(var t=new rn(A[30]),n=1;n<30;++n)for(var i=A[n];i<A[n+1];++i)t[i]=i-A[n]<<5|n;return{b:A,r:t}},ki=Ti(ft,2),Li=ki.b,Zt=ki.r;Li[28]=258,Zt[258]=28;var vi=Ti(Ct,0),ir=vi.b,Sn=vi.r,$t=new Ke(32768);for(var Ee=0;Ee<32768;++Ee){var BA=(Ee&43690)>>1|(Ee&21845)<<1;BA=(BA&52428)>>2|(BA&13107)<<2,BA=(BA&61680)>>4|(BA&3855)<<4,$t[Ee]=((BA&65280)>>8|(BA&255)<<8)>>1}var sA=(function(a,e,A){for(var n=a.length,t=0,i=new Ke(e);t<n;++t)a[t]&&++i[a[t]-1];var s=new Ke(e);for(t=1;t<e;++t)s[t]=s[t-1]+i[t-1]<<1;var o;if(A){o=new Ke(1<<e);var c=15-e;for(t=0;t<n;++t)if(a[t])for(var g=t<<4|a[t],l=e-a[t],h=s[a[t]-1]++<<l,I=h|(1<<l)-1;h<=I;++h)o[$t[h]>>c]=g}else for(o=new Ke(n),t=0;t<n;++t)a[t]&&(o[t]=$t[s[a[t]-1]++]>>15-a[t]);return o}),CA=new ye(288);for(var Ee=0;Ee<144;++Ee)CA[Ee]=8;for(var Ee=144;Ee<256;++Ee)CA[Ee]=9;for(var Ee=256;Ee<280;++Ee)CA[Ee]=7;for(var Ee=280;Ee<288;++Ee)CA[Ee]=8;var zA=new ye(32);for(var Ee=0;Ee<32;++Ee)zA[Ee]=5;var sr=sA(CA,9,0),or=sA(CA,9,1),rr=sA(zA,5,0),ar=sA(zA,5,1),Ft=function(a){for(var e=a[0],A=1;A<a.length;++A)a[A]>e&&(e=a[A]);return e},$e=function(a,e,A){var n=e/8|0;return(a[n]|a[n+1]<<8)>>(e&7)&A},Rt=function(a,e){var A=e/8|0;return(a[A]|a[A+1]<<8|a[A+2]<<16)>>(e&7)},an=function(a){return(a+7)/8|0},cn=function(a,e,A){return(A==null||A>a.length)&&(A=a.length),new ye(a.subarray(e,A))},cr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],He=function(a,e,A){var n=new Error(e||cr[a]);if(n.code=a,Error.captureStackTrace&&Error.captureStackTrace(n,He),!A)throw n;return n},gr=function(a,e,A,n){var t=a.length,i=0;if(!t||e.f&&!e.l)return A||new ye(0);var s=!A,o=s||e.i!=2,c=e.i;s&&(A=new ye(t*3));var g=function(Je){var pA=A.length;if(Je>pA){var oA=new ye(Math.max(pA*2,Je));oA.set(A),A=oA}},l=e.f||0,h=e.p||0,I=e.b||0,B=e.l,f=e.d,C=e.m,E=e.n,d=t*8;do{if(!B){l=$e(a,h,1);var y=$e(a,h+1,3);if(h+=3,y)if(y==1)B=or,f=ar,C=9,E=5;else if(y==2){var R=$e(a,h,31)+257,F=$e(a,h+10,15)+4,D=R+$e(a,h+5,31)+1;h+=14;for(var M=new ye(D),N=new ye(19),_=0;_<F;++_)N[Wt[_]]=$e(a,h+_*3,7);h+=F*3;for(var P=Ft(N),z=(1<<P)-1,U=sA(N,P,1),_=0;_<D;){var q=U[$e(a,h,z)];h+=q&15;var Q=q>>4;if(Q<16)M[_++]=Q;else{var H=0,Z=0;for(Q==16?(Z=3+$e(a,h,3),h+=2,H=M[_-1]):Q==17?(Z=3+$e(a,h,7),h+=3):Q==18&&(Z=11+$e(a,h,127),h+=7);Z--;)M[_++]=H}}var se=M.subarray(0,R),ee=M.subarray(R);C=Ft(se),E=Ft(ee),B=sA(se,C,1),f=sA(ee,E,1)}else He(1);else{var Q=an(h)+4,b=a[Q-4]|a[Q-3]<<8,w=Q+b;if(w>t){c&&He(0);break}o&&g(I+b),A.set(a.subarray(Q,w),I),e.b=I+=b,e.p=h=w*8,e.f=l;continue}if(h>d){c&&He(0);break}}o&&g(I+131072);for(var re=(1<<C)-1,Ae=(1<<E)-1,W=h;;W=h){var H=B[Rt(a,h)&re],te=H>>4;if(h+=H&15,h>d){c&&He(0);break}if(H||He(2),te<256)A[I++]=te;else if(te==256){W=h,B=null;break}else{var ge=te-254;if(te>264){var _=te-257,he=ft[_];ge=$e(a,h,(1<<he)-1)+Li[_],h+=he}var ne=f[Rt(a,h)&Ae],Te=ne>>4;ne||He(3),h+=ne&15;var ee=ir[Te];if(Te>3){var he=Ct[Te];ee+=Rt(a,h)&(1<<he)-1,h+=he}if(h>d){c&&He(0);break}o&&g(I+131072);var Se=I+ge;if(I<ee){var hA=i-ee,_e=Math.min(ee,Se);for(hA+I<0&&He(3);I<_e;++I)A[I]=n[hA+I]}for(;I<Se;++I)A[I]=A[I-ee]}}e.l=B,e.p=W,e.b=I,e.f=l,B&&(l=1,e.m=C,e.d=f,e.n=E)}while(!l);return I!=A.length&&s?cn(A,0,I):A.subarray(0,I)},aA=function(a,e,A){A<<=e&7;var n=e/8|0;a[n]|=A,a[n+1]|=A>>8},vA=function(a,e,A){A<<=e&7;var n=e/8|0;a[n]|=A,a[n+1]|=A>>8,a[n+2]|=A>>16},Gt=function(a,e){for(var A=[],n=0;n<a.length;++n)a[n]&&A.push({s:n,f:a[n]});var t=A.length,i=A.slice();if(!t)return{t:Ui,l:0};if(t==1){var s=new ye(A[0].s+1);return s[A[0].s]=1,{t:s,l:1}}A.sort(function(w,R){return w.f-R.f}),A.push({s:-1,f:25001});var o=A[0],c=A[1],g=0,l=1,h=2;for(A[0]={s:-1,f:o.f+c.f,l:o,r:c};l!=t-1;)o=A[A[g].f<A[h].f?g++:h++],c=A[g!=l&&A[g].f<A[h].f?g++:h++],A[l++]={s:-1,f:o.f+c.f,l:o,r:c};for(var I=i[0].s,n=1;n<t;++n)i[n].s>I&&(I=i[n].s);var B=new Ke(I+1),f=en(A[l-1],B,0);if(f>e){var n=0,C=0,E=f-e,d=1<<E;for(i.sort(function(R,F){return B[F.s]-B[R.s]||R.f-F.f});n<t;++n){var y=i[n].s;if(B[y]>e)C+=d-(1<<f-B[y]),B[y]=e;else break}for(C>>=E;C>0;){var Q=i[n].s;B[Q]<e?C-=1<<e-B[Q]++-1:++n}for(;n>=0&&C;--n){var b=i[n].s;B[b]==e&&(--B[b],++C)}f=e}return{t:new ye(B),l:f}},en=function(a,e,A){return a.s==-1?Math.max(en(a.l,e,A+1),en(a.r,e,A+1)):e[a.s]=A},xn=function(a){for(var e=a.length;e&&!a[--e];);for(var A=new Ke(++e),n=0,t=a[0],i=1,s=function(c){A[n++]=c},o=1;o<=e;++o)if(a[o]==t&&o!=e)++i;else{if(!t&&i>2){for(;i>138;i-=138)s(32754);i>2&&(s(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(s(t),--i;i>6;i-=6)s(8304);i>2&&(s(i-3<<5|8208),i=0)}for(;i--;)s(t);i=1,t=a[o]}return{c:A.subarray(0,n),n:e}},NA=function(a,e){for(var A=0,n=0;n<e.length;++n)A+=a[n]*e[n];return A},Ni=function(a,e,A){var n=A.length,t=an(e+2);a[t]=n&255,a[t+1]=n>>8,a[t+2]=a[t]^255,a[t+3]=a[t+1]^255;for(var i=0;i<n;++i)a[t+i+4]=A[i];return(t+4+n)*8},Mn=function(a,e,A,n,t,i,s,o,c,g,l){aA(e,l++,A),++t[256];for(var h=Gt(t,15),I=h.t,B=h.l,f=Gt(i,15),C=f.t,E=f.l,d=xn(I),y=d.c,Q=d.n,b=xn(C),w=b.c,R=b.n,F=new Ke(19),D=0;D<y.length;++D)++F[y[D]&31];for(var D=0;D<w.length;++D)++F[w[D]&31];for(var M=Gt(F,7),N=M.t,_=M.l,P=19;P>4&&!N[Wt[P-1]];--P);var z=g+5<<3,U=NA(t,CA)+NA(i,zA)+s,q=NA(t,I)+NA(i,C)+s+14+3*P+NA(F,N)+2*F[16]+3*F[17]+7*F[18];if(c>=0&&z<=U&&z<=q)return Ni(e,l,a.subarray(c,c+g));var H,Z,se,ee;if(aA(e,l,1+(q<U)),l+=2,q<U){H=sA(I,B,0),Z=I,se=sA(C,E,0),ee=C;var re=sA(N,_,0);aA(e,l,Q-257),aA(e,l+5,R-1),aA(e,l+10,P-4),l+=14;for(var D=0;D<P;++D)aA(e,l+3*D,N[Wt[D]]);l+=3*P;for(var Ae=[y,w],W=0;W<2;++W)for(var te=Ae[W],D=0;D<te.length;++D){var ge=te[D]&31;aA(e,l,re[ge]),l+=N[ge],ge>15&&(aA(e,l,te[D]>>5&127),l+=te[D]>>12)}}else H=sr,Z=CA,se=rr,ee=zA;for(var D=0;D<o;++D){var he=n[D];if(he>255){var ge=he>>18&31;vA(e,l,H[ge+257]),l+=Z[ge+257],ge>7&&(aA(e,l,he>>23&31),l+=ft[ge]);var ne=he&31;vA(e,l,se[ne]),l+=ee[ne],ne>3&&(vA(e,l,he>>5&8191),l+=Ct[ne])}else vA(e,l,H[he]),l+=Z[he]}return vA(e,l,H[256]),l+Z[256]},lr=new rn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Ui=new ye(0),hr=function(a,e,A,n,t,i){var s=i.z||a.length,o=new ye(n+s+5*(1+Math.ceil(s/7e3))+t),c=o.subarray(n,o.length-t),g=i.l,l=(i.r||0)&7;if(e){l&&(c[0]=i.r>>3);for(var h=lr[e-1],I=h>>13,B=h&8191,f=(1<<A)-1,C=i.p||new Ke(32768),E=i.h||new Ke(f+1),d=Math.ceil(A/3),y=2*d,Q=function(wA){return(a[wA]^a[wA+1]<<d^a[wA+2]<<y)&f},b=new rn(25e3),w=new Ke(288),R=new Ke(32),F=0,D=0,M=i.i||0,N=0,_=i.w||0,P=0;M+2<s;++M){var z=Q(M),U=M&32767,q=E[z];if(C[U]=q,E[z]=U,_<=M){var H=s-M;if((F>7e3||N>24576)&&(H>423||!g)){l=Mn(a,c,0,b,w,R,D,N,P,M-P,l),N=F=D=0,P=M;for(var Z=0;Z<286;++Z)w[Z]=0;for(var Z=0;Z<30;++Z)R[Z]=0}var se=2,ee=0,re=B,Ae=U-q&32767;if(H>2&&z==Q(M-Ae))for(var W=Math.min(I,H)-1,te=Math.min(32767,M),ge=Math.min(258,H);Ae<=te&&--re&&U!=q;){if(a[M+se]==a[M+se-Ae]){for(var he=0;he<ge&&a[M+he]==a[M+he-Ae];++he);if(he>se){if(se=he,ee=Ae,he>W)break;for(var ne=Math.min(Ae,he-2),Te=0,Z=0;Z<ne;++Z){var Se=M-Ae+Z&32767,hA=C[Se],_e=Se-hA&32767;_e>Te&&(Te=_e,q=Se)}}}U=q,q=C[U],Ae+=U-q&32767}if(ee){b[N++]=268435456|Zt[se]<<18|Sn[ee];var Je=Zt[se]&31,pA=Sn[ee]&31;D+=ft[Je]+Ct[pA],++w[257+Je],++R[pA],_=M+se,++F}else b[N++]=a[M],++w[a[M]]}}for(M=Math.max(M,_);M<s;++M)b[N++]=a[M],++w[a[M]];l=Mn(a,c,g,b,w,R,D,N,P,M-P,l),g||(i.r=l&7|c[l/8|0]<<3,l-=7,i.h=E,i.p=C,i.i=M,i.w=_)}else{for(var M=i.w||0;M<s+g;M+=65535){var oA=M+65535;oA>=s&&(c[l/8|0]=g,oA=s),l=Ni(c,l+1,a.subarray(M,oA))}i.i=s}return cn(o,0,n+an(l)+t)},Ir=(function(){for(var a=new Int32Array(256),e=0;e<256;++e){for(var A=e,n=9;--n;)A=(A&1&&-306674912)^A>>>1;a[e]=A}return a})(),ur=function(){var a=-1;return{p:function(e){for(var A=a,n=0;n<e.length;++n)A=Ir[A&255^e[n]]^A>>>8;a=A},d:function(){return~a}}},Br=function(a,e,A,n,t){if(!t&&(t={l:1},e.dictionary)){var i=e.dictionary.subarray(-32768),s=new ye(i.length+a.length);s.set(i),s.set(a,i.length),a=s,t.w=i.length}return hr(a,e.level==null?6:e.level,e.mem==null?t.l?Math.ceil(Math.max(8,Math.min(13,Math.log(a.length)))*1.5):20:12+e.mem,A,n,t)},_i=function(a,e){var A={};for(var n in a)A[n]=a[n];for(var n in e)A[n]=e[n];return A},Re=function(a,e,A){for(;A;++e)a[e]=A,A>>>=8},fr=function(a,e){return((a[0]&15)!=8||a[0]>>4>7||(a[0]<<8|a[1])%31)&&He(6,"invalid zlib data"),(a[1]>>5&1)==1&&He(6,"invalid zlib data: "+(a[1]&32?"need":"unexpected")+" dictionary"),(a[1]>>3&4)+2};function Cr(a,e){return Br(a,e||{},0,0)}function qA(a,e){return gr(a.subarray(fr(a),-4),{i:2},e,e)}var Pi=function(a,e,A,n){for(var t in a){var i=a[t],s=e+t,o=n;Array.isArray(i)&&(o=_i(n,i[1]),i=i[0]),i instanceof ye?A[s]=[i,o]:(A[s+="/"]=[new ye(0),o],Pi(i,s,A,n))}},Fn=typeof TextEncoder<"u"&&new TextEncoder,pr=typeof TextDecoder<"u"&&new TextDecoder,Er=0;try{pr.decode(Ui,{stream:!0}),Er=1}catch{}function An(a,e){var A;if(Fn)return Fn.encode(a);for(var n=a.length,t=new ye(a.length+(a.length>>1)),i=0,s=function(g){t[i++]=g},A=0;A<n;++A){if(i+5>t.length){var o=new ye(i+8+(n-A<<1));o.set(t),t=o}var c=a.charCodeAt(A);c<128||e?s(c):c<2048?(s(192|c>>6),s(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|a.charCodeAt(++A)&1023,s(240|c>>18),s(128|c>>12&63),s(128|c>>6&63),s(128|c&63)):(s(224|c>>12),s(128|c>>6&63),s(128|c&63))}return cn(t,0,i)}var tn=function(a){var e=0;if(a)for(var A in a){var n=a[A].length;n>65535&&He(9),e+=n+4}return e},Rn=function(a,e,A,n,t,i,s,o){var c=n.length,g=A.extra,l=o&&o.length,h=tn(g);Re(a,e,s!=null?33639248:67324752),e+=4,s!=null&&(a[e++]=20,a[e++]=A.os),a[e]=20,e+=2,a[e++]=A.flag<<1|(i<0&&8),a[e++]=t&&8,a[e++]=A.compression&255,a[e++]=A.compression>>8;var I=new Date(A.mtime==null?Date.now():A.mtime),B=I.getFullYear()-1980;if((B<0||B>119)&&He(10),Re(a,e,B<<25|I.getMonth()+1<<21|I.getDate()<<16|I.getHours()<<11|I.getMinutes()<<5|I.getSeconds()>>1),e+=4,i!=-1&&(Re(a,e,A.crc),Re(a,e+4,i<0?-i-2:i),Re(a,e+8,A.size)),Re(a,e+12,c),Re(a,e+14,h),e+=16,s!=null&&(Re(a,e,l),Re(a,e+6,A.attrs),Re(a,e+10,s),e+=14),a.set(n,e),e+=c,h)for(var f in g){var C=g[f],E=C.length;Re(a,e,+f),Re(a,e+2,E),a.set(C,e+4),e+=4+E}return l&&(a.set(o,e),e+=l),e},dr=function(a,e,A,n,t){Re(a,e,101010256),Re(a,e+8,A),Re(a,e+10,A),Re(a,e+12,n),Re(a,e+16,t)};function Qr(a,e){e||(e={});var A={},n=[];Pi(a,"",A,e);var t=0,i=0;for(var s in A){var o=A[s],c=o[0],g=o[1],l=g.level==0?0:8,h=An(s),I=h.length,B=g.comment,f=B&&An(B),C=f&&f.length,E=tn(g.extra);I>65535&&He(11);var d=l?Cr(c,g):c,y=d.length,Q=ur();Q.p(c),n.push(_i(g,{size:c.length,crc:Q.d(),c:d,f:h,m:f,u:I!=s.length||f&&B.length!=C,o:t,compression:l})),t+=30+I+E+y,i+=76+2*(I+E)+(C||0)+y}for(var b=new ye(i+22),w=t,R=i-t,F=0;F<n.length;++F){var h=n[F];Rn(b,h.o,h,h.f,h.u,h.c.length);var D=30+h.f.length+tn(h.extra);b.set(h.c,h.o+D),Rn(b,t,h,h.f,h.u,h.c.length,h.o,h.m),t+=16+D+(h.m?h.m.length:0)}return dr(b,t,n.length,R,w),b}class mr extends r.DataTextureLoader{constructor(e){super(e),this.type=r.HalfFloatType}parse(e){const M=Math.pow(2.7182818,2.2);function N(u,p){let m=0;for(let G=0;G<65536;++G)(G==0||u[G>>3]&1<<(G&7))&&(p[m++]=G);const S=m-1;for(;m<65536;)p[m++]=0;return S}function _(u){for(let p=0;p<16384;p++)u[p]={},u[p].len=0,u[p].lit=0,u[p].p=null}const P={l:0,c:0,lc:0};function z(u,p,m,S,G){for(;m<u;)p=p<<8|Bn(S,G),m+=8;m-=u,P.l=p>>m&(1<<u)-1,P.c=p,P.lc=m}const U=new Array(59);function q(u){for(let m=0;m<=58;++m)U[m]=0;for(let m=0;m<65537;++m)U[u[m]]+=1;let p=0;for(let m=58;m>0;--m){const S=p+U[m]>>1;U[m]=p,p=S}for(let m=0;m<65537;++m){const S=u[m];S>0&&(u[m]=S|U[S]++<<6)}}function H(u,p,m,S,G,x){const L=p;let O=0,v=0;for(;S<=G;S++){if(L.value-p.value>m)return!1;z(6,O,v,u,L);const k=P.l;if(O=P.c,v=P.lc,x[S]=k,k==63){if(L.value-p.value>m)throw new Error("Something wrong with hufUnpackEncTable");z(8,O,v,u,L);let T=P.l+6;if(O=P.c,v=P.lc,S+T>G+1)throw new Error("Something wrong with hufUnpackEncTable");for(;T--;)x[S++]=0;S--}else if(k>=59){let T=k-59+2;if(S+T>G+1)throw new Error("Something wrong with hufUnpackEncTable");for(;T--;)x[S++]=0;S--}}q(x)}function Z(u){return u&63}function se(u){return u>>6}function ee(u,p,m,S){for(;p<=m;p++){const G=se(u[p]),x=Z(u[p]);if(G>>x)throw new Error("Invalid table entry");if(x>14){const L=S[G>>x-14];if(L.len)throw new Error("Invalid table entry");if(L.lit++,L.p){const O=L.p;L.p=new Array(L.lit);for(let v=0;v<L.lit-1;++v)L.p[v]=O[v]}else L.p=new Array(1);L.p[L.lit-1]=p}else if(x){let L=0;for(let O=1<<14-x;O>0;O--){const v=S[(G<<14-x)+L];if(v.len||v.p)throw new Error("Invalid table entry");v.len=x,v.lit=p,L++}}}return!0}const re={c:0,lc:0};function Ae(u,p,m,S){u=u<<8|Bn(m,S),p+=8,re.c=u,re.lc=p}const W={c:0,lc:0};function te(u,p,m,S,G,x,L,O,v){if(u==p){S<8&&(Ae(m,S,G,x),m=re.c,S=re.lc),S-=8;let k=m>>S;if(k=new Uint8Array([k])[0],O.value+k>v)return!1;const T=L[O.value-1];for(;k-- >0;)L[O.value++]=T}else if(O.value<v)L[O.value++]=u;else return!1;W.c=m,W.lc=S}function ge(u){return u&65535}function he(u){const p=ge(u);return p>32767?p-65536:p}const ne={a:0,b:0};function Te(u,p){const m=he(u),G=he(p),x=m+(G&1)+(G>>1),L=x,O=x-G;ne.a=L,ne.b=O}function Se(u,p){const m=ge(u),S=ge(p),G=m-(S>>1)&65535,x=S+G-32768&65535;ne.a=x,ne.b=G}function hA(u,p,m,S,G,x,L){const O=L<16384,v=m>G?G:m;let k=1,T,K;for(;k<=v;)k<<=1;for(k>>=1,T=k,k>>=1;k>=1;){K=0;const V=K+x*(G-T),Y=x*k,$=x*T,J=S*k,X=S*T;let ie,Be,Qe,qe;for(;K<=V;K+=$){let pe=K;const le=K+S*(m-T);for(;pe<=le;pe+=X){const we=pe+J,ze=pe+Y,xe=ze+J;O?(Te(u[pe+p],u[ze+p]),ie=ne.a,Qe=ne.b,Te(u[we+p],u[xe+p]),Be=ne.a,qe=ne.b,Te(ie,Be),u[pe+p]=ne.a,u[we+p]=ne.b,Te(Qe,qe),u[ze+p]=ne.a,u[xe+p]=ne.b):(Se(u[pe+p],u[ze+p]),ie=ne.a,Qe=ne.b,Se(u[we+p],u[xe+p]),Be=ne.a,qe=ne.b,Se(ie,Be),u[pe+p]=ne.a,u[we+p]=ne.b,Se(Qe,qe),u[ze+p]=ne.a,u[xe+p]=ne.b)}if(m&k){const we=pe+Y;O?Te(u[pe+p],u[we+p]):Se(u[pe+p],u[we+p]),ie=ne.a,u[we+p]=ne.b,u[pe+p]=ie}}if(G&k){let pe=K;const le=K+S*(m-T);for(;pe<=le;pe+=X){const we=pe+J;O?Te(u[pe+p],u[we+p]):Se(u[pe+p],u[we+p]),ie=ne.a,u[we+p]=ne.b,u[pe+p]=ie}}T=k,k>>=1}return K}function _e(u,p,m,S,G,x,L,O,v){let k=0,T=0;const K=L,V=Math.trunc(S.value+(G+7)/8);for(;S.value<V;)for(Ae(k,T,m,S),k=re.c,T=re.lc;T>=14;){const $=k>>T-14&16383,J=p[$];if(J.len)T-=J.len,te(J.lit,x,k,T,m,S,O,v,K),k=W.c,T=W.lc;else{if(!J.p)throw new Error("hufDecode issues");let X;for(X=0;X<J.lit;X++){const ie=Z(u[J.p[X]]);for(;T<ie&&S.value<V;)Ae(k,T,m,S),k=re.c,T=re.lc;if(T>=ie&&se(u[J.p[X]])==(k>>T-ie&(1<<ie)-1)){T-=ie,te(J.p[X],x,k,T,m,S,O,v,K),k=W.c,T=W.lc;break}}if(X==J.lit)throw new Error("hufDecode issues")}}const Y=8-G&7;for(k>>=Y,T-=Y;T>0;){const $=p[k<<14-T&16383];if($.len)T-=$.len,te($.lit,x,k,T,m,S,O,v,K),k=W.c,T=W.lc;else throw new Error("hufDecode issues")}return!0}function Je(u,p,m,S,G,x){const L={value:0},O=m.value,v=Ve(p,m),k=Ve(p,m);m.value+=4;const T=Ve(p,m);if(m.value+=4,v<0||v>=65537||k<0||k>=65537)throw new Error("Something wrong with HUF_ENCSIZE");const K=new Array(65537),V=new Array(16384);_(V);const Y=S-(m.value-O);if(H(u,m,Y,v,k,K),T>8*(S-(m.value-O)))throw new Error("Something wrong with hufUncompress");ee(K,v,k,V),_e(K,V,u,m,T,k,x,G,L)}function pA(u,p,m){for(let S=0;S<m;++S)p[S]=u[p[S]]}function oA(u){for(let p=1;p<u.length;p++){const m=u[p-1]+u[p]-128;u[p]=m}}function wA(u,p){let m=0,S=Math.floor((u.length+1)/2),G=0;const x=u.length-1;for(;!(G>x||(p[G++]=u[m++],G>x));)p[G++]=u[S++]}function In(u){let p=u.byteLength;const m=new Array;let S=0;const G=new DataView(u);for(;p>0;){const x=G.getInt8(S++);if(x<0){const L=-x;p-=L+1;for(let O=0;O<L;O++)m.push(G.getUint8(S++))}else{const L=x;p-=2;const O=G.getUint8(S++);for(let v=0;v<L+1;v++)m.push(O)}}return m}function ts(u,p,m,S,G,x){let L=new DataView(x.buffer);const O=m[u.idx[0]].width,v=m[u.idx[0]].height,k=3,T=Math.floor(O/8),K=Math.ceil(O/8),V=Math.ceil(v/8),Y=O-(K-1)*8,$=v-(V-1)*8,J={value:0},X=new Array(k),ie=new Array(k),Be=new Array(k),Qe=new Array(k),qe=new Array(k);for(let le=0;le<k;++le)qe[le]=p[u.idx[le]],X[le]=le<1?0:X[le-1]+K*V,ie[le]=new Float32Array(64),Be[le]=new Uint16Array(64),Qe[le]=new Uint16Array(K*64);for(let le=0;le<V;++le){let we=8;le==V-1&&(we=$);let ze=8;for(let ue=0;ue<K;++ue){ue==K-1&&(ze=Y);for(let Ce=0;Ce<k;++Ce)Be[Ce].fill(0),Be[Ce][0]=G[X[Ce]++],ns(J,S,Be[Ce]),is(Be[Ce],ie[Ce]),ss(ie[Ce]);os(ie);for(let Ce=0;Ce<k;++Ce)rs(ie[Ce],Qe[Ce],ue*64)}let xe=0;for(let ue=0;ue<k;++ue){const Ce=m[u.idx[ue]].type;for(let rA=8*le;rA<8*le+we;++rA){xe=qe[ue][rA];for(let GA=0;GA<T;++GA){const eA=GA*64+(rA&7)*8;L.setUint16(xe+0*Ce,Qe[ue][eA+0],!0),L.setUint16(xe+2*Ce,Qe[ue][eA+1],!0),L.setUint16(xe+4*Ce,Qe[ue][eA+2],!0),L.setUint16(xe+6*Ce,Qe[ue][eA+3],!0),L.setUint16(xe+8*Ce,Qe[ue][eA+4],!0),L.setUint16(xe+10*Ce,Qe[ue][eA+5],!0),L.setUint16(xe+12*Ce,Qe[ue][eA+6],!0),L.setUint16(xe+14*Ce,Qe[ue][eA+7],!0),xe+=16*Ce}}if(T!=K)for(let rA=8*le;rA<8*le+we;++rA){const GA=qe[ue][rA]+8*T*2*Ce,eA=T*64+(rA&7)*8;for(let ZA=0;ZA<ze;++ZA)L.setUint16(GA+ZA*2*Ce,Qe[ue][eA+ZA],!0)}}}const pe=new Uint16Array(O);L=new DataView(x.buffer);for(let le=0;le<k;++le){m[u.idx[le]].decoded=!0;const we=m[u.idx[le]].type;if(m[le].type==2)for(let ze=0;ze<v;++ze){const xe=qe[le][ze];for(let ue=0;ue<O;++ue)pe[ue]=L.getUint16(xe+ue*2*we,!0);for(let ue=0;ue<O;++ue)L.setFloat32(xe+ue*2*we,j(pe[ue]),!0)}}}function ns(u,p,m){let S,G=1;for(;G<64;)S=p[u.value],S==65280?G=64:S>>8==255?G+=S&255:(m[G]=S,G++),u.value++}function is(u,p){p[0]=j(u[0]),p[1]=j(u[1]),p[2]=j(u[5]),p[3]=j(u[6]),p[4]=j(u[14]),p[5]=j(u[15]),p[6]=j(u[27]),p[7]=j(u[28]),p[8]=j(u[2]),p[9]=j(u[4]),p[10]=j(u[7]),p[11]=j(u[13]),p[12]=j(u[16]),p[13]=j(u[26]),p[14]=j(u[29]),p[15]=j(u[42]),p[16]=j(u[3]),p[17]=j(u[8]),p[18]=j(u[12]),p[19]=j(u[17]),p[20]=j(u[25]),p[21]=j(u[30]),p[22]=j(u[41]),p[23]=j(u[43]),p[24]=j(u[9]),p[25]=j(u[11]),p[26]=j(u[18]),p[27]=j(u[24]),p[28]=j(u[31]),p[29]=j(u[40]),p[30]=j(u[44]),p[31]=j(u[53]),p[32]=j(u[10]),p[33]=j(u[19]),p[34]=j(u[23]),p[35]=j(u[32]),p[36]=j(u[39]),p[37]=j(u[45]),p[38]=j(u[52]),p[39]=j(u[54]),p[40]=j(u[20]),p[41]=j(u[22]),p[42]=j(u[33]),p[43]=j(u[38]),p[44]=j(u[46]),p[45]=j(u[51]),p[46]=j(u[55]),p[47]=j(u[60]),p[48]=j(u[21]),p[49]=j(u[34]),p[50]=j(u[37]),p[51]=j(u[47]),p[52]=j(u[50]),p[53]=j(u[56]),p[54]=j(u[59]),p[55]=j(u[61]),p[56]=j(u[35]),p[57]=j(u[36]),p[58]=j(u[48]),p[59]=j(u[49]),p[60]=j(u[57]),p[61]=j(u[58]),p[62]=j(u[62]),p[63]=j(u[63])}function ss(u){const p=.5*Math.cos(.7853975),m=.5*Math.cos(3.14159/16),S=.5*Math.cos(3.14159/8),G=.5*Math.cos(3*3.14159/16),x=.5*Math.cos(5*3.14159/16),L=.5*Math.cos(3*3.14159/8),O=.5*Math.cos(7*3.14159/16),v=new Array(4),k=new Array(4),T=new Array(4),K=new Array(4);for(let V=0;V<8;++V){const Y=V*8;v[0]=S*u[Y+2],v[1]=L*u[Y+2],v[2]=S*u[Y+6],v[3]=L*u[Y+6],k[0]=m*u[Y+1]+G*u[Y+3]+x*u[Y+5]+O*u[Y+7],k[1]=G*u[Y+1]-O*u[Y+3]-m*u[Y+5]-x*u[Y+7],k[2]=x*u[Y+1]-m*u[Y+3]+O*u[Y+5]+G*u[Y+7],k[3]=O*u[Y+1]-x*u[Y+3]+G*u[Y+5]-m*u[Y+7],T[0]=p*(u[Y+0]+u[Y+4]),T[3]=p*(u[Y+0]-u[Y+4]),T[1]=v[0]+v[3],T[2]=v[1]-v[2],K[0]=T[0]+T[1],K[1]=T[3]+T[2],K[2]=T[3]-T[2],K[3]=T[0]-T[1],u[Y+0]=K[0]+k[0],u[Y+1]=K[1]+k[1],u[Y+2]=K[2]+k[2],u[Y+3]=K[3]+k[3],u[Y+4]=K[3]-k[3],u[Y+5]=K[2]-k[2],u[Y+6]=K[1]-k[1],u[Y+7]=K[0]-k[0]}for(let V=0;V<8;++V)v[0]=S*u[16+V],v[1]=L*u[16+V],v[2]=S*u[48+V],v[3]=L*u[48+V],k[0]=m*u[8+V]+G*u[24+V]+x*u[40+V]+O*u[56+V],k[1]=G*u[8+V]-O*u[24+V]-m*u[40+V]-x*u[56+V],k[2]=x*u[8+V]-m*u[24+V]+O*u[40+V]+G*u[56+V],k[3]=O*u[8+V]-x*u[24+V]+G*u[40+V]-m*u[56+V],T[0]=p*(u[V]+u[32+V]),T[3]=p*(u[V]-u[32+V]),T[1]=v[0]+v[3],T[2]=v[1]-v[2],K[0]=T[0]+T[1],K[1]=T[3]+T[2],K[2]=T[3]-T[2],K[3]=T[0]-T[1],u[0+V]=K[0]+k[0],u[8+V]=K[1]+k[1],u[16+V]=K[2]+k[2],u[24+V]=K[3]+k[3],u[32+V]=K[3]-k[3],u[40+V]=K[2]-k[2],u[48+V]=K[1]-k[1],u[56+V]=K[0]-k[0]}function os(u){for(let p=0;p<64;++p){const m=u[0][p],S=u[1][p],G=u[2][p];u[0][p]=m+1.5747*G,u[1][p]=m-.1873*S-.4682*G,u[2][p]=m+1.8556*S}}function rs(u,p,m){for(let S=0;S<64;++S)p[m+S]=r.DataUtils.toHalfFloat(as(u[S]))}function as(u){return u<=1?Math.sign(u)*Math.pow(Math.abs(u),2.2):Math.sign(u)*Math.pow(M,Math.abs(u)-1)}function pt(u){return new DataView(u.array.buffer,u.offset.value,u.size)}function cs(u){const p=u.viewer.buffer.slice(u.offset.value,u.offset.value+u.size),m=new Uint8Array(In(p)),S=new Uint8Array(m.length);return oA(m),wA(m,S),new DataView(S.buffer)}function Et(u){const p=u.array.slice(u.offset.value,u.offset.value+u.size),m=qA(p),S=new Uint8Array(m.length);return oA(m),wA(m,S),new DataView(S.buffer)}function gs(u){const p=u.viewer,m={value:u.offset.value},S=new Uint16Array(u.columns*u.lines*(u.inputChannels.length*u.type)),G=new Uint8Array(8192);let x=0;const L=new Array(u.inputChannels.length);for(let $=0,J=u.inputChannels.length;$<J;$++)L[$]={},L[$].start=x,L[$].end=L[$].start,L[$].nx=u.columns,L[$].ny=u.lines,L[$].size=u.type,x+=L[$].nx*L[$].ny*L[$].size;const O=RA(p,m),v=RA(p,m);if(v>=8192)throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE");if(O<=v)for(let $=0;$<v-O+1;$++)G[$+O]=IA(p,m);const k=new Uint16Array(65536),T=N(G,k),K=Ve(p,m);Je(u.array,p,m,K,S,x);for(let $=0;$<u.inputChannels.length;++$){const J=L[$];for(let X=0;X<L[$].size;++X)hA(S,J.start+X,J.nx,J.size,J.ny,J.nx*J.size,T)}pA(k,S,x);let V=0;const Y=new Uint8Array(S.buffer.byteLength);for(let $=0;$<u.lines;$++)for(let J=0;J<u.inputChannels.length;J++){const X=L[J],ie=X.nx*X.size,Be=new Uint8Array(S.buffer,X.end*2,ie*2);Y.set(Be,V),V+=ie*2,X.end+=ie}return new DataView(Y.buffer)}function ls(u){const p=u.array.slice(u.offset.value,u.offset.value+u.size),m=qA(p),S=u.inputChannels.length*u.lines*u.columns*u.totalBytes,G=new ArrayBuffer(S),x=new DataView(G);let L=0,O=0;const v=new Array(4);for(let k=0;k<u.lines;k++)for(let T=0;T<u.inputChannels.length;T++){let K=0;switch(u.inputChannels[T].pixelType){case 1:v[0]=L,v[1]=v[0]+u.columns,L=v[1]+u.columns;for(let Y=0;Y<u.columns;++Y){const $=m[v[0]++]<<8|m[v[1]++];K+=$,x.setUint16(O,K,!0),O+=2}break;case 2:v[0]=L,v[1]=v[0]+u.columns,v[2]=v[1]+u.columns,L=v[2]+u.columns;for(let Y=0;Y<u.columns;++Y){const $=m[v[0]++]<<24|m[v[1]++]<<16|m[v[2]++]<<8;K+=$,x.setUint32(O,K,!0),O+=4}break}}return x}function un(u){const p=u.viewer,m={value:u.offset.value},S=new Uint8Array(u.columns*u.lines*(u.inputChannels.length*u.type*2)),G={version:Oe(p,m),unknownUncompressedSize:Oe(p,m),unknownCompressedSize:Oe(p,m),acCompressedSize:Oe(p,m),dcCompressedSize:Oe(p,m),rleCompressedSize:Oe(p,m),rleUncompressedSize:Oe(p,m),rleRawSize:Oe(p,m),totalAcUncompressedCount:Oe(p,m),totalDcUncompressedCount:Oe(p,m),acCompression:Oe(p,m)};if(G.version<2)throw new Error("EXRLoader.parse: "+EA.compression+" version "+G.version+" is unsupported");const x=new Array;let L=RA(p,m)-2;for(;L>0;){const J=WA(p.buffer,m),X=IA(p,m),ie=X>>2&3,Be=(X>>4)-1,Qe=new Int8Array([Be])[0],qe=IA(p,m);x.push({name:J,index:Qe,type:qe,compression:ie}),L-=J.length+3}const O=EA.channels,v=new Array(u.inputChannels.length);for(let J=0;J<u.inputChannels.length;++J){const X=v[J]={},ie=O[J];X.name=ie.name,X.compression=0,X.decoded=!1,X.type=ie.pixelType,X.pLinear=ie.pLinear,X.width=u.columns,X.height=u.lines}const k={idx:new Array(3)};for(let J=0;J<u.inputChannels.length;++J){const X=v[J];for(let ie=0;ie<x.length;++ie){const Be=x[ie];X.name==Be.name&&(X.compression=Be.compression,Be.index>=0&&(k.idx[Be.index]=J),X.offset=J)}}let T,K,V;if(G.acCompressedSize>0)switch(G.acCompression){case 0:T=new Uint16Array(G.totalAcUncompressedCount),Je(u.array,p,m,G.acCompressedSize,T,G.totalAcUncompressedCount);break;case 1:const J=u.array.slice(m.value,m.value+G.totalAcUncompressedCount),X=qA(J);T=new Uint16Array(X.buffer),m.value+=G.totalAcUncompressedCount;break}if(G.dcCompressedSize>0){const J={array:u.array,offset:m,size:G.dcCompressedSize};K=new Uint16Array(Et(J).buffer),m.value+=G.dcCompressedSize}if(G.rleRawSize>0){const J=u.array.slice(m.value,m.value+G.rleCompressedSize),X=qA(J);V=In(X.buffer),m.value+=G.rleCompressedSize}let Y=0;const $=new Array(v.length);for(let J=0;J<$.length;++J)$[J]=new Array;for(let J=0;J<u.lines;++J)for(let X=0;X<v.length;++X)$[X].push(Y),Y+=v[X].width*u.type*2;ts(k,$,v,T,K,S);for(let J=0;J<v.length;++J){const X=v[J];if(!X.decoded)switch(X.compression){case 2:let ie=0,Be=0;for(let Qe=0;Qe<u.lines;++Qe){let qe=$[J][ie];for(let pe=0;pe<X.width;++pe){for(let le=0;le<2*X.type;++le)S[qe++]=V[Be+le*X.width*X.height];Be++}ie++}break;default:throw new Error("EXRLoader.parse: unsupported channel compression")}}return new DataView(S.buffer)}function WA(u,p){const m=new Uint8Array(u);let S=0;for(;m[p.value+S]!=0;)S+=1;const G=new TextDecoder().decode(m.slice(p.value,p.value+S));return p.value=p.value+S+1,G}function hs(u,p,m){const S=new TextDecoder().decode(new Uint8Array(u).slice(p.value,p.value+m));return p.value=p.value+m,S}function Is(u,p){const m=je(u,p),S=Ve(u,p);return[m,S]}function us(u,p){const m=Ve(u,p),S=Ve(u,p);return[m,S]}function je(u,p){const m=u.getInt32(p.value,!0);return p.value=p.value+4,m}function Ve(u,p){const m=u.getUint32(p.value,!0);return p.value=p.value+4,m}function Bn(u,p){const m=u[p.value];return p.value=p.value+1,m}function IA(u,p){const m=u.getUint8(p.value);return p.value=p.value+1,m}const Oe=function(u,p){let m;return"getBigInt64"in DataView.prototype?m=Number(u.getBigInt64(p.value,!0)):m=u.getUint32(p.value+4,!0)+Number(u.getUint32(p.value,!0)<<32),p.value+=8,m};function ke(u,p){const m=u.getFloat32(p.value,!0);return p.value+=4,m}function Bs(u,p){return r.DataUtils.toHalfFloat(ke(u,p))}function j(u){const p=(u&31744)>>10,m=u&1023;return(u>>15?-1:1)*(p?p===31?m?NaN:1/0:Math.pow(2,p-15)*(1+m/1024):6103515625e-14*(m/1024))}function RA(u,p){const m=u.getUint16(p.value,!0);return p.value+=2,m}function fs(u,p){return j(RA(u,p))}function Cs(u,p,m,S){const G=m.value,x=[];for(;m.value<G+S-1;){const L=WA(p,m),O=je(u,m),v=IA(u,m);m.value+=3;const k=je(u,m),T=je(u,m);x.push({name:L,pixelType:O,pLinear:v,xSampling:k,ySampling:T})}return m.value+=1,x}function ps(u,p){const m=ke(u,p),S=ke(u,p),G=ke(u,p),x=ke(u,p),L=ke(u,p),O=ke(u,p),v=ke(u,p),k=ke(u,p);return{redX:m,redY:S,greenX:G,greenY:x,blueX:L,blueY:O,whiteX:v,whiteY:k}}function Es(u,p){const m=["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"],S=IA(u,p);return m[S]}function ds(u,p){const m=je(u,p),S=je(u,p),G=je(u,p),x=je(u,p);return{xMin:m,yMin:S,xMax:G,yMax:x}}function Qs(u,p){const m=["INCREASING_Y","DECREASING_Y","RANDOM_Y"],S=IA(u,p);return m[S]}function ms(u,p){const m=["ENVMAP_LATLONG","ENVMAP_CUBE"],S=IA(u,p);return m[S]}function bs(u,p){const m=["ONE_LEVEL","MIPMAP_LEVELS","RIPMAP_LEVELS"],S=["ROUND_DOWN","ROUND_UP"],G=Ve(u,p),x=Ve(u,p),L=IA(u,p);return{xSize:G,ySize:x,levelMode:m[L&15],roundingMode:S[L>>4]}}function ys(u,p){const m=ke(u,p),S=ke(u,p);return[m,S]}function ws(u,p){const m=ke(u,p),S=ke(u,p),G=ke(u,p);return[m,S,G]}function Ds(u,p,m,S,G){if(S==="string"||S==="stringvector"||S==="iccProfile")return hs(p,m,G);if(S==="chlist")return Cs(u,p,m,G);if(S==="chromaticities")return ps(u,m);if(S==="compression")return Es(u,m);if(S==="box2i")return ds(u,m);if(S==="envmap")return ms(u,m);if(S==="tiledesc")return bs(u,m);if(S==="lineOrder")return Qs(u,m);if(S==="float")return ke(u,m);if(S==="v2f")return ys(u,m);if(S==="v3f")return ws(u,m);if(S==="int")return je(u,m);if(S==="rational")return Is(u,m);if(S==="timecode")return us(u,m);if(S==="preview")return m.value+=G,"skipped";m.value+=G}function Ss(u,p){const m=Math.log2(u);return p=="ROUND_DOWN"?Math.floor(m):Math.ceil(m)}function xs(u,p,m){let S=0;switch(u.levelMode){case"ONE_LEVEL":S=1;break;case"MIPMAP_LEVELS":S=Ss(Math.max(p,m),u.roundingMode)+1;break;case"RIPMAP_LEVELS":throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.")}return S}function fn(u,p,m,S){const G=new Array(u);for(let x=0;x<u;x++){const L=1<<x;let O=p/L|0;S=="ROUND_UP"&&O*L<p&&(O+=1);const v=Math.max(O,1);G[x]=(v+m-1)/m|0}return G}function Ms(){const u=this,p=u.offset,m={value:0};for(let S=0;S<u.tileCount;S++){const G=je(u.viewer,p),x=je(u.viewer,p);p.value+=8,u.size=Ve(u.viewer,p);const L=G*u.blockWidth,O=x*u.blockHeight;u.columns=L+u.blockWidth>u.width?u.width-L:u.blockWidth,u.lines=O+u.blockHeight>u.height?u.height-O:u.blockHeight;const v=u.columns*u.totalBytes,T=u.size<u.lines*v?u.uncompress(u):pt(u);p.value+=u.size;for(let K=0;K<u.lines;K++){const V=K*u.columns*u.totalBytes;for(let Y=0;Y<u.inputChannels.length;Y++){const $=EA.channels[Y].name,J=u.channelByteOffsets[$]*u.columns,X=u.decodeChannels[$];if(X===void 0)continue;m.value=V+J;const ie=(u.height-(1+O+K))*u.outLineWidth;for(let Be=0;Be<u.columns;Be++){const Qe=ie+(Be+L)*u.outputChannels+X;u.byteArray[Qe]=u.getter(T,m)}}}}}function Fs(){const u=this,p=u.offset,m={value:0};for(let S=0;S<u.height/u.blockHeight;S++){const G=je(u.viewer,p)-EA.dataWindow.yMin;u.size=Ve(u.viewer,p),u.lines=G+u.blockHeight>u.height?u.height-G:u.blockHeight;const x=u.columns*u.totalBytes,O=u.size<u.lines*x?u.uncompress(u):pt(u);p.value+=u.size;for(let v=0;v<u.blockHeight;v++){const k=S*u.blockHeight,T=v+u.scanOrder(k);if(T>=u.height)continue;const K=v*x,V=(u.height-1-T)*u.outLineWidth;for(let Y=0;Y<u.inputChannels.length;Y++){const $=EA.channels[Y].name,J=u.channelByteOffsets[$]*u.columns,X=u.decodeChannels[$];if(X!==void 0){m.value=K+J;for(let ie=0;ie<u.columns;ie++){const Be=V+ie*u.outputChannels+X;u.byteArray[Be]=u.getter(O,m)}}}}}}function Rs(u,p,m){const S={};if(u.getUint32(0,!0)!=20000630)throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.");S.version=u.getUint8(4);const G=u.getUint8(5);S.spec={singleTile:!!(G&2),longName:!!(G&4),deepFormat:!!(G&8),multiPart:!!(G&16)},m.value=8;let x=!0;for(;x;){const L=WA(p,m);if(L==0)x=!1;else{const O=WA(p,m),v=Ve(u,m),k=Ds(u,p,m,O,v);k===void 0?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${O}'.`):S[L]=k}}if((G&-7)!=0)throw console.error("THREE.EXRHeader:",S),new Error("THREE.EXRLoader: Provided file is currently unsupported.");return S}function Gs(u,p,m,S,G){const x={size:0,viewer:p,array:m,offset:S,width:u.dataWindow.xMax-u.dataWindow.xMin+1,height:u.dataWindow.yMax-u.dataWindow.yMin+1,inputChannels:u.channels,channelByteOffsets:{},scanOrder:null,totalBytes:null,columns:null,lines:null,type:null,uncompress:null,getter:null,format:null,colorSpace:r.LinearSRGBColorSpace};switch(u.compression){case"NO_COMPRESSION":x.blockHeight=1,x.uncompress=pt;break;case"RLE_COMPRESSION":x.blockHeight=1,x.uncompress=cs;break;case"ZIPS_COMPRESSION":x.blockHeight=1,x.uncompress=Et;break;case"ZIP_COMPRESSION":x.blockHeight=16,x.uncompress=Et;break;case"PIZ_COMPRESSION":x.blockHeight=32,x.uncompress=gs;break;case"PXR24_COMPRESSION":x.blockHeight=16,x.uncompress=ls;break;case"DWAA_COMPRESSION":x.blockHeight=32,x.uncompress=un;break;case"DWAB_COMPRESSION":x.blockHeight=256,x.uncompress=un;break;default:throw new Error("EXRLoader.parse: "+u.compression+" is unsupported")}const L={};for(const T of u.channels)switch(T.name){case"Y":case"R":case"G":case"B":case"A":L[T.name]=!0,x.type=T.pixelType}let O=!1;if(L.R&&L.G&&L.B)O=!L.A,x.outputChannels=4,x.decodeChannels={R:0,G:1,B:2,A:3};else if(L.Y)x.outputChannels=1,x.decodeChannels={Y:0};else throw new Error("EXRLoader.parse: file contains unsupported data channels.");if(x.type==1)switch(G){case r.FloatType:x.getter=fs;break;case r.HalfFloatType:x.getter=RA;break}else if(x.type==2)switch(G){case r.FloatType:x.getter=ke;break;case r.HalfFloatType:x.getter=Bs}else throw new Error("EXRLoader.parse: unsupported pixelType "+x.type+" for "+u.compression+".");x.columns=x.width;const v=x.width*x.height*x.outputChannels;switch(G){case r.FloatType:x.byteArray=new Float32Array(v),O&&x.byteArray.fill(1,0,v);break;case r.HalfFloatType:x.byteArray=new Uint16Array(v),O&&x.byteArray.fill(15360,0,v);break;default:console.error("THREE.EXRLoader: unsupported type: ",G);break}let k=0;for(const T of u.channels)x.decodeChannels[T.name]!==void 0&&(x.channelByteOffsets[T.name]=k),k+=T.pixelType*2;if(x.totalBytes=k,x.outLineWidth=x.width*x.outputChannels,u.lineOrder==="INCREASING_Y"?x.scanOrder=T=>T:x.scanOrder=T=>x.height-1-T,x.outputChannels==4?(x.format=r.RGBAFormat,x.colorSpace=r.LinearSRGBColorSpace):(x.format=r.RedFormat,x.colorSpace=r.NoColorSpace),u.spec.singleTile){x.blockHeight=u.tiles.ySize,x.blockWidth=u.tiles.xSize;const T=xs(u.tiles,x.width,x.height),K=fn(T,x.width,u.tiles.xSize,u.tiles.roundingMode),V=fn(T,x.height,u.tiles.ySize,u.tiles.roundingMode);x.tileCount=K[0]*V[0];for(let Y=0;Y<T;Y++)for(let $=0;$<V[Y];$++)for(let J=0;J<K[Y];J++)Oe(p,S);x.decode=Ms.bind(x)}else{x.blockWidth=x.width;const T=Math.ceil(x.height/x.blockHeight);for(let K=0;K<T;K++)Oe(p,S);x.decode=Fs.bind(x)}return x}const Cn={value:0},pn=new DataView(e),Ts=new Uint8Array(e),EA=Rs(pn,e,Cn),DA=Gs(EA,pn,Ts,Cn,this.type);return DA.decode(),{header:EA,width:DA.width,height:DA.height,data:DA.byteArray,format:DA.format,colorSpace:DA.colorSpace,type:this.type}}setDataType(e){return this.type=e,this}load(e,A,n,t){function i(s,o){s.colorSpace=o.colorSpace,s.minFilter=r.LinearFilter,s.magFilter=r.LinearFilter,s.generateMipmaps=!1,s.flipY=!1,A&&A(s,o)}return super.load(e,i,n,t)}}class br extends r.DataTextureLoader{constructor(e){super(e),this.type=r.HalfFloatType}parse(e){const s=function(D,M){switch(D){case 1:throw new Error("THREE.RGBELoader: Read Error: "+(M||""));case 2:throw new Error("THREE.RGBELoader: Write Error: "+(M||""));case 3:throw new Error("THREE.RGBELoader: Bad File Format: "+(M||""));default:case 4:throw new Error("THREE.RGBELoader: Memory Error: "+(M||""))}},h=function(D,M,N){M=M||1024;let P=D.pos,z=-1,U=0,q="",H=String.fromCharCode.apply(null,new Uint16Array(D.subarray(P,P+128)));for(;0>(z=H.indexOf(`
|
|
1
|
+
"use strict";const r=require("./three-core.umd.cjs");class ks extends r.Mesh{constructor(e,A,n,t=128){if(A<=0||n<=0||t<=0)throw new Error("GroundedSkybox height, radius, and resolution must be positive.");const i=new r.SphereGeometry(n,2*t,t);i.scale(1,1,-1);const s=i.getAttribute("position"),o=new r.Vector3;for(let c=0;c<s.count;++c)if(o.fromBufferAttribute(s,c),o.y<0){const g=-A*3/2,l=o.y<g?-A/o.y:1-o.y*o.y/(3*g*g);o.multiplyScalar(l),o.toArray(s.array,3*c)}s.needsUpdate=!0,super(i,new r.MeshBasicMaterial({map:e,depthWrite:!1}))}}function Ls(a,e,A=!0){if(!e||!e.isReady)throw new Error("BufferGeometryUtils: Initialized MikkTSpace library required.");if(!a.hasAttribute("position")||!a.hasAttribute("normal")||!a.hasAttribute("uv"))throw new Error('BufferGeometryUtils: Tangents require "position", "normal", and "uv" attributes.');function n(s){if(s.normalized||s.isInterleavedBufferAttribute){const o=new Float32Array(s.count*s.itemSize);for(let c=0,g=0;c<s.count;c++)o[g++]=s.getX(c),o[g++]=s.getY(c),s.itemSize>2&&(o[g++]=s.getZ(c));return o}return s.array instanceof Float32Array?s.array:new Float32Array(s.array)}const t=a.index?a.toNonIndexed():a,i=e.generateTangents(n(t.attributes.position),n(t.attributes.normal),n(t.attributes.uv));if(A)for(let s=3;s<i.length;s+=4)i[s]*=-1;return t.setAttribute("tangent",new r.BufferAttribute(i,4)),a!==t&&a.copy(t),a}function vs(a,e=!1){const A=a[0].index!==null,n=new Set(Object.keys(a[0].attributes)),t=new Set(Object.keys(a[0].morphAttributes)),i={},s={},o=a[0].morphTargetsRelative,c=new r.BufferGeometry;let g=0;for(let l=0;l<a.length;++l){const h=a[l];let I=0;if(A!==(h.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const B in h.attributes){if(!n.has(B))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+'. All geometries must have compatible attributes; make sure "'+B+'" attribute exists among all geometries, or in none of them.'),null;i[B]===void 0&&(i[B]=[]),i[B].push(h.attributes[B]),I++}if(I!==n.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". Make sure all geometries have the same number of attributes."),null;if(o!==h.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const B in h.morphAttributes){if(!t.has(B))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". .morphAttributes must be consistent throughout all geometries."),null;s[B]===void 0&&(s[B]=[]),s[B].push(h.morphAttributes[B])}if(e){let B;if(A)B=h.index.count;else if(h.attributes.position!==void 0)B=h.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+l+". The geometry must have either an index or a position attribute"),null;c.addGroup(g,B,l),g+=B}}if(A){let l=0;const h=[];for(let I=0;I<a.length;++I){const B=a[I].index;for(let f=0;f<B.count;++f)h.push(B.getX(f)+l);l+=a[I].attributes.position.count}c.setIndex(h)}for(const l in i){const h=Jt(i[l]);if(!h)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+l+" attribute."),null;c.setAttribute(l,h)}for(const l in s){const h=s[l][0].length;if(h===0)break;c.morphAttributes=c.morphAttributes||{},c.morphAttributes[l]=[];for(let I=0;I<h;++I){const B=[];for(let C=0;C<s[l].length;++C)B.push(s[l][C][I]);const f=Jt(B);if(!f)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+l+" morphAttribute."),null;c.morphAttributes[l].push(f)}}return c}function Jt(a){let e,A,n,t=-1,i=0;for(let g=0;g<a.length;++g){const l=a[g];if(e===void 0&&(e=l.array.constructor),e!==l.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(A===void 0&&(A=l.itemSize),A!==l.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(n===void 0&&(n=l.normalized),n!==l.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(t===-1&&(t=l.gpuType),t!==l.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;i+=l.count*A}const s=new e(i),o=new r.BufferAttribute(s,A,n);let c=0;for(let g=0;g<a.length;++g){const l=a[g];if(l.isInterleavedBufferAttribute){const h=c/A;for(let I=0,B=l.count;I<B;I++)for(let f=0;f<A;f++){const C=l.getComponent(I,f);o.setComponent(I+h,f,C)}}else s.set(l.array,c);c+=l.count*A}return t!==void 0&&(o.gpuType=t),o}function Ns(a){return a.isInstancedInterleavedBufferAttribute||a.isInterleavedBufferAttribute?Bt(a):a.isInstancedBufferAttribute?new r.InstancedBufferAttribute().copy(a):new r.BufferAttribute().copy(a)}function Us(a){let e,A=0,n=0;for(let g=0,l=a.length;g<l;++g){const h=a[g];if(e===void 0&&(e=h.array.constructor),e!==h.array.constructor)return console.error("AttributeBuffers of different types cannot be interleaved"),null;A+=h.array.length,n+=h.itemSize}const t=new r.InterleavedBuffer(new e(A),n);let i=0;const s=[],o=["getX","getY","getZ","getW"],c=["setX","setY","setZ","setW"];for(let g=0,l=a.length;g<l;g++){const h=a[g],I=h.itemSize,B=h.count,f=new r.InterleavedBufferAttribute(t,I,i,h.normalized);s.push(f),i+=I;for(let C=0;C<B;C++)for(let p=0;p<I;p++)f[c[p]](C,h[o[p]](C))}return s}function Bt(a){const e=a.data.array.constructor,A=a.count,n=a.itemSize,t=a.normalized,i=new e(A*n);let s;a.isInstancedInterleavedBufferAttribute?s=new r.InstancedBufferAttribute(i,n,t,a.meshPerAttribute):s=new r.BufferAttribute(i,n,t);for(let o=0;o<A;o++)s.setX(o,a.getX(o)),n>=2&&s.setY(o,a.getY(o)),n>=3&&s.setZ(o,a.getZ(o)),n>=4&&s.setW(o,a.getW(o));return s}function _s(a){const e=a.attributes,A=a.morphTargets,n=new Map;for(const t in e){const i=e[t];i.isInterleavedBufferAttribute&&(n.has(i)||n.set(i,Bt(i)),e[t]=n.get(i))}for(const t in A){const i=A[t];i.isInterleavedBufferAttribute&&(n.has(i)||n.set(i,Bt(i)),A[t]=n.get(i))}}function Ps(a){let e=0;for(const n in a.attributes){const t=a.getAttribute(n);e+=t.count*t.itemSize*t.array.BYTES_PER_ELEMENT}const A=a.getIndex();return e+=A?A.count*A.itemSize*A.array.BYTES_PER_ELEMENT:0,e}function ai(a,e=1e-4){e=Math.max(e,Number.EPSILON);const A={},n=a.getIndex(),t=a.getAttribute("position"),i=n?n.count:t.count;let s=0;const o=Object.keys(a.attributes),c={},g={},l=[],h=["getX","getY","getZ","getW"],I=["setX","setY","setZ","setW"];for(let w=0,Q=o.length;w<Q;w++){const b=o[w],y=a.attributes[b];c[b]=new y.constructor(new y.array.constructor(y.count*y.itemSize),y.itemSize,y.normalized);const R=a.morphAttributes[b];R&&(g[b]||(g[b]=[]),R.forEach((F,D)=>{const M=new F.array.constructor(F.count*F.itemSize);g[b][D]=new F.constructor(M,F.itemSize,F.normalized)}))}const B=e*.5,f=Math.log10(1/e),C=Math.pow(10,f),p=B*C;for(let w=0;w<i;w++){const Q=n?n.getX(w):w;let b="";for(let y=0,R=o.length;y<R;y++){const F=o[y],D=a.getAttribute(F),M=D.itemSize;for(let N=0;N<M;N++)b+=`${~~(D[h[N]](Q)*C+p)},`}if(b in A)l.push(A[b]);else{for(let y=0,R=o.length;y<R;y++){const F=o[y],D=a.getAttribute(F),M=a.morphAttributes[F],N=D.itemSize,_=c[F],P=g[F];for(let z=0;z<N;z++){const U=h[z],q=I[z];if(_[q](s,D[U](Q)),M)for(let H=0,Z=M.length;H<Z;H++)P[H][q](s,M[H][U](Q))}}A[b]=s,l.push(s),s++}}const d=a.clone();for(const w in a.attributes){const Q=c[w];if(d.setAttribute(w,new Q.constructor(Q.array.slice(0,s*Q.itemSize),Q.itemSize,Q.normalized)),w in g)for(let b=0;b<g[w].length;b++){const y=g[w][b];d.morphAttributes[w][b]=new y.constructor(y.array.slice(0,s*y.itemSize),y.itemSize,y.normalized)}}return d.setIndex(l),d}function jt(a,e){if(e===r.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),a;if(e===r.TriangleFanDrawMode||e===r.TriangleStripDrawMode){let A=a.getIndex();if(A===null){const s=[],o=a.getAttribute("position");if(o!==void 0){for(let c=0;c<o.count;c++)s.push(c);a.setIndex(s),A=a.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),a}const n=A.count-2,t=[];if(e===r.TriangleFanDrawMode)for(let s=1;s<=n;s++)t.push(A.getX(0)),t.push(A.getX(s)),t.push(A.getX(s+1));else for(let s=0;s<n;s++)s%2===0?(t.push(A.getX(s)),t.push(A.getX(s+1)),t.push(A.getX(s+2))):(t.push(A.getX(s+2)),t.push(A.getX(s+1)),t.push(A.getX(s)));t.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const i=a.clone();return i.setIndex(t),i.clearGroups(),i}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),a}function Hs(a){const e=new r.Vector3,A=new r.Vector3,n=new r.Vector3,t=new r.Vector3,i=new r.Vector3,s=new r.Vector3,o=new r.Vector3,c=new r.Vector3,g=new r.Vector3;function l(ee,re,Ae,W,te,ge,he,ne){e.fromBufferAttribute(re,te),A.fromBufferAttribute(re,ge),n.fromBufferAttribute(re,he);const Te=ee.morphTargetInfluences;if(Ae&&Te){o.set(0,0,0),c.set(0,0,0),g.set(0,0,0);for(let Se=0,hA=Ae.length;Se<hA;Se++){const _e=Te[Se],Je=Ae[Se];_e!==0&&(t.fromBufferAttribute(Je,te),i.fromBufferAttribute(Je,ge),s.fromBufferAttribute(Je,he),W?(o.addScaledVector(t,_e),c.addScaledVector(i,_e),g.addScaledVector(s,_e)):(o.addScaledVector(t.sub(e),_e),c.addScaledVector(i.sub(A),_e),g.addScaledVector(s.sub(n),_e)))}e.add(o),A.add(c),n.add(g)}ee.isSkinnedMesh&&(ee.applyBoneTransform(te,e),ee.applyBoneTransform(ge,A),ee.applyBoneTransform(he,n)),ne[te*3+0]=e.x,ne[te*3+1]=e.y,ne[te*3+2]=e.z,ne[ge*3+0]=A.x,ne[ge*3+1]=A.y,ne[ge*3+2]=A.z,ne[he*3+0]=n.x,ne[he*3+1]=n.y,ne[he*3+2]=n.z}const h=a.geometry,I=a.material;let B,f,C;const p=h.index,d=h.attributes.position,w=h.morphAttributes.position,Q=h.morphTargetsRelative,b=h.attributes.normal,y=h.morphAttributes.position,R=h.groups,F=h.drawRange;let D,M,N,_,P,z,U;const q=new Float32Array(d.count*d.itemSize),H=new Float32Array(b.count*b.itemSize);if(p!==null)if(Array.isArray(I))for(D=0,N=R.length;D<N;D++)for(P=R[D],z=Math.max(P.start,F.start),U=Math.min(P.start+P.count,F.start+F.count),M=z,_=U;M<_;M+=3)B=p.getX(M),f=p.getX(M+1),C=p.getX(M+2),l(a,d,w,Q,B,f,C,q),l(a,b,y,Q,B,f,C,H);else for(z=Math.max(0,F.start),U=Math.min(p.count,F.start+F.count),D=z,N=U;D<N;D+=3)B=p.getX(D),f=p.getX(D+1),C=p.getX(D+2),l(a,d,w,Q,B,f,C,q),l(a,b,y,Q,B,f,C,H);else if(Array.isArray(I))for(D=0,N=R.length;D<N;D++)for(P=R[D],z=Math.max(P.start,F.start),U=Math.min(P.start+P.count,F.start+F.count),M=z,_=U;M<_;M+=3)B=M,f=M+1,C=M+2,l(a,d,w,Q,B,f,C,q),l(a,b,y,Q,B,f,C,H);else for(z=Math.max(0,F.start),U=Math.min(d.count,F.start+F.count),D=z,N=U;D<N;D+=3)B=D,f=D+1,C=D+2,l(a,d,w,Q,B,f,C,q),l(a,b,y,Q,B,f,C,H);const Z=new r.Float32BufferAttribute(q,3),se=new r.Float32BufferAttribute(H,3);return{positionAttribute:d,normalAttribute:b,morphedPositionAttribute:Z,morphedNormalAttribute:se}}function Os(a){if(a.groups.length===0)return console.warn("THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge."),a;let e=a.groups;if(e=e.sort((s,o)=>s.materialIndex!==o.materialIndex?s.materialIndex-o.materialIndex:s.start-o.start),a.getIndex()===null){const s=a.getAttribute("position"),o=[];for(let c=0;c<s.count;c+=3)o.push(c,c+1,c+2);a.setIndex(o)}const A=a.getIndex(),n=[];for(let s=0;s<e.length;s++){const o=e[s],c=o.start,g=c+o.count;for(let l=c;l<g;l++)n.push(A.getX(l))}a.dispose(),a.setIndex(n);let t=0;for(let s=0;s<e.length;s++){const o=e[s];o.start=t,t+=o.count}let i=e[0];a.groups=[i];for(let s=1;s<e.length;s++){const o=e[s];i.materialIndex===o.materialIndex?i.count+=o.count:(i=o,a.groups.push(i))}return a}function qs(a,e=Math.PI/3){const A=Math.cos(e),n=(1+1e-10)*100,t=[new r.Vector3,new r.Vector3,new r.Vector3],i=new r.Vector3,s=new r.Vector3,o=new r.Vector3,c=new r.Vector3;function g(C){const p=~~(C.x*n),d=~~(C.y*n),w=~~(C.z*n);return`${p},${d},${w}`}const l=a.index?a.toNonIndexed():a,h=l.attributes.position,I={};for(let C=0,p=h.count/3;C<p;C++){const d=3*C,w=t[0].fromBufferAttribute(h,d+0),Q=t[1].fromBufferAttribute(h,d+1),b=t[2].fromBufferAttribute(h,d+2);i.subVectors(b,Q),s.subVectors(w,Q);const y=new r.Vector3().crossVectors(i,s).normalize();for(let R=0;R<3;R++){const F=t[R],D=g(F);D in I||(I[D]=[]),I[D].push(y)}}const B=new Float32Array(h.count*3),f=new r.BufferAttribute(B,3,!1);for(let C=0,p=h.count/3;C<p;C++){const d=3*C,w=t[0].fromBufferAttribute(h,d+0),Q=t[1].fromBufferAttribute(h,d+1),b=t[2].fromBufferAttribute(h,d+2);i.subVectors(b,Q),s.subVectors(w,Q),o.crossVectors(i,s).normalize();for(let y=0;y<3;y++){const R=t[y],F=g(R),D=I[F];c.set(0,0,0);for(let M=0,N=D.length;M<N;M++){const _=D[M];o.dot(_)>A&&c.add(_)}c.normalize(),f.setXYZ(d+y,c.x,c.y,c.z)}}return l.setAttribute("normal",f),l}const Ks=Object.freeze(Object.defineProperty({__proto__:null,computeMikkTSpaceTangents:Ls,computeMorphedAttributes:Hs,deepCloneAttribute:Ns,deinterleaveAttribute:Bt,deinterleaveGeometry:_s,estimateBytesUsed:Ps,interleaveAttributes:Us,mergeAttributes:Jt,mergeGeometries:vs,mergeGroups:Os,mergeVertices:ai,toCreasedNormals:qs,toTrianglesDrawMode:jt},Symbol.toStringTag,{value:"Module"}));class ci extends r.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(A){return new zs(A)}),this.register(function(A){return new Xs(A)}),this.register(function(A){return new so(A)}),this.register(function(A){return new oo(A)}),this.register(function(A){return new ro(A)}),this.register(function(A){return new Zs(A)}),this.register(function(A){return new $s(A)}),this.register(function(A){return new eo(A)}),this.register(function(A){return new Ao(A)}),this.register(function(A){return new Vs(A)}),this.register(function(A){return new to(A)}),this.register(function(A){return new Ws(A)}),this.register(function(A){return new io(A)}),this.register(function(A){return new no(A)}),this.register(function(A){return new Js(A)}),this.register(function(A){return new ao(A)}),this.register(function(A){return new co(A)})}load(e,A,n,t){const i=this;let s;if(this.resourcePath!=="")s=this.resourcePath;else if(this.path!==""){const g=r.LoaderUtils.extractUrlBase(e);s=r.LoaderUtils.resolveURL(g,this.path)}else s=r.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);const o=function(g){t?t(g):console.error(g),i.manager.itemError(e),i.manager.itemEnd(e)},c=new r.FileLoader(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(g){try{i.parse(g,s,function(l){A(l),i.manager.itemEnd(e)},o)}catch(l){o(l)}},n,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,A,n,t){let i,s;const o={},c={},g=new TextDecoder;if(typeof e=="string")try{i=JSON.parse(e)}catch(h){s=e,t&&t(h);return}else if(e instanceof ArrayBuffer)if(g.decode(new Uint8Array(e,0,4))===gi){try{o[ae.KHR_BINARY_GLTF]=new go(e)}catch(I){t&&t(I);return}try{i=JSON.parse(o[ae.KHR_BINARY_GLTF].content)}catch(I){s=o[ae.KHR_BINARY_GLTF].content,t&&t(I);return}}else try{i=JSON.parse(g.decode(e))}catch(I){s=g.decode(e),t&&t(I);return}else i=e;if(i.asset===void 0||i.asset.version[0]<2){t&&t(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}this.json=i,this.jsonErrorData=s;const l=new wo(i,{path:A||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h<this.pluginCallbacks.length;h++){const I=this.pluginCallbacks[h](l);I.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),c[I.name]=I,o[I.name]=!0}if(i.extensionsUsed)for(let h=0;h<i.extensionsUsed.length;++h){const I=i.extensionsUsed[h],B=i.extensionsRequired||[];switch(I){case ae.KHR_MATERIALS_UNLIT:o[I]=new js;break;case ae.KHR_DRACO_MESH_COMPRESSION:o[I]=new lo(i,this.dracoLoader);break;case ae.KHR_TEXTURE_TRANSFORM:o[I]=new ho;break;case ae.KHR_MESH_QUANTIZATION:o[I]=new Io;break;default:B.indexOf(I)>=0&&c[I]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+I+'".')}}l.setExtensions(o),l.setPlugins(c),l.parse(n,t)}parseAsync(e,A){const n=this;return new Promise(function(t,i){n.parse(e,A,t,i)})}}function Ys(){let a={};return{get:function(e){return a[e]},add:function(e,A){a[e]=A},remove:function(e){delete a[e]},removeAll:function(){a={}}}}const ae={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class Js{constructor(e){this.parser=e,this.name=ae.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,A=this.parser.json.nodes||[];for(let n=0,t=A.length;n<t;n++){const i=A[n];i.extensions&&i.extensions[this.name]&&i.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,i.extensions[this.name].light)}}_loadLight(e){const A=this.parser,n="light:"+e;let t=A.cache.get(n);if(t)return t;const i=A.json,c=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let g;const l=new r.Color(16777215);c.color!==void 0&&l.setRGB(c.color[0],c.color[1],c.color[2],r.LinearSRGBColorSpace);const h=c.range!==void 0?c.range:0;switch(c.type){case"directional":g=new r.DirectionalLight(l),g.target.position.set(0,0,-1),g.add(g.target);break;case"point":g=new r.PointLight(l),g.distance=h;break;case"spot":g=new r.SpotLight(l),g.distance=h,c.spot=c.spot||{},c.spot.innerConeAngle=c.spot.innerConeAngle!==void 0?c.spot.innerConeAngle:0,c.spot.outerConeAngle=c.spot.outerConeAngle!==void 0?c.spot.outerConeAngle:Math.PI/4,g.angle=c.spot.outerConeAngle,g.penumbra=1-c.spot.innerConeAngle/c.spot.outerConeAngle,g.target.position.set(0,0,-1),g.add(g.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+c.type)}return g.position.set(0,0,0),g.decay=2,gA(g,c),c.intensity!==void 0&&(g.intensity=c.intensity),g.name=A.createUniqueName(c.name||"light_"+e),t=Promise.resolve(g),A.cache.add(n,t),t}getDependency(e,A){if(e==="light")return this._loadLight(A)}createNodeAttachment(e){const A=this,n=this.parser,i=n.json.nodes[e],o=(i.extensions&&i.extensions[this.name]||{}).light;return o===void 0?null:this._loadLight(o).then(function(c){return n._getNodeRef(A.cache,o,c)})}}let js=class{constructor(){this.name=ae.KHR_MATERIALS_UNLIT}getMaterialType(){return r.MeshBasicMaterial}extendParams(e,A,n){const t=[];e.color=new r.Color(1,1,1),e.opacity=1;const i=A.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const s=i.baseColorFactor;e.color.setRGB(s[0],s[1],s[2],r.LinearSRGBColorSpace),e.opacity=s[3]}i.baseColorTexture!==void 0&&t.push(n.assignTexture(e,"map",i.baseColorTexture,r.SRGBColorSpace))}return Promise.all(t)}},Vs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,A){const t=this.parser.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=t.extensions[this.name].emissiveStrength;return i!==void 0&&(A.emissiveIntensity=i),Promise.resolve()}},zs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];if(s.clearcoatFactor!==void 0&&(A.clearcoat=s.clearcoatFactor),s.clearcoatTexture!==void 0&&i.push(n.assignTexture(A,"clearcoatMap",s.clearcoatTexture)),s.clearcoatRoughnessFactor!==void 0&&(A.clearcoatRoughness=s.clearcoatRoughnessFactor),s.clearcoatRoughnessTexture!==void 0&&i.push(n.assignTexture(A,"clearcoatRoughnessMap",s.clearcoatRoughnessTexture)),s.clearcoatNormalTexture!==void 0&&(i.push(n.assignTexture(A,"clearcoatNormalMap",s.clearcoatNormalTexture)),s.clearcoatNormalTexture.scale!==void 0)){const o=s.clearcoatNormalTexture.scale;A.clearcoatNormalScale=new r.Vector2(o,o)}return Promise.all(i)}},Xs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_DISPERSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const t=this.parser.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=t.extensions[this.name];return A.dispersion=i.dispersion!==void 0?i.dispersion:0,Promise.resolve()}},Ws=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return s.iridescenceFactor!==void 0&&(A.iridescence=s.iridescenceFactor),s.iridescenceTexture!==void 0&&i.push(n.assignTexture(A,"iridescenceMap",s.iridescenceTexture)),s.iridescenceIor!==void 0&&(A.iridescenceIOR=s.iridescenceIor),A.iridescenceThicknessRange===void 0&&(A.iridescenceThicknessRange=[100,400]),s.iridescenceThicknessMinimum!==void 0&&(A.iridescenceThicknessRange[0]=s.iridescenceThicknessMinimum),s.iridescenceThicknessMaximum!==void 0&&(A.iridescenceThicknessRange[1]=s.iridescenceThicknessMaximum),s.iridescenceThicknessTexture!==void 0&&i.push(n.assignTexture(A,"iridescenceThicknessMap",s.iridescenceThicknessTexture)),Promise.all(i)}},Zs=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_SHEEN}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[];A.sheenColor=new r.Color(0,0,0),A.sheenRoughness=0,A.sheen=1;const s=t.extensions[this.name];if(s.sheenColorFactor!==void 0){const o=s.sheenColorFactor;A.sheenColor.setRGB(o[0],o[1],o[2],r.LinearSRGBColorSpace)}return s.sheenRoughnessFactor!==void 0&&(A.sheenRoughness=s.sheenRoughnessFactor),s.sheenColorTexture!==void 0&&i.push(n.assignTexture(A,"sheenColorMap",s.sheenColorTexture,r.SRGBColorSpace)),s.sheenRoughnessTexture!==void 0&&i.push(n.assignTexture(A,"sheenRoughnessMap",s.sheenRoughnessTexture)),Promise.all(i)}},$s=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return s.transmissionFactor!==void 0&&(A.transmission=s.transmissionFactor),s.transmissionTexture!==void 0&&i.push(n.assignTexture(A,"transmissionMap",s.transmissionTexture)),Promise.all(i)}},eo=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_VOLUME}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];A.thickness=s.thicknessFactor!==void 0?s.thicknessFactor:0,s.thicknessTexture!==void 0&&i.push(n.assignTexture(A,"thicknessMap",s.thicknessTexture)),A.attenuationDistance=s.attenuationDistance||1/0;const o=s.attenuationColor||[1,1,1];return A.attenuationColor=new r.Color().setRGB(o[0],o[1],o[2],r.LinearSRGBColorSpace),Promise.all(i)}},Ao=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_IOR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const t=this.parser.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=t.extensions[this.name];return A.ior=i.ior!==void 0?i.ior:1.5,Promise.resolve()}},to=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_SPECULAR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];A.specularIntensity=s.specularFactor!==void 0?s.specularFactor:1,s.specularTexture!==void 0&&i.push(n.assignTexture(A,"specularIntensityMap",s.specularTexture));const o=s.specularColorFactor||[1,1,1];return A.specularColor=new r.Color().setRGB(o[0],o[1],o[2],r.LinearSRGBColorSpace),s.specularColorTexture!==void 0&&i.push(n.assignTexture(A,"specularColorMap",s.specularColorTexture,r.SRGBColorSpace)),Promise.all(i)}},no=class{constructor(e){this.parser=e,this.name=ae.EXT_MATERIALS_BUMP}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return A.bumpScale=s.bumpFactor!==void 0?s.bumpFactor:1,s.bumpTexture!==void 0&&i.push(n.assignTexture(A,"bumpMap",s.bumpTexture)),Promise.all(i)}},io=class{constructor(e){this.parser=e,this.name=ae.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:r.MeshPhysicalMaterial}extendMaterialParams(e,A){const n=this.parser,t=n.json.materials[e];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const i=[],s=t.extensions[this.name];return s.anisotropyStrength!==void 0&&(A.anisotropy=s.anisotropyStrength),s.anisotropyRotation!==void 0&&(A.anisotropyRotation=s.anisotropyRotation),s.anisotropyTexture!==void 0&&i.push(n.assignTexture(A,"anisotropyMap",s.anisotropyTexture)),Promise.all(i)}};class so{constructor(e){this.parser=e,this.name=ae.KHR_TEXTURE_BASISU}loadTexture(e){const A=this.parser,n=A.json,t=n.textures[e];if(!t.extensions||!t.extensions[this.name])return null;const i=t.extensions[this.name],s=A.options.ktx2Loader;if(!s){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return A.loadTextureImage(e,i.source,s)}}class oo{constructor(e){this.parser=e,this.name=ae.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const A=this.name,n=this.parser,t=n.json,i=t.textures[e];if(!i.extensions||!i.extensions[A])return null;const s=i.extensions[A],o=t.images[s.source];let c=n.textureLoader;if(o.uri){const g=n.options.manager.getHandler(o.uri);g!==null&&(c=g)}return this.detectSupport().then(function(g){if(g)return n.loadTextureImage(e,s.source,c);if(t.extensionsRequired&&t.extensionsRequired.indexOf(A)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const A=new Image;A.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",A.onload=A.onerror=function(){e(A.height===1)}})),this.isSupported}}class ro{constructor(e){this.parser=e,this.name=ae.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const A=this.name,n=this.parser,t=n.json,i=t.textures[e];if(!i.extensions||!i.extensions[A])return null;const s=i.extensions[A],o=t.images[s.source];let c=n.textureLoader;if(o.uri){const g=n.options.manager.getHandler(o.uri);g!==null&&(c=g)}return this.detectSupport().then(function(g){if(g)return n.loadTextureImage(e,s.source,c);if(t.extensionsRequired&&t.extensionsRequired.indexOf(A)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const A=new Image;A.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",A.onload=A.onerror=function(){e(A.height===1)}})),this.isSupported}}class ao{constructor(e){this.name=ae.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const A=this.parser.json,n=A.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const t=n.extensions[this.name],i=this.parser.getDependency("buffer",t.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(A.extensionsRequired&&A.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return i.then(function(o){const c=t.byteOffset||0,g=t.byteLength||0,l=t.count,h=t.byteStride,I=new Uint8Array(o,c,g);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(l,h,I,t.mode,t.filter).then(function(B){return B.buffer}):s.ready.then(function(){const B=new ArrayBuffer(l*h);return s.decodeGltfBuffer(new Uint8Array(B),l,h,I,t.mode,t.filter),B})})}else return null}}let co=class{constructor(e){this.name=ae.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const A=this.parser.json,n=A.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;const t=A.meshes[n.mesh];for(const g of t.primitives)if(g.mode!==We.TRIANGLES&&g.mode!==We.TRIANGLE_STRIP&&g.mode!==We.TRIANGLE_FAN&&g.mode!==void 0)return null;const s=n.extensions[this.name].attributes,o=[],c={};for(const g in s)o.push(this.parser.getDependency("accessor",s[g]).then(l=>(c[g]=l,c[g])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(g=>{const l=g.pop(),h=l.isGroup?l.children:[l],I=g[0].count,B=[];for(const f of h){const C=new r.Matrix4,p=new r.Vector3,d=new r.Quaternion,w=new r.Vector3(1,1,1),Q=new r.InstancedMesh(f.geometry,f.material,I);for(let b=0;b<I;b++)c.TRANSLATION&&p.fromBufferAttribute(c.TRANSLATION,b),c.ROTATION&&d.fromBufferAttribute(c.ROTATION,b),c.SCALE&&w.fromBufferAttribute(c.SCALE,b),Q.setMatrixAt(b,C.compose(p,d,w));for(const b in c)if(b==="_COLOR_0"){const y=c[b];Q.instanceColor=new r.InstancedBufferAttribute(y.array,y.itemSize,y.normalized)}else b!=="TRANSLATION"&&b!=="ROTATION"&&b!=="SCALE"&&f.geometry.setAttribute(b,c[b]);r.Object3D.prototype.copy.call(Q,f),this.parser.assignFinalMaterial(Q),B.push(Q)}return l.isGroup?(l.clear(),l.add(...B),l):B[0]}))}};const gi="glTF",TA=12,En={JSON:1313821514,BIN:5130562};class go{constructor(e){this.name=ae.KHR_BINARY_GLTF,this.content=null,this.body=null;const A=new DataView(e,0,TA),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:A.getUint32(4,!0),length:A.getUint32(8,!0)},this.header.magic!==gi)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const t=this.header.length-TA,i=new DataView(e,TA);let s=0;for(;s<t;){const o=i.getUint32(s,!0);s+=4;const c=i.getUint32(s,!0);if(s+=4,c===En.JSON){const g=new Uint8Array(e,TA+s,o);this.content=n.decode(g)}else if(c===En.BIN){const g=TA+s;this.body=e.slice(g,g+o)}s+=o}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class lo{constructor(e,A){if(!A)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=ae.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=A,this.dracoLoader.preload()}decodePrimitive(e,A){const n=this.json,t=this.dracoLoader,i=e.extensions[this.name].bufferView,s=e.extensions[this.name].attributes,o={},c={},g={};for(const l in s){const h=Vt[l]||l.toLowerCase();o[h]=s[l]}for(const l in e.attributes){const h=Vt[l]||l.toLowerCase();if(s[l]!==void 0){const I=n.accessors[e.attributes[l]],B=FA[I.componentType];g[h]=B.name,c[h]=I.normalized===!0}}return A.getDependency("bufferView",i).then(function(l){return new Promise(function(h,I){t.decodeDracoFile(l,function(B){for(const f in B.attributes){const C=B.attributes[f],p=c[f];p!==void 0&&(C.normalized=p)}h(B)},o,g,r.LinearSRGBColorSpace,I)})})}}class ho{constructor(){this.name=ae.KHR_TEXTURE_TRANSFORM}extendTexture(e,A){return(A.texCoord===void 0||A.texCoord===e.channel)&&A.offset===void 0&&A.rotation===void 0&&A.scale===void 0||(e=e.clone(),A.texCoord!==void 0&&(e.channel=A.texCoord),A.offset!==void 0&&e.offset.fromArray(A.offset),A.rotation!==void 0&&(e.rotation=A.rotation),A.scale!==void 0&&e.repeat.fromArray(A.scale),e.needsUpdate=!0),e}}class Io{constructor(){this.name=ae.KHR_MESH_QUANTIZATION}}class li extends r.Interpolant{constructor(e,A,n,t){super(e,A,n,t)}copySampleValue_(e){const A=this.resultBuffer,n=this.sampleValues,t=this.valueSize,i=e*t*3+t;for(let s=0;s!==t;s++)A[s]=n[i+s];return A}interpolate_(e,A,n,t){const i=this.resultBuffer,s=this.sampleValues,o=this.valueSize,c=o*2,g=o*3,l=t-A,h=(n-A)/l,I=h*h,B=I*h,f=e*g,C=f-g,p=-2*B+3*I,d=B-I,w=1-p,Q=d-I+h;for(let b=0;b!==o;b++){const y=s[C+b+o],R=s[C+b+c]*l,F=s[f+b+o],D=s[f+b]*l;i[b]=w*y+Q*R+p*F+d*D}return i}}const uo=new r.Quaternion;class Bo extends li{interpolate_(e,A,n,t){const i=super.interpolate_(e,A,n,t);return uo.fromArray(i).normalize().toArray(i),i}}const We={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},FA={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},pn={9728:r.NearestFilter,9729:r.LinearFilter,9984:r.NearestMipmapNearestFilter,9985:r.LinearMipmapNearestFilter,9986:r.NearestMipmapLinearFilter,9987:r.LinearMipmapLinearFilter},dn={33071:r.ClampToEdgeWrapping,33648:r.MirroredRepeatWrapping,10497:r.RepeatWrapping},dt={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Vt={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},uA={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},fo={CUBICSPLINE:void 0,LINEAR:r.InterpolateLinear,STEP:r.InterpolateDiscrete},Qt={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function Co(a){return a.DefaultMaterial===void 0&&(a.DefaultMaterial=new r.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:r.FrontSide})),a.DefaultMaterial}function dA(a,e,A){for(const n in A.extensions)a[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=A.extensions[n])}function gA(a,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(a.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function Eo(a,e,A){let n=!1,t=!1,i=!1;for(let g=0,l=e.length;g<l;g++){const h=e[g];if(h.POSITION!==void 0&&(n=!0),h.NORMAL!==void 0&&(t=!0),h.COLOR_0!==void 0&&(i=!0),n&&t&&i)break}if(!n&&!t&&!i)return Promise.resolve(a);const s=[],o=[],c=[];for(let g=0,l=e.length;g<l;g++){const h=e[g];if(n){const I=h.POSITION!==void 0?A.getDependency("accessor",h.POSITION):a.attributes.position;s.push(I)}if(t){const I=h.NORMAL!==void 0?A.getDependency("accessor",h.NORMAL):a.attributes.normal;o.push(I)}if(i){const I=h.COLOR_0!==void 0?A.getDependency("accessor",h.COLOR_0):a.attributes.color;c.push(I)}}return Promise.all([Promise.all(s),Promise.all(o),Promise.all(c)]).then(function(g){const l=g[0],h=g[1],I=g[2];return n&&(a.morphAttributes.position=l),t&&(a.morphAttributes.normal=h),i&&(a.morphAttributes.color=I),a.morphTargetsRelative=!0,a})}function po(a,e){if(a.updateMorphTargets(),e.weights!==void 0)for(let A=0,n=e.weights.length;A<n;A++)a.morphTargetInfluences[A]=e.weights[A];if(e.extras&&Array.isArray(e.extras.targetNames)){const A=e.extras.targetNames;if(a.morphTargetInfluences.length===A.length){a.morphTargetDictionary={};for(let n=0,t=A.length;n<t;n++)a.morphTargetDictionary[A[n]]=n}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function Qo(a){let e;const A=a.extensions&&a.extensions[ae.KHR_DRACO_MESH_COMPRESSION];if(A?e="draco:"+A.bufferView+":"+A.indices+":"+mt(A.attributes):e=a.indices+":"+mt(a.attributes)+":"+a.mode,a.targets!==void 0)for(let n=0,t=a.targets.length;n<t;n++)e+=":"+mt(a.targets[n]);return e}function mt(a){let e="";const A=Object.keys(a).sort();for(let n=0,t=A.length;n<t;n++)e+=A[n]+":"+a[A[n]]+";";return e}function zt(a){switch(a){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function mo(a){return a.search(/\.jpe?g($|\?)/i)>0||a.search(/^data\:image\/jpeg/)===0?"image/jpeg":a.search(/\.webp($|\?)/i)>0||a.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const bo=new r.Matrix4;class wo{constructor(e={},A={}){this.json=e,this.extensions={},this.plugins={},this.options=A,this.cache=new Ys,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,t=-1,i=!1,s=-1;if(typeof navigator<"u"){const o=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(o)===!0;const c=o.match(/Version\/(\d+)/);t=n&&c?parseInt(c[1],10):-1,i=o.indexOf("Firefox")>-1,s=i?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||n&&t<17||i&&s<98?this.textureLoader=new r.TextureLoader(this.options.manager):this.textureLoader=new r.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new r.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,A){const n=this,t=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(s){return s._markDefs&&s._markDefs()}),Promise.all(this._invokeAll(function(s){return s.beforeRoot&&s.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(s){const o={scene:s[0][t.scene||0],scenes:s[0],animations:s[1],cameras:s[2],asset:t.asset,parser:n,userData:{}};return dA(i,o,t),gA(o,t),Promise.all(n._invokeAll(function(c){return c.afterRoot&&c.afterRoot(o)})).then(function(){for(const c of o.scenes)c.updateMatrixWorld();e(o)})}).catch(A)}_markDefs(){const e=this.json.nodes||[],A=this.json.skins||[],n=this.json.meshes||[];for(let t=0,i=A.length;t<i;t++){const s=A[t].joints;for(let o=0,c=s.length;o<c;o++)e[s[o]].isBone=!0}for(let t=0,i=e.length;t<i;t++){const s=e[t];s.mesh!==void 0&&(this._addNodeRef(this.meshCache,s.mesh),s.skin!==void 0&&(n[s.mesh].isSkinnedMesh=!0)),s.camera!==void 0&&this._addNodeRef(this.cameraCache,s.camera)}}_addNodeRef(e,A){A!==void 0&&(e.refs[A]===void 0&&(e.refs[A]=e.uses[A]=0),e.refs[A]++)}_getNodeRef(e,A,n){if(e.refs[A]<=1)return n;const t=n.clone(),i=(s,o)=>{const c=this.associations.get(s);c!=null&&this.associations.set(o,c);for(const[g,l]of s.children.entries())i(l,o.children[g])};return i(n,t),t.name+="_instance_"+e.uses[A]++,t}_invokeOne(e){const A=Object.values(this.plugins);A.push(this);for(let n=0;n<A.length;n++){const t=e(A[n]);if(t)return t}return null}_invokeAll(e){const A=Object.values(this.plugins);A.unshift(this);const n=[];for(let t=0;t<A.length;t++){const i=e(A[t]);i&&n.push(i)}return n}getDependency(e,A){const n=e+":"+A;let t=this.cache.get(n);if(!t){switch(e){case"scene":t=this.loadScene(A);break;case"node":t=this._invokeOne(function(i){return i.loadNode&&i.loadNode(A)});break;case"mesh":t=this._invokeOne(function(i){return i.loadMesh&&i.loadMesh(A)});break;case"accessor":t=this.loadAccessor(A);break;case"bufferView":t=this._invokeOne(function(i){return i.loadBufferView&&i.loadBufferView(A)});break;case"buffer":t=this.loadBuffer(A);break;case"material":t=this._invokeOne(function(i){return i.loadMaterial&&i.loadMaterial(A)});break;case"texture":t=this._invokeOne(function(i){return i.loadTexture&&i.loadTexture(A)});break;case"skin":t=this.loadSkin(A);break;case"animation":t=this._invokeOne(function(i){return i.loadAnimation&&i.loadAnimation(A)});break;case"camera":t=this.loadCamera(A);break;default:if(t=this._invokeOne(function(i){return i!=this&&i.getDependency&&i.getDependency(e,A)}),!t)throw new Error("Unknown type: "+e);break}this.cache.add(n,t)}return t}getDependencies(e){let A=this.cache.get(e);if(!A){const n=this,t=this.json[e+(e==="mesh"?"es":"s")]||[];A=Promise.all(t.map(function(i,s){return n.getDependency(e,s)})),this.cache.add(e,A)}return A}loadBuffer(e){const A=this.json.buffers[e],n=this.fileLoader;if(A.type&&A.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+A.type+" buffer type is not supported.");if(A.uri===void 0&&e===0)return Promise.resolve(this.extensions[ae.KHR_BINARY_GLTF].body);const t=this.options;return new Promise(function(i,s){n.load(r.LoaderUtils.resolveURL(A.uri,t.path),i,void 0,function(){s(new Error('THREE.GLTFLoader: Failed to load buffer "'+A.uri+'".'))})})}loadBufferView(e){const A=this.json.bufferViews[e];return this.getDependency("buffer",A.buffer).then(function(n){const t=A.byteLength||0,i=A.byteOffset||0;return n.slice(i,i+t)})}loadAccessor(e){const A=this,n=this.json,t=this.json.accessors[e];if(t.bufferView===void 0&&t.sparse===void 0){const s=dt[t.type],o=FA[t.componentType],c=t.normalized===!0,g=new o(t.count*s);return Promise.resolve(new r.BufferAttribute(g,s,c))}const i=[];return t.bufferView!==void 0?i.push(this.getDependency("bufferView",t.bufferView)):i.push(null),t.sparse!==void 0&&(i.push(this.getDependency("bufferView",t.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",t.sparse.values.bufferView))),Promise.all(i).then(function(s){const o=s[0],c=dt[t.type],g=FA[t.componentType],l=g.BYTES_PER_ELEMENT,h=l*c,I=t.byteOffset||0,B=t.bufferView!==void 0?n.bufferViews[t.bufferView].byteStride:void 0,f=t.normalized===!0;let C,p;if(B&&B!==h){const d=Math.floor(I/B),w="InterleavedBuffer:"+t.bufferView+":"+t.componentType+":"+d+":"+t.count;let Q=A.cache.get(w);Q||(C=new g(o,d*B,t.count*B/l),Q=new r.InterleavedBuffer(C,B/l),A.cache.add(w,Q)),p=new r.InterleavedBufferAttribute(Q,c,I%B/l,f)}else o===null?C=new g(t.count*c):C=new g(o,I,t.count*c),p=new r.BufferAttribute(C,c,f);if(t.sparse!==void 0){const d=dt.SCALAR,w=FA[t.sparse.indices.componentType],Q=t.sparse.indices.byteOffset||0,b=t.sparse.values.byteOffset||0,y=new w(s[1],Q,t.sparse.count*d),R=new g(s[2],b,t.sparse.count*c);o!==null&&(p=new r.BufferAttribute(p.array.slice(),p.itemSize,p.normalized)),p.normalized=!1;for(let F=0,D=y.length;F<D;F++){const M=y[F];if(p.setX(M,R[F*c]),c>=2&&p.setY(M,R[F*c+1]),c>=3&&p.setZ(M,R[F*c+2]),c>=4&&p.setW(M,R[F*c+3]),c>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}p.normalized=f}return p})}loadTexture(e){const A=this.json,n=this.options,i=A.textures[e].source,s=A.images[i];let o=this.textureLoader;if(s.uri){const c=n.manager.getHandler(s.uri);c!==null&&(o=c)}return this.loadTextureImage(e,i,o)}loadTextureImage(e,A,n){const t=this,i=this.json,s=i.textures[e],o=i.images[A],c=(o.uri||o.bufferView)+":"+s.sampler;if(this.textureCache[c])return this.textureCache[c];const g=this.loadImageSource(A,n).then(function(l){l.flipY=!1,l.name=s.name||o.name||"",l.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(l.name=o.uri);const I=(i.samplers||{})[s.sampler]||{};return l.magFilter=pn[I.magFilter]||r.LinearFilter,l.minFilter=pn[I.minFilter]||r.LinearMipmapLinearFilter,l.wrapS=dn[I.wrapS]||r.RepeatWrapping,l.wrapT=dn[I.wrapT]||r.RepeatWrapping,l.anisotropy=4,t.associations.set(l,{textures:e}),l}).catch(function(){return null});return this.textureCache[c]=g,g}loadImageSource(e,A){const n=this,t=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(h=>h.clone());const s=t.images[e],o=self.URL||self.webkitURL;let c=s.uri||"",g=!1;if(s.bufferView!==void 0)c=n.getDependency("bufferView",s.bufferView).then(function(h){g=!0;const I=new Blob([h],{type:s.mimeType});return c=o.createObjectURL(I),c});else if(s.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(c).then(function(h){return new Promise(function(I,B){let f=I;A.isImageBitmapLoader===!0&&(f=function(C){const p=new r.Texture(C);p.needsUpdate=!0,I(p)}),A.load(r.LoaderUtils.resolveURL(h,i.path),f,void 0,B)})}).then(function(h){return g===!0&&o.revokeObjectURL(c),gA(h,s),h.userData.mimeType=s.mimeType||mo(s.uri),h}).catch(function(h){throw console.error("THREE.GLTFLoader: Couldn't load texture",c),h});return this.sourceCache[e]=l,l}assignTexture(e,A,n,t){const i=this;return this.getDependency("texture",n.index).then(function(s){if(!s)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(s=s.clone(),s.channel=n.texCoord),i.extensions[ae.KHR_TEXTURE_TRANSFORM]){const o=n.extensions!==void 0?n.extensions[ae.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const c=i.associations.get(s);s=i.extensions[ae.KHR_TEXTURE_TRANSFORM].extendTexture(s,o),i.associations.set(s,c)}}return t!==void 0&&(s.colorSpace=t),e[A]=s,s})}assignFinalMaterial(e){const A=e.geometry;let n=e.material;const t=A.attributes.tangent===void 0,i=A.attributes.color!==void 0,s=A.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+n.uuid;let c=this.cache.get(o);c||(c=new r.PointsMaterial,r.Material.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,c.sizeAttenuation=!1,this.cache.add(o,c)),n=c}else if(e.isLine){const o="LineBasicMaterial:"+n.uuid;let c=this.cache.get(o);c||(c=new r.LineBasicMaterial,r.Material.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,this.cache.add(o,c)),n=c}if(t||i||s){let o="ClonedMaterial:"+n.uuid+":";t&&(o+="derivative-tangents:"),i&&(o+="vertex-colors:"),s&&(o+="flat-shading:");let c=this.cache.get(o);c||(c=n.clone(),i&&(c.vertexColors=!0),s&&(c.flatShading=!0),t&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(o,c),this.associations.set(c,this.associations.get(n))),n=c}e.material=n}getMaterialType(){return r.MeshStandardMaterial}loadMaterial(e){const A=this,n=this.json,t=this.extensions,i=n.materials[e];let s;const o={},c=i.extensions||{},g=[];if(c[ae.KHR_MATERIALS_UNLIT]){const h=t[ae.KHR_MATERIALS_UNLIT];s=h.getMaterialType(),g.push(h.extendParams(o,i,A))}else{const h=i.pbrMetallicRoughness||{};if(o.color=new r.Color(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){const I=h.baseColorFactor;o.color.setRGB(I[0],I[1],I[2],r.LinearSRGBColorSpace),o.opacity=I[3]}h.baseColorTexture!==void 0&&g.push(A.assignTexture(o,"map",h.baseColorTexture,r.SRGBColorSpace)),o.metalness=h.metallicFactor!==void 0?h.metallicFactor:1,o.roughness=h.roughnessFactor!==void 0?h.roughnessFactor:1,h.metallicRoughnessTexture!==void 0&&(g.push(A.assignTexture(o,"metalnessMap",h.metallicRoughnessTexture)),g.push(A.assignTexture(o,"roughnessMap",h.metallicRoughnessTexture))),s=this._invokeOne(function(I){return I.getMaterialType&&I.getMaterialType(e)}),g.push(Promise.all(this._invokeAll(function(I){return I.extendMaterialParams&&I.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=r.DoubleSide);const l=i.alphaMode||Qt.OPAQUE;if(l===Qt.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===Qt.MASK&&(o.alphaTest=i.alphaCutoff!==void 0?i.alphaCutoff:.5)),i.normalTexture!==void 0&&s!==r.MeshBasicMaterial&&(g.push(A.assignTexture(o,"normalMap",i.normalTexture)),o.normalScale=new r.Vector2(1,1),i.normalTexture.scale!==void 0)){const h=i.normalTexture.scale;o.normalScale.set(h,h)}if(i.occlusionTexture!==void 0&&s!==r.MeshBasicMaterial&&(g.push(A.assignTexture(o,"aoMap",i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&s!==r.MeshBasicMaterial){const h=i.emissiveFactor;o.emissive=new r.Color().setRGB(h[0],h[1],h[2],r.LinearSRGBColorSpace)}return i.emissiveTexture!==void 0&&s!==r.MeshBasicMaterial&&g.push(A.assignTexture(o,"emissiveMap",i.emissiveTexture,r.SRGBColorSpace)),Promise.all(g).then(function(){const h=new s(o);return i.name&&(h.name=i.name),gA(h,i),A.associations.set(h,{materials:e}),i.extensions&&dA(t,h,i),h})}createUniqueName(e){const A=r.PropertyBinding.sanitizeNodeName(e||"");return A in this.nodeNamesUsed?A+"_"+ ++this.nodeNamesUsed[A]:(this.nodeNamesUsed[A]=0,A)}loadGeometries(e){const A=this,n=this.extensions,t=this.primitiveCache;function i(o){return n[ae.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,A).then(function(c){return Qn(c,o,A)})}const s=[];for(let o=0,c=e.length;o<c;o++){const g=e[o],l=Qo(g),h=t[l];if(h)s.push(h.promise);else{let I;g.extensions&&g.extensions[ae.KHR_DRACO_MESH_COMPRESSION]?I=i(g):I=Qn(new r.BufferGeometry,g,A),t[l]={primitive:g,promise:I},s.push(I)}}return Promise.all(s)}loadMesh(e){const A=this,n=this.json,t=this.extensions,i=n.meshes[e],s=i.primitives,o=[];for(let c=0,g=s.length;c<g;c++){const l=s[c].material===void 0?Co(this.cache):this.getDependency("material",s[c].material);o.push(l)}return o.push(A.loadGeometries(s)),Promise.all(o).then(function(c){const g=c.slice(0,c.length-1),l=c[c.length-1],h=[];for(let B=0,f=l.length;B<f;B++){const C=l[B],p=s[B];let d;const w=g[B];if(p.mode===We.TRIANGLES||p.mode===We.TRIANGLE_STRIP||p.mode===We.TRIANGLE_FAN||p.mode===void 0)d=i.isSkinnedMesh===!0?new r.SkinnedMesh(C,w):new r.Mesh(C,w),d.isSkinnedMesh===!0&&d.normalizeSkinWeights(),p.mode===We.TRIANGLE_STRIP?d.geometry=jt(d.geometry,r.TriangleStripDrawMode):p.mode===We.TRIANGLE_FAN&&(d.geometry=jt(d.geometry,r.TriangleFanDrawMode));else if(p.mode===We.LINES)d=new r.LineSegments(C,w);else if(p.mode===We.LINE_STRIP)d=new r.Line(C,w);else if(p.mode===We.LINE_LOOP)d=new r.LineLoop(C,w);else if(p.mode===We.POINTS)d=new r.Points(C,w);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+p.mode);Object.keys(d.geometry.morphAttributes).length>0&&po(d,i),d.name=A.createUniqueName(i.name||"mesh_"+e),gA(d,i),p.extensions&&dA(t,d,p),A.assignFinalMaterial(d),h.push(d)}for(let B=0,f=h.length;B<f;B++)A.associations.set(h[B],{meshes:e,primitives:B});if(h.length===1)return i.extensions&&dA(t,h[0],i),h[0];const I=new r.Group;i.extensions&&dA(t,I,i),A.associations.set(I,{meshes:e});for(let B=0,f=h.length;B<f;B++)I.add(h[B]);return I})}loadCamera(e){let A;const n=this.json.cameras[e],t=n[n.type];if(!t){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return n.type==="perspective"?A=new r.PerspectiveCamera(r.MathUtils.radToDeg(t.yfov),t.aspectRatio||1,t.znear||1,t.zfar||2e6):n.type==="orthographic"&&(A=new r.OrthographicCamera(-t.xmag,t.xmag,t.ymag,-t.ymag,t.znear,t.zfar)),n.name&&(A.name=this.createUniqueName(n.name)),gA(A,n),Promise.resolve(A)}loadSkin(e){const A=this.json.skins[e],n=[];for(let t=0,i=A.joints.length;t<i;t++)n.push(this._loadNodeShallow(A.joints[t]));return A.inverseBindMatrices!==void 0?n.push(this.getDependency("accessor",A.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(t){const i=t.pop(),s=t,o=[],c=[];for(let g=0,l=s.length;g<l;g++){const h=s[g];if(h){o.push(h);const I=new r.Matrix4;i!==null&&I.fromArray(i.array,g*16),c.push(I)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',A.joints[g])}return new r.Skeleton(o,c)})}loadAnimation(e){const A=this.json,n=this,t=A.animations[e],i=t.name?t.name:"animation_"+e,s=[],o=[],c=[],g=[],l=[];let h=0,I=t.channels.length;for(h=0,I=t.channels.length;h<I;h++){const B=t.channels[h],f=t.samplers[B.sampler],C=B.target,p=C.node,d=t.parameters!==void 0?t.parameters[f.input]:f.input,w=t.parameters!==void 0?t.parameters[f.output]:f.output;C.node!==void 0&&(s.push(this.getDependency("node",p)),o.push(this.getDependency("accessor",d)),c.push(this.getDependency("accessor",w)),g.push(f),l.push(C))}return Promise.all([Promise.all(s),Promise.all(o),Promise.all(c),Promise.all(g),Promise.all(l)]).then(function(B){const f=B[0],C=B[1],p=B[2],d=B[3],w=B[4],Q=[];for(h=0,I=f.length;h<I;h++){const b=f[h],y=C[h],R=p[h],F=d[h],D=w[h];if(b===void 0)continue;b.updateMatrix&&b.updateMatrix();const M=n._createAnimationTracks(b,y,R,F,D);if(M)for(let N=0;N<M.length;N++)Q.push(M[N])}return new r.AnimationClip(i,void 0,Q)})}createNodeMesh(e){const A=this.json,n=this,t=A.nodes[e];return t.mesh===void 0?null:n.getDependency("mesh",t.mesh).then(function(i){const s=n._getNodeRef(n.meshCache,t.mesh,i);return t.weights!==void 0&&s.traverse(function(o){if(o.isMesh)for(let c=0,g=t.weights.length;c<g;c++)o.morphTargetInfluences[c]=t.weights[c]}),s})}loadNode(e){const A=this.json,n=this,t=A.nodes[e],i=n._loadNodeShallow(e),s=[],o=t.children||[];for(let g=0,l=o.length;g<l;g++)s.push(n.getDependency("node",o[g]));const c=t.skin===void 0?Promise.resolve(null):n.getDependency("skin",t.skin);return Promise.all([i,Promise.all(s),c]).then(function(g){const l=g[0],h=g[1],I=g[2];I!==null&&l.traverse(function(B){B.isSkinnedMesh&&B.bind(I,bo)});for(let B=0,f=h.length;B<f;B++)l.add(h[B]);return l})}_loadNodeShallow(e){const A=this.json,n=this.extensions,t=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const i=A.nodes[e],s=i.name?t.createUniqueName(i.name):"",o=[],c=t._invokeOne(function(g){return g.createNodeMesh&&g.createNodeMesh(e)});return c&&o.push(c),i.camera!==void 0&&o.push(t.getDependency("camera",i.camera).then(function(g){return t._getNodeRef(t.cameraCache,i.camera,g)})),t._invokeAll(function(g){return g.createNodeAttachment&&g.createNodeAttachment(e)}).forEach(function(g){o.push(g)}),this.nodeCache[e]=Promise.all(o).then(function(g){let l;if(i.isBone===!0?l=new r.Bone:g.length>1?l=new r.Group:g.length===1?l=g[0]:l=new r.Object3D,l!==g[0])for(let h=0,I=g.length;h<I;h++)l.add(g[h]);if(i.name&&(l.userData.name=i.name,l.name=s),gA(l,i),i.extensions&&dA(n,l,i),i.matrix!==void 0){const h=new r.Matrix4;h.fromArray(i.matrix),l.applyMatrix4(h)}else i.translation!==void 0&&l.position.fromArray(i.translation),i.rotation!==void 0&&l.quaternion.fromArray(i.rotation),i.scale!==void 0&&l.scale.fromArray(i.scale);return t.associations.has(l)||t.associations.set(l,{}),t.associations.get(l).nodes=e,l}),this.nodeCache[e]}loadScene(e){const A=this.extensions,n=this.json.scenes[e],t=this,i=new r.Group;n.name&&(i.name=t.createUniqueName(n.name)),gA(i,n),n.extensions&&dA(A,i,n);const s=n.nodes||[],o=[];for(let c=0,g=s.length;c<g;c++)o.push(t.getDependency("node",s[c]));return Promise.all(o).then(function(c){for(let l=0,h=c.length;l<h;l++)i.add(c[l]);const g=l=>{const h=new Map;for(const[I,B]of t.associations)(I instanceof r.Material||I instanceof r.Texture)&&h.set(I,B);return l.traverse(I=>{const B=t.associations.get(I);B!=null&&h.set(I,B)}),h};return t.associations=g(i),i})}_createAnimationTracks(e,A,n,t,i){const s=[],o=e.name?e.name:e.uuid,c=[];uA[i.path]===uA.weights?e.traverse(function(I){I.morphTargetInfluences&&c.push(I.name?I.name:I.uuid)}):c.push(o);let g;switch(uA[i.path]){case uA.weights:g=r.NumberKeyframeTrack;break;case uA.rotation:g=r.QuaternionKeyframeTrack;break;case uA.position:case uA.scale:g=r.VectorKeyframeTrack;break;default:n.itemSize===1?g=r.NumberKeyframeTrack:g=r.VectorKeyframeTrack;break}const l=t.interpolation!==void 0?fo[t.interpolation]:r.InterpolateLinear,h=this._getArrayFromAccessor(n);for(let I=0,B=c.length;I<B;I++){const f=new g(c[I]+"."+uA[i.path],A.array,h,l);t.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(f),s.push(f)}return s}_getArrayFromAccessor(e){let A=e.array;if(e.normalized){const n=zt(A.constructor),t=new Float32Array(A.length);for(let i=0,s=A.length;i<s;i++)t[i]=A[i]*n;A=t}return A}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){const t=this instanceof r.QuaternionKeyframeTrack?Bo:li;return new t(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function yo(a,e,A){const n=e.attributes,t=new r.Box3;if(n.POSITION!==void 0){const o=A.json.accessors[n.POSITION],c=o.min,g=o.max;if(c!==void 0&&g!==void 0){if(t.set(new r.Vector3(c[0],c[1],c[2]),new r.Vector3(g[0],g[1],g[2])),o.normalized){const l=zt(FA[o.componentType]);t.min.multiplyScalar(l),t.max.multiplyScalar(l)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const i=e.targets;if(i!==void 0){const o=new r.Vector3,c=new r.Vector3;for(let g=0,l=i.length;g<l;g++){const h=i[g];if(h.POSITION!==void 0){const I=A.json.accessors[h.POSITION],B=I.min,f=I.max;if(B!==void 0&&f!==void 0){if(c.setX(Math.max(Math.abs(B[0]),Math.abs(f[0]))),c.setY(Math.max(Math.abs(B[1]),Math.abs(f[1]))),c.setZ(Math.max(Math.abs(B[2]),Math.abs(f[2]))),I.normalized){const C=zt(FA[I.componentType]);c.multiplyScalar(C)}o.max(c)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}t.expandByVector(o)}a.boundingBox=t;const s=new r.Sphere;t.getCenter(s.center),s.radius=t.min.distanceTo(t.max)/2,a.boundingSphere=s}function Qn(a,e,A){const n=e.attributes,t=[];function i(s,o){return A.getDependency("accessor",s).then(function(c){a.setAttribute(o,c)})}for(const s in n){const o=Vt[s]||s.toLowerCase();o in a.attributes||t.push(i(n[s],o))}if(e.indices!==void 0&&!a.index){const s=A.getDependency("accessor",e.indices).then(function(o){a.setIndex(o)});t.push(s)}return r.ColorManagement.workingColorSpace!==r.LinearSRGBColorSpace&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${r.ColorManagement.workingColorSpace}" not supported.`),gA(a,e),yo(a,e,A),Promise.all(t).then(function(){return e.targets!==void 0?Eo(a,e.targets,A):a})}var Do=(function(){var a="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok: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;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp: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:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp: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:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;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:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;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:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb",A=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var t=WebAssembly.validate(A)?e:a,i,s=WebAssembly.instantiate(o(t),{}).then(function(d){i=d.instance,i.exports.__wasm_call_ctors()});function o(d){for(var w=new Uint8Array(d.length),Q=0;Q<d.length;++Q){var b=d.charCodeAt(Q);w[Q]=b>96?b-97:b>64?b-39:b+4}for(var y=0,Q=0;Q<d.length;++Q)w[y++]=w[Q]<60?n[w[Q]]:(w[Q]-60)*64+w[++Q];return w.buffer.slice(0,y)}function c(d,w,Q,b,y,R){var F=i.exports.sbrk,D=Q+3&-4,M=F(D*b),N=F(y.length),_=new Uint8Array(i.exports.memory.buffer);_.set(y,N);var P=d(M,Q,b,N,y.length);if(P==0&&R&&R(M,D,b),w.set(_.subarray(M,M+Q*b)),F(M-F(0)),P!=0)throw new Error("Malformed buffer data: "+P)}var g={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},l={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},h=[],I=0;function B(d){var w={object:new Worker(d),pending:0,requests:{}};return w.object.onmessage=function(Q){var b=Q.data;w.pending-=b.count,w.requests[b.id][b.action](b.value),delete w.requests[b.id]},w}function f(d){for(var w="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(o(t))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+c.toString()+p.toString(),Q=new Blob([w],{type:"text/javascript"}),b=URL.createObjectURL(Q),y=0;y<d;++y)h[y]=B(b);URL.revokeObjectURL(b)}function C(d,w,Q,b,y){for(var R=h[0],F=1;F<h.length;++F)h[F].pending<R.pending&&(R=h[F]);return new Promise(function(D,M){var N=new Uint8Array(Q),_=I++;R.pending+=d,R.requests[_]={resolve:D,reject:M},R.object.postMessage({id:_,count:d,size:w,source:N,mode:b,filter:y},[N.buffer])})}function p(d){s.then(function(){var w=d.data;try{var Q=new Uint8Array(w.count*w.size);c(i.exports[w.mode],Q,w.count,w.size,w.source,i.exports[w.filter]),self.postMessage({id:w.id,count:w.count,action:"resolve",value:Q},[Q.buffer])}catch(b){self.postMessage({id:w.id,count:w.count,action:"reject",value:b})}})}return{ready:s,supported:!0,useWorkers:function(d){f(d)},decodeVertexBuffer:function(d,w,Q,b,y){c(i.exports.meshopt_decodeVertexBuffer,d,w,Q,b,i.exports[g[y]])},decodeIndexBuffer:function(d,w,Q,b){c(i.exports.meshopt_decodeIndexBuffer,d,w,Q,b)},decodeIndexSequence:function(d,w,Q,b){c(i.exports.meshopt_decodeIndexSequence,d,w,Q,b)},decodeGltfBuffer:function(d,w,Q,b,y,R){c(i.exports[l[y]],d,w,Q,b,i.exports[g[R]])},decodeGltfBufferAsync:function(d,w,Q,b,y){return h.length>0?C(d,w,Q,l[b],g[y]):s.then(function(){var R=new Uint8Array(d*w);return c(i.exports[l[b]],R,d,w,Q,i.exports[g[y]]),R})}}})();const bt=new WeakMap;class So extends r.Loader{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,A,n,t){const i=new r.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,s=>{this.parse(s,A,t)},n,t)}parse(e,A,n=()=>{}){this.decodeDracoFile(e,A,null,null,r.SRGBColorSpace,n).catch(n)}decodeDracoFile(e,A,n,t,i=r.LinearSRGBColorSpace,s=()=>{}){const o={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:t||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:i};return this.decodeGeometry(e,o).then(A).catch(s)}decodeGeometry(e,A){const n=JSON.stringify(A);if(bt.has(e)){const c=bt.get(e);if(c.key===n)return c.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let t;const i=this.workerNextTaskID++,s=e.byteLength,o=this._getWorker(i,s).then(c=>(t=c,new Promise((g,l)=>{t._callbacks[i]={resolve:g,reject:l},t.postMessage({type:"decode",id:i,taskConfig:A,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return o.catch(()=>!0).then(()=>{t&&i&&this._releaseTask(t,i)}),bt.set(e,{key:n,promise:o}),o}_createGeometry(e){const A=new r.BufferGeometry;e.index&&A.setIndex(new r.BufferAttribute(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const t=e.attributes[n],i=t.name,s=t.array,o=t.itemSize,c=new r.BufferAttribute(s,o);i==="color"&&(this._assignVertexColorSpace(c,t.vertexColorSpace),c.normalized=!(s instanceof Float32Array)),A.setAttribute(i,c)}return A}_assignVertexColorSpace(e,A){if(A!==r.SRGBColorSpace)return;const n=new r.Color;for(let t=0,i=e.count;t<i;t++)n.fromBufferAttribute(e,t),r.ColorManagement.toWorkingColorSpace(n,r.SRGBColorSpace),e.setXYZ(t,n.r,n.g,n.b)}_loadLibrary(e,A){const n=new r.FileLoader(this.manager);return n.setPath(this.decoderPath),n.setResponseType(A),n.setWithCredentials(this.withCredentials),new Promise((t,i)=>{n.load(e,t,void 0,i)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",A=[];return e?A.push(this._loadLibrary("draco_decoder.js","text")):(A.push(this._loadLibrary("draco_wasm_wrapper.js","text")),A.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(A).then(n=>{const t=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const i=xo.toString(),s=["/* draco decoder */",t,"","/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join(`
|
|
2
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,A){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const t=new Worker(this.workerSourceURL);t._callbacks={},t._taskCosts={},t._taskLoad=0,t.postMessage({type:"init",decoderConfig:this.decoderConfig}),t.onmessage=function(i){const s=i.data;switch(s.type){case"decode":t._callbacks[s.id].resolve(s);break;case"error":t._callbacks[s.id].reject(s);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+s.type+'"')}},this.workerPool.push(t)}else this.workerPool.sort(function(t,i){return t._taskLoad>i._taskLoad?-1:1});const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=A,n._taskLoad+=A,n})}_releaseTask(e,A){e._taskLoad-=e._taskCosts[A],delete e._callbacks[A],delete e._taskCosts[A]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function xo(){let a,e;onmessage=function(s){const o=s.data;switch(o.type){case"init":a=o.decoderConfig,e=new Promise(function(l){a.onModuleLoaded=function(h){l({draco:h})},DracoDecoderModule(a)});break;case"decode":const c=o.buffer,g=o.taskConfig;e.then(l=>{const h=l.draco,I=new h.Decoder;try{const B=A(h,I,new Int8Array(c),g),f=B.attributes.map(C=>C.array.buffer);B.index&&f.push(B.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:B},f)}catch(B){console.error(B),self.postMessage({type:"error",id:o.id,error:B.message})}finally{h.destroy(I)}});break}};function A(s,o,c,g){const l=g.attributeIDs,h=g.attributeTypes;let I,B;const f=o.GetEncodedGeometryType(c);if(f===s.TRIANGULAR_MESH)I=new s.Mesh,B=o.DecodeArrayToMesh(c,c.byteLength,I);else if(f===s.POINT_CLOUD)I=new s.PointCloud,B=o.DecodeArrayToPointCloud(c,c.byteLength,I);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!B.ok()||I.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+B.error_msg());const C={index:null,attributes:[]};for(const p in l){const d=self[h[p]];let w,Q;if(g.useUniqueIDs)Q=l[p],w=o.GetAttributeByUniqueId(I,Q);else{if(Q=o.GetAttributeId(I,s[l[p]]),Q===-1)continue;w=o.GetAttribute(I,Q)}const b=t(s,o,I,p,d,w);p==="color"&&(b.vertexColorSpace=g.vertexColorSpace),C.attributes.push(b)}return f===s.TRIANGULAR_MESH&&(C.index=n(s,o,I)),s.destroy(I),C}function n(s,o,c){const l=c.num_faces()*3,h=l*4,I=s._malloc(h);o.GetTrianglesUInt32Array(c,h,I);const B=new Uint32Array(s.HEAPF32.buffer,I,l).slice();return s._free(I),{array:B,itemSize:1}}function t(s,o,c,g,l,h){const I=h.num_components(),f=c.num_points()*I,C=f*l.BYTES_PER_ELEMENT,p=i(s,l),d=s._malloc(C);o.GetAttributeDataArrayForAllPoints(c,h,p,C,d);const w=new l(s.HEAPF32.buffer,d,f).slice();return s._free(d),{name:g,array:w,itemSize:I}}function i(s,o){switch(o){case Float32Array:return s.DT_FLOAT32;case Int8Array:return s.DT_INT8;case Int16Array:return s.DT_INT16;case Int32Array:return s.DT_INT32;case Uint8Array:return s.DT_UINT8;case Uint16Array:return s.DT_UINT16;case Uint32Array:return s.DT_UINT32}}}class Mo{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const A=this.workerCreator();A.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=A}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,A){const n=this.workersResolve[e];if(n&&n(A),this.queue.length){const{resolve:t,msg:i,transfer:s}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,s)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,A){return new Promise(n=>{const t=this._getIdleWorker();t!==-1?(this._initWorker(t),this.workerStatus|=1<<t,this.workersResolve[t]=n,this.workers[t].postMessage(e,A)):this.queue.push({resolve:n,msg:e,transfer:A})})}dispose(){this.workers.forEach(e=>e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const Fo=0,mn=2,Ro=1,bn=2,Go=0,To=1,ko=10,Lo=0,hi=9,Ii=15,ui=16,Bi=22,fi=37,Ci=43,Ei=76,pi=83,di=97,Qi=100,mi=103,bi=109,wi=122,yi=123,vo=131,No=132,Uo=133,_o=134,Po=137,Ho=138,Oo=141,qo=142,Ko=145,Yo=146,Di=148,Si=152,Jo=157,jo=158,xi=165,Mi=166,sn=1000066e3;class kA{constructor(e,A,n,t){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+A,n),this._littleEndian=t,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){const A=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,A}_skip(e){return this._offset+=e,this}_scan(e,A=0){const n=this._offset;let t=0;for(;this._dataView.getUint8(this._offset)!==A&&t<e;)t++,this._offset++;return t<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,t)}}const ve=[171,75,84,88,32,50,48,187,13,10,26,10];function wn(a){return new TextDecoder().decode(a)}function Vo(a){const e=new Uint8Array(a.buffer,a.byteOffset,ve.length);if(e[0]!==ve[0]||e[1]!==ve[1]||e[2]!==ve[2]||e[3]!==ve[3]||e[4]!==ve[4]||e[5]!==ve[5]||e[6]!==ve[6]||e[7]!==ve[7]||e[8]!==ve[8]||e[9]!==ve[9]||e[10]!==ve[10]||e[11]!==ve[11])throw new Error("Missing KTX 2.0 identifier.");const A={vkFormat:0,typeSize:1,pixelWidth:0,pixelHeight:0,pixelDepth:0,layerCount:0,faceCount:1,levelCount:0,supercompressionScheme:0,levels:[],dataFormatDescriptor:[{vendorId:0,descriptorType: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:[]}],keyValue:{},globalData:null},n=17*Uint32Array.BYTES_PER_ELEMENT,t=new kA(a,ve.length,n,!0);A.vkFormat=t._nextUint32(),A.typeSize=t._nextUint32(),A.pixelWidth=t._nextUint32(),A.pixelHeight=t._nextUint32(),A.pixelDepth=t._nextUint32(),A.layerCount=t._nextUint32(),A.faceCount=t._nextUint32(),A.levelCount=t._nextUint32(),A.supercompressionScheme=t._nextUint32();const i=t._nextUint32(),s=t._nextUint32(),o=t._nextUint32(),c=t._nextUint32(),g=t._nextUint64(),l=t._nextUint64(),h=3*Math.max(A.levelCount,1)*8,I=new kA(a,ve.length+n,h,!0);for(let Ae=0,W=Math.max(A.levelCount,1);Ae<W;Ae++)A.levels.push({levelData:new Uint8Array(a.buffer,a.byteOffset+I._nextUint64(),I._nextUint64()),uncompressedByteLength:I._nextUint64()});const B=new kA(a,i,s,!0);B._skip(4);const f=B._nextUint16(),C=B._nextUint16(),p=B._nextUint16(),d=B._nextUint16(),w={vendorId:f,descriptorType:C,versionNumber:p,colorModel:B._nextUint8(),colorPrimaries:B._nextUint8(),transferFunction:B._nextUint8(),flags:B._nextUint8(),texelBlockDimension:[B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8()],bytesPlane:[B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8()],samples:[]},Q=(d/4-6)/4;for(let Ae=0;Ae<Q;Ae++){const W={bitOffset:B._nextUint16(),bitLength:B._nextUint8(),channelType:B._nextUint8(),samplePosition:[B._nextUint8(),B._nextUint8(),B._nextUint8(),B._nextUint8()],sampleLower:Number.NEGATIVE_INFINITY,sampleUpper:Number.POSITIVE_INFINITY};64&W.channelType?(W.sampleLower=B._nextInt32(),W.sampleUpper=B._nextInt32()):(W.sampleLower=B._nextUint32(),W.sampleUpper=B._nextUint32()),w.samples[Ae]=W}A.dataFormatDescriptor.length=0,A.dataFormatDescriptor.push(w);const b=new kA(a,o,c,!0);for(;b._offset<c;){const Ae=b._nextUint32(),W=b._scan(Ae),te=wn(W);if(A.keyValue[te]=b._nextUint8Array(Ae-W.byteLength-1),te.match(/^ktx/i)){const ge=wn(A.keyValue[te]);A.keyValue[te]=ge.substring(0,ge.lastIndexOf("\0"))}b._skip(Ae%4?4-Ae%4:0)}if(l<=0)return A;const y=new kA(a,g,l,!0),R=y._nextUint16(),F=y._nextUint16(),D=y._nextUint32(),M=y._nextUint32(),N=y._nextUint32(),_=y._nextUint32(),P=[];for(let Ae=0,W=Math.max(A.levelCount,1);Ae<W;Ae++)P.push({imageFlags:y._nextUint32(),rgbSliceByteOffset:y._nextUint32(),rgbSliceByteLength:y._nextUint32(),alphaSliceByteOffset:y._nextUint32(),alphaSliceByteLength:y._nextUint32()});const z=g+y._offset,U=z+D,q=U+M,H=q+N,Z=new Uint8Array(a.buffer,a.byteOffset+z,D),se=new Uint8Array(a.buffer,a.byteOffset+U,M),ee=new Uint8Array(a.buffer,a.byteOffset+q,N),re=new Uint8Array(a.buffer,a.byteOffset+H,_);return A.globalData={endpointCount:R,selectorCount:F,imageDescs:P,endpointsData:Z,selectorsData:se,tablesData:ee,extendedData:re},A}let wt,cA,Xt;const yt={env:{emscripten_notify_memory_growth:function(a){Xt=new Uint8Array(cA.exports.memory.buffer)}}};class zo{init(){return wt||(wt=typeof fetch<"u"?fetch("data:application/wasm;base64,"+yn).then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,yt)).then(this._init):WebAssembly.instantiate(Buffer.from(yn,"base64"),yt).then(this._init),wt)}_init(e){cA=e.instance,yt.env.emscripten_notify_memory_growth(0)}decode(e,A=0){if(!cA)throw new Error("ZSTDDecoder: Await .init() before decoding.");const n=e.byteLength,t=cA.exports.malloc(n);Xt.set(e,t),A=A||Number(cA.exports.ZSTD_findDecompressedSize(t,n));const i=cA.exports.malloc(A),s=cA.exports.ZSTD_decompress(i,A,t,n),o=Xt.slice(i,i+s);return cA.exports.free(t),cA.exports.free(i),o}}const yn="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQhBSAGQQR2IQRBICAAdCIAQQFyIQkgASgCACEPQQAhAiADIQYCQANAIAlBAkggAiAPS3JFBEAgAiEHAkAgCARAA0AgBEH//wNxQf//A0YEQCAHQRhqIQcgBiAQSQR/IAZBAmoiBigAACAFdgUgBUEQaiEFIARBEHYLIQQMAQsLA0AgBEEDcSIIQQNGBEAgBUECaiEFIARBAnYhBCAHQQNqIQcMAQsLIAcgCGoiByAPSw0EIAVBAmohBQNAIAIgB0kEQCANIAJBAXRqQQA7AQAgAkEBaiECDAELCyAGIA5LQQAgBiAFQQN1aiIHIAxLG0UEQCAHKAAAIAVBB3EiBXYhBAwCCyAEQQJ2IQQLIAYhBwsCfyALQX9qIAQgAEF/anEiBiAAQQF0QX9qIgggCWsiEUkNABogBCAIcSIEQQAgESAEIABIG2shBiALCyEIIA0gAkEBdGogBkF/aiIEOwEAIAlBASAGayAEIAZBAUgbayEJA0AgCSAASARAIABBAXUhACALQX9qIQsMAQsLAn8gByAOS0EAIAcgBSAIaiIFQQN1aiIGIAxLG0UEQCAFQQdxDAELIAUgDCIGIAdrQQN0awshBSACQQFqIQIgBEUhCCAGKAAAIAVBH3F2IQQMAQsLQWwgCUEBRyAFQSBKcg0BGiABIAJBf2o2AgAgBiAFQQdqQQN1aiADawwBC0FQCyEAIApBEGokACAACwkAQQFBBSAAGwsMACAAIAEoAAA2AAALqgMBCn8jAEHwAGsiCiQAIAJBAWohDiAAQQhqIQtBgIAEIAVBf2p0QRB1IQxBACECQQEhBkEBIAV0IglBf2oiDyEIA0AgAiAORkUEQAJAIAEgAkEBdCINai8BACIHQf//A0YEQCALIAhBA3RqIAI2AgQgCEF/aiEIQQEhBwwBCyAGQQAgDCAHQRB0QRB1ShshBgsgCiANaiAHOwEAIAJBAWohAgwBCwsgACAFNgIEIAAgBjYCACAJQQN2IAlBAXZqQQNqIQxBACEAQQAhBkEAIQIDQCAGIA5GBEADQAJAIAAgCUYNACAKIAsgAEEDdGoiASgCBCIGQQF0aiICIAIvAQAiAkEBajsBACABIAUgAhAUayIIOgADIAEgAiAIQf8BcXQgCWs7AQAgASAEIAZBAnQiAmooAgA6AAIgASACIANqKAIANgIEIABBAWohAAwBCwsFIAEgBkEBdGouAQAhDUEAIQcDQCAHIA1ORQRAIAsgAkEDdGogBjYCBANAIAIgDGogD3EiAiAISw0ACyAHQQFqIQcMAQsLIAZBAWohBgwBCwsgCkHwAGokAAsjAEIAIAEQCSAAhUKHla+vmLbem55/fkLj3MqV/M7y9YV/fAsQACAAQn43AwggACABNgIACyQBAX8gAARAIAEoAgQiAgRAIAEoAgggACACEQEADwsgABAmCwsfACAAIAEgAi8BABAINgIAIAEQBBogACACQQRqNgIEC0oBAX9BoCAoAgAiASAAaiIAQX9MBEBBiCBBMDYCAEF/DwsCQCAAPwBBEHRNDQAgABBmDQBBiCBBMDYCAEF/DwtBoCAgADYCACABC9cBAQh/Qbp/IQoCQCACKAIEIgggAigCACIJaiIOIAEgAGtLDQBBbCEKIAkgBCADKAIAIgtrSw0AIAAgCWoiBCACKAIIIgxrIQ0gACABQWBqIg8gCyAJQQAQKSADIAkgC2o2AgACQAJAIAwgBCAFa00EQCANIQUMAQsgDCAEIAZrSw0CIAcgDSAFayIAaiIBIAhqIAdNBEAgBCABIAgQDxoMAgsgBCABQQAgAGsQDyEBIAIgACAIaiIINgIEIAEgAGshBAsgBCAPIAUgCEEBECkLIA4hCgsgCgubAgEBfyMAQYABayINJAAgDSADNgJ8AkAgAkEDSwRAQX8hCQwBCwJAAkACQAJAIAJBAWsOAwADAgELIAZFBEBBuH8hCQwEC0FsIQkgBS0AACICIANLDQMgACAHIAJBAnQiAmooAgAgAiAIaigCABA7IAEgADYCAEEBIQkMAwsgASAJNgIAQQAhCQwCCyAKRQRAQWwhCQwCC0EAIQkgC0UgDEEZSHINAUEIIAR0QQhqIQBBACECA0AgAiAATw0CIAJBQGshAgwAAAsAC0FsIQkgDSANQfwAaiANQfgAaiAFIAYQFSICEAMNACANKAJ4IgMgBEsNACAAIA0gDSgCfCAHIAggAxAYIAEgADYCACACIQkLIA1BgAFqJAAgCQsLACAAIAEgAhALGgsQACAALwAAIAAtAAJBEHRyCy8AAn9BuH8gAUEISQ0AGkFyIAAoAAQiAEF3Sw0AGkG4fyAAQQhqIgAgACABSxsLCwkAIAAgATsAAAsDAAELigYBBX8gACAAKAIAIgVBfnE2AgBBACAAIAVBAXZqQYQgKAIAIgQgAEYbIQECQAJAIAAoAgQiAkUNACACKAIAIgNBAXENACACQQhqIgUgA0EBdkF4aiIDQQggA0EISxtnQR9zQQJ0QYAfaiIDKAIARgRAIAMgAigCDDYCAAsgAigCCCIDBEAgAyACKAIMNgIECyACKAIMIgMEQCADIAIoAgg2AgALIAIgAigCACAAKAIAQX5xajYCAEGEICEAAkACQCABRQ0AIAEgAjYCBCABKAIAIgNBAXENASADQQF2QXhqIgNBCCADQQhLG2dBH3NBAnRBgB9qIgMoAgAgAUEIakYEQCADIAEoAgw2AgALIAEoAggiAwRAIAMgASgCDDYCBAsgASgCDCIDBEAgAyABKAIINgIAQYQgKAIAIQQLIAIgAigCACABKAIAQX5xajYCACABIARGDQAgASABKAIAQQF2akEEaiEACyAAIAI2AgALIAIoAgBBAXZBeGoiAEEIIABBCEsbZ0Efc0ECdEGAH2oiASgCACEAIAEgBTYCACACIAA2AgwgAkEANgIIIABFDQEgACAFNgIADwsCQCABRQ0AIAEoAgAiAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAigCACABQQhqRgRAIAIgASgCDDYCAAsgASgCCCICBEAgAiABKAIMNgIECyABKAIMIgIEQCACIAEoAgg2AgBBhCAoAgAhBAsgACAAKAIAIAEoAgBBfnFqIgI2AgACQCABIARHBEAgASABKAIAQQF2aiAANgIEIAAoAgAhAgwBC0GEICAANgIACyACQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgIoAgAhASACIABBCGoiAjYCACAAIAE2AgwgAEEANgIIIAFFDQEgASACNgIADwsgBUEBdkF4aiIBQQggAUEISxtnQR9zQQJ0QYAfaiICKAIAIQEgAiAAQQhqIgI2AgAgACABNgIMIABBADYCCCABRQ0AIAEgAjYCAAsLDgAgAARAIABBeGoQJQsLgAIBA38CQCAAQQ9qQXhxQYQgKAIAKAIAQQF2ayICEB1Bf0YNAAJAQYQgKAIAIgAoAgAiAUEBcQ0AIAFBAXZBeGoiAUEIIAFBCEsbZ0Efc0ECdEGAH2oiASgCACAAQQhqRgRAIAEgACgCDDYCAAsgACgCCCIBBEAgASAAKAIMNgIECyAAKAIMIgFFDQAgASAAKAIINgIAC0EBIQEgACAAKAIAIAJBAXRqIgI2AgAgAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAygCACECIAMgAEEIaiIDNgIAIAAgAjYCDCAAQQA2AgggAkUNACACIAM2AgALIAELtwIBA38CQAJAIABBASAAGyICEDgiAA0AAkACQEGEICgCACIARQ0AIAAoAgAiA0EBcQ0AIAAgA0EBcjYCACADQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgAgAEEIakYEQCABIAAoAgw2AgALIAAoAggiAQRAIAEgACgCDDYCBAsgACgCDCIBBEAgASAAKAIINgIACyACECchAkEAIQFBhCAoAgAhACACDQEgACAAKAIAQX5xNgIAQQAPCyACQQ9qQXhxIgMQHSICQX9GDQIgAkEHakF4cSIAIAJHBEAgACACaxAdQX9GDQMLAkBBhCAoAgAiAUUEQEGAICAANgIADAELIAAgATYCBAtBhCAgADYCACAAIANBAXRBAXI2AgAMAQsgAEUNAQsgAEEIaiEBCyABC7kDAQJ/IAAgA2ohBQJAIANBB0wEQANAIAAgBU8NAiAAIAItAAA6AAAgAEEBaiEAIAJBAWohAgwAAAsACyAEQQFGBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgAEEEaiACIAZBAnQiBkHAHmooAgBqIgIQFyACIAZB4B5qKAIAayECDAELIAAgAhAMCyACQQhqIQIgAEEIaiEACwJAAkACQAJAIAUgAU0EQCAAIANqIQEgBEEBRyAAIAJrQQ9Kcg0BA0AgACACEAwgAkEIaiECIABBCGoiACABSQ0ACwwFCyAAIAFLBEAgACEBDAQLIARBAUcgACACa0EPSnINASAAIQMgAiEEA0AgAyAEEAwgBEEIaiEEIANBCGoiAyABSQ0ACwwCCwNAIAAgAhAHIAJBEGohAiAAQRBqIgAgAUkNAAsMAwsgACEDIAIhBANAIAMgBBAHIARBEGohBCADQRBqIgMgAUkNAAsLIAIgASAAa2ohAgsDQCABIAVPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAALAAsLQQECfyAAIAAoArjgASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+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",Wo="display-p3-linear",Dt=new WeakMap;let St=0,xt;class Ze extends r.Loader{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Mo,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:await e.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return e.isWebGPURenderer===!0?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bptc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),astcHDRSupported:e.extensions.has("WEBGL_compressed_texture_astc")&&e.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new r.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const A=e.loadAsync("basis_transcoder.js"),n=new r.FileLoader(this.manager);n.setPath(this.transcoderPath),n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials);const t=n.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([A,t]).then(([i,s])=>{const o=Ze.BasisWorker.toString(),c=["/* constants */","let _EngineFormat = "+JSON.stringify(Ze.EngineFormat),"let _EngineType = "+JSON.stringify(Ze.EngineType),"let _TranscoderFormat = "+JSON.stringify(Ze.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(Ze.BasisFormat),"/* basis_transcoder.js */",i,"/* worker */",o.substring(o.indexOf("{")+1,o.lastIndexOf("}"))].join(`
|
|
3
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([c])),this.transcoderBinary=s,this.workerPool.setWorkerCreator(()=>{const g=new Worker(this.workerSourceURL),l=this.transcoderBinary.slice(0);return g.postMessage({type:"init",config:this.workerConfig,transcoderBinary:l},[l]),g})}),St>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),St++}return this.transcoderPending}load(e,A,n,t){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const i=new r.FileLoader(this.manager);i.setPath(this.path),i.setCrossOrigin(this.crossOrigin),i.setWithCredentials(this.withCredentials),i.setResponseType("arraybuffer"),i.load(e,s=>{this.parse(s,A,t)},n,t)}parse(e,A,n){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Dt.has(e))return Dt.get(e).promise.then(A).catch(n);this._createTexture(e).then(t=>A?A(t):null).catch(n)}_createTextureFrom(e,A){const{type:n,error:t,data:{faces:i,width:s,height:o,format:c,type:g,dfdFlags:l}}=e;if(n==="error")return Promise.reject(t);let h;if(A.faceCount===6)h=new r.CompressedCubeTexture(i,c,g);else{const I=i[0].mipmaps;h=A.layerCount>1?new r.CompressedArrayTexture(I,s,o,A.layerCount,c,g):new r.CompressedTexture(I,s,o,c,g)}return h.minFilter=i[0].mipmaps.length===1?r.LinearFilter:r.LinearMipmapLinearFilter,h.magFilter=r.LinearFilter,h.generateMipmaps=!1,h.needsUpdate=!0,h.colorSpace=Fi(A),h.premultiplyAlpha=!!(l&Ro),h}async _createTexture(e,A={}){const n=Vo(new Uint8Array(e)),t=n.vkFormat===sn&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===Lo||t&&!this.workerConfig.astcHDRSupported))return $o(n);const s=A,o=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:s},[e])).then(c=>this._createTextureFrom(c.data,n));return Dt.set(e,{promise:o}),o}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),St--}}Ze.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2};Ze.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25};Ze.EngineFormat={RGBAFormat:r.RGBAFormat,RGBA_ASTC_4x4_Format:r.RGBA_ASTC_4x4_Format,RGB_BPTC_UNSIGNED_Format:r.RGB_BPTC_UNSIGNED_Format,RGBA_BPTC_Format:r.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:r.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:r.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:r.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:r.RGB_ETC1_Format,RGB_ETC2_Format:r.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:r.RGB_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format:r.RGBA_S3TC_DXT1_Format};Ze.EngineType={UnsignedByteType:r.UnsignedByteType,HalfFloatType:r.HalfFloatType,FloatType:r.FloatType};Ze.BasisWorker=function(){let a,e,A;const n=_EngineFormat,t=_EngineType,i=_TranscoderFormat,s=_BasisFormat;self.addEventListener("message",function(f){const C=f.data;switch(C.type){case"init":a=C.config,o(C.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:p,buffers:d,width:w,height:Q,hasAlpha:b,format:y,type:R,dfdFlags:F}=c(C.buffer);self.postMessage({type:"transcode",id:C.id,data:{faces:p,width:w,height:Q,hasAlpha:b,format:y,type:R,dfdFlags:F}},d)}catch(p){console.error(p),self.postMessage({type:"error",id:C.id,error:p.message})}});break}});function o(f){e=new Promise(C=>{A={wasmBinary:f,onRuntimeInitialized:C},BASIS(A)}).then(()=>{A.initializeBasis(),A.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function c(f){const C=new A.KTX2File(new Uint8Array(f));function p(){C.close(),C.delete()}if(!C.isValid())throw p(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let d;if(C.isUASTC())d=s.UASTC;else if(C.isETC1S())d=s.ETC1S;else if(C.isHDR())d=s.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const w=C.getWidth(),Q=C.getHeight(),b=C.getLayers()||1,y=C.getLevels(),R=C.getFaces(),F=C.getHasAlpha(),D=C.getDFDFlags(),{transcoderFormat:M,engineFormat:N,engineType:_}=h(d,w,Q,F);if(!w||!Q||!y)throw p(),new Error("THREE.KTX2Loader: Invalid texture");if(!C.startTranscoding())throw p(),new Error("THREE.KTX2Loader: .startTranscoding failed");const P=[],z=[];for(let U=0;U<R;U++){const q=[];for(let H=0;H<y;H++){const Z=[];let se,ee;for(let Ae=0;Ae<b;Ae++){const W=C.getImageLevelInfo(H,Ae,U);U===0&&H===0&&Ae===0&&(W.origWidth%4!==0||W.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),y>1?(se=W.origWidth,ee=W.origHeight):(se=W.width,ee=W.height);let te=new Uint8Array(C.getImageTranscodedSizeInBytes(H,Ae,0,M));const ge=C.transcodeImage(te,H,Ae,U,M,0,-1,-1);if(_===t.HalfFloatType&&(te=new Uint16Array(te.buffer,te.byteOffset,te.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!ge)throw p(),new Error("THREE.KTX2Loader: .transcodeImage failed.");Z.push(te)}const re=B(Z);q.push({data:re,width:se,height:ee}),z.push(re.buffer)}P.push({mipmaps:q,width:w,height:Q,format:N,type:_})}return p(),{faces:P,buffers:z,width:w,height:Q,hasAlpha:F,dfdFlags:D,format:N,type:_}}const g=[{if:"astcSupported",basisFormat:[s.UASTC],transcoderFormat:[i.ASTC_4x4,i.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],engineType:[t.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.BC7_M5,i.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],engineType:[t.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.BC1,i.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],engineType:[t.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.ETC1,i.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],engineType:[t.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.ETC1],engineFormat:[n.RGB_ETC1_Format],engineType:[t.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.PVRTC1_4_RGB,i.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],engineType:[t.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[s.UASTC_HDR],transcoderFormat:[i.BC6H],engineFormat:[n.RGB_BPTC_UNSIGNED_Format],engineType:[t.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[i.RGBA32,i.RGBA32],engineFormat:[n.RGBAFormat,n.RGBAFormat],engineType:[t.UnsignedByteType,t.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[s.UASTC_HDR],transcoderFormat:[i.RGBA_HALF],engineFormat:[n.RGBAFormat],engineType:[t.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],l={[s.ETC1S]:g.filter(f=>f.basisFormat.includes(s.ETC1S)).sort((f,C)=>f.priorityUASTC-C.priorityUASTC),[s.UASTC]:g.filter(f=>f.basisFormat.includes(s.UASTC)).sort((f,C)=>f.priorityUASTC-C.priorityUASTC),[s.UASTC_HDR]:g.filter(f=>f.basisFormat.includes(s.UASTC_HDR)).sort((f,C)=>f.priorityHDR-C.priorityHDR)};function h(f,C,p,d){const w=l[f];for(let Q=0;Q<w.length;Q++){const b=w[Q];if(b.if&&!a[b.if]||!b.basisFormat.includes(f)||d&&b.transcoderFormat.length<2||b.needsPowerOfTwo&&!(I(C)&&I(p)))continue;const y=b.transcoderFormat[d?1:0],R=b.engineFormat[d?1:0],F=b.engineType[0];return{transcoderFormat:y,engineFormat:R,engineType:F}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function I(f){return f<=2?!0:(f&f-1)===0&&f!==0}function B(f){if(f.length===1)return f[0];let C=0;for(let w=0;w<f.length;w++){const Q=f[w];C+=Q.byteLength}const p=new Uint8Array(C);let d=0;for(let w=0;w<f.length;w++){const Q=f[w];p.set(Q,d),d+=Q.byteLength}return p}};const Zo=new Set([r.RGBAFormat,r.RGBFormat,r.RGFormat,r.RedFormat]),Mt={[bi]:r.RGBAFormat,[di]:r.RGBAFormat,[fi]:r.RGBAFormat,[Ci]:r.RGBAFormat,[mi]:r.RGFormat,[pi]:r.RGFormat,[ui]:r.RGFormat,[Bi]:r.RGFormat,[Qi]:r.RedFormat,[Ei]:r.RedFormat,[Ii]:r.RedFormat,[hi]:r.RedFormat,[yi]:r.RGBFormat,[wi]:r.RGBFormat,[Di]:r.RGB_ETC2_Format,[Si]:r.RGBA_ETC2_EAC_Format,[sn]:r.RGBA_ASTC_4x4_Format,[jo]:r.RGBA_ASTC_4x4_Format,[Jo]:r.RGBA_ASTC_4x4_Format,[Mi]:r.RGBA_ASTC_6x6_Format,[xi]:r.RGBA_ASTC_6x6_Format,[Uo]:r.RGBA_S3TC_DXT1_Format,[_o]:r.RGBA_S3TC_DXT1_Format,[vo]:r.RGB_S3TC_DXT1_Format,[No]:r.RGB_S3TC_DXT1_Format,[Ho]:r.RGBA_S3TC_DXT3_Format,[Po]:r.RGBA_S3TC_DXT3_Format,[qo]:r.RGBA_S3TC_DXT5_Format,[Oo]:r.RGBA_S3TC_DXT5_Format,[Yo]:r.RGBA_BPTC_Format,[Ko]:r.RGBA_BPTC_Format},LA={[bi]:r.FloatType,[di]:r.HalfFloatType,[fi]:r.UnsignedByteType,[Ci]:r.UnsignedByteType,[mi]:r.FloatType,[pi]:r.HalfFloatType,[ui]:r.UnsignedByteType,[Bi]:r.UnsignedByteType,[Qi]:r.FloatType,[Ei]:r.HalfFloatType,[Ii]:r.UnsignedByteType,[hi]:r.UnsignedByteType,[yi]:r.UnsignedInt5999Type,[wi]:r.UnsignedInt101111Type,[Di]:r.UnsignedByteType,[Si]:r.UnsignedByteType,[sn]:r.HalfFloatType,[Mi]:r.UnsignedByteType,[xi]:r.UnsignedByteType};async function $o(a){const{vkFormat:e}=a;if(Mt[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let A;a.supercompressionScheme===mn&&(xt||(xt=new Promise(async s=>{const o=new zo;await o.init(),s(o)})),A=await xt);const n=[];for(let s=0;s<a.levels.length;s++){const o=Math.max(1,a.pixelWidth>>s),c=Math.max(1,a.pixelHeight>>s),g=a.pixelDepth?Math.max(1,a.pixelDepth>>s):0,l=a.levels[s];let h;if(a.supercompressionScheme===Fo)h=l.levelData;else if(a.supercompressionScheme===mn)h=A.decode(l.levelData,l.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let I;LA[e]===r.FloatType?I=new Float32Array(h.buffer,h.byteOffset,h.byteLength/Float32Array.BYTES_PER_ELEMENT):LA[e]===r.HalfFloatType?I=new Uint16Array(h.buffer,h.byteOffset,h.byteLength/Uint16Array.BYTES_PER_ELEMENT):LA[e]===r.UnsignedInt5999Type||LA[e]===r.UnsignedInt101111Type?I=new Uint32Array(h.buffer,h.byteOffset,h.byteLength/Uint32Array.BYTES_PER_ELEMENT):I=h,n.push({data:I,width:o,height:c,depth:g})}const t=a.levelCount===0||n.length>1;let i;if(Zo.has(Mt[e]))i=a.pixelDepth===0?new r.DataTexture(n[0].data,a.pixelWidth,a.pixelHeight):new r.Data3DTexture(n[0].data,a.pixelWidth,a.pixelHeight,a.pixelDepth),i.minFilter=t?r.NearestMipmapNearestFilter:r.NearestFilter,i.magFilter=r.NearestFilter,i.generateMipmaps=a.levelCount===0;else{if(a.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");i=new r.CompressedTexture(n,a.pixelWidth,a.pixelHeight),i.minFilter=t?r.LinearMipmapLinearFilter:r.LinearFilter,i.magFilter=r.LinearFilter}return i.mipmaps=n,i.type=LA[e],i.format=Mt[e],i.colorSpace=Fi(a),i.needsUpdate=!0,Promise.resolve(i)}function Fi(a){const e=a.dataFormatDescriptor[0];return e.colorPrimaries===To?e.transferFunction===bn?r.SRGBColorSpace:r.LinearSRGBColorSpace:e.colorPrimaries===ko?e.transferFunction===bn?Xo:Wo:(e.colorPrimaries===Go||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),r.NoColorSpace)}const Ri=new r.NodeFrame;Ri.camera=new r.PerspectiveCamera;r.ShaderLib.basic,r.ShaderLib.basic,r.ShaderLib.points,r.ShaderLib.standard,r.ShaderLib.physical,r.ShaderLib.phong;var jA=function(){var a=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(l){l.preventDefault(),n(++a%e.children.length)},!1);function A(l){return e.appendChild(l.dom),l}function n(l){for(var h=0;h<e.children.length;h++)e.children[h].style.display=h===l?"block":"none";a=l}var t=(performance||Date).now(),i=t,s=0,o=A(new jA.Panel("FPS","#0ff","#002")),c=A(new jA.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var g=A(new jA.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:e,addPanel:A,showPanel:n,begin:function(){t=(performance||Date).now()},end:function(){s++;var l=(performance||Date).now();if(c.update(l-t,200),l>=i+1e3&&(o.update(s*1e3/(l-i),100),i=l,s=0,g)){var h=performance.memory;g.update(h.usedJSHeapSize/1048576,h.jsHeapSizeLimit/1048576)}return l},update:function(){t=this.end()},domElement:e,setMode:n}};jA.Panel=function(a,e,A){var n=1/0,t=0,i=Math.round,s=i(window.devicePixelRatio||1),o=80*s,c=48*s,g=3*s,l=2*s,h=3*s,I=15*s,B=74*s,f=30*s,C=document.createElement("canvas");C.width=o,C.height=c,C.style.cssText="width:80px;height:48px";var p=C.getContext("2d");return p.font="bold "+9*s+"px Helvetica,Arial,sans-serif",p.textBaseline="top",p.fillStyle=A,p.fillRect(0,0,o,c),p.fillStyle=e,p.fillText(a,g,l),p.fillRect(h,I,B,f),p.fillStyle=A,p.globalAlpha=.9,p.fillRect(h,I,B,f),{dom:C,update:function(d,w){n=Math.min(n,d),t=Math.max(t,d),p.fillStyle=A,p.globalAlpha=1,p.fillRect(0,0,o,I),p.fillStyle=e,p.fillText(i(d)+" "+a+" ("+i(n)+"-"+i(t)+")",g,l),p.drawImage(C,h+s,I,B-s,f,h,I,B-s,f),p.fillRect(h+B-s,I,s,f),p.fillStyle=A,p.globalAlpha=.9,p.fillRect(h+B-s,I,s,i((1-d/w)*f))}}};class er extends r.ExtrudeGeometry{constructor(e,A={}){const n=A.font;if(n===void 0)super();else{const t=n.generateShapes(e,A.size);A.depth===void 0&&A.height!==void 0&&console.warn("THREE.TextGeometry: .height is now depreciated. Please use .depth instead"),A.depth=A.depth!==void 0?A.depth:A.height!==void 0?A.height:50,A.bevelThickness===void 0&&(A.bevelThickness=10),A.bevelSize===void 0&&(A.bevelSize=8),A.bevelEnabled===void 0&&(A.bevelEnabled=!1),super(t,A)}this.type="TextGeometry"}}class Ar extends r.Loader{constructor(e){super(e)}load(e,A,n,t){const i=this,s=new r.FileLoader(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,function(o){const c=i.parse(JSON.parse(o));A&&A(c)},n,t)}parse(e){return new Gi(e)}}class Gi{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,A=100){const n=[],t=tr(e,A,this.data);for(let i=0,s=t.length;i<s;i++)n.push(...t[i].toShapes());return n}}function tr(a,e,A){const n=Array.from(a),t=e/A.resolution,i=(A.boundingBox.yMax-A.boundingBox.yMin+A.underlineThickness)*t,s=[];let o=0,c=0;for(let g=0;g<n.length;g++){const l=n[g];if(l===`
|
|
4
|
+
`)o=0,c-=i;else{const h=nr(l,t,o,c,A);o+=h.offsetX,s.push(h.path)}}return s}function nr(a,e,A,n,t){const i=t.glyphs[a]||t.glyphs["?"];if(!i){console.error('THREE.Font: character "'+a+'" does not exists in font family '+t.familyName+".");return}const s=new r.ShapePath;let o,c,g,l,h,I,B,f;if(i.o){const C=i._cachedOutline||(i._cachedOutline=i.o.split(" "));for(let p=0,d=C.length;p<d;)switch(C[p++]){case"m":o=C[p++]*e+A,c=C[p++]*e+n,s.moveTo(o,c);break;case"l":o=C[p++]*e+A,c=C[p++]*e+n,s.lineTo(o,c);break;case"q":g=C[p++]*e+A,l=C[p++]*e+n,h=C[p++]*e+A,I=C[p++]*e+n,s.quadraticCurveTo(h,I,g,l);break;case"b":g=C[p++]*e+A,l=C[p++]*e+n,h=C[p++]*e+A,I=C[p++]*e+n,B=C[p++]*e+A,f=C[p++]*e+n,s.bezierCurveTo(h,I,B,f,g,l);break}}return{offsetX:i.ha*e,path:s}}var we=Uint8Array,Ke=Uint16Array,on=Int32Array,ft=new we([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ct=new we([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wt=new we([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ti=function(a,e){for(var A=new Ke(31),n=0;n<31;++n)A[n]=e+=1<<a[n-1];for(var t=new on(A[30]),n=1;n<30;++n)for(var i=A[n];i<A[n+1];++i)t[i]=i-A[n]<<5|n;return{b:A,r:t}},ki=Ti(ft,2),Li=ki.b,Zt=ki.r;Li[28]=258,Zt[258]=28;var vi=Ti(Ct,0),ir=vi.b,Dn=vi.r,$t=new Ke(32768);for(var pe=0;pe<32768;++pe){var BA=(pe&43690)>>1|(pe&21845)<<1;BA=(BA&52428)>>2|(BA&13107)<<2,BA=(BA&61680)>>4|(BA&3855)<<4,$t[pe]=((BA&65280)>>8|(BA&255)<<8)>>1}var sA=(function(a,e,A){for(var n=a.length,t=0,i=new Ke(e);t<n;++t)a[t]&&++i[a[t]-1];var s=new Ke(e);for(t=1;t<e;++t)s[t]=s[t-1]+i[t-1]<<1;var o;if(A){o=new Ke(1<<e);var c=15-e;for(t=0;t<n;++t)if(a[t])for(var g=t<<4|a[t],l=e-a[t],h=s[a[t]-1]++<<l,I=h|(1<<l)-1;h<=I;++h)o[$t[h]>>c]=g}else for(o=new Ke(n),t=0;t<n;++t)a[t]&&(o[t]=$t[s[a[t]-1]++]>>15-a[t]);return o}),CA=new we(288);for(var pe=0;pe<144;++pe)CA[pe]=8;for(var pe=144;pe<256;++pe)CA[pe]=9;for(var pe=256;pe<280;++pe)CA[pe]=7;for(var pe=280;pe<288;++pe)CA[pe]=8;var zA=new we(32);for(var pe=0;pe<32;++pe)zA[pe]=5;var sr=sA(CA,9,0),or=sA(CA,9,1),rr=sA(zA,5,0),ar=sA(zA,5,1),Ft=function(a){for(var e=a[0],A=1;A<a.length;++A)a[A]>e&&(e=a[A]);return e},$e=function(a,e,A){var n=e/8|0;return(a[n]|a[n+1]<<8)>>(e&7)&A},Rt=function(a,e){var A=e/8|0;return(a[A]|a[A+1]<<8|a[A+2]<<16)>>(e&7)},rn=function(a){return(a+7)/8|0},an=function(a,e,A){return(A==null||A>a.length)&&(A=a.length),new we(a.subarray(e,A))},cr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],He=function(a,e,A){var n=new Error(e||cr[a]);if(n.code=a,Error.captureStackTrace&&Error.captureStackTrace(n,He),!A)throw n;return n},gr=function(a,e,A,n){var t=a.length,i=0;if(!t||e.f&&!e.l)return A||new we(0);var s=!A,o=s||e.i!=2,c=e.i;s&&(A=new we(t*3));var g=function(Je){var EA=A.length;if(Je>EA){var oA=new we(Math.max(EA*2,Je));oA.set(A),A=oA}},l=e.f||0,h=e.p||0,I=e.b||0,B=e.l,f=e.d,C=e.m,p=e.n,d=t*8;do{if(!B){l=$e(a,h,1);var w=$e(a,h+1,3);if(h+=3,w)if(w==1)B=or,f=ar,C=9,p=5;else if(w==2){var R=$e(a,h,31)+257,F=$e(a,h+10,15)+4,D=R+$e(a,h+5,31)+1;h+=14;for(var M=new we(D),N=new we(19),_=0;_<F;++_)N[Wt[_]]=$e(a,h+_*3,7);h+=F*3;for(var P=Ft(N),z=(1<<P)-1,U=sA(N,P,1),_=0;_<D;){var q=U[$e(a,h,z)];h+=q&15;var Q=q>>4;if(Q<16)M[_++]=Q;else{var H=0,Z=0;for(Q==16?(Z=3+$e(a,h,3),h+=2,H=M[_-1]):Q==17?(Z=3+$e(a,h,7),h+=3):Q==18&&(Z=11+$e(a,h,127),h+=7);Z--;)M[_++]=H}}var se=M.subarray(0,R),ee=M.subarray(R);C=Ft(se),p=Ft(ee),B=sA(se,C,1),f=sA(ee,p,1)}else He(1);else{var Q=rn(h)+4,b=a[Q-4]|a[Q-3]<<8,y=Q+b;if(y>t){c&&He(0);break}o&&g(I+b),A.set(a.subarray(Q,y),I),e.b=I+=b,e.p=h=y*8,e.f=l;continue}if(h>d){c&&He(0);break}}o&&g(I+131072);for(var re=(1<<C)-1,Ae=(1<<p)-1,W=h;;W=h){var H=B[Rt(a,h)&re],te=H>>4;if(h+=H&15,h>d){c&&He(0);break}if(H||He(2),te<256)A[I++]=te;else if(te==256){W=h,B=null;break}else{var ge=te-254;if(te>264){var _=te-257,he=ft[_];ge=$e(a,h,(1<<he)-1)+Li[_],h+=he}var ne=f[Rt(a,h)&Ae],Te=ne>>4;ne||He(3),h+=ne&15;var ee=ir[Te];if(Te>3){var he=Ct[Te];ee+=Rt(a,h)&(1<<he)-1,h+=he}if(h>d){c&&He(0);break}o&&g(I+131072);var Se=I+ge;if(I<ee){var hA=i-ee,_e=Math.min(ee,Se);for(hA+I<0&&He(3);I<_e;++I)A[I]=n[hA+I]}for(;I<Se;++I)A[I]=A[I-ee]}}e.l=B,e.p=W,e.b=I,e.f=l,B&&(l=1,e.m=C,e.d=f,e.n=p)}while(!l);return I!=A.length&&s?an(A,0,I):A.subarray(0,I)},aA=function(a,e,A){A<<=e&7;var n=e/8|0;a[n]|=A,a[n+1]|=A>>8},vA=function(a,e,A){A<<=e&7;var n=e/8|0;a[n]|=A,a[n+1]|=A>>8,a[n+2]|=A>>16},Gt=function(a,e){for(var A=[],n=0;n<a.length;++n)a[n]&&A.push({s:n,f:a[n]});var t=A.length,i=A.slice();if(!t)return{t:Ui,l:0};if(t==1){var s=new we(A[0].s+1);return s[A[0].s]=1,{t:s,l:1}}A.sort(function(y,R){return y.f-R.f}),A.push({s:-1,f:25001});var o=A[0],c=A[1],g=0,l=1,h=2;for(A[0]={s:-1,f:o.f+c.f,l:o,r:c};l!=t-1;)o=A[A[g].f<A[h].f?g++:h++],c=A[g!=l&&A[g].f<A[h].f?g++:h++],A[l++]={s:-1,f:o.f+c.f,l:o,r:c};for(var I=i[0].s,n=1;n<t;++n)i[n].s>I&&(I=i[n].s);var B=new Ke(I+1),f=en(A[l-1],B,0);if(f>e){var n=0,C=0,p=f-e,d=1<<p;for(i.sort(function(R,F){return B[F.s]-B[R.s]||R.f-F.f});n<t;++n){var w=i[n].s;if(B[w]>e)C+=d-(1<<f-B[w]),B[w]=e;else break}for(C>>=p;C>0;){var Q=i[n].s;B[Q]<e?C-=1<<e-B[Q]++-1:++n}for(;n>=0&&C;--n){var b=i[n].s;B[b]==e&&(--B[b],++C)}f=e}return{t:new we(B),l:f}},en=function(a,e,A){return a.s==-1?Math.max(en(a.l,e,A+1),en(a.r,e,A+1)):e[a.s]=A},Sn=function(a){for(var e=a.length;e&&!a[--e];);for(var A=new Ke(++e),n=0,t=a[0],i=1,s=function(c){A[n++]=c},o=1;o<=e;++o)if(a[o]==t&&o!=e)++i;else{if(!t&&i>2){for(;i>138;i-=138)s(32754);i>2&&(s(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(s(t),--i;i>6;i-=6)s(8304);i>2&&(s(i-3<<5|8208),i=0)}for(;i--;)s(t);i=1,t=a[o]}return{c:A.subarray(0,n),n:e}},NA=function(a,e){for(var A=0,n=0;n<e.length;++n)A+=a[n]*e[n];return A},Ni=function(a,e,A){var n=A.length,t=rn(e+2);a[t]=n&255,a[t+1]=n>>8,a[t+2]=a[t]^255,a[t+3]=a[t+1]^255;for(var i=0;i<n;++i)a[t+i+4]=A[i];return(t+4+n)*8},xn=function(a,e,A,n,t,i,s,o,c,g,l){aA(e,l++,A),++t[256];for(var h=Gt(t,15),I=h.t,B=h.l,f=Gt(i,15),C=f.t,p=f.l,d=Sn(I),w=d.c,Q=d.n,b=Sn(C),y=b.c,R=b.n,F=new Ke(19),D=0;D<w.length;++D)++F[w[D]&31];for(var D=0;D<y.length;++D)++F[y[D]&31];for(var M=Gt(F,7),N=M.t,_=M.l,P=19;P>4&&!N[Wt[P-1]];--P);var z=g+5<<3,U=NA(t,CA)+NA(i,zA)+s,q=NA(t,I)+NA(i,C)+s+14+3*P+NA(F,N)+2*F[16]+3*F[17]+7*F[18];if(c>=0&&z<=U&&z<=q)return Ni(e,l,a.subarray(c,c+g));var H,Z,se,ee;if(aA(e,l,1+(q<U)),l+=2,q<U){H=sA(I,B,0),Z=I,se=sA(C,p,0),ee=C;var re=sA(N,_,0);aA(e,l,Q-257),aA(e,l+5,R-1),aA(e,l+10,P-4),l+=14;for(var D=0;D<P;++D)aA(e,l+3*D,N[Wt[D]]);l+=3*P;for(var Ae=[w,y],W=0;W<2;++W)for(var te=Ae[W],D=0;D<te.length;++D){var ge=te[D]&31;aA(e,l,re[ge]),l+=N[ge],ge>15&&(aA(e,l,te[D]>>5&127),l+=te[D]>>12)}}else H=sr,Z=CA,se=rr,ee=zA;for(var D=0;D<o;++D){var he=n[D];if(he>255){var ge=he>>18&31;vA(e,l,H[ge+257]),l+=Z[ge+257],ge>7&&(aA(e,l,he>>23&31),l+=ft[ge]);var ne=he&31;vA(e,l,se[ne]),l+=ee[ne],ne>3&&(vA(e,l,he>>5&8191),l+=Ct[ne])}else vA(e,l,H[he]),l+=Z[he]}return vA(e,l,H[256]),l+Z[256]},lr=new on([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Ui=new we(0),hr=function(a,e,A,n,t,i){var s=i.z||a.length,o=new we(n+s+5*(1+Math.ceil(s/7e3))+t),c=o.subarray(n,o.length-t),g=i.l,l=(i.r||0)&7;if(e){l&&(c[0]=i.r>>3);for(var h=lr[e-1],I=h>>13,B=h&8191,f=(1<<A)-1,C=i.p||new Ke(32768),p=i.h||new Ke(f+1),d=Math.ceil(A/3),w=2*d,Q=function(yA){return(a[yA]^a[yA+1]<<d^a[yA+2]<<w)&f},b=new on(25e3),y=new Ke(288),R=new Ke(32),F=0,D=0,M=i.i||0,N=0,_=i.w||0,P=0;M+2<s;++M){var z=Q(M),U=M&32767,q=p[z];if(C[U]=q,p[z]=U,_<=M){var H=s-M;if((F>7e3||N>24576)&&(H>423||!g)){l=xn(a,c,0,b,y,R,D,N,P,M-P,l),N=F=D=0,P=M;for(var Z=0;Z<286;++Z)y[Z]=0;for(var Z=0;Z<30;++Z)R[Z]=0}var se=2,ee=0,re=B,Ae=U-q&32767;if(H>2&&z==Q(M-Ae))for(var W=Math.min(I,H)-1,te=Math.min(32767,M),ge=Math.min(258,H);Ae<=te&&--re&&U!=q;){if(a[M+se]==a[M+se-Ae]){for(var he=0;he<ge&&a[M+he]==a[M+he-Ae];++he);if(he>se){if(se=he,ee=Ae,he>W)break;for(var ne=Math.min(Ae,he-2),Te=0,Z=0;Z<ne;++Z){var Se=M-Ae+Z&32767,hA=C[Se],_e=Se-hA&32767;_e>Te&&(Te=_e,q=Se)}}}U=q,q=C[U],Ae+=U-q&32767}if(ee){b[N++]=268435456|Zt[se]<<18|Dn[ee];var Je=Zt[se]&31,EA=Dn[ee]&31;D+=ft[Je]+Ct[EA],++y[257+Je],++R[EA],_=M+se,++F}else b[N++]=a[M],++y[a[M]]}}for(M=Math.max(M,_);M<s;++M)b[N++]=a[M],++y[a[M]];l=xn(a,c,g,b,y,R,D,N,P,M-P,l),g||(i.r=l&7|c[l/8|0]<<3,l-=7,i.h=p,i.p=C,i.i=M,i.w=_)}else{for(var M=i.w||0;M<s+g;M+=65535){var oA=M+65535;oA>=s&&(c[l/8|0]=g,oA=s),l=Ni(c,l+1,a.subarray(M,oA))}i.i=s}return an(o,0,n+rn(l)+t)},Ir=(function(){for(var a=new Int32Array(256),e=0;e<256;++e){for(var A=e,n=9;--n;)A=(A&1&&-306674912)^A>>>1;a[e]=A}return a})(),ur=function(){var a=-1;return{p:function(e){for(var A=a,n=0;n<e.length;++n)A=Ir[A&255^e[n]]^A>>>8;a=A},d:function(){return~a}}},Br=function(a,e,A,n,t){if(!t&&(t={l:1},e.dictionary)){var i=e.dictionary.subarray(-32768),s=new we(i.length+a.length);s.set(i),s.set(a,i.length),a=s,t.w=i.length}return hr(a,e.level==null?6:e.level,e.mem==null?t.l?Math.ceil(Math.max(8,Math.min(13,Math.log(a.length)))*1.5):20:12+e.mem,A,n,t)},_i=function(a,e){var A={};for(var n in a)A[n]=a[n];for(var n in e)A[n]=e[n];return A},Re=function(a,e,A){for(;A;++e)a[e]=A,A>>>=8},fr=function(a,e){return((a[0]&15)!=8||a[0]>>4>7||(a[0]<<8|a[1])%31)&&He(6,"invalid zlib data"),(a[1]>>5&1)==1&&He(6,"invalid zlib data: "+(a[1]&32?"need":"unexpected")+" dictionary"),(a[1]>>3&4)+2};function Cr(a,e){return Br(a,e||{},0,0)}function qA(a,e){return gr(a.subarray(fr(a),-4),{i:2},e,e)}var Pi=function(a,e,A,n){for(var t in a){var i=a[t],s=e+t,o=n;Array.isArray(i)&&(o=_i(n,i[1]),i=i[0]),i instanceof we?A[s]=[i,o]:(A[s+="/"]=[new we(0),o],Pi(i,s,A,n))}},Mn=typeof TextEncoder<"u"&&new TextEncoder,Er=typeof TextDecoder<"u"&&new TextDecoder,pr=0;try{Er.decode(Ui,{stream:!0}),pr=1}catch{}function An(a,e){var A;if(Mn)return Mn.encode(a);for(var n=a.length,t=new we(a.length+(a.length>>1)),i=0,s=function(g){t[i++]=g},A=0;A<n;++A){if(i+5>t.length){var o=new we(i+8+(n-A<<1));o.set(t),t=o}var c=a.charCodeAt(A);c<128||e?s(c):c<2048?(s(192|c>>6),s(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|a.charCodeAt(++A)&1023,s(240|c>>18),s(128|c>>12&63),s(128|c>>6&63),s(128|c&63)):(s(224|c>>12),s(128|c>>6&63),s(128|c&63))}return an(t,0,i)}var tn=function(a){var e=0;if(a)for(var A in a){var n=a[A].length;n>65535&&He(9),e+=n+4}return e},Fn=function(a,e,A,n,t,i,s,o){var c=n.length,g=A.extra,l=o&&o.length,h=tn(g);Re(a,e,s!=null?33639248:67324752),e+=4,s!=null&&(a[e++]=20,a[e++]=A.os),a[e]=20,e+=2,a[e++]=A.flag<<1|(i<0&&8),a[e++]=t&&8,a[e++]=A.compression&255,a[e++]=A.compression>>8;var I=new Date(A.mtime==null?Date.now():A.mtime),B=I.getFullYear()-1980;if((B<0||B>119)&&He(10),Re(a,e,B<<25|I.getMonth()+1<<21|I.getDate()<<16|I.getHours()<<11|I.getMinutes()<<5|I.getSeconds()>>1),e+=4,i!=-1&&(Re(a,e,A.crc),Re(a,e+4,i<0?-i-2:i),Re(a,e+8,A.size)),Re(a,e+12,c),Re(a,e+14,h),e+=16,s!=null&&(Re(a,e,l),Re(a,e+6,A.attrs),Re(a,e+10,s),e+=14),a.set(n,e),e+=c,h)for(var f in g){var C=g[f],p=C.length;Re(a,e,+f),Re(a,e+2,p),a.set(C,e+4),e+=4+p}return l&&(a.set(o,e),e+=l),e},dr=function(a,e,A,n,t){Re(a,e,101010256),Re(a,e+8,A),Re(a,e+10,A),Re(a,e+12,n),Re(a,e+16,t)};function Qr(a,e){e||(e={});var A={},n=[];Pi(a,"",A,e);var t=0,i=0;for(var s in A){var o=A[s],c=o[0],g=o[1],l=g.level==0?0:8,h=An(s),I=h.length,B=g.comment,f=B&&An(B),C=f&&f.length,p=tn(g.extra);I>65535&&He(11);var d=l?Cr(c,g):c,w=d.length,Q=ur();Q.p(c),n.push(_i(g,{size:c.length,crc:Q.d(),c:d,f:h,m:f,u:I!=s.length||f&&B.length!=C,o:t,compression:l})),t+=30+I+p+w,i+=76+2*(I+p)+(C||0)+w}for(var b=new we(i+22),y=t,R=i-t,F=0;F<n.length;++F){var h=n[F];Fn(b,h.o,h,h.f,h.u,h.c.length);var D=30+h.f.length+tn(h.extra);b.set(h.c,h.o+D),Fn(b,t,h,h.f,h.u,h.c.length,h.o,h.m),t+=16+D+(h.m?h.m.length:0)}return dr(b,t,n.length,R,y),b}class mr extends r.DataTextureLoader{constructor(e){super(e),this.type=r.HalfFloatType}parse(e){const M=Math.pow(2.7182818,2.2);function N(u,E){let m=0;for(let G=0;G<65536;++G)(G==0||u[G>>3]&1<<(G&7))&&(E[m++]=G);const S=m-1;for(;m<65536;)E[m++]=0;return S}function _(u){for(let E=0;E<16384;E++)u[E]={},u[E].len=0,u[E].lit=0,u[E].p=null}const P={l:0,c:0,lc:0};function z(u,E,m,S,G){for(;m<u;)E=E<<8|un(S,G),m+=8;m-=u,P.l=E>>m&(1<<u)-1,P.c=E,P.lc=m}const U=new Array(59);function q(u){for(let m=0;m<=58;++m)U[m]=0;for(let m=0;m<65537;++m)U[u[m]]+=1;let E=0;for(let m=58;m>0;--m){const S=E+U[m]>>1;U[m]=E,E=S}for(let m=0;m<65537;++m){const S=u[m];S>0&&(u[m]=S|U[S]++<<6)}}function H(u,E,m,S,G,x){const L=E;let O=0,v=0;for(;S<=G;S++){if(L.value-E.value>m)return!1;z(6,O,v,u,L);const k=P.l;if(O=P.c,v=P.lc,x[S]=k,k==63){if(L.value-E.value>m)throw new Error("Something wrong with hufUnpackEncTable");z(8,O,v,u,L);let T=P.l+6;if(O=P.c,v=P.lc,S+T>G+1)throw new Error("Something wrong with hufUnpackEncTable");for(;T--;)x[S++]=0;S--}else if(k>=59){let T=k-59+2;if(S+T>G+1)throw new Error("Something wrong with hufUnpackEncTable");for(;T--;)x[S++]=0;S--}}q(x)}function Z(u){return u&63}function se(u){return u>>6}function ee(u,E,m,S){for(;E<=m;E++){const G=se(u[E]),x=Z(u[E]);if(G>>x)throw new Error("Invalid table entry");if(x>14){const L=S[G>>x-14];if(L.len)throw new Error("Invalid table entry");if(L.lit++,L.p){const O=L.p;L.p=new Array(L.lit);for(let v=0;v<L.lit-1;++v)L.p[v]=O[v]}else L.p=new Array(1);L.p[L.lit-1]=E}else if(x){let L=0;for(let O=1<<14-x;O>0;O--){const v=S[(G<<14-x)+L];if(v.len||v.p)throw new Error("Invalid table entry");v.len=x,v.lit=E,L++}}}return!0}const re={c:0,lc:0};function Ae(u,E,m,S){u=u<<8|un(m,S),E+=8,re.c=u,re.lc=E}const W={c:0,lc:0};function te(u,E,m,S,G,x,L,O,v){if(u==E){S<8&&(Ae(m,S,G,x),m=re.c,S=re.lc),S-=8;let k=m>>S;if(k=new Uint8Array([k])[0],O.value+k>v)return!1;const T=L[O.value-1];for(;k-- >0;)L[O.value++]=T}else if(O.value<v)L[O.value++]=u;else return!1;W.c=m,W.lc=S}function ge(u){return u&65535}function he(u){const E=ge(u);return E>32767?E-65536:E}const ne={a:0,b:0};function Te(u,E){const m=he(u),G=he(E),x=m+(G&1)+(G>>1),L=x,O=x-G;ne.a=L,ne.b=O}function Se(u,E){const m=ge(u),S=ge(E),G=m-(S>>1)&65535,x=S+G-32768&65535;ne.a=x,ne.b=G}function hA(u,E,m,S,G,x,L){const O=L<16384,v=m>G?G:m;let k=1,T,K;for(;k<=v;)k<<=1;for(k>>=1,T=k,k>>=1;k>=1;){K=0;const V=K+x*(G-T),Y=x*k,$=x*T,J=S*k,X=S*T;let ie,Be,Qe,qe;for(;K<=V;K+=$){let Ee=K;const le=K+S*(m-T);for(;Ee<=le;Ee+=X){const ye=Ee+J,ze=Ee+Y,xe=ze+J;O?(Te(u[Ee+E],u[ze+E]),ie=ne.a,Qe=ne.b,Te(u[ye+E],u[xe+E]),Be=ne.a,qe=ne.b,Te(ie,Be),u[Ee+E]=ne.a,u[ye+E]=ne.b,Te(Qe,qe),u[ze+E]=ne.a,u[xe+E]=ne.b):(Se(u[Ee+E],u[ze+E]),ie=ne.a,Qe=ne.b,Se(u[ye+E],u[xe+E]),Be=ne.a,qe=ne.b,Se(ie,Be),u[Ee+E]=ne.a,u[ye+E]=ne.b,Se(Qe,qe),u[ze+E]=ne.a,u[xe+E]=ne.b)}if(m&k){const ye=Ee+Y;O?Te(u[Ee+E],u[ye+E]):Se(u[Ee+E],u[ye+E]),ie=ne.a,u[ye+E]=ne.b,u[Ee+E]=ie}}if(G&k){let Ee=K;const le=K+S*(m-T);for(;Ee<=le;Ee+=X){const ye=Ee+J;O?Te(u[Ee+E],u[ye+E]):Se(u[Ee+E],u[ye+E]),ie=ne.a,u[ye+E]=ne.b,u[Ee+E]=ie}}T=k,k>>=1}return K}function _e(u,E,m,S,G,x,L,O,v){let k=0,T=0;const K=L,V=Math.trunc(S.value+(G+7)/8);for(;S.value<V;)for(Ae(k,T,m,S),k=re.c,T=re.lc;T>=14;){const $=k>>T-14&16383,J=E[$];if(J.len)T-=J.len,te(J.lit,x,k,T,m,S,O,v,K),k=W.c,T=W.lc;else{if(!J.p)throw new Error("hufDecode issues");let X;for(X=0;X<J.lit;X++){const ie=Z(u[J.p[X]]);for(;T<ie&&S.value<V;)Ae(k,T,m,S),k=re.c,T=re.lc;if(T>=ie&&se(u[J.p[X]])==(k>>T-ie&(1<<ie)-1)){T-=ie,te(J.p[X],x,k,T,m,S,O,v,K),k=W.c,T=W.lc;break}}if(X==J.lit)throw new Error("hufDecode issues")}}const Y=8-G&7;for(k>>=Y,T-=Y;T>0;){const $=E[k<<14-T&16383];if($.len)T-=$.len,te($.lit,x,k,T,m,S,O,v,K),k=W.c,T=W.lc;else throw new Error("hufDecode issues")}return!0}function Je(u,E,m,S,G,x){const L={value:0},O=m.value,v=Ve(E,m),k=Ve(E,m);m.value+=4;const T=Ve(E,m);if(m.value+=4,v<0||v>=65537||k<0||k>=65537)throw new Error("Something wrong with HUF_ENCSIZE");const K=new Array(65537),V=new Array(16384);_(V);const Y=S-(m.value-O);if(H(u,m,Y,v,k,K),T>8*(S-(m.value-O)))throw new Error("Something wrong with hufUncompress");ee(K,v,k,V),_e(K,V,u,m,T,k,x,G,L)}function EA(u,E,m){for(let S=0;S<m;++S)E[S]=u[E[S]]}function oA(u){for(let E=1;E<u.length;E++){const m=u[E-1]+u[E]-128;u[E]=m}}function yA(u,E){let m=0,S=Math.floor((u.length+1)/2),G=0;const x=u.length-1;for(;!(G>x||(E[G++]=u[m++],G>x));)E[G++]=u[S++]}function hn(u){let E=u.byteLength;const m=new Array;let S=0;const G=new DataView(u);for(;E>0;){const x=G.getInt8(S++);if(x<0){const L=-x;E-=L+1;for(let O=0;O<L;O++)m.push(G.getUint8(S++))}else{const L=x;E-=2;const O=G.getUint8(S++);for(let v=0;v<L+1;v++)m.push(O)}}return m}function ts(u,E,m,S,G,x){let L=new DataView(x.buffer);const O=m[u.idx[0]].width,v=m[u.idx[0]].height,k=3,T=Math.floor(O/8),K=Math.ceil(O/8),V=Math.ceil(v/8),Y=O-(K-1)*8,$=v-(V-1)*8,J={value:0},X=new Array(k),ie=new Array(k),Be=new Array(k),Qe=new Array(k),qe=new Array(k);for(let le=0;le<k;++le)qe[le]=E[u.idx[le]],X[le]=le<1?0:X[le-1]+K*V,ie[le]=new Float32Array(64),Be[le]=new Uint16Array(64),Qe[le]=new Uint16Array(K*64);for(let le=0;le<V;++le){let ye=8;le==V-1&&(ye=$);let ze=8;for(let ue=0;ue<K;++ue){ue==K-1&&(ze=Y);for(let Ce=0;Ce<k;++Ce)Be[Ce].fill(0),Be[Ce][0]=G[X[Ce]++],ns(J,S,Be[Ce]),is(Be[Ce],ie[Ce]),ss(ie[Ce]);os(ie);for(let Ce=0;Ce<k;++Ce)rs(ie[Ce],Qe[Ce],ue*64)}let xe=0;for(let ue=0;ue<k;++ue){const Ce=m[u.idx[ue]].type;for(let rA=8*le;rA<8*le+ye;++rA){xe=qe[ue][rA];for(let GA=0;GA<T;++GA){const eA=GA*64+(rA&7)*8;L.setUint16(xe+0*Ce,Qe[ue][eA+0],!0),L.setUint16(xe+2*Ce,Qe[ue][eA+1],!0),L.setUint16(xe+4*Ce,Qe[ue][eA+2],!0),L.setUint16(xe+6*Ce,Qe[ue][eA+3],!0),L.setUint16(xe+8*Ce,Qe[ue][eA+4],!0),L.setUint16(xe+10*Ce,Qe[ue][eA+5],!0),L.setUint16(xe+12*Ce,Qe[ue][eA+6],!0),L.setUint16(xe+14*Ce,Qe[ue][eA+7],!0),xe+=16*Ce}}if(T!=K)for(let rA=8*le;rA<8*le+ye;++rA){const GA=qe[ue][rA]+8*T*2*Ce,eA=T*64+(rA&7)*8;for(let ZA=0;ZA<ze;++ZA)L.setUint16(GA+ZA*2*Ce,Qe[ue][eA+ZA],!0)}}}const Ee=new Uint16Array(O);L=new DataView(x.buffer);for(let le=0;le<k;++le){m[u.idx[le]].decoded=!0;const ye=m[u.idx[le]].type;if(m[le].type==2)for(let ze=0;ze<v;++ze){const xe=qe[le][ze];for(let ue=0;ue<O;++ue)Ee[ue]=L.getUint16(xe+ue*2*ye,!0);for(let ue=0;ue<O;++ue)L.setFloat32(xe+ue*2*ye,j(Ee[ue]),!0)}}}function ns(u,E,m){let S,G=1;for(;G<64;)S=E[u.value],S==65280?G=64:S>>8==255?G+=S&255:(m[G]=S,G++),u.value++}function is(u,E){E[0]=j(u[0]),E[1]=j(u[1]),E[2]=j(u[5]),E[3]=j(u[6]),E[4]=j(u[14]),E[5]=j(u[15]),E[6]=j(u[27]),E[7]=j(u[28]),E[8]=j(u[2]),E[9]=j(u[4]),E[10]=j(u[7]),E[11]=j(u[13]),E[12]=j(u[16]),E[13]=j(u[26]),E[14]=j(u[29]),E[15]=j(u[42]),E[16]=j(u[3]),E[17]=j(u[8]),E[18]=j(u[12]),E[19]=j(u[17]),E[20]=j(u[25]),E[21]=j(u[30]),E[22]=j(u[41]),E[23]=j(u[43]),E[24]=j(u[9]),E[25]=j(u[11]),E[26]=j(u[18]),E[27]=j(u[24]),E[28]=j(u[31]),E[29]=j(u[40]),E[30]=j(u[44]),E[31]=j(u[53]),E[32]=j(u[10]),E[33]=j(u[19]),E[34]=j(u[23]),E[35]=j(u[32]),E[36]=j(u[39]),E[37]=j(u[45]),E[38]=j(u[52]),E[39]=j(u[54]),E[40]=j(u[20]),E[41]=j(u[22]),E[42]=j(u[33]),E[43]=j(u[38]),E[44]=j(u[46]),E[45]=j(u[51]),E[46]=j(u[55]),E[47]=j(u[60]),E[48]=j(u[21]),E[49]=j(u[34]),E[50]=j(u[37]),E[51]=j(u[47]),E[52]=j(u[50]),E[53]=j(u[56]),E[54]=j(u[59]),E[55]=j(u[61]),E[56]=j(u[35]),E[57]=j(u[36]),E[58]=j(u[48]),E[59]=j(u[49]),E[60]=j(u[57]),E[61]=j(u[58]),E[62]=j(u[62]),E[63]=j(u[63])}function ss(u){const E=.5*Math.cos(.7853975),m=.5*Math.cos(3.14159/16),S=.5*Math.cos(3.14159/8),G=.5*Math.cos(3*3.14159/16),x=.5*Math.cos(5*3.14159/16),L=.5*Math.cos(3*3.14159/8),O=.5*Math.cos(7*3.14159/16),v=new Array(4),k=new Array(4),T=new Array(4),K=new Array(4);for(let V=0;V<8;++V){const Y=V*8;v[0]=S*u[Y+2],v[1]=L*u[Y+2],v[2]=S*u[Y+6],v[3]=L*u[Y+6],k[0]=m*u[Y+1]+G*u[Y+3]+x*u[Y+5]+O*u[Y+7],k[1]=G*u[Y+1]-O*u[Y+3]-m*u[Y+5]-x*u[Y+7],k[2]=x*u[Y+1]-m*u[Y+3]+O*u[Y+5]+G*u[Y+7],k[3]=O*u[Y+1]-x*u[Y+3]+G*u[Y+5]-m*u[Y+7],T[0]=E*(u[Y+0]+u[Y+4]),T[3]=E*(u[Y+0]-u[Y+4]),T[1]=v[0]+v[3],T[2]=v[1]-v[2],K[0]=T[0]+T[1],K[1]=T[3]+T[2],K[2]=T[3]-T[2],K[3]=T[0]-T[1],u[Y+0]=K[0]+k[0],u[Y+1]=K[1]+k[1],u[Y+2]=K[2]+k[2],u[Y+3]=K[3]+k[3],u[Y+4]=K[3]-k[3],u[Y+5]=K[2]-k[2],u[Y+6]=K[1]-k[1],u[Y+7]=K[0]-k[0]}for(let V=0;V<8;++V)v[0]=S*u[16+V],v[1]=L*u[16+V],v[2]=S*u[48+V],v[3]=L*u[48+V],k[0]=m*u[8+V]+G*u[24+V]+x*u[40+V]+O*u[56+V],k[1]=G*u[8+V]-O*u[24+V]-m*u[40+V]-x*u[56+V],k[2]=x*u[8+V]-m*u[24+V]+O*u[40+V]+G*u[56+V],k[3]=O*u[8+V]-x*u[24+V]+G*u[40+V]-m*u[56+V],T[0]=E*(u[V]+u[32+V]),T[3]=E*(u[V]-u[32+V]),T[1]=v[0]+v[3],T[2]=v[1]-v[2],K[0]=T[0]+T[1],K[1]=T[3]+T[2],K[2]=T[3]-T[2],K[3]=T[0]-T[1],u[0+V]=K[0]+k[0],u[8+V]=K[1]+k[1],u[16+V]=K[2]+k[2],u[24+V]=K[3]+k[3],u[32+V]=K[3]-k[3],u[40+V]=K[2]-k[2],u[48+V]=K[1]-k[1],u[56+V]=K[0]-k[0]}function os(u){for(let E=0;E<64;++E){const m=u[0][E],S=u[1][E],G=u[2][E];u[0][E]=m+1.5747*G,u[1][E]=m-.1873*S-.4682*G,u[2][E]=m+1.8556*S}}function rs(u,E,m){for(let S=0;S<64;++S)E[m+S]=r.DataUtils.toHalfFloat(as(u[S]))}function as(u){return u<=1?Math.sign(u)*Math.pow(Math.abs(u),2.2):Math.sign(u)*Math.pow(M,Math.abs(u)-1)}function Et(u){return new DataView(u.array.buffer,u.offset.value,u.size)}function cs(u){const E=u.viewer.buffer.slice(u.offset.value,u.offset.value+u.size),m=new Uint8Array(hn(E)),S=new Uint8Array(m.length);return oA(m),yA(m,S),new DataView(S.buffer)}function pt(u){const E=u.array.slice(u.offset.value,u.offset.value+u.size),m=qA(E),S=new Uint8Array(m.length);return oA(m),yA(m,S),new DataView(S.buffer)}function gs(u){const E=u.viewer,m={value:u.offset.value},S=new Uint16Array(u.columns*u.lines*(u.inputChannels.length*u.type)),G=new Uint8Array(8192);let x=0;const L=new Array(u.inputChannels.length);for(let $=0,J=u.inputChannels.length;$<J;$++)L[$]={},L[$].start=x,L[$].end=L[$].start,L[$].nx=u.columns,L[$].ny=u.lines,L[$].size=u.type,x+=L[$].nx*L[$].ny*L[$].size;const O=RA(E,m),v=RA(E,m);if(v>=8192)throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE");if(O<=v)for(let $=0;$<v-O+1;$++)G[$+O]=IA(E,m);const k=new Uint16Array(65536),T=N(G,k),K=Ve(E,m);Je(u.array,E,m,K,S,x);for(let $=0;$<u.inputChannels.length;++$){const J=L[$];for(let X=0;X<L[$].size;++X)hA(S,J.start+X,J.nx,J.size,J.ny,J.nx*J.size,T)}EA(k,S,x);let V=0;const Y=new Uint8Array(S.buffer.byteLength);for(let $=0;$<u.lines;$++)for(let J=0;J<u.inputChannels.length;J++){const X=L[J],ie=X.nx*X.size,Be=new Uint8Array(S.buffer,X.end*2,ie*2);Y.set(Be,V),V+=ie*2,X.end+=ie}return new DataView(Y.buffer)}function ls(u){const E=u.array.slice(u.offset.value,u.offset.value+u.size),m=qA(E),S=u.inputChannels.length*u.lines*u.columns*u.totalBytes,G=new ArrayBuffer(S),x=new DataView(G);let L=0,O=0;const v=new Array(4);for(let k=0;k<u.lines;k++)for(let T=0;T<u.inputChannels.length;T++){let K=0;switch(u.inputChannels[T].pixelType){case 1:v[0]=L,v[1]=v[0]+u.columns,L=v[1]+u.columns;for(let Y=0;Y<u.columns;++Y){const $=m[v[0]++]<<8|m[v[1]++];K+=$,x.setUint16(O,K,!0),O+=2}break;case 2:v[0]=L,v[1]=v[0]+u.columns,v[2]=v[1]+u.columns,L=v[2]+u.columns;for(let Y=0;Y<u.columns;++Y){const $=m[v[0]++]<<24|m[v[1]++]<<16|m[v[2]++]<<8;K+=$,x.setUint32(O,K,!0),O+=4}break}}return x}function In(u){const E=u.viewer,m={value:u.offset.value},S=new Uint8Array(u.columns*u.lines*(u.inputChannels.length*u.type*2)),G={version:Oe(E,m),unknownUncompressedSize:Oe(E,m),unknownCompressedSize:Oe(E,m),acCompressedSize:Oe(E,m),dcCompressedSize:Oe(E,m),rleCompressedSize:Oe(E,m),rleUncompressedSize:Oe(E,m),rleRawSize:Oe(E,m),totalAcUncompressedCount:Oe(E,m),totalDcUncompressedCount:Oe(E,m),acCompression:Oe(E,m)};if(G.version<2)throw new Error("EXRLoader.parse: "+pA.compression+" version "+G.version+" is unsupported");const x=new Array;let L=RA(E,m)-2;for(;L>0;){const J=WA(E.buffer,m),X=IA(E,m),ie=X>>2&3,Be=(X>>4)-1,Qe=new Int8Array([Be])[0],qe=IA(E,m);x.push({name:J,index:Qe,type:qe,compression:ie}),L-=J.length+3}const O=pA.channels,v=new Array(u.inputChannels.length);for(let J=0;J<u.inputChannels.length;++J){const X=v[J]={},ie=O[J];X.name=ie.name,X.compression=0,X.decoded=!1,X.type=ie.pixelType,X.pLinear=ie.pLinear,X.width=u.columns,X.height=u.lines}const k={idx:new Array(3)};for(let J=0;J<u.inputChannels.length;++J){const X=v[J];for(let ie=0;ie<x.length;++ie){const Be=x[ie];X.name==Be.name&&(X.compression=Be.compression,Be.index>=0&&(k.idx[Be.index]=J),X.offset=J)}}let T,K,V;if(G.acCompressedSize>0)switch(G.acCompression){case 0:T=new Uint16Array(G.totalAcUncompressedCount),Je(u.array,E,m,G.acCompressedSize,T,G.totalAcUncompressedCount);break;case 1:const J=u.array.slice(m.value,m.value+G.totalAcUncompressedCount),X=qA(J);T=new Uint16Array(X.buffer),m.value+=G.totalAcUncompressedCount;break}if(G.dcCompressedSize>0){const J={array:u.array,offset:m,size:G.dcCompressedSize};K=new Uint16Array(pt(J).buffer),m.value+=G.dcCompressedSize}if(G.rleRawSize>0){const J=u.array.slice(m.value,m.value+G.rleCompressedSize),X=qA(J);V=hn(X.buffer),m.value+=G.rleCompressedSize}let Y=0;const $=new Array(v.length);for(let J=0;J<$.length;++J)$[J]=new Array;for(let J=0;J<u.lines;++J)for(let X=0;X<v.length;++X)$[X].push(Y),Y+=v[X].width*u.type*2;ts(k,$,v,T,K,S);for(let J=0;J<v.length;++J){const X=v[J];if(!X.decoded)switch(X.compression){case 2:let ie=0,Be=0;for(let Qe=0;Qe<u.lines;++Qe){let qe=$[J][ie];for(let Ee=0;Ee<X.width;++Ee){for(let le=0;le<2*X.type;++le)S[qe++]=V[Be+le*X.width*X.height];Be++}ie++}break;default:throw new Error("EXRLoader.parse: unsupported channel compression")}}return new DataView(S.buffer)}function WA(u,E){const m=new Uint8Array(u);let S=0;for(;m[E.value+S]!=0;)S+=1;const G=new TextDecoder().decode(m.slice(E.value,E.value+S));return E.value=E.value+S+1,G}function hs(u,E,m){const S=new TextDecoder().decode(new Uint8Array(u).slice(E.value,E.value+m));return E.value=E.value+m,S}function Is(u,E){const m=je(u,E),S=Ve(u,E);return[m,S]}function us(u,E){const m=Ve(u,E),S=Ve(u,E);return[m,S]}function je(u,E){const m=u.getInt32(E.value,!0);return E.value=E.value+4,m}function Ve(u,E){const m=u.getUint32(E.value,!0);return E.value=E.value+4,m}function un(u,E){const m=u[E.value];return E.value=E.value+1,m}function IA(u,E){const m=u.getUint8(E.value);return E.value=E.value+1,m}const Oe=function(u,E){let m;return"getBigInt64"in DataView.prototype?m=Number(u.getBigInt64(E.value,!0)):m=u.getUint32(E.value+4,!0)+Number(u.getUint32(E.value,!0)<<32),E.value+=8,m};function ke(u,E){const m=u.getFloat32(E.value,!0);return E.value+=4,m}function Bs(u,E){return r.DataUtils.toHalfFloat(ke(u,E))}function j(u){const E=(u&31744)>>10,m=u&1023;return(u>>15?-1:1)*(E?E===31?m?NaN:1/0:Math.pow(2,E-15)*(1+m/1024):6103515625e-14*(m/1024))}function RA(u,E){const m=u.getUint16(E.value,!0);return E.value+=2,m}function fs(u,E){return j(RA(u,E))}function Cs(u,E,m,S){const G=m.value,x=[];for(;m.value<G+S-1;){const L=WA(E,m),O=je(u,m),v=IA(u,m);m.value+=3;const k=je(u,m),T=je(u,m);x.push({name:L,pixelType:O,pLinear:v,xSampling:k,ySampling:T})}return m.value+=1,x}function Es(u,E){const m=ke(u,E),S=ke(u,E),G=ke(u,E),x=ke(u,E),L=ke(u,E),O=ke(u,E),v=ke(u,E),k=ke(u,E);return{redX:m,redY:S,greenX:G,greenY:x,blueX:L,blueY:O,whiteX:v,whiteY:k}}function ps(u,E){const m=["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"],S=IA(u,E);return m[S]}function ds(u,E){const m=je(u,E),S=je(u,E),G=je(u,E),x=je(u,E);return{xMin:m,yMin:S,xMax:G,yMax:x}}function Qs(u,E){const m=["INCREASING_Y","DECREASING_Y","RANDOM_Y"],S=IA(u,E);return m[S]}function ms(u,E){const m=["ENVMAP_LATLONG","ENVMAP_CUBE"],S=IA(u,E);return m[S]}function bs(u,E){const m=["ONE_LEVEL","MIPMAP_LEVELS","RIPMAP_LEVELS"],S=["ROUND_DOWN","ROUND_UP"],G=Ve(u,E),x=Ve(u,E),L=IA(u,E);return{xSize:G,ySize:x,levelMode:m[L&15],roundingMode:S[L>>4]}}function ws(u,E){const m=ke(u,E),S=ke(u,E);return[m,S]}function ys(u,E){const m=ke(u,E),S=ke(u,E),G=ke(u,E);return[m,S,G]}function Ds(u,E,m,S,G){if(S==="string"||S==="stringvector"||S==="iccProfile")return hs(E,m,G);if(S==="chlist")return Cs(u,E,m,G);if(S==="chromaticities")return Es(u,m);if(S==="compression")return ps(u,m);if(S==="box2i")return ds(u,m);if(S==="envmap")return ms(u,m);if(S==="tiledesc")return bs(u,m);if(S==="lineOrder")return Qs(u,m);if(S==="float")return ke(u,m);if(S==="v2f")return ws(u,m);if(S==="v3f")return ys(u,m);if(S==="int")return je(u,m);if(S==="rational")return Is(u,m);if(S==="timecode")return us(u,m);if(S==="preview")return m.value+=G,"skipped";m.value+=G}function Ss(u,E){const m=Math.log2(u);return E=="ROUND_DOWN"?Math.floor(m):Math.ceil(m)}function xs(u,E,m){let S=0;switch(u.levelMode){case"ONE_LEVEL":S=1;break;case"MIPMAP_LEVELS":S=Ss(Math.max(E,m),u.roundingMode)+1;break;case"RIPMAP_LEVELS":throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.")}return S}function Bn(u,E,m,S){const G=new Array(u);for(let x=0;x<u;x++){const L=1<<x;let O=E/L|0;S=="ROUND_UP"&&O*L<E&&(O+=1);const v=Math.max(O,1);G[x]=(v+m-1)/m|0}return G}function Ms(){const u=this,E=u.offset,m={value:0};for(let S=0;S<u.tileCount;S++){const G=je(u.viewer,E),x=je(u.viewer,E);E.value+=8,u.size=Ve(u.viewer,E);const L=G*u.blockWidth,O=x*u.blockHeight;u.columns=L+u.blockWidth>u.width?u.width-L:u.blockWidth,u.lines=O+u.blockHeight>u.height?u.height-O:u.blockHeight;const v=u.columns*u.totalBytes,T=u.size<u.lines*v?u.uncompress(u):Et(u);E.value+=u.size;for(let K=0;K<u.lines;K++){const V=K*u.columns*u.totalBytes;for(let Y=0;Y<u.inputChannels.length;Y++){const $=pA.channels[Y].name,J=u.channelByteOffsets[$]*u.columns,X=u.decodeChannels[$];if(X===void 0)continue;m.value=V+J;const ie=(u.height-(1+O+K))*u.outLineWidth;for(let Be=0;Be<u.columns;Be++){const Qe=ie+(Be+L)*u.outputChannels+X;u.byteArray[Qe]=u.getter(T,m)}}}}}function Fs(){const u=this,E=u.offset,m={value:0};for(let S=0;S<u.height/u.blockHeight;S++){const G=je(u.viewer,E)-pA.dataWindow.yMin;u.size=Ve(u.viewer,E),u.lines=G+u.blockHeight>u.height?u.height-G:u.blockHeight;const x=u.columns*u.totalBytes,O=u.size<u.lines*x?u.uncompress(u):Et(u);E.value+=u.size;for(let v=0;v<u.blockHeight;v++){const k=S*u.blockHeight,T=v+u.scanOrder(k);if(T>=u.height)continue;const K=v*x,V=(u.height-1-T)*u.outLineWidth;for(let Y=0;Y<u.inputChannels.length;Y++){const $=pA.channels[Y].name,J=u.channelByteOffsets[$]*u.columns,X=u.decodeChannels[$];if(X!==void 0){m.value=K+J;for(let ie=0;ie<u.columns;ie++){const Be=V+ie*u.outputChannels+X;u.byteArray[Be]=u.getter(O,m)}}}}}}function Rs(u,E,m){const S={};if(u.getUint32(0,!0)!=20000630)throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.");S.version=u.getUint8(4);const G=u.getUint8(5);S.spec={singleTile:!!(G&2),longName:!!(G&4),deepFormat:!!(G&8),multiPart:!!(G&16)},m.value=8;let x=!0;for(;x;){const L=WA(E,m);if(L==0)x=!1;else{const O=WA(E,m),v=Ve(u,m),k=Ds(u,E,m,O,v);k===void 0?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${O}'.`):S[L]=k}}if((G&-7)!=0)throw console.error("THREE.EXRHeader:",S),new Error("THREE.EXRLoader: Provided file is currently unsupported.");return S}function Gs(u,E,m,S,G){const x={size:0,viewer:E,array:m,offset:S,width:u.dataWindow.xMax-u.dataWindow.xMin+1,height:u.dataWindow.yMax-u.dataWindow.yMin+1,inputChannels:u.channels,channelByteOffsets:{},scanOrder:null,totalBytes:null,columns:null,lines:null,type:null,uncompress:null,getter:null,format:null,colorSpace:r.LinearSRGBColorSpace};switch(u.compression){case"NO_COMPRESSION":x.blockHeight=1,x.uncompress=Et;break;case"RLE_COMPRESSION":x.blockHeight=1,x.uncompress=cs;break;case"ZIPS_COMPRESSION":x.blockHeight=1,x.uncompress=pt;break;case"ZIP_COMPRESSION":x.blockHeight=16,x.uncompress=pt;break;case"PIZ_COMPRESSION":x.blockHeight=32,x.uncompress=gs;break;case"PXR24_COMPRESSION":x.blockHeight=16,x.uncompress=ls;break;case"DWAA_COMPRESSION":x.blockHeight=32,x.uncompress=In;break;case"DWAB_COMPRESSION":x.blockHeight=256,x.uncompress=In;break;default:throw new Error("EXRLoader.parse: "+u.compression+" is unsupported")}const L={};for(const T of u.channels)switch(T.name){case"Y":case"R":case"G":case"B":case"A":L[T.name]=!0,x.type=T.pixelType}let O=!1;if(L.R&&L.G&&L.B)O=!L.A,x.outputChannels=4,x.decodeChannels={R:0,G:1,B:2,A:3};else if(L.Y)x.outputChannels=1,x.decodeChannels={Y:0};else throw new Error("EXRLoader.parse: file contains unsupported data channels.");if(x.type==1)switch(G){case r.FloatType:x.getter=fs;break;case r.HalfFloatType:x.getter=RA;break}else if(x.type==2)switch(G){case r.FloatType:x.getter=ke;break;case r.HalfFloatType:x.getter=Bs}else throw new Error("EXRLoader.parse: unsupported pixelType "+x.type+" for "+u.compression+".");x.columns=x.width;const v=x.width*x.height*x.outputChannels;switch(G){case r.FloatType:x.byteArray=new Float32Array(v),O&&x.byteArray.fill(1,0,v);break;case r.HalfFloatType:x.byteArray=new Uint16Array(v),O&&x.byteArray.fill(15360,0,v);break;default:console.error("THREE.EXRLoader: unsupported type: ",G);break}let k=0;for(const T of u.channels)x.decodeChannels[T.name]!==void 0&&(x.channelByteOffsets[T.name]=k),k+=T.pixelType*2;if(x.totalBytes=k,x.outLineWidth=x.width*x.outputChannels,u.lineOrder==="INCREASING_Y"?x.scanOrder=T=>T:x.scanOrder=T=>x.height-1-T,x.outputChannels==4?(x.format=r.RGBAFormat,x.colorSpace=r.LinearSRGBColorSpace):(x.format=r.RedFormat,x.colorSpace=r.NoColorSpace),u.spec.singleTile){x.blockHeight=u.tiles.ySize,x.blockWidth=u.tiles.xSize;const T=xs(u.tiles,x.width,x.height),K=Bn(T,x.width,u.tiles.xSize,u.tiles.roundingMode),V=Bn(T,x.height,u.tiles.ySize,u.tiles.roundingMode);x.tileCount=K[0]*V[0];for(let Y=0;Y<T;Y++)for(let $=0;$<V[Y];$++)for(let J=0;J<K[Y];J++)Oe(E,S);x.decode=Ms.bind(x)}else{x.blockWidth=x.width;const T=Math.ceil(x.height/x.blockHeight);for(let K=0;K<T;K++)Oe(E,S);x.decode=Fs.bind(x)}return x}const fn={value:0},Cn=new DataView(e),Ts=new Uint8Array(e),pA=Rs(Cn,e,fn),DA=Gs(pA,Cn,Ts,fn,this.type);return DA.decode(),{header:pA,width:DA.width,height:DA.height,data:DA.byteArray,format:DA.format,colorSpace:DA.colorSpace,type:this.type}}setDataType(e){return this.type=e,this}load(e,A,n,t){function i(s,o){s.colorSpace=o.colorSpace,s.minFilter=r.LinearFilter,s.magFilter=r.LinearFilter,s.generateMipmaps=!1,s.flipY=!1,A&&A(s,o)}return super.load(e,i,n,t)}}class br extends r.DataTextureLoader{constructor(e){super(e),this.type=r.HalfFloatType}parse(e){const s=function(D,M){switch(D){case 1:throw new Error("THREE.RGBELoader: Read Error: "+(M||""));case 2:throw new Error("THREE.RGBELoader: Write Error: "+(M||""));case 3:throw new Error("THREE.RGBELoader: Bad File Format: "+(M||""));default:case 4:throw new Error("THREE.RGBELoader: Memory Error: "+(M||""))}},h=function(D,M,N){M=M||1024;let P=D.pos,z=-1,U=0,q="",H=String.fromCharCode.apply(null,new Uint16Array(D.subarray(P,P+128)));for(;0>(z=H.indexOf(`
|
|
5
5
|
`))&&U<M&&P<D.byteLength;)q+=H,U+=H.length,P+=128,H+=String.fromCharCode.apply(null,new Uint16Array(D.subarray(P,P+128)));return-1<z?(D.pos+=U+z+1,q+H.slice(0,z)):!1},I=function(D){const M=/^#\?(\S+)/,N=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,_=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,P=/^\s*FORMAT=(\S+)\s*$/,z=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,U={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};let q,H;for((D.pos>=D.byteLength||!(q=h(D)))&&s(1,"no header found"),(H=q.match(M))||s(3,"bad initial token"),U.valid|=1,U.programtype=H[1],U.string+=q+`
|
|
6
6
|
`;q=h(D),q!==!1;){if(U.string+=q+`
|
|
7
7
|
`,q.charAt(0)==="#"){U.comments+=q+`
|
|
8
|
-
`;continue}if((H=q.match(N))&&(U.gamma=parseFloat(H[1])),(H=q.match(_))&&(U.exposure=parseFloat(H[1])),(H=q.match(P))&&(U.valid|=2,U.format=H[1]),(H=q.match(z))&&(U.valid|=4,U.height=parseInt(H[1],10),U.width=parseInt(H[2],10)),U.valid&2&&U.valid&4)break}return U.valid&2||s(3,"missing format specifier"),U.valid&4||s(3,"missing image size specifier"),U},B=function(D,M,N){const _=M;if(_<8||_>32767||D[0]!==2||D[1]!==2||D[2]&128)return new Uint8Array(D);_!==(D[2]<<8|D[3])&&s(3,"wrong scanline width");const P=new Uint8Array(4*M*N);P.length||s(4,"unable to allocate buffer space");let z=0,U=0;const q=4*_,H=new Uint8Array(4),Z=new Uint8Array(q);let se=N;for(;se>0&&U<D.byteLength;){U+4>D.byteLength&&s(1),H[0]=D[U++],H[1]=D[U++],H[2]=D[U++],H[3]=D[U++],(H[0]!=2||H[1]!=2||(H[2]<<8|H[3])!=_)&&s(3,"bad rgbe scanline format");let ee=0,re;for(;ee<q&&U<D.byteLength;){re=D[U++];const W=re>128;if(W&&(re-=128),(re===0||ee+re>q)&&s(3,"bad scanline data"),W){const te=D[U++];for(let ge=0;ge<re;ge++)Z[ee++]=te}else Z.set(D.subarray(U,U+re),ee),ee+=re,U+=re}const Ae=_;for(let W=0;W<Ae;W++){let te=0;P[z]=Z[W+te],te+=_,P[z+1]=Z[W+te],te+=_,P[z+2]=Z[W+te],te+=_,P[z+3]=Z[W+te],z+=4}se--}return P},f=function(D,M,N,_){const P=D[M+3],z=Math.pow(2,P-128)/255;N[_+0]=D[M+0]*z,N[_+1]=D[M+1]*z,N[_+2]=D[M+2]*z,N[_+3]=1},C=function(D,M,N,_){const P=D[M+3],z=Math.pow(2,P-128)/255;N[_+0]=r.DataUtils.toHalfFloat(Math.min(D[M+0]*z,65504)),N[_+1]=r.DataUtils.toHalfFloat(Math.min(D[M+1]*z,65504)),N[_+2]=r.DataUtils.toHalfFloat(Math.min(D[M+2]*z,65504)),N[_+3]=r.DataUtils.toHalfFloat(1)},E=new Uint8Array(e);E.pos=0;const d=I(E),y=d.width,Q=d.height,b=B(E.subarray(E.pos),y,Q);let w,R,F;switch(this.type){case r.FloatType:F=b.length/4;const D=new Float32Array(F*4);for(let N=0;N<F;N++)f(b,N*4,D,N*4);w=D,R=r.FloatType;break;case r.HalfFloatType:F=b.length/4;const M=new Uint16Array(F*4);for(let N=0;N<F;N++)C(b,N*4,M,N*4);w=M,R=r.HalfFloatType;break;default:throw new Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:y,height:Q,data:w,header:d.string,gamma:d.gamma,exposure:d.exposure,type:R}}setDataType(e){return this.type=e,this}load(e,A,n,t){function i(s,o){switch(s.type){case r.FloatType:case r.HalfFloatType:s.colorSpace=r.LinearSRGBColorSpace,s.minFilter=r.LinearFilter,s.magFilter=r.LinearFilter,s.generateMipmaps=!1,s.flipY=!0;break}A&&A(s,o)}return super.load(e,i,n,t)}}const QA=new r.Raycaster,Le=new r.Vector3,fA=new r.Vector3,de=new r.Quaternion,Gn={X:new r.Vector3(1,0,0),Y:new r.Vector3(0,1,0),Z:new r.Vector3(0,0,1)},Tt={type:"change"},Tn={type:"mouseDown",mode:null},kn={type:"mouseUp",mode:null},Ln={type:"objectChange"};class yr extends r.Controls{constructor(e,A=null){super(void 0,A);const n=new Fr(this);this._root=n;const t=new Hi;this._gizmo=t,n.add(t);const i=new Rr;this._plane=i,n.add(i);const s=this;function o(Q,b){let w=b;Object.defineProperty(s,Q,{get:function(){return w!==void 0?w:b},set:function(R){w!==R&&(w=R,i[Q]=R,t[Q]=R,s.dispatchEvent({type:Q+"-changed",value:R}),s.dispatchEvent(Tt))}}),s[Q]=b,i[Q]=b,t[Q]=b}o("camera",e),o("object",void 0),o("enabled",!0),o("axis",null),o("mode","translate"),o("translationSnap",null),o("rotationSnap",null),o("scaleSnap",null),o("space","world"),o("size",1),o("dragging",!1),o("showX",!0),o("showY",!0),o("showZ",!0);const c=new r.Vector3,g=new r.Vector3,l=new r.Quaternion,h=new r.Quaternion,I=new r.Vector3,B=new r.Quaternion,f=new r.Vector3,C=new r.Vector3,E=new r.Vector3,d=0,y=new r.Vector3;o("worldPosition",c),o("worldPositionStart",g),o("worldQuaternion",l),o("worldQuaternionStart",h),o("cameraPosition",I),o("cameraQuaternion",B),o("pointStart",f),o("pointEnd",C),o("rotationAxis",E),o("rotationAngle",d),o("eye",y),this._offset=new r.Vector3,this._startNorm=new r.Vector3,this._endNorm=new r.Vector3,this._cameraScale=new r.Vector3,this._parentPosition=new r.Vector3,this._parentQuaternion=new r.Quaternion,this._parentQuaternionInv=new r.Quaternion,this._parentScale=new r.Vector3,this._worldScaleStart=new r.Vector3,this._worldQuaternionInv=new r.Quaternion,this._worldScale=new r.Vector3,this._positionStart=new r.Vector3,this._quaternionStart=new r.Quaternion,this._scaleStart=new r.Vector3,this._getPointer=wr.bind(this),this._onPointerDown=Sr.bind(this),this._onPointerHover=Dr.bind(this),this._onPointerMove=xr.bind(this),this._onPointerUp=Mr.bind(this),A!==null&&this.connect()}connect(){this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="auto"}getHelper(){return this._root}pointerHover(e){if(this.object===void 0||this.dragging===!0)return;e!==null&&QA.setFromCamera(e,this.camera);const A=kt(this._gizmo.picker[this.mode],QA);A?this.axis=A.object.name:this.axis=null}pointerDown(e){if(!(this.object===void 0||this.dragging===!0||e!=null&&e.button!==0)&&this.axis!==null){e!==null&&QA.setFromCamera(e,this.camera);const A=kt(this._plane,QA,!0);A&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(A.point).sub(this.worldPositionStart)),this.dragging=!0,Tn.mode=this.mode,this.dispatchEvent(Tn)}}pointerMove(e){const A=this.axis,n=this.mode,t=this.object;let i=this.space;if(n==="scale"?i="local":(A==="E"||A==="XYZE"||A==="XYZ")&&(i="world"),t===void 0||A===null||this.dragging===!1||e!==null&&e.button!==-1)return;e!==null&&QA.setFromCamera(e,this.camera);const s=kt(this._plane,QA,!0);if(s){if(this.pointEnd.copy(s.point).sub(this.worldPositionStart),n==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),i==="local"&&A!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),A.indexOf("X")===-1&&(this._offset.x=0),A.indexOf("Y")===-1&&(this._offset.y=0),A.indexOf("Z")===-1&&(this._offset.z=0),i==="local"&&A!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),t.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(i==="local"&&(t.position.applyQuaternion(de.copy(this._quaternionStart).invert()),A.search("X")!==-1&&(t.position.x=Math.round(t.position.x/this.translationSnap)*this.translationSnap),A.search("Y")!==-1&&(t.position.y=Math.round(t.position.y/this.translationSnap)*this.translationSnap),A.search("Z")!==-1&&(t.position.z=Math.round(t.position.z/this.translationSnap)*this.translationSnap),t.position.applyQuaternion(this._quaternionStart)),i==="world"&&(t.parent&&t.position.add(Le.setFromMatrixPosition(t.parent.matrixWorld)),A.search("X")!==-1&&(t.position.x=Math.round(t.position.x/this.translationSnap)*this.translationSnap),A.search("Y")!==-1&&(t.position.y=Math.round(t.position.y/this.translationSnap)*this.translationSnap),A.search("Z")!==-1&&(t.position.z=Math.round(t.position.z/this.translationSnap)*this.translationSnap),t.parent&&t.position.sub(Le.setFromMatrixPosition(t.parent.matrixWorld))));else if(n==="scale"){if(A.search("XYZ")!==-1){let o=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(o*=-1),fA.set(o,o,o)}else Le.copy(this.pointStart),fA.copy(this.pointEnd),Le.applyQuaternion(this._worldQuaternionInv),fA.applyQuaternion(this._worldQuaternionInv),fA.divide(Le),A.search("X")===-1&&(fA.x=1),A.search("Y")===-1&&(fA.y=1),A.search("Z")===-1&&(fA.z=1);t.scale.copy(this._scaleStart).multiply(fA),this.scaleSnap&&(A.search("X")!==-1&&(t.scale.x=Math.round(t.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),A.search("Y")!==-1&&(t.scale.y=Math.round(t.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),A.search("Z")!==-1&&(t.scale.z=Math.round(t.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(n==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const o=20/this.worldPosition.distanceTo(Le.setFromMatrixPosition(this.camera.matrixWorld));let c=!1;A==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(Le.copy(this.rotationAxis).cross(this.eye))*o):(A==="X"||A==="Y"||A==="Z")&&(this.rotationAxis.copy(Gn[A]),Le.copy(Gn[A]),i==="local"&&Le.applyQuaternion(this.worldQuaternion),Le.cross(this.eye),Le.length()===0?c=!0:this.rotationAngle=this._offset.dot(Le.normalize())*o),(A==="E"||c)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),i==="local"&&A!=="E"&&A!=="XYZE"?(t.quaternion.copy(this._quaternionStart),t.quaternion.multiply(de.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),t.quaternion.copy(de.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),t.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(Tt),this.dispatchEvent(Ln)}}pointerUp(e){e!==null&&e.button!==0||(this.dragging&&this.axis!==null&&(kn.mode=this.mode,this.dispatchEvent(kn)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this.traverse(function(e){e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()})}attach(e){return this.object=e,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(Tt),this.dispatchEvent(Ln),this.pointStart.copy(this.pointEnd))}getRaycaster(){return QA}getMode(){return this.mode}setMode(e){this.mode=e}setTranslationSnap(e){this.translationSnap=e}setRotationSnap(e){this.rotationSnap=e}setScaleSnap(e){this.scaleSnap=e}setSize(e){this.size=e}setSpace(e){this.space=e}}function wr(a){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:a.button};{const e=this.domElement.getBoundingClientRect();return{x:(a.clientX-e.left)/e.width*2-1,y:-(a.clientY-e.top)/e.height*2+1,button:a.button}}}function Dr(a){if(this.enabled)switch(a.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(a));break}}function Sr(a){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(a.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(a)),this.pointerDown(this._getPointer(a)))}function xr(a){this.enabled&&this.pointerMove(this._getPointer(a))}function Mr(a){this.enabled&&(this.domElement.releasePointerCapture(a.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(a)))}function kt(a,e,A){const n=e.intersectObject(a,!0);for(let t=0;t<n.length;t++)if(n[t].object.visible||A)return n[t];return!1}const $A=new r.Euler,fe=new r.Vector3(0,1,0),vn=new r.Vector3(0,0,0),Nn=new r.Matrix4,et=new r.Quaternion,ht=new r.Quaternion,AA=new r.Vector3,Un=new r.Matrix4,KA=new r.Vector3(1,0,0),bA=new r.Vector3(0,1,0),YA=new r.Vector3(0,0,1),At=new r.Vector3,UA=new r.Vector3,_A=new r.Vector3;class Fr extends r.Object3D{constructor(e){super(),this.isTransformControlsRoot=!0,this.controls=e,this.visible=!1}updateMatrixWorld(e){const A=this.controls;A.object!==void 0&&(A.object.updateMatrixWorld(),A.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):A.object.parent.matrixWorld.decompose(A._parentPosition,A._parentQuaternion,A._parentScale),A.object.matrixWorld.decompose(A.worldPosition,A.worldQuaternion,A._worldScale),A._parentQuaternionInv.copy(A._parentQuaternion).invert(),A._worldQuaternionInv.copy(A.worldQuaternion).invert()),A.camera.updateMatrixWorld(),A.camera.matrixWorld.decompose(A.cameraPosition,A.cameraQuaternion,A._cameraScale),A.camera.isOrthographicCamera?A.camera.getWorldDirection(A.eye).negate():A.eye.copy(A.cameraPosition).sub(A.worldPosition).normalize(),super.updateMatrixWorld(e)}}class Hi extends r.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const e=new r.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),A=new r.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),n=e.clone();n.opacity=.15;const t=A.clone();t.opacity=.5;const i=e.clone();i.color.setHex(16711680);const s=e.clone();s.color.setHex(65280);const o=e.clone();o.color.setHex(255);const c=e.clone();c.color.setHex(16711680),c.opacity=.5;const g=e.clone();g.color.setHex(65280),g.opacity=.5;const l=e.clone();l.color.setHex(255),l.opacity=.5;const h=e.clone();h.opacity=.25;const I=e.clone();I.color.setHex(16776960),I.opacity=.25,e.clone().color.setHex(16776960);const f=e.clone();f.color.setHex(7895160);const C=new r.CylinderGeometry(0,.04,.1,12);C.translate(0,.05,0);const E=new r.BoxGeometry(.08,.08,.08);E.translate(0,.04,0);const d=new r.BufferGeometry;d.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,0,0],3));const y=new r.CylinderGeometry(.0075,.0075,.5,3);y.translate(0,.25,0);function Q(q,H){const Z=new r.TorusGeometry(q,.0075,3,64,H*Math.PI*2);return Z.rotateY(Math.PI/2),Z.rotateX(Math.PI/2),Z}function b(){const q=new r.BufferGeometry;return q.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,1,1],3)),q}const w={X:[[new r.Mesh(C,i),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(C,i),[-.5,0,0],[0,0,Math.PI/2]],[new r.Mesh(y,i),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new r.Mesh(C,s),[0,.5,0]],[new r.Mesh(C,s),[0,-.5,0],[Math.PI,0,0]],[new r.Mesh(y,s)]],Z:[[new r.Mesh(C,o),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(C,o),[0,0,-.5],[-Math.PI/2,0,0]],[new r.Mesh(y,o),null,[Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.1,0),h.clone()),[0,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),l.clone()),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c.clone()),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),g.clone()),[.15,0,.15],[-Math.PI/2,0,0]]]},R={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.2,0),n)]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,0,.15],[-Math.PI/2,0,0]]]},F={START:[[new r.Mesh(new r.OctahedronGeometry(.01,2),t),null,null,null,"helper"]],END:[[new r.Mesh(new r.OctahedronGeometry(.01,2),t),null,null,null,"helper"]],DELTA:[[new r.Line(b(),t),null,null,null,"helper"]],X:[[new r.Line(d,t.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(d,t.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(d,t.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},D={XYZE:[[new r.Mesh(Q(.5,1),f),null,[0,Math.PI/2,0]]],X:[[new r.Mesh(Q(.5,.5),i)]],Y:[[new r.Mesh(Q(.5,.5),s),null,[0,0,-Math.PI/2]]],Z:[[new r.Mesh(Q(.5,.5),o),null,[0,Math.PI/2,0]]],E:[[new r.Mesh(Q(.75,1),I),null,[0,Math.PI/2,0]]]},M={AXIS:[[new r.Line(d,t.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},N={XYZE:[[new r.Mesh(new r.SphereGeometry(.25,10,8),n)]],X:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),n),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),n),[0,0,0],[Math.PI/2,0,0]]],Z:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),n),[0,0,0],[0,0,-Math.PI/2]]],E:[[new r.Mesh(new r.TorusGeometry(.75,.1,2,24),n)]]},_={X:[[new r.Mesh(E,i),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(y,i),[0,0,0],[0,0,-Math.PI/2]],[new r.Mesh(E,i),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(E,s),[0,.5,0]],[new r.Mesh(y,s)],[new r.Mesh(E,s),[0,-.5,0],[0,0,Math.PI]]],Z:[[new r.Mesh(E,o),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(y,o),[0,0,0],[Math.PI/2,0,0]],[new r.Mesh(E,o),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),l),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),g),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.1,.1,.1),h.clone())]]},P={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.2),n),[0,0,0]]]},z={X:[[new r.Line(d,t.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(d,t.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(d,t.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function U(q){const H=new r.Object3D;for(const Z in q)for(let se=q[Z].length;se--;){const ee=q[Z][se][0].clone(),re=q[Z][se][1],Ae=q[Z][se][2],W=q[Z][se][3],te=q[Z][se][4];ee.name=Z,ee.tag=te,re&&ee.position.set(re[0],re[1],re[2]),Ae&&ee.rotation.set(Ae[0],Ae[1],Ae[2]),W&&ee.scale.set(W[0],W[1],W[2]),ee.updateMatrix();const ge=ee.geometry.clone();ge.applyMatrix4(ee.matrix),ee.geometry=ge,ee.renderOrder=1/0,ee.position.set(0,0,0),ee.rotation.set(0,0,0),ee.scale.set(1,1,1),H.add(ee)}return H}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=U(w)),this.add(this.gizmo.rotate=U(D)),this.add(this.gizmo.scale=U(_)),this.add(this.picker.translate=U(R)),this.add(this.picker.rotate=U(N)),this.add(this.picker.scale=U(P)),this.add(this.helper.translate=U(F)),this.add(this.helper.rotate=U(M)),this.add(this.helper.scale=U(z)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(e){const n=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:ht;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let t=[];t=t.concat(this.picker[this.mode].children),t=t.concat(this.gizmo[this.mode].children),t=t.concat(this.helper[this.mode].children);for(let i=0;i<t.length;i++){const s=t[i];s.visible=!0,s.rotation.set(0,0,0),s.position.copy(this.worldPosition);let o;if(this.camera.isOrthographicCamera?o=(this.camera.top-this.camera.bottom)/this.camera.zoom:o=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),s.scale.set(1,1,1).multiplyScalar(o*this.size/4),s.tag==="helper"){s.visible=!1,s.name==="AXIS"?(s.visible=!!this.axis,this.axis==="X"&&(de.setFromEuler($A.set(0,0,0)),s.quaternion.copy(n).multiply(de),Math.abs(fe.copy(KA).applyQuaternion(n).dot(this.eye))>.9&&(s.visible=!1)),this.axis==="Y"&&(de.setFromEuler($A.set(0,0,Math.PI/2)),s.quaternion.copy(n).multiply(de),Math.abs(fe.copy(bA).applyQuaternion(n).dot(this.eye))>.9&&(s.visible=!1)),this.axis==="Z"&&(de.setFromEuler($A.set(0,Math.PI/2,0)),s.quaternion.copy(n).multiply(de),Math.abs(fe.copy(YA).applyQuaternion(n).dot(this.eye))>.9&&(s.visible=!1)),this.axis==="XYZE"&&(de.setFromEuler($A.set(0,Math.PI/2,0)),fe.copy(this.rotationAxis),s.quaternion.setFromRotationMatrix(Nn.lookAt(vn,fe,bA)),s.quaternion.multiply(de),s.visible=this.dragging),this.axis==="E"&&(s.visible=!1)):s.name==="START"?(s.position.copy(this.worldPositionStart),s.visible=this.dragging):s.name==="END"?(s.position.copy(this.worldPosition),s.visible=this.dragging):s.name==="DELTA"?(s.position.copy(this.worldPositionStart),s.quaternion.copy(this.worldQuaternionStart),Le.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),Le.applyQuaternion(this.worldQuaternionStart.clone().invert()),s.scale.copy(Le),s.visible=this.dragging):(s.quaternion.copy(n),this.dragging?s.position.copy(this.worldPositionStart):s.position.copy(this.worldPosition),this.axis&&(s.visible=this.axis.search(s.name)!==-1));continue}s.quaternion.copy(n),this.mode==="translate"||this.mode==="scale"?(s.name==="X"&&Math.abs(fe.copy(KA).applyQuaternion(n).dot(this.eye))>.99&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="Y"&&Math.abs(fe.copy(bA).applyQuaternion(n).dot(this.eye))>.99&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="Z"&&Math.abs(fe.copy(YA).applyQuaternion(n).dot(this.eye))>.99&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="XY"&&Math.abs(fe.copy(YA).applyQuaternion(n).dot(this.eye))<.2&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="YZ"&&Math.abs(fe.copy(KA).applyQuaternion(n).dot(this.eye))<.2&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="XZ"&&Math.abs(fe.copy(bA).applyQuaternion(n).dot(this.eye))<.2&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1)):this.mode==="rotate"&&(et.copy(n),fe.copy(this.eye).applyQuaternion(de.copy(n).invert()),s.name.search("E")!==-1&&s.quaternion.setFromRotationMatrix(Nn.lookAt(this.eye,vn,bA)),s.name==="X"&&(de.setFromAxisAngle(KA,Math.atan2(-fe.y,fe.z)),de.multiplyQuaternions(et,de),s.quaternion.copy(de)),s.name==="Y"&&(de.setFromAxisAngle(bA,Math.atan2(fe.x,fe.z)),de.multiplyQuaternions(et,de),s.quaternion.copy(de)),s.name==="Z"&&(de.setFromAxisAngle(YA,Math.atan2(fe.y,fe.x)),de.multiplyQuaternions(et,de),s.quaternion.copy(de))),s.visible=s.visible&&(s.name.indexOf("X")===-1||this.showX),s.visible=s.visible&&(s.name.indexOf("Y")===-1||this.showY),s.visible=s.visible&&(s.name.indexOf("Z")===-1||this.showZ),s.visible=s.visible&&(s.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),s.material._color=s.material._color||s.material.color.clone(),s.material._opacity=s.material._opacity||s.material.opacity,s.material.color.copy(s.material._color),s.material.opacity=s.material._opacity,this.enabled&&this.axis&&(s.name===this.axis||this.axis.split("").some(function(c){return s.name===c}))&&(s.material.color.setHex(16776960),s.material.opacity=1)}super.updateMatrixWorld(e)}}class Rr extends r.Mesh{constructor(){super(new r.PlaneGeometry(1e5,1e5,2,2),new r.MeshBasicMaterial({visible:!1,wireframe:!0,side:r.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(e){let A=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(A="local"),At.copy(KA).applyQuaternion(A==="local"?this.worldQuaternion:ht),UA.copy(bA).applyQuaternion(A==="local"?this.worldQuaternion:ht),_A.copy(YA).applyQuaternion(A==="local"?this.worldQuaternion:ht),fe.copy(UA),this.mode){case"translate":case"scale":switch(this.axis){case"X":fe.copy(this.eye).cross(At),AA.copy(At).cross(fe);break;case"Y":fe.copy(this.eye).cross(UA),AA.copy(UA).cross(fe);break;case"Z":fe.copy(this.eye).cross(_A),AA.copy(_A).cross(fe);break;case"XY":AA.copy(_A);break;case"YZ":AA.copy(At);break;case"XZ":fe.copy(_A),AA.copy(UA);break;case"XYZ":case"E":AA.set(0,0,0);break}break;default:AA.set(0,0,0)}AA.length()===0?this.quaternion.copy(this.cameraQuaternion):(Un.lookAt(Le.set(0,0,0),AA,fe),this.quaternion.setFromRotationMatrix(Un)),super.updateMatrixWorld(e)}}const _n={type:"change"},gn={type:"start"},Oi={type:"end"},Gr={type:"endMovement"},tt=new r.Ray,Pn=new r.Plane,Tr=Math.cos(70*r.MathUtils.DEG2RAD),De=new r.Vector3;new r.Vector3;const Pe=2*Math.PI,Ie={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},mA=1e-6;let kr=class extends r.Controls{constructor(e,A=null){super(e,A),this.state=Ie.NONE,this.enabled=!0,this.target=new r.Vector3,this.cursor=new r.Vector3,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=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=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:r.MOUSE.ROTATE,MIDDLE:r.MOUSE.DOLLY,RIGHT:r.MOUSE.PAN},this.touches={ONE:r.TOUCH.ROTATE,TWO:r.TOUCH.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.Vector3,this._lastQuaternion=new r.Quaternion,this._lastTargetPosition=new r.Vector3,this._quat=new r.Quaternion().setFromUnitVectors(e.up,new r.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new r.Spherical,this._sphericalDelta=new r.Spherical,this._scale=1,this._currentScale=1,this._panOffset=new r.Vector3,this._rotateStart=new r.Vector2,this._rotateEnd=new r.Vector2,this._rotateDelta=new r.Vector2,this._panStart=new r.Vector2,this._panEnd=new r.Vector2,this._panDelta=new r.Vector2,this._dollyStart=new r.Vector2,this._dollyEnd=new r.Vector2,this._dollyDelta=new r.Vector2,this._dollyDirection=new r.Vector3,this._mouse=new r.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._lastIsDamping=!1,this._isDamping=!1,this._onPointerMove=vr.bind(this),this._onPointerDown=Lr.bind(this),this._onPointerUp=Nr.bind(this),this._onContextMenu=Kr.bind(this),this._onMouseWheel=Pr.bind(this),this._onKeyDown=Hr.bind(this),this._onTouchStart=Or.bind(this),this._onTouchMove=qr.bind(this),this._onMouseDown=Ur.bind(this),this._onMouseMove=_r.bind(this),this._interceptControlDown=Yr.bind(this),this._interceptControlUp=Jr.bind(this),this.domElement!==null&&this.connect(),this.update()}connect(){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"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(_n),this.update(),this.state=Ie.NONE,this._isDamping=!1}update(e=null){if(this.enableDamping&&e===null)return;const A=this.object.getWorldPosition(this.object.position);De.copy(A).sub(this.target),De.applyQuaternion(this._quat),this._spherical.setFromVector3(De),this.autoRotate&&this.state===Ie.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let n=this.minAzimuthAngle,t=this.maxAzimuthAngle;isFinite(n)&&isFinite(t)&&(n<-Math.PI?n+=Pe:n>Math.PI&&(n-=Pe),t<-Math.PI?t+=Pe:t>Math.PI&&(t-=Pe),n<=t?this._spherical.theta=Math.max(n,Math.min(t,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+t)/2?Math.max(n,this._spherical.theta):Math.min(t,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let i=!1;if(this.enableDamping?this._currentScale=r.MathUtils.lerp(this._currentScale,this._scale,this.dampingFactor):this._currentScale=this._scale,this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const s=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._currentScale),i=Math.abs(s-this._spherical.radius)>mA*100}if(De.setFromSpherical(this._spherical),De.applyQuaternion(this._quatInverse),A.copy(this.target).add(De),this.object.parent?this.object.parent.worldToLocal(A):this.object.position.copy(A),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let s=null;if(this.object.isPerspectiveCamera){const o=De.length();s=this._clampDistance(o*this._currentScale);const c=o-s;this.object.position.addScaledVector(this._dollyDirection,c),this.object.updateMatrixWorld(),i=Math.abs(c)>mA}else if(this.object.isOrthographicCamera){const o=new r.Vector3(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const c=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._currentScale)),this.object.updateProjectionMatrix(),i=Math.abs(c-this.object.zoom)>mA;const g=new r.Vector3(this._mouse.x,this._mouse.y,0);g.unproject(this.object),this.object.position.sub(g).add(o),this.object.updateMatrixWorld(),s=De.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;s!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(s).add(this.object.position):(tt.origin.copy(this.object.position),tt.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(tt.direction))<Tr?this.object.lookAt(this.target):(Pn.setFromNormalAndCoplanarPoint(this.object.up,this.target),tt.intersectPlane(Pn,this.target))))}else if(this.object.isOrthographicCamera){const s=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),Math.abs(s-this.object.zoom)>mA&&(this.object.updateProjectionMatrix(),i=!0)}return this._scale=1,i||this._lastPosition.distanceToSquared(this.object.position)>mA||8*(1-this._lastQuaternion.dot(this.object.quaternion))>mA||this._lastTargetPosition.distanceToSquared(this.target)>mA?(this.dispatchEvent(_n),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),this._lastIsDamping=!0,this._isDamping=!0,!0):(this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),this.state===Ie.NONE&&(this._lastIsDamping=this._isDamping,this._isDamping=!1),this._lastIsDamping&&!this._isDamping&&this.state===Ie.NONE&&(this._isDamping=!1,this._lastIsDamping=!1,this.dispatchEvent(Gr)),this._performCursorZoom=!1,!1)}_getAutoRotationAngle(e){return e!==null?Pe/60*this.autoRotateSpeed*e:Pe/60/60*this.autoRotateSpeed}_getZoomScale(e){const A=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*A)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,A){De.setFromMatrixColumn(A,0),De.multiplyScalar(-e),this._panOffset.add(De)}_panUp(e,A){this.screenSpacePanning===!0?De.setFromMatrixColumn(A,1):(De.setFromMatrixColumn(A,0),De.crossVectors(this.object.up,De)),De.multiplyScalar(e),this._panOffset.add(De)}_pan(e,A){const n=this.domElement;if(this.object.isPerspectiveCamera){this.object.getWorldPosition(De).sub(this.target);let t=De.length();t*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*t/n.clientHeight,this.object.matrixWorld),this._panUp(2*A*t/n.clientHeight,this.object.matrixWorld)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrixWorld),this._panUp(A*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrixWorld)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,A){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const n=this.domElement.getBoundingClientRect(),t=e-n.left,i=A-n.top,s=n.width,o=n.height;this._mouse.x=t/s*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const A=this.domElement;this._rotateLeft(Pe*this._rotateDelta.x/A.clientHeight),this._rotateUp(Pe*this._rotateDelta.y/A.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let A=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,this.keyPanSpeed),A=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(-Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,-this.keyPanSpeed),A=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(this.keyPanSpeed,0),A=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(-Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(-this.keyPanSpeed,0),A=!0;break}A&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const A=this._getSecondPointerPosition(e),n=.5*(e.pageX+A.x),t=.5*(e.pageY+A.y);this._rotateStart.set(n,t)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const A=this._getSecondPointerPosition(e),n=.5*(e.pageX+A.x),t=.5*(e.pageY+A.y);this._panStart.set(n,t)}}_handleTouchStartDolly(e){const A=this._getSecondPointerPosition(e),n=e.pageX-A.x,t=e.pageY-A.y,i=Math.sqrt(n*n+t*t);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const n=this._getSecondPointerPosition(e),t=.5*(e.pageX+n.x),i=.5*(e.pageY+n.y);this._rotateEnd.set(t,i)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const A=this.domElement;this._rotateLeft(Pe*this._rotateDelta.x/A.clientHeight),this._rotateUp(Pe*this._rotateDelta.y/A.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const A=this._getSecondPointerPosition(e),n=.5*(e.pageX+A.x),t=.5*(e.pageY+A.y);this._panEnd.set(n,t)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const A=this._getSecondPointerPosition(e),n=e.pageX-A.x,t=e.pageY-A.y,i=Math.sqrt(n*n+t*t);this._dollyEnd.set(0,i),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const s=(e.pageX+A.x)*.5,o=(e.pageY+A.y)*.5;this._updateZoomParameters(s,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let A=0;A<this._pointers.length;A++)if(this._pointers[A]==e.pointerId){this._pointers.splice(A,1);return}}_isTrackingPointer(e){for(let A=0;A<this._pointers.length;A++)if(this._pointers[A]==e.pointerId)return!0;return!1}_trackPointer(e){let A=this._pointerPositions[e.pointerId];A===void 0&&(A=new r.Vector2,this._pointerPositions[e.pointerId]=A),A.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const A=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[A]}_customWheelEvent(e){const A=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(A){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function Lr(a){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(a.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),window.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(a)&&(this._addPointer(a),a.pointerType==="touch"?this._onTouchStart(a):this._onMouseDown(a)))}function vr(a){this.enabled!==!1&&(a.pointerType==="touch"?this._onTouchMove(a):this._onMouseMove(a))}function Nr(a){switch(this._removePointer(a),this._pointers.length){case 0:this.domElement.releasePointerCapture(a.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),window.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(Oi),this.state=Ie.NONE;break;case 1:const e=this._pointers[0],A=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:A.x,pageY:A.y});break}}function Ur(a){let e;switch(a.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case r.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(a),this.state=Ie.DOLLY;break;case r.MOUSE.ROTATE:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=Ie.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=Ie.ROTATE}break;case r.MOUSE.PAN:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=Ie.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=Ie.PAN}break;default:this.state=Ie.NONE}this.state!==Ie.NONE&&this.dispatchEvent(gn)}function _r(a){switch(this.state){case Ie.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(a);break;case Ie.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(a);break;case Ie.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(a);break}}function Pr(a){this.enabled===!1||this.enableZoom===!1||this.state!==Ie.NONE||(a.preventDefault(),this.dispatchEvent(gn),this._handleMouseWheel(this._customWheelEvent(a)),this.dispatchEvent(Oi))}function Hr(a){this.enabled===!1||this.enablePan===!1||this._handleKeyDown(a)}function Or(a){switch(this._trackPointer(a),this._pointers.length){case 1:switch(this.touches.ONE){case r.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(a),this.state=Ie.TOUCH_ROTATE;break;case r.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(a),this.state=Ie.TOUCH_PAN;break;default:this.state=Ie.NONE}break;case 2:switch(this.touches.TWO){case r.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(a),this.state=Ie.TOUCH_DOLLY_PAN;break;case r.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(a),this.state=Ie.TOUCH_DOLLY_ROTATE;break;default:this.state=Ie.NONE}break;default:this.state=Ie.NONE}this.state!==Ie.NONE&&this.dispatchEvent(gn)}function qr(a){switch(this._trackPointer(a),this.state){case Ie.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(a),this.update();break;case Ie.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(a),this.update();break;case Ie.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(a),this.update();break;case Ie.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(a),this.update();break;default:this.state=Ie.NONE}}function Kr(a){this.enabled!==!1&&a.preventDefault()}function Yr(a){a.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Jr(a){a.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}class jr extends r.Line{constructor(e,A=1,n=16,t=2){const i=new r.BufferGeometry,s=n+t*2,o=new Float32Array((s*3+3)*3);i.setAttribute("position",new r.BufferAttribute(o,3));const c=new r.LineBasicMaterial({color:65280}),g=new r.LineBasicMaterial({color:16776960});super(i,[g,c]),this.audio=e,this.range=A,this.divisionsInnerAngle=n,this.divisionsOuterAngle=t,this.type="PositionalAudioHelper",this.update()}update(){const e=this.audio,A=this.range,n=this.divisionsInnerAngle,t=this.divisionsOuterAngle,i=r.MathUtils.degToRad(e.panner.coneInnerAngle),s=r.MathUtils.degToRad(e.panner.coneOuterAngle),o=i/2,c=s/2;let g=0,l=0,h,I;const B=this.geometry,f=B.attributes.position;B.clearGroups();function C(E,d,y,Q){const b=(d-E)/y;for(f.setXYZ(g,0,0,0),l++,h=E;h<d;h+=b)I=g+l,f.setXYZ(I,Math.sin(h)*A,0,Math.cos(h)*A),f.setXYZ(I+1,Math.sin(Math.min(h+b,d))*A,0,Math.cos(Math.min(h+b,d))*A),f.setXYZ(I+2,0,0,0),l+=3;B.addGroup(g,l,Q),g+=l,l=0}C(-c,-o,t,0),C(-o,o,n,1),C(o,c,t,0),f.needsUpdate=!0,i===s&&(this.material[0].visible=!1)}dispose(){this.geometry.dispose(),this.material[0].dispose(),this.material[1].dispose()}}const Vr={name:"HorizontalBlurShader",uniforms:{tDiffuse:{value:null},h:{value:1/512}},vertexShader:`
|
|
8
|
+
`;continue}if((H=q.match(N))&&(U.gamma=parseFloat(H[1])),(H=q.match(_))&&(U.exposure=parseFloat(H[1])),(H=q.match(P))&&(U.valid|=2,U.format=H[1]),(H=q.match(z))&&(U.valid|=4,U.height=parseInt(H[1],10),U.width=parseInt(H[2],10)),U.valid&2&&U.valid&4)break}return U.valid&2||s(3,"missing format specifier"),U.valid&4||s(3,"missing image size specifier"),U},B=function(D,M,N){const _=M;if(_<8||_>32767||D[0]!==2||D[1]!==2||D[2]&128)return new Uint8Array(D);_!==(D[2]<<8|D[3])&&s(3,"wrong scanline width");const P=new Uint8Array(4*M*N);P.length||s(4,"unable to allocate buffer space");let z=0,U=0;const q=4*_,H=new Uint8Array(4),Z=new Uint8Array(q);let se=N;for(;se>0&&U<D.byteLength;){U+4>D.byteLength&&s(1),H[0]=D[U++],H[1]=D[U++],H[2]=D[U++],H[3]=D[U++],(H[0]!=2||H[1]!=2||(H[2]<<8|H[3])!=_)&&s(3,"bad rgbe scanline format");let ee=0,re;for(;ee<q&&U<D.byteLength;){re=D[U++];const W=re>128;if(W&&(re-=128),(re===0||ee+re>q)&&s(3,"bad scanline data"),W){const te=D[U++];for(let ge=0;ge<re;ge++)Z[ee++]=te}else Z.set(D.subarray(U,U+re),ee),ee+=re,U+=re}const Ae=_;for(let W=0;W<Ae;W++){let te=0;P[z]=Z[W+te],te+=_,P[z+1]=Z[W+te],te+=_,P[z+2]=Z[W+te],te+=_,P[z+3]=Z[W+te],z+=4}se--}return P},f=function(D,M,N,_){const P=D[M+3],z=Math.pow(2,P-128)/255;N[_+0]=D[M+0]*z,N[_+1]=D[M+1]*z,N[_+2]=D[M+2]*z,N[_+3]=1},C=function(D,M,N,_){const P=D[M+3],z=Math.pow(2,P-128)/255;N[_+0]=r.DataUtils.toHalfFloat(Math.min(D[M+0]*z,65504)),N[_+1]=r.DataUtils.toHalfFloat(Math.min(D[M+1]*z,65504)),N[_+2]=r.DataUtils.toHalfFloat(Math.min(D[M+2]*z,65504)),N[_+3]=r.DataUtils.toHalfFloat(1)},p=new Uint8Array(e);p.pos=0;const d=I(p),w=d.width,Q=d.height,b=B(p.subarray(p.pos),w,Q);let y,R,F;switch(this.type){case r.FloatType:F=b.length/4;const D=new Float32Array(F*4);for(let N=0;N<F;N++)f(b,N*4,D,N*4);y=D,R=r.FloatType;break;case r.HalfFloatType:F=b.length/4;const M=new Uint16Array(F*4);for(let N=0;N<F;N++)C(b,N*4,M,N*4);y=M,R=r.HalfFloatType;break;default:throw new Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:w,height:Q,data:y,header:d.string,gamma:d.gamma,exposure:d.exposure,type:R}}setDataType(e){return this.type=e,this}load(e,A,n,t){function i(s,o){switch(s.type){case r.FloatType:case r.HalfFloatType:s.colorSpace=r.LinearSRGBColorSpace,s.minFilter=r.LinearFilter,s.magFilter=r.LinearFilter,s.generateMipmaps=!1,s.flipY=!0;break}A&&A(s,o)}return super.load(e,i,n,t)}}const QA=new r.Raycaster,Le=new r.Vector3,fA=new r.Vector3,de=new r.Quaternion,Rn={X:new r.Vector3(1,0,0),Y:new r.Vector3(0,1,0),Z:new r.Vector3(0,0,1)},Tt={type:"change"},Gn={type:"mouseDown",mode:null},Tn={type:"mouseUp",mode:null},kn={type:"objectChange"};class wr extends r.Controls{constructor(e,A=null){super(void 0,A);const n=new Fr(this);this._root=n;const t=new Hi;this._gizmo=t,n.add(t);const i=new Rr;this._plane=i,n.add(i);const s=this;function o(Q,b){let y=b;Object.defineProperty(s,Q,{get:function(){return y!==void 0?y:b},set:function(R){y!==R&&(y=R,i[Q]=R,t[Q]=R,s.dispatchEvent({type:Q+"-changed",value:R}),s.dispatchEvent(Tt))}}),s[Q]=b,i[Q]=b,t[Q]=b}o("camera",e),o("object",void 0),o("enabled",!0),o("axis",null),o("mode","translate"),o("translationSnap",null),o("rotationSnap",null),o("scaleSnap",null),o("space","world"),o("size",1),o("dragging",!1),o("showX",!0),o("showY",!0),o("showZ",!0);const c=new r.Vector3,g=new r.Vector3,l=new r.Quaternion,h=new r.Quaternion,I=new r.Vector3,B=new r.Quaternion,f=new r.Vector3,C=new r.Vector3,p=new r.Vector3,d=0,w=new r.Vector3;o("worldPosition",c),o("worldPositionStart",g),o("worldQuaternion",l),o("worldQuaternionStart",h),o("cameraPosition",I),o("cameraQuaternion",B),o("pointStart",f),o("pointEnd",C),o("rotationAxis",p),o("rotationAngle",d),o("eye",w),this._offset=new r.Vector3,this._startNorm=new r.Vector3,this._endNorm=new r.Vector3,this._cameraScale=new r.Vector3,this._parentPosition=new r.Vector3,this._parentQuaternion=new r.Quaternion,this._parentQuaternionInv=new r.Quaternion,this._parentScale=new r.Vector3,this._worldScaleStart=new r.Vector3,this._worldQuaternionInv=new r.Quaternion,this._worldScale=new r.Vector3,this._positionStart=new r.Vector3,this._quaternionStart=new r.Quaternion,this._scaleStart=new r.Vector3,this._getPointer=yr.bind(this),this._onPointerDown=Sr.bind(this),this._onPointerHover=Dr.bind(this),this._onPointerMove=xr.bind(this),this._onPointerUp=Mr.bind(this),A!==null&&this.connect()}connect(){this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="auto"}getHelper(){return this._root}pointerHover(e){if(this.object===void 0||this.dragging===!0)return;e!==null&&QA.setFromCamera(e,this.camera);const A=kt(this._gizmo.picker[this.mode],QA);A?this.axis=A.object.name:this.axis=null}pointerDown(e){if(!(this.object===void 0||this.dragging===!0||e!=null&&e.button!==0)&&this.axis!==null){e!==null&&QA.setFromCamera(e,this.camera);const A=kt(this._plane,QA,!0);A&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(A.point).sub(this.worldPositionStart)),this.dragging=!0,Gn.mode=this.mode,this.dispatchEvent(Gn)}}pointerMove(e){const A=this.axis,n=this.mode,t=this.object;let i=this.space;if(n==="scale"?i="local":(A==="E"||A==="XYZE"||A==="XYZ")&&(i="world"),t===void 0||A===null||this.dragging===!1||e!==null&&e.button!==-1)return;e!==null&&QA.setFromCamera(e,this.camera);const s=kt(this._plane,QA,!0);if(s){if(this.pointEnd.copy(s.point).sub(this.worldPositionStart),n==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),i==="local"&&A!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),A.indexOf("X")===-1&&(this._offset.x=0),A.indexOf("Y")===-1&&(this._offset.y=0),A.indexOf("Z")===-1&&(this._offset.z=0),i==="local"&&A!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),t.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(i==="local"&&(t.position.applyQuaternion(de.copy(this._quaternionStart).invert()),A.search("X")!==-1&&(t.position.x=Math.round(t.position.x/this.translationSnap)*this.translationSnap),A.search("Y")!==-1&&(t.position.y=Math.round(t.position.y/this.translationSnap)*this.translationSnap),A.search("Z")!==-1&&(t.position.z=Math.round(t.position.z/this.translationSnap)*this.translationSnap),t.position.applyQuaternion(this._quaternionStart)),i==="world"&&(t.parent&&t.position.add(Le.setFromMatrixPosition(t.parent.matrixWorld)),A.search("X")!==-1&&(t.position.x=Math.round(t.position.x/this.translationSnap)*this.translationSnap),A.search("Y")!==-1&&(t.position.y=Math.round(t.position.y/this.translationSnap)*this.translationSnap),A.search("Z")!==-1&&(t.position.z=Math.round(t.position.z/this.translationSnap)*this.translationSnap),t.parent&&t.position.sub(Le.setFromMatrixPosition(t.parent.matrixWorld))));else if(n==="scale"){if(A.search("XYZ")!==-1){let o=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(o*=-1),fA.set(o,o,o)}else Le.copy(this.pointStart),fA.copy(this.pointEnd),Le.applyQuaternion(this._worldQuaternionInv),fA.applyQuaternion(this._worldQuaternionInv),fA.divide(Le),A.search("X")===-1&&(fA.x=1),A.search("Y")===-1&&(fA.y=1),A.search("Z")===-1&&(fA.z=1);t.scale.copy(this._scaleStart).multiply(fA),this.scaleSnap&&(A.search("X")!==-1&&(t.scale.x=Math.round(t.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),A.search("Y")!==-1&&(t.scale.y=Math.round(t.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),A.search("Z")!==-1&&(t.scale.z=Math.round(t.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(n==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const o=20/this.worldPosition.distanceTo(Le.setFromMatrixPosition(this.camera.matrixWorld));let c=!1;A==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(Le.copy(this.rotationAxis).cross(this.eye))*o):(A==="X"||A==="Y"||A==="Z")&&(this.rotationAxis.copy(Rn[A]),Le.copy(Rn[A]),i==="local"&&Le.applyQuaternion(this.worldQuaternion),Le.cross(this.eye),Le.length()===0?c=!0:this.rotationAngle=this._offset.dot(Le.normalize())*o),(A==="E"||c)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),i==="local"&&A!=="E"&&A!=="XYZE"?(t.quaternion.copy(this._quaternionStart),t.quaternion.multiply(de.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),t.quaternion.copy(de.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),t.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(Tt),this.dispatchEvent(kn)}}pointerUp(e){e!==null&&e.button!==0||(this.dragging&&this.axis!==null&&(Tn.mode=this.mode,this.dispatchEvent(Tn)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this.traverse(function(e){e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()})}attach(e){return this.object=e,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(Tt),this.dispatchEvent(kn),this.pointStart.copy(this.pointEnd))}getRaycaster(){return QA}getMode(){return this.mode}setMode(e){this.mode=e}setTranslationSnap(e){this.translationSnap=e}setRotationSnap(e){this.rotationSnap=e}setScaleSnap(e){this.scaleSnap=e}setSize(e){this.size=e}setSpace(e){this.space=e}}function yr(a){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:a.button};{const e=this.domElement.getBoundingClientRect();return{x:(a.clientX-e.left)/e.width*2-1,y:-(a.clientY-e.top)/e.height*2+1,button:a.button}}}function Dr(a){if(this.enabled)switch(a.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(a));break}}function Sr(a){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(a.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(a)),this.pointerDown(this._getPointer(a)))}function xr(a){this.enabled&&this.pointerMove(this._getPointer(a))}function Mr(a){this.enabled&&(this.domElement.releasePointerCapture(a.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(a)))}function kt(a,e,A){const n=e.intersectObject(a,!0);for(let t=0;t<n.length;t++)if(n[t].object.visible||A)return n[t];return!1}const $A=new r.Euler,fe=new r.Vector3(0,1,0),Ln=new r.Vector3(0,0,0),vn=new r.Matrix4,et=new r.Quaternion,ht=new r.Quaternion,AA=new r.Vector3,Nn=new r.Matrix4,KA=new r.Vector3(1,0,0),bA=new r.Vector3(0,1,0),YA=new r.Vector3(0,0,1),At=new r.Vector3,UA=new r.Vector3,_A=new r.Vector3;class Fr extends r.Object3D{constructor(e){super(),this.isTransformControlsRoot=!0,this.controls=e,this.visible=!1}updateMatrixWorld(e){const A=this.controls;A.object!==void 0&&(A.object.updateMatrixWorld(),A.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):A.object.parent.matrixWorld.decompose(A._parentPosition,A._parentQuaternion,A._parentScale),A.object.matrixWorld.decompose(A.worldPosition,A.worldQuaternion,A._worldScale),A._parentQuaternionInv.copy(A._parentQuaternion).invert(),A._worldQuaternionInv.copy(A.worldQuaternion).invert()),A.camera.updateMatrixWorld(),A.camera.matrixWorld.decompose(A.cameraPosition,A.cameraQuaternion,A._cameraScale),A.camera.isOrthographicCamera?A.camera.getWorldDirection(A.eye).negate():A.eye.copy(A.cameraPosition).sub(A.worldPosition).normalize(),super.updateMatrixWorld(e)}}class Hi extends r.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const e=new r.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),A=new r.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),n=e.clone();n.opacity=.15;const t=A.clone();t.opacity=.5;const i=e.clone();i.color.setHex(16711680);const s=e.clone();s.color.setHex(65280);const o=e.clone();o.color.setHex(255);const c=e.clone();c.color.setHex(16711680),c.opacity=.5;const g=e.clone();g.color.setHex(65280),g.opacity=.5;const l=e.clone();l.color.setHex(255),l.opacity=.5;const h=e.clone();h.opacity=.25;const I=e.clone();I.color.setHex(16776960),I.opacity=.25,e.clone().color.setHex(16776960);const f=e.clone();f.color.setHex(7895160);const C=new r.CylinderGeometry(0,.04,.1,12);C.translate(0,.05,0);const p=new r.BoxGeometry(.08,.08,.08);p.translate(0,.04,0);const d=new r.BufferGeometry;d.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,0,0],3));const w=new r.CylinderGeometry(.0075,.0075,.5,3);w.translate(0,.25,0);function Q(q,H){const Z=new r.TorusGeometry(q,.0075,3,64,H*Math.PI*2);return Z.rotateY(Math.PI/2),Z.rotateX(Math.PI/2),Z}function b(){const q=new r.BufferGeometry;return q.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,1,1],3)),q}const y={X:[[new r.Mesh(C,i),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(C,i),[-.5,0,0],[0,0,Math.PI/2]],[new r.Mesh(w,i),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new r.Mesh(C,s),[0,.5,0]],[new r.Mesh(C,s),[0,-.5,0],[Math.PI,0,0]],[new r.Mesh(w,s)]],Z:[[new r.Mesh(C,o),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(C,o),[0,0,-.5],[-Math.PI/2,0,0]],[new r.Mesh(w,o),null,[Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.1,0),h.clone()),[0,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),l.clone()),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c.clone()),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),g.clone()),[.15,0,.15],[-Math.PI/2,0,0]]]},R={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.2,0),n)]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,0,.15],[-Math.PI/2,0,0]]]},F={START:[[new r.Mesh(new r.OctahedronGeometry(.01,2),t),null,null,null,"helper"]],END:[[new r.Mesh(new r.OctahedronGeometry(.01,2),t),null,null,null,"helper"]],DELTA:[[new r.Line(b(),t),null,null,null,"helper"]],X:[[new r.Line(d,t.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(d,t.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(d,t.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},D={XYZE:[[new r.Mesh(Q(.5,1),f),null,[0,Math.PI/2,0]]],X:[[new r.Mesh(Q(.5,.5),i)]],Y:[[new r.Mesh(Q(.5,.5),s),null,[0,0,-Math.PI/2]]],Z:[[new r.Mesh(Q(.5,.5),o),null,[0,Math.PI/2,0]]],E:[[new r.Mesh(Q(.75,1),I),null,[0,Math.PI/2,0]]]},M={AXIS:[[new r.Line(d,t.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},N={XYZE:[[new r.Mesh(new r.SphereGeometry(.25,10,8),n)]],X:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),n),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),n),[0,0,0],[Math.PI/2,0,0]]],Z:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),n),[0,0,0],[0,0,-Math.PI/2]]],E:[[new r.Mesh(new r.TorusGeometry(.75,.1,2,24),n)]]},_={X:[[new r.Mesh(p,i),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(w,i),[0,0,0],[0,0,-Math.PI/2]],[new r.Mesh(p,i),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(p,s),[0,.5,0]],[new r.Mesh(w,s)],[new r.Mesh(p,s),[0,-.5,0],[0,0,Math.PI]]],Z:[[new r.Mesh(p,o),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(w,o),[0,0,0],[Math.PI/2,0,0]],[new r.Mesh(p,o),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),l),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),g),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.1,.1,.1),h.clone())]]},P={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),n),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),n),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.2),n),[0,0,0]]]},z={X:[[new r.Line(d,t.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(d,t.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(d,t.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function U(q){const H=new r.Object3D;for(const Z in q)for(let se=q[Z].length;se--;){const ee=q[Z][se][0].clone(),re=q[Z][se][1],Ae=q[Z][se][2],W=q[Z][se][3],te=q[Z][se][4];ee.name=Z,ee.tag=te,re&&ee.position.set(re[0],re[1],re[2]),Ae&&ee.rotation.set(Ae[0],Ae[1],Ae[2]),W&&ee.scale.set(W[0],W[1],W[2]),ee.updateMatrix();const ge=ee.geometry.clone();ge.applyMatrix4(ee.matrix),ee.geometry=ge,ee.renderOrder=1/0,ee.position.set(0,0,0),ee.rotation.set(0,0,0),ee.scale.set(1,1,1),H.add(ee)}return H}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=U(y)),this.add(this.gizmo.rotate=U(D)),this.add(this.gizmo.scale=U(_)),this.add(this.picker.translate=U(R)),this.add(this.picker.rotate=U(N)),this.add(this.picker.scale=U(P)),this.add(this.helper.translate=U(F)),this.add(this.helper.rotate=U(M)),this.add(this.helper.scale=U(z)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(e){const n=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:ht;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let t=[];t=t.concat(this.picker[this.mode].children),t=t.concat(this.gizmo[this.mode].children),t=t.concat(this.helper[this.mode].children);for(let i=0;i<t.length;i++){const s=t[i];s.visible=!0,s.rotation.set(0,0,0),s.position.copy(this.worldPosition);let o;if(this.camera.isOrthographicCamera?o=(this.camera.top-this.camera.bottom)/this.camera.zoom:o=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),s.scale.set(1,1,1).multiplyScalar(o*this.size/4),s.tag==="helper"){s.visible=!1,s.name==="AXIS"?(s.visible=!!this.axis,this.axis==="X"&&(de.setFromEuler($A.set(0,0,0)),s.quaternion.copy(n).multiply(de),Math.abs(fe.copy(KA).applyQuaternion(n).dot(this.eye))>.9&&(s.visible=!1)),this.axis==="Y"&&(de.setFromEuler($A.set(0,0,Math.PI/2)),s.quaternion.copy(n).multiply(de),Math.abs(fe.copy(bA).applyQuaternion(n).dot(this.eye))>.9&&(s.visible=!1)),this.axis==="Z"&&(de.setFromEuler($A.set(0,Math.PI/2,0)),s.quaternion.copy(n).multiply(de),Math.abs(fe.copy(YA).applyQuaternion(n).dot(this.eye))>.9&&(s.visible=!1)),this.axis==="XYZE"&&(de.setFromEuler($A.set(0,Math.PI/2,0)),fe.copy(this.rotationAxis),s.quaternion.setFromRotationMatrix(vn.lookAt(Ln,fe,bA)),s.quaternion.multiply(de),s.visible=this.dragging),this.axis==="E"&&(s.visible=!1)):s.name==="START"?(s.position.copy(this.worldPositionStart),s.visible=this.dragging):s.name==="END"?(s.position.copy(this.worldPosition),s.visible=this.dragging):s.name==="DELTA"?(s.position.copy(this.worldPositionStart),s.quaternion.copy(this.worldQuaternionStart),Le.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),Le.applyQuaternion(this.worldQuaternionStart.clone().invert()),s.scale.copy(Le),s.visible=this.dragging):(s.quaternion.copy(n),this.dragging?s.position.copy(this.worldPositionStart):s.position.copy(this.worldPosition),this.axis&&(s.visible=this.axis.search(s.name)!==-1));continue}s.quaternion.copy(n),this.mode==="translate"||this.mode==="scale"?(s.name==="X"&&Math.abs(fe.copy(KA).applyQuaternion(n).dot(this.eye))>.99&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="Y"&&Math.abs(fe.copy(bA).applyQuaternion(n).dot(this.eye))>.99&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="Z"&&Math.abs(fe.copy(YA).applyQuaternion(n).dot(this.eye))>.99&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="XY"&&Math.abs(fe.copy(YA).applyQuaternion(n).dot(this.eye))<.2&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="YZ"&&Math.abs(fe.copy(KA).applyQuaternion(n).dot(this.eye))<.2&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1),s.name==="XZ"&&Math.abs(fe.copy(bA).applyQuaternion(n).dot(this.eye))<.2&&(s.scale.set(1e-10,1e-10,1e-10),s.visible=!1)):this.mode==="rotate"&&(et.copy(n),fe.copy(this.eye).applyQuaternion(de.copy(n).invert()),s.name.search("E")!==-1&&s.quaternion.setFromRotationMatrix(vn.lookAt(this.eye,Ln,bA)),s.name==="X"&&(de.setFromAxisAngle(KA,Math.atan2(-fe.y,fe.z)),de.multiplyQuaternions(et,de),s.quaternion.copy(de)),s.name==="Y"&&(de.setFromAxisAngle(bA,Math.atan2(fe.x,fe.z)),de.multiplyQuaternions(et,de),s.quaternion.copy(de)),s.name==="Z"&&(de.setFromAxisAngle(YA,Math.atan2(fe.y,fe.x)),de.multiplyQuaternions(et,de),s.quaternion.copy(de))),s.visible=s.visible&&(s.name.indexOf("X")===-1||this.showX),s.visible=s.visible&&(s.name.indexOf("Y")===-1||this.showY),s.visible=s.visible&&(s.name.indexOf("Z")===-1||this.showZ),s.visible=s.visible&&(s.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),s.material._color=s.material._color||s.material.color.clone(),s.material._opacity=s.material._opacity||s.material.opacity,s.material.color.copy(s.material._color),s.material.opacity=s.material._opacity,this.enabled&&this.axis&&(s.name===this.axis||this.axis.split("").some(function(c){return s.name===c}))&&(s.material.color.setHex(16776960),s.material.opacity=1)}super.updateMatrixWorld(e)}}class Rr extends r.Mesh{constructor(){super(new r.PlaneGeometry(1e5,1e5,2,2),new r.MeshBasicMaterial({visible:!1,wireframe:!0,side:r.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(e){let A=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(A="local"),At.copy(KA).applyQuaternion(A==="local"?this.worldQuaternion:ht),UA.copy(bA).applyQuaternion(A==="local"?this.worldQuaternion:ht),_A.copy(YA).applyQuaternion(A==="local"?this.worldQuaternion:ht),fe.copy(UA),this.mode){case"translate":case"scale":switch(this.axis){case"X":fe.copy(this.eye).cross(At),AA.copy(At).cross(fe);break;case"Y":fe.copy(this.eye).cross(UA),AA.copy(UA).cross(fe);break;case"Z":fe.copy(this.eye).cross(_A),AA.copy(_A).cross(fe);break;case"XY":AA.copy(_A);break;case"YZ":AA.copy(At);break;case"XZ":fe.copy(_A),AA.copy(UA);break;case"XYZ":case"E":AA.set(0,0,0);break}break;default:AA.set(0,0,0)}AA.length()===0?this.quaternion.copy(this.cameraQuaternion):(Nn.lookAt(Le.set(0,0,0),AA,fe),this.quaternion.setFromRotationMatrix(Nn)),super.updateMatrixWorld(e)}}const Un={type:"change"},cn={type:"start"},Oi={type:"end"},Gr={type:"endMovement"},tt=new r.Ray,_n=new r.Plane,Tr=Math.cos(70*r.MathUtils.DEG2RAD),De=new r.Vector3;new r.Vector3;const Pe=2*Math.PI,Ie={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},mA=1e-6;let kr=class extends r.Controls{constructor(e,A=null){super(e,A),this.state=Ie.NONE,this.enabled=!0,this.target=new r.Vector3,this.cursor=new r.Vector3,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=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=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:r.MOUSE.ROTATE,MIDDLE:r.MOUSE.DOLLY,RIGHT:r.MOUSE.PAN},this.touches={ONE:r.TOUCH.ROTATE,TWO:r.TOUCH.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.Vector3,this._lastQuaternion=new r.Quaternion,this._lastTargetPosition=new r.Vector3,this._quat=new r.Quaternion().setFromUnitVectors(e.up,new r.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new r.Spherical,this._sphericalDelta=new r.Spherical,this._scale=1,this._currentScale=1,this._panOffset=new r.Vector3,this._rotateStart=new r.Vector2,this._rotateEnd=new r.Vector2,this._rotateDelta=new r.Vector2,this._panStart=new r.Vector2,this._panEnd=new r.Vector2,this._panDelta=new r.Vector2,this._dollyStart=new r.Vector2,this._dollyEnd=new r.Vector2,this._dollyDelta=new r.Vector2,this._dollyDirection=new r.Vector3,this._mouse=new r.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._lastIsDamping=!1,this._isDamping=!1,this._onPointerMove=vr.bind(this),this._onPointerDown=Lr.bind(this),this._onPointerUp=Nr.bind(this),this._onContextMenu=Kr.bind(this),this._onMouseWheel=Pr.bind(this),this._onKeyDown=Hr.bind(this),this._onTouchStart=Or.bind(this),this._onTouchMove=qr.bind(this),this._onMouseDown=Ur.bind(this),this._onMouseMove=_r.bind(this),this._interceptControlDown=Yr.bind(this),this._interceptControlUp=Jr.bind(this),this.domElement!==null&&this.connect(),this.update()}connect(){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"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Un),this.update(),this.state=Ie.NONE,this._isDamping=!1}update(e=null){if(this.enableDamping&&e===null)return;const A=this.object.getWorldPosition(this.object.position);De.copy(A).sub(this.target),De.applyQuaternion(this._quat),this._spherical.setFromVector3(De),this.autoRotate&&this.state===Ie.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let n=this.minAzimuthAngle,t=this.maxAzimuthAngle;isFinite(n)&&isFinite(t)&&(n<-Math.PI?n+=Pe:n>Math.PI&&(n-=Pe),t<-Math.PI?t+=Pe:t>Math.PI&&(t-=Pe),n<=t?this._spherical.theta=Math.max(n,Math.min(t,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+t)/2?Math.max(n,this._spherical.theta):Math.min(t,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let i=!1;if(this.enableDamping?this._currentScale=r.MathUtils.lerp(this._currentScale,this._scale,this.dampingFactor):this._currentScale=this._scale,this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const s=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._currentScale),i=Math.abs(s-this._spherical.radius)>mA*100}if(De.setFromSpherical(this._spherical),De.applyQuaternion(this._quatInverse),A.copy(this.target).add(De),this.object.parent?this.object.parent.worldToLocal(A):this.object.position.copy(A),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let s=null;if(this.object.isPerspectiveCamera){const o=De.length();s=this._clampDistance(o*this._currentScale);const c=o-s;this.object.position.addScaledVector(this._dollyDirection,c),this.object.updateMatrixWorld(),i=Math.abs(c)>mA}else if(this.object.isOrthographicCamera){const o=new r.Vector3(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const c=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._currentScale)),this.object.updateProjectionMatrix(),i=Math.abs(c-this.object.zoom)>mA;const g=new r.Vector3(this._mouse.x,this._mouse.y,0);g.unproject(this.object),this.object.position.sub(g).add(o),this.object.updateMatrixWorld(),s=De.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;s!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(s).add(this.object.position):(tt.origin.copy(this.object.position),tt.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(tt.direction))<Tr?this.object.lookAt(this.target):(_n.setFromNormalAndCoplanarPoint(this.object.up,this.target),tt.intersectPlane(_n,this.target))))}else if(this.object.isOrthographicCamera){const s=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),Math.abs(s-this.object.zoom)>mA&&(this.object.updateProjectionMatrix(),i=!0)}return this._scale=1,i||this._lastPosition.distanceToSquared(this.object.position)>mA||8*(1-this._lastQuaternion.dot(this.object.quaternion))>mA||this._lastTargetPosition.distanceToSquared(this.target)>mA?(this.dispatchEvent(Un),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),this._lastIsDamping=!0,this._isDamping=!0,!0):(this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),this.state===Ie.NONE&&(this._lastIsDamping=this._isDamping,this._isDamping=!1),this._lastIsDamping&&!this._isDamping&&this.state===Ie.NONE&&(this._isDamping=!1,this._lastIsDamping=!1,this.dispatchEvent(Gr)),this._performCursorZoom=!1,!1)}_getAutoRotationAngle(e){return e!==null?Pe/60*this.autoRotateSpeed*e:Pe/60/60*this.autoRotateSpeed}_getZoomScale(e){const A=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*A)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,A){De.setFromMatrixColumn(A,0),De.multiplyScalar(-e),this._panOffset.add(De)}_panUp(e,A){this.screenSpacePanning===!0?De.setFromMatrixColumn(A,1):(De.setFromMatrixColumn(A,0),De.crossVectors(this.object.up,De)),De.multiplyScalar(e),this._panOffset.add(De)}_pan(e,A){const n=this.domElement;if(this.object.isPerspectiveCamera){this.object.getWorldPosition(De).sub(this.target);let t=De.length();t*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*t/n.clientHeight,this.object.matrixWorld),this._panUp(2*A*t/n.clientHeight,this.object.matrixWorld)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrixWorld),this._panUp(A*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrixWorld)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,A){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const n=this.domElement.getBoundingClientRect(),t=e-n.left,i=A-n.top,s=n.width,o=n.height;this._mouse.x=t/s*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const A=this.domElement;this._rotateLeft(Pe*this._rotateDelta.x/A.clientHeight),this._rotateUp(Pe*this._rotateDelta.y/A.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let A=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,this.keyPanSpeed),A=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(-Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,-this.keyPanSpeed),A=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(this.keyPanSpeed,0),A=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(-Pe*this.rotateSpeed/this.domElement.clientHeight):this._pan(-this.keyPanSpeed,0),A=!0;break}A&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const A=this._getSecondPointerPosition(e),n=.5*(e.pageX+A.x),t=.5*(e.pageY+A.y);this._rotateStart.set(n,t)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const A=this._getSecondPointerPosition(e),n=.5*(e.pageX+A.x),t=.5*(e.pageY+A.y);this._panStart.set(n,t)}}_handleTouchStartDolly(e){const A=this._getSecondPointerPosition(e),n=e.pageX-A.x,t=e.pageY-A.y,i=Math.sqrt(n*n+t*t);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const n=this._getSecondPointerPosition(e),t=.5*(e.pageX+n.x),i=.5*(e.pageY+n.y);this._rotateEnd.set(t,i)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const A=this.domElement;this._rotateLeft(Pe*this._rotateDelta.x/A.clientHeight),this._rotateUp(Pe*this._rotateDelta.y/A.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const A=this._getSecondPointerPosition(e),n=.5*(e.pageX+A.x),t=.5*(e.pageY+A.y);this._panEnd.set(n,t)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const A=this._getSecondPointerPosition(e),n=e.pageX-A.x,t=e.pageY-A.y,i=Math.sqrt(n*n+t*t);this._dollyEnd.set(0,i),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const s=(e.pageX+A.x)*.5,o=(e.pageY+A.y)*.5;this._updateZoomParameters(s,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let A=0;A<this._pointers.length;A++)if(this._pointers[A]==e.pointerId){this._pointers.splice(A,1);return}}_isTrackingPointer(e){for(let A=0;A<this._pointers.length;A++)if(this._pointers[A]==e.pointerId)return!0;return!1}_trackPointer(e){let A=this._pointerPositions[e.pointerId];A===void 0&&(A=new r.Vector2,this._pointerPositions[e.pointerId]=A),A.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const A=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[A]}_customWheelEvent(e){const A=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(A){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function Lr(a){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(a.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),window.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(a)&&(this._addPointer(a),a.pointerType==="touch"?this._onTouchStart(a):this._onMouseDown(a)))}function vr(a){this.enabled!==!1&&(a.pointerType==="touch"?this._onTouchMove(a):this._onMouseMove(a))}function Nr(a){switch(this._removePointer(a),this._pointers.length){case 0:this.domElement.releasePointerCapture(a.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),window.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(Oi),this.state=Ie.NONE;break;case 1:const e=this._pointers[0],A=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:A.x,pageY:A.y});break}}function Ur(a){let e;switch(a.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case r.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(a),this.state=Ie.DOLLY;break;case r.MOUSE.ROTATE:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=Ie.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=Ie.ROTATE}break;case r.MOUSE.PAN:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=Ie.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=Ie.PAN}break;default:this.state=Ie.NONE}this.state!==Ie.NONE&&this.dispatchEvent(cn)}function _r(a){switch(this.state){case Ie.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(a);break;case Ie.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(a);break;case Ie.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(a);break}}function Pr(a){this.enabled===!1||this.enableZoom===!1||this.state!==Ie.NONE||(a.preventDefault(),this.dispatchEvent(cn),this._handleMouseWheel(this._customWheelEvent(a)),this.dispatchEvent(Oi))}function Hr(a){this.enabled===!1||this.enablePan===!1||this._handleKeyDown(a)}function Or(a){switch(this._trackPointer(a),this._pointers.length){case 1:switch(this.touches.ONE){case r.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(a),this.state=Ie.TOUCH_ROTATE;break;case r.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(a),this.state=Ie.TOUCH_PAN;break;default:this.state=Ie.NONE}break;case 2:switch(this.touches.TWO){case r.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(a),this.state=Ie.TOUCH_DOLLY_PAN;break;case r.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(a),this.state=Ie.TOUCH_DOLLY_ROTATE;break;default:this.state=Ie.NONE}break;default:this.state=Ie.NONE}this.state!==Ie.NONE&&this.dispatchEvent(cn)}function qr(a){switch(this._trackPointer(a),this.state){case Ie.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(a),this.update();break;case Ie.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(a),this.update();break;case Ie.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(a),this.update();break;case Ie.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(a),this.update();break;default:this.state=Ie.NONE}}function Kr(a){this.enabled!==!1&&a.preventDefault()}function Yr(a){a.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Jr(a){a.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}class jr extends r.Line{constructor(e,A=1,n=16,t=2){const i=new r.BufferGeometry,s=n+t*2,o=new Float32Array((s*3+3)*3);i.setAttribute("position",new r.BufferAttribute(o,3));const c=new r.LineBasicMaterial({color:65280}),g=new r.LineBasicMaterial({color:16776960});super(i,[g,c]),this.audio=e,this.range=A,this.divisionsInnerAngle=n,this.divisionsOuterAngle=t,this.type="PositionalAudioHelper",this.update()}update(){const e=this.audio,A=this.range,n=this.divisionsInnerAngle,t=this.divisionsOuterAngle,i=r.MathUtils.degToRad(e.panner.coneInnerAngle),s=r.MathUtils.degToRad(e.panner.coneOuterAngle),o=i/2,c=s/2;let g=0,l=0,h,I;const B=this.geometry,f=B.attributes.position;B.clearGroups();function C(p,d,w,Q){const b=(d-p)/w;for(f.setXYZ(g,0,0,0),l++,h=p;h<d;h+=b)I=g+l,f.setXYZ(I,Math.sin(h)*A,0,Math.cos(h)*A),f.setXYZ(I+1,Math.sin(Math.min(h+b,d))*A,0,Math.cos(Math.min(h+b,d))*A),f.setXYZ(I+2,0,0,0),l+=3;B.addGroup(g,l,Q),g+=l,l=0}C(-c,-o,t,0),C(-o,o,n,1),C(o,c,t,0),f.needsUpdate=!0,i===s&&(this.material[0].visible=!1)}dispose(){this.geometry.dispose(),this.material[0].dispose(),this.material[1].dispose()}}const Vr={name:"HorizontalBlurShader",uniforms:{tDiffuse:{value:null},h:{value:1/512}},vertexShader:`
|
|
9
9
|
|
|
10
10
|
varying vec2 vUv;
|
|
11
11
|
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
#else
|
|
87
87
|
gl_FragColor = texture2D( blitTexture, vUv);
|
|
88
88
|
#endif
|
|
89
|
-
}`})),SA.uniforms.blitTexture.value=a,SA.defines.IS_SRGB=a.colorSpace==r.SRGBColorSpace,SA.needsUpdate=!0,nt||(nt=new r.Mesh(Lt,SA),nt.frustumCulled=!1);const n=new r.PerspectiveCamera,t=new r.Scene;t.add(nt),A===null&&(A=PA=new r.WebGLRenderer({antialias:!1}));const i=Math.min(a.image.width,e),s=Math.min(a.image.height,e);A.setSize(i,s),A.clear(),A.render(t,n);const o=document.createElement("canvas"),c=o.getContext("2d");o.width=i,o.height=s,c.drawImage(A.domElement,0,0,i,s);const g=new r.CanvasTexture(o);return g.minFilter=a.minFilter,g.magFilter=a.magFilter,g.wrapS=a.wrapS,g.wrapT=a.wrapT,g.colorSpace=a.colorSpace,g.name=a.name,PA&&(PA.forceContextLoss(),PA.dispose(),PA=null),g}const Hn={POSITION:["byte","byte normalized","unsigned byte","unsigned byte normalized","short","short normalized","unsigned short","unsigned short normalized"],NORMAL:["byte normalized","short normalized"],TANGENT:["byte normalized","short normalized"],TEXCOORD:["byte","byte normalized","unsigned byte","short","short normalized","unsigned short"]};class ln{constructor(){this.pluginCallbacks=[],this.register(function(e){return new sa(e)}),this.register(function(e){return new oa(e)}),this.register(function(e){return new ga(e)}),this.register(function(e){return new la(e)}),this.register(function(e){return new ha(e)}),this.register(function(e){return new Ia(e)}),this.register(function(e){return new ra(e)}),this.register(function(e){return new aa(e)}),this.register(function(e){return new ca(e)}),this.register(function(e){return new ua(e)}),this.register(function(e){return new Ba(e)}),this.register(function(e){return new fa(e)}),this.register(function(e){return new Ca(e)}),this.register(function(e){return new pa(e)})}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,A,n,t){const i=new ia,s=[];for(let o=0,c=this.pluginCallbacks.length;o<c;o++)s.push(this.pluginCallbacks[o](i));i.setPlugins(s),i.write(e,A,t).catch(n)}parseAsync(e,A){const n=this;return new Promise(function(t,i){n.parse(e,t,i,A)})}}const ce={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,REPEAT:10497},Nt="KHR_mesh_quantization",Ye={};Ye[r.NearestFilter]=ce.NEAREST;Ye[r.NearestMipmapNearestFilter]=ce.NEAREST_MIPMAP_NEAREST;Ye[r.NearestMipmapLinearFilter]=ce.NEAREST_MIPMAP_LINEAR;Ye[r.LinearFilter]=ce.LINEAR;Ye[r.LinearMipmapNearestFilter]=ce.LINEAR_MIPMAP_NEAREST;Ye[r.LinearMipmapLinearFilter]=ce.LINEAR_MIPMAP_LINEAR;Ye[r.ClampToEdgeWrapping]=ce.CLAMP_TO_EDGE;Ye[r.RepeatWrapping]=ce.REPEAT;Ye[r.MirroredRepeatWrapping]=ce.MIRRORED_REPEAT;const On={scale:"scale",position:"translation",quaternion:"rotation",morphTargetInfluences:"weights"},Xr=new r.Color,qn=12,Wr=1179937895,Zr=2,Kn=8,$r=1313821514,ea=5130562;function JA(a,e){return a.length===e.length&&a.every(function(A,n){return A===e[n]})}function Aa(a){return new TextEncoder().encode(a).buffer}function ta(a){return JA(a.elements,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function na(a,e,A){const n={min:new Array(a.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(a.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let t=e;t<e+A;t++)for(let i=0;i<a.itemSize;i++){let s;a.itemSize>4?s=a.array[t*a.itemSize+i]:(i===0?s=a.getX(t):i===1?s=a.getY(t):i===2?s=a.getZ(t):i===3&&(s=a.getW(t)),a.normalized===!0&&(s=r.MathUtils.normalize(s,a.array))),n.min[i]=Math.min(n.min[i],s),n.max[i]=Math.max(n.max[i],s)}return n}function qi(a){return Math.ceil(a/4)*4}function Ut(a,e=0){const A=qi(a.byteLength);if(A!==a.byteLength){const n=new Uint8Array(A);if(n.set(new Uint8Array(a)),e!==0)for(let t=a.byteLength;t<A;t++)n[t]=e;return n.buffer}return a}function Yn(){return typeof document>"u"&&typeof OffscreenCanvas<"u"?new OffscreenCanvas(1,1):document.createElement("canvas")}function Jn(a,e){if(a.toBlob!==void 0)return new Promise(n=>a.toBlob(n,e));let A;return e==="image/jpeg"?A=.92:e==="image/webp"&&(A=.8),a.convertToBlob({type:e,quality:A})}class ia{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.extensionsRequired={},this.uids=new Map,this.uid=0,this.json={asset:{version:"2.0",generator:"THREE.GLTFExporter r"+r.REVISION}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}async write(e,A,n={}){this.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(e),await Promise.all(this.pending);const t=this,i=t.buffers,s=t.json;n=t.options;const o=t.extensionsUsed,c=t.extensionsRequired,g=new Blob(i,{type:"application/octet-stream"}),l=Object.keys(o),h=Object.keys(c);if(l.length>0&&(s.extensionsUsed=l),h.length>0&&(s.extensionsRequired=h),s.buffers&&s.buffers.length>0&&(s.buffers[0].byteLength=g.size),n.binary===!0){const I=new FileReader;I.readAsArrayBuffer(g),I.onloadend=function(){const B=Ut(I.result),f=new DataView(new ArrayBuffer(Kn));f.setUint32(0,B.byteLength,!0),f.setUint32(4,ea,!0);const C=Ut(Aa(JSON.stringify(s)),32),E=new DataView(new ArrayBuffer(Kn));E.setUint32(0,C.byteLength,!0),E.setUint32(4,$r,!0);const d=new ArrayBuffer(qn),y=new DataView(d);y.setUint32(0,Wr,!0),y.setUint32(4,Zr,!0);const Q=qn+E.byteLength+C.byteLength+f.byteLength+B.byteLength;y.setUint32(8,Q,!0);const b=new Blob([d,E,C,f,B],{type:"application/octet-stream"}),w=new FileReader;w.readAsArrayBuffer(b),w.onloadend=function(){A(w.result)}}}else if(s.buffers&&s.buffers.length>0){const I=new FileReader;I.readAsDataURL(g),I.onloadend=function(){const B=I.result;s.buffers[0].uri=B,A(s)}}else A(s)}serializeUserData(e,A){if(Object.keys(e.userData).length===0)return;const n=this.options,t=this.extensionsUsed;try{const i=JSON.parse(JSON.stringify(e.userData));if(n.includeCustomExtensions&&i.gltfExtensions){A.extensions===void 0&&(A.extensions={});for(const s in i.gltfExtensions)A.extensions[s]=i.gltfExtensions[s],t[s]=!0;delete i.gltfExtensions}Object.keys(i).length>0&&(A.extras=i)}catch(i){console.warn("THREE.GLTFExporter: userData of '"+e.name+"' won't be serialized because of JSON.stringify error - "+i.message)}}getUID(e,A=!1){if(this.uids.has(e)===!1){const t=new Map;t.set(!0,this.uid++),t.set(!1,this.uid++),this.uids.set(e,t)}return this.uids.get(e).get(A)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;const n=new r.Vector3;for(let t=0,i=e.count;t<i;t++)if(Math.abs(n.fromBufferAttribute(e,t).length()-1)>5e-4)return!1;return!0}createNormalizedNormalAttribute(e){const A=this.cache;if(A.attributesNormalized.has(e))return A.attributesNormalized.get(e);const n=e.clone(),t=new r.Vector3;for(let i=0,s=n.count;i<s;i++)t.fromBufferAttribute(n,i),t.x===0&&t.y===0&&t.z===0?t.setX(1):t.normalize(),n.setXYZ(i,t.x,t.y,t.z);return A.attributesNormalized.set(e,n),n}applyTextureTransform(e,A){let n=!1;const t={};(A.offset.x!==0||A.offset.y!==0)&&(t.offset=A.offset.toArray(),n=!0),A.rotation!==0&&(t.rotation=A.rotation,n=!0),(A.repeat.x!==1||A.repeat.y!==1)&&(t.scale=A.repeat.toArray(),n=!0),n&&(e.extensions=e.extensions||{},e.extensions.KHR_texture_transform=t,this.extensionsUsed.KHR_texture_transform=!0)}buildMetalRoughTexture(e,A){if(e===A)return e;function n(B){return B.colorSpace===r.SRGBColorSpace?function(C){return C<.04045?C*.0773993808:Math.pow(C*.9478672986+.0521327014,2.4)}:function(C){return C}}console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."),e instanceof r.CompressedTexture&&(e=vt(e)),A instanceof r.CompressedTexture&&(A=vt(A));const t=e?e.image:null,i=A?A.image:null,s=Math.max(t?t.width:0,i?i.width:0),o=Math.max(t?t.height:0,i?i.height:0),c=Yn();c.width=s,c.height=o;const g=c.getContext("2d",{willReadFrequently:!0});g.fillStyle="#00ffff",g.fillRect(0,0,s,o);const l=g.getImageData(0,0,s,o);if(t){g.drawImage(t,0,0,s,o);const B=n(e),f=g.getImageData(0,0,s,o).data;for(let C=2;C<f.length;C+=4)l.data[C]=B(f[C]/256)*256}if(i){g.drawImage(i,0,0,s,o);const B=n(A),f=g.getImageData(0,0,s,o).data;for(let C=1;C<f.length;C+=4)l.data[C]=B(f[C]/256)*256}g.putImageData(l,0,0);const I=(e||A).clone();return I.source=new r.Source(c),I.colorSpace=r.NoColorSpace,I.channel=(e||A).channel,e&&A&&e.channel!==A.channel&&console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."),I}processBuffer(e){const A=this.json,n=this.buffers;return A.buffers||(A.buffers=[{byteLength:0}]),n.push(e),0}processBufferView(e,A,n,t,i){const s=this.json;s.bufferViews||(s.bufferViews=[]);let o;switch(A){case ce.BYTE:case ce.UNSIGNED_BYTE:o=1;break;case ce.SHORT:case ce.UNSIGNED_SHORT:o=2;break;default:o=4}let c=e.itemSize*o;i===ce.ARRAY_BUFFER&&(c=Math.ceil(c/4)*4);const g=qi(t*c),l=new DataView(new ArrayBuffer(g));let h=0;for(let f=n;f<n+t;f++){for(let C=0;C<e.itemSize;C++){let E;e.itemSize>4?E=e.array[f*e.itemSize+C]:(C===0?E=e.getX(f):C===1?E=e.getY(f):C===2?E=e.getZ(f):C===3&&(E=e.getW(f)),e.normalized===!0&&(E=r.MathUtils.normalize(E,e.array))),A===ce.FLOAT?l.setFloat32(h,E,!0):A===ce.INT?l.setInt32(h,E,!0):A===ce.UNSIGNED_INT?l.setUint32(h,E,!0):A===ce.SHORT?l.setInt16(h,E,!0):A===ce.UNSIGNED_SHORT?l.setUint16(h,E,!0):A===ce.BYTE?l.setInt8(h,E):A===ce.UNSIGNED_BYTE&&l.setUint8(h,E),h+=o}h%c!==0&&(h+=c-h%c)}const I={buffer:this.processBuffer(l.buffer),byteOffset:this.byteOffset,byteLength:g};return i!==void 0&&(I.target=i),i===ce.ARRAY_BUFFER&&(I.byteStride=c),this.byteOffset+=g,s.bufferViews.push(I),{id:s.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){const A=this,n=A.json;return n.bufferViews||(n.bufferViews=[]),new Promise(function(t){const i=new FileReader;i.readAsArrayBuffer(e),i.onloadend=function(){const s=Ut(i.result),o={buffer:A.processBuffer(s),byteOffset:A.byteOffset,byteLength:s.byteLength};A.byteOffset+=s.byteLength,t(n.bufferViews.push(o)-1)}})}processAccessor(e,A,n,t){const i=this.json,s={1:"SCALAR",2:"VEC2",3:"VEC3",4:"VEC4",9:"MAT3",16:"MAT4"};let o;if(e.array.constructor===Float32Array)o=ce.FLOAT;else if(e.array.constructor===Int32Array)o=ce.INT;else if(e.array.constructor===Uint32Array)o=ce.UNSIGNED_INT;else if(e.array.constructor===Int16Array)o=ce.SHORT;else if(e.array.constructor===Uint16Array)o=ce.UNSIGNED_SHORT;else if(e.array.constructor===Int8Array)o=ce.BYTE;else if(e.array.constructor===Uint8Array)o=ce.UNSIGNED_BYTE;else throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: "+e.array.constructor.name);if(n===void 0&&(n=0),(t===void 0||t===1/0)&&(t=e.count),t===0)return null;const c=na(e,n,t);let g;A!==void 0&&(g=e===A.index?ce.ELEMENT_ARRAY_BUFFER:ce.ARRAY_BUFFER);const l=this.processBufferView(e,o,n,t,g),h={bufferView:l.id,byteOffset:l.byteOffset,componentType:o,count:t,max:c.max,min:c.min,type:s[e.itemSize]};return e.normalized===!0&&(h.normalized=!0),i.accessors||(i.accessors=[]),i.accessors.push(h)-1}processImage(e,A,n,t="image/png"){if(e!==null){const i=this,s=i.cache,o=i.json,c=i.options,g=i.pending;s.images.has(e)||s.images.set(e,{});const l=s.images.get(e),h=t+":flipY/"+n.toString();if(l[h]!==void 0)return l[h];o.images||(o.images=[]);const I={mimeType:t},B=Yn();B.width=Math.min(e.width,c.maxTextureSize),B.height=Math.min(e.height,c.maxTextureSize);const f=B.getContext("2d",{willReadFrequently:!0});if(n===!0&&(f.translate(0,B.height),f.scale(1,-1)),e.data!==void 0){A!==r.RGBAFormat&&console.error("GLTFExporter: Only RGBAFormat is supported.",A),(e.width>c.maxTextureSize||e.height>c.maxTextureSize)&&console.warn("GLTFExporter: Image size is bigger than maxTextureSize",e);const E=new Uint8ClampedArray(e.height*e.width*4);for(let d=0;d<E.length;d+=4)E[d+0]=e.data[d+0],E[d+1]=e.data[d+1],E[d+2]=e.data[d+2],E[d+3]=e.data[d+3];f.putImageData(new ImageData(E,e.width,e.height),0,0)}else if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas)f.drawImage(e,0,0,B.width,B.height);else throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.");c.binary===!0?g.push(Jn(B,t).then(E=>i.processBufferViewImage(E)).then(E=>{I.bufferView=E})):B.toDataURL!==void 0?I.uri=B.toDataURL(t):g.push(Jn(B,t).then(E=>new FileReader().readAsDataURL(E)).then(E=>{I.uri=E}));const C=o.images.push(I)-1;return l[h]=C,C}else throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.")}processSampler(e){const A=this.json;A.samplers||(A.samplers=[]);const n={magFilter:Ye[e.magFilter],minFilter:Ye[e.minFilter],wrapS:Ye[e.wrapS],wrapT:Ye[e.wrapT]};return A.samplers.push(n)-1}processTexture(e){const n=this.options,t=this.cache,i=this.json;if(t.textures.has(e))return t.textures.get(e);const s={keep:!0,newTexture:null};if(this._invokeAll(function(l){l.beforeWriteTexture&&l.beforeWriteTexture(e,s)}),s.keep===!1)return null;s.newTexture!=null&&(e=s.newTexture),i.textures||(i.textures=[]),e instanceof r.CompressedTexture&&(e=vt(e,n.maxTextureSize));let o=e.userData.mimeType;o==="image/webp"&&(o="image/png");const c={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,o)};e.name&&(c.name=e.name),this._invokeAll(function(l){l.writeTexture&&l.writeTexture(e,c)});const g=i.textures.push(c)-1;return t.textures.set(e,g),g}processMaterial(e){const A=this.cache,n=this.json;if(A.materials.has(e))return A.materials.get(e);if(e.isShaderMaterial)return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."),null;n.materials||(n.materials=[]);const t={pbrMetallicRoughness:{}};e.isMeshStandardMaterial!==!0&&e.isMeshBasicMaterial!==!0&&console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");const i=e.color.toArray().concat([e.opacity]);JA(i,[1,1,1,1])||(t.pbrMetallicRoughness.baseColorFactor=i),e.isMeshStandardMaterial?(t.pbrMetallicRoughness.metallicFactor=e.metalness,t.pbrMetallicRoughness.roughnessFactor=e.roughness):(t.pbrMetallicRoughness.metallicFactor=.5,t.pbrMetallicRoughness.roughnessFactor=.5);const s=e.metalnessMap?.image?e.metalnessMap:void 0,o=e.roughnessMap?.image?e.roughnessMap:void 0;if(s||o){const g=this.buildMetalRoughTexture(s,o),l={index:this.processTexture(g),channel:g.channel};this.applyTextureTransform(l,g),t.pbrMetallicRoughness.metallicRoughnessTexture=l}if(e.map){const g={index:this.processTexture(e.map),texCoord:e.map.channel};this.applyTextureTransform(g,e.map),t.pbrMetallicRoughness.baseColorTexture=g}if(e.emissive){const g=e.emissive;if(Math.max(g.r,g.g,g.b)>0&&(t.emissiveFactor=e.emissive.toArray()),e.emissiveMap?.image){const h={index:this.processTexture(e.emissiveMap),texCoord:e.emissiveMap.channel};this.applyTextureTransform(h,e.emissiveMap),t.emissiveTexture=h}}if(e.normalMap?.image){const g={index:this.processTexture(e.normalMap),texCoord:e.normalMap.channel};e.normalScale&&e.normalScale.x!==1&&(g.scale=e.normalScale.x),this.applyTextureTransform(g,e.normalMap),t.normalTexture=g}if(e.aoMap?.image){const g={index:this.processTexture(e.aoMap),texCoord:e.aoMap.channel};e.aoMapIntensity!==1&&(g.strength=e.aoMapIntensity),this.applyTextureTransform(g,e.aoMap),t.occlusionTexture=g}e.transparent?t.alphaMode="BLEND":e.alphaTest>0&&(t.alphaMode="MASK",t.alphaCutoff=e.alphaTest),e.side===r.DoubleSide&&(t.doubleSided=!0),e.name!==""&&(t.name=e.name),this.serializeUserData(e,t),this._invokeAll(function(g){g.writeMaterial&&g.writeMaterial(e,t)});const c=n.materials.push(t)-1;return A.materials.set(e,c),c}processMesh(e){const A={keep:!0};if(this._invokeAll(function(w){w.beforeWriteMesh&&w.beforeWriteMesh(e,A)}),A.keep!=!0)return null;const n=this.cache,t=this.json,i=[e.geometry.uuid];if(Array.isArray(e.material))for(let w=0,R=e.material.length;w<R;w++)i.push(e.material[w].uuid);else i.push(e.material.uuid);const s=i.join(":");if(n.meshes.has(s))return n.meshes.get(s);const o=e.geometry;let c;e.isLineSegments?c=ce.LINES:e.isLineLoop?c=ce.LINE_LOOP:e.isLine?c=ce.LINE_STRIP:e.isPoints?c=ce.POINTS:c=e.material.wireframe?ce.LINES:ce.TRIANGLES;const g={},l={},h=[],I=[],B={uv:"TEXCOORD_0",uv1:"TEXCOORD_1",uv2:"TEXCOORD_2",uv3:"TEXCOORD_3",color:"COLOR_0",skinWeight:"WEIGHTS_0",skinIndex:"JOINTS_0"},f=o.getAttribute("normal");f!==void 0&&!this.isNormalizedNormalAttribute(f)&&(console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."),o.setAttribute("normal",this.createNormalizedNormalAttribute(f)));let C=null;for(let w in o.attributes){if(w.slice(0,5)==="morph")continue;const R=o.attributes[w];if(w=B[w]||w.toUpperCase(),/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/.test(w)||(w="_"+w),n.attributes.has(this.getUID(R))){l[w]=n.attributes.get(this.getUID(R));continue}C=null;const D=R.array;w==="JOINTS_0"&&!(D instanceof Uint16Array)&&!(D instanceof Uint8Array)&&(console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'),C=new r.BufferAttribute(new Uint16Array(D),R.itemSize,R.normalized));const M=this.processAccessor(C||R,o);M!==null&&(w.startsWith("_")||this.detectMeshQuantization(w,R),l[w]=M,n.attributes.set(this.getUID(R),M))}if(f!==void 0&&o.setAttribute("normal",f),Object.keys(l).length===0)return null;if(e.morphTargetInfluences!==void 0&&e.morphTargetInfluences.length>0){const w=[],R=[],F={};if(e.morphTargetDictionary!==void 0)for(const D in e.morphTargetDictionary)F[e.morphTargetDictionary[D]]=D;for(let D=0;D<e.morphTargetInfluences.length;++D){const M={};let N=!1;for(const _ in o.morphAttributes){if(_!=="position"&&_!=="normal"&&_!=="color"){N||(console.warn("GLTFExporter: Only POSITION, NORMAL and COLOR morph are supported."),N=!0);continue}const P=o.morphAttributes[_][D],z=_.toUpperCase()+(_==="color"?"_0":""),U=o.attributes[_];if(n.attributes.has(this.getUID(P,!0))){M[z]=n.attributes.get(this.getUID(P,!0));continue}const q=P.clone();if(!o.morphTargetsRelative)for(let H=0,Z=P.count;H<Z;H++)for(let se=0;se<P.itemSize;se++)se===0&&q.setX(H,P.getX(H)-U.getX(H)),se===1&&q.setY(H,P.getY(H)-U.getY(H)),se===2&&q.setZ(H,P.getZ(H)-U.getZ(H)),se===3&&q.setW(H,P.getW(H)-U.getW(H));M[z]=this.processAccessor(q,o),n.attributes.set(this.getUID(U,!0),M[z])}I.push(M),w.push(e.morphTargetInfluences[D]),e.morphTargetDictionary!==void 0&&R.push(F[D])}g.weights=w,R.length>0&&(g.extras={},g.extras.targetNames=R)}const E=Array.isArray(e.material);if(E&&o.groups.length===0)return null;let d=!1;if(E&&o.index===null){const w=[];for(let R=0,F=o.attributes.position.count;R<F;R++)w[R]=R;o.setIndex(w),d=!0}const y=E?e.material:[e.material],Q=E?o.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let w=0,R=Q.length;w<R;w++){const F={mode:c,attributes:l};if(this.serializeUserData(o,F),I.length>0&&(F.targets=I),o.index!==null){let M=this.getUID(o.index);(Q[w].start!==void 0||Q[w].count!==void 0)&&(M+=":"+Q[w].start+":"+Q[w].count),n.attributes.has(M)?F.indices=n.attributes.get(M):(F.indices=this.processAccessor(o.index,o,Q[w].start,Q[w].count),n.attributes.set(M,F.indices)),F.indices===null&&delete F.indices}const D=this.processMaterial(y[Q[w].materialIndex]);D!==null&&(F.material=D),h.push(F)}d===!0&&o.setIndex(null),g.primitives=h,t.meshes||(t.meshes=[]),this._invokeAll(function(w){w.writeMesh&&w.writeMesh(e,g)});const b=t.meshes.push(g)-1;return n.meshes.set(s,b),b}detectMeshQuantization(e,A){if(this.extensionsUsed[Nt])return;let n;switch(A.array.constructor){case Int8Array:n="byte";break;case Uint8Array:n="unsigned byte";break;case Int16Array:n="short";break;case Uint16Array:n="unsigned short";break;default:return}A.normalized&&(n+=" normalized");const t=e.split("_",1)[0];Hn[t]&&Hn[t].includes(n)&&(this.extensionsUsed[Nt]=!0,this.extensionsRequired[Nt]=!0)}processCamera(e){const A=this.json;A.cameras||(A.cameras=[]);const n=e.isOrthographicCamera,t={type:n?"orthographic":"perspective"};return n?t.orthographic={xmag:e.right*2,ymag:e.top*2,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:t.perspective={aspectRatio:e.aspect,yfov:r.MathUtils.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},e.name!==""&&(t.name=e.type),A.cameras.push(t)-1}processAnimation(e,A){const n=this.json,t=this.nodeMap;n.animations||(n.animations=[]),e=ln.Utils.mergeMorphTargetTracks(e.clone(),A);const i=e.tracks,s=[],o=[];for(let c=0;c<i.length;++c){const g=i[c],l=r.PropertyBinding.parseTrackName(g.name);let h=r.PropertyBinding.findNode(A,l.nodeName);const I=On[l.propertyName];if(l.objectName==="bones"&&(h.isSkinnedMesh===!0?h=h.skeleton.getBoneByName(l.objectIndex):h=void 0),!h||!I){console.warn('THREE.GLTFExporter: Could not export animation track "%s".',g.name);continue}const B=1;let f=g.values.length/g.times.length;I===On.morphTargetInfluences&&(f/=h.morphTargetInfluences.length);let C;g.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline===!0?(C="CUBICSPLINE",f/=3):g.getInterpolation()===r.InterpolateDiscrete?C="STEP":C="LINEAR",o.push({input:this.processAccessor(new r.BufferAttribute(g.times,B)),output:this.processAccessor(new r.BufferAttribute(g.values,f)),interpolation:C}),s.push({sampler:o.length-1,target:{node:t.get(h),path:I}})}return n.animations.push({name:e.name||"clip_"+n.animations.length,samplers:o,channels:s}),n.animations.length-1}processSkin(e){const A=this.json,n=this.nodeMap,t=A.nodes[n.get(e)],i=e.skeleton;if(i===void 0)return null;const s=e.skeleton.bones[0];if(s===void 0)return null;const o=[],c=new Float32Array(i.bones.length*16),g=new r.Matrix4;for(let h=0;h<i.bones.length;++h)o.push(n.get(i.bones[h])),g.copy(i.boneInverses[h]),g.multiply(e.bindMatrix).toArray(c,h*16);return A.skins===void 0&&(A.skins=[]),A.skins.push({inverseBindMatrices:this.processAccessor(new r.BufferAttribute(c,16)),joints:o,skeleton:n.get(s)}),t.skin=A.skins.length-1}processNode(e){const A={keep:!0};if(this._invokeAll(function(c){c.beforeWriteNode&&c.beforeWriteNode(e,A)}),A.keep!=!0)return null;const n=this.json,t=this.options,i=this.nodeMap;n.nodes||(n.nodes=[]);const s={};if(t.trs){const c=e.quaternion.toArray(),g=e.position.toArray(),l=e.scale.toArray();JA(c,[0,0,0,1])||(s.rotation=c),JA(g,[0,0,0])||(s.translation=g),JA(l,[1,1,1])||(s.scale=l)}else e.matrixAutoUpdate&&e.updateMatrix(),ta(e.matrix)===!1&&(s.matrix=e.matrix.elements);if(e.name!==""&&(s.name=String(e.name)),this.serializeUserData(e,s),e.isMesh||e.isLine||e.isPoints){const c=this.processMesh(e);c!==null&&(s.mesh=c)}else e.isCamera&&(s.camera=this.processCamera(e));if(e.isSkinnedMesh&&this.skins.push(e),e.children.length>0){const c=[];for(let g=0,l=e.children.length;g<l;g++){const h=e.children[g];if(h.visible||t.onlyVisible===!1){const I=this.processNode(h);I!==null&&c.push(I)}}c.length>0&&(s.children=c)}this._invokeAll(function(c){c.writeNode&&c.writeNode(e,s)});const o=n.nodes.push(s)-1;return i.set(e,o),o}processScene(e){const A=this.json,n=this.options;A.scenes||(A.scenes=[],A.scene=0);const t={};e.name!==""&&(t.name=e.name),A.scenes.push(t);const i=[];for(let s=0,o=e.children.length;s<o;s++){const c=e.children[s];if(c.visible||n.onlyVisible===!1){const g=this.processNode(c);g!==null&&i.push(g)}}i.length>0&&(t.nodes=i),this.serializeUserData(e,t)}processObjects(e){const A=new r.Scene;A.name="AuxScene";for(let n=0;n<e.length;n++)A.children.push(e[n]);this.processScene(A)}processInput(e){const A=this.options;e=e instanceof Array?e:[e],this._invokeAll(function(t){t.beforeParse&&t.beforeParse(e)});const n=[];for(let t=0;t<e.length;t++)e[t]instanceof r.Scene?this.processScene(e[t]):n.push(e[t]);n.length>0&&this.processObjects(n);for(let t=0;t<this.skins.length;++t)this.processSkin(this.skins[t]);for(let t=0;t<A.animations.length;++t)this.processAnimation(A.animations[t],e[0]);this._invokeAll(function(t){t.afterParse&&t.afterParse(e)})}_invokeAll(e){for(let A=0,n=this.plugins.length;A<n;A++)e(this.plugins[A])}}class sa{constructor(e){this.writer=e,this.name="KHR_lights_punctual"}writeNode(e,A){if(!e.isLight)return;if(!e.isDirectionalLight&&!e.isPointLight&&!e.isSpotLight){console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.",e);return}const n=this.writer,t=n.json,i=n.extensionsUsed,s={};e.name&&(s.name=e.name),s.color=e.color.toArray(),s.intensity=e.intensity,e.isDirectionalLight?s.type="directional":e.isPointLight?(s.type="point",e.distance>0&&(s.range=e.distance)):e.isSpotLight&&(s.type="spot",e.distance>0&&(s.range=e.distance),s.spot={},s.spot.innerConeAngle=(1-e.penumbra)*e.angle,s.spot.outerConeAngle=e.angle),e.decay!==void 0&&e.decay!==2&&console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."),e.target&&(e.target.parent!==e||e.target.position.x!==0||e.target.position.y!==0||e.target.position.z!==-1)&&console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."),i[this.name]||(t.extensions=t.extensions||{},t.extensions[this.name]={lights:[]},i[this.name]=!0);const o=t.extensions[this.name].lights;o.push(s),A.extensions=A.extensions||{},A.extensions[this.name]={light:o.length-1}}}class oa{constructor(e){this.writer=e,this.name="KHR_materials_unlit"}writeMaterial(e,A){if(!e.isMeshBasicMaterial)return;const t=this.writer.extensionsUsed;A.extensions=A.extensions||{},A.extensions[this.name]={},t[this.name]=!0,A.pbrMetallicRoughness.metallicFactor=0,A.pbrMetallicRoughness.roughnessFactor=.9}}class ra{constructor(e){this.writer=e,this.name="KHR_materials_clearcoat"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.clearcoat===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.clearcoatFactor=e.clearcoat,e.clearcoatMap){const s={index:n.processTexture(e.clearcoatMap),texCoord:e.clearcoatMap.channel};n.applyTextureTransform(s,e.clearcoatMap),i.clearcoatTexture=s}if(i.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){const s={index:n.processTexture(e.clearcoatRoughnessMap),texCoord:e.clearcoatRoughnessMap.channel};n.applyTextureTransform(s,e.clearcoatRoughnessMap),i.clearcoatRoughnessTexture=s}if(e.clearcoatNormalMap){const s={index:n.processTexture(e.clearcoatNormalMap),texCoord:e.clearcoatNormalMap.channel};e.clearcoatNormalScale.x!==1&&(s.scale=e.clearcoatNormalScale.x),n.applyTextureTransform(s,e.clearcoatNormalMap),i.clearcoatNormalTexture=s}A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class aa{constructor(e){this.writer=e,this.name="KHR_materials_dispersion"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.dispersion===0)return;const t=this.writer.extensionsUsed,i={};i.dispersion=e.dispersion,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ca{constructor(e){this.writer=e,this.name="KHR_materials_iridescence"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.iridescence===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.iridescenceFactor=e.iridescence,e.iridescenceMap){const s={index:n.processTexture(e.iridescenceMap),texCoord:e.iridescenceMap.channel};n.applyTextureTransform(s,e.iridescenceMap),i.iridescenceTexture=s}if(i.iridescenceIor=e.iridescenceIOR,i.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],i.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){const s={index:n.processTexture(e.iridescenceThicknessMap),texCoord:e.iridescenceThicknessMap.channel};n.applyTextureTransform(s,e.iridescenceThicknessMap),i.iridescenceThicknessTexture=s}A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ga{constructor(e){this.writer=e,this.name="KHR_materials_transmission"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.transmissionFactor=e.transmission,e.transmissionMap){const s={index:n.processTexture(e.transmissionMap),texCoord:e.transmissionMap.channel};n.applyTextureTransform(s,e.transmissionMap),i.transmissionTexture=s}A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class la{constructor(e){this.writer=e,this.name="KHR_materials_volume"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.thicknessFactor=e.thickness,e.thicknessMap){const s={index:n.processTexture(e.thicknessMap),texCoord:e.thicknessMap.channel};n.applyTextureTransform(s,e.thicknessMap),i.thicknessTexture=s}e.attenuationDistance!==1/0&&(i.attenuationDistance=e.attenuationDistance),i.attenuationColor=e.attenuationColor.toArray(),A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ha{constructor(e){this.writer=e,this.name="KHR_materials_ior"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.ior===1.5)return;const t=this.writer.extensionsUsed,i={};i.ior=e.ior,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ia{constructor(e){this.writer=e,this.name="KHR_materials_specular"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.specularIntensity===1&&e.specularColor.equals(Xr)&&!e.specularIntensityMap&&!e.specularColorMap)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.specularIntensityMap){const s={index:n.processTexture(e.specularIntensityMap),texCoord:e.specularIntensityMap.channel};n.applyTextureTransform(s,e.specularIntensityMap),i.specularTexture=s}if(e.specularColorMap){const s={index:n.processTexture(e.specularColorMap),texCoord:e.specularColorMap.channel};n.applyTextureTransform(s,e.specularColorMap),i.specularColorTexture=s}i.specularFactor=e.specularIntensity,i.specularColorFactor=e.specularColor.toArray(),A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ua{constructor(e){this.writer=e,this.name="KHR_materials_sheen"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.sheen==0)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.sheenRoughnessMap){const s={index:n.processTexture(e.sheenRoughnessMap),texCoord:e.sheenRoughnessMap.channel};n.applyTextureTransform(s,e.sheenRoughnessMap),i.sheenRoughnessTexture=s}if(e.sheenColorMap){const s={index:n.processTexture(e.sheenColorMap),texCoord:e.sheenColorMap.channel};n.applyTextureTransform(s,e.sheenColorMap),i.sheenColorTexture=s}i.sheenRoughnessFactor=e.sheenRoughness,i.sheenColorFactor=e.sheenColor.toArray(),A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ba{constructor(e){this.writer=e,this.name="KHR_materials_anisotropy"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.anisotropy==0)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.anisotropyMap){const s={index:n.processTexture(e.anisotropyMap)};n.applyTextureTransform(s,e.anisotropyMap),i.anisotropyTexture=s}i.anisotropyStrength=e.anisotropy,i.anisotropyRotation=e.anisotropyRotation,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class fa{constructor(e){this.writer=e,this.name="KHR_materials_emissive_strength"}writeMaterial(e,A){if(!e.isMeshStandardMaterial||e.emissiveIntensity===1)return;const t=this.writer.extensionsUsed,i={};i.emissiveStrength=e.emissiveIntensity,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ca{constructor(e){this.writer=e,this.name="EXT_materials_bump"}writeMaterial(e,A){if(!e.isMeshStandardMaterial||e.bumpScale===1&&!e.bumpMap)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.bumpMap){const s={index:n.processTexture(e.bumpMap),texCoord:e.bumpMap.channel};n.applyTextureTransform(s,e.bumpMap),i.bumpTexture=s}i.bumpFactor=e.bumpScale,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class pa{constructor(e){this.writer=e,this.name="EXT_mesh_gpu_instancing"}writeNode(e,A){if(!e.isInstancedMesh)return;const n=this.writer,t=e,i=new Float32Array(t.count*3),s=new Float32Array(t.count*4),o=new Float32Array(t.count*3),c=new r.Matrix4,g=new r.Vector3,l=new r.Quaternion,h=new r.Vector3;for(let B=0;B<t.count;B++)t.getMatrixAt(B,c),c.decompose(g,l,h),g.toArray(i,B*3),l.toArray(s,B*4),h.toArray(o,B*3);const I={TRANSLATION:n.processAccessor(new r.BufferAttribute(i,3)),ROTATION:n.processAccessor(new r.BufferAttribute(s,4)),SCALE:n.processAccessor(new r.BufferAttribute(o,3))};t.instanceColor&&(I._COLOR_0=n.processAccessor(t.instanceColor)),A.extensions=A.extensions||{},A.extensions[this.name]={attributes:I},n.extensionsUsed[this.name]=!0,n.extensionsRequired[this.name]=!0}}ln.Utils={insertKeyframe:function(a,e){const n=a.getValueSize(),t=new a.TimeBufferType(a.times.length+1),i=new a.ValueBufferType(a.values.length+n),s=a.createInterpolant(new a.ValueBufferType(n));let o;if(a.times.length===0){t[0]=e;for(let c=0;c<n;c++)i[c]=0;o=0}else if(e<a.times[0]){if(Math.abs(a.times[0]-e)<.001)return 0;t[0]=e,t.set(a.times,1),i.set(s.evaluate(e),0),i.set(a.values,n),o=0}else if(e>a.times[a.times.length-1]){if(Math.abs(a.times[a.times.length-1]-e)<.001)return a.times.length-1;t[t.length-1]=e,t.set(a.times,0),i.set(a.values,0),i.set(s.evaluate(e),a.values.length),o=t.length-1}else for(let c=0;c<a.times.length;c++){if(Math.abs(a.times[c]-e)<.001)return c;if(a.times[c]<e&&a.times[c+1]>e){t.set(a.times.slice(0,c+1),0),t[c+1]=e,t.set(a.times.slice(c+1),c+2),i.set(a.values.slice(0,(c+1)*n),0),i.set(s.evaluate(e),(c+1)*n),i.set(a.values.slice((c+1)*n),(c+2)*n),o=c+1;break}}return a.times=t,a.values=i,o},mergeMorphTargetTracks:function(a,e){const A=[],n={},t=a.tracks;for(let i=0;i<t.length;++i){let s=t[i];const o=r.PropertyBinding.parseTrackName(s.name),c=r.PropertyBinding.findNode(e,o.nodeName);if(o.propertyName!=="morphTargetInfluences"||o.propertyIndex===void 0){A.push(s);continue}if(s.createInterpolant!==s.InterpolantFactoryMethodDiscrete&&s.createInterpolant!==s.InterpolantFactoryMethodLinear){if(s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."),s=s.clone(),s.setInterpolation(r.InterpolateLinear)}const g=c.morphTargetInfluences.length,l=c.morphTargetDictionary[o.propertyIndex];if(l===void 0)throw new Error("THREE.GLTFExporter: Morph target name not found: "+o.propertyIndex);let h;if(n[c.uuid]===void 0){h=s.clone();const B=new h.ValueBufferType(g*h.times.length);for(let f=0;f<h.times.length;f++)B[f*g+l]=h.values[f];h.name=(o.nodeName||"")+".morphTargetInfluences",h.values=B,n[c.uuid]=h,A.push(h);continue}const I=s.createInterpolant(new s.ValueBufferType(1));h=n[c.uuid];for(let B=0;B<h.times.length;B++)h.values[B*g+l]=I.evaluate(h.times[B]);for(let B=0;B<s.times.length;B++){const f=this.insertKeyframe(h,s.times[B]);h.values[f*g+l]=s.values[B]}}return a.tracks=A,a}};const me={ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ComponentType:Object.freeze({TRIGGER:"trigger",SQUEEZE:"squeeze",TOUCHPAD:"touchpad",THUMBSTICK:"thumbstick",BUTTON:"button"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function Ki(a){const e=await fetch(a);if(e.ok)return e.json();throw new Error(e.statusText)}async function Ea(a){if(!a)throw new Error("No basePath supplied");return await Ki(`${a}/profilesList.json`)}async function da(a,e,A=null,n=!0){if(!a)throw new Error("No xrInputSource supplied");if(!e)throw new Error("No basePath supplied");const t=await Ea(e);let i;if(a.profiles.some(c=>{const g=t[c];return g&&(i={profileId:c,profilePath:`${e}/${g.path}`,deprecated:!!g.deprecated}),!!i}),!i){if(!A)throw new Error("No matching profile name found");const c=t[A];if(!c)throw new Error(`No matching profile name found and default profile "${A}" missing.`);i={profileId:A,profilePath:`${e}/${c.path}`,deprecated:!!c.deprecated}}const s=await Ki(i.profilePath);let o;if(n){let c;if(a.handedness==="any"?c=s.layouts[Object.keys(s.layouts)[0]]:c=s.layouts[a.handedness],!c)throw new Error(`No matching handedness, ${a.handedness}, in profile ${i.profileId}`);c.assetPath&&(o=i.profilePath.replace("profile.json",c.assetPath))}return{profile:s,assetPath:o}}const Qa={xAxis:0,yAxis:0,button:0,state:me.ComponentState.DEFAULT};function ma(a=0,e=0){let A=a,n=e;if(Math.sqrt(a*a+e*e)>1){const s=Math.atan2(e,a);A=Math.cos(s),n=Math.sin(s)}return{normalizedXAxis:A*.5+.5,normalizedYAxis:n*.5+.5}}class ba{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===me.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(Qa)}updateFromComponent({xAxis:e,yAxis:A,button:n,state:t}){const{normalizedXAxis:i,normalizedYAxis:s}=ma(e,A);switch(this.componentProperty){case me.ComponentProperty.X_AXIS:this.value=this.states.includes(t)?i:.5;break;case me.ComponentProperty.Y_AXIS:this.value=this.states.includes(t)?s:.5;break;case me.ComponentProperty.BUTTON:this.value=this.states.includes(t)?n:0;break;case me.ComponentProperty.STATE:this.valueNodeProperty===me.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(t):this.value=this.states.includes(t)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class ya{constructor(e,A){if(!e||!A||!A.visualResponses||!A.gamepadIndices||Object.keys(A.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=e,this.type=A.type,this.rootNodeName=A.rootNodeName,this.touchPointNodeName=A.touchPointNodeName,this.visualResponses={},Object.keys(A.visualResponses).forEach(n=>{const t=new ba(A.visualResponses[n]);this.visualResponses[n]=t}),this.gamepadIndices=Object.assign({},A.gamepadIndices),this.values={state:me.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(e){if(this.values.state=me.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){const A=e.buttons[this.gamepadIndices.button];this.values.button=A.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,A.pressed||this.values.button===1?this.values.state=me.ComponentState.PRESSED:(A.touched||this.values.button>me.ButtonTouchThreshold)&&(this.values.state=me.ComponentState.TOUCHED)}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===me.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>me.AxisTouchThreshold&&(this.values.state=me.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===me.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>me.AxisTouchThreshold&&(this.values.state=me.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(A=>{A.updateFromComponent(this.values)})}}class wa{constructor(e,A,n){if(!e)throw new Error("No xrInputSource supplied");if(!A)throw new Error("No profile supplied");this.xrInputSource=e,this.assetUrl=n,this.id=A.profileId,this.layoutDescription=A.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(t=>{const i=this.layoutDescription.components[t];this.components[t]=new ya(t,i)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const e=[];return Object.values(this.components).forEach(A=>{e.push(A.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}}const Da="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",Sa="generic-trigger";class xa extends r.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(A=>{A.isMesh&&(A.material.envMap=this.envMap,A.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(A=>{Object.values(A.visualResponses).forEach(n=>{const{valueNode:t,minNode:i,maxNode:s,value:o,valueNodeProperty:c}=n;t&&(c===me.VisualResponseProperty.VISIBILITY?t.visible=o:c===me.VisualResponseProperty.TRANSFORM&&(t.quaternion.slerpQuaternions(i.quaternion,s.quaternion,o),t.position.lerpVectors(i.position,s.position,o)))})}))}}function Ma(a,e){Object.values(a.components).forEach(A=>{const{type:n,touchPointNodeName:t,visualResponses:i}=A;if(n===me.ComponentType.TOUCHPAD)if(A.touchPointNode=e.getObjectByName(t),A.touchPointNode){const s=new r.SphereGeometry(.001),o=new r.MeshBasicMaterial({color:255}),c=new r.Mesh(s,o);A.touchPointNode.add(c)}else console.warn(`Could not find touch dot, ${A.touchPointNodeName}, in touchpad component ${A.id}`);Object.values(i).forEach(s=>{const{valueNodeName:o,minNodeName:c,maxNodeName:g,valueNodeProperty:l}=s;if(l===me.VisualResponseProperty.TRANSFORM){if(s.minNode=e.getObjectByName(c),s.maxNode=e.getObjectByName(g),!s.minNode){console.warn(`Could not find ${c} in the model`);return}if(!s.maxNode){console.warn(`Could not find ${g} in the model`);return}}s.valueNode=e.getObjectByName(o),s.valueNode||console.warn(`Could not find ${o} in the model`)})})}function jn(a,e){Ma(a.motionController,e),a.envMap&&e.traverse(A=>{A.isMesh&&(A.material.envMap=a.envMap,A.material.needsUpdate=!0)}),a.layers.mask!=0&&e.traverse(A=>{A.layers.mask=a.layers.mask}),a.add(e)}class Fa{constructor(e=null,A=null){this.gltfLoader=e,this.path=Da,this._assetCache={},this.onLoad=A,this.gltfLoader||(this.gltfLoader=new sn)}setPath(e){return this.path=e,this}createControllerModel(e){const A=new xa;let n=null;return e.addEventListener("connected",t=>{const i=t.data;i.targetRayMode!=="tracked-pointer"||!i.gamepad||i.hand||da(i,this.path,Sa).then(({profile:s,assetPath:o})=>{A.motionController=new wa(i,s,o);const c=this._assetCache[A.motionController.assetUrl];if(c)n=c.scene.clone(),jn(A,n),this.onLoad&&this.onLoad(n);else{if(!this.gltfLoader)throw new Error("GLTFLoader not set.");this.gltfLoader.setPath(""),this.gltfLoader.load(A.motionController.assetUrl,g=>{this._assetCache[A.motionController.assetUrl]=g,n=g.scene.clone(),jn(A,n),this.onLoad&&this.onLoad(n)},null,()=>{throw new Error(`Asset ${A.motionController.assetUrl} missing or malformed.`)})}}).catch(s=>{console.warn(s)})}),e.addEventListener("disconnected",()=>{A.motionController=null,A.remove(n),n=null}),A}}const Ra="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/";class Ga{constructor(e,A,n,t,i=null,s=null){this.controller=A,this.handModel=e,this.bones=[],i===null&&(i=new sn,i.setPath(n||Ra)),i.load(`${t}.glb`,o=>{const c=o.scene.children[0];this.handModel.add(c),c.layers.mask=this.handModel.layers.mask;const g=c.getObjectByProperty("type","SkinnedMesh");g.frustumCulled=!1,g.castShadow=!0,g.receiveShadow=!0,["wrist","thumb-metacarpal","thumb-phalanx-proximal","thumb-phalanx-distal","thumb-tip","index-finger-metacarpal","index-finger-phalanx-proximal","index-finger-phalanx-intermediate","index-finger-phalanx-distal","index-finger-tip","middle-finger-metacarpal","middle-finger-phalanx-proximal","middle-finger-phalanx-intermediate","middle-finger-phalanx-distal","middle-finger-tip","ring-finger-metacarpal","ring-finger-phalanx-proximal","ring-finger-phalanx-intermediate","ring-finger-phalanx-distal","ring-finger-tip","pinky-finger-metacarpal","pinky-finger-phalanx-proximal","pinky-finger-phalanx-intermediate","pinky-finger-phalanx-distal","pinky-finger-tip"].forEach(h=>{const I=c.getObjectByName(h);I!==void 0?I.jointName=h:console.warn(`Couldn't find ${h} in ${t} hand mesh`),this.bones.push(I)}),s&&s(c)})}updateMesh(){const e=this.controller.joints;for(let A=0;A<this.bones.length;A++){const n=this.bones[A];if(n){const t=e[n.jointName];if(t.visible){const i=t.position;n.position.copy(i),n.quaternion.copy(t.quaternion)}}}}}const Vn=new r.Box3,it=new r.Vector3;class Yi extends r.InstancedBufferGeometry{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";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],A=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],n=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(n),this.setAttribute("position",new r.Float32BufferAttribute(e,3)),this.setAttribute("uv",new r.Float32BufferAttribute(A,2))}applyMatrix4(e){const A=this.attributes.instanceStart,n=this.attributes.instanceEnd;return A!==void 0&&(A.applyMatrix4(e),n.applyMatrix4(e),A.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let A;e instanceof Float32Array?A=e:Array.isArray(e)&&(A=new Float32Array(e));const n=new r.InstancedInterleavedBuffer(A,6,1);return this.setAttribute("instanceStart",new r.InterleavedBufferAttribute(n,3,0)),this.setAttribute("instanceEnd",new r.InterleavedBufferAttribute(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let A;e instanceof Float32Array?A=e:Array.isArray(e)&&(A=new Float32Array(e));const n=new r.InstancedInterleavedBuffer(A,6,1);return this.setAttribute("instanceColorStart",new r.InterleavedBufferAttribute(n,3,0)),this.setAttribute("instanceColorEnd",new r.InterleavedBufferAttribute(n,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new r.WireframeGeometry(e.geometry)),this}fromLineSegments(e){const A=e.geometry;return this.setPositions(A.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new r.Box3);const e=this.attributes.instanceStart,A=this.attributes.instanceEnd;e!==void 0&&A!==void 0&&(this.boundingBox.setFromBufferAttribute(e),Vn.setFromBufferAttribute(A),this.boundingBox.union(Vn))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new r.Sphere),this.boundingBox===null&&this.computeBoundingBox();const e=this.attributes.instanceStart,A=this.attributes.instanceEnd;if(e!==void 0&&A!==void 0){const n=this.boundingSphere.center;this.boundingBox.getCenter(n);let t=0;for(let i=0,s=e.count;i<s;i++)it.fromBufferAttribute(e,i),t=Math.max(t,n.distanceToSquared(it)),it.fromBufferAttribute(A,i),t=Math.max(t,n.distanceToSquared(it));this.boundingSphere.radius=Math.sqrt(t),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}applyMatrix(e){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(e)}}r.UniformsLib.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new r.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}};r.ShaderLib.line={uniforms:r.UniformsUtils.merge([r.UniformsLib.common,r.UniformsLib.fog,r.UniformsLib.line]),vertexShader:`
|
|
89
|
+
}`})),SA.uniforms.blitTexture.value=a,SA.defines.IS_SRGB=a.colorSpace==r.SRGBColorSpace,SA.needsUpdate=!0,nt||(nt=new r.Mesh(Lt,SA),nt.frustumCulled=!1);const n=new r.PerspectiveCamera,t=new r.Scene;t.add(nt),A===null&&(A=PA=new r.WebGLRenderer({antialias:!1}));const i=Math.min(a.image.width,e),s=Math.min(a.image.height,e);A.setSize(i,s),A.clear(),A.render(t,n);const o=document.createElement("canvas"),c=o.getContext("2d");o.width=i,o.height=s,c.drawImage(A.domElement,0,0,i,s);const g=new r.CanvasTexture(o);return g.minFilter=a.minFilter,g.magFilter=a.magFilter,g.wrapS=a.wrapS,g.wrapT=a.wrapT,g.colorSpace=a.colorSpace,g.name=a.name,PA&&(PA.forceContextLoss(),PA.dispose(),PA=null),g}const Pn={POSITION:["byte","byte normalized","unsigned byte","unsigned byte normalized","short","short normalized","unsigned short","unsigned short normalized"],NORMAL:["byte normalized","short normalized"],TANGENT:["byte normalized","short normalized"],TEXCOORD:["byte","byte normalized","unsigned byte","short","short normalized","unsigned short"]};class gn{constructor(){this.pluginCallbacks=[],this.register(function(e){return new sa(e)}),this.register(function(e){return new oa(e)}),this.register(function(e){return new ga(e)}),this.register(function(e){return new la(e)}),this.register(function(e){return new ha(e)}),this.register(function(e){return new Ia(e)}),this.register(function(e){return new ra(e)}),this.register(function(e){return new aa(e)}),this.register(function(e){return new ca(e)}),this.register(function(e){return new ua(e)}),this.register(function(e){return new Ba(e)}),this.register(function(e){return new fa(e)}),this.register(function(e){return new Ca(e)}),this.register(function(e){return new Ea(e)})}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,A,n,t){const i=new ia,s=[];for(let o=0,c=this.pluginCallbacks.length;o<c;o++)s.push(this.pluginCallbacks[o](i));i.setPlugins(s),i.write(e,A,t).catch(n)}parseAsync(e,A){const n=this;return new Promise(function(t,i){n.parse(e,t,i,A)})}}const ce={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,REPEAT:10497},Nt="KHR_mesh_quantization",Ye={};Ye[r.NearestFilter]=ce.NEAREST;Ye[r.NearestMipmapNearestFilter]=ce.NEAREST_MIPMAP_NEAREST;Ye[r.NearestMipmapLinearFilter]=ce.NEAREST_MIPMAP_LINEAR;Ye[r.LinearFilter]=ce.LINEAR;Ye[r.LinearMipmapNearestFilter]=ce.LINEAR_MIPMAP_NEAREST;Ye[r.LinearMipmapLinearFilter]=ce.LINEAR_MIPMAP_LINEAR;Ye[r.ClampToEdgeWrapping]=ce.CLAMP_TO_EDGE;Ye[r.RepeatWrapping]=ce.REPEAT;Ye[r.MirroredRepeatWrapping]=ce.MIRRORED_REPEAT;const Hn={scale:"scale",position:"translation",quaternion:"rotation",morphTargetInfluences:"weights"},Xr=new r.Color,On=12,Wr=1179937895,Zr=2,qn=8,$r=1313821514,ea=5130562;function JA(a,e){return a.length===e.length&&a.every(function(A,n){return A===e[n]})}function Aa(a){return new TextEncoder().encode(a).buffer}function ta(a){return JA(a.elements,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function na(a,e,A){const n={min:new Array(a.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(a.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let t=e;t<e+A;t++)for(let i=0;i<a.itemSize;i++){let s;a.itemSize>4?s=a.array[t*a.itemSize+i]:(i===0?s=a.getX(t):i===1?s=a.getY(t):i===2?s=a.getZ(t):i===3&&(s=a.getW(t)),a.normalized===!0&&(s=r.MathUtils.normalize(s,a.array))),n.min[i]=Math.min(n.min[i],s),n.max[i]=Math.max(n.max[i],s)}return n}function qi(a){return Math.ceil(a/4)*4}function Ut(a,e=0){const A=qi(a.byteLength);if(A!==a.byteLength){const n=new Uint8Array(A);if(n.set(new Uint8Array(a)),e!==0)for(let t=a.byteLength;t<A;t++)n[t]=e;return n.buffer}return a}function Kn(){return typeof document>"u"&&typeof OffscreenCanvas<"u"?new OffscreenCanvas(1,1):document.createElement("canvas")}function Yn(a,e){if(a.toBlob!==void 0)return new Promise(n=>a.toBlob(n,e));let A;return e==="image/jpeg"?A=.92:e==="image/webp"&&(A=.8),a.convertToBlob({type:e,quality:A})}class ia{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.extensionsRequired={},this.uids=new Map,this.uid=0,this.json={asset:{version:"2.0",generator:"THREE.GLTFExporter r"+r.REVISION}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}async write(e,A,n={}){this.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(e),await Promise.all(this.pending);const t=this,i=t.buffers,s=t.json;n=t.options;const o=t.extensionsUsed,c=t.extensionsRequired,g=new Blob(i,{type:"application/octet-stream"}),l=Object.keys(o),h=Object.keys(c);if(l.length>0&&(s.extensionsUsed=l),h.length>0&&(s.extensionsRequired=h),s.buffers&&s.buffers.length>0&&(s.buffers[0].byteLength=g.size),n.binary===!0){const I=new FileReader;I.readAsArrayBuffer(g),I.onloadend=function(){const B=Ut(I.result),f=new DataView(new ArrayBuffer(qn));f.setUint32(0,B.byteLength,!0),f.setUint32(4,ea,!0);const C=Ut(Aa(JSON.stringify(s)),32),p=new DataView(new ArrayBuffer(qn));p.setUint32(0,C.byteLength,!0),p.setUint32(4,$r,!0);const d=new ArrayBuffer(On),w=new DataView(d);w.setUint32(0,Wr,!0),w.setUint32(4,Zr,!0);const Q=On+p.byteLength+C.byteLength+f.byteLength+B.byteLength;w.setUint32(8,Q,!0);const b=new Blob([d,p,C,f,B],{type:"application/octet-stream"}),y=new FileReader;y.readAsArrayBuffer(b),y.onloadend=function(){A(y.result)}}}else if(s.buffers&&s.buffers.length>0){const I=new FileReader;I.readAsDataURL(g),I.onloadend=function(){const B=I.result;s.buffers[0].uri=B,A(s)}}else A(s)}serializeUserData(e,A){if(Object.keys(e.userData).length===0)return;const n=this.options,t=this.extensionsUsed;try{const i=JSON.parse(JSON.stringify(e.userData));if(n.includeCustomExtensions&&i.gltfExtensions){A.extensions===void 0&&(A.extensions={});for(const s in i.gltfExtensions)A.extensions[s]=i.gltfExtensions[s],t[s]=!0;delete i.gltfExtensions}Object.keys(i).length>0&&(A.extras=i)}catch(i){console.warn("THREE.GLTFExporter: userData of '"+e.name+"' won't be serialized because of JSON.stringify error - "+i.message)}}getUID(e,A=!1){if(this.uids.has(e)===!1){const t=new Map;t.set(!0,this.uid++),t.set(!1,this.uid++),this.uids.set(e,t)}return this.uids.get(e).get(A)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;const n=new r.Vector3;for(let t=0,i=e.count;t<i;t++)if(Math.abs(n.fromBufferAttribute(e,t).length()-1)>5e-4)return!1;return!0}createNormalizedNormalAttribute(e){const A=this.cache;if(A.attributesNormalized.has(e))return A.attributesNormalized.get(e);const n=e.clone(),t=new r.Vector3;for(let i=0,s=n.count;i<s;i++)t.fromBufferAttribute(n,i),t.x===0&&t.y===0&&t.z===0?t.setX(1):t.normalize(),n.setXYZ(i,t.x,t.y,t.z);return A.attributesNormalized.set(e,n),n}applyTextureTransform(e,A){let n=!1;const t={};(A.offset.x!==0||A.offset.y!==0)&&(t.offset=A.offset.toArray(),n=!0),A.rotation!==0&&(t.rotation=A.rotation,n=!0),(A.repeat.x!==1||A.repeat.y!==1)&&(t.scale=A.repeat.toArray(),n=!0),n&&(e.extensions=e.extensions||{},e.extensions.KHR_texture_transform=t,this.extensionsUsed.KHR_texture_transform=!0)}buildMetalRoughTexture(e,A){if(e===A)return e;function n(B){return B.colorSpace===r.SRGBColorSpace?function(C){return C<.04045?C*.0773993808:Math.pow(C*.9478672986+.0521327014,2.4)}:function(C){return C}}console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."),e instanceof r.CompressedTexture&&(e=vt(e)),A instanceof r.CompressedTexture&&(A=vt(A));const t=e?e.image:null,i=A?A.image:null,s=Math.max(t?t.width:0,i?i.width:0),o=Math.max(t?t.height:0,i?i.height:0),c=Kn();c.width=s,c.height=o;const g=c.getContext("2d",{willReadFrequently:!0});g.fillStyle="#00ffff",g.fillRect(0,0,s,o);const l=g.getImageData(0,0,s,o);if(t){g.drawImage(t,0,0,s,o);const B=n(e),f=g.getImageData(0,0,s,o).data;for(let C=2;C<f.length;C+=4)l.data[C]=B(f[C]/256)*256}if(i){g.drawImage(i,0,0,s,o);const B=n(A),f=g.getImageData(0,0,s,o).data;for(let C=1;C<f.length;C+=4)l.data[C]=B(f[C]/256)*256}g.putImageData(l,0,0);const I=(e||A).clone();return I.source=new r.Source(c),I.colorSpace=r.NoColorSpace,I.channel=(e||A).channel,e&&A&&e.channel!==A.channel&&console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."),I}processBuffer(e){const A=this.json,n=this.buffers;return A.buffers||(A.buffers=[{byteLength:0}]),n.push(e),0}processBufferView(e,A,n,t,i){const s=this.json;s.bufferViews||(s.bufferViews=[]);let o;switch(A){case ce.BYTE:case ce.UNSIGNED_BYTE:o=1;break;case ce.SHORT:case ce.UNSIGNED_SHORT:o=2;break;default:o=4}let c=e.itemSize*o;i===ce.ARRAY_BUFFER&&(c=Math.ceil(c/4)*4);const g=qi(t*c),l=new DataView(new ArrayBuffer(g));let h=0;for(let f=n;f<n+t;f++){for(let C=0;C<e.itemSize;C++){let p;e.itemSize>4?p=e.array[f*e.itemSize+C]:(C===0?p=e.getX(f):C===1?p=e.getY(f):C===2?p=e.getZ(f):C===3&&(p=e.getW(f)),e.normalized===!0&&(p=r.MathUtils.normalize(p,e.array))),A===ce.FLOAT?l.setFloat32(h,p,!0):A===ce.INT?l.setInt32(h,p,!0):A===ce.UNSIGNED_INT?l.setUint32(h,p,!0):A===ce.SHORT?l.setInt16(h,p,!0):A===ce.UNSIGNED_SHORT?l.setUint16(h,p,!0):A===ce.BYTE?l.setInt8(h,p):A===ce.UNSIGNED_BYTE&&l.setUint8(h,p),h+=o}h%c!==0&&(h+=c-h%c)}const I={buffer:this.processBuffer(l.buffer),byteOffset:this.byteOffset,byteLength:g};return i!==void 0&&(I.target=i),i===ce.ARRAY_BUFFER&&(I.byteStride=c),this.byteOffset+=g,s.bufferViews.push(I),{id:s.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){const A=this,n=A.json;return n.bufferViews||(n.bufferViews=[]),new Promise(function(t){const i=new FileReader;i.readAsArrayBuffer(e),i.onloadend=function(){const s=Ut(i.result),o={buffer:A.processBuffer(s),byteOffset:A.byteOffset,byteLength:s.byteLength};A.byteOffset+=s.byteLength,t(n.bufferViews.push(o)-1)}})}processAccessor(e,A,n,t){const i=this.json,s={1:"SCALAR",2:"VEC2",3:"VEC3",4:"VEC4",9:"MAT3",16:"MAT4"};let o;if(e.array.constructor===Float32Array)o=ce.FLOAT;else if(e.array.constructor===Int32Array)o=ce.INT;else if(e.array.constructor===Uint32Array)o=ce.UNSIGNED_INT;else if(e.array.constructor===Int16Array)o=ce.SHORT;else if(e.array.constructor===Uint16Array)o=ce.UNSIGNED_SHORT;else if(e.array.constructor===Int8Array)o=ce.BYTE;else if(e.array.constructor===Uint8Array)o=ce.UNSIGNED_BYTE;else throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: "+e.array.constructor.name);if(n===void 0&&(n=0),(t===void 0||t===1/0)&&(t=e.count),t===0)return null;const c=na(e,n,t);let g;A!==void 0&&(g=e===A.index?ce.ELEMENT_ARRAY_BUFFER:ce.ARRAY_BUFFER);const l=this.processBufferView(e,o,n,t,g),h={bufferView:l.id,byteOffset:l.byteOffset,componentType:o,count:t,max:c.max,min:c.min,type:s[e.itemSize]};return e.normalized===!0&&(h.normalized=!0),i.accessors||(i.accessors=[]),i.accessors.push(h)-1}processImage(e,A,n,t="image/png"){if(e!==null){const i=this,s=i.cache,o=i.json,c=i.options,g=i.pending;s.images.has(e)||s.images.set(e,{});const l=s.images.get(e),h=t+":flipY/"+n.toString();if(l[h]!==void 0)return l[h];o.images||(o.images=[]);const I={mimeType:t},B=Kn();B.width=Math.min(e.width,c.maxTextureSize),B.height=Math.min(e.height,c.maxTextureSize);const f=B.getContext("2d",{willReadFrequently:!0});if(n===!0&&(f.translate(0,B.height),f.scale(1,-1)),e.data!==void 0){A!==r.RGBAFormat&&console.error("GLTFExporter: Only RGBAFormat is supported.",A),(e.width>c.maxTextureSize||e.height>c.maxTextureSize)&&console.warn("GLTFExporter: Image size is bigger than maxTextureSize",e);const p=new Uint8ClampedArray(e.height*e.width*4);for(let d=0;d<p.length;d+=4)p[d+0]=e.data[d+0],p[d+1]=e.data[d+1],p[d+2]=e.data[d+2],p[d+3]=e.data[d+3];f.putImageData(new ImageData(p,e.width,e.height),0,0)}else if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas)f.drawImage(e,0,0,B.width,B.height);else throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.");c.binary===!0?g.push(Yn(B,t).then(p=>i.processBufferViewImage(p)).then(p=>{I.bufferView=p})):B.toDataURL!==void 0?I.uri=B.toDataURL(t):g.push(Yn(B,t).then(p=>new FileReader().readAsDataURL(p)).then(p=>{I.uri=p}));const C=o.images.push(I)-1;return l[h]=C,C}else throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.")}processSampler(e){const A=this.json;A.samplers||(A.samplers=[]);const n={magFilter:Ye[e.magFilter],minFilter:Ye[e.minFilter],wrapS:Ye[e.wrapS],wrapT:Ye[e.wrapT]};return A.samplers.push(n)-1}processTexture(e){const n=this.options,t=this.cache,i=this.json;if(t.textures.has(e))return t.textures.get(e);const s={keep:!0,newTexture:null};if(this._invokeAll(function(l){l.beforeWriteTexture&&l.beforeWriteTexture(e,s)}),s.keep===!1)return null;s.newTexture!=null&&(e=s.newTexture),i.textures||(i.textures=[]),e instanceof r.CompressedTexture&&(e=vt(e,n.maxTextureSize));let o=e.userData.mimeType;o==="image/webp"&&(o="image/png");const c={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,o)};e.name&&(c.name=e.name),this._invokeAll(function(l){l.writeTexture&&l.writeTexture(e,c)});const g=i.textures.push(c)-1;return t.textures.set(e,g),g}processMaterial(e){const A=this.cache,n=this.json;if(A.materials.has(e))return A.materials.get(e);if(e.isShaderMaterial)return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."),null;n.materials||(n.materials=[]);const t={pbrMetallicRoughness:{}};e.isMeshStandardMaterial!==!0&&e.isMeshBasicMaterial!==!0&&console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");const i=e.color.toArray().concat([e.opacity]);JA(i,[1,1,1,1])||(t.pbrMetallicRoughness.baseColorFactor=i),e.isMeshStandardMaterial?(t.pbrMetallicRoughness.metallicFactor=e.metalness,t.pbrMetallicRoughness.roughnessFactor=e.roughness):(t.pbrMetallicRoughness.metallicFactor=.5,t.pbrMetallicRoughness.roughnessFactor=.5);const s=e.metalnessMap?.image?e.metalnessMap:void 0,o=e.roughnessMap?.image?e.roughnessMap:void 0;if(s||o){const g=this.buildMetalRoughTexture(s,o),l={index:this.processTexture(g),channel:g.channel};this.applyTextureTransform(l,g),t.pbrMetallicRoughness.metallicRoughnessTexture=l}if(e.map){const g={index:this.processTexture(e.map),texCoord:e.map.channel};this.applyTextureTransform(g,e.map),t.pbrMetallicRoughness.baseColorTexture=g}if(e.emissive){const g=e.emissive;if(Math.max(g.r,g.g,g.b)>0&&(t.emissiveFactor=e.emissive.toArray()),e.emissiveMap?.image){const h={index:this.processTexture(e.emissiveMap),texCoord:e.emissiveMap.channel};this.applyTextureTransform(h,e.emissiveMap),t.emissiveTexture=h}}if(e.normalMap?.image){const g={index:this.processTexture(e.normalMap),texCoord:e.normalMap.channel};e.normalScale&&e.normalScale.x!==1&&(g.scale=e.normalScale.x),this.applyTextureTransform(g,e.normalMap),t.normalTexture=g}if(e.aoMap?.image){const g={index:this.processTexture(e.aoMap),texCoord:e.aoMap.channel};e.aoMapIntensity!==1&&(g.strength=e.aoMapIntensity),this.applyTextureTransform(g,e.aoMap),t.occlusionTexture=g}e.transparent?t.alphaMode="BLEND":e.alphaTest>0&&(t.alphaMode="MASK",t.alphaCutoff=e.alphaTest),e.side===r.DoubleSide&&(t.doubleSided=!0),e.name!==""&&(t.name=e.name),this.serializeUserData(e,t),this._invokeAll(function(g){g.writeMaterial&&g.writeMaterial(e,t)});const c=n.materials.push(t)-1;return A.materials.set(e,c),c}processMesh(e){const A={keep:!0};if(this._invokeAll(function(y){y.beforeWriteMesh&&y.beforeWriteMesh(e,A)}),A.keep!=!0)return null;const n=this.cache,t=this.json,i=[e.geometry.uuid];if(Array.isArray(e.material))for(let y=0,R=e.material.length;y<R;y++)i.push(e.material[y].uuid);else i.push(e.material.uuid);const s=i.join(":");if(n.meshes.has(s))return n.meshes.get(s);const o=e.geometry;let c;e.isLineSegments?c=ce.LINES:e.isLineLoop?c=ce.LINE_LOOP:e.isLine?c=ce.LINE_STRIP:e.isPoints?c=ce.POINTS:c=e.material.wireframe?ce.LINES:ce.TRIANGLES;const g={},l={},h=[],I=[],B={uv:"TEXCOORD_0",uv1:"TEXCOORD_1",uv2:"TEXCOORD_2",uv3:"TEXCOORD_3",color:"COLOR_0",skinWeight:"WEIGHTS_0",skinIndex:"JOINTS_0"},f=o.getAttribute("normal");f!==void 0&&!this.isNormalizedNormalAttribute(f)&&(console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."),o.setAttribute("normal",this.createNormalizedNormalAttribute(f)));let C=null;for(let y in o.attributes){if(y.slice(0,5)==="morph")continue;const R=o.attributes[y];if(y=B[y]||y.toUpperCase(),/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/.test(y)||(y="_"+y),n.attributes.has(this.getUID(R))){l[y]=n.attributes.get(this.getUID(R));continue}C=null;const D=R.array;y==="JOINTS_0"&&!(D instanceof Uint16Array)&&!(D instanceof Uint8Array)&&(console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'),C=new r.BufferAttribute(new Uint16Array(D),R.itemSize,R.normalized));const M=this.processAccessor(C||R,o);M!==null&&(y.startsWith("_")||this.detectMeshQuantization(y,R),l[y]=M,n.attributes.set(this.getUID(R),M))}if(f!==void 0&&o.setAttribute("normal",f),Object.keys(l).length===0)return null;if(e.morphTargetInfluences!==void 0&&e.morphTargetInfluences.length>0){const y=[],R=[],F={};if(e.morphTargetDictionary!==void 0)for(const D in e.morphTargetDictionary)F[e.morphTargetDictionary[D]]=D;for(let D=0;D<e.morphTargetInfluences.length;++D){const M={};let N=!1;for(const _ in o.morphAttributes){if(_!=="position"&&_!=="normal"&&_!=="color"){N||(console.warn("GLTFExporter: Only POSITION, NORMAL and COLOR morph are supported."),N=!0);continue}const P=o.morphAttributes[_][D],z=_.toUpperCase()+(_==="color"?"_0":""),U=o.attributes[_];if(n.attributes.has(this.getUID(P,!0))){M[z]=n.attributes.get(this.getUID(P,!0));continue}const q=P.clone();if(!o.morphTargetsRelative)for(let H=0,Z=P.count;H<Z;H++)for(let se=0;se<P.itemSize;se++)se===0&&q.setX(H,P.getX(H)-U.getX(H)),se===1&&q.setY(H,P.getY(H)-U.getY(H)),se===2&&q.setZ(H,P.getZ(H)-U.getZ(H)),se===3&&q.setW(H,P.getW(H)-U.getW(H));M[z]=this.processAccessor(q,o),n.attributes.set(this.getUID(U,!0),M[z])}I.push(M),y.push(e.morphTargetInfluences[D]),e.morphTargetDictionary!==void 0&&R.push(F[D])}g.weights=y,R.length>0&&(g.extras={},g.extras.targetNames=R)}const p=Array.isArray(e.material);if(p&&o.groups.length===0)return null;let d=!1;if(p&&o.index===null){const y=[];for(let R=0,F=o.attributes.position.count;R<F;R++)y[R]=R;o.setIndex(y),d=!0}const w=p?e.material:[e.material],Q=p?o.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let y=0,R=Q.length;y<R;y++){const F={mode:c,attributes:l};if(this.serializeUserData(o,F),I.length>0&&(F.targets=I),o.index!==null){let M=this.getUID(o.index);(Q[y].start!==void 0||Q[y].count!==void 0)&&(M+=":"+Q[y].start+":"+Q[y].count),n.attributes.has(M)?F.indices=n.attributes.get(M):(F.indices=this.processAccessor(o.index,o,Q[y].start,Q[y].count),n.attributes.set(M,F.indices)),F.indices===null&&delete F.indices}const D=this.processMaterial(w[Q[y].materialIndex]);D!==null&&(F.material=D),h.push(F)}d===!0&&o.setIndex(null),g.primitives=h,t.meshes||(t.meshes=[]),this._invokeAll(function(y){y.writeMesh&&y.writeMesh(e,g)});const b=t.meshes.push(g)-1;return n.meshes.set(s,b),b}detectMeshQuantization(e,A){if(this.extensionsUsed[Nt])return;let n;switch(A.array.constructor){case Int8Array:n="byte";break;case Uint8Array:n="unsigned byte";break;case Int16Array:n="short";break;case Uint16Array:n="unsigned short";break;default:return}A.normalized&&(n+=" normalized");const t=e.split("_",1)[0];Pn[t]&&Pn[t].includes(n)&&(this.extensionsUsed[Nt]=!0,this.extensionsRequired[Nt]=!0)}processCamera(e){const A=this.json;A.cameras||(A.cameras=[]);const n=e.isOrthographicCamera,t={type:n?"orthographic":"perspective"};return n?t.orthographic={xmag:e.right*2,ymag:e.top*2,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:t.perspective={aspectRatio:e.aspect,yfov:r.MathUtils.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},e.name!==""&&(t.name=e.type),A.cameras.push(t)-1}processAnimation(e,A){const n=this.json,t=this.nodeMap;n.animations||(n.animations=[]),e=gn.Utils.mergeMorphTargetTracks(e.clone(),A);const i=e.tracks,s=[],o=[];for(let c=0;c<i.length;++c){const g=i[c],l=r.PropertyBinding.parseTrackName(g.name);let h=r.PropertyBinding.findNode(A,l.nodeName);const I=Hn[l.propertyName];if(l.objectName==="bones"&&(h.isSkinnedMesh===!0?h=h.skeleton.getBoneByName(l.objectIndex):h=void 0),!h||!I){console.warn('THREE.GLTFExporter: Could not export animation track "%s".',g.name);continue}const B=1;let f=g.values.length/g.times.length;I===Hn.morphTargetInfluences&&(f/=h.morphTargetInfluences.length);let C;g.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline===!0?(C="CUBICSPLINE",f/=3):g.getInterpolation()===r.InterpolateDiscrete?C="STEP":C="LINEAR",o.push({input:this.processAccessor(new r.BufferAttribute(g.times,B)),output:this.processAccessor(new r.BufferAttribute(g.values,f)),interpolation:C}),s.push({sampler:o.length-1,target:{node:t.get(h),path:I}})}return n.animations.push({name:e.name||"clip_"+n.animations.length,samplers:o,channels:s}),n.animations.length-1}processSkin(e){const A=this.json,n=this.nodeMap,t=A.nodes[n.get(e)],i=e.skeleton;if(i===void 0)return null;const s=e.skeleton.bones[0];if(s===void 0)return null;const o=[],c=new Float32Array(i.bones.length*16),g=new r.Matrix4;for(let h=0;h<i.bones.length;++h)o.push(n.get(i.bones[h])),g.copy(i.boneInverses[h]),g.multiply(e.bindMatrix).toArray(c,h*16);return A.skins===void 0&&(A.skins=[]),A.skins.push({inverseBindMatrices:this.processAccessor(new r.BufferAttribute(c,16)),joints:o,skeleton:n.get(s)}),t.skin=A.skins.length-1}processNode(e){const A={keep:!0};if(this._invokeAll(function(c){c.beforeWriteNode&&c.beforeWriteNode(e,A)}),A.keep!=!0)return null;const n=this.json,t=this.options,i=this.nodeMap;n.nodes||(n.nodes=[]);const s={};if(t.trs){const c=e.quaternion.toArray(),g=e.position.toArray(),l=e.scale.toArray();JA(c,[0,0,0,1])||(s.rotation=c),JA(g,[0,0,0])||(s.translation=g),JA(l,[1,1,1])||(s.scale=l)}else e.matrixAutoUpdate&&e.updateMatrix(),ta(e.matrix)===!1&&(s.matrix=e.matrix.elements);if(e.name!==""&&(s.name=String(e.name)),this.serializeUserData(e,s),e.isMesh||e.isLine||e.isPoints){const c=this.processMesh(e);c!==null&&(s.mesh=c)}else e.isCamera&&(s.camera=this.processCamera(e));if(e.isSkinnedMesh&&this.skins.push(e),e.children.length>0){const c=[];for(let g=0,l=e.children.length;g<l;g++){const h=e.children[g];if(h.visible||t.onlyVisible===!1){const I=this.processNode(h);I!==null&&c.push(I)}}c.length>0&&(s.children=c)}this._invokeAll(function(c){c.writeNode&&c.writeNode(e,s)});const o=n.nodes.push(s)-1;return i.set(e,o),o}processScene(e){const A=this.json,n=this.options;A.scenes||(A.scenes=[],A.scene=0);const t={};e.name!==""&&(t.name=e.name),A.scenes.push(t);const i=[];for(let s=0,o=e.children.length;s<o;s++){const c=e.children[s];if(c.visible||n.onlyVisible===!1){const g=this.processNode(c);g!==null&&i.push(g)}}i.length>0&&(t.nodes=i),this.serializeUserData(e,t)}processObjects(e){const A=new r.Scene;A.name="AuxScene";for(let n=0;n<e.length;n++)A.children.push(e[n]);this.processScene(A)}processInput(e){const A=this.options;e=e instanceof Array?e:[e],this._invokeAll(function(t){t.beforeParse&&t.beforeParse(e)});const n=[];for(let t=0;t<e.length;t++)e[t]instanceof r.Scene?this.processScene(e[t]):n.push(e[t]);n.length>0&&this.processObjects(n);for(let t=0;t<this.skins.length;++t)this.processSkin(this.skins[t]);for(let t=0;t<A.animations.length;++t)this.processAnimation(A.animations[t],e[0]);this._invokeAll(function(t){t.afterParse&&t.afterParse(e)})}_invokeAll(e){for(let A=0,n=this.plugins.length;A<n;A++)e(this.plugins[A])}}class sa{constructor(e){this.writer=e,this.name="KHR_lights_punctual"}writeNode(e,A){if(!e.isLight)return;if(!e.isDirectionalLight&&!e.isPointLight&&!e.isSpotLight){console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.",e);return}const n=this.writer,t=n.json,i=n.extensionsUsed,s={};e.name&&(s.name=e.name),s.color=e.color.toArray(),s.intensity=e.intensity,e.isDirectionalLight?s.type="directional":e.isPointLight?(s.type="point",e.distance>0&&(s.range=e.distance)):e.isSpotLight&&(s.type="spot",e.distance>0&&(s.range=e.distance),s.spot={},s.spot.innerConeAngle=(1-e.penumbra)*e.angle,s.spot.outerConeAngle=e.angle),e.decay!==void 0&&e.decay!==2&&console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."),e.target&&(e.target.parent!==e||e.target.position.x!==0||e.target.position.y!==0||e.target.position.z!==-1)&&console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."),i[this.name]||(t.extensions=t.extensions||{},t.extensions[this.name]={lights:[]},i[this.name]=!0);const o=t.extensions[this.name].lights;o.push(s),A.extensions=A.extensions||{},A.extensions[this.name]={light:o.length-1}}}class oa{constructor(e){this.writer=e,this.name="KHR_materials_unlit"}writeMaterial(e,A){if(!e.isMeshBasicMaterial)return;const t=this.writer.extensionsUsed;A.extensions=A.extensions||{},A.extensions[this.name]={},t[this.name]=!0,A.pbrMetallicRoughness.metallicFactor=0,A.pbrMetallicRoughness.roughnessFactor=.9}}class ra{constructor(e){this.writer=e,this.name="KHR_materials_clearcoat"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.clearcoat===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.clearcoatFactor=e.clearcoat,e.clearcoatMap){const s={index:n.processTexture(e.clearcoatMap),texCoord:e.clearcoatMap.channel};n.applyTextureTransform(s,e.clearcoatMap),i.clearcoatTexture=s}if(i.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){const s={index:n.processTexture(e.clearcoatRoughnessMap),texCoord:e.clearcoatRoughnessMap.channel};n.applyTextureTransform(s,e.clearcoatRoughnessMap),i.clearcoatRoughnessTexture=s}if(e.clearcoatNormalMap){const s={index:n.processTexture(e.clearcoatNormalMap),texCoord:e.clearcoatNormalMap.channel};e.clearcoatNormalScale.x!==1&&(s.scale=e.clearcoatNormalScale.x),n.applyTextureTransform(s,e.clearcoatNormalMap),i.clearcoatNormalTexture=s}A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class aa{constructor(e){this.writer=e,this.name="KHR_materials_dispersion"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.dispersion===0)return;const t=this.writer.extensionsUsed,i={};i.dispersion=e.dispersion,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ca{constructor(e){this.writer=e,this.name="KHR_materials_iridescence"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.iridescence===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.iridescenceFactor=e.iridescence,e.iridescenceMap){const s={index:n.processTexture(e.iridescenceMap),texCoord:e.iridescenceMap.channel};n.applyTextureTransform(s,e.iridescenceMap),i.iridescenceTexture=s}if(i.iridescenceIor=e.iridescenceIOR,i.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],i.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){const s={index:n.processTexture(e.iridescenceThicknessMap),texCoord:e.iridescenceThicknessMap.channel};n.applyTextureTransform(s,e.iridescenceThicknessMap),i.iridescenceThicknessTexture=s}A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ga{constructor(e){this.writer=e,this.name="KHR_materials_transmission"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.transmissionFactor=e.transmission,e.transmissionMap){const s={index:n.processTexture(e.transmissionMap),texCoord:e.transmissionMap.channel};n.applyTextureTransform(s,e.transmissionMap),i.transmissionTexture=s}A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class la{constructor(e){this.writer=e,this.name="KHR_materials_volume"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const n=this.writer,t=n.extensionsUsed,i={};if(i.thicknessFactor=e.thickness,e.thicknessMap){const s={index:n.processTexture(e.thicknessMap),texCoord:e.thicknessMap.channel};n.applyTextureTransform(s,e.thicknessMap),i.thicknessTexture=s}e.attenuationDistance!==1/0&&(i.attenuationDistance=e.attenuationDistance),i.attenuationColor=e.attenuationColor.toArray(),A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ha{constructor(e){this.writer=e,this.name="KHR_materials_ior"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.ior===1.5)return;const t=this.writer.extensionsUsed,i={};i.ior=e.ior,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ia{constructor(e){this.writer=e,this.name="KHR_materials_specular"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.specularIntensity===1&&e.specularColor.equals(Xr)&&!e.specularIntensityMap&&!e.specularColorMap)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.specularIntensityMap){const s={index:n.processTexture(e.specularIntensityMap),texCoord:e.specularIntensityMap.channel};n.applyTextureTransform(s,e.specularIntensityMap),i.specularTexture=s}if(e.specularColorMap){const s={index:n.processTexture(e.specularColorMap),texCoord:e.specularColorMap.channel};n.applyTextureTransform(s,e.specularColorMap),i.specularColorTexture=s}i.specularFactor=e.specularIntensity,i.specularColorFactor=e.specularColor.toArray(),A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class ua{constructor(e){this.writer=e,this.name="KHR_materials_sheen"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.sheen==0)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.sheenRoughnessMap){const s={index:n.processTexture(e.sheenRoughnessMap),texCoord:e.sheenRoughnessMap.channel};n.applyTextureTransform(s,e.sheenRoughnessMap),i.sheenRoughnessTexture=s}if(e.sheenColorMap){const s={index:n.processTexture(e.sheenColorMap),texCoord:e.sheenColorMap.channel};n.applyTextureTransform(s,e.sheenColorMap),i.sheenColorTexture=s}i.sheenRoughnessFactor=e.sheenRoughness,i.sheenColorFactor=e.sheenColor.toArray(),A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ba{constructor(e){this.writer=e,this.name="KHR_materials_anisotropy"}writeMaterial(e,A){if(!e.isMeshPhysicalMaterial||e.anisotropy==0)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.anisotropyMap){const s={index:n.processTexture(e.anisotropyMap)};n.applyTextureTransform(s,e.anisotropyMap),i.anisotropyTexture=s}i.anisotropyStrength=e.anisotropy,i.anisotropyRotation=e.anisotropyRotation,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class fa{constructor(e){this.writer=e,this.name="KHR_materials_emissive_strength"}writeMaterial(e,A){if(!e.isMeshStandardMaterial||e.emissiveIntensity===1)return;const t=this.writer.extensionsUsed,i={};i.emissiveStrength=e.emissiveIntensity,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ca{constructor(e){this.writer=e,this.name="EXT_materials_bump"}writeMaterial(e,A){if(!e.isMeshStandardMaterial||e.bumpScale===1&&!e.bumpMap)return;const n=this.writer,t=n.extensionsUsed,i={};if(e.bumpMap){const s={index:n.processTexture(e.bumpMap),texCoord:e.bumpMap.channel};n.applyTextureTransform(s,e.bumpMap),i.bumpTexture=s}i.bumpFactor=e.bumpScale,A.extensions=A.extensions||{},A.extensions[this.name]=i,t[this.name]=!0}}class Ea{constructor(e){this.writer=e,this.name="EXT_mesh_gpu_instancing"}writeNode(e,A){if(!e.isInstancedMesh)return;const n=this.writer,t=e,i=new Float32Array(t.count*3),s=new Float32Array(t.count*4),o=new Float32Array(t.count*3),c=new r.Matrix4,g=new r.Vector3,l=new r.Quaternion,h=new r.Vector3;for(let B=0;B<t.count;B++)t.getMatrixAt(B,c),c.decompose(g,l,h),g.toArray(i,B*3),l.toArray(s,B*4),h.toArray(o,B*3);const I={TRANSLATION:n.processAccessor(new r.BufferAttribute(i,3)),ROTATION:n.processAccessor(new r.BufferAttribute(s,4)),SCALE:n.processAccessor(new r.BufferAttribute(o,3))};t.instanceColor&&(I._COLOR_0=n.processAccessor(t.instanceColor)),A.extensions=A.extensions||{},A.extensions[this.name]={attributes:I},n.extensionsUsed[this.name]=!0,n.extensionsRequired[this.name]=!0}}gn.Utils={insertKeyframe:function(a,e){const n=a.getValueSize(),t=new a.TimeBufferType(a.times.length+1),i=new a.ValueBufferType(a.values.length+n),s=a.createInterpolant(new a.ValueBufferType(n));let o;if(a.times.length===0){t[0]=e;for(let c=0;c<n;c++)i[c]=0;o=0}else if(e<a.times[0]){if(Math.abs(a.times[0]-e)<.001)return 0;t[0]=e,t.set(a.times,1),i.set(s.evaluate(e),0),i.set(a.values,n),o=0}else if(e>a.times[a.times.length-1]){if(Math.abs(a.times[a.times.length-1]-e)<.001)return a.times.length-1;t[t.length-1]=e,t.set(a.times,0),i.set(a.values,0),i.set(s.evaluate(e),a.values.length),o=t.length-1}else for(let c=0;c<a.times.length;c++){if(Math.abs(a.times[c]-e)<.001)return c;if(a.times[c]<e&&a.times[c+1]>e){t.set(a.times.slice(0,c+1),0),t[c+1]=e,t.set(a.times.slice(c+1),c+2),i.set(a.values.slice(0,(c+1)*n),0),i.set(s.evaluate(e),(c+1)*n),i.set(a.values.slice((c+1)*n),(c+2)*n),o=c+1;break}}return a.times=t,a.values=i,o},mergeMorphTargetTracks:function(a,e){const A=[],n={},t=a.tracks;for(let i=0;i<t.length;++i){let s=t[i];const o=r.PropertyBinding.parseTrackName(s.name),c=r.PropertyBinding.findNode(e,o.nodeName);if(o.propertyName!=="morphTargetInfluences"||o.propertyIndex===void 0){A.push(s);continue}if(s.createInterpolant!==s.InterpolantFactoryMethodDiscrete&&s.createInterpolant!==s.InterpolantFactoryMethodLinear){if(s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."),s=s.clone(),s.setInterpolation(r.InterpolateLinear)}const g=c.morphTargetInfluences.length,l=c.morphTargetDictionary[o.propertyIndex];if(l===void 0)throw new Error("THREE.GLTFExporter: Morph target name not found: "+o.propertyIndex);let h;if(n[c.uuid]===void 0){h=s.clone();const B=new h.ValueBufferType(g*h.times.length);for(let f=0;f<h.times.length;f++)B[f*g+l]=h.values[f];h.name=(o.nodeName||"")+".morphTargetInfluences",h.values=B,n[c.uuid]=h,A.push(h);continue}const I=s.createInterpolant(new s.ValueBufferType(1));h=n[c.uuid];for(let B=0;B<h.times.length;B++)h.values[B*g+l]=I.evaluate(h.times[B]);for(let B=0;B<s.times.length;B++){const f=this.insertKeyframe(h,s.times[B]);h.values[f*g+l]=s.values[B]}}return a.tracks=A,a}};const me={ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ComponentType:Object.freeze({TRIGGER:"trigger",SQUEEZE:"squeeze",TOUCHPAD:"touchpad",THUMBSTICK:"thumbstick",BUTTON:"button"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function Ki(a){const e=await fetch(a);if(e.ok)return e.json();throw new Error(e.statusText)}async function pa(a){if(!a)throw new Error("No basePath supplied");return await Ki(`${a}/profilesList.json`)}async function da(a,e,A=null,n=!0){if(!a)throw new Error("No xrInputSource supplied");if(!e)throw new Error("No basePath supplied");const t=await pa(e);let i;if(a.profiles.some(c=>{const g=t[c];return g&&(i={profileId:c,profilePath:`${e}/${g.path}`,deprecated:!!g.deprecated}),!!i}),!i){if(!A)throw new Error("No matching profile name found");const c=t[A];if(!c)throw new Error(`No matching profile name found and default profile "${A}" missing.`);i={profileId:A,profilePath:`${e}/${c.path}`,deprecated:!!c.deprecated}}const s=await Ki(i.profilePath);let o;if(n){let c;if(a.handedness==="any"?c=s.layouts[Object.keys(s.layouts)[0]]:c=s.layouts[a.handedness],!c)throw new Error(`No matching handedness, ${a.handedness}, in profile ${i.profileId}`);c.assetPath&&(o=i.profilePath.replace("profile.json",c.assetPath))}return{profile:s,assetPath:o}}const Qa={xAxis:0,yAxis:0,button:0,state:me.ComponentState.DEFAULT};function ma(a=0,e=0){let A=a,n=e;if(Math.sqrt(a*a+e*e)>1){const s=Math.atan2(e,a);A=Math.cos(s),n=Math.sin(s)}return{normalizedXAxis:A*.5+.5,normalizedYAxis:n*.5+.5}}class ba{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===me.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(Qa)}updateFromComponent({xAxis:e,yAxis:A,button:n,state:t}){const{normalizedXAxis:i,normalizedYAxis:s}=ma(e,A);switch(this.componentProperty){case me.ComponentProperty.X_AXIS:this.value=this.states.includes(t)?i:.5;break;case me.ComponentProperty.Y_AXIS:this.value=this.states.includes(t)?s:.5;break;case me.ComponentProperty.BUTTON:this.value=this.states.includes(t)?n:0;break;case me.ComponentProperty.STATE:this.valueNodeProperty===me.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(t):this.value=this.states.includes(t)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class wa{constructor(e,A){if(!e||!A||!A.visualResponses||!A.gamepadIndices||Object.keys(A.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=e,this.type=A.type,this.rootNodeName=A.rootNodeName,this.touchPointNodeName=A.touchPointNodeName,this.visualResponses={},Object.keys(A.visualResponses).forEach(n=>{const t=new ba(A.visualResponses[n]);this.visualResponses[n]=t}),this.gamepadIndices=Object.assign({},A.gamepadIndices),this.values={state:me.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(e){if(this.values.state=me.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){const A=e.buttons[this.gamepadIndices.button];this.values.button=A.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,A.pressed||this.values.button===1?this.values.state=me.ComponentState.PRESSED:(A.touched||this.values.button>me.ButtonTouchThreshold)&&(this.values.state=me.ComponentState.TOUCHED)}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===me.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>me.AxisTouchThreshold&&(this.values.state=me.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===me.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>me.AxisTouchThreshold&&(this.values.state=me.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(A=>{A.updateFromComponent(this.values)})}}class ya{constructor(e,A,n){if(!e)throw new Error("No xrInputSource supplied");if(!A)throw new Error("No profile supplied");this.xrInputSource=e,this.assetUrl=n,this.id=A.profileId,this.layoutDescription=A.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(t=>{const i=this.layoutDescription.components[t];this.components[t]=new wa(t,i)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const e=[];return Object.values(this.components).forEach(A=>{e.push(A.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}}const Da="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",Sa="generic-trigger";class xa extends r.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(A=>{A.isMesh&&(A.material.envMap=this.envMap,A.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(A=>{Object.values(A.visualResponses).forEach(n=>{const{valueNode:t,minNode:i,maxNode:s,value:o,valueNodeProperty:c}=n;t&&(c===me.VisualResponseProperty.VISIBILITY?t.visible=o:c===me.VisualResponseProperty.TRANSFORM&&(t.quaternion.slerpQuaternions(i.quaternion,s.quaternion,o),t.position.lerpVectors(i.position,s.position,o)))})}))}}function Ma(a,e){Object.values(a.components).forEach(A=>{const{type:n,touchPointNodeName:t,visualResponses:i}=A;if(n===me.ComponentType.TOUCHPAD)if(A.touchPointNode=e.getObjectByName(t),A.touchPointNode){const s=new r.SphereGeometry(.001),o=new r.MeshBasicMaterial({color:255}),c=new r.Mesh(s,o);A.touchPointNode.add(c)}else console.warn(`Could not find touch dot, ${A.touchPointNodeName}, in touchpad component ${A.id}`);Object.values(i).forEach(s=>{const{valueNodeName:o,minNodeName:c,maxNodeName:g,valueNodeProperty:l}=s;if(l===me.VisualResponseProperty.TRANSFORM){if(s.minNode=e.getObjectByName(c),s.maxNode=e.getObjectByName(g),!s.minNode){console.warn(`Could not find ${c} in the model`);return}if(!s.maxNode){console.warn(`Could not find ${g} in the model`);return}}s.valueNode=e.getObjectByName(o),s.valueNode||console.warn(`Could not find ${o} in the model`)})})}function Jn(a,e){Ma(a.motionController,e),a.envMap&&e.traverse(A=>{A.isMesh&&(A.material.envMap=a.envMap,A.material.needsUpdate=!0)}),a.layers.mask!=0&&e.traverse(A=>{A.layers.mask=a.layers.mask}),a.add(e)}class Fa{constructor(e=null,A=null){this.gltfLoader=e,this.path=Da,this._assetCache={},this.onLoad=A,this.gltfLoader||(this.gltfLoader=new ci)}setPath(e){return this.path=e,this}createControllerModel(e){const A=new xa;let n=null;return e.addEventListener("connected",t=>{const i=t.data;i.targetRayMode!=="tracked-pointer"||!i.gamepad||i.hand||da(i,this.path,Sa).then(({profile:s,assetPath:o})=>{A.motionController=new ya(i,s,o);const c=this._assetCache[A.motionController.assetUrl];if(c)n=c.scene.clone(),Jn(A,n),this.onLoad&&this.onLoad(n);else{if(!this.gltfLoader)throw new Error("GLTFLoader not set.");this.gltfLoader.setPath(""),this.gltfLoader.load(A.motionController.assetUrl,g=>{this._assetCache[A.motionController.assetUrl]=g,n=g.scene.clone(),Jn(A,n),this.onLoad&&this.onLoad(n)},null,()=>{throw new Error(`Asset ${A.motionController.assetUrl} missing or malformed.`)})}}).catch(s=>{console.warn(s)})}),e.addEventListener("disconnected",()=>{A.motionController=null,A.remove(n),n=null}),A}}const jn=new r.Box3,it=new r.Vector3;class Yi extends r.InstancedBufferGeometry{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";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],A=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],n=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(n),this.setAttribute("position",new r.Float32BufferAttribute(e,3)),this.setAttribute("uv",new r.Float32BufferAttribute(A,2))}applyMatrix4(e){const A=this.attributes.instanceStart,n=this.attributes.instanceEnd;return A!==void 0&&(A.applyMatrix4(e),n.applyMatrix4(e),A.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let A;e instanceof Float32Array?A=e:Array.isArray(e)&&(A=new Float32Array(e));const n=new r.InstancedInterleavedBuffer(A,6,1);return this.setAttribute("instanceStart",new r.InterleavedBufferAttribute(n,3,0)),this.setAttribute("instanceEnd",new r.InterleavedBufferAttribute(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let A;e instanceof Float32Array?A=e:Array.isArray(e)&&(A=new Float32Array(e));const n=new r.InstancedInterleavedBuffer(A,6,1);return this.setAttribute("instanceColorStart",new r.InterleavedBufferAttribute(n,3,0)),this.setAttribute("instanceColorEnd",new r.InterleavedBufferAttribute(n,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new r.WireframeGeometry(e.geometry)),this}fromLineSegments(e){const A=e.geometry;return this.setPositions(A.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new r.Box3);const e=this.attributes.instanceStart,A=this.attributes.instanceEnd;e!==void 0&&A!==void 0&&(this.boundingBox.setFromBufferAttribute(e),jn.setFromBufferAttribute(A),this.boundingBox.union(jn))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new r.Sphere),this.boundingBox===null&&this.computeBoundingBox();const e=this.attributes.instanceStart,A=this.attributes.instanceEnd;if(e!==void 0&&A!==void 0){const n=this.boundingSphere.center;this.boundingBox.getCenter(n);let t=0;for(let i=0,s=e.count;i<s;i++)it.fromBufferAttribute(e,i),t=Math.max(t,n.distanceToSquared(it)),it.fromBufferAttribute(A,i),t=Math.max(t,n.distanceToSquared(it));this.boundingSphere.radius=Math.sqrt(t),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}applyMatrix(e){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(e)}}r.UniformsLib.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new r.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}};r.ShaderLib.line={uniforms:r.UniformsUtils.merge([r.UniformsLib.common,r.UniformsLib.fog,r.UniformsLib.line]),vertexShader:`
|
|
90
90
|
#include <common>
|
|
91
91
|
#include <color_pars_vertex>
|
|
92
92
|
#include <fog_pars_vertex>
|
|
@@ -456,9 +456,9 @@
|
|
|
456
456
|
#include <premultiplied_alpha_fragment>
|
|
457
457
|
|
|
458
458
|
}
|
|
459
|
-
`};class hn extends r.ShaderMaterial{constructor(e){super({type:"LineMaterial",uniforms:r.UniformsUtils.clone(r.ShaderLib.line.uniforms),vertexShader:r.ShaderLib.line.vertexShader,fragmentShader:r.ShaderLib.line.fragmentShader,clipping:!0}),this.isLineMaterial=!0,this.setValues(e)}get color(){return this.uniforms.diffuse.value}set color(e){this.uniforms.diffuse.value=e}get worldUnits(){return"WORLD_UNITS"in this.defines}set worldUnits(e){e===!0?this.defines.WORLD_UNITS="":delete this.defines.WORLD_UNITS}get linewidth(){return this.uniforms.linewidth.value}set linewidth(e){this.uniforms.linewidth&&(this.uniforms.linewidth.value=e)}get dashed(){return"USE_DASH"in this.defines}set dashed(e){e===!0!==this.dashed&&(this.needsUpdate=!0),e===!0?this.defines.USE_DASH="":delete this.defines.USE_DASH}get dashScale(){return this.uniforms.dashScale.value}set dashScale(e){this.uniforms.dashScale.value=e}get dashSize(){return this.uniforms.dashSize.value}set dashSize(e){this.uniforms.dashSize.value=e}get dashOffset(){return this.uniforms.dashOffset.value}set dashOffset(e){this.uniforms.dashOffset.value=e}get gapSize(){return this.uniforms.gapSize.value}set gapSize(e){this.uniforms.gapSize.value=e}get opacity(){return this.uniforms.opacity.value}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get resolution(){return this.uniforms.resolution.value}set resolution(e){this.uniforms.resolution.value.copy(e)}get alphaToCoverage(){return"USE_ALPHA_TO_COVERAGE"in this.defines}set alphaToCoverage(e){this.defines&&(e===!0!==this.alphaToCoverage&&(this.needsUpdate=!0),e===!0?this.defines.USE_ALPHA_TO_COVERAGE="":delete this.defines.USE_ALPHA_TO_COVERAGE)}}const _t=new r.Vector4,zn=new r.Vector3,Xn=new r.Vector3,Me=new r.Vector4,Fe=new r.Vector4,tA=new r.Vector4,Pt=new r.Vector3,Ht=new r.Matrix4,Ge=new r.Line3,Wn=new r.Vector3,st=new r.Box3,ot=new r.Sphere,nA=new r.Vector4;let iA,yA;function Zn(a,e,A){return nA.set(0,0,-e,1).applyMatrix4(a.projectionMatrix),nA.multiplyScalar(1/nA.w),nA.x=yA/A.width,nA.y=yA/A.height,nA.applyMatrix4(a.projectionMatrixInverse),nA.multiplyScalar(1/nA.w),Math.abs(Math.max(nA.x,nA.y))}function Ta(a,e){const A=a.matrixWorld,n=a.geometry,t=n.attributes.instanceStart,i=n.attributes.instanceEnd,s=Math.min(n.instanceCount,t.count);for(let o=0,c=s;o<c;o++){Ge.start.fromBufferAttribute(t,o),Ge.end.fromBufferAttribute(i,o),Ge.applyMatrix4(A);const g=new r.Vector3,l=new r.Vector3;iA.distanceSqToSegment(Ge.start,Ge.end,l,g),l.distanceTo(g)<yA*.5&&e.push({point:l,pointOnLine:g,distance:iA.origin.distanceTo(l),object:a,face:null,faceIndex:o,uv:null,uv1:null})}}function ka(a,e,A){const n=e.projectionMatrix,i=a.material.resolution,s=a.matrixWorld,o=a.geometry,c=o.attributes.instanceStart,g=o.attributes.instanceEnd,l=Math.min(o.instanceCount,c.count),h=-e.near;iA.at(1,tA),tA.w=1,tA.applyMatrix4(e.matrixWorldInverse),tA.applyMatrix4(n),tA.multiplyScalar(1/tA.w),tA.x*=i.x/2,tA.y*=i.y/2,tA.z=0,Pt.copy(tA),Ht.multiplyMatrices(e.matrixWorldInverse,s);for(let I=0,B=l;I<B;I++){if(Me.fromBufferAttribute(c,I),Fe.fromBufferAttribute(g,I),Me.w=1,Fe.w=1,Me.applyMatrix4(Ht),Fe.applyMatrix4(Ht),Me.z>h&&Fe.z>h)continue;if(Me.z>h){const Q=Me.z-Fe.z,b=(Me.z-h)/Q;Me.lerp(Fe,b)}else if(Fe.z>h){const Q=Fe.z-Me.z,b=(Fe.z-h)/Q;Fe.lerp(Me,b)}Me.applyMatrix4(n),Fe.applyMatrix4(n),Me.multiplyScalar(1/Me.w),Fe.multiplyScalar(1/Fe.w),Me.x*=i.x/2,Me.y*=i.y/2,Fe.x*=i.x/2,Fe.y*=i.y/2,Ge.start.copy(Me),Ge.start.z=0,Ge.end.copy(Fe),Ge.end.z=0;const C=Ge.closestPointToPointParameter(Pt,!0);Ge.at(C,Wn);const E=r.MathUtils.lerp(Me.z,Fe.z,C),d=E>=-1&&E<=1,y=Pt.distanceTo(Wn)<yA*.5;if(d&&y){Ge.start.fromBufferAttribute(c,I),Ge.end.fromBufferAttribute(g,I),Ge.start.applyMatrix4(s),Ge.end.applyMatrix4(s);const Q=new r.Vector3,b=new r.Vector3;iA.distanceSqToSegment(Ge.start,Ge.end,b,Q),A.push({point:b,pointOnLine:Q,distance:iA.origin.distanceTo(b),object:a,face:null,faceIndex:I,uv:null,uv1:null})}}}class La extends r.Mesh{constructor(e=new Yi,A=new hn({color:Math.random()*16777215})){super(e,A),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const e=this.geometry,A=e.attributes.instanceStart,n=e.attributes.instanceEnd,t=new Float32Array(2*A.count);for(let s=0,o=0,c=A.count;s<c;s++,o+=2)zn.fromBufferAttribute(A,s),Xn.fromBufferAttribute(n,s),t[o]=o===0?0:t[o-1],t[o+1]=t[o]+zn.distanceTo(Xn);const i=new r.InstancedInterleavedBuffer(t,2,1);return e.setAttribute("instanceDistanceStart",new r.InterleavedBufferAttribute(i,1,0)),e.setAttribute("instanceDistanceEnd",new r.InterleavedBufferAttribute(i,1,1)),this}raycast(e,A){const n=this.material.worldUnits,t=e.camera;t===null&&!n&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const i=e.params.Line2!==void 0&&e.params.Line2.threshold||0;iA=e.ray;const s=this.matrixWorld,o=this.geometry,c=this.material;yA=c.linewidth+i,o.boundingSphere===null&&o.computeBoundingSphere(),ot.copy(o.boundingSphere).applyMatrix4(s);let g;if(n)g=yA*.5;else{const h=Math.max(t.near,ot.distanceToPoint(iA.origin));g=Zn(t,h,c.resolution)}if(ot.radius+=g,iA.intersectsSphere(ot)===!1)return;o.boundingBox===null&&o.computeBoundingBox(),st.copy(o.boundingBox).applyMatrix4(s);let l;if(n)l=yA*.5;else{const h=Math.max(t.near,st.distanceToPoint(iA.origin));l=Zn(t,h,c.resolution)}st.expandByScalar(l),iA.intersectsBox(st)!==!1&&(n?Ta(this,A):ka(this,t,A))}onBeforeRender(e){const A=this.material.uniforms;A&&A.resolution&&(e.getViewport(_t),this.material.uniforms.resolution.value.set(_t.z,_t.w))}}class Ji extends Yi{constructor(){super(),this.isLineGeometry=!0,this.type="LineGeometry"}setPositions(e){const A=e.length-3,n=new Float32Array(2*A);for(let t=0;t<A;t+=3)n[2*t]=e[t],n[2*t+1]=e[t+1],n[2*t+2]=e[t+2],n[2*t+3]=e[t+3],n[2*t+4]=e[t+4],n[2*t+5]=e[t+5];return super.setPositions(n),this}setColors(e){const A=e.length-3,n=new Float32Array(2*A);for(let t=0;t<A;t+=3)n[2*t]=e[t],n[2*t+1]=e[t+1],n[2*t+2]=e[t+2],n[2*t+3]=e[t+3],n[2*t+4]=e[t+4],n[2*t+5]=e[t+5];return super.setColors(n),this}fromLine(e){const A=e.geometry;return this.setPositions(A.attributes.position.array),this}}class va extends La{constructor(e=new Ji,A=new hn({color:Math.random()*16777215})){super(e,A),this.isLine2=!0,this.type="Line2"}}class Na extends r.Mesh{constructor(e){const A=new Ua(e),n=new r.PlaneGeometry(A.image.width*.001,A.image.height*.001),t=new r.MeshBasicMaterial({map:A,toneMapped:!1,transparent:!0});super(n,t);function i(s){t.map.dispatchDOMEvent(s)}this.addEventListener("mousedown",i),this.addEventListener("mousemove",i),this.addEventListener("mouseup",i),this.addEventListener("click",i),this.dispose=function(){n.dispose(),t.dispose(),t.map.dispose(),nn.delete(e),this.removeEventListener("mousedown",i),this.removeEventListener("mousemove",i),this.removeEventListener("mouseup",i),this.removeEventListener("click",i)}}}class Ua extends r.CanvasTexture{constructor(e){super($n(e)),this.dom=e,this.anisotropy=16,this.colorSpace=r.SRGBColorSpace,this.minFilter=r.LinearFilter,this.magFilter=r.LinearFilter;const A=new MutationObserver(()=>{this.scheduleUpdate||(this.scheduleUpdate=setTimeout(()=>this.update(),16))}),n={attributes:!0,childList:!0,subtree:!0,characterData:!0};A.observe(e,n),this.observer=A}dispatchDOMEvent(e){e.data&&_a(this.dom,e.type,e.data.x,e.data.y)}update(){this.image=$n(this.dom),this.needsUpdate=!0,this.scheduleUpdate=null}dispose(){this.observer&&this.observer.disconnect(),this.scheduleUpdate=clearTimeout(this.scheduleUpdate),super.dispose()}}const nn=new WeakMap;function $n(a){const e=document.createRange(),A=new r.Color;function n(I){const B=[];let f=!1;function C(){if(f&&(f=!1,I.restore()),B.length===0)return;let E=-1/0,d=-1/0,y=1/0,Q=1/0;for(let b=0;b<B.length;b++){const w=B[b];E=Math.max(E,w.x),d=Math.max(d,w.y),y=Math.min(y,w.x+w.width),Q=Math.min(Q,w.y+w.height)}I.save(),I.beginPath(),I.rect(E,d,y-E,Q-d),I.clip(),f=!0}return{add:function(E){B.push(E),C()},remove:function(){B.pop(),C()}}}function t(I,B,f,C){C!==""&&(I.textTransform==="uppercase"&&(C=C.toUpperCase()),l.font=I.fontWeight+" "+I.fontSize+" "+I.fontFamily,l.textBaseline="top",l.fillStyle=I.color,l.fillText(C,B,f+parseFloat(I.fontSize)*.1))}function i(I,B,f,C,E){f<2*E&&(E=f/2),C<2*E&&(E=C/2),l.beginPath(),l.moveTo(I+E,B),l.arcTo(I+f,B,I+f,B+C,E),l.arcTo(I+f,B+C,I,B+C,E),l.arcTo(I,B+C,I,B,E),l.arcTo(I,B,I+f,B,E),l.closePath()}function s(I,B,f,C,E,d){const y=I[B+"Width"],Q=I[B+"Style"],b=I[B+"Color"];y!=="0px"&&Q!=="none"&&b!=="transparent"&&b!=="rgba(0, 0, 0, 0)"&&(l.strokeStyle=b,l.lineWidth=parseFloat(y),l.beginPath(),l.moveTo(f,C),l.lineTo(f+E,C+d),l.stroke())}function o(I,B){if(I.nodeType===Node.COMMENT_NODE||I.nodeName==="SCRIPT"||I.style&&I.style.display==="none")return;let f=0,C=0,E=0,d=0;if(I.nodeType===Node.TEXT_NODE){e.selectNode(I);const Q=e.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,E=Q.width,d=Q.height,t(B,f,C,I.nodeValue.trim())}else if(I instanceof HTMLCanvasElement){const Q=I.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,l.save();const b=window.devicePixelRatio;l.scale(1/b,1/b),l.drawImage(I,f,C),l.restore()}else if(I instanceof HTMLImageElement){const Q=I.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,E=Q.width,d=Q.height,l.drawImage(I,f,C,E,d)}else{const Q=I.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,E=Q.width,d=Q.height,B=window.getComputedStyle(I),i(f,C,E,d,parseFloat(B.borderRadius));const b=B.backgroundColor;b!=="transparent"&&b!=="rgba(0, 0, 0, 0)"&&(l.fillStyle=b,l.fill());const w=["borderTop","borderLeft","borderBottom","borderRight"];let R=!0,F=null;for(const D of w){if(F!==null&&(R=B[D+"Width"]===B[F+"Width"]&&B[D+"Color"]===B[F+"Color"]&&B[D+"Style"]===B[F+"Style"]),R===!1)break;F=D}if(R===!0){const D=parseFloat(B.borderTopWidth);B.borderTopWidth!=="0px"&&B.borderTopStyle!=="none"&&B.borderTopColor!=="transparent"&&B.borderTopColor!=="rgba(0, 0, 0, 0)"&&(l.strokeStyle=B.borderTopColor,l.lineWidth=D,l.stroke())}else s(B,"borderTop",f,C,E,0),s(B,"borderLeft",f,C,0,d),s(B,"borderBottom",f,C+d,E,0),s(B,"borderRight",f+E,C,0,d);if(I instanceof HTMLInputElement){let D=B.accentColor;(D===void 0||D==="auto")&&(D=B.color),A.set(D);const N=Math.sqrt(.299*A.r**2+.587*A.g**2+.114*A.b**2)<.5?"white":"#111111";if(I.type==="radio"&&(i(f,C,E,d,d),l.fillStyle="white",l.strokeStyle=D,l.lineWidth=1,l.fill(),l.stroke(),I.checked&&(i(f+2,C+2,E-4,d-4,d),l.fillStyle=D,l.strokeStyle=N,l.lineWidth=2,l.fill(),l.stroke())),I.type==="checkbox"&&(i(f,C,E,d,2),l.fillStyle=I.checked?D:"white",l.strokeStyle=I.checked?N:D,l.lineWidth=1,l.stroke(),l.fill(),I.checked)){const _=l.textAlign;l.textAlign="center";const P={color:N,fontFamily:B.fontFamily,fontSize:d+"px",fontWeight:"bold"};t(P,f+E/2,C,"✔"),l.textAlign=_}if(I.type==="range"){const[_,P,z]=["min","max","value"].map(q=>parseFloat(I[q])),U=(z-_)/(P-_)*(E-d);i(f,C+d/4,E,d/2,d/4),l.fillStyle=N,l.strokeStyle=D,l.lineWidth=1,l.fill(),l.stroke(),i(f,C+d/4,U+d/2,d/2,d/4),l.fillStyle=D,l.fill(),i(f+U,C,d,d,d/2),l.fillStyle=D,l.fill()}(I.type==="color"||I.type==="text"||I.type==="number")&&(h.add({x:f,y:C,width:E,height:d}),t(B,f+parseInt(B.paddingLeft),C+parseInt(B.paddingTop),I.value),h.remove())}}const y=B.overflow==="auto"||B.overflow==="hidden";y&&h.add({x:f,y:C,width:E,height:d});for(let Q=0;Q<I.childNodes.length;Q++)o(I.childNodes[Q],B);y&&h.remove()}const c=a.getBoundingClientRect();let g=nn.get(a);g===void 0&&(g=document.createElement("canvas"),g.width=c.width,g.height=c.height,nn.set(a,g));const l=g.getContext("2d"),h=new n(l);return l.clearRect(0,0,g.width,g.height),o(a),g}function _a(a,e,A,n){const t={clientX:A*a.offsetWidth+a.offsetLeft,clientY:n*a.offsetHeight+a.offsetTop,view:a.ownerDocument.defaultView};window.dispatchEvent(new MouseEvent(e,t));const i=a.getBoundingClientRect();A=A*i.width+i.left,n=n*i.height+i.top;function s(o){if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){const c=o.getBoundingClientRect();if(A>c.left&&A<c.right&&n>c.top&&n<c.bottom&&(o.dispatchEvent(new MouseEvent(e,t)),o instanceof HTMLInputElement&&o.type==="range"&&(e==="mousedown"||e==="click"))){const[g,l]=["min","max"].map(f=>parseFloat(o[f])),h=c.width,B=(A-c.x)/h;o.value=g+(l-g)*B,o.dispatchEvent(new InputEvent("input",{bubbles:!0}))}for(let g=0;g<o.childNodes.length;g++)s(o.childNodes[g])}}s(a)}const It=new r.Vector2,xA={type:"",data:It},ei=new r.Raycaster;class Pa extends r.Group{listenToPointerEvents(e,A){const n=this,t=new r.Raycaster,i=e.domElement;function s(o){o.stopPropagation();const c=e.domElement.getBoundingClientRect();It.x=(o.clientX-c.left)/c.width*2-1,It.y=-(o.clientY-c.top)/c.height*2+1,t.setFromCamera(It,A);const g=t.intersectObjects(n.children,!1);if(g.length>0){const l=g[0],h=l.object,I=l.uv;xA.type=o.type,xA.data.set(I.x,1-I.y),h.dispatchEvent(xA)}}i.addEventListener("pointerdown",s),i.addEventListener("pointerup",s),i.addEventListener("pointermove",s),i.addEventListener("mousedown",s),i.addEventListener("mouseup",s),i.addEventListener("mousemove",s),i.addEventListener("click",s)}listenToXRControllerEvents(e){const A=this,n={move:"mousemove",select:"click",selectstart:"mousedown",selectend:"mouseup"};function t(i){const s=i.target;ei.setFromXRController(s);const o=ei.intersectObjects(A.children,!1);if(o.length>0){const c=o[0],g=c.object,l=c.uv;xA.type=n[i.type],xA.data.set(l.x,1-l.y),g.dispatchEvent(xA)}}e.addEventListener("move",t),e.addEventListener("select",t),e.addEventListener("selectstart",t),e.addEventListener("selectend",t)}}const HA=new r.Vector3,OA=new r.Vector3,Ai=new r.Matrix3;class Ha extends r.LineSegments{constructor(e,A=1,n=16711680){const t=new r.BufferGeometry,i=e.geometry.attributes.normal.count,s=new r.Float32BufferAttribute(i*2*3,3);t.setAttribute("position",s),super(t,new r.LineBasicMaterial({color:n,toneMapped:!1})),this.object=e,this.size=A,this.type="VertexNormalsHelper",this.matrixAutoUpdate=!1,this.update()}update(){this.object.updateMatrixWorld(!0),Ai.getNormalMatrix(this.object.matrixWorld);const e=this.object.matrixWorld,A=this.geometry.attributes.position,n=this.object.geometry;if(n){const t=n.attributes.position,i=n.attributes.normal;let s=0;for(let o=0,c=t.count;o<c;o++)HA.fromBufferAttribute(t,o).applyMatrix4(e),OA.fromBufferAttribute(i,o),OA.applyMatrix3(Ai).normalize().multiplyScalar(this.size).add(HA),A.setXYZ(s,HA.x,HA.y,HA.z),s=s+1,A.setXYZ(s,OA.x,OA.y,OA.z),s=s+1}A.needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}}function ji(a,e,A){const n=A.length-a-1;if(e>=A[n])return n-1;if(e<=A[a])return a;let t=a,i=n,s=Math.floor((t+i)/2);for(;e<A[s]||e>=A[s+1];)e<A[s]?i=s:t=s,s=Math.floor((t+i)/2);return s}function Oa(a,e,A,n){const t=[],i=[],s=[];t[0]=1;for(let o=1;o<=A;++o){i[o]=e-n[a+1-o],s[o]=n[a+o]-e;let c=0;for(let g=0;g<o;++g){const l=s[g+1],h=i[o-g],I=t[g]/(l+h);t[g]=c+l*I,c=h*I}t[o]=c}return t}function qa(a,e,A,n){const t=ji(a,n,e),i=Oa(t,n,a,e),s=new r.Vector4(0,0,0,0);for(let o=0;o<=a;++o){const c=A[t-a+o],g=i[o],l=c.w*g;s.x+=c.x*l,s.y+=c.y*l,s.z+=c.z*l,s.w+=c.w*g}return s}function Ka(a,e,A,n,t){const i=[];for(let h=0;h<=A;++h)i[h]=0;const s=[];for(let h=0;h<=n;++h)s[h]=i.slice(0);const o=[];for(let h=0;h<=A;++h)o[h]=i.slice(0);o[0][0]=1;const c=i.slice(0),g=i.slice(0);for(let h=1;h<=A;++h){c[h]=e-t[a+1-h],g[h]=t[a+h]-e;let I=0;for(let B=0;B<h;++B){const f=g[B+1],C=c[h-B];o[h][B]=f+C;const E=o[B][h-1]/o[h][B];o[B][h]=I+f*E,I=C*E}o[h][h]=I}for(let h=0;h<=A;++h)s[0][h]=o[h][A];for(let h=0;h<=A;++h){let I=0,B=1;const f=[];for(let C=0;C<=A;++C)f[C]=i.slice(0);f[0][0]=1;for(let C=1;C<=n;++C){let E=0;const d=h-C,y=A-C;h>=C&&(f[B][0]=f[I][0]/o[y+1][d],E=f[B][0]*o[d][y]);const Q=d>=-1?1:-d,b=h-1<=y?C-1:A-h;for(let R=Q;R<=b;++R)f[B][R]=(f[I][R]-f[I][R-1])/o[y+1][d+R],E+=f[B][R]*o[d+R][y];h<=y&&(f[B][C]=-f[I][C-1]/o[y+1][h],E+=f[B][C]*o[h][y]),s[C][h]=E;const w=I;I=B,B=w}}let l=A;for(let h=1;h<=n;++h){for(let I=0;I<=A;++I)s[h][I]*=l;l*=A-h}return s}function Ya(a,e,A,n,t){const i=t<a?t:a,s=[],o=ji(a,n,e),c=Ka(o,n,a,i,e),g=[];for(let l=0;l<A.length;++l){const h=A[l].clone(),I=h.w;h.x*=I,h.y*=I,h.z*=I,g[l]=h}for(let l=0;l<=i;++l){const h=g[o-a].clone().multiplyScalar(c[l][0]);for(let I=1;I<=a;++I)h.add(g[o-a+I].clone().multiplyScalar(c[l][I]));s[l]=h}for(let l=i+1;l<=t+1;++l)s[l]=new r.Vector4(0,0,0);return s}function Ja(a,e){let A=1;for(let t=2;t<=a;++t)A*=t;let n=1;for(let t=2;t<=e;++t)n*=t;for(let t=2;t<=a-e;++t)n*=t;return A/n}function ja(a){const e=a.length,A=[],n=[];for(let i=0;i<e;++i){const s=a[i];A[i]=new r.Vector3(s.x,s.y,s.z),n[i]=s.w}const t=[];for(let i=0;i<e;++i){const s=A[i].clone();for(let o=1;o<=i;++o)s.sub(t[i-o].clone().multiplyScalar(Ja(i,o)*n[o]));t[i]=s.divideScalar(n[0])}return t}function Va(a,e,A,n,t){const i=Ya(a,e,A,n,t);return ja(i)}class za extends r.Curve{constructor(e,A,n,t,i){super(),this.degree=e,this.knots=A,this.controlPoints=[],this.startKnot=t||0,this.endKnot=i||this.knots.length-1;for(let s=0;s<n.length;++s){const o=n[s];this.controlPoints[s]=new r.Vector4(o.x,o.y,o.z,o.w)}}getPoint(e,A=new r.Vector3){const n=A,t=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),i=qa(this.degree,this.knots,this.controlPoints,t);return i.w!==1&&i.divideScalar(i.w),n.set(i.x,i.y,i.z)}getTangent(e,A=new r.Vector3){const n=A,t=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),i=Va(this.degree,this.knots,this.controlPoints,t,1);return n.copy(i[1]).normalize(),n}}let oe,be,Ne;class Xa extends r.Loader{constructor(e){super(e)}load(e,A,n,t){const i=this,s=i.path===""?r.LoaderUtils.extractUrlBase(e):i.path,o=new r.FileLoader(this.manager);o.setPath(i.path),o.setResponseType("arraybuffer"),o.setRequestHeader(i.requestHeader),o.setWithCredentials(i.withCredentials),o.load(e,function(c){try{A(i.parse(c,s))}catch(g){t?t(g):console.error(g),i.manager.itemError(e)}},n,t)}parse(e,A){if(tc(e))oe=new Ac().parse(e);else{const t=Xi(e);if(!nc(t))throw new Error("THREE.FBXLoader: Unknown format.");if(ni(t)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+ni(t));oe=new ec().parse(t)}const n=new r.TextureLoader(this.manager).setPath(this.resourcePath||A).setCrossOrigin(this.crossOrigin);return new Wa(n,this.manager).parse(oe)}getFbxTree(){return oe}}class Wa{constructor(e,A){this.textureLoader=e,this.manager=A}parse(){be=this.parseConnections();const e=this.parseImages(),A=this.parseTextures(e),n=this.parseMaterials(A),t=this.parseDeformers(),i=new Za().parse(t);return this.parseScene(t,i,n),Ne}parseConnections(){const e=new Map;return"Connections"in oe&&oe.Connections.connections.forEach(function(n){const t=n[0],i=n[1],s=n[2];e.has(t)||e.set(t,{parents:[],children:[]});const o={ID:i,relationship:s};e.get(t).parents.push(o),e.has(i)||e.set(i,{parents:[],children:[]});const c={ID:t,relationship:s};e.get(i).children.push(c)}),e}parseImages(){const e={},A={};if("Video"in oe.Objects){const n=oe.Objects.Video;for(const t in n){const i=n[t],s=parseInt(t);if(e[s]=i.RelativeFilename||i.Filename,"Content"in i){const o=i.Content instanceof ArrayBuffer&&i.Content.byteLength>0,c=typeof i.Content=="string"&&i.Content!=="";if(o||c){const g=this.parseImage(n[t]);A[i.RelativeFilename||i.Filename]=g}}}}for(const n in e){const t=e[n];A[t]!==void 0?e[n]=A[t]:e[n]=e[n].split("\\").pop()}return e}parseImage(e){const A=e.Content,n=e.RelativeFilename||e.Filename,t=n.slice(n.lastIndexOf(".")+1).toLowerCase();let i;switch(t){case"bmp":i="image/bmp";break;case"jpg":case"jpeg":i="image/jpeg";break;case"png":i="image/png";break;case"tif":i="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",n),i="image/tga";break;default:console.warn('FBXLoader: Image type "'+t+'" is not supported.');return}if(typeof A=="string")return"data:"+i+";base64,"+A;{const s=new Uint8Array(A);return window.URL.createObjectURL(new Blob([s],{type:i}))}}parseTextures(e){const A=new Map;if("Texture"in oe.Objects){const n=oe.Objects.Texture;for(const t in n){const i=this.parseTexture(n[t],e);A.set(parseInt(t),i)}}return A}parseTexture(e,A){const n=this.loadTexture(e,A);n.ID=e.id,n.name=e.attrName;const t=e.WrapModeU,i=e.WrapModeV,s=t!==void 0?t.value:0,o=i!==void 0?i.value:0;if(n.wrapS=s===0?r.RepeatWrapping:r.ClampToEdgeWrapping,n.wrapT=o===0?r.RepeatWrapping:r.ClampToEdgeWrapping,"Scaling"in e){const c=e.Scaling.value;n.repeat.x=c[0],n.repeat.y=c[1]}if("Translation"in e){const c=e.Translation.value;n.offset.x=c[0],n.offset.y=c[1]}return n}loadTexture(e,A){const n=new Set(["tga","tif","tiff","exr","dds","hdr","ktx2"]),t=e.FileName.split(".").pop().toLowerCase(),i=n.has(t)?this.manager.getHandler(`.${t}`):this.textureLoader;if(!i)return console.warn(`FBXLoader: ${t.toUpperCase()} loader not found, creating placeholder texture for`,e.RelativeFilename),new r.Texture;const s=i.path;s||i.setPath(this.textureLoader.path);const o=be.get(e.id).children;let c;o!==void 0&&o.length>0&&A[o[0].ID]!==void 0&&(c=A[o[0].ID],(c.indexOf("blob:")===0||c.indexOf("data:")===0)&&i.setPath(void 0));const g=i.load(c);return i.setPath(s),g}parseMaterials(e){const A=new Map;if("Material"in oe.Objects){const n=oe.Objects.Material;for(const t in n){const i=this.parseMaterial(n[t],e);i!==null&&A.set(parseInt(t),i)}}return A}parseMaterial(e,A){const n=e.id,t=e.attrName;let i=e.ShadingModel;if(typeof i=="object"&&(i=i.value),!be.has(n))return null;const s=this.parseParameters(e,A,n);let o;switch(i.toLowerCase()){case"phong":o=new r.MeshPhongMaterial;break;case"lambert":o=new r.MeshLambertMaterial;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',i),o=new r.MeshPhongMaterial;break}return o.setValues(s),o.name=t,o}parseParameters(e,A,n){const t={};e.BumpFactor&&(t.bumpScale=e.BumpFactor.value),e.Diffuse?t.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Diffuse.value),r.SRGBColorSpace):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(t.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.DiffuseColor.value),r.SRGBColorSpace)),e.DisplacementFactor&&(t.displacementScale=e.DisplacementFactor.value),e.Emissive?t.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Emissive.value),r.SRGBColorSpace):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(t.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.EmissiveColor.value),r.SRGBColorSpace)),e.EmissiveFactor&&(t.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),e.Opacity&&(t.opacity=parseFloat(e.Opacity.value)),t.opacity<1&&(t.transparent=!0),e.ReflectionFactor&&(t.reflectivity=e.ReflectionFactor.value),e.Shininess&&(t.shininess=e.Shininess.value),e.Specular?t.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Specular.value),r.SRGBColorSpace):e.SpecularColor&&e.SpecularColor.type==="Color"&&(t.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.SpecularColor.value),r.SRGBColorSpace));const i=this;return be.get(n).children.forEach(function(s){const o=s.relationship;switch(o){case"Bump":t.bumpMap=i.getTexture(A,s.ID);break;case"Maya|TEX_ao_map":t.aoMap=i.getTexture(A,s.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":t.map=i.getTexture(A,s.ID),t.map!==void 0&&(t.map.colorSpace=r.SRGBColorSpace);break;case"DisplacementColor":t.displacementMap=i.getTexture(A,s.ID);break;case"EmissiveColor":t.emissiveMap=i.getTexture(A,s.ID),t.emissiveMap!==void 0&&(t.emissiveMap.colorSpace=r.SRGBColorSpace);break;case"NormalMap":case"Maya|TEX_normal_map":t.normalMap=i.getTexture(A,s.ID);break;case"ReflectionColor":t.envMap=i.getTexture(A,s.ID),t.envMap!==void 0&&(t.envMap.mapping=r.EquirectangularReflectionMapping,t.envMap.colorSpace=r.SRGBColorSpace);break;case"SpecularColor":t.specularMap=i.getTexture(A,s.ID),t.specularMap!==void 0&&(t.specularMap.colorSpace=r.SRGBColorSpace);break;case"TransparentColor":case"TransparencyFactor":t.alphaMap=i.getTexture(A,s.ID),t.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",o);break}}),t}getTexture(e,A){return"LayeredTexture"in oe.Objects&&A in oe.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),A=be.get(A).children[0].ID),e.get(A)}parseDeformers(){const e={},A={};if("Deformer"in oe.Objects){const n=oe.Objects.Deformer;for(const t in n){const i=n[t],s=be.get(parseInt(t));if(i.attrType==="Skin"){const o=this.parseSkeleton(s,n);o.ID=t,s.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),o.geometryID=s.parents[0].ID,e[t]=o}else if(i.attrType==="BlendShape"){const o={id:t};o.rawTargets=this.parseMorphTargets(s,n),o.id=t,s.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),A[t]=o}}}return{skeletons:e,morphTargets:A}}parseSkeleton(e,A){const n=[];return e.children.forEach(function(t){const i=A[t.ID];if(i.attrType!=="Cluster")return;const s={ID:t.ID,indices:[],weights:[],transformLink:new r.Matrix4().fromArray(i.TransformLink.a)};"Indexes"in i&&(s.indices=i.Indexes.a,s.weights=i.Weights.a),n.push(s)}),{rawBones:n,bones:[]}}parseMorphTargets(e,A){const n=[];for(let t=0;t<e.children.length;t++){const i=e.children[t],s=A[i.ID],o={name:s.attrName,initialWeight:s.DeformPercent,id:s.id,fullWeights:s.FullWeights.a};if(s.attrType!=="BlendShapeChannel")return;o.geoID=be.get(parseInt(i.ID)).children.filter(function(c){return c.relationship===void 0})[0].ID,n.push(o)}return n}parseScene(e,A,n){Ne=new r.Group;const t=this.parseModels(e.skeletons,A,n),i=oe.Objects.Model,s=this;t.forEach(function(c){const g=i[c.ID];s.setLookAtProperties(c,g),be.get(c.ID)?.parents?.forEach(function(h){const I=t.get(h.ID);I!==void 0&&I.add(c)}),c.parent===null&&Ne.add(c)}),this.bindSkeleton(e.skeletons,A,t),this.addGlobalSceneSettings(),Ne.traverse(function(c){if(c.userData.transformData){c.parent&&(c.userData.transformData.parentMatrix=c.parent.matrix,c.userData.transformData.parentMatrixWorld=c.parent.matrixWorld);const g=zi(c.userData.transformData);c.applyMatrix4(g),c.updateWorldMatrix()}c.isSkinnedMesh&&(c.computeBoundingBox(),c.computeBoundingSphere(),c.boundingBox.expandByScalar(3),c.boundingSphere.radius*=3)});const o=new $a().parse();Ne.children.length===1&&Ne.children[0].isGroup&&(Ne.children[0].animations=o,Ne=Ne.children[0]),Ne.animations=o}parseModels(e,A,n){const t=new Map,i=oe.Objects.Model;for(const s in i){const o=parseInt(s),c=i[s],g=be.get(o);let l=this.buildSkeleton(g,e,o,c.attrName);if(!l){switch(c.attrType){case"Camera":l=this.createCamera(g);break;case"Light":l=this.createLight(g);break;case"Mesh":l=this.createMesh(g,A,n);break;case"NurbsCurve":l=this.createCurve(g,A);break;case"LimbNode":case"Root":l=new r.Bone;break;default:l=new r.Group;break}l.name=c.attrName?r.PropertyBinding.sanitizeNodeName(c.attrName):"",l.userData.originalName=c.attrName,l.ID=o}this.getTransformData(l,c),t.set(o,l)}return t}buildSkeleton(e,A,n,t){let i=null;return e?.parents.forEach(function(s){for(const o in A){const c=A[o];c.rawBones.forEach(function(g,l){if(g.ID===s.ID){const h=i;i=new r.Bone,i.matrixWorld.copy(g.transformLink),i.name=t?r.PropertyBinding.sanitizeNodeName(t):"",i.userData.originalName=t,i.ID=n,c.bones[l]=i,h!==null&&i.add(h)}})}}),i}createCamera(e){let A,n;if(e.children.forEach(function(t){const i=oe.Objects.NodeAttribute[t.ID];i!==void 0&&(n=i)}),n===void 0)A=new r.Object3D;else{let t=0;n.CameraProjectionType!==void 0&&n.CameraProjectionType.value===1&&(t=1);let i=1;n.NearPlane!==void 0&&(i=n.NearPlane.value/1e3);let s=1e3;n.FarPlane!==void 0&&(s=n.FarPlane.value/1e3);let o=window.innerWidth,c=window.innerHeight;n.AspectWidth!==void 0&&n.AspectHeight!==void 0&&(o=n.AspectWidth.value,c=n.AspectHeight.value);const g=o/c;let l=45;n.FieldOfView!==void 0&&(l=n.FieldOfView.value);const h=n.FocalLength?n.FocalLength.value:null;switch(t){case 0:A=new r.PerspectiveCamera(l,g,i,s),h!==null&&A.setFocalLength(h);break;case 1:console.warn("THREE.FBXLoader: Orthographic cameras not supported yet."),A=new r.Object3D;break;default:console.warn("THREE.FBXLoader: Unknown camera type "+t+"."),A=new r.Object3D;break}}return A}createLight(e){let A,n;if(e.children.forEach(function(t){const i=oe.Objects.NodeAttribute[t.ID];i!==void 0&&(n=i)}),n===void 0)A=new r.Object3D;else{let t;n.LightType===void 0?t=0:t=n.LightType.value;let i=16777215;n.Color!==void 0&&(i=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(n.Color.value),r.SRGBColorSpace));let s=n.Intensity===void 0?1:n.Intensity.value/100;n.CastLightOnObject!==void 0&&n.CastLightOnObject.value===0&&(s=0);let o=0;n.FarAttenuationEnd!==void 0&&(n.EnableFarAttenuation!==void 0&&n.EnableFarAttenuation.value===0?o=0:o=n.FarAttenuationEnd.value);const c=1;switch(t){case 0:A=new r.PointLight(i,s,o,c);break;case 1:A=new r.DirectionalLight(i,s);break;case 2:let g=Math.PI/3;n.InnerAngle!==void 0&&(g=r.MathUtils.degToRad(n.InnerAngle.value));let l=0;n.OuterAngle!==void 0&&(l=r.MathUtils.degToRad(n.OuterAngle.value),l=Math.max(l,1)),A=new r.SpotLight(i,s,o,g,l,c);break;default:console.warn("THREE.FBXLoader: Unknown light type "+n.LightType.value+", defaulting to a PointLight."),A=new r.PointLight(i,s);break}n.CastShadows!==void 0&&n.CastShadows.value===1&&(A.castShadow=!0)}return A}createMesh(e,A,n){let t,i=null,s=null;const o=[];if(e.children.forEach(function(c){A.has(c.ID)&&(i=A.get(c.ID)),n.has(c.ID)&&o.push(n.get(c.ID))}),o.length>1?s=o:o.length>0?s=o[0]:(s=new r.MeshPhongMaterial({name:r.Loader.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(s)),"color"in i.attributes&&o.forEach(function(c){c.vertexColors=!0}),i.groups.length>0){let c=!1;for(let g=0,l=i.groups.length;g<l;g++){const h=i.groups[g];(h.materialIndex<0||h.materialIndex>=o.length)&&(h.materialIndex=o.length,c=!0)}if(c){const g=new r.MeshStandardMaterial;o.push(g)}}return i.FBX_Deformer?(t=new r.SkinnedMesh(i,s),t.normalizeSkinWeights()):t=new r.Mesh(i,s),t}createCurve(e,A){const n=e.children.reduce(function(i,s){return A.has(s.ID)&&(i=A.get(s.ID)),i},null),t=new r.LineBasicMaterial({name:r.Loader.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new r.Line(n,t)}getTransformData(e,A){const n={};"InheritType"in A&&(n.inheritType=parseInt(A.InheritType.value)),"RotationOrder"in A?n.eulerOrder=XA(A.RotationOrder.value):n.eulerOrder=XA(0),"Lcl_Translation"in A&&(n.translation=A.Lcl_Translation.value),"PreRotation"in A&&(n.preRotation=A.PreRotation.value),"Lcl_Rotation"in A&&(n.rotation=A.Lcl_Rotation.value),"PostRotation"in A&&(n.postRotation=A.PostRotation.value),"Lcl_Scaling"in A&&(n.scale=A.Lcl_Scaling.value),"ScalingOffset"in A&&(n.scalingOffset=A.ScalingOffset.value),"ScalingPivot"in A&&(n.scalingPivot=A.ScalingPivot.value),"RotationOffset"in A&&(n.rotationOffset=A.RotationOffset.value),"RotationPivot"in A&&(n.rotationPivot=A.RotationPivot.value),e.userData.transformData=n}setLookAtProperties(e,A){"LookAtProperty"in A&&be.get(e.ID).children.forEach(function(t){if(t.relationship==="LookAtProperty"){const i=oe.Objects.Model[t.ID];if("Lcl_Translation"in i){const s=i.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(s),Ne.add(e.target)):e.lookAt(new r.Vector3().fromArray(s))}}})}bindSkeleton(e,A,n){const t=this.parsePoseNodes();for(const i in e){const s=e[i];be.get(parseInt(s.ID)).parents.forEach(function(c){if(A.has(c.ID)){const g=c.ID;be.get(g).parents.forEach(function(h){n.has(h.ID)&&n.get(h.ID).bind(new r.Skeleton(s.bones),t[h.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in oe.Objects){const A=oe.Objects.Pose;for(const n in A)if(A[n].attrType==="BindPose"&&A[n].NbPoseNodes>0){const t=A[n].PoseNode;Array.isArray(t)?t.forEach(function(i){e[i.Node]=new r.Matrix4().fromArray(i.Matrix.a)}):e[t.Node]=new r.Matrix4().fromArray(t.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in oe){if("AmbientColor"in oe.GlobalSettings){const e=oe.GlobalSettings.AmbientColor.value,A=e[0],n=e[1],t=e[2];if(A!==0||n!==0||t!==0){const i=new r.Color().setRGB(A,n,t,r.SRGBColorSpace);Ne.add(new r.AmbientLight(i,1))}}"UnitScaleFactor"in oe.GlobalSettings&&(Ne.userData.unitScaleFactor=oe.GlobalSettings.UnitScaleFactor.value)}}}class Za{constructor(){this.negativeMaterialIndices=!1}parse(e){const A=new Map;if("Geometry"in oe.Objects){const n=oe.Objects.Geometry;for(const t in n){const i=be.get(parseInt(t)),s=this.parseGeometry(i,n[t],e);A.set(parseInt(t),s)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),A}parseGeometry(e,A,n){switch(A.attrType){case"Mesh":return this.parseMeshGeometry(e,A,n);case"NurbsCurve":return this.parseNurbsGeometry(A)}}parseMeshGeometry(e,A,n){const t=n.skeletons,i=[],s=e.parents.map(function(h){return oe.Objects.Model[h.ID]});if(s.length===0)return;const o=e.children.reduce(function(h,I){return t[I.ID]!==void 0&&(h=t[I.ID]),h},null);e.children.forEach(function(h){n.morphTargets[h.ID]!==void 0&&i.push(n.morphTargets[h.ID])});const c=s[0],g={};"RotationOrder"in c&&(g.eulerOrder=XA(c.RotationOrder.value)),"InheritType"in c&&(g.inheritType=parseInt(c.InheritType.value)),"GeometricTranslation"in c&&(g.translation=c.GeometricTranslation.value),"GeometricRotation"in c&&(g.rotation=c.GeometricRotation.value),"GeometricScaling"in c&&(g.scale=c.GeometricScaling.value);const l=zi(g);return this.genGeometry(A,o,i,l)}genGeometry(e,A,n,t){const i=new r.BufferGeometry;e.attrName&&(i.name=e.attrName);const s=this.parseGeoNode(e,A),o=this.genBuffers(s),c=new r.Float32BufferAttribute(o.vertex,3);if(c.applyMatrix4(t),i.setAttribute("position",c),o.colors.length>0&&i.setAttribute("color",new r.Float32BufferAttribute(o.colors,3)),A&&(i.setAttribute("skinIndex",new r.Uint16BufferAttribute(o.weightsIndices,4)),i.setAttribute("skinWeight",new r.Float32BufferAttribute(o.vertexWeights,4)),i.FBX_Deformer=A),o.normal.length>0){const g=new r.Matrix3().getNormalMatrix(t),l=new r.Float32BufferAttribute(o.normal,3);l.applyNormalMatrix(g),i.setAttribute("normal",l)}if(o.uvs.forEach(function(g,l){const h=l===0?"uv":`uv${l}`;i.setAttribute(h,new r.Float32BufferAttribute(o.uvs[l],2))}),s.material&&s.material.mappingType!=="AllSame"){let g=o.materialIndex[0],l=0;if(o.materialIndex.forEach(function(h,I){h!==g&&(i.addGroup(l,I-l,g),g=h,l=I)}),i.groups.length>0){const h=i.groups[i.groups.length-1],I=h.start+h.count;I!==o.materialIndex.length&&i.addGroup(I,o.materialIndex.length-I,g)}i.groups.length===0&&i.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(i,e,n,t),i}parseGeoNode(e,A){const n={};if(n.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],n.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&(n.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(n.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(n.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){n.uv=[];let t=0;for(;e.LayerElementUV[t];)e.LayerElementUV[t].UV&&n.uv.push(this.parseUVs(e.LayerElementUV[t])),t++}return n.weightTable={},A!==null&&(n.skeleton=A,A.rawBones.forEach(function(t,i){t.indices.forEach(function(s,o){n.weightTable[s]===void 0&&(n.weightTable[s]=[]),n.weightTable[s].push({id:i,weight:t.weights[o]})})})),n}genBuffers(e){const A={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let n=0,t=0,i=!1,s=[],o=[],c=[],g=[],l=[],h=[];const I=this;return e.vertexIndices.forEach(function(B,f){let C,E=!1;B<0&&(B=B^-1,E=!0);let d=[],y=[];if(s.push(B*3,B*3+1,B*3+2),e.color){const Q=rt(f,n,B,e.color);c.push(Q[0],Q[1],Q[2])}if(e.skeleton){if(e.weightTable[B]!==void 0&&e.weightTable[B].forEach(function(Q){y.push(Q.weight),d.push(Q.id)}),y.length>4){i||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),i=!0);const Q=[0,0,0,0],b=[0,0,0,0];y.forEach(function(w,R){let F=w,D=d[R];b.forEach(function(M,N,_){if(F>M){_[N]=F,F=M;const P=Q[N];Q[N]=D,D=P}})}),d=Q,y=b}for(;y.length<4;)y.push(0),d.push(0);for(let Q=0;Q<4;++Q)l.push(y[Q]),h.push(d[Q])}if(e.normal){const Q=rt(f,n,B,e.normal);o.push(Q[0],Q[1],Q[2])}e.material&&e.material.mappingType!=="AllSame"&&(C=rt(f,n,B,e.material)[0],C<0&&(I.negativeMaterialIndices=!0,C=0)),e.uv&&e.uv.forEach(function(Q,b){const w=rt(f,n,B,Q);g[b]===void 0&&(g[b]=[]),g[b].push(w[0]),g[b].push(w[1])}),t++,E&&(I.genFace(A,e,s,C,o,c,g,l,h,t),n++,t=0,s=[],o=[],c=[],g=[],l=[],h=[])}),A}getNormalNewell(e){const A=new r.Vector3(0,0,0);for(let n=0;n<e.length;n++){const t=e[n],i=e[(n+1)%e.length];A.x+=(t.y-i.y)*(t.z+i.z),A.y+=(t.z-i.z)*(t.x+i.x),A.z+=(t.x-i.x)*(t.y+i.y)}return A.normalize(),A}getNormalTangentAndBitangent(e){const A=this.getNormalNewell(e),t=(Math.abs(A.z)>.5?new r.Vector3(0,1,0):new r.Vector3(0,0,1)).cross(A).normalize(),i=A.clone().cross(t).normalize();return{normal:A,tangent:t,bitangent:i}}flattenVertex(e,A,n){return new r.Vector2(e.dot(A),e.dot(n))}genFace(e,A,n,t,i,s,o,c,g,l){let h;if(l>3){const I=[],B=A.baseVertexPositions||A.vertexPositions;for(let d=0;d<n.length;d+=3)I.push(new r.Vector3(B[n[d]],B[n[d+1]],B[n[d+2]]));const{tangent:f,bitangent:C}=this.getNormalTangentAndBitangent(I),E=[];for(const d of I)E.push(this.flattenVertex(d,f,C));h=r.ShapeUtils.triangulateShape(E,[])}else l===2?(console.warn("THREE.FBXLoader: Edge topology detected. This is currently not supported. The resulting mesh will not be correct."),h=[[0,1,2]]):h=[[0,1,2]];for(const[I,B,f]of h)e.vertex.push(A.vertexPositions[n[I*3]]),e.vertex.push(A.vertexPositions[n[I*3+1]]),e.vertex.push(A.vertexPositions[n[I*3+2]]),e.vertex.push(A.vertexPositions[n[B*3]]),e.vertex.push(A.vertexPositions[n[B*3+1]]),e.vertex.push(A.vertexPositions[n[B*3+2]]),e.vertex.push(A.vertexPositions[n[f*3]]),e.vertex.push(A.vertexPositions[n[f*3+1]]),e.vertex.push(A.vertexPositions[n[f*3+2]]),A.skeleton&&(e.vertexWeights.push(c[I*4]),e.vertexWeights.push(c[I*4+1]),e.vertexWeights.push(c[I*4+2]),e.vertexWeights.push(c[I*4+3]),e.vertexWeights.push(c[B*4]),e.vertexWeights.push(c[B*4+1]),e.vertexWeights.push(c[B*4+2]),e.vertexWeights.push(c[B*4+3]),e.vertexWeights.push(c[f*4]),e.vertexWeights.push(c[f*4+1]),e.vertexWeights.push(c[f*4+2]),e.vertexWeights.push(c[f*4+3]),e.weightsIndices.push(g[I*4]),e.weightsIndices.push(g[I*4+1]),e.weightsIndices.push(g[I*4+2]),e.weightsIndices.push(g[I*4+3]),e.weightsIndices.push(g[B*4]),e.weightsIndices.push(g[B*4+1]),e.weightsIndices.push(g[B*4+2]),e.weightsIndices.push(g[B*4+3]),e.weightsIndices.push(g[f*4]),e.weightsIndices.push(g[f*4+1]),e.weightsIndices.push(g[f*4+2]),e.weightsIndices.push(g[f*4+3])),A.color&&(e.colors.push(s[I*3]),e.colors.push(s[I*3+1]),e.colors.push(s[I*3+2]),e.colors.push(s[B*3]),e.colors.push(s[B*3+1]),e.colors.push(s[B*3+2]),e.colors.push(s[f*3]),e.colors.push(s[f*3+1]),e.colors.push(s[f*3+2])),A.material&&A.material.mappingType!=="AllSame"&&(e.materialIndex.push(t),e.materialIndex.push(t),e.materialIndex.push(t)),A.normal&&(e.normal.push(i[I*3]),e.normal.push(i[I*3+1]),e.normal.push(i[I*3+2]),e.normal.push(i[B*3]),e.normal.push(i[B*3+1]),e.normal.push(i[B*3+2]),e.normal.push(i[f*3]),e.normal.push(i[f*3+1]),e.normal.push(i[f*3+2])),A.uv&&A.uv.forEach(function(C,E){e.uvs[E]===void 0&&(e.uvs[E]=[]),e.uvs[E].push(o[E][I*2]),e.uvs[E].push(o[E][I*2+1]),e.uvs[E].push(o[E][B*2]),e.uvs[E].push(o[E][B*2+1]),e.uvs[E].push(o[E][f*2]),e.uvs[E].push(o[E][f*2+1])})}addMorphTargets(e,A,n,t){if(n.length===0)return;e.morphTargetsRelative=!0,e.morphAttributes.position=[];const i=this;n.forEach(function(s){s.rawTargets.forEach(function(o){const c=oe.Objects.Geometry[o.geoID];c!==void 0&&i.genMorphGeometry(e,A,c,t,o.name)})})}genMorphGeometry(e,A,n,t,i){const s=A.Vertices!==void 0?A.Vertices.a:[],o=A.PolygonVertexIndex!==void 0?A.PolygonVertexIndex.a:[],c=n.Vertices!==void 0?n.Vertices.a:[],g=n.Indexes!==void 0?n.Indexes.a:[],l=e.attributes.position.count*3,h=new Float32Array(l);for(let C=0;C<g.length;C++){const E=g[C]*3;h[E]=c[C*3],h[E+1]=c[C*3+1],h[E+2]=c[C*3+2]}const I={vertexIndices:o,vertexPositions:h,baseVertexPositions:s},B=this.genBuffers(I),f=new r.Float32BufferAttribute(B.vertex,3);f.name=i||n.attrName,f.applyMatrix4(t),e.morphAttributes.position.push(f)}parseNormals(e){const A=e.MappingInformationType,n=e.ReferenceInformationType,t=e.Normals.a;let i=[];return n==="IndexToDirect"&&("NormalIndex"in e?i=e.NormalIndex.a:"NormalsIndex"in e&&(i=e.NormalsIndex.a)),{dataSize:3,buffer:t,indices:i,mappingType:A,referenceType:n}}parseUVs(e){const A=e.MappingInformationType,n=e.ReferenceInformationType,t=e.UV.a;let i=[];return n==="IndexToDirect"&&(i=e.UVIndex.a),{dataSize:2,buffer:t,indices:i,mappingType:A,referenceType:n}}parseVertexColors(e){if(!e.Colors)return;const A=e.MappingInformationType,n=e.ReferenceInformationType,t=e.Colors.a;let i=[];n==="IndexToDirect"&&(i=e.ColorIndex.a);for(let s=0,o=new r.Color;s<t.length;s+=4)o.fromArray(t,s),r.ColorManagement.toWorkingColorSpace(o,r.SRGBColorSpace),o.toArray(t,s);return{dataSize:4,buffer:t,indices:i,mappingType:A,referenceType:n}}parseMaterialIndices(e){const A=e.MappingInformationType,n=e.ReferenceInformationType;if(A==="NoMappingInformation")return{dataSize:1,buffer:[0],indices:[0],mappingType:"AllSame",referenceType:n};const t=e.Materials.a,i=[];for(let s=0;s<t.length;++s)i.push(s);return{dataSize:1,buffer:t,indices:i,mappingType:A,referenceType:n}}parseNurbsGeometry(e){const A=parseInt(e.Order);if(isNaN(A))return console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s",e.Order,e.id),new r.BufferGeometry;const n=A-1,t=e.KnotVector.a,i=[],s=e.Points.a;for(let h=0,I=s.length;h<I;h+=4)i.push(new r.Vector4().fromArray(s,h));let o,c;if(e.Form==="Closed")i.push(i[0]);else if(e.Form==="Periodic"){o=n,c=t.length-1-o;for(let h=0;h<n;++h)i.push(i[h])}const l=new za(n,t,i,o,c).getPoints(i.length*12);return new r.BufferGeometry().setFromPoints(l)}}class $a{parse(){const e=[],A=this.parseClips();if(A!==void 0)for(const n in A){const t=A[n],i=this.addClip(t);e.push(i)}return e}parseClips(){if(oe.Objects.AnimationCurve===void 0)return;const e=this.parseAnimationCurveNodes();this.parseAnimationCurves(e);const A=this.parseAnimationLayers(e);return this.parseAnimStacks(A)}parseAnimationCurveNodes(){const e=oe.Objects.AnimationCurveNode,A=new Map;for(const n in e){const t=e[n];if(t.attrName.match(/S|R|T|DeformPercent/)!==null){const i={id:t.id,attr:t.attrName,curves:{}};A.set(i.id,i)}}return A}parseAnimationCurves(e){const A=oe.Objects.AnimationCurve;for(const n in A){const t={id:A[n].id,times:A[n].KeyTime.a.map(ic),values:A[n].KeyValueFloat.a},i=be.get(t.id);if(i!==void 0){const s=i.parents[0].ID,o=i.parents[0].relationship;o.match(/X/)?e.get(s).curves.x=t:o.match(/Y/)?e.get(s).curves.y=t:o.match(/Z/)?e.get(s).curves.z=t:o.match(/DeformPercent/)&&e.has(s)&&(e.get(s).curves.morph=t)}}}parseAnimationLayers(e){const A=oe.Objects.AnimationLayer,n=new Map;for(const t in A){const i=[],s=be.get(parseInt(t));s!==void 0&&(s.children.forEach(function(c,g){if(e.has(c.ID)){const l=e.get(c.ID);if(l.curves.x!==void 0||l.curves.y!==void 0||l.curves.z!==void 0){if(i[g]===void 0){const h=be.get(c.ID).parents.filter(function(I){return I.relationship!==void 0})[0].ID;if(h!==void 0){const I=oe.Objects.Model[h.toString()];if(I===void 0){console.warn("THREE.FBXLoader: Encountered a unused curve.",c);return}const B={modelName:I.attrName?r.PropertyBinding.sanitizeNodeName(I.attrName):"",ID:I.id,initialPosition:[0,0,0],initialRotation:[0,0,0],initialScale:[1,1,1]};Ne.traverse(function(f){f.ID===I.id&&(B.transform=f.matrix,f.userData.transformData&&(B.eulerOrder=f.userData.transformData.eulerOrder))}),B.transform||(B.transform=new r.Matrix4),"PreRotation"in I&&(B.preRotation=I.PreRotation.value),"PostRotation"in I&&(B.postRotation=I.PostRotation.value),i[g]=B}}i[g]&&(i[g][l.attr]=l)}else if(l.curves.morph!==void 0){if(i[g]===void 0){const h=be.get(c.ID).parents.filter(function(d){return d.relationship!==void 0})[0].ID,I=be.get(h).parents[0].ID,B=be.get(I).parents[0].ID,f=be.get(B).parents[0].ID,C=oe.Objects.Model[f],E={modelName:C.attrName?r.PropertyBinding.sanitizeNodeName(C.attrName):"",morphName:oe.Objects.Deformer[h].attrName};i[g]=E}i[g][l.attr]=l}}}),n.set(parseInt(t),i))}return n}parseAnimStacks(e){const A=oe.Objects.AnimationStack,n={};for(const t in A){const i=be.get(parseInt(t)).children;i.length>1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const s=e.get(i[0].ID);n[t]={name:A[t].attrName,layer:s}}return n}addClip(e){let A=[];const n=this;return e.layer.forEach(function(t){A=A.concat(n.generateTracks(t))}),new r.AnimationClip(e.name,-1,A)}generateTracks(e){const A=[];let n=new r.Vector3,t=new r.Vector3;if(e.transform&&e.transform.decompose(n,new r.Quaternion,t),n=n.toArray(),t=t.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const i=this.generateVectorTrack(e.modelName,e.T.curves,n,"position");i!==void 0&&A.push(i)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const i=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);i!==void 0&&A.push(i)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const i=this.generateVectorTrack(e.modelName,e.S.curves,t,"scale");i!==void 0&&A.push(i)}if(e.DeformPercent!==void 0){const i=this.generateMorphTrack(e);i!==void 0&&A.push(i)}return A}generateVectorTrack(e,A,n,t){const i=this.getTimesForAllAxes(A),s=this.getKeyframeTrackValues(i,A,n);return new r.VectorKeyframeTrack(e+"."+t,i,s)}generateRotationTrack(e,A,n,t,i){let s,o;if(A.x===void 0||A.y===void 0||A.z===void 0){console.warn("THREE.FBXLoader: Missing rotation curves "+(A.x===void 0?"x ":"")+(A.y===void 0?"y ":"")+(A.z===void 0?"z ":"")+" for animation of "+e+". This is currently not supported.");return}if(A.x!==void 0&&A.y!==void 0&&A.z!==void 0){const I=this.interpolateRotations(A.x,A.y,A.z,i);s=I[0],o=I[1]}const c=XA(0);n!==void 0&&(n=n.map(r.MathUtils.degToRad),n.push(c),n=new r.Euler().fromArray(n),n=new r.Quaternion().setFromEuler(n)),t!==void 0&&(t=t.map(r.MathUtils.degToRad),t.push(c),t=new r.Euler().fromArray(t),t=new r.Quaternion().setFromEuler(t).invert());const g=new r.Quaternion,l=new r.Euler,h=[];if(!(!o||!s)){for(let I=0;I<o.length;I+=3)l.set(o[I],o[I+1],o[I+2],i),g.setFromEuler(l),n!==void 0&&g.premultiply(n),t!==void 0&&g.multiply(t),I>2&&new r.Quaternion().fromArray(h,(I-3)/3*4).dot(g)<0&&g.set(-g.x,-g.y,-g.z,-g.w),g.toArray(h,I/3*4);return new r.QuaternionKeyframeTrack(e+".quaternion",s,h)}}generateMorphTrack(e){const A=e.DeformPercent.curves.morph,n=A.values.map(function(i){return i/100}),t=Ne.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new r.NumberKeyframeTrack(e.modelName+".morphTargetInfluences["+t+"]",A.times,n)}getTimesForAllAxes(e){let A=[];if(e.x!==void 0&&(A=A.concat(e.x.times)),e.y!==void 0&&(A=A.concat(e.y.times)),e.z!==void 0&&(A=A.concat(e.z.times)),A=A.sort(function(n,t){return n-t}),A.length>1){let n=1,t=A[0];for(let i=1;i<A.length;i++){const s=A[i];s!==t&&(A[n]=s,t=s,n++)}A=A.slice(0,n)}return A}getKeyframeTrackValues(e,A,n){const t=n,i=[];let s=-1,o=-1,c=-1;return e.forEach(function(g){if(A.x&&(s=A.x.times.indexOf(g)),A.y&&(o=A.y.times.indexOf(g)),A.z&&(c=A.z.times.indexOf(g)),s!==-1){const l=A.x.values[s];i.push(l),t[0]=l}else i.push(t[0]);if(o!==-1){const l=A.y.values[o];i.push(l),t[1]=l}else i.push(t[1]);if(c!==-1){const l=A.z.values[c];i.push(l),t[2]=l}else i.push(t[2])}),i}interpolateRotations(e,A,n,t){const i=[],s=[];i.push(e.times[0]),s.push(r.MathUtils.degToRad(e.values[0])),s.push(r.MathUtils.degToRad(A.values[0])),s.push(r.MathUtils.degToRad(n.values[0]));for(let o=1;o<e.values.length;o++){const c=[e.values[o-1],A.values[o-1],n.values[o-1]];if(isNaN(c[0])||isNaN(c[1])||isNaN(c[2]))continue;const g=c.map(r.MathUtils.degToRad),l=[e.values[o],A.values[o],n.values[o]];if(isNaN(l[0])||isNaN(l[1])||isNaN(l[2]))continue;const h=l.map(r.MathUtils.degToRad),I=[l[0]-c[0],l[1]-c[1],l[2]-c[2]],B=[Math.abs(I[0]),Math.abs(I[1]),Math.abs(I[2])];if(B[0]>=180||B[1]>=180||B[2]>=180){const C=Math.max(...B)/180,E=new r.Euler(...g,t),d=new r.Euler(...h,t),y=new r.Quaternion().setFromEuler(E),Q=new r.Quaternion().setFromEuler(d);y.dot(Q)&&Q.set(-Q.x,-Q.y,-Q.z,-Q.w);const b=e.times[o-1],w=e.times[o]-b,R=new r.Quaternion,F=new r.Euler;for(let D=0;D<1;D+=1/C)R.copy(y.clone().slerp(Q.clone(),D)),i.push(b+D*w),F.setFromQuaternion(R,t),s.push(F.x),s.push(F.y),s.push(F.z)}else i.push(e.times[o]),s.push(r.MathUtils.degToRad(e.values[o])),s.push(r.MathUtils.degToRad(A.values[o])),s.push(r.MathUtils.degToRad(n.values[o]))}return[i,s]}}class ec{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,A){this.currentProp=e,this.currentPropName=A}parse(e){this.currentIndent=0,this.allNodes=new Vi,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const A=this,n=e.split(/[\r\n]+/);return n.forEach(function(t,i){const s=t.match(/^[\s\t]*;/),o=t.match(/^[\s\t]*$/);if(s||o)return;const c=t.match("^\\t{"+A.currentIndent+"}(\\w+):(.*){",""),g=t.match("^\\t{"+A.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),l=t.match("^\\t{"+(A.currentIndent-1)+"}}");c?A.parseNodeBegin(t,c):g?A.parseNodeProperty(t,g,n[++i]):l?A.popStack():t.match(/^[^\s\t}]/)&&A.parseNodePropertyContinued(t)}),this.allNodes}parseNodeBegin(e,A){const n=A[1].trim().replace(/^"/,"").replace(/"$/,""),t=A[2].split(",").map(function(c){return c.trim().replace(/^"/,"").replace(/"$/,"")}),i={name:n},s=this.parseNodeAttr(t),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(n,i):n in o?(n==="PoseNode"?o.PoseNode.push(i):o[n].id!==void 0&&(o[n]={},o[n][o[n].id]=o[n]),s.id!==""&&(o[n][s.id]=i)):typeof s.id=="number"?(o[n]={},o[n][s.id]=i):n!=="Properties70"&&(n==="PoseNode"?o[n]=[i]:o[n]=i),typeof s.id=="number"&&(i.id=s.id),s.name!==""&&(i.attrName=s.name),s.type!==""&&(i.attrType=s.type),this.pushStack(i)}parseNodeAttr(e){let A=e[0];e[0]!==""&&(A=parseInt(e[0]),isNaN(A)&&(A=e[0]));let n="",t="";return e.length>1&&(n=e[1].replace(/^(\w+)::/,""),t=e[2]),{id:A,name:n,type:t}}parseNodeProperty(e,A,n){let t=A[1].replace(/^"/,"").replace(/"$/,"").trim(),i=A[2].replace(/^"/,"").replace(/"$/,"").trim();t==="Content"&&i===","&&(i=n.replace(/"/g,"").replace(/,$/,"").trim());const s=this.getCurrentNode();if(s.name==="Properties70"){this.parseNodeSpecialProperty(e,t,i);return}if(t==="C"){const c=i.split(",").slice(1),g=parseInt(c[0]),l=parseInt(c[1]);let h=i.split(",").slice(3);h=h.map(function(I){return I.trim().replace(/^"/,"")}),t="connections",i=[g,l],oc(i,h),s[t]===void 0&&(s[t]=[])}t==="Node"&&(s.id=i),t in s&&Array.isArray(s[t])?s[t].push(i):t!=="a"?s[t]=i:s.a=i,this.setCurrentProp(s,t),t==="a"&&i.slice(-1)!==","&&(s.a=qt(i))}parseNodePropertyContinued(e){const A=this.getCurrentNode();A.a+=e,e.slice(-1)!==","&&(A.a=qt(A.a))}parseNodeSpecialProperty(e,A,n){const t=n.split('",').map(function(l){return l.trim().replace(/^\"/,"").replace(/\s/,"_")}),i=t[0],s=t[1],o=t[2],c=t[3];let g=t[4];switch(s){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":g=parseFloat(g);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":g=qt(g);break}this.getPrevNode()[i]={type:s,type2:o,flag:c,value:g},this.setCurrentProp(this.getPrevNode(),i)}}class Ac{parse(e){const A=new ti(e);A.skip(23);const n=A.getUint32();if(n<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+n);const t=new Vi;for(;!this.endOfContent(A);){const i=this.parseNode(A,n);i!==null&&t.add(i.name,i)}return t}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,A){const n={},t=A>=7500?e.getUint64():e.getUint32(),i=A>=7500?e.getUint64():e.getUint32();A>=7500?e.getUint64():e.getUint32();const s=e.getUint8(),o=e.getString(s);if(t===0)return null;const c=[];for(let I=0;I<i;I++)c.push(this.parseProperty(e));const g=c.length>0?c[0]:"",l=c.length>1?c[1]:"",h=c.length>2?c[2]:"";for(n.singleProperty=i===1&&e.getOffset()===t;t>e.getOffset();){const I=this.parseNode(e,A);I!==null&&this.parseSubNode(o,n,I)}return n.propertyList=c,typeof g=="number"&&(n.id=g),l!==""&&(n.attrName=l),h!==""&&(n.attrType=h),o!==""&&(n.name=o),n}parseSubNode(e,A,n){if(n.singleProperty===!0){const t=n.propertyList[0];Array.isArray(t)?(A[n.name]=n,n.a=t):A[n.name]=t}else if(e==="Connections"&&n.name==="C"){const t=[];n.propertyList.forEach(function(i,s){s!==0&&t.push(i)}),A.connections===void 0&&(A.connections=[]),A.connections.push(t)}else if(n.name==="Properties70")Object.keys(n).forEach(function(i){A[i]=n[i]});else if(e==="Properties70"&&n.name==="P"){let t=n.propertyList[0],i=n.propertyList[1];const s=n.propertyList[2],o=n.propertyList[3];let c;t.indexOf("Lcl ")===0&&(t=t.replace("Lcl ","Lcl_")),i.indexOf("Lcl ")===0&&(i=i.replace("Lcl ","Lcl_")),i==="Color"||i==="ColorRGB"||i==="Vector"||i==="Vector3D"||i.indexOf("Lcl_")===0?c=[n.propertyList[4],n.propertyList[5],n.propertyList[6]]:c=n.propertyList[4],A[t]={type:i,type2:s,flag:o,value:c}}else A[n.name]===void 0?typeof n.id=="number"?(A[n.name]={},A[n.name][n.id]=n):A[n.name]=n:n.name==="PoseNode"?(Array.isArray(A[n.name])||(A[n.name]=[A[n.name]]),A[n.name].push(n)):A[n.name][n.id]===void 0&&(A[n.name][n.id]=n)}parseProperty(e){const A=e.getString(1);let n;switch(A){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return n=e.getUint32(),e.getArrayBuffer(n);case"S":return n=e.getUint32(),e.getString(n);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const t=e.getUint32(),i=e.getUint32(),s=e.getUint32();if(i===0)switch(A){case"b":case"c":return e.getBooleanArray(t);case"d":return e.getFloat64Array(t);case"f":return e.getFloat32Array(t);case"i":return e.getInt32Array(t);case"l":return e.getInt64Array(t)}const o=qA(new Uint8Array(e.getArrayBuffer(s))),c=new ti(o.buffer);switch(A){case"b":case"c":return c.getBooleanArray(t);case"d":return c.getFloat64Array(t);case"f":return c.getFloat32Array(t);case"i":return c.getInt32Array(t);case"l":return c.getInt64Array(t)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+A)}}}class ti{constructor(e,A){this.dv=new DataView(e),this.offset=0,this.littleEndian=A!==void 0?A:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const A=[];for(let n=0;n<e;n++)A.push(this.getBoolean());return A}getUint8(){const e=this.dv.getUint8(this.offset);return this.offset+=1,e}getInt16(){const e=this.dv.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}getInt32(){const e=this.dv.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}getInt32Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getInt32());return A}getUint32(){const e=this.dv.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}getInt64(){let e,A;return this.littleEndian?(e=this.getUint32(),A=this.getUint32()):(A=this.getUint32(),e=this.getUint32()),A&2147483648?(A=~A&4294967295,e=~e&4294967295,e===4294967295&&(A=A+1&4294967295),e=e+1&4294967295,-(A*4294967296+e)):A*4294967296+e}getInt64Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getInt64());return A}getUint64(){let e,A;return this.littleEndian?(e=this.getUint32(),A=this.getUint32()):(A=this.getUint32(),e=this.getUint32()),A*4294967296+e}getFloat32(){const e=this.dv.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}getFloat32Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getFloat32());return A}getFloat64(){const e=this.dv.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}getFloat64Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getFloat64());return A}getArrayBuffer(e){const A=this.dv.buffer.slice(this.offset,this.offset+e);return this.offset+=e,A}getString(e){const A=this.offset;let n=new Uint8Array(this.dv.buffer,A,e);this.skip(e);const t=n.indexOf(0);return t>=0&&(n=new Uint8Array(this.dv.buffer,A,t)),this._textDecoder.decode(n)}}class Vi{add(e,A){this[e]=A}}function tc(a){const e="Kaydara FBX Binary \0";return a.byteLength>=e.length&&e===Xi(a,0,e.length)}function nc(a){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let A=0;function n(t){const i=a[t-1];return a=a.slice(A+t),A++,i}for(let t=0;t<e.length;++t)if(n(1)===e[t])return!1;return!0}function ni(a){const e=/FBXVersion: (\d+)/,A=a.match(e);if(A)return parseInt(A[1]);throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.")}function ic(a){return a/46186158e3}const sc=[];function rt(a,e,A,n){let t;switch(n.mappingType){case"ByPolygonVertex":t=a;break;case"ByPolygon":t=e;break;case"ByVertice":t=A;break;case"AllSame":t=n.indices[0];break;default:console.warn("THREE.FBXLoader: unknown attribute mapping type "+n.mappingType)}n.referenceType==="IndexToDirect"&&(t=n.indices[t]);const i=t*n.dataSize,s=i+n.dataSize;return rc(sc,n.buffer,i,s)}const Ot=new r.Euler,MA=new r.Vector3;function zi(a){const e=new r.Matrix4,A=new r.Matrix4,n=new r.Matrix4,t=new r.Matrix4,i=new r.Matrix4,s=new r.Matrix4,o=new r.Matrix4,c=new r.Matrix4,g=new r.Matrix4,l=new r.Matrix4,h=new r.Matrix4,I=new r.Matrix4,B=a.inheritType?a.inheritType:0;a.translation&&e.setPosition(MA.fromArray(a.translation));const f=XA(0);if(a.preRotation){const _=a.preRotation.map(r.MathUtils.degToRad);_.push(f),A.makeRotationFromEuler(Ot.fromArray(_))}if(a.rotation){const _=a.rotation.map(r.MathUtils.degToRad);_.push(a.eulerOrder||f),n.makeRotationFromEuler(Ot.fromArray(_))}if(a.postRotation){const _=a.postRotation.map(r.MathUtils.degToRad);_.push(f),t.makeRotationFromEuler(Ot.fromArray(_)),t.invert()}a.scale&&i.scale(MA.fromArray(a.scale)),a.scalingOffset&&o.setPosition(MA.fromArray(a.scalingOffset)),a.scalingPivot&&s.setPosition(MA.fromArray(a.scalingPivot)),a.rotationOffset&&c.setPosition(MA.fromArray(a.rotationOffset)),a.rotationPivot&&g.setPosition(MA.fromArray(a.rotationPivot)),a.parentMatrixWorld&&(h.copy(a.parentMatrix),l.copy(a.parentMatrixWorld));const C=A.clone().multiply(n).multiply(t),E=new r.Matrix4;E.extractRotation(l);const d=new r.Matrix4;d.copyPosition(l);const y=d.clone().invert().multiply(l),Q=E.clone().invert().multiply(y),b=i,w=new r.Matrix4;if(B===0)w.copy(E).multiply(C).multiply(Q).multiply(b);else if(B===1)w.copy(E).multiply(Q).multiply(C).multiply(b);else{const P=new r.Matrix4().scale(new r.Vector3().setFromMatrixScale(h)).clone().invert(),z=Q.clone().multiply(P);w.copy(E).multiply(C).multiply(z).multiply(b)}const R=g.clone().invert(),F=s.clone().invert();let D=e.clone().multiply(c).multiply(g).multiply(A).multiply(n).multiply(t).multiply(R).multiply(o).multiply(s).multiply(i).multiply(F);const M=new r.Matrix4().copyPosition(D),N=l.clone().multiply(M);return I.copyPosition(N),D=I.clone().multiply(w),D.premultiply(l.invert()),D}function XA(a){a=a||0;const e=["ZYX","YZX","XZY","ZXY","YXZ","XYZ"];return a===6?(console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."),e[0]):e[a]}function qt(a){return a.split(",").map(function(A){return parseFloat(A)})}function Xi(a,e,A){return e===void 0&&(e=0),A===void 0&&(A=a.byteLength),new TextDecoder().decode(new Uint8Array(a,e,A))}function oc(a,e){for(let A=0,n=a.length,t=e.length;A<t;A++,n++)a[n]=e[A]}function rc(a,e,A,n){for(let t=A,i=0;t<n;t++,i++)a[i]=e[t];return a}class ac extends r.Loader{constructor(e){super(e)}load(e,A,n,t){const i=this,s=this.path===""?r.LoaderUtils.extractUrlBase(e):this.path,o=new r.FileLoader(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(c){try{A(i.parse(c,s))}catch(g){t?t(g):console.error(g),i.manager.itemError(e)}},n,t)}setMaterialOptions(e){return this.materialOptions=e,this}parse(e,A){const n=e.split(`
|
|
460
|
-
`);let t={};const i=/\s+/,s={};for(let c=0;c<n.length;c++){let g=n[c];if(g=g.trim(),g.length===0||g.charAt(0)==="#")continue;const l=g.indexOf(" ");let h=l>=0?g.substring(0,l):g;h=h.toLowerCase();let I=l>=0?g.substring(l+1):"";if(I=I.trim(),h==="newmtl")t={name:I},s[I]=t;else if(h==="ka"||h==="kd"||h==="ks"||h==="ke"){const B=I.split(i,3);t[h]=[parseFloat(B[0]),parseFloat(B[1]),parseFloat(B[2])]}else t[h]=I}const o=new
|
|
459
|
+
`};class ln extends r.ShaderMaterial{constructor(e){super({type:"LineMaterial",uniforms:r.UniformsUtils.clone(r.ShaderLib.line.uniforms),vertexShader:r.ShaderLib.line.vertexShader,fragmentShader:r.ShaderLib.line.fragmentShader,clipping:!0}),this.isLineMaterial=!0,this.setValues(e)}get color(){return this.uniforms.diffuse.value}set color(e){this.uniforms.diffuse.value=e}get worldUnits(){return"WORLD_UNITS"in this.defines}set worldUnits(e){e===!0?this.defines.WORLD_UNITS="":delete this.defines.WORLD_UNITS}get linewidth(){return this.uniforms.linewidth.value}set linewidth(e){this.uniforms.linewidth&&(this.uniforms.linewidth.value=e)}get dashed(){return"USE_DASH"in this.defines}set dashed(e){e===!0!==this.dashed&&(this.needsUpdate=!0),e===!0?this.defines.USE_DASH="":delete this.defines.USE_DASH}get dashScale(){return this.uniforms.dashScale.value}set dashScale(e){this.uniforms.dashScale.value=e}get dashSize(){return this.uniforms.dashSize.value}set dashSize(e){this.uniforms.dashSize.value=e}get dashOffset(){return this.uniforms.dashOffset.value}set dashOffset(e){this.uniforms.dashOffset.value=e}get gapSize(){return this.uniforms.gapSize.value}set gapSize(e){this.uniforms.gapSize.value=e}get opacity(){return this.uniforms.opacity.value}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get resolution(){return this.uniforms.resolution.value}set resolution(e){this.uniforms.resolution.value.copy(e)}get alphaToCoverage(){return"USE_ALPHA_TO_COVERAGE"in this.defines}set alphaToCoverage(e){this.defines&&(e===!0!==this.alphaToCoverage&&(this.needsUpdate=!0),e===!0?this.defines.USE_ALPHA_TO_COVERAGE="":delete this.defines.USE_ALPHA_TO_COVERAGE)}}const _t=new r.Vector4,Vn=new r.Vector3,zn=new r.Vector3,Me=new r.Vector4,Fe=new r.Vector4,tA=new r.Vector4,Pt=new r.Vector3,Ht=new r.Matrix4,Ge=new r.Line3,Xn=new r.Vector3,st=new r.Box3,ot=new r.Sphere,nA=new r.Vector4;let iA,wA;function Wn(a,e,A){return nA.set(0,0,-e,1).applyMatrix4(a.projectionMatrix),nA.multiplyScalar(1/nA.w),nA.x=wA/A.width,nA.y=wA/A.height,nA.applyMatrix4(a.projectionMatrixInverse),nA.multiplyScalar(1/nA.w),Math.abs(Math.max(nA.x,nA.y))}function Ra(a,e){const A=a.matrixWorld,n=a.geometry,t=n.attributes.instanceStart,i=n.attributes.instanceEnd,s=Math.min(n.instanceCount,t.count);for(let o=0,c=s;o<c;o++){Ge.start.fromBufferAttribute(t,o),Ge.end.fromBufferAttribute(i,o),Ge.applyMatrix4(A);const g=new r.Vector3,l=new r.Vector3;iA.distanceSqToSegment(Ge.start,Ge.end,l,g),l.distanceTo(g)<wA*.5&&e.push({point:l,pointOnLine:g,distance:iA.origin.distanceTo(l),object:a,face:null,faceIndex:o,uv:null,uv1:null})}}function Ga(a,e,A){const n=e.projectionMatrix,i=a.material.resolution,s=a.matrixWorld,o=a.geometry,c=o.attributes.instanceStart,g=o.attributes.instanceEnd,l=Math.min(o.instanceCount,c.count),h=-e.near;iA.at(1,tA),tA.w=1,tA.applyMatrix4(e.matrixWorldInverse),tA.applyMatrix4(n),tA.multiplyScalar(1/tA.w),tA.x*=i.x/2,tA.y*=i.y/2,tA.z=0,Pt.copy(tA),Ht.multiplyMatrices(e.matrixWorldInverse,s);for(let I=0,B=l;I<B;I++){if(Me.fromBufferAttribute(c,I),Fe.fromBufferAttribute(g,I),Me.w=1,Fe.w=1,Me.applyMatrix4(Ht),Fe.applyMatrix4(Ht),Me.z>h&&Fe.z>h)continue;if(Me.z>h){const Q=Me.z-Fe.z,b=(Me.z-h)/Q;Me.lerp(Fe,b)}else if(Fe.z>h){const Q=Fe.z-Me.z,b=(Fe.z-h)/Q;Fe.lerp(Me,b)}Me.applyMatrix4(n),Fe.applyMatrix4(n),Me.multiplyScalar(1/Me.w),Fe.multiplyScalar(1/Fe.w),Me.x*=i.x/2,Me.y*=i.y/2,Fe.x*=i.x/2,Fe.y*=i.y/2,Ge.start.copy(Me),Ge.start.z=0,Ge.end.copy(Fe),Ge.end.z=0;const C=Ge.closestPointToPointParameter(Pt,!0);Ge.at(C,Xn);const p=r.MathUtils.lerp(Me.z,Fe.z,C),d=p>=-1&&p<=1,w=Pt.distanceTo(Xn)<wA*.5;if(d&&w){Ge.start.fromBufferAttribute(c,I),Ge.end.fromBufferAttribute(g,I),Ge.start.applyMatrix4(s),Ge.end.applyMatrix4(s);const Q=new r.Vector3,b=new r.Vector3;iA.distanceSqToSegment(Ge.start,Ge.end,b,Q),A.push({point:b,pointOnLine:Q,distance:iA.origin.distanceTo(b),object:a,face:null,faceIndex:I,uv:null,uv1:null})}}}class Ta extends r.Mesh{constructor(e=new Yi,A=new ln({color:Math.random()*16777215})){super(e,A),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const e=this.geometry,A=e.attributes.instanceStart,n=e.attributes.instanceEnd,t=new Float32Array(2*A.count);for(let s=0,o=0,c=A.count;s<c;s++,o+=2)Vn.fromBufferAttribute(A,s),zn.fromBufferAttribute(n,s),t[o]=o===0?0:t[o-1],t[o+1]=t[o]+Vn.distanceTo(zn);const i=new r.InstancedInterleavedBuffer(t,2,1);return e.setAttribute("instanceDistanceStart",new r.InterleavedBufferAttribute(i,1,0)),e.setAttribute("instanceDistanceEnd",new r.InterleavedBufferAttribute(i,1,1)),this}raycast(e,A){const n=this.material.worldUnits,t=e.camera;t===null&&!n&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const i=e.params.Line2!==void 0&&e.params.Line2.threshold||0;iA=e.ray;const s=this.matrixWorld,o=this.geometry,c=this.material;wA=c.linewidth+i,o.boundingSphere===null&&o.computeBoundingSphere(),ot.copy(o.boundingSphere).applyMatrix4(s);let g;if(n)g=wA*.5;else{const h=Math.max(t.near,ot.distanceToPoint(iA.origin));g=Wn(t,h,c.resolution)}if(ot.radius+=g,iA.intersectsSphere(ot)===!1)return;o.boundingBox===null&&o.computeBoundingBox(),st.copy(o.boundingBox).applyMatrix4(s);let l;if(n)l=wA*.5;else{const h=Math.max(t.near,st.distanceToPoint(iA.origin));l=Wn(t,h,c.resolution)}st.expandByScalar(l),iA.intersectsBox(st)!==!1&&(n?Ra(this,A):Ga(this,t,A))}onBeforeRender(e){const A=this.material.uniforms;A&&A.resolution&&(e.getViewport(_t),this.material.uniforms.resolution.value.set(_t.z,_t.w))}}class Ji extends Yi{constructor(){super(),this.isLineGeometry=!0,this.type="LineGeometry"}setPositions(e){const A=e.length-3,n=new Float32Array(2*A);for(let t=0;t<A;t+=3)n[2*t]=e[t],n[2*t+1]=e[t+1],n[2*t+2]=e[t+2],n[2*t+3]=e[t+3],n[2*t+4]=e[t+4],n[2*t+5]=e[t+5];return super.setPositions(n),this}setColors(e){const A=e.length-3,n=new Float32Array(2*A);for(let t=0;t<A;t+=3)n[2*t]=e[t],n[2*t+1]=e[t+1],n[2*t+2]=e[t+2],n[2*t+3]=e[t+3],n[2*t+4]=e[t+4],n[2*t+5]=e[t+5];return super.setColors(n),this}fromLine(e){const A=e.geometry;return this.setPositions(A.attributes.position.array),this}}class ka extends Ta{constructor(e=new Ji,A=new ln({color:Math.random()*16777215})){super(e,A),this.isLine2=!0,this.type="Line2"}}class La extends r.Mesh{constructor(e){const A=new va(e),n=new r.PlaneGeometry(A.image.width*.001,A.image.height*.001),t=new r.MeshBasicMaterial({map:A,toneMapped:!1,transparent:!0});super(n,t);function i(s){t.map.dispatchDOMEvent(s)}this.addEventListener("mousedown",i),this.addEventListener("mousemove",i),this.addEventListener("mouseup",i),this.addEventListener("click",i),this.dispose=function(){n.dispose(),t.dispose(),t.map.dispose(),nn.delete(e),this.removeEventListener("mousedown",i),this.removeEventListener("mousemove",i),this.removeEventListener("mouseup",i),this.removeEventListener("click",i)}}}class va extends r.CanvasTexture{constructor(e){super(Zn(e)),this.dom=e,this.anisotropy=16,this.colorSpace=r.SRGBColorSpace,this.minFilter=r.LinearFilter,this.magFilter=r.LinearFilter;const A=new MutationObserver(()=>{this.scheduleUpdate||(this.scheduleUpdate=setTimeout(()=>this.update(),16))}),n={attributes:!0,childList:!0,subtree:!0,characterData:!0};A.observe(e,n),this.observer=A}dispatchDOMEvent(e){e.data&&Na(this.dom,e.type,e.data.x,e.data.y)}update(){this.image=Zn(this.dom),this.needsUpdate=!0,this.scheduleUpdate=null}dispose(){this.observer&&this.observer.disconnect(),this.scheduleUpdate=clearTimeout(this.scheduleUpdate),super.dispose()}}const nn=new WeakMap;function Zn(a){const e=document.createRange(),A=new r.Color;function n(I){const B=[];let f=!1;function C(){if(f&&(f=!1,I.restore()),B.length===0)return;let p=-1/0,d=-1/0,w=1/0,Q=1/0;for(let b=0;b<B.length;b++){const y=B[b];p=Math.max(p,y.x),d=Math.max(d,y.y),w=Math.min(w,y.x+y.width),Q=Math.min(Q,y.y+y.height)}I.save(),I.beginPath(),I.rect(p,d,w-p,Q-d),I.clip(),f=!0}return{add:function(p){B.push(p),C()},remove:function(){B.pop(),C()}}}function t(I,B,f,C){C!==""&&(I.textTransform==="uppercase"&&(C=C.toUpperCase()),l.font=I.fontWeight+" "+I.fontSize+" "+I.fontFamily,l.textBaseline="top",l.fillStyle=I.color,l.fillText(C,B,f+parseFloat(I.fontSize)*.1))}function i(I,B,f,C,p){f<2*p&&(p=f/2),C<2*p&&(p=C/2),l.beginPath(),l.moveTo(I+p,B),l.arcTo(I+f,B,I+f,B+C,p),l.arcTo(I+f,B+C,I,B+C,p),l.arcTo(I,B+C,I,B,p),l.arcTo(I,B,I+f,B,p),l.closePath()}function s(I,B,f,C,p,d){const w=I[B+"Width"],Q=I[B+"Style"],b=I[B+"Color"];w!=="0px"&&Q!=="none"&&b!=="transparent"&&b!=="rgba(0, 0, 0, 0)"&&(l.strokeStyle=b,l.lineWidth=parseFloat(w),l.beginPath(),l.moveTo(f,C),l.lineTo(f+p,C+d),l.stroke())}function o(I,B){if(I.nodeType===Node.COMMENT_NODE||I.nodeName==="SCRIPT"||I.style&&I.style.display==="none")return;let f=0,C=0,p=0,d=0;if(I.nodeType===Node.TEXT_NODE){e.selectNode(I);const Q=e.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,p=Q.width,d=Q.height,t(B,f,C,I.nodeValue.trim())}else if(I instanceof HTMLCanvasElement){const Q=I.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,l.save();const b=window.devicePixelRatio;l.scale(1/b,1/b),l.drawImage(I,f,C),l.restore()}else if(I instanceof HTMLImageElement){const Q=I.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,p=Q.width,d=Q.height,l.drawImage(I,f,C,p,d)}else{const Q=I.getBoundingClientRect();f=Q.left-c.left-.5,C=Q.top-c.top-.5,p=Q.width,d=Q.height,B=window.getComputedStyle(I),i(f,C,p,d,parseFloat(B.borderRadius));const b=B.backgroundColor;b!=="transparent"&&b!=="rgba(0, 0, 0, 0)"&&(l.fillStyle=b,l.fill());const y=["borderTop","borderLeft","borderBottom","borderRight"];let R=!0,F=null;for(const D of y){if(F!==null&&(R=B[D+"Width"]===B[F+"Width"]&&B[D+"Color"]===B[F+"Color"]&&B[D+"Style"]===B[F+"Style"]),R===!1)break;F=D}if(R===!0){const D=parseFloat(B.borderTopWidth);B.borderTopWidth!=="0px"&&B.borderTopStyle!=="none"&&B.borderTopColor!=="transparent"&&B.borderTopColor!=="rgba(0, 0, 0, 0)"&&(l.strokeStyle=B.borderTopColor,l.lineWidth=D,l.stroke())}else s(B,"borderTop",f,C,p,0),s(B,"borderLeft",f,C,0,d),s(B,"borderBottom",f,C+d,p,0),s(B,"borderRight",f+p,C,0,d);if(I instanceof HTMLInputElement){let D=B.accentColor;(D===void 0||D==="auto")&&(D=B.color),A.set(D);const N=Math.sqrt(.299*A.r**2+.587*A.g**2+.114*A.b**2)<.5?"white":"#111111";if(I.type==="radio"&&(i(f,C,p,d,d),l.fillStyle="white",l.strokeStyle=D,l.lineWidth=1,l.fill(),l.stroke(),I.checked&&(i(f+2,C+2,p-4,d-4,d),l.fillStyle=D,l.strokeStyle=N,l.lineWidth=2,l.fill(),l.stroke())),I.type==="checkbox"&&(i(f,C,p,d,2),l.fillStyle=I.checked?D:"white",l.strokeStyle=I.checked?N:D,l.lineWidth=1,l.stroke(),l.fill(),I.checked)){const _=l.textAlign;l.textAlign="center";const P={color:N,fontFamily:B.fontFamily,fontSize:d+"px",fontWeight:"bold"};t(P,f+p/2,C,"✔"),l.textAlign=_}if(I.type==="range"){const[_,P,z]=["min","max","value"].map(q=>parseFloat(I[q])),U=(z-_)/(P-_)*(p-d);i(f,C+d/4,p,d/2,d/4),l.fillStyle=N,l.strokeStyle=D,l.lineWidth=1,l.fill(),l.stroke(),i(f,C+d/4,U+d/2,d/2,d/4),l.fillStyle=D,l.fill(),i(f+U,C,d,d,d/2),l.fillStyle=D,l.fill()}(I.type==="color"||I.type==="text"||I.type==="number")&&(h.add({x:f,y:C,width:p,height:d}),t(B,f+parseInt(B.paddingLeft),C+parseInt(B.paddingTop),I.value),h.remove())}}const w=B.overflow==="auto"||B.overflow==="hidden";w&&h.add({x:f,y:C,width:p,height:d});for(let Q=0;Q<I.childNodes.length;Q++)o(I.childNodes[Q],B);w&&h.remove()}const c=a.getBoundingClientRect();let g=nn.get(a);g===void 0&&(g=document.createElement("canvas"),g.width=c.width,g.height=c.height,nn.set(a,g));const l=g.getContext("2d"),h=new n(l);return l.clearRect(0,0,g.width,g.height),o(a),g}function Na(a,e,A,n){const t={clientX:A*a.offsetWidth+a.offsetLeft,clientY:n*a.offsetHeight+a.offsetTop,view:a.ownerDocument.defaultView};window.dispatchEvent(new MouseEvent(e,t));const i=a.getBoundingClientRect();A=A*i.width+i.left,n=n*i.height+i.top;function s(o){if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){const c=o.getBoundingClientRect();if(A>c.left&&A<c.right&&n>c.top&&n<c.bottom&&(o.dispatchEvent(new MouseEvent(e,t)),o instanceof HTMLInputElement&&o.type==="range"&&(e==="mousedown"||e==="click"))){const[g,l]=["min","max"].map(f=>parseFloat(o[f])),h=c.width,B=(A-c.x)/h;o.value=g+(l-g)*B,o.dispatchEvent(new InputEvent("input",{bubbles:!0}))}for(let g=0;g<o.childNodes.length;g++)s(o.childNodes[g])}}s(a)}const It=new r.Vector2,xA={type:"",data:It},$n=new r.Raycaster;class Ua extends r.Group{listenToPointerEvents(e,A){const n=this,t=new r.Raycaster,i=e.domElement;function s(o){o.stopPropagation();const c=e.domElement.getBoundingClientRect();It.x=(o.clientX-c.left)/c.width*2-1,It.y=-(o.clientY-c.top)/c.height*2+1,t.setFromCamera(It,A);const g=t.intersectObjects(n.children,!1);if(g.length>0){const l=g[0],h=l.object,I=l.uv;xA.type=o.type,xA.data.set(I.x,1-I.y),h.dispatchEvent(xA)}}i.addEventListener("pointerdown",s),i.addEventListener("pointerup",s),i.addEventListener("pointermove",s),i.addEventListener("mousedown",s),i.addEventListener("mouseup",s),i.addEventListener("mousemove",s),i.addEventListener("click",s)}listenToXRControllerEvents(e){const A=this,n={move:"mousemove",select:"click",selectstart:"mousedown",selectend:"mouseup"};function t(i){const s=i.target;$n.setFromXRController(s);const o=$n.intersectObjects(A.children,!1);if(o.length>0){const c=o[0],g=c.object,l=c.uv;xA.type=n[i.type],xA.data.set(l.x,1-l.y),g.dispatchEvent(xA)}}e.addEventListener("move",t),e.addEventListener("select",t),e.addEventListener("selectstart",t),e.addEventListener("selectend",t)}}const HA=new r.Vector3,OA=new r.Vector3,ei=new r.Matrix3;class _a extends r.LineSegments{constructor(e,A=1,n=16711680){const t=new r.BufferGeometry,i=e.geometry.attributes.normal.count,s=new r.Float32BufferAttribute(i*2*3,3);t.setAttribute("position",s),super(t,new r.LineBasicMaterial({color:n,toneMapped:!1})),this.object=e,this.size=A,this.type="VertexNormalsHelper",this.matrixAutoUpdate=!1,this.update()}update(){this.object.updateMatrixWorld(!0),ei.getNormalMatrix(this.object.matrixWorld);const e=this.object.matrixWorld,A=this.geometry.attributes.position,n=this.object.geometry;if(n){const t=n.attributes.position,i=n.attributes.normal;let s=0;for(let o=0,c=t.count;o<c;o++)HA.fromBufferAttribute(t,o).applyMatrix4(e),OA.fromBufferAttribute(i,o),OA.applyMatrix3(ei).normalize().multiplyScalar(this.size).add(HA),A.setXYZ(s,HA.x,HA.y,HA.z),s=s+1,A.setXYZ(s,OA.x,OA.y,OA.z),s=s+1}A.needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}}function ji(a,e,A){const n=A.length-a-1;if(e>=A[n])return n-1;if(e<=A[a])return a;let t=a,i=n,s=Math.floor((t+i)/2);for(;e<A[s]||e>=A[s+1];)e<A[s]?i=s:t=s,s=Math.floor((t+i)/2);return s}function Pa(a,e,A,n){const t=[],i=[],s=[];t[0]=1;for(let o=1;o<=A;++o){i[o]=e-n[a+1-o],s[o]=n[a+o]-e;let c=0;for(let g=0;g<o;++g){const l=s[g+1],h=i[o-g],I=t[g]/(l+h);t[g]=c+l*I,c=h*I}t[o]=c}return t}function Ha(a,e,A,n){const t=ji(a,n,e),i=Pa(t,n,a,e),s=new r.Vector4(0,0,0,0);for(let o=0;o<=a;++o){const c=A[t-a+o],g=i[o],l=c.w*g;s.x+=c.x*l,s.y+=c.y*l,s.z+=c.z*l,s.w+=c.w*g}return s}function Oa(a,e,A,n,t){const i=[];for(let h=0;h<=A;++h)i[h]=0;const s=[];for(let h=0;h<=n;++h)s[h]=i.slice(0);const o=[];for(let h=0;h<=A;++h)o[h]=i.slice(0);o[0][0]=1;const c=i.slice(0),g=i.slice(0);for(let h=1;h<=A;++h){c[h]=e-t[a+1-h],g[h]=t[a+h]-e;let I=0;for(let B=0;B<h;++B){const f=g[B+1],C=c[h-B];o[h][B]=f+C;const p=o[B][h-1]/o[h][B];o[B][h]=I+f*p,I=C*p}o[h][h]=I}for(let h=0;h<=A;++h)s[0][h]=o[h][A];for(let h=0;h<=A;++h){let I=0,B=1;const f=[];for(let C=0;C<=A;++C)f[C]=i.slice(0);f[0][0]=1;for(let C=1;C<=n;++C){let p=0;const d=h-C,w=A-C;h>=C&&(f[B][0]=f[I][0]/o[w+1][d],p=f[B][0]*o[d][w]);const Q=d>=-1?1:-d,b=h-1<=w?C-1:A-h;for(let R=Q;R<=b;++R)f[B][R]=(f[I][R]-f[I][R-1])/o[w+1][d+R],p+=f[B][R]*o[d+R][w];h<=w&&(f[B][C]=-f[I][C-1]/o[w+1][h],p+=f[B][C]*o[h][w]),s[C][h]=p;const y=I;I=B,B=y}}let l=A;for(let h=1;h<=n;++h){for(let I=0;I<=A;++I)s[h][I]*=l;l*=A-h}return s}function qa(a,e,A,n,t){const i=t<a?t:a,s=[],o=ji(a,n,e),c=Oa(o,n,a,i,e),g=[];for(let l=0;l<A.length;++l){const h=A[l].clone(),I=h.w;h.x*=I,h.y*=I,h.z*=I,g[l]=h}for(let l=0;l<=i;++l){const h=g[o-a].clone().multiplyScalar(c[l][0]);for(let I=1;I<=a;++I)h.add(g[o-a+I].clone().multiplyScalar(c[l][I]));s[l]=h}for(let l=i+1;l<=t+1;++l)s[l]=new r.Vector4(0,0,0);return s}function Ka(a,e){let A=1;for(let t=2;t<=a;++t)A*=t;let n=1;for(let t=2;t<=e;++t)n*=t;for(let t=2;t<=a-e;++t)n*=t;return A/n}function Ya(a){const e=a.length,A=[],n=[];for(let i=0;i<e;++i){const s=a[i];A[i]=new r.Vector3(s.x,s.y,s.z),n[i]=s.w}const t=[];for(let i=0;i<e;++i){const s=A[i].clone();for(let o=1;o<=i;++o)s.sub(t[i-o].clone().multiplyScalar(Ka(i,o)*n[o]));t[i]=s.divideScalar(n[0])}return t}function Ja(a,e,A,n,t){const i=qa(a,e,A,n,t);return Ya(i)}class ja extends r.Curve{constructor(e,A,n,t,i){super(),this.degree=e,this.knots=A,this.controlPoints=[],this.startKnot=t||0,this.endKnot=i||this.knots.length-1;for(let s=0;s<n.length;++s){const o=n[s];this.controlPoints[s]=new r.Vector4(o.x,o.y,o.z,o.w)}}getPoint(e,A=new r.Vector3){const n=A,t=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),i=Ha(this.degree,this.knots,this.controlPoints,t);return i.w!==1&&i.divideScalar(i.w),n.set(i.x,i.y,i.z)}getTangent(e,A=new r.Vector3){const n=A,t=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),i=Ja(this.degree,this.knots,this.controlPoints,t,1);return n.copy(i[1]).normalize(),n}}let oe,be,Ne;class Va extends r.Loader{constructor(e){super(e)}load(e,A,n,t){const i=this,s=i.path===""?r.LoaderUtils.extractUrlBase(e):i.path,o=new r.FileLoader(this.manager);o.setPath(i.path),o.setResponseType("arraybuffer"),o.setRequestHeader(i.requestHeader),o.setWithCredentials(i.withCredentials),o.load(e,function(c){try{A(i.parse(c,s))}catch(g){t?t(g):console.error(g),i.manager.itemError(e)}},n,t)}parse(e,A){if(ec(e))oe=new $a().parse(e);else{const t=Xi(e);if(!Ac(t))throw new Error("THREE.FBXLoader: Unknown format.");if(ti(t)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+ti(t));oe=new Za().parse(t)}const n=new r.TextureLoader(this.manager).setPath(this.resourcePath||A).setCrossOrigin(this.crossOrigin);return new za(n,this.manager).parse(oe)}getFbxTree(){return oe}}class za{constructor(e,A){this.textureLoader=e,this.manager=A}parse(){be=this.parseConnections();const e=this.parseImages(),A=this.parseTextures(e),n=this.parseMaterials(A),t=this.parseDeformers(),i=new Xa().parse(t);return this.parseScene(t,i,n),Ne}parseConnections(){const e=new Map;return"Connections"in oe&&oe.Connections.connections.forEach(function(n){const t=n[0],i=n[1],s=n[2];e.has(t)||e.set(t,{parents:[],children:[]});const o={ID:i,relationship:s};e.get(t).parents.push(o),e.has(i)||e.set(i,{parents:[],children:[]});const c={ID:t,relationship:s};e.get(i).children.push(c)}),e}parseImages(){const e={},A={};if("Video"in oe.Objects){const n=oe.Objects.Video;for(const t in n){const i=n[t],s=parseInt(t);if(e[s]=i.RelativeFilename||i.Filename,"Content"in i){const o=i.Content instanceof ArrayBuffer&&i.Content.byteLength>0,c=typeof i.Content=="string"&&i.Content!=="";if(o||c){const g=this.parseImage(n[t]);A[i.RelativeFilename||i.Filename]=g}}}}for(const n in e){const t=e[n];A[t]!==void 0?e[n]=A[t]:e[n]=e[n].split("\\").pop()}return e}parseImage(e){const A=e.Content,n=e.RelativeFilename||e.Filename,t=n.slice(n.lastIndexOf(".")+1).toLowerCase();let i;switch(t){case"bmp":i="image/bmp";break;case"jpg":case"jpeg":i="image/jpeg";break;case"png":i="image/png";break;case"tif":i="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",n),i="image/tga";break;default:console.warn('FBXLoader: Image type "'+t+'" is not supported.');return}if(typeof A=="string")return"data:"+i+";base64,"+A;{const s=new Uint8Array(A);return window.URL.createObjectURL(new Blob([s],{type:i}))}}parseTextures(e){const A=new Map;if("Texture"in oe.Objects){const n=oe.Objects.Texture;for(const t in n){const i=this.parseTexture(n[t],e);A.set(parseInt(t),i)}}return A}parseTexture(e,A){const n=this.loadTexture(e,A);n.ID=e.id,n.name=e.attrName;const t=e.WrapModeU,i=e.WrapModeV,s=t!==void 0?t.value:0,o=i!==void 0?i.value:0;if(n.wrapS=s===0?r.RepeatWrapping:r.ClampToEdgeWrapping,n.wrapT=o===0?r.RepeatWrapping:r.ClampToEdgeWrapping,"Scaling"in e){const c=e.Scaling.value;n.repeat.x=c[0],n.repeat.y=c[1]}if("Translation"in e){const c=e.Translation.value;n.offset.x=c[0],n.offset.y=c[1]}return n}loadTexture(e,A){const n=new Set(["tga","tif","tiff","exr","dds","hdr","ktx2"]),t=e.FileName.split(".").pop().toLowerCase(),i=n.has(t)?this.manager.getHandler(`.${t}`):this.textureLoader;if(!i)return console.warn(`FBXLoader: ${t.toUpperCase()} loader not found, creating placeholder texture for`,e.RelativeFilename),new r.Texture;const s=i.path;s||i.setPath(this.textureLoader.path);const o=be.get(e.id).children;let c;o!==void 0&&o.length>0&&A[o[0].ID]!==void 0&&(c=A[o[0].ID],(c.indexOf("blob:")===0||c.indexOf("data:")===0)&&i.setPath(void 0));const g=i.load(c);return i.setPath(s),g}parseMaterials(e){const A=new Map;if("Material"in oe.Objects){const n=oe.Objects.Material;for(const t in n){const i=this.parseMaterial(n[t],e);i!==null&&A.set(parseInt(t),i)}}return A}parseMaterial(e,A){const n=e.id,t=e.attrName;let i=e.ShadingModel;if(typeof i=="object"&&(i=i.value),!be.has(n))return null;const s=this.parseParameters(e,A,n);let o;switch(i.toLowerCase()){case"phong":o=new r.MeshPhongMaterial;break;case"lambert":o=new r.MeshLambertMaterial;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',i),o=new r.MeshPhongMaterial;break}return o.setValues(s),o.name=t,o}parseParameters(e,A,n){const t={};e.BumpFactor&&(t.bumpScale=e.BumpFactor.value),e.Diffuse?t.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Diffuse.value),r.SRGBColorSpace):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(t.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.DiffuseColor.value),r.SRGBColorSpace)),e.DisplacementFactor&&(t.displacementScale=e.DisplacementFactor.value),e.Emissive?t.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Emissive.value),r.SRGBColorSpace):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(t.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.EmissiveColor.value),r.SRGBColorSpace)),e.EmissiveFactor&&(t.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),e.Opacity&&(t.opacity=parseFloat(e.Opacity.value)),t.opacity<1&&(t.transparent=!0),e.ReflectionFactor&&(t.reflectivity=e.ReflectionFactor.value),e.Shininess&&(t.shininess=e.Shininess.value),e.Specular?t.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Specular.value),r.SRGBColorSpace):e.SpecularColor&&e.SpecularColor.type==="Color"&&(t.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.SpecularColor.value),r.SRGBColorSpace));const i=this;return be.get(n).children.forEach(function(s){const o=s.relationship;switch(o){case"Bump":t.bumpMap=i.getTexture(A,s.ID);break;case"Maya|TEX_ao_map":t.aoMap=i.getTexture(A,s.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":t.map=i.getTexture(A,s.ID),t.map!==void 0&&(t.map.colorSpace=r.SRGBColorSpace);break;case"DisplacementColor":t.displacementMap=i.getTexture(A,s.ID);break;case"EmissiveColor":t.emissiveMap=i.getTexture(A,s.ID),t.emissiveMap!==void 0&&(t.emissiveMap.colorSpace=r.SRGBColorSpace);break;case"NormalMap":case"Maya|TEX_normal_map":t.normalMap=i.getTexture(A,s.ID);break;case"ReflectionColor":t.envMap=i.getTexture(A,s.ID),t.envMap!==void 0&&(t.envMap.mapping=r.EquirectangularReflectionMapping,t.envMap.colorSpace=r.SRGBColorSpace);break;case"SpecularColor":t.specularMap=i.getTexture(A,s.ID),t.specularMap!==void 0&&(t.specularMap.colorSpace=r.SRGBColorSpace);break;case"TransparentColor":case"TransparencyFactor":t.alphaMap=i.getTexture(A,s.ID),t.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",o);break}}),t}getTexture(e,A){return"LayeredTexture"in oe.Objects&&A in oe.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),A=be.get(A).children[0].ID),e.get(A)}parseDeformers(){const e={},A={};if("Deformer"in oe.Objects){const n=oe.Objects.Deformer;for(const t in n){const i=n[t],s=be.get(parseInt(t));if(i.attrType==="Skin"){const o=this.parseSkeleton(s,n);o.ID=t,s.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),o.geometryID=s.parents[0].ID,e[t]=o}else if(i.attrType==="BlendShape"){const o={id:t};o.rawTargets=this.parseMorphTargets(s,n),o.id=t,s.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),A[t]=o}}}return{skeletons:e,morphTargets:A}}parseSkeleton(e,A){const n=[];return e.children.forEach(function(t){const i=A[t.ID];if(i.attrType!=="Cluster")return;const s={ID:t.ID,indices:[],weights:[],transformLink:new r.Matrix4().fromArray(i.TransformLink.a)};"Indexes"in i&&(s.indices=i.Indexes.a,s.weights=i.Weights.a),n.push(s)}),{rawBones:n,bones:[]}}parseMorphTargets(e,A){const n=[];for(let t=0;t<e.children.length;t++){const i=e.children[t],s=A[i.ID],o={name:s.attrName,initialWeight:s.DeformPercent,id:s.id,fullWeights:s.FullWeights.a};if(s.attrType!=="BlendShapeChannel")return;o.geoID=be.get(parseInt(i.ID)).children.filter(function(c){return c.relationship===void 0})[0].ID,n.push(o)}return n}parseScene(e,A,n){Ne=new r.Group;const t=this.parseModels(e.skeletons,A,n),i=oe.Objects.Model,s=this;t.forEach(function(c){const g=i[c.ID];s.setLookAtProperties(c,g),be.get(c.ID)?.parents?.forEach(function(h){const I=t.get(h.ID);I!==void 0&&I.add(c)}),c.parent===null&&Ne.add(c)}),this.bindSkeleton(e.skeletons,A,t),this.addGlobalSceneSettings(),Ne.traverse(function(c){if(c.userData.transformData){c.parent&&(c.userData.transformData.parentMatrix=c.parent.matrix,c.userData.transformData.parentMatrixWorld=c.parent.matrixWorld);const g=zi(c.userData.transformData);c.applyMatrix4(g),c.updateWorldMatrix()}c.isSkinnedMesh&&(c.computeBoundingBox(),c.computeBoundingSphere(),c.boundingBox.expandByScalar(3),c.boundingSphere.radius*=3)});const o=new Wa().parse();Ne.children.length===1&&Ne.children[0].isGroup&&(Ne.children[0].animations=o,Ne=Ne.children[0]),Ne.animations=o}parseModels(e,A,n){const t=new Map,i=oe.Objects.Model;for(const s in i){const o=parseInt(s),c=i[s],g=be.get(o);let l=this.buildSkeleton(g,e,o,c.attrName);if(!l){switch(c.attrType){case"Camera":l=this.createCamera(g);break;case"Light":l=this.createLight(g);break;case"Mesh":l=this.createMesh(g,A,n);break;case"NurbsCurve":l=this.createCurve(g,A);break;case"LimbNode":case"Root":l=new r.Bone;break;default:l=new r.Group;break}l.name=c.attrName?r.PropertyBinding.sanitizeNodeName(c.attrName):"",l.userData.originalName=c.attrName,l.ID=o}this.getTransformData(l,c),t.set(o,l)}return t}buildSkeleton(e,A,n,t){let i=null;return e?.parents.forEach(function(s){for(const o in A){const c=A[o];c.rawBones.forEach(function(g,l){if(g.ID===s.ID){const h=i;i=new r.Bone,i.matrixWorld.copy(g.transformLink),i.name=t?r.PropertyBinding.sanitizeNodeName(t):"",i.userData.originalName=t,i.ID=n,c.bones[l]=i,h!==null&&i.add(h)}})}}),i}createCamera(e){let A,n;if(e.children.forEach(function(t){const i=oe.Objects.NodeAttribute[t.ID];i!==void 0&&(n=i)}),n===void 0)A=new r.Object3D;else{let t=0;n.CameraProjectionType!==void 0&&n.CameraProjectionType.value===1&&(t=1);let i=1;n.NearPlane!==void 0&&(i=n.NearPlane.value/1e3);let s=1e3;n.FarPlane!==void 0&&(s=n.FarPlane.value/1e3);let o=window.innerWidth,c=window.innerHeight;n.AspectWidth!==void 0&&n.AspectHeight!==void 0&&(o=n.AspectWidth.value,c=n.AspectHeight.value);const g=o/c;let l=45;n.FieldOfView!==void 0&&(l=n.FieldOfView.value);const h=n.FocalLength?n.FocalLength.value:null;switch(t){case 0:A=new r.PerspectiveCamera(l,g,i,s),h!==null&&A.setFocalLength(h);break;case 1:console.warn("THREE.FBXLoader: Orthographic cameras not supported yet."),A=new r.Object3D;break;default:console.warn("THREE.FBXLoader: Unknown camera type "+t+"."),A=new r.Object3D;break}}return A}createLight(e){let A,n;if(e.children.forEach(function(t){const i=oe.Objects.NodeAttribute[t.ID];i!==void 0&&(n=i)}),n===void 0)A=new r.Object3D;else{let t;n.LightType===void 0?t=0:t=n.LightType.value;let i=16777215;n.Color!==void 0&&(i=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(n.Color.value),r.SRGBColorSpace));let s=n.Intensity===void 0?1:n.Intensity.value/100;n.CastLightOnObject!==void 0&&n.CastLightOnObject.value===0&&(s=0);let o=0;n.FarAttenuationEnd!==void 0&&(n.EnableFarAttenuation!==void 0&&n.EnableFarAttenuation.value===0?o=0:o=n.FarAttenuationEnd.value);const c=1;switch(t){case 0:A=new r.PointLight(i,s,o,c);break;case 1:A=new r.DirectionalLight(i,s);break;case 2:let g=Math.PI/3;n.InnerAngle!==void 0&&(g=r.MathUtils.degToRad(n.InnerAngle.value));let l=0;n.OuterAngle!==void 0&&(l=r.MathUtils.degToRad(n.OuterAngle.value),l=Math.max(l,1)),A=new r.SpotLight(i,s,o,g,l,c);break;default:console.warn("THREE.FBXLoader: Unknown light type "+n.LightType.value+", defaulting to a PointLight."),A=new r.PointLight(i,s);break}n.CastShadows!==void 0&&n.CastShadows.value===1&&(A.castShadow=!0)}return A}createMesh(e,A,n){let t,i=null,s=null;const o=[];if(e.children.forEach(function(c){A.has(c.ID)&&(i=A.get(c.ID)),n.has(c.ID)&&o.push(n.get(c.ID))}),o.length>1?s=o:o.length>0?s=o[0]:(s=new r.MeshPhongMaterial({name:r.Loader.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(s)),"color"in i.attributes&&o.forEach(function(c){c.vertexColors=!0}),i.groups.length>0){let c=!1;for(let g=0,l=i.groups.length;g<l;g++){const h=i.groups[g];(h.materialIndex<0||h.materialIndex>=o.length)&&(h.materialIndex=o.length,c=!0)}if(c){const g=new r.MeshStandardMaterial;o.push(g)}}return i.FBX_Deformer?(t=new r.SkinnedMesh(i,s),t.normalizeSkinWeights()):t=new r.Mesh(i,s),t}createCurve(e,A){const n=e.children.reduce(function(i,s){return A.has(s.ID)&&(i=A.get(s.ID)),i},null),t=new r.LineBasicMaterial({name:r.Loader.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new r.Line(n,t)}getTransformData(e,A){const n={};"InheritType"in A&&(n.inheritType=parseInt(A.InheritType.value)),"RotationOrder"in A?n.eulerOrder=XA(A.RotationOrder.value):n.eulerOrder=XA(0),"Lcl_Translation"in A&&(n.translation=A.Lcl_Translation.value),"PreRotation"in A&&(n.preRotation=A.PreRotation.value),"Lcl_Rotation"in A&&(n.rotation=A.Lcl_Rotation.value),"PostRotation"in A&&(n.postRotation=A.PostRotation.value),"Lcl_Scaling"in A&&(n.scale=A.Lcl_Scaling.value),"ScalingOffset"in A&&(n.scalingOffset=A.ScalingOffset.value),"ScalingPivot"in A&&(n.scalingPivot=A.ScalingPivot.value),"RotationOffset"in A&&(n.rotationOffset=A.RotationOffset.value),"RotationPivot"in A&&(n.rotationPivot=A.RotationPivot.value),e.userData.transformData=n}setLookAtProperties(e,A){"LookAtProperty"in A&&be.get(e.ID).children.forEach(function(t){if(t.relationship==="LookAtProperty"){const i=oe.Objects.Model[t.ID];if("Lcl_Translation"in i){const s=i.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(s),Ne.add(e.target)):e.lookAt(new r.Vector3().fromArray(s))}}})}bindSkeleton(e,A,n){const t=this.parsePoseNodes();for(const i in e){const s=e[i];be.get(parseInt(s.ID)).parents.forEach(function(c){if(A.has(c.ID)){const g=c.ID;be.get(g).parents.forEach(function(h){n.has(h.ID)&&n.get(h.ID).bind(new r.Skeleton(s.bones),t[h.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in oe.Objects){const A=oe.Objects.Pose;for(const n in A)if(A[n].attrType==="BindPose"&&A[n].NbPoseNodes>0){const t=A[n].PoseNode;Array.isArray(t)?t.forEach(function(i){e[i.Node]=new r.Matrix4().fromArray(i.Matrix.a)}):e[t.Node]=new r.Matrix4().fromArray(t.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in oe){if("AmbientColor"in oe.GlobalSettings){const e=oe.GlobalSettings.AmbientColor.value,A=e[0],n=e[1],t=e[2];if(A!==0||n!==0||t!==0){const i=new r.Color().setRGB(A,n,t,r.SRGBColorSpace);Ne.add(new r.AmbientLight(i,1))}}"UnitScaleFactor"in oe.GlobalSettings&&(Ne.userData.unitScaleFactor=oe.GlobalSettings.UnitScaleFactor.value)}}}class Xa{constructor(){this.negativeMaterialIndices=!1}parse(e){const A=new Map;if("Geometry"in oe.Objects){const n=oe.Objects.Geometry;for(const t in n){const i=be.get(parseInt(t)),s=this.parseGeometry(i,n[t],e);A.set(parseInt(t),s)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),A}parseGeometry(e,A,n){switch(A.attrType){case"Mesh":return this.parseMeshGeometry(e,A,n);case"NurbsCurve":return this.parseNurbsGeometry(A)}}parseMeshGeometry(e,A,n){const t=n.skeletons,i=[],s=e.parents.map(function(h){return oe.Objects.Model[h.ID]});if(s.length===0)return;const o=e.children.reduce(function(h,I){return t[I.ID]!==void 0&&(h=t[I.ID]),h},null);e.children.forEach(function(h){n.morphTargets[h.ID]!==void 0&&i.push(n.morphTargets[h.ID])});const c=s[0],g={};"RotationOrder"in c&&(g.eulerOrder=XA(c.RotationOrder.value)),"InheritType"in c&&(g.inheritType=parseInt(c.InheritType.value)),"GeometricTranslation"in c&&(g.translation=c.GeometricTranslation.value),"GeometricRotation"in c&&(g.rotation=c.GeometricRotation.value),"GeometricScaling"in c&&(g.scale=c.GeometricScaling.value);const l=zi(g);return this.genGeometry(A,o,i,l)}genGeometry(e,A,n,t){const i=new r.BufferGeometry;e.attrName&&(i.name=e.attrName);const s=this.parseGeoNode(e,A),o=this.genBuffers(s),c=new r.Float32BufferAttribute(o.vertex,3);if(c.applyMatrix4(t),i.setAttribute("position",c),o.colors.length>0&&i.setAttribute("color",new r.Float32BufferAttribute(o.colors,3)),A&&(i.setAttribute("skinIndex",new r.Uint16BufferAttribute(o.weightsIndices,4)),i.setAttribute("skinWeight",new r.Float32BufferAttribute(o.vertexWeights,4)),i.FBX_Deformer=A),o.normal.length>0){const g=new r.Matrix3().getNormalMatrix(t),l=new r.Float32BufferAttribute(o.normal,3);l.applyNormalMatrix(g),i.setAttribute("normal",l)}if(o.uvs.forEach(function(g,l){const h=l===0?"uv":`uv${l}`;i.setAttribute(h,new r.Float32BufferAttribute(o.uvs[l],2))}),s.material&&s.material.mappingType!=="AllSame"){let g=o.materialIndex[0],l=0;if(o.materialIndex.forEach(function(h,I){h!==g&&(i.addGroup(l,I-l,g),g=h,l=I)}),i.groups.length>0){const h=i.groups[i.groups.length-1],I=h.start+h.count;I!==o.materialIndex.length&&i.addGroup(I,o.materialIndex.length-I,g)}i.groups.length===0&&i.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(i,e,n,t),i}parseGeoNode(e,A){const n={};if(n.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],n.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&(n.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(n.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(n.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){n.uv=[];let t=0;for(;e.LayerElementUV[t];)e.LayerElementUV[t].UV&&n.uv.push(this.parseUVs(e.LayerElementUV[t])),t++}return n.weightTable={},A!==null&&(n.skeleton=A,A.rawBones.forEach(function(t,i){t.indices.forEach(function(s,o){n.weightTable[s]===void 0&&(n.weightTable[s]=[]),n.weightTable[s].push({id:i,weight:t.weights[o]})})})),n}genBuffers(e){const A={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let n=0,t=0,i=!1,s=[],o=[],c=[],g=[],l=[],h=[];const I=this;return e.vertexIndices.forEach(function(B,f){let C,p=!1;B<0&&(B=B^-1,p=!0);let d=[],w=[];if(s.push(B*3,B*3+1,B*3+2),e.color){const Q=rt(f,n,B,e.color);c.push(Q[0],Q[1],Q[2])}if(e.skeleton){if(e.weightTable[B]!==void 0&&e.weightTable[B].forEach(function(Q){w.push(Q.weight),d.push(Q.id)}),w.length>4){i||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),i=!0);const Q=[0,0,0,0],b=[0,0,0,0];w.forEach(function(y,R){let F=y,D=d[R];b.forEach(function(M,N,_){if(F>M){_[N]=F,F=M;const P=Q[N];Q[N]=D,D=P}})}),d=Q,w=b}for(;w.length<4;)w.push(0),d.push(0);for(let Q=0;Q<4;++Q)l.push(w[Q]),h.push(d[Q])}if(e.normal){const Q=rt(f,n,B,e.normal);o.push(Q[0],Q[1],Q[2])}e.material&&e.material.mappingType!=="AllSame"&&(C=rt(f,n,B,e.material)[0],C<0&&(I.negativeMaterialIndices=!0,C=0)),e.uv&&e.uv.forEach(function(Q,b){const y=rt(f,n,B,Q);g[b]===void 0&&(g[b]=[]),g[b].push(y[0]),g[b].push(y[1])}),t++,p&&(I.genFace(A,e,s,C,o,c,g,l,h,t),n++,t=0,s=[],o=[],c=[],g=[],l=[],h=[])}),A}getNormalNewell(e){const A=new r.Vector3(0,0,0);for(let n=0;n<e.length;n++){const t=e[n],i=e[(n+1)%e.length];A.x+=(t.y-i.y)*(t.z+i.z),A.y+=(t.z-i.z)*(t.x+i.x),A.z+=(t.x-i.x)*(t.y+i.y)}return A.normalize(),A}getNormalTangentAndBitangent(e){const A=this.getNormalNewell(e),t=(Math.abs(A.z)>.5?new r.Vector3(0,1,0):new r.Vector3(0,0,1)).cross(A).normalize(),i=A.clone().cross(t).normalize();return{normal:A,tangent:t,bitangent:i}}flattenVertex(e,A,n){return new r.Vector2(e.dot(A),e.dot(n))}genFace(e,A,n,t,i,s,o,c,g,l){let h;if(l>3){const I=[],B=A.baseVertexPositions||A.vertexPositions;for(let d=0;d<n.length;d+=3)I.push(new r.Vector3(B[n[d]],B[n[d+1]],B[n[d+2]]));const{tangent:f,bitangent:C}=this.getNormalTangentAndBitangent(I),p=[];for(const d of I)p.push(this.flattenVertex(d,f,C));h=r.ShapeUtils.triangulateShape(p,[])}else l===2?(console.warn("THREE.FBXLoader: Edge topology detected. This is currently not supported. The resulting mesh will not be correct."),h=[[0,1,2]]):h=[[0,1,2]];for(const[I,B,f]of h)e.vertex.push(A.vertexPositions[n[I*3]]),e.vertex.push(A.vertexPositions[n[I*3+1]]),e.vertex.push(A.vertexPositions[n[I*3+2]]),e.vertex.push(A.vertexPositions[n[B*3]]),e.vertex.push(A.vertexPositions[n[B*3+1]]),e.vertex.push(A.vertexPositions[n[B*3+2]]),e.vertex.push(A.vertexPositions[n[f*3]]),e.vertex.push(A.vertexPositions[n[f*3+1]]),e.vertex.push(A.vertexPositions[n[f*3+2]]),A.skeleton&&(e.vertexWeights.push(c[I*4]),e.vertexWeights.push(c[I*4+1]),e.vertexWeights.push(c[I*4+2]),e.vertexWeights.push(c[I*4+3]),e.vertexWeights.push(c[B*4]),e.vertexWeights.push(c[B*4+1]),e.vertexWeights.push(c[B*4+2]),e.vertexWeights.push(c[B*4+3]),e.vertexWeights.push(c[f*4]),e.vertexWeights.push(c[f*4+1]),e.vertexWeights.push(c[f*4+2]),e.vertexWeights.push(c[f*4+3]),e.weightsIndices.push(g[I*4]),e.weightsIndices.push(g[I*4+1]),e.weightsIndices.push(g[I*4+2]),e.weightsIndices.push(g[I*4+3]),e.weightsIndices.push(g[B*4]),e.weightsIndices.push(g[B*4+1]),e.weightsIndices.push(g[B*4+2]),e.weightsIndices.push(g[B*4+3]),e.weightsIndices.push(g[f*4]),e.weightsIndices.push(g[f*4+1]),e.weightsIndices.push(g[f*4+2]),e.weightsIndices.push(g[f*4+3])),A.color&&(e.colors.push(s[I*3]),e.colors.push(s[I*3+1]),e.colors.push(s[I*3+2]),e.colors.push(s[B*3]),e.colors.push(s[B*3+1]),e.colors.push(s[B*3+2]),e.colors.push(s[f*3]),e.colors.push(s[f*3+1]),e.colors.push(s[f*3+2])),A.material&&A.material.mappingType!=="AllSame"&&(e.materialIndex.push(t),e.materialIndex.push(t),e.materialIndex.push(t)),A.normal&&(e.normal.push(i[I*3]),e.normal.push(i[I*3+1]),e.normal.push(i[I*3+2]),e.normal.push(i[B*3]),e.normal.push(i[B*3+1]),e.normal.push(i[B*3+2]),e.normal.push(i[f*3]),e.normal.push(i[f*3+1]),e.normal.push(i[f*3+2])),A.uv&&A.uv.forEach(function(C,p){e.uvs[p]===void 0&&(e.uvs[p]=[]),e.uvs[p].push(o[p][I*2]),e.uvs[p].push(o[p][I*2+1]),e.uvs[p].push(o[p][B*2]),e.uvs[p].push(o[p][B*2+1]),e.uvs[p].push(o[p][f*2]),e.uvs[p].push(o[p][f*2+1])})}addMorphTargets(e,A,n,t){if(n.length===0)return;e.morphTargetsRelative=!0,e.morphAttributes.position=[];const i=this;n.forEach(function(s){s.rawTargets.forEach(function(o){const c=oe.Objects.Geometry[o.geoID];c!==void 0&&i.genMorphGeometry(e,A,c,t,o.name)})})}genMorphGeometry(e,A,n,t,i){const s=A.Vertices!==void 0?A.Vertices.a:[],o=A.PolygonVertexIndex!==void 0?A.PolygonVertexIndex.a:[],c=n.Vertices!==void 0?n.Vertices.a:[],g=n.Indexes!==void 0?n.Indexes.a:[],l=e.attributes.position.count*3,h=new Float32Array(l);for(let C=0;C<g.length;C++){const p=g[C]*3;h[p]=c[C*3],h[p+1]=c[C*3+1],h[p+2]=c[C*3+2]}const I={vertexIndices:o,vertexPositions:h,baseVertexPositions:s},B=this.genBuffers(I),f=new r.Float32BufferAttribute(B.vertex,3);f.name=i||n.attrName,f.applyMatrix4(t),e.morphAttributes.position.push(f)}parseNormals(e){const A=e.MappingInformationType,n=e.ReferenceInformationType,t=e.Normals.a;let i=[];return n==="IndexToDirect"&&("NormalIndex"in e?i=e.NormalIndex.a:"NormalsIndex"in e&&(i=e.NormalsIndex.a)),{dataSize:3,buffer:t,indices:i,mappingType:A,referenceType:n}}parseUVs(e){const A=e.MappingInformationType,n=e.ReferenceInformationType,t=e.UV.a;let i=[];return n==="IndexToDirect"&&(i=e.UVIndex.a),{dataSize:2,buffer:t,indices:i,mappingType:A,referenceType:n}}parseVertexColors(e){if(!e.Colors)return;const A=e.MappingInformationType,n=e.ReferenceInformationType,t=e.Colors.a;let i=[];n==="IndexToDirect"&&(i=e.ColorIndex.a);for(let s=0,o=new r.Color;s<t.length;s+=4)o.fromArray(t,s),r.ColorManagement.toWorkingColorSpace(o,r.SRGBColorSpace),o.toArray(t,s);return{dataSize:4,buffer:t,indices:i,mappingType:A,referenceType:n}}parseMaterialIndices(e){const A=e.MappingInformationType,n=e.ReferenceInformationType;if(A==="NoMappingInformation")return{dataSize:1,buffer:[0],indices:[0],mappingType:"AllSame",referenceType:n};const t=e.Materials.a,i=[];for(let s=0;s<t.length;++s)i.push(s);return{dataSize:1,buffer:t,indices:i,mappingType:A,referenceType:n}}parseNurbsGeometry(e){const A=parseInt(e.Order);if(isNaN(A))return console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s",e.Order,e.id),new r.BufferGeometry;const n=A-1,t=e.KnotVector.a,i=[],s=e.Points.a;for(let h=0,I=s.length;h<I;h+=4)i.push(new r.Vector4().fromArray(s,h));let o,c;if(e.Form==="Closed")i.push(i[0]);else if(e.Form==="Periodic"){o=n,c=t.length-1-o;for(let h=0;h<n;++h)i.push(i[h])}const l=new ja(n,t,i,o,c).getPoints(i.length*12);return new r.BufferGeometry().setFromPoints(l)}}class Wa{parse(){const e=[],A=this.parseClips();if(A!==void 0)for(const n in A){const t=A[n],i=this.addClip(t);e.push(i)}return e}parseClips(){if(oe.Objects.AnimationCurve===void 0)return;const e=this.parseAnimationCurveNodes();this.parseAnimationCurves(e);const A=this.parseAnimationLayers(e);return this.parseAnimStacks(A)}parseAnimationCurveNodes(){const e=oe.Objects.AnimationCurveNode,A=new Map;for(const n in e){const t=e[n];if(t.attrName.match(/S|R|T|DeformPercent/)!==null){const i={id:t.id,attr:t.attrName,curves:{}};A.set(i.id,i)}}return A}parseAnimationCurves(e){const A=oe.Objects.AnimationCurve;for(const n in A){const t={id:A[n].id,times:A[n].KeyTime.a.map(tc),values:A[n].KeyValueFloat.a},i=be.get(t.id);if(i!==void 0){const s=i.parents[0].ID,o=i.parents[0].relationship;o.match(/X/)?e.get(s).curves.x=t:o.match(/Y/)?e.get(s).curves.y=t:o.match(/Z/)?e.get(s).curves.z=t:o.match(/DeformPercent/)&&e.has(s)&&(e.get(s).curves.morph=t)}}}parseAnimationLayers(e){const A=oe.Objects.AnimationLayer,n=new Map;for(const t in A){const i=[],s=be.get(parseInt(t));s!==void 0&&(s.children.forEach(function(c,g){if(e.has(c.ID)){const l=e.get(c.ID);if(l.curves.x!==void 0||l.curves.y!==void 0||l.curves.z!==void 0){if(i[g]===void 0){const h=be.get(c.ID).parents.filter(function(I){return I.relationship!==void 0})[0].ID;if(h!==void 0){const I=oe.Objects.Model[h.toString()];if(I===void 0){console.warn("THREE.FBXLoader: Encountered a unused curve.",c);return}const B={modelName:I.attrName?r.PropertyBinding.sanitizeNodeName(I.attrName):"",ID:I.id,initialPosition:[0,0,0],initialRotation:[0,0,0],initialScale:[1,1,1]};Ne.traverse(function(f){f.ID===I.id&&(B.transform=f.matrix,f.userData.transformData&&(B.eulerOrder=f.userData.transformData.eulerOrder))}),B.transform||(B.transform=new r.Matrix4),"PreRotation"in I&&(B.preRotation=I.PreRotation.value),"PostRotation"in I&&(B.postRotation=I.PostRotation.value),i[g]=B}}i[g]&&(i[g][l.attr]=l)}else if(l.curves.morph!==void 0){if(i[g]===void 0){const h=be.get(c.ID).parents.filter(function(d){return d.relationship!==void 0})[0].ID,I=be.get(h).parents[0].ID,B=be.get(I).parents[0].ID,f=be.get(B).parents[0].ID,C=oe.Objects.Model[f],p={modelName:C.attrName?r.PropertyBinding.sanitizeNodeName(C.attrName):"",morphName:oe.Objects.Deformer[h].attrName};i[g]=p}i[g][l.attr]=l}}}),n.set(parseInt(t),i))}return n}parseAnimStacks(e){const A=oe.Objects.AnimationStack,n={};for(const t in A){const i=be.get(parseInt(t)).children;i.length>1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const s=e.get(i[0].ID);n[t]={name:A[t].attrName,layer:s}}return n}addClip(e){let A=[];const n=this;return e.layer.forEach(function(t){A=A.concat(n.generateTracks(t))}),new r.AnimationClip(e.name,-1,A)}generateTracks(e){const A=[];let n=new r.Vector3,t=new r.Vector3;if(e.transform&&e.transform.decompose(n,new r.Quaternion,t),n=n.toArray(),t=t.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const i=this.generateVectorTrack(e.modelName,e.T.curves,n,"position");i!==void 0&&A.push(i)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const i=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);i!==void 0&&A.push(i)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const i=this.generateVectorTrack(e.modelName,e.S.curves,t,"scale");i!==void 0&&A.push(i)}if(e.DeformPercent!==void 0){const i=this.generateMorphTrack(e);i!==void 0&&A.push(i)}return A}generateVectorTrack(e,A,n,t){const i=this.getTimesForAllAxes(A),s=this.getKeyframeTrackValues(i,A,n);return new r.VectorKeyframeTrack(e+"."+t,i,s)}generateRotationTrack(e,A,n,t,i){let s,o;if(A.x===void 0||A.y===void 0||A.z===void 0){console.warn("THREE.FBXLoader: Missing rotation curves "+(A.x===void 0?"x ":"")+(A.y===void 0?"y ":"")+(A.z===void 0?"z ":"")+" for animation of "+e+". This is currently not supported.");return}if(A.x!==void 0&&A.y!==void 0&&A.z!==void 0){const I=this.interpolateRotations(A.x,A.y,A.z,i);s=I[0],o=I[1]}const c=XA(0);n!==void 0&&(n=n.map(r.MathUtils.degToRad),n.push(c),n=new r.Euler().fromArray(n),n=new r.Quaternion().setFromEuler(n)),t!==void 0&&(t=t.map(r.MathUtils.degToRad),t.push(c),t=new r.Euler().fromArray(t),t=new r.Quaternion().setFromEuler(t).invert());const g=new r.Quaternion,l=new r.Euler,h=[];if(!(!o||!s)){for(let I=0;I<o.length;I+=3)l.set(o[I],o[I+1],o[I+2],i),g.setFromEuler(l),n!==void 0&&g.premultiply(n),t!==void 0&&g.multiply(t),I>2&&new r.Quaternion().fromArray(h,(I-3)/3*4).dot(g)<0&&g.set(-g.x,-g.y,-g.z,-g.w),g.toArray(h,I/3*4);return new r.QuaternionKeyframeTrack(e+".quaternion",s,h)}}generateMorphTrack(e){const A=e.DeformPercent.curves.morph,n=A.values.map(function(i){return i/100}),t=Ne.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new r.NumberKeyframeTrack(e.modelName+".morphTargetInfluences["+t+"]",A.times,n)}getTimesForAllAxes(e){let A=[];if(e.x!==void 0&&(A=A.concat(e.x.times)),e.y!==void 0&&(A=A.concat(e.y.times)),e.z!==void 0&&(A=A.concat(e.z.times)),A=A.sort(function(n,t){return n-t}),A.length>1){let n=1,t=A[0];for(let i=1;i<A.length;i++){const s=A[i];s!==t&&(A[n]=s,t=s,n++)}A=A.slice(0,n)}return A}getKeyframeTrackValues(e,A,n){const t=n,i=[];let s=-1,o=-1,c=-1;return e.forEach(function(g){if(A.x&&(s=A.x.times.indexOf(g)),A.y&&(o=A.y.times.indexOf(g)),A.z&&(c=A.z.times.indexOf(g)),s!==-1){const l=A.x.values[s];i.push(l),t[0]=l}else i.push(t[0]);if(o!==-1){const l=A.y.values[o];i.push(l),t[1]=l}else i.push(t[1]);if(c!==-1){const l=A.z.values[c];i.push(l),t[2]=l}else i.push(t[2])}),i}interpolateRotations(e,A,n,t){const i=[],s=[];i.push(e.times[0]),s.push(r.MathUtils.degToRad(e.values[0])),s.push(r.MathUtils.degToRad(A.values[0])),s.push(r.MathUtils.degToRad(n.values[0]));for(let o=1;o<e.values.length;o++){const c=[e.values[o-1],A.values[o-1],n.values[o-1]];if(isNaN(c[0])||isNaN(c[1])||isNaN(c[2]))continue;const g=c.map(r.MathUtils.degToRad),l=[e.values[o],A.values[o],n.values[o]];if(isNaN(l[0])||isNaN(l[1])||isNaN(l[2]))continue;const h=l.map(r.MathUtils.degToRad),I=[l[0]-c[0],l[1]-c[1],l[2]-c[2]],B=[Math.abs(I[0]),Math.abs(I[1]),Math.abs(I[2])];if(B[0]>=180||B[1]>=180||B[2]>=180){const C=Math.max(...B)/180,p=new r.Euler(...g,t),d=new r.Euler(...h,t),w=new r.Quaternion().setFromEuler(p),Q=new r.Quaternion().setFromEuler(d);w.dot(Q)&&Q.set(-Q.x,-Q.y,-Q.z,-Q.w);const b=e.times[o-1],y=e.times[o]-b,R=new r.Quaternion,F=new r.Euler;for(let D=0;D<1;D+=1/C)R.copy(w.clone().slerp(Q.clone(),D)),i.push(b+D*y),F.setFromQuaternion(R,t),s.push(F.x),s.push(F.y),s.push(F.z)}else i.push(e.times[o]),s.push(r.MathUtils.degToRad(e.values[o])),s.push(r.MathUtils.degToRad(A.values[o])),s.push(r.MathUtils.degToRad(n.values[o]))}return[i,s]}}class Za{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,A){this.currentProp=e,this.currentPropName=A}parse(e){this.currentIndent=0,this.allNodes=new Vi,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const A=this,n=e.split(/[\r\n]+/);return n.forEach(function(t,i){const s=t.match(/^[\s\t]*;/),o=t.match(/^[\s\t]*$/);if(s||o)return;const c=t.match("^\\t{"+A.currentIndent+"}(\\w+):(.*){",""),g=t.match("^\\t{"+A.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),l=t.match("^\\t{"+(A.currentIndent-1)+"}}");c?A.parseNodeBegin(t,c):g?A.parseNodeProperty(t,g,n[++i]):l?A.popStack():t.match(/^[^\s\t}]/)&&A.parseNodePropertyContinued(t)}),this.allNodes}parseNodeBegin(e,A){const n=A[1].trim().replace(/^"/,"").replace(/"$/,""),t=A[2].split(",").map(function(c){return c.trim().replace(/^"/,"").replace(/"$/,"")}),i={name:n},s=this.parseNodeAttr(t),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(n,i):n in o?(n==="PoseNode"?o.PoseNode.push(i):o[n].id!==void 0&&(o[n]={},o[n][o[n].id]=o[n]),s.id!==""&&(o[n][s.id]=i)):typeof s.id=="number"?(o[n]={},o[n][s.id]=i):n!=="Properties70"&&(n==="PoseNode"?o[n]=[i]:o[n]=i),typeof s.id=="number"&&(i.id=s.id),s.name!==""&&(i.attrName=s.name),s.type!==""&&(i.attrType=s.type),this.pushStack(i)}parseNodeAttr(e){let A=e[0];e[0]!==""&&(A=parseInt(e[0]),isNaN(A)&&(A=e[0]));let n="",t="";return e.length>1&&(n=e[1].replace(/^(\w+)::/,""),t=e[2]),{id:A,name:n,type:t}}parseNodeProperty(e,A,n){let t=A[1].replace(/^"/,"").replace(/"$/,"").trim(),i=A[2].replace(/^"/,"").replace(/"$/,"").trim();t==="Content"&&i===","&&(i=n.replace(/"/g,"").replace(/,$/,"").trim());const s=this.getCurrentNode();if(s.name==="Properties70"){this.parseNodeSpecialProperty(e,t,i);return}if(t==="C"){const c=i.split(",").slice(1),g=parseInt(c[0]),l=parseInt(c[1]);let h=i.split(",").slice(3);h=h.map(function(I){return I.trim().replace(/^"/,"")}),t="connections",i=[g,l],ic(i,h),s[t]===void 0&&(s[t]=[])}t==="Node"&&(s.id=i),t in s&&Array.isArray(s[t])?s[t].push(i):t!=="a"?s[t]=i:s.a=i,this.setCurrentProp(s,t),t==="a"&&i.slice(-1)!==","&&(s.a=qt(i))}parseNodePropertyContinued(e){const A=this.getCurrentNode();A.a+=e,e.slice(-1)!==","&&(A.a=qt(A.a))}parseNodeSpecialProperty(e,A,n){const t=n.split('",').map(function(l){return l.trim().replace(/^\"/,"").replace(/\s/,"_")}),i=t[0],s=t[1],o=t[2],c=t[3];let g=t[4];switch(s){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":g=parseFloat(g);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":g=qt(g);break}this.getPrevNode()[i]={type:s,type2:o,flag:c,value:g},this.setCurrentProp(this.getPrevNode(),i)}}class $a{parse(e){const A=new Ai(e);A.skip(23);const n=A.getUint32();if(n<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+n);const t=new Vi;for(;!this.endOfContent(A);){const i=this.parseNode(A,n);i!==null&&t.add(i.name,i)}return t}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,A){const n={},t=A>=7500?e.getUint64():e.getUint32(),i=A>=7500?e.getUint64():e.getUint32();A>=7500?e.getUint64():e.getUint32();const s=e.getUint8(),o=e.getString(s);if(t===0)return null;const c=[];for(let I=0;I<i;I++)c.push(this.parseProperty(e));const g=c.length>0?c[0]:"",l=c.length>1?c[1]:"",h=c.length>2?c[2]:"";for(n.singleProperty=i===1&&e.getOffset()===t;t>e.getOffset();){const I=this.parseNode(e,A);I!==null&&this.parseSubNode(o,n,I)}return n.propertyList=c,typeof g=="number"&&(n.id=g),l!==""&&(n.attrName=l),h!==""&&(n.attrType=h),o!==""&&(n.name=o),n}parseSubNode(e,A,n){if(n.singleProperty===!0){const t=n.propertyList[0];Array.isArray(t)?(A[n.name]=n,n.a=t):A[n.name]=t}else if(e==="Connections"&&n.name==="C"){const t=[];n.propertyList.forEach(function(i,s){s!==0&&t.push(i)}),A.connections===void 0&&(A.connections=[]),A.connections.push(t)}else if(n.name==="Properties70")Object.keys(n).forEach(function(i){A[i]=n[i]});else if(e==="Properties70"&&n.name==="P"){let t=n.propertyList[0],i=n.propertyList[1];const s=n.propertyList[2],o=n.propertyList[3];let c;t.indexOf("Lcl ")===0&&(t=t.replace("Lcl ","Lcl_")),i.indexOf("Lcl ")===0&&(i=i.replace("Lcl ","Lcl_")),i==="Color"||i==="ColorRGB"||i==="Vector"||i==="Vector3D"||i.indexOf("Lcl_")===0?c=[n.propertyList[4],n.propertyList[5],n.propertyList[6]]:c=n.propertyList[4],A[t]={type:i,type2:s,flag:o,value:c}}else A[n.name]===void 0?typeof n.id=="number"?(A[n.name]={},A[n.name][n.id]=n):A[n.name]=n:n.name==="PoseNode"?(Array.isArray(A[n.name])||(A[n.name]=[A[n.name]]),A[n.name].push(n)):A[n.name][n.id]===void 0&&(A[n.name][n.id]=n)}parseProperty(e){const A=e.getString(1);let n;switch(A){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return n=e.getUint32(),e.getArrayBuffer(n);case"S":return n=e.getUint32(),e.getString(n);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const t=e.getUint32(),i=e.getUint32(),s=e.getUint32();if(i===0)switch(A){case"b":case"c":return e.getBooleanArray(t);case"d":return e.getFloat64Array(t);case"f":return e.getFloat32Array(t);case"i":return e.getInt32Array(t);case"l":return e.getInt64Array(t)}const o=qA(new Uint8Array(e.getArrayBuffer(s))),c=new Ai(o.buffer);switch(A){case"b":case"c":return c.getBooleanArray(t);case"d":return c.getFloat64Array(t);case"f":return c.getFloat32Array(t);case"i":return c.getInt32Array(t);case"l":return c.getInt64Array(t)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+A)}}}class Ai{constructor(e,A){this.dv=new DataView(e),this.offset=0,this.littleEndian=A!==void 0?A:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const A=[];for(let n=0;n<e;n++)A.push(this.getBoolean());return A}getUint8(){const e=this.dv.getUint8(this.offset);return this.offset+=1,e}getInt16(){const e=this.dv.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}getInt32(){const e=this.dv.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}getInt32Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getInt32());return A}getUint32(){const e=this.dv.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}getInt64(){let e,A;return this.littleEndian?(e=this.getUint32(),A=this.getUint32()):(A=this.getUint32(),e=this.getUint32()),A&2147483648?(A=~A&4294967295,e=~e&4294967295,e===4294967295&&(A=A+1&4294967295),e=e+1&4294967295,-(A*4294967296+e)):A*4294967296+e}getInt64Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getInt64());return A}getUint64(){let e,A;return this.littleEndian?(e=this.getUint32(),A=this.getUint32()):(A=this.getUint32(),e=this.getUint32()),A*4294967296+e}getFloat32(){const e=this.dv.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}getFloat32Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getFloat32());return A}getFloat64(){const e=this.dv.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}getFloat64Array(e){const A=[];for(let n=0;n<e;n++)A.push(this.getFloat64());return A}getArrayBuffer(e){const A=this.dv.buffer.slice(this.offset,this.offset+e);return this.offset+=e,A}getString(e){const A=this.offset;let n=new Uint8Array(this.dv.buffer,A,e);this.skip(e);const t=n.indexOf(0);return t>=0&&(n=new Uint8Array(this.dv.buffer,A,t)),this._textDecoder.decode(n)}}class Vi{add(e,A){this[e]=A}}function ec(a){const e="Kaydara FBX Binary \0";return a.byteLength>=e.length&&e===Xi(a,0,e.length)}function Ac(a){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let A=0;function n(t){const i=a[t-1];return a=a.slice(A+t),A++,i}for(let t=0;t<e.length;++t)if(n(1)===e[t])return!1;return!0}function ti(a){const e=/FBXVersion: (\d+)/,A=a.match(e);if(A)return parseInt(A[1]);throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.")}function tc(a){return a/46186158e3}const nc=[];function rt(a,e,A,n){let t;switch(n.mappingType){case"ByPolygonVertex":t=a;break;case"ByPolygon":t=e;break;case"ByVertice":t=A;break;case"AllSame":t=n.indices[0];break;default:console.warn("THREE.FBXLoader: unknown attribute mapping type "+n.mappingType)}n.referenceType==="IndexToDirect"&&(t=n.indices[t]);const i=t*n.dataSize,s=i+n.dataSize;return sc(nc,n.buffer,i,s)}const Ot=new r.Euler,MA=new r.Vector3;function zi(a){const e=new r.Matrix4,A=new r.Matrix4,n=new r.Matrix4,t=new r.Matrix4,i=new r.Matrix4,s=new r.Matrix4,o=new r.Matrix4,c=new r.Matrix4,g=new r.Matrix4,l=new r.Matrix4,h=new r.Matrix4,I=new r.Matrix4,B=a.inheritType?a.inheritType:0;a.translation&&e.setPosition(MA.fromArray(a.translation));const f=XA(0);if(a.preRotation){const _=a.preRotation.map(r.MathUtils.degToRad);_.push(f),A.makeRotationFromEuler(Ot.fromArray(_))}if(a.rotation){const _=a.rotation.map(r.MathUtils.degToRad);_.push(a.eulerOrder||f),n.makeRotationFromEuler(Ot.fromArray(_))}if(a.postRotation){const _=a.postRotation.map(r.MathUtils.degToRad);_.push(f),t.makeRotationFromEuler(Ot.fromArray(_)),t.invert()}a.scale&&i.scale(MA.fromArray(a.scale)),a.scalingOffset&&o.setPosition(MA.fromArray(a.scalingOffset)),a.scalingPivot&&s.setPosition(MA.fromArray(a.scalingPivot)),a.rotationOffset&&c.setPosition(MA.fromArray(a.rotationOffset)),a.rotationPivot&&g.setPosition(MA.fromArray(a.rotationPivot)),a.parentMatrixWorld&&(h.copy(a.parentMatrix),l.copy(a.parentMatrixWorld));const C=A.clone().multiply(n).multiply(t),p=new r.Matrix4;p.extractRotation(l);const d=new r.Matrix4;d.copyPosition(l);const w=d.clone().invert().multiply(l),Q=p.clone().invert().multiply(w),b=i,y=new r.Matrix4;if(B===0)y.copy(p).multiply(C).multiply(Q).multiply(b);else if(B===1)y.copy(p).multiply(Q).multiply(C).multiply(b);else{const P=new r.Matrix4().scale(new r.Vector3().setFromMatrixScale(h)).clone().invert(),z=Q.clone().multiply(P);y.copy(p).multiply(C).multiply(z).multiply(b)}const R=g.clone().invert(),F=s.clone().invert();let D=e.clone().multiply(c).multiply(g).multiply(A).multiply(n).multiply(t).multiply(R).multiply(o).multiply(s).multiply(i).multiply(F);const M=new r.Matrix4().copyPosition(D),N=l.clone().multiply(M);return I.copyPosition(N),D=I.clone().multiply(y),D.premultiply(l.invert()),D}function XA(a){a=a||0;const e=["ZYX","YZX","XZY","ZXY","YXZ","XYZ"];return a===6?(console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."),e[0]):e[a]}function qt(a){return a.split(",").map(function(A){return parseFloat(A)})}function Xi(a,e,A){return e===void 0&&(e=0),A===void 0&&(A=a.byteLength),new TextDecoder().decode(new Uint8Array(a,e,A))}function ic(a,e){for(let A=0,n=a.length,t=e.length;A<t;A++,n++)a[n]=e[A]}function sc(a,e,A,n){for(let t=A,i=0;t<n;t++,i++)a[i]=e[t];return a}class oc extends r.Loader{constructor(e){super(e)}load(e,A,n,t){const i=this,s=this.path===""?r.LoaderUtils.extractUrlBase(e):this.path,o=new r.FileLoader(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(c){try{A(i.parse(c,s))}catch(g){t?t(g):console.error(g),i.manager.itemError(e)}},n,t)}setMaterialOptions(e){return this.materialOptions=e,this}parse(e,A){const n=e.split(`
|
|
460
|
+
`);let t={};const i=/\s+/,s={};for(let c=0;c<n.length;c++){let g=n[c];if(g=g.trim(),g.length===0||g.charAt(0)==="#")continue;const l=g.indexOf(" ");let h=l>=0?g.substring(0,l):g;h=h.toLowerCase();let I=l>=0?g.substring(l+1):"";if(I=I.trim(),h==="newmtl")t={name:I},s[I]=t;else if(h==="ka"||h==="kd"||h==="ks"||h==="ke"){const B=I.split(i,3);t[h]=[parseFloat(B[0]),parseFloat(B[1]),parseFloat(B[2])]}else t[h]=I}const o=new rc(this.resourcePath||A,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(s),o}}class rc{constructor(e="",A={}){this.baseUrl=e,this.options=A,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:r.FrontSide,this.wrap=this.options.wrap!==void 0?this.options.wrap:r.RepeatWrapping}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;const A={};for(const n in e){const t=e[n],i={};A[n]=i;for(const s in t){let o=!0,c=t[s];const g=s.toLowerCase();switch(g){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(c=[c[0]/255,c[1]/255,c[2]/255]),this.options&&this.options.ignoreZeroRGBs&&c[0]===0&&c[1]===0&&c[2]===0&&(o=!1);break}o&&(i[g]=c)}}return A}preload(){for(const e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(const A in this.materialsInfo)this.materialsArray[e]=this.create(A),this.nameLookup[A]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){const A=this,n=this.materialsInfo[e],t={name:e,side:this.side};function i(o,c){return typeof c!="string"||c===""?"":/^https?:\/\//i.test(c)?c:o+c}function s(o,c){if(t[o])return;const g=A.getTextureParams(c,t),l=A.loadTexture(i(A.baseUrl,g.url));l.repeat.copy(g.scale),l.offset.copy(g.offset),l.wrapS=A.wrap,l.wrapT=A.wrap,(o==="map"||o==="emissiveMap")&&(l.colorSpace=r.SRGBColorSpace),t[o]=l}for(const o in n){const c=n[o];let g;if(c!=="")switch(o.toLowerCase()){case"kd":t.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(c),r.SRGBColorSpace);break;case"ks":t.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(c),r.SRGBColorSpace);break;case"ke":t.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(c),r.SRGBColorSpace);break;case"map_kd":s("map",c);break;case"map_ks":s("specularMap",c);break;case"map_ke":s("emissiveMap",c);break;case"norm":s("normalMap",c);break;case"map_bump":case"bump":s("bumpMap",c);break;case"map_d":s("alphaMap",c),t.transparent=!0;break;case"ns":t.shininess=parseFloat(c);break;case"d":g=parseFloat(c),g<1&&(t.opacity=g,t.transparent=!0);break;case"tr":g=parseFloat(c),this.options&&this.options.invertTrProperty&&(g=1-g),g>0&&(t.opacity=1-g,t.transparent=!0);break}}return this.materials[e]=new r.MeshPhongMaterial(t),this.materials[e]}getTextureParams(e,A){const n={scale:new r.Vector2(1,1),offset:new r.Vector2(0,0)},t=e.split(/\s+/);let i;return i=t.indexOf("-bm"),i>=0&&(A.bumpScale=parseFloat(t[i+1]),t.splice(i,2)),i=t.indexOf("-s"),i>=0&&(n.scale.set(parseFloat(t[i+1]),parseFloat(t[i+2])),t.splice(i,4)),i=t.indexOf("-o"),i>=0&&(n.offset.set(parseFloat(t[i+1]),parseFloat(t[i+2])),t.splice(i,4)),n.url=t.join(" ").trim(),n}loadTexture(e,A,n,t,i){const s=this.manager!==void 0?this.manager:r.DefaultLoadingManager;let o=s.getHandler(e);o===null&&(o=new r.TextureLoader(s)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);const c=o.load(e,n,t,i);return A!==void 0&&(c.mapping=A),c}}const ac=/^[og]\s*(.+)?/,cc=/^mtllib /,gc=/^usemtl /,lc=/^usemap /,ni=/\s+/,ii=new r.Vector3,Kt=new r.Vector3,si=new r.Vector3,oi=new r.Vector3,Xe=new r.Vector3,at=new r.Color;function hc(){const a={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,A){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=A!==!1;return}const n=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:A!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(t,i){const s=this._finalize(!1);s&&(s.inherited||s.groupCount<=0)&&this.materials.splice(s.index,1);const o={index:this.materials.length,name:t||"",mtllib:Array.isArray(i)&&i.length>0?i[i.length-1]:"",smooth:s!==void 0?s.smooth:this.smooth,groupStart:s!==void 0?s.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(c){const g={index:typeof c=="number"?c:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return g.clone=this.clone.bind(g),g}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(t){const i=this.currentMaterial();if(i&&i.groupEnd===-1&&(i.groupEnd=this.geometry.vertices.length/3,i.groupCount=i.groupEnd-i.groupStart,i.inherited=!1),t&&this.materials.length>1)for(let s=this.materials.length-1;s>=0;s--)this.materials[s].groupCount<=0&&this.materials.splice(s,1);return t&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),i}},n&&n.name&&typeof n.clone=="function"){const t=n.clone(0);t.inherited=!0,this.object.materials.push(t)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,A){const n=parseInt(e,10);return(n>=0?n-1:n+A/3)*3},parseNormalIndex:function(e,A){const n=parseInt(e,10);return(n>=0?n-1:n+A/3)*3},parseUVIndex:function(e,A){const n=parseInt(e,10);return(n>=0?n-1:n+A/2)*2},addVertex:function(e,A,n){const t=this.vertices,i=this.object.geometry.vertices;i.push(t[e+0],t[e+1],t[e+2]),i.push(t[A+0],t[A+1],t[A+2]),i.push(t[n+0],t[n+1],t[n+2])},addVertexPoint:function(e){const A=this.vertices;this.object.geometry.vertices.push(A[e+0],A[e+1],A[e+2])},addVertexLine:function(e){const A=this.vertices;this.object.geometry.vertices.push(A[e+0],A[e+1],A[e+2])},addNormal:function(e,A,n){const t=this.normals,i=this.object.geometry.normals;i.push(t[e+0],t[e+1],t[e+2]),i.push(t[A+0],t[A+1],t[A+2]),i.push(t[n+0],t[n+1],t[n+2])},addFaceNormal:function(e,A,n){const t=this.vertices,i=this.object.geometry.normals;ii.fromArray(t,e),Kt.fromArray(t,A),si.fromArray(t,n),Xe.subVectors(si,Kt),oi.subVectors(ii,Kt),Xe.cross(oi),Xe.normalize(),i.push(Xe.x,Xe.y,Xe.z),i.push(Xe.x,Xe.y,Xe.z),i.push(Xe.x,Xe.y,Xe.z)},addColor:function(e,A,n){const t=this.colors,i=this.object.geometry.colors;t[e]!==void 0&&i.push(t[e+0],t[e+1],t[e+2]),t[A]!==void 0&&i.push(t[A+0],t[A+1],t[A+2]),t[n]!==void 0&&i.push(t[n+0],t[n+1],t[n+2])},addUV:function(e,A,n){const t=this.uvs,i=this.object.geometry.uvs;i.push(t[e+0],t[e+1]),i.push(t[A+0],t[A+1]),i.push(t[n+0],t[n+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const A=this.uvs;this.object.geometry.uvs.push(A[e+0],A[e+1])},addFace:function(e,A,n,t,i,s,o,c,g){const l=this.vertices.length;let h=this.parseVertexIndex(e,l),I=this.parseVertexIndex(A,l),B=this.parseVertexIndex(n,l);if(this.addVertex(h,I,B),this.addColor(h,I,B),o!==void 0&&o!==""){const f=this.normals.length;h=this.parseNormalIndex(o,f),I=this.parseNormalIndex(c,f),B=this.parseNormalIndex(g,f),this.addNormal(h,I,B)}else this.addFaceNormal(h,I,B);if(t!==void 0&&t!==""){const f=this.uvs.length;h=this.parseUVIndex(t,f),I=this.parseUVIndex(i,f),B=this.parseUVIndex(s,f),this.addUV(h,I,B),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const A=this.vertices.length;for(let n=0,t=e.length;n<t;n++){const i=this.parseVertexIndex(e[n],A);this.addVertexPoint(i),this.addColor(i)}},addLineGeometry:function(e,A){this.object.geometry.type="Line";const n=this.vertices.length,t=this.uvs.length;for(let i=0,s=e.length;i<s;i++)this.addVertexLine(this.parseVertexIndex(e[i],n));for(let i=0,s=A.length;i<s;i++)this.addUVLine(this.parseUVIndex(A[i],t))}};return a.startObject("",!1),a}class Ic extends r.Loader{constructor(e){super(e),this.materials=null,this.materialsLoader=new oc(e)}load(e,A,n,t){const i=this,s=new r.FileLoader(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,async function(o){try{const c=i.parse(o,!0);for(let g=0,l=c.materialLibraries.length;g<l;g++){const h=c.materialLibraries[g];if(!h||typeof h!="string"||h.trim()===""){console.warn("THREE.OBJLoader: Invalid or empty material library reference, skipping.");continue}const I=e.startsWith("blob:")?e+"/"+h:new URL(h,e);console.debug("Loading MTL file: "+I),await new Promise((B,f)=>{i.materialsLoader.load(I.toString(),C=>{i.setMaterials(C),B()},null,f)})}A(i.createObjects(c))}catch(c){t?t(c):console.error(c),i.manager.itemError(e)}},n,t)}setMTLLoader(e){return this.materialsLoader=e,this}setMaterials(e){return this.materials=e,this}parse(e,A=!1){const n=new hc;e.indexOf(`\r
|
|
461
461
|
`)!==-1&&(e=e.replace(/\r\n/g,`
|
|
462
462
|
`)),e.indexOf(`\\
|
|
463
463
|
`)!==-1&&(e=e.replace(/\\\n/g,""));const t=e.split(`
|
|
464
|
-
`);let i=[];for(let s=0,o=t.length;s<o;s++){const c=t[s].trimStart();if(c.length===0)continue;const g=c.charAt(0);if(g!=="#")if(g==="v"){const l=c.split(ii);switch(l[0]){case"v":n.vertices.push(parseFloat(l[1]),parseFloat(l[2]),parseFloat(l[3])),l.length>=7?(at.setRGB(parseFloat(l[4]),parseFloat(l[5]),parseFloat(l[6]),r.SRGBColorSpace),n.colors.push(at.r,at.g,at.b)):n.colors.push(void 0,void 0,void 0);break;case"vn":n.normals.push(parseFloat(l[1]),parseFloat(l[2]),parseFloat(l[3]));break;case"vt":n.uvs.push(parseFloat(l[1]),parseFloat(l[2]));break}}else if(g==="f"){const h=c.slice(1).trim().split(ii),I=[];for(let f=0,C=h.length;f<C;f++){const E=h[f];if(E.length>0){const d=E.split("/");I.push(d)}}const B=I[0];for(let f=1,C=I.length-1;f<C;f++){const E=I[f],d=I[f+1];n.addFace(B[0],E[0],d[0],B[1],E[1],d[1],B[2],E[2],d[2])}}else if(g==="l"){const l=c.substring(1).trim().split(" ");let h=[];const I=[];if(c.indexOf("/")===-1)h=l;else for(let B=0,f=l.length;B<f;B++){const C=l[B].split("/");C[0]!==""&&h.push(C[0]),C[1]!==""&&I.push(C[1])}n.addLineGeometry(h,I)}else if(g==="p"){const h=c.slice(1).trim().split(" ");n.addPointGeometry(h)}else if((i=gc.exec(c))!==null){const l=(" "+i[0].slice(1).trim()).slice(1);n.startObject(l)}else if(hc.test(c))n.object.startMaterial(c.substring(7).trim(),n.materialLibraries);else if(lc.test(c))n.materialLibraries.push(c.substring(7).trim());else if(Ic.test(c))console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');else if(g==="s"){if(i=c.split(" "),i.length>1){const h=i[1].trim().toLowerCase();n.object.smooth=h!=="0"&&h!=="off"}else n.object.smooth=!0;const l=n.object.currentMaterial();l&&(l.smooth=n.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}return n.finalize(),A?n:this.createObjects(n)}createObjects(e){const A=new r.Group;if(A.materialLibraries=[].concat(e.materialLibraries),!(e.objects.length===1&&e.objects[0].geometry.vertices.length===0)===!0)for(let t=0,i=e.objects.length;t<i;t++){const s=e.objects[t],o=s.geometry,c=s.materials,g=o.type==="Line",l=o.type==="Points";let h=!1;if(o.vertices.length===0)continue;const I=new r.BufferGeometry;I.setAttribute("position",new r.Float32BufferAttribute(o.vertices,3)),o.normals.length>0&&I.setAttribute("normal",new r.Float32BufferAttribute(o.normals,3)),o.colors.length>0&&(h=!0,I.setAttribute("color",new r.Float32BufferAttribute(o.colors,3))),o.hasUVIndices===!0&&I.setAttribute("uv",new r.Float32BufferAttribute(o.uvs,2));const B=[];for(let C=0,E=c.length;C<E;C++){const d=c[C],y=d.name+"_"+d.smooth+"_"+h;let Q=e.materials[y];if(this.materials!==null){if(Q=this.materials.create(d.name),g&&Q&&!(Q instanceof r.LineBasicMaterial)){const b=new r.LineBasicMaterial;r.Material.prototype.copy.call(b,Q),b.color.copy(Q.color),Q=b}else if(l&&Q&&!(Q instanceof r.PointsMaterial)){const b=new r.PointsMaterial({size:10,sizeAttenuation:!1});r.Material.prototype.copy.call(b,Q),b.color.copy(Q.color),b.map=Q.map,Q=b}}Q===void 0&&(g?Q=new r.LineBasicMaterial:l?Q=new r.PointsMaterial({size:1,sizeAttenuation:!1}):Q=new r.MeshPhongMaterial,Q.name=d.name,Q.flatShading=!d.smooth,Q.vertexColors=h,e.materials[y]=Q),B.push(Q)}let f;if(B.length>1){for(let C=0,E=c.length;C<E;C++){const d=c[C];I.addGroup(d.groupStart,d.groupCount,C)}g?f=new r.LineSegments(I,B):l?f=new r.Points(I,B):f=new r.Mesh(I,B)}else g?f=new r.LineSegments(I,B[0]):l?f=new r.Points(I,B[0]):f=new r.Mesh(I,B[0]);f.name=s.name,A.add(f)}else if(e.vertices.length>0){const t=new r.PointsMaterial({size:1,sizeAttenuation:!1}),i=new r.BufferGeometry;i.setAttribute("position",new r.Float32BufferAttribute(e.vertices,3)),e.colors.length>0&&e.colors[0]!==void 0&&(i.setAttribute("color",new r.Float32BufferAttribute(e.colors,3)),t.vertexColors=!0);const s=new r.Points(i,t);A.add(s)}return A}}class fc{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}new r.OrthographicCamera(-1,1,1,-1,0,1);class Cc extends r.BufferGeometry{constructor(){super(),this.setAttribute("position",new r.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new r.Float32BufferAttribute([0,2,0,0,2,0],2))}}new Cc;const pc=typeof TextDecoder>"u"?(0,module.require)("util").TextDecoder:TextDecoder;let Wi=new pc("utf-8",{ignoreBOM:!0,fatal:!0});Wi.decode();let ct=null;function Ec(){return(ct===null||ct.buffer!==Ue.memory.buffer)&&(ct=new Uint8Array(Ue.memory.buffer)),ct}function dc(a,e){return Wi.decode(Ec().subarray(a,a+e))}const lA=new Array(32).fill(void 0);lA.push(void 0,null,!0,!1);let VA=lA.length;function Qc(a){VA===lA.length&&lA.push(lA.length+1);const e=VA;return VA=lA[e],lA[e]=a,e}function mc(a){return lA[a]}function bc(a){a<36||(lA[a]=VA,VA=a)}function yc(a){const e=mc(a);return bc(a),e}let gt=null;function Zi(){return(gt===null||gt.buffer!==Ue.memory.buffer)&&(gt=new Float32Array(Ue.memory.buffer)),gt}let ut=0;function Yt(a,e){const A=e(a.length*4);return Zi().set(a,A/4),ut=a.length,A}let lt=null;function ai(){return(lt===null||lt.buffer!==Ue.memory.buffer)&&(lt=new Int32Array(Ue.memory.buffer)),lt}function wc(a,e){return Zi().subarray(a/4,a/4+e)}function Dc(a,e,A){try{const I=Ue.__wbindgen_add_to_stack_pointer(-16);var n=Yt(a,Ue.__wbindgen_malloc),t=ut,i=Yt(e,Ue.__wbindgen_malloc),s=ut,o=Yt(A,Ue.__wbindgen_malloc),c=ut;Ue.generateTangents(I,n,t,i,s,o,c);var g=ai()[I/4+0],l=ai()[I/4+1],h=wc(g,l).slice();return Ue.__wbindgen_free(g,l*4),h}finally{Ue.__wbindgen_add_to_stack_pointer(16)}}const $i=function(a,e){var A=dc(a,e);return Qc(A)},es=function(a){throw yc(a)},Sc="data:application/octet-stream;base64,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TQ0WIARBAnRqIgQgBCgCAEEBajYCACACQQRqIQIgA0F/aiIDDQALCyABQdgFaigCACABKALgBUUNFUEAIQJBADYCAEEBIQQDQCABQfgCaiABQdgFahBjIAEoAvwCIgMgBEF/aiIHTQ0UIAEoAvgCIAJqKAIAIQMgAUHwAmogAUHoBWoQYyABKAL0AiINIAdNDRMgASgC8AIgAmooAgAhByABQdgFaigCACENIAEoAuAFIhEgBE0NEiACIA1qQQRqIAMgB2o2AgAgAkEEaiECIARBAWoiBEGAEEcNAAsgCEEJTwRAQQAhBCABQZgGakEAQQRBCCAGGyALG2ohCCAFIQMDQCABQegCaiADKAIAEGEgAUGYBmogACABKALoAiABKALsAhAxIDAgLiAIKgIAEDwhAiABQeACaiABQdgFahBjIAEoAuQCIgYgAk0NEiABQcgFaigCACABKALQBSINIAJBAnQiBiABKALgAmooAgAiC00NESABQdgCaiABQfgFahBjIAEoAtwCIg0gAk0NECALQQJ0aiABKALYAiAGaigCAEECdGogBDYCACABQfgFaigCACELIAEoAoAGIgcgAk0NDyAGIAtqIgIgAigCAEEBajYCACADQQRqIQMgCiAEQQFqIgRHDQALCyABQdACaiABQegFahBjIAEoAtQCRQ0MIAEoAtACKAIAIQNBBCECQQEhBANAIAFByAJqIAFB6AVqEGMgASgCzAIiCiAETQ0MIAMgASgCyAIgAmooAgBJBEAgAUHAAmogAUHoBWoQYyABKALEAiIDIARNDQwgASgCwAIgAmooAgAhAwsgAkEEaiECIARBAWoiBEGAEEcNAAsgAUHgA2oiAkIANwIAIAJBCGpCADcCACABQaAGaiABQegDaikDADcDACABIAEpA+ADNwOYBiABQYgGaiABQZgGaiADEEEgASgCiAYhCiABKAKQBiELQQAhBgNAIAFBuAJqIAFB2AVqEGMgASgCvAIiAyAGTQ0KIAFByAVqKAIAIQIgASgC0AUiBCAGQQJ0IgggASgCuAJqKAIAIgNNDQkgAUGwAmogAUHoBWoQYyABKAK0AiIEIAZNDQggASgCsAIgCGooAgAiCEECTwRAIAIgA0ECdGohBEEAIQMgCiECA0AgAUGoAmogBSAEKAIAIgdBAnRqKAIAEGEgAUGYBmogACABKAKoAiABKAKsAhAxIAMgC0YNCSACIAEoApgGNgIAIAJBBGogASgCnAY2AgAgASgCoAYhDSACQQxqIAc2AgAgAkEIaiANNgIAIARBBGohBCACQRBqIQIgCCADQQFqIgNHDQALIAUgCiAAQQAgCEF/ahAECyAGQQFqIgZBgBBHDQALIBNBASATQQFLGyEFIA5BPGohAyABQYgGahBSIAFB+AVqKAIAGiABQfgFahBWIAFB6AVqKAIAGiABQegFahBWIAFB2AVqKAIAGiABQdgFahBWIAFByAVqKAIAGiABQcgFahBWQQAhAkEAIQRBACEGQQAhBwNAIAFBoAJqIAFBwANqEGMgASgCpAIiCiAETQ0GIAEoAqACIAJqKAIAIQogAUGYAmogAUHAA2oQYyABKAKcAiILIARBAWpNDQUgASgCmAIgAmpBBGooAgAhCyABQZACaiABQcADahBjIAEoApQCIgggBEECak0NBCABKAKQAiACakEIaigCACEIIAFBiAJqIAoQYSABQYgGaiAAIAEoAogCIAEoAowCEDEgAUGAAmogCxBhIAFB4ANqIAAgASgCgAIgASgChAIQMSABQfgBaiAIEGEgAUGYBmogACABKAL4ASABKAL8ARAxAkACQCABQYgGaiABQeADahALDQAgAUGIBmogAUGYBmoQCw0AIAFB4ANqIAFBmAZqEAtFDQELIAwgBk0NBCADIAMoAgBBAXI2AgAgB0EBaiEHCyACQQxqIQIgBEEDaiEEIANByABqIQMgBSAGQQFqIgZHDQALIA4gAUHAA2ooAgAgEyAHayIKIBMQECABQcADaigCACELAkACQCAKRQRAQX8hBgwBC0EAIQYDQCAOIAZByABsaiIDQn83AgAgA0EIakF/NgIAIANBDGpCADcCACADQRRqQQA2AgAgA0E8aiADQRhqIQIgAygCPCEEQQMhAwNAIAJCADcCACACQRhqQgA3AgAgAkEQakIANwIAIAJBCGpCADcCACAEQQRyIQQgA0F/aiIDDQALIAQ2AgAgBkEBaiIGIApHDQALIAFBpAZqIQYgAUHsA2ohDEEAIQUDQCABQfABaiALIAVBDGxqIgMoAgAQYSABQagFaiAAIAEoAvABIAEoAvQBEDEgAUHoAWogA0EEaiICKAIAEGEgAUG4BWogACABKALoASABKALsARAxIAFB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AkAgASgCRBAxIAEpA4gGISsgASgCkAYhFyABQThqIAIQYSABQYgGaiAAIAEoAjggASgCPBAxIAEoAogGIQIgASgCjAYhECABKAKQBiESIAFBMGogHRBhIAFBiAZqIAAgASgCMCABKAI0EDEgASkDiAYhLCABKAKQBiEdIAEgFzYCgAYgASArNwP4BSABIBI2ApAGIAEgEDYCjAYgASACNgKIBiABQcgFaiABQfgFaiABQYgGahAVIAEgHTYCgAYgASAsNwP4BSABIBI2ApAGIAEgEDYCjAYgASACNgKIBiABQdgFaiABQfgFaiABQYgGahAVIBYgAUHQBWoiECgCADYCACABIAEpA8gFNwP4BSABQbgFaiABQcgFahARITUgBCAYKAIANgIAIAEgASkDuAU3A4gGIAFBKGogAUGIBmogGRBoIAEoAigiAiABKAIsIhJHBEADQCACIDUgAioCAJQ4AgAgEiACQQRqIgJHDQALCyABQcgFaiABQfgFaiABQYgGahAVIAQgECgCADYCACABIAEpA8gFNwOIBiABQYgGahBRBEAgBCAQKAIANgIAIAEgASkDyAU3A4gGIAFByAVqIAFBiAZqECMLIBYgAUHgBWoiECgCADYCACABIAEpA9gFNwP4BSABQbgFaiABQdgFahARITUgBCAYKAIANgIAIAEgASkDuAU3A4gGIAFBIGogAUGIBmogGRBoIAEoAiAiAiABKAIkIhJHBEADQCACIDUgAioCAJQ4AgAgEiACQQRqIgJHDQALCyABQdgFaiABQfgFaiABQYgGahAVIAQgECgCADYCACABIAEpA9gFNwOIBiABQYgGahBRBEAgBCAQKAIANgIAIAEgASkD2AU3A4gGIAFB2AVqIAFBiAZqECMLQwAAgD8gAUHIBWogAUHYBWoQESI1QwAAgL+XIDVDAACAP14buxAOIA8qAjQhNSAPKgIwITcgFiADKAIANgIAIAEgASkDmAY3A/gFIAEgMjgCkAYgASAvOAKMBiABIDM4AogGIAFBGGogAUGIBmogGRBotiEvIAEoAhgiAiABKAIcIg9HBEADQCACIAIqAgAgL5Q4AgAgDyACQQRqIgJHDQALCyABQZgGaiABQfgFaiABQYgGahAWIBYgFUEIaiIPKAIANgIAIAEgFSkCADcD+AUgASAxOAKQBiABIDA4AowGIAEgNDgCiAYgAUEQaiABQYgGaiAZEGggASgCECICIAEoAhQiEEcEQANAIAIgAioCACAvlDgCACAQIAJBBGoiAkcNAAsLIAFB6AVqIAFB+AVqIAFBiAZqEBYgDyABQfAFaigCADYCACAVIAEpA+gFNwIAIAEgNyAvlCABKgKkBpI4AqQGIAEgNSAvlCABKgK0BpI4ArQGIC4gL5IhLgsgCSAHQQFqIgdHDQALDAQLIAkgD0HcgsAAED8ACyAFIAJB7ILAABA/AAsgDCACQfyCwAAQPwALIAwgB0GMg8AAED8ACyAEIAMoAgA2AgAgASABKQOYBjcDiAYgAUGIBmoQUQRAIAQgAygCADYCACABIAEpA5gGNwOIBiABQZgGaiABQYgGahAjCyAEIBVBCGoiAigCADYCACABIBUpAgA3A4gGIAFBiAZqEFEEQCAEIAIoAgA2AgAgASAVKQIANwOIBiABQfgFaiABQYgGahAjIAIgAUGABmooAgA2AgAgFSABKQP4BTcCAAsgLkMAAAAAXkEBc0UEQCABIAEqAqQGIC6VOAKkBiABIAEqArQGIC6VOAK0BgsgASgC4AQiAiAMTQ0DIAEoAtgEIAxBKGxqIAFBmAZqQSgQTiAMQQFqIQwLICAEQCAIKAJAIAggKGpBxABqLQAAaiICICJPDQICfyAUIAJBKGxqIgIoAiBBAUcEQCABKALgBCIEIAVNDQYgAiABKALYBCAFQShsakEoEDsaQQEMAQsgASgC4AQiBCAFTQ0GIAFBmAZqIAIgASgC2AQgBUEobGoQBSACIAFBmAZqQSgQTkECCyEFIAJBIGogBTYCACACICYtAAA6ACQgESgCABogERBWIB9BAWoiHyANKAIASA0BDAYLC0F/QQRBrIPAABA/AAsgAiAiQbyDwAAQPwALIAwgAkGcg8AAED8ACyAFIARBzIPAABA/AAsgBSAEQdyDwAAQPwALICNBAWoiIyAGRw0ACyABQfgEaigCABogAUH4BGoQViABQegEahBJIAFB6ARqEFIgAUHYBGoQVCABKALIBCEUIAEoAtADIQsLIAFBwANqKAIAIQUgCiATSARAIBtBAUghCSAKIQMDQCALIANByABsaiIELQA8QQJxRQRAIANBA2whDCAEQUBrIQhBACEGA0ACQCAJDQAgBSAGIAxqQQJ0aigCACEOQQAhAgNAAkAgAiAOIAUgAkECdGooAgAiB0ciDWohAiAHIA5GDQAgAiAbSA0BCwsgDQ0AIBQgCCgCACAEIAZqQcQAai0AAGpBKGxqIBQgCyACQQNuIg5ByABsaiIHKAJAIAcgAiAOQQNsa2pBxABqLQAAakEobGpBKBA7GgsgBkEBaiIGQQNHDQALCyADICVGIANBAWohA0UNAAsLIApBAU4EQCALQcQAaiEEQQAhBQNAAkAgCyAFQcgAbGoiAy0APEECcUUNACABQQA2AugDIAFCADcD4AMgAUEIaiADKAI4IgYCf0EBQQEgA0HFAGotAABBH3F0QQEgAy0AREEfcXRyQQEgA0HGAGotAABBH3F0ciICQQJxRQ0AGkECIAJBBHFFDQAaQQBBAyACQQhxGwsiDhBmEGEgAUGYBmogACABKAIIIAEoAgwQMSABQegDaiABQaAGaigCADYCACABIAEpA5gGNwPgAyADQUBrIQNBACECA0AgASAGIAIgBGotAAAiCRBmEGEgAUGYBmogACABKAIAIAEoAgQQMSABQZgGaiABQeADahALBEAgFCADKAIAIgMgDmpBKGxqIBQgAyAJakEobGpBKBA7GgwCCyACQQFqIgJBA0cNAAsLIARByABqIQQgBUEBaiIFIApHDQALCyABKALQBCEFQQAhBkEAIQkDQEEAIAUgCWsiAyADIAVLGyEKIBQgCUEobGohDkEAIQNBACEEA0AgBCAKRg0DIAMgDmoiAikCACErIAEgAkEIaigCADYC6AMgASArNwLgAyAAIAFB4ANqIAJBDGoqAgAgAkEcaioCACACQSRqLQAAEB8gBEEBaiEEIANBKGoiA0H4AEcNAAsgBCAJaiEJIAZBAWoiBiATRw0ACyABQcgEahBUIAFBuARqKAIAGiABQbgEahBWIAFBqARqEFIgAUHQA2oQUyABQcADaigCABogAUHAA2oQVkEBIQILIAFB4AZqJAAgAg8LIAQgCWogBUHMgsAAED8ACyAGIAxBvILAABA/AAsgBEECaiAIQayCwAAQPwALIARBAWogC0GcgsAAED8ACyAEIApBjILAABA/AAsgCyALQdyFwAAQPwALIAYgBEHMhcAAED8ACyADIARBvIXAABA/AAsgBiADQayFwAAQPwALIAQgA0GchcAAED8ACyAEIApBjIXAABA/AAtBAEEA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AiALIANBEGogAiABIANBIGoQLSADQRhqKAIAIQEgAygCFCECIAMoAhBBAUYNASAAIAI2AgAgACABQShuNgIECyADQTBqJAAPCyADQQhqIAIgARBoIAMoAgghASADKAIMDAELIAMgAkEAEGggAygCACEBIAMoAgQLIgAEQCABIAAQcAALEGsAC6cCAgN/AX4jAEEwayIDJAACfwJAAkAgACgCBCIEIAFrIAJJBEAgASACaiICIAFJDQJBBCEBAkAgBEEBdCIFIAIgBSACSxsiAkEEIAJBBEsbrUIMfiIGQiCIp0UEQCAGpyECDAELIAAoAgQhBEEAIQELAkAgBARAIAAoAgAhBSADQShqQQQ2AgAgAyAEQQxsNgIkIAMgBTYCIAwBCyADQQA2AiALIANBEGogAiABIANBIGoQLSADQRhqKAIAIQEgAygCFCECIAMoAhBBAUYNASAAIAI2AgAgACABQQxuNgIECyADQTBqJAAPCyADQQhqIAIgARBoIAMoAgghASADKAIMDAELIAMgAkEAEGggAygCACEBIAMoAgQLIgAEQCABIAAQcAALEGsAC6gCAQN/IwBBMGsiAyQAAn8CQAJAIAAoAgQiBCABayACSQRAIAEgAmoiAiABSQ0CQQQhAQJAIARBAXQiBSACIAUgAksbIgJBBCACQQRLGyICQf////8DcSACRgRAIAJBAnQhAgwBCyAAKAIEIQRBACEBCwJAIAQEQCAAKAIAIQUgA0EoakEENgIAIAMgBEECdDYCJCADIAU2AiAMAQsgA0EANgIgCyADQRBqIAIgASADQSBqEC0gA0EYaigCACEBIAMoAhQhAiADKAIQQQFGDQEgACACNgIAIAAgAUECdjYCBAsgA0EwaiQADwsgA0EIaiACIAEQaCADKAIIIQEgAygCDAwBCyADIAJBABBoIAMoAgAhASADKAIECyIABEAgASAAEHAACxBrAAuoAgEDfyMAQTBrIgMkAAJ/AkACQCAAKAIEIgQgAWsgAkkEQCABIAJqIgIgAUkNAkEEIQECQCAEQQF0IgUgAiAFIAJLGyICQQQgAkEESxsiAkH/////AHEgAkYEQCACQQR0IQIMAQsgACgCBCEEQQAhAQsCQCAEBEAgACgCACEFIANBKGpBBDYCACADIARBBHQ2AiQgAyAFNgIgDAELIANBADYCIAsgA0EQ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aiEDIAUoAggiBiAFKAIMIgdJBEAgByAGayEIA0AgAikCACEJIANBCGogAkEIaikCADcCACADIAk3AgAgA0EQaiEDIAhBf2oiCA0ACyAEIAdqIAZrIQQLIAAgAQR/IAIpAgAhCSADQQhqIAJBCGopAgA3AgAgAyAJNwIAIARBAWoFIAQLNgIIIAVBEGokAAuqAQMBfwN+An0jAEEgayICJAAgAkEYaiABKAIAEGEgACACKAIYIAIoAhwQPSEDIAJBEGogASgCBBBhIAAgAigCECACKAIUED0hBCACQQhqIAEoAggQYSAAIAIoAgggAigCDBA9IQUgAkEgaiQAIASnviADp74iBpMgBUIgiKe+IANCIIinviIHk5QgBEIgiKe+IAeTIAWnviAGk5STIgaMIAYgBkMAAAAAXRsLsQEBBX8jAEEQayIDJAACQCAAKAIEIgIgAU8EQAJAIAIEQCACQQJ0IQIgACgCACEEAkAgAUECdCIFRQRAQQQhBiACRQ0BIAQgAkEEEGoMAQsgBCACQQQgBRBiIgZFDQILIAAgBjYCACAAIAFB/////wNxNgIECyADQRBqJAAPCyADQQhqIAVBBBBoIAMoAgwiAEUNASADKAIIIAAQcAALQcWIwABBJEHsiMAAEEgACxBrAAu2AQEBfyMAQRBrIgMkAAJAIABFDQAgAyAANgIEIAFFDQACQCACQQRLDQAgAUEDakECdkF/aiIAQf8BSw0AIANBoJXAADYCCCADIABBAnRBpJXAAGoiACgCADYCDCADQQRqIANBDGogA0EIakGUicAAEBMgACADKAIMNgIADAELIANBoJXAACgCADYCDCADQQRqIANBDGpB/IjAAEH8iMAAEBNBoJXAACADKAIMNgIACyADQRBqJAALmQEBBn8jAEEQayIFJAAgACAAKAIIIAEQGCAAKAIAIAAoAgghAyAFQQhqQQEgARBoIANByABsaiEEIAUoAggiBiAFKAIMIgdJBEAgByAGayEIA0AgBCACQcgAEDtByABqIQQgCEF/aiIIDQALIAMgB2ogBmshAwsgACABBH8gBCACQcgAEDsaIANBAWoFIAMLNgIIIAVBEGokAAuVAQEGfyMAQRBrIgUkACAAIAAoAgggARAZIAAoAgAgACgCCCEDIAVBCGpBASABEGggA0EobGohBCAFKAIIIgYgBSgC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AWoiAiABIAJLG0GHgARqIgFBEHZAACICQX9GBEBBACEDQQEMAQsgAkEQdCIDQgA3AwAgA0EANgIIIAMgAyABQYCAfHFqQQJyNgIAQQALIQIgACADNgIEIAAgAjYCAAtvAQF/AkAgASAATwRAIAJFDQEgACEDA0AgAyABLQAAOgAAIAFBAWohASADQQFqIQMgAkF/aiICDQALDAELIAJFDQAgAUF/aiEBIABBf2ohAwNAIAIgA2ogASACai0AADoAACACQX9qIgINAAsLIAALbwECfwJ/IAIgAJMgASAAk5VDAAAARZQiAEMAAADPYCIDQQFzIABD////Tl9FckUEQCAAqAwBC0H/////B0GAgICAeCADGyIEIARBACAAQ////05fGyADGwsiA0EAIANBAEobIgNB/w8gA0H/D0gbC2YBAX8CQCAAQSBqKAIAIgMgAUEGbCACQQF0aiIBSwRAIAMgAUEBciICTQ0BIAAoAhgiACACQQJ0ajUCAEIghiAAIAFBAnRqNQIAhA8LIAEgA0HsgMAAED8ACyACIANB/IDAABA/AAtrAQJ/IwBBEGsiBiQAAkAgACABIAIgAyAEEAoiBQ0AIAZBCGogAyAAIAEgBCgCDBEFAEEAIQUgBigCCA0AIAYoAgwiBSACKAIANgIIIAIgBTYCACAAIAEgAiADIAQQCiEFCyAGQRBqJAAgBQtsAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EcakECNgIAIANBLGpBHTYCACADQgI3AgwgA0G0kMAANgIIIANBHTYCJCADIANBIGo2AhggAyADNgIoIAMgA0EEajYCICADQQhqIAIQWQALVAEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEaiACQQhqEAggAkEgaiQAC1kCAX8BfiMAQSBrIgMkACADQQhqIAIQNyADKQMIIQQgAEEANgIIIAAgBDcCACADQRhqIAFBCGopAgA3AwAgAyABKQIANwMQIAAgAiADQRBqECcgA0EgaiQAC1kCAX8BfiMAQSBrIgMkACADQQhqIAIQNCADKQMIIQQgAEEANgIIIAAgBDcCACADQRhqIAFBCGooAgA2AgAgAyABKQIANwMQIAAgAiADQRBqECYgA0EgaiQAC1kCAX8BfiMAQSBrIgMkACADQQhqIAIQNyADKQMIIQQgAEEANgIIIAAgBDcCACADQRhqIAFBCGopAgA3AwAgAyABKQIANwMQIAAgAiADQRBqECAgA0EgaiQAC1QBAn8gASgCACECIAFBADYCAAJAIAIEQCABKAIEIQNBCEEEEGciAUUNASABIAM2AgQgASACNgIAIABByI3AADYCBCAAIAE2AgAPCwALQQhBBBBwAAtKAgF/AX4jAEHQAGsiAyQAIAMgAhA2IAMpAwAhBCAAQQA2AgggACAENwIAIANBCGogAUHIABBOIAAgAiADQQhqECsgA0HQAGokAAtHAgF/AX4jAEEwayIDJAAgAyACEDUgAykDACEEIABBADYCCCAAIAQ3AgAgA0EIaiABQSgQTiAAIAIgA0EIahAsIANBMGokAAtKAAJ/IAFBgIDEAEcEQEEBIAAoAhggASAAQRxqKAIAKAIQEQIADQEaCyACRQRAQQAPCyAAKAIYIAJBACAAQRxqKAIAKAIMEQQACwtHAQF/IwBBIGsiAyQAIANBFGpBADYCACADQfCPwAA2AhAgA0IBNwIEIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhBZAAs8AQF/IAAoAggiAQRAIAFBBHQhASAAKAIAQQRqIQADQCAAKAIAGiAAEFYgAEEQaiEAIAFBcGoiAQ0ACwsLOAAgAEIANwIAIABBCGpBADYCACAAQSRqQQA6AAAgAEEcakIANwIAIABBFGpCADcCACAAQgA3AgwLRAECfyABKAIEIQIgASgCACEDQQhBBBBnIgFFBEBBCEEEEHAACyABIAI2AgQgASADNgIAIABBoI/AADYCBCAAIAE2AgALPQAgAEIANwIgIAAgASkCADcCACAAIAIpAgA3AhAgAEEIaiABQQhqKQIANwIAIABBGGogAkEIaikCADcCAAtbAQN/IwBBEGsiASQAIAAoAgwiAkUEQEGAjsAAQStByI7AABBIAAsgACgCCCIDRQRAQYCOwABBK0HYjsAAEEgACyABIAI2AgggASAANgIEIAEgAzYCACABEFgACysAIAIEQANAIAAgAS0AADoAACABQQFqIQEgAEEBaiEAIAJBf2oiAg0ACwsLKQEBfyADIAIQLiIEBEAgBCAAIAMgASABIANLGxBOIAAgASACECoLIAQLLAACQCAAQXxNBEAgAEUEQEEEIQAMAgsgACAAQX1JQQJ0EGciAA0BCwALIAALNwEBf0EBIQECQCAAKgIAi0MAAIAAXg0AIAAqAgSLQwAAgABeDQAgACoCCItDAACAAF4hAQsgAQsmAQF/AkAgACgCBCIBRQ0AIAAoAgAgAUEEdCIBRQ0AIAFBBBBqCwsnAQF/AkAgACgCBCIBRQ0AIAAoAgAgAUHIAGwiAUUNACABQQQQagsLJgEBfwJAIAAoAgQiAUUNACAAKAIAIAFBKGwiAUUNACABQQQQagsLJgEBfwJAIAAoAgQiAUUNACAAKAIAIAFBDGwiAUUNACABQQQQagsLJgEBfwJAIAAoAgQiAUUNACAAKAIAIAFBAnQiAUUNACABQQQQagsLLAEBfyMAQRBrIgEkACABQQhqIABBCGooAgA2AgAgASAAKQIANwMAIAEQWwALLAEBfyMAQRBrIgEkACABQQhqIABBCGooAgA2AgAgASAAKQIANwMAIAEQMwALNAEBfyMAQRBrIgIkACACIAE2AgwgAiAANgIIIAJB8I/AADYCBCACQfCPwAA2AgAgAhBNAAspAQF/IAEEQCAAIQIDQCACQQA6AAAgAkEBaiECIAFBf2oiAQ0ACwsgAAsrAQF/IwBBEGsiASQAIAEgACkCADcDCCABQQhqQbSNwABBACAAKAIIECUACycBAX8jAEEQayICJAAgAiABNgIIIAJBHTYCBCACIAA2AgAgAhBXAAsmAQF/AkAgACgCACIBRQ0AIABBBGooAgAiAEUNACABIABBARBqCwsmAQF/AkAgACgCBCIBRQ0AIABBCGooAgAiAEUNACABIABBARBqCwshACAAQQM2AgwgACABNgIEIAAgATYCACAAIAFBDGo2AggLHQAgASgCAEUEQAALIABByI3AADYCBCAAIAE2AgALFgAgACABQQNxNgIEIAAgAUECdjYCAAsMACAAIAEgAiADEE8LFgAgACABKAIINgIEIAAgASgCADYCAAsPACABBEAgACABQQQQagsLEgAgACgCACABIAEgAmoQIkEACw0AIAFBA3EgAEECdHILCAAgACABEC4LEAAgACACNgIEIAAgATYCAAsTACAAQaCPwAA2AgQgACABNgIACwoAIAAgASACECoLEQBBzI/AAEERQeCPwAAQSAALDgAgACgCABoDQAwACwALCwAgADUCACABEBQLCwAgACMAaiQAIwALCwAgAItDAACAAF4LGQAgACABQcSdwAAoAgAiAEEPIAAbEQEAAAsFAEGABAsEAEEBCwQAIAELBABBAAsNAEL0+Z7m7qOq+f4ACw0AQve47vqqzNXu5QALDABC6dCi28yi6rtGCwMAAQsDAAELC6QVAgBBgIDAAAvBCnNyYy9saWIucnMAAAAAEAAKAAAANgAAAA0AAAAAABAACgAAADcAAAANAAAAAAAQAAoAAAA4AAAADQAAAAAAEAAKAAAAPgAAAA0AAAAAABAACgAAAD8AAAANAAAAAAAQAAoAAABAAAAADQAAAAAAEAAKAAAARgAAAA0AAAAAABAACgAAAEcAAAANAAAARmFpbGVkIHRvIGdlbmVyYXRlIHRhbmdlbnRzLi9Vc2Vycy9kb25tY2N1cmR5Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL21pa2t0c3BhY2UtMC4yLjAvc3JjL2dlbmVyYXRlZC5ycwCoABAAYwAAANcAAAASAAAAqAAQAGMAAADYAAAAEgAAAKgAEABjAAAA2QAAABIAAACoABAAYwAAAN4AAAANAAAAqAAQAGMAAAAjAQAAOAAAAKgAEABjAAAA/QEAABUAAACoABAAYwAAAA8CAABAAAAAqAAQAGMAAAAVAgAAEQAAAKgAEABjAAAAFgIAABEAAACoABAAYwAAABgCAAARAAAAqAAQAGMAAAAjAgAAGQAAAKgAEABjAAAAJAIAADIAAACoABAAYwAAACoCAAAcAAAAqAAQAGMAAAAmAgAANAAAAKgAEABjAAAAvQUAAAkAAACoABAAYwAAAMAFAAAFAAAAqAAQAGMAAADDBQAAHAAAAKgAEABjAAAAwwUAADMAAACoABAAYwAAAMMFAAAJAAAAqAAQAGMAAADTBQAAIwAAAKgAEABjAAAA0wUAABcAAACoABAAYwAAANQFAAAYAAAAqAAQAGMAAADVBQAACQAAAKgAEABjAAAA3AUAABEAAACoABAAYwAAAN8FAAAYAAAAqAAQAGMAAADgBQAAGQAAAKgAEABjAAAA6AUAAC0AAACoABAAYwAAAOgFAAAhAAAAqAAQAGMAAADpBQAAGAAAAKgAEABjAAAA8gUAABEAAACoABAAYwAAAKcGAAANAAAAqAAQAGMAAACuBgAAEQAAAKgAEABjAAAArwYAABEAAACoABAAYwAAALAGAAARAAAAqAAQAGMAAAD9BgAACQAAAE1hdHJpeCBzbGljaW5nIG91dCBvZiBib3VuZHMuL1VzZXJzL2Rvbm1jY3VyZHkvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbmFsZ2VicmEtMC4xOS4wL3NyYy9iYXNlL21hdHJpeF9zbGljZS5ycwBZAxAAagAAAOMAAAAJAAAAL1VzZXJzL2Rvbm1jY3VyZHkvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS14ODZfNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnNUcmllZCB0byBzaHJpbmsgdG8gYSBsYXJnZXIgY2FwYWNpdHkAAADUAxAAcQAAAMUBAAAJAAAAAQAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAQAAAAEAAAABgAAAAcAAAAIAAAACQAAAAAAAAABAAAAAgAAAAMAAAAEAAAAL1VzZXJzL2Rvbm1jY3VyZHkvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS14ODZfNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvbnVtL21vZC5yc8QEEABwAAAAnQIAAAUAQdCKwAAL0AphdHRlbXB0IHRvIGNhbGN1bGF0ZSB0aGUgcmVtYWluZGVyIHdpdGggYSBkaXZpc29yIG9mIHplcm9NYXRyaXggc2xpY2luZyBvdXQgb2YgYm91bmRzLi9Vc2Vycy9kb25tY2N1cmR5Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMTkuMC9zcmMvYmFzZS9tYXRyaXhfc2xpY2UucnOmBRAAagAAAOMAAAAJAAAAL1VzZXJzL2Rvbm1jY3VyZHkvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbWlra3RzcGFjZS0wLjIuMC9zcmMvZ2VuZXJhdGVkLnJzACAGEABjAAAA2wIAABkAAAAgBhAAYwAAANsCAAAyAAAAIAYQAGMAAAB+AwAACAAAAAoAAAAIAAAABAAAAAsAAAAMAAAADQAAAAgAAAAEAAAADgAAABAAAAAEAAAABAAAABEAAAASAAAAEwAAABAAAAAAAAAAAQAAABQAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlbGlicmFyeS9zdGQvc3JjL3Bhbmlja2luZy5ycwArBxAAHAAAAO0BAAAfAAAAKwcQABwAAADuAQAAHgAAABUAAAAQAAAABAAAABYAAAAXAAAAEAAAAAgAAAAEAAAAGAAAABkAAAAaAAAADAAAAAQAAAAbAAAAEAAAAAgAAAAEAAAAHAAAAGxpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnNjYXBhY2l0eSBvdmVyZmxvdwAAALAHEAAcAAAAHgIAAAUAAAAfAAAAAAAAAAEAAAAgAAAAaW5kZXggb3V0IG9mIGJvdW5kczogdGhlIGxlbiBpcyAgYnV0IHRoZSBpbmRleCBpcyAAAAAIEAAgAAAAIAgQABIAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OWxpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAMCRAAGwAAAFUEAAARAAAADAkQABsAAABfBAAAJAAAAAMAAAAEAAAABAAAAAYAAACD+aIARE5uAPwpFQDRVycA3TT1AGLbwAA8mZUAQZBDAGNR/gC73qsAt2HFADpuJADSTUIASQbgAAnqLgAcktEA6x3+ACmxHADoPqcA9TWCAES7LgCc6YQAtCZwAEF+XwDWkTkAU4M5AJz0OQCLX4QAKPm9APgfOwDe/5cAD5gFABEv7wAKWosAbR9tAM9+NgAJyycARk+3AJ5mPwAt6l8Auid1AOXrxwA9e/EA9zkHAJJSigD7a+oAH7FfAAhdjQAwA1YAe/xGAPCrawAgvM8ANvSaAOOpHQBeYZEACBvmAIWZZQCgFF8AjUBoAIDY/wAnc00ABgYxAMpWFQDJqHMAe+JgAGuMwAAAAABA+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AHsJcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx0xLjQ5LjAgKGUxODg0YThlMyAyMDIwLTEyLTI5KQZ3YWxydXMGMC4xOC4wDHdhc20tYmluZGdlbhIwLjIuNzMgKDNjZWZlMmM4Mik=";let Ue,As=!1;const xc=fetch(Sc).then(a=>a.arrayBuffer()).then(a=>WebAssembly.instantiate(a,{"./mikktspace_module_bg.js":{__wbindgen_string_new:$i,__wbindgen_rethrow:es}})).then(a=>{Ue=a.instance.exports,As=!0}),Mc=Object.freeze(Object.defineProperty({__proto__:null,__wbindgen_rethrow:es,__wbindgen_string_new:$i,generateTangents:Dc,get isReady(){return As},ready:xc,get wasm(){return Ue}},Symbol.toStringTag,{value:"Module"}));exports.BufferGeometryUtils=Ks;exports.DRACOLoader=So;exports.EXRLoader=mr;exports.FBXLoader=Xa;exports.Font=Gi;exports.FontLoader=Ar;exports.GLTFExporter=ln;exports.GLTFLoader=sn;exports.GroundedSkybox=ks;exports.HTMLMesh=Na;exports.HorizontalBlurShader=Vr;exports.InteractiveGroup=Pa;exports.KTX2Loader=Ze;exports.Line2=va;exports.LineGeometry=Ji;exports.LineMaterial=hn;exports.MeshoptDecoder=Do;exports.OBJLoader=Bc;exports.OrbitControls=kr;exports.Pass=fc;exports.PositionalAudioHelper=jr;exports.RGBELoader=br;exports.Stats=jA;exports.TextGeometry=er;exports.TransformControls=yr;exports.TransformControlsGizmo=Hi;exports.VertexNormalsHelper=Ha;exports.VerticalBlurShader=zr;exports.XRControllerModelFactory=Fa;exports.XRHandMeshModel=Ga;exports.mergeVertices=ci;exports.mikktspace_module=Mc;exports.nodeFrame=Ri;exports.strToU8=An;exports.zipSync=Qr;
|
|
464
|
+
`);let i=[];for(let s=0,o=t.length;s<o;s++){const c=t[s].trimStart();if(c.length===0)continue;const g=c.charAt(0);if(g!=="#")if(g==="v"){const l=c.split(ni);switch(l[0]){case"v":n.vertices.push(parseFloat(l[1]),parseFloat(l[2]),parseFloat(l[3])),l.length>=7?(at.setRGB(parseFloat(l[4]),parseFloat(l[5]),parseFloat(l[6]),r.SRGBColorSpace),n.colors.push(at.r,at.g,at.b)):n.colors.push(void 0,void 0,void 0);break;case"vn":n.normals.push(parseFloat(l[1]),parseFloat(l[2]),parseFloat(l[3]));break;case"vt":n.uvs.push(parseFloat(l[1]),parseFloat(l[2]));break}}else if(g==="f"){const h=c.slice(1).trim().split(ni),I=[];for(let f=0,C=h.length;f<C;f++){const p=h[f];if(p.length>0){const d=p.split("/");I.push(d)}}const B=I[0];for(let f=1,C=I.length-1;f<C;f++){const p=I[f],d=I[f+1];n.addFace(B[0],p[0],d[0],B[1],p[1],d[1],B[2],p[2],d[2])}}else if(g==="l"){const l=c.substring(1).trim().split(" ");let h=[];const I=[];if(c.indexOf("/")===-1)h=l;else for(let B=0,f=l.length;B<f;B++){const C=l[B].split("/");C[0]!==""&&h.push(C[0]),C[1]!==""&&I.push(C[1])}n.addLineGeometry(h,I)}else if(g==="p"){const h=c.slice(1).trim().split(" ");n.addPointGeometry(h)}else if((i=ac.exec(c))!==null){const l=(" "+i[0].slice(1).trim()).slice(1);n.startObject(l)}else if(gc.test(c))n.object.startMaterial(c.substring(7).trim(),n.materialLibraries);else if(cc.test(c))n.materialLibraries.push(c.substring(7).trim());else if(lc.test(c))console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');else if(g==="s"){if(i=c.split(" "),i.length>1){const h=i[1].trim().toLowerCase();n.object.smooth=h!=="0"&&h!=="off"}else n.object.smooth=!0;const l=n.object.currentMaterial();l&&(l.smooth=n.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}return n.finalize(),A?n:this.createObjects(n)}createObjects(e){const A=new r.Group;if(A.materialLibraries=[].concat(e.materialLibraries),!(e.objects.length===1&&e.objects[0].geometry.vertices.length===0)===!0)for(let t=0,i=e.objects.length;t<i;t++){const s=e.objects[t],o=s.geometry,c=s.materials,g=o.type==="Line",l=o.type==="Points";let h=!1;if(o.vertices.length===0)continue;const I=new r.BufferGeometry;I.setAttribute("position",new r.Float32BufferAttribute(o.vertices,3)),o.normals.length>0&&I.setAttribute("normal",new r.Float32BufferAttribute(o.normals,3)),o.colors.length>0&&(h=!0,I.setAttribute("color",new r.Float32BufferAttribute(o.colors,3))),o.hasUVIndices===!0&&I.setAttribute("uv",new r.Float32BufferAttribute(o.uvs,2));const B=[];for(let C=0,p=c.length;C<p;C++){const d=c[C],w=d.name+"_"+d.smooth+"_"+h;let Q=e.materials[w];if(this.materials!==null){if(Q=this.materials.create(d.name),g&&Q&&!(Q instanceof r.LineBasicMaterial)){const b=new r.LineBasicMaterial;r.Material.prototype.copy.call(b,Q),b.color.copy(Q.color),Q=b}else if(l&&Q&&!(Q instanceof r.PointsMaterial)){const b=new r.PointsMaterial({size:10,sizeAttenuation:!1});r.Material.prototype.copy.call(b,Q),b.color.copy(Q.color),b.map=Q.map,Q=b}}Q===void 0&&(g?Q=new r.LineBasicMaterial:l?Q=new r.PointsMaterial({size:1,sizeAttenuation:!1}):Q=new r.MeshPhongMaterial,Q.name=d.name,Q.flatShading=!d.smooth,Q.vertexColors=h,e.materials[w]=Q),B.push(Q)}let f;if(B.length>1){for(let C=0,p=c.length;C<p;C++){const d=c[C];I.addGroup(d.groupStart,d.groupCount,C)}g?f=new r.LineSegments(I,B):l?f=new r.Points(I,B):f=new r.Mesh(I,B)}else g?f=new r.LineSegments(I,B[0]):l?f=new r.Points(I,B[0]):f=new r.Mesh(I,B[0]);f.name=s.name,A.add(f)}else if(e.vertices.length>0){const t=new r.PointsMaterial({size:1,sizeAttenuation:!1}),i=new r.BufferGeometry;i.setAttribute("position",new r.Float32BufferAttribute(e.vertices,3)),e.colors.length>0&&e.colors[0]!==void 0&&(i.setAttribute("color",new r.Float32BufferAttribute(e.colors,3)),t.vertexColors=!0);const s=new r.Points(i,t);A.add(s)}return A}}class uc{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}new r.OrthographicCamera(-1,1,1,-1,0,1);class Bc extends r.BufferGeometry{constructor(){super(),this.setAttribute("position",new r.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new r.Float32BufferAttribute([0,2,0,0,2,0],2))}}new Bc;const fc=typeof TextDecoder>"u"?(0,module.require)("util").TextDecoder:TextDecoder;let Wi=new fc("utf-8",{ignoreBOM:!0,fatal:!0});Wi.decode();let ct=null;function Cc(){return(ct===null||ct.buffer!==Ue.memory.buffer)&&(ct=new Uint8Array(Ue.memory.buffer)),ct}function Ec(a,e){return Wi.decode(Cc().subarray(a,a+e))}const lA=new Array(32).fill(void 0);lA.push(void 0,null,!0,!1);let VA=lA.length;function pc(a){VA===lA.length&&lA.push(lA.length+1);const e=VA;return VA=lA[e],lA[e]=a,e}function dc(a){return lA[a]}function Qc(a){a<36||(lA[a]=VA,VA=a)}function mc(a){const e=dc(a);return Qc(a),e}let gt=null;function Zi(){return(gt===null||gt.buffer!==Ue.memory.buffer)&&(gt=new Float32Array(Ue.memory.buffer)),gt}let ut=0;function Yt(a,e){const A=e(a.length*4);return Zi().set(a,A/4),ut=a.length,A}let lt=null;function ri(){return(lt===null||lt.buffer!==Ue.memory.buffer)&&(lt=new Int32Array(Ue.memory.buffer)),lt}function bc(a,e){return Zi().subarray(a/4,a/4+e)}function wc(a,e,A){try{const I=Ue.__wbindgen_add_to_stack_pointer(-16);var n=Yt(a,Ue.__wbindgen_malloc),t=ut,i=Yt(e,Ue.__wbindgen_malloc),s=ut,o=Yt(A,Ue.__wbindgen_malloc),c=ut;Ue.generateTangents(I,n,t,i,s,o,c);var g=ri()[I/4+0],l=ri()[I/4+1],h=bc(g,l).slice();return Ue.__wbindgen_free(g,l*4),h}finally{Ue.__wbindgen_add_to_stack_pointer(16)}}const $i=function(a,e){var A=Ec(a,e);return pc(A)},es=function(a){throw mc(a)},yc="data:application/octet-stream;base64,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TQ0WIARBAnRqIgQgBCgCAEEBajYCACACQQRqIQIgA0F/aiIDDQALCyABQdgFaigCACABKALgBUUNFUEAIQJBADYCAEEBIQQDQCABQfgCaiABQdgFahBjIAEoAvwCIgMgBEF/aiIHTQ0UIAEoAvgCIAJqKAIAIQMgAUHwAmogAUHoBWoQYyABKAL0AiINIAdNDRMgASgC8AIgAmooAgAhByABQdgFaigCACENIAEoAuAFIhEgBE0NEiACIA1qQQRqIAMgB2o2AgAgAkEEaiECIARBAWoiBEGAEEcNAAsgCEEJTwRAQQAhBCABQZgGakEAQQRBCCAGGyALG2ohCCAFIQMDQCABQegCaiADKAIAEGEgAUGYBmogACABKALoAiABKALsAhAxIDAgLiAIKgIAEDwhAiABQeACaiABQdgFahBjIAEoAuQCIgYgAk0NEiABQcgFaigCACABKALQBSINIAJBAnQiBiABKALgAmooAgAiC00NESABQdgCaiABQfgFahBjIAEoAtwCIg0gAk0NECALQQJ0aiABKALYAiAGaigCAEECdGogBDYCACABQfgFaigCACELIAEoAoAGIgcgAk0NDyAGIAtqIgIgAigCAEEBajYCACADQQRqIQMgCiAEQQFqIgRHDQALCyABQdACaiABQegFahBjIAEoAtQCRQ0MIAEoAtACKAIAIQNBBCECQQEhBANAIAFByAJqIAFB6AVqEGMgASgCzAIiCiAETQ0MIAMgASgCyAIgAmooAgBJBEAgAUHAAmogAUHoBWoQYyABKALEAiIDIARNDQwgASgCwAIgAmooAgAhAwsgAkEEaiECIARBAWoiBEGAEEcNAAsgAUHgA2oiAkIANwIAIAJBCGpCADcCACABQaAGaiABQegDaikDADcDACABIAEpA+ADNwOYBiABQYgGaiABQZgGaiADEEEgASgCiAYhCiABKAKQBiELQQAhBgNAIAFBuAJqIAFB2AVqEGMgASgCvAIiAyAGTQ0KIAFByAVqKAIAIQIgASgC0AUiBCAGQQJ0IgggASgCuAJqKAIAIgNNDQkgAUGwAmogAUHoBWoQYyABKAK0AiIEIAZNDQggASgCsAIgCGooAgAiCEECTwRAIAIgA0ECdGohBEEAIQMgCiECA0AgAUGoAmogBSAEKAIAIgdBAnRqKAIAEGEgAUGYBmogACABKAKoAiABKAKsAhAxIAMgC0YNCSACIAEoApgGNgIAIAJBBGogASgCnAY2AgAgASgCoAYhDSACQQxqIAc2AgAgAkEIaiANNgIAIARBBGohBCACQRBqIQIgCCADQQFqIgNHDQALIAUgCiAAQQAgCEF/ahAECyAGQQFqIgZBgBBHDQALIBNBASATQQFLGyEFIA5BPGohAyABQYgGahBSIAFB+AVqKAIAGiABQfgFahBWIAFB6AVqKAIAGiABQegFahBWIAFB2AVqKAIAGiABQdgFahBWIAFByAVqKAIAGiABQcgFahBWQQAhAkEAIQRBACEGQQAhBwNAIAFBoAJqIAFBwANqEGMgASgCpAIiCiAETQ0GIAEoAqACIAJqKAIAIQogAUGYAmogAUHAA2oQYyABKAKcAiILIARBAWpNDQUgASgCmAIgAmpBBGooAgAhCyABQZACaiABQcADahBjIAEoApQCIgggBEECak0NBCABKAKQAiACakEIaigCACEIIAFBiAJqIAoQYSABQYgGaiAAIAEoAogCIAEoAowCEDEgAUGAAmogCxBhIAFB4ANqIAAgASgCgAIgASgChAIQMSABQfgBaiAIEGEgAUGYBmogACABKAL4ASABKAL8ARAxAkACQCABQYgGaiABQeADahALDQAgAUGIBmogAUGYBmoQCw0AIAFB4ANqIAFBmAZqEAtFDQELIAwgBk0NBCADIAMoAgBBAXI2AgAgB0EBaiEHCyACQQxqIQIgBEEDaiEEIANByABqIQMgBSAGQQFqIgZHDQALIA4gAUHAA2ooAgAgEyAHayIKIBMQECABQcADaigCACELAkACQCAKRQRAQX8hBgwBC0EAIQYDQCAOIAZByABsaiIDQn83AgAgA0EIakF/NgIAIANBDGpCADcCACADQRRqQQA2AgAgA0E8aiADQRhqIQIgAygCPCEEQQMhAwNAIAJCADcCACACQRhqQgA3AgAgAkEQakIANwIAIAJBCGpCADcCACAEQQRyIQQgA0F/aiIDDQALIAQ2AgAgBkEBaiIGIApHDQALIAFBpAZqIQYgAUHsA2ohDEEAIQUDQCABQfABaiALIAVBDGxqIgMoAgAQYSABQagFaiAAIAEoAvABIAEoAvQBEDEgAUHoAWogA0EEaiICKAIAEGEgAUG4BWogACABKALoASABKALsARAxIAFB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AkAgASgCRBAxIAEpA4gGISsgASgCkAYhFyABQThqIAIQYSABQYgGaiAAIAEoAjggASgCPBAxIAEoAogGIQIgASgCjAYhECABKAKQBiESIAFBMGogHRBhIAFBiAZqIAAgASgCMCABKAI0EDEgASkDiAYhLCABKAKQBiEdIAEgFzYCgAYgASArNwP4BSABIBI2ApAGIAEgEDYCjAYgASACNgKIBiABQcgFaiABQfgFaiABQYgGahAVIAEgHTYCgAYgASAsNwP4BSABIBI2ApAGIAEgEDYCjAYgASACNgKIBiABQdgFaiABQfgFaiABQYgGahAVIBYgAUHQBWoiECgCADYCACABIAEpA8gFNwP4BSABQbgFaiABQcgFahARITUgBCAYKAIANgIAIAEgASkDuAU3A4gGIAFBKGogAUGIBmogGRBoIAEoAigiAiABKAIsIhJHBEADQCACIDUgAioCAJQ4AgAgEiACQQRqIgJHDQALCyABQcgFaiABQfgFaiABQYgGahAVIAQgECgCADYCACABIAEpA8gFNwOIBiABQYgGahBRBEAgBCAQKAIANgIAIAEgASkDyAU3A4gGIAFByAVqIAFBiAZqECMLIBYgAUHgBWoiECgCADYCACABIAEpA9gFNwP4BSABQbgFaiABQdgFahARITUgBCAYKAIANgIAIAEgASkDuAU3A4gGIAFBIGogAUGIBmogGRBoIAEoAiAiAiABKAIkIhJHBEADQCACIDUgAioCAJQ4AgAgEiACQQRqIgJHDQALCyABQdgFaiABQfgFaiABQYgGahAVIAQgECgCADYCACABIAEpA9gFNwOIBiABQYgGahBRBEAgBCAQKAIANgIAIAEgASkD2AU3A4gGIAFB2AVqIAFBiAZqECMLQwAAgD8gAUHIBWogAUHYBWoQESI1QwAAgL+XIDVDAACAP14buxAOIA8qAjQhNSAPKgIwITcgFiADKAIANgIAIAEgASkDmAY3A/gFIAEgMjgCkAYgASAvOAKMBiABIDM4AogGIAFBGGogAUGIBmogGRBotiEvIAEoAhgiAiABKAIcIg9HBEADQCACIAIqAgAgL5Q4AgAgDyACQQRqIgJHDQALCyABQZgGaiABQfgFaiABQYgGahAWIBYgFUEIaiIPKAIANgIAIAEgFSkCADcD+AUgASAxOAKQBiABIDA4AowGIAEgNDgCiAYgAUEQaiABQYgGaiAZEGggASgCECICIAEoAhQiEEcEQANAIAIgAioCACAvlDgCACAQIAJBBGoiAkcNAAsLIAFB6AVqIAFB+AVqIAFBiAZqEBYgDyABQfAFaigCADYCACAVIAEpA+gFNwIAIAEgNyAvlCABKgKkBpI4AqQGIAEgNSAvlCABKgK0BpI4ArQGIC4gL5IhLgsgCSAHQQFqIgdHDQALDAQLIAkgD0HcgsAAED8ACyAFIAJB7ILAABA/AAsgDCACQfyCwAAQPwALIAwgB0GMg8AAED8ACyAEIAMoAgA2AgAgASABKQOYBjcDiAYgAUGIBmoQUQRAIAQgAygCADYCACABIAEpA5gGNwOIBiABQZgGaiABQYgGahAjCyAEIBVBCGoiAigCADYCACABIBUpAgA3A4gGIAFBiAZqEFEEQCAEIAIoAgA2AgAgASAVKQIANwOIBiABQfgFaiABQYgGahAjIAIgAUGABmooAgA2AgAgFSABKQP4BTcCAAsgLkMAAAAAXkEBc0UEQCABIAEqAqQGIC6VOAKkBiABIAEqArQGIC6VOAK0BgsgASgC4AQiAiAMTQ0DIAEoAtgEIAxBKGxqIAFBmAZqQSgQTiAMQQFqIQwLICAEQCAIKAJAIAggKGpBxABqLQAAaiICICJPDQICfyAUIAJBKGxqIgIoAiBBAUcEQCABKALgBCIEIAVNDQYgAiABKALYBCAFQShsakEoEDsaQQEMAQsgASgC4AQiBCAFTQ0GIAFBmAZqIAIgASgC2AQgBUEobGoQBSACIAFBmAZqQSgQTkECCyEFIAJBIGogBTYCACACICYtAAA6ACQgESgCABogERBWIB9BAWoiHyANKAIASA0BDAYLC0F/QQRBrIPAABA/AAsgAiAiQbyDwAAQPwALIAwgAkGcg8AAED8ACyAFIARBzIPAABA/AAsgBSAEQdyDwAAQPwALICNBAWoiIyAGRw0ACyABQfgEaigCABogAUH4BGoQViABQegEahBJIAFB6ARqEFIgAUHYBGoQVCABKALIBCEUIAEoAtADIQsLIAFBwANqKAIAIQUgCiATSARAIBtBAUghCSAKIQMDQCALIANByABsaiIELQA8QQJxRQRAIANBA2whDCAEQUBrIQhBACEGA0ACQCAJDQAgBSAGIAxqQQJ0aigCACEOQQAhAgNAAkAgAiAOIAUgAkECdGooAgAiB0ciDWohAiAHIA5GDQAgAiAbSA0BCwsgDQ0AIBQgCCgCACAEIAZqQcQAai0AAGpBKGxqIBQgCyACQQNuIg5ByABsaiIHKAJAIAcgAiAOQQNsa2pBxABqLQAAakEobGpBKBA7GgsgBkEBaiIGQQNHDQALCyADICVGIANBAWohA0UNAAsLIApBAU4EQCALQcQAaiEEQQAhBQNAAkAgCyAFQcgAbGoiAy0APEECcUUNACABQQA2AugDIAFCADcD4AMgAUEIaiADKAI4IgYCf0EBQQEgA0HFAGotAABBH3F0QQEgAy0AREEfcXRyQQEgA0HGAGotAABBH3F0ciICQQJxRQ0AGkECIAJBBHFFDQAaQQBBAyACQQhxGwsiDhBmEGEgAUGYBmogACABKAIIIAEoAgwQMSABQegDaiABQaAGaigCADYCACABIAEpA5gGNwPgAyADQUBrIQNBACECA0AgASAGIAIgBGotAAAiCRBmEGEgAUGYBmogACABKAIAIAEoAgQQMSABQZgGaiABQeADahALBEAgFCADKAIAIgMgDmpBKGxqIBQgAyAJakEobGpBKBA7GgwCCyACQQFqIgJBA0cNAAsLIARByABqIQQgBUEBaiIFIApHDQALCyABKALQBCEFQQAhBkEAIQkDQEEAIAUgCWsiAyADIAVLGyEKIBQgCUEobGohDkEAIQNBACEEA0AgBCAKRg0DIAMgDmoiAikCACErIAEgAkEIaigCADYC6AMgASArNwLgAyAAIAFB4ANqIAJBDGoqAgAgAkEcaioCACACQSRqLQAAEB8gBEEBaiEEIANBKGoiA0H4AEcNAAsgBCAJaiEJIAZBAWoiBiATRw0ACyABQcgEahBUIAFBuARqKAIAGiABQbgEahBWIAFBqARqEFIgAUHQA2oQUyABQcADaigCABogAUHAA2oQVkEBIQILIAFB4AZqJAAgAg8LIAQgCWogBUHMgsAAED8ACyAGIAxBvILAABA/AAsgBEECaiAIQayCwAAQPwALIARBAWogC0GcgsAAED8ACyAEIApBjILAABA/AAsgCyALQdyFwAAQPwALIAYgBEHMhcAAED8ACyADIARBvIXAABA/AAsgBiADQayFwAAQPwALIAQgA0GchcAAED8ACyAEIApBjIXAABA/AAtBAEEA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AiALIANBEGogAiABIANBIGoQLSADQRhqKAIAIQEgAygCFCECIAMoAhBBAUYNASAAIAI2AgAgACABQShuNgIECyADQTBqJAAPCyADQQhqIAIgARBoIAMoAgghASADKAIMDAELIAMgAkEAEGggAygCACEBIAMoAgQLIgAEQCABIAAQcAALEGsAC6cCAgN/AX4jAEEwayIDJAACfwJAAkAgACgCBCIEIAFrIAJJBEAgASACaiICIAFJDQJBBCEBAkAgBEEBdCIFIAIgBSACSxsiAkEEIAJBBEsbrUIMfiIGQiCIp0UEQCAGpyECDAELIAAoAgQhBEEAIQELAkAgBARAIAAoAgAhBSADQShqQQQ2AgAgAyAEQQxsNgIkIAMgBTYCIAwBCyADQQA2AiALIANBEGogAiABIANBIGoQLSADQRhqKAIAIQEgAygCFCECIAMoAhBBAUYNASAAIAI2AgAgACABQQxuNgIECyADQTBqJAAPCyADQQhqIAIgARBoIAMoAgghASADKAIMDAELIAMgAkEAEGggAygCACEBIAMoAgQLIgAEQCABIAAQcAALEGsAC6gCAQN/IwBBMGsiAyQAAn8CQAJAIAAoAgQiBCABayACSQRAIAEgAmoiAiABSQ0CQQQhAQJAIARBAXQiBSACIAUgAksbIgJBBCACQQRLGyICQf////8DcSACRgRAIAJBAnQhAgwBCyAAKAIEIQRBACEBCwJAIAQEQCAAKAIAIQUgA0EoakEENgIAIAMgBEECdDYCJCADIAU2AiAMAQsgA0EANgIgCyADQRBqIAIgASADQSBqEC0gA0EYaigCACEBIAMoAhQhAiADKAIQQQFGDQEgACACNgIAIAAgAUECdjYCBAsgA0EwaiQADwsgA0EIaiACIAEQaCADKAIIIQEgAygCDAwBCyADIAJBABBoIAMoAgAhASADKAIECyIABEAgASAAEHAACxBrAAuoAgEDfyMAQTBrIgMkAAJ/AkACQCAAKAIEIgQgAWsgAkkEQCABIAJqIgIgAUkNAkEEIQECQCAEQQF0IgUgAiAFIAJLGyICQQQgAkEESxsiAkH/////AHEgAkYEQCACQQR0IQIMAQsgACgCBCEEQQAhAQsCQCAEBEAgACgCACEFIANBKGpBBDYCACADIARBBHQ2AiQgAyAFNgIgDAELIANBADYCIAsgA0EQaiACIAEgA0EgahAtIANBGGooAgAhASADKAIUIQIgAygCEEEBRg0BIAAgAjYCACAAIAFBBHY2AgQLIANBMGokAA8LIANBCGogAiABEGggAygCCCEBIAMoAgwMAQsgAyACQQAQaCADKAIAIQEgAygCBAsiAARAIAEgABBwAAsQawALsgIBBX8jAEFAaiICJAAgASgCBCIDRQRAIAFBBGohAyABKAIAIQQgAkEANgIgIAJCATcDGCACIAJBGGo2AiQgAkE4aiAEQRBqKQIANwMAIAJBMGogBEEIaikCADcDACACIAQpAgA3AyggAkEkaiACQShqEAgaIAJBEGoiBCACKAIgNgIAIAIgAikDGDcDCAJAIAEoAgQiBUUNACABQQhqKAIAIgZFDQAgBSAGQQEQagsgAyACKQMINwIAIANBCGogBCgCADYCACADKAIAIQMLIAFBATYCBCABQQxqKAIAIQQgAUEIaiIBKAIAIQUgAUIANwIAQQxBBBBnIgFFBEBBDEEEEHAACyABIAQ2AgggASAFNgIEIAEgAzYCACAAQZCPwAA2AgQgACABNgIAIAJBQGskAAuNAgELfyAAQXxqIQwCQANAIAIgAWsiBEEBaiIFIARJDQEgACADIAMgA3cgA0EAIANreHJqQQNqIgMgBXAgAWpBAnRqKAIAIQogAiEFIAEhBANAIAwgBEECdGohCCAEIQYDQCAGQQFqIQYgCEEEaiIIKAIAIg0gCkgNAAsgBkF/aiEEIAAgBUECdGohCSAFIQcDQCAHQX9qIQcgCSgCACELIAlBfGoiDiEJIAsgCkoNAAsgBCAHQQFqIgVMBEAgCCALNgIAIA5BBGogDTYCACAHIQUgBiEECyAEIAVMDQALIAUgAUoEQCAAIAEgBSADEB4LIAQhASAEIAJIDQALDwtB0IrAAEE5QbSKwAAQSAALmgIBBH8gAEEkaiEFIAEoAgghBiABKAIEIQcgASgCACEIIABBLGooAgAiASAAQShqKAIARgRAIAUgAUEBEBsgACgCLCEBCyAAKAIkIAFBAnRqIAg2AgAgACAAKAIsQQFqIgE2AiwgACgCKCABRgRAIAUgAUEBEBsgACgCLCEBCyAAKAIkIAFBAnRqIAc2AgAgACAAKAIsQQFqIgE2AiwgACgCKCABRgRAIAUgAUEBEBsgACgCLCEBCyAAKAIkIAFBAnRqIAY2AgAgACAAKAIsQQFqIgE2AiwgACgCKCABRgRAIAUgAUEBEBsgACgCLCEBCyAAKAIkIAFBAnRqQYCAgPwDQYCAgPx7IAQbNgIAIAAgACgCLEEBajYCLAv9AQIJfwF+IwBBIGsiBCQAIAAgACgCCCABEBwgACgCACAAKAIIIQUgBEEIakEBIAEQaCAFQQR0aiEDIAQoAggiBiAEKAIMIgdJBEAgByAGayEIIAJBBGohCSAEQRhqIQoDQCACKAIAIQsgBEEQaiAJEDkgAyALNgIAIANBBGogBCkDEDcCACADQQxqIAooAgA2AgAgA0EQaiEDIAhBf2oiCA0ACyAFIAdqIAZrIQULAkAgAQRAIAIpAgAhDCADQQhqIAJBCGopAgA3AgAgAyAMNwIAIAAgBUEBajYCCAwBCyAAIAU2AgggAkEEaiIAKAIAGiAAEFYLIARBIGokAAuAAgIBfwF+IwBBMGsiByQAIAdBLGpBADYCACAHQSBqIAY2AgAgB0EcaiAGNgIAIAdBFGogBDYCACAHQRBqIAQ2AgAgB0IENwIkIAcgBTYCGCAHIAM2AgwgByACNgIIIAcgAjYCBCAHIAE2AgAgB0EYaiEBIAdBDGohAyAHEAIEQCAHKAIkIQIgBykDKCEIIAcQViADEFYgARBWIAcgCDcCBCAHIAI2AgAgCKcgCEIgiKciBEsEQCAHIAQQKSAHKAIIIQQgBygCACECCyAAIAQ2AgQgACACNgIAIAdBMGokAA8LQYyBwABBHBAAIAcQViADEFYgARBWIAdBJGoQVhABAAvYAQEDfwJAIABBBGooAgAiBCAAQQhqKAIAIgNrIAIgAWsiBU8EQCAAKAIAIQQMAQsCfwJAAkAgAyAFaiICIANJDQAgBEEBdCIDIAIgAyACSxsiAkEIIAJBCEsbIQIgBARAIAJBAEgNASAAKAIAIgNFDQIgAyAEQQEgAhBiDAMLIAJBAE4NAQsQawALIAJBARBnCyIEBEAgACAENgIAIABBBGogAjYCACAAQQhqKAIAIQMMAQsgAkEBEHAACyADIARqIAEgBRBOIABBCGoiACAAKAIAIAVqNgIAC9kBAgV/An0jAEEQayICJAAgAkEIakEAQQEQaAJAIAIoAggiBCACKAIMIgVJBEAgASoCACIHIAeUIAFBBGoqAgAiByAHlJIgAUEIaioCACIHIAeUkiEIQwAAAAAhBwNAIAQNAiAIIAeSIQcgBEEBaiEGQQEhBCAFIAZHDQALCyAAIAEpAgA3AgAgAEEIaiABQQhqKAIANgIAQwAAgD8gB5GVIQcDQCAAIANqIgEgByABKgIAlDgCACADQQRqIgNBDEcNAAsgAkEQaiQADwtBiYvAAEGQjMAAEFwAC90BAQR/IwBBQGoiAiQAIAFBBGohBCABKAIERQRAIAEoAgAhAyACQQA2AiAgAkIBNwMYIAIgAkEYajYCJCACQThqIANBEGopAgA3AwAgAkEwaiADQQhqKQIANwMAIAIgAykCADcDKCACQSRqIAJBKGoQCBogAkEQaiIDIAIoAiA2AgAgAiACKQMYNwMIAkAgASgCBCIFRQ0AIAFBCGooAgAiAUUNACAFIAFBARBqCyAEIAIpAwg3AgAgBEEIaiADKAIANgIACyAAQZCPwAA2AgQgACAENgIAIAJBQGskAAuYAgECfyMAQSBrIgQkAEEBIQVB1J3AAEHUncAAKAIAQQFqNgIAAkACQAJAQdidwAAoAgBBAUcEQEHYncAAQoGAgIAQNwMADAELQdydwABB3J3AACgCAEEBaiIFNgIAIAVBAksNAQsgBCADNgIcIAQgAjYCGCAEQfCNwAA2AhQgBEHwjcAANgIQQcidwAAoAgAiAkF/TA0AQcidwAAgAkEBaiICNgIAQcidwABB0J3AACgCACIDBH9BzJ3AACgCACAEQQhqIAAgASgCEBEBACAEIAQpAwg3AxAgBEEQaiADKAIMEQEAQcidwAAoAgAFIAILQX9qNgIAIAVBAU0NAQsACyMAQRBrIgIkACACIAE2AgwgAiAANgIIAAvEAQIGfwF+IwBBEGsiBSQAIAAgACgCCCABEBogACgCACAAKAIIIQQgBUEIakEBIAEQaCAEQQxsaiEDIAUoAggiBiAFKAIMIgdJBEAgByAGayEIA0AgAikCACEJIANBCGogAkEIaigCADYCACADIAk3AgAgA0EMaiEDIAhBf2oiCA0ACyAEIAdqIAZrIQQLIAAgAQR/IAIpAgAhCSADQQhqIAJBCGooAgA2AgAgAyAJNwIAIARBAWoFIAQLNgIIIAVBEGokAAvEAQIGfwF+IwBBEGsiBSQAIAAgACgCCCABEBwgACgCACAAKAIIIQQgBUEIakEBIAEQaCAEQQR0aiEDIAUoAggiBiAFKAIMIgdJBEAgByAGayEIA0AgAikCACEJIANBCGogAkEIaikCADcCACADIAk3AgAgA0EQaiEDIAhBf2oiCA0ACyAEIAdqIAZrIQQLIAAgAQR/IAIpAgAhCSADQQhqIAJBCGopAgA3AgAgAyAJNwIAIARBAWoFIAQLNgIIIAVBEGokAAuqAQMBfwN+An0jAEEgayICJAAgAkEYaiABKAIAEGEgACACKAIYIAIoAhwQPSEDIAJBEGogASgCBBBhIAAgAigCECACKAIUED0hBCACQQhqIAEoAggQYSAAIAIoAgggAigCDBA9IQUgAkEgaiQAIASnviADp74iBpMgBUIgiKe+IANCIIinviIHk5QgBEIgiKe+IAeTIAWnviAGk5STIgaMIAYgBkMAAAAAXRsLsQEBBX8jAEEQayIDJAACQCAAKAIEIgIgAU8EQAJAIAIEQCACQQJ0IQIgACgCACEEAkAgAUECdCIFRQRAQQQhBiACRQ0BIAQgAkEEEGoMAQsgBCACQQQgBRBiIgZFDQILIAAgBjYCACAAIAFB/////wNxNgIECyADQRBqJAAPCyADQQhqIAVBBBBoIAMoAgwiAEUNASADKAIIIAAQcAALQcWIwABBJEHsiMAAEEgACxBrAAu2AQEBfyMAQRBrIgMkAAJAIABFDQAgAyAANgIEIAFFDQACQCACQQRLDQAgAUEDakECdkF/aiIAQf8BSw0AIANBoJXAADYCCCADIABBAnRBpJXAAGoiACgCADYCDCADQQRqIANBDGogA0EIakGUicAAEBMgACADKAIMNgIADAELIANBoJXAACgCADYCDCADQQRqIANBDGpB/IjAAEH8iMAAEBNBoJXAACADKAIMNgIACyADQRBqJAALmQEBBn8jAEEQayIFJAAgACAAKAIIIAEQGCAAKAIAIAAoAgghAyAFQQhqQQEgARBoIANByABsaiEEIAUoAggiBiAFKAIMIgdJBEAgByAGayEIA0AgBCACQcgAEDtByABqIQQgCEF/aiIIDQALIAMgB2ogBmshAwsgACABBH8gBCACQcgAEDsaIANBAWoFIAMLNgIIIAVBEGokAAuVAQEGfyMAQRBrIgUkACAAIAAoAgggARAZIAAoAgAgACgCCCEDIAVBCGpBASABEGggA0EobGohBCAFKAIIIgYgBSgC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AWoiAiABIAJLG0GHgARqIgFBEHZAACICQX9GBEBBACEDQQEMAQsgAkEQdCIDQgA3AwAgA0EANgIIIAMgAyABQYCAfHFqQQJyNgIAQQALIQIgACADNgIEIAAgAjYCAAtvAQF/AkAgASAATwRAIAJFDQEgACEDA0AgAyABLQAAOgAAIAFBAWohASADQQFqIQMgAkF/aiICDQALDAELIAJFDQAgAUF/aiEBIABBf2ohAwNAIAIgA2ogASACai0AADoAACACQX9qIgINAAsLIAALbwECfwJ/IAIgAJMgASAAk5VDAAAARZQiAEMAAADPYCIDQQFzIABD////Tl9FckUEQCAAqAwBC0H/////B0GAgICAeCADGyIEIARBACAAQ////05fGyADGwsiA0EAIANBAEobIgNB/w8gA0H/D0gbC2YBAX8CQCAAQSBqKAIAIgMgAUEGbCACQQF0aiIBSwRAIAMgAUEBciICTQ0BIAAoAhgiACACQQJ0ajUCAEIghiAAIAFBAnRqNQIAhA8LIAEgA0HsgMAAED8ACyACIANB/IDAABA/AAtrAQJ/IwBBEGsiBiQAAkAgACABIAIgAyAEEAoiBQ0AIAZBCGogAyAAIAEgBCgCDBEFAEEAIQUgBigCCA0AIAYoAgwiBSACKAIANgIIIAIgBTYCACAAIAEgAiADIAQQCiEFCyAGQRBqJAAgBQtsAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EcakECNgIAIANBLGpBHTYCACADQgI3AgwgA0G0kMAANgIIIANBHTYCJCADIANBIGo2AhggAyADNgIoIAMgA0EEajYCICADQQhqIAIQWQALVAEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEaiACQQhqEAggAkEgaiQAC1kCAX8BfiMAQSBrIgMkACADQQhqIAIQNyADKQMIIQQgAEEANgIIIAAgBDcCACADQRhqIAFBCGopAgA3AwAgAyABKQIANwMQIAAgAiADQRBqECcgA0EgaiQAC1kCAX8BfiMAQSBrIgMkACADQQhqIAIQNCADKQMIIQQgAEEANgIIIAAgBDcCACADQRhqIAFBCGooAgA2AgAgAyABKQIANwMQIAAgAiADQRBqECYgA0EgaiQAC1kCAX8BfiMAQSBrIgMkACADQQhqIAIQNyADKQMIIQQgAEEANgIIIAAgBDcCACADQRhqIAFBCGopAgA3AwAgAyABKQIANwMQIAAgAiADQRBqECAgA0EgaiQAC1QBAn8gASgCACECIAFBADYCAAJAIAIEQCABKAIEIQNBCEEEEGciAUUNASABIAM2AgQgASACNgIAIABByI3AADYCBCAAIAE2AgAPCwALQQhBBBBwAAtKAgF/AX4jAEHQAGsiAyQAIAMgAhA2IAMpAwAhBCAAQQA2AgggACAENwIAIANBCGogAUHIABBOIAAgAiADQQhqECsgA0HQAGokAAtHAgF/AX4jAEEwayIDJAAgAyACEDUgAykDACEEIABBADYCCCAAIAQ3AgAgA0EIaiABQSgQTiAAIAIgA0EIahAsIANBMGokAAtKAAJ/IAFBgIDEAEcEQEEBIAAoAhggASAAQRxqKAIAKAIQEQIADQEaCyACRQRAQQAPCyAAKAIYIAJBACAAQRxqKAIAKAIMEQQACwtHAQF/IwBBIGsiAyQAIANBFGpBADYCACADQfCPwAA2AhAgA0IBNwIEIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhBZAAs8AQF/IAAoAggiAQRAIAFBBHQhASAAKAIAQQRqIQADQCAAKAIAGiAAEFYgAEEQaiEAIAFBcGoiAQ0ACwsLOAAgAEIANwIAIABBCGpBADYCACAAQSRqQQA6AAAgAEEcakIANwIAIABBFGpCADcCACAAQgA3AgwLRAECfyABKAIEIQIgASgCACEDQQhBBBBnIgFFBEBBCEEEEHAACyABIAI2AgQgASADNgIAIABBoI/AADYCBCAAIAE2AgALPQAgAEIANwIgIAAgASkCADcCACAAIAIpAgA3AhAgAEEIaiABQQhqKQIANwIAIABBGGogAkEIaikCADcCAAtbAQN/IwBBEGsiASQAIAAoAgwiAkUEQEGAjsAAQStByI7AABBIAAsgACgCCCIDRQRAQYCOwABBK0HYjsAAEEgACyABIAI2AgggASAANgIEIAEgAzYCACABEFgACysAIAIEQANAIAAgAS0AADoAACABQQFqIQEgAEEBaiEAIAJBf2oiAg0ACwsLKQEBfyADIAIQLiIEBEAgBCAAIAMgASABIANLGxBOIAAgASACECoLIAQLLAACQCAAQXxNBEAgAEUEQEEEIQAMAgsgACAAQX1JQQJ0EGciAA0BCwALIAALNwEBf0EBIQECQCAAKgIAi0MAAIAAXg0AIAAqAgSLQwAAgABeDQAgACoCCItDAACAAF4hAQsgAQsmAQF/AkAgACgCBCIBRQ0AIAAoAgAgAUEEdCIBRQ0AIAFBBBBqCwsnAQF/AkAgACgCBCIBRQ0AIAAoAgAgAUHIAGwiAUUNACABQQQQagsLJgEBfwJAIAAoAgQiAUUNACAAKAIAIAFBKGwiAUUNACABQQQQagsLJgEBfwJAIAAoAgQiAUUNACAAKAIAIAFBDGwiAUUNACABQQQQagsLJgEBfwJAIAAoAgQiAUUNACAAKAIAIAFBAnQiAUUNACABQQQQagsLLAEBfyMAQRBrIgEkACABQQhqIABBCGooAgA2AgAgASAAKQIANwMAIAEQWwALLAEBfyMAQRBrIgEkACABQQhqIABBCGooAgA2AgAgASAAKQIANwMAIAEQMwALNAEBfyMAQRBrIgIkACACIAE2AgwgAiAANgIIIAJB8I/AADYCBCACQfCPwAA2AgAgAhBNAAspAQF/IAEEQCAAIQIDQCACQQA6AAAgAkEBaiECIAFBf2oiAQ0ACwsgAAsrAQF/IwBBEGsiASQAIAEgACkCADcDCCABQQhqQbSNwABBACAAKAIIECUACycBAX8jAEEQayICJAAgAiABNgIIIAJBHTYCBCACIAA2AgAgAhBXAAsmAQF/AkAgACgCACIBRQ0AIABBBGooAgAiAEUNACABIABBARBqCwsmAQF/AkAgACgCBCIBRQ0AIABBCGooAgAiAEUNACABIABBARBqCwshACAAQQM2AgwgACABNgIEIAAgATYCACAAIAFBDGo2AggLHQAgASgCAEUEQAALIABByI3AADYCBCAAIAE2AgALFgAgACABQQNxNgIEIAAgAUECdjYCAAsMACAAIAEgAiADEE8LFgAgACABKAIINgIEIAAgASgCADYCAAsPACABBEAgACABQQQQagsLEgAgACgCACABIAEgAmoQIkEACw0AIAFBA3EgAEECdHILCAAgACABEC4LEAAgACACNgIEIAAgATYCAAsTACAAQaCPwAA2AgQgACABNgIACwoAIAAgASACECoLEQBBzI/AAEERQeCPwAAQSAALDgAgACgCABoDQAwACwALCwAgADUCACABEBQLCwAgACMAaiQAIwALCwAgAItDAACAAF4LGQAgACABQcSdwAAoAgAiAEEPIAAbEQEAAAsFAEGABAsEAEEBCwQAIAELBABBAAsNAEL0+Z7m7qOq+f4ACw0AQve47vqqzNXu5QALDABC6dCi28yi6rtGCwMAAQsDAAELC6QVAgBBgIDAAAvBCnNyYy9saWIucnMAAAAAEAAKAAAANgAAAA0AAAAAABAACgAAADcAAAANAAAAAAAQAAoAAAA4AAAADQAAAAAAEAAKAAAAPgAAAA0AAAAAABAACgAAAD8AAAANAAAAAAAQAAoAAABAAAAADQAAAAAAEAAKAAAARgAAAA0AAAAAABAACgAAAEcAAAANAAAARmFpbGVkIHRvIGdlbmVyYXRlIHRhbmdlbnRzLi9Vc2Vycy9kb25tY2N1cmR5Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL21pa2t0c3BhY2UtMC4yLjAvc3JjL2dlbmVyYXRlZC5ycwCoABAAYwAAANcAAAASAAAAqAAQAGMAAADYAAAAEgAAAKgAEABjAAAA2QAAABIAAACoABAAYwAAAN4AAAANAAAAqAAQAGMAAAAjAQAAOAAAAKgAEABjAAAA/QEAABUAAACoABAAYwAAAA8CAABAAAAAqAAQAGMAAAAVAgAAEQAAAKgAEABjAAAAFgIAABEAAACoABAAYwAAABgCAAARAAAAqAAQAGMAAAAjAgAAGQAAAKgAEABjAAAAJAIAADIAAACoABAAYwAAACoCAAAcAAAAqAAQAGMAAAAmAgAANAAAAKgAEABjAAAAvQUAAAkAAACoABAAYwAAAMAFAAAFAAAAqAAQAGMAAADDBQAAHAAAAKgAEABjAAAAwwUAADMAAACoABAAYwAAAMMFAAAJAAAAqAAQAGMAAADTBQAAIwAAAKgAEABjAAAA0wUAABcAAACoABAAYwAAANQFAAAYAAAAqAAQAGMAAADVBQAACQAAAKgAEABjAAAA3AUAABEAAACoABAAYwAAAN8FAAAYAAAAqAAQAGMAAADgBQAAGQAAAKgAEABjAAAA6AUAAC0AAACoABAAYwAAAOgFAAAhAAAAqAAQAGMAAADpBQAAGAAAAKgAEABjAAAA8gUAABEAAACoABAAYwAAAKcGAAANAAAAqAAQAGMAAACuBgAAEQAAAKgAEABjAAAArwYAABEAAACoABAAYwAAALAGAAARAAAAqAAQAGMAAAD9BgAACQAAAE1hdHJpeCBzbGljaW5nIG91dCBvZiBib3VuZHMuL1VzZXJzL2Rvbm1jY3VyZHkvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbmFsZ2VicmEtMC4xOS4wL3NyYy9iYXNlL21hdHJpeF9zbGljZS5ycwBZAxAAagAAAOMAAAAJAAAAL1VzZXJzL2Rvbm1jY3VyZHkvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS14ODZfNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnNUcmllZCB0byBzaHJpbmsgdG8gYSBsYXJnZXIgY2FwYWNpdHkAAADUAxAAcQAAAMUBAAAJAAAAAQAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAQAAAAEAAAABgAAAAcAAAAIAAAACQAAAAAAAAABAAAAAgAAAAMAAAAEAAAAL1VzZXJzL2Rvbm1jY3VyZHkvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS14ODZfNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvbnVtL21vZC5yc8QEEABwAAAAnQIAAAUAQdCKwAAL0AphdHRlbXB0IHRvIGNhbGN1bGF0ZSB0aGUgcmVtYWluZGVyIHdpdGggYSBkaXZpc29yIG9mIHplcm9NYXRyaXggc2xpY2luZyBvdXQgb2YgYm91bmRzLi9Vc2Vycy9kb25tY2N1cmR5Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMTkuMC9zcmMvYmFzZS9tYXRyaXhfc2xpY2UucnOmBRAAagAAAOMAAAAJAAAAL1VzZXJzL2Rvbm1jY3VyZHkvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbWlra3RzcGFjZS0wLjIuMC9zcmMvZ2VuZXJhdGVkLnJzACAGEABjAAAA2wIAABkAAAAgBhAAYwAAANsCAAAyAAAAIAYQAGMAAAB+AwAACAAAAAoAAAAIAAAABAAAAAsAAAAMAAAADQAAAAgAAAAEAAAADgAAABAAAAAEAAAABAAAABEAAAASAAAAEwAAABAAAAAAAAAAAQAAABQAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlbGlicmFyeS9zdGQvc3JjL3Bhbmlja2luZy5ycwArBxAAHAAAAO0BAAAfAAAAKwcQABwAAADuAQAAHgAAABUAAAAQAAAABAAAABYAAAAXAAAAEAAAAAgAAAAEAAAAGAAAABkAAAAaAAAADAAAAAQAAAAbAAAAEAAAAAgAAAAEAAAAHAAAAGxpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnNjYXBhY2l0eSBvdmVyZmxvdwAAALAHEAAcAAAAHgIAAAUAAAAfAAAAAAAAAAEAAAAgAAAAaW5kZXggb3V0IG9mIGJvdW5kczogdGhlIGxlbiBpcyAgYnV0IHRoZSBpbmRleCBpcyAAAAAIEAAgAAAAIAgQABIAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OWxpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAMCRAAGwAAAFUEAAARAAAADAkQABsAAABfBAAAJAAAAAMAAAAEAAAABAAAAAYAAACD+aIARE5uAPwpFQDRVycA3TT1AGLbwAA8mZUAQZBDAGNR/gC73qsAt2HFADpuJADSTUIASQbgAAnqLgAcktEA6x3+ACmxHADoPqcA9TWCAES7LgCc6YQAtCZwAEF+XwDWkTkAU4M5AJz0OQCLX4QAKPm9APgfOwDe/5cAD5gFABEv7wAKWosAbR9tAM9+NgAJyycARk+3AJ5mPwAt6l8Auid1AOXrxwA9e/EA9zkHAJJSigD7a+oAH7FfAAhdjQAwA1YAe/xGAPCrawAgvM8ANvSaAOOpHQBeYZEACBvmAIWZZQCgFF8AjUBoAIDY/wAnc00ABgYxAMpWFQDJqHMAe+JgAGuMwAAAAABA+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AHsJcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx0xLjQ5LjAgKGUxODg0YThlMyAyMDIwLTEyLTI5KQZ3YWxydXMGMC4xOC4wDHdhc20tYmluZGdlbhIwLjIuNzMgKDNjZWZlMmM4Mik=";let Ue,As=!1;const Dc=fetch(yc).then(a=>a.arrayBuffer()).then(a=>WebAssembly.instantiate(a,{"./mikktspace_module_bg.js":{__wbindgen_string_new:$i,__wbindgen_rethrow:es}})).then(a=>{Ue=a.instance.exports,As=!0}),Sc=Object.freeze(Object.defineProperty({__proto__:null,__wbindgen_rethrow:es,__wbindgen_string_new:$i,generateTangents:wc,get isReady(){return As},ready:Dc,get wasm(){return Ue}},Symbol.toStringTag,{value:"Module"}));exports.BufferGeometryUtils=Ks;exports.DRACOLoader=So;exports.EXRLoader=mr;exports.FBXLoader=Va;exports.Font=Gi;exports.FontLoader=Ar;exports.GLTFExporter=gn;exports.GLTFLoader=ci;exports.GroundedSkybox=ks;exports.HTMLMesh=La;exports.HorizontalBlurShader=Vr;exports.InteractiveGroup=Ua;exports.KTX2Loader=Ze;exports.Line2=ka;exports.LineGeometry=Ji;exports.LineMaterial=ln;exports.MeshoptDecoder=Do;exports.OBJLoader=Ic;exports.OrbitControls=kr;exports.Pass=uc;exports.PositionalAudioHelper=jr;exports.RGBELoader=br;exports.Stats=jA;exports.TextGeometry=er;exports.TransformControls=wr;exports.TransformControlsGizmo=Hi;exports.VertexNormalsHelper=_a;exports.VerticalBlurShader=zr;exports.XRControllerModelFactory=Fa;exports.mergeVertices=ai;exports.mikktspace_module=Sc;exports.nodeFrame=Ri;exports.strToU8=An;exports.zipSync=Qr;
|