@needle-tools/engine 4.17.0-alpha.5 → 4.17.0-alpha.6
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 +1 -0
- package/dist/{gltf-progressive-Ck_bXBr_.umd.cjs → gltf-progressive-BBIL1q1j.umd.cjs} +1 -1
- package/dist/{gltf-progressive-BJ9OrddA.js → gltf-progressive-BbHl9z0v.js} +1 -1
- package/dist/{gltf-progressive-CqZYu6Hx.min.js → gltf-progressive-Clq_N7Zx.min.js} +1 -1
- package/dist/{needle-engine.bundle-xqtPOyfD.umd.cjs → needle-engine.bundle-C1xcWOZy.umd.cjs} +4 -4
- package/dist/{needle-engine.bundle-_8JVJ7-q.js → needle-engine.bundle-Cw8eM4ZI.js} +4 -4
- package/dist/{needle-engine.bundle-DoDSYT05.min.js → needle-engine.bundle-D5FX_w-u.min.js} +2 -2
- package/dist/needle-engine.js +3 -3
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/package.json +2 -2
- package/plugins/vite/asap.js +4 -0
- package/plugins/vite/dependencies.js +1 -1
- /package/dist/{loader.worker-CCrD-Ycm.js → gltf-progressive.worker-CCrD-Ycm.js} +0 -0
|
@@ -4010,7 +4010,7 @@ void main() {
|
|
|
4010
4010
|
|
|
4011
4011
|
}`;class G_{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const n=new Vc(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,n=new vn({vertexShader:O_,fragmentShader:k_,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Et(new br(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class H_ extends Oi{constructor(e,t){super();const n=this;let i=null,r=1,a=null,o="local-floor",c=1,l=null,h=null,u=null,d=null,A=null,g=null;const m=typeof XRWebGLBinding<"u",p=new G_,f={},E=t.getContextAttributes();let I=null,x=null;const v=[],y=[],w=new qe;let R=null;const b=new kt;b.viewport=new ut;const C=new kt;C.viewport=new ut;const B=[b,C],Q=new Ou;let N=null,V=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(X){let J=v[X];return J===void 0&&(J=new Zr,v[X]=J),J.getTargetRaySpace()},this.getControllerGrip=function(X){let J=v[X];return J===void 0&&(J=new Zr,v[X]=J),J.getGripSpace()},this.getHand=function(X){let J=v[X];return J===void 0&&(J=new Zr,v[X]=J),J.getHandSpace()};function W(X){const J=y.indexOf(X.inputSource);if(J===-1)return;const Ae=v[J];Ae!==void 0&&(Ae.update(X.inputSource,X.frame,l||a),Ae.dispatchEvent({type:X.type,data:X.inputSource}))}function k(){i.removeEventListener("select",W),i.removeEventListener("selectstart",W),i.removeEventListener("selectend",W),i.removeEventListener("squeeze",W),i.removeEventListener("squeezestart",W),i.removeEventListener("squeezeend",W),i.removeEventListener("end",k),i.removeEventListener("inputsourceschange",H);for(let X=0;X<v.length;X++){const J=y[X];J!==null&&(y[X]=null,v[X].disconnect(J))}N=null,V=null,p.reset();for(const X in f)delete f[X];e.setRenderTarget(I),A=null,d=null,u=null,i=null,x=null,dt.stop(),n.isPresenting=!1,e.setPixelRatio(R),e.setSize(w.width,w.height,!1),n.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(X){r=X,n.isPresenting===!0&&Se("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(X){o=X,n.isPresenting===!0&&Se("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(X){l=X},this.getBaseLayer=function(){return d!==null?d:A},this.getBinding=function(){return u===null&&m&&(u=new XRWebGLBinding(i,t)),u},this.getFrame=function(){return g},this.getSession=function(){return i},this.setSession=async function(X){if(i=X,i!==null){if(I=e.getRenderTarget(),i.addEventListener("select",W),i.addEventListener("selectstart",W),i.addEventListener("selectend",W),i.addEventListener("squeeze",W),i.addEventListener("squeezestart",W),i.addEventListener("squeezeend",W),i.addEventListener("end",k),i.addEventListener("inputsourceschange",H),E.xrCompatible!==!0&&await t.makeXRCompatible(),R=e.getPixelRatio(),e.getSize(w),m&&"createProjectionLayer"in XRWebGLBinding.prototype){let Ae=null,Pe=null,me=null;E.depth&&(me=E.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,Ae=E.stencil?ai:Ln,Pe=E.stencil?fs:Sn);const Ye={colorFormat:t.RGBA8,depthFormat:me,scaleFactor:r};u=this.getBinding(),d=u.createProjectionLayer(Ye),i.updateRenderState({layers:[d]}),e.setPixelRatio(1),e.setSize(d.textureWidth,d.textureHeight,!1),x=new Cn(d.textureWidth,d.textureHeight,{format:St,type:Re,depthTexture:new Is(d.textureWidth,d.textureHeight,Pe,void 0,void 0,void 0,void 0,void 0,void 0,Ae),stencilBuffer:E.stencil,colorSpace:e.outputColorSpace,samples:E.antialias?4:0,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}else{const Ae={antialias:E.antialias,alpha:!0,depth:E.depth,stencil:E.stencil,framebufferScaleFactor:r};A=new XRWebGLLayer(i,t,Ae),i.updateRenderState({baseLayer:A}),e.setPixelRatio(1),e.setSize(A.framebufferWidth,A.framebufferHeight,!1),x=new Cn(A.framebufferWidth,A.framebufferHeight,{format:St,type:Re,colorSpace:e.outputColorSpace,stencilBuffer:E.stencil,resolveDepthBuffer:A.ignoreDepthValues===!1,resolveStencilBuffer:A.ignoreDepthValues===!1})}x.isXRRenderTarget=!0,this.setFoveation(c),l=null,a=await i.requestReferenceSpace(o),dt.setContext(i),dt.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(i!==null)return i.environmentBlendMode},this.getDepthTexture=function(){return p.getDepthTexture()};function H(X){for(let J=0;J<X.removed.length;J++){const Ae=X.removed[J],Pe=y.indexOf(Ae);Pe>=0&&(y[Pe]=null,v[Pe].disconnect(Ae))}for(let J=0;J<X.added.length;J++){const Ae=X.added[J];let Pe=y.indexOf(Ae);if(Pe===-1){for(let Ye=0;Ye<v.length;Ye++)if(Ye>=y.length){y.push(Ae),Pe=Ye;break}else if(y[Ye]===null){y[Ye]=Ae,Pe=Ye;break}if(Pe===-1)break}const me=v[Pe];me&&me.connect(Ae)}}const Y=new U,se=new U;function ne(X,J,Ae){Y.setFromMatrixPosition(J.matrixWorld),se.setFromMatrixPosition(Ae.matrixWorld);const Pe=Y.distanceTo(se),me=J.projectionMatrix.elements,Ye=Ae.projectionMatrix.elements,wt=me[14]/(me[10]-1),Xe=me[14]/(me[10]+1),et=(me[9]+1)/me[5],at=(me[9]-1)/me[5],Oe=(me[8]-1)/me[0],xt=(Ye[8]+1)/Ye[0],T=wt*Oe,Ct=wt*xt,je=Pe/(-Oe+xt),ct=je*-Oe;if(J.matrixWorld.decompose(X.position,X.quaternion,X.scale),X.translateX(ct),X.translateZ(je),X.matrixWorld.compose(X.position,X.quaternion,X.scale),X.matrixWorldInverse.copy(X.matrixWorld).invert(),me[10]===-1)X.projectionMatrix.copy(J.projectionMatrix),X.projectionMatrixInverse.copy(J.projectionMatrixInverse);else{const Ee=wt+je,M=Xe+je,_=T-ct,L=Ct+(Pe-ct),q=et*Xe/M*Ee,j=at*Xe/M*Ee;X.projectionMatrix.makePerspective(_,L,q,j,Ee,M),X.projectionMatrixInverse.copy(X.projectionMatrix).invert()}}function Z(X,J){J===null?X.matrixWorld.copy(X.matrix):X.matrixWorld.multiplyMatrices(J.matrixWorld,X.matrix),X.matrixWorldInverse.copy(X.matrixWorld).invert()}this.updateCamera=function(X){if(i===null)return;let J=X.near,Ae=X.far;p.texture!==null&&(p.depthNear>0&&(J=p.depthNear),p.depthFar>0&&(Ae=p.depthFar)),Q.near=C.near=b.near=J,Q.far=C.far=b.far=Ae,(N!==Q.near||V!==Q.far)&&(i.updateRenderState({depthNear:Q.near,depthFar:Q.far}),N=Q.near,V=Q.far),Q.layers.mask=X.layers.mask|6,b.layers.mask=Q.layers.mask&3,C.layers.mask=Q.layers.mask&5;const Pe=X.parent,me=Q.cameras;Z(Q,Pe);for(let Ye=0;Ye<me.length;Ye++)Z(me[Ye],Pe);me.length===2?ne(Q,b,C):Q.projectionMatrix.copy(b.projectionMatrix),be(X,Q,Pe)};function be(X,J,Ae){Ae===null?X.matrix.copy(J.matrixWorld):(X.matrix.copy(Ae.matrixWorld),X.matrix.invert(),X.matrix.multiply(J.matrixWorld)),X.matrix.decompose(X.position,X.quaternion,X.scale),X.updateMatrixWorld(!0),X.projectionMatrix.copy(J.projectionMatrix),X.projectionMatrixInverse.copy(J.projectionMatrixInverse),X.isPerspectiveCamera&&(X.fov=xs*2*Math.atan(1/X.projectionMatrix.elements[5]),X.zoom=1)}this.getCamera=function(){return Q},this.getFoveation=function(){if(!(d===null&&A===null))return c},this.setFoveation=function(X){c=X,d!==null&&(d.fixedFoveation=X),A!==null&&A.fixedFoveation!==void 0&&(A.fixedFoveation=X)},this.hasDepthSensing=function(){return p.texture!==null},this.getDepthSensingMesh=function(){return p.getMesh(Q)},this.getCameraTexture=function(X){return f[X]};let ye=null;function st(X,J){if(h=J.getViewerPose(l||a),g=J,h!==null){const Ae=h.views;A!==null&&(e.setRenderTargetFramebuffer(x,A.framebuffer),e.setRenderTarget(x));let Pe=!1;Ae.length!==Q.cameras.length&&(Q.cameras.length=0,Pe=!0);for(let Xe=0;Xe<Ae.length;Xe++){const et=Ae[Xe];let at=null;if(A!==null)at=A.getViewport(et);else{const xt=u.getViewSubImage(d,et);at=xt.viewport,Xe===0&&(e.setRenderTargetTextures(x,xt.colorTexture,xt.depthStencilTexture),e.setRenderTarget(x))}let Oe=B[Xe];Oe===void 0&&(Oe=new kt,Oe.layers.enable(Xe),Oe.viewport=new ut,B[Xe]=Oe),Oe.matrix.fromArray(et.transform.matrix),Oe.matrix.decompose(Oe.position,Oe.quaternion,Oe.scale),Oe.projectionMatrix.fromArray(et.projectionMatrix),Oe.projectionMatrixInverse.copy(Oe.projectionMatrix).invert(),Oe.viewport.set(at.x,at.y,at.width,at.height),Xe===0&&(Q.matrix.copy(Oe.matrix),Q.matrix.decompose(Q.position,Q.quaternion,Q.scale)),Pe===!0&&Q.cameras.push(Oe)}const me=i.enabledFeatures;if(me&&me.includes("depth-sensing")&&i.depthUsage=="gpu-optimized"&&m){u=n.getBinding();const Xe=u.getDepthInformation(Ae[0]);Xe&&Xe.isValid&&Xe.texture&&p.init(Xe,i.renderState)}if(me&&me.includes("camera-access")&&m){e.state.unbindTexture(),u=n.getBinding();for(let Xe=0;Xe<Ae.length;Xe++){const et=Ae[Xe].camera;if(et){let at=f[et];at||(at=new Vc,f[et]=at);const Oe=u.getCameraImage(et);at.sourceTexture=Oe}}}}for(let Ae=0;Ae<v.length;Ae++){const Pe=y[Ae],me=v[Ae];Pe!==null&&me!==void 0&&me.update(Pe,J,l||a)}ye&&ye(X,J),J.detectedPlanes&&n.dispatchEvent({type:"planesdetected",data:J}),g=null}const dt=new Gu;dt.setAnimationLoop(st),this.setAnimationLoop=function(X){ye=X},this.dispose=function(){}}}const xi=new Xn,V_=new Ue;function z_(s,e){function t(p,f){p.matrixAutoUpdate===!0&&p.updateMatrix(),f.value.copy(p.matrix)}function n(p,f){f.color.getRGB(p.fogColor.value,du(s)),f.isFog?(p.fogNear.value=f.near,p.fogFar.value=f.far):f.isFogExp2&&(p.fogDensity.value=f.density)}function i(p,f,E,I,x){f.isMeshBasicMaterial||f.isMeshLambertMaterial?r(p,f):f.isMeshToonMaterial?(r(p,f),u(p,f)):f.isMeshPhongMaterial?(r(p,f),h(p,f)):f.isMeshStandardMaterial?(r(p,f),d(p,f),f.isMeshPhysicalMaterial&&A(p,f,x)):f.isMeshMatcapMaterial?(r(p,f),g(p,f)):f.isMeshDepthMaterial?r(p,f):f.isMeshDistanceMaterial?(r(p,f),m(p,f)):f.isMeshNormalMaterial?r(p,f):f.isLineBasicMaterial?(a(p,f),f.isLineDashedMaterial&&o(p,f)):f.isPointsMaterial?c(p,f,E,I):f.isSpriteMaterial?l(p,f):f.isShadowMaterial?(p.color.value.copy(f.color),p.opacity.value=f.opacity):f.isShaderMaterial&&(f.uniformsNeedUpdate=!1)}function r(p,f){p.opacity.value=f.opacity,f.color&&p.diffuse.value.copy(f.color),f.emissive&&p.emissive.value.copy(f.emissive).multiplyScalar(f.emissiveIntensity),f.map&&(p.map.value=f.map,t(f.map,p.mapTransform)),f.alphaMap&&(p.alphaMap.value=f.alphaMap,t(f.alphaMap,p.alphaMapTransform)),f.bumpMap&&(p.bumpMap.value=f.bumpMap,t(f.bumpMap,p.bumpMapTransform),p.bumpScale.value=f.bumpScale,f.side===Gt&&(p.bumpScale.value*=-1)),f.normalMap&&(p.normalMap.value=f.normalMap,t(f.normalMap,p.normalMapTransform),p.normalScale.value.copy(f.normalScale),f.side===Gt&&p.normalScale.value.negate()),f.displacementMap&&(p.displacementMap.value=f.displacementMap,t(f.displacementMap,p.displacementMapTransform),p.displacementScale.value=f.displacementScale,p.displacementBias.value=f.displacementBias),f.emissiveMap&&(p.emissiveMap.value=f.emissiveMap,t(f.emissiveMap,p.emissiveMapTransform)),f.specularMap&&(p.specularMap.value=f.specularMap,t(f.specularMap,p.specularMapTransform)),f.alphaTest>0&&(p.alphaTest.value=f.alphaTest);const E=e.get(f),I=E.envMap,x=E.envMapRotation;I&&(p.envMap.value=I,xi.copy(x),xi.x*=-1,xi.y*=-1,xi.z*=-1,I.isCubeTexture&&I.isRenderTargetTexture===!1&&(xi.y*=-1,xi.z*=-1),p.envMapRotation.value.setFromMatrix4(V_.makeRotationFromEuler(xi)),p.flipEnvMap.value=I.isCubeTexture&&I.isRenderTargetTexture===!1?-1:1,p.reflectivity.value=f.reflectivity,p.ior.value=f.ior,p.refractionRatio.value=f.refractionRatio),f.lightMap&&(p.lightMap.value=f.lightMap,p.lightMapIntensity.value=f.lightMapIntensity,t(f.lightMap,p.lightMapTransform)),f.aoMap&&(p.aoMap.value=f.aoMap,p.aoMapIntensity.value=f.aoMapIntensity,t(f.aoMap,p.aoMapTransform))}function a(p,f){p.diffuse.value.copy(f.color),p.opacity.value=f.opacity,f.map&&(p.map.value=f.map,t(f.map,p.mapTransform))}function o(p,f){p.dashSize.value=f.dashSize,p.totalSize.value=f.dashSize+f.gapSize,p.scale.value=f.scale}function c(p,f,E,I){p.diffuse.value.copy(f.color),p.opacity.value=f.opacity,p.size.value=f.size*E,p.scale.value=I*.5,f.map&&(p.map.value=f.map,t(f.map,p.uvTransform)),f.alphaMap&&(p.alphaMap.value=f.alphaMap,t(f.alphaMap,p.alphaMapTransform)),f.alphaTest>0&&(p.alphaTest.value=f.alphaTest)}function l(p,f){p.diffuse.value.copy(f.color),p.opacity.value=f.opacity,p.rotation.value=f.rotation,f.map&&(p.map.value=f.map,t(f.map,p.mapTransform)),f.alphaMap&&(p.alphaMap.value=f.alphaMap,t(f.alphaMap,p.alphaMapTransform)),f.alphaTest>0&&(p.alphaTest.value=f.alphaTest)}function h(p,f){p.specular.value.copy(f.specular),p.shininess.value=Math.max(f.shininess,1e-4)}function u(p,f){f.gradientMap&&(p.gradientMap.value=f.gradientMap)}function d(p,f){p.metalness.value=f.metalness,f.metalnessMap&&(p.metalnessMap.value=f.metalnessMap,t(f.metalnessMap,p.metalnessMapTransform)),p.roughness.value=f.roughness,f.roughnessMap&&(p.roughnessMap.value=f.roughnessMap,t(f.roughnessMap,p.roughnessMapTransform)),f.envMap&&(p.envMapIntensity.value=f.envMapIntensity)}function A(p,f,E){p.ior.value=f.ior,f.sheen>0&&(p.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),p.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(p.sheenColorMap.value=f.sheenColorMap,t(f.sheenColorMap,p.sheenColorMapTransform)),f.sheenRoughnessMap&&(p.sheenRoughnessMap.value=f.sheenRoughnessMap,t(f.sheenRoughnessMap,p.sheenRoughnessMapTransform))),f.clearcoat>0&&(p.clearcoat.value=f.clearcoat,p.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(p.clearcoatMap.value=f.clearcoatMap,t(f.clearcoatMap,p.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(p.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,t(f.clearcoatRoughnessMap,p.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(p.clearcoatNormalMap.value=f.clearcoatNormalMap,t(f.clearcoatNormalMap,p.clearcoatNormalMapTransform),p.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===Gt&&p.clearcoatNormalScale.value.negate())),f.dispersion>0&&(p.dispersion.value=f.dispersion),f.iridescence>0&&(p.iridescence.value=f.iridescence,p.iridescenceIOR.value=f.iridescenceIOR,p.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],p.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(p.iridescenceMap.value=f.iridescenceMap,t(f.iridescenceMap,p.iridescenceMapTransform)),f.iridescenceThicknessMap&&(p.iridescenceThicknessMap.value=f.iridescenceThicknessMap,t(f.iridescenceThicknessMap,p.iridescenceThicknessMapTransform))),f.transmission>0&&(p.transmission.value=f.transmission,p.transmissionSamplerMap.value=E.texture,p.transmissionSamplerSize.value.set(E.width,E.height),f.transmissionMap&&(p.transmissionMap.value=f.transmissionMap,t(f.transmissionMap,p.transmissionMapTransform)),p.thickness.value=f.thickness,f.thicknessMap&&(p.thicknessMap.value=f.thicknessMap,t(f.thicknessMap,p.thicknessMapTransform)),p.attenuationDistance.value=f.attenuationDistance,p.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(p.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(p.anisotropyMap.value=f.anisotropyMap,t(f.anisotropyMap,p.anisotropyMapTransform))),p.specularIntensity.value=f.specularIntensity,p.specularColor.value.copy(f.specularColor),f.specularColorMap&&(p.specularColorMap.value=f.specularColorMap,t(f.specularColorMap,p.specularColorMapTransform)),f.specularIntensityMap&&(p.specularIntensityMap.value=f.specularIntensityMap,t(f.specularIntensityMap,p.specularIntensityMapTransform))}function g(p,f){f.matcap&&(p.matcap.value=f.matcap)}function m(p,f){const E=e.get(f).light;p.referencePosition.value.setFromMatrixPosition(E.matrixWorld),p.nearDistance.value=E.shadow.camera.near,p.farDistance.value=E.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:i}}function W_(s,e,t,n){let i={},r={},a=[];const o=s.getParameter(s.MAX_UNIFORM_BUFFER_BINDINGS);function c(E,I){const x=I.program;n.uniformBlockBinding(E,x)}function l(E,I){let x=i[E.id];x===void 0&&(g(E),x=h(E),i[E.id]=x,E.addEventListener("dispose",p));const v=I.program;n.updateUBOMapping(E,v);const y=e.render.frame;r[E.id]!==y&&(d(E),r[E.id]=y)}function h(E){const I=u();E.__bindingPointIndex=I;const x=s.createBuffer(),v=E.__size,y=E.usage;return s.bindBuffer(s.UNIFORM_BUFFER,x),s.bufferData(s.UNIFORM_BUFFER,v,y),s.bindBuffer(s.UNIFORM_BUFFER,null),s.bindBufferBase(s.UNIFORM_BUFFER,I,x),x}function u(){for(let E=0;E<o;E++)if(a.indexOf(E)===-1)return a.push(E),E;return we("WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function d(E){const I=i[E.id],x=E.uniforms,v=E.__cache;s.bindBuffer(s.UNIFORM_BUFFER,I);for(let y=0,w=x.length;y<w;y++){const R=Array.isArray(x[y])?x[y]:[x[y]];for(let b=0,C=R.length;b<C;b++){const B=R[b];if(A(B,y,b,v)===!0){const Q=B.__offset,N=Array.isArray(B.value)?B.value:[B.value];let V=0;for(let W=0;W<N.length;W++){const k=N[W],H=m(k);typeof k=="number"||typeof k=="boolean"?(B.__data[0]=k,s.bufferSubData(s.UNIFORM_BUFFER,Q+V,B.__data)):k.isMatrix3?(B.__data[0]=k.elements[0],B.__data[1]=k.elements[1],B.__data[2]=k.elements[2],B.__data[3]=0,B.__data[4]=k.elements[3],B.__data[5]=k.elements[4],B.__data[6]=k.elements[5],B.__data[7]=0,B.__data[8]=k.elements[6],B.__data[9]=k.elements[7],B.__data[10]=k.elements[8],B.__data[11]=0):(k.toArray(B.__data,V),V+=H.storage/Float32Array.BYTES_PER_ELEMENT)}s.bufferSubData(s.UNIFORM_BUFFER,Q,B.__data)}}}s.bindBuffer(s.UNIFORM_BUFFER,null)}function A(E,I,x,v){const y=E.value,w=I+"_"+x;if(v[w]===void 0)return typeof y=="number"||typeof y=="boolean"?v[w]=y:v[w]=y.clone(),!0;{const R=v[w];if(typeof y=="number"||typeof y=="boolean"){if(R!==y)return v[w]=y,!0}else if(R.equals(y)===!1)return R.copy(y),!0}return!1}function g(E){const I=E.uniforms;let x=0;const v=16;for(let w=0,R=I.length;w<R;w++){const b=Array.isArray(I[w])?I[w]:[I[w]];for(let C=0,B=b.length;C<B;C++){const Q=b[C],N=Array.isArray(Q.value)?Q.value:[Q.value];for(let V=0,W=N.length;V<W;V++){const k=N[V],H=m(k),Y=x%v,se=Y%H.boundary,ne=Y+se;x+=se,ne!==0&&v-ne<H.storage&&(x+=v-ne),Q.__data=new Float32Array(H.storage/Float32Array.BYTES_PER_ELEMENT),Q.__offset=x,x+=H.storage}}}const y=x%v;return y>0&&(x+=v-y),E.__size=x,E.__cache={},this}function m(E){const I={boundary:0,storage:0};return typeof E=="number"||typeof E=="boolean"?(I.boundary=4,I.storage=4):E.isVector2?(I.boundary=8,I.storage=8):E.isVector3||E.isColor?(I.boundary=16,I.storage=12):E.isVector4?(I.boundary=16,I.storage=16):E.isMatrix3?(I.boundary=48,I.storage=48):E.isMatrix4?(I.boundary=64,I.storage=64):E.isTexture?Se("WebGLRenderer: Texture samplers can not be part of an uniforms group."):Se("WebGLRenderer: Unsupported uniform value type.",E),I}function p(E){const I=E.target;I.removeEventListener("dispose",p);const x=a.indexOf(I.__bindingPointIndex);a.splice(x,1),s.deleteBuffer(i[I.id]),delete i[I.id],delete r[I.id]}function f(){for(const E in i)s.deleteBuffer(i[E]);a=[],i={},r={}}return{bind:c,update:l,dispose:f}}const q_=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let wn=null;function X_(){return wn===null&&(wn=new _r(q_,16,16,an,Dt),wn.name="DFG_LUT",wn.minFilter=ft,wn.magFilter=ft,wn.wrapS=sn,wn.wrapT=sn,wn.generateMipmaps=!1,wn.needsUpdate=!0),wn}class Y_{constructor(e={}){const{canvas:t=ou(),context:n=null,depth:i=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:c=!0,preserveDrawingBuffer:l=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1,outputBufferType:A=Re}=e;this.isWebGLRenderer=!0;let g;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");g=n.getContextAttributes().alpha}else g=a;const m=A,p=new Set([Qa,Na,Pa]),f=new Set([Re,Sn,ds,fs,Fa,Ua]),E=new Uint32Array(4),I=new Int32Array(4);let x=null,v=null;const y=[],w=[];let R=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=En,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const b=this;let C=!1;this._outputColorSpace=At;let B=0,Q=0,N=null,V=-1,W=null;const k=new ut,H=new ut;let Y=null;const se=new De(0);let ne=0,Z=t.width,be=t.height,ye=1,st=null,dt=null;const X=new ut(0,0,Z,be),J=new ut(0,0,Z,be);let Ae=!1;const Pe=new za;let me=!1,Ye=!1;const wt=new Ue,Xe=new U,et=new ut,at={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let Oe=!1;function xt(){return N===null?ye:1}let T=n;function Ct(S,F){return t.getContext(S,F)}try{const S={alpha:!0,depth:i,stencil:r,antialias:o,premultipliedAlpha:c,preserveDrawingBuffer:l,powerPreference:h,failIfMajorPerformanceCaveat:u};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${Ra}`),t.addEventListener("webglcontextlost",Le,!1),t.addEventListener("webglcontextrestored",lt,!1),t.addEventListener("webglcontextcreationerror",tt,!1),T===null){const F="webgl2";if(T=Ct(F,S),T===null)throw Ct(F)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(S){throw we("WebGLRenderer: "+S.message),S}let je,ct,Ee,M,_,L,q,j,z,Ce,re,_e,Te,ee,oe,ge,xe,ae,ke,D,ue,te,de,$;function K(){je=new Yg(T),je.init(),te=new qu(T,je),ct=new Og(T,je,e,te),Ee=new N_(T,je),ct.reversedDepthBuffer&&d&&Ee.buffers.depth.setReversed(!0),M=new Jg(T),_=new C_,L=new Q_(T,je,Ee,_,ct,te,M),q=new Gg(b),j=new Xg(b),z=new tA(T),de=new Ng(T,z),Ce=new Kg(T,z,M,de),re=new $g(T,Ce,z,M),ke=new Zg(T,ct,L),ge=new kg(_),_e=new x_(b,q,j,je,ct,de,ge),Te=new z_(b,_),ee=new S_,oe=new T_(je),ae=new Pg(b,q,j,Ee,re,g,c),xe=new U_(b,re,ct),$=new W_(T,M,ct,Ee),D=new Qg(T,je,M),ue=new jg(T,je,M),M.programs=_e.programs,b.capabilities=ct,b.extensions=je,b.properties=_,b.renderLists=ee,b.shadowMap=xe,b.state=Ee,b.info=M}K(),m!==Re&&(R=new tm(m,t.width,t.height,i,r));const ie=new H_(b,T);this.xr=ie,this.getContext=function(){return T},this.getContextAttributes=function(){return T.getContextAttributes()},this.forceContextLoss=function(){const S=je.get("WEBGL_lose_context");S&&S.loseContext()},this.forceContextRestore=function(){const S=je.get("WEBGL_lose_context");S&&S.restoreContext()},this.getPixelRatio=function(){return ye},this.setPixelRatio=function(S){S!==void 0&&(ye=S,this.setSize(Z,be,!1))},this.getSize=function(S){return S.set(Z,be)},this.setSize=function(S,F,G=!0){if(ie.isPresenting){Se("WebGLRenderer: Can't change size while VR device is presenting.");return}Z=S,be=F,t.width=Math.floor(S*ye),t.height=Math.floor(F*ye),G===!0&&(t.style.width=S+"px",t.style.height=F+"px"),R!==null&&R.setSize(t.width,t.height),this.setViewport(0,0,S,F)},this.getDrawingBufferSize=function(S){return S.set(Z*ye,be*ye).floor()},this.setDrawingBufferSize=function(S,F,G){Z=S,be=F,ye=G,t.width=Math.floor(S*G),t.height=Math.floor(F*G),this.setViewport(0,0,S,F)},this.setEffects=function(S){if(m===Re){console.error("THREE.WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.");return}if(S){for(let F=0;F<S.length;F++)if(S[F].isOutputPass===!0){console.warn("THREE.WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.");break}}R.setEffects(S||[])},this.getCurrentViewport=function(S){return S.copy(k)},this.getViewport=function(S){return S.copy(X)},this.setViewport=function(S,F,G,O){S.isVector4?X.set(S.x,S.y,S.z,S.w):X.set(S,F,G,O),Ee.viewport(k.copy(X).multiplyScalar(ye).round())},this.getScissor=function(S){return S.copy(J)},this.setScissor=function(S,F,G,O){S.isVector4?J.set(S.x,S.y,S.z,S.w):J.set(S,F,G,O),Ee.scissor(H.copy(J).multiplyScalar(ye).round())},this.getScissorTest=function(){return Ae},this.setScissorTest=function(S){Ee.setScissorTest(Ae=S)},this.setOpaqueSort=function(S){st=S},this.setTransparentSort=function(S){dt=S},this.getClearColor=function(S){return S.copy(ae.getClearColor())},this.setClearColor=function(){ae.setClearColor(...arguments)},this.getClearAlpha=function(){return ae.getClearAlpha()},this.setClearAlpha=function(){ae.setClearAlpha(...arguments)},this.clear=function(S=!0,F=!0,G=!0){let O=0;if(S){let P=!1;if(N!==null){const ce=N.texture.format;P=p.has(ce)}if(P){const ce=N.texture.type,fe=f.has(ce),he=ae.getClearColor(),pe=ae.getClearAlpha(),Ie=he.r,Be=he.g,ve=he.b;fe?(E[0]=Ie,E[1]=Be,E[2]=ve,E[3]=pe,T.clearBufferuiv(T.COLOR,0,E)):(I[0]=Ie,I[1]=Be,I[2]=ve,I[3]=pe,T.clearBufferiv(T.COLOR,0,I))}else O|=T.COLOR_BUFFER_BIT}F&&(O|=T.DEPTH_BUFFER_BIT),G&&(O|=T.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),T.clear(O)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",Le,!1),t.removeEventListener("webglcontextrestored",lt,!1),t.removeEventListener("webglcontextcreationerror",tt,!1),ae.dispose(),ee.dispose(),oe.dispose(),_.dispose(),q.dispose(),j.dispose(),re.dispose(),de.dispose(),$.dispose(),_e.dispose(),ie.dispose(),ie.removeEventListener("sessionstart",nl),ie.removeEventListener("sessionend",il),Ai.stop()};function Le(S){S.preventDefault(),dr("WebGLRenderer: Context Lost."),C=!0}function lt(){dr("WebGLRenderer: Context Restored."),C=!1;const S=M.autoReset,F=xe.enabled,G=xe.autoUpdate,O=xe.needsUpdate,P=xe.type;K(),M.autoReset=S,xe.enabled=F,xe.autoUpdate=G,xe.needsUpdate=O,xe.type=P}function tt(S){we("WebGLRenderer: A WebGL context could not be created. Reason: ",S.statusMessage)}function yn(S){const F=S.target;F.removeEventListener("dispose",yn),Fn(F)}function Fn(S){kd(S),_.remove(S)}function kd(S){const F=_.get(S).programs;F!==void 0&&(F.forEach(function(G){_e.releaseProgram(G)}),S.isShaderMaterial&&_e.releaseShaderCache(S))}this.renderBufferDirect=function(S,F,G,O,P,ce){F===null&&(F=at);const fe=P.isMesh&&P.matrixWorld.determinant()<0,he=Hd(S,F,G,O,P);Ee.setMaterial(O,fe);let pe=G.index,Ie=1;if(O.wireframe===!0){if(pe=Ce.getWireframeAttribute(G),pe===void 0)return;Ie=2}const Be=G.drawRange,ve=G.attributes.position;let Ge=Be.start*Ie,rt=(Be.start+Be.count)*Ie;ce!==null&&(Ge=Math.max(Ge,ce.start*Ie),rt=Math.min(rt,(ce.start+ce.count)*Ie)),pe!==null?(Ge=Math.max(Ge,0),rt=Math.min(rt,pe.count)):ve!=null&&(Ge=Math.max(Ge,0),rt=Math.min(rt,ve.count));const gt=rt-Ge;if(gt<0||gt===1/0)return;de.setup(P,O,he,G,pe);let mt,ot=D;if(pe!==null&&(mt=z.get(pe),ot=ue,ot.setIndex(mt)),P.isMesh)O.wireframe===!0?(Ee.setLineWidth(O.wireframeLinewidth*xt()),ot.setMode(T.LINES)):ot.setMode(T.TRIANGLES);else if(P.isLine){let Me=O.linewidth;Me===void 0&&(Me=1),Ee.setLineWidth(Me*xt()),P.isLineSegments?ot.setMode(T.LINES):P.isLineLoop?ot.setMode(T.LINE_LOOP):ot.setMode(T.LINE_STRIP)}else P.isPoints?ot.setMode(T.POINTS):P.isSprite&&ot.setMode(T.TRIANGLES);if(P.isBatchedMesh)if(P._multiDrawInstances!==null)Es("WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),ot.renderMultiDrawInstances(P._multiDrawStarts,P._multiDrawCounts,P._multiDrawCount,P._multiDrawInstances);else if(je.get("WEBGL_multi_draw"))ot.renderMultiDraw(P._multiDrawStarts,P._multiDrawCounts,P._multiDrawCount);else{const Me=P._multiDrawStarts,nt=P._multiDrawCounts,Ke=P._multiDrawCount,Wt=pe?z.get(pe).bytesPerElement:1,Hi=_.get(O).currentProgram.getUniforms();for(let qt=0;qt<Ke;qt++)Hi.setValue(T,"_gl_DrawID",qt),ot.render(Me[qt]/Wt,nt[qt])}else if(P.isInstancedMesh)ot.renderInstances(Ge,gt,P.count);else if(G.isInstancedBufferGeometry){const Me=G._maxInstanceCount!==void 0?G._maxInstanceCount:1/0,nt=Math.min(G.instanceCount,Me);ot.renderInstances(Ge,gt,nt)}else ot.render(Ge,gt)};function tl(S,F,G){S.transparent===!0&&S.side===An&&S.forceSinglePass===!1?(S.side=Gt,S.needsUpdate=!0,Ir(S,F,G),S.side=Dn,S.needsUpdate=!0,Ir(S,F,G),S.side=An):Ir(S,F,G)}this.compile=function(S,F,G=null){G===null&&(G=S),v=oe.get(G),v.init(F),w.push(v),G.traverseVisible(function(P){P.isLight&&P.layers.test(F.layers)&&(v.pushLight(P),P.castShadow&&v.pushShadow(P))}),S!==G&&S.traverseVisible(function(P){P.isLight&&P.layers.test(F.layers)&&(v.pushLight(P),P.castShadow&&v.pushShadow(P))}),v.setupLights();const O=new Set;return S.traverse(function(P){if(!(P.isMesh||P.isPoints||P.isLine||P.isSprite))return;const ce=P.material;if(ce)if(Array.isArray(ce))for(let fe=0;fe<ce.length;fe++){const he=ce[fe];tl(he,G,P),O.add(he)}else tl(ce,G,P),O.add(ce)}),v=w.pop(),O},this.compileAsync=function(S,F,G=null){const O=this.compile(S,F,G);return new Promise(P=>{function ce(){if(O.forEach(function(fe){_.get(fe).currentProgram.isReady()&&O.delete(fe)}),O.size===0){P(S);return}setTimeout(ce,10)}je.get("KHR_parallel_shader_compile")!==null?ce():setTimeout(ce,10)})};let ja=null;function Gd(S){ja&&ja(S)}function nl(){Ai.stop()}function il(){Ai.start()}const Ai=new Gu;Ai.setAnimationLoop(Gd),typeof self<"u"&&Ai.setContext(self),this.setAnimationLoop=function(S){ja=S,ie.setAnimationLoop(S),S===null?Ai.stop():Ai.start()},ie.addEventListener("sessionstart",nl),ie.addEventListener("sessionend",il),this.render=function(S,F){if(F!==void 0&&F.isCamera!==!0){we("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(C===!0)return;const G=ie.enabled===!0&&ie.isPresenting===!0,O=R!==null&&(N===null||G)&&R.begin(b,N);if(S.matrixWorldAutoUpdate===!0&&S.updateMatrixWorld(),F.parent===null&&F.matrixWorldAutoUpdate===!0&&F.updateMatrixWorld(),ie.enabled===!0&&ie.isPresenting===!0&&(R===null||R.isCompositing()===!1)&&(ie.cameraAutoUpdate===!0&&ie.updateCamera(F),F=ie.getCamera()),S.isScene===!0&&S.onBeforeRender(b,S,F,N),v=oe.get(S,w.length),v.init(F),w.push(v),wt.multiplyMatrices(F.projectionMatrix,F.matrixWorldInverse),Pe.setFromProjectionMatrix(wt,mn,F.reversedDepth),Ye=this.localClippingEnabled,me=ge.init(this.clippingPlanes,Ye),x=ee.get(S,y.length),x.init(),y.push(x),ie.enabled===!0&&ie.isPresenting===!0){const fe=b.xr.getDepthSensingMesh();fe!==null&&Ja(fe,F,-1/0,b.sortObjects)}Ja(S,F,0,b.sortObjects),x.finish(),b.sortObjects===!0&&x.sort(st,dt),Oe=ie.enabled===!1||ie.isPresenting===!1||ie.hasDepthSensing()===!1,Oe&&ae.addToRenderList(x,S),this.info.render.frame++,me===!0&&ge.beginShadows();const P=v.state.shadowsArray;if(xe.render(P,S,F),me===!0&&ge.endShadows(),this.info.autoReset===!0&&this.info.reset(),(O&&R.hasRenderPass())===!1){const fe=x.opaque,he=x.transmissive;if(v.setupLights(),F.isArrayCamera){const pe=F.cameras;if(he.length>0)for(let Ie=0,Be=pe.length;Ie<Be;Ie++){const ve=pe[Ie];rl(fe,he,S,ve)}Oe&&ae.render(S);for(let Ie=0,Be=pe.length;Ie<Be;Ie++){const ve=pe[Ie];sl(x,S,ve,ve.viewport)}}else he.length>0&&rl(fe,he,S,F),Oe&&ae.render(S),sl(x,S,F)}N!==null&&Q===0&&(L.updateMultisampleRenderTarget(N),L.updateRenderTargetMipmap(N)),O&&R.end(b),S.isScene===!0&&S.onAfterRender(b,S,F),de.resetDefaultState(),V=-1,W=null,w.pop(),w.length>0?(v=w[w.length-1],me===!0&&ge.setGlobalState(b.clippingPlanes,v.state.camera)):v=null,y.pop(),y.length>0?x=y[y.length-1]:x=null};function Ja(S,F,G,O){if(S.visible===!1)return;if(S.layers.test(F.layers)){if(S.isGroup)G=S.renderOrder;else if(S.isLOD)S.autoUpdate===!0&&S.update(F);else if(S.isLight)v.pushLight(S),S.castShadow&&v.pushShadow(S);else if(S.isSprite){if(!S.frustumCulled||Pe.intersectsSprite(S)){O&&et.setFromMatrixPosition(S.matrixWorld).applyMatrix4(wt);const fe=re.update(S),he=S.material;he.visible&&x.push(S,fe,he,G,et.z,null)}}else if((S.isMesh||S.isLine||S.isPoints)&&(!S.frustumCulled||Pe.intersectsObject(S))){const fe=re.update(S),he=S.material;if(O&&(S.boundingSphere!==void 0?(S.boundingSphere===null&&S.computeBoundingSphere(),et.copy(S.boundingSphere.center)):(fe.boundingSphere===null&&fe.computeBoundingSphere(),et.copy(fe.boundingSphere.center)),et.applyMatrix4(S.matrixWorld).applyMatrix4(wt)),Array.isArray(he)){const pe=fe.groups;for(let Ie=0,Be=pe.length;Ie<Be;Ie++){const ve=pe[Ie],Ge=he[ve.materialIndex];Ge&&Ge.visible&&x.push(S,fe,Ge,G,et.z,ve)}}else he.visible&&x.push(S,fe,he,G,et.z,null)}}const ce=S.children;for(let fe=0,he=ce.length;fe<he;fe++)Ja(ce[fe],F,G,O)}function sl(S,F,G,O){const{opaque:P,transmissive:ce,transparent:fe}=S;v.setupLightsView(G),me===!0&&ge.setGlobalState(b.clippingPlanes,G),O&&Ee.viewport(k.copy(O)),P.length>0&&Cr(P,F,G),ce.length>0&&Cr(ce,F,G),fe.length>0&&Cr(fe,F,G),Ee.buffers.depth.setTest(!0),Ee.buffers.depth.setMask(!0),Ee.buffers.color.setMask(!0),Ee.setPolygonOffset(!1)}function rl(S,F,G,O){if((G.isScene===!0?G.overrideMaterial:null)!==null)return;if(v.state.transmissionRenderTarget[O.id]===void 0){const Ge=je.has("EXT_color_buffer_half_float")||je.has("EXT_color_buffer_float");v.state.transmissionRenderTarget[O.id]=new Cn(1,1,{generateMipmaps:!0,type:Ge?Dt:Re,minFilter:rn,samples:ct.samples,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:He.workingColorSpace})}const ce=v.state.transmissionRenderTarget[O.id],fe=O.viewport||k;ce.setSize(fe.z*b.transmissionResolutionScale,fe.w*b.transmissionResolutionScale);const he=b.getRenderTarget(),pe=b.getActiveCubeFace(),Ie=b.getActiveMipmapLevel();b.setRenderTarget(ce),b.getClearColor(se),ne=b.getClearAlpha(),ne<1&&b.setClearColor(16777215,.5),b.clear(),Oe&&ae.render(G);const Be=b.toneMapping;b.toneMapping=En;const ve=O.viewport;if(O.viewport!==void 0&&(O.viewport=void 0),v.setupLightsView(O),me===!0&&ge.setGlobalState(b.clippingPlanes,O),Cr(S,G,O),L.updateMultisampleRenderTarget(ce),L.updateRenderTargetMipmap(ce),je.has("WEBGL_multisampled_render_to_texture")===!1){let Ge=!1;for(let rt=0,gt=F.length;rt<gt;rt++){const mt=F[rt],{object:ot,geometry:Me,material:nt,group:Ke}=mt;if(nt.side===An&&ot.layers.test(O.layers)){const Wt=nt.side;nt.side=Gt,nt.needsUpdate=!0,al(ot,G,O,Me,nt,Ke),nt.side=Wt,nt.needsUpdate=!0,Ge=!0}}Ge===!0&&(L.updateMultisampleRenderTarget(ce),L.updateRenderTargetMipmap(ce))}b.setRenderTarget(he,pe,Ie),b.setClearColor(se,ne),ve!==void 0&&(O.viewport=ve),b.toneMapping=Be}function Cr(S,F,G){const O=F.isScene===!0?F.overrideMaterial:null;for(let P=0,ce=S.length;P<ce;P++){const fe=S[P],{object:he,geometry:pe,group:Ie}=fe;let Be=fe.material;Be.allowOverride===!0&&O!==null&&(Be=O),he.layers.test(G.layers)&&al(he,F,G,pe,Be,Ie)}}function al(S,F,G,O,P,ce){S.onBeforeRender(b,F,G,O,P,ce),S.modelViewMatrix.multiplyMatrices(G.matrixWorldInverse,S.matrixWorld),S.normalMatrix.getNormalMatrix(S.modelViewMatrix),P.onBeforeRender(b,F,G,O,S,ce),P.transparent===!0&&P.side===An&&P.forceSinglePass===!1?(P.side=Gt,P.needsUpdate=!0,b.renderBufferDirect(G,F,O,P,S,ce),P.side=Dn,P.needsUpdate=!0,b.renderBufferDirect(G,F,O,P,S,ce),P.side=An):b.renderBufferDirect(G,F,O,P,S,ce),S.onAfterRender(b,F,G,O,P,ce)}function Ir(S,F,G){F.isScene!==!0&&(F=at);const O=_.get(S),P=v.state.lights,ce=v.state.shadowsArray,fe=P.state.version,he=_e.getParameters(S,P.state,ce,F,G),pe=_e.getProgramCacheKey(he);let Ie=O.programs;O.environment=S.isMeshStandardMaterial?F.environment:null,O.fog=F.fog,O.envMap=(S.isMeshStandardMaterial?j:q).get(S.envMap||O.environment),O.envMapRotation=O.environment!==null&&S.envMap===null?F.environmentRotation:S.envMapRotation,Ie===void 0&&(S.addEventListener("dispose",yn),Ie=new Map,O.programs=Ie);let Be=Ie.get(pe);if(Be!==void 0){if(O.currentProgram===Be&&O.lightsStateVersion===fe)return cl(S,he),Be}else he.uniforms=_e.getUniforms(S),S.onBeforeCompile(he,b),Be=_e.acquireProgram(he,pe),Ie.set(pe,Be),O.uniforms=he.uniforms;const ve=O.uniforms;return(!S.isShaderMaterial&&!S.isRawShaderMaterial||S.clipping===!0)&&(ve.clippingPlanes=ge.uniform),cl(S,he),O.needsLights=zd(S),O.lightsStateVersion=fe,O.needsLights&&(ve.ambientLightColor.value=P.state.ambient,ve.lightProbe.value=P.state.probe,ve.directionalLights.value=P.state.directional,ve.directionalLightShadows.value=P.state.directionalShadow,ve.spotLights.value=P.state.spot,ve.spotLightShadows.value=P.state.spotShadow,ve.rectAreaLights.value=P.state.rectArea,ve.ltc_1.value=P.state.rectAreaLTC1,ve.ltc_2.value=P.state.rectAreaLTC2,ve.pointLights.value=P.state.point,ve.pointLightShadows.value=P.state.pointShadow,ve.hemisphereLights.value=P.state.hemi,ve.directionalShadowMap.value=P.state.directionalShadowMap,ve.directionalShadowMatrix.value=P.state.directionalShadowMatrix,ve.spotShadowMap.value=P.state.spotShadowMap,ve.spotLightMatrix.value=P.state.spotLightMatrix,ve.spotLightMap.value=P.state.spotLightMap,ve.pointShadowMap.value=P.state.pointShadowMap,ve.pointShadowMatrix.value=P.state.pointShadowMatrix),O.currentProgram=Be,O.uniformsList=null,Be}function ol(S){if(S.uniformsList===null){const F=S.currentProgram.getUniforms();S.uniformsList=$r.seqWithValue(F.seq,S.uniforms)}return S.uniformsList}function cl(S,F){const G=_.get(S);G.outputColorSpace=F.outputColorSpace,G.batching=F.batching,G.batchingColor=F.batchingColor,G.instancing=F.instancing,G.instancingColor=F.instancingColor,G.instancingMorph=F.instancingMorph,G.skinning=F.skinning,G.morphTargets=F.morphTargets,G.morphNormals=F.morphNormals,G.morphColors=F.morphColors,G.morphTargetsCount=F.morphTargetsCount,G.numClippingPlanes=F.numClippingPlanes,G.numIntersection=F.numClipIntersection,G.vertexAlphas=F.vertexAlphas,G.vertexTangents=F.vertexTangents,G.toneMapping=F.toneMapping}function Hd(S,F,G,O,P){F.isScene!==!0&&(F=at),L.resetTextureUnits();const ce=F.fog,fe=O.isMeshStandardMaterial?F.environment:null,he=N===null?b.outputColorSpace:N.isXRRenderTarget===!0?N.texture.colorSpace:Rt,pe=(O.isMeshStandardMaterial?j:q).get(O.envMap||fe),Ie=O.vertexColors===!0&&!!G.attributes.color&&G.attributes.color.itemSize===4,Be=!!G.attributes.tangent&&(!!O.normalMap||O.anisotropy>0),ve=!!G.morphAttributes.position,Ge=!!G.morphAttributes.normal,rt=!!G.morphAttributes.color;let gt=En;O.toneMapped&&(N===null||N.isXRRenderTarget===!0)&&(gt=b.toneMapping);const mt=G.morphAttributes.position||G.morphAttributes.normal||G.morphAttributes.color,ot=mt!==void 0?mt.length:0,Me=_.get(O),nt=v.state.lights;if(me===!0&&(Ye===!0||S!==W)){const Pt=S===W&&O.id===V;ge.setState(O,S,Pt)}let Ke=!1;O.version===Me.__version?(Me.needsLights&&Me.lightsStateVersion!==nt.state.version||Me.outputColorSpace!==he||P.isBatchedMesh&&Me.batching===!1||!P.isBatchedMesh&&Me.batching===!0||P.isBatchedMesh&&Me.batchingColor===!0&&P.colorTexture===null||P.isBatchedMesh&&Me.batchingColor===!1&&P.colorTexture!==null||P.isInstancedMesh&&Me.instancing===!1||!P.isInstancedMesh&&Me.instancing===!0||P.isSkinnedMesh&&Me.skinning===!1||!P.isSkinnedMesh&&Me.skinning===!0||P.isInstancedMesh&&Me.instancingColor===!0&&P.instanceColor===null||P.isInstancedMesh&&Me.instancingColor===!1&&P.instanceColor!==null||P.isInstancedMesh&&Me.instancingMorph===!0&&P.morphTexture===null||P.isInstancedMesh&&Me.instancingMorph===!1&&P.morphTexture!==null||Me.envMap!==pe||O.fog===!0&&Me.fog!==ce||Me.numClippingPlanes!==void 0&&(Me.numClippingPlanes!==ge.numPlanes||Me.numIntersection!==ge.numIntersection)||Me.vertexAlphas!==Ie||Me.vertexTangents!==Be||Me.morphTargets!==ve||Me.morphNormals!==Ge||Me.morphColors!==rt||Me.toneMapping!==gt||Me.morphTargetsCount!==ot)&&(Ke=!0):(Ke=!0,Me.__version=O.version);let Wt=Me.currentProgram;Ke===!0&&(Wt=Ir(O,F,P));let Hi=!1,qt=!1,Ts=!1;const ht=Wt.getUniforms(),Ht=Me.uniforms;if(Ee.useProgram(Wt.program)&&(Hi=!0,qt=!0,Ts=!0),O.id!==V&&(V=O.id,qt=!0),Hi||W!==S){Ee.buffers.depth.getReversed()&&S.reversedDepth!==!0&&(S._reversedDepth=!0,S.updateProjectionMatrix()),ht.setValue(T,"projectionMatrix",S.projectionMatrix),ht.setValue(T,"viewMatrix",S.matrixWorldInverse);const Vt=ht.map.cameraPosition;Vt!==void 0&&Vt.setValue(T,Xe.setFromMatrixPosition(S.matrixWorld)),ct.logarithmicDepthBuffer&&ht.setValue(T,"logDepthBufFC",2/(Math.log(S.far+1)/Math.LN2)),(O.isMeshPhongMaterial||O.isMeshToonMaterial||O.isMeshLambertMaterial||O.isMeshBasicMaterial||O.isMeshStandardMaterial||O.isShaderMaterial)&&ht.setValue(T,"isOrthographic",S.isOrthographicCamera===!0),W!==S&&(W=S,qt=!0,Ts=!0)}if(Me.needsLights&&(nt.state.directionalShadowMap.length>0&&ht.setValue(T,"directionalShadowMap",nt.state.directionalShadowMap,L),nt.state.spotShadowMap.length>0&&ht.setValue(T,"spotShadowMap",nt.state.spotShadowMap,L),nt.state.pointShadowMap.length>0&&ht.setValue(T,"pointShadowMap",nt.state.pointShadowMap,L)),P.isSkinnedMesh){ht.setOptional(T,P,"bindMatrix"),ht.setOptional(T,P,"bindMatrixInverse");const Pt=P.skeleton;Pt&&(Pt.boneTexture===null&&Pt.computeBoneTexture(),ht.setValue(T,"boneTexture",Pt.boneTexture,L))}P.isBatchedMesh&&(ht.setOptional(T,P,"batchingTexture"),ht.setValue(T,"batchingTexture",P._matricesTexture,L),ht.setOptional(T,P,"batchingIdTexture"),ht.setValue(T,"batchingIdTexture",P._indirectTexture,L),ht.setOptional(T,P,"batchingColorTexture"),P._colorsTexture!==null&&ht.setValue(T,"batchingColorTexture",P._colorsTexture,L));const Zt=G.morphAttributes;if((Zt.position!==void 0||Zt.normal!==void 0||Zt.color!==void 0)&&ke.update(P,G,Wt),(qt||Me.receiveShadow!==P.receiveShadow)&&(Me.receiveShadow=P.receiveShadow,ht.setValue(T,"receiveShadow",P.receiveShadow)),O.isMeshGouraudMaterial&&O.envMap!==null&&(Ht.envMap.value=pe,Ht.flipEnvMap.value=pe.isCubeTexture&&pe.isRenderTargetTexture===!1?-1:1),O.isMeshStandardMaterial&&O.envMap===null&&F.environment!==null&&(Ht.envMapIntensity.value=F.environmentIntensity),Ht.dfgLUT!==void 0&&(Ht.dfgLUT.value=X_()),qt&&(ht.setValue(T,"toneMappingExposure",b.toneMappingExposure),Me.needsLights&&Vd(Ht,Ts),ce&&O.fog===!0&&Te.refreshFogUniforms(Ht,ce),Te.refreshMaterialUniforms(Ht,O,ye,be,v.state.transmissionRenderTarget[S.id]),$r.upload(T,ol(Me),Ht,L)),O.isShaderMaterial&&O.uniformsNeedUpdate===!0&&($r.upload(T,ol(Me),Ht,L),O.uniformsNeedUpdate=!1),O.isSpriteMaterial&&ht.setValue(T,"center",P.center),ht.setValue(T,"modelViewMatrix",P.modelViewMatrix),ht.setValue(T,"normalMatrix",P.normalMatrix),ht.setValue(T,"modelMatrix",P.matrixWorld),O.isShaderMaterial||O.isRawShaderMaterial){const Pt=O.uniformsGroups;for(let Vt=0,Za=Pt.length;Vt<Za;Vt++){const pi=Pt[Vt];$.update(pi,Wt),$.bind(pi,Wt)}}return Wt}function Vd(S,F){S.ambientLightColor.needsUpdate=F,S.lightProbe.needsUpdate=F,S.directionalLights.needsUpdate=F,S.directionalLightShadows.needsUpdate=F,S.pointLights.needsUpdate=F,S.pointLightShadows.needsUpdate=F,S.spotLights.needsUpdate=F,S.spotLightShadows.needsUpdate=F,S.rectAreaLights.needsUpdate=F,S.hemisphereLights.needsUpdate=F}function zd(S){return S.isMeshLambertMaterial||S.isMeshToonMaterial||S.isMeshPhongMaterial||S.isMeshStandardMaterial||S.isShadowMaterial||S.isShaderMaterial&&S.lights===!0}this.getActiveCubeFace=function(){return B},this.getActiveMipmapLevel=function(){return Q},this.getRenderTarget=function(){return N},this.setRenderTargetTextures=function(S,F,G){const O=_.get(S);O.__autoAllocateDepthBuffer=S.resolveDepthBuffer===!1,O.__autoAllocateDepthBuffer===!1&&(O.__useRenderToTexture=!1),_.get(S.texture).__webglTexture=F,_.get(S.depthTexture).__webglTexture=O.__autoAllocateDepthBuffer?void 0:G,O.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(S,F){const G=_.get(S);G.__webglFramebuffer=F,G.__useDefaultFramebuffer=F===void 0};const Wd=T.createFramebuffer();this.setRenderTarget=function(S,F=0,G=0){N=S,B=F,Q=G;let O=null,P=!1,ce=!1;if(S){const he=_.get(S);if(he.__useDefaultFramebuffer!==void 0){Ee.bindFramebuffer(T.FRAMEBUFFER,he.__webglFramebuffer),k.copy(S.viewport),H.copy(S.scissor),Y=S.scissorTest,Ee.viewport(k),Ee.scissor(H),Ee.setScissorTest(Y),V=-1;return}else if(he.__webglFramebuffer===void 0)L.setupRenderTarget(S);else if(he.__hasExternalTextures)L.rebindTextures(S,_.get(S.texture).__webglTexture,_.get(S.depthTexture).__webglTexture);else if(S.depthBuffer){const Be=S.depthTexture;if(he.__boundDepthTexture!==Be){if(Be!==null&&_.has(Be)&&(S.width!==Be.image.width||S.height!==Be.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");L.setupDepthRenderbuffer(S)}}const pe=S.texture;(pe.isData3DTexture||pe.isDataArrayTexture||pe.isCompressedArrayTexture)&&(ce=!0);const Ie=_.get(S).__webglFramebuffer;S.isWebGLCubeRenderTarget?(Array.isArray(Ie[F])?O=Ie[F][G]:O=Ie[F],P=!0):S.samples>0&&L.useMultisampledRTT(S)===!1?O=_.get(S).__webglMultisampledFramebuffer:Array.isArray(Ie)?O=Ie[G]:O=Ie,k.copy(S.viewport),H.copy(S.scissor),Y=S.scissorTest}else k.copy(X).multiplyScalar(ye).floor(),H.copy(J).multiplyScalar(ye).floor(),Y=Ae;if(G!==0&&(O=Wd),Ee.bindFramebuffer(T.FRAMEBUFFER,O)&&Ee.drawBuffers(S,O),Ee.viewport(k),Ee.scissor(H),Ee.setScissorTest(Y),P){const he=_.get(S.texture);T.framebufferTexture2D(T.FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_CUBE_MAP_POSITIVE_X+F,he.__webglTexture,G)}else if(ce){const he=F;for(let pe=0;pe<S.textures.length;pe++){const Ie=_.get(S.textures[pe]);T.framebufferTextureLayer(T.FRAMEBUFFER,T.COLOR_ATTACHMENT0+pe,Ie.__webglTexture,G,he)}}else if(S!==null&&G!==0){const he=_.get(S.texture);T.framebufferTexture2D(T.FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_2D,he.__webglTexture,G)}V=-1},this.readRenderTargetPixels=function(S,F,G,O,P,ce,fe,he=0){if(!(S&&S.isWebGLRenderTarget)){we("WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let pe=_.get(S).__webglFramebuffer;if(S.isWebGLCubeRenderTarget&&fe!==void 0&&(pe=pe[fe]),pe){Ee.bindFramebuffer(T.FRAMEBUFFER,pe);try{const Ie=S.textures[he],Be=Ie.format,ve=Ie.type;if(!ct.textureFormatReadable(Be)){we("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!ct.textureTypeReadable(ve)){we("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}F>=0&&F<=S.width-O&&G>=0&&G<=S.height-P&&(S.textures.length>1&&T.readBuffer(T.COLOR_ATTACHMENT0+he),T.readPixels(F,G,O,P,te.convert(Be),te.convert(ve),ce))}finally{const Ie=N!==null?_.get(N).__webglFramebuffer:null;Ee.bindFramebuffer(T.FRAMEBUFFER,Ie)}}},this.readRenderTargetPixelsAsync=async function(S,F,G,O,P,ce,fe,he=0){if(!(S&&S.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let pe=_.get(S).__webglFramebuffer;if(S.isWebGLCubeRenderTarget&&fe!==void 0&&(pe=pe[fe]),pe)if(F>=0&&F<=S.width-O&&G>=0&&G<=S.height-P){Ee.bindFramebuffer(T.FRAMEBUFFER,pe);const Ie=S.textures[he],Be=Ie.format,ve=Ie.type;if(!ct.textureFormatReadable(Be))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!ct.textureTypeReadable(ve))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const Ge=T.createBuffer();T.bindBuffer(T.PIXEL_PACK_BUFFER,Ge),T.bufferData(T.PIXEL_PACK_BUFFER,ce.byteLength,T.STREAM_READ),S.textures.length>1&&T.readBuffer(T.COLOR_ATTACHMENT0+he),T.readPixels(F,G,O,P,te.convert(Be),te.convert(ve),0);const rt=N!==null?_.get(N).__webglFramebuffer:null;Ee.bindFramebuffer(T.FRAMEBUFFER,rt);const gt=T.fenceSync(T.SYNC_GPU_COMMANDS_COMPLETE,0);return T.flush(),await jd(T,gt,4),T.bindBuffer(T.PIXEL_PACK_BUFFER,Ge),T.getBufferSubData(T.PIXEL_PACK_BUFFER,0,ce),T.deleteBuffer(Ge),T.deleteSync(gt),ce}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(S,F=null,G=0){const O=Math.pow(2,-G),P=Math.floor(S.image.width*O),ce=Math.floor(S.image.height*O),fe=F!==null?F.x:0,he=F!==null?F.y:0;L.setTexture2D(S,0),T.copyTexSubImage2D(T.TEXTURE_2D,G,0,0,fe,he,P,ce),Ee.unbindTexture()};const qd=T.createFramebuffer(),Xd=T.createFramebuffer();this.copyTextureToTexture=function(S,F,G=null,O=null,P=0,ce=null){ce===null&&(P!==0?(Es("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),ce=P,P=0):ce=0);let fe,he,pe,Ie,Be,ve,Ge,rt,gt;const mt=S.isCompressedTexture?S.mipmaps[ce]:S.image;if(G!==null)fe=G.max.x-G.min.x,he=G.max.y-G.min.y,pe=G.isBox3?G.max.z-G.min.z:1,Ie=G.min.x,Be=G.min.y,ve=G.isBox3?G.min.z:0;else{const Zt=Math.pow(2,-P);fe=Math.floor(mt.width*Zt),he=Math.floor(mt.height*Zt),S.isDataArrayTexture?pe=mt.depth:S.isData3DTexture?pe=Math.floor(mt.depth*Zt):pe=1,Ie=0,Be=0,ve=0}O!==null?(Ge=O.x,rt=O.y,gt=O.z):(Ge=0,rt=0,gt=0);const ot=te.convert(F.format),Me=te.convert(F.type);let nt;F.isData3DTexture?(L.setTexture3D(F,0),nt=T.TEXTURE_3D):F.isDataArrayTexture||F.isCompressedArrayTexture?(L.setTexture2DArray(F,0),nt=T.TEXTURE_2D_ARRAY):(L.setTexture2D(F,0),nt=T.TEXTURE_2D),T.pixelStorei(T.UNPACK_FLIP_Y_WEBGL,F.flipY),T.pixelStorei(T.UNPACK_PREMULTIPLY_ALPHA_WEBGL,F.premultiplyAlpha),T.pixelStorei(T.UNPACK_ALIGNMENT,F.unpackAlignment);const Ke=T.getParameter(T.UNPACK_ROW_LENGTH),Wt=T.getParameter(T.UNPACK_IMAGE_HEIGHT),Hi=T.getParameter(T.UNPACK_SKIP_PIXELS),qt=T.getParameter(T.UNPACK_SKIP_ROWS),Ts=T.getParameter(T.UNPACK_SKIP_IMAGES);T.pixelStorei(T.UNPACK_ROW_LENGTH,mt.width),T.pixelStorei(T.UNPACK_IMAGE_HEIGHT,mt.height),T.pixelStorei(T.UNPACK_SKIP_PIXELS,Ie),T.pixelStorei(T.UNPACK_SKIP_ROWS,Be),T.pixelStorei(T.UNPACK_SKIP_IMAGES,ve);const ht=S.isDataArrayTexture||S.isData3DTexture,Ht=F.isDataArrayTexture||F.isData3DTexture;if(S.isDepthTexture){const Zt=_.get(S),Pt=_.get(F),Vt=_.get(Zt.__renderTarget),Za=_.get(Pt.__renderTarget);Ee.bindFramebuffer(T.READ_FRAMEBUFFER,Vt.__webglFramebuffer),Ee.bindFramebuffer(T.DRAW_FRAMEBUFFER,Za.__webglFramebuffer);for(let pi=0;pi<pe;pi++)ht&&(T.framebufferTextureLayer(T.READ_FRAMEBUFFER,T.COLOR_ATTACHMENT0,_.get(S).__webglTexture,P,ve+pi),T.framebufferTextureLayer(T.DRAW_FRAMEBUFFER,T.COLOR_ATTACHMENT0,_.get(F).__webglTexture,ce,gt+pi)),T.blitFramebuffer(Ie,Be,fe,he,Ge,rt,fe,he,T.DEPTH_BUFFER_BIT,T.NEAREST);Ee.bindFramebuffer(T.READ_FRAMEBUFFER,null),Ee.bindFramebuffer(T.DRAW_FRAMEBUFFER,null)}else if(P!==0||S.isRenderTargetTexture||_.has(S)){const Zt=_.get(S),Pt=_.get(F);Ee.bindFramebuffer(T.READ_FRAMEBUFFER,qd),Ee.bindFramebuffer(T.DRAW_FRAMEBUFFER,Xd);for(let Vt=0;Vt<pe;Vt++)ht?T.framebufferTextureLayer(T.READ_FRAMEBUFFER,T.COLOR_ATTACHMENT0,Zt.__webglTexture,P,ve+Vt):T.framebufferTexture2D(T.READ_FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_2D,Zt.__webglTexture,P),Ht?T.framebufferTextureLayer(T.DRAW_FRAMEBUFFER,T.COLOR_ATTACHMENT0,Pt.__webglTexture,ce,gt+Vt):T.framebufferTexture2D(T.DRAW_FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_2D,Pt.__webglTexture,ce),P!==0?T.blitFramebuffer(Ie,Be,fe,he,Ge,rt,fe,he,T.COLOR_BUFFER_BIT,T.NEAREST):Ht?T.copyTexSubImage3D(nt,ce,Ge,rt,gt+Vt,Ie,Be,fe,he):T.copyTexSubImage2D(nt,ce,Ge,rt,Ie,Be,fe,he);Ee.bindFramebuffer(T.READ_FRAMEBUFFER,null),Ee.bindFramebuffer(T.DRAW_FRAMEBUFFER,null)}else Ht?S.isDataTexture||S.isData3DTexture?T.texSubImage3D(nt,ce,Ge,rt,gt,fe,he,pe,ot,Me,mt.data):F.isCompressedArrayTexture?T.compressedTexSubImage3D(nt,ce,Ge,rt,gt,fe,he,pe,ot,mt.data):T.texSubImage3D(nt,ce,Ge,rt,gt,fe,he,pe,ot,Me,mt):S.isDataTexture?T.texSubImage2D(T.TEXTURE_2D,ce,Ge,rt,fe,he,ot,Me,mt.data):S.isCompressedTexture?T.compressedTexSubImage2D(T.TEXTURE_2D,ce,Ge,rt,mt.width,mt.height,ot,mt.data):T.texSubImage2D(T.TEXTURE_2D,ce,Ge,rt,fe,he,ot,Me,mt);T.pixelStorei(T.UNPACK_ROW_LENGTH,Ke),T.pixelStorei(T.UNPACK_IMAGE_HEIGHT,Wt),T.pixelStorei(T.UNPACK_SKIP_PIXELS,Hi),T.pixelStorei(T.UNPACK_SKIP_ROWS,qt),T.pixelStorei(T.UNPACK_SKIP_IMAGES,Ts),ce===0&&F.generateMipmaps&&T.generateMipmap(nt),Ee.unbindTexture()},this.initRenderTarget=function(S){_.get(S).__webglFramebuffer===void 0&&L.setupRenderTarget(S)},this.initTexture=function(S){S.isCubeTexture?L.setTextureCube(S,0):S.isData3DTexture?L.setTexture3D(S,0):S.isDataArrayTexture||S.isCompressedArrayTexture?L.setTexture2DArray(S,0):L.setTexture2D(S,0),Ee.unbindTexture()},this.resetState=function(){B=0,Q=0,N=null,Ee.reset(),de.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return mn}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;const t=this.getContext();t.drawingBufferColorSpace=He._getDrawingBufferColorSpace(e),t.unpackColorSpace=He._getUnpackColorSpace()}}const K_=Object.freeze(Object.defineProperty({__proto__:null,ACESFilmicToneMapping:xc,AddEquation:ri,AddOperation:Yh,AdditiveBlending:jo,AgXToneMapping:Ic,AlphaFormat:wc,AlwaysCompare:ru,AlwaysDepth:ia,AlwaysStencilFunc:ic,AnimationClip:Ru,ArrayCamera:Ou,AttachedBindMode:$o,BackSide:Gt,BasicDepthPacking:Zh,Bone:kc,BooleanKeyframeTrack:ki,Box3:jt,BoxGeometry:Ss,BufferAttribute:vt,BufferGeometry:bt,ByteType:Mc,Cache:Tn,Camera:Nc,CineonToneMapping:Ec,ClampToEdgeWrapping:sn,Clock:ku,Color:De,ColorKeyframeTrack:zc,ColorManagement:He,CompressedArrayTexture:Eu,CompressedCubeTexture:xu,CompressedTexture:Ms,ConstantAlphaFactor:Wh,ConstantColorFactor:Vh,CubeCamera:Au,CubeDepthTexture:Cu,CubeReflectionMapping:Wn,CubeRefractionMapping:Di,CubeTexture:Qc,CubeUVReflectionMapping:Ar,CubicInterpolant:yu,CullFaceBack:Ko,CullFaceFront:yh,CullFaceNone:Mh,CustomBlending:Bh,CustomToneMapping:Cc,Data3DTexture:Lc,DataArrayTexture:Dc,DataTexture:_r,DefaultLoadingManager:Lu,DepthFormat:Ln,DepthStencilFormat:ai,DepthTexture:Is,DetachedBindMode:Kh,DirectionalLight:Nu,DiscreteInterpolant:Bu,DoubleSide:An,DstAlphaFactor:Qh,DstColorFactor:kh,EqualCompare:nu,EqualDepth:ra,EquirectangularReflectionMapping:la,EquirectangularRefractionMapping:ha,Euler:Xn,EventDispatcher:Oi,ExternalTexture:Vc,FileLoader:di,Float32BufferAttribute:on,FloatType:Tt,FrontSide:Dn,Frustum:za,GLSL3:sc,GreaterCompare:iu,GreaterDepth:oa,GreaterEqualCompare:ka,GreaterEqualDepth:aa,Group:ci,HalfFloatType:Dt,ImageBitmapLoader:Qu,ImageLoader:Fu,ImageUtils:lu,InstancedBufferAttribute:ya,InstancedMesh:gu,IntType:La,InterleavedBuffer:Ha,InterleavedBufferAttribute:vs,Interpolant:ys,InterpolateDiscrete:_s,InterpolateLinear:bs,InterpolateSmooth:Jr,KeepStencilOp:Ii,KeyframeTrack:cn,Layers:Fc,LessCompare:tu,LessDepth:sa,LessEqualCompare:Oa,LessEqualDepth:Ri,Light:qa,Line:Wa,LineBasicMaterial:Gc,LineLoop:_u,LineSegments:mu,LinearFilter:ft,LinearInterpolant:wu,LinearMipmapLinearFilter:rn,LinearMipmapNearestFilter:Xs,LinearSRGBColorSpace:Rt,LinearToneMapping:_c,LinearTransfer:lr,Loader:Yn,LoaderUtils:hs,LoadingManager:Du,Material:In,MathUtils:cu,Matrix3:Fe,Matrix4:Ue,MaxEquation:Lh,Mesh:Et,MeshBasicMaterial:oi,MeshDepthMaterial:Su,MeshDistanceMaterial:vu,MeshPhysicalMaterial:Mn,MeshStandardMaterial:Er,MinEquation:Dh,MirroredRepeatWrapping:Js,MixOperation:Xh,MultiplyBlending:Zo,MultiplyOperation:mc,NearestFilter:_t,NearestMipmapLinearFilter:os,NearestMipmapNearestFilter:Da,NeutralToneMapping:Sc,NeverCompare:eu,NeverDepth:na,NoBlending:Rn,NoColorSpace:pn,NoToneMapping:En,NormalAnimationBlendMode:jh,NormalBlending:Mi,NotEqualCompare:su,NotEqualDepth:ca,NumberKeyframeTrack:Pi,Object3D:pt,ObjectSpaceNormalMap:$h,OneFactor:Uh,OneMinusConstantAlphaFactor:qh,OneMinusConstantColorFactor:zh,OneMinusDstAlphaFactor:Oh,OneMinusDstColorFactor:Gh,OneMinusSrcAlphaFactor:ta,OneMinusSrcColorFactor:Nh,OrthographicCamera:xr,PCFShadowMap:qs,PCFSoftShadowMap:wh,PMREMGenerator:ac,PerspectiveCamera:kt,Plane:ii,PlaneGeometry:br,PointLight:Pu,Points:bu,PointsMaterial:Hc,PropertyBinding:Ze,Quaternion:qn,QuaternionKeyframeTrack:Ni,QuaternionLinearInterpolant:Tu,R11_EAC_Format:er,RED_GREEN_RGTC2_Format:or,RED_RGTC1_Format:rr,REVISION:Ra,RG11_EAC_Format:nr,RGBAFormat:St,RGBAIntegerFormat:Qa,RGBA_ASTC_10x10_Format:xa,RGBA_ASTC_10x5_Format:_a,RGBA_ASTC_10x6_Format:ba,RGBA_ASTC_10x8_Format:Ea,RGBA_ASTC_12x10_Format:Ca,RGBA_ASTC_12x12_Format:Ia,RGBA_ASTC_4x4_Format:ui,RGBA_ASTC_5x4_Format:da,RGBA_ASTC_5x5_Format:fa,RGBA_ASTC_6x5_Format:Aa,RGBA_ASTC_6x6_Format:Bi,RGBA_ASTC_8x5_Format:pa,RGBA_ASTC_8x6_Format:ga,RGBA_ASTC_8x8_Format:ma,RGBA_BPTC_Format:Ui,RGBA_ETC2_EAC_Format:ms,RGBA_PVRTC_2BPPV1_Format:ps,RGBA_PVRTC_4BPPV1_Format:Fi,RGBA_S3TC_DXT1_Format:hi,RGBA_S3TC_DXT3_Format:wi,RGBA_S3TC_DXT5_Format:cs,RGBFormat:As,RGB_BPTC_SIGNED_Format:Sa,RGB_BPTC_UNSIGNED_Format:sr,RGB_ETC1_Format:$s,RGB_ETC2_Format:gs,RGB_PVRTC_2BPPV1_Format:ua,RGB_PVRTC_4BPPV1_Format:Zs,RGB_S3TC_DXT1_Format:yi,RGFormat:an,RGIntegerFormat:Na,RawShaderMaterial:Iu,Ray:mr,RedFormat:Vn,RedIntegerFormat:Pa,ReinhardToneMapping:bc,RenderTarget:hu,RepeatWrapping:Li,ReverseSubtractEquation:Rh,SIGNED_R11_EAC_Format:tr,SIGNED_RED_GREEN_RGTC2_Format:cr,SIGNED_RED_RGTC1_Format:ar,SIGNED_RG11_EAC_Format:ir,SRGBColorSpace:At,SRGBTransfer:Je,ShaderChunk:Qe,ShaderLib:fn,ShaderMaterial:vn,ShortType:yc,Skeleton:Va,SkinnedMesh:pu,Source:Ga,Sphere:Jt,SpotLight:Uu,SrcAlphaFactor:ea,SrcAlphaSaturateFactor:Hh,SrcColorFactor:Ph,StaticDrawUsage:Ma,StringKeyframeTrack:Gi,SubtractEquation:Th,SubtractiveBlending:Jo,TangentSpaceNormalMap:Tc,Texture:$e,TextureLoader:Wc,Triangle:tn,TriangleFanDrawMode:va,TriangleStripDrawMode:Bc,TrianglesDrawMode:Jh,UVMapping:vc,Uint16BufferAttribute:Uc,Uint32BufferAttribute:Pc,UniformsLib:le,UniformsUtils:fu,UnsignedByteType:Re,UnsignedInt101111Type:gr,UnsignedInt248Type:fs,UnsignedInt5999Type:pr,UnsignedIntType:Sn,UnsignedShort4444Type:Fa,UnsignedShort5551Type:Ua,UnsignedShortType:ds,VSMShadowMap:as,Vector2:qe,Vector3:U,Vector4:ut,VectorKeyframeTrack:Qi,WebGLCoordinateSystem:mn,WebGLCubeRenderTarget:Oc,WebGLRenderTarget:Cn,WebGLRenderer:Y_,WebGLUtils:qu,WebGPUCoordinateSystem:hr,WebXRController:Zr,WrapAroundEnding:nc,ZeroCurvatureEnding:ec,ZeroFactor:Fh,ZeroSlopeEnding:tc,createCanvasElement:ou,error:we,log:dr,warn:Se,warnOnce:Es},Symbol.toStringTag,{value:"Module"}));function fh(s,e){if(e===Jh)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),s;if(e===va||e===Bc){let t=s.getIndex();if(t===null){const a=[],o=s.getAttribute("position");if(o!==void 0){for(let c=0;c<o.count;c++)a.push(c);s.setIndex(a),t=s.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),s}const n=t.count-2,i=[];if(e===va)for(let a=1;a<=n;a++)i.push(t.getX(0)),i.push(t.getX(a)),i.push(t.getX(a+1));else for(let a=0;a<n;a++)a%2===0?(i.push(t.getX(a)),i.push(t.getX(a+1)),i.push(t.getX(a+2))):(i.push(t.getX(a+2)),i.push(t.getX(a+1)),i.push(t.getX(a)));i.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const r=s.clone();return r.setIndex(i),r.clearGroups(),r}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),s}class Kc extends Yn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new eb(t)}),this.register(function(t){return new tb(t)}),this.register(function(t){return new hb(t)}),this.register(function(t){return new ub(t)}),this.register(function(t){return new db(t)}),this.register(function(t){return new ib(t)}),this.register(function(t){return new sb(t)}),this.register(function(t){return new rb(t)}),this.register(function(t){return new ab(t)}),this.register(function(t){return new $_(t)}),this.register(function(t){return new ob(t)}),this.register(function(t){return new nb(t)}),this.register(function(t){return new lb(t)}),this.register(function(t){return new cb(t)}),this.register(function(t){return new J_(t)}),this.register(function(t){return new fb(t)}),this.register(function(t){return new Ab(t)})}load(e,t,n,i){const r=this;let a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){const l=hs.extractUrlBase(e);a=hs.resolveURL(l,this.path)}else a=hs.extractUrlBase(e);this.manager.itemStart(e);const o=function(l){i?i(l):console.error(l),r.manager.itemError(e),r.manager.itemEnd(e)},c=new di(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(l){try{r.parse(l,a,function(h){t(h),r.manager.itemEnd(e)},o)}catch(h){o(h)}},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,t,n,i){let r;const a={},o={},c=new TextDecoder;if(typeof e=="string")r=JSON.parse(e);else if(e instanceof ArrayBuffer)if(c.decode(new Uint8Array(e,0,4))===Xu){try{a[ze.KHR_BINARY_GLTF]=new pb(e)}catch(u){i&&i(u);return}r=JSON.parse(a[ze.KHR_BINARY_GLTF].content)}else r=JSON.parse(c.decode(e));else r=e;if(r.asset===void 0||r.asset.version[0]<2){i&&i(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const l=new wb(r,{path:t||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 u=this.pluginCallbacks[h](l);u.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[u.name]=u,a[u.name]=!0}if(r.extensionsUsed)for(let h=0;h<r.extensionsUsed.length;++h){const u=r.extensionsUsed[h],d=r.extensionsRequired||[];switch(u){case ze.KHR_MATERIALS_UNLIT:a[u]=new Z_;break;case ze.KHR_DRACO_MESH_COMPRESSION:a[u]=new gb(r,this.dracoLoader);break;case ze.KHR_TEXTURE_TRANSFORM:a[u]=new mb;break;case ze.KHR_MESH_QUANTIZATION:a[u]=new _b;break;default:d.indexOf(u)>=0&&o[u]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+u+'".')}}l.setExtensions(a),l.setPlugins(o),l.parse(n,i)}parseAsync(e,t){const n=this;return new Promise(function(i,r){n.parse(e,t,i,r)})}}function j_(){let s={};return{get:function(e){return s[e]},add:function(e,t){s[e]=t},remove:function(e){delete s[e]},removeAll:function(){s={}}}}const ze={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 J_{constructor(e){this.parser=e,this.name=ze.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,i=t.length;n<i;n++){const r=t[n];r.extensions&&r.extensions[this.name]&&r.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){const t=this.parser,n="light:"+e;let i=t.cache.get(n);if(i)return i;const r=t.json,c=((r.extensions&&r.extensions[this.name]||{}).lights||[])[e];let l;const h=new De(16777215);c.color!==void 0&&h.setRGB(c.color[0],c.color[1],c.color[2],Rt);const u=c.range!==void 0?c.range:0;switch(c.type){case"directional":l=new Nu(h),l.target.position.set(0,0,-1),l.add(l.target);break;case"point":l=new Pu(h),l.distance=u;break;case"spot":l=new Uu(h),l.distance=u,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,l.angle=c.spot.outerConeAngle,l.penumbra=1-c.spot.innerConeAngle/c.spot.outerConeAngle,l.target.position.set(0,0,-1),l.add(l.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+c.type)}return l.position.set(0,0,0),Bn(l,c),c.intensity!==void 0&&(l.intensity=c.intensity),l.name=t.createUniqueName(c.name||"light_"+e),i=Promise.resolve(l),t.cache.add(n,i),i}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,n=this.parser,r=n.json.nodes[e],o=(r.extensions&&r.extensions[this.name]||{}).light;return o===void 0?null:this._loadLight(o).then(function(c){return n._getNodeRef(t.cache,o,c)})}}class Z_{constructor(){this.name=ze.KHR_MATERIALS_UNLIT}getMaterialType(){return oi}extendParams(e,t,n){const i=[];e.color=new De(1,1,1),e.opacity=1;const r=t.pbrMetallicRoughness;if(r){if(Array.isArray(r.baseColorFactor)){const a=r.baseColorFactor;e.color.setRGB(a[0],a[1],a[2],Rt),e.opacity=a[3]}r.baseColorTexture!==void 0&&i.push(n.assignTexture(e,"map",r.baseColorTexture,At))}return Promise.all(i)}}class $_{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=i.extensions[this.name].emissiveStrength;return r!==void 0&&(t.emissiveIntensity=r),Promise.resolve()}}class eb{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];if(a.clearcoatFactor!==void 0&&(t.clearcoat=a.clearcoatFactor),a.clearcoatTexture!==void 0&&r.push(n.assignTexture(t,"clearcoatMap",a.clearcoatTexture)),a.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=a.clearcoatRoughnessFactor),a.clearcoatRoughnessTexture!==void 0&&r.push(n.assignTexture(t,"clearcoatRoughnessMap",a.clearcoatRoughnessTexture)),a.clearcoatNormalTexture!==void 0&&(r.push(n.assignTexture(t,"clearcoatNormalMap",a.clearcoatNormalTexture)),a.clearcoatNormalTexture.scale!==void 0)){const o=a.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new qe(o,o)}return Promise.all(r)}}class tb{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_DISPERSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=i.extensions[this.name];return t.dispersion=r.dispersion!==void 0?r.dispersion:0,Promise.resolve()}}class nb{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];return a.iridescenceFactor!==void 0&&(t.iridescence=a.iridescenceFactor),a.iridescenceTexture!==void 0&&r.push(n.assignTexture(t,"iridescenceMap",a.iridescenceTexture)),a.iridescenceIor!==void 0&&(t.iridescenceIOR=a.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),a.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=a.iridescenceThicknessMinimum),a.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=a.iridescenceThicknessMaximum),a.iridescenceThicknessTexture!==void 0&&r.push(n.assignTexture(t,"iridescenceThicknessMap",a.iridescenceThicknessTexture)),Promise.all(r)}}class ib{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_SHEEN}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[];t.sheenColor=new De(0,0,0),t.sheenRoughness=0,t.sheen=1;const a=i.extensions[this.name];if(a.sheenColorFactor!==void 0){const o=a.sheenColorFactor;t.sheenColor.setRGB(o[0],o[1],o[2],Rt)}return a.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=a.sheenRoughnessFactor),a.sheenColorTexture!==void 0&&r.push(n.assignTexture(t,"sheenColorMap",a.sheenColorTexture,At)),a.sheenRoughnessTexture!==void 0&&r.push(n.assignTexture(t,"sheenRoughnessMap",a.sheenRoughnessTexture)),Promise.all(r)}}class sb{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];return a.transmissionFactor!==void 0&&(t.transmission=a.transmissionFactor),a.transmissionTexture!==void 0&&r.push(n.assignTexture(t,"transmissionMap",a.transmissionTexture)),Promise.all(r)}}class rb{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_VOLUME}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];t.thickness=a.thicknessFactor!==void 0?a.thicknessFactor:0,a.thicknessTexture!==void 0&&r.push(n.assignTexture(t,"thicknessMap",a.thicknessTexture)),t.attenuationDistance=a.attenuationDistance||1/0;const o=a.attenuationColor||[1,1,1];return t.attenuationColor=new De().setRGB(o[0],o[1],o[2],Rt),Promise.all(r)}}class ab{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_IOR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=i.extensions[this.name];return t.ior=r.ior!==void 0?r.ior:1.5,Promise.resolve()}}class ob{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_SPECULAR}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];t.specularIntensity=a.specularFactor!==void 0?a.specularFactor:1,a.specularTexture!==void 0&&r.push(n.assignTexture(t,"specularIntensityMap",a.specularTexture));const o=a.specularColorFactor||[1,1,1];return t.specularColor=new De().setRGB(o[0],o[1],o[2],Rt),a.specularColorTexture!==void 0&&r.push(n.assignTexture(t,"specularColorMap",a.specularColorTexture,At)),Promise.all(r)}}class cb{constructor(e){this.parser=e,this.name=ze.EXT_MATERIALS_BUMP}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];return t.bumpScale=a.bumpFactor!==void 0?a.bumpFactor:1,a.bumpTexture!==void 0&&r.push(n.assignTexture(t,"bumpMap",a.bumpTexture)),Promise.all(r)}}class lb{constructor(e){this.parser=e,this.name=ze.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const n=this.parser.json.materials[e];return!n.extensions||!n.extensions[this.name]?null:Mn}extendMaterialParams(e,t){const n=this.parser,i=n.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=[],a=i.extensions[this.name];return a.anisotropyStrength!==void 0&&(t.anisotropy=a.anisotropyStrength),a.anisotropyRotation!==void 0&&(t.anisotropyRotation=a.anisotropyRotation),a.anisotropyTexture!==void 0&&r.push(n.assignTexture(t,"anisotropyMap",a.anisotropyTexture)),Promise.all(r)}}class hb{constructor(e){this.parser=e,this.name=ze.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,n=t.json,i=n.textures[e];if(!i.extensions||!i.extensions[this.name])return null;const r=i.extensions[this.name],a=t.options.ktx2Loader;if(!a){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 t.loadTextureImage(e,r.source,a)}}class ub{constructor(e){this.parser=e,this.name=ze.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,n=this.parser,i=n.json,r=i.textures[e];if(!r.extensions||!r.extensions[t])return null;const a=r.extensions[t],o=i.images[a.source];let c=n.textureLoader;if(o.uri){const l=n.options.manager.getHandler(o.uri);l!==null&&(c=l)}return n.loadTextureImage(e,a.source,c)}}class db{constructor(e){this.parser=e,this.name=ze.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,n=this.parser,i=n.json,r=i.textures[e];if(!r.extensions||!r.extensions[t])return null;const a=r.extensions[t],o=i.images[a.source];let c=n.textureLoader;if(o.uri){const l=n.options.manager.getHandler(o.uri);l!==null&&(c=l)}return n.loadTextureImage(e,a.source,c)}}class fb{constructor(e){this.name=ze.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const i=n.extensions[this.name],r=this.parser.getDependency("buffer",i.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return r.then(function(o){const c=i.byteOffset||0,l=i.byteLength||0,h=i.count,u=i.byteStride,d=new Uint8Array(o,c,l);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(h,u,d,i.mode,i.filter).then(function(A){return A.buffer}):a.ready.then(function(){const A=new ArrayBuffer(h*u);return a.decodeGltfBuffer(new Uint8Array(A),h,u,d,i.mode,i.filter),A})})}else return null}}class Ab{constructor(e){this.name=ze.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;const i=t.meshes[n.mesh];for(const l of i.primitives)if(l.mode!==en.TRIANGLES&&l.mode!==en.TRIANGLE_STRIP&&l.mode!==en.TRIANGLE_FAN&&l.mode!==void 0)return null;const a=n.extensions[this.name].attributes,o=[],c={};for(const l in a)o.push(this.parser.getDependency("accessor",a[l]).then(h=>(c[l]=h,c[l])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(l=>{const h=l.pop(),u=h.isGroup?h.children:[h],d=l[0].count,A=[];for(const g of u){const m=new Ue,p=new U,f=new qn,E=new U(1,1,1),I=new gu(g.geometry,g.material,d);for(let x=0;x<d;x++)c.TRANSLATION&&p.fromBufferAttribute(c.TRANSLATION,x),c.ROTATION&&f.fromBufferAttribute(c.ROTATION,x),c.SCALE&&E.fromBufferAttribute(c.SCALE,x),I.setMatrixAt(x,m.compose(p,f,E));for(const x in c)if(x==="_COLOR_0"){const v=c[x];I.instanceColor=new ya(v.array,v.itemSize,v.normalized)}else x!=="TRANSLATION"&&x!=="ROTATION"&&x!=="SCALE"&&g.geometry.setAttribute(x,c[x]);pt.prototype.copy.call(I,g),this.parser.assignFinalMaterial(I),A.push(I)}return h.isGroup?(h.clear(),h.add(...A),h):A[0]}))}}const Xu="glTF",ks=12,Ah={JSON:1313821514,BIN:5130562};class pb{constructor(e){this.name=ze.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,ks),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Xu)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const i=this.header.length-ks,r=new DataView(e,ks);let a=0;for(;a<i;){const o=r.getUint32(a,!0);a+=4;const c=r.getUint32(a,!0);if(a+=4,c===Ah.JSON){const l=new Uint8Array(e,ks+a,o);this.content=n.decode(l)}else if(c===Ah.BIN){const l=ks+a;this.body=e.slice(l,l+o)}a+=o}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class gb{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=ze.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const n=this.json,i=this.dracoLoader,r=e.extensions[this.name].bufferView,a=e.extensions[this.name].attributes,o={},c={},l={};for(const h in a){const u=lc[h]||h.toLowerCase();o[u]=a[h]}for(const h in e.attributes){const u=lc[h]||h.toLowerCase();if(a[h]!==void 0){const d=n.accessors[e.attributes[h]],A=us[d.componentType];l[u]=A.name,c[u]=d.normalized===!0}}return t.getDependency("bufferView",r).then(function(h){return new Promise(function(u,d){i.decodeDracoFile(h,function(A){for(const g in A.attributes){const m=A.attributes[g],p=c[g];p!==void 0&&(m.normalized=p)}u(A)},o,l,Rt,d)})})}}class mb{constructor(){this.name=ze.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class _b{constructor(){this.name=ze.KHR_MESH_QUANTIZATION}}class Yu extends ys{constructor(e,t,n,i){super(e,t,n,i)}copySampleValue_(e){const t=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=e*i*3+i;for(let a=0;a!==i;a++)t[a]=n[r+a];return t}interpolate_(e,t,n,i){const r=this.resultBuffer,a=this.sampleValues,o=this.valueSize,c=o*2,l=o*3,h=i-t,u=(n-t)/h,d=u*u,A=d*u,g=e*l,m=g-l,p=-2*A+3*d,f=A-d,E=1-p,I=f-d+u;for(let x=0;x!==o;x++){const v=a[m+x+o],y=a[m+x+c]*h,w=a[g+x+o],R=a[g+x]*h;r[x]=E*v+I*y+p*w+f*R}return r}}const bb=new qn;class Eb extends Yu{interpolate_(e,t,n,i){const r=super.interpolate_(e,t,n,i);return bb.fromArray(r).normalize().toArray(r),r}}const en={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},us={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},ph={9728:_t,9729:ft,9984:Da,9985:Xs,9986:os,9987:rn},gh={33071:sn,33648:Js,10497:Li},Lo={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},lc={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"},ti={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},xb={CUBICSPLINE:void 0,LINEAR:bs,STEP:_s},Fo={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function Cb(s){return s.DefaultMaterial===void 0&&(s.DefaultMaterial=new Er({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Dn})),s.DefaultMaterial}function Ci(s,e,t){for(const n in t.extensions)s[n]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[n]=t.extensions[n])}function Bn(s,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(s.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function Ib(s,e,t){let n=!1,i=!1,r=!1;for(let l=0,h=e.length;l<h;l++){const u=e[l];if(u.POSITION!==void 0&&(n=!0),u.NORMAL!==void 0&&(i=!0),u.COLOR_0!==void 0&&(r=!0),n&&i&&r)break}if(!n&&!i&&!r)return Promise.resolve(s);const a=[],o=[],c=[];for(let l=0,h=e.length;l<h;l++){const u=e[l];if(n){const d=u.POSITION!==void 0?t.getDependency("accessor",u.POSITION):s.attributes.position;a.push(d)}if(i){const d=u.NORMAL!==void 0?t.getDependency("accessor",u.NORMAL):s.attributes.normal;o.push(d)}if(r){const d=u.COLOR_0!==void 0?t.getDependency("accessor",u.COLOR_0):s.attributes.color;c.push(d)}}return Promise.all([Promise.all(a),Promise.all(o),Promise.all(c)]).then(function(l){const h=l[0],u=l[1],d=l[2];return n&&(s.morphAttributes.position=h),i&&(s.morphAttributes.normal=u),r&&(s.morphAttributes.color=d),s.morphTargetsRelative=!0,s})}function Sb(s,e){if(s.updateMorphTargets(),e.weights!==void 0)for(let t=0,n=e.weights.length;t<n;t++)s.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(s.morphTargetInfluences.length===t.length){s.morphTargetDictionary={};for(let n=0,i=t.length;n<i;n++)s.morphTargetDictionary[t[n]]=n}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function vb(s){let e;const t=s.extensions&&s.extensions[ze.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+Uo(t.attributes):e=s.indices+":"+Uo(s.attributes)+":"+s.mode,s.targets!==void 0)for(let n=0,i=s.targets.length;n<i;n++)e+=":"+Uo(s.targets[n]);return e}function Uo(s){let e="";const t=Object.keys(s).sort();for(let n=0,i=t.length;n<i;n++)e+=t[n]+":"+s[t[n]]+";";return e}function hc(s){switch(s){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 Mb(s){return s.search(/\.jpe?g($|\?)/i)>0||s.search(/^data\:image\/jpeg/)===0?"image/jpeg":s.search(/\.webp($|\?)/i)>0||s.search(/^data\:image\/webp/)===0?"image/webp":s.search(/\.ktx2($|\?)/i)>0||s.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const yb=new Ue;class wb{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new j_,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,i=-1,r=!1,a=-1;if(typeof navigator<"u"){const o=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(o)===!0;const c=o.match(/Version\/(\d+)/);i=n&&c?parseInt(c[1],10):-1,r=o.indexOf("Firefox")>-1,a=r?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||n&&i<17||r&&a<98?this.textureLoader=new Wc(this.options.manager):this.textureLoader=new Qu(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new di(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,t){const n=this,i=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(a){return a._markDefs&&a._markDefs()}),Promise.all(this._invokeAll(function(a){return a.beforeRoot&&a.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(a){const o={scene:a[0][i.scene||0],scenes:a[0],animations:a[1],cameras:a[2],asset:i.asset,parser:n,userData:{}};return Ci(r,o,i),Bn(o,i),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(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let i=0,r=t.length;i<r;i++){const a=t[i].joints;for(let o=0,c=a.length;o<c;o++)e[a[o]].isBone=!0}for(let i=0,r=e.length;i<r;i++){const a=e[i];a.mesh!==void 0&&(this._addNodeRef(this.meshCache,a.mesh),a.skin!==void 0&&(n[a.mesh].isSkinnedMesh=!0)),a.camera!==void 0&&this._addNodeRef(this.cameraCache,a.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;const i=n.clone(),r=(a,o)=>{const c=this.associations.get(a);c!=null&&this.associations.set(o,c);for(const[l,h]of a.children.entries())r(h,o.children[l])};return r(n,i),i.name+="_instance_"+e.uses[t]++,i}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){const i=e(t[n]);if(i)return i}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const n=[];for(let i=0;i<t.length;i++){const r=e(t[i]);r&&n.push(r)}return n}getDependency(e,t){const n=e+":"+t;let i=this.cache.get(n);if(!i){switch(e){case"scene":i=this.loadScene(t);break;case"node":i=this._invokeOne(function(r){return r.loadNode&&r.loadNode(t)});break;case"mesh":i=this._invokeOne(function(r){return r.loadMesh&&r.loadMesh(t)});break;case"accessor":i=this.loadAccessor(t);break;case"bufferView":i=this._invokeOne(function(r){return r.loadBufferView&&r.loadBufferView(t)});break;case"buffer":i=this.loadBuffer(t);break;case"material":i=this._invokeOne(function(r){return r.loadMaterial&&r.loadMaterial(t)});break;case"texture":i=this._invokeOne(function(r){return r.loadTexture&&r.loadTexture(t)});break;case"skin":i=this.loadSkin(t);break;case"animation":i=this._invokeOne(function(r){return r.loadAnimation&&r.loadAnimation(t)});break;case"camera":i=this.loadCamera(t);break;default:if(i=this._invokeOne(function(r){return r!=this&&r.getDependency&&r.getDependency(e,t)}),!i)throw new Error("Unknown type: "+e);break}this.cache.add(n,i)}return i}getDependencies(e){let t=this.cache.get(e);if(!t){const n=this,i=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(i.map(function(r,a){return n.getDependency(e,a)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],n=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[ze.KHR_BINARY_GLTF].body);const i=this.options;return new Promise(function(r,a){n.load(hs.resolveURL(t.uri,i.path),r,void 0,function(){a(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(n){const i=t.byteLength||0,r=t.byteOffset||0;return n.slice(r,r+i)})}loadAccessor(e){const t=this,n=this.json,i=this.json.accessors[e];if(i.bufferView===void 0&&i.sparse===void 0){const a=Lo[i.type],o=us[i.componentType],c=i.normalized===!0,l=new o(i.count*a);return Promise.resolve(new vt(l,a,c))}const r=[];return i.bufferView!==void 0?r.push(this.getDependency("bufferView",i.bufferView)):r.push(null),i.sparse!==void 0&&(r.push(this.getDependency("bufferView",i.sparse.indices.bufferView)),r.push(this.getDependency("bufferView",i.sparse.values.bufferView))),Promise.all(r).then(function(a){const o=a[0],c=Lo[i.type],l=us[i.componentType],h=l.BYTES_PER_ELEMENT,u=h*c,d=i.byteOffset||0,A=i.bufferView!==void 0?n.bufferViews[i.bufferView].byteStride:void 0,g=i.normalized===!0;let m,p;if(A&&A!==u){const f=Math.floor(d/A),E="InterleavedBuffer:"+i.bufferView+":"+i.componentType+":"+f+":"+i.count;let I=t.cache.get(E);I||(m=new l(o,f*A,i.count*A/h),I=new Ha(m,A/h),t.cache.add(E,I)),p=new vs(I,c,d%A/h,g)}else o===null?m=new l(i.count*c):m=new l(o,d,i.count*c),p=new vt(m,c,g);if(i.sparse!==void 0){const f=Lo.SCALAR,E=us[i.sparse.indices.componentType],I=i.sparse.indices.byteOffset||0,x=i.sparse.values.byteOffset||0,v=new E(a[1],I,i.sparse.count*f),y=new l(a[2],x,i.sparse.count*c);o!==null&&(p=new vt(p.array.slice(),p.itemSize,p.normalized)),p.normalized=!1;for(let w=0,R=v.length;w<R;w++){const b=v[w];if(p.setX(b,y[w*c]),c>=2&&p.setY(b,y[w*c+1]),c>=3&&p.setZ(b,y[w*c+2]),c>=4&&p.setW(b,y[w*c+3]),c>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}p.normalized=g}return p})}loadTexture(e){const t=this.json,n=this.options,r=t.textures[e].source,a=t.images[r];let o=this.textureLoader;if(a.uri){const c=n.manager.getHandler(a.uri);c!==null&&(o=c)}return this.loadTextureImage(e,r,o)}loadTextureImage(e,t,n){const i=this,r=this.json,a=r.textures[e],o=r.images[t],c=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[c])return this.textureCache[c];const l=this.loadImageSource(t,n).then(function(h){h.flipY=!1,h.name=a.name||o.name||"",h.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(h.name=o.uri);const d=(r.samplers||{})[a.sampler]||{};return h.magFilter=ph[d.magFilter]||ft,h.minFilter=ph[d.minFilter]||rn,h.wrapS=gh[d.wrapS]||Li,h.wrapT=gh[d.wrapT]||Li,h.generateMipmaps=!h.isCompressedTexture&&h.minFilter!==_t&&h.minFilter!==ft,i.associations.set(h,{textures:e}),h}).catch(function(){return null});return this.textureCache[c]=l,l}loadImageSource(e,t){const n=this,i=this.json,r=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(u=>u.clone());const a=i.images[e],o=self.URL||self.webkitURL;let c=a.uri||"",l=!1;if(a.bufferView!==void 0)c=n.getDependency("bufferView",a.bufferView).then(function(u){l=!0;const d=new Blob([u],{type:a.mimeType});return c=o.createObjectURL(d),c});else if(a.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const h=Promise.resolve(c).then(function(u){return new Promise(function(d,A){let g=d;t.isImageBitmapLoader===!0&&(g=function(m){const p=new $e(m);p.needsUpdate=!0,d(p)}),t.load(hs.resolveURL(u,r.path),g,void 0,A)})}).then(function(u){return l===!0&&o.revokeObjectURL(c),Bn(u,a),u.userData.mimeType=a.mimeType||Mb(a.uri),u}).catch(function(u){throw console.error("THREE.GLTFLoader: Couldn't load texture",c),u});return this.sourceCache[e]=h,h}assignTexture(e,t,n,i){const r=this;return this.getDependency("texture",n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),r.extensions[ze.KHR_TEXTURE_TRANSFORM]){const o=n.extensions!==void 0?n.extensions[ze.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const c=r.associations.get(a);a=r.extensions[ze.KHR_TEXTURE_TRANSFORM].extendTexture(a,o),r.associations.set(a,c)}}return i!==void 0&&(a.colorSpace=i),e[t]=a,a})}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const i=t.attributes.tangent===void 0,r=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+n.uuid;let c=this.cache.get(o);c||(c=new Hc,In.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 Gc,In.prototype.copy.call(c,n),c.color.copy(n.color),c.map=n.map,this.cache.add(o,c)),n=c}if(i||r||a){let o="ClonedMaterial:"+n.uuid+":";i&&(o+="derivative-tangents:"),r&&(o+="vertex-colors:"),a&&(o+="flat-shading:");let c=this.cache.get(o);c||(c=n.clone(),r&&(c.vertexColors=!0),a&&(c.flatShading=!0),i&&(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 Er}loadMaterial(e){const t=this,n=this.json,i=this.extensions,r=n.materials[e];let a;const o={},c=r.extensions||{},l=[];if(c[ze.KHR_MATERIALS_UNLIT]){const u=i[ze.KHR_MATERIALS_UNLIT];a=u.getMaterialType(),l.push(u.extendParams(o,r,t))}else{const u=r.pbrMetallicRoughness||{};if(o.color=new De(1,1,1),o.opacity=1,Array.isArray(u.baseColorFactor)){const d=u.baseColorFactor;o.color.setRGB(d[0],d[1],d[2],Rt),o.opacity=d[3]}u.baseColorTexture!==void 0&&l.push(t.assignTexture(o,"map",u.baseColorTexture,At)),o.metalness=u.metallicFactor!==void 0?u.metallicFactor:1,o.roughness=u.roughnessFactor!==void 0?u.roughnessFactor:1,u.metallicRoughnessTexture!==void 0&&(l.push(t.assignTexture(o,"metalnessMap",u.metallicRoughnessTexture)),l.push(t.assignTexture(o,"roughnessMap",u.metallicRoughnessTexture))),a=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,o)})))}r.doubleSided===!0&&(o.side=An);const h=r.alphaMode||Fo.OPAQUE;if(h===Fo.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,h===Fo.MASK&&(o.alphaTest=r.alphaCutoff!==void 0?r.alphaCutoff:.5)),r.normalTexture!==void 0&&a!==oi&&(l.push(t.assignTexture(o,"normalMap",r.normalTexture)),o.normalScale=new qe(1,1),r.normalTexture.scale!==void 0)){const u=r.normalTexture.scale;o.normalScale.set(u,u)}if(r.occlusionTexture!==void 0&&a!==oi&&(l.push(t.assignTexture(o,"aoMap",r.occlusionTexture)),r.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&a!==oi){const u=r.emissiveFactor;o.emissive=new De().setRGB(u[0],u[1],u[2],Rt)}return r.emissiveTexture!==void 0&&a!==oi&&l.push(t.assignTexture(o,"emissiveMap",r.emissiveTexture,At)),Promise.all(l).then(function(){const u=new a(o);return r.name&&(u.name=r.name),Bn(u,r),t.associations.set(u,{materials:e}),r.extensions&&Ci(i,u,r),u})}createUniqueName(e){const t=Ze.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,n=this.extensions,i=this.primitiveCache;function r(o){return n[ze.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(c){return mh(c,o,t)})}const a=[];for(let o=0,c=e.length;o<c;o++){const l=e[o],h=vb(l),u=i[h];if(u)a.push(u.promise);else{let d;l.extensions&&l.extensions[ze.KHR_DRACO_MESH_COMPRESSION]?d=r(l):d=mh(new bt,l,t),i[h]={primitive:l,promise:d},a.push(d)}}return Promise.all(a)}loadMesh(e){const t=this,n=this.json,i=this.extensions,r=n.meshes[e],a=r.primitives,o=[];for(let c=0,l=a.length;c<l;c++){const h=a[c].material===void 0?Cb(this.cache):this.getDependency("material",a[c].material);o.push(h)}return o.push(t.loadGeometries(a)),Promise.all(o).then(function(c){const l=c.slice(0,c.length-1),h=c[c.length-1],u=[];for(let A=0,g=h.length;A<g;A++){const m=h[A],p=a[A];let f;const E=l[A];if(p.mode===en.TRIANGLES||p.mode===en.TRIANGLE_STRIP||p.mode===en.TRIANGLE_FAN||p.mode===void 0)f=r.isSkinnedMesh===!0?new pu(m,E):new Et(m,E),f.isSkinnedMesh===!0&&f.normalizeSkinWeights(),p.mode===en.TRIANGLE_STRIP?f.geometry=fh(f.geometry,Bc):p.mode===en.TRIANGLE_FAN&&(f.geometry=fh(f.geometry,va));else if(p.mode===en.LINES)f=new mu(m,E);else if(p.mode===en.LINE_STRIP)f=new Wa(m,E);else if(p.mode===en.LINE_LOOP)f=new _u(m,E);else if(p.mode===en.POINTS)f=new bu(m,E);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+p.mode);Object.keys(f.geometry.morphAttributes).length>0&&Sb(f,r),f.name=t.createUniqueName(r.name||"mesh_"+e),Bn(f,r),p.extensions&&Ci(i,f,p),t.assignFinalMaterial(f),u.push(f)}for(let A=0,g=u.length;A<g;A++)t.associations.set(u[A],{meshes:e,primitives:A});if(u.length===1)return r.extensions&&Ci(i,u[0],r),u[0];const d=new ci;r.extensions&&Ci(i,d,r),t.associations.set(d,{meshes:e});for(let A=0,g=u.length;A<g;A++)d.add(u[A]);return d})}loadCamera(e){let t;const n=this.json.cameras[e],i=n[n.type];if(!i){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return n.type==="perspective"?t=new kt(cu.radToDeg(i.yfov),i.aspectRatio||1,i.znear||1,i.zfar||2e6):n.type==="orthographic"&&(t=new xr(-i.xmag,i.xmag,i.ymag,-i.ymag,i.znear,i.zfar)),n.name&&(t.name=this.createUniqueName(n.name)),Bn(t,n),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],n=[];for(let i=0,r=t.joints.length;i<r;i++)n.push(this._loadNodeShallow(t.joints[i]));return t.inverseBindMatrices!==void 0?n.push(this.getDependency("accessor",t.inverseBindMatrices)):n.push(null),Promise.all(n).then(function(i){const r=i.pop(),a=i,o=[],c=[];for(let l=0,h=a.length;l<h;l++){const u=a[l];if(u){o.push(u);const d=new Ue;r!==null&&d.fromArray(r.array,l*16),c.push(d)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[l])}return new Va(o,c)})}loadAnimation(e){const t=this.json,n=this,i=t.animations[e],r=i.name?i.name:"animation_"+e,a=[],o=[],c=[],l=[],h=[];for(let u=0,d=i.channels.length;u<d;u++){const A=i.channels[u],g=i.samplers[A.sampler],m=A.target,p=m.node,f=i.parameters!==void 0?i.parameters[g.input]:g.input,E=i.parameters!==void 0?i.parameters[g.output]:g.output;m.node!==void 0&&(a.push(this.getDependency("node",p)),o.push(this.getDependency("accessor",f)),c.push(this.getDependency("accessor",E)),l.push(g),h.push(m))}return Promise.all([Promise.all(a),Promise.all(o),Promise.all(c),Promise.all(l),Promise.all(h)]).then(function(u){const d=u[0],A=u[1],g=u[2],m=u[3],p=u[4],f=[];for(let I=0,x=d.length;I<x;I++){const v=d[I],y=A[I],w=g[I],R=m[I],b=p[I];if(v===void 0)continue;v.updateMatrix&&v.updateMatrix();const C=n._createAnimationTracks(v,y,w,R,b);if(C)for(let B=0;B<C.length;B++)f.push(C[B])}const E=new Ru(r,void 0,f);return Bn(E,i),E})}createNodeMesh(e){const t=this.json,n=this,i=t.nodes[e];return i.mesh===void 0?null:n.getDependency("mesh",i.mesh).then(function(r){const a=n._getNodeRef(n.meshCache,i.mesh,r);return i.weights!==void 0&&a.traverse(function(o){if(o.isMesh)for(let c=0,l=i.weights.length;c<l;c++)o.morphTargetInfluences[c]=i.weights[c]}),a})}loadNode(e){const t=this.json,n=this,i=t.nodes[e],r=n._loadNodeShallow(e),a=[],o=i.children||[];for(let l=0,h=o.length;l<h;l++)a.push(n.getDependency("node",o[l]));const c=i.skin===void 0?Promise.resolve(null):n.getDependency("skin",i.skin);return Promise.all([r,Promise.all(a),c]).then(function(l){const h=l[0],u=l[1],d=l[2];d!==null&&h.traverse(function(A){A.isSkinnedMesh&&A.bind(d,yb)});for(let A=0,g=u.length;A<g;A++)h.add(u[A]);return h})}_loadNodeShallow(e){const t=this.json,n=this.extensions,i=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const r=t.nodes[e],a=r.name?i.createUniqueName(r.name):"",o=[],c=i._invokeOne(function(l){return l.createNodeMesh&&l.createNodeMesh(e)});return c&&o.push(c),r.camera!==void 0&&o.push(i.getDependency("camera",r.camera).then(function(l){return i._getNodeRef(i.cameraCache,r.camera,l)})),i._invokeAll(function(l){return l.createNodeAttachment&&l.createNodeAttachment(e)}).forEach(function(l){o.push(l)}),this.nodeCache[e]=Promise.all(o).then(function(l){let h;if(r.isBone===!0?h=new kc:l.length>1?h=new ci:l.length===1?h=l[0]:h=new pt,h!==l[0])for(let u=0,d=l.length;u<d;u++)h.add(l[u]);if(r.name&&(h.userData.name=r.name,h.name=a),Bn(h,r),r.extensions&&Ci(n,h,r),r.matrix!==void 0){const u=new Ue;u.fromArray(r.matrix),h.applyMatrix4(u)}else r.translation!==void 0&&h.position.fromArray(r.translation),r.rotation!==void 0&&h.quaternion.fromArray(r.rotation),r.scale!==void 0&&h.scale.fromArray(r.scale);if(!i.associations.has(h))i.associations.set(h,{});else if(r.mesh!==void 0&&i.meshCache.refs[r.mesh]>1){const u=i.associations.get(h);i.associations.set(h,{...u})}return i.associations.get(h).nodes=e,h}),this.nodeCache[e]}loadScene(e){const t=this.extensions,n=this.json.scenes[e],i=this,r=new ci;n.name&&(r.name=i.createUniqueName(n.name)),Bn(r,n),n.extensions&&Ci(t,r,n);const a=n.nodes||[],o=[];for(let c=0,l=a.length;c<l;c++)o.push(i.getDependency("node",a[c]));return Promise.all(o).then(function(c){for(let h=0,u=c.length;h<u;h++)r.add(c[h]);const l=h=>{const u=new Map;for(const[d,A]of i.associations)(d instanceof In||d instanceof $e)&&u.set(d,A);return h.traverse(d=>{const A=i.associations.get(d);A!=null&&u.set(d,A)}),u};return i.associations=l(r),r})}_createAnimationTracks(e,t,n,i,r){const a=[],o=e.name?e.name:e.uuid,c=[];ti[r.path]===ti.weights?e.traverse(function(d){d.morphTargetInfluences&&c.push(d.name?d.name:d.uuid)}):c.push(o);let l;switch(ti[r.path]){case ti.weights:l=Pi;break;case ti.rotation:l=Ni;break;case ti.translation:case ti.scale:l=Qi;break;default:n.itemSize===1?l=Pi:l=Qi;break}const h=i.interpolation!==void 0?xb[i.interpolation]:bs,u=this._getArrayFromAccessor(n);for(let d=0,A=c.length;d<A;d++){const g=new l(c[d]+"."+ti[r.path],t.array,u,h);i.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(g),a.push(g)}return a}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const n=hc(t.constructor),i=new Float32Array(t.length);for(let r=0,a=t.length;r<a;r++)i[r]=t[r]*n;t=i}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(n){const i=this instanceof Ni?Eb:Yu;return new i(this.times,this.values,this.getValueSize()/3,n)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function Bb(s,e,t){const n=e.attributes,i=new jt;if(n.POSITION!==void 0){const o=t.json.accessors[n.POSITION],c=o.min,l=o.max;if(c!==void 0&&l!==void 0){if(i.set(new U(c[0],c[1],c[2]),new U(l[0],l[1],l[2])),o.normalized){const h=hc(us[o.componentType]);i.min.multiplyScalar(h),i.max.multiplyScalar(h)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const r=e.targets;if(r!==void 0){const o=new U,c=new U;for(let l=0,h=r.length;l<h;l++){const u=r[l];if(u.POSITION!==void 0){const d=t.json.accessors[u.POSITION],A=d.min,g=d.max;if(A!==void 0&&g!==void 0){if(c.setX(Math.max(Math.abs(A[0]),Math.abs(g[0]))),c.setY(Math.max(Math.abs(A[1]),Math.abs(g[1]))),c.setZ(Math.max(Math.abs(A[2]),Math.abs(g[2]))),d.normalized){const m=hc(us[d.componentType]);c.multiplyScalar(m)}o.max(c)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}i.expandByVector(o)}s.boundingBox=i;const a=new Jt;i.getCenter(a.center),a.radius=i.min.distanceTo(i.max)/2,s.boundingSphere=a}function mh(s,e,t){const n=e.attributes,i=[];function r(a,o){return t.getDependency("accessor",a).then(function(c){s.setAttribute(o,c)})}for(const a in n){const o=lc[a]||a.toLowerCase();o in s.attributes||i.push(r(n[a],o))}if(e.indices!==void 0&&!s.index){const a=t.getDependency("accessor",e.indices).then(function(o){s.setIndex(o)});i.push(a)}return He.workingColorSpace!==Rt&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${He.workingColorSpace}" not supported.`),Bn(s,e),Bb(s,e,t),Promise.all(i).then(function(){return e.targets!==void 0?Ib(s,e.targets,t):s})}var Tb=(function(){var s="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",t=new Uint8Array([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 i=WebAssembly.validate(t)?o(e):o(s),r,a=WebAssembly.instantiate(i,{}).then(function(f){r=f.instance,r.exports.__wasm_call_ctors()});function o(f){for(var E=new Uint8Array(f.length),I=0;I<f.length;++I){var x=f.charCodeAt(I);E[I]=x>96?x-97:x>64?x-39:x+4}for(var v=0,I=0;I<f.length;++I)E[v++]=E[I]<60?n[E[I]]:(E[I]-60)*64+E[++I];return E.buffer.slice(0,v)}function c(f,E,I,x,v,y,w){var R=f.exports.sbrk,b=x+3&-4,C=R(b*v),B=R(y.length),Q=new Uint8Array(f.exports.memory.buffer);Q.set(y,B);var N=E(C,x,v,B,y.length);if(N==0&&w&&w(C,b,v),I.set(Q.subarray(C,C+x*v)),R(C-R(0)),N!=0)throw new Error("Malformed buffer data: "+N)}var l={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},h={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},u=[],d=0;function A(f){var E={object:new Worker(f),pending:0,requests:{}};return E.object.onmessage=function(I){var x=I.data;E.pending-=x.count,E.requests[x.id][x.action](x.value),delete E.requests[x.id]},E}function g(f){for(var E="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(i)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+p.name+";"+c.toString()+p.toString(),I=new Blob([E],{type:"text/javascript"}),x=URL.createObjectURL(I),v=u.length;v<f;++v)u[v]=A(x);for(var v=f;v<u.length;++v)u[v].object.postMessage({});u.length=f,URL.revokeObjectURL(x)}function m(f,E,I,x,v){for(var y=u[0],w=1;w<u.length;++w)u[w].pending<y.pending&&(y=u[w]);return new Promise(function(R,b){var C=new Uint8Array(I),B=++d;y.pending+=f,y.requests[B]={resolve:R,reject:b},y.object.postMessage({id:B,count:f,size:E,source:C,mode:x,filter:v},[C.buffer])})}function p(f){var E=f.data;if(!E.id)return self.close();self.ready.then(function(I){try{var x=new Uint8Array(E.count*E.size);c(I,I.exports[E.mode],x,E.count,E.size,E.source,I.exports[E.filter]),self.postMessage({id:E.id,count:E.count,action:"resolve",value:x},[x.buffer])}catch(v){self.postMessage({id:E.id,count:E.count,action:"reject",value:v})}})}return{ready:a,supported:!0,useWorkers:function(f){g(f)},decodeVertexBuffer:function(f,E,I,x,v){c(r,r.exports.meshopt_decodeVertexBuffer,f,E,I,x,r.exports[l[v]])},decodeIndexBuffer:function(f,E,I,x){c(r,r.exports.meshopt_decodeIndexBuffer,f,E,I,x)},decodeIndexSequence:function(f,E,I,x){c(r,r.exports.meshopt_decodeIndexSequence,f,E,I,x)},decodeGltfBuffer:function(f,E,I,x,v,y){c(r,r.exports[h[v]],f,E,I,x,r.exports[l[y]])},decodeGltfBufferAsync:function(f,E,I,x,v){return u.length>0?m(f,E,I,h[x],l[v]):a.then(function(){var y=new Uint8Array(f*E);return c(r,r.exports[h[x]],y,f,E,I,r.exports[l[v]]),y})}}})();const Po=new WeakMap;class Rb extends Yn{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,t,n,i){const r=new di(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,a=>{this.parse(a,t,i)},n,i)}parse(e,t,n=()=>{}){this.decodeDracoFile(e,t,null,null,At,n).catch(n)}decodeDracoFile(e,t,n,i,r=Rt,a=()=>{}){const o={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:i||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:r};return this.decodeGeometry(e,o).then(t).catch(a)}decodeGeometry(e,t){const n=JSON.stringify(t);if(Po.has(e)){const c=Po.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 i;const r=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(r,a).then(c=>(i=c,new Promise((l,h)=>{i._callbacks[r]={resolve:l,reject:h},i.postMessage({type:"decode",id:r,taskConfig:t,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return o.catch(()=>!0).then(()=>{i&&r&&this._releaseTask(i,r)}),Po.set(e,{key:n,promise:o}),o}_createGeometry(e){const t=new bt;e.index&&t.setIndex(new vt(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const{name:i,array:r,itemSize:a,stride:o,vertexColorSpace:c}=e.attributes[n];let l;if(a===o)l=new vt(r,a);else{const h=new Ha(r,o);l=new vs(h,a,0)}i==="color"&&(this._assignVertexColorSpace(l,c),l.normalized=!(r instanceof Float32Array)),t.setAttribute(i,l)}return t}_assignVertexColorSpace(e,t){if(t!==At)return;const n=new De;for(let i=0,r=e.count;i<r;i++)n.fromBufferAttribute(e,i),He.colorSpaceToWorking(n,At),e.setXYZ(i,n.r,n.g,n.b)}_loadLibrary(e,t){const n=new di(this.manager);return n.setPath(this.decoderPath),n.setResponseType(t),n.setWithCredentials(this.withCredentials),new Promise((i,r)=>{n.load(e,i,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(n=>{const i=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const r=Db.toString(),a=["/* draco decoder */",i,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(`
|
|
4012
4012
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([a]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const i=new Worker(this.workerSourceURL);i._callbacks={},i._taskCosts={},i._taskLoad=0,i.postMessage({type:"init",decoderConfig:this.decoderConfig}),i.onmessage=function(r){const a=r.data;switch(a.type){case"decode":i._callbacks[a.id].resolve(a);break;case"error":i._callbacks[a.id].reject(a);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+a.type+'"')}},this.workerPool.push(i)}else this.workerPool.sort(function(i,r){return i._taskLoad>r._taskLoad?-1:1});const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}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 Db(){let s,e;onmessage=function(a){const o=a.data;switch(o.type){case"init":s=o.decoderConfig,e=new Promise(function(h){s.onModuleLoaded=function(u){h({draco:u})},DracoDecoderModule(s)});break;case"decode":const c=o.buffer,l=o.taskConfig;e.then(h=>{const u=h.draco,d=new u.Decoder;try{const A=t(u,d,new Int8Array(c),l),g=A.attributes.map(m=>m.array.buffer);A.index&&g.push(A.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:A},g)}catch(A){console.error(A),self.postMessage({type:"error",id:o.id,error:A.message})}finally{u.destroy(d)}});break}};function t(a,o,c,l){const h=l.attributeIDs,u=l.attributeTypes;let d,A;const g=o.GetEncodedGeometryType(c);if(g===a.TRIANGULAR_MESH)d=new a.Mesh,A=o.DecodeArrayToMesh(c,c.byteLength,d);else if(g===a.POINT_CLOUD)d=new a.PointCloud,A=o.DecodeArrayToPointCloud(c,c.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!A.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+A.error_msg());const m={index:null,attributes:[]};for(const p in h){const f=self[u[p]];let E,I;if(l.useUniqueIDs)I=h[p],E=o.GetAttributeByUniqueId(d,I);else{if(I=o.GetAttributeId(d,a[h[p]]),I===-1)continue;E=o.GetAttribute(d,I)}const x=i(a,o,d,p,f,E);p==="color"&&(x.vertexColorSpace=l.vertexColorSpace),m.attributes.push(x)}return g===a.TRIANGULAR_MESH&&(m.index=n(a,o,d)),a.destroy(d),m}function n(a,o,c){const h=c.num_faces()*3,u=h*4,d=a._malloc(u);o.GetTrianglesUInt32Array(c,u,d);const A=new Uint32Array(a.HEAPF32.buffer,d,h).slice();return a._free(d),{array:A,itemSize:1}}function i(a,o,c,l,h,u){const d=c.num_points(),A=u.num_components(),g=r(a,h),m=A*h.BYTES_PER_ELEMENT,p=Math.ceil(m/4)*4,f=p/h.BYTES_PER_ELEMENT,E=d*m,I=d*p,x=a._malloc(E);o.GetAttributeDataArrayForAllPoints(c,u,g,E,x);const v=new h(a.HEAPF32.buffer,x,E/h.BYTES_PER_ELEMENT);let y;if(m===p)y=v.slice();else{y=new h(I/h.BYTES_PER_ELEMENT);let w=0;for(let R=0,b=v.length;R<b;R++){for(let C=0;C<A;C++)y[w+C]=v[R*A+C];w+=f}}return a._free(x),{name:l,count:d,itemSize:A,array:y,stride:f}}function r(a,o){switch(o){case Float32Array:return a.DT_FLOAT32;case Int8Array:return a.DT_INT8;case Int16Array:return a.DT_INT16;case Int32Array:return a.DT_INT32;case Uint8Array:return a.DT_UINT8;case Uint16Array:return a.DT_UINT16;case Uint32Array:return a.DT_UINT32}}}class Lb{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0,this.workerCreator=null}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const n=this.workersResolve[e];if(n&&n(t),this.queue.length){const{resolve:i,msg:r,transfer:a}=this.queue.shift();this.workersResolve[e]=i,this.workers[e].postMessage(r,a)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise(n=>{const i=this._getIdleWorker();i!==-1?(this._initWorker(i),this.workerStatus|=1<<i,this.workersResolve[i]=n,this.workers[i].postMessage(e,t)):this.queue.push({resolve:n,msg:e,transfer:t})})}dispose(){this.workers.forEach(e=>e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const Fb=0,_h=2,Ub=1,bh=2,Pb=0,Nb=1,Qb=10,Ob=0,Ku=9,ju=15,Ju=16,Zu=22,$u=37,ed=43,td=76,nd=83,id=97,sd=100,rd=103,ad=109,od=122,cd=123,ld=131,hd=132,ud=133,dd=134,fd=137,Ad=138,pd=139,gd=140,md=141,_d=142,bd=145,Ed=146,xd=148,Cd=152,uc=153,kb=154,dc=155,Gb=156,Id=157,Sd=158,vd=165,Md=166,yd=1000054e3,wd=1000054001,Bd=1000054004,Td=1000054005,jc=1000066e3,Rd=1000066004;class Gs{constructor(e,t,n,i){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+t,n),this._littleEndian=i,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 t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,t}_skip(e){return this._offset+=e,this}_scan(e,t=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==t&&i<e;)i++,this._offset++;return i<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,i)}}const Qt=[171,75,84,88,32,50,48,187,13,10,26,10];function Eh(s){return new TextDecoder().decode(s)}function Hb(s){const e=new Uint8Array(s.buffer,s.byteOffset,Qt.length);if(e[0]!==Qt[0]||e[1]!==Qt[1]||e[2]!==Qt[2]||e[3]!==Qt[3]||e[4]!==Qt[4]||e[5]!==Qt[5]||e[6]!==Qt[6]||e[7]!==Qt[7]||e[8]!==Qt[8]||e[9]!==Qt[9]||e[10]!==Qt[10]||e[11]!==Qt[11])throw new Error("Missing KTX 2.0 identifier.");const t={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,i=new Gs(s,Qt.length,n,!0);t.vkFormat=i._nextUint32(),t.typeSize=i._nextUint32(),t.pixelWidth=i._nextUint32(),t.pixelHeight=i._nextUint32(),t.pixelDepth=i._nextUint32(),t.layerCount=i._nextUint32(),t.faceCount=i._nextUint32(),t.levelCount=i._nextUint32(),t.supercompressionScheme=i._nextUint32();const r=i._nextUint32(),a=i._nextUint32(),o=i._nextUint32(),c=i._nextUint32(),l=i._nextUint64(),h=i._nextUint64(),u=3*Math.max(t.levelCount,1)*8,d=new Gs(s,Qt.length+n,u,!0);for(let Z=0,be=Math.max(t.levelCount,1);Z<be;Z++)t.levels.push({levelData:new Uint8Array(s.buffer,s.byteOffset+d._nextUint64(),d._nextUint64()),uncompressedByteLength:d._nextUint64()});const A=new Gs(s,r,a,!0);A._skip(4);const g=A._nextUint16(),m=A._nextUint16(),p=A._nextUint16(),f=A._nextUint16(),E={vendorId:g,descriptorType:m,versionNumber:p,colorModel:A._nextUint8(),colorPrimaries:A._nextUint8(),transferFunction:A._nextUint8(),flags:A._nextUint8(),texelBlockDimension:[A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8()],bytesPlane:[A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8()],samples:[]},I=(f/4-6)/4;for(let Z=0;Z<I;Z++){const be={bitOffset:A._nextUint16(),bitLength:A._nextUint8(),channelType:A._nextUint8(),samplePosition:[A._nextUint8(),A._nextUint8(),A._nextUint8(),A._nextUint8()],sampleLower:Number.NEGATIVE_INFINITY,sampleUpper:Number.POSITIVE_INFINITY};64&be.channelType?(be.sampleLower=A._nextInt32(),be.sampleUpper=A._nextInt32()):(be.sampleLower=A._nextUint32(),be.sampleUpper=A._nextUint32()),E.samples[Z]=be}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(E);const x=new Gs(s,o,c,!0);for(;x._offset<c;){const Z=x._nextUint32(),be=x._scan(Z),ye=Eh(be);if(t.keyValue[ye]=x._nextUint8Array(Z-be.byteLength-1),ye.match(/^ktx/i)){const st=Eh(t.keyValue[ye]);t.keyValue[ye]=st.substring(0,st.lastIndexOf("\0"))}x._skip(Z%4?4-Z%4:0)}if(h<=0)return t;const v=new Gs(s,l,h,!0),y=v._nextUint16(),w=v._nextUint16(),R=v._nextUint32(),b=v._nextUint32(),C=v._nextUint32(),B=v._nextUint32(),Q=[];for(let Z=0,be=Math.max(t.levelCount,1);Z<be;Z++)Q.push({imageFlags:v._nextUint32(),rgbSliceByteOffset:v._nextUint32(),rgbSliceByteLength:v._nextUint32(),alphaSliceByteOffset:v._nextUint32(),alphaSliceByteLength:v._nextUint32()});const N=l+v._offset,V=N+R,W=V+b,k=W+C,H=new Uint8Array(s.buffer,s.byteOffset+N,R),Y=new Uint8Array(s.buffer,s.byteOffset+V,b),se=new Uint8Array(s.buffer,s.byteOffset+W,C),ne=new Uint8Array(s.buffer,s.byteOffset+k,B);return t.globalData={endpointCount:y,selectorCount:w,imageDescs:Q,endpointsData:H,selectorsData:Y,tablesData:se,extendedData:ne},t}let No,Gn,fc;const Qo={env:{emscripten_notify_memory_growth:function(s){fc=new Uint8Array(Gn.exports.memory.buffer)}}};class Vb{init(){return No||(No=typeof fetch<"u"?fetch("data:application/wasm;base64,"+xh).then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,Qo)).then(this._init):WebAssembly.instantiate(Buffer.from(xh,"base64"),Qo).then(this._init),No)}_init(e){Gn=e.instance,Qo.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!Gn)throw new Error("ZSTDDecoder: Await .init() before decoding.");const n=e.byteLength,i=Gn.exports.malloc(n);fc.set(e,i),t=t||Number(Gn.exports.ZSTD_findDecompressedSize(i,n));const r=Gn.exports.malloc(t),a=Gn.exports.ZSTD_decompress(r,t,i,n),o=fc.slice(r,r+a);return Gn.exports.free(i),Gn.exports.free(r),o}}const xh="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",zb="display-p3",Wb="display-p3-linear";({...He.spaces[At]});const Oo=new WeakMap;let ko=0,Go;class nn extends Yn{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Lb,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 console.warn('KTX2Loader: "detectSupportAsync()" has been deprecated. Use "detectSupport()" and "await renderer.init();" when creating the renderer.'),await e.init(),this.detectSupport(e)}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-s3tc"),bptcSupported:e.hasFeature("texture-compression-bc"),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")},typeof navigator<"u"&&navigator.platform.indexOf("Linux")>=0&&navigator.userAgent.indexOf("Firefox")>=0&&this.workerConfig.astcSupported&&this.workerConfig.etc2Supported&&this.workerConfig.bptcSupported&&this.workerConfig.dxtSupported&&(this.workerConfig.astcSupported=!1,this.workerConfig.etc2Supported=!1)),this}init(){if(!this.transcoderPending){const e=new di(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),n=new di(this.manager);n.setPath(this.transcoderPath),n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials);const i=n.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,i]).then(([r,a])=>{const o=nn.BasisWorker.toString(),c=["/* constants */","let _EngineFormat = "+JSON.stringify(nn.EngineFormat),"let _EngineType = "+JSON.stringify(nn.EngineType),"let _TranscoderFormat = "+JSON.stringify(nn.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(nn.BasisFormat),"/* basis_transcoder.js */",r,"/* worker */",o.substring(o.indexOf("{")+1,o.lastIndexOf("}"))].join(`
|
|
4013
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([c])),this.transcoderBinary=a,this.workerPool.setWorkerCreator(()=>{const l=new Worker(this.workerSourceURL),h=this.transcoderBinary.slice(0);return l.postMessage({type:"init",config:this.workerConfig,transcoderBinary:h},[h]),l})}),ko>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),ko++}return this.transcoderPending}load(e,t,n,i){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const r=new di(this.manager);r.setPath(this.path),r.setCrossOrigin(this.crossOrigin),r.setWithCredentials(this.withCredentials),r.setRequestHeader(this.requestHeader),r.setResponseType("arraybuffer"),r.load(e,a=>{this.parse(a,t,i)},n,i)}parse(e,t,n){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Oo.has(e))return Oo.get(e).promise.then(t).catch(n);this._createTexture(e).then(i=>t?t(i):null).catch(n)}_createTextureFrom(e,t){const{type:n,error:i,data:{faces:r,width:a,height:o,format:c,type:l,dfdFlags:h}}=e;if(n==="error")return Promise.reject(i);let u;if(t.faceCount===6)u=new xu(r,c,l);else{const d=r[0].mipmaps;u=t.layerCount>1?new Eu(d,a,o,t.layerCount,c,l):new Ms(d,a,o,c,l)}return u.minFilter=r[0].mipmaps.length===1?ft:rn,u.magFilter=ft,u.generateMipmaps=!1,u.needsUpdate=!0,u.colorSpace=Dd(t),u.premultiplyAlpha=!!(h&Ub),u}async _createTexture(e,t={}){const n=Hb(new Uint8Array(e)),i=n.vkFormat===jc&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===Ob||i&&!this.workerConfig.astcHDRSupported))return Xb(n);const a=t,o=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:a},[e])).then(c=>this._createTextureFrom(c.data,n));return Oo.set(e,{promise:o}),o}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),ko--}}nn.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2};nn.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};nn.EngineFormat={RGBAFormat:St,RGBA_ASTC_4x4_Format:ui,RGB_BPTC_UNSIGNED_Format:sr,RGBA_BPTC_Format:Ui,RGBA_ETC2_EAC_Format:ms,RGBA_PVRTC_4BPPV1_Format:Fi,RGBA_S3TC_DXT5_Format:cs,RGB_ETC1_Format:$s,RGB_ETC2_Format:gs,RGB_PVRTC_4BPPV1_Format:Zs,RGBA_S3TC_DXT1_Format:hi};nn.EngineType={UnsignedByteType:Re,HalfFloatType:Dt,FloatType:Tt};nn.BasisWorker=function(){let s,e,t;const n=_EngineFormat,i=_EngineType,r=_TranscoderFormat,a=_BasisFormat;self.addEventListener("message",function(g){const m=g.data;switch(m.type){case"init":s=m.config,o(m.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:p,buffers:f,width:E,height:I,hasAlpha:x,format:v,type:y,dfdFlags:w}=c(m.buffer);self.postMessage({type:"transcode",id:m.id,data:{faces:p,width:E,height:I,hasAlpha:x,format:v,type:y,dfdFlags:w}},f)}catch(p){console.error(p),self.postMessage({type:"error",id:m.id,error:p.message})}});break}});function o(g){e=new Promise(m=>{t={wasmBinary:g,onRuntimeInitialized:m},BASIS(t)}).then(()=>{t.initializeBasis(),t.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function c(g){const m=new t.KTX2File(new Uint8Array(g));function p(){m.close(),m.delete()}if(!m.isValid())throw p(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let f;if(m.isUASTC())f=a.UASTC;else if(m.isETC1S())f=a.ETC1S;else if(m.isHDR())f=a.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const E=m.getWidth(),I=m.getHeight(),x=m.getLayers()||1,v=m.getLevels(),y=m.getFaces(),w=m.getHasAlpha(),R=m.getDFDFlags(),{transcoderFormat:b,engineFormat:C,engineType:B}=u(f,E,I,w);if(!E||!I||!v)throw p(),new Error("THREE.KTX2Loader: Invalid texture");if(!m.startTranscoding())throw p(),new Error("THREE.KTX2Loader: .startTranscoding failed");const Q=[],N=[];for(let V=0;V<y;V++){const W=[];for(let k=0;k<v;k++){const H=[];let Y,se;for(let Z=0;Z<x;Z++){const be=m.getImageLevelInfo(k,Z,V);V===0&&k===0&&Z===0&&(be.origWidth%4!==0||be.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),v>1?(Y=be.origWidth,se=be.origHeight):(Y=be.width,se=be.height);let ye=new Uint8Array(m.getImageTranscodedSizeInBytes(k,Z,0,b));const st=m.transcodeImage(ye,k,Z,V,b,0,-1,-1);if(B===i.HalfFloatType&&(ye=new Uint16Array(ye.buffer,ye.byteOffset,ye.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!st)throw p(),new Error("THREE.KTX2Loader: .transcodeImage failed.");H.push(ye)}const ne=A(H);W.push({data:ne,width:Y,height:se}),N.push(ne.buffer)}Q.push({mipmaps:W,width:E,height:I,format:C,type:B})}return p(),{faces:Q,buffers:N,width:E,height:I,hasAlpha:w,dfdFlags:R,format:C,type:B}}const l=[{if:"astcSupported",basisFormat:[a.UASTC],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],engineType:[i.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],engineType:[i.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.BC1,r.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],engineType:[i.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],engineType:[i.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.ETC1],engineFormat:[n.RGB_ETC1_Format],engineType:[i.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],engineType:[i.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[a.UASTC_HDR],transcoderFormat:[r.BC6H],engineFormat:[n.RGB_BPTC_UNSIGNED_Format],engineType:[i.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.RGBA32,r.RGBA32],engineFormat:[n.RGBAFormat,n.RGBAFormat],engineType:[i.UnsignedByteType,i.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[a.UASTC_HDR],transcoderFormat:[r.RGBA_HALF],engineFormat:[n.RGBAFormat],engineType:[i.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],h={[a.ETC1S]:l.filter(g=>g.basisFormat.includes(a.ETC1S)).sort((g,m)=>g.priorityETC1S-m.priorityETC1S),[a.UASTC]:l.filter(g=>g.basisFormat.includes(a.UASTC)).sort((g,m)=>g.priorityUASTC-m.priorityUASTC),[a.UASTC_HDR]:l.filter(g=>g.basisFormat.includes(a.UASTC_HDR)).sort((g,m)=>g.priorityHDR-m.priorityHDR)};function u(g,m,p,f){const E=h[g];for(let I=0;I<E.length;I++){const x=E[I];if(x.if&&!s[x.if]||!x.basisFormat.includes(g)||f&&x.transcoderFormat.length<2||x.needsPowerOfTwo&&!(d(m)&&d(p)))continue;const v=x.transcoderFormat[f?1:0],y=x.engineFormat[f?1:0],w=x.engineType[0];return{transcoderFormat:v,engineFormat:y,engineType:w}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function d(g){return g<=2?!0:(g&g-1)===0&&g!==0}function A(g){if(g.length===1)return g[0];let m=0;for(let E=0;E<g.length;E++){const I=g[E];m+=I.byteLength}const p=new Uint8Array(m);let f=0;for(let E=0;E<g.length;E++){const I=g[E];p.set(I,f),f+=I.byteLength}return p}};const qb=new Set([St,As,an,Vn]),Ho={[ad]:St,[rd]:an,[sd]:Vn,[id]:St,[nd]:an,[td]:Vn,[ed]:St,[$u]:St,[Zu]:an,[Ju]:an,[ju]:Vn,[Ku]:Vn,[cd]:As,[od]:As,[Cd]:ms,[xd]:gs,[uc]:er,[kb]:tr,[dc]:nr,[Gb]:ir,[jc]:ui,[Sd]:ui,[Id]:ui,[Rd]:Bi,[Md]:Bi,[vd]:Bi,[dd]:hi,[ud]:hi,[hd]:yi,[ld]:yi,[Ad]:wi,[fd]:wi,[gd]:ar,[pd]:rr,[_d]:cr,[md]:or,[Ed]:Ui,[bd]:Ui,[Td]:Fi,[wd]:Fi,[Bd]:ps,[yd]:ps},ss={[ad]:Tt,[rd]:Tt,[sd]:Tt,[id]:Dt,[nd]:Dt,[td]:Dt,[ed]:Re,[$u]:Re,[Zu]:Re,[Ju]:Re,[ju]:Re,[Ku]:Re,[cd]:pr,[od]:gr,[Cd]:Re,[xd]:Re,[uc]:Re,[uc]:Re,[dc]:Re,[dc]:Re,[jc]:Dt,[Sd]:Re,[Id]:Re,[Rd]:Dt,[Md]:Re,[vd]:Re,[dd]:Re,[ud]:Re,[hd]:Re,[ld]:Re,[Ad]:Re,[fd]:Re,[gd]:Re,[pd]:Re,[_d]:Re,[md]:Re,[Ed]:Re,[bd]:Re,[Td]:Re,[wd]:Re,[Bd]:Re,[yd]:Re};async function Xb(s){const{vkFormat:e}=s;if(Ho[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat: "+e);ss[e]===void 0&&console.warn('THREE.KTX2Loader: Missing ".type" for vkFormat: '+e);let t;s.supercompressionScheme===_h&&(Go||(Go=new Promise(async a=>{const o=new Vb;await o.init(),a(o)})),t=await Go);const n=[];for(let a=0;a<s.levels.length;a++){const o=Math.max(1,s.pixelWidth>>a),c=Math.max(1,s.pixelHeight>>a),l=s.pixelDepth?Math.max(1,s.pixelDepth>>a):0,h=s.levels[a];let u;if(s.supercompressionScheme===Fb)u=h.levelData;else if(s.supercompressionScheme===_h)u=t.decode(h.levelData,h.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let d;ss[e]===Tt?d=new Float32Array(u.buffer,u.byteOffset,u.byteLength/Float32Array.BYTES_PER_ELEMENT):ss[e]===Dt?d=new Uint16Array(u.buffer,u.byteOffset,u.byteLength/Uint16Array.BYTES_PER_ELEMENT):ss[e]===pr||ss[e]===gr?d=new Uint32Array(u.buffer,u.byteOffset,u.byteLength/Uint32Array.BYTES_PER_ELEMENT):d=u,n.push({data:d,width:o,height:c,depth:l})}const i=s.levelCount===0||n.length>1;let r;if(qb.has(Ho[e]))r=s.pixelDepth===0?new _r(n[0].data,s.pixelWidth,s.pixelHeight):new Lc(n[0].data,s.pixelWidth,s.pixelHeight,s.pixelDepth),r.minFilter=i?Da:_t,r.magFilter=_t,r.generateMipmaps=s.levelCount===0;else{if(s.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");r=new Ms(n,s.pixelWidth,s.pixelHeight),r.minFilter=i?rn:ft,r.magFilter=ft}return r.mipmaps=n,r.type=ss[e],r.format=Ho[e],r.colorSpace=Dd(s),r.needsUpdate=!0,Promise.resolve(r)}function Dd(s){const e=s.dataFormatDescriptor[0];return e.colorPrimaries===Nb?e.transferFunction===bh?At:Rt:e.colorPrimaries===Qb?e.transferFunction===bh?zb:Wb:(e.colorPrimaries===Pb||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),pn)}let _n="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",Ti="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Yb=_n,Kb=Ti,Ld=new URL(_n+"draco_decoder.js");Ld.searchParams.append("range","true");fetch(Ld,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(s=>{console.debug(`Failed to fetch remote Draco decoder from ${_n} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),_n===Yb&&Fd("./include/draco/"),Ti===Kb&&Ud("./include/ktx2/")}).finally(()=>{Pd()});const jb=()=>({dracoDecoderPath:_n,ktx2TranscoderPath:Ti});function Fd(s){_n=s,Kt&&Kt[Ac]!=_n?(console.debug("Updating Draco decoder path to "+s),Kt[Ac]=_n,Kt.setDecoderPath(_n),Kt.preload()):console.debug("Setting Draco decoder path to "+s)}function Ud(s){Ti=s,bn&&bn.transcoderPath!=Ti?(console.debug("Updating KTX2 transcoder path to "+s),bn.setTranscoderPath(Ti),bn.init()):console.debug("Setting KTX2 transcoder path to "+s)}function Ka(s){return Pd(),s?bn.detectSupport(s):s!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:Kt,ktx2Loader:bn,meshoptDecoder:Ta}}function Jc(s){s.dracoLoader||s.setDRACOLoader(Kt),s.ktx2Loader||s.setKTX2Loader(bn),s.meshoptDecoder||s.setMeshoptDecoder(Ta)}const Ac=Symbol("dracoDecoderPath");let Kt,Ta,bn;function Pd(){Kt||(Kt=new Rb,Kt[Ac]=_n,Kt.setDecoderPath(_n),Kt.setDecoderConfig({type:"js"}),Kt.preload()),bn||(bn=new nn,bn.setTranscoderPath(Ti),bn.init()),Ta||(Ta=Tb)}const pc=new WeakMap;function Zc(s,e){let t=pc.get(s);t?t=Object.assign(t,e):t=e,pc.set(s,t)}const Jb=Kc.prototype.load;function Zb(...s){const e=pc.get(this);let t=s[0];const n=new URL(t,window.location.href);if(n.hostname.endsWith("needle.tools")){const r=e?.progressive!==void 0?e.progressive:!0,a=e?.usecase?e.usecase:"default";r?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${a}`:this.requestHeader.Accept=`*/*;usecase=${a}`,t=n.toString()}return s[0]=t,Jb?.call(this,...s)}Kc.prototype.load=Zb;fi("debugprogressive");function fi(s){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(s);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function $b(s,e){if(e===void 0||s===void 0||e.startsWith("./")||e.startsWith("http")||e.startsWith("data:")||e.startsWith("blob:"))return e;const t=s.lastIndexOf("/");if(t>=0){const n=s.substring(0,t+1);for(;n.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return n+e}return e}function $c(){return Hs!==void 0||(Hs=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),fi("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",Hs)),Hs}let Hs;function Ch(){if(typeof window>"u")return!1;const s=new URL(window.location.href),e=s.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(s.hostname);return s.hostname==="127.0.0.1"||e}class eE{constructor(e,t={}){this.maxConcurrent=e,this.debug=t.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(e){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${e}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(t=>{this._queue.push({key:e,resolve:t})})}add(e,t){this._running.has(e)||(this._running.set(e,t),t.finally(()=>{this._running.delete(e),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${e})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${e})`))}internalUpdate(){const e=this.maxConcurrent-this._running.size;for(let t=0;t<e&&this._queue.length>0;t++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:n,resolve:i}=this._queue.shift();i({use:r=>this.add(n,r)})}}}function tE(s){const e=s.image?.width??0,t=s.image?.height??0,n=s.image?.depth??1,i=Math.floor(Math.log2(Math.max(e,t,n)))+1,r=nE(s);return e*t*n*r*(1-Math.pow(.25,i))/(1-.25)}function nE(s){let e=4;const t=s.format;t===1024||t===1025?e=1:t===1026||t===1027?e=2:t===1022||t===1029?e=3:(t===1023||t===1033)&&(e=4);let n=1;const i=s.type;return i===1009||i===1010?n=1:i===1011||i===1012?n=2:i===1013||i===1014||i===1015?n=4:i===1016&&(n=2),e*n}const iE=typeof window>"u"&&typeof document>"u",gc=Symbol("needle:raycast-mesh");function Bs(s){return s?.[gc]instanceof bt?s[gc]:null}function sE(s,e){if((s.type==="Mesh"||s.type==="SkinnedMesh")&&!Bs(s)){const n=aE(e);n.userData={isRaycastMesh:!0},s[gc]=n}}function rE(s=!0){if(s){if(Vs)return;const e=Vs=Et.prototype.raycast;Et.prototype.raycast=function(t,n){const i=this,r=Bs(i);let a;r&&i.isMesh&&(a=i.geometry,i.geometry=r),e.call(this,t,n),a&&(i.geometry=a)}}else{if(!Vs)return;Et.prototype.raycast=Vs,Vs=null}}let Vs=null;function aE(s){const e=new bt;for(const t in s.attributes)e.setAttribute(t,s.getAttribute(t));return e.setIndex(s.getIndex()),e}const si=new Array,Ne=fi("debugprogressive");let js,Si=-1;if(Ne){let s=function(){Si+=1,Si>=e&&(Si=-1),console.log(`Toggle LOD level [${Si}]`)},e=6;window.addEventListener("keyup",t=>{t.key==="p"&&s(),t.key==="w"&&(js=!js,console.log(`Toggle wireframe [${js}]`));const n=parseInt(t.key);!isNaN(n)&&n>=0&&(Si=n,console.log(`Set LOD level to [${Si}]`))})}function Nd(s){if(Ne&&js!==void 0)if(Array.isArray(s))for(const e of s)Nd(e);else s&&"wireframe"in s&&(s.wireframe=js===!0)}const zs=new Array;let oE=0;const cE=$c()?2:10;function lE(s){if(zs.length<cE){const n=zs.length;Ne&&console.warn(`[Worker] Creating new worker #${n}`);const i=el.createWorker(s||{});return zs.push(i),i}const e=oE++%zs.length;return zs[e]}class el{constructor(e,t){this.worker=e,this._debug=t.debug??!1,e.onmessage=n=>{const i=n.data;switch(this._debug&&console.log("[Worker] EVENT",i),i.type){case"loaded-gltf":for(const r of this._running)if(r.url===i.result.url){hE(i.result),r.resolve(i.result);const a=r.url;a.startsWith("blob:")&&URL.revokeObjectURL(a)}}},e.onerror=n=>{console.error("[Worker] Error in gltf-progressive worker:",n)},e.postMessage({type:"init"})}static async createWorker(e){const t=new Worker(new URL("/loader.worker-CCrD-Ycm.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:$a&&$a.tagName.toUpperCase()==="SCRIPT"&&$a.src||new URL("gltf-progressive-Ck_bXBr_.umd.cjs",document.baseURI).href),{type:"module"});return new el(t,e)}_running=[];_webglRenderer=null;async load(e,t){const n=jb();let i=t?.renderer;i||(this._webglRenderer??=(async()=>{const{WebGLRenderer:l}=await Promise.resolve().then(()=>K_);return new l})(),i=await this._webglRenderer);const o=Ka(i).ktx2Loader.workerConfig;e instanceof URL?e=e.toString():e.startsWith("file:")?e=URL.createObjectURL(new Blob([e])):!e.startsWith("blob:")&&!e.startsWith("http:")&&!e.startsWith("https:")&&(e=new URL(e,window.location.href).toString());const c={type:"load",url:e,dracoDecoderPath:n.dracoDecoderPath,ktx2TranscoderPath:n.ktx2TranscoderPath,ktx2LoaderConfig:o};return this._debug&&console.debug("[Worker] Sending load request",c),this.worker.postMessage(c),new Promise(l=>{this._running.push({url:e.toString(),resolve:l})})}_debug=!1}function hE(s){for(const e of s.geometries){const t=e.geometry,n=new bt;if(n.name=t.name||"",t.index){const i=t.index;n.setIndex(Vo(i))}for(const i in t.attributes){const r=t.attributes[i],a=Vo(r);n.setAttribute(i,a)}if(t.morphAttributes)for(const i in t.morphAttributes){const a=t.morphAttributes[i].map(o=>Vo(o));n.morphAttributes[i]=a}if(n.morphTargetsRelative=t.morphTargetsRelative??!1,n.boundingBox=new jt,n.boundingBox.min=new U(t.boundingBox?.min.x,t.boundingBox?.min.y,t.boundingBox?.min.z),n.boundingBox.max=new U(t.boundingBox?.max.x,t.boundingBox?.max.y,t.boundingBox?.max.z),n.boundingSphere=new Jt(new U(t.boundingSphere?.center.x,t.boundingSphere?.center.y,t.boundingSphere?.center.z),t.boundingSphere?.radius),t.groups)for(const i of t.groups)n.addGroup(i.start,i.count,i.materialIndex);t.userData&&(n.userData=t.userData),e.geometry=n}for(const e of s.textures){const t=e.texture;let n=null;if(t.isCompressedTexture){const i=t.mipmaps,r=t.image?.width||t.source?.data?.width||-1,a=t.image?.height||t.source?.data?.height||-1;n=new Ms(i,r,a,t.format,t.type,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.anisotropy,t.colorSpace)}else n=new $e(t.image,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),n.mipmaps=t.mipmaps,n.channel=t.channel,n.source.data=t.source.data,n.flipY=t.flipY,n.premultiplyAlpha=t.premultiplyAlpha,n.unpackAlignment=t.unpackAlignment,n.matrix=new Fe(...t.matrix.elements);if(!n){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}e.texture=n}return s}function Vo(s){let e=s;if("isInterleavedBufferAttribute"in s&&s.isInterleavedBufferAttribute){const t=s.data,n=t.array,i=new Ha(n,t.stride);e=new vs(i,s.itemSize,n.byteOffset,s.normalized),e.offset=s.offset}else"isBufferAttribute"in s&&s.isBufferAttribute&&(e=new vt(s.array,s.itemSize,s.normalized),e.usage=s.usage,e.gpuType=s.gpuType,e.updateRanges=s.updateRanges);return e}const uE=fi("gltf-progressive-worker");fi("gltf-progressive-reduce-mipmaps");const rs=fi("gltf-progressive-gc"),zo=Symbol("needle-progressive-texture"),Hn="NEEDLE_progressive";class We{get name(){return Hn}static getMeshLODExtension(e){const t=this.getAssignedLODInformation(e);return t?.key?this.lodInfos.get(t.key):null}static getPrimitiveIndex(e){const t=this.getAssignedLODInformation(e)?.index;return t??-1}static getMaterialMinMaxLODsCount(e,t){const n=this,i="LODS:minmax",r=e[i];if(r!=null)return r;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const o of e)this.getMaterialMinMaxLODsCount(o,t);return e[i]=t,t}if(Ne==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const o=e;for(const c of Object.keys(o.uniforms)){const l=o.uniforms[c].value;l?.isTexture===!0&&a(l,t)}}else if(e.isMaterial)for(const o of Object.keys(e)){const c=e[o];c?.isTexture===!0&&a(c,t)}else Ne&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${e.type}`);return e[i]=t,t;function a(o,c){const l=n.getAssignedLODInformation(o);if(l){const h=n.lodInfos.get(l.key);if(h&&h.lods){c.min_count=Math.min(c.min_count,h.lods.length),c.max_count=Math.max(c.max_count,h.lods.length);for(let u=0;u<h.lods.length;u++){const d=h.lods[u];d.width&&(c.lods[u]=c.lods[u]||{min_height:1/0,max_height:0},c.lods[u].min_height=Math.min(c.lods[u].min_height,d.height),c.lods[u].max_height=Math.max(c.lods[u].max_height,d.height))}}}}}static hasLODLevelAvailable(e,t){if(Array.isArray(e)){for(const r of e)if(this.hasLODLevelAvailable(r,t))return!0;return!1}if(e.isMaterial===!0){for(const r of Object.keys(e)){const a=e[r];if(a&&a.isTexture&&this.hasLODLevelAvailable(a,t))return!0}return!1}else if(e.isGroup===!0){for(const r of e.children)if(r.isMesh===!0&&this.hasLODLevelAvailable(r,t))return!0}let n,i;if(e.isMesh?n=e.geometry:(e.isBufferGeometry||e.isTexture)&&(n=e),n&&n?.userData?.LODS){const r=n.userData.LODS;if(i=this.lodInfos.get(r.key),t===void 0)return i!=null;if(i)return Array.isArray(i.lods)?t<i.lods.length:t===0}return!1}static assignMeshLOD(e,t){if(!e)return Promise.resolve(null);if(e instanceof Et||e.isMesh===!0){const n=e.geometry,i=this.getAssignedLODInformation(n);if(!i)return Promise.resolve(null);for(const r of si)r.onBeforeGetLODMesh?.(e,t);return e["LOD:requested level"]=t,We.getOrLoadLOD(n,t).then(r=>{if(Array.isArray(r)){const a=i.index||0;r=r[a]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],r&&n!=r&&(r?.isBufferGeometry?e.geometry=r:Ne&&console.error("Invalid LOD geometry",r))),r}).catch(r=>(console.error("Error loading mesh LOD",e,r),null))}else Ne&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const n=e;if(Array.isArray(n.material)){const i=new Array;for(const r of n.material){const a=this.assignTextureLOD(r,t);i.push(a)}return Promise.all(i).then(r=>{const a=new Array;for(const o of r)Array.isArray(o)&&a.push(...o);return a})}else return this.assignTextureLOD(n.material,t)}if(e.isMaterial===!0){const n=e,i=[],r=new Array;if(n.uniforms&&(n.isRawShaderMaterial||n.isShaderMaterial===!0)){const a=n;for(const o of Object.keys(a.uniforms)){const c=a.uniforms[o].value;if(c?.isTexture===!0){const l=this.assignTextureLODForSlot(c,t,n,o).then(h=>(h&&a.uniforms[o].value!=h&&(a.uniforms[o].value=h,a.uniformsNeedUpdate=!0),h));i.push(l),r.push(o)}}}else for(const a of Object.keys(n)){const o=n[a];if(o?.isTexture===!0){const c=this.assignTextureLODForSlot(o,t,n,a);i.push(c),r.push(a)}}return Promise.all(i).then(a=>{const o=new Array;for(let c=0;c<a.length;c++){const l=a[c],h=r[c];l&&l.isTexture===!0?o.push({material:n,slot:h,texture:l,level:t}):o.push({material:n,slot:h,texture:null,level:t})}return o})}if(e instanceof $e||e.isTexture===!0){const n=e;return this.assignTextureLODForSlot(n,t,null,null)}return Promise.resolve(null)}static set maxConcurrentLoadingTasks(e){We.queue.maxConcurrent=e}static get maxConcurrentLoadingTasks(){return We.queue.maxConcurrent}static assignTextureLODForSlot(e,t,n,i){return e?.isTexture!==!0?Promise.resolve(null):i==="glyphMap"?Promise.resolve(e):We.getOrLoadLOD(e,t).then(r=>{if(Array.isArray(r))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(r?.isTexture===!0){if(r!=e&&n&&i){const a=n[i];if(a&&!Ne){const o=this.getAssignedLODInformation(a);if(o&&o?.level<t)return Ne==="verbose"&&console.warn("Assigned texture level is already higher: ",o.level,t,n,a,r),r&&r!==a&&((Ne||rs)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${t} (assigned is ${o.level})`,r.uuid),r.dispose()),null}if(this.trackTextureUsage(r),a&&a!==r&&this.untrackTextureUsage(a)&&(Ne||rs)){const c=this.getAssignedLODInformation(a);console.log(`[gltf-progressive] Disposed old texture LOD ${c?.level??"?"} → ${t} for ${n.name||n.type}.${i}`,a.uuid)}n[i]=r}return r}else Ne=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(r=>(console.error("Error loading LOD",e,r),null))}parser;url;constructor(e){const t=e.options.path;Ne&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}_isLoadingMesh;loadMesh=e=>{if(this._isLoadingMesh)return null;const t=this.parser.json.meshes[e]?.extensions?.[Hn];return t?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",e).then(n=>(this._isLoadingMesh=!1,n&&We.registerMesh(this.url,t.guid,n,t.lods?.length,0,t),n))):null};afterRoot(e){return Ne&&console.log("AFTER",this.url,e),this.parser.json.textures?.forEach((t,n)=>{if(t?.extensions){const i=t?.extensions[Hn];if(i){if(!i.lods){Ne&&console.warn("Texture has no LODs",i);return}let r=!1;for(const a of this.parser.associations.keys())a.isTexture===!0&&this.parser.associations.get(a)?.textures===n&&(r=!0,We.registerTexture(this.url,a,i.lods?.length,n,i));r||this.parser.getDependency("texture",n).then(a=>{a&&We.registerTexture(this.url,a,i.lods?.length,n,i)})}}}),this.parser.json.meshes?.forEach((t,n)=>{if(t?.extensions){const i=t?.extensions[Hn];if(i&&i.lods){for(const r of this.parser.associations.keys())if(r.isMesh){const a=this.parser.associations.get(r);a?.meshes===n&&We.registerMesh(this.url,i.guid,r,i.lods.length,a.primitives,i)}}}}),null}static registerTexture=(e,t,n,i,r)=>{if(!t){Ne&&console.error("!! gltf-progressive: Called register texture without texture");return}if(Ne){const o=t.image?.width||t.source?.data?.width||0,c=t.image?.height||t.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${i}] "${t.name||t.uuid}", Current: ${o}x${c}, Max: ${r.lods[0]?.width}x${r.lods[0]?.height}, uuid: ${t.uuid}`,r,t)}t.source&&(t.source[zo]=r);const a=r.guid;We.assignLODInformation(e,t,a,n,i),We.lodInfos.set(a,r),We.lowresCache.set(a,new WeakRef(t))};static registerMesh=(e,t,n,i,r,a)=>{const o=n.geometry;if(!o){Ne&&console.warn("gltf-progressive: Register mesh without geometry");return}o.userData||(o.userData={}),Ne&&console.log("> Progressive: register mesh "+n.name,{index:r,uuid:n.uuid},a,n),We.assignLODInformation(e,o,t,i,r),We.lodInfos.set(t,a);let l=We.lowresCache.get(t)?.deref();l?l.push(n.geometry):l=[n.geometry],We.lowresCache.set(t,new WeakRef(l)),i>0&&!Bs(n)&&sE(n,o);for(const h of si)h.onRegisteredNewMesh?.(n,a)};static dispose(e){if(e){this.lodInfos.delete(e);const t=this.lowresCache.get(e);if(t){const n=t.deref();if(n){if(n.isTexture){const i=n;this.textureRefCounts.delete(i.uuid),i.dispose()}else if(Array.isArray(n))for(const i of n)i.dispose()}this.lowresCache.delete(e)}for(const[n,i]of this.cache)n.includes(e)&&(this._disposeCacheEntry(i),this.cache.delete(n))}else{this.lodInfos.clear();for(const[,t]of this.lowresCache){const n=t.deref();if(n){if(n.isTexture){const i=n;this.textureRefCounts.delete(i.uuid),i.dispose()}else if(Array.isArray(n))for(const i of n)i.dispose()}}this.lowresCache.clear();for(const[,t]of this.cache)this._disposeCacheEntry(t);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(e){if(e instanceof WeakRef){const t=e.deref();t&&(t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose())}else e.then(t=>{if(t)if(Array.isArray(t))for(const n of t)n.dispose();else t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(e=>{const t=We.cache.get(e);(Ne||rs)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
|
|
4013
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([c])),this.transcoderBinary=a,this.workerPool.setWorkerCreator(()=>{const l=new Worker(this.workerSourceURL),h=this.transcoderBinary.slice(0);return l.postMessage({type:"init",config:this.workerConfig,transcoderBinary:h},[h]),l})}),ko>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),ko++}return this.transcoderPending}load(e,t,n,i){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const r=new di(this.manager);r.setPath(this.path),r.setCrossOrigin(this.crossOrigin),r.setWithCredentials(this.withCredentials),r.setRequestHeader(this.requestHeader),r.setResponseType("arraybuffer"),r.load(e,a=>{this.parse(a,t,i)},n,i)}parse(e,t,n){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Oo.has(e))return Oo.get(e).promise.then(t).catch(n);this._createTexture(e).then(i=>t?t(i):null).catch(n)}_createTextureFrom(e,t){const{type:n,error:i,data:{faces:r,width:a,height:o,format:c,type:l,dfdFlags:h}}=e;if(n==="error")return Promise.reject(i);let u;if(t.faceCount===6)u=new xu(r,c,l);else{const d=r[0].mipmaps;u=t.layerCount>1?new Eu(d,a,o,t.layerCount,c,l):new Ms(d,a,o,c,l)}return u.minFilter=r[0].mipmaps.length===1?ft:rn,u.magFilter=ft,u.generateMipmaps=!1,u.needsUpdate=!0,u.colorSpace=Dd(t),u.premultiplyAlpha=!!(h&Ub),u}async _createTexture(e,t={}){const n=Hb(new Uint8Array(e)),i=n.vkFormat===jc&&n.dataFormatDescriptor[0].colorModel===167;if(!(n.vkFormat===Ob||i&&!this.workerConfig.astcHDRSupported))return Xb(n);const a=t,o=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:a},[e])).then(c=>this._createTextureFrom(c.data,n));return Oo.set(e,{promise:o}),o}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),ko--}}nn.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2};nn.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};nn.EngineFormat={RGBAFormat:St,RGBA_ASTC_4x4_Format:ui,RGB_BPTC_UNSIGNED_Format:sr,RGBA_BPTC_Format:Ui,RGBA_ETC2_EAC_Format:ms,RGBA_PVRTC_4BPPV1_Format:Fi,RGBA_S3TC_DXT5_Format:cs,RGB_ETC1_Format:$s,RGB_ETC2_Format:gs,RGB_PVRTC_4BPPV1_Format:Zs,RGBA_S3TC_DXT1_Format:hi};nn.EngineType={UnsignedByteType:Re,HalfFloatType:Dt,FloatType:Tt};nn.BasisWorker=function(){let s,e,t;const n=_EngineFormat,i=_EngineType,r=_TranscoderFormat,a=_BasisFormat;self.addEventListener("message",function(g){const m=g.data;switch(m.type){case"init":s=m.config,o(m.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:p,buffers:f,width:E,height:I,hasAlpha:x,format:v,type:y,dfdFlags:w}=c(m.buffer);self.postMessage({type:"transcode",id:m.id,data:{faces:p,width:E,height:I,hasAlpha:x,format:v,type:y,dfdFlags:w}},f)}catch(p){console.error(p),self.postMessage({type:"error",id:m.id,error:p.message})}});break}});function o(g){e=new Promise(m=>{t={wasmBinary:g,onRuntimeInitialized:m},BASIS(t)}).then(()=>{t.initializeBasis(),t.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function c(g){const m=new t.KTX2File(new Uint8Array(g));function p(){m.close(),m.delete()}if(!m.isValid())throw p(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let f;if(m.isUASTC())f=a.UASTC;else if(m.isETC1S())f=a.ETC1S;else if(m.isHDR())f=a.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const E=m.getWidth(),I=m.getHeight(),x=m.getLayers()||1,v=m.getLevels(),y=m.getFaces(),w=m.getHasAlpha(),R=m.getDFDFlags(),{transcoderFormat:b,engineFormat:C,engineType:B}=u(f,E,I,w);if(!E||!I||!v)throw p(),new Error("THREE.KTX2Loader: Invalid texture");if(!m.startTranscoding())throw p(),new Error("THREE.KTX2Loader: .startTranscoding failed");const Q=[],N=[];for(let V=0;V<y;V++){const W=[];for(let k=0;k<v;k++){const H=[];let Y,se;for(let Z=0;Z<x;Z++){const be=m.getImageLevelInfo(k,Z,V);V===0&&k===0&&Z===0&&(be.origWidth%4!==0||be.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),v>1?(Y=be.origWidth,se=be.origHeight):(Y=be.width,se=be.height);let ye=new Uint8Array(m.getImageTranscodedSizeInBytes(k,Z,0,b));const st=m.transcodeImage(ye,k,Z,V,b,0,-1,-1);if(B===i.HalfFloatType&&(ye=new Uint16Array(ye.buffer,ye.byteOffset,ye.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!st)throw p(),new Error("THREE.KTX2Loader: .transcodeImage failed.");H.push(ye)}const ne=A(H);W.push({data:ne,width:Y,height:se}),N.push(ne.buffer)}Q.push({mipmaps:W,width:E,height:I,format:C,type:B})}return p(),{faces:Q,buffers:N,width:E,height:I,hasAlpha:w,dfdFlags:R,format:C,type:B}}const l=[{if:"astcSupported",basisFormat:[a.UASTC],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],engineType:[i.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],engineType:[i.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.BC1,r.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],engineType:[i.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],engineType:[i.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.ETC1],engineFormat:[n.RGB_ETC1_Format],engineType:[i.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],engineType:[i.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[a.UASTC_HDR],transcoderFormat:[r.BC6H],engineFormat:[n.RGB_BPTC_UNSIGNED_Format],engineType:[i.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.RGBA32,r.RGBA32],engineFormat:[n.RGBAFormat,n.RGBAFormat],engineType:[i.UnsignedByteType,i.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[a.UASTC_HDR],transcoderFormat:[r.RGBA_HALF],engineFormat:[n.RGBAFormat],engineType:[i.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],h={[a.ETC1S]:l.filter(g=>g.basisFormat.includes(a.ETC1S)).sort((g,m)=>g.priorityETC1S-m.priorityETC1S),[a.UASTC]:l.filter(g=>g.basisFormat.includes(a.UASTC)).sort((g,m)=>g.priorityUASTC-m.priorityUASTC),[a.UASTC_HDR]:l.filter(g=>g.basisFormat.includes(a.UASTC_HDR)).sort((g,m)=>g.priorityHDR-m.priorityHDR)};function u(g,m,p,f){const E=h[g];for(let I=0;I<E.length;I++){const x=E[I];if(x.if&&!s[x.if]||!x.basisFormat.includes(g)||f&&x.transcoderFormat.length<2||x.needsPowerOfTwo&&!(d(m)&&d(p)))continue;const v=x.transcoderFormat[f?1:0],y=x.engineFormat[f?1:0],w=x.engineType[0];return{transcoderFormat:v,engineFormat:y,engineType:w}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function d(g){return g<=2?!0:(g&g-1)===0&&g!==0}function A(g){if(g.length===1)return g[0];let m=0;for(let E=0;E<g.length;E++){const I=g[E];m+=I.byteLength}const p=new Uint8Array(m);let f=0;for(let E=0;E<g.length;E++){const I=g[E];p.set(I,f),f+=I.byteLength}return p}};const qb=new Set([St,As,an,Vn]),Ho={[ad]:St,[rd]:an,[sd]:Vn,[id]:St,[nd]:an,[td]:Vn,[ed]:St,[$u]:St,[Zu]:an,[Ju]:an,[ju]:Vn,[Ku]:Vn,[cd]:As,[od]:As,[Cd]:ms,[xd]:gs,[uc]:er,[kb]:tr,[dc]:nr,[Gb]:ir,[jc]:ui,[Sd]:ui,[Id]:ui,[Rd]:Bi,[Md]:Bi,[vd]:Bi,[dd]:hi,[ud]:hi,[hd]:yi,[ld]:yi,[Ad]:wi,[fd]:wi,[gd]:ar,[pd]:rr,[_d]:cr,[md]:or,[Ed]:Ui,[bd]:Ui,[Td]:Fi,[wd]:Fi,[Bd]:ps,[yd]:ps},ss={[ad]:Tt,[rd]:Tt,[sd]:Tt,[id]:Dt,[nd]:Dt,[td]:Dt,[ed]:Re,[$u]:Re,[Zu]:Re,[Ju]:Re,[ju]:Re,[Ku]:Re,[cd]:pr,[od]:gr,[Cd]:Re,[xd]:Re,[uc]:Re,[uc]:Re,[dc]:Re,[dc]:Re,[jc]:Dt,[Sd]:Re,[Id]:Re,[Rd]:Dt,[Md]:Re,[vd]:Re,[dd]:Re,[ud]:Re,[hd]:Re,[ld]:Re,[Ad]:Re,[fd]:Re,[gd]:Re,[pd]:Re,[_d]:Re,[md]:Re,[Ed]:Re,[bd]:Re,[Td]:Re,[wd]:Re,[Bd]:Re,[yd]:Re};async function Xb(s){const{vkFormat:e}=s;if(Ho[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat: "+e);ss[e]===void 0&&console.warn('THREE.KTX2Loader: Missing ".type" for vkFormat: '+e);let t;s.supercompressionScheme===_h&&(Go||(Go=new Promise(async a=>{const o=new Vb;await o.init(),a(o)})),t=await Go);const n=[];for(let a=0;a<s.levels.length;a++){const o=Math.max(1,s.pixelWidth>>a),c=Math.max(1,s.pixelHeight>>a),l=s.pixelDepth?Math.max(1,s.pixelDepth>>a):0,h=s.levels[a];let u;if(s.supercompressionScheme===Fb)u=h.levelData;else if(s.supercompressionScheme===_h)u=t.decode(h.levelData,h.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let d;ss[e]===Tt?d=new Float32Array(u.buffer,u.byteOffset,u.byteLength/Float32Array.BYTES_PER_ELEMENT):ss[e]===Dt?d=new Uint16Array(u.buffer,u.byteOffset,u.byteLength/Uint16Array.BYTES_PER_ELEMENT):ss[e]===pr||ss[e]===gr?d=new Uint32Array(u.buffer,u.byteOffset,u.byteLength/Uint32Array.BYTES_PER_ELEMENT):d=u,n.push({data:d,width:o,height:c,depth:l})}const i=s.levelCount===0||n.length>1;let r;if(qb.has(Ho[e]))r=s.pixelDepth===0?new _r(n[0].data,s.pixelWidth,s.pixelHeight):new Lc(n[0].data,s.pixelWidth,s.pixelHeight,s.pixelDepth),r.minFilter=i?Da:_t,r.magFilter=_t,r.generateMipmaps=s.levelCount===0;else{if(s.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");r=new Ms(n,s.pixelWidth,s.pixelHeight),r.minFilter=i?rn:ft,r.magFilter=ft}return r.mipmaps=n,r.type=ss[e],r.format=Ho[e],r.colorSpace=Dd(s),r.needsUpdate=!0,Promise.resolve(r)}function Dd(s){const e=s.dataFormatDescriptor[0];return e.colorPrimaries===Nb?e.transferFunction===bh?At:Rt:e.colorPrimaries===Qb?e.transferFunction===bh?zb:Wb:(e.colorPrimaries===Pb||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),pn)}let _n="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",Ti="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Yb=_n,Kb=Ti,Ld=new URL(_n+"draco_decoder.js");Ld.searchParams.append("range","true");fetch(Ld,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(s=>{console.debug(`Failed to fetch remote Draco decoder from ${_n} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),_n===Yb&&Fd("./include/draco/"),Ti===Kb&&Ud("./include/ktx2/")}).finally(()=>{Pd()});const jb=()=>({dracoDecoderPath:_n,ktx2TranscoderPath:Ti});function Fd(s){_n=s,Kt&&Kt[Ac]!=_n?(console.debug("Updating Draco decoder path to "+s),Kt[Ac]=_n,Kt.setDecoderPath(_n),Kt.preload()):console.debug("Setting Draco decoder path to "+s)}function Ud(s){Ti=s,bn&&bn.transcoderPath!=Ti?(console.debug("Updating KTX2 transcoder path to "+s),bn.setTranscoderPath(Ti),bn.init()):console.debug("Setting KTX2 transcoder path to "+s)}function Ka(s){return Pd(),s?bn.detectSupport(s):s!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:Kt,ktx2Loader:bn,meshoptDecoder:Ta}}function Jc(s){s.dracoLoader||s.setDRACOLoader(Kt),s.ktx2Loader||s.setKTX2Loader(bn),s.meshoptDecoder||s.setMeshoptDecoder(Ta)}const Ac=Symbol("dracoDecoderPath");let Kt,Ta,bn;function Pd(){Kt||(Kt=new Rb,Kt[Ac]=_n,Kt.setDecoderPath(_n),Kt.setDecoderConfig({type:"js"}),Kt.preload()),bn||(bn=new nn,bn.setTranscoderPath(Ti),bn.init()),Ta||(Ta=Tb)}const pc=new WeakMap;function Zc(s,e){let t=pc.get(s);t?t=Object.assign(t,e):t=e,pc.set(s,t)}const Jb=Kc.prototype.load;function Zb(...s){const e=pc.get(this);let t=s[0];const n=new URL(t,window.location.href);if(n.hostname.endsWith("needle.tools")){const r=e?.progressive!==void 0?e.progressive:!0,a=e?.usecase?e.usecase:"default";r?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${a}`:this.requestHeader.Accept=`*/*;usecase=${a}`,t=n.toString()}return s[0]=t,Jb?.call(this,...s)}Kc.prototype.load=Zb;fi("debugprogressive");function fi(s){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(s);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function $b(s,e){if(e===void 0||s===void 0||e.startsWith("./")||e.startsWith("http")||e.startsWith("data:")||e.startsWith("blob:"))return e;const t=s.lastIndexOf("/");if(t>=0){const n=s.substring(0,t+1);for(;n.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return n+e}return e}function $c(){return Hs!==void 0||(Hs=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),fi("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",Hs)),Hs}let Hs;function Ch(){if(typeof window>"u")return!1;const s=new URL(window.location.href),e=s.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(s.hostname);return s.hostname==="127.0.0.1"||e}class eE{constructor(e,t={}){this.maxConcurrent=e,this.debug=t.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(e){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${e}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(t=>{this._queue.push({key:e,resolve:t})})}add(e,t){this._running.has(e)||(this._running.set(e,t),t.finally(()=>{this._running.delete(e),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${e})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${e})`))}internalUpdate(){const e=this.maxConcurrent-this._running.size;for(let t=0;t<e&&this._queue.length>0;t++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:n,resolve:i}=this._queue.shift();i({use:r=>this.add(n,r)})}}}function tE(s){const e=s.image?.width??0,t=s.image?.height??0,n=s.image?.depth??1,i=Math.floor(Math.log2(Math.max(e,t,n)))+1,r=nE(s);return e*t*n*r*(1-Math.pow(.25,i))/(1-.25)}function nE(s){let e=4;const t=s.format;t===1024||t===1025?e=1:t===1026||t===1027?e=2:t===1022||t===1029?e=3:(t===1023||t===1033)&&(e=4);let n=1;const i=s.type;return i===1009||i===1010?n=1:i===1011||i===1012?n=2:i===1013||i===1014||i===1015?n=4:i===1016&&(n=2),e*n}const iE=typeof window>"u"&&typeof document>"u",gc=Symbol("needle:raycast-mesh");function Bs(s){return s?.[gc]instanceof bt?s[gc]:null}function sE(s,e){if((s.type==="Mesh"||s.type==="SkinnedMesh")&&!Bs(s)){const n=aE(e);n.userData={isRaycastMesh:!0},s[gc]=n}}function rE(s=!0){if(s){if(Vs)return;const e=Vs=Et.prototype.raycast;Et.prototype.raycast=function(t,n){const i=this,r=Bs(i);let a;r&&i.isMesh&&(a=i.geometry,i.geometry=r),e.call(this,t,n),a&&(i.geometry=a)}}else{if(!Vs)return;Et.prototype.raycast=Vs,Vs=null}}let Vs=null;function aE(s){const e=new bt;for(const t in s.attributes)e.setAttribute(t,s.getAttribute(t));return e.setIndex(s.getIndex()),e}const si=new Array,Ne=fi("debugprogressive");let js,Si=-1;if(Ne){let s=function(){Si+=1,Si>=e&&(Si=-1),console.log(`Toggle LOD level [${Si}]`)},e=6;window.addEventListener("keyup",t=>{t.key==="p"&&s(),t.key==="w"&&(js=!js,console.log(`Toggle wireframe [${js}]`));const n=parseInt(t.key);!isNaN(n)&&n>=0&&(Si=n,console.log(`Set LOD level to [${Si}]`))})}function Nd(s){if(Ne&&js!==void 0)if(Array.isArray(s))for(const e of s)Nd(e);else s&&"wireframe"in s&&(s.wireframe=js===!0)}const zs=new Array;let oE=0;const cE=$c()?2:10;function lE(s){if(zs.length<cE){const n=zs.length;Ne&&console.warn(`[Worker] Creating new worker #${n}`);const i=el.createWorker(s||{});return zs.push(i),i}const e=oE++%zs.length;return zs[e]}class el{constructor(e,t){this.worker=e,this._debug=t.debug??!1,e.onmessage=n=>{const i=n.data;switch(this._debug&&console.log("[Worker] EVENT",i),i.type){case"loaded-gltf":for(const r of this._running)if(r.url===i.result.url){hE(i.result),r.resolve(i.result);const a=r.url;a.startsWith("blob:")&&URL.revokeObjectURL(a)}}},e.onerror=n=>{console.error("[Worker] Error in gltf-progressive worker:",n)},e.postMessage({type:"init"})}static async createWorker(e){const t=new Worker(new URL("/gltf-progressive.worker-CCrD-Ycm.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:$a&&$a.tagName.toUpperCase()==="SCRIPT"&&$a.src||new URL("gltf-progressive-BBIL1q1j.umd.cjs",document.baseURI).href),{type:"module"});return new el(t,e)}_running=[];_webglRenderer=null;async load(e,t){const n=jb();let i=t?.renderer;i||(this._webglRenderer??=(async()=>{const{WebGLRenderer:l}=await Promise.resolve().then(()=>K_);return new l})(),i=await this._webglRenderer);const o=Ka(i).ktx2Loader.workerConfig;e instanceof URL?e=e.toString():e.startsWith("file:")?e=URL.createObjectURL(new Blob([e])):!e.startsWith("blob:")&&!e.startsWith("http:")&&!e.startsWith("https:")&&(e=new URL(e,window.location.href).toString());const c={type:"load",url:e,dracoDecoderPath:n.dracoDecoderPath,ktx2TranscoderPath:n.ktx2TranscoderPath,ktx2LoaderConfig:o};return this._debug&&console.debug("[Worker] Sending load request",c),this.worker.postMessage(c),new Promise(l=>{this._running.push({url:e.toString(),resolve:l})})}_debug=!1}function hE(s){for(const e of s.geometries){const t=e.geometry,n=new bt;if(n.name=t.name||"",t.index){const i=t.index;n.setIndex(Vo(i))}for(const i in t.attributes){const r=t.attributes[i],a=Vo(r);n.setAttribute(i,a)}if(t.morphAttributes)for(const i in t.morphAttributes){const a=t.morphAttributes[i].map(o=>Vo(o));n.morphAttributes[i]=a}if(n.morphTargetsRelative=t.morphTargetsRelative??!1,n.boundingBox=new jt,n.boundingBox.min=new U(t.boundingBox?.min.x,t.boundingBox?.min.y,t.boundingBox?.min.z),n.boundingBox.max=new U(t.boundingBox?.max.x,t.boundingBox?.max.y,t.boundingBox?.max.z),n.boundingSphere=new Jt(new U(t.boundingSphere?.center.x,t.boundingSphere?.center.y,t.boundingSphere?.center.z),t.boundingSphere?.radius),t.groups)for(const i of t.groups)n.addGroup(i.start,i.count,i.materialIndex);t.userData&&(n.userData=t.userData),e.geometry=n}for(const e of s.textures){const t=e.texture;let n=null;if(t.isCompressedTexture){const i=t.mipmaps,r=t.image?.width||t.source?.data?.width||-1,a=t.image?.height||t.source?.data?.height||-1;n=new Ms(i,r,a,t.format,t.type,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.anisotropy,t.colorSpace)}else n=new $e(t.image,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),n.mipmaps=t.mipmaps,n.channel=t.channel,n.source.data=t.source.data,n.flipY=t.flipY,n.premultiplyAlpha=t.premultiplyAlpha,n.unpackAlignment=t.unpackAlignment,n.matrix=new Fe(...t.matrix.elements);if(!n){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}e.texture=n}return s}function Vo(s){let e=s;if("isInterleavedBufferAttribute"in s&&s.isInterleavedBufferAttribute){const t=s.data,n=t.array,i=new Ha(n,t.stride);e=new vs(i,s.itemSize,n.byteOffset,s.normalized),e.offset=s.offset}else"isBufferAttribute"in s&&s.isBufferAttribute&&(e=new vt(s.array,s.itemSize,s.normalized),e.usage=s.usage,e.gpuType=s.gpuType,e.updateRanges=s.updateRanges);return e}const uE=fi("gltf-progressive-worker");fi("gltf-progressive-reduce-mipmaps");const rs=fi("gltf-progressive-gc"),zo=Symbol("needle-progressive-texture"),Hn="NEEDLE_progressive";class We{get name(){return Hn}static getMeshLODExtension(e){const t=this.getAssignedLODInformation(e);return t?.key?this.lodInfos.get(t.key):null}static getPrimitiveIndex(e){const t=this.getAssignedLODInformation(e)?.index;return t??-1}static getMaterialMinMaxLODsCount(e,t){const n=this,i="LODS:minmax",r=e[i];if(r!=null)return r;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const o of e)this.getMaterialMinMaxLODsCount(o,t);return e[i]=t,t}if(Ne==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const o=e;for(const c of Object.keys(o.uniforms)){const l=o.uniforms[c].value;l?.isTexture===!0&&a(l,t)}}else if(e.isMaterial)for(const o of Object.keys(e)){const c=e[o];c?.isTexture===!0&&a(c,t)}else Ne&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${e.type}`);return e[i]=t,t;function a(o,c){const l=n.getAssignedLODInformation(o);if(l){const h=n.lodInfos.get(l.key);if(h&&h.lods){c.min_count=Math.min(c.min_count,h.lods.length),c.max_count=Math.max(c.max_count,h.lods.length);for(let u=0;u<h.lods.length;u++){const d=h.lods[u];d.width&&(c.lods[u]=c.lods[u]||{min_height:1/0,max_height:0},c.lods[u].min_height=Math.min(c.lods[u].min_height,d.height),c.lods[u].max_height=Math.max(c.lods[u].max_height,d.height))}}}}}static hasLODLevelAvailable(e,t){if(Array.isArray(e)){for(const r of e)if(this.hasLODLevelAvailable(r,t))return!0;return!1}if(e.isMaterial===!0){for(const r of Object.keys(e)){const a=e[r];if(a&&a.isTexture&&this.hasLODLevelAvailable(a,t))return!0}return!1}else if(e.isGroup===!0){for(const r of e.children)if(r.isMesh===!0&&this.hasLODLevelAvailable(r,t))return!0}let n,i;if(e.isMesh?n=e.geometry:(e.isBufferGeometry||e.isTexture)&&(n=e),n&&n?.userData?.LODS){const r=n.userData.LODS;if(i=this.lodInfos.get(r.key),t===void 0)return i!=null;if(i)return Array.isArray(i.lods)?t<i.lods.length:t===0}return!1}static assignMeshLOD(e,t){if(!e)return Promise.resolve(null);if(e instanceof Et||e.isMesh===!0){const n=e.geometry,i=this.getAssignedLODInformation(n);if(!i)return Promise.resolve(null);for(const r of si)r.onBeforeGetLODMesh?.(e,t);return e["LOD:requested level"]=t,We.getOrLoadLOD(n,t).then(r=>{if(Array.isArray(r)){const a=i.index||0;r=r[a]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],r&&n!=r&&(r?.isBufferGeometry?e.geometry=r:Ne&&console.error("Invalid LOD geometry",r))),r}).catch(r=>(console.error("Error loading mesh LOD",e,r),null))}else Ne&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const n=e;if(Array.isArray(n.material)){const i=new Array;for(const r of n.material){const a=this.assignTextureLOD(r,t);i.push(a)}return Promise.all(i).then(r=>{const a=new Array;for(const o of r)Array.isArray(o)&&a.push(...o);return a})}else return this.assignTextureLOD(n.material,t)}if(e.isMaterial===!0){const n=e,i=[],r=new Array;if(n.uniforms&&(n.isRawShaderMaterial||n.isShaderMaterial===!0)){const a=n;for(const o of Object.keys(a.uniforms)){const c=a.uniforms[o].value;if(c?.isTexture===!0){const l=this.assignTextureLODForSlot(c,t,n,o).then(h=>(h&&a.uniforms[o].value!=h&&(a.uniforms[o].value=h,a.uniformsNeedUpdate=!0),h));i.push(l),r.push(o)}}}else for(const a of Object.keys(n)){const o=n[a];if(o?.isTexture===!0){const c=this.assignTextureLODForSlot(o,t,n,a);i.push(c),r.push(a)}}return Promise.all(i).then(a=>{const o=new Array;for(let c=0;c<a.length;c++){const l=a[c],h=r[c];l&&l.isTexture===!0?o.push({material:n,slot:h,texture:l,level:t}):o.push({material:n,slot:h,texture:null,level:t})}return o})}if(e instanceof $e||e.isTexture===!0){const n=e;return this.assignTextureLODForSlot(n,t,null,null)}return Promise.resolve(null)}static set maxConcurrentLoadingTasks(e){We.queue.maxConcurrent=e}static get maxConcurrentLoadingTasks(){return We.queue.maxConcurrent}static assignTextureLODForSlot(e,t,n,i){return e?.isTexture!==!0?Promise.resolve(null):i==="glyphMap"?Promise.resolve(e):We.getOrLoadLOD(e,t).then(r=>{if(Array.isArray(r))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(r?.isTexture===!0){if(r!=e&&n&&i){const a=n[i];if(a&&!Ne){const o=this.getAssignedLODInformation(a);if(o&&o?.level<t)return Ne==="verbose"&&console.warn("Assigned texture level is already higher: ",o.level,t,n,a,r),r&&r!==a&&((Ne||rs)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${t} (assigned is ${o.level})`,r.uuid),r.dispose()),null}if(this.trackTextureUsage(r),a&&a!==r&&this.untrackTextureUsage(a)&&(Ne||rs)){const c=this.getAssignedLODInformation(a);console.log(`[gltf-progressive] Disposed old texture LOD ${c?.level??"?"} → ${t} for ${n.name||n.type}.${i}`,a.uuid)}n[i]=r}return r}else Ne=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(r=>(console.error("Error loading LOD",e,r),null))}parser;url;constructor(e){const t=e.options.path;Ne&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}_isLoadingMesh;loadMesh=e=>{if(this._isLoadingMesh)return null;const t=this.parser.json.meshes[e]?.extensions?.[Hn];return t?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",e).then(n=>(this._isLoadingMesh=!1,n&&We.registerMesh(this.url,t.guid,n,t.lods?.length,0,t),n))):null};afterRoot(e){return Ne&&console.log("AFTER",this.url,e),this.parser.json.textures?.forEach((t,n)=>{if(t?.extensions){const i=t?.extensions[Hn];if(i){if(!i.lods){Ne&&console.warn("Texture has no LODs",i);return}let r=!1;for(const a of this.parser.associations.keys())a.isTexture===!0&&this.parser.associations.get(a)?.textures===n&&(r=!0,We.registerTexture(this.url,a,i.lods?.length,n,i));r||this.parser.getDependency("texture",n).then(a=>{a&&We.registerTexture(this.url,a,i.lods?.length,n,i)})}}}),this.parser.json.meshes?.forEach((t,n)=>{if(t?.extensions){const i=t?.extensions[Hn];if(i&&i.lods){for(const r of this.parser.associations.keys())if(r.isMesh){const a=this.parser.associations.get(r);a?.meshes===n&&We.registerMesh(this.url,i.guid,r,i.lods.length,a.primitives,i)}}}}),null}static registerTexture=(e,t,n,i,r)=>{if(!t){Ne&&console.error("!! gltf-progressive: Called register texture without texture");return}if(Ne){const o=t.image?.width||t.source?.data?.width||0,c=t.image?.height||t.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${i}] "${t.name||t.uuid}", Current: ${o}x${c}, Max: ${r.lods[0]?.width}x${r.lods[0]?.height}, uuid: ${t.uuid}`,r,t)}t.source&&(t.source[zo]=r);const a=r.guid;We.assignLODInformation(e,t,a,n,i),We.lodInfos.set(a,r),We.lowresCache.set(a,new WeakRef(t))};static registerMesh=(e,t,n,i,r,a)=>{const o=n.geometry;if(!o){Ne&&console.warn("gltf-progressive: Register mesh without geometry");return}o.userData||(o.userData={}),Ne&&console.log("> Progressive: register mesh "+n.name,{index:r,uuid:n.uuid},a,n),We.assignLODInformation(e,o,t,i,r),We.lodInfos.set(t,a);let l=We.lowresCache.get(t)?.deref();l?l.push(n.geometry):l=[n.geometry],We.lowresCache.set(t,new WeakRef(l)),i>0&&!Bs(n)&&sE(n,o);for(const h of si)h.onRegisteredNewMesh?.(n,a)};static dispose(e){if(e){this.lodInfos.delete(e);const t=this.lowresCache.get(e);if(t){const n=t.deref();if(n){if(n.isTexture){const i=n;this.textureRefCounts.delete(i.uuid),i.dispose()}else if(Array.isArray(n))for(const i of n)i.dispose()}this.lowresCache.delete(e)}for(const[n,i]of this.cache)n.includes(e)&&(this._disposeCacheEntry(i),this.cache.delete(n))}else{this.lodInfos.clear();for(const[,t]of this.lowresCache){const n=t.deref();if(n){if(n.isTexture){const i=n;this.textureRefCounts.delete(i.uuid),i.dispose()}else if(Array.isArray(n))for(const i of n)i.dispose()}}this.lowresCache.clear();for(const[,t]of this.cache)this._disposeCacheEntry(t);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(e){if(e instanceof WeakRef){const t=e.deref();t&&(t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose())}else e.then(t=>{if(t)if(Array.isArray(t))for(const n of t)n.dispose();else t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(e=>{const t=We.cache.get(e);(Ne||rs)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
|
|
4014
4014
|
${e}`),t instanceof WeakRef&&(t.deref()||(We.cache.delete(e),(Ne||rs)&&console.log("[gltf-progressive] ↪ Cache entry deleted (GC)")))});static trackTextureUsage(e){const t=e.uuid,n=this.textureRefCounts.get(t)||0;this.textureRefCounts.set(t,n+1),Ne==="verbose"&&console.log(`[gltf-progressive] Track texture ${t}, refCount: ${n} → ${n+1}`)}static untrackTextureUsage(e){const t=e.uuid,n=this.textureRefCounts.get(t);if(!n)return(Ne==="verbose"||rs)&&r("[gltf-progressive] Memory: Untrack untracked texture (dispose immediately)",0),e.dispose(),!0;const i=n-1;if(i<=0)return this.textureRefCounts.delete(t),(Ne||rs)&&r("[gltf-progressive] Memory: Dispose texture",i),e.dispose(),!0;return this.textureRefCounts.set(t,i),Ne==="verbose"&&r("[gltf-progressive] Memory: Untrack texture",i),!1;function r(a,o){let c=e.image?.width||e.source?.data?.width||0,l=e.image?.height||e.source?.data?.height||0;const h=c&&l?`${c}x${l}`:"N/A";let u="N/A";c&&l&&(u=`~${(tE(e)/(1024*1024)).toFixed(2)} MB`),console.log(`${a} — ${e.name} ${h} (${u}), refCount: ${n} → ${o}
|
|
4015
4015
|
${t}`)}}static workers=[];static _workersIndex=0;static async getOrLoadLOD(e,t){const n=Ne=="verbose",i=this.getAssignedLODInformation(e);if(!i)return Ne&&console.warn(`[gltf-progressive] No LOD information found: ${e.name}, uuid: ${e.uuid}, type: ${e.type}`,e),null;const r=i?.key;let a;if(e.isTexture===!0){const c=e;c.source&&c.source[zo]&&(a=c.source[zo])}if(a||(a=We.lodInfos.get(r)),!a)Ne&&console.warn(`Can not load LOD ${t}: no LOD info found for "${r}" ${e.name}`,e.type,We.lodInfos);else{if(t>0){let h=!1;const u=Array.isArray(a.lods);if(u&&t>=a.lods.length?h=!0:u||(h=!0),h){const d=this.lowresCache.get(r);if(d){const A=d.deref();if(A)return A;this.lowresCache.delete(r),Ne&&console.log(`[gltf-progressive] Lowres cache entry was GC'd: ${r}`)}return null}}const c=Array.isArray(a.lods)?a.lods[t]?.path:a.lods;if(!c)return Ne&&!a["missing:uri"]&&(a["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,a)),null;const l=$b(i.url,c);if(l.endsWith(".glb")||l.endsWith(".gltf")){if(!a.guid)return console.warn("missing pointer for glb/gltf texture",a),null;const h=l+"_"+a.guid,u=await this.queue.slot(l),d=this.cache.get(h);if(d!==void 0)if(n&&console.log(`LOD ${t} was already loading/loaded: ${h}`),d instanceof WeakRef){const p=d.deref();if(p){let f=p,E=!1;if(f instanceof $e&&e instanceof $e?f.image?.data||f.source?.data?f=this.copySettings(e,f):E=!0:f instanceof bt&&e instanceof bt&&(f.attributes.position?.array||(E=!0)),!E)return f}this.cache.delete(h),Ne&&console.log(`[gltf-progressive] Re-loading GC'd/disposed resource: ${h}`)}else{let p=await d.catch(E=>(console.error(`Error loading LOD ${t} from ${l}
|
|
4016
4016
|
`,E),null)),f=!1;if(p==null||(p instanceof $e&&e instanceof $e?p.image?.data||p.source?.data?p=this.copySettings(e,p):(f=!0,this.cache.delete(h)):p instanceof bt&&e instanceof bt&&(p.attributes.position?.array||(f=!0,this.cache.delete(h)))),!f)return p}if(!u.use)return Ne&&console.log(`LOD ${t} was aborted: ${l}`),null;const A=a,g=new Promise(async(p,f)=>{if(uE){const R=await(await lE({})).load(l);if(R.textures.length>0)for(const b of R.textures){let C=b.texture;return We.assignLODInformation(i.url,C,r,t,void 0),e instanceof $e&&(C=this.copySettings(e,C)),C&&(C.guid=A.guid),p(C)}if(R.geometries.length>0){const b=new Array;for(const C of R.geometries){const B=C.geometry;We.assignLODInformation(i.url,B,r,t,C.primitiveIndex),b.push(B)}return p(b)}return p(null)}const E=new Kc;Jc(E),Ne&&(await new Promise(w=>setTimeout(w,1e3)),n&&console.warn("Start loading (delayed) "+l,A.guid));let I=l;if(A&&Array.isArray(A.lods)){const w=A.lods[t];w.hash&&(I+="?v="+w.hash)}const x=await E.loadAsync(I).catch(w=>(console.error(`Error loading LOD ${t} from ${l}
|