@needle-tools/engine 6.0.0-alpha.5 → 6.0.0-alpha.7
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 +9 -0
- package/dist/gltf-progressive-CRdzVlSY.umd.cjs +10 -0
- package/dist/gltf-progressive-OBdIERAY.min.js +10 -0
- package/dist/{gltf-progressive-B7lOWdLe.js → gltf-progressive-ZuAsp3FE.js} +237 -231
- package/dist/{materialx-CTPhpPxI.min.js → materialx-Bd0NThHa.min.js} +1 -1
- package/dist/{materialx-BwYvA-4x.umd.cjs → materialx-Clep-Dc8.umd.cjs} +2 -2
- package/dist/{materialx-B3qY8vPU.js → materialx-m9EM4lhZ.js} +1 -1
- package/dist/{needle-engine.bundle-_kAszB-k.min.js → needle-engine.bundle-B2_-yVCX.min.js} +148 -148
- package/dist/{needle-engine.bundle-D3nBMgfk.umd.cjs → needle-engine.bundle-BOs3iHUC.umd.cjs} +147 -147
- package/dist/{needle-engine.bundle-4xlWxOTF.js → needle-engine.bundle-hBHg3HuX.js} +7092 -7023
- package/dist/needle-engine.d.ts +49 -28
- package/dist/needle-engine.js +604 -603
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{vendor-BJviq-Oq.umd.cjs → vendor-Bb_SUKxZ.umd.cjs} +92 -92
- package/dist/{vendor-CdNldo8c.min.js → vendor-D1vc0sOe.min.js} +100 -100
- package/dist/{vendor-BQUQwut5.js → vendor-ipoLrKAE.js} +3466 -3320
- package/lib/engine/api.d.ts +2 -1
- package/lib/engine/api.js +2 -1
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_context.d.ts +2 -0
- package/lib/engine/engine_context.js +14 -0
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_init.js +2 -2
- package/lib/engine/engine_init.js.map +1 -1
- package/lib/engine/engine_license.d.ts +7 -7
- package/lib/engine/engine_license.js +73 -73
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_loaders.gltf.d.ts +3 -1
- package/lib/engine/engine_loaders.gltf.js +6 -1
- package/lib/engine/engine_loaders.gltf.js.map +1 -1
- package/lib/engine/engine_networking_blob.js +3 -3
- package/lib/engine/engine_networking_blob.js.map +1 -1
- package/lib/engine/engine_physics.d.ts +2 -0
- package/lib/engine/engine_physics.js +23 -1
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_utils_qrcode.js +2 -2
- package/lib/engine/engine_utils_qrcode.js.map +1 -1
- package/lib/engine/project-document/engine_document_extensions.d.ts +16 -0
- package/lib/engine/project-document/engine_document_extensions.js +29 -0
- package/lib/engine/project-document/engine_document_extensions.js.map +1 -0
- package/lib/engine/project-document/engine_document_runtime.js +1 -1
- package/lib/engine/project-document/engine_document_runtime.js.map +1 -1
- package/lib/engine/project-document/engine_project_document.js +39 -3
- package/lib/engine/project-document/engine_project_document.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.js +2 -2
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
- package/lib/engine/xr/TempXRContext.js +2 -2
- package/lib/engine/xr/TempXRContext.js.map +1 -1
- package/lib/engine-components/Renderer.d.ts +1 -1
- package/lib/engine-components/Renderer.js +2 -11
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
- package/package.json +4 -4
- package/plugins/common/license.js +4 -4
- package/plugins/license/cli.js +7 -4
- package/plugins/vite/build-pipeline.js +6 -1
- package/plugins/vite/license.js +4 -4
- package/plugins/vite/logger.client.js +21 -8
- package/src/engine/api.ts +2 -1
- package/src/engine/engine_context.ts +11 -0
- package/src/engine/engine_init.ts +2 -2
- package/src/engine/engine_license.ts +70 -70
- package/src/engine/engine_loaders.gltf.ts +8 -2
- package/src/engine/engine_networking_blob.ts +3 -3
- package/src/engine/engine_physics.ts +22 -1
- package/src/engine/engine_utils_qrcode.ts +2 -2
- package/src/engine/project-document/engine_document_extensions.ts +39 -0
- package/src/engine/project-document/engine_document_runtime.ts +1 -1
- package/src/engine/project-document/engine_project_document.ts +46 -3
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
- package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
- package/src/engine/webcomponents/needle-engine.loading.ts +2 -2
- package/src/engine/webcomponents/needle-engine.ts +2 -2
- package/src/engine/xr/TempXRContext.ts +2 -2
- package/src/engine-components/Renderer.ts +4 -13
- package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
- package/dist/gltf-progressive-BpT9M5Mt.umd.cjs +0 -10
- package/dist/gltf-progressive-D0rzvhNG.min.js +0 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Object3D as KB,PlaneGeometry as me,Layers as DE,MeshBasicMaterial as Rs,DoubleSide as dB,AdditiveBlending as ks,InstancedBufferAttribute as AQ,DynamicDrawUsage as hI,InstancedBufferGeometry as Xi,Uniform as wg,ShaderMaterial as vQ,BufferGeometry as ZQ,BufferAttribute as iI,Mesh as IQ,MeshStandardMaterial as lB,MeshPhysicalMaterial as Pe,ShaderChunk as ns,Triangle as eQ,Vector3 as q,Color as hQ,Vector4 as MI,Box3 as ag,Matrix4 as fA,Matrix3 as VQ,Loader as Te,FileLoader as Oe,DataArrayTexture as cI,RGIntegerFormat as oE,UnsignedIntType as oA,RGBAIntegerFormat as hA,WebGLArrayRenderTarget as vi,NearestFilter as WQ,GLSL3 as Zi,Vector2 as JI,Clock as Vi,WebGLRenderTarget as sE,SRGBColorSpace as tE,UnsignedByteType as ug,RGBAFormat as Ng,Quaternion as UI,DataTexture as cQ,PerspectiveCamera as Wi,OrthographicCamera as Xe,WebGLCubeRenderTarget as Ns,LinearSRGBColorSpace as ve,LinearFilter as Ms,LinearMipMapLinearFilter as Js,CubeCamera as Us,Camera as Ze,PMREMGenerator as Ls,RawShaderMaterial as wE,REVISION as ji,Matrix2 as Hs,Texture as Ve,Data3DTexture as We,Euler as je,Line3 as bg,Plane as Ys,BackSide as ze,Ray as _e,FrontSide as Ks,LineSegments as ds,LineLoop as ls,Line as fs,Points as ps,Sphere as $e,BatchedMesh as A0,InterpolateDiscrete as I0,InterpolateLinear as xs,AnimationClip as g0,QuaternionKeyframeTrack as Q0,ColorKeyframeTrack as B0,VectorKeyframeTrack as C0,BooleanKeyframeTrack as E0,NumberKeyframeTrack as i0,PropertyBinding as qs}from"./three-core.min.js";import{FullScreenQuad as zi}from"./three-examples.min.js";const D0=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function o0(B){return typeof B=="string"&&D0.test(B)}const DI=[];for(let B=0;B<256;++B)DI.push((B+256).toString(16).slice(1));function s0(B,A=0){return DI[B[A+0]]+DI[B[A+1]]+DI[B[A+2]]+DI[B[A+3]]+"-"+DI[B[A+4]]+DI[B[A+5]]+"-"+DI[B[A+6]]+DI[B[A+7]]+"-"+DI[B[A+8]]+DI[B[A+9]]+"-"+DI[B[A+10]]+DI[B[A+11]]+DI[B[A+12]]+DI[B[A+13]]+DI[B[A+14]]+DI[B[A+15]]}function t0(B){if(!o0(B))throw TypeError("Invalid UUID");let A;const I=new Uint8Array(16);return I[0]=(A=parseInt(B.slice(0,8),16))>>>24,I[1]=A>>>16&255,I[2]=A>>>8&255,I[3]=A&255,I[4]=(A=parseInt(B.slice(9,13),16))>>>8,I[5]=A&255,I[6]=(A=parseInt(B.slice(14,18),16))>>>8,I[7]=A&255,I[8]=(A=parseInt(B.slice(19,23),16))>>>8,I[9]=A&255,I[10]=(A=parseInt(B.slice(24,36),16))/1099511627776&255,I[11]=A/4294967296&255,I[12]=A>>>24&255,I[13]=A>>>16&255,I[14]=A>>>8&255,I[15]=A&255,I}function w0(B){B=unescape(encodeURIComponent(B));const A=[];for(let I=0;I<B.length;++I)A.push(B.charCodeAt(I));return A}const a0="6ba7b810-9dad-11d1-80b4-00c04fd430c8",e0="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function h0(B,A,I){function g(Q,C,i,E){var D;if(typeof Q=="string"&&(Q=w0(Q)),typeof C=="string"&&(C=t0(C)),((D=C)===null||D===void 0?void 0:D.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+Q.length);if(o.set(C),o.set(Q,C.length),o=I(o),o[6]=o[6]&15|A,o[8]=o[8]&63|128,i){E=E||0;for(let s=0;s<16;++s)i[E+s]=o[s];return i}return s0(o)}try{g.name=B}catch{}return g.DNS=a0,g.URL=e0,g}function c0(B,A,I,g){switch(B){case 0:return A&I^~A&g;case 1:return A^I^g;case 2:return A&I^A&g^I&g;case 3:return A^I^g}}function _i(B,A){return B<<A|B>>>32-A}function y0(B){const A=[1518500249,1859775393,2400959708,3395469782],I=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof B=="string"){const i=unescape(encodeURIComponent(B));B=[];for(let E=0;E<i.length;++E)B.push(i.charCodeAt(E))}else Array.isArray(B)||(B=Array.prototype.slice.call(B));B.push(128);const g=B.length/4+2,Q=Math.ceil(g/16),C=new Array(Q);for(let i=0;i<Q;++i){const E=new Uint32Array(16);for(let D=0;D<16;++D)E[D]=B[i*64+D*4]<<24|B[i*64+D*4+1]<<16|B[i*64+D*4+2]<<8|B[i*64+D*4+3];C[i]=E}C[Q-1][14]=(B.length-1)*8/Math.pow(2,32),C[Q-1][14]=Math.floor(C[Q-1][14]),C[Q-1][15]=(B.length-1)*8&4294967295;for(let i=0;i<Q;++i){const E=new Uint32Array(80);for(let a=0;a<16;++a)E[a]=C[i][a];for(let a=16;a<80;++a)E[a]=_i(E[a-3]^E[a-8]^E[a-14]^E[a-16],1);let D=I[0],o=I[1],s=I[2],t=I[3],w=I[4];for(let a=0;a<80;++a){const G=Math.floor(a/20),r=_i(D,5)+c0(G,o,s,t)+w+A[G]+E[a]>>>0;w=t,t=s,s=_i(o,30)>>>0,o=D,D=r}I[0]=I[0]+D>>>0,I[1]=I[1]+o>>>0,I[2]=I[2]+s>>>0,I[3]=I[3]+t>>>0,I[4]=I[4]+w>>>0}return[I[0]>>24&255,I[0]>>16&255,I[0]>>8&255,I[0]&255,I[1]>>24&255,I[1]>>16&255,I[1]>>8&255,I[1]&255,I[2]>>24&255,I[2]>>16&255,I[2]>>8&255,I[2]&255,I[3]>>24&255,I[3]>>16&255,I[3]>>8&255,I[3]&255,I[4]>>24&255,I[4]>>16&255,I[4]>>8&255,I[4]&255]}const G0=h0("v5",80,y0),S0="#needle",r0=[S0];function us(B){if(B==null)return null;const A=B.trim(),I=A.toLowerCase();for(const g of F0(r0)){if(!I.endsWith(g))continue;const Q=bs(A.substring(0,A.length-g.length));return Q.length>0?{marker:g,value:Q}:null}return null}function bs(B){return B.replace(/[\s_]+/g," ").trim()}function $i(B){return us(B)?.value??null}function F0(B){return B.length>1?[...B].sort((A,I)=>I.length-A.length):B}function R0(B){const A=n0(B),I=new DataView(A.buffer,A.byteOffset,A.byteLength);let g=1732584193,Q=4023233417,C=2562383102,i=271733878,E=3285377520;const D=new Uint32Array(80);for(let t=0;t<A.length;t+=64){for(let y=0;y<16;y++)D[y]=I.getUint32(t+y*4);for(let y=16;y<80;y++){const R=D[y-3]^D[y-8]^D[y-14]^D[y-16];D[y]=R<<1|R>>>31}let w=g,a=Q,G=C,r=i,c=E;for(let y=0;y<80;y++){let R,S;y<20?(R=a&G|~a&r,S=1518500249):y<40?(R=a^G^r,S=1859775393):y<60?(R=a&G|a&r|G&r,S=2400959708):(R=a^G^r,S=3395469782);const n=(w<<5|w>>>27)+R+c+S+D[y]|0;c=r,r=G,G=a<<30|a>>>2,a=w,w=n}g=g+w|0,Q=Q+a|0,C=C+G|0,i=i+r|0,E=E+c|0}const o=new Uint8Array(20),s=new DataView(o.buffer);return s.setUint32(0,g>>>0),s.setUint32(4,Q>>>0),s.setUint32(8,C>>>0),s.setUint32(12,i>>>0),s.setUint32(16,E>>>0),o}function k0(B){let A="";for(let I=0;I<B.length;I++)A+=B[I].toString(16).padStart(2,"0");return A}function n0(B){const A=B.length*8,I=new Uint8Array(((B.length+8>>6)+1)*64);I.set(B),I[B.length]=128;const g=new DataView(I.buffer);return g.setUint32(I.length-8,Math.floor(A/4294967296)),g.setUint32(I.length-4,A>>>0),I}const N0="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function ms(B,A=N0){const I=M0(A),g=new TextEncoder().encode(B),Q=new Uint8Array(I.length+g.length);Q.set(I),Q.set(g,I.length);const C=R0(Q).slice(0,16);return C[6]=C[6]&15|80,C[8]=C[8]&63|128,J0(C)}function M0(B){const A=B.replace(/-/g,"");if(A.length!==32)throw new Error(`Invalid UUID: ${B}`);const I=new Uint8Array(16);for(let g=0;g<16;g++)I[g]=parseInt(A.substring(g*2,g*2+2),16);return I}function J0(B){const A=k0(B);return`${A.substring(0,8)}-${A.substring(8,12)}-${A.substring(12,16)}-${A.substring(16,20)}-${A.substring(20)}`}const fB="needle-id";function U0(B,A){return ms(`${B}:${A}`,"eff8ba80-635d-11ec-90d6-0242ac120003")}function AD(B){return typeof B!="string"?"":us(B)?.value??bs(B)}function L0(B,A,I,g){return ms(`${B}-${AD(A)}-${I}`)}function H0(B,A){const I=AD(B[A]?.name);let g=0;for(let Q=0;Q<A;Q++)AD(B[Q]?.name)===I&&g++;return g}function Y0(B){const A=B?.extras?.[fB];return typeof A=="string"?A:null}function K0(B){return B.replace(/~/g,"~0").replace(/\//g,"~1")}function ID(B){return B.replace(/~1/g,"/").replace(/~0/g,"~")}function d0(B){return B.map(K0).join("/")}function l0(B){return B.split("/").map(ID)}function f0(B){return B.split("/").map(A=>{const I=/~2(0|[1-9][0-9]*)$/.exec(A);return I?{name:ID(A.slice(0,I.index)),occurrence:Number(I[1])}:{name:ID(A)}})}function yQ(B,A,I){let g=null;if(B.anchor){const C=p0(A,i=>$i(i.name)===B.anchor,2);C.length===1&&(g=C[0])}if(g)return g;let Q=null;if(B.id&&(Q=Ps(A,C=>C.userData?.[fB]===B.id)),g)return g;if(Q)return Q;if(B.path!==void 0){let C=A;for(const i of f0(B.path)){const E=C.children?.filter(D=>(D.name??"")===i.name)??[];if(C=i.occurrence!==void 0?E[i.occurrence]??null:E.length===1?E[0]:null,!C)break}if(C&&C!==A)return C}return null}function aE(B,A,I){let g=null;if(B.anchor){const C=A.filter(i=>$i(i.name)===B.anchor);C.length===1?g=C[0]:C.length>1}if(g)return g;const Q=B.id?A.find(C=>C.userData?.[fB]===B.id)??null:null;if(g)return g;if(Q)return Q;if(B.name){const C=A.filter(i=>i.name===B.name);if(C.length===1)return C[0];C.length>1}return null}function p0(B,A,I){const g=[],Q=new Set,C=i=>{if(!(g.length>=I||Q.has(i))&&(Q.add(i),!(A(i)&&(g.push(i),g.length>=I))&&i.children))for(let E=0;E<i.children.length;E++){const D=i.children[E];D!=null&&C(D)}};return C(B),g}function Ps(B,A,I=new Set){if(I.has(B))return null;if(I.add(B),A(B))return B;if(!B.children)return null;for(let g=0;g<B.children.length;g++){const Q=B.children[g];if(Q==null)continue;const C=Ps(Q,A,I);if(C)return C}return null}const x0=[["nodes","node"],["materials","material"],["textures","texture"],["cameras","camera"]];function Ts(B,A,I){let g=0;const Q=(C,i,E,D)=>{const o=C.userData;if(!o||typeof o!="object"||typeof o[fB]=="string")return;const s=B[E];if(!Array.isArray(s))return;const t=s[D];if(!t||typeof t!="object")return;const w=Y0(t)??L0(i,t.name,H0(s,D));o[fB]=w,g++};if(A){for(const[C,i]of A)if(!(!i||typeof C!="object"))for(const[E,D]of x0){const o=i[E];if(typeof o=="number"){Q(C,D,E,o);break}}}if(I)for(let C=0;C<I.length;C++){const i=I[C];i&&Q(i,"scene","scenes",C)}return{attached:g}}const gD=2,Mg=4,mg=4,Os=4,gQ=new Int32Array(2),Xs=new Float32Array(gQ.buffer),vs=new Float64Array(gQ.buffer),eE=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;class _g{constructor(A,I){this.low=A|0,this.high=I|0}static create(A,I){return A==0&&I==0?_g.ZERO:new _g(A,I)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(A){return this.low==A.low&&this.high==A.high}}_g.ZERO=new _g(0,0);var QD;(function(B){B[B.UTF8_BYTES=1]="UTF8_BYTES",B[B.UTF16_STRING=2]="UTF16_STRING"})(QD||(QD={}));class nC{constructor(A){this.bytes_=A,this.position_=0}static allocate(A){return new nC(new Uint8Array(A))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(A){this.position_=A}capacity(){return this.bytes_.length}readInt8(A){return this.readUint8(A)<<24>>24}readUint8(A){return this.bytes_[A]}readInt16(A){return this.readUint16(A)<<16>>16}readUint16(A){return this.bytes_[A]|this.bytes_[A+1]<<8}readInt32(A){return this.bytes_[A]|this.bytes_[A+1]<<8|this.bytes_[A+2]<<16|this.bytes_[A+3]<<24}readUint32(A){return this.readInt32(A)>>>0}readInt64(A){return new _g(this.readInt32(A),this.readInt32(A+4))}readUint64(A){return new _g(this.readUint32(A),this.readUint32(A+4))}readFloat32(A){return gQ[0]=this.readInt32(A),Xs[0]}readFloat64(A){return gQ[eE?0:1]=this.readInt32(A),gQ[eE?1:0]=this.readInt32(A+4),vs[0]}writeInt8(A,I){this.bytes_[A]=I}writeUint8(A,I){this.bytes_[A]=I}writeInt16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeUint16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeInt32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeUint32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeInt64(A,I){this.writeInt32(A,I.low),this.writeInt32(A+4,I.high)}writeUint64(A,I){this.writeUint32(A,I.low),this.writeUint32(A+4,I.high)}writeFloat32(A,I){Xs[0]=I,this.writeInt32(A,gQ[0])}writeFloat64(A,I){vs[0]=I,this.writeInt32(A,gQ[eE?0:1]),this.writeInt32(A+4,gQ[eE?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+Mg+mg)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let A="";for(let I=0;I<mg;I++)A+=String.fromCharCode(this.readInt8(this.position_+Mg+I));return A}__offset(A,I){const g=A-this.readInt32(A);return I<this.readInt16(g)?this.readInt16(g+I):0}__union(A,I){return A.bb_pos=I+this.readInt32(I),A.bb=this,A}__string(A,I){A+=this.readInt32(A);const g=this.readInt32(A);let Q="",C=0;if(A+=Mg,I===QD.UTF8_BYTES)return this.bytes_.subarray(A,A+g);for(;C<g;){let i;const E=this.readUint8(A+C++);if(E<192)i=E;else{const D=this.readUint8(A+C++);if(E<224)i=(E&31)<<6|D&63;else{const o=this.readUint8(A+C++);if(E<240)i=(E&15)<<12|(D&63)<<6|o&63;else{const s=this.readUint8(A+C++);i=(E&7)<<18|(D&63)<<12|(o&63)<<6|s&63}}}i<65536?Q+=String.fromCharCode(i):(i-=65536,Q+=String.fromCharCode((i>>10)+55296,(i&1023)+56320))}return Q}__union_with_string(A,I){return typeof A=="string"?this.__string(I):this.__union(A,I)}__indirect(A){return A+this.readInt32(A)}__vector(A){return A+this.readInt32(A)+Mg}__vector_len(A){return this.readInt32(A+this.readInt32(A))}__has_identifier(A){if(A.length!=mg)throw new Error("FlatBuffers: file identifier must be length "+mg);for(let I=0;I<mg;I++)if(A.charCodeAt(I)!=this.readInt8(this.position()+Mg+I))return!1;return!0}createLong(A,I){return _g.create(A,I)}createScalarList(A,I){const g=[];for(let Q=0;Q<I;++Q)A(Q)!==null&&g.push(A(Q));return g}createObjList(A,I){const g=[];for(let Q=0;Q<I;++Q){const C=A(Q);C!==null&&g.push(C.unpack())}return g}}class zo{constructor(A){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null;let I;A?I=A:I=1024,this.bb=nC.allocate(I),this.space=I}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(A){this.force_defaults=A}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(A,I){A>this.minalign&&(this.minalign=A);const g=~(this.bb.capacity()-this.space+I)+1&A-1;for(;this.space<g+A+I;){const Q=this.bb.capacity();this.bb=zo.growByteBuffer(this.bb),this.space+=this.bb.capacity()-Q}this.pad(g)}pad(A){for(let I=0;I<A;I++)this.bb.writeInt8(--this.space,0)}writeInt8(A){this.bb.writeInt8(this.space-=1,A)}writeInt16(A){this.bb.writeInt16(this.space-=2,A)}writeInt32(A){this.bb.writeInt32(this.space-=4,A)}writeInt64(A){this.bb.writeInt64(this.space-=8,A)}writeFloat32(A){this.bb.writeFloat32(this.space-=4,A)}writeFloat64(A){this.bb.writeFloat64(this.space-=8,A)}addInt8(A){this.prep(1,0),this.writeInt8(A)}addInt16(A){this.prep(2,0),this.writeInt16(A)}addInt32(A){this.prep(4,0),this.writeInt32(A)}addInt64(A){this.prep(8,0),this.writeInt64(A)}addFloat32(A){this.prep(4,0),this.writeFloat32(A)}addFloat64(A){this.prep(8,0),this.writeFloat64(A)}addFieldInt8(A,I,g){(this.force_defaults||I!=g)&&(this.addInt8(I),this.slot(A))}addFieldInt16(A,I,g){(this.force_defaults||I!=g)&&(this.addInt16(I),this.slot(A))}addFieldInt32(A,I,g){(this.force_defaults||I!=g)&&(this.addInt32(I),this.slot(A))}addFieldInt64(A,I,g){(this.force_defaults||!I.equals(g))&&(this.addInt64(I),this.slot(A))}addFieldFloat32(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat32(I),this.slot(A))}addFieldFloat64(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat64(I),this.slot(A))}addFieldOffset(A,I,g){(this.force_defaults||I!=g)&&(this.addOffset(I),this.slot(A))}addFieldStruct(A,I,g){I!=g&&(this.nested(I),this.slot(A))}nested(A){if(A!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")}notNested(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")}slot(A){this.vtable!==null&&(this.vtable[A]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(A){const I=A.capacity();if(I&3221225472)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");const g=I<<1,Q=nC.allocate(g);return Q.setPosition(g-I),Q.bytes().set(A.bytes(),g-I),Q}addOffset(A){this.prep(Mg,0),this.writeInt32(this.offset()-A+Mg)}startObject(A){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=A;for(let I=0;I<A;I++)this.vtable[I]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);const A=this.offset();let I=this.vtable_in_use-1;for(;I>=0&&this.vtable[I]==0;I--);const g=I+1;for(;I>=0;I--)this.addInt16(this.vtable[I]!=0?A-this.vtable[I]:0);const Q=2;this.addInt16(A-this.object_start);const C=(g+Q)*gD;this.addInt16(C);let i=0;const E=this.space;A:for(I=0;I<this.vtables.length;I++){const D=this.bb.capacity()-this.vtables[I];if(C==this.bb.readInt16(D)){for(let o=gD;o<C;o+=gD)if(this.bb.readInt16(E+o)!=this.bb.readInt16(D+o))continue A;i=this.vtables[I];break}}return i?(this.space=this.bb.capacity()-A,this.bb.writeInt32(this.space,i-A)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-A,this.offset()-A)),this.isNested=!1,A}finish(A,I,g){const Q=g?Os:0;if(I){const C=I;if(this.prep(this.minalign,Mg+mg+Q),C.length!=mg)throw new Error("FlatBuffers: file identifier must be length "+mg);for(let i=mg-1;i>=0;i--)this.writeInt8(C.charCodeAt(i))}this.prep(this.minalign,Mg+Q),this.addOffset(A),Q&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(A,I){this.finish(A,I,!0)}requiredField(A,I){const g=this.bb.capacity()-A,Q=g-this.bb.readInt32(g);if(this.bb.readInt16(Q+I)==0)throw new Error("FlatBuffers: field "+I+" must be set")}startVector(A,I,g){this.notNested(),this.vector_num_elems=I,this.prep(Mg,A*I),this.prep(g,A*I)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(A){if(!A)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(A))return this.string_maps.get(A);const I=this.createString(A);return this.string_maps.set(A,I),I}createString(A){if(!A)return 0;let I;if(A instanceof Uint8Array)I=A;else{I=[];let g=0;for(;g<A.length;){let Q;const C=A.charCodeAt(g++);if(C<55296||C>=56320)Q=C;else{const i=A.charCodeAt(g++);Q=(C<<10)+i+-56613888}Q<128?I.push(Q):(Q<2048?I.push(Q>>6&31|192):(Q<65536?I.push(Q>>12&15|224):I.push(Q>>18&7|240,Q>>12&63|128),I.push(Q>>6&63|128)),I.push(Q&63|128))}}this.addInt8(0),this.startVector(1,I.length,1),this.bb.setPosition(this.space-=I.length);for(let g=0,Q=this.space,C=this.bb.bytes();g<I.length;g++)C[Q++]=I[g];return this.endVector()}createLong(A,I){return _g.create(A,I)}createObjectOffset(A){return A===null?0:typeof A=="string"?this.createString(A):A.pack(this)}createObjectOffsetList(A){const I=[];for(let g=0;g<A.length;++g){const Q=A[g];if(Q!==null)I.push(this.createObjectOffset(Q));else throw new Error("FlatBuffers: Argument for createObjectOffsetList cannot contain null.")}return I}createStructOffsetList(A,I){return I(this,A.length),this.createObjectOffsetList(A),this.endVector()}}const II={ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function Zs(B){const A=await fetch(B);if(A.ok)return A.json();throw new Error(A.statusText)}async function q0(B){return await Zs(`${B}/profilesList.json`)}async function u0(B,A,I=null,g=!0){if(!B)throw new Error("No xrInputSource supplied");const Q=await q0(A);let C;if(B.profiles.some(D=>{const o=Q[D];return o&&(C={profileId:D,profilePath:`${A}/${o.path}`,deprecated:!!o.deprecated}),!!C}),!C){if(!I)throw new Error("No matching profile name found");const D=Q[I];if(!D)throw new Error(`No matching profile name found and default profile "${I}" missing.`);C={profileId:I,profilePath:`${A}/${D.path}`,deprecated:!!D.deprecated}}const i=await Zs(C.profilePath);let E;if(g){let D;if(B.handedness==="any"?D=i.layouts[Object.keys(i.layouts)[0]]:D=i.layouts[B.handedness],!D)throw new Error(`No matching handedness, ${B.handedness}, in profile ${C.profileId}`);D.assetPath&&(E=C.profilePath.replace("profile.json",D.assetPath))}return{profile:i,assetPath:E}}const b0={xAxis:0,yAxis:0,button:0,state:II.ComponentState.DEFAULT};function m0(B=0,A=0){let I=B,g=A;if(Math.sqrt(B*B+A*A)>1){const Q=Math.atan2(A,B);I=Math.cos(Q),g=Math.sin(Q)}return{normalizedXAxis:I*.5+.5,normalizedYAxis:g*.5+.5}}class P0{constructor(A){this.componentProperty=A.componentProperty,this.states=A.states,this.valueNodeName=A.valueNodeName,this.valueNodeProperty=A.valueNodeProperty,this.valueNodeProperty===II.VisualResponseProperty.TRANSFORM&&(this.minNodeName=A.minNodeName,this.maxNodeName=A.maxNodeName),this.value=0,this.updateFromComponent(b0)}updateFromComponent({xAxis:A,yAxis:I,button:g,state:Q}){const{normalizedXAxis:C,normalizedYAxis:i}=m0(A,I);switch(this.componentProperty){case II.ComponentProperty.X_AXIS:this.value=this.states.includes(Q)?C:.5;break;case II.ComponentProperty.Y_AXIS:this.value=this.states.includes(Q)?i:.5;break;case II.ComponentProperty.BUTTON:this.value=this.states.includes(Q)?g:0;break;case II.ComponentProperty.STATE:this.valueNodeProperty===II.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(Q):this.value=this.states.includes(Q)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class T0{constructor(A,I){if(!A||!I||!I.visualResponses||!I.gamepadIndices||Object.keys(I.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=A,this.type=I.type,this.rootNodeName=I.rootNodeName,this.touchPointNodeName=I.touchPointNodeName,this.visualResponses={},Object.keys(I.visualResponses).forEach(g=>{const Q=new P0(I.visualResponses[g]);this.visualResponses[g]=Q}),this.gamepadIndices=Object.assign({},I.gamepadIndices),this.values={state:II.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(A){if(this.values.state=II.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&A.buttons.length>this.gamepadIndices.button){const I=A.buttons[this.gamepadIndices.button];this.values.button=I.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,I.pressed||this.values.button===1?this.values.state=II.ComponentState.PRESSED:(I.touched||this.values.button>II.ButtonTouchThreshold)&&(this.values.state=II.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&A.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=A.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===II.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>II.AxisTouchThreshold&&(this.values.state=II.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&A.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=A.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===II.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>II.AxisTouchThreshold&&(this.values.state=II.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(I=>{I.updateFromComponent(this.values)})}}class O0{constructor(A,I,g){if(!A)throw new Error("No xrInputSource supplied");if(!I)throw new Error("No profile supplied");this.xrInputSource=A,this.assetUrl=g,this.id=I.profileId,this.layoutDescription=I.layouts[A.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(Q=>{const C=this.layoutDescription.components[Q];this.components[Q]=new T0(Q,C)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const A=[];return Object.values(this.components).forEach(I=>{A.push(I.data)}),A}updateFromGamepad(){Object.values(this.components).forEach(A=>{A.updateFromGamepad(this.xrInputSource.gamepad)})}}const yI=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Vs=1234567;const Ws=Math.PI/180,js=180/Math.PI;function X0(){const B=Math.random()*4294967295|0,A=Math.random()*4294967295|0,I=Math.random()*4294967295|0,g=Math.random()*4294967295|0;return(yI[B&255]+yI[B>>8&255]+yI[B>>16&255]+yI[B>>24&255]+"-"+yI[A&255]+yI[A>>8&255]+"-"+yI[A>>16&15|64]+yI[A>>24&255]+"-"+yI[I&63|128]+yI[I>>8&255]+"-"+yI[I>>16&255]+yI[I>>24&255]+yI[g&255]+yI[g>>8&255]+yI[g>>16&255]+yI[g>>24&255]).toLowerCase()}function Jg(B,A,I){return Math.max(A,Math.min(I,B))}function zs(B,A){return(B%A+A)%A}function v0(B,A,I,g,Q){return g+(B-A)*(Q-g)/(I-A)}function Z0(B,A,I){return B!==A?(I-B)/(A-B):0}function _s(B,A,I){return(1-I)*B+I*A}function V0(B,A,I,g){return _s(B,A,1-Math.exp(-I*g))}function W0(B,A=1){return A-Math.abs(zs(B,A*2)-A)}function j0(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*(3-2*B))}function z0(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*B*(B*(B*6-15)+10))}function _0(B,A){return B+Math.floor(Math.random()*(A-B+1))}function $0(B,A){return B+Math.random()*(A-B)}function Ah(B){return B*(.5-Math.random())}function Ih(B){B!==void 0&&(Vs=B);let A=Vs+=1831565813;return A=Math.imul(A^A>>>15,A|1),A^=A+Math.imul(A^A>>>7,A|61),((A^A>>>14)>>>0)/4294967296}function gh(B){return B*Ws}function Qh(B){return B*js}function Bh(B){return(B&B-1)===0&&B!==0}function Ch(B){return Math.pow(2,Math.ceil(Math.log(B)/Math.LN2))}function Eh(B){return Math.pow(2,Math.floor(Math.log(B)/Math.LN2))}function ih(B,A,I,g,Q){const C=Math.cos,i=Math.sin,E=C(I/2),D=i(I/2),o=C((A+g)/2),s=i((A+g)/2),t=C((A-g)/2),w=i((A-g)/2),a=C((g-A)/2),G=i((g-A)/2);switch(Q){case"XYX":B.set(E*s,D*t,D*w,E*o);break;case"YZY":B.set(D*w,E*s,D*t,E*o);break;case"ZXZ":B.set(D*t,D*w,E*s,E*o);break;case"XZX":B.set(E*s,D*G,D*a,E*o);break;case"YXY":B.set(D*a,E*s,D*G,E*o);break;case"ZYZ":B.set(D*G,D*a,E*s,E*o);break;default:console.warn("../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+Q)}}function Dh(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return B/4294967295;case Uint16Array:return B/65535;case Uint8Array:return B/255;case Int32Array:return Math.max(B/2147483647,-1);case Int16Array:return Math.max(B/32767,-1);case Int8Array:return Math.max(B/127,-1);default:throw new Error("Invalid component type.")}}function oh(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return Math.round(B*4294967295);case Uint16Array:return Math.round(B*65535);case Uint8Array:return Math.round(B*255);case Int32Array:return Math.round(B*2147483647);case Int16Array:return Math.round(B*32767);case Int8Array:return Math.round(B*127);default:throw new Error("Invalid component type.")}}const jQ={DEG2RAD:Ws,RAD2DEG:js,generateUUID:X0,clamp:Jg,euclideanModulo:zs,mapLinear:v0,inverseLerp:Z0,lerp:_s,damp:V0,pingpong:W0,smoothstep:j0,smootherstep:z0,randInt:_0,randFloat:$0,randFloatSpread:Ah,seededRandom:Ih,degToRad:gh,radToDeg:Qh,isPowerOfTwo:Bh,ceilPowerOfTwo:Ch,floorPowerOfTwo:Eh,setQuaternionFromProperEuler:ih,normalize:oh,denormalize:Dh};class SA{constructor(A=0,I=0,g=0,Q=1){this.isQuaternion=!0,this._x=A,this._y=I,this._z=g,this._w=Q}static slerpFlat(A,I,g,Q,C,i,E){let D=g[Q+0],o=g[Q+1],s=g[Q+2],t=g[Q+3];const w=C[i+0],a=C[i+1],G=C[i+2],r=C[i+3];if(E===0){A[I+0]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t;return}if(E===1){A[I+0]=w,A[I+1]=a,A[I+2]=G,A[I+3]=r;return}if(t!==r||D!==w||o!==a||s!==G){let c=1-E;const y=D*w+o*a+s*G+t*r,R=y>=0?1:-1,S=1-y*y;if(S>Number.EPSILON){const N=Math.sqrt(S),M=Math.atan2(N,y*R);c=Math.sin(c*M)/N,E=Math.sin(E*M)/N}const n=E*R;if(D=D*c+w*n,o=o*c+a*n,s=s*c+G*n,t=t*c+r*n,c===1-E){const N=1/Math.sqrt(D*D+o*o+s*s+t*t);D*=N,o*=N,s*=N,t*=N}}A[I]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t}static multiplyQuaternionsFlat(A,I,g,Q,C,i){const E=g[Q],D=g[Q+1],o=g[Q+2],s=g[Q+3],t=C[i],w=C[i+1],a=C[i+2],G=C[i+3];return A[I]=E*G+s*t+D*a-o*w,A[I+1]=D*G+s*w+o*t-E*a,A[I+2]=o*G+s*a+E*w-D*t,A[I+3]=s*G-E*t-D*w-o*a,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,I,g,Q){return this._x=A,this._y=I,this._z=g,this._w=Q,this._onChangeCallback(),this}clone(){return new SA(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,I=!0){const g=A._x,Q=A._y,C=A._z,i=A._order,E=Math.cos,D=Math.sin,o=E(g/2),s=E(Q/2),t=E(C/2),w=D(g/2),a=D(Q/2),G=D(C/2);switch(i){case"XYZ":this._x=w*s*t+o*a*G,this._y=o*a*t-w*s*G,this._z=o*s*G+w*a*t,this._w=o*s*t-w*a*G;break;case"YXZ":this._x=w*s*t+o*a*G,this._y=o*a*t-w*s*G,this._z=o*s*G-w*a*t,this._w=o*s*t+w*a*G;break;case"ZXY":this._x=w*s*t-o*a*G,this._y=o*a*t+w*s*G,this._z=o*s*G+w*a*t,this._w=o*s*t-w*a*G;break;case"ZYX":this._x=w*s*t-o*a*G,this._y=o*a*t+w*s*G,this._z=o*s*G-w*a*t,this._w=o*s*t+w*a*G;break;case"YZX":this._x=w*s*t+o*a*G,this._y=o*a*t+w*s*G,this._z=o*s*G-w*a*t,this._w=o*s*t-w*a*G;break;case"XZY":this._x=w*s*t-o*a*G,this._y=o*a*t-w*s*G,this._z=o*s*G+w*a*t,this._w=o*s*t+w*a*G;break;default:console.warn("../math.Quaternion: .setFromEuler() encountered an unknown order: "+i)}return I===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,I){const g=I/2,Q=Math.sin(g);return this._x=A.x*Q,this._y=A.y*Q,this._z=A.z*Q,this._w=Math.cos(g),this._onChangeCallback(),this}setFromRotationMatrix(A){const I=A.elements,g=I[0],Q=I[4],C=I[8],i=I[1],E=I[5],D=I[9],o=I[2],s=I[6],t=I[10],w=g+E+t;if(w>0){const a=.5/Math.sqrt(w+1);this._w=.25/a,this._x=(s-D)*a,this._y=(C-o)*a,this._z=(i-Q)*a}else if(g>E&&g>t){const a=2*Math.sqrt(1+g-E-t);this._w=(s-D)/a,this._x=.25*a,this._y=(Q+i)/a,this._z=(C+o)/a}else if(E>t){const a=2*Math.sqrt(1+E-g-t);this._w=(C-o)/a,this._x=(Q+i)/a,this._y=.25*a,this._z=(D+s)/a}else{const a=2*Math.sqrt(1+t-g-E);this._w=(i-Q)/a,this._x=(C+o)/a,this._y=(D+s)/a,this._z=.25*a}return this._onChangeCallback(),this}setFromUnitVectors(A,I){let g=A.dot(I)+1;return g<Number.EPSILON?(g=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=g):(this._x=0,this._y=-A.z,this._z=A.y,this._w=g)):(this._x=A.y*I.z-A.z*I.y,this._y=A.z*I.x-A.x*I.z,this._z=A.x*I.y-A.y*I.x,this._w=g),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(Jg(this.dot(A),-1,1)))}rotateTowards(A,I){const g=this.angleTo(A);if(g===0)return this;const Q=Math.min(1,I/g);return this.slerp(A,Q),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,I){const g=A._x,Q=A._y,C=A._z,i=A._w,E=I._x,D=I._y,o=I._z,s=I._w;return this._x=g*s+i*E+Q*o-C*D,this._y=Q*s+i*D+C*E-g*o,this._z=C*s+i*o+g*D-Q*E,this._w=i*s-g*E-Q*D-C*o,this._onChangeCallback(),this}slerp(A,I){if(I===0)return this;if(I===1)return this.copy(A);const g=this._x,Q=this._y,C=this._z,i=this._w;let E=i*A._w+g*A._x+Q*A._y+C*A._z;if(E<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,E=-E):this.copy(A),E>=1)return this._w=i,this._x=g,this._y=Q,this._z=C,this;const D=1-E*E;if(D<=Number.EPSILON){const a=1-I;return this._w=a*i+I*this._w,this._x=a*g+I*this._x,this._y=a*Q+I*this._y,this._z=a*C+I*this._z,this.normalize(),this}const o=Math.sqrt(D),s=Math.atan2(o,E),t=Math.sin((1-I)*s)/o,w=Math.sin(I*s)/o;return this._w=i*t+this._w*w,this._x=g*t+this._x*w,this._y=Q*t+this._y*w,this._z=C*t+this._z*w,this._onChangeCallback(),this}slerpQuaternions(A,I,g){return this.copy(A).slerp(I,g)}random(){const A=2*Math.PI*Math.random(),I=2*Math.PI*Math.random(),g=Math.random(),Q=Math.sqrt(1-g),C=Math.sqrt(g);return this.set(Q*Math.sin(A),Q*Math.cos(A),C*Math.sin(I),C*Math.cos(I))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,I=0){return this._x=A[I],this._y=A[I+1],this._z=A[I+2],this._w=A[I+3],this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._w,A}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Z{constructor(A=0,I=0,g=0){this.isVector3=!0,Z.prototype.isVector3=!0,this.x=A,this.y=I,this.z=g}set(A,I,g){return g===void 0&&(g=this.z),this.x=A,this.y=I,this.z=g,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new Z(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,I){return this.x=A.x*I.x,this.y=A.y*I.y,this.z=A.z*I.z,this}applyEuler(A){return this.applyQuaternion($s.setFromEuler(A))}applyAxisAngle(A,I){return this.applyQuaternion($s.setFromAxisAngle(A,I))}applyMatrix3(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[3]*g+C[6]*Q,this.y=C[1]*I+C[4]*g+C[7]*Q,this.z=C[2]*I+C[5]*g+C[8]*Q,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=A.elements,i=1/(C[3]*I+C[7]*g+C[11]*Q+C[15]);return this.x=(C[0]*I+C[4]*g+C[8]*Q+C[12])*i,this.y=(C[1]*I+C[5]*g+C[9]*Q+C[13])*i,this.z=(C[2]*I+C[6]*g+C[10]*Q+C[14])*i,this}applyQuaternion(A){const I=this.x,g=this.y,Q=this.z,C=A.x,i=A.y,E=A.z,D=A.w,o=2*(i*Q-E*g),s=2*(E*I-C*Q),t=2*(C*g-i*I);return this.x=I+D*o+i*t-E*s,this.y=g+D*s+E*o-C*t,this.z=Q+D*t+C*s-i*o,this}transformDirection(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[4]*g+C[8]*Q,this.y=C[1]*I+C[5]*g+C[9]*Q,this.z=C[2]*I+C[6]*g+C[10]*Q,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,I){const g=A.x,Q=A.y,C=A.z,i=I.x,E=I.y,D=I.z;return this.x=Q*D-C*E,this.y=C*i-g*D,this.z=g*E-Q*i,this}projectOnVector(A){const I=A.lengthSq();if(I===0)return this.set(0,0,0);const g=A.dot(this)/I;return this.copy(A).multiplyScalar(g)}projectOnPlane(A){return BD.copy(this).projectOnVector(A),this.sub(BD)}reflect(A){return this.sub(BD.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(Jg(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y,Q=this.z-A.z;return I*I+g*g+Q*Q}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSphericalCoords(A,I,g){const Q=Math.sin(I)*A;return this.x=Q*Math.sin(g),this.y=Math.cos(I)*A,this.z=Q*Math.cos(g),this}setFromCylindricalCoords(A,I,g){return this.x=A*Math.sin(I),this.y=g,this.z=A*Math.cos(I),this}setFromMatrixPosition(A){const I=A.elements;return this.x=I[12],this.y=I[13],this.z=I[14],this}setFromMatrixScale(A){const I=this.setFromMatrixColumn(A,0).length(),g=this.setFromMatrixColumn(A,1).length(),Q=this.setFromMatrixColumn(A,2).length();return this.x=I,this.y=g,this.z=Q,this}setFromMatrixColumn(A,I){return this.fromArray(A.elements,I*4)}setFromMatrix3Column(A,I){return this.fromArray(A.elements,I*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,I=Math.random()*2-1,g=Math.sqrt(1-I*I);return this.x=g*Math.cos(A),this.y=I,this.z=g*Math.sin(A),this}abs(){return this.x=Math.abs(this.x),this.y=Math.abs(this.y),this.z=Math.abs(this.z),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const BD=new Z,$s=new SA,hE=2e3,At=2001;class kg{constructor(A,I,g,Q,C,i,E,D,o,s,t,w,a,G,r,c){this.isMatrix4=!0,kg.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,i,E,D,o,s,t,w,a,G,r,c)}extractPosition(A){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(A)}multiplyToArray(A,I,g){return console.error("THREE.Matrix4: .multiplyToArray() has been removed."),this}setRotationFromQuaternion(A){return this.makeRotationFromQuaternion(A)}set(A,I,g,Q,C,i,E,D,o,s,t,w,a,G,r,c){const y=this.elements;return y[0]=A,y[4]=I,y[8]=g,y[12]=Q,y[1]=C,y[5]=i,y[9]=E,y[13]=D,y[2]=o,y[6]=s,y[10]=t,y[14]=w,y[3]=a,y[7]=G,y[11]=r,y[15]=c,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new kg().fromArray(this.elements)}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],I[9]=g[9],I[10]=g[10],I[11]=g[11],I[12]=g[12],I[13]=g[13],I[14]=g[14],I[15]=g[15],this}copyPosition(A){const I=this.elements,g=A.elements;return I[12]=g[12],I[13]=g[13],I[14]=g[14],this}setFromMatrix3(A){const I=A.elements;return this.set(I[0],I[3],I[6],0,I[1],I[4],I[7],0,I[2],I[5],I[8],0,0,0,0,1),this}extractBasis(A,I,g){return A.setFromMatrixColumn(this,0),I.setFromMatrixColumn(this,1),g.setFromMatrixColumn(this,2),this}makeBasis(A,I,g){return this.set(A.x,I.x,g.x,0,A.y,I.y,g.y,0,A.z,I.z,g.z,0,0,0,0,1),this}extractRotation(A){const I=this.elements,g=A.elements,Q=1/zQ.setFromMatrixColumn(A,0).length(),C=1/zQ.setFromMatrixColumn(A,1).length(),i=1/zQ.setFromMatrixColumn(A,2).length();return I[0]=g[0]*Q,I[1]=g[1]*Q,I[2]=g[2]*Q,I[3]=0,I[4]=g[4]*C,I[5]=g[5]*C,I[6]=g[6]*C,I[7]=0,I[8]=g[8]*i,I[9]=g[9]*i,I[10]=g[10]*i,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromEuler(A){const I=this.elements,g=A.x,Q=A.y,C=A.z,i=Math.cos(g),E=Math.sin(g),D=Math.cos(Q),o=Math.sin(Q),s=Math.cos(C),t=Math.sin(C);if(A.order==="XYZ"){const w=i*s,a=i*t,G=E*s,r=E*t;I[0]=D*s,I[4]=-D*t,I[8]=o,I[1]=a+G*o,I[5]=w-r*o,I[9]=-E*D,I[2]=r-w*o,I[6]=G+a*o,I[10]=i*D}else if(A.order==="YXZ"){const w=D*s,a=D*t,G=o*s,r=o*t;I[0]=w+r*E,I[4]=G*E-a,I[8]=i*o,I[1]=i*t,I[5]=i*s,I[9]=-E,I[2]=a*E-G,I[6]=r+w*E,I[10]=i*D}else if(A.order==="ZXY"){const w=D*s,a=D*t,G=o*s,r=o*t;I[0]=w-r*E,I[4]=-i*t,I[8]=G+a*E,I[1]=a+G*E,I[5]=i*s,I[9]=r-w*E,I[2]=-i*o,I[6]=E,I[10]=i*D}else if(A.order==="ZYX"){const w=i*s,a=i*t,G=E*s,r=E*t;I[0]=D*s,I[4]=G*o-a,I[8]=w*o+r,I[1]=D*t,I[5]=r*o+w,I[9]=a*o-G,I[2]=-o,I[6]=E*D,I[10]=i*D}else if(A.order==="YZX"){const w=i*D,a=i*o,G=E*D,r=E*o;I[0]=D*s,I[4]=r-w*t,I[8]=G*t+a,I[1]=t,I[5]=i*s,I[9]=-E*s,I[2]=-o*s,I[6]=a*t+G,I[10]=w-r*t}else if(A.order==="XZY"){const w=i*D,a=i*o,G=E*D,r=E*o;I[0]=D*s,I[4]=-t,I[8]=o*s,I[1]=w*t+r,I[5]=i*s,I[9]=a*t-G,I[2]=G*t-a,I[6]=E*s,I[10]=r*t+w}return I[3]=0,I[7]=0,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromQuaternion(A){return this.compose(sh,A,th)}lookAt(A,I,g){const Q=this.elements;return ZI.subVectors(A,I),ZI.lengthSq()===0&&(ZI.z=1),ZI.normalize(),QQ.crossVectors(g,ZI),QQ.lengthSq()===0&&(Math.abs(g.z)===1?ZI.x+=1e-4:ZI.z+=1e-4,ZI.normalize(),QQ.crossVectors(g,ZI)),QQ.normalize(),cE.crossVectors(ZI,QQ),Q[0]=QQ.x,Q[4]=cE.x,Q[8]=ZI.x,Q[1]=QQ.y,Q[5]=cE.y,Q[9]=ZI.y,Q[2]=QQ.z,Q[6]=cE.z,Q[10]=ZI.z,this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,i=g[0],E=g[4],D=g[8],o=g[12],s=g[1],t=g[5],w=g[9],a=g[13],G=g[2],r=g[6],c=g[10],y=g[14],R=g[3],S=g[7],n=g[11],N=g[15],M=Q[0],J=Q[4],L=Q[8],H=Q[12],Y=Q[1],d=Q[5],l=Q[9],p=Q[13],u=Q[2],P=Q[6],O=Q[10],W=Q[14],T=Q[3],j=Q[7],EA=Q[11],wA=Q[15];return C[0]=i*M+E*Y+D*u+o*T,C[4]=i*J+E*d+D*P+o*j,C[8]=i*L+E*l+D*O+o*EA,C[12]=i*H+E*p+D*W+o*wA,C[1]=s*M+t*Y+w*u+a*T,C[5]=s*J+t*d+w*P+a*j,C[9]=s*L+t*l+w*O+a*EA,C[13]=s*H+t*p+w*W+a*wA,C[2]=G*M+r*Y+c*u+y*T,C[6]=G*J+r*d+c*P+y*j,C[10]=G*L+r*l+c*O+y*EA,C[14]=G*H+r*p+c*W+y*wA,C[3]=R*M+S*Y+n*u+N*T,C[7]=R*J+S*d+n*P+N*j,C[11]=R*L+S*l+n*O+N*EA,C[15]=R*H+S*p+n*W+N*wA,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[4]*=A,I[8]*=A,I[12]*=A,I[1]*=A,I[5]*=A,I[9]*=A,I[13]*=A,I[2]*=A,I[6]*=A,I[10]*=A,I[14]*=A,I[3]*=A,I[7]*=A,I[11]*=A,I[15]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[4],Q=A[8],C=A[12],i=A[1],E=A[5],D=A[9],o=A[13],s=A[2],t=A[6],w=A[10],a=A[14],G=A[3],r=A[7],c=A[11],y=A[15];return G*(+C*D*t-Q*o*t-C*E*w+g*o*w+Q*E*a-g*D*a)+r*(+I*D*a-I*o*w+C*i*w-Q*i*a+Q*o*s-C*D*s)+c*(+I*o*t-I*E*a-C*i*t+g*i*a+C*E*s-g*o*s)+y*(-Q*E*s-I*D*t+I*E*w+Q*i*t-g*i*w+g*D*s)}transpose(){const A=this.elements;let I;return I=A[1],A[1]=A[4],A[4]=I,I=A[2],A[2]=A[8],A[8]=I,I=A[6],A[6]=A[9],A[9]=I,I=A[3],A[3]=A[12],A[12]=I,I=A[7],A[7]=A[13],A[13]=I,I=A[11],A[11]=A[14],A[14]=I,this}setPosition(A,I,g){const Q=this.elements;return A.isVector3?(Q[12]=A.x,Q[13]=A.y,Q[14]=A.z):(Q[12]=A,Q[13]=I,Q[14]=g),this}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],i=A[4],E=A[5],D=A[6],o=A[7],s=A[8],t=A[9],w=A[10],a=A[11],G=A[12],r=A[13],c=A[14],y=A[15],R=t*c*o-r*w*o+r*D*a-E*c*a-t*D*y+E*w*y,S=G*w*o-s*c*o-G*D*a+i*c*a+s*D*y-i*w*y,n=s*r*o-G*t*o+G*E*a-i*r*a-s*E*y+i*t*y,N=G*t*D-s*r*D-G*E*w+i*r*w+s*E*c-i*t*c,M=I*R+g*S+Q*n+C*N;if(M===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const J=1/M;return A[0]=R*J,A[1]=(r*w*C-t*c*C-r*Q*a+g*c*a+t*Q*y-g*w*y)*J,A[2]=(E*c*C-r*D*C+r*Q*o-g*c*o-E*Q*y+g*D*y)*J,A[3]=(t*D*C-E*w*C-t*Q*o+g*w*o+E*Q*a-g*D*a)*J,A[4]=S*J,A[5]=(s*c*C-G*w*C+G*Q*a-I*c*a-s*Q*y+I*w*y)*J,A[6]=(G*D*C-i*c*C-G*Q*o+I*c*o+i*Q*y-I*D*y)*J,A[7]=(i*w*C-s*D*C+s*Q*o-I*w*o-i*Q*a+I*D*a)*J,A[8]=n*J,A[9]=(G*t*C-s*r*C-G*g*a+I*r*a+s*g*y-I*t*y)*J,A[10]=(i*r*C-G*E*C+G*g*o-I*r*o-i*g*y+I*E*y)*J,A[11]=(s*E*C-i*t*C-s*g*o+I*t*o+i*g*a-I*E*a)*J,A[12]=N*J,A[13]=(s*r*Q-G*t*Q+G*g*w-I*r*w-s*g*c+I*t*c)*J,A[14]=(G*E*Q-i*r*Q-G*g*D+I*r*D+i*g*c-I*E*c)*J,A[15]=(i*t*Q-s*E*Q+s*g*D-I*t*D-i*g*w+I*E*w)*J,this}scale(A){const I=this.elements,g=A.x,Q=A.y,C=A.z;return I[0]*=g,I[4]*=Q,I[8]*=C,I[1]*=g,I[5]*=Q,I[9]*=C,I[2]*=g,I[6]*=Q,I[10]*=C,I[3]*=g,I[7]*=Q,I[11]*=C,this}getMaxScaleOnAxis(){const A=this.elements,I=A[0]*A[0]+A[1]*A[1]+A[2]*A[2],g=A[4]*A[4]+A[5]*A[5]+A[6]*A[6],Q=A[8]*A[8]+A[9]*A[9]+A[10]*A[10];return Math.sqrt(Math.max(I,g,Q))}makeTranslation(A,I,g){return A.isVector3?this.set(1,0,0,A.x,0,1,0,A.y,0,0,1,A.z,0,0,0,1):this.set(1,0,0,A,0,1,0,I,0,0,1,g,0,0,0,1),this}makeRotationX(A){const I=Math.cos(A),g=Math.sin(A);return this.set(1,0,0,0,0,I,-g,0,0,g,I,0,0,0,0,1),this}makeRotationY(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,0,g,0,0,1,0,0,-g,0,I,0,0,0,0,1),this}makeRotationZ(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,0,g,I,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(A,I){const g=Math.cos(I),Q=Math.sin(I),C=1-g,i=A.x,E=A.y,D=A.z,o=C*i,s=C*E;return this.set(o*i+g,o*E-Q*D,o*D+Q*E,0,o*E+Q*D,s*E+g,s*D-Q*i,0,o*D-Q*E,s*D+Q*i,C*D*D+g,0,0,0,0,1),this}makeScale(A,I,g){return this.set(A,0,0,0,0,I,0,0,0,0,g,0,0,0,0,1),this}makeShear(A,I,g,Q,C,i){return this.set(1,g,C,0,A,1,i,0,I,Q,1,0,0,0,0,1),this}compose(A,I,g){const Q=this.elements,C=I._x,i=I._y,E=I._z,D=I._w,o=C+C,s=i+i,t=E+E,w=C*o,a=C*s,G=C*t,r=i*s,c=i*t,y=E*t,R=D*o,S=D*s,n=D*t,N=g.x,M=g.y,J=g.z;return Q[0]=(1-(r+y))*N,Q[1]=(a+n)*N,Q[2]=(G-S)*N,Q[3]=0,Q[4]=(a-n)*M,Q[5]=(1-(w+y))*M,Q[6]=(c+R)*M,Q[7]=0,Q[8]=(G+S)*J,Q[9]=(c-R)*J,Q[10]=(1-(w+r))*J,Q[11]=0,Q[12]=A.x,Q[13]=A.y,Q[14]=A.z,Q[15]=1,this}decompose(A,I,g){const Q=this.elements;let C=zQ.set(Q[0],Q[1],Q[2]).length();const i=zQ.set(Q[4],Q[5],Q[6]).length(),E=zQ.set(Q[8],Q[9],Q[10]).length();this.determinant()<0&&(C=-C),A.x=Q[12],A.y=Q[13],A.z=Q[14],eg.copy(this);const D=1/C,o=1/i,s=1/E;return eg.elements[0]*=D,eg.elements[1]*=D,eg.elements[2]*=D,eg.elements[4]*=o,eg.elements[5]*=o,eg.elements[6]*=o,eg.elements[8]*=s,eg.elements[9]*=s,eg.elements[10]*=s,I.setFromRotationMatrix(eg),g.x=C,g.y=i,g.z=E,this}makePerspective(A,I,g,Q,C,i,E=hE){const D=this.elements,o=2*C/(I-A),s=2*C/(g-Q),t=(I+A)/(I-A),w=(g+Q)/(g-Q);let a,G;if(E===hE)a=-(i+C)/(i-C),G=-2*i*C/(i-C);else if(E===At)a=-i/(i-C),G=-i*C/(i-C);else throw new Error("Matrix4.makePerspective(): Invalid coordinate system: "+E);return D[0]=o,D[4]=0,D[8]=t,D[12]=0,D[1]=0,D[5]=s,D[9]=w,D[13]=0,D[2]=0,D[6]=0,D[10]=a,D[14]=G,D[3]=0,D[7]=0,D[11]=-1,D[15]=0,this}makeOrthographic(A,I,g,Q,C,i,E=hE){const D=this.elements,o=1/(I-A),s=1/(g-Q),t=1/(i-C),w=(I+A)*o,a=(g+Q)*s;let G,r;if(E===hE)G=(i+C)*t,r=-2*t;else if(E===At)G=C*t,r=-1*t;else throw new Error("../math.Matrix4.makeOrthographic(): Invalid coordinate system: "+E);return D[0]=2*o,D[4]=0,D[8]=0,D[12]=-w,D[1]=0,D[5]=2*s,D[9]=0,D[13]=-a,D[2]=0,D[6]=0,D[10]=r,D[14]=-G,D[3]=0,D[7]=0,D[11]=0,D[15]=1,this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<16;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<16;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A[I+9]=g[9],A[I+10]=g[10],A[I+11]=g[11],A[I+12]=g[12],A[I+13]=g[13],A[I+14]=g[14],A[I+15]=g[15],A}}const zQ=new Z,eg=new kg,sh=new Z(0,0,0),th=new Z(1,1,1),QQ=new Z,cE=new Z,ZI=new Z,It=new kg,gt=new SA;class NC{constructor(A=0,I=0,g=0,Q=NC.DEFAULT_ORDER){this.isEuler=!0,this._x=A,this._y=I,this._z=g,this._order=Q}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get order(){return this._order}set order(A){this._order=A,this._onChangeCallback()}set(A,I,g,Q=this._order){return this._x=A,this._y=I,this._z=g,this._order=Q,this._onChangeCallback(),this}clone(){return new NC(this._x,this._y,this._z,this._order)}copy(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this}setFromRotationMatrix(A,I=this._order,g=!0){const Q=A.elements,C=Q[0],i=Q[4],E=Q[8],D=Q[1],o=Q[5],s=Q[9],t=Q[2],w=Q[6],a=Q[10];switch(I){case"XYZ":this._y=Math.asin(Jg(E,-1,1)),Math.abs(E)<.9999999?(this._x=Math.atan2(-s,a),this._z=Math.atan2(-i,C)):(this._x=Math.atan2(w,o),this._z=0);break;case"YXZ":this._x=Math.asin(-Jg(s,-1,1)),Math.abs(s)<.9999999?(this._y=Math.atan2(E,a),this._z=Math.atan2(D,o)):(this._y=Math.atan2(-t,C),this._z=0);break;case"ZXY":this._x=Math.asin(Jg(w,-1,1)),Math.abs(w)<.9999999?(this._y=Math.atan2(-t,a),this._z=Math.atan2(-i,o)):(this._y=0,this._z=Math.atan2(D,C));break;case"ZYX":this._y=Math.asin(-Jg(t,-1,1)),Math.abs(t)<.9999999?(this._x=Math.atan2(w,a),this._z=Math.atan2(D,C)):(this._x=0,this._z=Math.atan2(-i,o));break;case"YZX":this._z=Math.asin(Jg(D,-1,1)),Math.abs(D)<.9999999?(this._x=Math.atan2(-s,o),this._y=Math.atan2(-t,C)):(this._x=0,this._y=Math.atan2(E,a));break;case"XZY":this._z=Math.asin(-Jg(i,-1,1)),Math.abs(i)<.9999999?(this._x=Math.atan2(w,o),this._y=Math.atan2(E,C)):(this._x=Math.atan2(-s,a),this._y=0);break;default:console.warn("../math.Euler: .setFromRotationMatrix() encountered an unknown order: "+I)}return this._order=I,g===!0&&this._onChangeCallback(),this}setFromQuaternion(A,I,g){return It.makeRotationFromQuaternion(A),this.setFromRotationMatrix(It,I,g)}setFromVector3(A,I=this._order){return this.set(A.x,A.y,A.z,I)}reorder(A){return gt.setFromEuler(this),this.setFromQuaternion(gt,A)}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order}fromArray(A){return this._x=A[0],this._y=A[1],this._z=A[2],A[3]!==void 0&&(this._order=A[3]),this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._order,A}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(A){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}NC.DEFAULT_ORDER="XYZ";class NB{constructor(A=0,I=0){this.x=A,this.y=I}get width(){return this.x}set width(A){this.x=A}get height(){return this.y}set height(A){this.y=A}set(A,I){return this.x=A,this.y=I,this}setScalar(A){return this.x=A,this.y=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}}clone(){return new NB(this.x,this.y)}copy(A){return this.x=A.x,this.y=A.y,this}add(A){return this.x+=A.x,this.y+=A.y,this}addScalar(A){return this.x+=A,this.y+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this}subScalar(A){return this.x-=A,this.y-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this}multiply(A){return this.x*=A.x,this.y*=A.y,this}multiplyScalar(A){return this.x*=A,this.y*=A,this}divide(A){return this.x/=A.x,this.y/=A.y,this}divideScalar(A){return this.multiplyScalar(1/A)}applyMatrix3(A){const I=this.x,g=this.y,Q=A.elements;return this.x=Q[0]*I+Q[3]*g+Q[6],this.y=Q[1]*I+Q[4]*g+Q[7],this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(A){return this.x*A.x+this.y*A.y}cross(A){return this.x*A.y-this.y*A.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(Jg(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y;return I*I+g*g}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this}equals(A){return A.x===this.x&&A.y===this.y}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A}rotateAround(A,I){const g=Math.cos(I),Q=Math.sin(I),C=this.x-A.x,i=this.y-A.y;return this.x=C*g-i*Q+A.x,this.y=C*Q+i*g+A.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}NB.isVector2=!0;class OI{constructor(A=0,I=0,g=0,Q=1){OI.prototype.isVector4=!0,this.x=A,this.y=I,this.z=g,this.w=Q}get width(){return this.z}set width(A){this.z=A}get height(){return this.w}set height(A){this.w=A}set(A,I,g,Q){return this.x=A,this.y=I,this.z=g,this.w=Q,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this.w=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setW(A){return this.w=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;case 3:this.w=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+A)}}clone(){return new OI(this.x,this.y,this.z,this.w)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this.w=A.w,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this.w=A.w+I.w,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this.w+=A.w*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this.w=A.w-I.w,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this.w*=A.w,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=this.w,i=A.elements;return this.x=i[0]*I+i[4]*g+i[8]*Q+i[12]*C,this.y=i[1]*I+i[5]*g+i[9]*Q+i[13]*C,this.z=i[2]*I+i[6]*g+i[10]*Q+i[14]*C,this.w=i[3]*I+i[7]*g+i[11]*Q+i[15]*C,this}divideScalar(A){return this.multiplyScalar(1/A)}setAxisAngleFromQuaternion(A){this.w=2*Math.acos(A.w);const I=Math.sqrt(1-A.w*A.w);return I<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=A.x/I,this.y=A.y/I,this.z=A.z/I),this}setAxisAngleFromRotationMatrix(A){let I,g,Q,C;const i=A.elements,E=i[0],D=i[4],o=i[8],s=i[1],t=i[5],w=i[9],a=i[2],G=i[6],r=i[10];if(Math.abs(D-s)<.01&&Math.abs(o-a)<.01&&Math.abs(w-G)<.01){if(Math.abs(D+s)<.1&&Math.abs(o+a)<.1&&Math.abs(w+G)<.1&&Math.abs(E+t+r-3)<.1)return this.set(1,0,0,0),this;I=Math.PI;const y=(E+1)/2,R=(t+1)/2,S=(r+1)/2,n=(D+s)/4,N=(o+a)/4,M=(w+G)/4;return y>R&&y>S?y<.01?(g=0,Q=.707106781,C=.707106781):(g=Math.sqrt(y),Q=n/g,C=N/g):R>S?R<.01?(g=.707106781,Q=0,C=.707106781):(Q=Math.sqrt(R),g=n/Q,C=M/Q):S<.01?(g=.707106781,Q=.707106781,C=0):(C=Math.sqrt(S),g=N/C,Q=M/C),this.set(g,Q,C,I),this}let c=Math.sqrt((G-w)*(G-w)+(o-a)*(o-a)+(s-D)*(s-D));return Math.abs(c)<.001&&(c=1),this.x=(G-w)/c,this.y=(o-a)/c,this.z=(s-D)/c,this.w=Math.acos((E+t+r-1)/2),this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this.w=Math.min(this.w,A.w),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this.w=Math.max(this.w,A.w),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this.w=Math.max(A.w,Math.min(I.w,this.w)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this.w=Math.max(A,Math.min(I,this.w)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z+this.w*A.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this.w+=(A.w-this.w)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this.w=A.w+(I.w-A.w)*g,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this.w=A[I+3],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A[I+3]=this.w,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class dg{constructor(A,I,g,Q,C,i,E,D,o){dg.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,i,E,D,o)}set(A,I,g,Q,C,i,E,D,o){const s=this.elements;return s[0]=A,s[1]=Q,s[2]=E,s[3]=I,s[4]=C,s[5]=D,s[6]=g,s[7]=i,s[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],this}extractBasis(A,I,g){return A.setFromMatrix3Column(this,0),I.setFromMatrix3Column(this,1),g.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const I=A.elements;return this.set(I[0],I[4],I[8],I[1],I[5],I[9],I[2],I[6],I[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,i=g[0],E=g[3],D=g[6],o=g[1],s=g[4],t=g[7],w=g[2],a=g[5],G=g[8],r=Q[0],c=Q[3],y=Q[6],R=Q[1],S=Q[4],n=Q[7],N=Q[2],M=Q[5],J=Q[8];return C[0]=i*r+E*R+D*N,C[3]=i*c+E*S+D*M,C[6]=i*y+E*n+D*J,C[1]=o*r+s*R+t*N,C[4]=o*c+s*S+t*M,C[7]=o*y+s*n+t*J,C[2]=w*r+a*R+G*N,C[5]=w*c+a*S+G*M,C[8]=w*y+a*n+G*J,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[3]*=A,I[6]*=A,I[1]*=A,I[4]*=A,I[7]*=A,I[2]*=A,I[5]*=A,I[8]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],i=A[4],E=A[5],D=A[6],o=A[7],s=A[8];return I*i*s-I*E*o-g*C*s+g*E*D+Q*C*o-Q*i*D}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],i=A[4],E=A[5],D=A[6],o=A[7],s=A[8],t=s*i-E*o,w=E*D-s*C,a=o*C-i*D,G=I*t+g*w+Q*a;if(G===0)return this.set(0,0,0,0,0,0,0,0,0);const r=1/G;return A[0]=t*r,A[1]=(Q*o-s*g)*r,A[2]=(E*g-Q*i)*r,A[3]=w*r,A[4]=(s*I-Q*D)*r,A[5]=(Q*C-E*I)*r,A[6]=a*r,A[7]=(g*D-o*I)*r,A[8]=(i*I-g*C)*r,this}transpose(){let A;const I=this.elements;return A=I[1],I[1]=I[3],I[3]=A,A=I[2],I[2]=I[6],I[6]=A,A=I[5],I[5]=I[7],I[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const I=this.elements;return A[0]=I[0],A[1]=I[3],A[2]=I[6],A[3]=I[1],A[4]=I[4],A[5]=I[7],A[6]=I[2],A[7]=I[5],A[8]=I[8],this}setUvTransform(A,I,g,Q,C,i,E){const D=Math.cos(C),o=Math.sin(C);return this.set(g*D,g*o,-g*(D*i+o*E)+i+A,-Q*o,Q*D,-Q*(-o*i+D*E)+E+I,0,0,1),this}scale(A,I){return this.premultiply(CD.makeScale(A,I)),this}rotate(A){return this.premultiply(CD.makeRotation(-A)),this}translate(A,I){return this.premultiply(CD.makeTranslation(A,I)),this}makeTranslation(A,I){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,I,0,0,1),this}makeRotation(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,g,I,0,0,0,1),this}makeScale(A,I){return this.set(A,0,0,0,I,0,0,0,1),this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<9;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<9;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A}clone(){return new dg().fromArray(this.elements)}}const CD=new dg;var LI;(function(B){B[B.Random=0]="Random",B[B.Loop=1]="Loop",B[B.PingPong=2]="PingPong",B[B.Burst=3]="Burst"})(LI||(LI={}));function pB(B,A,I,g){let Q;switch(LI.Random===B?A=Math.random():LI.Burst===B&&g.isBursting&&(A=g.burstParticleIndex/g.burstParticleCount),I>0?Q=Math.floor(A/I)*I:Q=A,B){case LI.Loop:Q=Q%1;break;case LI.PingPong:Q=Math.abs(Q%2-1);break}return Q}class xQ{constructor(A,I,g,Q){this.p=[A,I,g,Q]}genValue(A){const I=A*A,g=A*A*A,Q=1-A,C=Q*Q,i=C*Q;return this.p[0]*i+this.p[1]*C*A*3+this.p[2]*Q*I*3+this.p[3]*g}derivativeCoefficients(A){const I=[];for(let g=A,Q=g.length-1;Q>0;Q--){const C=[];for(let i=0;i<Q;i++){const E=Q*(g[i+1]-g[i]);C.push(E)}I.push(C),g=C}return I}getSlope(A){const I=this.derivativeCoefficients(this.p)[0],g=1-A,Q=g*g,C=g*A*2,i=A*A;return Q*I[0]+C*I[1]+i*I[2]}controlCurve(A,I){this.p[1]=A/3+this.p[0],this.p[2]=this.p[3]-I/3}hull(A){let I=this.p,g=[],Q,C=0,i=0,E=0;const D=[];for(D[C++]=I[0],D[C++]=I[1],D[C++]=I[2],D[C++]=I[3];I.length>1;){for(g=[],i=0,E=I.length-1;i<E;i++)Q=A*I[i]+(1-A)*I[i+1],D[C++]=Q,g.push(Q);I=g}return D}split(A){const I=this.hull(A);return{left:new xQ(I[0],I[4],I[7],I[9]),right:new xQ(I[9],I[8],I[6],I[3]),span:I}}clone(){return new xQ(this.p[0],this.p[1],this.p[2],this.p[3])}toJSON(){return{p0:this.p[0],p1:this.p[1],p2:this.p[2],p3:this.p[3]}}static fromJSON(A){return new xQ(A.p0,A.p1,A.p2,A.p3)}}const xB=B=>({r:B.x,g:B.y,b:B.z,a:B.w}),qB=B=>new OI(B.r,B.g,B.b,B.a),wh=(B,A)=>{switch(A){case"Vector3":return new Z(B.x,B.y,B.z);case"Vector4":return new OI(B.x,B.y,B.z,B.w);case"Color":return new Z(B.r,B.g,B.b);case"Number":return B;default:return B}},ah=(B,A)=>{switch(A){case"Vector3":return{x:B.x,y:B.y,z:B.z};case"Vector4":return{x:B.x,y:B.y,z:B.z,w:B.w};case"Color":return{r:B.x,g:B.y,b:B.z};case"Number":return B;default:return B}};class Ui{constructor(A,I){this.a=A,this.b=I,this.type="value"}startGen(A){}genColor(A,I){const g=Math.random();return I.copy(this.a).lerp(this.b,g)}toJSON(){return{type:"RandomColor",a:xB(this.a),b:xB(this.b)}}static fromJSON(A){return new Ui(qB(A.a),qB(A.b))}clone(){return new Ui(this.a.clone(),this.b.clone())}}class MB{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I){return this.indexCount===-1&&this.startGen(A),I.copy(this.a).lerp(this.b,A[this.indexCount])}toJSON(){return{type:"ColorRange",a:xB(this.a),b:xB(this.b)}}static fromJSON(A){return new MB(qB(A.a),qB(A.b))}clone(){return new MB(this.a.clone(),this.b.clone())}}class tQ{constructor(A,I){this.subType=I,this.type="function",this.keys=A}findKey(A){let I=0,g=0,Q=this.keys.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.getStartX(C)&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.keys[A][1]}getEndX(A){return A+1<this.keys.length?this.keys[A+1][1]:1}genValue(A,I){const g=this.findKey(I);return this.subType==="Number"?g===-1?this.keys[0][0]:g+1>=this.keys.length?this.keys[this.keys.length-1][0]:(this.keys[g+1][0]-this.keys[g][0])*((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))+this.keys[g][0]:g===-1?A.copy(this.keys[0][0]):g+1>=this.keys.length?A.copy(this.keys[this.keys.length-1][0]):A.copy(this.keys[g][0]).lerp(this.keys[g+1][0],(I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toJSON(){return this.keys[0][0].constructor.name,{type:"CLinearFunction",subType:this.subType,keys:this.keys.map(([A,I])=>({value:ah(A,this.subType),pos:I}))}}static fromJSON(A){return new tQ(A.keys.map(I=>[wh(I.value,A.subType),I.pos]),A.subType)}clone(){return this.subType==="Number"?new tQ(this.keys.map(([A,I])=>[A,I]),this.subType):new tQ(this.keys.map(([A,I])=>[A.clone(),I]),this.subType)}}const yE=new Z;class mQ{constructor(A=[[new Z(0,0,0),0],[new Z(1,1,1),0]],I=[[1,0],[1,1]]){this.type="function",this.color=new tQ(A,"Color"),this.alpha=new tQ(I,"Number")}genColor(A,I,g){return this.color.genValue(yE,g),I.set(yE.x,yE.y,yE.z,this.alpha.genValue(1,g))}toJSON(){return{type:"Gradient",color:this.color.toJSON(),alpha:this.alpha.toJSON()}}static fromJSON(A){if(A.functions){const I=A.functions.map(g=>[MB.fromJSON(g.function).a,g.start]);return A.functions.length>0&&I.push([MB.fromJSON(A.functions[A.functions.length-1].function).b,1]),new mQ(I.map(g=>[new Z(g[0].x,g[0].y,g[0].z),g[1]]),I.map(g=>[g[0].w,g[1]]))}else{const I=new mQ;return I.alpha=tQ.fromJSON(A.alpha),I.color=tQ.fromJSON(A.color),I}}clone(){const A=new mQ;return A.alpha=this.alpha.clone(),A.color=this.color.clone(),A}startGen(A){}}const ED=new OI;class Li{constructor(A,I){this.indexCount=0,this.type="function",this.gradient1=A,this.gradient2=I}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I,g){return this.gradient1.genColor(A,I,g),this.gradient2.genColor(A,ED,g),A&&A[this.indexCount]!==void 0?I.lerp(ED,A[this.indexCount]):I.lerp(ED,Math.random()),I}toJSON(){return{type:"RandomColorBetweenGradient",gradient1:this.gradient1.toJSON(),gradient2:this.gradient2.toJSON()}}static fromJSON(A){return new Li(mQ.fromJSON(A.gradient1),mQ.fromJSON(A.gradient2))}clone(){return new Li(this.gradient1.clone(),this.gradient2.clone())}}class qQ{constructor(A){this.color=A,this.type="value"}startGen(A){}genColor(A,I){return I.copy(this.color)}toJSON(){return{type:"ConstantColor",color:xB(this.color)}}static fromJSON(A){return new qQ(qB(A.color))}clone(){return new qQ(this.color.clone())}}function iD(B){switch(B.type){case"ConstantColor":return qQ.fromJSON(B);case"ColorRange":return MB.fromJSON(B);case"RandomColor":return Ui.fromJSON(B);case"Gradient":return mQ.fromJSON(B);case"RandomColorBetweenGradient":return Li.fromJSON(B);default:return new qQ(new OI(1,1,1,1))}}class rA{constructor(A){this.value=A,this.type="value"}startGen(A){}genValue(A){return this.value}toJSON(){return{type:"ConstantValue",value:this.value}}static fromJSON(A){return new rA(A.value)}clone(){return new rA(this.value)}}class uQ{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genValue(A){return this.indexCount===-1&&this.startGen(A),jQ.lerp(this.a,this.b,A[this.indexCount])}toJSON(){return{type:"IntervalValue",a:this.a,b:this.b}}static fromJSON(A){return new uQ(A.a,A.b)}clone(){return new uQ(this.a,this.b)}}class eh{constructor(){this.functions=new Array}findFunction(A){let I=0,g=0,Q=this.functions.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.functions[C][1]&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.functions[A][1]}setStartX(A,I){A>0&&(this.functions[A][1]=I)}getEndX(A){return A+1<this.functions.length?this.functions[A+1][1]:1}setEndX(A,I){A+1<this.functions.length&&(this.functions[A+1][1]=I)}insertFunction(A,I){const g=this.findFunction(A);this.functions.splice(g+1,0,[I,A])}removeFunction(A){return this.functions.splice(A,1)[0][0]}getFunction(A){return this.functions[A][0]}setFunction(A,I){this.functions[A][0]=I}get numOfFunctions(){return this.functions.length}}class MC extends eh{constructor(A=[[new xQ(0,1/3,1/3*2,1),0]]){super(),this.type="function",this.functions=A}genValue(A,I=0){const g=this.findFunction(I);return g===-1?0:this.functions[g][0].genValue((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toSVG(A,I){if(I<1)return"";let g=["M",0,this.functions[0][0].p[0]].join(" ");for(let Q=1/I;Q<=1;Q+=1/I)g=[g,"L",Q*A,this.genValue(void 0,Q)].join(" ");return g}toJSON(){return{type:"PiecewiseBezier",functions:this.functions.map(([A,I])=>({function:A.toJSON(),start:I}))}}static fromJSON(A){return new MC(A.functions.map(I=>[xQ.fromJSON(I.function),I.start]))}clone(){return new MC(this.functions.map(([A,I])=>[A.clone(),I]))}startGen(A){}}function sA(B){switch(B.type){case"ConstantValue":return rA.fromJSON(B);case"IntervalValue":return uQ.fromJSON(B);case"PiecewiseBezier":return MC.fromJSON(B);default:return new rA(0)}}class JC{constructor(){this.indexCount=0,this.type="rotation"}startGen(A){this.indexCount=A.length,A.push(new SA);let I,g,Q,C,i,E;do I=Math.random()*2-1,g=Math.random()*2-1,Q=I*I+g*g;while(Q>1);do C=Math.random()*2-1,i=Math.random()*2-1,E=C*C+i*i;while(E>1);const D=Math.sqrt((1-Q)/E);A[this.indexCount].set(I,g,D*C,D*i)}genValue(A,I,g,Q){return this.indexCount===-1&&this.startGen(A),I.copy(A[this.indexCount]),I}toJSON(){return{type:"RandomQuat"}}static fromJSON(A){return new JC}clone(){return new JC}}class UC{constructor(A,I){this.axis=A,this.angle=I,this.type="rotation"}startGen(A){this.angle.startGen(A)}genValue(A,I,g,Q){return I.setFromAxisAngle(this.axis,this.angle.genValue(A,Q)*g)}toJSON(){return{type:"AxisAngle",axis:{x:this.axis.x,y:this.axis.y,z:this.axis.z},angle:this.angle.toJSON()}}static fromJSON(A){return new UC(new Z(A.axis.x,A.axis.y,A.axis.z),sA(A.angle))}clone(){return new UC(this.axis.clone(),this.angle.clone())}}class Hi{constructor(A,I,g,Q){this.angleX=A,this.angleY=I,this.angleZ=g,this.type="rotation",this.eular=new NC(0,0,0,Q)}startGen(A){this.angleX.startGen(A),this.angleY.startGen(A),this.angleZ.startGen(A)}genValue(A,I,g,Q){return this.eular.set(this.angleX.genValue(A,Q)*g,this.angleY.genValue(A,Q)*g,this.angleZ.genValue(A,Q)*g),I.setFromEuler(this.eular)}toJSON(){return{type:"Euler",angleX:this.angleX.toJSON(),angleY:this.angleY.toJSON(),angleZ:this.angleZ.toJSON(),eulerOrder:this.eular.order}}static fromJSON(A){return new Hi(sA(A.angleX),sA(A.angleY),sA(A.angleZ),A.eulerOrder)}clone(){return new Hi(this.angleX,this.angleY,this.angleZ,this.eular.order)}}function Qt(B){switch(B.type){case"AxisAngle":return UC.fromJSON(B);case"Euler":return Hi.fromJSON(B);case"RandomQuat":return JC.fromJSON(B);default:return new JC}}class bQ{constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="vec3function"}startGen(A){this.x.startGen(A),this.y.startGen(A),this.z.startGen(A)}genValue(A,I,g){return I.set(this.x.genValue(A,g),this.y.genValue(A,g),this.z.genValue(A,g))}toJSON(){return{type:"Vector3Function",x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new bQ(sA(A.x),sA(A.y),sA(A.z))}clone(){return new bQ(this.x,this.y,this.z)}}function hh(B){return B.type==="Vector3Function"?bQ.fromJSON(B):new bQ(new rA(0),new rA(0),new rA(0))}function GE(B){switch(B.type){case"ConstantValue":case"IntervalValue":case"PiecewiseBezier":return sA(B);case"AxisAngle":case"RandomQuat":case"Euler":return Qt(B);case"Vector3Function":return hh(B);default:return new rA(0)}}class LC{constructor(A={}){var I,g,Q,C,i,E,D;this.type="cone",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.angle=(C=A.angle)!==null&&C!==void 0?C:Math.PI/6,this.mode=(i=A.mode)!==null&&i!==void 0?i:LI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new rA(1),this.memory=[]}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=jQ.lerp(1-this.thickness,1,Math.random()),C=g*this.arc,i=Math.sqrt(Q),E=Math.sin(C),D=Math.cos(C);A.position.x=i*D,A.position.y=i*E,A.position.z=0;const o=this.angle*i;A.velocity.set(0,0,Math.cos(o)).addScaledVector(A.position,Math.sin(o)).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius)}toJSON(){return{type:"cone",radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new LC({radius:A.radius,arc:A.arc,thickness:A.thickness,angle:A.angle,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new LC({radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class HC{constructor(A={}){var I,g,Q,C,i,E;this.type="circle",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:LI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(E=A.speed)!==null&&E!==void 0?E:new rA(1),this.memory=[]}update(A,I){this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=jQ.lerp(1-this.thickness,1,Math.random()),C=g*this.arc;A.position.x=Math.cos(C),A.position.y=Math.sin(C),A.position.z=0,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*Q)}toJSON(){return{type:"circle",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new HC({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new HC({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}function SE(B,A){return Math.floor(Math.random()*(A-B))+B}const rE=new Z(0,1,0),FE=new Z(0,0,0),ch=new Z(1,1,1),Bt=new Z(0,0,1);class YC{constructor(A={}){var I,g,Q,C,i,E,D;this.type="donut",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.donutRadius=(C=A.donutRadius)!==null&&C!==void 0?C:this.radius*.2,this.mode=(i=A.mode)!==null&&i!==void 0?i:LI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new rA(1),this.memory=[],this._m1=new kg}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=jQ.lerp(1-this.thickness,1,Math.random()),i=g*this.arc,E=Q*Math.PI*2,D=Math.sin(i),o=Math.cos(i);A.position.x=this.radius*o,A.position.y=this.radius*D,A.position.z=0,A.velocity.z=this.donutRadius*C*Math.sin(E),A.velocity.x=this.donutRadius*C*Math.cos(E)*o,A.velocity.y=this.donutRadius*C*Math.cos(E)*D,A.position.add(A.velocity),A.velocity.normalize().multiplyScalar(A.startSpeed),A.rotation instanceof SA&&(this._m1.lookAt(FE,A.velocity,rE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"donut",radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new YC({radius:A.radius,arc:A.arc,thickness:A.thickness,donutRadius:A.donutRadius,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new YC({radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class KC{constructor(){this.type="point",this._m1=new kg}update(A,I){}initialize(A){const I=Math.random(),g=Math.random(),Q=I*Math.PI*2,C=Math.acos(2*g-1),i=Math.cbrt(Math.random()),E=Math.sin(Q),D=Math.cos(Q),o=Math.sin(C),s=Math.cos(C);A.velocity.x=i*o*D,A.velocity.y=i*o*E,A.velocity.z=i*s,A.velocity.multiplyScalar(A.startSpeed),A.position.setScalar(0),A.rotation instanceof SA&&(this._m1.lookAt(FE,A.position,rE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"point"}}static fromJSON(A){return new KC}clone(){return new KC}}class JB{constructor(A={}){var I,g,Q,C,i,E;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:LI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(E=A.speed)!==null&&E!==void 0?E:new rA(1),this.memory=[],this._m1=new kg}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=jQ.lerp(1-this.thickness,1,Math.random()),i=g*this.arc,E=Math.acos(2*Q-1),D=Math.sin(i),o=Math.cos(i),s=Math.sin(E),t=Math.cos(E);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof SA&&(this._m1.lookAt(FE,A.position,rE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"sphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new JB({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new JB({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class dC{constructor(A={}){var I,g,Q,C,i,E;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:LI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(E=A.speed)!==null&&E!==void 0?E:new rA(1),this.memory=[],this._m1=new kg}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=jQ.lerp(1-this.thickness,1,Math.random()),i=g*this.arc,E=Math.acos(Q),D=Math.sin(i),o=Math.cos(i),s=Math.sin(E),t=Math.cos(E);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof SA&&(this._m1.lookAt(FE,A.position,rE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"hemisphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new dC({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new dC({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class lC{constructor(A={}){var I,g,Q,C;this.type="grid",this.width=(I=A.width)!==null&&I!==void 0?I:1,this.height=(g=A.height)!==null&&g!==void 0?g:1,this.column=(Q=A.column)!==null&&Q!==void 0?Q:10,this.row=(C=A.row)!==null&&C!==void 0?C:10}initialize(A){const I=Math.floor(Math.random()*this.row),g=Math.floor(Math.random()*this.column);A.position.x=g*this.width/this.column-this.width/2,A.position.y=I*this.height/this.row-this.height/2,A.position.z=0,A.velocity.set(0,0,A.startSpeed)}toJSON(){return{type:"grid",width:this.width,height:this.height,column:this.column,row:this.row}}static fromJSON(A){return new lC(A)}clone(){return new lC({width:this.width,height:this.height,column:this.column,row:this.row})}update(A,I){}}const DD={circle:{type:"circle",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:HC,loadJSON:HC.fromJSON},cone:{type:"cone",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:LC,loadJSON:LC.fromJSON},donut:{type:"donut",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["donutRadius",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:YC,loadJSON:YC.fromJSON},point:{type:"point",params:[],constructor:KC,loadJSON:KC.fromJSON},sphere:{type:"sphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:JB,loadJSON:JB.fromJSON},hemisphere:{type:"hemisphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:dC,loadJSON:dC.fromJSON},grid:{type:"grid",params:[["width",["number"]],["height",["number"]],["rows",["number"]],["column",["number"]]],constructor:lC,loadJSON:lC.fromJSON}};function yh(B,A){return DD[B.type].loadJSON(B,A)}class fC{constructor(A){this.color=A,this.type="ColorOverLife"}initialize(A){this.color.startGen(A.memory)}update(A,I){this.color.genColor(A.memory,A.color,A.age/A.life),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON()}}static fromJSON(A){return new fC(iD(A.color))}clone(){return new fC(this.color.clone())}reset(){}}class pC{constructor(A){this.angularVelocity=A,this.type="RotationOverLife"}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){typeof A.rotation=="number"&&(A.rotation+=I*this.angularVelocity.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new pC(sA(A.angularVelocity))}frameUpdate(A){}clone(){return new pC(this.angularVelocity.clone())}reset(){}}class xC{constructor(A){this.angularVelocity=A,this.type="Rotation3DOverLife",this.tempQuat=new SA,this.tempQuat2=new SA}initialize(A){A.rotation instanceof SA&&(A.angularVelocity=new SA,this.angularVelocity.startGen(A.memory))}update(A,I){A.rotation instanceof SA&&(this.angularVelocity.genValue(A.memory,this.tempQuat,I,A.age/A.life),A.rotation.multiply(this.tempQuat))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new xC(Qt(A.angularVelocity))}frameUpdate(A){}clone(){return new xC(this.angularVelocity.clone())}reset(){}}class qC{initialize(A,I){this.ps=I,this.x.startGen(A.memory),this.y.startGen(A.memory),this.z.startGen(A.memory)}constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="ForceOverLife",this._temp=new Z,this._tempScale=new Z,this._tempQ=new SA}update(A,I){this._temp.set(this.x.genValue(A.memory,A.age/A.life),this.y.genValue(A.memory,A.age/A.life),this.z.genValue(A.memory,A.age/A.life)),this.ps.worldSpace?A.velocity.addScaledVector(this._temp,I):(this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ),A.velocity.addScaledVector(this._temp,I))}toJSON(){return{type:this.type,x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new qC(sA(A.x),sA(A.y),sA(A.z))}frameUpdate(A){if(this.ps&&!this.ps.worldSpace){const I=this._temp,g=this._tempQ,Q=this._tempScale;this.ps.emitter.matrixWorld.decompose(I,g,Q),g.invert(),Q.set(1/Q.x,1/Q.y,1/Q.z)}}clone(){return new qC(this.x.clone(),this.y.clone(),this.z.clone())}reset(){}}class uC{initialize(A){this.size.startGen(A.memory)}constructor(A){this.size=A,this.type="SizeOverLife"}update(A){this.size instanceof bQ?this.size.genValue(A.memory,A.size,A.age/A.life).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,size:this.size.toJSON()}}static fromJSON(A){return new uC(GE(A.size))}frameUpdate(A){}clone(){return new uC(this.size.clone())}reset(){}}class bC{initialize(A){this.speed.startGen(A.memory)}constructor(A){this.speed=A,this.type="SpeedOverLife"}update(A){A.speedModifier=this.speed.genValue(A.memory,A.age/A.life)}toJSON(){return{type:this.type,speed:this.speed.toJSON()}}static fromJSON(A){return new bC(sA(A.speed))}frameUpdate(A){}clone(){return new bC(this.speed.clone())}reset(){}}class mC{constructor(A){this.frame=A,this.type="FrameOverLife"}initialize(A){this.frame.startGen(A.memory)}update(A,I){this.frame instanceof MC&&(A.uvTile=this.frame.genValue(A.memory,A.age/A.life))}frameUpdate(A){}toJSON(){return{type:this.type,frame:this.frame.toJSON()}}static fromJSON(A){return new mC(sA(A.frame))}clone(){return new mC(this.frame.clone())}reset(){}}class PC{constructor(A,I=new Z(0,1,0)){this.orbitSpeed=A,this.axis=I,this.type="OrbitOverLife",this.temp=new Z,this.rotation=new SA}initialize(A){this.orbitSpeed.startGen(A.memory)}update(A,I){this.temp.copy(A.position).projectOnVector(this.axis),this.rotation.setFromAxisAngle(this.axis,this.orbitSpeed.genValue(A.memory,A.age/A.life)*I),A.position.sub(this.temp),A.position.applyQuaternion(this.rotation),A.position.add(this.temp)}frameUpdate(A){}toJSON(){return{type:this.type,orbitSpeed:this.orbitSpeed.toJSON(),axis:[this.axis.x,this.axis.y,this.axis.z]}}static fromJSON(A){return new PC(sA(A.orbitSpeed),A.axis?new Z(A.axis[0],A.axis[1],A.axis[2]):void 0)}clone(){return new PC(this.orbitSpeed.clone())}reset(){}}class oD{constructor(A){this.data=A,this.next=null,this.prev=null}hasPrev(){return this.prev!==null}hasNext(){return this.next!==null}}class Gh{constructor(){this.length=0,this.head=this.tail=null}isEmpty(){return this.head===null}clear(){this.length=0,this.head=this.tail=null}front(){return this.head===null?null:this.head.data}back(){return this.tail===null?null:this.tail.data}dequeue(){if(this.head){const A=this.head.data;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,A}}pop(){if(this.tail){const A=this.tail.data;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,A}}queue(A){const I=new oD(A);this.tail||(this.tail=I),this.head&&(this.head.prev=I,I.next=this.head),this.head=I,this.length++}push(A){const I=new oD(A);this.head||(this.head=I),this.tail&&(this.tail.next=I,I.prev=this.tail),this.tail=I,this.length++}insertBefore(A,I){const g=new oD(I);g.next=A,g.prev=A.prev,g.prev!==null&&(g.prev.next=g),g.next.prev=g,A==this.head&&(this.head=g),this.length++}remove(A){if(this.head===null||this.tail===null)return;let I=this.head;for(A===this.head.data&&(this.head=this.head.next),A===this.tail.data&&(this.tail=this.tail.prev);I.next!==null&&I.data!==A;)I=I.next;I.data===A&&(I.prev!==null&&(I.prev.next=I.next),I.next!==null&&(I.next.prev=I.prev),this.length--)}*values(){let A=this.head;for(;A!==null;)yield A.data,A=A.next}}class Sh{constructor(){this.startSpeed=0,this.startColor=new OI,this.startSize=new Z(1,1,1),this.position=new Z,this.velocity=new Z,this.age=0,this.life=1,this.size=new Z(1,1,1),this.speedModifier=1,this.rotation=0,this.color=new OI,this.uvTile=0,this.memory=[]}get died(){return this.age>=this.life}reset(){this.memory.length=0}}class rh{constructor(A,I,g){this.position=A,this.size=I,this.color=g}}class RE{constructor(){this.startSpeed=0,this.startColor=new OI,this.startSize=new Z(1,1,1),this.position=new Z,this.velocity=new Z,this.age=0,this.life=1,this.size=new Z(1,1,1),this.length=100,this.speedModifier=1,this.color=new OI,this.previous=new Gh,this.uvTile=0,this.memory=[]}update(){for(this.age<=this.life?this.previous.push(new rh(this.position.clone(),this.size.x,this.color.clone())):this.previous.length>0&&this.previous.dequeue();this.previous.length>this.length;)this.previous.dequeue()}get died(){return this.age>=this.life}reset(){this.memory.length=0,this.previous.clear()}}class TC{initialize(A){this.width.startGen(A.memory)}constructor(A){this.width=A,this.type="WidthOverLength"}update(A){if(A instanceof RE){const I=A.previous.values();for(let g=0;g<A.previous.length;g++){const Q=I.next();Q.value.size=this.width.genValue(A.memory,(A.previous.length-g)/A.length)}}}frameUpdate(A){}toJSON(){return{type:this.type,width:this.width.toJSON()}}static fromJSON(A){return new TC(sA(A.width))}clone(){return new TC(this.width.clone())}reset(){}}class OC{constructor(A,I){this.direction=A,this.magnitude=I,this.type="ApplyForce",this.memory={data:[],dataCount:0},this.magnitudeValue=this.magnitude.genValue(this.memory)}initialize(A){}update(A,I){A.velocity.addScaledVector(this.direction,this.magnitudeValue*I)}frameUpdate(A){this.magnitudeValue=this.magnitude.genValue(this.memory)}toJSON(){return{type:this.type,direction:[this.direction.x,this.direction.y,this.direction.z],magnitude:this.magnitude.toJSON()}}static fromJSON(A){var I;return new OC(new Z(A.direction[0],A.direction[1],A.direction[2]),sA((I=A.magnitude)!==null&&I!==void 0?I:A.force))}clone(){return new OC(this.direction.clone(),this.magnitude.clone())}reset(){}}class XC{constructor(A,I){this.center=A,this.magnitude=I,this.type="GravityForce",this.temp=new Z}initialize(A){}update(A,I){this.temp.copy(this.center).sub(A.position).normalize(),A.velocity.addScaledVector(this.temp,this.magnitude/A.position.distanceToSquared(this.center)*I)}frameUpdate(A){}toJSON(){return{type:this.type,center:[this.center.x,this.center.y,this.center.z],magnitude:this.magnitude}}static fromJSON(A){return new XC(new Z(A.center[0],A.center[1],A.center[2]),A.magnitude)}clone(){return new XC(this.center.clone(),this.magnitude)}reset(){}}class vC{constructor(A){this.angle=A,this.type="ChangeEmitDirection",this._temp=new Z,this._q=new SA,this.memory={data:[],dataCount:0}}initialize(A){const I=A.velocity.length();I!=0&&(A.velocity.normalize(),A.velocity.x===0&&A.velocity.y===0?this._temp.set(0,A.velocity.z,0):this._temp.set(-A.velocity.y,A.velocity.x,0),this.angle.startGen(this.memory),this._q.setFromAxisAngle(this._temp.normalize(),this.angle.genValue(this.memory)),this._temp.copy(A.velocity),A.velocity.applyQuaternion(this._q),this._q.setFromAxisAngle(this._temp,Math.random()*Math.PI*2),A.velocity.applyQuaternion(this._q),A.velocity.setLength(I))}update(A,I){}frameUpdate(A){}toJSON(){return{type:this.type,angle:this.angle.toJSON()}}static fromJSON(A){return new vC(sA(A.angle))}clone(){return new vC(this.angle)}reset(){}}var _Q;(function(B){B[B.Death=0]="Death",B[B.Birth=1]="Birth",B[B.Frame=2]="Frame"})(_Q||(_Q={}));class ZC{constructor(A,I,g,Q=_Q.Frame,C=1){this.particleSystem=A,this.useVelocityAsBasis=I,this.subParticleSystem=g,this.mode=Q,this.emitProbability=C,this.type="EmitSubParticleSystem",this.q_=new SA,this.v_=new Z,this.v2_=new Z,this.subEmissions=new Array,this.subParticleSystem&&this.subParticleSystem.system&&(this.subParticleSystem.system.onlyUsedByOther=!0)}initialize(A){}update(A,I){this.mode===_Q.Frame?this.emit(A,I):this.mode===_Q.Birth&&A.age===0?this.emit(A,I):this.mode===_Q.Death&&A.age+I>=A.life&&this.emit(A,I)}emit(A,I){if(!this.subParticleSystem||Math.random()>this.emitProbability)return;const g=new kg;this.setMatrixFromParticle(g,A),this.subEmissions.push({burstParticleCount:0,burstParticleIndex:0,isBursting:!1,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,matrix:g,travelDistance:0,particle:A})}frameUpdate(A){if(this.subParticleSystem)for(let I=0;I<this.subEmissions.length;I++)if(this.subEmissions[I].time>=this.subParticleSystem.system.duration)this.subEmissions[I]=this.subEmissions[this.subEmissions.length-1],this.subEmissions.length=this.subEmissions.length-1,I--;else{const g=this.subEmissions[I];g.particle&&g.particle.age<g.particle.life?this.setMatrixFromParticle(g.matrix,g.particle):g.particle=void 0,this.subParticleSystem.system.emit(A,g,g.matrix)}}toJSON(){return{type:this.type,subParticleSystem:this.subParticleSystem?this.subParticleSystem.uuid:"",useVelocityAsBasis:this.useVelocityAsBasis,mode:this.mode,emitProbability:this.emitProbability}}static fromJSON(A,I){return new ZC(I,A.useVelocityAsBasis,A.subParticleSystem,A.mode,A.emitProbability)}clone(){return new ZC(this.particleSystem,this.useVelocityAsBasis,this.subParticleSystem,this.mode,this.emitProbability)}reset(){}setMatrixFromParticle(A,I){let g;if(I.rotation===void 0||this.useVelocityAsBasis)if(I.velocity.x===0&&I.velocity.y===0&&(I.velocity.z===1||I.velocity.z===0))A.set(1,0,0,I.position.x,0,1,0,I.position.y,0,0,1,I.position.z,0,0,0,1);else{this.v_.copy(Bt).cross(I.velocity),this.v2_.copy(I.velocity).cross(this.v_);const Q=this.v_.length(),C=this.v2_.length();A.set(this.v_.x/Q,this.v2_.x/C,I.velocity.x,I.position.x,this.v_.y/Q,this.v2_.y/C,I.velocity.y,I.position.y,this.v_.z/Q,this.v2_.z/C,I.velocity.z,I.position.z,0,0,0,1)}else I.rotation instanceof SA?g=I.rotation:(this.q_.setFromAxisAngle(Bt,I.rotation),g=this.q_),A.compose(I.position,g,ch);this.particleSystem.worldSpace||A.multiplyMatrices(this.particleSystem.emitter.matrixWorld,A)}}const Fh=.5*(Math.sqrt(3)-1),uB=(3-Math.sqrt(3))/6,Rh=1/3,Ug=1/6,kh=(Math.sqrt(5)-1)/4,oI=(5-Math.sqrt(5))/20,gI=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),XA=new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);class Ct{constructor(A=Math.random){const I=typeof A=="function"?A:Nh(A);this.p=nh(I),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(let g=0;g<512;g++)this.perm[g]=this.p[g&255],this.permMod12[g]=this.perm[g]%12}noise2D(A,I){const g=this.permMod12,Q=this.perm;let C=0,i=0,E=0;const D=(A+I)*Fh,o=Math.floor(A+D),s=Math.floor(I+D),t=(o+s)*uB,w=o-t,a=s-t,G=A-w,r=I-a;let c,y;G>r?(c=1,y=0):(c=0,y=1);const R=G-c+uB,S=r-y+uB,n=G-1+2*uB,N=r-1+2*uB,M=o&255,J=s&255;let L=.5-G*G-r*r;if(L>=0){const d=g[M+Q[J]]*3;L*=L,C=L*L*(gI[d]*G+gI[d+1]*r)}let H=.5-R*R-S*S;if(H>=0){const d=g[M+c+Q[J+y]]*3;H*=H,i=H*H*(gI[d]*R+gI[d+1]*S)}let Y=.5-n*n-N*N;if(Y>=0){const d=g[M+1+Q[J+1]]*3;Y*=Y,E=Y*Y*(gI[d]*n+gI[d+1]*N)}return 70*(C+i+E)}noise3D(A,I,g){const Q=this.permMod12,C=this.perm;let i,E,D,o;const s=(A+I+g)*Rh,t=Math.floor(A+s),w=Math.floor(I+s),a=Math.floor(g+s),G=(t+w+a)*Ug,r=t-G,c=w-G,y=a-G,R=A-r,S=I-c,n=g-y;let N,M,J,L,H,Y;R>=S?S>=n?(N=1,M=0,J=0,L=1,H=1,Y=0):R>=n?(N=1,M=0,J=0,L=1,H=0,Y=1):(N=0,M=0,J=1,L=1,H=0,Y=1):S<n?(N=0,M=0,J=1,L=0,H=1,Y=1):R<n?(N=0,M=1,J=0,L=0,H=1,Y=1):(N=0,M=1,J=0,L=1,H=1,Y=0);const d=R-N+Ug,l=S-M+Ug,p=n-J+Ug,u=R-L+2*Ug,P=S-H+2*Ug,O=n-Y+2*Ug,W=R-1+3*Ug,T=S-1+3*Ug,j=n-1+3*Ug,EA=t&255,wA=w&255,iA=a&255;let IA=.6-R*R-S*S-n*n;if(IA<0)i=0;else{const z=Q[EA+C[wA+C[iA]]]*3;IA*=IA,i=IA*IA*(gI[z]*R+gI[z+1]*S+gI[z+2]*n)}let BA=.6-d*d-l*l-p*p;if(BA<0)E=0;else{const z=Q[EA+N+C[wA+M+C[iA+J]]]*3;BA*=BA,E=BA*BA*(gI[z]*d+gI[z+1]*l+gI[z+2]*p)}let AA=.6-u*u-P*P-O*O;if(AA<0)D=0;else{const z=Q[EA+L+C[wA+H+C[iA+Y]]]*3;AA*=AA,D=AA*AA*(gI[z]*u+gI[z+1]*P+gI[z+2]*O)}let $=.6-W*W-T*T-j*j;if($<0)o=0;else{const z=Q[EA+1+C[wA+1+C[iA+1]]]*3;$*=$,o=$*$*(gI[z]*W+gI[z+1]*T+gI[z+2]*j)}return 32*(i+E+D+o)}noise4D(A,I,g,Q){const C=this.perm;let i,E,D,o,s;const t=(A+I+g+Q)*kh,w=Math.floor(A+t),a=Math.floor(I+t),G=Math.floor(g+t),r=Math.floor(Q+t),c=(w+a+G+r)*oI,y=w-c,R=a-c,S=G-c,n=r-c,N=A-y,M=I-R,J=g-S,L=Q-n;let H=0,Y=0,d=0,l=0;N>M?H++:Y++,N>J?H++:d++,N>L?H++:l++,M>J?Y++:d++,M>L?Y++:l++,J>L?d++:l++;const p=H>=3?1:0,u=Y>=3?1:0,P=d>=3?1:0,O=l>=3?1:0,W=H>=2?1:0,T=Y>=2?1:0,j=d>=2?1:0,EA=l>=2?1:0,wA=H>=1?1:0,iA=Y>=1?1:0,IA=d>=1?1:0,BA=l>=1?1:0,AA=N-p+oI,$=M-u+oI,z=J-P+oI,LA=L-O+oI,NA=N-W+2*oI,MA=M-T+2*oI,xA=J-j+2*oI,aA=L-EA+2*oI,DA=N-wA+3*oI,JA=M-iA+3*oI,jI=J-IA+3*oI,_A=L-BA+3*oI,HA=N-1+4*oI,fI=M-1+4*oI,Eg=J-1+4*oI,ig=L-1+4*oI,pI=w&255,Dg=a&255,zI=G&255,_I=r&255;let XI=.6-N*N-M*M-J*J-L*L;if(XI<0)i=0;else{const eA=C[pI+C[Dg+C[zI+C[_I]]]]%32*4;XI*=XI,i=XI*XI*(XA[eA]*N+XA[eA+1]*M+XA[eA+2]*J+XA[eA+3]*L)}let $A=.6-AA*AA-$*$-z*z-LA*LA;if($A<0)E=0;else{const eA=C[pI+p+C[Dg+u+C[zI+P+C[_I+O]]]]%32*4;$A*=$A,E=$A*$A*(XA[eA]*AA+XA[eA+1]*$+XA[eA+2]*z+XA[eA+3]*LA)}let kI=.6-NA*NA-MA*MA-xA*xA-aA*aA;if(kI<0)D=0;else{const eA=C[pI+W+C[Dg+T+C[zI+j+C[_I+EA]]]]%32*4;kI*=kI,D=kI*kI*(XA[eA]*NA+XA[eA+1]*MA+XA[eA+2]*xA+XA[eA+3]*aA)}let vI=.6-DA*DA-JA*JA-jI*jI-_A*_A;if(vI<0)o=0;else{const eA=C[pI+wA+C[Dg+iA+C[zI+IA+C[_I+BA]]]]%32*4;vI*=vI,o=vI*vI*(XA[eA]*DA+XA[eA+1]*JA+XA[eA+2]*jI+XA[eA+3]*_A)}let nI=.6-HA*HA-fI*fI-Eg*Eg-ig*ig;if(nI<0)s=0;else{const eA=C[pI+1+C[Dg+1+C[zI+1+C[_I+1]]]]%32*4;nI*=nI,s=nI*nI*(XA[eA]*HA+XA[eA+1]*fI+XA[eA+2]*Eg+XA[eA+3]*ig)}return 27*(i+E+D+o+s)}}function nh(B){const A=new Uint8Array(256);for(let I=0;I<256;I++)A[I]=I;for(let I=0;I<255;I++){const g=I+~~(B()*(256-I)),Q=A[I];A[I]=A[g],A[g]=Q}return A}function Nh(B){let A=0,I=0,g=0,Q=1;const C=Mh();return A=C(" "),I=C(" "),g=C(" "),A-=C(B),A<0&&(A+=1),I-=C(B),I<0&&(I+=1),g-=C(B),g<0&&(g+=1),function(){const i=2091639*A+Q*23283064365386963e-26;return A=I,I=g,g=i-(Q=i|0)}}function Mh(){let B=4022871197;return function(A){A=A.toString();for(let I=0;I<A.length;I++){B+=A.charCodeAt(I);let g=.02519603282416938*B;B=g>>>0,g-=B,g*=B,B=g>>>0,g-=B,B+=g*4294967296}return(B>>>0)*23283064365386963e-26}}class VC{constructor(A,I,g,Q){this.scale=A,this.octaves=I,this.velocityMultiplier=g,this.timeScale=Q,this.type="TurbulenceField",this.generator=new Ct,this.timeOffset=new Z,this.temp=new Z,this.temp2=new Z,this.timeOffset.x=Math.random()/this.scale.x*this.timeScale.x,this.timeOffset.y=Math.random()/this.scale.y*this.timeScale.y,this.timeOffset.z=Math.random()/this.scale.z*this.timeScale.z}initialize(A){}update(A,I){const g=A.position.x/this.scale.x,Q=A.position.y/this.scale.y,C=A.position.z/this.scale.z;this.temp.set(0,0,0);let i=1;for(let E=0;E<this.octaves;E++)this.temp2.set(this.generator.noise4D(g*i,Q*i,C*i,this.timeOffset.x*i)/i,this.generator.noise4D(g*i,Q*i,C*i,this.timeOffset.y*i)/i,this.generator.noise4D(g*i,Q*i,C*i,this.timeOffset.z*i)/i),this.temp.add(this.temp2),i*=2;this.temp.multiply(this.velocityMultiplier),A.velocity.addScaledVector(this.temp,I)}toJSON(){return{type:this.type,scale:[this.scale.x,this.scale.y,this.scale.z],octaves:this.octaves,velocityMultiplier:[this.velocityMultiplier.x,this.velocityMultiplier.y,this.velocityMultiplier.z],timeScale:[this.timeScale.x,this.timeScale.y,this.timeScale.z]}}frameUpdate(A){this.timeOffset.x+=A*this.timeScale.x,this.timeOffset.y+=A*this.timeScale.y,this.timeOffset.z+=A*this.timeScale.z}static fromJSON(A){return new VC(new Z(A.scale[0],A.scale[1],A.scale[2]),A.octaves,new Z(A.velocityMultiplier[0],A.velocityMultiplier[1],A.velocityMultiplier[2]),new Z(A.timeScale[0],A.timeScale[1],A.timeScale[2]))}clone(){return new VC(this.scale.clone(),this.octaves,this.velocityMultiplier.clone(),this.timeScale.clone())}reset(){}}const Lg=[],sD=new Z,tD=new SA;class WC{constructor(A,I,g=new rA(1),Q=new rA(0)){if(this.frequency=A,this.power=I,this.positionAmount=g,this.rotationAmount=Q,this.type="Noise",this.duration=0,Lg.length===0)for(let C=0;C<100;C++)Lg.push(new Ct)}initialize(A){A.lastPosNoise=new Z,typeof A.rotation=="number"?A.lastRotNoise=0:A.lastRotNoise=new SA,A.generatorIndex=[SE(0,100),SE(0,100),SE(0,100),SE(0,100)],this.positionAmount.startGen(A.memory),this.rotationAmount.startGen(A.memory),this.frequency.startGen(A.memory),this.power.startGen(A.memory)}update(A,I){let g=this.frequency.genValue(A.memory,A.age/A.life),Q=this.power.genValue(A.memory,A.age/A.life),C=this.positionAmount.genValue(A.memory,A.age/A.life),i=this.rotationAmount.genValue(A.memory,A.age/A.life);C>0&&A.lastPosNoise!==void 0&&(A.position.sub(A.lastPosNoise),sD.set(Lg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*C,Lg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*C,Lg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*C),A.position.add(sD),A.lastPosNoise.copy(sD)),i>0&&A.lastRotNoise!==void 0&&(typeof A.rotation=="number"?(A.rotation-=A.lastRotNoise,A.rotation+=Lg[A.generatorIndex[3]].noise2D(0,A.age*g)*Math.PI*Q*i):(A.lastRotNoise.invert(),A.rotation.multiply(A.lastRotNoise),tD.set(Lg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*i,Lg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*i,Lg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*i,Lg[A.generatorIndex[3]].noise2D(0,A.age*g)*Q*i).normalize(),A.rotation.multiply(tD),A.lastRotNoise.copy(tD)))}toJSON(){return{type:this.type,frequency:this.frequency.toJSON(),power:this.power.toJSON(),positionAmount:this.positionAmount.toJSON(),rotationAmount:this.rotationAmount.toJSON()}}frameUpdate(A){this.duration+=A}static fromJSON(A){return new WC(sA(A.frequency),sA(A.power),sA(A.positionAmount),sA(A.rotationAmount))}clone(){return new WC(this.frequency.clone(),this.power.clone(),this.positionAmount.clone(),this.rotationAmount.clone())}reset(){}}class jC{constructor(A,I){this.color=A,this.speedRange=I,this.type="ColorBySpeed"}initialize(A){this.color.startGen(A.memory)}update(A,I){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.color.genColor(A.memory,A.color,g),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new jC(iD(A.color),uQ.fromJSON(A.speedRange))}clone(){return new jC(this.color.clone(),this.speedRange.clone())}reset(){}}class zC{initialize(A){this.size.startGen(A.memory)}constructor(A,I){this.size=A,this.speedRange=I,this.type="SizeBySpeed"}update(A){const I=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.size instanceof bQ?this.size.genValue(A.memory,A.size,I).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,I))}toJSON(){return{type:this.type,size:this.size.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new zC(GE(A.size),uQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new zC(this.size.clone(),this.speedRange.clone())}reset(){}}class _C{constructor(A,I){this.angularVelocity=A,this.speedRange=I,this.type="RotationBySpeed",this.tempQuat=new SA}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){if(typeof A.rotation=="number"){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);A.rotation+=I*this.angularVelocity.genValue(A.memory,g)}}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new _C(sA(A.angularVelocity),uQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new _C(this.angularVelocity.clone(),this.speedRange.clone())}reset(){}}class $C{initialize(A){this.speed.startGen(A.memory)}constructor(A,I){this.speed=A,this.dampen=I,this.type="LimitSpeedOverLife"}update(A,I){let g=A.velocity.length(),Q=this.speed.genValue(A.memory,A.age/A.life);if(g>Q){const C=(g-Q)/g;A.velocity.multiplyScalar(1-C*this.dampen*I*20)}}toJSON(){return{type:this.type,speed:this.speed.toJSON(),dampen:this.dampen}}static fromJSON(A){return new $C(sA(A.speed),A.dampen)}frameUpdate(A){}clone(){return new $C(this.speed.clone(),this.dampen)}reset(){}}const kE={ApplyForce:{type:"ApplyForce",constructor:OC,params:[["direction",["vec3"]],["magnitude",["value"]]],loadJSON:OC.fromJSON},Noise:{type:"Noise",constructor:WC,params:[["frequency",["value"]],["power",["value"]],["positionAmount",["value"]],["rotationAmount",["value"]]],loadJSON:WC.fromJSON},TurbulenceField:{type:"TurbulenceField",constructor:VC,params:[["scale",["vec3"]],["octaves",["number"]],["velocityMultiplier",["vec3"]],["timeScale",["vec3"]]],loadJSON:VC.fromJSON},GravityForce:{type:"GravityForce",constructor:XC,params:[["center",["vec3"]],["magnitude",["number"]]],loadJSON:XC.fromJSON},ColorOverLife:{type:"ColorOverLife",constructor:fC,params:[["color",["colorFunc"]]],loadJSON:fC.fromJSON},RotationOverLife:{type:"RotationOverLife",constructor:pC,params:[["angularVelocity",["value","valueFunc"]]],loadJSON:pC.fromJSON},Rotation3DOverLife:{type:"Rotation3DOverLife",constructor:xC,params:[["angularVelocity",["rotationFunc"]]],loadJSON:xC.fromJSON},SizeOverLife:{type:"SizeOverLife",constructor:uC,params:[["size",["value","valueFunc","vec3Func"]]],loadJSON:uC.fromJSON},ColorBySpeed:{type:"ColorBySpeed",constructor:jC,params:[["color",["colorFunc"]],["speedRange",["range"]]],loadJSON:jC.fromJSON},RotationBySpeed:{type:"RotationBySpeed",constructor:_C,params:[["angularVelocity",["value","valueFunc"]],["speedRange",["range"]]],loadJSON:_C.fromJSON},SizeBySpeed:{type:"SizeBySpeed",constructor:zC,params:[["size",["value","valueFunc","vec3Func"]],["speedRange",["range"]]],loadJSON:zC.fromJSON},SpeedOverLife:{type:"SpeedOverLife",constructor:bC,params:[["speed",["value","valueFunc"]]],loadJSON:bC.fromJSON},FrameOverLife:{type:"FrameOverLife",constructor:mC,params:[["frame",["value","valueFunc"]]],loadJSON:mC.fromJSON},ForceOverLife:{type:"ForceOverLife",constructor:qC,params:[["x",["value","valueFunc"]],["y",["value","valueFunc"]],["z",["value","valueFunc"]]],loadJSON:qC.fromJSON},OrbitOverLife:{type:"OrbitOverLife",constructor:PC,params:[["orbitSpeed",["value","valueFunc"]],["axis",["vec3"]]],loadJSON:PC.fromJSON},WidthOverLength:{type:"WidthOverLength",constructor:TC,params:[["width",["value","valueFunc"]]],loadJSON:TC.fromJSON},ChangeEmitDirection:{type:"ChangeEmitDirection",constructor:vC,params:[["angle",["value"]]],loadJSON:vC.fromJSON},EmitSubParticleSystem:{type:"EmitSubParticleSystem",constructor:ZC,params:[["particleSystem",["self"]],["useVelocityAsBasis",["boolean"]],["subParticleSystem",["particleSystem"]],["mode",["number"]],["emitProbability",["number"]]],loadJSON:ZC.fromJSON},LimitSpeedOverLife:{type:"LimitSpeedOverLife",constructor:$C,params:[["speed",["value","valueFunc"]],["dampen",["number"]]],loadJSON:$C.fromJSON}};function Jh(B,A){return kE[B.type]?kE[B.type].loadJSON(B,A):null}const Uh=[];function Lh(B){if(!Uh.find(A=>A.id===B.id)){for(const A of B.emitterShapes)DD[A.type]||(DD[A.type]=A);for(const A of B.behaviors)kE[A.type]||(kE[A.type]=A)}}class AE{get geometry(){return this._geometry}set geometry(A){if(this._geometry=A,A===void 0||typeof A=="string")return;const I=new eQ;this._triangleIndexToArea.length=0;let g=0;if(!A.getIndex())return;const Q=A.getIndex().array,C=Q.length/3;this._triangleIndexToArea.push(0);for(let i=0;i<C;i++)I.setFromAttributeAndIndices(A.getAttribute("position"),Q[i*3],Q[i*3+1],Q[i*3+2]),g+=I.getArea(),this._triangleIndexToArea.push(g);A.userData.triangleIndexToArea=this._triangleIndexToArea}constructor(A){this.type="mesh_surface",this._triangleIndexToArea=[],this._tempA=new q,this._tempB=new q,this._tempC=new q,A&&(this.geometry=A)}initialize(A){const I=this._geometry;if(!I||I.getIndex()===null){A.position.set(0,0,0),A.velocity.set(0,0,1).multiplyScalar(A.startSpeed);return}const g=this._triangleIndexToArea.length-1;let Q=0,C=g;const i=Math.random()*this._triangleIndexToArea[g];for(;Q+1<C;){const a=Math.floor((Q+C)/2);i<this._triangleIndexToArea[a]?C=a:Q=a}let E=Math.random(),D=Math.random();E+D>1&&(E=1-E,D=1-D);const o=I.getIndex().array[Q*3],s=I.getIndex().array[Q*3+1],t=I.getIndex().array[Q*3+2],w=I.getAttribute("position");this._tempA.fromBufferAttribute(w,o),this._tempB.fromBufferAttribute(w,s),this._tempC.fromBufferAttribute(w,t),this._tempB.sub(this._tempA),this._tempC.sub(this._tempA),this._tempA.addScaledVector(this._tempB,E).addScaledVector(this._tempC,D),A.position.copy(this._tempA),this._tempA.copy(this._tempB).cross(this._tempC).normalize(),A.velocity.copy(this._tempA).normalize().multiplyScalar(A.startSpeed)}toJSON(){return{type:"mesh_surface",mesh:this._geometry?this._geometry.uuid:""}}static fromJSON(A,I){return new AE(I.geometries[A.geometry])}clone(){return new AE(this._geometry)}update(A,I){}}const Hh={id:"three.quarks",emitterShapes:[{type:"mesh_surface",params:[["geometry",["geometry"]]],constructor:AE,loadJSON:AE.fromJSON}],behaviors:[]};var Yh=`
|
|
1
|
+
import{Object3D as dB,PlaneGeometry as We,Layers as oE,MeshBasicMaterial as Ms,DoubleSide as KB,AdditiveBlending as Ns,InstancedBufferAttribute as AQ,DynamicDrawUsage as hI,InstancedBufferGeometry as vi,Uniform as wg,ShaderMaterial as vQ,BufferGeometry as ZQ,BufferAttribute as iI,Mesh as IQ,MeshStandardMaterial as lB,MeshPhysicalMaterial as je,ShaderChunk as Js,Triangle as eQ,Vector3 as q,Color as hQ,Vector4 as NI,Box3 as ag,Matrix4 as fA,Matrix3 as VQ,Loader as ze,FileLoader as _e,DataArrayTexture as cI,RGIntegerFormat as sE,UnsignedIntType as oA,RGBAIntegerFormat as hA,WebGLArrayRenderTarget as Zi,NearestFilter as WQ,GLSL3 as Vi,Vector2 as JI,Clock as Wi,WebGLRenderTarget as tE,SRGBColorSpace as wE,UnsignedByteType as ug,RGBAFormat as Mg,Quaternion as UI,DataTexture as cQ,PerspectiveCamera as ji,OrthographicCamera as $e,WebGLCubeRenderTarget as Us,LinearSRGBColorSpace as A0,LinearFilter as Ls,LinearMipMapLinearFilter as Hs,CubeCamera as Ys,Camera as I0,PMREMGenerator as ds,RawShaderMaterial as aE,REVISION as zi,Matrix2 as Ks,Texture as g0,Data3DTexture as Q0,Euler as B0,Line3 as mg,Plane as ls,BackSide as C0,Ray as E0,FrontSide as fs,LineSegments as ps,LineLoop as xs,Line as qs,Points as us,Sphere as i0,BatchedMesh as D0,InterpolateDiscrete as o0,InterpolateLinear as ms,AnimationClip as s0,QuaternionKeyframeTrack as t0,ColorKeyframeTrack as w0,VectorKeyframeTrack as a0,BooleanKeyframeTrack as e0,NumberKeyframeTrack as h0,PropertyBinding as bs}from"./three-core.min.js";import{FullScreenQuad as _i}from"./three-examples.min.js";const c0=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function y0(B){return typeof B=="string"&&c0.test(B)}const DI=[];for(let B=0;B<256;++B)DI.push((B+256).toString(16).slice(1));function G0(B,A=0){return DI[B[A+0]]+DI[B[A+1]]+DI[B[A+2]]+DI[B[A+3]]+"-"+DI[B[A+4]]+DI[B[A+5]]+"-"+DI[B[A+6]]+DI[B[A+7]]+"-"+DI[B[A+8]]+DI[B[A+9]]+"-"+DI[B[A+10]]+DI[B[A+11]]+DI[B[A+12]]+DI[B[A+13]]+DI[B[A+14]]+DI[B[A+15]]}function S0(B){if(!y0(B))throw TypeError("Invalid UUID");let A;const I=new Uint8Array(16);return I[0]=(A=parseInt(B.slice(0,8),16))>>>24,I[1]=A>>>16&255,I[2]=A>>>8&255,I[3]=A&255,I[4]=(A=parseInt(B.slice(9,13),16))>>>8,I[5]=A&255,I[6]=(A=parseInt(B.slice(14,18),16))>>>8,I[7]=A&255,I[8]=(A=parseInt(B.slice(19,23),16))>>>8,I[9]=A&255,I[10]=(A=parseInt(B.slice(24,36),16))/1099511627776&255,I[11]=A/4294967296&255,I[12]=A>>>24&255,I[13]=A>>>16&255,I[14]=A>>>8&255,I[15]=A&255,I}function r0(B){B=unescape(encodeURIComponent(B));const A=[];for(let I=0;I<B.length;++I)A.push(B.charCodeAt(I));return A}const F0="6ba7b810-9dad-11d1-80b4-00c04fd430c8",R0="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function k0(B,A,I){function g(Q,C,i,E){var D;if(typeof Q=="string"&&(Q=r0(Q)),typeof C=="string"&&(C=S0(C)),((D=C)===null||D===void 0?void 0:D.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+Q.length);if(o.set(C),o.set(Q,C.length),o=I(o),o[6]=o[6]&15|A,o[8]=o[8]&63|128,i){E=E||0;for(let s=0;s<16;++s)i[E+s]=o[s];return i}return G0(o)}try{g.name=B}catch{}return g.DNS=F0,g.URL=R0,g}function n0(B,A,I,g){switch(B){case 0:return A&I^~A&g;case 1:return A^I^g;case 2:return A&I^A&g^I&g;case 3:return A^I^g}}function $i(B,A){return B<<A|B>>>32-A}function M0(B){const A=[1518500249,1859775393,2400959708,3395469782],I=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof B=="string"){const i=unescape(encodeURIComponent(B));B=[];for(let E=0;E<i.length;++E)B.push(i.charCodeAt(E))}else Array.isArray(B)||(B=Array.prototype.slice.call(B));B.push(128);const g=B.length/4+2,Q=Math.ceil(g/16),C=new Array(Q);for(let i=0;i<Q;++i){const E=new Uint32Array(16);for(let D=0;D<16;++D)E[D]=B[i*64+D*4]<<24|B[i*64+D*4+1]<<16|B[i*64+D*4+2]<<8|B[i*64+D*4+3];C[i]=E}C[Q-1][14]=(B.length-1)*8/Math.pow(2,32),C[Q-1][14]=Math.floor(C[Q-1][14]),C[Q-1][15]=(B.length-1)*8&4294967295;for(let i=0;i<Q;++i){const E=new Uint32Array(80);for(let a=0;a<16;++a)E[a]=C[i][a];for(let a=16;a<80;++a)E[a]=$i(E[a-3]^E[a-8]^E[a-14]^E[a-16],1);let D=I[0],o=I[1],s=I[2],t=I[3],w=I[4];for(let a=0;a<80;++a){const G=Math.floor(a/20),S=$i(D,5)+n0(G,o,s,t)+w+A[G]+E[a]>>>0;w=t,t=s,s=$i(o,30)>>>0,o=D,D=S}I[0]=I[0]+D>>>0,I[1]=I[1]+o>>>0,I[2]=I[2]+s>>>0,I[3]=I[3]+t>>>0,I[4]=I[4]+w>>>0}return[I[0]>>24&255,I[0]>>16&255,I[0]>>8&255,I[0]&255,I[1]>>24&255,I[1]>>16&255,I[1]>>8&255,I[1]&255,I[2]>>24&255,I[2]>>16&255,I[2]>>8&255,I[2]&255,I[3]>>24&255,I[3]>>16&255,I[3]>>8&255,I[3]&255,I[4]>>24&255,I[4]>>16&255,I[4]>>8&255,I[4]&255]}const N0=k0("v5",80,M0),J0="#needle",U0=[J0];function Ps(B){if(B==null)return null;const A=B.trim(),I=A.toLowerCase();for(const g of L0(U0)){if(!I.endsWith(g))continue;const Q=Ts(A.substring(0,A.length-g.length));return Q.length>0?{marker:g,value:Q}:null}return null}function Ts(B){return B.replace(/[\s_]+/g," ").trim()}function AD(B){return Ps(B)?.value??null}function L0(B){return B.length>1?[...B].sort((A,I)=>I.length-A.length):B}function H0(B){const A=d0(B),I=new DataView(A.buffer,A.byteOffset,A.byteLength);let g=1732584193,Q=4023233417,C=2562383102,i=271733878,E=3285377520;const D=new Uint32Array(80);for(let t=0;t<A.length;t+=64){for(let y=0;y<16;y++)D[y]=I.getUint32(t+y*4);for(let y=16;y<80;y++){const F=D[y-3]^D[y-8]^D[y-14]^D[y-16];D[y]=F<<1|F>>>31}let w=g,a=Q,G=C,S=i,c=E;for(let y=0;y<80;y++){let F,R;y<20?(F=a&G|~a&S,R=1518500249):y<40?(F=a^G^S,R=1859775393):y<60?(F=a&G|a&S|G&S,R=2400959708):(F=a^G^S,R=3395469782);const M=(w<<5|w>>>27)+F+c+R+D[y]|0;c=S,S=G,G=a<<30|a>>>2,a=w,w=M}g=g+w|0,Q=Q+a|0,C=C+G|0,i=i+S|0,E=E+c|0}const o=new Uint8Array(20),s=new DataView(o.buffer);return s.setUint32(0,g>>>0),s.setUint32(4,Q>>>0),s.setUint32(8,C>>>0),s.setUint32(12,i>>>0),s.setUint32(16,E>>>0),o}function Y0(B){let A="";for(let I=0;I<B.length;I++)A+=B[I].toString(16).padStart(2,"0");return A}function d0(B){const A=B.length*8,I=new Uint8Array(((B.length+8>>6)+1)*64);I.set(B),I[B.length]=128;const g=new DataView(I.buffer);return g.setUint32(I.length-8,Math.floor(A/4294967296)),g.setUint32(I.length-4,A>>>0),I}const K0="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function Os(B,A=K0){const I=l0(A),g=new TextEncoder().encode(B),Q=new Uint8Array(I.length+g.length);Q.set(I),Q.set(g,I.length);const C=H0(Q).slice(0,16);return C[6]=C[6]&15|80,C[8]=C[8]&63|128,f0(C)}function l0(B){const A=B.replace(/-/g,"");if(A.length!==32)throw new Error(`Invalid UUID: ${B}`);const I=new Uint8Array(16);for(let g=0;g<16;g++)I[g]=parseInt(A.substring(g*2,g*2+2),16);return I}function f0(B){const A=Y0(B);return`${A.substring(0,8)}-${A.substring(8,12)}-${A.substring(12,16)}-${A.substring(16,20)}-${A.substring(20)}`}const fB="needle-id";function p0(B,A){return Os(`${B}:${A}`,"eff8ba80-635d-11ec-90d6-0242ac120003")}function ID(B){return typeof B!="string"?"":Ps(B)?.value??Ts(B)}function x0(B,A,I,g){return Os(`${B}-${ID(A)}-${I}`)}function q0(B,A){const I=ID(B[A]?.name);let g=0;for(let Q=0;Q<A;Q++)ID(B[Q]?.name)===I&&g++;return g}function u0(B){const A=B?.extras?.[fB];return typeof A=="string"?A:null}function m0(B){return B.replace(/~/g,"~0").replace(/\//g,"~1")}function gD(B){return B.replace(/~1/g,"/").replace(/~0/g,"~")}function Xs(B){return B.map(m0).join("/")}function b0(B){return B.split("/").map(gD)}function P0(B){return B.split("/").map(A=>{const I=/~2(0|[1-9][0-9]*)$/.exec(A);return I?{name:gD(A.slice(0,I.index)),occurrence:Number(I[1])}:{name:gD(A)}})}function yQ(B,A,I){let g=null;if(B.anchor){const C=T0(A,i=>AD(i.name)===B.anchor,2);C.length===1&&(g=C[0])}if(g)return g;let Q=null;if(B.id&&(Q=vs(A,C=>C.userData?.[fB]===B.id)),g)return g;if(Q)return Q;if(B.path!==void 0){let C=A;for(const i of P0(B.path)){const E=C.children?.filter(D=>(D.name??"")===i.name)??[];if(C=i.occurrence!==void 0?E[i.occurrence]??null:E.length===1?E[0]:null,!C)break}if(C&&C!==A)return C}return null}function eE(B,A,I){let g=null;if(B.anchor){const C=A.filter(i=>AD(i.name)===B.anchor);C.length===1?g=C[0]:C.length>1}if(g)return g;const Q=B.id?A.find(C=>C.userData?.[fB]===B.id)??null:null;if(g)return g;if(Q)return Q;if(B.name){const C=A.filter(i=>i.name===B.name);if(C.length===1)return C[0];C.length>1}return null}function T0(B,A,I){const g=[],Q=new Set,C=i=>{if(!(g.length>=I||Q.has(i))&&(Q.add(i),!(A(i)&&(g.push(i),g.length>=I))&&i.children))for(let E=0;E<i.children.length;E++){const D=i.children[E];D!=null&&C(D)}};return C(B),g}function vs(B,A,I=new Set){if(I.has(B))return null;if(I.add(B),A(B))return B;if(!B.children)return null;for(let g=0;g<B.children.length;g++){const Q=B.children[g];if(Q==null)continue;const C=vs(Q,A,I);if(C)return C}return null}const O0=[["nodes","node"],["materials","material"],["textures","texture"],["cameras","camera"]];function Zs(B,A,I){let g=0;const Q=(C,i,E,D)=>{const o=C.userData;if(!o||typeof o!="object"||typeof o[fB]=="string")return;const s=B[E];if(!Array.isArray(s))return;const t=s[D];if(!t||typeof t!="object")return;const w=u0(t)??x0(i,t.name,q0(s,D));o[fB]=w,g++};if(A){for(const[C,i]of A)if(!(!i||typeof C!="object"))for(const[E,D]of O0){const o=i[E];if(typeof o=="number"){Q(C,D,E,o);break}}}if(I)for(let C=0;C<I.length;C++){const i=I[C];i&&Q(i,"scene","scenes",C)}return{attached:g}}const QD=2,Ng=4,bg=4,Vs=4,gQ=new Int32Array(2),Ws=new Float32Array(gQ.buffer),js=new Float64Array(gQ.buffer),hE=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;class _g{constructor(A,I){this.low=A|0,this.high=I|0}static create(A,I){return A==0&&I==0?_g.ZERO:new _g(A,I)}toFloat64(){return(this.low>>>0)+this.high*4294967296}equals(A){return this.low==A.low&&this.high==A.high}}_g.ZERO=new _g(0,0);var BD;(function(B){B[B.UTF8_BYTES=1]="UTF8_BYTES",B[B.UTF16_STRING=2]="UTF16_STRING"})(BD||(BD={}));class MC{constructor(A){this.bytes_=A,this.position_=0}static allocate(A){return new MC(new Uint8Array(A))}clear(){this.position_=0}bytes(){return this.bytes_}position(){return this.position_}setPosition(A){this.position_=A}capacity(){return this.bytes_.length}readInt8(A){return this.readUint8(A)<<24>>24}readUint8(A){return this.bytes_[A]}readInt16(A){return this.readUint16(A)<<16>>16}readUint16(A){return this.bytes_[A]|this.bytes_[A+1]<<8}readInt32(A){return this.bytes_[A]|this.bytes_[A+1]<<8|this.bytes_[A+2]<<16|this.bytes_[A+3]<<24}readUint32(A){return this.readInt32(A)>>>0}readInt64(A){return new _g(this.readInt32(A),this.readInt32(A+4))}readUint64(A){return new _g(this.readUint32(A),this.readUint32(A+4))}readFloat32(A){return gQ[0]=this.readInt32(A),Ws[0]}readFloat64(A){return gQ[hE?0:1]=this.readInt32(A),gQ[hE?1:0]=this.readInt32(A+4),js[0]}writeInt8(A,I){this.bytes_[A]=I}writeUint8(A,I){this.bytes_[A]=I}writeInt16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeUint16(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8}writeInt32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeUint32(A,I){this.bytes_[A]=I,this.bytes_[A+1]=I>>8,this.bytes_[A+2]=I>>16,this.bytes_[A+3]=I>>24}writeInt64(A,I){this.writeInt32(A,I.low),this.writeInt32(A+4,I.high)}writeUint64(A,I){this.writeUint32(A,I.low),this.writeUint32(A+4,I.high)}writeFloat32(A,I){Ws[0]=I,this.writeInt32(A,gQ[0])}writeFloat64(A,I){js[0]=I,this.writeInt32(A,gQ[hE?0:1]),this.writeInt32(A+4,gQ[hE?1:0])}getBufferIdentifier(){if(this.bytes_.length<this.position_+Ng+bg)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let A="";for(let I=0;I<bg;I++)A+=String.fromCharCode(this.readInt8(this.position_+Ng+I));return A}__offset(A,I){const g=A-this.readInt32(A);return I<this.readInt16(g)?this.readInt16(g+I):0}__union(A,I){return A.bb_pos=I+this.readInt32(I),A.bb=this,A}__string(A,I){A+=this.readInt32(A);const g=this.readInt32(A);let Q="",C=0;if(A+=Ng,I===BD.UTF8_BYTES)return this.bytes_.subarray(A,A+g);for(;C<g;){let i;const E=this.readUint8(A+C++);if(E<192)i=E;else{const D=this.readUint8(A+C++);if(E<224)i=(E&31)<<6|D&63;else{const o=this.readUint8(A+C++);if(E<240)i=(E&15)<<12|(D&63)<<6|o&63;else{const s=this.readUint8(A+C++);i=(E&7)<<18|(D&63)<<12|(o&63)<<6|s&63}}}i<65536?Q+=String.fromCharCode(i):(i-=65536,Q+=String.fromCharCode((i>>10)+55296,(i&1023)+56320))}return Q}__union_with_string(A,I){return typeof A=="string"?this.__string(I):this.__union(A,I)}__indirect(A){return A+this.readInt32(A)}__vector(A){return A+this.readInt32(A)+Ng}__vector_len(A){return this.readInt32(A+this.readInt32(A))}__has_identifier(A){if(A.length!=bg)throw new Error("FlatBuffers: file identifier must be length "+bg);for(let I=0;I<bg;I++)if(A.charCodeAt(I)!=this.readInt8(this.position()+Ng+I))return!1;return!0}createLong(A,I){return _g.create(A,I)}createScalarList(A,I){const g=[];for(let Q=0;Q<I;++Q)A(Q)!==null&&g.push(A(Q));return g}createObjList(A,I){const g=[];for(let Q=0;Q<I;++Q){const C=A(Q);C!==null&&g.push(C.unpack())}return g}}class As{constructor(A){this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null;let I;A?I=A:I=1024,this.bb=MC.allocate(I),this.space=I}clear(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1,this.string_maps=null}forceDefaults(A){this.force_defaults=A}dataBuffer(){return this.bb}asUint8Array(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())}prep(A,I){A>this.minalign&&(this.minalign=A);const g=~(this.bb.capacity()-this.space+I)+1&A-1;for(;this.space<g+A+I;){const Q=this.bb.capacity();this.bb=As.growByteBuffer(this.bb),this.space+=this.bb.capacity()-Q}this.pad(g)}pad(A){for(let I=0;I<A;I++)this.bb.writeInt8(--this.space,0)}writeInt8(A){this.bb.writeInt8(this.space-=1,A)}writeInt16(A){this.bb.writeInt16(this.space-=2,A)}writeInt32(A){this.bb.writeInt32(this.space-=4,A)}writeInt64(A){this.bb.writeInt64(this.space-=8,A)}writeFloat32(A){this.bb.writeFloat32(this.space-=4,A)}writeFloat64(A){this.bb.writeFloat64(this.space-=8,A)}addInt8(A){this.prep(1,0),this.writeInt8(A)}addInt16(A){this.prep(2,0),this.writeInt16(A)}addInt32(A){this.prep(4,0),this.writeInt32(A)}addInt64(A){this.prep(8,0),this.writeInt64(A)}addFloat32(A){this.prep(4,0),this.writeFloat32(A)}addFloat64(A){this.prep(8,0),this.writeFloat64(A)}addFieldInt8(A,I,g){(this.force_defaults||I!=g)&&(this.addInt8(I),this.slot(A))}addFieldInt16(A,I,g){(this.force_defaults||I!=g)&&(this.addInt16(I),this.slot(A))}addFieldInt32(A,I,g){(this.force_defaults||I!=g)&&(this.addInt32(I),this.slot(A))}addFieldInt64(A,I,g){(this.force_defaults||!I.equals(g))&&(this.addInt64(I),this.slot(A))}addFieldFloat32(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat32(I),this.slot(A))}addFieldFloat64(A,I,g){(this.force_defaults||I!=g)&&(this.addFloat64(I),this.slot(A))}addFieldOffset(A,I,g){(this.force_defaults||I!=g)&&(this.addOffset(I),this.slot(A))}addFieldStruct(A,I,g){I!=g&&(this.nested(I),this.slot(A))}nested(A){if(A!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")}notNested(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")}slot(A){this.vtable!==null&&(this.vtable[A]=this.offset())}offset(){return this.bb.capacity()-this.space}static growByteBuffer(A){const I=A.capacity();if(I&3221225472)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");const g=I<<1,Q=MC.allocate(g);return Q.setPosition(g-I),Q.bytes().set(A.bytes(),g-I),Q}addOffset(A){this.prep(Ng,0),this.writeInt32(this.offset()-A+Ng)}startObject(A){this.notNested(),this.vtable==null&&(this.vtable=[]),this.vtable_in_use=A;for(let I=0;I<A;I++)this.vtable[I]=0;this.isNested=!0,this.object_start=this.offset()}endObject(){if(this.vtable==null||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);const A=this.offset();let I=this.vtable_in_use-1;for(;I>=0&&this.vtable[I]==0;I--);const g=I+1;for(;I>=0;I--)this.addInt16(this.vtable[I]!=0?A-this.vtable[I]:0);const Q=2;this.addInt16(A-this.object_start);const C=(g+Q)*QD;this.addInt16(C);let i=0;const E=this.space;A:for(I=0;I<this.vtables.length;I++){const D=this.bb.capacity()-this.vtables[I];if(C==this.bb.readInt16(D)){for(let o=QD;o<C;o+=QD)if(this.bb.readInt16(E+o)!=this.bb.readInt16(D+o))continue A;i=this.vtables[I];break}}return i?(this.space=this.bb.capacity()-A,this.bb.writeInt32(this.space,i-A)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-A,this.offset()-A)),this.isNested=!1,A}finish(A,I,g){const Q=g?Vs:0;if(I){const C=I;if(this.prep(this.minalign,Ng+bg+Q),C.length!=bg)throw new Error("FlatBuffers: file identifier must be length "+bg);for(let i=bg-1;i>=0;i--)this.writeInt8(C.charCodeAt(i))}this.prep(this.minalign,Ng+Q),this.addOffset(A),Q&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)}finishSizePrefixed(A,I){this.finish(A,I,!0)}requiredField(A,I){const g=this.bb.capacity()-A,Q=g-this.bb.readInt32(g);if(this.bb.readInt16(Q+I)==0)throw new Error("FlatBuffers: field "+I+" must be set")}startVector(A,I,g){this.notNested(),this.vector_num_elems=I,this.prep(Ng,A*I),this.prep(g,A*I)}endVector(){return this.writeInt32(this.vector_num_elems),this.offset()}createSharedString(A){if(!A)return 0;if(this.string_maps||(this.string_maps=new Map),this.string_maps.has(A))return this.string_maps.get(A);const I=this.createString(A);return this.string_maps.set(A,I),I}createString(A){if(!A)return 0;let I;if(A instanceof Uint8Array)I=A;else{I=[];let g=0;for(;g<A.length;){let Q;const C=A.charCodeAt(g++);if(C<55296||C>=56320)Q=C;else{const i=A.charCodeAt(g++);Q=(C<<10)+i+-56613888}Q<128?I.push(Q):(Q<2048?I.push(Q>>6&31|192):(Q<65536?I.push(Q>>12&15|224):I.push(Q>>18&7|240,Q>>12&63|128),I.push(Q>>6&63|128)),I.push(Q&63|128))}}this.addInt8(0),this.startVector(1,I.length,1),this.bb.setPosition(this.space-=I.length);for(let g=0,Q=this.space,C=this.bb.bytes();g<I.length;g++)C[Q++]=I[g];return this.endVector()}createLong(A,I){return _g.create(A,I)}createObjectOffset(A){return A===null?0:typeof A=="string"?this.createString(A):A.pack(this)}createObjectOffsetList(A){const I=[];for(let g=0;g<A.length;++g){const Q=A[g];if(Q!==null)I.push(this.createObjectOffset(Q));else throw new Error("FlatBuffers: Argument for createObjectOffsetList cannot contain null.")}return I}createStructOffsetList(A,I){return I(this,A.length),this.createObjectOffsetList(A),this.endVector()}}const II={ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function zs(B){const A=await fetch(B);if(A.ok)return A.json();throw new Error(A.statusText)}async function X0(B){return await zs(`${B}/profilesList.json`)}async function v0(B,A,I=null,g=!0){if(!B)throw new Error("No xrInputSource supplied");const Q=await X0(A);let C;if(B.profiles.some(D=>{const o=Q[D];return o&&(C={profileId:D,profilePath:`${A}/${o.path}`,deprecated:!!o.deprecated}),!!C}),!C){if(!I)throw new Error("No matching profile name found");const D=Q[I];if(!D)throw new Error(`No matching profile name found and default profile "${I}" missing.`);C={profileId:I,profilePath:`${A}/${D.path}`,deprecated:!!D.deprecated}}const i=await zs(C.profilePath);let E;if(g){let D;if(B.handedness==="any"?D=i.layouts[Object.keys(i.layouts)[0]]:D=i.layouts[B.handedness],!D)throw new Error(`No matching handedness, ${B.handedness}, in profile ${C.profileId}`);D.assetPath&&(E=C.profilePath.replace("profile.json",D.assetPath))}return{profile:i,assetPath:E}}const Z0={xAxis:0,yAxis:0,button:0,state:II.ComponentState.DEFAULT};function V0(B=0,A=0){let I=B,g=A;if(Math.sqrt(B*B+A*A)>1){const Q=Math.atan2(A,B);I=Math.cos(Q),g=Math.sin(Q)}return{normalizedXAxis:I*.5+.5,normalizedYAxis:g*.5+.5}}class W0{constructor(A){this.componentProperty=A.componentProperty,this.states=A.states,this.valueNodeName=A.valueNodeName,this.valueNodeProperty=A.valueNodeProperty,this.valueNodeProperty===II.VisualResponseProperty.TRANSFORM&&(this.minNodeName=A.minNodeName,this.maxNodeName=A.maxNodeName),this.value=0,this.updateFromComponent(Z0)}updateFromComponent({xAxis:A,yAxis:I,button:g,state:Q}){const{normalizedXAxis:C,normalizedYAxis:i}=V0(A,I);switch(this.componentProperty){case II.ComponentProperty.X_AXIS:this.value=this.states.includes(Q)?C:.5;break;case II.ComponentProperty.Y_AXIS:this.value=this.states.includes(Q)?i:.5;break;case II.ComponentProperty.BUTTON:this.value=this.states.includes(Q)?g:0;break;case II.ComponentProperty.STATE:this.valueNodeProperty===II.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(Q):this.value=this.states.includes(Q)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class j0{constructor(A,I){if(!A||!I||!I.visualResponses||!I.gamepadIndices||Object.keys(I.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=A,this.type=I.type,this.rootNodeName=I.rootNodeName,this.touchPointNodeName=I.touchPointNodeName,this.visualResponses={},Object.keys(I.visualResponses).forEach(g=>{const Q=new W0(I.visualResponses[g]);this.visualResponses[g]=Q}),this.gamepadIndices=Object.assign({},I.gamepadIndices),this.values={state:II.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(A){if(this.values.state=II.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&A.buttons.length>this.gamepadIndices.button){const I=A.buttons[this.gamepadIndices.button];this.values.button=I.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,I.pressed||this.values.button===1?this.values.state=II.ComponentState.PRESSED:(I.touched||this.values.button>II.ButtonTouchThreshold)&&(this.values.state=II.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&A.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=A.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===II.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>II.AxisTouchThreshold&&(this.values.state=II.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&A.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=A.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===II.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>II.AxisTouchThreshold&&(this.values.state=II.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(I=>{I.updateFromComponent(this.values)})}}class z0{constructor(A,I,g){if(!A)throw new Error("No xrInputSource supplied");if(!I)throw new Error("No profile supplied");this.xrInputSource=A,this.assetUrl=g,this.id=I.profileId,this.layoutDescription=I.layouts[A.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(Q=>{const C=this.layoutDescription.components[Q];this.components[Q]=new j0(Q,C)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const A=[];return Object.values(this.components).forEach(I=>{A.push(I.data)}),A}updateFromGamepad(){Object.values(this.components).forEach(A=>{A.updateFromGamepad(this.xrInputSource.gamepad)})}}const yI=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let _s=1234567;const $s=Math.PI/180,At=180/Math.PI;function _0(){const B=Math.random()*4294967295|0,A=Math.random()*4294967295|0,I=Math.random()*4294967295|0,g=Math.random()*4294967295|0;return(yI[B&255]+yI[B>>8&255]+yI[B>>16&255]+yI[B>>24&255]+"-"+yI[A&255]+yI[A>>8&255]+"-"+yI[A>>16&15|64]+yI[A>>24&255]+"-"+yI[I&63|128]+yI[I>>8&255]+"-"+yI[I>>16&255]+yI[I>>24&255]+yI[g&255]+yI[g>>8&255]+yI[g>>16&255]+yI[g>>24&255]).toLowerCase()}function Jg(B,A,I){return Math.max(A,Math.min(I,B))}function It(B,A){return(B%A+A)%A}function $0(B,A,I,g,Q){return g+(B-A)*(Q-g)/(I-A)}function Ah(B,A,I){return B!==A?(I-B)/(A-B):0}function gt(B,A,I){return(1-I)*B+I*A}function Ih(B,A,I,g){return gt(B,A,1-Math.exp(-I*g))}function gh(B,A=1){return A-Math.abs(It(B,A*2)-A)}function Qh(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*(3-2*B))}function Bh(B,A,I){return B<=A?0:B>=I?1:(B=(B-A)/(I-A),B*B*B*(B*(B*6-15)+10))}function Ch(B,A){return B+Math.floor(Math.random()*(A-B+1))}function Eh(B,A){return B+Math.random()*(A-B)}function ih(B){return B*(.5-Math.random())}function Dh(B){B!==void 0&&(_s=B);let A=_s+=1831565813;return A=Math.imul(A^A>>>15,A|1),A^=A+Math.imul(A^A>>>7,A|61),((A^A>>>14)>>>0)/4294967296}function oh(B){return B*$s}function sh(B){return B*At}function th(B){return(B&B-1)===0&&B!==0}function wh(B){return Math.pow(2,Math.ceil(Math.log(B)/Math.LN2))}function ah(B){return Math.pow(2,Math.floor(Math.log(B)/Math.LN2))}function eh(B,A,I,g,Q){const C=Math.cos,i=Math.sin,E=C(I/2),D=i(I/2),o=C((A+g)/2),s=i((A+g)/2),t=C((A-g)/2),w=i((A-g)/2),a=C((g-A)/2),G=i((g-A)/2);switch(Q){case"XYX":B.set(E*s,D*t,D*w,E*o);break;case"YZY":B.set(D*w,E*s,D*t,E*o);break;case"ZXZ":B.set(D*t,D*w,E*s,E*o);break;case"XZX":B.set(E*s,D*G,D*a,E*o);break;case"YXY":B.set(D*a,E*s,D*G,E*o);break;case"ZYZ":B.set(D*G,D*a,E*s,E*o);break;default:console.warn("../math.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+Q)}}function hh(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return B/4294967295;case Uint16Array:return B/65535;case Uint8Array:return B/255;case Int32Array:return Math.max(B/2147483647,-1);case Int16Array:return Math.max(B/32767,-1);case Int8Array:return Math.max(B/127,-1);default:throw new Error("Invalid component type.")}}function ch(B,A){switch(A.constructor){case Float32Array:return B;case Uint32Array:return Math.round(B*4294967295);case Uint16Array:return Math.round(B*65535);case Uint8Array:return Math.round(B*255);case Int32Array:return Math.round(B*2147483647);case Int16Array:return Math.round(B*32767);case Int8Array:return Math.round(B*127);default:throw new Error("Invalid component type.")}}const jQ={DEG2RAD:$s,RAD2DEG:At,generateUUID:_0,clamp:Jg,euclideanModulo:It,mapLinear:$0,inverseLerp:Ah,lerp:gt,damp:Ih,pingpong:gh,smoothstep:Qh,smootherstep:Bh,randInt:Ch,randFloat:Eh,randFloatSpread:ih,seededRandom:Dh,degToRad:oh,radToDeg:sh,isPowerOfTwo:th,ceilPowerOfTwo:wh,floorPowerOfTwo:ah,setQuaternionFromProperEuler:eh,normalize:ch,denormalize:hh};class SA{constructor(A=0,I=0,g=0,Q=1){this.isQuaternion=!0,this._x=A,this._y=I,this._z=g,this._w=Q}static slerpFlat(A,I,g,Q,C,i,E){let D=g[Q+0],o=g[Q+1],s=g[Q+2],t=g[Q+3];const w=C[i+0],a=C[i+1],G=C[i+2],S=C[i+3];if(E===0){A[I+0]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t;return}if(E===1){A[I+0]=w,A[I+1]=a,A[I+2]=G,A[I+3]=S;return}if(t!==S||D!==w||o!==a||s!==G){let c=1-E;const y=D*w+o*a+s*G+t*S,F=y>=0?1:-1,R=1-y*y;if(R>Number.EPSILON){const n=Math.sqrt(R),N=Math.atan2(n,y*F);c=Math.sin(c*N)/n,E=Math.sin(E*N)/n}const M=E*F;if(D=D*c+w*M,o=o*c+a*M,s=s*c+G*M,t=t*c+S*M,c===1-E){const n=1/Math.sqrt(D*D+o*o+s*s+t*t);D*=n,o*=n,s*=n,t*=n}}A[I]=D,A[I+1]=o,A[I+2]=s,A[I+3]=t}static multiplyQuaternionsFlat(A,I,g,Q,C,i){const E=g[Q],D=g[Q+1],o=g[Q+2],s=g[Q+3],t=C[i],w=C[i+1],a=C[i+2],G=C[i+3];return A[I]=E*G+s*t+D*a-o*w,A[I+1]=D*G+s*w+o*t-E*a,A[I+2]=o*G+s*a+E*w-D*t,A[I+3]=s*G-E*t-D*w-o*a,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,I,g,Q){return this._x=A,this._y=I,this._z=g,this._w=Q,this._onChangeCallback(),this}clone(){return new SA(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,I=!0){const g=A._x,Q=A._y,C=A._z,i=A._order,E=Math.cos,D=Math.sin,o=E(g/2),s=E(Q/2),t=E(C/2),w=D(g/2),a=D(Q/2),G=D(C/2);switch(i){case"XYZ":this._x=w*s*t+o*a*G,this._y=o*a*t-w*s*G,this._z=o*s*G+w*a*t,this._w=o*s*t-w*a*G;break;case"YXZ":this._x=w*s*t+o*a*G,this._y=o*a*t-w*s*G,this._z=o*s*G-w*a*t,this._w=o*s*t+w*a*G;break;case"ZXY":this._x=w*s*t-o*a*G,this._y=o*a*t+w*s*G,this._z=o*s*G+w*a*t,this._w=o*s*t-w*a*G;break;case"ZYX":this._x=w*s*t-o*a*G,this._y=o*a*t+w*s*G,this._z=o*s*G-w*a*t,this._w=o*s*t+w*a*G;break;case"YZX":this._x=w*s*t+o*a*G,this._y=o*a*t+w*s*G,this._z=o*s*G-w*a*t,this._w=o*s*t-w*a*G;break;case"XZY":this._x=w*s*t-o*a*G,this._y=o*a*t-w*s*G,this._z=o*s*G+w*a*t,this._w=o*s*t+w*a*G;break;default:console.warn("../math.Quaternion: .setFromEuler() encountered an unknown order: "+i)}return I===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,I){const g=I/2,Q=Math.sin(g);return this._x=A.x*Q,this._y=A.y*Q,this._z=A.z*Q,this._w=Math.cos(g),this._onChangeCallback(),this}setFromRotationMatrix(A){const I=A.elements,g=I[0],Q=I[4],C=I[8],i=I[1],E=I[5],D=I[9],o=I[2],s=I[6],t=I[10],w=g+E+t;if(w>0){const a=.5/Math.sqrt(w+1);this._w=.25/a,this._x=(s-D)*a,this._y=(C-o)*a,this._z=(i-Q)*a}else if(g>E&&g>t){const a=2*Math.sqrt(1+g-E-t);this._w=(s-D)/a,this._x=.25*a,this._y=(Q+i)/a,this._z=(C+o)/a}else if(E>t){const a=2*Math.sqrt(1+E-g-t);this._w=(C-o)/a,this._x=(Q+i)/a,this._y=.25*a,this._z=(D+s)/a}else{const a=2*Math.sqrt(1+t-g-E);this._w=(i-Q)/a,this._x=(C+o)/a,this._y=(D+s)/a,this._z=.25*a}return this._onChangeCallback(),this}setFromUnitVectors(A,I){let g=A.dot(I)+1;return g<Number.EPSILON?(g=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=g):(this._x=0,this._y=-A.z,this._z=A.y,this._w=g)):(this._x=A.y*I.z-A.z*I.y,this._y=A.z*I.x-A.x*I.z,this._z=A.x*I.y-A.y*I.x,this._w=g),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(Jg(this.dot(A),-1,1)))}rotateTowards(A,I){const g=this.angleTo(A);if(g===0)return this;const Q=Math.min(1,I/g);return this.slerp(A,Q),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,I){const g=A._x,Q=A._y,C=A._z,i=A._w,E=I._x,D=I._y,o=I._z,s=I._w;return this._x=g*s+i*E+Q*o-C*D,this._y=Q*s+i*D+C*E-g*o,this._z=C*s+i*o+g*D-Q*E,this._w=i*s-g*E-Q*D-C*o,this._onChangeCallback(),this}slerp(A,I){if(I===0)return this;if(I===1)return this.copy(A);const g=this._x,Q=this._y,C=this._z,i=this._w;let E=i*A._w+g*A._x+Q*A._y+C*A._z;if(E<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,E=-E):this.copy(A),E>=1)return this._w=i,this._x=g,this._y=Q,this._z=C,this;const D=1-E*E;if(D<=Number.EPSILON){const a=1-I;return this._w=a*i+I*this._w,this._x=a*g+I*this._x,this._y=a*Q+I*this._y,this._z=a*C+I*this._z,this.normalize(),this}const o=Math.sqrt(D),s=Math.atan2(o,E),t=Math.sin((1-I)*s)/o,w=Math.sin(I*s)/o;return this._w=i*t+this._w*w,this._x=g*t+this._x*w,this._y=Q*t+this._y*w,this._z=C*t+this._z*w,this._onChangeCallback(),this}slerpQuaternions(A,I,g){return this.copy(A).slerp(I,g)}random(){const A=2*Math.PI*Math.random(),I=2*Math.PI*Math.random(),g=Math.random(),Q=Math.sqrt(1-g),C=Math.sqrt(g);return this.set(Q*Math.sin(A),Q*Math.cos(A),C*Math.sin(I),C*Math.cos(I))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,I=0){return this._x=A[I],this._y=A[I+1],this._z=A[I+2],this._w=A[I+3],this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._w,A}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Z{constructor(A=0,I=0,g=0){this.isVector3=!0,Z.prototype.isVector3=!0,this.x=A,this.y=I,this.z=g}set(A,I,g){return g===void 0&&(g=this.z),this.x=A,this.y=I,this.z=g,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new Z(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,I){return this.x=A.x*I.x,this.y=A.y*I.y,this.z=A.z*I.z,this}applyEuler(A){return this.applyQuaternion(Qt.setFromEuler(A))}applyAxisAngle(A,I){return this.applyQuaternion(Qt.setFromAxisAngle(A,I))}applyMatrix3(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[3]*g+C[6]*Q,this.y=C[1]*I+C[4]*g+C[7]*Q,this.z=C[2]*I+C[5]*g+C[8]*Q,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=A.elements,i=1/(C[3]*I+C[7]*g+C[11]*Q+C[15]);return this.x=(C[0]*I+C[4]*g+C[8]*Q+C[12])*i,this.y=(C[1]*I+C[5]*g+C[9]*Q+C[13])*i,this.z=(C[2]*I+C[6]*g+C[10]*Q+C[14])*i,this}applyQuaternion(A){const I=this.x,g=this.y,Q=this.z,C=A.x,i=A.y,E=A.z,D=A.w,o=2*(i*Q-E*g),s=2*(E*I-C*Q),t=2*(C*g-i*I);return this.x=I+D*o+i*t-E*s,this.y=g+D*s+E*o-C*t,this.z=Q+D*t+C*s-i*o,this}transformDirection(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[4]*g+C[8]*Q,this.y=C[1]*I+C[5]*g+C[9]*Q,this.z=C[2]*I+C[6]*g+C[10]*Q,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,I){const g=A.x,Q=A.y,C=A.z,i=I.x,E=I.y,D=I.z;return this.x=Q*D-C*E,this.y=C*i-g*D,this.z=g*E-Q*i,this}projectOnVector(A){const I=A.lengthSq();if(I===0)return this.set(0,0,0);const g=A.dot(this)/I;return this.copy(A).multiplyScalar(g)}projectOnPlane(A){return CD.copy(this).projectOnVector(A),this.sub(CD)}reflect(A){return this.sub(CD.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(Jg(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y,Q=this.z-A.z;return I*I+g*g+Q*Q}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSphericalCoords(A,I,g){const Q=Math.sin(I)*A;return this.x=Q*Math.sin(g),this.y=Math.cos(I)*A,this.z=Q*Math.cos(g),this}setFromCylindricalCoords(A,I,g){return this.x=A*Math.sin(I),this.y=g,this.z=A*Math.cos(I),this}setFromMatrixPosition(A){const I=A.elements;return this.x=I[12],this.y=I[13],this.z=I[14],this}setFromMatrixScale(A){const I=this.setFromMatrixColumn(A,0).length(),g=this.setFromMatrixColumn(A,1).length(),Q=this.setFromMatrixColumn(A,2).length();return this.x=I,this.y=g,this.z=Q,this}setFromMatrixColumn(A,I){return this.fromArray(A.elements,I*4)}setFromMatrix3Column(A,I){return this.fromArray(A.elements,I*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,I=Math.random()*2-1,g=Math.sqrt(1-I*I);return this.x=g*Math.cos(A),this.y=I,this.z=g*Math.sin(A),this}abs(){return this.x=Math.abs(this.x),this.y=Math.abs(this.y),this.z=Math.abs(this.z),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const CD=new Z,Qt=new SA,cE=2e3,Bt=2001;class kg{constructor(A,I,g,Q,C,i,E,D,o,s,t,w,a,G,S,c){this.isMatrix4=!0,kg.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,i,E,D,o,s,t,w,a,G,S,c)}extractPosition(A){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(A)}multiplyToArray(A,I,g){return console.error("THREE.Matrix4: .multiplyToArray() has been removed."),this}setRotationFromQuaternion(A){return this.makeRotationFromQuaternion(A)}set(A,I,g,Q,C,i,E,D,o,s,t,w,a,G,S,c){const y=this.elements;return y[0]=A,y[4]=I,y[8]=g,y[12]=Q,y[1]=C,y[5]=i,y[9]=E,y[13]=D,y[2]=o,y[6]=s,y[10]=t,y[14]=w,y[3]=a,y[7]=G,y[11]=S,y[15]=c,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new kg().fromArray(this.elements)}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],I[9]=g[9],I[10]=g[10],I[11]=g[11],I[12]=g[12],I[13]=g[13],I[14]=g[14],I[15]=g[15],this}copyPosition(A){const I=this.elements,g=A.elements;return I[12]=g[12],I[13]=g[13],I[14]=g[14],this}setFromMatrix3(A){const I=A.elements;return this.set(I[0],I[3],I[6],0,I[1],I[4],I[7],0,I[2],I[5],I[8],0,0,0,0,1),this}extractBasis(A,I,g){return A.setFromMatrixColumn(this,0),I.setFromMatrixColumn(this,1),g.setFromMatrixColumn(this,2),this}makeBasis(A,I,g){return this.set(A.x,I.x,g.x,0,A.y,I.y,g.y,0,A.z,I.z,g.z,0,0,0,0,1),this}extractRotation(A){const I=this.elements,g=A.elements,Q=1/zQ.setFromMatrixColumn(A,0).length(),C=1/zQ.setFromMatrixColumn(A,1).length(),i=1/zQ.setFromMatrixColumn(A,2).length();return I[0]=g[0]*Q,I[1]=g[1]*Q,I[2]=g[2]*Q,I[3]=0,I[4]=g[4]*C,I[5]=g[5]*C,I[6]=g[6]*C,I[7]=0,I[8]=g[8]*i,I[9]=g[9]*i,I[10]=g[10]*i,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromEuler(A){const I=this.elements,g=A.x,Q=A.y,C=A.z,i=Math.cos(g),E=Math.sin(g),D=Math.cos(Q),o=Math.sin(Q),s=Math.cos(C),t=Math.sin(C);if(A.order==="XYZ"){const w=i*s,a=i*t,G=E*s,S=E*t;I[0]=D*s,I[4]=-D*t,I[8]=o,I[1]=a+G*o,I[5]=w-S*o,I[9]=-E*D,I[2]=S-w*o,I[6]=G+a*o,I[10]=i*D}else if(A.order==="YXZ"){const w=D*s,a=D*t,G=o*s,S=o*t;I[0]=w+S*E,I[4]=G*E-a,I[8]=i*o,I[1]=i*t,I[5]=i*s,I[9]=-E,I[2]=a*E-G,I[6]=S+w*E,I[10]=i*D}else if(A.order==="ZXY"){const w=D*s,a=D*t,G=o*s,S=o*t;I[0]=w-S*E,I[4]=-i*t,I[8]=G+a*E,I[1]=a+G*E,I[5]=i*s,I[9]=S-w*E,I[2]=-i*o,I[6]=E,I[10]=i*D}else if(A.order==="ZYX"){const w=i*s,a=i*t,G=E*s,S=E*t;I[0]=D*s,I[4]=G*o-a,I[8]=w*o+S,I[1]=D*t,I[5]=S*o+w,I[9]=a*o-G,I[2]=-o,I[6]=E*D,I[10]=i*D}else if(A.order==="YZX"){const w=i*D,a=i*o,G=E*D,S=E*o;I[0]=D*s,I[4]=S-w*t,I[8]=G*t+a,I[1]=t,I[5]=i*s,I[9]=-E*s,I[2]=-o*s,I[6]=a*t+G,I[10]=w-S*t}else if(A.order==="XZY"){const w=i*D,a=i*o,G=E*D,S=E*o;I[0]=D*s,I[4]=-t,I[8]=o*s,I[1]=w*t+S,I[5]=i*s,I[9]=a*t-G,I[2]=G*t-a,I[6]=E*s,I[10]=S*t+w}return I[3]=0,I[7]=0,I[11]=0,I[12]=0,I[13]=0,I[14]=0,I[15]=1,this}makeRotationFromQuaternion(A){return this.compose(yh,A,Gh)}lookAt(A,I,g){const Q=this.elements;return ZI.subVectors(A,I),ZI.lengthSq()===0&&(ZI.z=1),ZI.normalize(),QQ.crossVectors(g,ZI),QQ.lengthSq()===0&&(Math.abs(g.z)===1?ZI.x+=1e-4:ZI.z+=1e-4,ZI.normalize(),QQ.crossVectors(g,ZI)),QQ.normalize(),yE.crossVectors(ZI,QQ),Q[0]=QQ.x,Q[4]=yE.x,Q[8]=ZI.x,Q[1]=QQ.y,Q[5]=yE.y,Q[9]=ZI.y,Q[2]=QQ.z,Q[6]=yE.z,Q[10]=ZI.z,this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,i=g[0],E=g[4],D=g[8],o=g[12],s=g[1],t=g[5],w=g[9],a=g[13],G=g[2],S=g[6],c=g[10],y=g[14],F=g[3],R=g[7],M=g[11],n=g[15],N=Q[0],J=Q[4],L=Q[8],H=Q[12],Y=Q[1],K=Q[5],l=Q[9],p=Q[13],u=Q[2],b=Q[6],O=Q[10],W=Q[14],T=Q[3],j=Q[7],EA=Q[11],wA=Q[15];return C[0]=i*N+E*Y+D*u+o*T,C[4]=i*J+E*K+D*b+o*j,C[8]=i*L+E*l+D*O+o*EA,C[12]=i*H+E*p+D*W+o*wA,C[1]=s*N+t*Y+w*u+a*T,C[5]=s*J+t*K+w*b+a*j,C[9]=s*L+t*l+w*O+a*EA,C[13]=s*H+t*p+w*W+a*wA,C[2]=G*N+S*Y+c*u+y*T,C[6]=G*J+S*K+c*b+y*j,C[10]=G*L+S*l+c*O+y*EA,C[14]=G*H+S*p+c*W+y*wA,C[3]=F*N+R*Y+M*u+n*T,C[7]=F*J+R*K+M*b+n*j,C[11]=F*L+R*l+M*O+n*EA,C[15]=F*H+R*p+M*W+n*wA,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[4]*=A,I[8]*=A,I[12]*=A,I[1]*=A,I[5]*=A,I[9]*=A,I[13]*=A,I[2]*=A,I[6]*=A,I[10]*=A,I[14]*=A,I[3]*=A,I[7]*=A,I[11]*=A,I[15]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[4],Q=A[8],C=A[12],i=A[1],E=A[5],D=A[9],o=A[13],s=A[2],t=A[6],w=A[10],a=A[14],G=A[3],S=A[7],c=A[11],y=A[15];return G*(+C*D*t-Q*o*t-C*E*w+g*o*w+Q*E*a-g*D*a)+S*(+I*D*a-I*o*w+C*i*w-Q*i*a+Q*o*s-C*D*s)+c*(+I*o*t-I*E*a-C*i*t+g*i*a+C*E*s-g*o*s)+y*(-Q*E*s-I*D*t+I*E*w+Q*i*t-g*i*w+g*D*s)}transpose(){const A=this.elements;let I;return I=A[1],A[1]=A[4],A[4]=I,I=A[2],A[2]=A[8],A[8]=I,I=A[6],A[6]=A[9],A[9]=I,I=A[3],A[3]=A[12],A[12]=I,I=A[7],A[7]=A[13],A[13]=I,I=A[11],A[11]=A[14],A[14]=I,this}setPosition(A,I,g){const Q=this.elements;return A.isVector3?(Q[12]=A.x,Q[13]=A.y,Q[14]=A.z):(Q[12]=A,Q[13]=I,Q[14]=g),this}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],i=A[4],E=A[5],D=A[6],o=A[7],s=A[8],t=A[9],w=A[10],a=A[11],G=A[12],S=A[13],c=A[14],y=A[15],F=t*c*o-S*w*o+S*D*a-E*c*a-t*D*y+E*w*y,R=G*w*o-s*c*o-G*D*a+i*c*a+s*D*y-i*w*y,M=s*S*o-G*t*o+G*E*a-i*S*a-s*E*y+i*t*y,n=G*t*D-s*S*D-G*E*w+i*S*w+s*E*c-i*t*c,N=I*F+g*R+Q*M+C*n;if(N===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const J=1/N;return A[0]=F*J,A[1]=(S*w*C-t*c*C-S*Q*a+g*c*a+t*Q*y-g*w*y)*J,A[2]=(E*c*C-S*D*C+S*Q*o-g*c*o-E*Q*y+g*D*y)*J,A[3]=(t*D*C-E*w*C-t*Q*o+g*w*o+E*Q*a-g*D*a)*J,A[4]=R*J,A[5]=(s*c*C-G*w*C+G*Q*a-I*c*a-s*Q*y+I*w*y)*J,A[6]=(G*D*C-i*c*C-G*Q*o+I*c*o+i*Q*y-I*D*y)*J,A[7]=(i*w*C-s*D*C+s*Q*o-I*w*o-i*Q*a+I*D*a)*J,A[8]=M*J,A[9]=(G*t*C-s*S*C-G*g*a+I*S*a+s*g*y-I*t*y)*J,A[10]=(i*S*C-G*E*C+G*g*o-I*S*o-i*g*y+I*E*y)*J,A[11]=(s*E*C-i*t*C-s*g*o+I*t*o+i*g*a-I*E*a)*J,A[12]=n*J,A[13]=(s*S*Q-G*t*Q+G*g*w-I*S*w-s*g*c+I*t*c)*J,A[14]=(G*E*Q-i*S*Q-G*g*D+I*S*D+i*g*c-I*E*c)*J,A[15]=(i*t*Q-s*E*Q+s*g*D-I*t*D-i*g*w+I*E*w)*J,this}scale(A){const I=this.elements,g=A.x,Q=A.y,C=A.z;return I[0]*=g,I[4]*=Q,I[8]*=C,I[1]*=g,I[5]*=Q,I[9]*=C,I[2]*=g,I[6]*=Q,I[10]*=C,I[3]*=g,I[7]*=Q,I[11]*=C,this}getMaxScaleOnAxis(){const A=this.elements,I=A[0]*A[0]+A[1]*A[1]+A[2]*A[2],g=A[4]*A[4]+A[5]*A[5]+A[6]*A[6],Q=A[8]*A[8]+A[9]*A[9]+A[10]*A[10];return Math.sqrt(Math.max(I,g,Q))}makeTranslation(A,I,g){return A.isVector3?this.set(1,0,0,A.x,0,1,0,A.y,0,0,1,A.z,0,0,0,1):this.set(1,0,0,A,0,1,0,I,0,0,1,g,0,0,0,1),this}makeRotationX(A){const I=Math.cos(A),g=Math.sin(A);return this.set(1,0,0,0,0,I,-g,0,0,g,I,0,0,0,0,1),this}makeRotationY(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,0,g,0,0,1,0,0,-g,0,I,0,0,0,0,1),this}makeRotationZ(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,0,g,I,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(A,I){const g=Math.cos(I),Q=Math.sin(I),C=1-g,i=A.x,E=A.y,D=A.z,o=C*i,s=C*E;return this.set(o*i+g,o*E-Q*D,o*D+Q*E,0,o*E+Q*D,s*E+g,s*D-Q*i,0,o*D-Q*E,s*D+Q*i,C*D*D+g,0,0,0,0,1),this}makeScale(A,I,g){return this.set(A,0,0,0,0,I,0,0,0,0,g,0,0,0,0,1),this}makeShear(A,I,g,Q,C,i){return this.set(1,g,C,0,A,1,i,0,I,Q,1,0,0,0,0,1),this}compose(A,I,g){const Q=this.elements,C=I._x,i=I._y,E=I._z,D=I._w,o=C+C,s=i+i,t=E+E,w=C*o,a=C*s,G=C*t,S=i*s,c=i*t,y=E*t,F=D*o,R=D*s,M=D*t,n=g.x,N=g.y,J=g.z;return Q[0]=(1-(S+y))*n,Q[1]=(a+M)*n,Q[2]=(G-R)*n,Q[3]=0,Q[4]=(a-M)*N,Q[5]=(1-(w+y))*N,Q[6]=(c+F)*N,Q[7]=0,Q[8]=(G+R)*J,Q[9]=(c-F)*J,Q[10]=(1-(w+S))*J,Q[11]=0,Q[12]=A.x,Q[13]=A.y,Q[14]=A.z,Q[15]=1,this}decompose(A,I,g){const Q=this.elements;let C=zQ.set(Q[0],Q[1],Q[2]).length();const i=zQ.set(Q[4],Q[5],Q[6]).length(),E=zQ.set(Q[8],Q[9],Q[10]).length();this.determinant()<0&&(C=-C),A.x=Q[12],A.y=Q[13],A.z=Q[14],eg.copy(this);const D=1/C,o=1/i,s=1/E;return eg.elements[0]*=D,eg.elements[1]*=D,eg.elements[2]*=D,eg.elements[4]*=o,eg.elements[5]*=o,eg.elements[6]*=o,eg.elements[8]*=s,eg.elements[9]*=s,eg.elements[10]*=s,I.setFromRotationMatrix(eg),g.x=C,g.y=i,g.z=E,this}makePerspective(A,I,g,Q,C,i,E=cE){const D=this.elements,o=2*C/(I-A),s=2*C/(g-Q),t=(I+A)/(I-A),w=(g+Q)/(g-Q);let a,G;if(E===cE)a=-(i+C)/(i-C),G=-2*i*C/(i-C);else if(E===Bt)a=-i/(i-C),G=-i*C/(i-C);else throw new Error("Matrix4.makePerspective(): Invalid coordinate system: "+E);return D[0]=o,D[4]=0,D[8]=t,D[12]=0,D[1]=0,D[5]=s,D[9]=w,D[13]=0,D[2]=0,D[6]=0,D[10]=a,D[14]=G,D[3]=0,D[7]=0,D[11]=-1,D[15]=0,this}makeOrthographic(A,I,g,Q,C,i,E=cE){const D=this.elements,o=1/(I-A),s=1/(g-Q),t=1/(i-C),w=(I+A)*o,a=(g+Q)*s;let G,S;if(E===cE)G=(i+C)*t,S=-2*t;else if(E===Bt)G=C*t,S=-1*t;else throw new Error("../math.Matrix4.makeOrthographic(): Invalid coordinate system: "+E);return D[0]=2*o,D[4]=0,D[8]=0,D[12]=-w,D[1]=0,D[5]=2*s,D[9]=0,D[13]=-a,D[2]=0,D[6]=0,D[10]=S,D[14]=-G,D[3]=0,D[7]=0,D[11]=0,D[15]=1,this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<16;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<16;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A[I+9]=g[9],A[I+10]=g[10],A[I+11]=g[11],A[I+12]=g[12],A[I+13]=g[13],A[I+14]=g[14],A[I+15]=g[15],A}}const zQ=new Z,eg=new kg,yh=new Z(0,0,0),Gh=new Z(1,1,1),QQ=new Z,yE=new Z,ZI=new Z,Ct=new kg,Et=new SA;class NC{constructor(A=0,I=0,g=0,Q=NC.DEFAULT_ORDER){this.isEuler=!0,this._x=A,this._y=I,this._z=g,this._order=Q}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get order(){return this._order}set order(A){this._order=A,this._onChangeCallback()}set(A,I,g,Q=this._order){return this._x=A,this._y=I,this._z=g,this._order=Q,this._onChangeCallback(),this}clone(){return new NC(this._x,this._y,this._z,this._order)}copy(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this}setFromRotationMatrix(A,I=this._order,g=!0){const Q=A.elements,C=Q[0],i=Q[4],E=Q[8],D=Q[1],o=Q[5],s=Q[9],t=Q[2],w=Q[6],a=Q[10];switch(I){case"XYZ":this._y=Math.asin(Jg(E,-1,1)),Math.abs(E)<.9999999?(this._x=Math.atan2(-s,a),this._z=Math.atan2(-i,C)):(this._x=Math.atan2(w,o),this._z=0);break;case"YXZ":this._x=Math.asin(-Jg(s,-1,1)),Math.abs(s)<.9999999?(this._y=Math.atan2(E,a),this._z=Math.atan2(D,o)):(this._y=Math.atan2(-t,C),this._z=0);break;case"ZXY":this._x=Math.asin(Jg(w,-1,1)),Math.abs(w)<.9999999?(this._y=Math.atan2(-t,a),this._z=Math.atan2(-i,o)):(this._y=0,this._z=Math.atan2(D,C));break;case"ZYX":this._y=Math.asin(-Jg(t,-1,1)),Math.abs(t)<.9999999?(this._x=Math.atan2(w,a),this._z=Math.atan2(D,C)):(this._x=0,this._z=Math.atan2(-i,o));break;case"YZX":this._z=Math.asin(Jg(D,-1,1)),Math.abs(D)<.9999999?(this._x=Math.atan2(-s,o),this._y=Math.atan2(-t,C)):(this._x=0,this._y=Math.atan2(E,a));break;case"XZY":this._z=Math.asin(-Jg(i,-1,1)),Math.abs(i)<.9999999?(this._x=Math.atan2(w,o),this._y=Math.atan2(E,C)):(this._x=Math.atan2(-s,a),this._y=0);break;default:console.warn("../math.Euler: .setFromRotationMatrix() encountered an unknown order: "+I)}return this._order=I,g===!0&&this._onChangeCallback(),this}setFromQuaternion(A,I,g){return Ct.makeRotationFromQuaternion(A),this.setFromRotationMatrix(Ct,I,g)}setFromVector3(A,I=this._order){return this.set(A.x,A.y,A.z,I)}reorder(A){return Et.setFromEuler(this),this.setFromQuaternion(Et,A)}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order}fromArray(A){return this._x=A[0],this._y=A[1],this._z=A[2],A[3]!==void 0&&(this._order=A[3]),this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._order,A}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(A){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}NC.DEFAULT_ORDER="XYZ";class MB{constructor(A=0,I=0){this.x=A,this.y=I}get width(){return this.x}set width(A){this.x=A}get height(){return this.y}set height(A){this.y=A}set(A,I){return this.x=A,this.y=I,this}setScalar(A){return this.x=A,this.y=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}}clone(){return new MB(this.x,this.y)}copy(A){return this.x=A.x,this.y=A.y,this}add(A){return this.x+=A.x,this.y+=A.y,this}addScalar(A){return this.x+=A,this.y+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this}subScalar(A){return this.x-=A,this.y-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this}multiply(A){return this.x*=A.x,this.y*=A.y,this}multiplyScalar(A){return this.x*=A,this.y*=A,this}divide(A){return this.x/=A.x,this.y/=A.y,this}divideScalar(A){return this.multiplyScalar(1/A)}applyMatrix3(A){const I=this.x,g=this.y,Q=A.elements;return this.x=Q[0]*I+Q[3]*g+Q[6],this.y=Q[1]*I+Q[4]*g+Q[7],this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(A){return this.x*A.x+this.y*A.y}cross(A){return this.x*A.y-this.y*A.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(Jg(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y;return I*I+g*g}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this}equals(A){return A.x===this.x&&A.y===this.y}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A}rotateAround(A,I){const g=Math.cos(I),Q=Math.sin(I),C=this.x-A.x,i=this.y-A.y;return this.x=C*g-i*Q+A.x,this.y=C*Q+i*g+A.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}MB.isVector2=!0;class OI{constructor(A=0,I=0,g=0,Q=1){OI.prototype.isVector4=!0,this.x=A,this.y=I,this.z=g,this.w=Q}get width(){return this.z}set width(A){this.z=A}get height(){return this.w}set height(A){this.w=A}set(A,I,g,Q){return this.x=A,this.y=I,this.z=g,this.w=Q,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this.w=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setW(A){return this.w=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;case 3:this.w=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+A)}}clone(){return new OI(this.x,this.y,this.z,this.w)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this.w=A.w,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this.w=A.w+I.w,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this.w+=A.w*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this.w=A.w-I.w,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this.w*=A.w,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=this.w,i=A.elements;return this.x=i[0]*I+i[4]*g+i[8]*Q+i[12]*C,this.y=i[1]*I+i[5]*g+i[9]*Q+i[13]*C,this.z=i[2]*I+i[6]*g+i[10]*Q+i[14]*C,this.w=i[3]*I+i[7]*g+i[11]*Q+i[15]*C,this}divideScalar(A){return this.multiplyScalar(1/A)}setAxisAngleFromQuaternion(A){this.w=2*Math.acos(A.w);const I=Math.sqrt(1-A.w*A.w);return I<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=A.x/I,this.y=A.y/I,this.z=A.z/I),this}setAxisAngleFromRotationMatrix(A){let I,g,Q,C;const i=A.elements,E=i[0],D=i[4],o=i[8],s=i[1],t=i[5],w=i[9],a=i[2],G=i[6],S=i[10];if(Math.abs(D-s)<.01&&Math.abs(o-a)<.01&&Math.abs(w-G)<.01){if(Math.abs(D+s)<.1&&Math.abs(o+a)<.1&&Math.abs(w+G)<.1&&Math.abs(E+t+S-3)<.1)return this.set(1,0,0,0),this;I=Math.PI;const y=(E+1)/2,F=(t+1)/2,R=(S+1)/2,M=(D+s)/4,n=(o+a)/4,N=(w+G)/4;return y>F&&y>R?y<.01?(g=0,Q=.707106781,C=.707106781):(g=Math.sqrt(y),Q=M/g,C=n/g):F>R?F<.01?(g=.707106781,Q=0,C=.707106781):(Q=Math.sqrt(F),g=M/Q,C=N/Q):R<.01?(g=.707106781,Q=.707106781,C=0):(C=Math.sqrt(R),g=n/C,Q=N/C),this.set(g,Q,C,I),this}let c=Math.sqrt((G-w)*(G-w)+(o-a)*(o-a)+(s-D)*(s-D));return Math.abs(c)<.001&&(c=1),this.x=(G-w)/c,this.y=(o-a)/c,this.z=(s-D)/c,this.w=Math.acos((E+t+S-1)/2),this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this.w=Math.min(this.w,A.w),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this.w=Math.max(this.w,A.w),this}clamp(A,I){return this.x=Math.max(A.x,Math.min(I.x,this.x)),this.y=Math.max(A.y,Math.min(I.y,this.y)),this.z=Math.max(A.z,Math.min(I.z,this.z)),this.w=Math.max(A.w,Math.min(I.w,this.w)),this}clampScalar(A,I){return this.x=Math.max(A,Math.min(I,this.x)),this.y=Math.max(A,Math.min(I,this.y)),this.z=Math.max(A,Math.min(I,this.z)),this.w=Math.max(A,Math.min(I,this.w)),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(Math.max(A,Math.min(I,g)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z+this.w*A.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this.w+=(A.w-this.w)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this.w=A.w+(I.w-A.w)*g,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this.w=A[I+3],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A[I+3]=this.w,A}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class Kg{constructor(A,I,g,Q,C,i,E,D,o){Kg.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,i,E,D,o)}set(A,I,g,Q,C,i,E,D,o){const s=this.elements;return s[0]=A,s[1]=Q,s[2]=E,s[3]=I,s[4]=C,s[5]=D,s[6]=g,s[7]=i,s[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],this}extractBasis(A,I,g){return A.setFromMatrix3Column(this,0),I.setFromMatrix3Column(this,1),g.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const I=A.elements;return this.set(I[0],I[4],I[8],I[1],I[5],I[9],I[2],I[6],I[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,i=g[0],E=g[3],D=g[6],o=g[1],s=g[4],t=g[7],w=g[2],a=g[5],G=g[8],S=Q[0],c=Q[3],y=Q[6],F=Q[1],R=Q[4],M=Q[7],n=Q[2],N=Q[5],J=Q[8];return C[0]=i*S+E*F+D*n,C[3]=i*c+E*R+D*N,C[6]=i*y+E*M+D*J,C[1]=o*S+s*F+t*n,C[4]=o*c+s*R+t*N,C[7]=o*y+s*M+t*J,C[2]=w*S+a*F+G*n,C[5]=w*c+a*R+G*N,C[8]=w*y+a*M+G*J,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[3]*=A,I[6]*=A,I[1]*=A,I[4]*=A,I[7]*=A,I[2]*=A,I[5]*=A,I[8]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],i=A[4],E=A[5],D=A[6],o=A[7],s=A[8];return I*i*s-I*E*o-g*C*s+g*E*D+Q*C*o-Q*i*D}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],i=A[4],E=A[5],D=A[6],o=A[7],s=A[8],t=s*i-E*o,w=E*D-s*C,a=o*C-i*D,G=I*t+g*w+Q*a;if(G===0)return this.set(0,0,0,0,0,0,0,0,0);const S=1/G;return A[0]=t*S,A[1]=(Q*o-s*g)*S,A[2]=(E*g-Q*i)*S,A[3]=w*S,A[4]=(s*I-Q*D)*S,A[5]=(Q*C-E*I)*S,A[6]=a*S,A[7]=(g*D-o*I)*S,A[8]=(i*I-g*C)*S,this}transpose(){let A;const I=this.elements;return A=I[1],I[1]=I[3],I[3]=A,A=I[2],I[2]=I[6],I[6]=A,A=I[5],I[5]=I[7],I[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const I=this.elements;return A[0]=I[0],A[1]=I[3],A[2]=I[6],A[3]=I[1],A[4]=I[4],A[5]=I[7],A[6]=I[2],A[7]=I[5],A[8]=I[8],this}setUvTransform(A,I,g,Q,C,i,E){const D=Math.cos(C),o=Math.sin(C);return this.set(g*D,g*o,-g*(D*i+o*E)+i+A,-Q*o,Q*D,-Q*(-o*i+D*E)+E+I,0,0,1),this}scale(A,I){return this.premultiply(ED.makeScale(A,I)),this}rotate(A){return this.premultiply(ED.makeRotation(-A)),this}translate(A,I){return this.premultiply(ED.makeTranslation(A,I)),this}makeTranslation(A,I){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,I,0,0,1),this}makeRotation(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,g,I,0,0,0,1),this}makeScale(A,I){return this.set(A,0,0,0,I,0,0,0,1),this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<9;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<9;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A}clone(){return new Kg().fromArray(this.elements)}}const ED=new Kg;var LI;(function(B){B[B.Random=0]="Random",B[B.Loop=1]="Loop",B[B.PingPong=2]="PingPong",B[B.Burst=3]="Burst"})(LI||(LI={}));function pB(B,A,I,g){let Q;switch(LI.Random===B?A=Math.random():LI.Burst===B&&g.isBursting&&(A=g.burstParticleIndex/g.burstParticleCount),I>0?Q=Math.floor(A/I)*I:Q=A,B){case LI.Loop:Q=Q%1;break;case LI.PingPong:Q=Math.abs(Q%2-1);break}return Q}class xQ{constructor(A,I,g,Q){this.p=[A,I,g,Q]}genValue(A){const I=A*A,g=A*A*A,Q=1-A,C=Q*Q,i=C*Q;return this.p[0]*i+this.p[1]*C*A*3+this.p[2]*Q*I*3+this.p[3]*g}derivativeCoefficients(A){const I=[];for(let g=A,Q=g.length-1;Q>0;Q--){const C=[];for(let i=0;i<Q;i++){const E=Q*(g[i+1]-g[i]);C.push(E)}I.push(C),g=C}return I}getSlope(A){const I=this.derivativeCoefficients(this.p)[0],g=1-A,Q=g*g,C=g*A*2,i=A*A;return Q*I[0]+C*I[1]+i*I[2]}controlCurve(A,I){this.p[1]=A/3+this.p[0],this.p[2]=this.p[3]-I/3}hull(A){let I=this.p,g=[],Q,C=0,i=0,E=0;const D=[];for(D[C++]=I[0],D[C++]=I[1],D[C++]=I[2],D[C++]=I[3];I.length>1;){for(g=[],i=0,E=I.length-1;i<E;i++)Q=A*I[i]+(1-A)*I[i+1],D[C++]=Q,g.push(Q);I=g}return D}split(A){const I=this.hull(A);return{left:new xQ(I[0],I[4],I[7],I[9]),right:new xQ(I[9],I[8],I[6],I[3]),span:I}}clone(){return new xQ(this.p[0],this.p[1],this.p[2],this.p[3])}toJSON(){return{p0:this.p[0],p1:this.p[1],p2:this.p[2],p3:this.p[3]}}static fromJSON(A){return new xQ(A.p0,A.p1,A.p2,A.p3)}}const xB=B=>({r:B.x,g:B.y,b:B.z,a:B.w}),qB=B=>new OI(B.r,B.g,B.b,B.a),Sh=(B,A)=>{switch(A){case"Vector3":return new Z(B.x,B.y,B.z);case"Vector4":return new OI(B.x,B.y,B.z,B.w);case"Color":return new Z(B.r,B.g,B.b);case"Number":return B;default:return B}},rh=(B,A)=>{switch(A){case"Vector3":return{x:B.x,y:B.y,z:B.z};case"Vector4":return{x:B.x,y:B.y,z:B.z,w:B.w};case"Color":return{r:B.x,g:B.y,b:B.z};case"Number":return B;default:return B}};class Li{constructor(A,I){this.a=A,this.b=I,this.type="value"}startGen(A){}genColor(A,I){const g=Math.random();return I.copy(this.a).lerp(this.b,g)}toJSON(){return{type:"RandomColor",a:xB(this.a),b:xB(this.b)}}static fromJSON(A){return new Li(qB(A.a),qB(A.b))}clone(){return new Li(this.a.clone(),this.b.clone())}}class NB{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I){return this.indexCount===-1&&this.startGen(A),I.copy(this.a).lerp(this.b,A[this.indexCount])}toJSON(){return{type:"ColorRange",a:xB(this.a),b:xB(this.b)}}static fromJSON(A){return new NB(qB(A.a),qB(A.b))}clone(){return new NB(this.a.clone(),this.b.clone())}}class tQ{constructor(A,I){this.subType=I,this.type="function",this.keys=A}findKey(A){let I=0,g=0,Q=this.keys.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.getStartX(C)&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.keys[A][1]}getEndX(A){return A+1<this.keys.length?this.keys[A+1][1]:1}genValue(A,I){const g=this.findKey(I);return this.subType==="Number"?g===-1?this.keys[0][0]:g+1>=this.keys.length?this.keys[this.keys.length-1][0]:(this.keys[g+1][0]-this.keys[g][0])*((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))+this.keys[g][0]:g===-1?A.copy(this.keys[0][0]):g+1>=this.keys.length?A.copy(this.keys[this.keys.length-1][0]):A.copy(this.keys[g][0]).lerp(this.keys[g+1][0],(I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toJSON(){return this.keys[0][0].constructor.name,{type:"CLinearFunction",subType:this.subType,keys:this.keys.map(([A,I])=>({value:rh(A,this.subType),pos:I}))}}static fromJSON(A){return new tQ(A.keys.map(I=>[Sh(I.value,A.subType),I.pos]),A.subType)}clone(){return this.subType==="Number"?new tQ(this.keys.map(([A,I])=>[A,I]),this.subType):new tQ(this.keys.map(([A,I])=>[A.clone(),I]),this.subType)}}const GE=new Z;class bQ{constructor(A=[[new Z(0,0,0),0],[new Z(1,1,1),0]],I=[[1,0],[1,1]]){this.type="function",this.color=new tQ(A,"Color"),this.alpha=new tQ(I,"Number")}genColor(A,I,g){return this.color.genValue(GE,g),I.set(GE.x,GE.y,GE.z,this.alpha.genValue(1,g))}toJSON(){return{type:"Gradient",color:this.color.toJSON(),alpha:this.alpha.toJSON()}}static fromJSON(A){if(A.functions){const I=A.functions.map(g=>[NB.fromJSON(g.function).a,g.start]);return A.functions.length>0&&I.push([NB.fromJSON(A.functions[A.functions.length-1].function).b,1]),new bQ(I.map(g=>[new Z(g[0].x,g[0].y,g[0].z),g[1]]),I.map(g=>[g[0].w,g[1]]))}else{const I=new bQ;return I.alpha=tQ.fromJSON(A.alpha),I.color=tQ.fromJSON(A.color),I}}clone(){const A=new bQ;return A.alpha=this.alpha.clone(),A.color=this.color.clone(),A}startGen(A){}}const iD=new OI;class Hi{constructor(A,I){this.indexCount=0,this.type="function",this.gradient1=A,this.gradient2=I}startGen(A){this.indexCount=A.length,A.push(Math.random())}genColor(A,I,g){return this.gradient1.genColor(A,I,g),this.gradient2.genColor(A,iD,g),A&&A[this.indexCount]!==void 0?I.lerp(iD,A[this.indexCount]):I.lerp(iD,Math.random()),I}toJSON(){return{type:"RandomColorBetweenGradient",gradient1:this.gradient1.toJSON(),gradient2:this.gradient2.toJSON()}}static fromJSON(A){return new Hi(bQ.fromJSON(A.gradient1),bQ.fromJSON(A.gradient2))}clone(){return new Hi(this.gradient1.clone(),this.gradient2.clone())}}class qQ{constructor(A){this.color=A,this.type="value"}startGen(A){}genColor(A,I){return I.copy(this.color)}toJSON(){return{type:"ConstantColor",color:xB(this.color)}}static fromJSON(A){return new qQ(qB(A.color))}clone(){return new qQ(this.color.clone())}}function DD(B){switch(B.type){case"ConstantColor":return qQ.fromJSON(B);case"ColorRange":return NB.fromJSON(B);case"RandomColor":return Li.fromJSON(B);case"Gradient":return bQ.fromJSON(B);case"RandomColorBetweenGradient":return Hi.fromJSON(B);default:return new qQ(new OI(1,1,1,1))}}class rA{constructor(A){this.value=A,this.type="value"}startGen(A){}genValue(A){return this.value}toJSON(){return{type:"ConstantValue",value:this.value}}static fromJSON(A){return new rA(A.value)}clone(){return new rA(this.value)}}class uQ{constructor(A,I){this.a=A,this.b=I,this.indexCount=-1,this.type="value"}startGen(A){this.indexCount=A.length,A.push(Math.random())}genValue(A){return this.indexCount===-1&&this.startGen(A),jQ.lerp(this.a,this.b,A[this.indexCount])}toJSON(){return{type:"IntervalValue",a:this.a,b:this.b}}static fromJSON(A){return new uQ(A.a,A.b)}clone(){return new uQ(this.a,this.b)}}class Fh{constructor(){this.functions=new Array}findFunction(A){let I=0,g=0,Q=this.functions.length-1;for(;g+1<Q;)if(I=Math.floor((g+Q)/2),A<this.getStartX(I))Q=I-1;else if(A>this.getEndX(I))g=I+1;else return I;for(let C=g;C<=Q;C++)if(A>=this.functions[C][1]&&A<=this.getEndX(C))return C;return-1}getStartX(A){return this.functions[A][1]}setStartX(A,I){A>0&&(this.functions[A][1]=I)}getEndX(A){return A+1<this.functions.length?this.functions[A+1][1]:1}setEndX(A,I){A+1<this.functions.length&&(this.functions[A+1][1]=I)}insertFunction(A,I){const g=this.findFunction(A);this.functions.splice(g+1,0,[I,A])}removeFunction(A){return this.functions.splice(A,1)[0][0]}getFunction(A){return this.functions[A][0]}setFunction(A,I){this.functions[A][0]=I}get numOfFunctions(){return this.functions.length}}class JC extends Fh{constructor(A=[[new xQ(0,1/3,1/3*2,1),0]]){super(),this.type="function",this.functions=A}genValue(A,I=0){const g=this.findFunction(I);return g===-1?0:this.functions[g][0].genValue((I-this.getStartX(g))/(this.getEndX(g)-this.getStartX(g)))}toSVG(A,I){if(I<1)return"";let g=["M",0,this.functions[0][0].p[0]].join(" ");for(let Q=1/I;Q<=1;Q+=1/I)g=[g,"L",Q*A,this.genValue(void 0,Q)].join(" ");return g}toJSON(){return{type:"PiecewiseBezier",functions:this.functions.map(([A,I])=>({function:A.toJSON(),start:I}))}}static fromJSON(A){return new JC(A.functions.map(I=>[xQ.fromJSON(I.function),I.start]))}clone(){return new JC(this.functions.map(([A,I])=>[A.clone(),I]))}startGen(A){}}function sA(B){switch(B.type){case"ConstantValue":return rA.fromJSON(B);case"IntervalValue":return uQ.fromJSON(B);case"PiecewiseBezier":return JC.fromJSON(B);default:return new rA(0)}}class UC{constructor(){this.indexCount=0,this.type="rotation"}startGen(A){this.indexCount=A.length,A.push(new SA);let I,g,Q,C,i,E;do I=Math.random()*2-1,g=Math.random()*2-1,Q=I*I+g*g;while(Q>1);do C=Math.random()*2-1,i=Math.random()*2-1,E=C*C+i*i;while(E>1);const D=Math.sqrt((1-Q)/E);A[this.indexCount].set(I,g,D*C,D*i)}genValue(A,I,g,Q){return this.indexCount===-1&&this.startGen(A),I.copy(A[this.indexCount]),I}toJSON(){return{type:"RandomQuat"}}static fromJSON(A){return new UC}clone(){return new UC}}class LC{constructor(A,I){this.axis=A,this.angle=I,this.type="rotation"}startGen(A){this.angle.startGen(A)}genValue(A,I,g,Q){return I.setFromAxisAngle(this.axis,this.angle.genValue(A,Q)*g)}toJSON(){return{type:"AxisAngle",axis:{x:this.axis.x,y:this.axis.y,z:this.axis.z},angle:this.angle.toJSON()}}static fromJSON(A){return new LC(new Z(A.axis.x,A.axis.y,A.axis.z),sA(A.angle))}clone(){return new LC(this.axis.clone(),this.angle.clone())}}class Yi{constructor(A,I,g,Q){this.angleX=A,this.angleY=I,this.angleZ=g,this.type="rotation",this.eular=new NC(0,0,0,Q)}startGen(A){this.angleX.startGen(A),this.angleY.startGen(A),this.angleZ.startGen(A)}genValue(A,I,g,Q){return this.eular.set(this.angleX.genValue(A,Q)*g,this.angleY.genValue(A,Q)*g,this.angleZ.genValue(A,Q)*g),I.setFromEuler(this.eular)}toJSON(){return{type:"Euler",angleX:this.angleX.toJSON(),angleY:this.angleY.toJSON(),angleZ:this.angleZ.toJSON(),eulerOrder:this.eular.order}}static fromJSON(A){return new Yi(sA(A.angleX),sA(A.angleY),sA(A.angleZ),A.eulerOrder)}clone(){return new Yi(this.angleX,this.angleY,this.angleZ,this.eular.order)}}function it(B){switch(B.type){case"AxisAngle":return LC.fromJSON(B);case"Euler":return Yi.fromJSON(B);case"RandomQuat":return UC.fromJSON(B);default:return new UC}}class mQ{constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="vec3function"}startGen(A){this.x.startGen(A),this.y.startGen(A),this.z.startGen(A)}genValue(A,I,g){return I.set(this.x.genValue(A,g),this.y.genValue(A,g),this.z.genValue(A,g))}toJSON(){return{type:"Vector3Function",x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new mQ(sA(A.x),sA(A.y),sA(A.z))}clone(){return new mQ(this.x,this.y,this.z)}}function Rh(B){return B.type==="Vector3Function"?mQ.fromJSON(B):new mQ(new rA(0),new rA(0),new rA(0))}function SE(B){switch(B.type){case"ConstantValue":case"IntervalValue":case"PiecewiseBezier":return sA(B);case"AxisAngle":case"RandomQuat":case"Euler":return it(B);case"Vector3Function":return Rh(B);default:return new rA(0)}}class HC{constructor(A={}){var I,g,Q,C,i,E,D;this.type="cone",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.angle=(C=A.angle)!==null&&C!==void 0?C:Math.PI/6,this.mode=(i=A.mode)!==null&&i!==void 0?i:LI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new rA(1),this.memory=[]}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=jQ.lerp(1-this.thickness,1,Math.random()),C=g*this.arc,i=Math.sqrt(Q),E=Math.sin(C),D=Math.cos(C);A.position.x=i*D,A.position.y=i*E,A.position.z=0;const o=this.angle*i;A.velocity.set(0,0,Math.cos(o)).addScaledVector(A.position,Math.sin(o)).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius)}toJSON(){return{type:"cone",radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new HC({radius:A.radius,arc:A.arc,thickness:A.thickness,angle:A.angle,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new HC({radius:this.radius,arc:this.arc,thickness:this.thickness,angle:this.angle,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class YC{constructor(A={}){var I,g,Q,C,i,E;this.type="circle",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:LI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(E=A.speed)!==null&&E!==void 0?E:new rA(1),this.memory=[]}update(A,I){this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=jQ.lerp(1-this.thickness,1,Math.random()),C=g*this.arc;A.position.x=Math.cos(C),A.position.y=Math.sin(C),A.position.z=0,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*Q)}toJSON(){return{type:"circle",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new YC({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new YC({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}function rE(B,A){return Math.floor(Math.random()*(A-B))+B}const FE=new Z(0,1,0),RE=new Z(0,0,0),kh=new Z(1,1,1),Dt=new Z(0,0,1);class dC{constructor(A={}){var I,g,Q,C,i,E,D;this.type="donut",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.donutRadius=(C=A.donutRadius)!==null&&C!==void 0?C:this.radius*.2,this.mode=(i=A.mode)!==null&&i!==void 0?i:LI.Random,this.spread=(E=A.spread)!==null&&E!==void 0?E:0,this.speed=(D=A.speed)!==null&&D!==void 0?D:new rA(1),this.memory=[],this._m1=new kg}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=jQ.lerp(1-this.thickness,1,Math.random()),i=g*this.arc,E=Q*Math.PI*2,D=Math.sin(i),o=Math.cos(i);A.position.x=this.radius*o,A.position.y=this.radius*D,A.position.z=0,A.velocity.z=this.donutRadius*C*Math.sin(E),A.velocity.x=this.donutRadius*C*Math.cos(E)*o,A.velocity.y=this.donutRadius*C*Math.cos(E)*D,A.position.add(A.velocity),A.velocity.normalize().multiplyScalar(A.startSpeed),A.rotation instanceof SA&&(this._m1.lookAt(RE,A.velocity,FE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"donut",radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new dC({radius:A.radius,arc:A.arc,thickness:A.thickness,donutRadius:A.donutRadius,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new dC({radius:this.radius,arc:this.arc,thickness:this.thickness,donutRadius:this.donutRadius,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class KC{constructor(){this.type="point",this._m1=new kg}update(A,I){}initialize(A){const I=Math.random(),g=Math.random(),Q=I*Math.PI*2,C=Math.acos(2*g-1),i=Math.cbrt(Math.random()),E=Math.sin(Q),D=Math.cos(Q),o=Math.sin(C),s=Math.cos(C);A.velocity.x=i*o*D,A.velocity.y=i*o*E,A.velocity.z=i*s,A.velocity.multiplyScalar(A.startSpeed),A.position.setScalar(0),A.rotation instanceof SA&&(this._m1.lookAt(RE,A.position,FE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"point"}}static fromJSON(A){return new KC}clone(){return new KC}}class JB{constructor(A={}){var I,g,Q,C,i,E;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:LI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(E=A.speed)!==null&&E!==void 0?E:new rA(1),this.memory=[],this._m1=new kg}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=jQ.lerp(1-this.thickness,1,Math.random()),i=g*this.arc,E=Math.acos(2*Q-1),D=Math.sin(i),o=Math.cos(i),s=Math.sin(E),t=Math.cos(E);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof SA&&(this._m1.lookAt(RE,A.position,FE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"sphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new JB({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new JB({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class lC{constructor(A={}){var I,g,Q,C,i,E;this.type="sphere",this.currentValue=0,this.radius=(I=A.radius)!==null&&I!==void 0?I:10,this.arc=(g=A.arc)!==null&&g!==void 0?g:2*Math.PI,this.thickness=(Q=A.thickness)!==null&&Q!==void 0?Q:1,this.mode=(C=A.mode)!==null&&C!==void 0?C:LI.Random,this.spread=(i=A.spread)!==null&&i!==void 0?i:0,this.speed=(E=A.speed)!==null&&E!==void 0?E:new rA(1),this.memory=[],this._m1=new kg}update(A,I){LI.Random!=this.mode&&(this.currentValue+=this.speed.genValue(this.memory,A.emissionState.time/A.duration)*I)}initialize(A,I){const g=pB(this.mode,this.currentValue,this.spread,I),Q=Math.random(),C=jQ.lerp(1-this.thickness,1,Math.random()),i=g*this.arc,E=Math.acos(Q),D=Math.sin(i),o=Math.cos(i),s=Math.sin(E),t=Math.cos(E);A.position.x=s*o,A.position.y=s*D,A.position.z=t,A.velocity.copy(A.position).multiplyScalar(A.startSpeed),A.position.multiplyScalar(this.radius*C),A.rotation instanceof SA&&(this._m1.lookAt(RE,A.position,FE),A.rotation.setFromRotationMatrix(this._m1))}toJSON(){return{type:"hemisphere",radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,spread:this.spread,speed:this.speed.toJSON()}}static fromJSON(A){return new lC({radius:A.radius,arc:A.arc,thickness:A.thickness,mode:A.mode,speed:A.speed?sA(A.speed):void 0,spread:A.spread})}clone(){return new lC({radius:this.radius,arc:this.arc,thickness:this.thickness,mode:this.mode,speed:this.speed.clone(),spread:this.spread})}}class fC{constructor(A={}){var I,g,Q,C;this.type="grid",this.width=(I=A.width)!==null&&I!==void 0?I:1,this.height=(g=A.height)!==null&&g!==void 0?g:1,this.column=(Q=A.column)!==null&&Q!==void 0?Q:10,this.row=(C=A.row)!==null&&C!==void 0?C:10}initialize(A){const I=Math.floor(Math.random()*this.row),g=Math.floor(Math.random()*this.column);A.position.x=g*this.width/this.column-this.width/2,A.position.y=I*this.height/this.row-this.height/2,A.position.z=0,A.velocity.set(0,0,A.startSpeed)}toJSON(){return{type:"grid",width:this.width,height:this.height,column:this.column,row:this.row}}static fromJSON(A){return new fC(A)}clone(){return new fC({width:this.width,height:this.height,column:this.column,row:this.row})}update(A,I){}}const oD={circle:{type:"circle",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:YC,loadJSON:YC.fromJSON},cone:{type:"cone",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:HC,loadJSON:HC.fromJSON},donut:{type:"donut",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["donutRadius",["number"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:dC,loadJSON:dC.fromJSON},point:{type:"point",params:[],constructor:KC,loadJSON:KC.fromJSON},sphere:{type:"sphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:JB,loadJSON:JB.fromJSON},hemisphere:{type:"hemisphere",params:[["radius",["number"]],["arc",["radian"]],["thickness",["number"]],["angle",["radian"]],["mode",["emitterMode"]],["spread",["number"]],["speed",["valueFunc"]]],constructor:lC,loadJSON:lC.fromJSON},grid:{type:"grid",params:[["width",["number"]],["height",["number"]],["rows",["number"]],["column",["number"]]],constructor:fC,loadJSON:fC.fromJSON}};function nh(B,A){return oD[B.type].loadJSON(B,A)}class pC{constructor(A){this.color=A,this.type="ColorOverLife"}initialize(A){this.color.startGen(A.memory)}update(A,I){this.color.genColor(A.memory,A.color,A.age/A.life),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON()}}static fromJSON(A){return new pC(DD(A.color))}clone(){return new pC(this.color.clone())}reset(){}}class xC{constructor(A){this.angularVelocity=A,this.type="RotationOverLife"}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){typeof A.rotation=="number"&&(A.rotation+=I*this.angularVelocity.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new xC(sA(A.angularVelocity))}frameUpdate(A){}clone(){return new xC(this.angularVelocity.clone())}reset(){}}class qC{constructor(A){this.angularVelocity=A,this.type="Rotation3DOverLife",this.tempQuat=new SA,this.tempQuat2=new SA}initialize(A){A.rotation instanceof SA&&(A.angularVelocity=new SA,this.angularVelocity.startGen(A.memory))}update(A,I){A.rotation instanceof SA&&(this.angularVelocity.genValue(A.memory,this.tempQuat,I,A.age/A.life),A.rotation.multiply(this.tempQuat))}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON()}}static fromJSON(A){return new qC(it(A.angularVelocity))}frameUpdate(A){}clone(){return new qC(this.angularVelocity.clone())}reset(){}}class uC{initialize(A,I){this.ps=I,this.x.startGen(A.memory),this.y.startGen(A.memory),this.z.startGen(A.memory)}constructor(A,I,g){this.x=A,this.y=I,this.z=g,this.type="ForceOverLife",this._temp=new Z,this._tempScale=new Z,this._tempQ=new SA}update(A,I){this._temp.set(this.x.genValue(A.memory,A.age/A.life),this.y.genValue(A.memory,A.age/A.life),this.z.genValue(A.memory,A.age/A.life)),this.ps.worldSpace?A.velocity.addScaledVector(this._temp,I):(this._temp.multiply(this._tempScale).applyQuaternion(this._tempQ),A.velocity.addScaledVector(this._temp,I))}toJSON(){return{type:this.type,x:this.x.toJSON(),y:this.y.toJSON(),z:this.z.toJSON()}}static fromJSON(A){return new uC(sA(A.x),sA(A.y),sA(A.z))}frameUpdate(A){if(this.ps&&!this.ps.worldSpace){const I=this._temp,g=this._tempQ,Q=this._tempScale;this.ps.emitter.matrixWorld.decompose(I,g,Q),g.invert(),Q.set(1/Q.x,1/Q.y,1/Q.z)}}clone(){return new uC(this.x.clone(),this.y.clone(),this.z.clone())}reset(){}}class mC{initialize(A){this.size.startGen(A.memory)}constructor(A){this.size=A,this.type="SizeOverLife"}update(A){this.size instanceof mQ?this.size.genValue(A.memory,A.size,A.age/A.life).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,A.age/A.life))}toJSON(){return{type:this.type,size:this.size.toJSON()}}static fromJSON(A){return new mC(SE(A.size))}frameUpdate(A){}clone(){return new mC(this.size.clone())}reset(){}}class bC{initialize(A){this.speed.startGen(A.memory)}constructor(A){this.speed=A,this.type="SpeedOverLife"}update(A){A.speedModifier=this.speed.genValue(A.memory,A.age/A.life)}toJSON(){return{type:this.type,speed:this.speed.toJSON()}}static fromJSON(A){return new bC(sA(A.speed))}frameUpdate(A){}clone(){return new bC(this.speed.clone())}reset(){}}class PC{constructor(A){this.frame=A,this.type="FrameOverLife"}initialize(A){this.frame.startGen(A.memory)}update(A,I){this.frame instanceof JC&&(A.uvTile=this.frame.genValue(A.memory,A.age/A.life))}frameUpdate(A){}toJSON(){return{type:this.type,frame:this.frame.toJSON()}}static fromJSON(A){return new PC(sA(A.frame))}clone(){return new PC(this.frame.clone())}reset(){}}class TC{constructor(A,I=new Z(0,1,0)){this.orbitSpeed=A,this.axis=I,this.type="OrbitOverLife",this.temp=new Z,this.rotation=new SA}initialize(A){this.orbitSpeed.startGen(A.memory)}update(A,I){this.temp.copy(A.position).projectOnVector(this.axis),this.rotation.setFromAxisAngle(this.axis,this.orbitSpeed.genValue(A.memory,A.age/A.life)*I),A.position.sub(this.temp),A.position.applyQuaternion(this.rotation),A.position.add(this.temp)}frameUpdate(A){}toJSON(){return{type:this.type,orbitSpeed:this.orbitSpeed.toJSON(),axis:[this.axis.x,this.axis.y,this.axis.z]}}static fromJSON(A){return new TC(sA(A.orbitSpeed),A.axis?new Z(A.axis[0],A.axis[1],A.axis[2]):void 0)}clone(){return new TC(this.orbitSpeed.clone())}reset(){}}class sD{constructor(A){this.data=A,this.next=null,this.prev=null}hasPrev(){return this.prev!==null}hasNext(){return this.next!==null}}class Mh{constructor(){this.length=0,this.head=this.tail=null}isEmpty(){return this.head===null}clear(){this.length=0,this.head=this.tail=null}front(){return this.head===null?null:this.head.data}back(){return this.tail===null?null:this.tail.data}dequeue(){if(this.head){const A=this.head.data;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,A}}pop(){if(this.tail){const A=this.tail.data;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,A}}queue(A){const I=new sD(A);this.tail||(this.tail=I),this.head&&(this.head.prev=I,I.next=this.head),this.head=I,this.length++}push(A){const I=new sD(A);this.head||(this.head=I),this.tail&&(this.tail.next=I,I.prev=this.tail),this.tail=I,this.length++}insertBefore(A,I){const g=new sD(I);g.next=A,g.prev=A.prev,g.prev!==null&&(g.prev.next=g),g.next.prev=g,A==this.head&&(this.head=g),this.length++}remove(A){if(this.head===null||this.tail===null)return;let I=this.head;for(A===this.head.data&&(this.head=this.head.next),A===this.tail.data&&(this.tail=this.tail.prev);I.next!==null&&I.data!==A;)I=I.next;I.data===A&&(I.prev!==null&&(I.prev.next=I.next),I.next!==null&&(I.next.prev=I.prev),this.length--)}*values(){let A=this.head;for(;A!==null;)yield A.data,A=A.next}}class Nh{constructor(){this.startSpeed=0,this.startColor=new OI,this.startSize=new Z(1,1,1),this.position=new Z,this.velocity=new Z,this.age=0,this.life=1,this.size=new Z(1,1,1),this.speedModifier=1,this.rotation=0,this.color=new OI,this.uvTile=0,this.memory=[]}get died(){return this.age>=this.life}reset(){this.memory.length=0}}class Jh{constructor(A,I,g){this.position=A,this.size=I,this.color=g}}class kE{constructor(){this.startSpeed=0,this.startColor=new OI,this.startSize=new Z(1,1,1),this.position=new Z,this.velocity=new Z,this.age=0,this.life=1,this.size=new Z(1,1,1),this.length=100,this.speedModifier=1,this.color=new OI,this.previous=new Mh,this.uvTile=0,this.memory=[]}update(){for(this.age<=this.life?this.previous.push(new Jh(this.position.clone(),this.size.x,this.color.clone())):this.previous.length>0&&this.previous.dequeue();this.previous.length>this.length;)this.previous.dequeue()}get died(){return this.age>=this.life}reset(){this.memory.length=0,this.previous.clear()}}class OC{initialize(A){this.width.startGen(A.memory)}constructor(A){this.width=A,this.type="WidthOverLength"}update(A){if(A instanceof kE){const I=A.previous.values();for(let g=0;g<A.previous.length;g++){const Q=I.next();Q.value.size=this.width.genValue(A.memory,(A.previous.length-g)/A.length)}}}frameUpdate(A){}toJSON(){return{type:this.type,width:this.width.toJSON()}}static fromJSON(A){return new OC(sA(A.width))}clone(){return new OC(this.width.clone())}reset(){}}class XC{constructor(A,I){this.direction=A,this.magnitude=I,this.type="ApplyForce",this.memory={data:[],dataCount:0},this.magnitudeValue=this.magnitude.genValue(this.memory)}initialize(A){}update(A,I){A.velocity.addScaledVector(this.direction,this.magnitudeValue*I)}frameUpdate(A){this.magnitudeValue=this.magnitude.genValue(this.memory)}toJSON(){return{type:this.type,direction:[this.direction.x,this.direction.y,this.direction.z],magnitude:this.magnitude.toJSON()}}static fromJSON(A){var I;return new XC(new Z(A.direction[0],A.direction[1],A.direction[2]),sA((I=A.magnitude)!==null&&I!==void 0?I:A.force))}clone(){return new XC(this.direction.clone(),this.magnitude.clone())}reset(){}}class vC{constructor(A,I){this.center=A,this.magnitude=I,this.type="GravityForce",this.temp=new Z}initialize(A){}update(A,I){this.temp.copy(this.center).sub(A.position).normalize(),A.velocity.addScaledVector(this.temp,this.magnitude/A.position.distanceToSquared(this.center)*I)}frameUpdate(A){}toJSON(){return{type:this.type,center:[this.center.x,this.center.y,this.center.z],magnitude:this.magnitude}}static fromJSON(A){return new vC(new Z(A.center[0],A.center[1],A.center[2]),A.magnitude)}clone(){return new vC(this.center.clone(),this.magnitude)}reset(){}}class ZC{constructor(A){this.angle=A,this.type="ChangeEmitDirection",this._temp=new Z,this._q=new SA,this.memory={data:[],dataCount:0}}initialize(A){const I=A.velocity.length();I!=0&&(A.velocity.normalize(),A.velocity.x===0&&A.velocity.y===0?this._temp.set(0,A.velocity.z,0):this._temp.set(-A.velocity.y,A.velocity.x,0),this.angle.startGen(this.memory),this._q.setFromAxisAngle(this._temp.normalize(),this.angle.genValue(this.memory)),this._temp.copy(A.velocity),A.velocity.applyQuaternion(this._q),this._q.setFromAxisAngle(this._temp,Math.random()*Math.PI*2),A.velocity.applyQuaternion(this._q),A.velocity.setLength(I))}update(A,I){}frameUpdate(A){}toJSON(){return{type:this.type,angle:this.angle.toJSON()}}static fromJSON(A){return new ZC(sA(A.angle))}clone(){return new ZC(this.angle)}reset(){}}var _Q;(function(B){B[B.Death=0]="Death",B[B.Birth=1]="Birth",B[B.Frame=2]="Frame"})(_Q||(_Q={}));class VC{constructor(A,I,g,Q=_Q.Frame,C=1){this.particleSystem=A,this.useVelocityAsBasis=I,this.subParticleSystem=g,this.mode=Q,this.emitProbability=C,this.type="EmitSubParticleSystem",this.q_=new SA,this.v_=new Z,this.v2_=new Z,this.subEmissions=new Array,this.subParticleSystem&&this.subParticleSystem.system&&(this.subParticleSystem.system.onlyUsedByOther=!0)}initialize(A){}update(A,I){this.mode===_Q.Frame?this.emit(A,I):this.mode===_Q.Birth&&A.age===0?this.emit(A,I):this.mode===_Q.Death&&A.age+I>=A.life&&this.emit(A,I)}emit(A,I){if(!this.subParticleSystem||Math.random()>this.emitProbability)return;const g=new kg;this.setMatrixFromParticle(g,A),this.subEmissions.push({burstParticleCount:0,burstParticleIndex:0,isBursting:!1,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,matrix:g,travelDistance:0,particle:A})}frameUpdate(A){if(this.subParticleSystem)for(let I=0;I<this.subEmissions.length;I++)if(this.subEmissions[I].time>=this.subParticleSystem.system.duration)this.subEmissions[I]=this.subEmissions[this.subEmissions.length-1],this.subEmissions.length=this.subEmissions.length-1,I--;else{const g=this.subEmissions[I];g.particle&&g.particle.age<g.particle.life?this.setMatrixFromParticle(g.matrix,g.particle):g.particle=void 0,this.subParticleSystem.system.emit(A,g,g.matrix)}}toJSON(){return{type:this.type,subParticleSystem:this.subParticleSystem?this.subParticleSystem.uuid:"",useVelocityAsBasis:this.useVelocityAsBasis,mode:this.mode,emitProbability:this.emitProbability}}static fromJSON(A,I){return new VC(I,A.useVelocityAsBasis,A.subParticleSystem,A.mode,A.emitProbability)}clone(){return new VC(this.particleSystem,this.useVelocityAsBasis,this.subParticleSystem,this.mode,this.emitProbability)}reset(){}setMatrixFromParticle(A,I){let g;if(I.rotation===void 0||this.useVelocityAsBasis)if(I.velocity.x===0&&I.velocity.y===0&&(I.velocity.z===1||I.velocity.z===0))A.set(1,0,0,I.position.x,0,1,0,I.position.y,0,0,1,I.position.z,0,0,0,1);else{this.v_.copy(Dt).cross(I.velocity),this.v2_.copy(I.velocity).cross(this.v_);const Q=this.v_.length(),C=this.v2_.length();A.set(this.v_.x/Q,this.v2_.x/C,I.velocity.x,I.position.x,this.v_.y/Q,this.v2_.y/C,I.velocity.y,I.position.y,this.v_.z/Q,this.v2_.z/C,I.velocity.z,I.position.z,0,0,0,1)}else I.rotation instanceof SA?g=I.rotation:(this.q_.setFromAxisAngle(Dt,I.rotation),g=this.q_),A.compose(I.position,g,kh);this.particleSystem.worldSpace||A.multiplyMatrices(this.particleSystem.emitter.matrixWorld,A)}}const Uh=.5*(Math.sqrt(3)-1),uB=(3-Math.sqrt(3))/6,Lh=1/3,Ug=1/6,Hh=(Math.sqrt(5)-1)/4,oI=(5-Math.sqrt(5))/20,gI=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),XA=new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);class ot{constructor(A=Math.random){const I=typeof A=="function"?A:dh(A);this.p=Yh(I),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(let g=0;g<512;g++)this.perm[g]=this.p[g&255],this.permMod12[g]=this.perm[g]%12}noise2D(A,I){const g=this.permMod12,Q=this.perm;let C=0,i=0,E=0;const D=(A+I)*Uh,o=Math.floor(A+D),s=Math.floor(I+D),t=(o+s)*uB,w=o-t,a=s-t,G=A-w,S=I-a;let c,y;G>S?(c=1,y=0):(c=0,y=1);const F=G-c+uB,R=S-y+uB,M=G-1+2*uB,n=S-1+2*uB,N=o&255,J=s&255;let L=.5-G*G-S*S;if(L>=0){const K=g[N+Q[J]]*3;L*=L,C=L*L*(gI[K]*G+gI[K+1]*S)}let H=.5-F*F-R*R;if(H>=0){const K=g[N+c+Q[J+y]]*3;H*=H,i=H*H*(gI[K]*F+gI[K+1]*R)}let Y=.5-M*M-n*n;if(Y>=0){const K=g[N+1+Q[J+1]]*3;Y*=Y,E=Y*Y*(gI[K]*M+gI[K+1]*n)}return 70*(C+i+E)}noise3D(A,I,g){const Q=this.permMod12,C=this.perm;let i,E,D,o;const s=(A+I+g)*Lh,t=Math.floor(A+s),w=Math.floor(I+s),a=Math.floor(g+s),G=(t+w+a)*Ug,S=t-G,c=w-G,y=a-G,F=A-S,R=I-c,M=g-y;let n,N,J,L,H,Y;F>=R?R>=M?(n=1,N=0,J=0,L=1,H=1,Y=0):F>=M?(n=1,N=0,J=0,L=1,H=0,Y=1):(n=0,N=0,J=1,L=1,H=0,Y=1):R<M?(n=0,N=0,J=1,L=0,H=1,Y=1):F<M?(n=0,N=1,J=0,L=0,H=1,Y=1):(n=0,N=1,J=0,L=1,H=1,Y=0);const K=F-n+Ug,l=R-N+Ug,p=M-J+Ug,u=F-L+2*Ug,b=R-H+2*Ug,O=M-Y+2*Ug,W=F-1+3*Ug,T=R-1+3*Ug,j=M-1+3*Ug,EA=t&255,wA=w&255,iA=a&255;let IA=.6-F*F-R*R-M*M;if(IA<0)i=0;else{const z=Q[EA+C[wA+C[iA]]]*3;IA*=IA,i=IA*IA*(gI[z]*F+gI[z+1]*R+gI[z+2]*M)}let BA=.6-K*K-l*l-p*p;if(BA<0)E=0;else{const z=Q[EA+n+C[wA+N+C[iA+J]]]*3;BA*=BA,E=BA*BA*(gI[z]*K+gI[z+1]*l+gI[z+2]*p)}let AA=.6-u*u-b*b-O*O;if(AA<0)D=0;else{const z=Q[EA+L+C[wA+H+C[iA+Y]]]*3;AA*=AA,D=AA*AA*(gI[z]*u+gI[z+1]*b+gI[z+2]*O)}let $=.6-W*W-T*T-j*j;if($<0)o=0;else{const z=Q[EA+1+C[wA+1+C[iA+1]]]*3;$*=$,o=$*$*(gI[z]*W+gI[z+1]*T+gI[z+2]*j)}return 32*(i+E+D+o)}noise4D(A,I,g,Q){const C=this.perm;let i,E,D,o,s;const t=(A+I+g+Q)*Hh,w=Math.floor(A+t),a=Math.floor(I+t),G=Math.floor(g+t),S=Math.floor(Q+t),c=(w+a+G+S)*oI,y=w-c,F=a-c,R=G-c,M=S-c,n=A-y,N=I-F,J=g-R,L=Q-M;let H=0,Y=0,K=0,l=0;n>N?H++:Y++,n>J?H++:K++,n>L?H++:l++,N>J?Y++:K++,N>L?Y++:l++,J>L?K++:l++;const p=H>=3?1:0,u=Y>=3?1:0,b=K>=3?1:0,O=l>=3?1:0,W=H>=2?1:0,T=Y>=2?1:0,j=K>=2?1:0,EA=l>=2?1:0,wA=H>=1?1:0,iA=Y>=1?1:0,IA=K>=1?1:0,BA=l>=1?1:0,AA=n-p+oI,$=N-u+oI,z=J-b+oI,LA=L-O+oI,MA=n-W+2*oI,NA=N-T+2*oI,xA=J-j+2*oI,aA=L-EA+2*oI,DA=n-wA+3*oI,JA=N-iA+3*oI,jI=J-IA+3*oI,_A=L-BA+3*oI,HA=n-1+4*oI,fI=N-1+4*oI,Eg=J-1+4*oI,ig=L-1+4*oI,pI=w&255,Dg=a&255,zI=G&255,_I=S&255;let XI=.6-n*n-N*N-J*J-L*L;if(XI<0)i=0;else{const eA=C[pI+C[Dg+C[zI+C[_I]]]]%32*4;XI*=XI,i=XI*XI*(XA[eA]*n+XA[eA+1]*N+XA[eA+2]*J+XA[eA+3]*L)}let $A=.6-AA*AA-$*$-z*z-LA*LA;if($A<0)E=0;else{const eA=C[pI+p+C[Dg+u+C[zI+b+C[_I+O]]]]%32*4;$A*=$A,E=$A*$A*(XA[eA]*AA+XA[eA+1]*$+XA[eA+2]*z+XA[eA+3]*LA)}let kI=.6-MA*MA-NA*NA-xA*xA-aA*aA;if(kI<0)D=0;else{const eA=C[pI+W+C[Dg+T+C[zI+j+C[_I+EA]]]]%32*4;kI*=kI,D=kI*kI*(XA[eA]*MA+XA[eA+1]*NA+XA[eA+2]*xA+XA[eA+3]*aA)}let vI=.6-DA*DA-JA*JA-jI*jI-_A*_A;if(vI<0)o=0;else{const eA=C[pI+wA+C[Dg+iA+C[zI+IA+C[_I+BA]]]]%32*4;vI*=vI,o=vI*vI*(XA[eA]*DA+XA[eA+1]*JA+XA[eA+2]*jI+XA[eA+3]*_A)}let nI=.6-HA*HA-fI*fI-Eg*Eg-ig*ig;if(nI<0)s=0;else{const eA=C[pI+1+C[Dg+1+C[zI+1+C[_I+1]]]]%32*4;nI*=nI,s=nI*nI*(XA[eA]*HA+XA[eA+1]*fI+XA[eA+2]*Eg+XA[eA+3]*ig)}return 27*(i+E+D+o+s)}}function Yh(B){const A=new Uint8Array(256);for(let I=0;I<256;I++)A[I]=I;for(let I=0;I<255;I++){const g=I+~~(B()*(256-I)),Q=A[I];A[I]=A[g],A[g]=Q}return A}function dh(B){let A=0,I=0,g=0,Q=1;const C=Kh();return A=C(" "),I=C(" "),g=C(" "),A-=C(B),A<0&&(A+=1),I-=C(B),I<0&&(I+=1),g-=C(B),g<0&&(g+=1),function(){const i=2091639*A+Q*23283064365386963e-26;return A=I,I=g,g=i-(Q=i|0)}}function Kh(){let B=4022871197;return function(A){A=A.toString();for(let I=0;I<A.length;I++){B+=A.charCodeAt(I);let g=.02519603282416938*B;B=g>>>0,g-=B,g*=B,B=g>>>0,g-=B,B+=g*4294967296}return(B>>>0)*23283064365386963e-26}}class WC{constructor(A,I,g,Q){this.scale=A,this.octaves=I,this.velocityMultiplier=g,this.timeScale=Q,this.type="TurbulenceField",this.generator=new ot,this.timeOffset=new Z,this.temp=new Z,this.temp2=new Z,this.timeOffset.x=Math.random()/this.scale.x*this.timeScale.x,this.timeOffset.y=Math.random()/this.scale.y*this.timeScale.y,this.timeOffset.z=Math.random()/this.scale.z*this.timeScale.z}initialize(A){}update(A,I){const g=A.position.x/this.scale.x,Q=A.position.y/this.scale.y,C=A.position.z/this.scale.z;this.temp.set(0,0,0);let i=1;for(let E=0;E<this.octaves;E++)this.temp2.set(this.generator.noise4D(g*i,Q*i,C*i,this.timeOffset.x*i)/i,this.generator.noise4D(g*i,Q*i,C*i,this.timeOffset.y*i)/i,this.generator.noise4D(g*i,Q*i,C*i,this.timeOffset.z*i)/i),this.temp.add(this.temp2),i*=2;this.temp.multiply(this.velocityMultiplier),A.velocity.addScaledVector(this.temp,I)}toJSON(){return{type:this.type,scale:[this.scale.x,this.scale.y,this.scale.z],octaves:this.octaves,velocityMultiplier:[this.velocityMultiplier.x,this.velocityMultiplier.y,this.velocityMultiplier.z],timeScale:[this.timeScale.x,this.timeScale.y,this.timeScale.z]}}frameUpdate(A){this.timeOffset.x+=A*this.timeScale.x,this.timeOffset.y+=A*this.timeScale.y,this.timeOffset.z+=A*this.timeScale.z}static fromJSON(A){return new WC(new Z(A.scale[0],A.scale[1],A.scale[2]),A.octaves,new Z(A.velocityMultiplier[0],A.velocityMultiplier[1],A.velocityMultiplier[2]),new Z(A.timeScale[0],A.timeScale[1],A.timeScale[2]))}clone(){return new WC(this.scale.clone(),this.octaves,this.velocityMultiplier.clone(),this.timeScale.clone())}reset(){}}const Lg=[],tD=new Z,wD=new SA;class jC{constructor(A,I,g=new rA(1),Q=new rA(0)){if(this.frequency=A,this.power=I,this.positionAmount=g,this.rotationAmount=Q,this.type="Noise",this.duration=0,Lg.length===0)for(let C=0;C<100;C++)Lg.push(new ot)}initialize(A){A.lastPosNoise=new Z,typeof A.rotation=="number"?A.lastRotNoise=0:A.lastRotNoise=new SA,A.generatorIndex=[rE(0,100),rE(0,100),rE(0,100),rE(0,100)],this.positionAmount.startGen(A.memory),this.rotationAmount.startGen(A.memory),this.frequency.startGen(A.memory),this.power.startGen(A.memory)}update(A,I){let g=this.frequency.genValue(A.memory,A.age/A.life),Q=this.power.genValue(A.memory,A.age/A.life),C=this.positionAmount.genValue(A.memory,A.age/A.life),i=this.rotationAmount.genValue(A.memory,A.age/A.life);C>0&&A.lastPosNoise!==void 0&&(A.position.sub(A.lastPosNoise),tD.set(Lg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*C,Lg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*C,Lg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*C),A.position.add(tD),A.lastPosNoise.copy(tD)),i>0&&A.lastRotNoise!==void 0&&(typeof A.rotation=="number"?(A.rotation-=A.lastRotNoise,A.rotation+=Lg[A.generatorIndex[3]].noise2D(0,A.age*g)*Math.PI*Q*i):(A.lastRotNoise.invert(),A.rotation.multiply(A.lastRotNoise),wD.set(Lg[A.generatorIndex[0]].noise2D(0,A.age*g)*Q*i,Lg[A.generatorIndex[1]].noise2D(0,A.age*g)*Q*i,Lg[A.generatorIndex[2]].noise2D(0,A.age*g)*Q*i,Lg[A.generatorIndex[3]].noise2D(0,A.age*g)*Q*i).normalize(),A.rotation.multiply(wD),A.lastRotNoise.copy(wD)))}toJSON(){return{type:this.type,frequency:this.frequency.toJSON(),power:this.power.toJSON(),positionAmount:this.positionAmount.toJSON(),rotationAmount:this.rotationAmount.toJSON()}}frameUpdate(A){this.duration+=A}static fromJSON(A){return new jC(sA(A.frequency),sA(A.power),sA(A.positionAmount),sA(A.rotationAmount))}clone(){return new jC(this.frequency.clone(),this.power.clone(),this.positionAmount.clone(),this.rotationAmount.clone())}reset(){}}class zC{constructor(A,I){this.color=A,this.speedRange=I,this.type="ColorBySpeed"}initialize(A){this.color.startGen(A.memory)}update(A,I){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.color.genColor(A.memory,A.color,g),A.color.x*=A.startColor.x,A.color.y*=A.startColor.y,A.color.z*=A.startColor.z,A.color.w*=A.startColor.w}frameUpdate(A){}toJSON(){return{type:this.type,color:this.color.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new zC(DD(A.color),uQ.fromJSON(A.speedRange))}clone(){return new zC(this.color.clone(),this.speedRange.clone())}reset(){}}class _C{initialize(A){this.size.startGen(A.memory)}constructor(A,I){this.size=A,this.speedRange=I,this.type="SizeBySpeed"}update(A){const I=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);this.size instanceof mQ?this.size.genValue(A.memory,A.size,I).multiply(A.startSize):A.size.copy(A.startSize).multiplyScalar(this.size.genValue(A.memory,I))}toJSON(){return{type:this.type,size:this.size.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new _C(SE(A.size),uQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new _C(this.size.clone(),this.speedRange.clone())}reset(){}}class $C{constructor(A,I){this.angularVelocity=A,this.speedRange=I,this.type="RotationBySpeed",this.tempQuat=new SA}initialize(A){typeof A.rotation=="number"&&this.angularVelocity.startGen(A.memory)}update(A,I){if(typeof A.rotation=="number"){const g=(A.startSpeed-this.speedRange.a)/(this.speedRange.b-this.speedRange.a);A.rotation+=I*this.angularVelocity.genValue(A.memory,g)}}toJSON(){return{type:this.type,angularVelocity:this.angularVelocity.toJSON(),speedRange:this.speedRange.toJSON()}}static fromJSON(A){return new $C(sA(A.angularVelocity),uQ.fromJSON(A.speedRange))}frameUpdate(A){}clone(){return new $C(this.angularVelocity.clone(),this.speedRange.clone())}reset(){}}class AE{initialize(A){this.speed.startGen(A.memory)}constructor(A,I){this.speed=A,this.dampen=I,this.type="LimitSpeedOverLife"}update(A,I){let g=A.velocity.length(),Q=this.speed.genValue(A.memory,A.age/A.life);if(g>Q){const C=(g-Q)/g;A.velocity.multiplyScalar(1-C*this.dampen*I*20)}}toJSON(){return{type:this.type,speed:this.speed.toJSON(),dampen:this.dampen}}static fromJSON(A){return new AE(sA(A.speed),A.dampen)}frameUpdate(A){}clone(){return new AE(this.speed.clone(),this.dampen)}reset(){}}const nE={ApplyForce:{type:"ApplyForce",constructor:XC,params:[["direction",["vec3"]],["magnitude",["value"]]],loadJSON:XC.fromJSON},Noise:{type:"Noise",constructor:jC,params:[["frequency",["value"]],["power",["value"]],["positionAmount",["value"]],["rotationAmount",["value"]]],loadJSON:jC.fromJSON},TurbulenceField:{type:"TurbulenceField",constructor:WC,params:[["scale",["vec3"]],["octaves",["number"]],["velocityMultiplier",["vec3"]],["timeScale",["vec3"]]],loadJSON:WC.fromJSON},GravityForce:{type:"GravityForce",constructor:vC,params:[["center",["vec3"]],["magnitude",["number"]]],loadJSON:vC.fromJSON},ColorOverLife:{type:"ColorOverLife",constructor:pC,params:[["color",["colorFunc"]]],loadJSON:pC.fromJSON},RotationOverLife:{type:"RotationOverLife",constructor:xC,params:[["angularVelocity",["value","valueFunc"]]],loadJSON:xC.fromJSON},Rotation3DOverLife:{type:"Rotation3DOverLife",constructor:qC,params:[["angularVelocity",["rotationFunc"]]],loadJSON:qC.fromJSON},SizeOverLife:{type:"SizeOverLife",constructor:mC,params:[["size",["value","valueFunc","vec3Func"]]],loadJSON:mC.fromJSON},ColorBySpeed:{type:"ColorBySpeed",constructor:zC,params:[["color",["colorFunc"]],["speedRange",["range"]]],loadJSON:zC.fromJSON},RotationBySpeed:{type:"RotationBySpeed",constructor:$C,params:[["angularVelocity",["value","valueFunc"]],["speedRange",["range"]]],loadJSON:$C.fromJSON},SizeBySpeed:{type:"SizeBySpeed",constructor:_C,params:[["size",["value","valueFunc","vec3Func"]],["speedRange",["range"]]],loadJSON:_C.fromJSON},SpeedOverLife:{type:"SpeedOverLife",constructor:bC,params:[["speed",["value","valueFunc"]]],loadJSON:bC.fromJSON},FrameOverLife:{type:"FrameOverLife",constructor:PC,params:[["frame",["value","valueFunc"]]],loadJSON:PC.fromJSON},ForceOverLife:{type:"ForceOverLife",constructor:uC,params:[["x",["value","valueFunc"]],["y",["value","valueFunc"]],["z",["value","valueFunc"]]],loadJSON:uC.fromJSON},OrbitOverLife:{type:"OrbitOverLife",constructor:TC,params:[["orbitSpeed",["value","valueFunc"]],["axis",["vec3"]]],loadJSON:TC.fromJSON},WidthOverLength:{type:"WidthOverLength",constructor:OC,params:[["width",["value","valueFunc"]]],loadJSON:OC.fromJSON},ChangeEmitDirection:{type:"ChangeEmitDirection",constructor:ZC,params:[["angle",["value"]]],loadJSON:ZC.fromJSON},EmitSubParticleSystem:{type:"EmitSubParticleSystem",constructor:VC,params:[["particleSystem",["self"]],["useVelocityAsBasis",["boolean"]],["subParticleSystem",["particleSystem"]],["mode",["number"]],["emitProbability",["number"]]],loadJSON:VC.fromJSON},LimitSpeedOverLife:{type:"LimitSpeedOverLife",constructor:AE,params:[["speed",["value","valueFunc"]],["dampen",["number"]]],loadJSON:AE.fromJSON}};function lh(B,A){return nE[B.type]?nE[B.type].loadJSON(B,A):null}const fh=[];function ph(B){if(!fh.find(A=>A.id===B.id)){for(const A of B.emitterShapes)oD[A.type]||(oD[A.type]=A);for(const A of B.behaviors)nE[A.type]||(nE[A.type]=A)}}class IE{get geometry(){return this._geometry}set geometry(A){if(this._geometry=A,A===void 0||typeof A=="string")return;const I=new eQ;this._triangleIndexToArea.length=0;let g=0;if(!A.getIndex())return;const Q=A.getIndex().array,C=Q.length/3;this._triangleIndexToArea.push(0);for(let i=0;i<C;i++)I.setFromAttributeAndIndices(A.getAttribute("position"),Q[i*3],Q[i*3+1],Q[i*3+2]),g+=I.getArea(),this._triangleIndexToArea.push(g);A.userData.triangleIndexToArea=this._triangleIndexToArea}constructor(A){this.type="mesh_surface",this._triangleIndexToArea=[],this._tempA=new q,this._tempB=new q,this._tempC=new q,A&&(this.geometry=A)}initialize(A){const I=this._geometry;if(!I||I.getIndex()===null){A.position.set(0,0,0),A.velocity.set(0,0,1).multiplyScalar(A.startSpeed);return}const g=this._triangleIndexToArea.length-1;let Q=0,C=g;const i=Math.random()*this._triangleIndexToArea[g];for(;Q+1<C;){const a=Math.floor((Q+C)/2);i<this._triangleIndexToArea[a]?C=a:Q=a}let E=Math.random(),D=Math.random();E+D>1&&(E=1-E,D=1-D);const o=I.getIndex().array[Q*3],s=I.getIndex().array[Q*3+1],t=I.getIndex().array[Q*3+2],w=I.getAttribute("position");this._tempA.fromBufferAttribute(w,o),this._tempB.fromBufferAttribute(w,s),this._tempC.fromBufferAttribute(w,t),this._tempB.sub(this._tempA),this._tempC.sub(this._tempA),this._tempA.addScaledVector(this._tempB,E).addScaledVector(this._tempC,D),A.position.copy(this._tempA),this._tempA.copy(this._tempB).cross(this._tempC).normalize(),A.velocity.copy(this._tempA).normalize().multiplyScalar(A.startSpeed)}toJSON(){return{type:"mesh_surface",mesh:this._geometry?this._geometry.uuid:""}}static fromJSON(A,I){return new IE(I.geometries[A.geometry])}clone(){return new IE(this._geometry)}update(A,I){}}const xh={id:"three.quarks",emitterShapes:[{type:"mesh_surface",params:[["geometry",["geometry"]]],constructor:IE,loadJSON:IE.fromJSON}],behaviors:[]};var qh=`
|
|
2
2
|
#ifdef SOFT_PARTICLES
|
|
3
3
|
|
|
4
4
|
/* #ifdef LOGDEPTH
|
|
@@ -20,7 +20,7 @@ import{Object3D as KB,PlaneGeometry as me,Layers as DE,MeshBasicMaterial as Rs,D
|
|
|
20
20
|
|
|
21
21
|
//gl_FragColor = vec4(softParticlesFade , 0, 0, 1);
|
|
22
22
|
#endif
|
|
23
|
-
`,
|
|
23
|
+
`,uh=`
|
|
24
24
|
#ifdef SOFT_PARTICLES
|
|
25
25
|
|
|
26
26
|
uniform sampler2D depthTexture;
|
|
@@ -42,17 +42,17 @@ import{Object3D as KB,PlaneGeometry as me,Layers as DE,MeshBasicMaterial as Rs,D
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
#endif
|
|
45
|
-
`,
|
|
45
|
+
`,mh=`
|
|
46
46
|
#ifdef SOFT_PARTICLES
|
|
47
47
|
varying vec4 projPosition;
|
|
48
48
|
varying float linearDepth;
|
|
49
49
|
#endif
|
|
50
|
-
`,
|
|
50
|
+
`,bh=`
|
|
51
51
|
#ifdef SOFT_PARTICLES
|
|
52
52
|
projPosition = gl_Position;
|
|
53
53
|
linearDepth = -mvPosition.z;
|
|
54
54
|
#endif
|
|
55
|
-
`,
|
|
55
|
+
`,Ph=`
|
|
56
56
|
#ifdef USE_MAP
|
|
57
57
|
vec4 texelColor = texture2D( map, vUv);
|
|
58
58
|
#ifdef TILE_BLEND
|
|
@@ -60,7 +60,7 @@ import{Object3D as KB,PlaneGeometry as me,Layers as DE,MeshBasicMaterial as Rs,D
|
|
|
60
60
|
#endif
|
|
61
61
|
diffuseColor *= texelColor;
|
|
62
62
|
#endif
|
|
63
|
-
`,
|
|
63
|
+
`,Th=`
|
|
64
64
|
#if defined( USE_UV ) || defined( USE_ANISOTROPY )
|
|
65
65
|
|
|
66
66
|
varying vec2 vUv;
|
|
@@ -211,7 +211,7 @@ import{Object3D as KB,PlaneGeometry as me,Layers as DE,MeshBasicMaterial as Rs,D
|
|
|
211
211
|
varying vec2 vThicknessMapUv;
|
|
212
212
|
|
|
213
213
|
#endif
|
|
214
|
-
`,
|
|
214
|
+
`,Oh=`
|
|
215
215
|
#ifdef UV_TILE
|
|
216
216
|
attribute float uvTile;
|
|
217
217
|
uniform vec2 tileCount;
|
|
@@ -381,7 +381,7 @@ import{Object3D as KB,PlaneGeometry as me,Layers as DE,MeshBasicMaterial as Rs,D
|
|
|
381
381
|
varying vec2 vThicknessMapUv;
|
|
382
382
|
|
|
383
383
|
#endif
|
|
384
|
-
`,
|
|
384
|
+
`,Xh=`
|
|
385
385
|
#ifdef UV_TILE
|
|
386
386
|
mat3 tileTransform = makeTileTransform(floor(uvTile));
|
|
387
387
|
#ifdef TILE_BLEND
|
|
@@ -519,7 +519,7 @@ vThicknessMapUv = ( tileTransform * thicknessMapTransform * vec3( THICKNESSMAP_U
|
|
|
519
519
|
|
|
520
520
|
#endif
|
|
521
521
|
|
|
522
|
-
`;const BQ=ns;function uh(){BQ.tile_pars_vertex=xh,BQ.tile_vertex=qh,BQ.tile_pars_fragment=ph,BQ.tile_fragment=fh,BQ.soft_pars_vertex=dh,BQ.soft_vertex=lh,BQ.soft_pars_fragment=Kh,BQ.soft_fragment=Yh}class bh extends KB{constructor(A){super(),this.type="ParticleEmitter",this.system=A}clone(){const A=this.system.clone();return A.emitter.copy(this,!0),A.emitter}dispose(){}extractFromCache(A){const I=[];for(const g in A){const Q=A[g];delete Q.metadata,I.push(Q)}return I}toJSON(A,I={}){const g=this.children;this.children=this.children.filter(C=>C.type!=="ParticleSystemPreview");const Q=super.toJSON(A);return this.children=g,this.system!==null&&(Q.object.ps=this.system.toJSON(A,I)),Q}}var X;(function(B){B[B.BillBoard=0]="BillBoard",B[B.StretchedBillBoard=1]="StretchedBillBoard",B[B.Mesh=2]="Mesh",B[B.Trail=3]="Trail",B[B.HorizontalBillBoard=4]="HorizontalBillBoard",B[B.VerticalBillBoard=5]="VerticalBillBoard"})(X||(X={}));class Et extends IQ{constructor(A){super(),this.type="VFXBatch",this.maxParticles=1e3,this.systems=new Set;const I=new DE;I.mask=A.layers.mask;const g=A.material.clone();g.defines={},Object.assign(g.defines,A.material.defines),this.settings={instancingGeometry:A.instancingGeometry,renderMode:A.renderMode,renderOrder:A.renderOrder,material:g,uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softNearFade:A.softNearFade,softFarFade:A.softFarFade,layers:I},this.frustumCulled=!1,this.renderOrder=this.settings.renderOrder}addSystem(A){this.systems.add(A)}removeSystem(A){this.systems.delete(A)}applyDepthTexture(A){const I=this.material.uniforms.depthTexture;I&&I.value!==A&&(I.value=A,this.material.needsUpdate=!0)}getVisibleSystems(){return Array.from(this.systems).filter(A=>A.emitter.visible)}}const mh=new Z(0,0,1),wD=new SA,Ph=new Z,Th=new Z;new Z;const it=60,nE=new me(1,1,1,1);class Yi{set time(A){this.emissionState.time=A}get time(){return this.emissionState.time}get layers(){return this.rendererSettings.layers}get texture(){return this.rendererSettings.material.map}set texture(A){this.rendererSettings.material.map=A,this.neededToUpdateRender=!0}get material(){return this.rendererSettings.material}set material(A){this.rendererSettings.material=A,this.neededToUpdateRender=!0}get uTileCount(){return this.rendererSettings.uTileCount}set uTileCount(A){this.rendererSettings.uTileCount=A,this.neededToUpdateRender=!0}get vTileCount(){return this.rendererSettings.vTileCount}set vTileCount(A){this.rendererSettings.vTileCount=A,this.neededToUpdateRender=!0}get blendTiles(){return this.rendererSettings.blendTiles}set blendTiles(A){this.rendererSettings.blendTiles=A,this.neededToUpdateRender=!0}get softParticles(){return this.rendererSettings.softParticles}set softParticles(A){this.rendererSettings.softParticles=A,this.neededToUpdateRender=!0}get softNearFade(){return this.rendererSettings.softNearFade}set softNearFade(A){this.rendererSettings.softNearFade=A,this.neededToUpdateRender=!0}get softFarFade(){return this.rendererSettings.softFarFade}set softFarFade(A){this.rendererSettings.softFarFade=A,this.neededToUpdateRender=!0}get instancingGeometry(){return this.rendererSettings.instancingGeometry}set instancingGeometry(A){this.restart(),this.particles.length=0,this.rendererSettings.instancingGeometry=A,this.neededToUpdateRender=!0}get renderMode(){return this.rendererSettings.renderMode}set renderMode(A){if(this.rendererSettings.renderMode!==A){let I=!1;switch(this.rendererSettings.renderMode===X.Trail&&(I=!0),this.rendererSettings.renderMode===X.Mesh&&(this.startRotation=new rA(0)),A){case X.Trail:this.rendererEmitterSettings={startLength:new rA(30),followLocalOrigin:!1},I=!0;break;case X.Mesh:this.rendererEmitterSettings={geometry:nE},this.startRotation=new UC(new Z(0,1,0),new rA(0));break;case X.StretchedBillBoard:this.rendererEmitterSettings={speedFactor:0,lengthFactor:2},this.rendererSettings.instancingGeometry=nE;break;case X.BillBoard:case X.VerticalBillBoard:case X.HorizontalBillBoard:this.rendererEmitterSettings={},this.rendererSettings.instancingGeometry=nE;break}this.rendererSettings.renderMode=A,I&&(this.restart(),this.particles.length=0),this.neededToUpdateRender=!0}}get renderOrder(){return this.rendererSettings.renderOrder}set renderOrder(A){this.rendererSettings.renderOrder=A,this.neededToUpdateRender=!0}get blending(){return this.rendererSettings.material.blending}set blending(A){this.rendererSettings.material.blending=A,this.neededToUpdateRender=!0}constructor(A){if(this.temp=new Z,this.travelDistance=0,this.normalMatrix=new dg,this.memory=[],this.listeners={},this.firstTimeUpdate=!0,this.autoDestroy=A.autoDestroy===void 0?!1:A.autoDestroy,this.duration=A.duration??1,this.looping=A.looping===void 0?!0:A.looping,this.prewarm=A.prewarm===void 0?!1:A.prewarm,this.startLife=A.startLife??new rA(5),this.startSpeed=A.startSpeed??new rA(0),this.startRotation=A.startRotation??new rA(0),this.startSize=A.startSize??new rA(1),this.startColor=A.startColor??new qQ(new OI(1,1,1,1)),this.emissionOverTime=A.emissionOverTime??new rA(10),this.emissionOverDistance=A.emissionOverDistance??new rA(0),this.emissionBursts=A.emissionBursts??[],this.onlyUsedByOther=A.onlyUsedByOther??!1,this.emitterShape=A.shape??new JB,this.behaviors=A.behaviors??new Array,this.worldSpace=A.worldSpace??!1,this.rendererEmitterSettings=A.rendererEmitterSettings??{},A.renderMode===X.StretchedBillBoard){const I=this.rendererEmitterSettings;A.speedFactor!==void 0&&(I.speedFactor=A.speedFactor),I.speedFactor=I.speedFactor??0,I.lengthFactor=I.lengthFactor??0}this.rendererSettings={instancingGeometry:A.instancingGeometry??nE,renderMode:A.renderMode??X.BillBoard,renderOrder:A.renderOrder??0,material:A.material,uTileCount:A.uTileCount??1,vTileCount:A.vTileCount??1,blendTiles:A.blendTiles??!1,softParticles:A.softParticles??!1,softNearFade:A.softNearFade??0,softFarFade:A.softFarFade??0,layers:A.layers??new DE},this.neededToUpdateRender=!0,this.particles=new Array,this.startTileIndex=A.startTileIndex||new rA(0),this.emitter=new bh(this),this.paused=!1,this.particleNum=0,this.emissionState={isBursting:!1,burstParticleIndex:0,burstParticleCount:0,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,travelDistance:0},this.emissionBursts.forEach(I=>I.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1}pause(){this.paused=!0}play(){this.paused=!1}stop(){this.restart(),this.pause()}spawn(A,I,g){wD.setFromRotationMatrix(g);const Q=Ph,C=wD,i=Th;g.decompose(Q,C,i);for(let E=0;E<A;E++){for(I.burstParticleIndex=E,this.particleNum++;this.particles.length<this.particleNum;)this.rendererSettings.renderMode===X.Trail?this.particles.push(new RE):this.particles.push(new Sh);const D=this.particles[this.particleNum-1];if(D.reset(),D.speedModifier=1,this.startColor.startGen(D.memory),this.startColor.genColor(D.memory,D.startColor,this.emissionState.time),D.color.copy(D.startColor),this.startSpeed.startGen(D.memory),D.startSpeed=this.startSpeed.genValue(D.memory,I.time/this.duration),this.startLife.startGen(D.memory),D.life=this.startLife.genValue(D.memory,I.time/this.duration),D.age=0,this.startSize.startGen(D.memory),this.startSize.type==="vec3function")this.startSize.genValue(D.memory,D.startSize,I.time/this.duration);else{const o=this.startSize.genValue(D.memory,I.time/this.duration);D.startSize.set(o,o,o)}if(this.startTileIndex.startGen(D.memory),D.uvTile=this.startTileIndex.genValue(D.memory),D.size.copy(D.startSize),this.rendererSettings.renderMode===X.Mesh||this.rendererSettings.renderMode===X.BillBoard||this.rendererSettings.renderMode===X.VerticalBillBoard||this.rendererSettings.renderMode===X.HorizontalBillBoard||this.rendererSettings.renderMode===X.StretchedBillBoard){const o=D;this.startRotation.startGen(D.memory),this.rendererSettings.renderMode===X.Mesh?(o.rotation instanceof SA||(o.rotation=new SA),this.startRotation.type==="rotation"?this.startRotation.genValue(D.memory,o.rotation,1,I.time/this.duration):o.rotation.setFromAxisAngle(mh,this.startRotation.genValue(o.memory,I.time/this.duration))):this.startRotation.type==="rotation"?o.rotation=0:o.rotation=this.startRotation.genValue(o.memory,I.time/this.duration)}else if(this.rendererSettings.renderMode===X.Trail){const o=D;this.rendererEmitterSettings.startLength.startGen(o.memory),o.length=this.rendererEmitterSettings.startLength.genValue(o.memory,I.time/this.duration)}if(this.emitterShape.initialize(D,I),this.rendererSettings.renderMode===X.Trail&&this.rendererEmitterSettings.followLocalOrigin){const o=D;o.localPosition=new Z().copy(o.position)}this.worldSpace?(D.position.applyMatrix4(g),D.startSize.multiply(i).abs(),D.size.copy(D.startSize),D.velocity.multiply(i).applyMatrix3(this.normalMatrix),D.rotation&&D.rotation instanceof SA&&D.rotation.multiplyQuaternions(wD,D.rotation)):this.onlyUsedByOther&&(D.parentMatrix=g);for(let o=0;o<this.behaviors.length;o++)this.behaviors[o].initialize(D,this)}}endEmit(){this.emitEnded=!0,this.autoDestroy&&(this.markForDestroy=!0),this.fire({type:"emitEnd",particleSystem:this})}dispose(){this._renderer&&this._renderer.deleteSystem(this),this.emitter.dispose(),this.emitter.parent&&this.emitter.parent.remove(this.emitter),this.fire({type:"destroy",particleSystem:this})}restart(){this.memory.length=0,this.paused=!1,this.particleNum=0,this.emissionState.isBursting=!1,this.emissionState.burstIndex=0,this.emissionState.burstWaveIndex=0,this.emissionState.time=0,this.emissionState.waitEmiting=0,this.behaviors.forEach(A=>{A.reset()}),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1,this.emissionBursts.forEach(A=>A.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory)}update(A){if(this.paused)return;let I=this.emitter;for(;I.parent;)I=I.parent;if(I.type!=="Scene"){this.dispose();return}if(this.firstTimeUpdate&&(this.firstTimeUpdate=!1,this.emitter.updateWorldMatrix(!0,!1)),this.emitEnded&&this.particleNum===0){this.markForDestroy&&this.emitter.parent&&this.dispose();return}if(this.looping&&this.prewarm&&!this.prewarmed){this.prewarmed=!0;for(let g=0;g<this.duration*it;g++)this.update(1/it)}A>.1&&(A=.1),this.neededToUpdateRender&&(this._renderer&&this._renderer.updateSystem(this),this.neededToUpdateRender=!1),this.onlyUsedByOther||this.emit(A,this.emissionState,this.emitter.matrixWorld),this.emitterShape.update(this,A);for(let g=0;g<this.behaviors.length;g++){this.behaviors[g].frameUpdate(A);for(let Q=0;Q<this.particleNum;Q++)this.particles[Q].died||this.behaviors[g].update(this.particles[Q],A)}for(let g=0;g<this.particleNum;g++)this.rendererEmitterSettings.followLocalOrigin&&this.particles[g].localPosition?(this.particles[g].position.copy(this.particles[g].localPosition),this.particles[g].parentMatrix?this.particles[g].position.applyMatrix4(this.particles[g].parentMatrix):this.particles[g].position.applyMatrix4(this.emitter.matrixWorld)):this.particles[g].position.addScaledVector(this.particles[g].velocity,A*this.particles[g].speedModifier),this.particles[g].age+=A;if(this.rendererSettings.renderMode===X.Trail)for(let g=0;g<this.particleNum;g++)this.particles[g].update();for(let g=0;g<this.particleNum;g++){const Q=this.particles[g];Q.died&&(!(Q instanceof RE)||Q.previous.length===0)&&(this.particles[g]=this.particles[this.particleNum-1],this.particles[this.particleNum-1]=Q,this.particleNum--,g--,this.fire({type:"particleDied",particleSystem:this,particle:Q}))}}emit(A,I,g){I.time>this.duration&&(this.looping?(I.time-=this.duration,I.burstIndex=0,this.behaviors.forEach(C=>{C.reset()})):!this.emitEnded&&!this.onlyUsedByOther&&this.endEmit()),this.normalMatrix.getNormalMatrix(g);const Q=Math.ceil(I.waitEmiting);for(this.spawn(Q,I,g),I.waitEmiting-=Q;I.burstIndex<this.emissionBursts.length&&this.emissionBursts[I.burstIndex].time<=I.time;){if(Math.random()<this.emissionBursts[I.burstIndex].probability){const C=this.emissionBursts[I.burstIndex].count.genValue(this.memory,this.time);I.isBursting=!0,I.burstParticleCount=C,this.spawn(C,I,g),I.isBursting=!1}I.burstIndex++}if(!this.emitEnded&&(I.waitEmiting+=A*this.emissionOverTime.genValue(this.memory,I.time/this.duration),I.previousWorldPos!=null)){this.temp.set(g.elements[12],g.elements[13],g.elements[14]),I.travelDistance+=I.previousWorldPos.distanceTo(this.temp);const C=this.emissionOverDistance.genValue(this.memory,I.time/this.duration);if(I.travelDistance*C>0){const i=Math.floor(I.travelDistance*C);I.travelDistance-=i/C,I.waitEmiting+=i}}I.previousWorldPos===void 0&&(I.previousWorldPos=new Z),I.previousWorldPos.set(g.elements[12],g.elements[13],g.elements[14]),I.time+=A}toJSON(A,I={}){if((A===void 0||typeof A=="string")&&(A={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}}),A.materials[this.rendererSettings.material.uuid]=this.rendererSettings.material.toJSON(A),I.useUrlForImage&&this.texture?.source!==void 0){const C=this.texture.source;A.images[C.uuid]={uuid:C.uuid,url:this.texture.image.url}}let g;this.renderMode===X.Trail?g={startLength:this.rendererEmitterSettings.startLength.toJSON(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===X.Mesh?g={}:this.renderMode===X.StretchedBillBoard?g={speedFactor:this.rendererEmitterSettings.speedFactor,lengthFactor:this.rendererEmitterSettings.lengthFactor}:g={};const Q=this.rendererSettings.instancingGeometry;return A.geometries&&!A.geometries[Q.uuid]&&(A.geometries[Q.uuid]=Q.toJSON()),{version:"3.0",autoDestroy:this.autoDestroy,looping:this.looping,prewarm:this.prewarm,duration:this.duration,shape:this.emitterShape.toJSON(),startLife:this.startLife.toJSON(),startSpeed:this.startSpeed.toJSON(),startRotation:this.startRotation.toJSON(),startSize:this.startSize.toJSON(),startColor:this.startColor.toJSON(),emissionOverTime:this.emissionOverTime.toJSON(),emissionOverDistance:this.emissionOverDistance.toJSON(),emissionBursts:this.emissionBursts.map(C=>({time:C.time,count:C.count.toJSON(),probability:C.probability,interval:C.interval,cycle:C.cycle})),onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry.uuid,renderOrder:this.renderOrder,renderMode:this.renderMode,rendererEmitterSettings:g,material:this.rendererSettings.material.uuid,layers:this.layers.mask,startTileIndex:this.startTileIndex.toJSON(),uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.rendererSettings.softParticles,softFarFade:this.rendererSettings.softFarFade,softNearFade:this.rendererSettings.softNearFade,behaviors:this.behaviors.map(C=>C.toJSON()),worldSpace:this.worldSpace}}static fromJSON(A,I,g){const Q=yh(A.shape,I);let C;if(A.renderMode===X.Trail){const D=A.rendererEmitterSettings;C={startLength:D.startLength!=null?sA(D.startLength):new rA(30),followLocalOrigin:D.followLocalOrigin}}else A.renderMode===X.Mesh?C={}:A.renderMode===X.StretchedBillBoard?(C=A.rendererEmitterSettings,A.speedFactor!=null&&(C.speedFactor=A.speedFactor)):C={};const i=new DE;A.layers&&(i.mask=A.layers);const E=new Yi({autoDestroy:A.autoDestroy,looping:A.looping,prewarm:A.prewarm,duration:A.duration,shape:Q,startLife:sA(A.startLife),startSpeed:sA(A.startSpeed),startRotation:GE(A.startRotation),startSize:GE(A.startSize),startColor:iD(A.startColor),emissionOverTime:sA(A.emissionOverTime),emissionOverDistance:sA(A.emissionOverDistance),emissionBursts:A.emissionBursts?.map(D=>({time:D.time,count:typeof D.count=="number"?new rA(D.count):sA(D.count),probability:D.probability??1,interval:D.interval??.1,cycle:D.cycle??1})),onlyUsedByOther:A.onlyUsedByOther,instancingGeometry:I.geometries[A.instancingGeometry],renderMode:A.renderMode,rendererEmitterSettings:C,renderOrder:A.renderOrder,layers:i,material:A.material?I.materials[A.material]:A.texture?new Rs({map:I.textures[A.texture],transparent:A.transparent??!0,blending:A.blending,side:dB}):new Rs({color:16777215,transparent:!0,blending:ks,side:dB}),startTileIndex:typeof A.startTileIndex=="number"?new rA(A.startTileIndex):sA(A.startTileIndex),uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softFarFade:A.softFarFade,softNearFade:A.softNearFade,behaviors:[],worldSpace:A.worldSpace});return E.behaviors=A.behaviors.map(D=>{const o=Jh(D,E);return o&&o.type==="EmitSubParticleSystem"&&(g[D.subParticleSystem]=o),o}).filter(D=>D!==null),E}addBehavior(A){this.behaviors.push(A)}getRendererSettings(){return this.rendererSettings}addEventListener(A,I){this.listeners[A]||(this.listeners[A]=[]),this.listeners[A].push(I)}removeAllEventListeners(A){this.listeners[A]&&(this.listeners[A]=[])}removeEventListener(A,I){if(this.listeners[A]){const g=this.listeners[A].indexOf(I);g!==-1&&this.listeners[A].splice(g,1)}}fire(A){this.listeners[A.type]&&this.listeners[A.type].forEach(I=>I(A))}clone(){const A=[];for(const C of this.emissionBursts){const i={};Object.assign(i,C),A.push(i)}const I=[];for(const C of this.behaviors)I.push(C.clone());let g;this.renderMode===X.Trail?g={startLength:this.rendererEmitterSettings.startLength.clone(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===X.StretchedBillBoard?g={lengthFactor:this.rendererEmitterSettings.lengthFactor,speedFactor:this.rendererEmitterSettings.speedFactor}:g={};const Q=new DE;return Q.mask=this.layers.mask,new Yi({autoDestroy:this.autoDestroy,looping:this.looping,duration:this.duration,shape:this.emitterShape.clone(),startLife:this.startLife.clone(),startSpeed:this.startSpeed.clone(),startRotation:this.startRotation.clone(),startSize:this.startSize.clone(),startColor:this.startColor.clone(),emissionOverTime:this.emissionOverTime.clone(),emissionOverDistance:this.emissionOverDistance.clone(),emissionBursts:A,onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry,renderMode:this.renderMode,renderOrder:this.renderOrder,rendererEmitterSettings:g,material:this.rendererSettings.material,startTileIndex:this.startTileIndex,uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.softParticles,softFarFade:this.softFarFade,softNearFade:this.softNearFade,behaviors:I,worldSpace:this.worldSpace,layers:Q})}}var aD=`
|
|
522
|
+
`;const BQ=Js;function vh(){BQ.tile_pars_vertex=Oh,BQ.tile_vertex=Xh,BQ.tile_pars_fragment=Th,BQ.tile_fragment=Ph,BQ.soft_pars_vertex=mh,BQ.soft_vertex=bh,BQ.soft_pars_fragment=uh,BQ.soft_fragment=qh}class Zh extends dB{constructor(A){super(),this.type="ParticleEmitter",this.system=A}clone(){const A=this.system.clone();return A.emitter.copy(this,!0),A.emitter}dispose(){}extractFromCache(A){const I=[];for(const g in A){const Q=A[g];delete Q.metadata,I.push(Q)}return I}toJSON(A,I={}){const g=this.children;this.children=this.children.filter(C=>C.type!=="ParticleSystemPreview");const Q=super.toJSON(A);return this.children=g,this.system!==null&&(Q.object.ps=this.system.toJSON(A,I)),Q}}var X;(function(B){B[B.BillBoard=0]="BillBoard",B[B.StretchedBillBoard=1]="StretchedBillBoard",B[B.Mesh=2]="Mesh",B[B.Trail=3]="Trail",B[B.HorizontalBillBoard=4]="HorizontalBillBoard",B[B.VerticalBillBoard=5]="VerticalBillBoard"})(X||(X={}));class st extends IQ{constructor(A){super(),this.type="VFXBatch",this.maxParticles=1e3,this.systems=new Set;const I=new oE;I.mask=A.layers.mask;const g=A.material.clone();g.defines={},Object.assign(g.defines,A.material.defines),this.settings={instancingGeometry:A.instancingGeometry,renderMode:A.renderMode,renderOrder:A.renderOrder,material:g,uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softNearFade:A.softNearFade,softFarFade:A.softFarFade,layers:I},this.frustumCulled=!1,this.renderOrder=this.settings.renderOrder}addSystem(A){this.systems.add(A)}removeSystem(A){this.systems.delete(A)}applyDepthTexture(A){const I=this.material.uniforms.depthTexture;I&&I.value!==A&&(I.value=A,this.material.needsUpdate=!0)}getVisibleSystems(){return Array.from(this.systems).filter(A=>A.emitter.visible)}}const Vh=new Z(0,0,1),aD=new SA,Wh=new Z,jh=new Z;new Z;const tt=60,ME=new We(1,1,1,1);class di{set time(A){this.emissionState.time=A}get time(){return this.emissionState.time}get layers(){return this.rendererSettings.layers}get texture(){return this.rendererSettings.material.map}set texture(A){this.rendererSettings.material.map=A,this.neededToUpdateRender=!0}get material(){return this.rendererSettings.material}set material(A){this.rendererSettings.material=A,this.neededToUpdateRender=!0}get uTileCount(){return this.rendererSettings.uTileCount}set uTileCount(A){this.rendererSettings.uTileCount=A,this.neededToUpdateRender=!0}get vTileCount(){return this.rendererSettings.vTileCount}set vTileCount(A){this.rendererSettings.vTileCount=A,this.neededToUpdateRender=!0}get blendTiles(){return this.rendererSettings.blendTiles}set blendTiles(A){this.rendererSettings.blendTiles=A,this.neededToUpdateRender=!0}get softParticles(){return this.rendererSettings.softParticles}set softParticles(A){this.rendererSettings.softParticles=A,this.neededToUpdateRender=!0}get softNearFade(){return this.rendererSettings.softNearFade}set softNearFade(A){this.rendererSettings.softNearFade=A,this.neededToUpdateRender=!0}get softFarFade(){return this.rendererSettings.softFarFade}set softFarFade(A){this.rendererSettings.softFarFade=A,this.neededToUpdateRender=!0}get instancingGeometry(){return this.rendererSettings.instancingGeometry}set instancingGeometry(A){this.restart(),this.particles.length=0,this.rendererSettings.instancingGeometry=A,this.neededToUpdateRender=!0}get renderMode(){return this.rendererSettings.renderMode}set renderMode(A){if(this.rendererSettings.renderMode!==A){let I=!1;switch(this.rendererSettings.renderMode===X.Trail&&(I=!0),this.rendererSettings.renderMode===X.Mesh&&(this.startRotation=new rA(0)),A){case X.Trail:this.rendererEmitterSettings={startLength:new rA(30),followLocalOrigin:!1},I=!0;break;case X.Mesh:this.rendererEmitterSettings={geometry:ME},this.startRotation=new LC(new Z(0,1,0),new rA(0));break;case X.StretchedBillBoard:this.rendererEmitterSettings={speedFactor:0,lengthFactor:2},this.rendererSettings.instancingGeometry=ME;break;case X.BillBoard:case X.VerticalBillBoard:case X.HorizontalBillBoard:this.rendererEmitterSettings={},this.rendererSettings.instancingGeometry=ME;break}this.rendererSettings.renderMode=A,I&&(this.restart(),this.particles.length=0),this.neededToUpdateRender=!0}}get renderOrder(){return this.rendererSettings.renderOrder}set renderOrder(A){this.rendererSettings.renderOrder=A,this.neededToUpdateRender=!0}get blending(){return this.rendererSettings.material.blending}set blending(A){this.rendererSettings.material.blending=A,this.neededToUpdateRender=!0}constructor(A){if(this.temp=new Z,this.travelDistance=0,this.normalMatrix=new Kg,this.memory=[],this.listeners={},this.firstTimeUpdate=!0,this.autoDestroy=A.autoDestroy===void 0?!1:A.autoDestroy,this.duration=A.duration??1,this.looping=A.looping===void 0?!0:A.looping,this.prewarm=A.prewarm===void 0?!1:A.prewarm,this.startLife=A.startLife??new rA(5),this.startSpeed=A.startSpeed??new rA(0),this.startRotation=A.startRotation??new rA(0),this.startSize=A.startSize??new rA(1),this.startColor=A.startColor??new qQ(new OI(1,1,1,1)),this.emissionOverTime=A.emissionOverTime??new rA(10),this.emissionOverDistance=A.emissionOverDistance??new rA(0),this.emissionBursts=A.emissionBursts??[],this.onlyUsedByOther=A.onlyUsedByOther??!1,this.emitterShape=A.shape??new JB,this.behaviors=A.behaviors??new Array,this.worldSpace=A.worldSpace??!1,this.rendererEmitterSettings=A.rendererEmitterSettings??{},A.renderMode===X.StretchedBillBoard){const I=this.rendererEmitterSettings;A.speedFactor!==void 0&&(I.speedFactor=A.speedFactor),I.speedFactor=I.speedFactor??0,I.lengthFactor=I.lengthFactor??0}this.rendererSettings={instancingGeometry:A.instancingGeometry??ME,renderMode:A.renderMode??X.BillBoard,renderOrder:A.renderOrder??0,material:A.material,uTileCount:A.uTileCount??1,vTileCount:A.vTileCount??1,blendTiles:A.blendTiles??!1,softParticles:A.softParticles??!1,softNearFade:A.softNearFade??0,softFarFade:A.softFarFade??0,layers:A.layers??new oE},this.neededToUpdateRender=!0,this.particles=new Array,this.startTileIndex=A.startTileIndex||new rA(0),this.emitter=new Zh(this),this.paused=!1,this.particleNum=0,this.emissionState={isBursting:!1,burstParticleIndex:0,burstParticleCount:0,burstIndex:0,burstWaveIndex:0,time:0,waitEmiting:0,travelDistance:0},this.emissionBursts.forEach(I=>I.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1}pause(){this.paused=!0}play(){this.paused=!1}stop(){this.restart(),this.pause()}spawn(A,I,g){aD.setFromRotationMatrix(g);const Q=Wh,C=aD,i=jh;g.decompose(Q,C,i);for(let E=0;E<A;E++){for(I.burstParticleIndex=E,this.particleNum++;this.particles.length<this.particleNum;)this.rendererSettings.renderMode===X.Trail?this.particles.push(new kE):this.particles.push(new Nh);const D=this.particles[this.particleNum-1];if(D.reset(),D.speedModifier=1,this.startColor.startGen(D.memory),this.startColor.genColor(D.memory,D.startColor,this.emissionState.time),D.color.copy(D.startColor),this.startSpeed.startGen(D.memory),D.startSpeed=this.startSpeed.genValue(D.memory,I.time/this.duration),this.startLife.startGen(D.memory),D.life=this.startLife.genValue(D.memory,I.time/this.duration),D.age=0,this.startSize.startGen(D.memory),this.startSize.type==="vec3function")this.startSize.genValue(D.memory,D.startSize,I.time/this.duration);else{const o=this.startSize.genValue(D.memory,I.time/this.duration);D.startSize.set(o,o,o)}if(this.startTileIndex.startGen(D.memory),D.uvTile=this.startTileIndex.genValue(D.memory),D.size.copy(D.startSize),this.rendererSettings.renderMode===X.Mesh||this.rendererSettings.renderMode===X.BillBoard||this.rendererSettings.renderMode===X.VerticalBillBoard||this.rendererSettings.renderMode===X.HorizontalBillBoard||this.rendererSettings.renderMode===X.StretchedBillBoard){const o=D;this.startRotation.startGen(D.memory),this.rendererSettings.renderMode===X.Mesh?(o.rotation instanceof SA||(o.rotation=new SA),this.startRotation.type==="rotation"?this.startRotation.genValue(D.memory,o.rotation,1,I.time/this.duration):o.rotation.setFromAxisAngle(Vh,this.startRotation.genValue(o.memory,I.time/this.duration))):this.startRotation.type==="rotation"?o.rotation=0:o.rotation=this.startRotation.genValue(o.memory,I.time/this.duration)}else if(this.rendererSettings.renderMode===X.Trail){const o=D;this.rendererEmitterSettings.startLength.startGen(o.memory),o.length=this.rendererEmitterSettings.startLength.genValue(o.memory,I.time/this.duration)}if(this.emitterShape.initialize(D,I),this.rendererSettings.renderMode===X.Trail&&this.rendererEmitterSettings.followLocalOrigin){const o=D;o.localPosition=new Z().copy(o.position)}this.worldSpace?(D.position.applyMatrix4(g),D.startSize.multiply(i).abs(),D.size.copy(D.startSize),D.velocity.multiply(i).applyMatrix3(this.normalMatrix),D.rotation&&D.rotation instanceof SA&&D.rotation.multiplyQuaternions(aD,D.rotation)):this.onlyUsedByOther&&(D.parentMatrix=g);for(let o=0;o<this.behaviors.length;o++)this.behaviors[o].initialize(D,this)}}endEmit(){this.emitEnded=!0,this.autoDestroy&&(this.markForDestroy=!0),this.fire({type:"emitEnd",particleSystem:this})}dispose(){this._renderer&&this._renderer.deleteSystem(this),this.emitter.dispose(),this.emitter.parent&&this.emitter.parent.remove(this.emitter),this.fire({type:"destroy",particleSystem:this})}restart(){this.memory.length=0,this.paused=!1,this.particleNum=0,this.emissionState.isBursting=!1,this.emissionState.burstIndex=0,this.emissionState.burstWaveIndex=0,this.emissionState.time=0,this.emissionState.waitEmiting=0,this.behaviors.forEach(A=>{A.reset()}),this.emitEnded=!1,this.markForDestroy=!1,this.prewarmed=!1,this.emissionBursts.forEach(A=>A.count.startGen(this.memory)),this.emissionOverDistance.startGen(this.memory)}update(A){if(this.paused)return;let I=this.emitter;for(;I.parent;)I=I.parent;if(I.type!=="Scene"){this.dispose();return}if(this.firstTimeUpdate&&(this.firstTimeUpdate=!1,this.emitter.updateWorldMatrix(!0,!1)),this.emitEnded&&this.particleNum===0){this.markForDestroy&&this.emitter.parent&&this.dispose();return}if(this.looping&&this.prewarm&&!this.prewarmed){this.prewarmed=!0;for(let g=0;g<this.duration*tt;g++)this.update(1/tt)}A>.1&&(A=.1),this.neededToUpdateRender&&(this._renderer&&this._renderer.updateSystem(this),this.neededToUpdateRender=!1),this.onlyUsedByOther||this.emit(A,this.emissionState,this.emitter.matrixWorld),this.emitterShape.update(this,A);for(let g=0;g<this.behaviors.length;g++){this.behaviors[g].frameUpdate(A);for(let Q=0;Q<this.particleNum;Q++)this.particles[Q].died||this.behaviors[g].update(this.particles[Q],A)}for(let g=0;g<this.particleNum;g++)this.rendererEmitterSettings.followLocalOrigin&&this.particles[g].localPosition?(this.particles[g].position.copy(this.particles[g].localPosition),this.particles[g].parentMatrix?this.particles[g].position.applyMatrix4(this.particles[g].parentMatrix):this.particles[g].position.applyMatrix4(this.emitter.matrixWorld)):this.particles[g].position.addScaledVector(this.particles[g].velocity,A*this.particles[g].speedModifier),this.particles[g].age+=A;if(this.rendererSettings.renderMode===X.Trail)for(let g=0;g<this.particleNum;g++)this.particles[g].update();for(let g=0;g<this.particleNum;g++){const Q=this.particles[g];Q.died&&(!(Q instanceof kE)||Q.previous.length===0)&&(this.particles[g]=this.particles[this.particleNum-1],this.particles[this.particleNum-1]=Q,this.particleNum--,g--,this.fire({type:"particleDied",particleSystem:this,particle:Q}))}}emit(A,I,g){I.time>this.duration&&(this.looping?(I.time-=this.duration,I.burstIndex=0,this.behaviors.forEach(C=>{C.reset()})):!this.emitEnded&&!this.onlyUsedByOther&&this.endEmit()),this.normalMatrix.getNormalMatrix(g);const Q=Math.ceil(I.waitEmiting);for(this.spawn(Q,I,g),I.waitEmiting-=Q;I.burstIndex<this.emissionBursts.length&&this.emissionBursts[I.burstIndex].time<=I.time;){if(Math.random()<this.emissionBursts[I.burstIndex].probability){const C=this.emissionBursts[I.burstIndex].count.genValue(this.memory,this.time);I.isBursting=!0,I.burstParticleCount=C,this.spawn(C,I,g),I.isBursting=!1}I.burstIndex++}if(!this.emitEnded&&(I.waitEmiting+=A*this.emissionOverTime.genValue(this.memory,I.time/this.duration),I.previousWorldPos!=null)){this.temp.set(g.elements[12],g.elements[13],g.elements[14]),I.travelDistance+=I.previousWorldPos.distanceTo(this.temp);const C=this.emissionOverDistance.genValue(this.memory,I.time/this.duration);if(I.travelDistance*C>0){const i=Math.floor(I.travelDistance*C);I.travelDistance-=i/C,I.waitEmiting+=i}}I.previousWorldPos===void 0&&(I.previousWorldPos=new Z),I.previousWorldPos.set(g.elements[12],g.elements[13],g.elements[14]),I.time+=A}toJSON(A,I={}){if((A===void 0||typeof A=="string")&&(A={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}}),A.materials[this.rendererSettings.material.uuid]=this.rendererSettings.material.toJSON(A),I.useUrlForImage&&this.texture?.source!==void 0){const C=this.texture.source;A.images[C.uuid]={uuid:C.uuid,url:this.texture.image.url}}let g;this.renderMode===X.Trail?g={startLength:this.rendererEmitterSettings.startLength.toJSON(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===X.Mesh?g={}:this.renderMode===X.StretchedBillBoard?g={speedFactor:this.rendererEmitterSettings.speedFactor,lengthFactor:this.rendererEmitterSettings.lengthFactor}:g={};const Q=this.rendererSettings.instancingGeometry;return A.geometries&&!A.geometries[Q.uuid]&&(A.geometries[Q.uuid]=Q.toJSON()),{version:"3.0",autoDestroy:this.autoDestroy,looping:this.looping,prewarm:this.prewarm,duration:this.duration,shape:this.emitterShape.toJSON(),startLife:this.startLife.toJSON(),startSpeed:this.startSpeed.toJSON(),startRotation:this.startRotation.toJSON(),startSize:this.startSize.toJSON(),startColor:this.startColor.toJSON(),emissionOverTime:this.emissionOverTime.toJSON(),emissionOverDistance:this.emissionOverDistance.toJSON(),emissionBursts:this.emissionBursts.map(C=>({time:C.time,count:C.count.toJSON(),probability:C.probability,interval:C.interval,cycle:C.cycle})),onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry.uuid,renderOrder:this.renderOrder,renderMode:this.renderMode,rendererEmitterSettings:g,material:this.rendererSettings.material.uuid,layers:this.layers.mask,startTileIndex:this.startTileIndex.toJSON(),uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.rendererSettings.softParticles,softFarFade:this.rendererSettings.softFarFade,softNearFade:this.rendererSettings.softNearFade,behaviors:this.behaviors.map(C=>C.toJSON()),worldSpace:this.worldSpace}}static fromJSON(A,I,g){const Q=nh(A.shape,I);let C;if(A.renderMode===X.Trail){const D=A.rendererEmitterSettings;C={startLength:D.startLength!=null?sA(D.startLength):new rA(30),followLocalOrigin:D.followLocalOrigin}}else A.renderMode===X.Mesh?C={}:A.renderMode===X.StretchedBillBoard?(C=A.rendererEmitterSettings,A.speedFactor!=null&&(C.speedFactor=A.speedFactor)):C={};const i=new oE;A.layers&&(i.mask=A.layers);const E=new di({autoDestroy:A.autoDestroy,looping:A.looping,prewarm:A.prewarm,duration:A.duration,shape:Q,startLife:sA(A.startLife),startSpeed:sA(A.startSpeed),startRotation:SE(A.startRotation),startSize:SE(A.startSize),startColor:DD(A.startColor),emissionOverTime:sA(A.emissionOverTime),emissionOverDistance:sA(A.emissionOverDistance),emissionBursts:A.emissionBursts?.map(D=>({time:D.time,count:typeof D.count=="number"?new rA(D.count):sA(D.count),probability:D.probability??1,interval:D.interval??.1,cycle:D.cycle??1})),onlyUsedByOther:A.onlyUsedByOther,instancingGeometry:I.geometries[A.instancingGeometry],renderMode:A.renderMode,rendererEmitterSettings:C,renderOrder:A.renderOrder,layers:i,material:A.material?I.materials[A.material]:A.texture?new Ms({map:I.textures[A.texture],transparent:A.transparent??!0,blending:A.blending,side:KB}):new Ms({color:16777215,transparent:!0,blending:Ns,side:KB}),startTileIndex:typeof A.startTileIndex=="number"?new rA(A.startTileIndex):sA(A.startTileIndex),uTileCount:A.uTileCount,vTileCount:A.vTileCount,blendTiles:A.blendTiles,softParticles:A.softParticles,softFarFade:A.softFarFade,softNearFade:A.softNearFade,behaviors:[],worldSpace:A.worldSpace});return E.behaviors=A.behaviors.map(D=>{const o=lh(D,E);return o&&o.type==="EmitSubParticleSystem"&&(g[D.subParticleSystem]=o),o}).filter(D=>D!==null),E}addBehavior(A){this.behaviors.push(A)}getRendererSettings(){return this.rendererSettings}addEventListener(A,I){this.listeners[A]||(this.listeners[A]=[]),this.listeners[A].push(I)}removeAllEventListeners(A){this.listeners[A]&&(this.listeners[A]=[])}removeEventListener(A,I){if(this.listeners[A]){const g=this.listeners[A].indexOf(I);g!==-1&&this.listeners[A].splice(g,1)}}fire(A){this.listeners[A.type]&&this.listeners[A.type].forEach(I=>I(A))}clone(){const A=[];for(const C of this.emissionBursts){const i={};Object.assign(i,C),A.push(i)}const I=[];for(const C of this.behaviors)I.push(C.clone());let g;this.renderMode===X.Trail?g={startLength:this.rendererEmitterSettings.startLength.clone(),followLocalOrigin:this.rendererEmitterSettings.followLocalOrigin}:this.renderMode===X.StretchedBillBoard?g={lengthFactor:this.rendererEmitterSettings.lengthFactor,speedFactor:this.rendererEmitterSettings.speedFactor}:g={};const Q=new oE;return Q.mask=this.layers.mask,new di({autoDestroy:this.autoDestroy,looping:this.looping,duration:this.duration,shape:this.emitterShape.clone(),startLife:this.startLife.clone(),startSpeed:this.startSpeed.clone(),startRotation:this.startRotation.clone(),startSize:this.startSize.clone(),startColor:this.startColor.clone(),emissionOverTime:this.emissionOverTime.clone(),emissionOverDistance:this.emissionOverDistance.clone(),emissionBursts:A,onlyUsedByOther:this.onlyUsedByOther,instancingGeometry:this.rendererSettings.instancingGeometry,renderMode:this.renderMode,renderOrder:this.renderOrder,rendererEmitterSettings:g,material:this.rendererSettings.material,startTileIndex:this.startTileIndex,uTileCount:this.uTileCount,vTileCount:this.vTileCount,blendTiles:this.blendTiles,softParticles:this.softParticles,softFarFade:this.softFarFade,softNearFade:this.softNearFade,behaviors:I,worldSpace:this.worldSpace,layers:Q})}}var eD=`
|
|
523
523
|
|
|
524
524
|
#include <common>
|
|
525
525
|
#include <color_pars_fragment>
|
|
@@ -554,7 +554,7 @@ void main() {
|
|
|
554
554
|
#include <soft_fragment>
|
|
555
555
|
#include <tonemapping_fragment>
|
|
556
556
|
}
|
|
557
|
-
`,
|
|
557
|
+
`,hD=`
|
|
558
558
|
#define STANDARD
|
|
559
559
|
|
|
560
560
|
#ifdef PHYSICAL
|
|
@@ -719,7 +719,7 @@ outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoat
|
|
|
719
719
|
#include <fog_fragment>
|
|
720
720
|
#include <premultiplied_alpha_fragment>
|
|
721
721
|
#include <dithering_fragment>
|
|
722
|
-
}`,
|
|
722
|
+
}`,zh=`
|
|
723
723
|
#include <common>
|
|
724
724
|
#include <color_pars_vertex>
|
|
725
725
|
#include <logdepthbuf_pars_vertex>
|
|
@@ -765,7 +765,7 @@ void main() {
|
|
|
765
765
|
#include <tile_vertex>
|
|
766
766
|
#include <soft_vertex>
|
|
767
767
|
}
|
|
768
|
-
`,
|
|
768
|
+
`,_h=`
|
|
769
769
|
#include <common>
|
|
770
770
|
#include <color_pars_vertex>
|
|
771
771
|
#include <logdepthbuf_pars_vertex>
|
|
@@ -802,7 +802,7 @@ void main() {
|
|
|
802
802
|
#include <tile_vertex>
|
|
803
803
|
#include <soft_vertex>
|
|
804
804
|
}
|
|
805
|
-
`,
|
|
805
|
+
`,cD=`
|
|
806
806
|
#define STANDARD
|
|
807
807
|
varying vec3 vViewPosition;
|
|
808
808
|
#ifdef USE_TRANSMISSION
|
|
@@ -887,7 +887,7 @@ void main() {
|
|
|
887
887
|
vWorldPosition = worldPosition.xyz;
|
|
888
888
|
#endif
|
|
889
889
|
}
|
|
890
|
-
|
|
890
|
+
`,$h=`
|
|
891
891
|
#include <common>
|
|
892
892
|
#include <color_pars_vertex>
|
|
893
893
|
#include <logdepthbuf_pars_vertex>
|
|
@@ -928,7 +928,7 @@ void main() {
|
|
|
928
928
|
#include <tile_vertex>
|
|
929
929
|
#include <soft_vertex>
|
|
930
930
|
}
|
|
931
|
-
`;function
|
|
931
|
+
`;function yD(B){return B===0?"uv":`uv${B}`}class Ac extends lB{constructor(A){super(A)}onBeforeCompile(A,I){super.onBeforeCompile(A,I),A.vertexShader=cD,A.fragmentShader=hD}}class Ic extends je{constructor(A){super(A)}onBeforeCompile(A,I){super.onBeforeCompile(A,I),A.vertexShader=cD,A.fragmentShader=hD}}class gc extends st{constructor(A){super(A),this.vector_=new Z,this.vector2_=new Z,this.vector3_=new Z,this.quaternion_=new SA,this.quaternion2_=new SA,this.quaternion3_=new SA,this.rotationMat_=new Kg,this.rotationMat2_=new Kg,this.maxParticles=1e3,this.setupBuffers(),this.rebuildMaterial()}buildExpandableBuffers(){this.offsetBuffer=new AQ(new Float32Array(this.maxParticles*3),3),this.offsetBuffer.setUsage(hI),this.geometry.setAttribute("offset",this.offsetBuffer),this.colorBuffer=new AQ(new Float32Array(this.maxParticles*4),4),this.colorBuffer.setUsage(hI),this.geometry.setAttribute("color",this.colorBuffer),this.settings.renderMode===X.Mesh?(this.rotationBuffer=new AQ(new Float32Array(this.maxParticles*4),4),this.rotationBuffer.setUsage(hI),this.geometry.setAttribute("rotation",this.rotationBuffer)):(this.settings.renderMode===X.BillBoard||this.settings.renderMode===X.HorizontalBillBoard||this.settings.renderMode===X.VerticalBillBoard||this.settings.renderMode===X.StretchedBillBoard)&&(this.rotationBuffer=new AQ(new Float32Array(this.maxParticles),1),this.rotationBuffer.setUsage(hI),this.geometry.setAttribute("rotation",this.rotationBuffer)),this.sizeBuffer=new AQ(new Float32Array(this.maxParticles*3),3),this.sizeBuffer.setUsage(hI),this.geometry.setAttribute("size",this.sizeBuffer),this.uvTileBuffer=new AQ(new Float32Array(this.maxParticles),1),this.uvTileBuffer.setUsage(hI),this.geometry.setAttribute("uvTile",this.uvTileBuffer),this.settings.renderMode===X.StretchedBillBoard&&(this.velocityBuffer=new AQ(new Float32Array(this.maxParticles*4),4),this.velocityBuffer.setUsage(hI),this.geometry.setAttribute("velocity",this.velocityBuffer))}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new vi,this.geometry.setIndex(this.settings.instancingGeometry.getIndex()),this.settings.instancingGeometry.hasAttribute("normal")&&this.geometry.setAttribute("normal",this.settings.instancingGeometry.getAttribute("normal")),this.geometry.setAttribute("position",this.settings.instancingGeometry.getAttribute("position")),this.settings.instancingGeometry.hasAttribute("uv")&&this.geometry.setAttribute("uv",this.settings.instancingGeometry.getAttribute("uv")),this.buildExpandableBuffers()}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={},I={};this.settings.material.type!=="MeshStandardMaterial"&&this.settings.material.type!=="MeshPhysicalMaterial"&&(A.map=new wg(this.settings.material.map)),this.settings.material.alphaTest&&(I.USE_ALPHATEST="",A.alphaTest=new wg(this.settings.material.alphaTest)),I.USE_UV="";const g=this.settings.uTileCount,Q=this.settings.vTileCount;(g>1||Q>1)&&(I.UV_TILE="",A.tileCount=new wg(new MB(g,Q))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.material.normalMap&&(I.USE_NORMALMAP="",I.NORMALMAP_UV=yD(this.settings.material.normalMap.channel),A.normalMapTransform=new wg(new Kg().copy(this.settings.material.normalMap.matrix))),this.settings.material.map&&(I.USE_MAP="",this.settings.blendTiles&&(I.TILE_BLEND=""),I.MAP_UV=yD(this.settings.material.map.channel),A.mapTransform=new wg(new Kg().copy(this.settings.material.map.matrix))),I.USE_COLOR_ALPHA="";let C;if(this.settings.softParticles){I.SOFT_PARTICLES="";const E=this.settings.softNearFade,D=1/(this.settings.softFarFade-this.settings.softNearFade);A.softParams=new wg(new MB(E,D)),A.depthTexture=new wg(null);const o=A.projParams=new wg(new OI);C=(s,t,w)=>{o.value.set(w.near,w.far,0,0)}}let i=!1;if(this.settings.renderMode===X.BillBoard||this.settings.renderMode===X.VerticalBillBoard||this.settings.renderMode===X.HorizontalBillBoard||this.settings.renderMode===X.Mesh){let E,D;this.settings.renderMode===X.Mesh?this.settings.material.type==="MeshStandardMaterial"||this.settings.material.type==="MeshPhysicalMaterial"?(I.USE_COLOR="",E=cD,D=hD,i=!0):(E=_h,D=eD):(E=zh,D=eD),this.settings.renderMode===X.VerticalBillBoard?I.VERTICAL="":this.settings.renderMode===X.HorizontalBillBoard&&(I.HORIZONTAL="");let o=!1;this.settings.renderMode===X.Mesh&&(this.settings.material.type==="MeshStandardMaterial"?(this.material=new Ac({}),this.material.copy(this.settings.material),this.material.uniforms=A,this.material.defines=I,o=!0):this.settings.material.type==="MeshPhysicalMaterial"&&(this.material=new Ic({}),this.material.copy(this.settings.material),this.material.uniforms=A,this.material.defines=I,o=!0)),o||(this.material=new vQ({uniforms:A,defines:I,vertexShader:E,fragmentShader:D,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest,lights:i}))}else if(this.settings.renderMode===X.StretchedBillBoard)A.speedFactor=new wg(1),this.material=new vQ({uniforms:A,defines:I,vertexShader:$h,fragmentShader:eD,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,blending:this.settings.material.blending,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha,side:this.settings.material.side,alphaTest:this.settings.material.alphaTest,depthTest:this.settings.material.depthTest});else throw new Error("render mode unavailable");this.material&&C&&(this.material.onBeforeRender=C)}update(){let A=0,I=0;const g=this.getVisibleSystems();for(const Q of g)I+=Q.particleNum;I>this.maxParticles&&this.expandBuffers(I);for(const Q of g){Q.emitter.updateMatrixWorld&&(Q.emitter.updateWorldMatrix(!0,!1),Q.emitter.updateMatrixWorld(!0));const C=Q.particles,i=Q.particleNum,E=this.quaternion2_,D=this.vector2_,o=this.vector3_;Q.emitter.matrixWorld.decompose(D,E,o),this.rotationMat_.setFromMatrix4(Q.emitter.matrixWorld);for(let s=0;s<i;s++,A++){const t=C[s];if(this.settings.renderMode===X.Mesh){let a;if(Q.worldSpace)a=t.rotation;else{let G;t.parentMatrix?G=this.quaternion3_.setFromRotationMatrix(t.parentMatrix):G=E,a=this.quaternion_,a.copy(G).multiply(t.rotation)}this.rotationBuffer.setXYZW(A,a.x,a.y,a.z,a.w)}else(this.settings.renderMode===X.StretchedBillBoard||this.settings.renderMode===X.VerticalBillBoard||this.settings.renderMode===X.HorizontalBillBoard||this.settings.renderMode===X.BillBoard)&&this.rotationBuffer.setX(A,t.rotation);let w;if(Q.worldSpace?w=t.position:(w=this.vector_,t.parentMatrix?w.copy(t.position).applyMatrix4(t.parentMatrix):w.copy(t.position).applyMatrix4(Q.emitter.matrixWorld)),this.offsetBuffer.setXYZ(A,w.x,w.y,w.z),this.colorBuffer.setXYZW(A,t.color.x,t.color.y,t.color.z,t.color.w),Q.worldSpace?this.sizeBuffer.setXYZ(A,t.size.x,t.size.y,t.size.z):t.parentMatrix?this.sizeBuffer.setXYZ(A,t.size.x,t.size.y,t.size.z):this.sizeBuffer.setXYZ(A,t.size.x*Math.abs(o.x),t.size.y*Math.abs(o.y),t.size.z*Math.abs(o.z)),this.uvTileBuffer.setX(A,t.uvTile),this.settings.renderMode===X.StretchedBillBoard&&this.velocityBuffer){let a=Q.rendererEmitterSettings.speedFactor;a===0&&(a=.001);const G=Q.rendererEmitterSettings.lengthFactor;let S;Q.worldSpace?S=t.velocity:(S=this.vector_,t.parentMatrix?(this.rotationMat2_.setFromMatrix4(t.parentMatrix),S.copy(t.velocity).applyMatrix3(this.rotationMat2_)):S.copy(t.velocity).applyMatrix3(this.rotationMat_)),this.velocityBuffer.setXYZW(A,S.x*a,S.y*a,S.z*a,G)}}}this.geometry.instanceCount=A,A>0&&(this.offsetBuffer.clearUpdateRanges(),this.offsetBuffer.addUpdateRange(0,A*3),this.offsetBuffer.needsUpdate=!0,this.sizeBuffer.clearUpdateRanges(),this.sizeBuffer.addUpdateRange(0,A*3),this.sizeBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.uvTileBuffer.clearUpdateRanges(),this.uvTileBuffer.addUpdateRange(0,A),this.uvTileBuffer.needsUpdate=!0,this.settings.renderMode===X.StretchedBillBoard&&this.velocityBuffer&&(this.velocityBuffer.clearUpdateRanges(),this.velocityBuffer.addUpdateRange(0,A*4),this.velocityBuffer.needsUpdate=!0),this.settings.renderMode===X.Mesh?(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,A*4),this.rotationBuffer.needsUpdate=!0):(this.settings.renderMode===X.StretchedBillBoard||this.settings.renderMode===X.HorizontalBillBoard||this.settings.renderMode===X.VerticalBillBoard||this.settings.renderMode===X.BillBoard)&&(this.rotationBuffer.clearUpdateRanges(),this.rotationBuffer.addUpdateRange(0,A),this.rotationBuffer.needsUpdate=!0))}dispose(){this.geometry.dispose()}}var Qc=`
|
|
932
932
|
|
|
933
933
|
#include <common>
|
|
934
934
|
#include <tile_pars_fragment>
|
|
@@ -961,7 +961,7 @@ void main() {
|
|
|
961
961
|
|
|
962
962
|
#include <fog_fragment>
|
|
963
963
|
#include <tonemapping_fragment>
|
|
964
|
-
}`,
|
|
964
|
+
}`,Bc=`
|
|
965
965
|
#include <common>
|
|
966
966
|
#include <tile_pars_vertex>
|
|
967
967
|
#include <color_pars_vertex>
|
|
@@ -1036,7 +1036,7 @@ void main() {
|
|
|
1036
1036
|
vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
|
|
1037
1037
|
|
|
1038
1038
|
#include <fog_vertex>
|
|
1039
|
-
}`;class _h extends Et{constructor(A){super(A),this.vector_=new Z,this.vector2_=new Z,this.vector3_=new Z,this.quaternion_=new SA,this.maxParticles=1e4,this.setupBuffers(),this.rebuildMaterial()}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new ZQ,this.indexBuffer=new iI(new Uint32Array(this.maxParticles*6),1),this.indexBuffer.setUsage(hI),this.geometry.setIndex(this.indexBuffer),this.positionBuffer=new iI(new Float32Array(this.maxParticles*6),3),this.positionBuffer.setUsage(hI),this.geometry.setAttribute("position",this.positionBuffer),this.previousBuffer=new iI(new Float32Array(this.maxParticles*6),3),this.previousBuffer.setUsage(hI),this.geometry.setAttribute("previous",this.previousBuffer),this.nextBuffer=new iI(new Float32Array(this.maxParticles*6),3),this.nextBuffer.setUsage(hI),this.geometry.setAttribute("next",this.nextBuffer),this.widthBuffer=new iI(new Float32Array(this.maxParticles*2),1),this.widthBuffer.setUsage(hI),this.geometry.setAttribute("width",this.widthBuffer),this.sideBuffer=new iI(new Float32Array(this.maxParticles*2),1),this.sideBuffer.setUsage(hI),this.geometry.setAttribute("side",this.sideBuffer),this.uvBuffer=new iI(new Float32Array(this.maxParticles*4),2),this.uvBuffer.setUsage(hI),this.geometry.setAttribute("uv",this.uvBuffer),this.colorBuffer=new iI(new Float32Array(this.maxParticles*8),4),this.colorBuffer.setUsage(hI),this.geometry.setAttribute("color",this.colorBuffer)}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={lineWidth:{value:1},map:{value:null},useMap:{value:0},alphaMap:{value:null},useAlphaMap:{value:0},resolution:{value:new NB(1,1)},sizeAttenuation:{value:1},visibility:{value:1},alphaTest:{value:0}},I={};if(I.USE_UV="",I.USE_COLOR_ALPHA="",this.settings.material.map&&(I.USE_MAP="",I.MAP_UV=cD(this.settings.material.map.channel),A.map=new wg(this.settings.material.map),A.mapTransform=new wg(new dg().copy(this.settings.material.map.matrix))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.renderMode===X.Trail)this.material=new vQ({uniforms:A,defines:I,vertexShader:zh,fragmentShader:jh,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,side:this.settings.material.side,blending:this.settings.material.blending||ks,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha});else throw new Error("render mode unavailable")}update(){let A=0,I=0,g=0;const Q=this.getVisibleSystems();for(const C of Q)for(let i=0;i<C.particleNum;i++)g+=C.particles[i].previous.length*2;g>this.maxParticles&&this.expandBuffers(g);for(const C of Q){C.emitter.updateMatrixWorld&&(C.emitter.updateWorldMatrix(!0,!1),C.emitter.updateMatrixWorld(!0));const i=this.quaternion_,E=this.vector2_,D=this.vector3_;C.emitter.matrixWorld.decompose(E,i,D);const o=C.particles,s=C.particleNum,t=this.settings.uTileCount,w=this.settings.vTileCount,a=1/t,G=1/w;for(let r=0;r<s;r++){const c=o[r],y=c.uvTile%w,R=Math.floor(c.uvTile/w+.001),S=c.previous.values();let n=S.next(),N=n.value,M=N;n.done||(n=S.next());let J;n.value!==void 0?J=n.value:J=M;for(let L=0;L<c.previous.length;L++,A+=2){if(this.positionBuffer.setXYZ(A,M.position.x,M.position.y,M.position.z),this.positionBuffer.setXYZ(A+1,M.position.x,M.position.y,M.position.z),C.worldSpace?(this.positionBuffer.setXYZ(A,M.position.x,M.position.y,M.position.z),this.positionBuffer.setXYZ(A+1,M.position.x,M.position.y,M.position.z)):(c.parentMatrix?this.vector_.copy(M.position).applyMatrix4(c.parentMatrix):this.vector_.copy(M.position).applyMatrix4(C.emitter.matrixWorld),this.positionBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.positionBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.previousBuffer.setXYZ(A,N.position.x,N.position.y,N.position.z),this.previousBuffer.setXYZ(A+1,N.position.x,N.position.y,N.position.z)):(c.parentMatrix?this.vector_.copy(N.position).applyMatrix4(c.parentMatrix):this.vector_.copy(N.position).applyMatrix4(C.emitter.matrixWorld),this.previousBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.previousBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.nextBuffer.setXYZ(A,J.position.x,J.position.y,J.position.z),this.nextBuffer.setXYZ(A+1,J.position.x,J.position.y,J.position.z)):(c.parentMatrix?this.vector_.copy(J.position).applyMatrix4(c.parentMatrix):this.vector_.copy(J.position).applyMatrix4(C.emitter.matrixWorld),this.nextBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.nextBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),this.sideBuffer.setX(A,1),this.sideBuffer.setX(A+1,-1),C.worldSpace)this.widthBuffer.setX(A,M.size),this.widthBuffer.setX(A+1,M.size);else if(c.parentMatrix)this.widthBuffer.setX(A,M.size),this.widthBuffer.setX(A+1,M.size);else{const H=(Math.abs(D.x)+Math.abs(D.y)+Math.abs(D.z))/3;this.widthBuffer.setX(A,M.size*H),this.widthBuffer.setX(A+1,M.size*H)}this.uvBuffer.setXY(A,(L/c.previous.length+y)*a,(w-R-1)*G),this.uvBuffer.setXY(A+1,(L/c.previous.length+y)*a,(w-R)*G),this.colorBuffer.setXYZW(A,M.color.x,M.color.y,M.color.z,M.color.w),this.colorBuffer.setXYZW(A+1,M.color.x,M.color.y,M.color.z,M.color.w),L+1<c.previous.length&&(this.indexBuffer.setX(I*3,A),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+2),I++,this.indexBuffer.setX(I*3,A+2),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+3),I++),N=M,M=J,n.done||(n=S.next(),n.value!==void 0&&(J=n.value))}}}this.positionBuffer.clearUpdateRanges(),this.positionBuffer.addUpdateRange(0,A*3),this.positionBuffer.needsUpdate=!0,this.previousBuffer.clearUpdateRanges(),this.previousBuffer.addUpdateRange(0,A*3),this.previousBuffer.needsUpdate=!0,this.nextBuffer.clearUpdateRanges(),this.nextBuffer.addUpdateRange(0,A*3),this.nextBuffer.needsUpdate=!0,this.sideBuffer.clearUpdateRanges(),this.sideBuffer.addUpdateRange(0,A),this.sideBuffer.needsUpdate=!0,this.widthBuffer.clearUpdateRanges(),this.widthBuffer.addUpdateRange(0,A),this.widthBuffer.needsUpdate=!0,this.uvBuffer.clearUpdateRanges(),this.uvBuffer.addUpdateRange(0,A*2),this.uvBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.indexBuffer.clearUpdateRanges(),this.indexBuffer.addUpdateRange(0,I*3),this.indexBuffer.needsUpdate=!0,this.geometry.setDrawRange(0,I*3)}dispose(){this.geometry.dispose()}}class _o extends KB{constructor(){super(),this.batches=[],this.systemToBatchIndex=new Map,this.type="BatchedRenderer",this.depthTexture=null}static equals(A,I){return A.material.side===I.material.side&&A.material.blending===I.material.blending&&A.material.blendSrc===I.material.blendSrc&&A.material.blendDst===I.material.blendDst&&A.material.blendEquation===I.material.blendEquation&&A.material.premultipliedAlpha===I.material.premultipliedAlpha&&A.material.transparent===I.material.transparent&&A.material.depthTest===I.material.depthTest&&A.material.type===I.material.type&&A.material.alphaTest===I.material.alphaTest&&A.material.map===I.material.map&&A.renderMode===I.renderMode&&A.blendTiles===I.blendTiles&&A.softParticles===I.softParticles&&A.softFarFade===I.softFarFade&&A.softNearFade===I.softNearFade&&A.uTileCount===I.uTileCount&&A.vTileCount===I.vTileCount&&A.instancingGeometry===I.instancingGeometry&&A.renderOrder===I.renderOrder&&A.layers.mask===I.layers.mask}addSystem(A){A._renderer=this;const I=A.getRendererSettings();for(let Q=0;Q<this.batches.length;Q++)if(_o.equals(this.batches[Q].settings,I)){this.batches[Q].addSystem(A),this.systemToBatchIndex.set(A,Q);return}let g;switch(I.renderMode){case X.Trail:g=new _h(I);break;case X.Mesh:case X.BillBoard:case X.VerticalBillBoard:case X.HorizontalBillBoard:case X.StretchedBillBoard:g=new Wh(I);break}this.depthTexture&&g.applyDepthTexture(this.depthTexture),g.addSystem(A),this.batches.push(g),this.systemToBatchIndex.set(A,this.batches.length-1),this.add(g)}deleteSystem(A){const I=this.systemToBatchIndex.get(A);I!=null&&(this.batches[I].removeSystem(A),this.systemToBatchIndex.delete(A))}setDepthTexture(A){this.depthTexture=A;for(const I of this.batches)I.applyDepthTexture(A)}updateSystem(A){this.deleteSystem(A),this.addSystem(A)}update(A){this.systemToBatchIndex.forEach((I,g)=>{g.update(A)});for(let I=0;I<this.batches.length;I++)this.batches[I].update()}}const $h=_o;uh(),Lh(Hh),console.log("%c Particle system powered by three.quarks. https://quarks.art/","font-size: 14px; font-weight: bold;");const Dt=Math.sqrt(5),Ac=(Dt-1)/4,sI=(5-Dt)/20,NE=B=>Math.floor(B)|0,ME=new Float64Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);function Ic(B=Math.random){const A=gc(B),I=new Float64Array(A).map(i=>ME[i%32*4]),g=new Float64Array(A).map(i=>ME[i%32*4+1]),Q=new Float64Array(A).map(i=>ME[i%32*4+2]),C=new Float64Array(A).map(i=>ME[i%32*4+3]);return function(i,E,D,o){let s,t,w,a,G;const r=(i+E+D+o)*Ac,c=NE(i+r),y=NE(E+r),R=NE(D+r),S=NE(o+r),n=(c+y+R+S)*sI,N=c-n,M=y-n,J=R-n,L=S-n,H=i-N,Y=E-M,d=D-J,l=o-L;let p=0,u=0,P=0,O=0;H>Y?p++:u++,H>d?p++:P++,H>l?p++:O++,Y>d?u++:P++,Y>l?u++:O++,d>l?P++:O++;const W=p>=3?1:0,T=u>=3?1:0,j=P>=3?1:0,EA=O>=3?1:0,wA=p>=2?1:0,iA=u>=2?1:0,IA=P>=2?1:0,BA=O>=2?1:0,AA=p>=1?1:0,$=u>=1?1:0,z=P>=1?1:0,LA=O>=1?1:0,NA=H-W+sI,MA=Y-T+sI,xA=d-j+sI,aA=l-EA+sI,DA=H-wA+2*sI,JA=Y-iA+2*sI,jI=d-IA+2*sI,_A=l-BA+2*sI,HA=H-AA+3*sI,fI=Y-$+3*sI,Eg=d-z+3*sI,ig=l-LA+3*sI,pI=H-1+4*sI,Dg=Y-1+4*sI,zI=d-1+4*sI,_I=l-1+4*sI,XI=c&255,$A=y&255,kI=R&255,vI=S&255;let nI=.6-H*H-Y*Y-d*d-l*l;if(nI<0)s=0;else{const kA=XI+A[$A+A[kI+A[vI]]];nI*=nI,s=nI*nI*(I[kA]*H+g[kA]*Y+Q[kA]*d+C[kA]*l)}let eA=.6-NA*NA-MA*MA-xA*xA-aA*aA;if(eA<0)t=0;else{const kA=XI+W+A[$A+T+A[kI+j+A[vI+EA]]];eA*=eA,t=eA*eA*(I[kA]*NA+g[kA]*MA+Q[kA]*xA+C[kA]*aA)}let og=.6-DA*DA-JA*JA-jI*jI-_A*_A;if(og<0)w=0;else{const kA=XI+wA+A[$A+iA+A[kI+IA+A[vI+BA]]];og*=og,w=og*og*(I[kA]*DA+g[kA]*JA+Q[kA]*jI+C[kA]*_A)}let lg=.6-HA*HA-fI*fI-Eg*Eg-ig*ig;if(lg<0)a=0;else{const kA=XI+AA+A[$A+$+A[kI+z+A[vI+LA]]];lg*=lg,a=lg*lg*(I[kA]*HA+g[kA]*fI+Q[kA]*Eg+C[kA]*ig)}let sg=.6-pI*pI-Dg*Dg-zI*zI-_I*_I;if(sg<0)G=0;else{const kA=XI+1+A[$A+1+A[kI+1+A[vI+1]]];sg*=sg,G=sg*sg*(I[kA]*pI+g[kA]*Dg+Q[kA]*zI+C[kA]*_I)}return 27*(s+t+w+a+G)}}function gc(B){const A=new Uint8Array(512);for(let I=0;I<512/2;I++)A[I]=I;for(let I=0;I<512/2-1;I++){const g=I+~~(B()*(256-I)),Q=A[I];A[I]=A[g],A[g]=Q}for(let I=256;I<512;I++)A[I]=A[I-256];return A}const yD="needle:project",ot="remote://";function bB(B,A,I){if(!B.startsWith(ot))return B;const g=B.substring(ot.length),Q=g.indexOf("/");if(Q<=0)return null;const C=g.substring(0,Q),i=g.substring(Q),E=I?.[C]??A?.[C];return E===void 0?null:(E.endsWith("/")?E.substring(0,E.length-1):E)+i}function st(B){return!!B&&typeof B=="object"&&typeof B[yD]=="string"}function Qc(B,A=console.warn){for(const I of B)A(`[needle:project] ${I.arc}: ${I.message}`)}class Bc{constructor(A){this.scene=A,this.scopes=new Map,this.targets=new WeakMap,this.ready=Promise.resolve()}registerReference(A,I,g=[],Q){const C=new Map,i={root:new WeakRef(I),nodes:C,elements:[]},E=(D,o)=>{const s=new WeakRef(D),t={get name(){return s.deref()?.name},get userData(){return s.deref()?.userData},children:D.children?.filter(r=>!Q?.has(r)).map(r=>E(r,[...o,r.name??""]))};C.set(t,s);const w=D.userData?.["needle-id"],a=$i(D.name),G=D===I?void 0:{type:"node",path:d0(o),...typeof w=="string"?{id:w}:{},...a?{anchor:a}:{}};return(D===I||G)&&this.targets.set(D,{ref:A,...G?{address:G}:{}}),t};I.isObject3D?i.graph=E(I,[]):this.targets.set(I,{ref:A});for(const D of g){const o=D,s=o.isMaterial?"material":o.isTexture?"texture":o.isAnimationClip?"animation":null;if(!s)continue;i.elements.push(new WeakRef(D));const t=o.userData?.["needle-id"];typeof t=="string"&&this.targets.set(D,{ref:A,address:{type:s,id:t,name:o.name}})}this.scopes.set(A,i)}resolve(A){const I=this.scopes.get(A.ref);let g=A.ref==="$scene"?this.scene:I?.root.deref()??null;if(A.address){const Q=A.address;if(Q.type&&Q.type!=="node"){const C=I?.elements.flatMap(i=>{const E=i.deref(),D=Q.type==="material"?E?.isMaterial:Q.type==="texture"?E?.isTexture:Q.type==="animation"?E?.isAnimationClip:!1;return E&&D?[E]:[]})??[];g=aE(Q,C)}else if(I?.graph){const C=yQ(Q,I.graph);g=C?I.nodes.get(C)?.deref()??null:null,g&&!this.inScene(g)&&(g=null)}else g=A.ref==="$scene"?yQ(Q,this.scene):null}if(!g||g.isObject3D&&!this.inScene(g))return null;if(A.pathPrefix){const Q=l0(A.pathPrefix.replace(/\/$/,""));for(const C of Q){if(C==="components")g=g.userData?.components??null;else if(Array.isArray(g)&&C.startsWith("guid:")){const i=C.slice(5);g=g.find(E=>(E.needle_editor_guid||E.guid)===i)??null}else return null;if(!g)return null}}return g}targetFor(A){if(A===this.scene)return{ref:"$scene"};const I=A,g=I.needle_editor_guid||I.guid;if(I.gameObject&&g){const C=this.targetFor(I.gameObject);return C?{...C,pathPrefix:`components/guid:${g}/`}:null}const Q=this.targets.get(A);return Q&&this.resolve(Q)===A?structuredClone(Q):null}inScene(A){for(let I=A;I;I=I.parent)if(I===this.scene)return!0;return!1}}const tt=new WeakMap;let GD=0;function Cc(){GD++;let B=!1;return{dispose(){B||(B=!0,GD--)}}}function Ec(B){return GD?new Bc(B):void 0}function ic(B){return tt.get(B)}function Dc(B,A){tt.set(B,A)}function oc(B,A,I,g){const Q=w=>I?.resolveAssetUrl?{resolveUrl:a=>I.resolveAssetUrl(w,a)}:void 0,C=new Map,i=()=>{if(!I?.onProgress)return;let w=0,a=0;for(const G of C.values())w+=G.loaded,a+=G.total;I.onProgress(w,a)},E=new Map,D=w=>{let a=E.get(w);if(!a){const G=A.assets?.[w]?.src;if(typeof G!="string")a=Promise.resolve(null);else if(I?.resolveAsset)a=I.resolveAsset(w,G).catch(r=>(g("reference",`asset "${w}" failed to resolve: ${r}`),null));else if(bB(G,A.remotes,I?.remotes)===null)g("reference",`asset "${w}" src "${G}" names a remote that is not in the document's remotes table \u2014 the asset is skipped`),a=Promise.resolve(null);else{const r=bB(G,A.remotes,I?.remotes),c=I?.baseUrl?new URL(r,I.baseUrl).href:r;a=fetch(c).then(y=>{if(!y.ok)throw new Error(`${y.status} ${y.statusText}`);const R=y.headers.get("Content-Type")??"";if(R.includes("text/html"))throw new Error(`the server answered with an HTML page (Content-Type: ${R}) \u2014 the file probably does not exist there. Documents record srcs AS SAVED: a dev-server url (e.g. localhost) does not exist on a deployment.`);if(!y.body||!I?.onProgress)return y.arrayBuffer();const S={loaded:0,total:Number(y.headers.get("Content-Length"))||0};return C.set(w,S),i(),Fc(y.body,n=>{S.loaded=n,S.total<n&&(S.total=n),i()})}).catch(y=>(g("reference",`asset "${w}" failed to load from ${c}: ${y}`),null))}E.set(w,a)}return a},o=new Map,s=(w,a="over")=>{let G=o.get(w);return G||(G=(async()=>{if(!A.assets?.[w])return g(a,`asset "${w}" has no entry in the document's assets map`),null;const r=await D(w);if(r===null)return null;const c=A.assets[w].src??w,y=bB(c,A.remotes,I?.remotes)??c,R=await B.parse(r,y,Q(w))??null;return R||g(a,`asset "${w}" data loaded but PARSING failed (see console for the parser error)`),R&&(R.parser?.json&&Ts(R.parser.json,R.parser.associations,R.scenes),R.scene&&B.parkTemplate(R.scene)),R})(),o.set(w,G)),G},t=new Map;for(const w of A.references??[]){if(!w||typeof w.id!="string"||typeof w.asset!="string"||!w.address)continue;if(t.has(w.id)){g("reference",`duplicate reference id "${w.id}" \u2014 entry skipped`);continue}const a=w.address;t.set(w.id,(async()=>{if(a.type==="material"){const G=await s(w.asset);if(!G)return null;const r=await yt(G,a);return r||g("reference",`entity "${w.id}": material did not resolve in asset "${w.asset}" (${JSON.stringify(a)})`),r}if(a.type==="hdr"){const G=A.assets?.[w.asset]?.src;if(typeof G!="string")return g("reference",`entity "${w.id}": unknown asset "${w.asset}"`),null;let r,c;if(I?.resolveAsset){const N=await I.resolveAsset(w.asset,G).catch(M=>(g("reference",`entity "${w.id}": asset "${w.asset}" failed to resolve: ${M}`),null));if(N===null)return null;if(typeof N=="string")r=N;else{const M=URL.createObjectURL(new Blob([N]));r=M,c=()=>URL.revokeObjectURL(M)}}else{const N=bB(G,A.remotes,I?.remotes);if(N===null)return g("reference",`entity "${w.id}": src "${G}" names a remote that is not in the document's remotes table \u2014 the entity is skipped`),null;r=I?.baseUrl?new URL(N,I.baseUrl).href:N}const y=G.split(/[?#]/)[0],R=y.substring(y.lastIndexOf("/")+1)||void 0,S=/pmrem/i.test(G)?"pmrem":void 0,n=await B.loadEnvironment(r,{format:S,name:R}).finally(()=>c?.());return n||g("reference",`entity "${w.id}": environment texture failed to load from ${G}`),n}return g("reference",`entity "${w.id}": element type "${a.type??"?"}" is not instantiable yet`),null})())}return{loadParsedAsset:s,entities:t}}async function sc(B,A,I){if(!st(A))throw new TypeError(`evaluateProjectDocument: not a project document (missing "${yD}")`);const g=I?.parent??B.scene,Q=Ec(B.scene),C=new Map,i=new Map,E=[],D=(G,r)=>{E.push({arc:G,message:r})},{loadParsedAsset:o,entities:s}=oc(B,A,I,D),t=[],w=new Set;for(const G of A.references??[]){if(!G||typeof G.id!="string"||typeof G.asset!="string"){D("reference",`invalid reference entry: ${JSON.stringify(G)}`);continue}if(G.address)continue;if(w.has(G.id)){D("reference",`duplicate reference id "${G.id}" \u2014 entry skipped`);continue}if(I?.referenceBindings){const c=I.referenceBindings.get(G.id);if(!c){D("reference",`reference "${G.id}": no existing model binding supplied`);continue}if(!A.assets?.[G.asset]){D("reference",`reference "${G.id}": unknown asset "${G.asset}"`);continue}w.add(G.id),C.set(G.id,c),i.set(G.id,{scene:c});continue}const r=await o(G.asset,"reference");if(r){if(!r.scene){D("reference",`reference "${G.id}": asset "${G.asset}" did not produce a scene`);continue}w.add(G.id),t.push({ref:G,model:r})}}const a=new Promise(G=>{B.schedule(()=>{const r=[];for(const{ref:S,model:n}of t){const N=n.scene,M=B.instantiate(N,S.id);if(!M){D("reference",`reference "${S.id}": instantiating asset "${S.asset}" failed`);continue}C.set(S.id,M),i.set(S.id,{...n,scene:M});const J=n.parser?.associations;if(J){const L=(H,Y)=>{const d=J.get(H);d!==void 0&&J.set(Y,d);const l=Math.min(H.children.length,Y.children.length);for(let p=0;p<l;p++)L(H.children[p],Y.children[p])};L(N,M)}r.push(M)}for(const S of r)g.add(S),B.activateInstance(S);for(const S of A.references??[]){const n=S?.id?C.get(S.id):void 0;if(n&&S.parent){const N=C.get(S.parent.ref);if(!N)D("reference",`reference "${S.id}": parent ref "${S.parent.ref}" not placed \u2014 staying at the composition root`);else{const M=S.parent.address?yQ(S.parent.address,N):N;M?M.add(n):D("reference",`reference "${S.id}": parent address did not resolve in "${S.parent.ref}" \u2014 staying at the composition root`)}}}const c=new Set;for(const{model:S}of t)S.scene&&!c.has(S.scene)&&(c.add(S.scene),B.disposeTemplate(S.scene));cc(B,A,g,C,D,I?.baseUrl);const y=new Map;for(const S of A.overs??[])for(const n of[S?.target,S?.value])if(n?.address&&(n.ref==="$scene"||n.ref!==void 0&&I?.referenceBindings?.has(n.ref))){const N=S?.target?.path==="parent"?g:B.scene;y.set(n,$Q(n,g,C,N))}const R=Gc(B,A,g,C,s,D,y);if(Q){const S=new Set(C.values());for(const[n,N]of C){const M=i.get(n);Q.registerReference(n,N,[...M?.parser?.associations?.keys()??[],...M?.animations??[]],S)}}tc(A,g,C,D,y),R.finally(()=>G())})});return Q&&(Q.ready=a.then(async()=>{for(const[G,r]of s){const c=await r;c&&Q.registerReference(G,c)}}),Dc(B.inspectionOwner??B,Q)),{root:g,references:C,models:i,issues:E,completed:a}}function tc(B,A,I,g,Q){const C=(B.overs??[]).filter(E=>E?.target?.path==="parent"),i=E=>{const D=E.value?.index;return typeof D=="number"?D:Number.MAX_SAFE_INTEGER};C.sort((E,D)=>i(E)-i(D));for(const E of C){const D=Q.has(E.target)?Q.get(E.target):$Q(E.target,A,I);if(!D){g("over",`parent over target did not resolve: ${JSON.stringify(E.target)}`);continue}const o=E.value;if(!o||typeof o!="object"){g("over",`parent over value must be a node reference: ${JSON.stringify(E.value)}`);continue}let s=null;if(o.ref===void 0||o.ref==="$scene")s=Q.has(o)?Q.get(o)??null:o.address?yQ(o.address,A):A;else{const t=I.get(o.ref);t&&(s=o.address?yQ(o.address,t):t)}if(!s){g("over",`parent over did not resolve its new parent \u2014 staying in place: ${JSON.stringify(E.value)}`);continue}if(s===D||wc(D,s)){g("over",`parent over would create a cycle \u2014 ignored: ${JSON.stringify(E.target)}`);continue}s.add(D)}}function wc(B,A){for(let I=A.parent;I;I=I.parent)if(I===B)return!0;return!1}function $Q(B,A,I,g){const Q=B?.ref==="$scene"?g??A:B?.ref!==void 0?I.get(B.ref):A;return Q?B?.address?yQ(B.address,Q):Q:null}const ac=/^([A-Za-z_][A-Za-z0-9_-]*):([\s\S]*)$/;function SD(B){return B.split("/").filter(A=>A.length>0).map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function ec(B,A,I,g,Q){if(A?.isObject3D===!0&&I==="components")return B.getComponents?.(A)??[];if(!Array.isArray(A))return A?.[I];if(/^\d+$/.test(I))return A[Number(I)];const C=ac.exec(I);if(!C){Q(`"${I}" is neither an index nor a <field>:<value> qualifier`);return}const[,i,E]=C,D=A.filter(o=>!o||typeof o!="object"?!1:i==="type"?B.matchesComponentType?.(o,E)??o.constructor?.name===E:i==="guid"?B.matchesComponentGuid?.(o,E)??o.guid===E:o[i]===E);if(D.length===1)return D[0];if(D.length>1){Q(`"${I}" matched ${D.length} elements \u2014 the document must name one unambiguously`);return}if(i==="guid"&&g&&B.deriveComponentGuid){const o=B.deriveComponentGuid(g,E);return A.find(s=>s?.guid===o)}}function wt(B,A,I,g,Q){const C=[A];let i=A;for(let E=0;E<I.length-1;E++){const D=ec(B,i,I[E],g,o=>Q(`at "${I[E]}": ${o}`));if(!D||typeof D!="object")return Q(`does not resolve at "${I[E]}"`),null;i=D,C.push(D)}return{container:i,chain:C}}function rD(B){const A=[];return B.traverse(I=>{const g=I.material;for(const Q of Array.isArray(g)?g:g?[g]:[])Q&&typeof Q=="object"&&!A.includes(Q)&&A.push(Q)}),A}function hc(B,A,I){const g=rD(B);for(const C of I??[])for(const i of rD(C))g.includes(i)||g.push(i);const Q=aE(A,g);return Q?{material:Q}:null}function cc(B,A,I,g,Q,C){const i=A.defs??[];if(!i.length)return;const E=yc(B,I,C);for(const D of i)at(D,I,g,Q,E)}function yc(B,A,I){return B.createDefContext?.(A,I)??{scene:B.scene,createNode:()=>B.createNode()}}function at(B,A,I,g,Q){{let C=$Q(B?.target,A,I,Q.scene);if(!C){g("def",`def target did not resolve: ${JSON.stringify(B?.target)}`);return}if(B.create){const i=typeof B.create.name=="string"?C.children?.find(D=>D?.name===B.create.name):void 0,E=i??Q.createNode();i||(typeof B.create.name=="string"&&(E.name=B.create.name),C.add(E)),Array.isArray(B.create.position)&&B.create.position.length>=3&&E.position.fromArray(B.create.position),Array.isArray(B.create.quaternion)&&B.create.quaternion.length>=4&&E.quaternion.fromArray(B.create.quaternion),Array.isArray(B.create.scale)&&B.create.scale.length>=3&&E.scale.fromArray(B.create.scale),C=E}for(const i of B.components??[]){if(!i||typeof i.name!="string"){g("def",`invalid component entry: ${JSON.stringify(i)}`);continue}const E=FD(i,A,I,g);Q.applyComponent?Q.applyComponent(C,E,g):g("def",`unsupported component type "${i.name}"`)}}}function FD(B,A,I,g){if(!B||typeof B!="object")return B;if(Array.isArray(B)){let i=null;for(let E=0;E<B.length;E++){const D=FD(B[E],A,I,g);D!==B[E]&&(i||(i=[...B]),i[E]=D)}return i??B}const Q=B;if(typeof Q.ref=="string"&&I.has(Q.ref)){const i=$Q(B,A,I);if(!i){g("def",`node reference did not resolve: ${JSON.stringify(B)}`);return}return i}let C=null;for(const[i,E]of Object.entries(B)){const D=FD(E,A,I,g);D!==E&&(C||(C={...B}),C[i]=D)}return C??B}async function Gc(B,A,I,g,Q,C,i){const E=et(Q);E.sceneTargets=i;for(const D of A.overs??[])ht(B,D,I,g,E,C);await E.settled()}function et(B){const A=[],I=new Map;return{entities:B,deactivatedRoots:new Map,chainOnEntity(g,Q){const C=B.get(g),i=I.get(g)??Promise.resolve(),E=Promise.all([C,i]).then(([D])=>Q(D));I.set(g,E),A.push(E)},settled:()=>Promise.all(A).then(()=>{})}}function ht(B,A,I,g,Q,C){const{entities:i,deactivatedRoots:E,chainOnEntity:D}=Q;{const o=A?.target;if(!o||typeof o.path!="string"||o.path.length===0){C("over",`over without a target path: ${JSON.stringify(A)}`);return}if(o.path==="parent")return;if(o.ref!==void 0&&i.has(o.ref)){const a=o.ref,G=o.path,r=A.value,c=o;D(a,y=>{y&&JE(B,y,G,r,C,c)});return}let s=null,t=null;if(o.ref==="$scene")s=Q.sceneTargets?.has(o)?Q.sceneTargets.get(o)??null:o.address?yQ(o.address,B.scene):B.scene;else if(o.ref==="$renderer"){if(o.address){C("over",`"$renderer" targets take no address: ${JSON.stringify(o)}`);return}s=B.renderer}else if(o.address?.type==="material"){const a=o.ref!==void 0?g.get(o.ref):I;s=a?hc(a,o.address,E.get(o.ref))?.material??null:null}else t=Q.sceneTargets?.has(o)?Q.sceneTargets.get(o)??null:$Q(o,I,g),s=t;if(!s){C("over",`over target did not resolve: ${JSON.stringify(o)}`);return}const w=SD(o.path);if(w[w.length-1]==="active"){if(A.value!==!1)return;const a=w.length===1?s:wt(B,s,w,o.ref,G=>C("over",`path "${o.path}" ${G}: ${JSON.stringify(o)}`))?.container;if(a){if(a.isObject3D){const G=E.get(o.ref)??[];G.push(a),E.set(o.ref,G)}Rc(B,a,t,C)}return}if(ct(A.value)&&(A.value.ref==="$scene"||g.has(A.value.ref))){const a=Q.sceneTargets?.has(A.value)?Q.sceneTargets.get(A.value):$Q(A.value,I,g,B.scene);if(!a){C("over",`node-reference value did not resolve: ${JSON.stringify(A.value)} for ${JSON.stringify(o)}`);return}JE(B,s,o.path,a,C,o);return}if(ct(A.value)){const a=A.value.ref;if(!i.get(a)){C("over",`value references unknown entity "${a}": ${JSON.stringify(o)}`);return}const G=s,r=o.path,c=o;D(a,y=>{if(!y){C("over",`entity "${a}" was not instantiated \u2014 assignment skipped: ${JSON.stringify(c)}`);return}JE(B,G,r,y,C,c)});return}if(Sc(A.value)){C("over",`reference-valued over not supported (skipped, not raw-assigned): ${JSON.stringify(o)}`);return}JE(B,s,o.path,A.value,C,o)}}function ct(B){return!!B&&typeof B=="object"&&typeof B.ref=="string"}function Sc(B){if(!B||typeof B!="object")return!1;const A=B;return typeof A.asset=="string"||A.node!==void 0||typeof A.guid=="string"}function rc(B,A){const I=B.scene;if(!I)return null;const g=rD(I);return aE(A,g)??(g.length===1?g[0]:null)}async function yt(B,A){const I=rc(B,A);if(I)return I;const g=B.parser,Q=g?.json?.materials?.length??0;if(!Q||!g?.getDependency)return null;const C=[];for(let i=0;i<Q;i++){const E=await g.getDependency("material",i).catch(()=>null);E&&typeof E=="object"&&C.push(E)}return aE(A,C)??(C.length===1?C[0]:null)}async function Fc(B,A){const I=B.getReader(),g=[];let Q=0;for(;;){const{done:E,value:D}=await I.read();if(E)break;D&&(g.push(D),Q+=D.byteLength,A(Q))}const C=new Uint8Array(Q);let i=0;for(const E of g)C.set(E,i),i+=E.byteLength;return C.buffer}function Rc(B,A,I,g){A.isObject3D?A.removeFromParent():B.removeComponent?B.removeComponent(A,I):g("over","component deactivation is not supported by this host")}function JE(B,A,I,g,Q,C){const i=SD(I),E=wt(B,A,i,C.ref,a=>Q("over",`path "${I}" ${a}: ${JSON.stringify(C)}`));if(!E)return;const{container:D,chain:o}=E,s=D,t=i[i.length-1],w=s[t];Array.isArray(g)&&w&&typeof w=="object"&&typeof w.fromArray=="function"?w.fromArray(g):Array.isArray(g)&&g.length===3&&t==="background"&&s.isScene===!0?s[t]=B.createColor(g):s[t]=g;for(const a of o){const G=a;(G.isMaterial===!0||G.isTexture===!0)&&(G.needsUpdate=!0)}}class kc{constructor(A,I){if(this._retries=0,!Number.isInteger(A)||A<0)throw new Error("Base must be a positive integer or zero");if(I!==void 0&&(!Number.isInteger(I)||I<0))throw new Error("ExpMax must be a undefined, a positive integer or zero");this.base=A,this.expMax=I,this.i=0}get retries(){return this._retries}get current(){return this.base*Math.pow(2,this.i)}next(){return this._retries++,this.i=this.expMax===void 0?this.i+1:Math.min(this.i+1,this.expMax),this.current}reset(){this._retries=0,this.i=0}}var nA;(function(B){B.open="open",B.close="close",B.error="error",B.message="message",B.retry="retry",B.reconnect="reconnect"})(nA||(nA={}));class Gt{constructor(A,I,g){var Q,C,i,E,D,o,s,t,w,a,G,r,c,y,R;this._closedByUser=!1,this.handleOpenEvent=S=>this.handleEvent(nA.open,S),this.handleErrorEvent=S=>this.handleEvent(nA.error,S),this.handleCloseEvent=S=>this.handleEvent(nA.close,S),this.handleMessageEvent=S=>this.handleEvent(nA.message,S),this._url=A,this._protocols=I,this._options={buffer:g?.buffer,retry:{maxRetries:(Q=g?.retry)===null||Q===void 0?void 0:Q.maxRetries,instantReconnect:(C=g?.retry)===null||C===void 0?void 0:C.instantReconnect,backoff:(i=g?.retry)===null||i===void 0?void 0:i.backoff},listeners:{open:[...(D=(E=g?.listeners)===null||E===void 0?void 0:E.open)!==null&&D!==void 0?D:[]],close:[...(s=(o=g?.listeners)===null||o===void 0?void 0:o.close)!==null&&s!==void 0?s:[]],error:[...(w=(t=g?.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[]],message:[...(G=(a=g?.listeners)===null||a===void 0?void 0:a.message)!==null&&G!==void 0?G:[]],retry:[...(c=(r=g?.listeners)===null||r===void 0?void 0:r.retry)!==null&&c!==void 0?c:[]],reconnect:[...(R=(y=g?.listeners)===null||y===void 0?void 0:y.reconnect)!==null&&R!==void 0?R:[]]}},this._underlyingWebsocket=this.tryConnect()}get url(){return this._url}get protocols(){return this._protocols}get buffer(){return this._options.buffer}get maxRetries(){return this._options.retry.maxRetries}get instantReconnect(){return this._options.retry.instantReconnect}get backoff(){return this._options.retry.backoff}get closedByUser(){return this._closedByUser}get lastConnection(){return this._lastConnection}get underlyingWebsocket(){return this._underlyingWebsocket}get readyState(){return this._underlyingWebsocket.readyState}get bufferedAmount(){return this._underlyingWebsocket.bufferedAmount}get extensions(){return this._underlyingWebsocket.extensions}get binaryType(){return this._underlyingWebsocket.binaryType}set binaryType(A){this._underlyingWebsocket.binaryType=A}send(A){this.closedByUser||(this._underlyingWebsocket.readyState===this._underlyingWebsocket.OPEN?this._underlyingWebsocket.send(A):this.buffer!==void 0&&this.buffer.add(A))}close(A,I){this.cancelScheduledConnectionRetry(),this._closedByUser=!0,this._underlyingWebsocket.close(A,I)}addEventListener(A,I,g){this._options.listeners[A].push({listener:I,options:g})}removeEventListener(A,I,g){const Q=C=>C.listener!==I||C.options!==g;this._options.listeners[A]=this._options.listeners[A].filter(Q)}tryConnect(){return this._underlyingWebsocket=new WebSocket(this.url,this.protocols),this._underlyingWebsocket.addEventListener(nA.open,this.handleOpenEvent),this._underlyingWebsocket.addEventListener(nA.close,this.handleCloseEvent),this._underlyingWebsocket.addEventListener(nA.error,this.handleErrorEvent),this._underlyingWebsocket.addEventListener(nA.message,this.handleMessageEvent),this._underlyingWebsocket}clearWebsocket(){this._underlyingWebsocket.removeEventListener(nA.open,this.handleOpenEvent),this._underlyingWebsocket.removeEventListener(nA.close,this.handleCloseEvent),this._underlyingWebsocket.removeEventListener(nA.error,this.handleErrorEvent),this._underlyingWebsocket.removeEventListener(nA.message,this.handleMessageEvent),this._underlyingWebsocket.close()}dispatchEvent(A,I){const g=this._options.listeners[A],Q=[];g.forEach(({listener:C,options:i})=>{C(this,I),(i===void 0||i.once===void 0||!i.once)&&Q.push({listener:C,options:i})}),this._options.listeners[A]=Q}handleEvent(A,I){switch(A){case nA.close:this.dispatchEvent(A,I),this.scheduleConnectionRetryIfNeeded();break;case nA.open:if(this.backoff!==void 0&&this._lastConnection!==void 0){const g={retries:this.backoff.retries,lastConnection:new Date(this._lastConnection)},Q=new CustomEvent(nA.reconnect,{detail:g});this.dispatchEvent(nA.reconnect,Q),this.backoff.reset()}this._lastConnection=new Date,this.dispatchEvent(A,I),this.sendBufferedData();break;case nA.retry:this.dispatchEvent(A,I),this.clearWebsocket(),this.tryConnect();break;default:this.dispatchEvent(A,I);break}}sendBufferedData(){if(this.buffer!==void 0)for(let A=this.buffer.read();A!==void 0;A=this.buffer.read())this.send(A)}scheduleConnectionRetryIfNeeded(){if(this.closedByUser||this.backoff===void 0)return;const A=g=>{const Q=new CustomEvent(nA.retry,{detail:g});this.handleEvent(nA.retry,Q)},I={backoff:this._options.retry.instantReconnect===!0?0:this.backoff.next(),retries:this._options.retry.instantReconnect===!0?0:this.backoff.retries,lastConnection:this._lastConnection};(this._options.retry.maxRetries===void 0||I.retries<=this._options.retry.maxRetries)&&(this.retryTimeout=globalThis.setTimeout(()=>A(I),I.backoff))}cancelScheduledConnectionRetry(){globalThis.clearTimeout(this.retryTimeout)}}class nc{constructor(A){this._url=A}get url(){return this._url}withProtocols(A){return this._protocols=A,this}get protocols(){return this._protocols}withMaxRetries(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{maxRetries:A})}),this}get maxRetries(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.maxRetries}withInstantReconnect(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{instantReconnect:A})}),this}get instantReconnect(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.instantReconnect}withBackoff(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{backoff:A})}),this}get backoff(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.backoff}withBuffer(A){return this._options=Object.assign(Object.assign({},this._options),{buffer:A}),this}get buffer(){var A;return(A=this._options)===null||A===void 0?void 0:A.buffer}onOpen(A,I){return this.addListener(nA.open,A,I),this}onClose(A,I){return this.addListener(nA.close,A,I),this}onError(A,I){return this.addListener(nA.error,A,I),this}onMessage(A,I){return this.addListener(nA.message,A,I),this}onRetry(A,I){return this.addListener(nA.retry,A,I),this}onReconnect(A,I){return this.addListener(nA.reconnect,A,I),this}build(){return new Gt(this._url,this._protocols,this._options)}addListener(A,I,g){var Q,C,i,E,D,o,s,t,w,a,G,r,c,y,R,S,n,N,M,J,L;return this._options=Object.assign(Object.assign({},this._options),{listeners:{open:(i=(C=(Q=this._options)===null||Q===void 0?void 0:Q.listeners)===null||C===void 0?void 0:C.open)!==null&&i!==void 0?i:[],close:(o=(D=(E=this._options)===null||E===void 0?void 0:E.listeners)===null||D===void 0?void 0:D.close)!==null&&o!==void 0?o:[],error:(w=(t=(s=this._options)===null||s===void 0?void 0:s.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[],message:(r=(G=(a=this._options)===null||a===void 0?void 0:a.listeners)===null||G===void 0?void 0:G.message)!==null&&r!==void 0?r:[],retry:(R=(y=(c=this._options)===null||c===void 0?void 0:c.listeners)===null||y===void 0?void 0:y.retry)!==null&&R!==void 0?R:[],reconnect:(N=(n=(S=this._options)===null||S===void 0?void 0:S.listeners)===null||n===void 0?void 0:n.reconnect)!==null&&N!==void 0?N:[],[A]:[...(L=(J=(M=this._options)===null||M===void 0?void 0:M.listeners)===null||J===void 0?void 0:J[A])!==null&&L!==void 0?L:[],{listener:I,options:g}]}}),this}}const Nc=Object.freeze(Object.defineProperty({__proto__:null,ExponentialBackoff:kc,Websocket:Gt,WebsocketBuilder:nc,get WebsocketEvent(){return nA}},Symbol.toStringTag,{value:"Module"}));function RD(B){return B&&B.__esModule&&Object.prototype.hasOwnProperty.call(B,"default")?B.default:B}var St={exports:{}},rt;function Ft(){return rt||(rt=1,function(B){var A={};A.useBlobBuilder=function(){try{return new Blob([]),!1}catch{return!0}}(),A.useArrayBufferView=!A.useBlobBuilder&&function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}}(),B.exports.binaryFeatures=A;var I=B.exports.BlobBuilder;typeof window<"u"&&(I=B.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder);function g(){this._pieces=[],this._parts=[]}g.prototype.append=function(Q){typeof Q=="number"?this._pieces.push(Q):(this.flush(),this._parts.push(Q))},g.prototype.flush=function(){if(this._pieces.length>0){var Q=new Uint8Array(this._pieces);A.useArrayBufferView||(Q=Q.buffer),this._parts.push(Q),this._pieces=[]}},g.prototype.getBuffer=function(){if(this.flush(),A.useBlobBuilder){for(var Q=new I,C=0,i=this._parts.length;C<i;C++)Q.append(this._parts[C]);return Q.getBlob()}else return new Blob(this._parts)},B.exports.BufferBuilder=g}(St)),St.exports}var kD,Rt;function Mc(){if(Rt)return kD;Rt=1;var B=Ft().BufferBuilder,A=Ft().binaryFeatures,I={unpack:function(E){var D=new g(E);return D.unpack()},pack:function(E){var D=new Q;D.pack(E);var o=D.getBuffer();return o}};kD=I;function g(E){this.index=0,this.dataBuffer=E,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}g.prototype.unpack=function(){var E=this.unpack_uint8();if(E<128)return E;if((E^224)<32)return(E^224)-32;var D;if((D=E^160)<=15)return this.unpack_raw(D);if((D=E^176)<=15)return this.unpack_string(D);if((D=E^144)<=15)return this.unpack_array(D);if((D=E^128)<=15)return this.unpack_map(D);switch(E){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:return;case 213:return;case 214:return;case 215:return;case 216:return D=this.unpack_uint16(),this.unpack_string(D);case 217:return D=this.unpack_uint32(),this.unpack_string(D);case 218:return D=this.unpack_uint16(),this.unpack_raw(D);case 219:return D=this.unpack_uint32(),this.unpack_raw(D);case 220:return D=this.unpack_uint16(),this.unpack_array(D);case 221:return D=this.unpack_uint32(),this.unpack_array(D);case 222:return D=this.unpack_uint16(),this.unpack_map(D);case 223:return D=this.unpack_uint32(),this.unpack_map(D)}},g.prototype.unpack_uint8=function(){var E=this.dataView[this.index]&255;return this.index++,E},g.prototype.unpack_uint16=function(){var E=this.read(2),D=(E[0]&255)*256+(E[1]&255);return this.index+=2,D},g.prototype.unpack_uint32=function(){var E=this.read(4),D=((E[0]*256+E[1])*256+E[2])*256+E[3];return this.index+=4,D},g.prototype.unpack_uint64=function(){var E=this.read(8),D=((((((E[0]*256+E[1])*256+E[2])*256+E[3])*256+E[4])*256+E[5])*256+E[6])*256+E[7];return this.index+=8,D},g.prototype.unpack_int8=function(){var E=this.unpack_uint8();return E<128?E:E-256},g.prototype.unpack_int16=function(){var E=this.unpack_uint16();return E<32768?E:E-65536},g.prototype.unpack_int32=function(){var E=this.unpack_uint32();return E<Math.pow(2,31)?E:E-Math.pow(2,32)},g.prototype.unpack_int64=function(){var E=this.unpack_uint64();return E<Math.pow(2,63)?E:E-Math.pow(2,64)},g.prototype.unpack_raw=function(E){if(this.length<this.index+E)throw new Error("BinaryPackFailure: index is out of range "+this.index+" "+E+" "+this.length);var D=this.dataBuffer.slice(this.index,this.index+E);return this.index+=E,D},g.prototype.unpack_string=function(E){for(var D=this.read(E),o=0,s="",t,w;o<E;)t=D[o],t<128?(s+=String.fromCharCode(t),o++):(t^192)<32?(w=(t^192)<<6|D[o+1]&63,s+=String.fromCharCode(w),o+=2):(w=(t&15)<<12|(D[o+1]&63)<<6|D[o+2]&63,s+=String.fromCharCode(w),o+=3);return this.index+=E,s},g.prototype.unpack_array=function(E){for(var D=new Array(E),o=0;o<E;o++)D[o]=this.unpack();return D},g.prototype.unpack_map=function(E){for(var D={},o=0;o<E;o++){var s=this.unpack(),t=this.unpack();D[s]=t}return D},g.prototype.unpack_float=function(){var E=this.unpack_uint32(),D=E>>31,o=(E>>23&255)-127,s=E&8388607|8388608;return(D===0?1:-1)*s*Math.pow(2,o-23)},g.prototype.unpack_double=function(){var E=this.unpack_uint32(),D=this.unpack_uint32(),o=E>>31,s=(E>>20&2047)-1023,t=E&1048575|1048576,w=t*Math.pow(2,s-20)+D*Math.pow(2,s-52);return(o===0?1:-1)*w},g.prototype.read=function(E){var D=this.index;if(D+E<=this.length)return this.dataView.subarray(D,D+E);throw new Error("BinaryPackFailure: read index out of range")};function Q(){this.bufferBuilder=new B}Q.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},Q.prototype.pack=function(E){var D=typeof E;if(D==="string")this.pack_string(E);else if(D==="number")Math.floor(E)===E?this.pack_integer(E):this.pack_double(E);else if(D==="boolean")E===!0?this.bufferBuilder.append(195):E===!1&&this.bufferBuilder.append(194);else if(D==="undefined")this.bufferBuilder.append(192);else if(D==="object")if(E===null)this.bufferBuilder.append(192);else{var o=E.constructor;if(o==Array)this.pack_array(E);else if(o==Blob||o==File||E instanceof Blob||E instanceof File)this.pack_bin(E);else if(o==ArrayBuffer)A.useArrayBufferView?this.pack_bin(new Uint8Array(E)):this.pack_bin(E);else if("BYTES_PER_ELEMENT"in E)A.useArrayBufferView?this.pack_bin(new Uint8Array(E.buffer)):this.pack_bin(E.buffer);else if(o==Object||o.toString().startsWith("class"))this.pack_object(E);else if(o==Date)this.pack_string(E.toString());else if(typeof E.toBinaryPack=="function")this.bufferBuilder.append(E.toBinaryPack());else throw new Error('Type "'+o.toString()+'" not yet supported')}else throw new Error('Type "'+D+'" not yet supported');this.bufferBuilder.flush()},Q.prototype.pack_bin=function(E){var D=E.length||E.byteLength||E.size;if(D<=15)this.pack_uint8(160+D);else if(D<=65535)this.bufferBuilder.append(218),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(219),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(E)},Q.prototype.pack_string=function(E){var D=i(E);if(D<=15)this.pack_uint8(176+D);else if(D<=65535)this.bufferBuilder.append(216),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(217),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(E)},Q.prototype.pack_array=function(E){var D=E.length;if(D<=15)this.pack_uint8(144+D);else if(D<=65535)this.bufferBuilder.append(220),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(221),this.pack_uint32(D);else throw new Error("Invalid length");for(var o=0;o<D;o++)this.pack(E[o])},Q.prototype.pack_integer=function(E){if(E>=-32&&E<=127)this.bufferBuilder.append(E&255);else if(E>=0&&E<=255)this.bufferBuilder.append(204),this.pack_uint8(E);else if(E>=-128&&E<=127)this.bufferBuilder.append(208),this.pack_int8(E);else if(E>=0&&E<=65535)this.bufferBuilder.append(205),this.pack_uint16(E);else if(E>=-32768&&E<=32767)this.bufferBuilder.append(209),this.pack_int16(E);else if(E>=0&&E<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(E);else if(E>=-2147483648&&E<=2147483647)this.bufferBuilder.append(210),this.pack_int32(E);else if(E>=-9223372036854776e3&&E<=9223372036854776e3)this.bufferBuilder.append(211),this.pack_int64(E);else if(E>=0&&E<=18446744073709552e3)this.bufferBuilder.append(207),this.pack_uint64(E);else throw new Error("Invalid integer")},Q.prototype.pack_double=function(E){var D=0;E<0&&(D=1,E=-E);var o=Math.floor(Math.log(E)/Math.LN2),s=E/Math.pow(2,o)-1,t=Math.floor(s*Math.pow(2,52)),w=Math.pow(2,32),a=D<<31|o+1023<<20|t/w&1048575,G=t%w;this.bufferBuilder.append(203),this.pack_int32(a),this.pack_int32(G)},Q.prototype.pack_object=function(E){var D=Object.keys(E),o=D.length;if(o<=15)this.pack_uint8(128+o);else if(o<=65535)this.bufferBuilder.append(222),this.pack_uint16(o);else if(o<=4294967295)this.bufferBuilder.append(223),this.pack_uint32(o);else throw new Error("Invalid length");for(var s in E)E.hasOwnProperty(s)&&(this.pack(s),this.pack(E[s]))},Q.prototype.pack_uint8=function(E){this.bufferBuilder.append(E)},Q.prototype.pack_uint16=function(E){this.bufferBuilder.append(E>>8),this.bufferBuilder.append(E&255)},Q.prototype.pack_uint32=function(E){var D=E&4294967295;this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255)},Q.prototype.pack_uint64=function(E){var D=E/Math.pow(2,32),o=E%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)},Q.prototype.pack_int8=function(E){this.bufferBuilder.append(E&255)},Q.prototype.pack_int16=function(E){this.bufferBuilder.append((E&65280)>>8),this.bufferBuilder.append(E&255)},Q.prototype.pack_int32=function(E){this.bufferBuilder.append(E>>>24&255),this.bufferBuilder.append((E&16711680)>>>16),this.bufferBuilder.append((E&65280)>>>8),this.bufferBuilder.append(E&255)},Q.prototype.pack_int64=function(E){var D=Math.floor(E/Math.pow(2,32)),o=E%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)};function C(E){var D=E.charCodeAt(0);return D<=2047?"00":D<=65535?"000":D<=2097151?"0000":D<=67108863?"00000":"000000"}function i(E){return E.length>600?new Blob([E]).size:E.replace(/[^\u0000-\u007F]/g,C).length}return kD}var Jc=Mc();const kt=RD(Jc);let nt=!0,Nt=!0;function mB(B,A,I){const g=B.match(A);return g&&g.length>=I&&parseInt(g[I],10)}function AB(B,A,I){if(!B.RTCPeerConnection)return;const g=B.RTCPeerConnection.prototype,Q=g.addEventListener;g.addEventListener=function(i,E){if(i!==A)return Q.apply(this,arguments);const D=o=>{const s=I(o);s&&(E.handleEvent?E.handleEvent(s):E(s))};return this._eventMap=this._eventMap||{},this._eventMap[A]||(this._eventMap[A]=new Map),this._eventMap[A].set(E,D),Q.apply(this,[i,D])};const C=g.removeEventListener;g.removeEventListener=function(i,E){if(i!==A||!this._eventMap||!this._eventMap[A])return C.apply(this,arguments);if(!this._eventMap[A].has(E))return C.apply(this,arguments);const D=this._eventMap[A].get(E);return this._eventMap[A].delete(E),this._eventMap[A].size===0&&delete this._eventMap[A],Object.keys(this._eventMap).length===0&&delete this._eventMap,C.apply(this,[i,D])},Object.defineProperty(g,"on"+A,{get(){return this["_on"+A]},set(i){this["_on"+A]&&(this.removeEventListener(A,this["_on"+A]),delete this["_on"+A]),i&&this.addEventListener(A,this["_on"+A]=i)},enumerable:!0,configurable:!0})}function Uc(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(nt=B,B?"adapter.js logging disabled":"adapter.js logging enabled")}function Lc(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(Nt=!B,"adapter.js deprecation warnings "+(B?"disabled":"enabled"))}function nD(){if(typeof window=="object"){if(nt)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function UE(B,A){Nt&&console.warn(B+" is deprecated, please use "+A+" instead.")}function Hc(B){const A={browser:null,version:null};if(typeof B>"u"||!B.navigator)return A.browser="Not a browser.",A;const{navigator:I}=B;if(I.mozGetUserMedia)A.browser="firefox",A.version=mB(I.userAgent,/Firefox\/(\d+)\./,1);else if(I.webkitGetUserMedia||B.isSecureContext===!1&&B.webkitRTCPeerConnection&&!B.RTCIceGatherer)A.browser="chrome",A.version=mB(I.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(I.mediaDevices&&I.userAgent.match(/Edge\/(\d+).(\d+)$/))A.browser="edge",A.version=mB(I.userAgent,/Edge\/(\d+).(\d+)$/,2);else if(B.RTCPeerConnection&&I.userAgent.match(/AppleWebKit\/(\d+)\./))A.browser="safari",A.version=mB(I.userAgent,/AppleWebKit\/(\d+)\./,1),A.supportsUnifiedPlan=B.RTCRtpTransceiver&&"currentDirection"in B.RTCRtpTransceiver.prototype;else return A.browser="Not a supported browser.",A;return A}function Mt(B){return Object.prototype.toString.call(B)==="[object Object]"}function Jt(B){return Mt(B)?Object.keys(B).reduce(function(A,I){const g=Mt(B[I]),Q=g?Jt(B[I]):B[I],C=g&&!Object.keys(Q).length;return Q===void 0||C?A:Object.assign(A,{[I]:Q})},{}):B}function ND(B,A,I){!A||I.has(A.id)||(I.set(A.id,A),Object.keys(A).forEach(g=>{g.endsWith("Id")?ND(B,B.get(A[g]),I):g.endsWith("Ids")&&A[g].forEach(Q=>{ND(B,B.get(Q),I)})}))}function Ut(B,A,I){const g=I?"outbound-rtp":"inbound-rtp",Q=new Map;if(A===null)return Q;const C=[];return B.forEach(i=>{i.type==="track"&&i.trackIdentifier===A.id&&C.push(i)}),C.forEach(i=>{B.forEach(E=>{E.type===g&&E.trackId===i.id&&ND(B,E,Q)})}),Q}const Lt=nD;function Ht(B,A){const I=B&&B.navigator;if(!I.mediaDevices)return;const g=function(E){if(typeof E!="object"||E.mandatory||E.optional)return E;const D={};return Object.keys(E).forEach(o=>{if(o==="require"||o==="advanced"||o==="mediaSource")return;const s=typeof E[o]=="object"?E[o]:{ideal:E[o]};s.exact!==void 0&&typeof s.exact=="number"&&(s.min=s.max=s.exact);const t=function(w,a){return w?w+a.charAt(0).toUpperCase()+a.slice(1):a==="deviceId"?"sourceId":a};if(s.ideal!==void 0){D.optional=D.optional||[];let w={};typeof s.ideal=="number"?(w[t("min",o)]=s.ideal,D.optional.push(w),w={},w[t("max",o)]=s.ideal,D.optional.push(w)):(w[t("",o)]=s.ideal,D.optional.push(w))}s.exact!==void 0&&typeof s.exact!="number"?(D.mandatory=D.mandatory||{},D.mandatory[t("",o)]=s.exact):["min","max"].forEach(w=>{s[w]!==void 0&&(D.mandatory=D.mandatory||{},D.mandatory[t(w,o)]=s[w])})}),E.advanced&&(D.optional=(D.optional||[]).concat(E.advanced)),D},Q=function(E,D){if(A.version>=61)return D(E);if(E=JSON.parse(JSON.stringify(E)),E&&typeof E.audio=="object"){const o=function(s,t,w){t in s&&!(w in s)&&(s[w]=s[t],delete s[t])};E=JSON.parse(JSON.stringify(E)),o(E.audio,"autoGainControl","googAutoGainControl"),o(E.audio,"noiseSuppression","googNoiseSuppression"),E.audio=g(E.audio)}if(E&&typeof E.video=="object"){let o=E.video.facingMode;o=o&&(typeof o=="object"?o:{ideal:o});const s=A.version<66;if(o&&(o.exact==="user"||o.exact==="environment"||o.ideal==="user"||o.ideal==="environment")&&!(I.mediaDevices.getSupportedConstraints&&I.mediaDevices.getSupportedConstraints().facingMode&&!s)){delete E.video.facingMode;let t;if(o.exact==="environment"||o.ideal==="environment"?t=["back","rear"]:(o.exact==="user"||o.ideal==="user")&&(t=["front"]),t)return I.mediaDevices.enumerateDevices().then(w=>{w=w.filter(G=>G.kind==="videoinput");let a=w.find(G=>t.some(r=>G.label.toLowerCase().includes(r)));return!a&&w.length&&t.includes("back")&&(a=w[w.length-1]),a&&(E.video.deviceId=o.exact?{exact:a.deviceId}:{ideal:a.deviceId}),E.video=g(E.video),Lt("chrome: "+JSON.stringify(E)),D(E)})}E.video=g(E.video)}return Lt("chrome: "+JSON.stringify(E)),D(E)},C=function(E){return A.version>=64?E:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[E.name]||E.name,message:E.message,constraint:E.constraint||E.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},i=function(E,D,o){Q(E,s=>{I.webkitGetUserMedia(s,D,t=>{o&&o(C(t))})})};if(I.getUserMedia=i.bind(I),I.mediaDevices.getUserMedia){const E=I.mediaDevices.getUserMedia.bind(I.mediaDevices);Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(D){return Q(D,o=>E(o).then(s=>{if(o.audio&&!s.getAudioTracks().length||o.video&&!s.getVideoTracks().length)throw s.getTracks().forEach(t=>{t.stop()}),new DOMException("","NotFoundError");return s},s=>Promise.reject(C(s))))})}}function Yc(B,A){if(!(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices)&&B.navigator.mediaDevices){if(typeof A!="function"){console.error("shimGetDisplayMedia: getSourceId argument is not a function");return}B.navigator.mediaDevices.getDisplayMedia=function(I){return A(I).then(g=>{const Q=I.video&&I.video.width,C=I.video&&I.video.height,i=I.video&&I.video.frameRate;return I.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:g,maxFrameRate:i||3}},Q&&(I.video.mandatory.maxWidth=Q),C&&(I.video.mandatory.maxHeight=C),B.navigator.mediaDevices.getUserMedia(I)})}}}function Yt(B){B.MediaStream=B.MediaStream||B.webkitMediaStream}function Kt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("ontrack"in B.RTCPeerConnection.prototype)){Object.defineProperty(B.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(I){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=I)},enumerable:!0,configurable:!0});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=I=>{I.stream.addEventListener("addtrack",g=>{let Q;B.RTCPeerConnection.prototype.getReceivers?Q=this.getReceivers().find(i=>i.track&&i.track.id===g.track.id):Q={track:g.track};const C=new Event("track");C.track=g.track,C.receiver=Q,C.transceiver={receiver:Q},C.streams=[I.stream],this.dispatchEvent(C)}),I.stream.getTracks().forEach(g=>{let Q;B.RTCPeerConnection.prototype.getReceivers?Q=this.getReceivers().find(i=>i.track&&i.track.id===g.id):Q={track:g};const C=new Event("track");C.track=g,C.receiver=Q,C.transceiver={receiver:Q},C.streams=[I.stream],this.dispatchEvent(C)})},this.addEventListener("addstream",this._ontrackpoly)),A.apply(this,arguments)}}else AB(B,"track",A=>(A.transceiver||Object.defineProperty(A,"transceiver",{value:{receiver:A.receiver}}),A))}function dt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("getSenders"in B.RTCPeerConnection.prototype)&&"createDTMFSender"in B.RTCPeerConnection.prototype){const A=function(Q,C){return{track:C,get dtmf(){return this._dtmf===void 0&&(C.kind==="audio"?this._dtmf=Q.createDTMFSender(C):this._dtmf=null),this._dtmf},_pc:Q}};if(!B.RTCPeerConnection.prototype.getSenders){B.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(i,E){let D=Q.apply(this,arguments);return D||(D=A(this,i),this._senders.push(D)),D};const C=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(i){C.apply(this,arguments);const E=this._senders.indexOf(i);E!==-1&&this._senders.splice(E,1)}}const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(Q){this._senders=this._senders||[],I.apply(this,[Q]),Q.getTracks().forEach(C=>{this._senders.push(A(this,C))})};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(Q){this._senders=this._senders||[],g.apply(this,[Q]),Q.getTracks().forEach(C=>{const i=this._senders.find(E=>E.track===C);i&&this._senders.splice(this._senders.indexOf(i),1)})}}else if(typeof B=="object"&&B.RTCPeerConnection&&"getSenders"in B.RTCPeerConnection.prototype&&"createDTMFSender"in B.RTCPeerConnection.prototype&&B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)){const A=B.RTCPeerConnection.prototype.getSenders;B.RTCPeerConnection.prototype.getSenders=function(){const I=A.apply(this,[]);return I.forEach(g=>g._pc=this),I},Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function lt(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[I,g,Q]=arguments;if(arguments.length>0&&typeof I=="function")return A.apply(this,arguments);if(A.length===0&&(arguments.length===0||typeof I!="function"))return A.apply(this,[]);const C=function(E){const D={};return E.result().forEach(o=>{const s={id:o.id,timestamp:o.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[o.type]||o.type};o.names().forEach(t=>{s[t]=o.stat(t)}),D[s.id]=s}),D},i=function(E){return new Map(Object.keys(E).map(D=>[D,E[D]]))};if(arguments.length>=2){const E=function(D){g(i(C(D)))};return A.apply(this,[E,I])}return new Promise((E,D)=>{A.apply(this,[function(o){E(i(C(o)))},D])}).then(g,Q)}}function ft(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender&&B.RTCRtpReceiver))return;if(!("getStats"in B.RTCRtpSender.prototype)){const I=B.RTCPeerConnection.prototype.getSenders;I&&(B.RTCPeerConnection.prototype.getSenders=function(){const Q=I.apply(this,[]);return Q.forEach(C=>C._pc=this),Q});const g=B.RTCPeerConnection.prototype.addTrack;g&&(B.RTCPeerConnection.prototype.addTrack=function(){const Q=g.apply(this,arguments);return Q._pc=this,Q}),B.RTCRtpSender.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(C=>Ut(C,Q.track,!0))}}if(!("getStats"in B.RTCRtpReceiver.prototype)){const I=B.RTCPeerConnection.prototype.getReceivers;I&&(B.RTCPeerConnection.prototype.getReceivers=function(){const g=I.apply(this,[]);return g.forEach(Q=>Q._pc=this),g}),AB(B,"track",g=>(g.receiver._pc=g.srcElement,g)),B.RTCRtpReceiver.prototype.getStats=function(){const g=this;return this._pc.getStats().then(Q=>Ut(Q,g.track,!1))}}if(!("getStats"in B.RTCRtpSender.prototype&&"getStats"in B.RTCRtpReceiver.prototype))return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof B.MediaStreamTrack){const I=arguments[0];let g,Q,C;return this.getSenders().forEach(i=>{i.track===I&&(g?C=!0:g=i)}),this.getReceivers().forEach(i=>(i.track===I&&(Q?C=!0:Q=i),i.track===I)),C||g&&Q?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):g?g.getStats():Q?Q.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return A.apply(this,arguments)}}function pt(B){B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(C=>this._shimmedLocalStreams[C][0])};const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(C,i){if(!i)return A.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const E=A.apply(this,arguments);return this._shimmedLocalStreams[i.id]?this._shimmedLocalStreams[i.id].indexOf(E)===-1&&this._shimmedLocalStreams[i.id].push(E):this._shimmedLocalStreams[i.id]=[i,E],E};const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(C){this._shimmedLocalStreams=this._shimmedLocalStreams||{},C.getTracks().forEach(D=>{if(this.getSenders().find(o=>o.track===D))throw new DOMException("Track already exists.","InvalidAccessError")});const i=this.getSenders();I.apply(this,arguments);const E=this.getSenders().filter(D=>i.indexOf(D)===-1);this._shimmedLocalStreams[C.id]=[C].concat(E)};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(C){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[C.id],g.apply(this,arguments)};const Q=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(C){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},C&&Object.keys(this._shimmedLocalStreams).forEach(i=>{const E=this._shimmedLocalStreams[i].indexOf(C);E!==-1&&this._shimmedLocalStreams[i].splice(E,1),this._shimmedLocalStreams[i].length===1&&delete this._shimmedLocalStreams[i]}),Q.apply(this,arguments)}}function xt(B,A){if(!B.RTCPeerConnection)return;if(B.RTCPeerConnection.prototype.addTrack&&A.version>=65)return pt(B);const I=B.RTCPeerConnection.prototype.getLocalStreams;B.RTCPeerConnection.prototype.getLocalStreams=function(){const o=I.apply(this);return this._reverseStreams=this._reverseStreams||{},o.map(s=>this._reverseStreams[s.id])};const g=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(o){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},o.getTracks().forEach(s=>{if(this.getSenders().find(t=>t.track===s))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[o.id]){const s=new B.MediaStream(o.getTracks());this._streams[o.id]=s,this._reverseStreams[s.id]=o,o=s}g.apply(this,[o])};const Q=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(o){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[o.id]||o]),delete this._reverseStreams[this._streams[o.id]?this._streams[o.id].id:o.id],delete this._streams[o.id]},B.RTCPeerConnection.prototype.addTrack=function(o,s){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const t=[].slice.call(arguments,1);if(t.length!==1||!t[0].getTracks().find(a=>a===o))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(a=>a.track===o))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const w=this._streams[s.id];if(w)w.addTrack(o),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const a=new B.MediaStream([o]);this._streams[s.id]=a,this._reverseStreams[a.id]=s,this.addStream(a)}return this.getSenders().find(a=>a.track===o)};function C(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],G=o._streams[a.id];t=t.replace(new RegExp(G.id,"g"),a.id)}),new RTCSessionDescription({type:s.type,sdp:t})}function i(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],G=o._streams[a.id];t=t.replace(new RegExp(a.id,"g"),G.id)}),new RTCSessionDescription({type:s.type,sdp:t})}["createOffer","createAnswer"].forEach(function(o){const s=B.RTCPeerConnection.prototype[o],t={[o](){const w=arguments;return arguments.length&&typeof arguments[0]=="function"?s.apply(this,[a=>{const G=C(this,a);w[0].apply(null,[G])},a=>{w[1]&&w[1].apply(null,a)},arguments[2]]):s.apply(this,arguments).then(a=>C(this,a))}};B.RTCPeerConnection.prototype[o]=t[o]});const E=B.RTCPeerConnection.prototype.setLocalDescription;B.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?E.apply(this,arguments):(arguments[0]=i(this,arguments[0]),E.apply(this,arguments))};const D=Object.getOwnPropertyDescriptor(B.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(B.RTCPeerConnection.prototype,"localDescription",{get(){const o=D.get.apply(this);return o.type===""?o:C(this,o)}}),B.RTCPeerConnection.prototype.removeTrack=function(o){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!o._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(o._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let s;Object.keys(this._streams).forEach(t=>{this._streams[t].getTracks().find(w=>o.track===w)&&(s=this._streams[t])}),s&&(s.getTracks().length===1?this.removeStream(this._reverseStreams[s.id]):s.removeTrack(o.track),this.dispatchEvent(new Event("negotiationneeded")))}}function MD(B,A){!B.RTCPeerConnection&&B.webkitRTCPeerConnection&&(B.RTCPeerConnection=B.webkitRTCPeerConnection),B.RTCPeerConnection&&A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(I){const g=B.RTCPeerConnection.prototype[I],Q={[I](){return arguments[0]=new(I==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),g.apply(this,arguments)}};B.RTCPeerConnection.prototype[I]=Q[I]})}function qt(B,A){AB(B,"negotiationneeded",I=>{const g=I.target;if(!((A.version<72||g.getConfiguration&&g.getConfiguration().sdpSemantics==="plan-b")&&g.signalingState!=="stable"))return I})}const ut=Object.freeze(Object.defineProperty({__proto__:null,fixNegotiationNeeded:qt,shimAddTrackRemoveTrack:xt,shimAddTrackRemoveTrackWithNative:pt,shimGetDisplayMedia:Yc,shimGetSendersWithDtmf:dt,shimGetStats:lt,shimGetUserMedia:Ht,shimMediaStream:Yt,shimOnTrack:Kt,shimPeerConnection:MD,shimSenderReceiverGetStats:ft},Symbol.toStringTag,{value:"Module"}));function Kc(B,A){let I=!1;return B=JSON.parse(JSON.stringify(B)),B.filter(g=>{if(g&&(g.urls||g.url)){let Q=g.urls||g.url;g.url&&!g.urls&&UE("RTCIceServer.url","RTCIceServer.urls");const C=typeof Q=="string";return C&&(Q=[Q]),Q=Q.filter(i=>{if(i.indexOf("stun:")===0)return!1;const E=i.startsWith("turn")&&!i.startsWith("turn:[")&&i.includes("transport=udp");return E&&!I?(I=!0,!0):E&&!I}),delete g.url,g.urls=C?Q[0]:Q,!!Q.length}})}var bt={exports:{}},mt;function Pt(){return mt||(mt=1,function(B){var A={};A.generateIdentifier=function(){return Math.random().toString(36).substr(2,10)},A.localCName=A.generateIdentifier(),A.splitLines=function(I){return I.trim().split(`
|
|
1039
|
+
}`;class Cc extends st{constructor(A){super(A),this.vector_=new Z,this.vector2_=new Z,this.vector3_=new Z,this.quaternion_=new SA,this.maxParticles=1e4,this.setupBuffers(),this.rebuildMaterial()}setupBuffers(){this.geometry&&this.geometry.dispose(),this.geometry=new ZQ,this.indexBuffer=new iI(new Uint32Array(this.maxParticles*6),1),this.indexBuffer.setUsage(hI),this.geometry.setIndex(this.indexBuffer),this.positionBuffer=new iI(new Float32Array(this.maxParticles*6),3),this.positionBuffer.setUsage(hI),this.geometry.setAttribute("position",this.positionBuffer),this.previousBuffer=new iI(new Float32Array(this.maxParticles*6),3),this.previousBuffer.setUsage(hI),this.geometry.setAttribute("previous",this.previousBuffer),this.nextBuffer=new iI(new Float32Array(this.maxParticles*6),3),this.nextBuffer.setUsage(hI),this.geometry.setAttribute("next",this.nextBuffer),this.widthBuffer=new iI(new Float32Array(this.maxParticles*2),1),this.widthBuffer.setUsage(hI),this.geometry.setAttribute("width",this.widthBuffer),this.sideBuffer=new iI(new Float32Array(this.maxParticles*2),1),this.sideBuffer.setUsage(hI),this.geometry.setAttribute("side",this.sideBuffer),this.uvBuffer=new iI(new Float32Array(this.maxParticles*4),2),this.uvBuffer.setUsage(hI),this.geometry.setAttribute("uv",this.uvBuffer),this.colorBuffer=new iI(new Float32Array(this.maxParticles*8),4),this.colorBuffer.setUsage(hI),this.geometry.setAttribute("color",this.colorBuffer)}expandBuffers(A){for(;A>=this.maxParticles;)this.maxParticles*=2;this.setupBuffers()}rebuildMaterial(){this.layers.mask=this.settings.layers.mask;const A={lineWidth:{value:1},map:{value:null},useMap:{value:0},alphaMap:{value:null},useAlphaMap:{value:0},resolution:{value:new MB(1,1)},sizeAttenuation:{value:1},visibility:{value:1},alphaTest:{value:0}},I={};if(I.USE_UV="",I.USE_COLOR_ALPHA="",this.settings.material.map&&(I.USE_MAP="",I.MAP_UV=yD(this.settings.material.map.channel),A.map=new wg(this.settings.material.map),A.mapTransform=new wg(new Kg().copy(this.settings.material.map.matrix))),this.settings.material.defines&&this.settings.material.defines.USE_COLOR_AS_ALPHA!==void 0&&(I.USE_COLOR_AS_ALPHA=""),this.settings.renderMode===X.Trail)this.material=new vQ({uniforms:A,defines:I,vertexShader:Bc,fragmentShader:Qc,transparent:this.settings.material.transparent,depthWrite:!this.settings.material.transparent,side:this.settings.material.side,blending:this.settings.material.blending||Ns,blendDst:this.settings.material.blendDst,blendSrc:this.settings.material.blendSrc,blendEquation:this.settings.material.blendEquation,premultipliedAlpha:this.settings.material.premultipliedAlpha});else throw new Error("render mode unavailable")}update(){let A=0,I=0,g=0;const Q=this.getVisibleSystems();for(const C of Q)for(let i=0;i<C.particleNum;i++)g+=C.particles[i].previous.length*2;g>this.maxParticles&&this.expandBuffers(g);for(const C of Q){C.emitter.updateMatrixWorld&&(C.emitter.updateWorldMatrix(!0,!1),C.emitter.updateMatrixWorld(!0));const i=this.quaternion_,E=this.vector2_,D=this.vector3_;C.emitter.matrixWorld.decompose(E,i,D);const o=C.particles,s=C.particleNum,t=this.settings.uTileCount,w=this.settings.vTileCount,a=1/t,G=1/w;for(let S=0;S<s;S++){const c=o[S],y=c.uvTile%w,F=Math.floor(c.uvTile/w+.001),R=c.previous.values();let M=R.next(),n=M.value,N=n;M.done||(M=R.next());let J;M.value!==void 0?J=M.value:J=N;for(let L=0;L<c.previous.length;L++,A+=2){if(this.positionBuffer.setXYZ(A,N.position.x,N.position.y,N.position.z),this.positionBuffer.setXYZ(A+1,N.position.x,N.position.y,N.position.z),C.worldSpace?(this.positionBuffer.setXYZ(A,N.position.x,N.position.y,N.position.z),this.positionBuffer.setXYZ(A+1,N.position.x,N.position.y,N.position.z)):(c.parentMatrix?this.vector_.copy(N.position).applyMatrix4(c.parentMatrix):this.vector_.copy(N.position).applyMatrix4(C.emitter.matrixWorld),this.positionBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.positionBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.previousBuffer.setXYZ(A,n.position.x,n.position.y,n.position.z),this.previousBuffer.setXYZ(A+1,n.position.x,n.position.y,n.position.z)):(c.parentMatrix?this.vector_.copy(n.position).applyMatrix4(c.parentMatrix):this.vector_.copy(n.position).applyMatrix4(C.emitter.matrixWorld),this.previousBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.previousBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),C.worldSpace?(this.nextBuffer.setXYZ(A,J.position.x,J.position.y,J.position.z),this.nextBuffer.setXYZ(A+1,J.position.x,J.position.y,J.position.z)):(c.parentMatrix?this.vector_.copy(J.position).applyMatrix4(c.parentMatrix):this.vector_.copy(J.position).applyMatrix4(C.emitter.matrixWorld),this.nextBuffer.setXYZ(A,this.vector_.x,this.vector_.y,this.vector_.z),this.nextBuffer.setXYZ(A+1,this.vector_.x,this.vector_.y,this.vector_.z)),this.sideBuffer.setX(A,1),this.sideBuffer.setX(A+1,-1),C.worldSpace)this.widthBuffer.setX(A,N.size),this.widthBuffer.setX(A+1,N.size);else if(c.parentMatrix)this.widthBuffer.setX(A,N.size),this.widthBuffer.setX(A+1,N.size);else{const H=(Math.abs(D.x)+Math.abs(D.y)+Math.abs(D.z))/3;this.widthBuffer.setX(A,N.size*H),this.widthBuffer.setX(A+1,N.size*H)}this.uvBuffer.setXY(A,(L/c.previous.length+y)*a,(w-F-1)*G),this.uvBuffer.setXY(A+1,(L/c.previous.length+y)*a,(w-F)*G),this.colorBuffer.setXYZW(A,N.color.x,N.color.y,N.color.z,N.color.w),this.colorBuffer.setXYZW(A+1,N.color.x,N.color.y,N.color.z,N.color.w),L+1<c.previous.length&&(this.indexBuffer.setX(I*3,A),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+2),I++,this.indexBuffer.setX(I*3,A+2),this.indexBuffer.setX(I*3+1,A+1),this.indexBuffer.setX(I*3+2,A+3),I++),n=N,N=J,M.done||(M=R.next(),M.value!==void 0&&(J=M.value))}}}this.positionBuffer.clearUpdateRanges(),this.positionBuffer.addUpdateRange(0,A*3),this.positionBuffer.needsUpdate=!0,this.previousBuffer.clearUpdateRanges(),this.previousBuffer.addUpdateRange(0,A*3),this.previousBuffer.needsUpdate=!0,this.nextBuffer.clearUpdateRanges(),this.nextBuffer.addUpdateRange(0,A*3),this.nextBuffer.needsUpdate=!0,this.sideBuffer.clearUpdateRanges(),this.sideBuffer.addUpdateRange(0,A),this.sideBuffer.needsUpdate=!0,this.widthBuffer.clearUpdateRanges(),this.widthBuffer.addUpdateRange(0,A),this.widthBuffer.needsUpdate=!0,this.uvBuffer.clearUpdateRanges(),this.uvBuffer.addUpdateRange(0,A*2),this.uvBuffer.needsUpdate=!0,this.colorBuffer.clearUpdateRanges(),this.colorBuffer.addUpdateRange(0,A*4),this.colorBuffer.needsUpdate=!0,this.indexBuffer.clearUpdateRanges(),this.indexBuffer.addUpdateRange(0,I*3),this.indexBuffer.needsUpdate=!0,this.geometry.setDrawRange(0,I*3)}dispose(){this.geometry.dispose()}}class Is extends dB{constructor(){super(),this.batches=[],this.systemToBatchIndex=new Map,this.type="BatchedRenderer",this.depthTexture=null}static equals(A,I){return A.material.side===I.material.side&&A.material.blending===I.material.blending&&A.material.blendSrc===I.material.blendSrc&&A.material.blendDst===I.material.blendDst&&A.material.blendEquation===I.material.blendEquation&&A.material.premultipliedAlpha===I.material.premultipliedAlpha&&A.material.transparent===I.material.transparent&&A.material.depthTest===I.material.depthTest&&A.material.type===I.material.type&&A.material.alphaTest===I.material.alphaTest&&A.material.map===I.material.map&&A.renderMode===I.renderMode&&A.blendTiles===I.blendTiles&&A.softParticles===I.softParticles&&A.softFarFade===I.softFarFade&&A.softNearFade===I.softNearFade&&A.uTileCount===I.uTileCount&&A.vTileCount===I.vTileCount&&A.instancingGeometry===I.instancingGeometry&&A.renderOrder===I.renderOrder&&A.layers.mask===I.layers.mask}addSystem(A){A._renderer=this;const I=A.getRendererSettings();for(let Q=0;Q<this.batches.length;Q++)if(Is.equals(this.batches[Q].settings,I)){this.batches[Q].addSystem(A),this.systemToBatchIndex.set(A,Q);return}let g;switch(I.renderMode){case X.Trail:g=new Cc(I);break;case X.Mesh:case X.BillBoard:case X.VerticalBillBoard:case X.HorizontalBillBoard:case X.StretchedBillBoard:g=new gc(I);break}this.depthTexture&&g.applyDepthTexture(this.depthTexture),g.addSystem(A),this.batches.push(g),this.systemToBatchIndex.set(A,this.batches.length-1),this.add(g)}deleteSystem(A){const I=this.systemToBatchIndex.get(A);I!=null&&(this.batches[I].removeSystem(A),this.systemToBatchIndex.delete(A))}setDepthTexture(A){this.depthTexture=A;for(const I of this.batches)I.applyDepthTexture(A)}updateSystem(A){this.deleteSystem(A),this.addSystem(A)}update(A){this.systemToBatchIndex.forEach((I,g)=>{g.update(A)});for(let I=0;I<this.batches.length;I++)this.batches[I].update()}}const Ec=Is;vh(),ph(xh),console.log("%c Particle system powered by three.quarks. https://quarks.art/","font-size: 14px; font-weight: bold;");const wt=Math.sqrt(5),ic=(wt-1)/4,sI=(5-wt)/20,NE=B=>Math.floor(B)|0,JE=new Float64Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]);function Dc(B=Math.random){const A=oc(B),I=new Float64Array(A).map(i=>JE[i%32*4]),g=new Float64Array(A).map(i=>JE[i%32*4+1]),Q=new Float64Array(A).map(i=>JE[i%32*4+2]),C=new Float64Array(A).map(i=>JE[i%32*4+3]);return function(i,E,D,o){let s,t,w,a,G;const S=(i+E+D+o)*ic,c=NE(i+S),y=NE(E+S),F=NE(D+S),R=NE(o+S),M=(c+y+F+R)*sI,n=c-M,N=y-M,J=F-M,L=R-M,H=i-n,Y=E-N,K=D-J,l=o-L;let p=0,u=0,b=0,O=0;H>Y?p++:u++,H>K?p++:b++,H>l?p++:O++,Y>K?u++:b++,Y>l?u++:O++,K>l?b++:O++;const W=p>=3?1:0,T=u>=3?1:0,j=b>=3?1:0,EA=O>=3?1:0,wA=p>=2?1:0,iA=u>=2?1:0,IA=b>=2?1:0,BA=O>=2?1:0,AA=p>=1?1:0,$=u>=1?1:0,z=b>=1?1:0,LA=O>=1?1:0,MA=H-W+sI,NA=Y-T+sI,xA=K-j+sI,aA=l-EA+sI,DA=H-wA+2*sI,JA=Y-iA+2*sI,jI=K-IA+2*sI,_A=l-BA+2*sI,HA=H-AA+3*sI,fI=Y-$+3*sI,Eg=K-z+3*sI,ig=l-LA+3*sI,pI=H-1+4*sI,Dg=Y-1+4*sI,zI=K-1+4*sI,_I=l-1+4*sI,XI=c&255,$A=y&255,kI=F&255,vI=R&255;let nI=.6-H*H-Y*Y-K*K-l*l;if(nI<0)s=0;else{const kA=XI+A[$A+A[kI+A[vI]]];nI*=nI,s=nI*nI*(I[kA]*H+g[kA]*Y+Q[kA]*K+C[kA]*l)}let eA=.6-MA*MA-NA*NA-xA*xA-aA*aA;if(eA<0)t=0;else{const kA=XI+W+A[$A+T+A[kI+j+A[vI+EA]]];eA*=eA,t=eA*eA*(I[kA]*MA+g[kA]*NA+Q[kA]*xA+C[kA]*aA)}let og=.6-DA*DA-JA*JA-jI*jI-_A*_A;if(og<0)w=0;else{const kA=XI+wA+A[$A+iA+A[kI+IA+A[vI+BA]]];og*=og,w=og*og*(I[kA]*DA+g[kA]*JA+Q[kA]*jI+C[kA]*_A)}let lg=.6-HA*HA-fI*fI-Eg*Eg-ig*ig;if(lg<0)a=0;else{const kA=XI+AA+A[$A+$+A[kI+z+A[vI+LA]]];lg*=lg,a=lg*lg*(I[kA]*HA+g[kA]*fI+Q[kA]*Eg+C[kA]*ig)}let sg=.6-pI*pI-Dg*Dg-zI*zI-_I*_I;if(sg<0)G=0;else{const kA=XI+1+A[$A+1+A[kI+1+A[vI+1]]];sg*=sg,G=sg*sg*(I[kA]*pI+g[kA]*Dg+Q[kA]*zI+C[kA]*_I)}return 27*(s+t+w+a+G)}}function oc(B){const A=new Uint8Array(512);for(let I=0;I<512/2;I++)A[I]=I;for(let I=0;I<512/2-1;I++){const g=I+~~(B()*(256-I)),Q=A[I];A[I]=A[g],A[g]=Q}for(let I=256;I<512;I++)A[I]=A[I-256];return A}const GD="needle:project",at="remote://";function mB(B,A,I){if(!B.startsWith(at))return B;const g=B.substring(at.length),Q=g.indexOf("/");if(Q<=0)return null;const C=g.substring(0,Q),i=g.substring(Q),E=I?.[C]??A?.[C];return E===void 0?null:(E.endsWith("/")?E.substring(0,E.length-1):E)+i}function et(B){return!!B&&typeof B=="object"&&typeof B[GD]=="string"}function sc(B,A=console.warn){for(const I of B)A(`[needle:project] ${I.arc}: ${I.message}`)}function ht(B){return!!B&&typeof B=="object"&&"$extension"in B}function ct(B){if(!B||typeof B!="object")return!1;const A=B;if(typeof A.ref!="string"||Object.keys(A).some(g=>g!=="ref"&&g!=="address"))return!1;const I=A.address;return I===void 0||!!I&&typeof I=="object"&&!Array.isArray(I)&&Object.entries(I).every(([g,Q])=>["id","anchor","type","name","path"].includes(g)&&typeof Q=="string")}function yt(B,A,I={}){if(/^\d+$/.test(A))return B[Number(A)];const g=/^([A-Za-z_][A-Za-z0-9_-]*):([\s\S]*)$/.exec(A);if(!g){I.report?.(`"${A}" is neither an index nor a <field>:<value> qualifier`);return}const[,Q,C]=g,i=B.filter(D=>D!==null&&typeof D=="object");let E=i.filter(D=>Q==="type"?I.matchesComponentType?.(D,C)??D.constructor?.name===C:Q==="guid"?I.matchesComponentGuid?.(D,C)??(D.guid===C||D.needle_editor_guid===C):D[Q]===C);if(!E.length&&Q==="guid"&&I.referenceId&&I.deriveComponentGuid){const D=I.deriveComponentGuid(I.referenceId,C);E=i.filter(o=>o.guid===D)}if(E.length>1){I.report?.(`"${A}" matched ${E.length} elements ? the document must name one unambiguously`);return}return E[0]}function SD(B,A,I){if(!B||typeof B!="object")return B;if(Array.isArray(B)){let Q=null;for(let C=0;C<B.length;C++){const i=SD(B[C],A,I);i!==B[C]&&(Q||(Q=[...B]),Q[C]=i)}return Q??B}if(typeof B.ref=="string"){const Q=A(B);if(Q===null){I("def",`node reference did not resolve: ${JSON.stringify(B)}`);return}if(Q!==void 0)return Q}let g=null;for(const[Q,C]of Object.entries(B)){const i=SD(C,A,I);i!==C&&(g||(g={...B}),g[Q]=i)}return g??B}class tc{constructor(A){this.scene=A,this.scopes=new Map,this.targets=new WeakMap,this.ready=Promise.resolve()}registerReference(A,I,g=[],Q){const C=new Map,i={root:new WeakRef(I),nodes:C,elements:[]},E=(D,o)=>{const s=new WeakRef(D),t={get name(){return s.deref()?.name},get userData(){return s.deref()?.userData},children:D.children?.filter(S=>!Q?.has(S)).map(S=>E(S,[...o,S.name??""]))};C.set(t,s);const w=D.userData?.["needle-id"],a=AD(D.name),G=D===I?void 0:{type:"node",path:Xs(o),...typeof w=="string"?{id:w}:{},...a?{anchor:a}:{}};return(D===I||G)&&this.targets.set(D,{ref:A,...G?{address:G}:{}}),t};I.isObject3D?i.graph=E(I,[]):this.targets.set(I,{ref:A});for(const D of g){const o=D,s=o.isMaterial?"material":o.isTexture?"texture":o.isAnimationClip?"animation":null;if(!s)continue;i.elements.push(new WeakRef(D));const t=o.userData?.["needle-id"];typeof t=="string"&&this.targets.set(D,{ref:A,address:{type:s,id:t,name:o.name}})}this.scopes.set(A,i)}resolve(A){const I=this.scopes.get(A.ref);let g=A.ref==="$scene"?this.scene:I?.root.deref()??null;if(A.address){const Q=A.address;if(Q.type&&Q.type!=="node"){const C=I?.elements.flatMap(i=>{const E=i.deref(),D=Q.type==="material"?E?.isMaterial:Q.type==="texture"?E?.isTexture:Q.type==="animation"?E?.isAnimationClip:!1;return E&&D?[E]:[]})??[];g=eE(Q,C)}else if(I?.graph){const C=yQ(Q,I.graph);g=C?I.nodes.get(C)?.deref()??null:null,g&&!this.inScene(g)&&(g=null)}else g=A.ref==="$scene"?yQ(Q,this.scene):null}if(!g||g.isObject3D&&!this.inScene(g))return null;if(A.pathPrefix){const Q=b0(A.pathPrefix.replace(/\/$/,""));for(const C of Q){if(C==="components")g=g.userData?.components??null;else if(Array.isArray(g)&&C.startsWith("guid:")){const i=C.slice(5);g=yt(g,`guid:${i}`)??null}else return null;if(!g)return null}}return g}targetFor(A){if(A===this.scene)return{ref:"$scene"};const I=A,g=I.needle_editor_guid||I.guid;if(I.gameObject&&g){const C=this.targetFor(I.gameObject);return C?{...C,pathPrefix:`components/guid:${g}/`}:null}const Q=this.targets.get(A);return Q&&this.resolve(Q)===A?structuredClone(Q):null}inScene(A){for(let I=A;I;I=I.parent)if(I===this.scene)return!0;return!1}}const Gt=new WeakMap;let rD=0;function wc(){rD++;let B=!1;return{dispose(){B||(B=!0,rD--)}}}function ac(B){return rD?new tc(B):void 0}function ec(B){return Gt.get(B)}function hc(B,A){Gt.set(B,A)}function cc(B,A){const I=A(B.target);return B.create?typeof B.create.id=="string"?A({ref:B.target.ref,address:{type:"node",id:B.create.id}})??I?.children.find(g=>g.userData?.["needle-id"]===B.create.id)??null:I?St(I,B.create)??null:null:I}function St(B,A){return(typeof A.id=="string"?B.children?.find(I=>I.userData?.["needle-id"]===A.id):void 0)??(typeof A.name=="string"?B.children?.find(I=>I.name===A.name):void 0)}function yc(B,A,I,g){const Q=w=>I?.resolveAssetUrl?{resolveUrl:a=>I.resolveAssetUrl(w,a)}:void 0,C=new Map,i=()=>{if(!I?.onProgress)return;let w=0,a=0;for(const G of C.values())w+=G.loaded,a+=G.total;I.onProgress(w,a)},E=new Map,D=w=>{let a=E.get(w);if(!a){const G=A.assets?.[w]?.src;if(typeof G!="string")a=Promise.resolve(null);else if(I?.resolveAsset)a=I.resolveAsset(w,G).catch(S=>(g("reference",`asset "${w}" failed to resolve: ${S}`),null));else if(mB(G,A.remotes,I?.remotes)===null)g("reference",`asset "${w}" src "${G}" names a remote that is not in the document's remotes table \u2014 the asset is skipped`),a=Promise.resolve(null);else{const S=mB(G,A.remotes,I?.remotes),c=I?.baseUrl?new URL(S,I.baseUrl).href:S;a=fetch(c).then(y=>{if(!y.ok)throw new Error(`${y.status} ${y.statusText}`);const F=y.headers.get("Content-Type")??"";if(F.includes("text/html"))throw new Error(`the server answered with an HTML page (Content-Type: ${F}) \u2014 the file probably does not exist there. Documents record srcs AS SAVED: a dev-server url (e.g. localhost) does not exist on a deployment.`);if(!y.body||!I?.onProgress)return y.arrayBuffer();const R={loaded:0,total:Number(y.headers.get("Content-Length"))||0};return C.set(w,R),i(),Jc(y.body,M=>{R.loaded=M,R.total<M&&(R.total=M),i()})}).catch(y=>(g("reference",`asset "${w}" failed to load from ${c}: ${y}`),null))}E.set(w,a)}return a},o=new Map,s=(w,a="over")=>{let G=o.get(w);return G||(G=(async()=>{if(!A.assets?.[w])return g(a,`asset "${w}" has no entry in the document's assets map`),null;const S=await D(w);if(S===null)return null;const c=A.assets[w].src??w,y=mB(c,A.remotes,I?.remotes)??c,F=await B.parse(S,y,Q(w))??null;return F||g(a,`asset "${w}" data loaded but PARSING failed (see console for the parser error)`),F&&(F.parser?.json&&Zs(F.parser.json,F.parser.associations,F.scenes),F.scene&&B.parkTemplate(F.scene)),F})(),o.set(w,G)),G},t=new Map;for(const w of A.references??[]){if(!w||typeof w.id!="string"||typeof w.asset!="string"||!w.address)continue;if(t.has(w.id)){g("reference",`duplicate reference id "${w.id}" \u2014 entry skipped`);continue}const a=w.address;t.set(w.id,(async()=>{if(a.type==="material"){const G=await s(w.asset);if(!G)return null;const S=await Mt(G,a);return S||g("reference",`entity "${w.id}": material did not resolve in asset "${w.asset}" (${JSON.stringify(a)})`),S}if(a.type==="hdr"){const G=A.assets?.[w.asset]?.src;if(typeof G!="string")return g("reference",`entity "${w.id}": unknown asset "${w.asset}"`),null;let S,c;if(I?.resolveAsset){const n=await I.resolveAsset(w.asset,G).catch(N=>(g("reference",`entity "${w.id}": asset "${w.asset}" failed to resolve: ${N}`),null));if(n===null)return null;if(typeof n=="string")S=n;else{const N=URL.createObjectURL(new Blob([n]));S=N,c=()=>URL.revokeObjectURL(N)}}else{const n=mB(G,A.remotes,I?.remotes);if(n===null)return g("reference",`entity "${w.id}": src "${G}" names a remote that is not in the document's remotes table \u2014 the entity is skipped`),null;S=I?.baseUrl?new URL(n,I.baseUrl).href:n}const y=G.split(/[?#]/)[0],F=y.substring(y.lastIndexOf("/")+1)||void 0,R=/pmrem/i.test(G)?"pmrem":void 0,M=await B.loadEnvironment(S,{format:R,name:F}).finally(()=>c?.());return M||g("reference",`entity "${w.id}": environment texture failed to load from ${G}`),M}return g("reference",`entity "${w.id}": element type "${a.type??"?"}" is not instantiable yet`),null})())}return{loadParsedAsset:s,entities:t}}async function Gc(B,A,I){if(I?.componentRecovery)return Sc(B,A,I);if(!et(A))throw new TypeError(`evaluateProjectDocument: not a project document (missing "${GD}")`);const g=I?.parent??B.scene,Q=ac(B.scene),C=new Map(I?.referenceBindings),i=new Map,E=[],D=(G,S)=>{E.push({arc:G,message:S})},{loadParsedAsset:o,entities:s}=yc(B,A,I,D),t=[],w=new Set;for(const G of A.references??[]){if(!G||typeof G.id!="string"||typeof G.asset!="string"){D("reference",`invalid reference entry: ${JSON.stringify(G)}`);continue}if(G.address)continue;if(w.has(G.id)){D("reference",`duplicate reference id "${G.id}" \u2014 entry skipped`);continue}if(I?.referenceBindings){const c=I.referenceBindings.get(G.id);if(!c){D("reference",`reference "${G.id}": no existing model binding supplied`);continue}if(!A.assets?.[G.asset]){D("reference",`reference "${G.id}": unknown asset "${G.asset}"`);continue}w.add(G.id),C.set(G.id,c),i.set(G.id,{scene:c});continue}const S=await o(G.asset,"reference");if(S){if(!S.scene){D("reference",`reference "${G.id}": asset "${G.asset}" did not produce a scene`);continue}w.add(G.id),t.push({ref:G,model:S})}}const a=new Promise(G=>{B.schedule(()=>{const S=[];for(const{ref:n,model:N}of t){const J=N.scene,L=B.clone(J,n.id);if(!L){D("reference",`reference "${n.id}": instantiating asset "${n.asset}" failed`);continue}C.set(n.id,L),i.set(n.id,{...N,scene:L});const H=N.parser?.associations;if(H){const Y=(K,l)=>{const p=H.get(K);p!==void 0&&H.set(l,p);const u=Math.min(K.children.length,l.children.length);for(let b=0;b<u;b++)Y(K.children[b],l.children[b])};Y(J,L)}S.push(L)}for(const n of S)g.add(n),B.activateInstance(n);for(const n of A.references??[]){const N=n?.id?C.get(n.id):void 0;if(N&&n.parent){const J=C.get(n.parent.ref);if(!J)D("reference",`reference "${n.id}": parent ref "${n.parent.ref}" not placed \u2014 staying at the composition root`);else{const L=n.parent.address?yQ(n.parent.address,J):J;L?L.add(N):D("reference",`reference "${n.id}": parent address did not resolve in "${n.parent.ref}" \u2014 staying at the composition root`)}}}const c=new Set;for(const{model:n}of t)n.scene&&!c.has(n.scene)&&(c.add(n.scene),B.disposeTemplate(n.scene));const y=Rt(B,g,I?.baseUrl),F=I?.extensions?{...y,extensions:I.extensions(y)}:y;kc(A,g,C,D,F);const R=new Map;for(const n of A.overs??[])for(const N of[n?.target,n?.value])if(N?.address&&(N.ref==="$scene"||N.ref!==void 0&&I?.referenceBindings?.has(N.ref))){const J=n?.target?.path==="parent"?g:B.scene;R.set(N,$Q(N,g,C,J))}const M=nc(B,A,g,C,s,D,R,F.extensions);if(Q){const n=new Set(C.values());for(const[N,J]of C){const L=i.get(N);Q.registerReference(N,J,[...L?.parser?.associations?.keys()??[],...L?.animations??[]],n)}}rc(A,g,C,D,R),M.finally(()=>G())})});return Q&&(Q.ready=a.then(async()=>{for(const[G,S]of s){const c=await S;c&&Q.registerReference(G,c)}}),hc(B.inspectionOwner??B,Q)),{root:g,references:C,models:i,issues:E,completed:a}}function Sc(B,A,I){const{signal:g,resolveTarget:Q}=I.componentRecovery,C=[],i=new Map,E=new Promise((D,o)=>{const s=()=>o(g.reason);if(g.aborted){s();return}g.addEventListener("abort",s,{once:!0}),B.schedule(()=>{if(g.removeEventListener("abort",s),!g.aborted)try{const t=Q({ref:"$scene"});if(!t)throw new Error("Component recovery scene is unavailable.");const w=Rt(B,t,I.baseUrl),a={...w,extensions:I.extensions?.(w)??w.extensions},G=(y,F)=>{C.push({arc:y,message:F})};for(const y of A.defs??[])g.throwIfAborted(),RD(y,t,i,G,a,A.extensions,{componentsOnly:!0,resolveTarget:Q});const S=kD(new Map);S.extensions=a.extensions,S.resolveValueReference=Q;const c=new Map;S.sceneTargets=c;for(const y of A.overs??[]){g.throwIfAborted();const F=ht(y.value),R=/(?:^|\/)(?:parent|active)$/.test(y.target.path??"");if(!y.target.path?.startsWith("components/")&&(!F||R)){G("over","Component recovery cannot apply structural or scene overrides.");continue}if(c.set(y.target,Q(y.target)),ct(y.value)){c.set(y.value,Q(y.value));const M=Q({ref:y.value.ref});M&&i.set(y.value.ref,M)}nD(B,y,t,i,S,G)}D()}catch(t){o(t)}})});return{root:B.scene,references:i,models:new Map,issues:C,completed:E}}function rc(B,A,I,g,Q){const C=(B.overs??[]).filter(E=>E?.target?.path==="parent"),i=E=>{const D=E.value?.index;return typeof D=="number"?D:Number.MAX_SAFE_INTEGER};C.sort((E,D)=>i(E)-i(D));for(const E of C){const D=Q.has(E.target)?Q.get(E.target):$Q(E.target,A,I);if(!D){g("over",`parent over target did not resolve: ${JSON.stringify(E.target)}`);continue}const o=E.value;if(!o||typeof o!="object"){g("over",`parent over value must be a node reference: ${JSON.stringify(E.value)}`);continue}let s=null;if(o.ref===void 0||o.ref==="$scene")s=Q.has(o)?Q.get(o)??null:o.address?yQ(o.address,A):A;else{const t=I.get(o.ref);t&&(s=o.address?yQ(o.address,t):t)}if(!s){g("over",`parent over did not resolve its new parent \u2014 staying in place: ${JSON.stringify(E.value)}`);continue}if(s===D||Fc(D,s)){g("over",`parent over would create a cycle \u2014 ignored: ${JSON.stringify(E.target)}`);continue}s.add(D)}}function Fc(B,A){for(let I=A.parent;I;I=I.parent)if(I===B)return!0;return!1}function $Q(B,A,I,g){const Q=B?.ref==="$scene"?g??A:B?.ref!==void 0?I.get(B.ref):A;return Q?B?.address?yQ(B.address,Q):Q:null}function UE(B){return B.split("/").filter(A=>A.length>0).map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function rt(B,A,I,g,Q){return A?.isObject3D===!0&&I==="components"?B.getComponents?.(A)??[]:Array.isArray(A)?yt(A,I,{matchesComponentType:B.matchesComponentType?.bind(B),matchesComponentGuid:B.matchesComponentGuid?.bind(B),deriveComponentGuid:B.deriveComponentGuid?.bind(B),referenceId:g,report:Q}):A?.[I]}function Ft(B,A,I,g,Q){const C=[A];let i=A;for(let E=0;E<I.length-1;E++){const D=rt(B,i,I[E],g,o=>Q(`at "${I[E]}": ${o}`));if(!D||typeof D!="object")return Q(`does not resolve at "${I[E]}"`),null;i=D,C.push(D)}return{container:i,chain:C}}function FD(B){const A=[];return B.traverse(I=>{const g=I.material;for(const Q of Array.isArray(g)?g:g?[g]:[])Q&&typeof Q=="object"&&!A.includes(Q)&&A.push(Q)}),A}function Rc(B,A,I){const g=FD(B);for(const C of I??[])for(const i of FD(C))g.includes(i)||g.push(i);const Q=eE(A,g);return Q?{material:Q}:null}function kc(B,A,I,g,Q){const C=B.defs??[];if(C.length)for(const i of C)RD(i,A,I,g,Q,B.extensions)}function Rt(B,A,I){return B.createDefContext?.(A,I)??{scene:B.scene,createNode:()=>B.createNode()}}function RD(B,A,I,g,Q,C,i){{const E=i?.resolveTarget??(t=>$Q(t,A,I,Q.scene));let D=i?.componentsOnly?cc(B,E):E(B?.target);if(!D){g("def",`def target did not resolve: ${JSON.stringify(i?.componentsOnly&&B.create?B.create:B?.target)}`);return}if(B.create&&!i?.componentsOnly){if(B.create.copy){g("def","copy definitions require a host duplication command");return}const t=St(D,B.create),w=t??Q.createNode();t||(typeof B.create.name=="string"&&(w.name=B.create.name),D.add(w)),typeof B.create.id=="string"&&(w.userData["needle-id"]=B.create.id),Array.isArray(B.create.position)&&B.create.position.length>=3&&w.position.fromArray(B.create.position),Array.isArray(B.create.quaternion)&&B.create.quaternion.length>=4&&w.quaternion.fromArray(B.create.quaternion),Array.isArray(B.create.scale)&&B.create.scale.length>=3&&w.scale.fromArray(B.create.scale),D=w}let o,s;if("provider"in B){g("def","The experimental def.provider field is retired; convert it to an extension declaration before loading components.");return}if(B.extension!==void 0){if(s=C?.[B.extension],!s||!Number.isInteger(s.version)||s.version<1){g("def",`document extension "${B.extension}" has no valid declaration`);return}if(o=Q.extensions?.get(B.extension),!o?.components){g("def",`document extension "${B.extension}" is unavailable for components`);return}if(o.version!==s.version&&!o.migrations?.[s.version]){g("def",`document extension "${B.extension}" cannot read data version ${s.version}`);return}}for(const t of B.components??[]){if(!t||typeof t.name!="string"){g("def",`invalid component entry: ${JSON.stringify(t)}`);continue}let w=t;if(o&&s)try{const S=structuredClone(t),c=o.version===s.version?S:o.migrations[s.version](S);if(!c||typeof c!="object"||Array.isArray(c))throw new Error("migration must return component data");w={...c,name:t.name,...t.guid!==void 0?{guid:t.guid}:{}}}catch(S){g("def",`document extension "${B.extension}" migration failed: ${String(S)}`);continue}let a=!1;const G=SD(w,S=>(o?ct(S):S.ref==="$scene"||I.has(S.ref))?E(S):void 0,(S,c)=>{a=!0,g(S,c)});o?a||o.components.apply(D,G,g):Q.applyComponent?Q.applyComponent(D,G,g):g("def",`unsupported component type "${t.name}"`)}}}async function nc(B,A,I,g,Q,C,i,E){const D=kD(Q);D.sceneTargets=i,D.extensions=E;for(const o of A.overs??[])nD(B,o,I,g,D,C);await D.settled()}function kD(B){const A=[],I=new Map;return{entities:B,deactivatedRoots:new Map,chainOnEntity(g,Q){const C=B.get(g),i=I.get(g)??Promise.resolve(),E=Promise.all([C,i]).then(([D])=>Q(D));I.set(g,E),A.push(E)},settled:()=>Promise.all(A).then(()=>{})}}function nD(B,A,I,g,Q,C){if(ht(A.value)){const i=A.value,E=Q.extensions?.get(i.$extension),D=E?.valueCodecs?.[i.type];if(!D||E.version!==i.version){C("over",`Extension value ${i.$extension}/${i.type} version ${i.version} is unavailable; value preserved.`);return}try{const o=D.decode(i.data,{resolveReference(s){const t=Q.resolveValueReference?Q.resolveValueReference(s):$Q(s,I,g,B.scene);if(!t||!s.pathPrefix)return t;const w=UE(s.pathPrefix.replace(/\/$/,""));let a=t;for(const G of w)a=rt(B,a,G,s.ref,S=>{throw new Error(S)});return a&&typeof a=="object"?a:null}});kt(B,{...A,value:o},I,g,Q,C,!0)}catch(o){C("over",`Extension value ${i.$extension}/${i.type} failed: ${o instanceof Error?o.message:String(o)}`)}return}kt(B,A,I,g,Q,C)}function kt(B,A,I,g,Q,C,i=!1){const{entities:E,deactivatedRoots:D,chainOnEntity:o}=Q;{const s=A?.target;if(!s||typeof s.path!="string"||s.path.length===0){C("over",`over without a target path: ${JSON.stringify(A)}`);return}if(s.path==="parent")return;if(s.ref!==void 0&&E.has(s.ref)){const G=s.ref,S=s.path,c=A.value,y=s;o(G,F=>{F&&bB(B,F,S,c,C,y)});return}let t=null,w=null;if(s.ref==="$scene")t=Q.sceneTargets?.has(s)?Q.sceneTargets.get(s)??null:s.address?yQ(s.address,B.scene):B.scene;else if(s.ref==="$renderer"){if(s.address){C("over",`"$renderer" targets take no address: ${JSON.stringify(s)}`);return}t=B.renderer}else if(s.address?.type==="material"){const G=s.ref!==void 0?g.get(s.ref):I;t=G?Rc(G,s.address,D.get(s.ref))?.material??null:null}else w=Q.sceneTargets?.has(s)?Q.sceneTargets.get(s)??null:$Q(s,I,g),t=w;if(!t){C("over",`over target did not resolve: ${JSON.stringify(s)}`);return}const a=UE(s.path);if(a[a.length-1]==="active"){if(A.value!==!1)return;const G=a.length===1?t:Ft(B,t,a,s.ref,S=>C("over",`path "${s.path}" ${S}: ${JSON.stringify(s)}`))?.container;if(G){if(G.isObject3D){const S=D.get(s.ref)??[];S.push(G),D.set(s.ref,S)}Uc(B,G,w,C)}return}if(i){bB(B,t,s.path,A.value,C,s);return}if(nt(A.value)&&(A.value.ref==="$scene"||g.has(A.value.ref))){const G=Q.sceneTargets?.has(A.value)?Q.sceneTargets.get(A.value):$Q(A.value,I,g,B.scene);if(!G){C("over",`node-reference value did not resolve: ${JSON.stringify(A.value)} for ${JSON.stringify(s)}`);return}bB(B,t,s.path,G,C,s);return}if(nt(A.value)){const G=A.value.ref;if(!E.get(G)){C("over",`value references unknown entity "${G}": ${JSON.stringify(s)}`);return}const S=t,c=s.path,y=s;o(G,F=>{if(!F){C("over",`entity "${G}" was not instantiated \u2014 assignment skipped: ${JSON.stringify(y)}`);return}bB(B,S,c,F,C,y)});return}if(Mc(A.value)){C("over",`reference-valued over not supported (skipped, not raw-assigned): ${JSON.stringify(s)}`);return}bB(B,t,s.path,A.value,C,s)}}function nt(B){return!!B&&typeof B=="object"&&typeof B.ref=="string"}function Mc(B){if(!B||typeof B!="object")return!1;const A=B;return typeof A.asset=="string"||A.node!==void 0||typeof A.guid=="string"}function Nc(B,A){const I=B.scene;if(!I)return null;const g=FD(I);return eE(A,g)??(g.length===1?g[0]:null)}async function Mt(B,A){const I=Nc(B,A);if(I)return I;const g=B.parser,Q=g?.json?.materials?.length??0;if(!Q||!g?.getDependency)return null;const C=[];for(let i=0;i<Q;i++){const E=await g.getDependency("material",i).catch(()=>null);E&&typeof E=="object"&&C.push(E)}return eE(A,C)??(C.length===1?C[0]:null)}async function Jc(B,A){const I=B.getReader(),g=[];let Q=0;for(;;){const{done:E,value:D}=await I.read();if(E)break;D&&(g.push(D),Q+=D.byteLength,A(Q))}const C=new Uint8Array(Q);let i=0;for(const E of g)C.set(E,i),i+=E.byteLength;return C.buffer}function Uc(B,A,I,g){A.isObject3D?A.removeFromParent():B.removeComponent?B.removeComponent(A,I):g("over","component deactivation is not supported by this host")}function bB(B,A,I,g,Q,C){const i=UE(I),E=Ft(B,A,i,C.ref,a=>Q("over",`path "${I}" ${a}: ${JSON.stringify(C)}`));if(!E)return;const{container:D,chain:o}=E,s=D,t=i[i.length-1],w=s[t];Array.isArray(g)&&w&&typeof w=="object"&&typeof w.fromArray=="function"?w.fromArray(g):Array.isArray(g)&&g.length===3&&t==="background"&&s.isScene===!0?s[t]=B.createColor(g):s[t]=g;for(const a of o){const G=a;(G.isMaterial===!0||G.isTexture===!0)&&(G.needsUpdate=!0)}}class Lc{constructor(A,I){if(this._retries=0,!Number.isInteger(A)||A<0)throw new Error("Base must be a positive integer or zero");if(I!==void 0&&(!Number.isInteger(I)||I<0))throw new Error("ExpMax must be a undefined, a positive integer or zero");this.base=A,this.expMax=I,this.i=0}get retries(){return this._retries}get current(){return this.base*Math.pow(2,this.i)}next(){return this._retries++,this.i=this.expMax===void 0?this.i+1:Math.min(this.i+1,this.expMax),this.current}reset(){this._retries=0,this.i=0}}var nA;(function(B){B.open="open",B.close="close",B.error="error",B.message="message",B.retry="retry",B.reconnect="reconnect"})(nA||(nA={}));class Nt{constructor(A,I,g){var Q,C,i,E,D,o,s,t,w,a,G,S,c,y,F;this._closedByUser=!1,this.handleOpenEvent=R=>this.handleEvent(nA.open,R),this.handleErrorEvent=R=>this.handleEvent(nA.error,R),this.handleCloseEvent=R=>this.handleEvent(nA.close,R),this.handleMessageEvent=R=>this.handleEvent(nA.message,R),this._url=A,this._protocols=I,this._options={buffer:g?.buffer,retry:{maxRetries:(Q=g?.retry)===null||Q===void 0?void 0:Q.maxRetries,instantReconnect:(C=g?.retry)===null||C===void 0?void 0:C.instantReconnect,backoff:(i=g?.retry)===null||i===void 0?void 0:i.backoff},listeners:{open:[...(D=(E=g?.listeners)===null||E===void 0?void 0:E.open)!==null&&D!==void 0?D:[]],close:[...(s=(o=g?.listeners)===null||o===void 0?void 0:o.close)!==null&&s!==void 0?s:[]],error:[...(w=(t=g?.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[]],message:[...(G=(a=g?.listeners)===null||a===void 0?void 0:a.message)!==null&&G!==void 0?G:[]],retry:[...(c=(S=g?.listeners)===null||S===void 0?void 0:S.retry)!==null&&c!==void 0?c:[]],reconnect:[...(F=(y=g?.listeners)===null||y===void 0?void 0:y.reconnect)!==null&&F!==void 0?F:[]]}},this._underlyingWebsocket=this.tryConnect()}get url(){return this._url}get protocols(){return this._protocols}get buffer(){return this._options.buffer}get maxRetries(){return this._options.retry.maxRetries}get instantReconnect(){return this._options.retry.instantReconnect}get backoff(){return this._options.retry.backoff}get closedByUser(){return this._closedByUser}get lastConnection(){return this._lastConnection}get underlyingWebsocket(){return this._underlyingWebsocket}get readyState(){return this._underlyingWebsocket.readyState}get bufferedAmount(){return this._underlyingWebsocket.bufferedAmount}get extensions(){return this._underlyingWebsocket.extensions}get binaryType(){return this._underlyingWebsocket.binaryType}set binaryType(A){this._underlyingWebsocket.binaryType=A}send(A){this.closedByUser||(this._underlyingWebsocket.readyState===this._underlyingWebsocket.OPEN?this._underlyingWebsocket.send(A):this.buffer!==void 0&&this.buffer.add(A))}close(A,I){this.cancelScheduledConnectionRetry(),this._closedByUser=!0,this._underlyingWebsocket.close(A,I)}addEventListener(A,I,g){this._options.listeners[A].push({listener:I,options:g})}removeEventListener(A,I,g){const Q=C=>C.listener!==I||C.options!==g;this._options.listeners[A]=this._options.listeners[A].filter(Q)}tryConnect(){return this._underlyingWebsocket=new WebSocket(this.url,this.protocols),this._underlyingWebsocket.addEventListener(nA.open,this.handleOpenEvent),this._underlyingWebsocket.addEventListener(nA.close,this.handleCloseEvent),this._underlyingWebsocket.addEventListener(nA.error,this.handleErrorEvent),this._underlyingWebsocket.addEventListener(nA.message,this.handleMessageEvent),this._underlyingWebsocket}clearWebsocket(){this._underlyingWebsocket.removeEventListener(nA.open,this.handleOpenEvent),this._underlyingWebsocket.removeEventListener(nA.close,this.handleCloseEvent),this._underlyingWebsocket.removeEventListener(nA.error,this.handleErrorEvent),this._underlyingWebsocket.removeEventListener(nA.message,this.handleMessageEvent),this._underlyingWebsocket.close()}dispatchEvent(A,I){const g=this._options.listeners[A],Q=[];g.forEach(({listener:C,options:i})=>{C(this,I),(i===void 0||i.once===void 0||!i.once)&&Q.push({listener:C,options:i})}),this._options.listeners[A]=Q}handleEvent(A,I){switch(A){case nA.close:this.dispatchEvent(A,I),this.scheduleConnectionRetryIfNeeded();break;case nA.open:if(this.backoff!==void 0&&this._lastConnection!==void 0){const g={retries:this.backoff.retries,lastConnection:new Date(this._lastConnection)},Q=new CustomEvent(nA.reconnect,{detail:g});this.dispatchEvent(nA.reconnect,Q),this.backoff.reset()}this._lastConnection=new Date,this.dispatchEvent(A,I),this.sendBufferedData();break;case nA.retry:this.dispatchEvent(A,I),this.clearWebsocket(),this.tryConnect();break;default:this.dispatchEvent(A,I);break}}sendBufferedData(){if(this.buffer!==void 0)for(let A=this.buffer.read();A!==void 0;A=this.buffer.read())this.send(A)}scheduleConnectionRetryIfNeeded(){if(this.closedByUser||this.backoff===void 0)return;const A=g=>{const Q=new CustomEvent(nA.retry,{detail:g});this.handleEvent(nA.retry,Q)},I={backoff:this._options.retry.instantReconnect===!0?0:this.backoff.next(),retries:this._options.retry.instantReconnect===!0?0:this.backoff.retries,lastConnection:this._lastConnection};(this._options.retry.maxRetries===void 0||I.retries<=this._options.retry.maxRetries)&&(this.retryTimeout=globalThis.setTimeout(()=>A(I),I.backoff))}cancelScheduledConnectionRetry(){globalThis.clearTimeout(this.retryTimeout)}}class Hc{constructor(A){this._url=A}get url(){return this._url}withProtocols(A){return this._protocols=A,this}get protocols(){return this._protocols}withMaxRetries(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{maxRetries:A})}),this}get maxRetries(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.maxRetries}withInstantReconnect(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{instantReconnect:A})}),this}get instantReconnect(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.instantReconnect}withBackoff(A){var I;return this._options=Object.assign(Object.assign({},this._options),{retry:Object.assign(Object.assign({},(I=this._options)===null||I===void 0?void 0:I.retry),{backoff:A})}),this}get backoff(){var A,I;return(I=(A=this._options)===null||A===void 0?void 0:A.retry)===null||I===void 0?void 0:I.backoff}withBuffer(A){return this._options=Object.assign(Object.assign({},this._options),{buffer:A}),this}get buffer(){var A;return(A=this._options)===null||A===void 0?void 0:A.buffer}onOpen(A,I){return this.addListener(nA.open,A,I),this}onClose(A,I){return this.addListener(nA.close,A,I),this}onError(A,I){return this.addListener(nA.error,A,I),this}onMessage(A,I){return this.addListener(nA.message,A,I),this}onRetry(A,I){return this.addListener(nA.retry,A,I),this}onReconnect(A,I){return this.addListener(nA.reconnect,A,I),this}build(){return new Nt(this._url,this._protocols,this._options)}addListener(A,I,g){var Q,C,i,E,D,o,s,t,w,a,G,S,c,y,F,R,M,n,N,J,L;return this._options=Object.assign(Object.assign({},this._options),{listeners:{open:(i=(C=(Q=this._options)===null||Q===void 0?void 0:Q.listeners)===null||C===void 0?void 0:C.open)!==null&&i!==void 0?i:[],close:(o=(D=(E=this._options)===null||E===void 0?void 0:E.listeners)===null||D===void 0?void 0:D.close)!==null&&o!==void 0?o:[],error:(w=(t=(s=this._options)===null||s===void 0?void 0:s.listeners)===null||t===void 0?void 0:t.error)!==null&&w!==void 0?w:[],message:(S=(G=(a=this._options)===null||a===void 0?void 0:a.listeners)===null||G===void 0?void 0:G.message)!==null&&S!==void 0?S:[],retry:(F=(y=(c=this._options)===null||c===void 0?void 0:c.listeners)===null||y===void 0?void 0:y.retry)!==null&&F!==void 0?F:[],reconnect:(n=(M=(R=this._options)===null||R===void 0?void 0:R.listeners)===null||M===void 0?void 0:M.reconnect)!==null&&n!==void 0?n:[],[A]:[...(L=(J=(N=this._options)===null||N===void 0?void 0:N.listeners)===null||J===void 0?void 0:J[A])!==null&&L!==void 0?L:[],{listener:I,options:g}]}}),this}}const Yc=Object.freeze(Object.defineProperty({__proto__:null,ExponentialBackoff:Lc,Websocket:Nt,WebsocketBuilder:Hc,get WebsocketEvent(){return nA}},Symbol.toStringTag,{value:"Module"}));function MD(B){return B&&B.__esModule&&Object.prototype.hasOwnProperty.call(B,"default")?B.default:B}var Jt={exports:{}},Ut;function Lt(){return Ut||(Ut=1,function(B){var A={};A.useBlobBuilder=function(){try{return new Blob([]),!1}catch{return!0}}(),A.useArrayBufferView=!A.useBlobBuilder&&function(){try{return new Blob([new Uint8Array([])]).size===0}catch{return!0}}(),B.exports.binaryFeatures=A;var I=B.exports.BlobBuilder;typeof window<"u"&&(I=B.exports.BlobBuilder=window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder||window.BlobBuilder);function g(){this._pieces=[],this._parts=[]}g.prototype.append=function(Q){typeof Q=="number"?this._pieces.push(Q):(this.flush(),this._parts.push(Q))},g.prototype.flush=function(){if(this._pieces.length>0){var Q=new Uint8Array(this._pieces);A.useArrayBufferView||(Q=Q.buffer),this._parts.push(Q),this._pieces=[]}},g.prototype.getBuffer=function(){if(this.flush(),A.useBlobBuilder){for(var Q=new I,C=0,i=this._parts.length;C<i;C++)Q.append(this._parts[C]);return Q.getBlob()}else return new Blob(this._parts)},B.exports.BufferBuilder=g}(Jt)),Jt.exports}var ND,Ht;function dc(){if(Ht)return ND;Ht=1;var B=Lt().BufferBuilder,A=Lt().binaryFeatures,I={unpack:function(E){var D=new g(E);return D.unpack()},pack:function(E){var D=new Q;D.pack(E);var o=D.getBuffer();return o}};ND=I;function g(E){this.index=0,this.dataBuffer=E,this.dataView=new Uint8Array(this.dataBuffer),this.length=this.dataBuffer.byteLength}g.prototype.unpack=function(){var E=this.unpack_uint8();if(E<128)return E;if((E^224)<32)return(E^224)-32;var D;if((D=E^160)<=15)return this.unpack_raw(D);if((D=E^176)<=15)return this.unpack_string(D);if((D=E^144)<=15)return this.unpack_array(D);if((D=E^128)<=15)return this.unpack_map(D);switch(E){case 192:return null;case 193:return;case 194:return!1;case 195:return!0;case 202:return this.unpack_float();case 203:return this.unpack_double();case 204:return this.unpack_uint8();case 205:return this.unpack_uint16();case 206:return this.unpack_uint32();case 207:return this.unpack_uint64();case 208:return this.unpack_int8();case 209:return this.unpack_int16();case 210:return this.unpack_int32();case 211:return this.unpack_int64();case 212:return;case 213:return;case 214:return;case 215:return;case 216:return D=this.unpack_uint16(),this.unpack_string(D);case 217:return D=this.unpack_uint32(),this.unpack_string(D);case 218:return D=this.unpack_uint16(),this.unpack_raw(D);case 219:return D=this.unpack_uint32(),this.unpack_raw(D);case 220:return D=this.unpack_uint16(),this.unpack_array(D);case 221:return D=this.unpack_uint32(),this.unpack_array(D);case 222:return D=this.unpack_uint16(),this.unpack_map(D);case 223:return D=this.unpack_uint32(),this.unpack_map(D)}},g.prototype.unpack_uint8=function(){var E=this.dataView[this.index]&255;return this.index++,E},g.prototype.unpack_uint16=function(){var E=this.read(2),D=(E[0]&255)*256+(E[1]&255);return this.index+=2,D},g.prototype.unpack_uint32=function(){var E=this.read(4),D=((E[0]*256+E[1])*256+E[2])*256+E[3];return this.index+=4,D},g.prototype.unpack_uint64=function(){var E=this.read(8),D=((((((E[0]*256+E[1])*256+E[2])*256+E[3])*256+E[4])*256+E[5])*256+E[6])*256+E[7];return this.index+=8,D},g.prototype.unpack_int8=function(){var E=this.unpack_uint8();return E<128?E:E-256},g.prototype.unpack_int16=function(){var E=this.unpack_uint16();return E<32768?E:E-65536},g.prototype.unpack_int32=function(){var E=this.unpack_uint32();return E<Math.pow(2,31)?E:E-Math.pow(2,32)},g.prototype.unpack_int64=function(){var E=this.unpack_uint64();return E<Math.pow(2,63)?E:E-Math.pow(2,64)},g.prototype.unpack_raw=function(E){if(this.length<this.index+E)throw new Error("BinaryPackFailure: index is out of range "+this.index+" "+E+" "+this.length);var D=this.dataBuffer.slice(this.index,this.index+E);return this.index+=E,D},g.prototype.unpack_string=function(E){for(var D=this.read(E),o=0,s="",t,w;o<E;)t=D[o],t<128?(s+=String.fromCharCode(t),o++):(t^192)<32?(w=(t^192)<<6|D[o+1]&63,s+=String.fromCharCode(w),o+=2):(w=(t&15)<<12|(D[o+1]&63)<<6|D[o+2]&63,s+=String.fromCharCode(w),o+=3);return this.index+=E,s},g.prototype.unpack_array=function(E){for(var D=new Array(E),o=0;o<E;o++)D[o]=this.unpack();return D},g.prototype.unpack_map=function(E){for(var D={},o=0;o<E;o++){var s=this.unpack(),t=this.unpack();D[s]=t}return D},g.prototype.unpack_float=function(){var E=this.unpack_uint32(),D=E>>31,o=(E>>23&255)-127,s=E&8388607|8388608;return(D===0?1:-1)*s*Math.pow(2,o-23)},g.prototype.unpack_double=function(){var E=this.unpack_uint32(),D=this.unpack_uint32(),o=E>>31,s=(E>>20&2047)-1023,t=E&1048575|1048576,w=t*Math.pow(2,s-20)+D*Math.pow(2,s-52);return(o===0?1:-1)*w},g.prototype.read=function(E){var D=this.index;if(D+E<=this.length)return this.dataView.subarray(D,D+E);throw new Error("BinaryPackFailure: read index out of range")};function Q(){this.bufferBuilder=new B}Q.prototype.getBuffer=function(){return this.bufferBuilder.getBuffer()},Q.prototype.pack=function(E){var D=typeof E;if(D==="string")this.pack_string(E);else if(D==="number")Math.floor(E)===E?this.pack_integer(E):this.pack_double(E);else if(D==="boolean")E===!0?this.bufferBuilder.append(195):E===!1&&this.bufferBuilder.append(194);else if(D==="undefined")this.bufferBuilder.append(192);else if(D==="object")if(E===null)this.bufferBuilder.append(192);else{var o=E.constructor;if(o==Array)this.pack_array(E);else if(o==Blob||o==File||E instanceof Blob||E instanceof File)this.pack_bin(E);else if(o==ArrayBuffer)A.useArrayBufferView?this.pack_bin(new Uint8Array(E)):this.pack_bin(E);else if("BYTES_PER_ELEMENT"in E)A.useArrayBufferView?this.pack_bin(new Uint8Array(E.buffer)):this.pack_bin(E.buffer);else if(o==Object||o.toString().startsWith("class"))this.pack_object(E);else if(o==Date)this.pack_string(E.toString());else if(typeof E.toBinaryPack=="function")this.bufferBuilder.append(E.toBinaryPack());else throw new Error('Type "'+o.toString()+'" not yet supported')}else throw new Error('Type "'+D+'" not yet supported');this.bufferBuilder.flush()},Q.prototype.pack_bin=function(E){var D=E.length||E.byteLength||E.size;if(D<=15)this.pack_uint8(160+D);else if(D<=65535)this.bufferBuilder.append(218),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(219),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(E)},Q.prototype.pack_string=function(E){var D=i(E);if(D<=15)this.pack_uint8(176+D);else if(D<=65535)this.bufferBuilder.append(216),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(217),this.pack_uint32(D);else throw new Error("Invalid length");this.bufferBuilder.append(E)},Q.prototype.pack_array=function(E){var D=E.length;if(D<=15)this.pack_uint8(144+D);else if(D<=65535)this.bufferBuilder.append(220),this.pack_uint16(D);else if(D<=4294967295)this.bufferBuilder.append(221),this.pack_uint32(D);else throw new Error("Invalid length");for(var o=0;o<D;o++)this.pack(E[o])},Q.prototype.pack_integer=function(E){if(E>=-32&&E<=127)this.bufferBuilder.append(E&255);else if(E>=0&&E<=255)this.bufferBuilder.append(204),this.pack_uint8(E);else if(E>=-128&&E<=127)this.bufferBuilder.append(208),this.pack_int8(E);else if(E>=0&&E<=65535)this.bufferBuilder.append(205),this.pack_uint16(E);else if(E>=-32768&&E<=32767)this.bufferBuilder.append(209),this.pack_int16(E);else if(E>=0&&E<=4294967295)this.bufferBuilder.append(206),this.pack_uint32(E);else if(E>=-2147483648&&E<=2147483647)this.bufferBuilder.append(210),this.pack_int32(E);else if(E>=-9223372036854776e3&&E<=9223372036854776e3)this.bufferBuilder.append(211),this.pack_int64(E);else if(E>=0&&E<=18446744073709552e3)this.bufferBuilder.append(207),this.pack_uint64(E);else throw new Error("Invalid integer")},Q.prototype.pack_double=function(E){var D=0;E<0&&(D=1,E=-E);var o=Math.floor(Math.log(E)/Math.LN2),s=E/Math.pow(2,o)-1,t=Math.floor(s*Math.pow(2,52)),w=Math.pow(2,32),a=D<<31|o+1023<<20|t/w&1048575,G=t%w;this.bufferBuilder.append(203),this.pack_int32(a),this.pack_int32(G)},Q.prototype.pack_object=function(E){var D=Object.keys(E),o=D.length;if(o<=15)this.pack_uint8(128+o);else if(o<=65535)this.bufferBuilder.append(222),this.pack_uint16(o);else if(o<=4294967295)this.bufferBuilder.append(223),this.pack_uint32(o);else throw new Error("Invalid length");for(var s in E)E.hasOwnProperty(s)&&(this.pack(s),this.pack(E[s]))},Q.prototype.pack_uint8=function(E){this.bufferBuilder.append(E)},Q.prototype.pack_uint16=function(E){this.bufferBuilder.append(E>>8),this.bufferBuilder.append(E&255)},Q.prototype.pack_uint32=function(E){var D=E&4294967295;this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255)},Q.prototype.pack_uint64=function(E){var D=E/Math.pow(2,32),o=E%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)},Q.prototype.pack_int8=function(E){this.bufferBuilder.append(E&255)},Q.prototype.pack_int16=function(E){this.bufferBuilder.append((E&65280)>>8),this.bufferBuilder.append(E&255)},Q.prototype.pack_int32=function(E){this.bufferBuilder.append(E>>>24&255),this.bufferBuilder.append((E&16711680)>>>16),this.bufferBuilder.append((E&65280)>>>8),this.bufferBuilder.append(E&255)},Q.prototype.pack_int64=function(E){var D=Math.floor(E/Math.pow(2,32)),o=E%Math.pow(2,32);this.bufferBuilder.append((D&4278190080)>>>24),this.bufferBuilder.append((D&16711680)>>>16),this.bufferBuilder.append((D&65280)>>>8),this.bufferBuilder.append(D&255),this.bufferBuilder.append((o&4278190080)>>>24),this.bufferBuilder.append((o&16711680)>>>16),this.bufferBuilder.append((o&65280)>>>8),this.bufferBuilder.append(o&255)};function C(E){var D=E.charCodeAt(0);return D<=2047?"00":D<=65535?"000":D<=2097151?"0000":D<=67108863?"00000":"000000"}function i(E){return E.length>600?new Blob([E]).size:E.replace(/[^\u0000-\u007F]/g,C).length}return ND}var Kc=dc();const Yt=MD(Kc);let dt=!0,Kt=!0;function PB(B,A,I){const g=B.match(A);return g&&g.length>=I&&parseInt(g[I],10)}function AB(B,A,I){if(!B.RTCPeerConnection)return;const g=B.RTCPeerConnection.prototype,Q=g.addEventListener;g.addEventListener=function(i,E){if(i!==A)return Q.apply(this,arguments);const D=o=>{const s=I(o);s&&(E.handleEvent?E.handleEvent(s):E(s))};return this._eventMap=this._eventMap||{},this._eventMap[A]||(this._eventMap[A]=new Map),this._eventMap[A].set(E,D),Q.apply(this,[i,D])};const C=g.removeEventListener;g.removeEventListener=function(i,E){if(i!==A||!this._eventMap||!this._eventMap[A])return C.apply(this,arguments);if(!this._eventMap[A].has(E))return C.apply(this,arguments);const D=this._eventMap[A].get(E);return this._eventMap[A].delete(E),this._eventMap[A].size===0&&delete this._eventMap[A],Object.keys(this._eventMap).length===0&&delete this._eventMap,C.apply(this,[i,D])},Object.defineProperty(g,"on"+A,{get(){return this["_on"+A]},set(i){this["_on"+A]&&(this.removeEventListener(A,this["_on"+A]),delete this["_on"+A]),i&&this.addEventListener(A,this["_on"+A]=i)},enumerable:!0,configurable:!0})}function lc(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(dt=B,B?"adapter.js logging disabled":"adapter.js logging enabled")}function fc(B){return typeof B!="boolean"?new Error("Argument type: "+typeof B+". Please use a boolean."):(Kt=!B,"adapter.js deprecation warnings "+(B?"disabled":"enabled"))}function JD(){if(typeof window=="object"){if(dt)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function LE(B,A){Kt&&console.warn(B+" is deprecated, please use "+A+" instead.")}function pc(B){const A={browser:null,version:null};if(typeof B>"u"||!B.navigator)return A.browser="Not a browser.",A;const{navigator:I}=B;if(I.mozGetUserMedia)A.browser="firefox",A.version=PB(I.userAgent,/Firefox\/(\d+)\./,1);else if(I.webkitGetUserMedia||B.isSecureContext===!1&&B.webkitRTCPeerConnection&&!B.RTCIceGatherer)A.browser="chrome",A.version=PB(I.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(I.mediaDevices&&I.userAgent.match(/Edge\/(\d+).(\d+)$/))A.browser="edge",A.version=PB(I.userAgent,/Edge\/(\d+).(\d+)$/,2);else if(B.RTCPeerConnection&&I.userAgent.match(/AppleWebKit\/(\d+)\./))A.browser="safari",A.version=PB(I.userAgent,/AppleWebKit\/(\d+)\./,1),A.supportsUnifiedPlan=B.RTCRtpTransceiver&&"currentDirection"in B.RTCRtpTransceiver.prototype;else return A.browser="Not a supported browser.",A;return A}function lt(B){return Object.prototype.toString.call(B)==="[object Object]"}function ft(B){return lt(B)?Object.keys(B).reduce(function(A,I){const g=lt(B[I]),Q=g?ft(B[I]):B[I],C=g&&!Object.keys(Q).length;return Q===void 0||C?A:Object.assign(A,{[I]:Q})},{}):B}function UD(B,A,I){!A||I.has(A.id)||(I.set(A.id,A),Object.keys(A).forEach(g=>{g.endsWith("Id")?UD(B,B.get(A[g]),I):g.endsWith("Ids")&&A[g].forEach(Q=>{UD(B,B.get(Q),I)})}))}function pt(B,A,I){const g=I?"outbound-rtp":"inbound-rtp",Q=new Map;if(A===null)return Q;const C=[];return B.forEach(i=>{i.type==="track"&&i.trackIdentifier===A.id&&C.push(i)}),C.forEach(i=>{B.forEach(E=>{E.type===g&&E.trackId===i.id&&UD(B,E,Q)})}),Q}const xt=JD;function qt(B,A){const I=B&&B.navigator;if(!I.mediaDevices)return;const g=function(E){if(typeof E!="object"||E.mandatory||E.optional)return E;const D={};return Object.keys(E).forEach(o=>{if(o==="require"||o==="advanced"||o==="mediaSource")return;const s=typeof E[o]=="object"?E[o]:{ideal:E[o]};s.exact!==void 0&&typeof s.exact=="number"&&(s.min=s.max=s.exact);const t=function(w,a){return w?w+a.charAt(0).toUpperCase()+a.slice(1):a==="deviceId"?"sourceId":a};if(s.ideal!==void 0){D.optional=D.optional||[];let w={};typeof s.ideal=="number"?(w[t("min",o)]=s.ideal,D.optional.push(w),w={},w[t("max",o)]=s.ideal,D.optional.push(w)):(w[t("",o)]=s.ideal,D.optional.push(w))}s.exact!==void 0&&typeof s.exact!="number"?(D.mandatory=D.mandatory||{},D.mandatory[t("",o)]=s.exact):["min","max"].forEach(w=>{s[w]!==void 0&&(D.mandatory=D.mandatory||{},D.mandatory[t(w,o)]=s[w])})}),E.advanced&&(D.optional=(D.optional||[]).concat(E.advanced)),D},Q=function(E,D){if(A.version>=61)return D(E);if(E=JSON.parse(JSON.stringify(E)),E&&typeof E.audio=="object"){const o=function(s,t,w){t in s&&!(w in s)&&(s[w]=s[t],delete s[t])};E=JSON.parse(JSON.stringify(E)),o(E.audio,"autoGainControl","googAutoGainControl"),o(E.audio,"noiseSuppression","googNoiseSuppression"),E.audio=g(E.audio)}if(E&&typeof E.video=="object"){let o=E.video.facingMode;o=o&&(typeof o=="object"?o:{ideal:o});const s=A.version<66;if(o&&(o.exact==="user"||o.exact==="environment"||o.ideal==="user"||o.ideal==="environment")&&!(I.mediaDevices.getSupportedConstraints&&I.mediaDevices.getSupportedConstraints().facingMode&&!s)){delete E.video.facingMode;let t;if(o.exact==="environment"||o.ideal==="environment"?t=["back","rear"]:(o.exact==="user"||o.ideal==="user")&&(t=["front"]),t)return I.mediaDevices.enumerateDevices().then(w=>{w=w.filter(G=>G.kind==="videoinput");let a=w.find(G=>t.some(S=>G.label.toLowerCase().includes(S)));return!a&&w.length&&t.includes("back")&&(a=w[w.length-1]),a&&(E.video.deviceId=o.exact?{exact:a.deviceId}:{ideal:a.deviceId}),E.video=g(E.video),xt("chrome: "+JSON.stringify(E)),D(E)})}E.video=g(E.video)}return xt("chrome: "+JSON.stringify(E)),D(E)},C=function(E){return A.version>=64?E:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[E.name]||E.name,message:E.message,constraint:E.constraint||E.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},i=function(E,D,o){Q(E,s=>{I.webkitGetUserMedia(s,D,t=>{o&&o(C(t))})})};if(I.getUserMedia=i.bind(I),I.mediaDevices.getUserMedia){const E=I.mediaDevices.getUserMedia.bind(I.mediaDevices);Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(D){return Q(D,o=>E(o).then(s=>{if(o.audio&&!s.getAudioTracks().length||o.video&&!s.getVideoTracks().length)throw s.getTracks().forEach(t=>{t.stop()}),new DOMException("","NotFoundError");return s},s=>Promise.reject(C(s))))})}}function xc(B,A){if(!(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices)&&B.navigator.mediaDevices){if(typeof A!="function"){console.error("shimGetDisplayMedia: getSourceId argument is not a function");return}B.navigator.mediaDevices.getDisplayMedia=function(I){return A(I).then(g=>{const Q=I.video&&I.video.width,C=I.video&&I.video.height,i=I.video&&I.video.frameRate;return I.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:g,maxFrameRate:i||3}},Q&&(I.video.mandatory.maxWidth=Q),C&&(I.video.mandatory.maxHeight=C),B.navigator.mediaDevices.getUserMedia(I)})}}}function ut(B){B.MediaStream=B.MediaStream||B.webkitMediaStream}function mt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("ontrack"in B.RTCPeerConnection.prototype)){Object.defineProperty(B.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(I){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=I)},enumerable:!0,configurable:!0});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=I=>{I.stream.addEventListener("addtrack",g=>{let Q;B.RTCPeerConnection.prototype.getReceivers?Q=this.getReceivers().find(i=>i.track&&i.track.id===g.track.id):Q={track:g.track};const C=new Event("track");C.track=g.track,C.receiver=Q,C.transceiver={receiver:Q},C.streams=[I.stream],this.dispatchEvent(C)}),I.stream.getTracks().forEach(g=>{let Q;B.RTCPeerConnection.prototype.getReceivers?Q=this.getReceivers().find(i=>i.track&&i.track.id===g.id):Q={track:g};const C=new Event("track");C.track=g,C.receiver=Q,C.transceiver={receiver:Q},C.streams=[I.stream],this.dispatchEvent(C)})},this.addEventListener("addstream",this._ontrackpoly)),A.apply(this,arguments)}}else AB(B,"track",A=>(A.transceiver||Object.defineProperty(A,"transceiver",{value:{receiver:A.receiver}}),A))}function bt(B){if(typeof B=="object"&&B.RTCPeerConnection&&!("getSenders"in B.RTCPeerConnection.prototype)&&"createDTMFSender"in B.RTCPeerConnection.prototype){const A=function(Q,C){return{track:C,get dtmf(){return this._dtmf===void 0&&(C.kind==="audio"?this._dtmf=Q.createDTMFSender(C):this._dtmf=null),this._dtmf},_pc:Q}};if(!B.RTCPeerConnection.prototype.getSenders){B.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(i,E){let D=Q.apply(this,arguments);return D||(D=A(this,i),this._senders.push(D)),D};const C=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(i){C.apply(this,arguments);const E=this._senders.indexOf(i);E!==-1&&this._senders.splice(E,1)}}const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(Q){this._senders=this._senders||[],I.apply(this,[Q]),Q.getTracks().forEach(C=>{this._senders.push(A(this,C))})};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(Q){this._senders=this._senders||[],g.apply(this,[Q]),Q.getTracks().forEach(C=>{const i=this._senders.find(E=>E.track===C);i&&this._senders.splice(this._senders.indexOf(i),1)})}}else if(typeof B=="object"&&B.RTCPeerConnection&&"getSenders"in B.RTCPeerConnection.prototype&&"createDTMFSender"in B.RTCPeerConnection.prototype&&B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)){const A=B.RTCPeerConnection.prototype.getSenders;B.RTCPeerConnection.prototype.getSenders=function(){const I=A.apply(this,[]);return I.forEach(g=>g._pc=this),I},Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function Pt(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[I,g,Q]=arguments;if(arguments.length>0&&typeof I=="function")return A.apply(this,arguments);if(A.length===0&&(arguments.length===0||typeof I!="function"))return A.apply(this,[]);const C=function(E){const D={};return E.result().forEach(o=>{const s={id:o.id,timestamp:o.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[o.type]||o.type};o.names().forEach(t=>{s[t]=o.stat(t)}),D[s.id]=s}),D},i=function(E){return new Map(Object.keys(E).map(D=>[D,E[D]]))};if(arguments.length>=2){const E=function(D){g(i(C(D)))};return A.apply(this,[E,I])}return new Promise((E,D)=>{A.apply(this,[function(o){E(i(C(o)))},D])}).then(g,Q)}}function Tt(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender&&B.RTCRtpReceiver))return;if(!("getStats"in B.RTCRtpSender.prototype)){const I=B.RTCPeerConnection.prototype.getSenders;I&&(B.RTCPeerConnection.prototype.getSenders=function(){const Q=I.apply(this,[]);return Q.forEach(C=>C._pc=this),Q});const g=B.RTCPeerConnection.prototype.addTrack;g&&(B.RTCPeerConnection.prototype.addTrack=function(){const Q=g.apply(this,arguments);return Q._pc=this,Q}),B.RTCRtpSender.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(C=>pt(C,Q.track,!0))}}if(!("getStats"in B.RTCRtpReceiver.prototype)){const I=B.RTCPeerConnection.prototype.getReceivers;I&&(B.RTCPeerConnection.prototype.getReceivers=function(){const g=I.apply(this,[]);return g.forEach(Q=>Q._pc=this),g}),AB(B,"track",g=>(g.receiver._pc=g.srcElement,g)),B.RTCRtpReceiver.prototype.getStats=function(){const g=this;return this._pc.getStats().then(Q=>pt(Q,g.track,!1))}}if(!("getStats"in B.RTCRtpSender.prototype&&"getStats"in B.RTCRtpReceiver.prototype))return;const A=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof B.MediaStreamTrack){const I=arguments[0];let g,Q,C;return this.getSenders().forEach(i=>{i.track===I&&(g?C=!0:g=i)}),this.getReceivers().forEach(i=>(i.track===I&&(Q?C=!0:Q=i),i.track===I)),C||g&&Q?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):g?g.getStats():Q?Q.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return A.apply(this,arguments)}}function Ot(B){B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(C=>this._shimmedLocalStreams[C][0])};const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addTrack=function(C,i){if(!i)return A.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const E=A.apply(this,arguments);return this._shimmedLocalStreams[i.id]?this._shimmedLocalStreams[i.id].indexOf(E)===-1&&this._shimmedLocalStreams[i.id].push(E):this._shimmedLocalStreams[i.id]=[i,E],E};const I=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(C){this._shimmedLocalStreams=this._shimmedLocalStreams||{},C.getTracks().forEach(D=>{if(this.getSenders().find(o=>o.track===D))throw new DOMException("Track already exists.","InvalidAccessError")});const i=this.getSenders();I.apply(this,arguments);const E=this.getSenders().filter(D=>i.indexOf(D)===-1);this._shimmedLocalStreams[C.id]=[C].concat(E)};const g=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(C){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[C.id],g.apply(this,arguments)};const Q=B.RTCPeerConnection.prototype.removeTrack;B.RTCPeerConnection.prototype.removeTrack=function(C){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},C&&Object.keys(this._shimmedLocalStreams).forEach(i=>{const E=this._shimmedLocalStreams[i].indexOf(C);E!==-1&&this._shimmedLocalStreams[i].splice(E,1),this._shimmedLocalStreams[i].length===1&&delete this._shimmedLocalStreams[i]}),Q.apply(this,arguments)}}function Xt(B,A){if(!B.RTCPeerConnection)return;if(B.RTCPeerConnection.prototype.addTrack&&A.version>=65)return Ot(B);const I=B.RTCPeerConnection.prototype.getLocalStreams;B.RTCPeerConnection.prototype.getLocalStreams=function(){const o=I.apply(this);return this._reverseStreams=this._reverseStreams||{},o.map(s=>this._reverseStreams[s.id])};const g=B.RTCPeerConnection.prototype.addStream;B.RTCPeerConnection.prototype.addStream=function(o){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},o.getTracks().forEach(s=>{if(this.getSenders().find(t=>t.track===s))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[o.id]){const s=new B.MediaStream(o.getTracks());this._streams[o.id]=s,this._reverseStreams[s.id]=o,o=s}g.apply(this,[o])};const Q=B.RTCPeerConnection.prototype.removeStream;B.RTCPeerConnection.prototype.removeStream=function(o){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[o.id]||o]),delete this._reverseStreams[this._streams[o.id]?this._streams[o.id].id:o.id],delete this._streams[o.id]},B.RTCPeerConnection.prototype.addTrack=function(o,s){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const t=[].slice.call(arguments,1);if(t.length!==1||!t[0].getTracks().find(a=>a===o))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(a=>a.track===o))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const w=this._streams[s.id];if(w)w.addTrack(o),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const a=new B.MediaStream([o]);this._streams[s.id]=a,this._reverseStreams[a.id]=s,this.addStream(a)}return this.getSenders().find(a=>a.track===o)};function C(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],G=o._streams[a.id];t=t.replace(new RegExp(G.id,"g"),a.id)}),new RTCSessionDescription({type:s.type,sdp:t})}function i(o,s){let t=s.sdp;return Object.keys(o._reverseStreams||[]).forEach(w=>{const a=o._reverseStreams[w],G=o._streams[a.id];t=t.replace(new RegExp(a.id,"g"),G.id)}),new RTCSessionDescription({type:s.type,sdp:t})}["createOffer","createAnswer"].forEach(function(o){const s=B.RTCPeerConnection.prototype[o],t={[o](){const w=arguments;return arguments.length&&typeof arguments[0]=="function"?s.apply(this,[a=>{const G=C(this,a);w[0].apply(null,[G])},a=>{w[1]&&w[1].apply(null,a)},arguments[2]]):s.apply(this,arguments).then(a=>C(this,a))}};B.RTCPeerConnection.prototype[o]=t[o]});const E=B.RTCPeerConnection.prototype.setLocalDescription;B.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?E.apply(this,arguments):(arguments[0]=i(this,arguments[0]),E.apply(this,arguments))};const D=Object.getOwnPropertyDescriptor(B.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(B.RTCPeerConnection.prototype,"localDescription",{get(){const o=D.get.apply(this);return o.type===""?o:C(this,o)}}),B.RTCPeerConnection.prototype.removeTrack=function(o){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!o._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(o._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let s;Object.keys(this._streams).forEach(t=>{this._streams[t].getTracks().find(w=>o.track===w)&&(s=this._streams[t])}),s&&(s.getTracks().length===1?this.removeStream(this._reverseStreams[s.id]):s.removeTrack(o.track),this.dispatchEvent(new Event("negotiationneeded")))}}function LD(B,A){!B.RTCPeerConnection&&B.webkitRTCPeerConnection&&(B.RTCPeerConnection=B.webkitRTCPeerConnection),B.RTCPeerConnection&&A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(I){const g=B.RTCPeerConnection.prototype[I],Q={[I](){return arguments[0]=new(I==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),g.apply(this,arguments)}};B.RTCPeerConnection.prototype[I]=Q[I]})}function vt(B,A){AB(B,"negotiationneeded",I=>{const g=I.target;if(!((A.version<72||g.getConfiguration&&g.getConfiguration().sdpSemantics==="plan-b")&&g.signalingState!=="stable"))return I})}const Zt=Object.freeze(Object.defineProperty({__proto__:null,fixNegotiationNeeded:vt,shimAddTrackRemoveTrack:Xt,shimAddTrackRemoveTrackWithNative:Ot,shimGetDisplayMedia:xc,shimGetSendersWithDtmf:bt,shimGetStats:Pt,shimGetUserMedia:qt,shimMediaStream:ut,shimOnTrack:mt,shimPeerConnection:LD,shimSenderReceiverGetStats:Tt},Symbol.toStringTag,{value:"Module"}));function qc(B,A){let I=!1;return B=JSON.parse(JSON.stringify(B)),B.filter(g=>{if(g&&(g.urls||g.url)){let Q=g.urls||g.url;g.url&&!g.urls&&LE("RTCIceServer.url","RTCIceServer.urls");const C=typeof Q=="string";return C&&(Q=[Q]),Q=Q.filter(i=>{if(i.indexOf("stun:")===0)return!1;const E=i.startsWith("turn")&&!i.startsWith("turn:[")&&i.includes("transport=udp");return E&&!I?(I=!0,!0):E&&!I}),delete g.url,g.urls=C?Q[0]:Q,!!Q.length}})}var Vt={exports:{}},Wt;function jt(){return Wt||(Wt=1,function(B){var A={};A.generateIdentifier=function(){return Math.random().toString(36).substr(2,10)},A.localCName=A.generateIdentifier(),A.splitLines=function(I){return I.trim().split(`
|
|
1040
1040
|
`).map(function(g){return g.trim()})},A.splitSections=function(I){var g=I.split(`
|
|
1041
1041
|
m=`);return g.map(function(Q,C){return(C>0?"m="+Q:Q).trim()+`\r
|
|
1042
1042
|
`})},A.getDescription=function(I){var g=A.splitSections(I);return g&&g[0]},A.getMediaSections=function(I){var g=A.splitSections(I);return g.shift(),g},A.matchPrefix=function(I,g){return A.splitLines(I).filter(function(Q){return Q.indexOf(g)===0})},A.parseCandidate=function(I){var g;I.indexOf("a=candidate:")===0?g=I.substring(12).split(" "):g=I.substring(10).split(" ");for(var Q={foundation:g[0],component:parseInt(g[1],10),protocol:g[2].toLowerCase(),priority:parseInt(g[3],10),ip:g[4],address:g[4],port:parseInt(g[5],10),type:g[7]},C=8;C<g.length;C+=2)switch(g[C]){case"raddr":Q.relatedAddress=g[C+1];break;case"rport":Q.relatedPort=parseInt(g[C+1],10);break;case"tcptype":Q.tcpType=g[C+1];break;case"ufrag":Q.ufrag=g[C+1],Q.usernameFragment=g[C+1];break;default:Q[g[C]]=g[C+1];break}return Q},A.writeCandidate=function(I){var g=[];g.push(I.foundation),g.push(I.component),g.push(I.protocol.toUpperCase()),g.push(I.priority),g.push(I.address||I.ip),g.push(I.port);var Q=I.type;return g.push("typ"),g.push(Q),Q!=="host"&&I.relatedAddress&&I.relatedPort&&(g.push("raddr"),g.push(I.relatedAddress),g.push("rport"),g.push(I.relatedPort)),I.tcpType&&I.protocol.toLowerCase()==="tcp"&&(g.push("tcptype"),g.push(I.tcpType)),(I.usernameFragment||I.ufrag)&&(g.push("ufrag"),g.push(I.usernameFragment||I.ufrag)),"candidate:"+g.join(" ")},A.parseIceOptions=function(I){return I.substr(14).split(" ")},A.parseRtpMap=function(I){var g=I.substr(9).split(" "),Q={payloadType:parseInt(g.shift(),10)};return g=g[0].split("/"),Q.name=g[0],Q.clockRate=parseInt(g[1],10),Q.channels=g.length===3?parseInt(g[2],10):1,Q.numChannels=Q.channels,Q},A.writeRtpMap=function(I){var g=I.payloadType;I.preferredPayloadType!==void 0&&(g=I.preferredPayloadType);var Q=I.channels||I.numChannels||1;return"a=rtpmap:"+g+" "+I.name+"/"+I.clockRate+(Q!==1?"/"+Q:"")+`\r
|
|
@@ -1074,46 +1074,46 @@ t=0 0\r
|
|
|
1074
1074
|
`;i+="a="+E,i+="a=ssrc:"+I.sendEncodingParameters[0].ssrc+" "+E,I.sendEncodingParameters[0].rtx&&(i+="a=ssrc:"+I.sendEncodingParameters[0].rtx.ssrc+" "+E,i+="a=ssrc-group:FID "+I.sendEncodingParameters[0].ssrc+" "+I.sendEncodingParameters[0].rtx.ssrc+`\r
|
|
1075
1075
|
`)}return i+="a=ssrc:"+I.sendEncodingParameters[0].ssrc+" cname:"+A.localCName+`\r
|
|
1076
1076
|
`,I.rtpSender&&I.sendEncodingParameters[0].rtx&&(i+="a=ssrc:"+I.sendEncodingParameters[0].rtx.ssrc+" cname:"+A.localCName+`\r
|
|
1077
|
-
`),i},A.getDirection=function(I,g){for(var Q=A.splitLines(I),C=0;C<Q.length;C++)switch(Q[C]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return Q[C].substr(2)}return g?A.getDirection(g):"sendrecv"},A.getKind=function(I){var g=A.splitLines(I),Q=g[0].split(" ");return Q[0].substr(2)},A.isRejected=function(I){return I.split(" ",2)[1]==="0"},A.parseMLine=function(I){var g=A.splitLines(I),Q=g[0].substr(2).split(" ");return{kind:Q[0],port:parseInt(Q[1],10),protocol:Q[2],fmt:Q.slice(3).join(" ")}},A.parseOLine=function(I){var g=A.matchPrefix(I,"o=")[0],Q=g.substr(2).split(" ");return{username:Q[0],sessionId:Q[1],sessionVersion:parseInt(Q[2],10),netType:Q[3],addressType:Q[4],address:Q[5]}},A.isValidSDP=function(I){if(typeof I!="string"||I.length===0)return!1;for(var g=A.splitLines(I),Q=0;Q<g.length;Q++)if(g[Q].length<2||g[Q].charAt(1)!=="=")return!1;return!0},B.exports=A}(
|
|
1077
|
+
`),i},A.getDirection=function(I,g){for(var Q=A.splitLines(I),C=0;C<Q.length;C++)switch(Q[C]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return Q[C].substr(2)}return g?A.getDirection(g):"sendrecv"},A.getKind=function(I){var g=A.splitLines(I),Q=g[0].split(" ");return Q[0].substr(2)},A.isRejected=function(I){return I.split(" ",2)[1]==="0"},A.parseMLine=function(I){var g=A.splitLines(I),Q=g[0].substr(2).split(" ");return{kind:Q[0],port:parseInt(Q[1],10),protocol:Q[2],fmt:Q.slice(3).join(" ")}},A.parseOLine=function(I){var g=A.matchPrefix(I,"o=")[0],Q=g.substr(2).split(" ");return{username:Q[0],sessionId:Q[1],sessionVersion:parseInt(Q[2],10),netType:Q[3],addressType:Q[4],address:Q[5]}},A.isValidSDP=function(I){if(typeof I!="string"||I.length===0)return!1;for(var g=A.splitLines(I),Q=0;Q<g.length;Q++)if(g[Q].length<2||g[Q].charAt(1)!=="=")return!1;return!0},B.exports=A}(Vt)),Vt.exports}var HD,zt;function uc(){if(zt)return HD;zt=1;var B=jt();function A(D){return{inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[D.type]||D.type}function I(D,o,s,t,w){var a=B.writeRtpDescription(D.kind,o);if(a+=B.writeIceParameters(D.iceGatherer.getLocalParameters()),a+=B.writeDtlsParameters(D.dtlsTransport.getLocalParameters(),s==="offer"?"actpass":w||"active"),a+="a=mid:"+D.mid+`\r
|
|
1078
1078
|
`,D.rtpSender&&D.rtpReceiver?a+=`a=sendrecv\r
|
|
1079
1079
|
`:D.rtpSender?a+=`a=sendonly\r
|
|
1080
1080
|
`:D.rtpReceiver?a+=`a=recvonly\r
|
|
1081
1081
|
`:a+=`a=inactive\r
|
|
1082
|
-
`,D.rtpSender){var G=D.rtpSender._initialTrackId||D.rtpSender.track.id;D.rtpSender._initialTrackId=G;var
|
|
1083
|
-
`;a+="a="+
|
|
1082
|
+
`,D.rtpSender){var G=D.rtpSender._initialTrackId||D.rtpSender.track.id;D.rtpSender._initialTrackId=G;var S="msid:"+(t?t.id:"-")+" "+G+`\r
|
|
1083
|
+
`;a+="a="+S,a+="a=ssrc:"+D.sendEncodingParameters[0].ssrc+" "+S,D.sendEncodingParameters[0].rtx&&(a+="a=ssrc:"+D.sendEncodingParameters[0].rtx.ssrc+" "+S,a+="a=ssrc-group:FID "+D.sendEncodingParameters[0].ssrc+" "+D.sendEncodingParameters[0].rtx.ssrc+`\r
|
|
1084
1084
|
`)}return a+="a=ssrc:"+D.sendEncodingParameters[0].ssrc+" cname:"+B.localCName+`\r
|
|
1085
1085
|
`,D.rtpSender&&D.sendEncodingParameters[0].rtx&&(a+="a=ssrc:"+D.sendEncodingParameters[0].rtx.ssrc+" cname:"+B.localCName+`\r
|
|
1086
|
-
`),a}function g(D,o){var s=!1;return D=JSON.parse(JSON.stringify(D)),D.filter(function(t){if(t&&(t.urls||t.url)){var w=t.urls||t.url;t.url&&!t.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var a=typeof w=="string";return a&&(w=[w]),w=w.filter(function(G){var
|
|
1087
|
-
`:Y[
|
|
1088
|
-
`,R._localDescription.sdp=B.getDescription(R._localDescription.sdp)+Y.join("");var d=R.transceivers.every(function(l){return l.iceGatherer&&l.iceGatherer.state==="completed"});R.iceGatheringState!=="gathering"&&(R.iceGatheringState="gathering",R._emitGatheringStateChange()),L||R._dispatchEvent("icecandidate",M),d&&(R._dispatchEvent("icecandidate",new Event("icecandidate")),R.iceGatheringState="complete",R._emitGatheringStateChange())}},D.setTimeout(function(){n.forEach(function(N){S.onlocalcandidate(N)})},0)}},a.prototype._createIceAndDtlsTransports=function(){var c=this,y=new D.RTCIceTransport(null);y.onicestatechange=function(){c._updateIceConnectionState(),c._updateConnectionState()};var R=new D.RTCDtlsTransport(y);return R.ondtlsstatechange=function(){c._updateConnectionState()},R.onerror=function(){Object.defineProperty(R,"state",{value:"failed",writable:!0}),c._updateConnectionState()},{iceTransport:y,dtlsTransport:R}},a.prototype._disposeIceAndDtlsTransports=function(c){var y=this.transceivers[c].iceGatherer;y&&(delete y.onlocalcandidate,delete this.transceivers[c].iceGatherer);var R=this.transceivers[c].iceTransport;R&&(delete R.onicestatechange,delete this.transceivers[c].iceTransport);var S=this.transceivers[c].dtlsTransport;S&&(delete S.ondtlsstatechange,delete S.onerror,delete this.transceivers[c].dtlsTransport)},a.prototype._transceive=function(c,y,R){var S=Q(c.localCapabilities,c.remoteCapabilities);y&&c.rtpSender&&(S.encodings=c.sendEncodingParameters,S.rtcp={cname:B.localCName,compound:c.rtcpParameters.compound},c.recvEncodingParameters.length&&(S.rtcp.ssrc=c.recvEncodingParameters[0].ssrc),c.rtpSender.send(S)),R&&c.rtpReceiver&&S.codecs.length>0&&(c.kind==="video"&&c.recvEncodingParameters&&o<15019&&c.recvEncodingParameters.forEach(function(n){delete n.rtx}),c.recvEncodingParameters.length?S.encodings=c.recvEncodingParameters:S.encodings=[{}],S.rtcp={compound:c.rtcpParameters.compound},c.rtcpParameters.cname&&(S.rtcp.cname=c.rtcpParameters.cname),c.sendEncodingParameters.length&&(S.rtcp.ssrc=c.sendEncodingParameters[0].ssrc),c.rtpReceiver.receive(S))},a.prototype.setLocalDescription=function(c){var y=this;if(["offer","answer"].indexOf(c.type)===-1)return Promise.reject(E("TypeError",'Unsupported type "'+c.type+'"'));if(!C("setLocalDescription",c.type,y.signalingState)||y._isClosed)return Promise.reject(E("InvalidStateError","Can not set local "+c.type+" in state "+y.signalingState));var R,S;if(c.type==="offer")R=B.splitSections(c.sdp),S=R.shift(),R.forEach(function(N,M){var J=B.parseRtpParameters(N);y.transceivers[M].localCapabilities=J}),y.transceivers.forEach(function(N,M){y._gather(N.mid,M)});else if(c.type==="answer"){R=B.splitSections(y._remoteDescription.sdp),S=R.shift();var n=B.matchPrefix(S,"a=ice-lite").length>0;R.forEach(function(N,M){var J=y.transceivers[M],L=J.iceGatherer,H=J.iceTransport,Y=J.dtlsTransport,d=J.localCapabilities,l=J.remoteCapabilities,p=B.isRejected(N)&&B.matchPrefix(N,"a=bundle-only").length===0;if(!p&&!J.rejected){var u=B.getIceParameters(N,S),P=B.getDtlsParameters(N,S);n&&(P.role="server"),(!y.usingBundle||M===0)&&(y._gather(J.mid,M),H.state==="new"&&H.start(L,u,n?"controlling":"controlled"),Y.state==="new"&&Y.start(P));var O=Q(d,l);y._transceive(J,O.codecs.length>0,!1)}})}return y._localDescription={type:c.type,sdp:c.sdp},c.type==="offer"?y._updateSignalingState("have-local-offer"):y._updateSignalingState("stable"),Promise.resolve()},a.prototype.setRemoteDescription=function(c){var y=this;if(["offer","answer"].indexOf(c.type)===-1)return Promise.reject(E("TypeError",'Unsupported type "'+c.type+'"'));if(!C("setRemoteDescription",c.type,y.signalingState)||y._isClosed)return Promise.reject(E("InvalidStateError","Can not set remote "+c.type+" in state "+y.signalingState));var R={};y.remoteStreams.forEach(function(H){R[H.id]=H});var S=[],n=B.splitSections(c.sdp),N=n.shift(),M=B.matchPrefix(N,"a=ice-lite").length>0,J=B.matchPrefix(N,"a=group:BUNDLE ").length>0;y.usingBundle=J;var L=B.matchPrefix(N,"a=ice-options:")[0];return L?y.canTrickleIceCandidates=L.substr(14).split(" ").indexOf("trickle")>=0:y.canTrickleIceCandidates=!1,n.forEach(function(H,Y){var d=B.splitLines(H),l=B.getKind(H),p=B.isRejected(H)&&B.matchPrefix(H,"a=bundle-only").length===0,u=d[0].substr(2).split(" ")[2],P=B.getDirection(H,N),O=B.parseMsid(H),W=B.getMid(H)||B.generateIdentifier();if(p||l==="application"&&(u==="DTLS/SCTP"||u==="UDP/DTLS/SCTP")){y.transceivers[Y]={mid:W,kind:l,protocol:u,rejected:!0};return}!p&&y.transceivers[Y]&&y.transceivers[Y].rejected&&(y.transceivers[Y]=y._createTransceiver(l,!0));var T,j,EA,wA,iA,IA,BA,AA,$,z=B.parseRtpParameters(H),LA,NA;p||(LA=B.getIceParameters(H,N),NA=B.getDtlsParameters(H,N),NA.role="client"),BA=B.parseRtpEncodingParameters(H);var MA=B.parseRtcpParameters(H),xA=B.matchPrefix(H,"a=end-of-candidates",N).length>0,aA=B.matchPrefix(H,"a=candidate:").map(function(HA){return B.parseCandidate(HA)}).filter(function(HA){return HA.component===1});if((c.type==="offer"||c.type==="answer")&&!p&&J&&Y>0&&y.transceivers[Y]&&(y._disposeIceAndDtlsTransports(Y),y.transceivers[Y].iceGatherer=y.transceivers[0].iceGatherer,y.transceivers[Y].iceTransport=y.transceivers[0].iceTransport,y.transceivers[Y].dtlsTransport=y.transceivers[0].dtlsTransport,y.transceivers[Y].rtpSender&&y.transceivers[Y].rtpSender.setTransport(y.transceivers[0].dtlsTransport),y.transceivers[Y].rtpReceiver&&y.transceivers[Y].rtpReceiver.setTransport(y.transceivers[0].dtlsTransport)),c.type==="offer"&&!p){T=y.transceivers[Y]||y._createTransceiver(l),T.mid=W,T.iceGatherer||(T.iceGatherer=y._createIceGatherer(Y,J)),aA.length&&T.iceTransport.state==="new"&&(xA&&(!J||Y===0)?T.iceTransport.setRemoteCandidates(aA):aA.forEach(function(HA){i(T.iceTransport,HA)})),AA=D.RTCRtpReceiver.getCapabilities(l),o<15019&&(AA.codecs=AA.codecs.filter(function(HA){return HA.name!=="rtx"})),IA=T.sendEncodingParameters||[{ssrc:(2*Y+2)*1001}];var DA=!1;if(P==="sendrecv"||P==="sendonly"){if(DA=!T.rtpReceiver,iA=T.rtpReceiver||new D.RTCRtpReceiver(T.dtlsTransport,l),DA){var JA;$=iA.track,O&&O.stream==="-"||(O?(R[O.stream]||(R[O.stream]=new D.MediaStream,Object.defineProperty(R[O.stream],"id",{get:function(){return O.stream}})),Object.defineProperty($,"id",{get:function(){return O.track}}),JA=R[O.stream]):(R.default||(R.default=new D.MediaStream),JA=R.default)),JA&&(s($,JA),T.associatedRemoteMediaStreams.push(JA)),S.push([$,iA,JA])}}else T.rtpReceiver&&T.rtpReceiver.track&&(T.associatedRemoteMediaStreams.forEach(function(HA){var fI=HA.getTracks().find(function(Eg){return Eg.id===T.rtpReceiver.track.id});fI&&t(fI,HA)}),T.associatedRemoteMediaStreams=[]);T.localCapabilities=AA,T.remoteCapabilities=z,T.rtpReceiver=iA,T.rtcpParameters=MA,T.sendEncodingParameters=IA,T.recvEncodingParameters=BA,y._transceive(y.transceivers[Y],!1,DA)}else if(c.type==="answer"&&!p){T=y.transceivers[Y],j=T.iceGatherer,EA=T.iceTransport,wA=T.dtlsTransport,iA=T.rtpReceiver,IA=T.sendEncodingParameters,AA=T.localCapabilities,y.transceivers[Y].recvEncodingParameters=BA,y.transceivers[Y].remoteCapabilities=z,y.transceivers[Y].rtcpParameters=MA,aA.length&&EA.state==="new"&&((M||xA)&&(!J||Y===0)?EA.setRemoteCandidates(aA):aA.forEach(function(HA){i(T.iceTransport,HA)})),(!J||Y===0)&&(EA.state==="new"&&EA.start(j,LA,"controlling"),wA.state==="new"&&wA.start(NA));var jI=Q(T.localCapabilities,T.remoteCapabilities),_A=jI.codecs.filter(function(HA){return HA.name.toLowerCase()==="rtx"}).length;!_A&&T.sendEncodingParameters[0].rtx&&delete T.sendEncodingParameters[0].rtx,y._transceive(T,P==="sendrecv"||P==="recvonly",P==="sendrecv"||P==="sendonly"),iA&&(P==="sendrecv"||P==="sendonly")?($=iA.track,O?(R[O.stream]||(R[O.stream]=new D.MediaStream),s($,R[O.stream]),S.push([$,iA,R[O.stream]])):(R.default||(R.default=new D.MediaStream),s($,R.default),S.push([$,iA,R.default]))):delete T.rtpReceiver}}),y._dtlsRole===void 0&&(y._dtlsRole=c.type==="offer"?"active":"passive"),y._remoteDescription={type:c.type,sdp:c.sdp},c.type==="offer"?y._updateSignalingState("have-remote-offer"):y._updateSignalingState("stable"),Object.keys(R).forEach(function(H){var Y=R[H];if(Y.getTracks().length){if(y.remoteStreams.indexOf(Y)===-1){y.remoteStreams.push(Y);var d=new Event("addstream");d.stream=Y,D.setTimeout(function(){y._dispatchEvent("addstream",d)})}S.forEach(function(l){var p=l[0],u=l[1];Y.id===l[2].id&&w(y,p,u,[Y])})}}),S.forEach(function(H){H[2]||w(y,H[0],H[1],[])}),D.setTimeout(function(){y&&y.transceivers&&y.transceivers.forEach(function(H){H.iceTransport&&H.iceTransport.state==="new"&&H.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),H.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},a.prototype.close=function(){this.transceivers.forEach(function(c){c.iceTransport&&c.iceTransport.stop(),c.dtlsTransport&&c.dtlsTransport.stop(),c.rtpSender&&c.rtpSender.stop(),c.rtpReceiver&&c.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState("closed")},a.prototype._updateSignalingState=function(c){this.signalingState=c;var y=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",y)},a.prototype._maybeFireNegotiationNeeded=function(){var c=this;this.signalingState!=="stable"||this.needNegotiation===!0||(this.needNegotiation=!0,D.setTimeout(function(){if(c.needNegotiation){c.needNegotiation=!1;var y=new Event("negotiationneeded");c._dispatchEvent("negotiationneeded",y)}},0))},a.prototype._updateIceConnectionState=function(){var c,y={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(S){S.iceTransport&&!S.rejected&&y[S.iceTransport.state]++}),c="new",y.failed>0?c="failed":y.checking>0?c="checking":y.disconnected>0?c="disconnected":y.new>0?c="new":y.connected>0?c="connected":y.completed>0&&(c="completed"),c!==this.iceConnectionState){this.iceConnectionState=c;var R=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",R)}},a.prototype._updateConnectionState=function(){var c,y={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(S){S.iceTransport&&S.dtlsTransport&&!S.rejected&&(y[S.iceTransport.state]++,y[S.dtlsTransport.state]++)}),y.connected+=y.completed,c="new",y.failed>0?c="failed":y.connecting>0?c="connecting":y.disconnected>0?c="disconnected":y.new>0?c="new":y.connected>0&&(c="connected"),c!==this.connectionState){this.connectionState=c;var R=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",R)}},a.prototype.createOffer=function(){var c=this;if(c._isClosed)return Promise.reject(E("InvalidStateError","Can not call createOffer after close"));var y=c.transceivers.filter(function(M){return M.kind==="audio"}).length,R=c.transceivers.filter(function(M){return M.kind==="video"}).length,S=arguments[0];if(S){if(S.mandatory||S.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");S.offerToReceiveAudio!==void 0&&(S.offerToReceiveAudio===!0?y=1:S.offerToReceiveAudio===!1?y=0:y=S.offerToReceiveAudio),S.offerToReceiveVideo!==void 0&&(S.offerToReceiveVideo===!0?R=1:S.offerToReceiveVideo===!1?R=0:R=S.offerToReceiveVideo)}for(c.transceivers.forEach(function(M){M.kind==="audio"?(y--,y<0&&(M.wantReceive=!1)):M.kind==="video"&&(R--,R<0&&(M.wantReceive=!1))});y>0||R>0;)y>0&&(c._createTransceiver("audio"),y--),R>0&&(c._createTransceiver("video"),R--);var n=B.writeSessionBoilerplate(c._sdpSessionId,c._sdpSessionVersion++);c.transceivers.forEach(function(M,J){var L=M.track,H=M.kind,Y=M.mid||B.generateIdentifier();M.mid=Y,M.iceGatherer||(M.iceGatherer=c._createIceGatherer(J,c.usingBundle));var d=D.RTCRtpSender.getCapabilities(H);o<15019&&(d.codecs=d.codecs.filter(function(p){return p.name!=="rtx"})),d.codecs.forEach(function(p){p.name==="H264"&&p.parameters["level-asymmetry-allowed"]===void 0&&(p.parameters["level-asymmetry-allowed"]="1"),M.remoteCapabilities&&M.remoteCapabilities.codecs&&M.remoteCapabilities.codecs.forEach(function(u){p.name.toLowerCase()===u.name.toLowerCase()&&p.clockRate===u.clockRate&&(p.preferredPayloadType=u.payloadType)})}),d.headerExtensions.forEach(function(p){var u=M.remoteCapabilities&&M.remoteCapabilities.headerExtensions||[];u.forEach(function(P){p.uri===P.uri&&(p.id=P.id)})});var l=M.sendEncodingParameters||[{ssrc:(2*J+1)*1001}];L&&o>=15019&&H==="video"&&!l[0].rtx&&(l[0].rtx={ssrc:l[0].ssrc+1}),M.wantReceive&&(M.rtpReceiver=new D.RTCRtpReceiver(M.dtlsTransport,H)),M.localCapabilities=d,M.sendEncodingParameters=l}),c._config.bundlePolicy!=="max-compat"&&(n+="a=group:BUNDLE "+c.transceivers.map(function(M){return M.mid}).join(" ")+`\r
|
|
1089
|
-
`),
|
|
1090
|
-
`,c.transceivers.forEach(function(
|
|
1091
|
-
`,
|
|
1092
|
-
`}),
|
|
1093
|
-
`))});var
|
|
1086
|
+
`),a}function g(D,o){var s=!1;return D=JSON.parse(JSON.stringify(D)),D.filter(function(t){if(t&&(t.urls||t.url)){var w=t.urls||t.url;t.url&&!t.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var a=typeof w=="string";return a&&(w=[w]),w=w.filter(function(G){var S=G.indexOf("turn:")===0&&G.indexOf("transport=udp")!==-1&&G.indexOf("turn:[")===-1&&!s;return S?(s=!0,!0):G.indexOf("stun:")===0&&o>=14393&&G.indexOf("?transport=udp")===-1}),delete t.url,t.urls=a?w[0]:w,!!w.length}})}function Q(D,o){var s={codecs:[],headerExtensions:[],fecMechanisms:[]},t=function(a,G){a=parseInt(a,10);for(var S=0;S<G.length;S++)if(G[S].payloadType===a||G[S].preferredPayloadType===a)return G[S]},w=function(a,G,S,c){var y=t(a.parameters.apt,S),F=t(G.parameters.apt,c);return y&&F&&y.name.toLowerCase()===F.name.toLowerCase()};return D.codecs.forEach(function(a){for(var G=0;G<o.codecs.length;G++){var S=o.codecs[G];if(a.name.toLowerCase()===S.name.toLowerCase()&&a.clockRate===S.clockRate){if(a.name.toLowerCase()==="rtx"&&a.parameters&&S.parameters.apt&&!w(a,S,D.codecs,o.codecs))continue;S=JSON.parse(JSON.stringify(S)),S.numChannels=Math.min(a.numChannels,S.numChannels),s.codecs.push(S),S.rtcpFeedback=S.rtcpFeedback.filter(function(c){for(var y=0;y<a.rtcpFeedback.length;y++)if(a.rtcpFeedback[y].type===c.type&&a.rtcpFeedback[y].parameter===c.parameter)return!0;return!1});break}}}),D.headerExtensions.forEach(function(a){for(var G=0;G<o.headerExtensions.length;G++){var S=o.headerExtensions[G];if(a.uri===S.uri){s.headerExtensions.push(S);break}}}),s}function C(D,o,s){return{offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[o][D].indexOf(s)!==-1}function i(D,o){var s=D.getRemoteCandidates().find(function(t){return o.foundation===t.foundation&&o.ip===t.ip&&o.port===t.port&&o.priority===t.priority&&o.protocol===t.protocol&&o.type===t.type});return s||D.addRemoteCandidate(o),!s}function E(D,o){var s=new Error(o);return s.name=D,s.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[D],s}return HD=function(D,o){function s(c,y){y.addTrack(c),y.dispatchEvent(new D.MediaStreamTrackEvent("addtrack",{track:c}))}function t(c,y){y.removeTrack(c),y.dispatchEvent(new D.MediaStreamTrackEvent("removetrack",{track:c}))}function w(c,y,F,R){var M=new Event("track");M.track=y,M.receiver=F,M.transceiver={receiver:F},M.streams=R,D.setTimeout(function(){c._dispatchEvent("track",M)})}var a=function(c){var y=this,F=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach(function(M){y[M]=F[M].bind(F)}),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",c=JSON.parse(JSON.stringify(c||{})),this.usingBundle=c.bundlePolicy==="max-bundle",c.rtcpMuxPolicy==="negotiate")throw E("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(c.rtcpMuxPolicy||(c.rtcpMuxPolicy="require"),c.iceTransportPolicy){case"all":case"relay":break;default:c.iceTransportPolicy="all";break}switch(c.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:c.bundlePolicy="balanced";break}if(c.iceServers=g(c.iceServers||[],o),this._iceGatherers=[],c.iceCandidatePoolSize)for(var R=c.iceCandidatePoolSize;R>0;R--)this._iceGatherers.push(new D.RTCIceGatherer({iceServers:c.iceServers,gatherPolicy:c.iceTransportPolicy}));else c.iceCandidatePoolSize=0;this._config=c,this.transceivers=[],this._sdpSessionId=B.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(a.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(a.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),a.prototype.onicecandidate=null,a.prototype.onaddstream=null,a.prototype.ontrack=null,a.prototype.onremovestream=null,a.prototype.onsignalingstatechange=null,a.prototype.oniceconnectionstatechange=null,a.prototype.onconnectionstatechange=null,a.prototype.onicegatheringstatechange=null,a.prototype.onnegotiationneeded=null,a.prototype.ondatachannel=null,a.prototype._dispatchEvent=function(c,y){this._isClosed||(this.dispatchEvent(y),typeof this["on"+c]=="function"&&this["on"+c](y))},a.prototype._emitGatheringStateChange=function(){var c=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",c)},a.prototype.getConfiguration=function(){return this._config},a.prototype.getLocalStreams=function(){return this.localStreams},a.prototype.getRemoteStreams=function(){return this.remoteStreams},a.prototype._createTransceiver=function(c,y){var F=this.transceivers.length>0,R={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:c,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&F)R.iceTransport=this.transceivers[0].iceTransport,R.dtlsTransport=this.transceivers[0].dtlsTransport;else{var M=this._createIceAndDtlsTransports();R.iceTransport=M.iceTransport,R.dtlsTransport=M.dtlsTransport}return y||this.transceivers.push(R),R},a.prototype.addTrack=function(c,y){if(this._isClosed)throw E("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var F=this.transceivers.find(function(n){return n.track===c});if(F)throw E("InvalidAccessError","Track already exists.");for(var R,M=0;M<this.transceivers.length;M++)!this.transceivers[M].track&&this.transceivers[M].kind===c.kind&&(R=this.transceivers[M]);return R||(R=this._createTransceiver(c.kind)),this._maybeFireNegotiationNeeded(),this.localStreams.indexOf(y)===-1&&this.localStreams.push(y),R.track=c,R.stream=y,R.rtpSender=new D.RTCRtpSender(c,R.dtlsTransport),R.rtpSender},a.prototype.addStream=function(c){var y=this;if(o>=15025)c.getTracks().forEach(function(R){y.addTrack(R,c)});else{var F=c.clone();c.getTracks().forEach(function(R,M){var n=F.getTracks()[M];R.addEventListener("enabled",function(N){n.enabled=N.enabled})}),F.getTracks().forEach(function(R){y.addTrack(R,F)})}},a.prototype.removeTrack=function(c){if(this._isClosed)throw E("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(c instanceof D.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var y=this.transceivers.find(function(M){return M.rtpSender===c});if(!y)throw E("InvalidAccessError","Sender was not created by this connection.");var F=y.stream;y.rtpSender.stop(),y.rtpSender=null,y.track=null,y.stream=null;var R=this.transceivers.map(function(M){return M.stream});R.indexOf(F)===-1&&this.localStreams.indexOf(F)>-1&&this.localStreams.splice(this.localStreams.indexOf(F),1),this._maybeFireNegotiationNeeded()},a.prototype.removeStream=function(c){var y=this;c.getTracks().forEach(function(F){var R=y.getSenders().find(function(M){return M.track===F});R&&y.removeTrack(R)})},a.prototype.getSenders=function(){return this.transceivers.filter(function(c){return!!c.rtpSender}).map(function(c){return c.rtpSender})},a.prototype.getReceivers=function(){return this.transceivers.filter(function(c){return!!c.rtpReceiver}).map(function(c){return c.rtpReceiver})},a.prototype._createIceGatherer=function(c,y){var F=this;if(y&&c>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var R=new D.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(R,"state",{value:"new",writable:!0}),this.transceivers[c].bufferedCandidateEvents=[],this.transceivers[c].bufferCandidates=function(M){var n=!M.candidate||Object.keys(M.candidate).length===0;R.state=n?"completed":"gathering",F.transceivers[c].bufferedCandidateEvents!==null&&F.transceivers[c].bufferedCandidateEvents.push(M)},R.addEventListener("localcandidate",this.transceivers[c].bufferCandidates),R},a.prototype._gather=function(c,y){var F=this,R=this.transceivers[y].iceGatherer;if(!R.onlocalcandidate){var M=this.transceivers[y].bufferedCandidateEvents;this.transceivers[y].bufferedCandidateEvents=null,R.removeEventListener("localcandidate",this.transceivers[y].bufferCandidates),R.onlocalcandidate=function(n){if(!(F.usingBundle&&y>0)){var N=new Event("icecandidate");N.candidate={sdpMid:c,sdpMLineIndex:y};var J=n.candidate,L=!J||Object.keys(J).length===0;if(L)(R.state==="new"||R.state==="gathering")&&(R.state="completed");else{R.state==="new"&&(R.state="gathering"),J.component=1,J.ufrag=R.getLocalParameters().usernameFragment;var H=B.writeCandidate(J);N.candidate=Object.assign(N.candidate,B.parseCandidate(H)),N.candidate.candidate=H,N.candidate.toJSON=function(){return{candidate:N.candidate.candidate,sdpMid:N.candidate.sdpMid,sdpMLineIndex:N.candidate.sdpMLineIndex,usernameFragment:N.candidate.usernameFragment}}}var Y=B.getMediaSections(F._localDescription.sdp);L?Y[N.candidate.sdpMLineIndex]+=`a=end-of-candidates\r
|
|
1087
|
+
`:Y[N.candidate.sdpMLineIndex]+="a="+N.candidate.candidate+`\r
|
|
1088
|
+
`,F._localDescription.sdp=B.getDescription(F._localDescription.sdp)+Y.join("");var K=F.transceivers.every(function(l){return l.iceGatherer&&l.iceGatherer.state==="completed"});F.iceGatheringState!=="gathering"&&(F.iceGatheringState="gathering",F._emitGatheringStateChange()),L||F._dispatchEvent("icecandidate",N),K&&(F._dispatchEvent("icecandidate",new Event("icecandidate")),F.iceGatheringState="complete",F._emitGatheringStateChange())}},D.setTimeout(function(){M.forEach(function(n){R.onlocalcandidate(n)})},0)}},a.prototype._createIceAndDtlsTransports=function(){var c=this,y=new D.RTCIceTransport(null);y.onicestatechange=function(){c._updateIceConnectionState(),c._updateConnectionState()};var F=new D.RTCDtlsTransport(y);return F.ondtlsstatechange=function(){c._updateConnectionState()},F.onerror=function(){Object.defineProperty(F,"state",{value:"failed",writable:!0}),c._updateConnectionState()},{iceTransport:y,dtlsTransport:F}},a.prototype._disposeIceAndDtlsTransports=function(c){var y=this.transceivers[c].iceGatherer;y&&(delete y.onlocalcandidate,delete this.transceivers[c].iceGatherer);var F=this.transceivers[c].iceTransport;F&&(delete F.onicestatechange,delete this.transceivers[c].iceTransport);var R=this.transceivers[c].dtlsTransport;R&&(delete R.ondtlsstatechange,delete R.onerror,delete this.transceivers[c].dtlsTransport)},a.prototype._transceive=function(c,y,F){var R=Q(c.localCapabilities,c.remoteCapabilities);y&&c.rtpSender&&(R.encodings=c.sendEncodingParameters,R.rtcp={cname:B.localCName,compound:c.rtcpParameters.compound},c.recvEncodingParameters.length&&(R.rtcp.ssrc=c.recvEncodingParameters[0].ssrc),c.rtpSender.send(R)),F&&c.rtpReceiver&&R.codecs.length>0&&(c.kind==="video"&&c.recvEncodingParameters&&o<15019&&c.recvEncodingParameters.forEach(function(M){delete M.rtx}),c.recvEncodingParameters.length?R.encodings=c.recvEncodingParameters:R.encodings=[{}],R.rtcp={compound:c.rtcpParameters.compound},c.rtcpParameters.cname&&(R.rtcp.cname=c.rtcpParameters.cname),c.sendEncodingParameters.length&&(R.rtcp.ssrc=c.sendEncodingParameters[0].ssrc),c.rtpReceiver.receive(R))},a.prototype.setLocalDescription=function(c){var y=this;if(["offer","answer"].indexOf(c.type)===-1)return Promise.reject(E("TypeError",'Unsupported type "'+c.type+'"'));if(!C("setLocalDescription",c.type,y.signalingState)||y._isClosed)return Promise.reject(E("InvalidStateError","Can not set local "+c.type+" in state "+y.signalingState));var F,R;if(c.type==="offer")F=B.splitSections(c.sdp),R=F.shift(),F.forEach(function(n,N){var J=B.parseRtpParameters(n);y.transceivers[N].localCapabilities=J}),y.transceivers.forEach(function(n,N){y._gather(n.mid,N)});else if(c.type==="answer"){F=B.splitSections(y._remoteDescription.sdp),R=F.shift();var M=B.matchPrefix(R,"a=ice-lite").length>0;F.forEach(function(n,N){var J=y.transceivers[N],L=J.iceGatherer,H=J.iceTransport,Y=J.dtlsTransport,K=J.localCapabilities,l=J.remoteCapabilities,p=B.isRejected(n)&&B.matchPrefix(n,"a=bundle-only").length===0;if(!p&&!J.rejected){var u=B.getIceParameters(n,R),b=B.getDtlsParameters(n,R);M&&(b.role="server"),(!y.usingBundle||N===0)&&(y._gather(J.mid,N),H.state==="new"&&H.start(L,u,M?"controlling":"controlled"),Y.state==="new"&&Y.start(b));var O=Q(K,l);y._transceive(J,O.codecs.length>0,!1)}})}return y._localDescription={type:c.type,sdp:c.sdp},c.type==="offer"?y._updateSignalingState("have-local-offer"):y._updateSignalingState("stable"),Promise.resolve()},a.prototype.setRemoteDescription=function(c){var y=this;if(["offer","answer"].indexOf(c.type)===-1)return Promise.reject(E("TypeError",'Unsupported type "'+c.type+'"'));if(!C("setRemoteDescription",c.type,y.signalingState)||y._isClosed)return Promise.reject(E("InvalidStateError","Can not set remote "+c.type+" in state "+y.signalingState));var F={};y.remoteStreams.forEach(function(H){F[H.id]=H});var R=[],M=B.splitSections(c.sdp),n=M.shift(),N=B.matchPrefix(n,"a=ice-lite").length>0,J=B.matchPrefix(n,"a=group:BUNDLE ").length>0;y.usingBundle=J;var L=B.matchPrefix(n,"a=ice-options:")[0];return L?y.canTrickleIceCandidates=L.substr(14).split(" ").indexOf("trickle")>=0:y.canTrickleIceCandidates=!1,M.forEach(function(H,Y){var K=B.splitLines(H),l=B.getKind(H),p=B.isRejected(H)&&B.matchPrefix(H,"a=bundle-only").length===0,u=K[0].substr(2).split(" ")[2],b=B.getDirection(H,n),O=B.parseMsid(H),W=B.getMid(H)||B.generateIdentifier();if(p||l==="application"&&(u==="DTLS/SCTP"||u==="UDP/DTLS/SCTP")){y.transceivers[Y]={mid:W,kind:l,protocol:u,rejected:!0};return}!p&&y.transceivers[Y]&&y.transceivers[Y].rejected&&(y.transceivers[Y]=y._createTransceiver(l,!0));var T,j,EA,wA,iA,IA,BA,AA,$,z=B.parseRtpParameters(H),LA,MA;p||(LA=B.getIceParameters(H,n),MA=B.getDtlsParameters(H,n),MA.role="client"),BA=B.parseRtpEncodingParameters(H);var NA=B.parseRtcpParameters(H),xA=B.matchPrefix(H,"a=end-of-candidates",n).length>0,aA=B.matchPrefix(H,"a=candidate:").map(function(HA){return B.parseCandidate(HA)}).filter(function(HA){return HA.component===1});if((c.type==="offer"||c.type==="answer")&&!p&&J&&Y>0&&y.transceivers[Y]&&(y._disposeIceAndDtlsTransports(Y),y.transceivers[Y].iceGatherer=y.transceivers[0].iceGatherer,y.transceivers[Y].iceTransport=y.transceivers[0].iceTransport,y.transceivers[Y].dtlsTransport=y.transceivers[0].dtlsTransport,y.transceivers[Y].rtpSender&&y.transceivers[Y].rtpSender.setTransport(y.transceivers[0].dtlsTransport),y.transceivers[Y].rtpReceiver&&y.transceivers[Y].rtpReceiver.setTransport(y.transceivers[0].dtlsTransport)),c.type==="offer"&&!p){T=y.transceivers[Y]||y._createTransceiver(l),T.mid=W,T.iceGatherer||(T.iceGatherer=y._createIceGatherer(Y,J)),aA.length&&T.iceTransport.state==="new"&&(xA&&(!J||Y===0)?T.iceTransport.setRemoteCandidates(aA):aA.forEach(function(HA){i(T.iceTransport,HA)})),AA=D.RTCRtpReceiver.getCapabilities(l),o<15019&&(AA.codecs=AA.codecs.filter(function(HA){return HA.name!=="rtx"})),IA=T.sendEncodingParameters||[{ssrc:(2*Y+2)*1001}];var DA=!1;if(b==="sendrecv"||b==="sendonly"){if(DA=!T.rtpReceiver,iA=T.rtpReceiver||new D.RTCRtpReceiver(T.dtlsTransport,l),DA){var JA;$=iA.track,O&&O.stream==="-"||(O?(F[O.stream]||(F[O.stream]=new D.MediaStream,Object.defineProperty(F[O.stream],"id",{get:function(){return O.stream}})),Object.defineProperty($,"id",{get:function(){return O.track}}),JA=F[O.stream]):(F.default||(F.default=new D.MediaStream),JA=F.default)),JA&&(s($,JA),T.associatedRemoteMediaStreams.push(JA)),R.push([$,iA,JA])}}else T.rtpReceiver&&T.rtpReceiver.track&&(T.associatedRemoteMediaStreams.forEach(function(HA){var fI=HA.getTracks().find(function(Eg){return Eg.id===T.rtpReceiver.track.id});fI&&t(fI,HA)}),T.associatedRemoteMediaStreams=[]);T.localCapabilities=AA,T.remoteCapabilities=z,T.rtpReceiver=iA,T.rtcpParameters=NA,T.sendEncodingParameters=IA,T.recvEncodingParameters=BA,y._transceive(y.transceivers[Y],!1,DA)}else if(c.type==="answer"&&!p){T=y.transceivers[Y],j=T.iceGatherer,EA=T.iceTransport,wA=T.dtlsTransport,iA=T.rtpReceiver,IA=T.sendEncodingParameters,AA=T.localCapabilities,y.transceivers[Y].recvEncodingParameters=BA,y.transceivers[Y].remoteCapabilities=z,y.transceivers[Y].rtcpParameters=NA,aA.length&&EA.state==="new"&&((N||xA)&&(!J||Y===0)?EA.setRemoteCandidates(aA):aA.forEach(function(HA){i(T.iceTransport,HA)})),(!J||Y===0)&&(EA.state==="new"&&EA.start(j,LA,"controlling"),wA.state==="new"&&wA.start(MA));var jI=Q(T.localCapabilities,T.remoteCapabilities),_A=jI.codecs.filter(function(HA){return HA.name.toLowerCase()==="rtx"}).length;!_A&&T.sendEncodingParameters[0].rtx&&delete T.sendEncodingParameters[0].rtx,y._transceive(T,b==="sendrecv"||b==="recvonly",b==="sendrecv"||b==="sendonly"),iA&&(b==="sendrecv"||b==="sendonly")?($=iA.track,O?(F[O.stream]||(F[O.stream]=new D.MediaStream),s($,F[O.stream]),R.push([$,iA,F[O.stream]])):(F.default||(F.default=new D.MediaStream),s($,F.default),R.push([$,iA,F.default]))):delete T.rtpReceiver}}),y._dtlsRole===void 0&&(y._dtlsRole=c.type==="offer"?"active":"passive"),y._remoteDescription={type:c.type,sdp:c.sdp},c.type==="offer"?y._updateSignalingState("have-remote-offer"):y._updateSignalingState("stable"),Object.keys(F).forEach(function(H){var Y=F[H];if(Y.getTracks().length){if(y.remoteStreams.indexOf(Y)===-1){y.remoteStreams.push(Y);var K=new Event("addstream");K.stream=Y,D.setTimeout(function(){y._dispatchEvent("addstream",K)})}R.forEach(function(l){var p=l[0],u=l[1];Y.id===l[2].id&&w(y,p,u,[Y])})}}),R.forEach(function(H){H[2]||w(y,H[0],H[1],[])}),D.setTimeout(function(){y&&y.transceivers&&y.transceivers.forEach(function(H){H.iceTransport&&H.iceTransport.state==="new"&&H.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),H.iceTransport.addRemoteCandidate({}))})},4e3),Promise.resolve()},a.prototype.close=function(){this.transceivers.forEach(function(c){c.iceTransport&&c.iceTransport.stop(),c.dtlsTransport&&c.dtlsTransport.stop(),c.rtpSender&&c.rtpSender.stop(),c.rtpReceiver&&c.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState("closed")},a.prototype._updateSignalingState=function(c){this.signalingState=c;var y=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",y)},a.prototype._maybeFireNegotiationNeeded=function(){var c=this;this.signalingState!=="stable"||this.needNegotiation===!0||(this.needNegotiation=!0,D.setTimeout(function(){if(c.needNegotiation){c.needNegotiation=!1;var y=new Event("negotiationneeded");c._dispatchEvent("negotiationneeded",y)}},0))},a.prototype._updateIceConnectionState=function(){var c,y={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(R){R.iceTransport&&!R.rejected&&y[R.iceTransport.state]++}),c="new",y.failed>0?c="failed":y.checking>0?c="checking":y.disconnected>0?c="disconnected":y.new>0?c="new":y.connected>0?c="connected":y.completed>0&&(c="completed"),c!==this.iceConnectionState){this.iceConnectionState=c;var F=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",F)}},a.prototype._updateConnectionState=function(){var c,y={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(R){R.iceTransport&&R.dtlsTransport&&!R.rejected&&(y[R.iceTransport.state]++,y[R.dtlsTransport.state]++)}),y.connected+=y.completed,c="new",y.failed>0?c="failed":y.connecting>0?c="connecting":y.disconnected>0?c="disconnected":y.new>0?c="new":y.connected>0&&(c="connected"),c!==this.connectionState){this.connectionState=c;var F=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",F)}},a.prototype.createOffer=function(){var c=this;if(c._isClosed)return Promise.reject(E("InvalidStateError","Can not call createOffer after close"));var y=c.transceivers.filter(function(N){return N.kind==="audio"}).length,F=c.transceivers.filter(function(N){return N.kind==="video"}).length,R=arguments[0];if(R){if(R.mandatory||R.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");R.offerToReceiveAudio!==void 0&&(R.offerToReceiveAudio===!0?y=1:R.offerToReceiveAudio===!1?y=0:y=R.offerToReceiveAudio),R.offerToReceiveVideo!==void 0&&(R.offerToReceiveVideo===!0?F=1:R.offerToReceiveVideo===!1?F=0:F=R.offerToReceiveVideo)}for(c.transceivers.forEach(function(N){N.kind==="audio"?(y--,y<0&&(N.wantReceive=!1)):N.kind==="video"&&(F--,F<0&&(N.wantReceive=!1))});y>0||F>0;)y>0&&(c._createTransceiver("audio"),y--),F>0&&(c._createTransceiver("video"),F--);var M=B.writeSessionBoilerplate(c._sdpSessionId,c._sdpSessionVersion++);c.transceivers.forEach(function(N,J){var L=N.track,H=N.kind,Y=N.mid||B.generateIdentifier();N.mid=Y,N.iceGatherer||(N.iceGatherer=c._createIceGatherer(J,c.usingBundle));var K=D.RTCRtpSender.getCapabilities(H);o<15019&&(K.codecs=K.codecs.filter(function(p){return p.name!=="rtx"})),K.codecs.forEach(function(p){p.name==="H264"&&p.parameters["level-asymmetry-allowed"]===void 0&&(p.parameters["level-asymmetry-allowed"]="1"),N.remoteCapabilities&&N.remoteCapabilities.codecs&&N.remoteCapabilities.codecs.forEach(function(u){p.name.toLowerCase()===u.name.toLowerCase()&&p.clockRate===u.clockRate&&(p.preferredPayloadType=u.payloadType)})}),K.headerExtensions.forEach(function(p){var u=N.remoteCapabilities&&N.remoteCapabilities.headerExtensions||[];u.forEach(function(b){p.uri===b.uri&&(p.id=b.id)})});var l=N.sendEncodingParameters||[{ssrc:(2*J+1)*1001}];L&&o>=15019&&H==="video"&&!l[0].rtx&&(l[0].rtx={ssrc:l[0].ssrc+1}),N.wantReceive&&(N.rtpReceiver=new D.RTCRtpReceiver(N.dtlsTransport,H)),N.localCapabilities=K,N.sendEncodingParameters=l}),c._config.bundlePolicy!=="max-compat"&&(M+="a=group:BUNDLE "+c.transceivers.map(function(N){return N.mid}).join(" ")+`\r
|
|
1089
|
+
`),M+=`a=ice-options:trickle\r
|
|
1090
|
+
`,c.transceivers.forEach(function(N,J){M+=I(N,N.localCapabilities,"offer",N.stream,c._dtlsRole),M+=`a=rtcp-rsize\r
|
|
1091
|
+
`,N.iceGatherer&&c.iceGatheringState!=="new"&&(J===0||!c.usingBundle)&&(N.iceGatherer.getLocalCandidates().forEach(function(L){L.component=1,M+="a="+B.writeCandidate(L)+`\r
|
|
1092
|
+
`}),N.iceGatherer.state==="completed"&&(M+=`a=end-of-candidates\r
|
|
1093
|
+
`))});var n=new D.RTCSessionDescription({type:"offer",sdp:M});return Promise.resolve(n)},a.prototype.createAnswer=function(){var c=this;if(c._isClosed)return Promise.reject(E("InvalidStateError","Can not call createAnswer after close"));if(!(c.signalingState==="have-remote-offer"||c.signalingState==="have-local-pranswer"))return Promise.reject(E("InvalidStateError","Can not call createAnswer in signalingState "+c.signalingState));var y=B.writeSessionBoilerplate(c._sdpSessionId,c._sdpSessionVersion++);c.usingBundle&&(y+="a=group:BUNDLE "+c.transceivers.map(function(M){return M.mid}).join(" ")+`\r
|
|
1094
1094
|
`),y+=`a=ice-options:trickle\r
|
|
1095
|
-
`;var
|
|
1096
|
-
`:y+="m=application 0 "+
|
|
1097
|
-
`:
|
|
1095
|
+
`;var F=B.getMediaSections(c._remoteDescription.sdp).length;c.transceivers.forEach(function(M,n){if(!(n+1>F)){if(M.rejected){M.kind==="application"?M.protocol==="DTLS/SCTP"?y+=`m=application 0 DTLS/SCTP 5000\r
|
|
1096
|
+
`:y+="m=application 0 "+M.protocol+` webrtc-datachannel\r
|
|
1097
|
+
`:M.kind==="audio"?y+=`m=audio 0 UDP/TLS/RTP/SAVPF 0\r
|
|
1098
1098
|
a=rtpmap:0 PCMU/8000\r
|
|
1099
|
-
`:
|
|
1099
|
+
`:M.kind==="video"&&(y+=`m=video 0 UDP/TLS/RTP/SAVPF 120\r
|
|
1100
1100
|
a=rtpmap:120 VP8/90000\r
|
|
1101
1101
|
`),y+=`c=IN IP4 0.0.0.0\r
|
|
1102
1102
|
a=inactive\r
|
|
1103
|
-
a=mid:`+
|
|
1104
|
-
`;return}if(
|
|
1105
|
-
`)}});var
|
|
1106
|
-
`,y._remoteDescription.sdp=B.getDescription(y._remoteDescription.sdp)+
|
|
1107
|
-
`,y._remoteDescription.sdp=B.getDescription(y._remoteDescription.sdp)+R.join("")}else return n(E("OperationError","Can not add ICE candidate"))}else return n(E("InvalidStateError","Can not add ICE candidate without a remote description"));S()})},a.prototype.getStats=function(c){if(c&&c instanceof D.MediaStreamTrack){var y=null;if(this.transceivers.forEach(function(S){S.rtpSender&&S.rtpSender.track===c?y=S.rtpSender:S.rtpReceiver&&S.rtpReceiver.track===c&&(y=S.rtpReceiver)}),!y)throw E("InvalidAccessError","Invalid selector.");return y.getStats()}var R=[];return this.transceivers.forEach(function(S){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach(function(n){S[n]&&R.push(S[n].getStats())})}),Promise.all(R).then(function(S){var n=new Map;return S.forEach(function(N){N.forEach(function(M){n.set(M.id,M)})}),n})};var G=["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"];G.forEach(function(c){var y=D[c];if(y&&y.prototype&&y.prototype.getStats){var R=y.prototype.getStats;y.prototype.getStats=function(){return R.apply(this).then(function(S){var n=new Map;return Object.keys(S).forEach(function(N){S[N].type=A(S[N]),n.set(N,S[N])}),n})}}});var r=["createOffer","createAnswer"];return r.forEach(function(c){var y=a.prototype[c];a.prototype[c]=function(){var R=arguments;return typeof R[0]=="function"||typeof R[1]=="function"?y.apply(this,[arguments[2]]).then(function(S){typeof R[0]=="function"&&R[0].apply(null,[S])},function(S){typeof R[1]=="function"&&R[1].apply(null,[S])}):y.apply(this,arguments)}}),r=["setLocalDescription","setRemoteDescription","addIceCandidate"],r.forEach(function(c){var y=a.prototype[c];a.prototype[c]=function(){var R=arguments;return typeof R[1]=="function"||typeof R[2]=="function"?y.apply(this,arguments).then(function(){typeof R[1]=="function"&&R[1].apply(null)},function(S){typeof R[2]=="function"&&R[2].apply(null,[S])}):y.apply(this,arguments)}}),["getStats"].forEach(function(c){var y=a.prototype[c];a.prototype[c]=function(){var R=arguments;return typeof R[1]=="function"?y.apply(this,arguments).then(function(){typeof R[1]=="function"&&R[1].apply(null)}):y.apply(this,arguments)}}),a},JD}var lc=dc();const fc=RD(lc);function Ot(B){const A=B&&B.navigator,I=function(Q){return{name:{PermissionDeniedError:"NotAllowedError"}[Q.name]||Q.name,message:Q.message,constraint:Q.constraint,toString(){return this.name}}},g=A.mediaDevices.getUserMedia.bind(A.mediaDevices);Object.getOwnPropertyDescriptor(A.mediaDevices,"getUserMedia")?.writable&&(A.mediaDevices.getUserMedia=function(Q){return g(Q).catch(C=>Promise.reject(I(C)))})}function Xt(B){"getDisplayMedia"in B.navigator&&B.navigator.mediaDevices&&(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||(B.navigator.mediaDevices.getDisplayMedia=B.navigator.getDisplayMedia.bind(B.navigator)))}function UD(B,A){if(B.RTCIceGatherer&&(B.RTCIceCandidate||(B.RTCIceCandidate=function(g){return g}),B.RTCSessionDescription||(B.RTCSessionDescription=function(g){return g}),A.version<15025)){const g=Object.getOwnPropertyDescriptor(B.MediaStreamTrack.prototype,"enabled");Object.defineProperty(B.MediaStreamTrack.prototype,"enabled",{set(Q){g.set.call(this,Q);const C=new Event("enabled");C.enabled=Q,this.dispatchEvent(C)}})}B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)&&Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=new B.RTCDtmfSender(this):this.track.kind==="video"&&(this._dtmf=null)),this._dtmf}}),B.RTCDtmfSender&&!B.RTCDTMFSender&&(B.RTCDTMFSender=B.RTCDtmfSender);const I=fc(B,A.version);B.RTCPeerConnection=function(g){return g&&g.iceServers&&(g.iceServers=Kc(g.iceServers,A.version),nD("ICE servers after filtering:",g.iceServers)),new I(g)},B.RTCPeerConnection.prototype=I.prototype}function vt(B){B.RTCRtpSender&&!("replaceTrack"in B.RTCRtpSender.prototype)&&(B.RTCRtpSender.prototype.replaceTrack=B.RTCRtpSender.prototype.setTrack)}const Zt=Object.freeze(Object.defineProperty({__proto__:null,shimGetDisplayMedia:Xt,shimGetUserMedia:Ot,shimPeerConnection:UD,shimReplaceTrack:vt},Symbol.toStringTag,{value:"Module"}));function Vt(B,A){const I=B&&B.navigator,g=B&&B.MediaStreamTrack;if(I.getUserMedia=function(Q,C,i){UE("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),I.mediaDevices.getUserMedia(Q).then(C,i)},!(A.version>55&&"autoGainControl"in I.mediaDevices.getSupportedConstraints())){const Q=function(i,E,D){E in i&&!(D in i)&&(i[D]=i[E],delete i[E])},C=I.mediaDevices.getUserMedia.bind(I.mediaDevices);if(Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(i){return typeof i=="object"&&typeof i.audio=="object"&&(i=JSON.parse(JSON.stringify(i)),Q(i.audio,"autoGainControl","mozAutoGainControl"),Q(i.audio,"noiseSuppression","mozNoiseSuppression")),C(i)}),g&&g.prototype.getSettings){const i=g.prototype.getSettings;g.prototype.getSettings=function(){const E=i.apply(this,arguments);return Q(E,"mozAutoGainControl","autoGainControl"),Q(E,"mozNoiseSuppression","noiseSuppression"),E}}if(g&&g.prototype.applyConstraints){const i=g.prototype.applyConstraints;g.prototype.applyConstraints=function(E){return this.kind==="audio"&&typeof E=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E,"autoGainControl","mozAutoGainControl"),Q(E,"noiseSuppression","mozNoiseSuppression")),i.apply(this,[E])}}}}function pc(B,A){B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||B.navigator.mediaDevices&&(B.navigator.mediaDevices.getDisplayMedia=function(I){if(!(I&&I.video)){const g=new DOMException("getDisplayMedia without video constraints is undefined");return g.name="NotFoundError",g.code=8,Promise.reject(g)}return I.video===!0?I.video={mediaSource:A}:I.video.mediaSource=A,B.navigator.mediaDevices.getUserMedia(I)})}function Wt(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function LD(B,A){if(typeof B!="object"||!(B.RTCPeerConnection||B.mozRTCPeerConnection))return;!B.RTCPeerConnection&&B.mozRTCPeerConnection&&(B.RTCPeerConnection=B.mozRTCPeerConnection),A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const C=B.RTCPeerConnection.prototype[Q],i={[Q](){return arguments[0]=new(Q==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};B.RTCPeerConnection.prototype[Q]=i[Q]});const I={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},g=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[Q,C,i]=arguments;return g.apply(this,[Q||null]).then(E=>{if(A.version<53&&!C)try{E.forEach(D=>{D.type=I[D.type]||D.type})}catch(D){if(D.name!=="TypeError")throw D;E.forEach((o,s)=>{E.set(s,Object.assign({},o,{type:I[o.type]||o.type}))})}return E}).then(C,i)}}function jt(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpSender.prototype)return;const A=B.RTCPeerConnection.prototype.getSenders;A&&(B.RTCPeerConnection.prototype.getSenders=function(){const g=A.apply(this,[]);return g.forEach(Q=>Q._pc=this),g});const I=B.RTCPeerConnection.prototype.addTrack;I&&(B.RTCPeerConnection.prototype.addTrack=function(){const g=I.apply(this,arguments);return g._pc=this,g}),B.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function zt(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpReceiver.prototype)return;const A=B.RTCPeerConnection.prototype.getReceivers;A&&(B.RTCPeerConnection.prototype.getReceivers=function(){const I=A.apply(this,[]);return I.forEach(g=>g._pc=this),I}),AB(B,"track",I=>(I.receiver._pc=I.srcElement,I)),B.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function _t(B){!B.RTCPeerConnection||"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(A){UE("removeStream","removeTrack"),this.getSenders().forEach(I=>{I.track&&A.getTracks().includes(I.track)&&this.removeTrack(I)})})}function $t(B){B.DataChannel&&!B.RTCDataChannel&&(B.RTCDataChannel=B.DataChannel)}function Aw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.addTransceiver;A&&(B.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const I=arguments[1],g=I&&"sendEncodings"in I;g&&I.sendEncodings.forEach(C=>{if("rid"in C&&!/^[a-z0-9]{0,16}$/i.test(C.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in C&&!(parseFloat(C.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in C&&!(parseFloat(C.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const Q=A.apply(this,arguments);if(g){const{sender:C}=Q,i=C.getParameters();(!("encodings"in i)||i.encodings.length===1&&Object.keys(i.encodings[0]).length===0)&&(i.encodings=I.sendEncodings,C.sendEncodings=I.sendEncodings,this.setParametersPromises.push(C.setParameters(i).then(()=>{delete C.sendEncodings}).catch(()=>{delete C.sendEncodings})))}return Q})}function Iw(B){if(!(typeof B=="object"&&B.RTCRtpSender))return;const A=B.RTCRtpSender.prototype.getParameters;A&&(B.RTCRtpSender.prototype.getParameters=function(){const I=A.apply(this,arguments);return"encodings"in I||(I.encodings=[].concat(this.sendEncodings||[{}])),I})}function gw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}function Qw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createAnswer;B.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}const Bw=Object.freeze(Object.defineProperty({__proto__:null,shimAddTransceiver:Aw,shimCreateAnswer:Qw,shimCreateOffer:gw,shimGetDisplayMedia:pc,shimGetParameters:Iw,shimGetUserMedia:Vt,shimOnTrack:Wt,shimPeerConnection:LD,shimRTCDataChannel:$t,shimReceiverGetStats:zt,shimRemoveStream:_t,shimSenderGetStats:jt},Symbol.toStringTag,{value:"Module"}));function Cw(B){if(!(typeof B!="object"||!B.RTCPeerConnection)){if("getLocalStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in B.RTCPeerConnection.prototype)){const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addStream=function(I){this._localStreams||(this._localStreams=[]),this._localStreams.includes(I)||this._localStreams.push(I),I.getAudioTracks().forEach(g=>A.call(this,g,I)),I.getVideoTracks().forEach(g=>A.call(this,g,I))},B.RTCPeerConnection.prototype.addTrack=function(I,...g){return g&&g.forEach(Q=>{this._localStreams?this._localStreams.includes(Q)||this._localStreams.push(Q):this._localStreams=[Q]}),A.apply(this,arguments)}}"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(A){this._localStreams||(this._localStreams=[]);const I=this._localStreams.indexOf(A);if(I===-1)return;this._localStreams.splice(I,1);const g=A.getTracks();this.getSenders().forEach(Q=>{g.includes(Q.track)&&this.removeTrack(Q)})})}}function Ew(B){if(!(typeof B!="object"||!B.RTCPeerConnection)&&("getRemoteStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in B.RTCPeerConnection.prototype))){Object.defineProperty(B.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(I){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=I),this.addEventListener("track",this._onaddstreampoly=g=>{g.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const C=new Event("addstream");C.stream=Q,this.dispatchEvent(C)})})}});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){const I=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(g){g.streams.forEach(Q=>{if(I._remoteStreams||(I._remoteStreams=[]),I._remoteStreams.indexOf(Q)>=0)return;I._remoteStreams.push(Q);const C=new Event("addstream");C.stream=Q,I.dispatchEvent(C)})}),A.apply(I,arguments)}}}function iw(B){if(typeof B!="object"||!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype,I=A.createOffer,g=A.createAnswer,Q=A.setLocalDescription,C=A.setRemoteDescription,i=A.addIceCandidate;A.createOffer=function(D,o){const s=arguments.length>=2?arguments[2]:arguments[0],t=I.apply(this,[s]);return o?(t.then(D,o),Promise.resolve()):t},A.createAnswer=function(D,o){const s=arguments.length>=2?arguments[2]:arguments[0],t=g.apply(this,[s]);return o?(t.then(D,o),Promise.resolve()):t};let E=function(D,o,s){const t=Q.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t};A.setLocalDescription=E,E=function(D,o,s){const t=C.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.setRemoteDescription=E,E=function(D,o,s){const t=i.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.addIceCandidate=E}function Dw(B){const A=B&&B.navigator;if(A.mediaDevices&&A.mediaDevices.getUserMedia){const I=A.mediaDevices,g=I.getUserMedia.bind(I);A.mediaDevices.getUserMedia=Q=>g(ow(Q))}!A.getUserMedia&&A.mediaDevices&&A.mediaDevices.getUserMedia&&(A.getUserMedia=function(I,g,Q){A.mediaDevices.getUserMedia(I).then(g,Q)}.bind(A))}function ow(B){return B&&B.video!==void 0?Object.assign({},B,{video:Jt(B.video)}):B}function sw(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection;B.RTCPeerConnection=function(I,g){if(I&&I.iceServers){const Q=[];for(let C=0;C<I.iceServers.length;C++){let i=I.iceServers[C];!i.hasOwnProperty("urls")&&i.hasOwnProperty("url")?(UE("RTCIceServer.url","RTCIceServer.urls"),i=JSON.parse(JSON.stringify(i)),i.urls=i.url,delete i.url,Q.push(i)):Q.push(I.iceServers[C])}I.iceServers=Q}return new A(I,g)},B.RTCPeerConnection.prototype=A.prototype,"generateCertificate"in A&&Object.defineProperty(B.RTCPeerConnection,"generateCertificate",{get(){return A.generateCertificate}})}function tw(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function ww(B){const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(I){if(I){typeof I.offerToReceiveAudio<"u"&&(I.offerToReceiveAudio=!!I.offerToReceiveAudio);const g=this.getTransceivers().find(C=>C.receiver.track.kind==="audio");I.offerToReceiveAudio===!1&&g?g.direction==="sendrecv"?g.setDirection?g.setDirection("sendonly"):g.direction="sendonly":g.direction==="recvonly"&&(g.setDirection?g.setDirection("inactive"):g.direction="inactive"):I.offerToReceiveAudio===!0&&!g&&this.addTransceiver("audio"),typeof I.offerToReceiveVideo<"u"&&(I.offerToReceiveVideo=!!I.offerToReceiveVideo);const Q=this.getTransceivers().find(C=>C.receiver.track.kind==="video");I.offerToReceiveVideo===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):I.offerToReceiveVideo===!0&&!Q&&this.addTransceiver("video")}return A.apply(this,arguments)}}function aw(B){typeof B!="object"||B.AudioContext||(B.AudioContext=B.webkitAudioContext)}const ew=Object.freeze(Object.defineProperty({__proto__:null,shimAudioContext:aw,shimCallbacksAPI:iw,shimConstraints:ow,shimCreateOfferLegacy:ww,shimGetUserMedia:Dw,shimLocalStreamsAPI:Cw,shimRTCIceServerUrls:sw,shimRemoteStreamsAPI:Ew,shimTrackEventTransceiver:tw},Symbol.toStringTag,{value:"Module"}));var xc=Pt();const LE=RD(xc);function HE(B){if(!B.RTCIceCandidate||B.RTCIceCandidate&&"foundation"in B.RTCIceCandidate.prototype)return;const A=B.RTCIceCandidate;B.RTCIceCandidate=function(I){if(typeof I=="object"&&I.candidate&&I.candidate.indexOf("a=")===0&&(I=JSON.parse(JSON.stringify(I)),I.candidate=I.candidate.substr(2)),I.candidate&&I.candidate.length){const g=new A(I),Q=LE.parseCandidate(I.candidate),C=Object.assign(g,Q);return C.toJSON=function(){return{candidate:C.candidate,sdpMid:C.sdpMid,sdpMLineIndex:C.sdpMLineIndex,usernameFragment:C.usernameFragment}},C}return new A(I)},B.RTCIceCandidate.prototype=A.prototype,AB(B,"icecandidate",I=>(I.candidate&&Object.defineProperty(I,"candidate",{value:new B.RTCIceCandidate(I.candidate),writable:"false"}),I))}function PB(B,A){if(!B.RTCPeerConnection)return;"sctp"in B.RTCPeerConnection.prototype||Object.defineProperty(B.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});const I=function(E){if(!E||!E.sdp)return!1;const D=LE.splitSections(E.sdp);return D.shift(),D.some(o=>{const s=LE.parseMLine(o);return s&&s.kind==="application"&&s.protocol.indexOf("SCTP")!==-1})},g=function(E){const D=E.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(D===null||D.length<2)return-1;const o=parseInt(D[1],10);return o!==o?-1:o},Q=function(E){let D=65536;return A.browser==="firefox"&&(A.version<57?E===-1?D=16384:D=2147483637:A.version<60?D=A.version===57?65535:65536:D=2147483637),D},C=function(E,D){let o=65536;A.browser==="firefox"&&A.version===57&&(o=65535);const s=LE.matchPrefix(E.sdp,"a=max-message-size:");return s.length>0?o=parseInt(s[0].substr(19),10):A.browser==="firefox"&&D!==-1&&(o=2147483637),o},i=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,A.browser==="chrome"&&A.version>=76){const{sdpSemantics:E}=this.getConfiguration();E==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(I(arguments[0])){const E=g(arguments[0]),D=Q(E),o=C(arguments[0],E);let s;D===0&&o===0?s=Number.POSITIVE_INFINITY:D===0||o===0?s=Math.max(D,o):s=Math.min(D,o);const t={};Object.defineProperty(t,"maxMessageSize",{get(){return s}}),this._sctp=t}return i.apply(this,arguments)}}function TB(B){if(!(B.RTCPeerConnection&&"createDataChannel"in B.RTCPeerConnection.prototype))return;function A(g,Q){const C=g.send;g.send=function(){const i=arguments[0],E=i.length||i.size||i.byteLength;if(g.readyState==="open"&&Q.sctp&&E>Q.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+Q.sctp.maxMessageSize+" bytes)");return C.apply(g,arguments)}}const I=B.RTCPeerConnection.prototype.createDataChannel;B.RTCPeerConnection.prototype.createDataChannel=function(){const g=I.apply(this,arguments);return A(g,this),g},AB(B,"datachannel",g=>(A(g.channel,g.target),g))}function HD(B){if(!B.RTCPeerConnection||"connectionState"in B.RTCPeerConnection.prototype)return;const A=B.RTCPeerConnection.prototype;Object.defineProperty(A,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(A,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(I){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),I&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=I)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(I=>{const g=A[I];A[I]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const C=Q.target;if(C._lastConnectionState!==C.connectionState){C._lastConnectionState=C.connectionState;const i=new Event("connectionstatechange",Q);C.dispatchEvent(i)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),g.apply(this,arguments)}})}function YD(B,A){if(!B.RTCPeerConnection||A.browser==="chrome"&&A.version>=71||A.browser==="safari"&&A.version>=605)return;const I=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(g){if(g&&g.sdp&&g.sdp.indexOf(`
|
|
1103
|
+
a=mid:`+M.mid+`\r
|
|
1104
|
+
`;return}if(M.stream){var N;M.kind==="audio"?N=M.stream.getAudioTracks()[0]:M.kind==="video"&&(N=M.stream.getVideoTracks()[0]),N&&o>=15019&&M.kind==="video"&&!M.sendEncodingParameters[0].rtx&&(M.sendEncodingParameters[0].rtx={ssrc:M.sendEncodingParameters[0].ssrc+1})}var J=Q(M.localCapabilities,M.remoteCapabilities),L=J.codecs.filter(function(H){return H.name.toLowerCase()==="rtx"}).length;!L&&M.sendEncodingParameters[0].rtx&&delete M.sendEncodingParameters[0].rtx,y+=I(M,J,"answer",M.stream,c._dtlsRole),M.rtcpParameters&&M.rtcpParameters.reducedSize&&(y+=`a=rtcp-rsize\r
|
|
1105
|
+
`)}});var R=new D.RTCSessionDescription({type:"answer",sdp:y});return Promise.resolve(R)},a.prototype.addIceCandidate=function(c){var y=this,F;return c&&!(c.sdpMLineIndex!==void 0||c.sdpMid)?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise(function(R,M){if(y._remoteDescription)if(!c||c.candidate==="")for(var n=0;n<y.transceivers.length&&!(!y.transceivers[n].rejected&&(y.transceivers[n].iceTransport.addRemoteCandidate({}),F=B.getMediaSections(y._remoteDescription.sdp),F[n]+=`a=end-of-candidates\r
|
|
1106
|
+
`,y._remoteDescription.sdp=B.getDescription(y._remoteDescription.sdp)+F.join(""),y.usingBundle));n++);else{var N=c.sdpMLineIndex;if(c.sdpMid){for(var J=0;J<y.transceivers.length;J++)if(y.transceivers[J].mid===c.sdpMid){N=J;break}}var L=y.transceivers[N];if(L){if(L.rejected)return R();var H=Object.keys(c.candidate).length>0?B.parseCandidate(c.candidate):{};if(H.protocol==="tcp"&&(H.port===0||H.port===9)||H.component&&H.component!==1)return R();if((N===0||N>0&&L.iceTransport!==y.transceivers[0].iceTransport)&&!i(L.iceTransport,H))return M(E("OperationError","Can not add ICE candidate"));var Y=c.candidate.trim();Y.indexOf("a=")===0&&(Y=Y.substr(2)),F=B.getMediaSections(y._remoteDescription.sdp),F[N]+="a="+(H.type?Y:"end-of-candidates")+`\r
|
|
1107
|
+
`,y._remoteDescription.sdp=B.getDescription(y._remoteDescription.sdp)+F.join("")}else return M(E("OperationError","Can not add ICE candidate"))}else return M(E("InvalidStateError","Can not add ICE candidate without a remote description"));R()})},a.prototype.getStats=function(c){if(c&&c instanceof D.MediaStreamTrack){var y=null;if(this.transceivers.forEach(function(R){R.rtpSender&&R.rtpSender.track===c?y=R.rtpSender:R.rtpReceiver&&R.rtpReceiver.track===c&&(y=R.rtpReceiver)}),!y)throw E("InvalidAccessError","Invalid selector.");return y.getStats()}var F=[];return this.transceivers.forEach(function(R){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach(function(M){R[M]&&F.push(R[M].getStats())})}),Promise.all(F).then(function(R){var M=new Map;return R.forEach(function(n){n.forEach(function(N){M.set(N.id,N)})}),M})};var G=["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"];G.forEach(function(c){var y=D[c];if(y&&y.prototype&&y.prototype.getStats){var F=y.prototype.getStats;y.prototype.getStats=function(){return F.apply(this).then(function(R){var M=new Map;return Object.keys(R).forEach(function(n){R[n].type=A(R[n]),M.set(n,R[n])}),M})}}});var S=["createOffer","createAnswer"];return S.forEach(function(c){var y=a.prototype[c];a.prototype[c]=function(){var F=arguments;return typeof F[0]=="function"||typeof F[1]=="function"?y.apply(this,[arguments[2]]).then(function(R){typeof F[0]=="function"&&F[0].apply(null,[R])},function(R){typeof F[1]=="function"&&F[1].apply(null,[R])}):y.apply(this,arguments)}}),S=["setLocalDescription","setRemoteDescription","addIceCandidate"],S.forEach(function(c){var y=a.prototype[c];a.prototype[c]=function(){var F=arguments;return typeof F[1]=="function"||typeof F[2]=="function"?y.apply(this,arguments).then(function(){typeof F[1]=="function"&&F[1].apply(null)},function(R){typeof F[2]=="function"&&F[2].apply(null,[R])}):y.apply(this,arguments)}}),["getStats"].forEach(function(c){var y=a.prototype[c];a.prototype[c]=function(){var F=arguments;return typeof F[1]=="function"?y.apply(this,arguments).then(function(){typeof F[1]=="function"&&F[1].apply(null)}):y.apply(this,arguments)}}),a},HD}var mc=uc();const bc=MD(mc);function _t(B){const A=B&&B.navigator,I=function(Q){return{name:{PermissionDeniedError:"NotAllowedError"}[Q.name]||Q.name,message:Q.message,constraint:Q.constraint,toString(){return this.name}}},g=A.mediaDevices.getUserMedia.bind(A.mediaDevices);Object.getOwnPropertyDescriptor(A.mediaDevices,"getUserMedia")?.writable&&(A.mediaDevices.getUserMedia=function(Q){return g(Q).catch(C=>Promise.reject(I(C)))})}function $t(B){"getDisplayMedia"in B.navigator&&B.navigator.mediaDevices&&(B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||(B.navigator.mediaDevices.getDisplayMedia=B.navigator.getDisplayMedia.bind(B.navigator)))}function YD(B,A){if(B.RTCIceGatherer&&(B.RTCIceCandidate||(B.RTCIceCandidate=function(g){return g}),B.RTCSessionDescription||(B.RTCSessionDescription=function(g){return g}),A.version<15025)){const g=Object.getOwnPropertyDescriptor(B.MediaStreamTrack.prototype,"enabled");Object.defineProperty(B.MediaStreamTrack.prototype,"enabled",{set(Q){g.set.call(this,Q);const C=new Event("enabled");C.enabled=Q,this.dispatchEvent(C)}})}B.RTCRtpSender&&!("dtmf"in B.RTCRtpSender.prototype)&&Object.defineProperty(B.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=new B.RTCDtmfSender(this):this.track.kind==="video"&&(this._dtmf=null)),this._dtmf}}),B.RTCDtmfSender&&!B.RTCDTMFSender&&(B.RTCDTMFSender=B.RTCDtmfSender);const I=bc(B,A.version);B.RTCPeerConnection=function(g){return g&&g.iceServers&&(g.iceServers=qc(g.iceServers,A.version),JD("ICE servers after filtering:",g.iceServers)),new I(g)},B.RTCPeerConnection.prototype=I.prototype}function Aw(B){B.RTCRtpSender&&!("replaceTrack"in B.RTCRtpSender.prototype)&&(B.RTCRtpSender.prototype.replaceTrack=B.RTCRtpSender.prototype.setTrack)}const Iw=Object.freeze(Object.defineProperty({__proto__:null,shimGetDisplayMedia:$t,shimGetUserMedia:_t,shimPeerConnection:YD,shimReplaceTrack:Aw},Symbol.toStringTag,{value:"Module"}));function gw(B,A){const I=B&&B.navigator,g=B&&B.MediaStreamTrack;if(I.getUserMedia=function(Q,C,i){LE("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),I.mediaDevices.getUserMedia(Q).then(C,i)},!(A.version>55&&"autoGainControl"in I.mediaDevices.getSupportedConstraints())){const Q=function(i,E,D){E in i&&!(D in i)&&(i[D]=i[E],delete i[E])},C=I.mediaDevices.getUserMedia.bind(I.mediaDevices);if(Object.getOwnPropertyDescriptor(I.mediaDevices,"getUserMedia")?.writable&&(I.mediaDevices.getUserMedia=function(i){return typeof i=="object"&&typeof i.audio=="object"&&(i=JSON.parse(JSON.stringify(i)),Q(i.audio,"autoGainControl","mozAutoGainControl"),Q(i.audio,"noiseSuppression","mozNoiseSuppression")),C(i)}),g&&g.prototype.getSettings){const i=g.prototype.getSettings;g.prototype.getSettings=function(){const E=i.apply(this,arguments);return Q(E,"mozAutoGainControl","autoGainControl"),Q(E,"mozNoiseSuppression","noiseSuppression"),E}}if(g&&g.prototype.applyConstraints){const i=g.prototype.applyConstraints;g.prototype.applyConstraints=function(E){return this.kind==="audio"&&typeof E=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E,"autoGainControl","mozAutoGainControl"),Q(E,"noiseSuppression","mozNoiseSuppression")),i.apply(this,[E])}}}}function Pc(B,A){B.navigator.mediaDevices&&"getDisplayMedia"in B.navigator.mediaDevices||B.navigator.mediaDevices&&(B.navigator.mediaDevices.getDisplayMedia=function(I){if(!(I&&I.video)){const g=new DOMException("getDisplayMedia without video constraints is undefined");return g.name="NotFoundError",g.code=8,Promise.reject(g)}return I.video===!0?I.video={mediaSource:A}:I.video.mediaSource=A,B.navigator.mediaDevices.getUserMedia(I)})}function Qw(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function dD(B,A){if(typeof B!="object"||!(B.RTCPeerConnection||B.mozRTCPeerConnection))return;!B.RTCPeerConnection&&B.mozRTCPeerConnection&&(B.RTCPeerConnection=B.mozRTCPeerConnection),A.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const C=B.RTCPeerConnection.prototype[Q],i={[Q](){return arguments[0]=new(Q==="addIceCandidate"?B.RTCIceCandidate:B.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};B.RTCPeerConnection.prototype[Q]=i[Q]});const I={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},g=B.RTCPeerConnection.prototype.getStats;B.RTCPeerConnection.prototype.getStats=function(){const[Q,C,i]=arguments;return g.apply(this,[Q||null]).then(E=>{if(A.version<53&&!C)try{E.forEach(D=>{D.type=I[D.type]||D.type})}catch(D){if(D.name!=="TypeError")throw D;E.forEach((o,s)=>{E.set(s,Object.assign({},o,{type:I[o.type]||o.type}))})}return E}).then(C,i)}}function Bw(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpSender.prototype)return;const A=B.RTCPeerConnection.prototype.getSenders;A&&(B.RTCPeerConnection.prototype.getSenders=function(){const g=A.apply(this,[]);return g.forEach(Q=>Q._pc=this),g});const I=B.RTCPeerConnection.prototype.addTrack;I&&(B.RTCPeerConnection.prototype.addTrack=function(){const g=I.apply(this,arguments);return g._pc=this,g}),B.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Cw(B){if(!(typeof B=="object"&&B.RTCPeerConnection&&B.RTCRtpSender)||B.RTCRtpSender&&"getStats"in B.RTCRtpReceiver.prototype)return;const A=B.RTCPeerConnection.prototype.getReceivers;A&&(B.RTCPeerConnection.prototype.getReceivers=function(){const I=A.apply(this,[]);return I.forEach(g=>g._pc=this),I}),AB(B,"track",I=>(I.receiver._pc=I.srcElement,I)),B.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Ew(B){!B.RTCPeerConnection||"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(A){LE("removeStream","removeTrack"),this.getSenders().forEach(I=>{I.track&&A.getTracks().includes(I.track)&&this.removeTrack(I)})})}function iw(B){B.DataChannel&&!B.RTCDataChannel&&(B.RTCDataChannel=B.DataChannel)}function Dw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.addTransceiver;A&&(B.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const I=arguments[1],g=I&&"sendEncodings"in I;g&&I.sendEncodings.forEach(C=>{if("rid"in C&&!/^[a-z0-9]{0,16}$/i.test(C.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in C&&!(parseFloat(C.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in C&&!(parseFloat(C.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const Q=A.apply(this,arguments);if(g){const{sender:C}=Q,i=C.getParameters();(!("encodings"in i)||i.encodings.length===1&&Object.keys(i.encodings[0]).length===0)&&(i.encodings=I.sendEncodings,C.sendEncodings=I.sendEncodings,this.setParametersPromises.push(C.setParameters(i).then(()=>{delete C.sendEncodings}).catch(()=>{delete C.sendEncodings})))}return Q})}function ow(B){if(!(typeof B=="object"&&B.RTCRtpSender))return;const A=B.RTCRtpSender.prototype.getParameters;A&&(B.RTCRtpSender.prototype.getParameters=function(){const I=A.apply(this,arguments);return"encodings"in I||(I.encodings=[].concat(this.sendEncodings||[{}])),I})}function sw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}function tw(B){if(!(typeof B=="object"&&B.RTCPeerConnection))return;const A=B.RTCPeerConnection.prototype.createAnswer;B.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>A.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):A.apply(this,arguments)}}const ww=Object.freeze(Object.defineProperty({__proto__:null,shimAddTransceiver:Dw,shimCreateAnswer:tw,shimCreateOffer:sw,shimGetDisplayMedia:Pc,shimGetParameters:ow,shimGetUserMedia:gw,shimOnTrack:Qw,shimPeerConnection:dD,shimRTCDataChannel:iw,shimReceiverGetStats:Cw,shimRemoveStream:Ew,shimSenderGetStats:Bw},Symbol.toStringTag,{value:"Module"}));function aw(B){if(!(typeof B!="object"||!B.RTCPeerConnection)){if("getLocalStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in B.RTCPeerConnection.prototype)){const A=B.RTCPeerConnection.prototype.addTrack;B.RTCPeerConnection.prototype.addStream=function(I){this._localStreams||(this._localStreams=[]),this._localStreams.includes(I)||this._localStreams.push(I),I.getAudioTracks().forEach(g=>A.call(this,g,I)),I.getVideoTracks().forEach(g=>A.call(this,g,I))},B.RTCPeerConnection.prototype.addTrack=function(I,...g){return g&&g.forEach(Q=>{this._localStreams?this._localStreams.includes(Q)||this._localStreams.push(Q):this._localStreams=[Q]}),A.apply(this,arguments)}}"removeStream"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.removeStream=function(A){this._localStreams||(this._localStreams=[]);const I=this._localStreams.indexOf(A);if(I===-1)return;this._localStreams.splice(I,1);const g=A.getTracks();this.getSenders().forEach(Q=>{g.includes(Q.track)&&this.removeTrack(Q)})})}}function ew(B){if(!(typeof B!="object"||!B.RTCPeerConnection)&&("getRemoteStreams"in B.RTCPeerConnection.prototype||(B.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in B.RTCPeerConnection.prototype))){Object.defineProperty(B.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(I){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=I),this.addEventListener("track",this._onaddstreampoly=g=>{g.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const C=new Event("addstream");C.stream=Q,this.dispatchEvent(C)})})}});const A=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){const I=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(g){g.streams.forEach(Q=>{if(I._remoteStreams||(I._remoteStreams=[]),I._remoteStreams.indexOf(Q)>=0)return;I._remoteStreams.push(Q);const C=new Event("addstream");C.stream=Q,I.dispatchEvent(C)})}),A.apply(I,arguments)}}}function hw(B){if(typeof B!="object"||!B.RTCPeerConnection)return;const A=B.RTCPeerConnection.prototype,I=A.createOffer,g=A.createAnswer,Q=A.setLocalDescription,C=A.setRemoteDescription,i=A.addIceCandidate;A.createOffer=function(D,o){const s=arguments.length>=2?arguments[2]:arguments[0],t=I.apply(this,[s]);return o?(t.then(D,o),Promise.resolve()):t},A.createAnswer=function(D,o){const s=arguments.length>=2?arguments[2]:arguments[0],t=g.apply(this,[s]);return o?(t.then(D,o),Promise.resolve()):t};let E=function(D,o,s){const t=Q.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t};A.setLocalDescription=E,E=function(D,o,s){const t=C.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.setRemoteDescription=E,E=function(D,o,s){const t=i.apply(this,[D]);return s?(t.then(o,s),Promise.resolve()):t},A.addIceCandidate=E}function cw(B){const A=B&&B.navigator;if(A.mediaDevices&&A.mediaDevices.getUserMedia){const I=A.mediaDevices,g=I.getUserMedia.bind(I);A.mediaDevices.getUserMedia=Q=>g(yw(Q))}!A.getUserMedia&&A.mediaDevices&&A.mediaDevices.getUserMedia&&(A.getUserMedia=function(I,g,Q){A.mediaDevices.getUserMedia(I).then(g,Q)}.bind(A))}function yw(B){return B&&B.video!==void 0?Object.assign({},B,{video:ft(B.video)}):B}function Gw(B){if(!B.RTCPeerConnection)return;const A=B.RTCPeerConnection;B.RTCPeerConnection=function(I,g){if(I&&I.iceServers){const Q=[];for(let C=0;C<I.iceServers.length;C++){let i=I.iceServers[C];!i.hasOwnProperty("urls")&&i.hasOwnProperty("url")?(LE("RTCIceServer.url","RTCIceServer.urls"),i=JSON.parse(JSON.stringify(i)),i.urls=i.url,delete i.url,Q.push(i)):Q.push(I.iceServers[C])}I.iceServers=Q}return new A(I,g)},B.RTCPeerConnection.prototype=A.prototype,"generateCertificate"in A&&Object.defineProperty(B.RTCPeerConnection,"generateCertificate",{get(){return A.generateCertificate}})}function Sw(B){typeof B=="object"&&B.RTCTrackEvent&&"receiver"in B.RTCTrackEvent.prototype&&!("transceiver"in B.RTCTrackEvent.prototype)&&Object.defineProperty(B.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function rw(B){const A=B.RTCPeerConnection.prototype.createOffer;B.RTCPeerConnection.prototype.createOffer=function(I){if(I){typeof I.offerToReceiveAudio<"u"&&(I.offerToReceiveAudio=!!I.offerToReceiveAudio);const g=this.getTransceivers().find(C=>C.receiver.track.kind==="audio");I.offerToReceiveAudio===!1&&g?g.direction==="sendrecv"?g.setDirection?g.setDirection("sendonly"):g.direction="sendonly":g.direction==="recvonly"&&(g.setDirection?g.setDirection("inactive"):g.direction="inactive"):I.offerToReceiveAudio===!0&&!g&&this.addTransceiver("audio"),typeof I.offerToReceiveVideo<"u"&&(I.offerToReceiveVideo=!!I.offerToReceiveVideo);const Q=this.getTransceivers().find(C=>C.receiver.track.kind==="video");I.offerToReceiveVideo===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):I.offerToReceiveVideo===!0&&!Q&&this.addTransceiver("video")}return A.apply(this,arguments)}}function Fw(B){typeof B!="object"||B.AudioContext||(B.AudioContext=B.webkitAudioContext)}const Rw=Object.freeze(Object.defineProperty({__proto__:null,shimAudioContext:Fw,shimCallbacksAPI:hw,shimConstraints:yw,shimCreateOfferLegacy:rw,shimGetUserMedia:cw,shimLocalStreamsAPI:aw,shimRTCIceServerUrls:Gw,shimRemoteStreamsAPI:ew,shimTrackEventTransceiver:Sw},Symbol.toStringTag,{value:"Module"}));var Tc=jt();const HE=MD(Tc);function YE(B){if(!B.RTCIceCandidate||B.RTCIceCandidate&&"foundation"in B.RTCIceCandidate.prototype)return;const A=B.RTCIceCandidate;B.RTCIceCandidate=function(I){if(typeof I=="object"&&I.candidate&&I.candidate.indexOf("a=")===0&&(I=JSON.parse(JSON.stringify(I)),I.candidate=I.candidate.substr(2)),I.candidate&&I.candidate.length){const g=new A(I),Q=HE.parseCandidate(I.candidate),C=Object.assign(g,Q);return C.toJSON=function(){return{candidate:C.candidate,sdpMid:C.sdpMid,sdpMLineIndex:C.sdpMLineIndex,usernameFragment:C.usernameFragment}},C}return new A(I)},B.RTCIceCandidate.prototype=A.prototype,AB(B,"icecandidate",I=>(I.candidate&&Object.defineProperty(I,"candidate",{value:new B.RTCIceCandidate(I.candidate),writable:"false"}),I))}function TB(B,A){if(!B.RTCPeerConnection)return;"sctp"in B.RTCPeerConnection.prototype||Object.defineProperty(B.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});const I=function(E){if(!E||!E.sdp)return!1;const D=HE.splitSections(E.sdp);return D.shift(),D.some(o=>{const s=HE.parseMLine(o);return s&&s.kind==="application"&&s.protocol.indexOf("SCTP")!==-1})},g=function(E){const D=E.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(D===null||D.length<2)return-1;const o=parseInt(D[1],10);return o!==o?-1:o},Q=function(E){let D=65536;return A.browser==="firefox"&&(A.version<57?E===-1?D=16384:D=2147483637:A.version<60?D=A.version===57?65535:65536:D=2147483637),D},C=function(E,D){let o=65536;A.browser==="firefox"&&A.version===57&&(o=65535);const s=HE.matchPrefix(E.sdp,"a=max-message-size:");return s.length>0?o=parseInt(s[0].substr(19),10):A.browser==="firefox"&&D!==-1&&(o=2147483637),o},i=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,A.browser==="chrome"&&A.version>=76){const{sdpSemantics:E}=this.getConfiguration();E==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(I(arguments[0])){const E=g(arguments[0]),D=Q(E),o=C(arguments[0],E);let s;D===0&&o===0?s=Number.POSITIVE_INFINITY:D===0||o===0?s=Math.max(D,o):s=Math.min(D,o);const t={};Object.defineProperty(t,"maxMessageSize",{get(){return s}}),this._sctp=t}return i.apply(this,arguments)}}function OB(B){if(!(B.RTCPeerConnection&&"createDataChannel"in B.RTCPeerConnection.prototype))return;function A(g,Q){const C=g.send;g.send=function(){const i=arguments[0],E=i.length||i.size||i.byteLength;if(g.readyState==="open"&&Q.sctp&&E>Q.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+Q.sctp.maxMessageSize+" bytes)");return C.apply(g,arguments)}}const I=B.RTCPeerConnection.prototype.createDataChannel;B.RTCPeerConnection.prototype.createDataChannel=function(){const g=I.apply(this,arguments);return A(g,this),g},AB(B,"datachannel",g=>(A(g.channel,g.target),g))}function KD(B){if(!B.RTCPeerConnection||"connectionState"in B.RTCPeerConnection.prototype)return;const A=B.RTCPeerConnection.prototype;Object.defineProperty(A,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(A,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(I){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),I&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=I)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(I=>{const g=A[I];A[I]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const C=Q.target;if(C._lastConnectionState!==C.connectionState){C._lastConnectionState=C.connectionState;const i=new Event("connectionstatechange",Q);C.dispatchEvent(i)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),g.apply(this,arguments)}})}function lD(B,A){if(!B.RTCPeerConnection||A.browser==="chrome"&&A.version>=71||A.browser==="safari"&&A.version>=605)return;const I=B.RTCPeerConnection.prototype.setRemoteDescription;B.RTCPeerConnection.prototype.setRemoteDescription=function(g){if(g&&g.sdp&&g.sdp.indexOf(`
|
|
1108
1108
|
a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
1109
1109
|
`).filter(C=>C.trim()!=="a=extmap-allow-mixed").join(`
|
|
1110
|
-
`);B.RTCSessionDescription&&g instanceof B.RTCSessionDescription?arguments[0]=new B.RTCSessionDescription({type:g.type,sdp:Q}):g.sdp=Q}return I.apply(this,arguments)}}function
|
|
1110
|
+
`);B.RTCSessionDescription&&g instanceof B.RTCSessionDescription?arguments[0]=new B.RTCSessionDescription({type:g.type,sdp:Q}):g.sdp=Q}return I.apply(this,arguments)}}function dE(B,A){if(!(B.RTCPeerConnection&&B.RTCPeerConnection.prototype))return;const I=B.RTCPeerConnection.prototype.addIceCandidate;!I||I.length===0||(B.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(A.browser==="chrome"&&A.version<78||A.browser==="firefox"&&A.version<68||A.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():I.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}const Oc=Object.freeze(Object.defineProperty({__proto__:null,removeExtmapAllowMixed:lD,shimAddIceCandidateNullOrEmpty:dE,shimConnectionState:KD,shimMaxMessageSize:TB,shimRTCIceCandidate:YE,shimSendThrowTypeError:OB},Symbol.toStringTag,{value:"Module"}));function Xc({window:B}={},A={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const I=JD,g=pc(B),Q={browserDetails:g,commonShim:Oc,extractVersion:PB,disableLog:lc,disableWarnings:fc};switch(g.browser){case"chrome":if(!Zt||!LD||!A.shimChrome)return I("Chrome shim is not included in this adapter release."),Q;if(g.version===null)return I("Chrome shim can not determine version, not shimming."),Q;I("adapter.js shimming chrome."),Q.browserShim=Zt,dE(B,g),qt(B,g),ut(B),LD(B,g),mt(B),Xt(B,g),bt(B),Pt(B),Tt(B),vt(B,g),YE(B),KD(B),TB(B,g),OB(B),lD(B,g);break;case"firefox":if(!ww||!dD||!A.shimFirefox)return I("Firefox shim is not included in this adapter release."),Q;I("adapter.js shimming firefox."),Q.browserShim=ww,dE(B,g),gw(B,g),dD(B,g),Qw(B),Ew(B),Bw(B),Cw(B),iw(B),Dw(B),ow(B),sw(B),tw(B),YE(B),KD(B),TB(B,g),OB(B);break;case"edge":if(!Iw||!YD||!A.shimEdge)return I("MS edge shim is not included in this adapter release."),Q;I("adapter.js shimming edge."),Q.browserShim=Iw,_t(B),$t(B),YD(B,g),Aw(B),TB(B,g),OB(B);break;case"safari":if(!Rw||!A.shimSafari)return I("Safari shim is not included in this adapter release."),Q;I("adapter.js shimming safari."),Q.browserShim=Rw,dE(B,g),Gw(B),rw(B),hw(B),aw(B),ew(B),Sw(B),cw(B),Fw(B),YE(B),TB(B,g),OB(B),lD(B,g);break;default:I("Unsupported browser!");break}return Q}const kw=Xc({window:typeof window>"u"?void 0:window});function Hg(B,A,I,g){Object.defineProperty(B,A,{get:I,set:g,enumerable:!0,configurable:!0})}var fD=kw.default||kw,XB=new(function(){function B(){this.isIOS=["iPad","iPhone","iPod"].includes(navigator.platform),this.supportedBrowsers=["firefox","chrome","safari"],this.minFirefoxVersion=59,this.minChromeVersion=72,this.minSafariVersion=605}return B.prototype.isWebRTCSupported=function(){return typeof RTCPeerConnection<"u"},B.prototype.isBrowserSupported=function(){var A=this.getBrowser(),I=this.getVersion(),g=this.supportedBrowsers.includes(A);return g?A==="chrome"?I>=this.minChromeVersion:A==="firefox"?I>=this.minFirefoxVersion:A==="safari"?!this.isIOS&&I>=this.minSafariVersion:!1:!1},B.prototype.getBrowser=function(){return fD.browserDetails.browser},B.prototype.getVersion=function(){return fD.browserDetails.version||0},B.prototype.isUnifiedPlanSupported=function(){var A=this.getBrowser(),I=fD.browserDetails.version||0;if(A==="chrome"&&I<this.minChromeVersion)return!1;if(A==="firefox"&&I>=this.minFirefoxVersion)return!0;if(!window.RTCRtpTransceiver||!("currentDirection"in RTCRtpTransceiver.prototype))return!1;var g,Q=!1;try{g=new RTCPeerConnection,g.addTransceiver("audio"),Q=!0}catch{}finally{g&&g.close()}return Q},B.prototype.toString=function(){return`Supports:
|
|
1111
1111
|
browser:`.concat(this.getBrowser(),`
|
|
1112
1112
|
version:`).concat(this.getVersion(),`
|
|
1113
1113
|
isIOS:`).concat(this.isIOS,`
|
|
1114
1114
|
isWebRTCSupported:`).concat(this.isWebRTCSupported(),`
|
|
1115
1115
|
isBrowserSupported:`).concat(this.isBrowserSupported(),`
|
|
1116
|
-
isUnifiedPlanSupported:`).concat(this.isUnifiedPlanSupported())},B}()),cw={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:["turn:eu-0.turn.peerjs.com:3478","turn:us-0.turn.peerjs.com:3478"],username:"peerjs",credential:"peerjsp"}],sdpSemantics:"unified-plan"},bc=function(){function B(){this.CLOUD_HOST="0.peerjs.com",this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=cw,this.browser=OB.getBrowser(),this.browserVersion=OB.getVersion(),this.supports=function(){var A={browser:OB.isBrowserSupported(),webRTC:OB.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!A.webRTC)return A;var I;try{I=new RTCPeerConnection(cw),A.audioVideo=!0;var g=void 0;try{g=I.createDataChannel("_PEERJSTEST",{ordered:!0}),A.data=!0,A.reliable=!!g.ordered;try{g.binaryType="blob",A.binaryBlob=!OB.isIOS}catch{}}catch{}finally{g&&g.close()}}catch{}finally{I&&I.close()}return A}(),this.pack=kt.pack,this.unpack=kt.unpack,this._dataCount=1}return B.prototype.noop=function(){},B.prototype.validateId=function(A){return!A||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(A)},B.prototype.chunk=function(A){for(var I=[],g=A.size,Q=Math.ceil(g/yA.chunkedMTU),C=0,i=0;i<g;){var E=Math.min(g,i+yA.chunkedMTU),D=A.slice(i,E),o={__peerData:this._dataCount,n:C,data:D,total:Q};I.push(o),i=E,C++}return this._dataCount++,I},B.prototype.blobToArrayBuffer=function(A,I){var g=new FileReader;return g.onload=function(Q){Q.target&&I(Q.target.result)},g.readAsArrayBuffer(A),g},B.prototype.binaryStringToArrayBuffer=function(A){for(var I=new Uint8Array(A.length),g=0;g<A.length;g++)I[g]=A.charCodeAt(g)&255;return I.buffer},B.prototype.randomToken=function(){return Math.random().toString(36).slice(2)},B.prototype.isSecure=function(){return location.protocol==="https:"},B}(),yA=new bc,yw={};Hg(yw,"Peer",()=>qD,B=>qD=B);var XB={},mc=Object.prototype.hasOwnProperty,HI="~";function vB(){}Object.create&&(vB.prototype=Object.create(null),new vB().__proto__||(HI=!1));function Pc(B,A,I){this.fn=B,this.context=A,this.once=I||!1}function Gw(B,A,I,g,Q){if(typeof I!="function")throw new TypeError("The listener must be a function");var C=new Pc(I,g||B,Q),i=HI?HI+A:A;return B._events[i]?B._events[i].fn?B._events[i]=[B._events[i],C]:B._events[i].push(C):(B._events[i]=C,B._eventsCount++),B}function KE(B,A){--B._eventsCount===0?B._events=new vB:delete B._events[A]}function GI(){this._events=new vB,this._eventsCount=0}GI.prototype.eventNames=function(){var B=[],A,I;if(this._eventsCount===0)return B;for(I in A=this._events)mc.call(A,I)&&B.push(HI?I.slice(1):I);return Object.getOwnPropertySymbols?B.concat(Object.getOwnPropertySymbols(A)):B},GI.prototype.listeners=function(B){var A=HI?HI+B:B,I=this._events[A];if(!I)return[];if(I.fn)return[I.fn];for(var g=0,Q=I.length,C=new Array(Q);g<Q;g++)C[g]=I[g].fn;return C},GI.prototype.listenerCount=function(B){var A=HI?HI+B:B,I=this._events[A];return I?I.fn?1:I.length:0},GI.prototype.emit=function(B,A,I,g,Q,C){var i=HI?HI+B:B;if(!this._events[i])return!1;var E=this._events[i],D=arguments.length,o,s;if(E.fn){switch(E.once&&this.removeListener(B,E.fn,void 0,!0),D){case 1:return E.fn.call(E.context),!0;case 2:return E.fn.call(E.context,A),!0;case 3:return E.fn.call(E.context,A,I),!0;case 4:return E.fn.call(E.context,A,I,g),!0;case 5:return E.fn.call(E.context,A,I,g,Q),!0;case 6:return E.fn.call(E.context,A,I,g,Q,C),!0}for(s=1,o=new Array(D-1);s<D;s++)o[s-1]=arguments[s];E.fn.apply(E.context,o)}else{var t=E.length,w;for(s=0;s<t;s++)switch(E[s].once&&this.removeListener(B,E[s].fn,void 0,!0),D){case 1:E[s].fn.call(E[s].context);break;case 2:E[s].fn.call(E[s].context,A);break;case 3:E[s].fn.call(E[s].context,A,I);break;case 4:E[s].fn.call(E[s].context,A,I,g);break;default:if(!o)for(w=1,o=new Array(D-1);w<D;w++)o[w-1]=arguments[w];E[s].fn.apply(E[s].context,o)}}return!0},GI.prototype.on=function(B,A,I){return Gw(this,B,A,I,!1)},GI.prototype.once=function(B,A,I){return Gw(this,B,A,I,!0)},GI.prototype.removeListener=function(B,A,I,g){var Q=HI?HI+B:B;if(!this._events[Q])return this;if(!A)return KE(this,Q),this;var C=this._events[Q];if(C.fn)C.fn===A&&(!g||C.once)&&(!I||C.context===I)&&KE(this,Q);else{for(var i=0,E=[],D=C.length;i<D;i++)(C[i].fn!==A||g&&!C[i].once||I&&C[i].context!==I)&&E.push(C[i]);E.length?this._events[Q]=E.length===1?E[0]:E:KE(this,Q)}return this},GI.prototype.removeAllListeners=function(B){var A;return B?(A=HI?HI+B:B,this._events[A]&&KE(this,A)):(this._events=new vB,this._eventsCount=0),this},GI.prototype.off=GI.prototype.removeListener,GI.prototype.addListener=GI.prototype.on,GI.prefixed=HI,GI.EventEmitter=GI,XB=GI;var v={};Hg(v,"LogLevel",()=>qI,B=>qI=B),Hg(v,"default",()=>Sw,B=>Sw=B);var GQ=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],i;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(E){i={error:E}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(i)throw i.error}}return C},SQ=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Tc="PeerJS: ",qI;(function(B){B[B.Disabled=0]="Disabled",B[B.Errors=1]="Errors",B[B.Warnings=2]="Warnings",B[B.All=3]="All"})(qI||(qI={}));var Oc=function(){function B(){this._logLevel=qI.Disabled}return Object.defineProperty(B.prototype,"logLevel",{get:function(){return this._logLevel},set:function(A){this._logLevel=A},enumerable:!1,configurable:!0}),B.prototype.log=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=qI.All&&this._print.apply(this,SQ([qI.All],GQ(A),!1))},B.prototype.warn=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=qI.Warnings&&this._print.apply(this,SQ([qI.Warnings],GQ(A),!1))},B.prototype.error=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=qI.Errors&&this._print.apply(this,SQ([qI.Errors],GQ(A),!1))},B.prototype.setLogFunction=function(A){this._print=A},B.prototype._print=function(A){for(var I=[],g=1;g<arguments.length;g++)I[g-1]=arguments[g];var Q=SQ([Tc],GQ(I),!1);for(var C in Q)Q[C]instanceof Error&&(Q[C]="("+Q[C].name+") "+Q[C].message);A>=qI.All?console.log.apply(console,SQ([],GQ(Q),!1)):A>=qI.Warnings?console.warn.apply(console,SQ(["WARNING"],GQ(Q),!1)):A>=qI.Errors&&console.error.apply(console,SQ(["ERROR"],GQ(Q),!1))},B}(),Sw=new Oc,rw={};Hg(rw,"Socket",()=>Fw,B=>Fw=B);var hg;(function(B){B.Data="data",B.Media="media"})(hg||(hg={}));var TA;(function(B){B.BrowserIncompatible="browser-incompatible",B.Disconnected="disconnected",B.InvalidID="invalid-id",B.InvalidKey="invalid-key",B.Network="network",B.PeerUnavailable="peer-unavailable",B.SslUnavailable="ssl-unavailable",B.ServerError="server-error",B.SocketError="socket-error",B.SocketClosed="socket-closed",B.UnavailableID="unavailable-id",B.WebRTC="webrtc"})(TA||(TA={}));var Pg;(function(B){B.Binary="binary",B.BinaryUTF8="binary-utf8",B.JSON="json"})(Pg||(Pg={}));var Tg;(function(B){B.Message="message",B.Disconnected="disconnected",B.Error="error",B.Close="close"})(Tg||(Tg={}));var tI;(function(B){B.Heartbeat="HEARTBEAT",B.Candidate="CANDIDATE",B.Offer="OFFER",B.Answer="ANSWER",B.Open="OPEN",B.Error="ERROR",B.IdTaken="ID-TAKEN",B.InvalidKey="INVALID-KEY",B.Leave="LEAVE",B.Expire="EXPIRE"})(tI||(tI={}));var dD={};dD=JSON.parse('{"name":"peerjs","version":"1.4.7","keywords":["peerjs","webrtc","p2p","rtc"],"description":"PeerJS client","homepage":"https://peerjs.com","bugs":{"url":"https://github.com/peers/peerjs/issues"},"repository":{"type":"git","url":"https://github.com/peers/peerjs"},"license":"MIT","contributors":["Michelle Bu <michelle@michellebu.com>","afrokick <devbyru@gmail.com>","ericz <really.ez@gmail.com>","Jairo <kidandcat@gmail.com>","Jonas Gloning <34194370+jonasgloning@users.noreply.github.com>","Jairo Caro-Accino Viciana <jairo@galax.be>","Carlos Caballero <carlos.caballero.gonzalez@gmail.com>","hc <hheennrryy@gmail.com>","Muhammad Asif <capripio@gmail.com>","PrashoonB <prashoonbhattacharjee@gmail.com>","Harsh Bardhan Mishra <47351025+HarshCasper@users.noreply.github.com>","akotynski <aleksanderkotbury@gmail.com>","lmb <i@lmb.io>","Jairooo <jairocaro@msn.com>","Moritz St\xFCckler <moritz.stueckler@gmail.com>","Simon <crydotsnakegithub@gmail.com>","Denis Lukov <denismassters@gmail.com>","Philipp Hancke <fippo@andyet.net>","Hans Oksendahl <hansoksendahl@gmail.com>","Jess <jessachandler@gmail.com>","khankuan <khankuan@gmail.com>","DUODVK <kurmanov.work@gmail.com>","XiZhao <kwang1imsa@gmail.com>","Matthias Lohr <matthias@lohr.me>","=frank tree <=frnktrb@googlemail.com>","Andre Eckardt <aeckardt@outlook.com>","Chris Cowan <agentme49@gmail.com>","Alex Chuev <alex@chuev.com>","alxnull <alxnull@e.mail.de>","Yemel Jardi <angel.jardi@gmail.com>","Ben Parnell <benjaminparnell.94@gmail.com>","Benny Lichtner <bennlich@gmail.com>","fresheneesz <bitetrudpublic@gmail.com>","bob.barstead@exaptive.com <bob.barstead@exaptive.com>","chandika <chandika@gmail.com>","emersion <contact@emersion.fr>","Christopher Van <cvan@users.noreply.github.com>","eddieherm <edhermoso@gmail.com>","Eduardo Pinho <enet4mikeenet@gmail.com>","Evandro Zanatta <ezanatta@tray.net.br>","Gardner Bickford <gardner@users.noreply.github.com>","Gian Luca <gianluca.cecchi@cynny.com>","PatrickJS <github@gdi2290.com>","jonnyf <github@jonathanfoss.co.uk>","Hizkia Felix <hizkifw@gmail.com>","Hristo Oskov <hristo.oskov@gmail.com>","Isaac Madwed <i.madwed@gmail.com>","Ilya Konanykhin <ilya.konanykhin@gmail.com>","jasonbarry <jasbarry@me.com>","Jonathan Burke <jonathan.burke.1311@googlemail.com>","Josh Hamit <josh.hamit@gmail.com>","Jordan Austin <jrax86@gmail.com>","Joel Wetzell <jwetzell@yahoo.com>","xizhao <kevin.wang@cloudera.com>","Alberto Torres <kungfoobar@gmail.com>","Jonathan Mayol <mayoljonathan@gmail.com>","Jefferson Felix <me@jsfelix.dev>","Rolf Erik Lekang <me@rolflekang.com>","Kevin Mai-Husan Chia <mhchia@users.noreply.github.com>","Pepijn de Vos <pepijndevos@gmail.com>","JooYoung <qkdlql@naver.com>","Tobias Speicher <rootcommander@gmail.com>","Steve Blaurock <sblaurock@gmail.com>","Kyrylo Shegeda <shegeda@ualberta.ca>","Diwank Singh Tomer <singh@diwank.name>","So\u0308ren Balko <Soeren.Balko@gmail.com>","Arpit Solanki <solankiarpit1997@gmail.com>","Yuki Ito <yuki@gnnk.net>","Artur Zayats <zag2art@gmail.com>"],"funding":{"type":"opencollective","url":"https://opencollective.com/peer"},"collective":{"type":"opencollective","url":"https://opencollective.com/peer"},"files":["dist/*"],"sideEffects":["lib/global.ts","lib/supports.ts"],"main":"dist/bundler.cjs","module":"dist/bundler.mjs","browser-minified":"dist/peerjs.min.js","browser-unminified":"dist/peerjs.js","types":"dist/types.d.ts","engines":{"node":">= 10"},"targets":{"types":{"source":"lib/exports.ts"},"main":{"source":"lib/exports.ts","sourceMap":{"inlineSources":true}},"module":{"source":"lib/exports.ts","includeNodeModules":["eventemitter3"],"sourceMap":{"inlineSources":true}},"browser-minified":{"context":"browser","outputFormat":"global","optimize":true,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"},"browser-unminified":{"context":"browser","outputFormat":"global","optimize":false,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"}},"scripts":{"contributors":"git-authors-cli --print=false && prettier --write package.json && git add package.json package-lock.json && git commit -m \\"chore(contributors): update and sort contributors list\\"","check":"tsc --noEmit","watch":"parcel watch","build":"rm -rf dist && parcel build","prepublishOnly":"npm run build","test":"mocha -r ts-node/register -r jsdom-global/register test/**/*.ts","format":"prettier --write .","semantic-release":"semantic-release"},"devDependencies":{"@parcel/config-default":"^2.5.0","@parcel/packager-ts":"^2.5.0","@parcel/transformer-typescript-tsc":"^2.5.0","@parcel/transformer-typescript-types":"^2.5.0","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@types/chai":"^4.3.0","@types/mocha":"^9.1.0","@types/node":"^17.0.18","chai":"^4.3.6","git-authors-cli":"^1.0.40","jsdom":"^19.0.0","jsdom-global":"^3.0.2","mocha":"^9.2.0","mock-socket":"8.0.5","parcel":"^2.5.0","parcel-transformer-tsc-sourcemaps":"^1.0.2","prettier":"^2.6.2","semantic-release":"^19.0.2","standard":"^16.0.4","ts-node":"^10.5.0","typescript":"^4.5.5"},"dependencies":{"@swc/helpers":"^0.3.13","eventemitter3":"^4.0.7","peerjs-js-binarypack":"1.0.1","webrtc-adapter":"^7.7.1"}}');var Xc=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),vc=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],i;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(E){i={error:E}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(i)throw i.error}}return C},Zc=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Vc=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},Fw=function(B){Xc(A,B);function A(I,g,Q,C,i,E){E===void 0&&(E=5e3);var D=B.call(this)||this;D.pingInterval=E,D._disconnected=!0,D._messagesQueue=[];var o=I?"wss://":"ws://";return D._baseUrl=o+g+":"+Q+C+"peerjs?key="+i,D}return A.prototype.start=function(I,g){var Q=this;this._id=I;var C="".concat(this._baseUrl,"&id=").concat(I,"&token=").concat(g);this._socket||!this._disconnected||(this._socket=new WebSocket(C+"&version="+dD.version),this._disconnected=!1,this._socket.onmessage=function(i){var E;try{E=JSON.parse(i.data),v.default.log("Server message received:",E)}catch{v.default.log("Invalid server message",i.data);return}Q.emit(Tg.Message,E)},this._socket.onclose=function(i){Q._disconnected||(v.default.log("Socket closed.",i),Q._cleanup(),Q._disconnected=!0,Q.emit(Tg.Disconnected))},this._socket.onopen=function(){Q._disconnected||(Q._sendQueuedMessages(),v.default.log("Socket open"),Q._scheduleHeartbeat())})},A.prototype._scheduleHeartbeat=function(){var I=this;this._wsPingTimer=setTimeout(function(){I._sendHeartbeat()},this.pingInterval)},A.prototype._sendHeartbeat=function(){if(!this._wsOpen()){v.default.log("Cannot send heartbeat, because socket closed");return}var I=JSON.stringify({type:tI.Heartbeat});this._socket.send(I),this._scheduleHeartbeat()},A.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},A.prototype._sendQueuedMessages=function(){var I,g,Q=Zc([],vc(this._messagesQueue),!1);this._messagesQueue=[];try{for(var C=Vc(Q),i=C.next();!i.done;i=C.next()){var E=i.value;this.send(E)}}catch(D){I={error:D}}finally{try{i&&!i.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}},A.prototype.send=function(I){if(!this._disconnected){if(!this._id){this._messagesQueue.push(I);return}if(!I.type){this.emit(Tg.Error,"Invalid message");return}if(this._wsOpen()){var g=JSON.stringify(I);this._socket.send(g)}}},A.prototype.close=function(){this._disconnected||(this._cleanup(),this._disconnected=!0)},A.prototype._cleanup=function(){this._socket&&(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),this._socket=void 0),clearTimeout(this._wsPingTimer)},A}(XB.EventEmitter),lD={};Hg(lD,"MediaConnection",()=>nw,B=>nw=B);var fD={};Hg(fD,"Negotiator",()=>Rw,B=>Rw=B);var dE=function(){return dE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},dE.apply(this,arguments)},lE=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(i){i(C)})}return new(I||(I=Promise))(function(C,i){function E(s){try{o(g.next(s))}catch(t){i(t)}}function D(s){try{o(g.throw(s))}catch(t){i(t)}}function o(s){s.done?C(s.value):Q(s.value).then(E,D)}o((g=g.apply(B,A||[])).next())})},fE=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,i;return i={next:E(0),throw:E(1),return:E(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function E(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Rw=function(){function B(A){this.connection=A}return B.prototype.startConnection=function(A){var I=this._startPeerConnection();if(this.connection.peerConnection=I,this.connection.type===hg.Media&&A._stream&&this._addTracksToConnection(A._stream,I),A.originator){if(this.connection.type===hg.Data){var g=this.connection,Q={ordered:!!A.reliable},C=I.createDataChannel(g.label,Q);g.initialize(C)}this._makeOffer()}else this.handleSDP("OFFER",A.sdp)},B.prototype._startPeerConnection=function(){v.default.log("Creating RTCPeerConnection.");var A=new RTCPeerConnection(this.connection.provider.options.config);return this._setupListeners(A),A},B.prototype._setupListeners=function(A){var I=this,g=this.connection.peer,Q=this.connection.connectionId,C=this.connection.type,i=this.connection.provider;v.default.log("Listening for ICE candidates."),A.onicecandidate=function(E){!E.candidate||!E.candidate.candidate||(v.default.log("Received ICE candidates for ".concat(g,":"),E.candidate),i.socket.send({type:tI.Candidate,payload:{candidate:E.candidate,type:C,connectionId:Q},dst:g}))},A.oniceconnectionstatechange=function(){switch(A.iceConnectionState){case"failed":v.default.log("iceConnectionState is failed, closing connections to "+g),I.connection.emit("error",new Error("Negotiation of connection to "+g+" failed.")),I.connection.close();break;case"closed":v.default.log("iceConnectionState is closed, closing connections to "+g),I.connection.emit("error",new Error("Connection to "+g+" closed.")),I.connection.close();break;case"disconnected":v.default.log("iceConnectionState changed to disconnected on the connection with "+g);break;case"completed":A.onicecandidate=yA.noop;break}I.connection.emit("iceStateChanged",A.iceConnectionState)},v.default.log("Listening for data channel"),A.ondatachannel=function(E){v.default.log("Received data channel");var D=E.channel,o=i.getConnection(g,Q);o.initialize(D)},v.default.log("Listening for remote stream"),A.ontrack=function(E){v.default.log("Received remote stream");var D=E.streams[0],o=i.getConnection(g,Q);if(o.type===hg.Media){var s=o;I._addStreamToMediaConnection(D,s)}}},B.prototype.cleanup=function(){v.default.log("Cleaning up PeerConnection to "+this.connection.peer);var A=this.connection.peerConnection;if(A){this.connection.peerConnection=null,A.onicecandidate=A.oniceconnectionstatechange=A.ondatachannel=A.ontrack=function(){};var I=A.signalingState!=="closed",g=!1;if(this.connection.type===hg.Data){var Q=this.connection,C=Q.dataChannel;C&&(g=!!C.readyState&&C.readyState!=="closed")}(I||g)&&A.close()}},B.prototype._makeOffer=function(){return lE(this,void 0,Promise,function(){var A,I,g,Q,C,i,E;return fE(this,function(D){switch(D.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,D.label=1;case 1:return D.trys.push([1,7,,8]),[4,A.createOffer(this.connection.options.constraints)];case 2:g=D.sent(),v.default.log("Created offer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),D.label=3;case 3:return D.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return D.sent(),v.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),Q={sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,metadata:this.connection.metadata,browser:yA.browser},this.connection.type===hg.Data&&(C=this.connection,Q=dE(dE({},Q),{label:C.label,reliable:C.reliable,serialization:C.serialization})),I.socket.send({type:tI.Offer,payload:Q,dst:this.connection.peer}),[3,6];case 5:return i=D.sent(),i!="OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer"&&(I.emitError(TA.WebRTC,i),v.default.log("Failed to setLocalDescription, ",i)),[3,6];case 6:return[3,8];case 7:return E=D.sent(),I.emitError(TA.WebRTC,E),v.default.log("Failed to createOffer, ",E),[3,8];case 8:return[2]}})})},B.prototype._makeAnswer=function(){return lE(this,void 0,Promise,function(){var A,I,g,Q,C;return fE(this,function(i){switch(i.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,i.label=1;case 1:return i.trys.push([1,7,,8]),[4,A.createAnswer()];case 2:g=i.sent(),v.default.log("Created answer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),i.label=3;case 3:return i.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return i.sent(),v.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),I.socket.send({type:tI.Answer,payload:{sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,browser:yA.browser},dst:this.connection.peer}),[3,6];case 5:return Q=i.sent(),I.emitError(TA.WebRTC,Q),v.default.log("Failed to setLocalDescription, ",Q),[3,6];case 6:return[3,8];case 7:return C=i.sent(),I.emitError(TA.WebRTC,C),v.default.log("Failed to create answer, ",C),[3,8];case 8:return[2]}})})},B.prototype.handleSDP=function(A,I){return lE(this,void 0,Promise,function(){var g,Q,C,i;return fE(this,function(E){switch(E.label){case 0:I=new RTCSessionDescription(I),g=this.connection.peerConnection,Q=this.connection.provider,v.default.log("Setting remote description",I),C=this,E.label=1;case 1:return E.trys.push([1,5,,6]),[4,g.setRemoteDescription(I)];case 2:return E.sent(),v.default.log("Set remoteDescription:".concat(A," for:").concat(this.connection.peer)),A!=="OFFER"?[3,4]:[4,C._makeAnswer()];case 3:E.sent(),E.label=4;case 4:return[3,6];case 5:return i=E.sent(),Q.emitError(TA.WebRTC,i),v.default.log("Failed to setRemoteDescription, ",i),[3,6];case 6:return[2]}})})},B.prototype.handleCandidate=function(A){return lE(this,void 0,Promise,function(){var I,g,Q,C,i,E;return fE(this,function(D){switch(D.label){case 0:v.default.log("handleCandidate:",A),I=A.candidate,g=A.sdpMLineIndex,Q=A.sdpMid,C=this.connection.peerConnection,i=this.connection.provider,D.label=1;case 1:return D.trys.push([1,3,,4]),[4,C.addIceCandidate(new RTCIceCandidate({sdpMid:Q,sdpMLineIndex:g,candidate:I}))];case 2:return D.sent(),v.default.log("Added ICE candidate for:".concat(this.connection.peer)),[3,4];case 3:return E=D.sent(),i.emitError(TA.WebRTC,E),v.default.log("Failed to handleCandidate, ",E),[3,4];case 4:return[2]}})})},B.prototype._addTracksToConnection=function(A,I){if(v.default.log("add tracks from stream ".concat(A.id," to peer connection")),!I.addTrack)return v.default.error("Your browser does't support RTCPeerConnection#addTrack. Ignored.");A.getTracks().forEach(function(g){I.addTrack(g,A)})},B.prototype._addStreamToMediaConnection=function(A,I){v.default.log("add stream ".concat(A.id," to media connection ").concat(I.connectionId)),I.addStream(A)},B}(),pD={};Hg(pD,"BaseConnection",()=>kw,B=>kw=B);var Wc=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),kw=function(B){Wc(A,B);function A(I,g,Q){var C=B.call(this)||this;return C.peer=I,C.provider=g,C.options=Q,C._open=!1,C.metadata=Q.metadata,C}return Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),A}(XB.EventEmitter),jc=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),pE=function(){return pE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},pE.apply(this,arguments)},zc=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},nw=function(B){jc(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C._localStream=C.options._stream,C.connectionId=C.options.connectionId||A.ID_PREFIX+yA.randomToken(),C._negotiator=new fD.Negotiator(C),C._localStream&&C._negotiator.startConnection({_stream:C._localStream,originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return hg.Media},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"localStream",{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"remoteStream",{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),A.prototype.addStream=function(I){v.default.log("Receiving stream",I),this._remoteStream=I,B.prototype.emit.call(this,"stream",I)},A.prototype.handleMessage=function(I){var g=I.type,Q=I.payload;switch(I.type){case tI.Answer:this._negotiator.handleSDP(g,Q.sdp),this._open=!0;break;case tI.Candidate:this._negotiator.handleCandidate(Q.candidate);break;default:v.default.warn("Unrecognized message type:".concat(g," from peer:").concat(this.peer));break}},A.prototype.answer=function(I,g){var Q,C;if(g===void 0&&(g={}),this._localStream){v.default.warn("Local stream already exists on this MediaConnection. Are you answering a call twice?");return}this._localStream=I,g&&g.sdpTransform&&(this.options.sdpTransform=g.sdpTransform),this._negotiator.startConnection(pE(pE({},this.options._payload),{_stream:I}));var i=this.provider._getMessages(this.connectionId);try{for(var E=zc(i),D=E.next();!D.done;D=E.next()){var o=D.value;this.handleMessage(o)}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=E.return)&&C.call(E)}finally{if(Q)throw Q.error}}this._open=!0},A.prototype.close=function(){this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this._localStream=null,this._remoteStream=null,this.provider&&(this.provider._removeConnection(this),this.provider=null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.ID_PREFIX="mc_",A}(pD.BaseConnection),xD={};Hg(xD,"DataConnection",()=>Jw,B=>Jw=B);var Nw={};Hg(Nw,"EncodingQueue",()=>Mw,B=>Mw=B);var _c=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),Mw=function(B){_c(A,B);function A(){var I=B.call(this)||this;return I.fileReader=new FileReader,I._queue=[],I._processing=!1,I.fileReader.onload=function(g){I._processing=!1,g.target&&I.emit("done",g.target.result),I.doNextTask()},I.fileReader.onerror=function(g){v.default.error("EncodingQueue error:",g),I._processing=!1,I.destroy(),I.emit("error",g)},I}return Object.defineProperty(A.prototype,"queue",{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"size",{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"processing",{get:function(){return this._processing},enumerable:!1,configurable:!0}),A.prototype.enque=function(I){this.queue.push(I),!this.processing&&this.doNextTask()},A.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},A.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},A}(XB.EventEmitter),$c=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),Ay=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},Jw=function(B){$c(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C.stringify=JSON.stringify,C.parse=JSON.parse,C._buffer=[],C._bufferSize=0,C._buffering=!1,C._chunkedData={},C._encodingQueue=new Nw.EncodingQueue,C.connectionId=C.options.connectionId||A.ID_PREFIX+yA.randomToken(),C.label=C.options.label||C.connectionId,C.serialization=C.options.serialization||Pg.Binary,C.reliable=!!C.options.reliable,C._encodingQueue.on("done",function(i){C._bufferedSend(i)}),C._encodingQueue.on("error",function(){v.default.error("DC#".concat(C.connectionId,": Error occured in encoding from blob to arraybuffer, close DC")),C.close()}),C._negotiator=new fD.Negotiator(C),C._negotiator.startConnection(C.options._payload||{originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return hg.Data},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"dataChannel",{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"bufferSize",{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),A.prototype.initialize=function(I){this._dc=I,this._configureDataChannel()},A.prototype._configureDataChannel=function(){var I=this;(!yA.supports.binaryBlob||yA.supports.reliable)&&(this.dataChannel.binaryType="arraybuffer"),this.dataChannel.onopen=function(){v.default.log("DC#".concat(I.connectionId," dc connection success")),I._open=!0,I.emit("open")},this.dataChannel.onmessage=function(g){v.default.log("DC#".concat(I.connectionId," dc onmessage:"),g.data),I._handleDataMessage(g)},this.dataChannel.onclose=function(){v.default.log("DC#".concat(I.connectionId," dc closed for:"),I.peer),I.close()}},A.prototype._handleDataMessage=function(I){var g=this,Q=I.data,C=Q.constructor,i=this.serialization===Pg.Binary||this.serialization===Pg.BinaryUTF8,E=Q;if(i){if(C===Blob){yA.blobToArrayBuffer(Q,function(o){var s=yA.unpack(o);g.emit("data",s)});return}else if(C===ArrayBuffer)E=yA.unpack(Q);else if(C===String){var D=yA.binaryStringToArrayBuffer(Q);E=yA.unpack(D)}}else this.serialization===Pg.JSON&&(E=this.parse(Q));if(E.__peerData){this._handleChunk(E);return}B.prototype.emit.call(this,"data",E)},A.prototype._handleChunk=function(I){var g=I.__peerData,Q=this._chunkedData[g]||{data:[],count:0,total:I.total};if(Q.data[I.n]=I.data,Q.count++,this._chunkedData[g]=Q,Q.total===Q.count){delete this._chunkedData[g];var C=new Blob(Q.data);this._handleDataMessage({data:C})}},A.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this.provider&&(this.provider._removeConnection(this),this.provider=null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),this._encodingQueue=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.prototype.send=function(I,g){if(!this.open){B.prototype.emit.call(this,"error",new Error("Connection is not open. You should listen for the `open` event before sending messages."));return}if(this.serialization===Pg.JSON)this._bufferedSend(this.stringify(I));else if(this.serialization===Pg.Binary||this.serialization===Pg.BinaryUTF8){var Q=yA.pack(I);if(!g&&Q.size>yA.chunkedMTU){this._sendChunks(Q);return}yA.supports.binaryBlob?this._bufferedSend(Q):this._encodingQueue.enque(Q)}else this._bufferedSend(I)},A.prototype._bufferedSend=function(I){(this._buffering||!this._trySend(I))&&(this._buffer.push(I),this._bufferSize=this._buffer.length)},A.prototype._trySend=function(I){var g=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>A.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){g._buffering=!1,g._tryBuffer()},50),!1;try{this.dataChannel.send(I)}catch(Q){return v.default.error("DC#:".concat(this.connectionId," Error when sending:"),Q),this._buffering=!0,this.close(),!1}return!0},A.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var I=this._buffer[0];this._trySend(I)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},A.prototype._sendChunks=function(I){var g,Q,C=yA.chunk(I);v.default.log("DC#".concat(this.connectionId," Try to send ").concat(C.length," chunks..."));try{for(var i=Ay(C),E=i.next();!E.done;E=i.next()){var D=E.value;this.send(D,!0)}}catch(o){g={error:o}}finally{try{E&&!E.done&&(Q=i.return)&&Q.call(i)}finally{if(g)throw g.error}}},A.prototype.handleMessage=function(I){var g=I.payload;switch(I.type){case tI.Answer:this._negotiator.handleSDP(I.type,g.sdp);break;case tI.Candidate:this._negotiator.handleCandidate(g.candidate);break;default:v.default.warn("Unrecognized message type:",I.type,"from peer:",this.peer);break}},A.ID_PREFIX="dc_",A.MAX_BUFFERED_AMOUNT=8388608,A}(pD.BaseConnection),Uw={};Hg(Uw,"API",()=>Yw,B=>Yw=B);var Lw=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(i){i(C)})}return new(I||(I=Promise))(function(C,i){function E(s){try{o(g.next(s))}catch(t){i(t)}}function D(s){try{o(g.throw(s))}catch(t){i(t)}}function o(s){s.done?C(s.value):Q(s.value).then(E,D)}o((g=g.apply(B,A||[])).next())})},Hw=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,i;return i={next:E(0),throw:E(1),return:E(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function E(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Yw=function(){function B(A){this._options=A}return B.prototype._buildRequest=function(A){var I=this._options.secure?"https":"http",g=this._options,Q=g.host,C=g.port,i=g.path,E=g.key,D=new URL("".concat(I,"://").concat(Q,":").concat(C).concat(i).concat(E,"/").concat(A));return D.searchParams.set("ts","".concat(Date.now()).concat(Math.random())),D.searchParams.set("version",dD.version),fetch(D.href,{referrerPolicy:this._options.referrerPolicy})},B.prototype.retrieveId=function(){return Lw(this,void 0,Promise,function(){var A,I,g;return Hw(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("id")];case 1:if(A=Q.sent(),A.status!==200)throw new Error("Error. Status:".concat(A.status));return[2,A.text()];case 2:throw I=Q.sent(),v.default.error("Error retrieving ID",I),g="",this._options.path==="/"&&this._options.host!==yA.CLOUD_HOST&&(g=" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),new Error("Could not get an ID from the server."+g);case 3:return[2]}})})},B.prototype.listAllPeers=function(){return Lw(this,void 0,Promise,function(){var A,I,g;return Hw(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("peers")];case 1:if(A=Q.sent(),A.status!==200)throw A.status===401?(I="",this._options.host===yA.CLOUD_HOST?I="It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key.":I="You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature.",new Error("It doesn't look like you have permission to list peers IDs. "+I)):new Error("Error. Status:".concat(A.status));return[2,A.json()];case 2:throw g=Q.sent(),v.default.error("Error retrieving list peers",g),new Error("Could not get list peers from the server."+g);case 3:return[2]}})})},B}(),Iy=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),ZB=function(){return ZB=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},ZB.apply(this,arguments)},VB=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},gy=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],i;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(E){i={error:E}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(i)throw i.error}}return C},qD=function(B){Iy(A,B);function A(I,g){var Q=B.call(this)||this;Q._id=null,Q._lastServerId=null,Q._destroyed=!1,Q._disconnected=!1,Q._open=!1,Q._connections=new Map,Q._lostMessages=new Map;var C;return I&&I.constructor==Object?g=I:I&&(C=I.toString()),g=ZB({debug:0,host:yA.CLOUD_HOST,port:yA.CLOUD_PORT,path:"/",key:A.DEFAULT_KEY,token:yA.randomToken(),config:yA.defaultConfig,referrerPolicy:"strict-origin-when-cross-origin"},g),Q._options=g,Q._options.host==="/"&&(Q._options.host=window.location.hostname),Q._options.path&&(Q._options.path[0]!=="/"&&(Q._options.path="/"+Q._options.path),Q._options.path[Q._options.path.length-1]!=="/"&&(Q._options.path+="/")),Q._options.secure===void 0&&Q._options.host!==yA.CLOUD_HOST?Q._options.secure=yA.isSecure():Q._options.host==yA.CLOUD_HOST&&(Q._options.secure=!0),Q._options.logFunction&&v.default.setLogFunction(Q._options.logFunction),v.default.logLevel=Q._options.debug||0,Q._api=new Uw.API(g),Q._socket=Q._createServerConnection(),!yA.supports.audioVideo&&!yA.supports.data?(Q._delayedAbort(TA.BrowserIncompatible,"The current browser does not support WebRTC"),Q):C&&!yA.validateId(C)?(Q._delayedAbort(TA.InvalidID,'ID "'.concat(C,'" is invalid')),Q):(C?Q._initialize(C):Q._api.retrieveId().then(function(i){return Q._initialize(i)}).catch(function(i){return Q._abort(TA.ServerError,i)}),Q)}return Object.defineProperty(A.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"socket",{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"connections",{get:function(){var I,g,Q=Object.create(null);try{for(var C=VB(this._connections),i=C.next();!i.done;i=C.next()){var E=gy(i.value,2),D=E[0],o=E[1];Q[D]=o}}catch(s){I={error:s}}finally{try{i&&!i.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}return Q},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"disconnected",{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),A.prototype._createServerConnection=function(){var I=this,g=new rw.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return g.on(Tg.Message,function(Q){I._handleMessage(Q)}),g.on(Tg.Error,function(Q){I._abort(TA.SocketError,Q)}),g.on(Tg.Disconnected,function(){I.disconnected||(I.emitError(TA.Network,"Lost connection to server."),I.disconnect())}),g.on(Tg.Close,function(){I.disconnected||I._abort(TA.SocketClosed,"Underlying socket is already closed.")}),g},A.prototype._initialize=function(I){this._id=I,this.socket.start(I,this._options.token)},A.prototype._handleMessage=function(I){var g,Q,C=I.type,i=I.payload,E=I.src;switch(C){case tI.Open:this._lastServerId=this.id,this._open=!0,this.emit("open",this.id);break;case tI.Error:this._abort(TA.ServerError,i.msg);break;case tI.IdTaken:this._abort(TA.UnavailableID,'ID "'.concat(this.id,'" is taken'));break;case tI.InvalidKey:this._abort(TA.InvalidKey,'API KEY "'.concat(this._options.key,'" is invalid'));break;case tI.Leave:v.default.log("Received leave message from ".concat(E)),this._cleanupPeer(E),this._connections.delete(E);break;case tI.Expire:this.emitError(TA.PeerUnavailable,"Could not connect to peer ".concat(E));break;case tI.Offer:var G=i.connectionId,r=this.getConnection(E,G);if(r&&(r.close(),v.default.warn("Offer received for existing Connection ID:".concat(G))),i.type===hg.Media){var D=new lD.MediaConnection(E,this,{connectionId:G,_payload:i,metadata:i.metadata});r=D,this._addConnection(E,r),this.emit("call",D)}else if(i.type===hg.Data){var o=new xD.DataConnection(E,this,{connectionId:G,_payload:i,metadata:i.metadata,label:i.label,serialization:i.serialization,reliable:i.reliable});r=o,this._addConnection(E,r),this.emit("connection",o)}else{v.default.warn("Received malformed connection type:".concat(i.type));return}var s=this._getMessages(G);try{for(var t=VB(s),w=t.next();!w.done;w=t.next()){var a=w.value;r.handleMessage(a)}}catch(c){g={error:c}}finally{try{w&&!w.done&&(Q=t.return)&&Q.call(t)}finally{if(g)throw g.error}}break;default:if(!i){v.default.warn("You received a malformed message from ".concat(E," of type ").concat(C));return}var G=i.connectionId,r=this.getConnection(E,G);r&&r.peerConnection?r.handleMessage(I):G?this._storeMessage(G,I):v.default.warn("You received an unrecognized message:",I);break}},A.prototype._storeMessage=function(I,g){this._lostMessages.has(I)||this._lostMessages.set(I,[]),this._lostMessages.get(I).push(g)},A.prototype._getMessages=function(I){var g=this._lostMessages.get(I);return g?(this._lostMessages.delete(I),g):[]},A.prototype.connect=function(I,g){if(g===void 0&&(g={}),this.disconnected){v.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."),this.emitError(TA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}var Q=new xD.DataConnection(I,this,g);return this._addConnection(I,Q),Q},A.prototype.call=function(I,g,Q){if(Q===void 0&&(Q={}),this.disconnected){v.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."),this.emitError(TA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}if(!g){v.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.");return}var C=new lD.MediaConnection(I,this,ZB(ZB({},Q),{_stream:g}));return this._addConnection(I,C),C},A.prototype._addConnection=function(I,g){v.default.log("add connection ".concat(g.type,":").concat(g.connectionId," to peerId:").concat(I)),this._connections.has(I)||this._connections.set(I,[]),this._connections.get(I).push(g)},A.prototype._removeConnection=function(I){var g=this._connections.get(I.peer);if(g){var Q=g.indexOf(I);Q!==-1&&g.splice(Q,1)}this._lostMessages.delete(I.connectionId)},A.prototype.getConnection=function(I,g){var Q,C,i=this._connections.get(I);if(!i)return null;try{for(var E=VB(i),D=E.next();!D.done;D=E.next()){var o=D.value;if(o.connectionId===g)return o}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=E.return)&&C.call(E)}finally{if(Q)throw Q.error}}return null},A.prototype._delayedAbort=function(I,g){var Q=this;setTimeout(function(){Q._abort(I,g)},0)},A.prototype._abort=function(I,g){v.default.error("Aborting!"),this.emitError(I,g),this._lastServerId?this.disconnect():this.destroy()},A.prototype.emitError=function(I,g){v.default.error("Error:",g);var Q;typeof g=="string"?Q=new Error(g):Q=g,Q.type=I,this.emit("error",Q)},A.prototype.destroy=function(){this.destroyed||(v.default.log("Destroy peer with ID:".concat(this.id)),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit("close"))},A.prototype._cleanup=function(){var I,g;try{for(var Q=VB(this._connections.keys()),C=Q.next();!C.done;C=Q.next()){var i=C.value;this._cleanupPeer(i),this._connections.delete(i)}}catch(E){I={error:E}}finally{try{C&&!C.done&&(g=Q.return)&&g.call(Q)}finally{if(I)throw I.error}}this.socket.removeAllListeners()},A.prototype._cleanupPeer=function(I){var g,Q,C=this._connections.get(I);if(C)try{for(var i=VB(C),E=i.next();!E.done;E=i.next()){var D=E.value;D.close()}}catch(o){g={error:o}}finally{try{E&&!E.done&&(Q=i.return)&&Q.call(i)}finally{if(g)throw g.error}}},A.prototype.disconnect=function(){if(!this.disconnected){var I=this.id;v.default.log("Disconnect peer with ID:".concat(I)),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=I,this._id=null,this.emit("disconnected",I)}},A.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)v.default.log("Attempting reconnection to server with ID ".concat(this._lastServerId)),this._disconnected=!1,this._initialize(this._lastServerId);else{if(this.destroyed)throw new Error("This peer cannot reconnect to the server. It has already been destroyed.");if(!this.disconnected&&!this.open)v.default.error("In a hurry? We're still trying to make the initial connection!");else throw new Error("Peer ".concat(this.id," cannot reconnect because it is not disconnected from the server!"))}},A.prototype.listAllPeers=function(I){var g=this;I===void 0&&(I=function(Q){}),this._api.listAllPeers().then(function(Q){return I(Q)}).catch(function(Q){return g._abort(TA.ServerError,Q)})},A.DEFAULT_KEY="peerjs",A}(XB.EventEmitter),Qy=yw.Peer;const By=Object.freeze(Object.defineProperty({__proto__:null,get Peer(){return qD},default:Qy,util:yA},Symbol.toStringTag,{value:"Module"}));class uD extends Xi{constructor(A,I){super(),this.ordering=A,this.setAttribute("position",new iI(Cy,3)),this.setIndex(new iI(Ey,1)),this._maxInstanceCount=A.length,this.instanceCount=I,this.attribute=new AQ(A,1,!1,1),this.attribute.setUsage(hI),this.setAttribute("splatIndex",this.attribute)}update(A,I){this.ordering=A,this.attribute.array=A,this.instanceCount=I,this.attribute.addUpdateRange(0,I),this.attribute.needsUpdate=!0}}const Cy=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),Ey=new Uint16Array([0,1,2,0,2,3]),Kw=`(function() {
|
|
1116
|
+
isUnifiedPlanSupported:`).concat(this.isUnifiedPlanSupported())},B}()),nw={iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:["turn:eu-0.turn.peerjs.com:3478","turn:us-0.turn.peerjs.com:3478"],username:"peerjs",credential:"peerjsp"}],sdpSemantics:"unified-plan"},vc=function(){function B(){this.CLOUD_HOST="0.peerjs.com",this.CLOUD_PORT=443,this.chunkedBrowsers={Chrome:1,chrome:1},this.chunkedMTU=16300,this.defaultConfig=nw,this.browser=XB.getBrowser(),this.browserVersion=XB.getVersion(),this.supports=function(){var A={browser:XB.isBrowserSupported(),webRTC:XB.isWebRTCSupported(),audioVideo:!1,data:!1,binaryBlob:!1,reliable:!1};if(!A.webRTC)return A;var I;try{I=new RTCPeerConnection(nw),A.audioVideo=!0;var g=void 0;try{g=I.createDataChannel("_PEERJSTEST",{ordered:!0}),A.data=!0,A.reliable=!!g.ordered;try{g.binaryType="blob",A.binaryBlob=!XB.isIOS}catch{}}catch{}finally{g&&g.close()}}catch{}finally{I&&I.close()}return A}(),this.pack=Yt.pack,this.unpack=Yt.unpack,this._dataCount=1}return B.prototype.noop=function(){},B.prototype.validateId=function(A){return!A||/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(A)},B.prototype.chunk=function(A){for(var I=[],g=A.size,Q=Math.ceil(g/yA.chunkedMTU),C=0,i=0;i<g;){var E=Math.min(g,i+yA.chunkedMTU),D=A.slice(i,E),o={__peerData:this._dataCount,n:C,data:D,total:Q};I.push(o),i=E,C++}return this._dataCount++,I},B.prototype.blobToArrayBuffer=function(A,I){var g=new FileReader;return g.onload=function(Q){Q.target&&I(Q.target.result)},g.readAsArrayBuffer(A),g},B.prototype.binaryStringToArrayBuffer=function(A){for(var I=new Uint8Array(A.length),g=0;g<A.length;g++)I[g]=A.charCodeAt(g)&255;return I.buffer},B.prototype.randomToken=function(){return Math.random().toString(36).slice(2)},B.prototype.isSecure=function(){return location.protocol==="https:"},B}(),yA=new vc,Mw={};Hg(Mw,"Peer",()=>bD,B=>bD=B);var vB={},Zc=Object.prototype.hasOwnProperty,HI="~";function ZB(){}Object.create&&(ZB.prototype=Object.create(null),new ZB().__proto__||(HI=!1));function Vc(B,A,I){this.fn=B,this.context=A,this.once=I||!1}function Nw(B,A,I,g,Q){if(typeof I!="function")throw new TypeError("The listener must be a function");var C=new Vc(I,g||B,Q),i=HI?HI+A:A;return B._events[i]?B._events[i].fn?B._events[i]=[B._events[i],C]:B._events[i].push(C):(B._events[i]=C,B._eventsCount++),B}function KE(B,A){--B._eventsCount===0?B._events=new ZB:delete B._events[A]}function GI(){this._events=new ZB,this._eventsCount=0}GI.prototype.eventNames=function(){var B=[],A,I;if(this._eventsCount===0)return B;for(I in A=this._events)Zc.call(A,I)&&B.push(HI?I.slice(1):I);return Object.getOwnPropertySymbols?B.concat(Object.getOwnPropertySymbols(A)):B},GI.prototype.listeners=function(B){var A=HI?HI+B:B,I=this._events[A];if(!I)return[];if(I.fn)return[I.fn];for(var g=0,Q=I.length,C=new Array(Q);g<Q;g++)C[g]=I[g].fn;return C},GI.prototype.listenerCount=function(B){var A=HI?HI+B:B,I=this._events[A];return I?I.fn?1:I.length:0},GI.prototype.emit=function(B,A,I,g,Q,C){var i=HI?HI+B:B;if(!this._events[i])return!1;var E=this._events[i],D=arguments.length,o,s;if(E.fn){switch(E.once&&this.removeListener(B,E.fn,void 0,!0),D){case 1:return E.fn.call(E.context),!0;case 2:return E.fn.call(E.context,A),!0;case 3:return E.fn.call(E.context,A,I),!0;case 4:return E.fn.call(E.context,A,I,g),!0;case 5:return E.fn.call(E.context,A,I,g,Q),!0;case 6:return E.fn.call(E.context,A,I,g,Q,C),!0}for(s=1,o=new Array(D-1);s<D;s++)o[s-1]=arguments[s];E.fn.apply(E.context,o)}else{var t=E.length,w;for(s=0;s<t;s++)switch(E[s].once&&this.removeListener(B,E[s].fn,void 0,!0),D){case 1:E[s].fn.call(E[s].context);break;case 2:E[s].fn.call(E[s].context,A);break;case 3:E[s].fn.call(E[s].context,A,I);break;case 4:E[s].fn.call(E[s].context,A,I,g);break;default:if(!o)for(w=1,o=new Array(D-1);w<D;w++)o[w-1]=arguments[w];E[s].fn.apply(E[s].context,o)}}return!0},GI.prototype.on=function(B,A,I){return Nw(this,B,A,I,!1)},GI.prototype.once=function(B,A,I){return Nw(this,B,A,I,!0)},GI.prototype.removeListener=function(B,A,I,g){var Q=HI?HI+B:B;if(!this._events[Q])return this;if(!A)return KE(this,Q),this;var C=this._events[Q];if(C.fn)C.fn===A&&(!g||C.once)&&(!I||C.context===I)&&KE(this,Q);else{for(var i=0,E=[],D=C.length;i<D;i++)(C[i].fn!==A||g&&!C[i].once||I&&C[i].context!==I)&&E.push(C[i]);E.length?this._events[Q]=E.length===1?E[0]:E:KE(this,Q)}return this},GI.prototype.removeAllListeners=function(B){var A;return B?(A=HI?HI+B:B,this._events[A]&&KE(this,A)):(this._events=new ZB,this._eventsCount=0),this},GI.prototype.off=GI.prototype.removeListener,GI.prototype.addListener=GI.prototype.on,GI.prefixed=HI,GI.EventEmitter=GI,vB=GI;var v={};Hg(v,"LogLevel",()=>qI,B=>qI=B),Hg(v,"default",()=>Jw,B=>Jw=B);var GQ=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],i;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(E){i={error:E}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(i)throw i.error}}return C},SQ=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Wc="PeerJS: ",qI;(function(B){B[B.Disabled=0]="Disabled",B[B.Errors=1]="Errors",B[B.Warnings=2]="Warnings",B[B.All=3]="All"})(qI||(qI={}));var jc=function(){function B(){this._logLevel=qI.Disabled}return Object.defineProperty(B.prototype,"logLevel",{get:function(){return this._logLevel},set:function(A){this._logLevel=A},enumerable:!1,configurable:!0}),B.prototype.log=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=qI.All&&this._print.apply(this,SQ([qI.All],GQ(A),!1))},B.prototype.warn=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=qI.Warnings&&this._print.apply(this,SQ([qI.Warnings],GQ(A),!1))},B.prototype.error=function(){for(var A=[],I=0;I<arguments.length;I++)A[I]=arguments[I];this._logLevel>=qI.Errors&&this._print.apply(this,SQ([qI.Errors],GQ(A),!1))},B.prototype.setLogFunction=function(A){this._print=A},B.prototype._print=function(A){for(var I=[],g=1;g<arguments.length;g++)I[g-1]=arguments[g];var Q=SQ([Wc],GQ(I),!1);for(var C in Q)Q[C]instanceof Error&&(Q[C]="("+Q[C].name+") "+Q[C].message);A>=qI.All?console.log.apply(console,SQ([],GQ(Q),!1)):A>=qI.Warnings?console.warn.apply(console,SQ(["WARNING"],GQ(Q),!1)):A>=qI.Errors&&console.error.apply(console,SQ(["ERROR"],GQ(Q),!1))},B}(),Jw=new jc,Uw={};Hg(Uw,"Socket",()=>Lw,B=>Lw=B);var hg;(function(B){B.Data="data",B.Media="media"})(hg||(hg={}));var TA;(function(B){B.BrowserIncompatible="browser-incompatible",B.Disconnected="disconnected",B.InvalidID="invalid-id",B.InvalidKey="invalid-key",B.Network="network",B.PeerUnavailable="peer-unavailable",B.SslUnavailable="ssl-unavailable",B.ServerError="server-error",B.SocketError="socket-error",B.SocketClosed="socket-closed",B.UnavailableID="unavailable-id",B.WebRTC="webrtc"})(TA||(TA={}));var Pg;(function(B){B.Binary="binary",B.BinaryUTF8="binary-utf8",B.JSON="json"})(Pg||(Pg={}));var Tg;(function(B){B.Message="message",B.Disconnected="disconnected",B.Error="error",B.Close="close"})(Tg||(Tg={}));var tI;(function(B){B.Heartbeat="HEARTBEAT",B.Candidate="CANDIDATE",B.Offer="OFFER",B.Answer="ANSWER",B.Open="OPEN",B.Error="ERROR",B.IdTaken="ID-TAKEN",B.InvalidKey="INVALID-KEY",B.Leave="LEAVE",B.Expire="EXPIRE"})(tI||(tI={}));var pD={};pD=JSON.parse('{"name":"peerjs","version":"1.4.7","keywords":["peerjs","webrtc","p2p","rtc"],"description":"PeerJS client","homepage":"https://peerjs.com","bugs":{"url":"https://github.com/peers/peerjs/issues"},"repository":{"type":"git","url":"https://github.com/peers/peerjs"},"license":"MIT","contributors":["Michelle Bu <michelle@michellebu.com>","afrokick <devbyru@gmail.com>","ericz <really.ez@gmail.com>","Jairo <kidandcat@gmail.com>","Jonas Gloning <34194370+jonasgloning@users.noreply.github.com>","Jairo Caro-Accino Viciana <jairo@galax.be>","Carlos Caballero <carlos.caballero.gonzalez@gmail.com>","hc <hheennrryy@gmail.com>","Muhammad Asif <capripio@gmail.com>","PrashoonB <prashoonbhattacharjee@gmail.com>","Harsh Bardhan Mishra <47351025+HarshCasper@users.noreply.github.com>","akotynski <aleksanderkotbury@gmail.com>","lmb <i@lmb.io>","Jairooo <jairocaro@msn.com>","Moritz St\xFCckler <moritz.stueckler@gmail.com>","Simon <crydotsnakegithub@gmail.com>","Denis Lukov <denismassters@gmail.com>","Philipp Hancke <fippo@andyet.net>","Hans Oksendahl <hansoksendahl@gmail.com>","Jess <jessachandler@gmail.com>","khankuan <khankuan@gmail.com>","DUODVK <kurmanov.work@gmail.com>","XiZhao <kwang1imsa@gmail.com>","Matthias Lohr <matthias@lohr.me>","=frank tree <=frnktrb@googlemail.com>","Andre Eckardt <aeckardt@outlook.com>","Chris Cowan <agentme49@gmail.com>","Alex Chuev <alex@chuev.com>","alxnull <alxnull@e.mail.de>","Yemel Jardi <angel.jardi@gmail.com>","Ben Parnell <benjaminparnell.94@gmail.com>","Benny Lichtner <bennlich@gmail.com>","fresheneesz <bitetrudpublic@gmail.com>","bob.barstead@exaptive.com <bob.barstead@exaptive.com>","chandika <chandika@gmail.com>","emersion <contact@emersion.fr>","Christopher Van <cvan@users.noreply.github.com>","eddieherm <edhermoso@gmail.com>","Eduardo Pinho <enet4mikeenet@gmail.com>","Evandro Zanatta <ezanatta@tray.net.br>","Gardner Bickford <gardner@users.noreply.github.com>","Gian Luca <gianluca.cecchi@cynny.com>","PatrickJS <github@gdi2290.com>","jonnyf <github@jonathanfoss.co.uk>","Hizkia Felix <hizkifw@gmail.com>","Hristo Oskov <hristo.oskov@gmail.com>","Isaac Madwed <i.madwed@gmail.com>","Ilya Konanykhin <ilya.konanykhin@gmail.com>","jasonbarry <jasbarry@me.com>","Jonathan Burke <jonathan.burke.1311@googlemail.com>","Josh Hamit <josh.hamit@gmail.com>","Jordan Austin <jrax86@gmail.com>","Joel Wetzell <jwetzell@yahoo.com>","xizhao <kevin.wang@cloudera.com>","Alberto Torres <kungfoobar@gmail.com>","Jonathan Mayol <mayoljonathan@gmail.com>","Jefferson Felix <me@jsfelix.dev>","Rolf Erik Lekang <me@rolflekang.com>","Kevin Mai-Husan Chia <mhchia@users.noreply.github.com>","Pepijn de Vos <pepijndevos@gmail.com>","JooYoung <qkdlql@naver.com>","Tobias Speicher <rootcommander@gmail.com>","Steve Blaurock <sblaurock@gmail.com>","Kyrylo Shegeda <shegeda@ualberta.ca>","Diwank Singh Tomer <singh@diwank.name>","So\u0308ren Balko <Soeren.Balko@gmail.com>","Arpit Solanki <solankiarpit1997@gmail.com>","Yuki Ito <yuki@gnnk.net>","Artur Zayats <zag2art@gmail.com>"],"funding":{"type":"opencollective","url":"https://opencollective.com/peer"},"collective":{"type":"opencollective","url":"https://opencollective.com/peer"},"files":["dist/*"],"sideEffects":["lib/global.ts","lib/supports.ts"],"main":"dist/bundler.cjs","module":"dist/bundler.mjs","browser-minified":"dist/peerjs.min.js","browser-unminified":"dist/peerjs.js","types":"dist/types.d.ts","engines":{"node":">= 10"},"targets":{"types":{"source":"lib/exports.ts"},"main":{"source":"lib/exports.ts","sourceMap":{"inlineSources":true}},"module":{"source":"lib/exports.ts","includeNodeModules":["eventemitter3"],"sourceMap":{"inlineSources":true}},"browser-minified":{"context":"browser","outputFormat":"global","optimize":true,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"},"browser-unminified":{"context":"browser","outputFormat":"global","optimize":false,"engines":{"browsers":"cover 99%, not dead"},"source":"lib/global.ts"}},"scripts":{"contributors":"git-authors-cli --print=false && prettier --write package.json && git add package.json package-lock.json && git commit -m \\"chore(contributors): update and sort contributors list\\"","check":"tsc --noEmit","watch":"parcel watch","build":"rm -rf dist && parcel build","prepublishOnly":"npm run build","test":"mocha -r ts-node/register -r jsdom-global/register test/**/*.ts","format":"prettier --write .","semantic-release":"semantic-release"},"devDependencies":{"@parcel/config-default":"^2.5.0","@parcel/packager-ts":"^2.5.0","@parcel/transformer-typescript-tsc":"^2.5.0","@parcel/transformer-typescript-types":"^2.5.0","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@types/chai":"^4.3.0","@types/mocha":"^9.1.0","@types/node":"^17.0.18","chai":"^4.3.6","git-authors-cli":"^1.0.40","jsdom":"^19.0.0","jsdom-global":"^3.0.2","mocha":"^9.2.0","mock-socket":"8.0.5","parcel":"^2.5.0","parcel-transformer-tsc-sourcemaps":"^1.0.2","prettier":"^2.6.2","semantic-release":"^19.0.2","standard":"^16.0.4","ts-node":"^10.5.0","typescript":"^4.5.5"},"dependencies":{"@swc/helpers":"^0.3.13","eventemitter3":"^4.0.7","peerjs-js-binarypack":"1.0.1","webrtc-adapter":"^7.7.1"}}');var zc=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),_c=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],i;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(E){i={error:E}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(i)throw i.error}}return C},$c=function(B,A,I){if(I||arguments.length===2)for(var g=0,Q=A.length,C;g<Q;g++)(C||!(g in A))&&(C||(C=Array.prototype.slice.call(A,0,g)),C[g]=A[g]);return B.concat(C||Array.prototype.slice.call(A))},Ay=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},Lw=function(B){zc(A,B);function A(I,g,Q,C,i,E){E===void 0&&(E=5e3);var D=B.call(this)||this;D.pingInterval=E,D._disconnected=!0,D._messagesQueue=[];var o=I?"wss://":"ws://";return D._baseUrl=o+g+":"+Q+C+"peerjs?key="+i,D}return A.prototype.start=function(I,g){var Q=this;this._id=I;var C="".concat(this._baseUrl,"&id=").concat(I,"&token=").concat(g);this._socket||!this._disconnected||(this._socket=new WebSocket(C+"&version="+pD.version),this._disconnected=!1,this._socket.onmessage=function(i){var E;try{E=JSON.parse(i.data),v.default.log("Server message received:",E)}catch{v.default.log("Invalid server message",i.data);return}Q.emit(Tg.Message,E)},this._socket.onclose=function(i){Q._disconnected||(v.default.log("Socket closed.",i),Q._cleanup(),Q._disconnected=!0,Q.emit(Tg.Disconnected))},this._socket.onopen=function(){Q._disconnected||(Q._sendQueuedMessages(),v.default.log("Socket open"),Q._scheduleHeartbeat())})},A.prototype._scheduleHeartbeat=function(){var I=this;this._wsPingTimer=setTimeout(function(){I._sendHeartbeat()},this.pingInterval)},A.prototype._sendHeartbeat=function(){if(!this._wsOpen()){v.default.log("Cannot send heartbeat, because socket closed");return}var I=JSON.stringify({type:tI.Heartbeat});this._socket.send(I),this._scheduleHeartbeat()},A.prototype._wsOpen=function(){return!!this._socket&&this._socket.readyState===1},A.prototype._sendQueuedMessages=function(){var I,g,Q=$c([],_c(this._messagesQueue),!1);this._messagesQueue=[];try{for(var C=Ay(Q),i=C.next();!i.done;i=C.next()){var E=i.value;this.send(E)}}catch(D){I={error:D}}finally{try{i&&!i.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}},A.prototype.send=function(I){if(!this._disconnected){if(!this._id){this._messagesQueue.push(I);return}if(!I.type){this.emit(Tg.Error,"Invalid message");return}if(this._wsOpen()){var g=JSON.stringify(I);this._socket.send(g)}}},A.prototype.close=function(){this._disconnected||(this._cleanup(),this._disconnected=!0)},A.prototype._cleanup=function(){this._socket&&(this._socket.onopen=this._socket.onmessage=this._socket.onclose=null,this._socket.close(),this._socket=void 0),clearTimeout(this._wsPingTimer)},A}(vB.EventEmitter),xD={};Hg(xD,"MediaConnection",()=>dw,B=>dw=B);var qD={};Hg(qD,"Negotiator",()=>Hw,B=>Hw=B);var lE=function(){return lE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},lE.apply(this,arguments)},fE=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(i){i(C)})}return new(I||(I=Promise))(function(C,i){function E(s){try{o(g.next(s))}catch(t){i(t)}}function D(s){try{o(g.throw(s))}catch(t){i(t)}}function o(s){s.done?C(s.value):Q(s.value).then(E,D)}o((g=g.apply(B,A||[])).next())})},pE=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,i;return i={next:E(0),throw:E(1),return:E(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function E(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Hw=function(){function B(A){this.connection=A}return B.prototype.startConnection=function(A){var I=this._startPeerConnection();if(this.connection.peerConnection=I,this.connection.type===hg.Media&&A._stream&&this._addTracksToConnection(A._stream,I),A.originator){if(this.connection.type===hg.Data){var g=this.connection,Q={ordered:!!A.reliable},C=I.createDataChannel(g.label,Q);g.initialize(C)}this._makeOffer()}else this.handleSDP("OFFER",A.sdp)},B.prototype._startPeerConnection=function(){v.default.log("Creating RTCPeerConnection.");var A=new RTCPeerConnection(this.connection.provider.options.config);return this._setupListeners(A),A},B.prototype._setupListeners=function(A){var I=this,g=this.connection.peer,Q=this.connection.connectionId,C=this.connection.type,i=this.connection.provider;v.default.log("Listening for ICE candidates."),A.onicecandidate=function(E){!E.candidate||!E.candidate.candidate||(v.default.log("Received ICE candidates for ".concat(g,":"),E.candidate),i.socket.send({type:tI.Candidate,payload:{candidate:E.candidate,type:C,connectionId:Q},dst:g}))},A.oniceconnectionstatechange=function(){switch(A.iceConnectionState){case"failed":v.default.log("iceConnectionState is failed, closing connections to "+g),I.connection.emit("error",new Error("Negotiation of connection to "+g+" failed.")),I.connection.close();break;case"closed":v.default.log("iceConnectionState is closed, closing connections to "+g),I.connection.emit("error",new Error("Connection to "+g+" closed.")),I.connection.close();break;case"disconnected":v.default.log("iceConnectionState changed to disconnected on the connection with "+g);break;case"completed":A.onicecandidate=yA.noop;break}I.connection.emit("iceStateChanged",A.iceConnectionState)},v.default.log("Listening for data channel"),A.ondatachannel=function(E){v.default.log("Received data channel");var D=E.channel,o=i.getConnection(g,Q);o.initialize(D)},v.default.log("Listening for remote stream"),A.ontrack=function(E){v.default.log("Received remote stream");var D=E.streams[0],o=i.getConnection(g,Q);if(o.type===hg.Media){var s=o;I._addStreamToMediaConnection(D,s)}}},B.prototype.cleanup=function(){v.default.log("Cleaning up PeerConnection to "+this.connection.peer);var A=this.connection.peerConnection;if(A){this.connection.peerConnection=null,A.onicecandidate=A.oniceconnectionstatechange=A.ondatachannel=A.ontrack=function(){};var I=A.signalingState!=="closed",g=!1;if(this.connection.type===hg.Data){var Q=this.connection,C=Q.dataChannel;C&&(g=!!C.readyState&&C.readyState!=="closed")}(I||g)&&A.close()}},B.prototype._makeOffer=function(){return fE(this,void 0,Promise,function(){var A,I,g,Q,C,i,E;return pE(this,function(D){switch(D.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,D.label=1;case 1:return D.trys.push([1,7,,8]),[4,A.createOffer(this.connection.options.constraints)];case 2:g=D.sent(),v.default.log("Created offer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),D.label=3;case 3:return D.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return D.sent(),v.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),Q={sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,metadata:this.connection.metadata,browser:yA.browser},this.connection.type===hg.Data&&(C=this.connection,Q=lE(lE({},Q),{label:C.label,reliable:C.reliable,serialization:C.serialization})),I.socket.send({type:tI.Offer,payload:Q,dst:this.connection.peer}),[3,6];case 5:return i=D.sent(),i!="OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer"&&(I.emitError(TA.WebRTC,i),v.default.log("Failed to setLocalDescription, ",i)),[3,6];case 6:return[3,8];case 7:return E=D.sent(),I.emitError(TA.WebRTC,E),v.default.log("Failed to createOffer, ",E),[3,8];case 8:return[2]}})})},B.prototype._makeAnswer=function(){return fE(this,void 0,Promise,function(){var A,I,g,Q,C;return pE(this,function(i){switch(i.label){case 0:A=this.connection.peerConnection,I=this.connection.provider,i.label=1;case 1:return i.trys.push([1,7,,8]),[4,A.createAnswer()];case 2:g=i.sent(),v.default.log("Created answer."),this.connection.options.sdpTransform&&typeof this.connection.options.sdpTransform=="function"&&(g.sdp=this.connection.options.sdpTransform(g.sdp)||g.sdp),i.label=3;case 3:return i.trys.push([3,5,,6]),[4,A.setLocalDescription(g)];case 4:return i.sent(),v.default.log("Set localDescription:",g,"for:".concat(this.connection.peer)),I.socket.send({type:tI.Answer,payload:{sdp:g,type:this.connection.type,connectionId:this.connection.connectionId,browser:yA.browser},dst:this.connection.peer}),[3,6];case 5:return Q=i.sent(),I.emitError(TA.WebRTC,Q),v.default.log("Failed to setLocalDescription, ",Q),[3,6];case 6:return[3,8];case 7:return C=i.sent(),I.emitError(TA.WebRTC,C),v.default.log("Failed to create answer, ",C),[3,8];case 8:return[2]}})})},B.prototype.handleSDP=function(A,I){return fE(this,void 0,Promise,function(){var g,Q,C,i;return pE(this,function(E){switch(E.label){case 0:I=new RTCSessionDescription(I),g=this.connection.peerConnection,Q=this.connection.provider,v.default.log("Setting remote description",I),C=this,E.label=1;case 1:return E.trys.push([1,5,,6]),[4,g.setRemoteDescription(I)];case 2:return E.sent(),v.default.log("Set remoteDescription:".concat(A," for:").concat(this.connection.peer)),A!=="OFFER"?[3,4]:[4,C._makeAnswer()];case 3:E.sent(),E.label=4;case 4:return[3,6];case 5:return i=E.sent(),Q.emitError(TA.WebRTC,i),v.default.log("Failed to setRemoteDescription, ",i),[3,6];case 6:return[2]}})})},B.prototype.handleCandidate=function(A){return fE(this,void 0,Promise,function(){var I,g,Q,C,i,E;return pE(this,function(D){switch(D.label){case 0:v.default.log("handleCandidate:",A),I=A.candidate,g=A.sdpMLineIndex,Q=A.sdpMid,C=this.connection.peerConnection,i=this.connection.provider,D.label=1;case 1:return D.trys.push([1,3,,4]),[4,C.addIceCandidate(new RTCIceCandidate({sdpMid:Q,sdpMLineIndex:g,candidate:I}))];case 2:return D.sent(),v.default.log("Added ICE candidate for:".concat(this.connection.peer)),[3,4];case 3:return E=D.sent(),i.emitError(TA.WebRTC,E),v.default.log("Failed to handleCandidate, ",E),[3,4];case 4:return[2]}})})},B.prototype._addTracksToConnection=function(A,I){if(v.default.log("add tracks from stream ".concat(A.id," to peer connection")),!I.addTrack)return v.default.error("Your browser does't support RTCPeerConnection#addTrack. Ignored.");A.getTracks().forEach(function(g){I.addTrack(g,A)})},B.prototype._addStreamToMediaConnection=function(A,I){v.default.log("add stream ".concat(A.id," to media connection ").concat(I.connectionId)),I.addStream(A)},B}(),uD={};Hg(uD,"BaseConnection",()=>Yw,B=>Yw=B);var Iy=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),Yw=function(B){Iy(A,B);function A(I,g,Q){var C=B.call(this)||this;return C.peer=I,C.provider=g,C.options=Q,C._open=!1,C.metadata=Q.metadata,C}return Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),A}(vB.EventEmitter),gy=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),xE=function(){return xE=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},xE.apply(this,arguments)},Qy=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},dw=function(B){gy(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C._localStream=C.options._stream,C.connectionId=C.options.connectionId||A.ID_PREFIX+yA.randomToken(),C._negotiator=new qD.Negotiator(C),C._localStream&&C._negotiator.startConnection({_stream:C._localStream,originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return hg.Media},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"localStream",{get:function(){return this._localStream},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"remoteStream",{get:function(){return this._remoteStream},enumerable:!1,configurable:!0}),A.prototype.addStream=function(I){v.default.log("Receiving stream",I),this._remoteStream=I,B.prototype.emit.call(this,"stream",I)},A.prototype.handleMessage=function(I){var g=I.type,Q=I.payload;switch(I.type){case tI.Answer:this._negotiator.handleSDP(g,Q.sdp),this._open=!0;break;case tI.Candidate:this._negotiator.handleCandidate(Q.candidate);break;default:v.default.warn("Unrecognized message type:".concat(g," from peer:").concat(this.peer));break}},A.prototype.answer=function(I,g){var Q,C;if(g===void 0&&(g={}),this._localStream){v.default.warn("Local stream already exists on this MediaConnection. Are you answering a call twice?");return}this._localStream=I,g&&g.sdpTransform&&(this.options.sdpTransform=g.sdpTransform),this._negotiator.startConnection(xE(xE({},this.options._payload),{_stream:I}));var i=this.provider._getMessages(this.connectionId);try{for(var E=Qy(i),D=E.next();!D.done;D=E.next()){var o=D.value;this.handleMessage(o)}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=E.return)&&C.call(E)}finally{if(Q)throw Q.error}}this._open=!0},A.prototype.close=function(){this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this._localStream=null,this._remoteStream=null,this.provider&&(this.provider._removeConnection(this),this.provider=null),this.options&&this.options._stream&&(this.options._stream=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.ID_PREFIX="mc_",A}(uD.BaseConnection),mD={};Hg(mD,"DataConnection",()=>fw,B=>fw=B);var Kw={};Hg(Kw,"EncodingQueue",()=>lw,B=>lw=B);var By=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),lw=function(B){By(A,B);function A(){var I=B.call(this)||this;return I.fileReader=new FileReader,I._queue=[],I._processing=!1,I.fileReader.onload=function(g){I._processing=!1,g.target&&I.emit("done",g.target.result),I.doNextTask()},I.fileReader.onerror=function(g){v.default.error("EncodingQueue error:",g),I._processing=!1,I.destroy(),I.emit("error",g)},I}return Object.defineProperty(A.prototype,"queue",{get:function(){return this._queue},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"size",{get:function(){return this.queue.length},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"processing",{get:function(){return this._processing},enumerable:!1,configurable:!0}),A.prototype.enque=function(I){this.queue.push(I),!this.processing&&this.doNextTask()},A.prototype.destroy=function(){this.fileReader.abort(),this._queue=[]},A.prototype.doNextTask=function(){this.size!==0&&(this.processing||(this._processing=!0,this.fileReader.readAsArrayBuffer(this.queue.shift())))},A}(vB.EventEmitter),Cy=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),Ey=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},fw=function(B){Cy(A,B);function A(I,g,Q){var C=B.call(this,I,g,Q)||this;return C.stringify=JSON.stringify,C.parse=JSON.parse,C._buffer=[],C._bufferSize=0,C._buffering=!1,C._chunkedData={},C._encodingQueue=new Kw.EncodingQueue,C.connectionId=C.options.connectionId||A.ID_PREFIX+yA.randomToken(),C.label=C.options.label||C.connectionId,C.serialization=C.options.serialization||Pg.Binary,C.reliable=!!C.options.reliable,C._encodingQueue.on("done",function(i){C._bufferedSend(i)}),C._encodingQueue.on("error",function(){v.default.error("DC#".concat(C.connectionId,": Error occured in encoding from blob to arraybuffer, close DC")),C.close()}),C._negotiator=new qD.Negotiator(C),C._negotiator.startConnection(C.options._payload||{originator:!0}),C}return Object.defineProperty(A.prototype,"type",{get:function(){return hg.Data},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"dataChannel",{get:function(){return this._dc},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"bufferSize",{get:function(){return this._bufferSize},enumerable:!1,configurable:!0}),A.prototype.initialize=function(I){this._dc=I,this._configureDataChannel()},A.prototype._configureDataChannel=function(){var I=this;(!yA.supports.binaryBlob||yA.supports.reliable)&&(this.dataChannel.binaryType="arraybuffer"),this.dataChannel.onopen=function(){v.default.log("DC#".concat(I.connectionId," dc connection success")),I._open=!0,I.emit("open")},this.dataChannel.onmessage=function(g){v.default.log("DC#".concat(I.connectionId," dc onmessage:"),g.data),I._handleDataMessage(g)},this.dataChannel.onclose=function(){v.default.log("DC#".concat(I.connectionId," dc closed for:"),I.peer),I.close()}},A.prototype._handleDataMessage=function(I){var g=this,Q=I.data,C=Q.constructor,i=this.serialization===Pg.Binary||this.serialization===Pg.BinaryUTF8,E=Q;if(i){if(C===Blob){yA.blobToArrayBuffer(Q,function(o){var s=yA.unpack(o);g.emit("data",s)});return}else if(C===ArrayBuffer)E=yA.unpack(Q);else if(C===String){var D=yA.binaryStringToArrayBuffer(Q);E=yA.unpack(D)}}else this.serialization===Pg.JSON&&(E=this.parse(Q));if(E.__peerData){this._handleChunk(E);return}B.prototype.emit.call(this,"data",E)},A.prototype._handleChunk=function(I){var g=I.__peerData,Q=this._chunkedData[g]||{data:[],count:0,total:I.total};if(Q.data[I.n]=I.data,Q.count++,this._chunkedData[g]=Q,Q.total===Q.count){delete this._chunkedData[g];var C=new Blob(Q.data);this._handleDataMessage({data:C})}},A.prototype.close=function(){this._buffer=[],this._bufferSize=0,this._chunkedData={},this._negotiator&&(this._negotiator.cleanup(),this._negotiator=null),this.provider&&(this.provider._removeConnection(this),this.provider=null),this.dataChannel&&(this.dataChannel.onopen=null,this.dataChannel.onmessage=null,this.dataChannel.onclose=null,this._dc=null),this._encodingQueue&&(this._encodingQueue.destroy(),this._encodingQueue.removeAllListeners(),this._encodingQueue=null),this.open&&(this._open=!1,B.prototype.emit.call(this,"close"))},A.prototype.send=function(I,g){if(!this.open){B.prototype.emit.call(this,"error",new Error("Connection is not open. You should listen for the `open` event before sending messages."));return}if(this.serialization===Pg.JSON)this._bufferedSend(this.stringify(I));else if(this.serialization===Pg.Binary||this.serialization===Pg.BinaryUTF8){var Q=yA.pack(I);if(!g&&Q.size>yA.chunkedMTU){this._sendChunks(Q);return}yA.supports.binaryBlob?this._bufferedSend(Q):this._encodingQueue.enque(Q)}else this._bufferedSend(I)},A.prototype._bufferedSend=function(I){(this._buffering||!this._trySend(I))&&(this._buffer.push(I),this._bufferSize=this._buffer.length)},A.prototype._trySend=function(I){var g=this;if(!this.open)return!1;if(this.dataChannel.bufferedAmount>A.MAX_BUFFERED_AMOUNT)return this._buffering=!0,setTimeout(function(){g._buffering=!1,g._tryBuffer()},50),!1;try{this.dataChannel.send(I)}catch(Q){return v.default.error("DC#:".concat(this.connectionId," Error when sending:"),Q),this._buffering=!0,this.close(),!1}return!0},A.prototype._tryBuffer=function(){if(this.open&&this._buffer.length!==0){var I=this._buffer[0];this._trySend(I)&&(this._buffer.shift(),this._bufferSize=this._buffer.length,this._tryBuffer())}},A.prototype._sendChunks=function(I){var g,Q,C=yA.chunk(I);v.default.log("DC#".concat(this.connectionId," Try to send ").concat(C.length," chunks..."));try{for(var i=Ey(C),E=i.next();!E.done;E=i.next()){var D=E.value;this.send(D,!0)}}catch(o){g={error:o}}finally{try{E&&!E.done&&(Q=i.return)&&Q.call(i)}finally{if(g)throw g.error}}},A.prototype.handleMessage=function(I){var g=I.payload;switch(I.type){case tI.Answer:this._negotiator.handleSDP(I.type,g.sdp);break;case tI.Candidate:this._negotiator.handleCandidate(g.candidate);break;default:v.default.warn("Unrecognized message type:",I.type,"from peer:",this.peer);break}},A.ID_PREFIX="dc_",A.MAX_BUFFERED_AMOUNT=8388608,A}(uD.BaseConnection),pw={};Hg(pw,"API",()=>uw,B=>uw=B);var xw=function(B,A,I,g){function Q(C){return C instanceof I?C:new I(function(i){i(C)})}return new(I||(I=Promise))(function(C,i){function E(s){try{o(g.next(s))}catch(t){i(t)}}function D(s){try{o(g.throw(s))}catch(t){i(t)}}function o(s){s.done?C(s.value):Q(s.value).then(E,D)}o((g=g.apply(B,A||[])).next())})},qw=function(B,A){var I={label:0,sent:function(){if(C[0]&1)throw C[1];return C[1]},trys:[],ops:[]},g,Q,C,i;return i={next:E(0),throw:E(1),return:E(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function E(o){return function(s){return D([o,s])}}function D(o){if(g)throw new TypeError("Generator is already executing.");for(;I;)try{if(g=1,Q&&(C=o[0]&2?Q.return:o[0]?Q.throw||((C=Q.return)&&C.call(Q),0):Q.next)&&!(C=C.call(Q,o[1])).done)return C;switch(Q=0,C&&(o=[o[0]&2,C.value]),o[0]){case 0:case 1:C=o;break;case 4:return I.label++,{value:o[1],done:!1};case 5:I.label++,Q=o[1],o=[0];continue;case 7:o=I.ops.pop(),I.trys.pop();continue;default:if(C=I.trys,!(C=C.length>0&&C[C.length-1])&&(o[0]===6||o[0]===2)){I=0;continue}if(o[0]===3&&(!C||o[1]>C[0]&&o[1]<C[3])){I.label=o[1];break}if(o[0]===6&&I.label<C[1]){I.label=C[1],C=o;break}if(C&&I.label<C[2]){I.label=C[2],I.ops.push(o);break}C[2]&&I.ops.pop(),I.trys.pop();continue}o=A.call(B,I)}catch(s){o=[6,s],Q=0}finally{g=C=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},uw=function(){function B(A){this._options=A}return B.prototype._buildRequest=function(A){var I=this._options.secure?"https":"http",g=this._options,Q=g.host,C=g.port,i=g.path,E=g.key,D=new URL("".concat(I,"://").concat(Q,":").concat(C).concat(i).concat(E,"/").concat(A));return D.searchParams.set("ts","".concat(Date.now()).concat(Math.random())),D.searchParams.set("version",pD.version),fetch(D.href,{referrerPolicy:this._options.referrerPolicy})},B.prototype.retrieveId=function(){return xw(this,void 0,Promise,function(){var A,I,g;return qw(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("id")];case 1:if(A=Q.sent(),A.status!==200)throw new Error("Error. Status:".concat(A.status));return[2,A.text()];case 2:throw I=Q.sent(),v.default.error("Error retrieving ID",I),g="",this._options.path==="/"&&this._options.host!==yA.CLOUD_HOST&&(g=" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),new Error("Could not get an ID from the server."+g);case 3:return[2]}})})},B.prototype.listAllPeers=function(){return xw(this,void 0,Promise,function(){var A,I,g;return qw(this,function(Q){switch(Q.label){case 0:return Q.trys.push([0,2,,3]),[4,this._buildRequest("peers")];case 1:if(A=Q.sent(),A.status!==200)throw A.status===401?(I="",this._options.host===yA.CLOUD_HOST?I="It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key.":I="You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature.",new Error("It doesn't look like you have permission to list peers IDs. "+I)):new Error("Error. Status:".concat(A.status));return[2,A.json()];case 2:throw g=Q.sent(),v.default.error("Error retrieving list peers",g),new Error("Could not get list peers from the server."+g);case 3:return[2]}})})},B}(),iy=function(){var B=function(A,I){return B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,Q){g.__proto__=Q}||function(g,Q){for(var C in Q)Object.prototype.hasOwnProperty.call(Q,C)&&(g[C]=Q[C])},B(A,I)};return function(A,I){if(typeof I!="function"&&I!==null)throw new TypeError("Class extends value "+String(I)+" is not a constructor or null");B(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}}(),VB=function(){return VB=Object.assign||function(B){for(var A,I=1,g=arguments.length;I<g;I++){A=arguments[I];for(var Q in A)Object.prototype.hasOwnProperty.call(A,Q)&&(B[Q]=A[Q])}return B},VB.apply(this,arguments)},WB=function(B){var A=typeof Symbol=="function"&&Symbol.iterator,I=A&&B[A],g=0;if(I)return I.call(B);if(B&&typeof B.length=="number")return{next:function(){return B&&g>=B.length&&(B=void 0),{value:B&&B[g++],done:!B}}};throw new TypeError(A?"Object is not iterable.":"Symbol.iterator is not defined.")},Dy=function(B,A){var I=typeof Symbol=="function"&&B[Symbol.iterator];if(!I)return B;var g=I.call(B),Q,C=[],i;try{for(;(A===void 0||A-- >0)&&!(Q=g.next()).done;)C.push(Q.value)}catch(E){i={error:E}}finally{try{Q&&!Q.done&&(I=g.return)&&I.call(g)}finally{if(i)throw i.error}}return C},bD=function(B){iy(A,B);function A(I,g){var Q=B.call(this)||this;Q._id=null,Q._lastServerId=null,Q._destroyed=!1,Q._disconnected=!1,Q._open=!1,Q._connections=new Map,Q._lostMessages=new Map;var C;return I&&I.constructor==Object?g=I:I&&(C=I.toString()),g=VB({debug:0,host:yA.CLOUD_HOST,port:yA.CLOUD_PORT,path:"/",key:A.DEFAULT_KEY,token:yA.randomToken(),config:yA.defaultConfig,referrerPolicy:"strict-origin-when-cross-origin"},g),Q._options=g,Q._options.host==="/"&&(Q._options.host=window.location.hostname),Q._options.path&&(Q._options.path[0]!=="/"&&(Q._options.path="/"+Q._options.path),Q._options.path[Q._options.path.length-1]!=="/"&&(Q._options.path+="/")),Q._options.secure===void 0&&Q._options.host!==yA.CLOUD_HOST?Q._options.secure=yA.isSecure():Q._options.host==yA.CLOUD_HOST&&(Q._options.secure=!0),Q._options.logFunction&&v.default.setLogFunction(Q._options.logFunction),v.default.logLevel=Q._options.debug||0,Q._api=new pw.API(g),Q._socket=Q._createServerConnection(),!yA.supports.audioVideo&&!yA.supports.data?(Q._delayedAbort(TA.BrowserIncompatible,"The current browser does not support WebRTC"),Q):C&&!yA.validateId(C)?(Q._delayedAbort(TA.InvalidID,'ID "'.concat(C,'" is invalid')),Q):(C?Q._initialize(C):Q._api.retrieveId().then(function(i){return Q._initialize(i)}).catch(function(i){return Q._abort(TA.ServerError,i)}),Q)}return Object.defineProperty(A.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"open",{get:function(){return this._open},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"socket",{get:function(){return this._socket},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"connections",{get:function(){var I,g,Q=Object.create(null);try{for(var C=WB(this._connections),i=C.next();!i.done;i=C.next()){var E=Dy(i.value,2),D=E[0],o=E[1];Q[D]=o}}catch(s){I={error:s}}finally{try{i&&!i.done&&(g=C.return)&&g.call(C)}finally{if(I)throw I.error}}return Q},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),Object.defineProperty(A.prototype,"disconnected",{get:function(){return this._disconnected},enumerable:!1,configurable:!0}),A.prototype._createServerConnection=function(){var I=this,g=new Uw.Socket(this._options.secure,this._options.host,this._options.port,this._options.path,this._options.key,this._options.pingInterval);return g.on(Tg.Message,function(Q){I._handleMessage(Q)}),g.on(Tg.Error,function(Q){I._abort(TA.SocketError,Q)}),g.on(Tg.Disconnected,function(){I.disconnected||(I.emitError(TA.Network,"Lost connection to server."),I.disconnect())}),g.on(Tg.Close,function(){I.disconnected||I._abort(TA.SocketClosed,"Underlying socket is already closed.")}),g},A.prototype._initialize=function(I){this._id=I,this.socket.start(I,this._options.token)},A.prototype._handleMessage=function(I){var g,Q,C=I.type,i=I.payload,E=I.src;switch(C){case tI.Open:this._lastServerId=this.id,this._open=!0,this.emit("open",this.id);break;case tI.Error:this._abort(TA.ServerError,i.msg);break;case tI.IdTaken:this._abort(TA.UnavailableID,'ID "'.concat(this.id,'" is taken'));break;case tI.InvalidKey:this._abort(TA.InvalidKey,'API KEY "'.concat(this._options.key,'" is invalid'));break;case tI.Leave:v.default.log("Received leave message from ".concat(E)),this._cleanupPeer(E),this._connections.delete(E);break;case tI.Expire:this.emitError(TA.PeerUnavailable,"Could not connect to peer ".concat(E));break;case tI.Offer:var G=i.connectionId,S=this.getConnection(E,G);if(S&&(S.close(),v.default.warn("Offer received for existing Connection ID:".concat(G))),i.type===hg.Media){var D=new xD.MediaConnection(E,this,{connectionId:G,_payload:i,metadata:i.metadata});S=D,this._addConnection(E,S),this.emit("call",D)}else if(i.type===hg.Data){var o=new mD.DataConnection(E,this,{connectionId:G,_payload:i,metadata:i.metadata,label:i.label,serialization:i.serialization,reliable:i.reliable});S=o,this._addConnection(E,S),this.emit("connection",o)}else{v.default.warn("Received malformed connection type:".concat(i.type));return}var s=this._getMessages(G);try{for(var t=WB(s),w=t.next();!w.done;w=t.next()){var a=w.value;S.handleMessage(a)}}catch(c){g={error:c}}finally{try{w&&!w.done&&(Q=t.return)&&Q.call(t)}finally{if(g)throw g.error}}break;default:if(!i){v.default.warn("You received a malformed message from ".concat(E," of type ").concat(C));return}var G=i.connectionId,S=this.getConnection(E,G);S&&S.peerConnection?S.handleMessage(I):G?this._storeMessage(G,I):v.default.warn("You received an unrecognized message:",I);break}},A.prototype._storeMessage=function(I,g){this._lostMessages.has(I)||this._lostMessages.set(I,[]),this._lostMessages.get(I).push(g)},A.prototype._getMessages=function(I){var g=this._lostMessages.get(I);return g?(this._lostMessages.delete(I),g):[]},A.prototype.connect=function(I,g){if(g===void 0&&(g={}),this.disconnected){v.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."),this.emitError(TA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}var Q=new mD.DataConnection(I,this,g);return this._addConnection(I,Q),Q},A.prototype.call=function(I,g,Q){if(Q===void 0&&(Q={}),this.disconnected){v.default.warn("You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."),this.emitError(TA.Disconnected,"Cannot connect to new Peer after disconnecting from server.");return}if(!g){v.default.error("To call a peer, you must provide a stream from your browser's `getUserMedia`.");return}var C=new xD.MediaConnection(I,this,VB(VB({},Q),{_stream:g}));return this._addConnection(I,C),C},A.prototype._addConnection=function(I,g){v.default.log("add connection ".concat(g.type,":").concat(g.connectionId," to peerId:").concat(I)),this._connections.has(I)||this._connections.set(I,[]),this._connections.get(I).push(g)},A.prototype._removeConnection=function(I){var g=this._connections.get(I.peer);if(g){var Q=g.indexOf(I);Q!==-1&&g.splice(Q,1)}this._lostMessages.delete(I.connectionId)},A.prototype.getConnection=function(I,g){var Q,C,i=this._connections.get(I);if(!i)return null;try{for(var E=WB(i),D=E.next();!D.done;D=E.next()){var o=D.value;if(o.connectionId===g)return o}}catch(s){Q={error:s}}finally{try{D&&!D.done&&(C=E.return)&&C.call(E)}finally{if(Q)throw Q.error}}return null},A.prototype._delayedAbort=function(I,g){var Q=this;setTimeout(function(){Q._abort(I,g)},0)},A.prototype._abort=function(I,g){v.default.error("Aborting!"),this.emitError(I,g),this._lastServerId?this.disconnect():this.destroy()},A.prototype.emitError=function(I,g){v.default.error("Error:",g);var Q;typeof g=="string"?Q=new Error(g):Q=g,Q.type=I,this.emit("error",Q)},A.prototype.destroy=function(){this.destroyed||(v.default.log("Destroy peer with ID:".concat(this.id)),this.disconnect(),this._cleanup(),this._destroyed=!0,this.emit("close"))},A.prototype._cleanup=function(){var I,g;try{for(var Q=WB(this._connections.keys()),C=Q.next();!C.done;C=Q.next()){var i=C.value;this._cleanupPeer(i),this._connections.delete(i)}}catch(E){I={error:E}}finally{try{C&&!C.done&&(g=Q.return)&&g.call(Q)}finally{if(I)throw I.error}}this.socket.removeAllListeners()},A.prototype._cleanupPeer=function(I){var g,Q,C=this._connections.get(I);if(C)try{for(var i=WB(C),E=i.next();!E.done;E=i.next()){var D=E.value;D.close()}}catch(o){g={error:o}}finally{try{E&&!E.done&&(Q=i.return)&&Q.call(i)}finally{if(g)throw g.error}}},A.prototype.disconnect=function(){if(!this.disconnected){var I=this.id;v.default.log("Disconnect peer with ID:".concat(I)),this._disconnected=!0,this._open=!1,this.socket.close(),this._lastServerId=I,this._id=null,this.emit("disconnected",I)}},A.prototype.reconnect=function(){if(this.disconnected&&!this.destroyed)v.default.log("Attempting reconnection to server with ID ".concat(this._lastServerId)),this._disconnected=!1,this._initialize(this._lastServerId);else{if(this.destroyed)throw new Error("This peer cannot reconnect to the server. It has already been destroyed.");if(!this.disconnected&&!this.open)v.default.error("In a hurry? We're still trying to make the initial connection!");else throw new Error("Peer ".concat(this.id," cannot reconnect because it is not disconnected from the server!"))}},A.prototype.listAllPeers=function(I){var g=this;I===void 0&&(I=function(Q){}),this._api.listAllPeers().then(function(Q){return I(Q)}).catch(function(Q){return g._abort(TA.ServerError,Q)})},A.DEFAULT_KEY="peerjs",A}(vB.EventEmitter),oy=Mw.Peer;const sy=Object.freeze(Object.defineProperty({__proto__:null,get Peer(){return bD},default:oy,util:yA},Symbol.toStringTag,{value:"Module"}));class PD extends vi{constructor(A,I){super(),this.ordering=A,this.setAttribute("position",new iI(ty,3)),this.setIndex(new iI(wy,1)),this._maxInstanceCount=A.length,this.instanceCount=I,this.attribute=new AQ(A,1,!1,1),this.attribute.setUsage(hI),this.setAttribute("splatIndex",this.attribute)}update(A,I){this.ordering=A,this.attribute.array=A,this.instanceCount=I,this.attribute.addUpdateRange(0,I),this.attribute.needsUpdate=!0}}const ty=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),wy=new Uint16Array([0,1,2,0,2,3]),mw=`(function() {
|
|
1117
1117
|
"use strict";
|
|
1118
1118
|
class CsplatArray {
|
|
1119
1119
|
static __wrap(ptr) {
|
|
@@ -9282,9 +9282,9 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
9282
9282
|
initialize().catch(console.error);
|
|
9283
9283
|
})();
|
|
9284
9284
|
//# sourceMappingURL=oldWorker-BSuga-BW.js.map
|
|
9285
|
-
`,dw=typeof self<"u"&&self.Blob&&new Blob([Kw],{type:"text/javascript;charset=utf-8"});function iy(B){let A;try{if(A=dw&&(self.URL||self.webkitURL).createObjectURL(dw),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Kw),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}var QI=Uint8Array,WB=Uint16Array,Dy=Int32Array,lw=new QI([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fw=new QI([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),oy=new QI([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),pw=function(B,A){for(var I=new WB(31),g=0;g<31;++g)I[g]=A+=1<<B[g-1];for(var Q=new Dy(I[30]),g=1;g<30;++g)for(var C=I[g];C<I[g+1];++C)Q[C]=C-I[g]<<5|g;return{b:I,r:Q}},xw=pw(lw,2),qw=xw.b,sy=xw.r;qw[28]=258,sy[258]=28;for(var ty=pw(fw,0),wy=ty.b,uw=new WB(32768),lA=0;lA<32768;++lA){var CQ=(lA&43690)>>1|(lA&21845)<<1;CQ=(CQ&52428)>>2|(CQ&13107)<<2,CQ=(CQ&61680)>>4|(CQ&3855)<<4,uw[lA]=((CQ&65280)>>8|(CQ&255)<<8)>>1}for(var jB=function(B,A,I){for(var g=B.length,Q=0,C=new WB(A);Q<g;++Q)B[Q]&&++C[B[Q]-1];var i=new WB(A);for(Q=1;Q<A;++Q)i[Q]=i[Q-1]+C[Q-1]<<1;var E;{E=new WB(1<<A);var D=15-A;for(Q=0;Q<g;++Q)if(B[Q])for(var o=Q<<4|B[Q],s=A-B[Q],t=i[B[Q]-1]++<<s,w=t|(1<<s)-1;t<=w;++t)E[uw[t]>>D]=o}return E},zB=new QI(288),lA=0;lA<144;++lA)zB[lA]=8;for(var lA=144;lA<256;++lA)zB[lA]=9;for(var lA=256;lA<280;++lA)zB[lA]=7;for(var lA=280;lA<288;++lA)zB[lA]=8;for(var bw=new QI(32),lA=0;lA<32;++lA)bw[lA]=5;var ay=jB(zB,9),ey=jB(bw,5),bD=function(B){for(var A=B[0],I=1;I<B.length;++I)B[I]>A&&(A=B[I]);return A},cg=function(B,A,I){var g=A/8|0;return(B[g]|B[g+1]<<8)>>(A&7)&I},mD=function(B,A){var I=A/8|0;return(B[I]|B[I+1]<<8|B[I+2]<<16)>>(A&7)},mw=function(B){return(B+7)/8|0},IB=function(B,A,I){return(A==null||A<0)&&(A=0),(I==null||I>B.length)&&(I=B.length),new QI(B.subarray(A,I))},hy=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],YI=function(B,A,I){var g=new Error(A||hy[B]);if(g.code=B,Error.captureStackTrace&&Error.captureStackTrace(g,YI),!I)throw g;return g},Pw=function(B,A,I,g){var Q=B.length,C=g?g.length:0;if(!Q||A.f&&!A.l)return I||new QI(0);var i=!I,E=i||A.i!=2,D=A.i;i&&(I=new QI(Q*3));var o=function(xA){var aA=I.length;if(xA>aA){var DA=new QI(Math.max(aA*2,xA));DA.set(I),I=DA}},s=A.f||0,t=A.p||0,w=A.b||0,a=A.l,G=A.d,r=A.m,c=A.n,y=Q*8;do{if(!a){s=cg(B,t,1);var R=cg(B,t+1,3);if(t+=3,R)if(R==1)a=ay,G=ey,r=9,c=5;else if(R==2){var S=cg(B,t,31)+257,n=cg(B,t+10,15)+4,N=S+cg(B,t+5,31)+1;t+=14;for(var M=new QI(N),J=new QI(19),L=0;L<n;++L)J[oy[L]]=cg(B,t+L*3,7);t+=n*3;for(var H=bD(J),Y=(1<<H)-1,d=jB(J,H),L=0;L<N;){var l=d[cg(B,t,Y)];t+=l&15;var p=l>>4;if(p<16)M[L++]=p;else{var u=0,P=0;for(p==16?(P=3+cg(B,t,3),t+=2,u=M[L-1]):p==17?(P=3+cg(B,t,7),t+=3):p==18&&(P=11+cg(B,t,127),t+=7);P--;)M[L++]=u}}var O=M.subarray(0,S),W=M.subarray(S);r=bD(O),c=bD(W),a=jB(O,r),G=jB(W,c)}else YI(1);else{var p=mw(t)+4,T=B[p-4]|B[p-3]<<8,j=p+T;if(j>Q){D&&YI(0);break}E&&o(w+T),I.set(B.subarray(p,j),w),A.b=w+=T,A.p=t=j*8,A.f=s;continue}if(t>y){D&&YI(0);break}}E&&o(w+131072);for(var EA=(1<<r)-1,wA=(1<<c)-1,iA=t;;iA=t){var u=a[mD(B,t)&EA],IA=u>>4;if(t+=u&15,t>y){D&&YI(0);break}if(u||YI(2),IA<256)I[w++]=IA;else if(IA==256){iA=t,a=null;break}else{var BA=IA-254;if(IA>264){var L=IA-257,AA=lw[L];BA=cg(B,t,(1<<AA)-1)+qw[L],t+=AA}var $=G[mD(B,t)&wA],z=$>>4;$||YI(3),t+=$&15;var W=wy[z];if(z>3){var AA=fw[z];W+=mD(B,t)&(1<<AA)-1,t+=AA}if(t>y){D&&YI(0);break}E&&o(w+131072);var LA=w+BA;if(w<W){var NA=C-W,MA=Math.min(W,LA);for(NA+w<0&&YI(3);w<MA;++w)I[w]=g[NA+w]}for(;w<LA;++w)I[w]=I[w-W]}}A.l=a,A.p=iA,A.b=w,A.f=s,a&&(s=1,A.m=r,A.d=G,A.n=c)}while(!s);return w!=I.length&&i?IB(I,0,w):I.subarray(0,w)},cy=new QI(0),Yg=function(B,A){return B[A]|B[A+1]<<8},yg=function(B,A){return(B[A]|B[A+1]<<8|B[A+2]<<16|B[A+3]<<24)>>>0},PD=function(B,A){return yg(B,A)+yg(B,A+4)*4294967296},yy=function(B){(B[0]!=31||B[1]!=139||B[2]!=8)&&YI(6,"invalid gzip data");var A=B[3],I=10;A&4&&(I+=(B[10]|B[11]<<8)+2);for(var g=(A>>3&1)+(A>>4&1);g>0;g-=!B[I++]);return I+(A&2)},TD=function(){function B(A,I){typeof A=="function"&&(I=A,A={}),this.ondata=I;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new QI(32768),this.p=new QI(0),g&&this.o.set(g)}return B.prototype.e=function(A){if(this.ondata||YI(5),this.d&&YI(4),!this.p.length)this.p=A;else if(A.length){var I=new QI(this.p.length+A.length);I.set(this.p),I.set(A,this.p.length),this.p=I}},B.prototype.c=function(A){this.s.i=+(this.d=A||!1);var I=this.s.b,g=Pw(this.p,this.s,this.o);this.ondata(IB(g,I,this.s.b),this.d),this.o=IB(g,this.s.b-32768),this.s.b=this.o.length,this.p=IB(this.p,this.s.p/8|0),this.s.p&=7},B.prototype.push=function(A,I){this.e(A),this.c(I)},B}();function Gy(B,A){return Pw(B,{i:2},A&&A.out,A&&A.dictionary)}var Sy=function(){function B(A,I){this.v=1,this.r=0,TD.call(this,A,I)}return B.prototype.push=function(A,I){if(TD.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),Q=g.length>3?yy(g):4;if(Q>g.length){if(!I)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(Q),this.v=0}TD.prototype.c.call(this,I),this.s.f&&!this.s.l&&!I&&(this.v=mw(this.s.p)+9,this.s={i:0},this.o=new QI(0),this.push(new QI(0),I))},B}(),OD=typeof TextDecoder<"u"&&new TextDecoder,ry=0;try{OD.decode(cy,{stream:!0}),ry=1}catch{}var Fy=function(B){for(var A="",I=0;;){var g=B[I++],Q=(g>127)+(g>223)+(g>239);if(I+Q>B.length)return{s:A,r:IB(B,I-1)};Q?Q==3?(g=((g&15)<<18|(B[I++]&63)<<12|(B[I++]&63)<<6|B[I++]&63)-65536,A+=String.fromCharCode(55296|g>>10,56320|g&1023)):Q&1?A+=String.fromCharCode((g&31)<<6|B[I++]&63):A+=String.fromCharCode((g&15)<<12|(B[I++]&63)<<6|B[I++]&63):A+=String.fromCharCode(g)}};function Ry(B,A){if(A){for(var I="",g=0;g<B.length;g+=16384)I+=String.fromCharCode.apply(null,B.subarray(g,g+16384));return I}else{if(OD)return OD.decode(B);var Q=Fy(B),C=Q.s,I=Q.r;return I.length&&YI(8),C}}var ky=function(B,A){return A+30+Yg(B,A+26)+Yg(B,A+28)},ny=function(B,A,I){var g=Yg(B,A+28),Q=Ry(B.subarray(A+46,A+46+g),!(Yg(B,A+8)&2048)),C=A+46+g,i=yg(B,A+20),E=I&&i==4294967295?Ny(B,C):[i,yg(B,A+24),yg(B,A+42)],D=E[0],o=E[1],s=E[2];return[Yg(B,A+10),D,o,Q,C+Yg(B,A+30)+Yg(B,A+32),s]},Ny=function(B,A){for(;Yg(B,A)!=1;A+=4+Yg(B,A+2));return[PD(B,A+12),PD(B,A+4),PD(B,A+20)]};function My(B,A){for(var I={},g=B.length-22;yg(B,g)!=101010256;--g)(!g||B.length-g>65558)&&YI(13);var Q=Yg(B,g+8);if(!Q)return{};var C=yg(B,g+16),i=C==4294967295||Q==65535;if(i){var E=yg(B,g-12);i=yg(B,E)==101075792,i&&(Q=yg(B,E+32),C=yg(B,E+48))}for(var D=A&&A.filter,o=0;o<Q;++o){var s=ny(B,C,i),t=s[0],w=s[1],a=s[2],G=s[3],r=s[4],c=s[5],y=ky(B,c);C=r,(!D||D({name:G,size:w,originalSize:a,compression:t}))&&(t?t==8?I[G]=Gy(B.subarray(y,y+w),{out:new QI(a)}):YI(14,"unknown compression type "+t):I[G]=IB(B,y,y+w))}return I}const uI=-12,bI=9,Jy=-30,XD=Math.exp(Jy),Uy=11,Ly=11,_=1<<Uy,Gg=1<<Ly,Hy=1;var mI=(B=>(B.PLY="ply",B.SPZ="spz",B.SPLAT="splat",B.KSPLAT="ksplat",B.PCSOGS="pcsogs",B.PCSOGSZIP="pcsogszip",B.RAD="rad",B))(mI||{});const xE={rgbMin:0,rgbMax:1,lnScaleMin:uI,lnScaleMax:bI,sh1Max:1,sh2Max:1,sh3Max:1,lodOpacity:!1};function Yy(B){return B==="bool"||B==="bvec2"||B==="bvec3"||B==="bvec4"}function rQ(B){return B==="int"||B==="ivec2"||B==="ivec3"||B==="ivec4"}function FQ(B){return B==="uint"||B==="uvec2"||B==="uvec3"||B==="uvec4"}function Ky(B){return B==="float"||B==="vec2"||B==="vec3"||B==="vec4"}function dy(B){return B==="mat2"||B==="mat2x2"||B==="mat2x3"||B==="mat2x4"||B==="mat3"||B==="mat3x2"||B==="mat3x3"||B==="mat3x4"||B==="mat4"||B==="mat4x2"||B==="mat4x3"||B==="mat4x4"}function _B(B){return Ky(B)||dy(B)}function gB(B){return B==="mat2"||B==="mat2x2"}function QB(B){return B==="mat3"||B==="mat3x3"}function BB(B){return B==="mat4"||B==="mat4x4"}function ly(B){switch(B){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${B}`)}}function fy(B){switch(B){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${B}`)}}function VA(B){return Math.trunc(B).toString()}function WA(B){return`${Math.max(0,Math.trunc(B)).toString()}u`}function cA(B){return B===Number.POSITIVE_INFINITY?"INFINITY":B===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(B)?B.toFixed(1):B.toString()}function RQ(B){return B instanceof kQ?B.type:B.dynoOut().type}class kQ{constructor(A){this.__isDynoValue=!0,this.type=A}}class BI extends kQ{constructor(A,I){super(A.outTypes[I]),this.dyno=A,this.key=I}}class qE extends kQ{constructor(A,I){super(A),this.literal=I}getLiteral(){return this.literal}}class py extends qE{constructor(A,I){super(A,""),this.value=I}getLiteral(){const{type:A,value:I}=this;switch(A){case"bool":return I?"true":"false";case"uint":return WA(I);case"int":return VA(I);case"float":return cA(I);case"bvec2":{const g=I;return`bvec2(${g[0]}, ${g[1]})`}case"uvec2":{if(I instanceof JI)return`uvec2(${WA(I.x)}, ${WA(I.y)})`;const g=I;return`uvec2(${WA(g[0])}, ${WA(g[1])})`}case"ivec2":{if(I instanceof JI)return`ivec2(${VA(I.x)}, ${VA(I.y)})`;const g=I;return`ivec2(${VA(g[0])}, ${VA(g[1])})`}case"vec2":{if(I instanceof JI)return`vec2(${cA(I.x)}, ${cA(I.y)})`;const g=I;return`vec2(${cA(g[0])}, ${cA(g[1])})`}case"bvec3":{const g=I;return`bvec3(${g[0]}, ${g[1]}, ${g[2]})`}case"uvec3":{if(I instanceof q)return`uvec3(${WA(I.x)}, ${WA(I.y)}, ${WA(I.z)})`;const g=I;return`uvec3(${WA(g[0])}, ${WA(g[1])}, ${WA(g[2])})`}case"ivec3":{if(I instanceof q)return`ivec3(${VA(I.x)}, ${VA(I.y)}, ${VA(I.z)})`;const g=I;return`ivec3(${VA(g[0])}, ${VA(g[1])}, ${VA(g[2])})`}case"vec3":{if(I instanceof q)return`vec3(${cA(I.x)}, ${cA(I.y)}, ${cA(I.z)})`;const g=I;return`vec3(${cA(g[0])}, ${cA(g[1])}, ${cA(g[2])})`}case"bvec4":{const g=I;return`bvec4(${g[0]}, ${g[1]}, ${g[2]}, ${g[3]})`}case"uvec4":{if(I instanceof MI)return`uvec4(${WA(I.x)}, ${WA(I.y)}, ${WA(I.z)}, ${WA(I.w)})`;const g=I;return`uvec4(${WA(g[0])}, ${WA(g[1])}, ${WA(g[2])}, ${WA(g[3])})`}case"ivec4":{if(I instanceof MI)return`ivec4(${VA(I.x)}, ${VA(I.y)}, ${VA(I.z)}, ${VA(I.w)})`;const g=I;return`ivec4(${VA(g[0])}, ${VA(g[1])}, ${VA(g[2])}, ${VA(g[3])})`}case"vec4":{if(I instanceof MI)return`vec4(${cA(I.x)}, ${cA(I.y)}, ${cA(I.z)}, ${cA(I.w)})`;if(I instanceof UI)return`vec4(${cA(I.x)}, ${cA(I.y)}, ${cA(I.z)}, ${cA(I.w)})`;const g=I;return`vec4(${cA(g[0])}, ${cA(g[1])}, ${cA(g[2])}, ${cA(g[3])})`}case"mat2":case"mat2x2":{const g=I,Q=g instanceof Hs?g.elements:I,C=new Array(4).fill(0).map((i,E)=>cA(Q[E]));return`${A}(${C.join(", ")})`}case"mat2x3":{const g=I,Q=new Array(6).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat2x4":{const g=I,Q=new Array(8).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat3":case"mat3x3":{const g=I,Q=g instanceof VQ?g.elements:I,C=new Array(9).fill(0).map((i,E)=>cA(Q[E]));return`${A}(${C.join(", ")})`}case"mat3x2":{const g=I,Q=new Array(6).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat3x4":{const g=I,Q=new Array(12).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat4":case"mat4x4":{const g=I,Q=g instanceof fA?g.elements:I,C=new Array(16).fill(0).map((i,E)=>cA(Q[E]));return`${A}(${C.join(", ")})`}case"mat4x2":{const g=I,Q=new Array(8).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat4x3":{const g=I,Q=new Array(12).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function CB(B,A){return new py(B,A)}function uE(B){const A=String(B);if(Yy(B))return`${A}(false)`;if(_B(B))return`${A}(0.0)`;if(rQ(B))return`${A}(0)`;if(FQ(B))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}const Tw=" ";class xy{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=Tw,this.indent=A??Tw}nextSequence(){return this.sequence++}}class tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,statements:i,generate:E}){this.inTypes=A??{},this.outTypes=I??{},this.inputs=g??{},this.update=Q,this.globals=C,this.statements=i,this.generate=E??(({inputs:D,outputs:o,compile:s})=>{var t,w;return{globals:(t=this.globals)==null?void 0:t.call(this,{inputs:D,outputs:o,compile:s}),statements:(w=this.statements)==null?void 0:w.call(this,{inputs:D,outputs:o,compile:s})}})}get outputs(){const A={};for(const I in this.outTypes)A[I]=new BI(this,I);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:I,compile:g}){const Q=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(I).join(", ")})`],C=[];for(const o in I){const s=I[o];s&&!g.declares.has(s)&&(g.declares.add(s),C.push(o))}const{globals:i,statements:E,uniforms:D}=this.generate({inputs:A,outputs:I,compile:g});for(const o of i??[])g.globals.add(o);for(const o in D)g.uniforms[o]=D[o];this.update&&g.updaters.push(this.update);for(const o of C){const s=I[o];s&&(g.uniforms[s]||Q.push(`${Ow(s,this.outTypes[o])};`))}return E?.length&&(Q.push("{"),Q.push(...E.map(o=>g.indent+o)),Q.push("}")),Q}}class qy extends tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,construct:i}){super({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,generate:E=>this.generateBlock(E)}),this.construct=i}generateBlock({inputs:A,outputs:I,compile:g}){var Q,C;const i={},E={};for(const r in A)A[r]!=null&&(i[r]=new qE(this.inTypes[r],A[r]));for(const r in I)I[r]!=null&&(E[r]=new kQ(this.outTypes[r]));const D={roots:[]},o=this.construct(i,E,D);for(const r of((Q=this.globals)==null?void 0:Q.call(this,{inputs:A,outputs:I,compile:g}))??[])g.globals.add(r);const s=[],t=new Map;function w(r,c,y){let R=t.get(r);if(!R){R={sequence:g.nextSequence(),outNames:new Map,newOuts:new Set},t.set(r,R);for(const S in r.inputs){let n=r.inputs[S];for(;n;){if(n instanceof kQ){n instanceof BI&&w(n.dyno,n.key);break}if(typeof n.dynoOut!="function")throw new Error(`dynoOut is not a function for ${n.constructor.name}`);n=n.dynoOut()}}s.push(r)}c&&(y||R.newOuts.add(c),R.outNames.set(c,y??`${c}_${R.sequence}`))}for(const r of D.roots)w(r);for(const r in E){let c=o?.[r]??E[r];for(;c;){if(c instanceof kQ){c instanceof BI&&w(c.dyno,c.key,I[r]);break}c=c.dynoOut()}E[r]=c}const a=[];for(const r of s){const c={},y={};for(const n in r.inputs){let N=r.inputs[n];for(;N;){if(N instanceof kQ){if(N instanceof qE)c[n]=N.getLiteral();else if(N instanceof BI){const M=(C=t.get(N.dyno))==null?void 0:C.outNames.get(N.key);if(!M)throw new Error(`Source not found for ${N.dyno.constructor.name}.${N.key}`);c[n]=M}break}N=N.dynoOut()}}const R=t.get(r)??{outNames:new Map};for(const[n,N]of R.outNames.entries())y[n]=N;const S=r.compile({inputs:c,outputs:y,compile:g});a.push(S)}const G=[];for(const r in I)E[r]instanceof qE&&G.push(`${I[r]} = ${E[r].getLiteral()};`);return G.length>0&&a.push(G),{statements:a.flatMap((r,c)=>c===0?r:["",...r])}}}function wI(B,A,I,{update:g,globals:Q}={}){return new qy({inTypes:B,outTypes:A,construct:I,update:g,globals:Q})}function vD({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:i}){return new tA({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:i})}function Ow(B,A,I){const g=typeof A=="string"?A:A.type;if(!g)throw new Error(`Invalid DynoType: ${String(A)}`);return`${g} ${B}${I!=null?`[${I}]`:""}`}function FA(B){var A;let I=!1;const g=B.split(`
|
|
9285
|
+
`,bw=typeof self<"u"&&self.Blob&&new Blob([mw],{type:"text/javascript;charset=utf-8"});function ay(B){let A;try{if(A=bw&&(self.URL||self.webkitURL).createObjectURL(bw),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(mw),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}var QI=Uint8Array,jB=Uint16Array,ey=Int32Array,Pw=new QI([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Tw=new QI([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),hy=new QI([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ow=function(B,A){for(var I=new jB(31),g=0;g<31;++g)I[g]=A+=1<<B[g-1];for(var Q=new ey(I[30]),g=1;g<30;++g)for(var C=I[g];C<I[g+1];++C)Q[C]=C-I[g]<<5|g;return{b:I,r:Q}},Xw=Ow(Pw,2),vw=Xw.b,cy=Xw.r;vw[28]=258,cy[258]=28;for(var yy=Ow(Tw,0),Gy=yy.b,Zw=new jB(32768),lA=0;lA<32768;++lA){var CQ=(lA&43690)>>1|(lA&21845)<<1;CQ=(CQ&52428)>>2|(CQ&13107)<<2,CQ=(CQ&61680)>>4|(CQ&3855)<<4,Zw[lA]=((CQ&65280)>>8|(CQ&255)<<8)>>1}for(var zB=function(B,A,I){for(var g=B.length,Q=0,C=new jB(A);Q<g;++Q)B[Q]&&++C[B[Q]-1];var i=new jB(A);for(Q=1;Q<A;++Q)i[Q]=i[Q-1]+C[Q-1]<<1;var E;{E=new jB(1<<A);var D=15-A;for(Q=0;Q<g;++Q)if(B[Q])for(var o=Q<<4|B[Q],s=A-B[Q],t=i[B[Q]-1]++<<s,w=t|(1<<s)-1;t<=w;++t)E[Zw[t]>>D]=o}return E},_B=new QI(288),lA=0;lA<144;++lA)_B[lA]=8;for(var lA=144;lA<256;++lA)_B[lA]=9;for(var lA=256;lA<280;++lA)_B[lA]=7;for(var lA=280;lA<288;++lA)_B[lA]=8;for(var Vw=new QI(32),lA=0;lA<32;++lA)Vw[lA]=5;var Sy=zB(_B,9),ry=zB(Vw,5),TD=function(B){for(var A=B[0],I=1;I<B.length;++I)B[I]>A&&(A=B[I]);return A},cg=function(B,A,I){var g=A/8|0;return(B[g]|B[g+1]<<8)>>(A&7)&I},OD=function(B,A){var I=A/8|0;return(B[I]|B[I+1]<<8|B[I+2]<<16)>>(A&7)},Ww=function(B){return(B+7)/8|0},IB=function(B,A,I){return(A==null||A<0)&&(A=0),(I==null||I>B.length)&&(I=B.length),new QI(B.subarray(A,I))},Fy=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],YI=function(B,A,I){var g=new Error(A||Fy[B]);if(g.code=B,Error.captureStackTrace&&Error.captureStackTrace(g,YI),!I)throw g;return g},jw=function(B,A,I,g){var Q=B.length,C=g?g.length:0;if(!Q||A.f&&!A.l)return I||new QI(0);var i=!I,E=i||A.i!=2,D=A.i;i&&(I=new QI(Q*3));var o=function(xA){var aA=I.length;if(xA>aA){var DA=new QI(Math.max(aA*2,xA));DA.set(I),I=DA}},s=A.f||0,t=A.p||0,w=A.b||0,a=A.l,G=A.d,S=A.m,c=A.n,y=Q*8;do{if(!a){s=cg(B,t,1);var F=cg(B,t+1,3);if(t+=3,F)if(F==1)a=Sy,G=ry,S=9,c=5;else if(F==2){var R=cg(B,t,31)+257,M=cg(B,t+10,15)+4,n=R+cg(B,t+5,31)+1;t+=14;for(var N=new QI(n),J=new QI(19),L=0;L<M;++L)J[hy[L]]=cg(B,t+L*3,7);t+=M*3;for(var H=TD(J),Y=(1<<H)-1,K=zB(J,H),L=0;L<n;){var l=K[cg(B,t,Y)];t+=l&15;var p=l>>4;if(p<16)N[L++]=p;else{var u=0,b=0;for(p==16?(b=3+cg(B,t,3),t+=2,u=N[L-1]):p==17?(b=3+cg(B,t,7),t+=3):p==18&&(b=11+cg(B,t,127),t+=7);b--;)N[L++]=u}}var O=N.subarray(0,R),W=N.subarray(R);S=TD(O),c=TD(W),a=zB(O,S),G=zB(W,c)}else YI(1);else{var p=Ww(t)+4,T=B[p-4]|B[p-3]<<8,j=p+T;if(j>Q){D&&YI(0);break}E&&o(w+T),I.set(B.subarray(p,j),w),A.b=w+=T,A.p=t=j*8,A.f=s;continue}if(t>y){D&&YI(0);break}}E&&o(w+131072);for(var EA=(1<<S)-1,wA=(1<<c)-1,iA=t;;iA=t){var u=a[OD(B,t)&EA],IA=u>>4;if(t+=u&15,t>y){D&&YI(0);break}if(u||YI(2),IA<256)I[w++]=IA;else if(IA==256){iA=t,a=null;break}else{var BA=IA-254;if(IA>264){var L=IA-257,AA=Pw[L];BA=cg(B,t,(1<<AA)-1)+vw[L],t+=AA}var $=G[OD(B,t)&wA],z=$>>4;$||YI(3),t+=$&15;var W=Gy[z];if(z>3){var AA=Tw[z];W+=OD(B,t)&(1<<AA)-1,t+=AA}if(t>y){D&&YI(0);break}E&&o(w+131072);var LA=w+BA;if(w<W){var MA=C-W,NA=Math.min(W,LA);for(MA+w<0&&YI(3);w<NA;++w)I[w]=g[MA+w]}for(;w<LA;++w)I[w]=I[w-W]}}A.l=a,A.p=iA,A.b=w,A.f=s,a&&(s=1,A.m=S,A.d=G,A.n=c)}while(!s);return w!=I.length&&i?IB(I,0,w):I.subarray(0,w)},Ry=new QI(0),Yg=function(B,A){return B[A]|B[A+1]<<8},yg=function(B,A){return(B[A]|B[A+1]<<8|B[A+2]<<16|B[A+3]<<24)>>>0},XD=function(B,A){return yg(B,A)+yg(B,A+4)*4294967296},ky=function(B){(B[0]!=31||B[1]!=139||B[2]!=8)&&YI(6,"invalid gzip data");var A=B[3],I=10;A&4&&(I+=(B[10]|B[11]<<8)+2);for(var g=(A>>3&1)+(A>>4&1);g>0;g-=!B[I++]);return I+(A&2)},vD=function(){function B(A,I){typeof A=="function"&&(I=A,A={}),this.ondata=I;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new QI(32768),this.p=new QI(0),g&&this.o.set(g)}return B.prototype.e=function(A){if(this.ondata||YI(5),this.d&&YI(4),!this.p.length)this.p=A;else if(A.length){var I=new QI(this.p.length+A.length);I.set(this.p),I.set(A,this.p.length),this.p=I}},B.prototype.c=function(A){this.s.i=+(this.d=A||!1);var I=this.s.b,g=jw(this.p,this.s,this.o);this.ondata(IB(g,I,this.s.b),this.d),this.o=IB(g,this.s.b-32768),this.s.b=this.o.length,this.p=IB(this.p,this.s.p/8|0),this.s.p&=7},B.prototype.push=function(A,I){this.e(A),this.c(I)},B}();function ny(B,A){return jw(B,{i:2},A&&A.out,A&&A.dictionary)}var My=function(){function B(A,I){this.v=1,this.r=0,vD.call(this,A,I)}return B.prototype.push=function(A,I){if(vD.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),Q=g.length>3?ky(g):4;if(Q>g.length){if(!I)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(Q),this.v=0}vD.prototype.c.call(this,I),this.s.f&&!this.s.l&&!I&&(this.v=Ww(this.s.p)+9,this.s={i:0},this.o=new QI(0),this.push(new QI(0),I))},B}(),ZD=typeof TextDecoder<"u"&&new TextDecoder,Ny=0;try{ZD.decode(Ry,{stream:!0}),Ny=1}catch{}var Jy=function(B){for(var A="",I=0;;){var g=B[I++],Q=(g>127)+(g>223)+(g>239);if(I+Q>B.length)return{s:A,r:IB(B,I-1)};Q?Q==3?(g=((g&15)<<18|(B[I++]&63)<<12|(B[I++]&63)<<6|B[I++]&63)-65536,A+=String.fromCharCode(55296|g>>10,56320|g&1023)):Q&1?A+=String.fromCharCode((g&31)<<6|B[I++]&63):A+=String.fromCharCode((g&15)<<12|(B[I++]&63)<<6|B[I++]&63):A+=String.fromCharCode(g)}};function Uy(B,A){if(A){for(var I="",g=0;g<B.length;g+=16384)I+=String.fromCharCode.apply(null,B.subarray(g,g+16384));return I}else{if(ZD)return ZD.decode(B);var Q=Jy(B),C=Q.s,I=Q.r;return I.length&&YI(8),C}}var Ly=function(B,A){return A+30+Yg(B,A+26)+Yg(B,A+28)},Hy=function(B,A,I){var g=Yg(B,A+28),Q=Uy(B.subarray(A+46,A+46+g),!(Yg(B,A+8)&2048)),C=A+46+g,i=yg(B,A+20),E=I&&i==4294967295?Yy(B,C):[i,yg(B,A+24),yg(B,A+42)],D=E[0],o=E[1],s=E[2];return[Yg(B,A+10),D,o,Q,C+Yg(B,A+30)+Yg(B,A+32),s]},Yy=function(B,A){for(;Yg(B,A)!=1;A+=4+Yg(B,A+2));return[XD(B,A+12),XD(B,A+4),XD(B,A+20)]};function dy(B,A){for(var I={},g=B.length-22;yg(B,g)!=101010256;--g)(!g||B.length-g>65558)&&YI(13);var Q=Yg(B,g+8);if(!Q)return{};var C=yg(B,g+16),i=C==4294967295||Q==65535;if(i){var E=yg(B,g-12);i=yg(B,E)==101075792,i&&(Q=yg(B,E+32),C=yg(B,E+48))}for(var D=A&&A.filter,o=0;o<Q;++o){var s=Hy(B,C,i),t=s[0],w=s[1],a=s[2],G=s[3],S=s[4],c=s[5],y=Ly(B,c);C=S,(!D||D({name:G,size:w,originalSize:a,compression:t}))&&(t?t==8?I[G]=ny(B.subarray(y,y+w),{out:new QI(a)}):YI(14,"unknown compression type "+t):I[G]=IB(B,y,y+w))}return I}const uI=-12,mI=9,Ky=-30,VD=Math.exp(Ky),ly=11,fy=11,_=1<<ly,Gg=1<<fy,py=1;var bI=(B=>(B.PLY="ply",B.SPZ="spz",B.SPLAT="splat",B.KSPLAT="ksplat",B.PCSOGS="pcsogs",B.PCSOGSZIP="pcsogszip",B.RAD="rad",B))(bI||{});const qE={rgbMin:0,rgbMax:1,lnScaleMin:uI,lnScaleMax:mI,sh1Max:1,sh2Max:1,sh3Max:1,lodOpacity:!1};function xy(B){return B==="bool"||B==="bvec2"||B==="bvec3"||B==="bvec4"}function rQ(B){return B==="int"||B==="ivec2"||B==="ivec3"||B==="ivec4"}function FQ(B){return B==="uint"||B==="uvec2"||B==="uvec3"||B==="uvec4"}function qy(B){return B==="float"||B==="vec2"||B==="vec3"||B==="vec4"}function uy(B){return B==="mat2"||B==="mat2x2"||B==="mat2x3"||B==="mat2x4"||B==="mat3"||B==="mat3x2"||B==="mat3x3"||B==="mat3x4"||B==="mat4"||B==="mat4x2"||B==="mat4x3"||B==="mat4x4"}function $B(B){return qy(B)||uy(B)}function gB(B){return B==="mat2"||B==="mat2x2"}function QB(B){return B==="mat3"||B==="mat3x3"}function BB(B){return B==="mat4"||B==="mat4x4"}function my(B){switch(B){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${B}`)}}function by(B){switch(B){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${B}`)}}function VA(B){return Math.trunc(B).toString()}function WA(B){return`${Math.max(0,Math.trunc(B)).toString()}u`}function cA(B){return B===Number.POSITIVE_INFINITY?"INFINITY":B===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(B)?B.toFixed(1):B.toString()}function RQ(B){return B instanceof kQ?B.type:B.dynoOut().type}class kQ{constructor(A){this.__isDynoValue=!0,this.type=A}}class BI extends kQ{constructor(A,I){super(A.outTypes[I]),this.dyno=A,this.key=I}}class uE extends kQ{constructor(A,I){super(A),this.literal=I}getLiteral(){return this.literal}}class Py extends uE{constructor(A,I){super(A,""),this.value=I}getLiteral(){const{type:A,value:I}=this;switch(A){case"bool":return I?"true":"false";case"uint":return WA(I);case"int":return VA(I);case"float":return cA(I);case"bvec2":{const g=I;return`bvec2(${g[0]}, ${g[1]})`}case"uvec2":{if(I instanceof JI)return`uvec2(${WA(I.x)}, ${WA(I.y)})`;const g=I;return`uvec2(${WA(g[0])}, ${WA(g[1])})`}case"ivec2":{if(I instanceof JI)return`ivec2(${VA(I.x)}, ${VA(I.y)})`;const g=I;return`ivec2(${VA(g[0])}, ${VA(g[1])})`}case"vec2":{if(I instanceof JI)return`vec2(${cA(I.x)}, ${cA(I.y)})`;const g=I;return`vec2(${cA(g[0])}, ${cA(g[1])})`}case"bvec3":{const g=I;return`bvec3(${g[0]}, ${g[1]}, ${g[2]})`}case"uvec3":{if(I instanceof q)return`uvec3(${WA(I.x)}, ${WA(I.y)}, ${WA(I.z)})`;const g=I;return`uvec3(${WA(g[0])}, ${WA(g[1])}, ${WA(g[2])})`}case"ivec3":{if(I instanceof q)return`ivec3(${VA(I.x)}, ${VA(I.y)}, ${VA(I.z)})`;const g=I;return`ivec3(${VA(g[0])}, ${VA(g[1])}, ${VA(g[2])})`}case"vec3":{if(I instanceof q)return`vec3(${cA(I.x)}, ${cA(I.y)}, ${cA(I.z)})`;const g=I;return`vec3(${cA(g[0])}, ${cA(g[1])}, ${cA(g[2])})`}case"bvec4":{const g=I;return`bvec4(${g[0]}, ${g[1]}, ${g[2]}, ${g[3]})`}case"uvec4":{if(I instanceof NI)return`uvec4(${WA(I.x)}, ${WA(I.y)}, ${WA(I.z)}, ${WA(I.w)})`;const g=I;return`uvec4(${WA(g[0])}, ${WA(g[1])}, ${WA(g[2])}, ${WA(g[3])})`}case"ivec4":{if(I instanceof NI)return`ivec4(${VA(I.x)}, ${VA(I.y)}, ${VA(I.z)}, ${VA(I.w)})`;const g=I;return`ivec4(${VA(g[0])}, ${VA(g[1])}, ${VA(g[2])}, ${VA(g[3])})`}case"vec4":{if(I instanceof NI)return`vec4(${cA(I.x)}, ${cA(I.y)}, ${cA(I.z)}, ${cA(I.w)})`;if(I instanceof UI)return`vec4(${cA(I.x)}, ${cA(I.y)}, ${cA(I.z)}, ${cA(I.w)})`;const g=I;return`vec4(${cA(g[0])}, ${cA(g[1])}, ${cA(g[2])}, ${cA(g[3])})`}case"mat2":case"mat2x2":{const g=I,Q=g instanceof Ks?g.elements:I,C=new Array(4).fill(0).map((i,E)=>cA(Q[E]));return`${A}(${C.join(", ")})`}case"mat2x3":{const g=I,Q=new Array(6).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat2x4":{const g=I,Q=new Array(8).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat3":case"mat3x3":{const g=I,Q=g instanceof VQ?g.elements:I,C=new Array(9).fill(0).map((i,E)=>cA(Q[E]));return`${A}(${C.join(", ")})`}case"mat3x2":{const g=I,Q=new Array(6).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat3x4":{const g=I,Q=new Array(12).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat4":case"mat4x4":{const g=I,Q=g instanceof fA?g.elements:I,C=new Array(16).fill(0).map((i,E)=>cA(Q[E]));return`${A}(${C.join(", ")})`}case"mat4x2":{const g=I,Q=new Array(8).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}case"mat4x3":{const g=I,Q=new Array(12).fill(0).map((C,i)=>cA(g[i]));return`${A}(${Q.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function CB(B,A){return new Py(B,A)}function mE(B){const A=String(B);if(xy(B))return`${A}(false)`;if($B(B))return`${A}(0.0)`;if(rQ(B))return`${A}(0)`;if(FQ(B))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}const zw=" ";class Ty{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=zw,this.indent=A??zw}nextSequence(){return this.sequence++}}class tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,statements:i,generate:E}){this.inTypes=A??{},this.outTypes=I??{},this.inputs=g??{},this.update=Q,this.globals=C,this.statements=i,this.generate=E??(({inputs:D,outputs:o,compile:s})=>{var t,w;return{globals:(t=this.globals)==null?void 0:t.call(this,{inputs:D,outputs:o,compile:s}),statements:(w=this.statements)==null?void 0:w.call(this,{inputs:D,outputs:o,compile:s})}})}get outputs(){const A={};for(const I in this.outTypes)A[I]=new BI(this,I);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:I,compile:g}){const Q=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(I).join(", ")})`],C=[];for(const o in I){const s=I[o];s&&!g.declares.has(s)&&(g.declares.add(s),C.push(o))}const{globals:i,statements:E,uniforms:D}=this.generate({inputs:A,outputs:I,compile:g});for(const o of i??[])g.globals.add(o);for(const o in D)g.uniforms[o]=D[o];this.update&&g.updaters.push(this.update);for(const o of C){const s=I[o];s&&(g.uniforms[s]||Q.push(`${_w(s,this.outTypes[o])};`))}return E?.length&&(Q.push("{"),Q.push(...E.map(o=>g.indent+o)),Q.push("}")),Q}}class Oy extends tA{constructor({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,construct:i}){super({inTypes:A,outTypes:I,inputs:g,update:Q,globals:C,generate:E=>this.generateBlock(E)}),this.construct=i}generateBlock({inputs:A,outputs:I,compile:g}){var Q,C;const i={},E={};for(const S in A)A[S]!=null&&(i[S]=new uE(this.inTypes[S],A[S]));for(const S in I)I[S]!=null&&(E[S]=new kQ(this.outTypes[S]));const D={roots:[]},o=this.construct(i,E,D);for(const S of((Q=this.globals)==null?void 0:Q.call(this,{inputs:A,outputs:I,compile:g}))??[])g.globals.add(S);const s=[],t=new Map;function w(S,c,y){let F=t.get(S);if(!F){F={sequence:g.nextSequence(),outNames:new Map,newOuts:new Set},t.set(S,F);for(const R in S.inputs){let M=S.inputs[R];for(;M;){if(M instanceof kQ){M instanceof BI&&w(M.dyno,M.key);break}if(typeof M.dynoOut!="function")throw new Error(`dynoOut is not a function for ${M.constructor.name}`);M=M.dynoOut()}}s.push(S)}c&&(y||F.newOuts.add(c),F.outNames.set(c,y??`${c}_${F.sequence}`))}for(const S of D.roots)w(S);for(const S in E){let c=o?.[S]??E[S];for(;c;){if(c instanceof kQ){c instanceof BI&&w(c.dyno,c.key,I[S]);break}c=c.dynoOut()}E[S]=c}const a=[];for(const S of s){const c={},y={};for(const M in S.inputs){let n=S.inputs[M];for(;n;){if(n instanceof kQ){if(n instanceof uE)c[M]=n.getLiteral();else if(n instanceof BI){const N=(C=t.get(n.dyno))==null?void 0:C.outNames.get(n.key);if(!N)throw new Error(`Source not found for ${n.dyno.constructor.name}.${n.key}`);c[M]=N}break}n=n.dynoOut()}}const F=t.get(S)??{outNames:new Map};for(const[M,n]of F.outNames.entries())y[M]=n;const R=S.compile({inputs:c,outputs:y,compile:g});a.push(R)}const G=[];for(const S in I)E[S]instanceof uE&&G.push(`${I[S]} = ${E[S].getLiteral()};`);return G.length>0&&a.push(G),{statements:a.flatMap((S,c)=>c===0?S:["",...S])}}}function wI(B,A,I,{update:g,globals:Q}={}){return new Oy({inTypes:B,outTypes:A,construct:I,update:g,globals:Q})}function WD({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:i}){return new tA({inTypes:B,outTypes:A,inputs:I,update:g,globals:Q,statements:C,generate:i})}function _w(B,A,I){const g=typeof A=="string"?A:A.type;if(!g)throw new Error(`Invalid DynoType: ${String(A)}`);return`${g} ${B}${I!=null?`[${I}]`:""}`}function FA(B){var A;let I=!1;const g=B.split(`
|
|
9286
9286
|
`).map(i=>{const E=i.trimEnd();return I?E:E.length>0?(I=!0,E):null}).filter(i=>i!=null);for(;g.length>0&&g[g.length-1].length===0;)g.pop();if(g.length===0)return[];const Q=(A=g[0].match(/^\s*/))==null?void 0:A[0];if(!Q)return g;const C=new RegExp(`^${Q}`);return g.map(i=>i.replace(C,""))}function qA(B){return FA(B).join(`
|
|
9287
|
-
`)}class bE extends tA{constructor({a:A,outKey:I,outTypeFunc:g}){const Q={a:RQ(A)},C=g(RQ(A)),i={[I]:C};super({inTypes:Q,outTypes:i,inputs:{a:A}}),this.outKey=I}dynoOut(){return new BI(this,this.outKey)}}class
|
|
9287
|
+
`)}class bE extends tA{constructor({a:A,outKey:I,outTypeFunc:g}){const Q={a:RQ(A)},C=g(RQ(A)),i={[I]:C};super({inTypes:Q,outTypes:i,inputs:{a:A}}),this.outKey=I}dynoOut(){return new BI(this,this.outKey)}}class jD extends tA{constructor({a:A,b:I,outKey:g,outTypeFunc:Q}){const C={a:RQ(A),b:RQ(I)},i=Q(RQ(A),RQ(I)),E={[g]:i};super({inTypes:C,outTypes:E,inputs:{a:A,b:I}}),this.outKey=g}dynoOut(){return new BI(this,this.outKey)}}const Xy=Number.parseInt(zi),vy=Xy>=179,AC=new Float32Array(1),PE=new Uint32Array(AC.buffer),zD="Float16Array"in globalThis,_D=zD?new globalThis.Float16Array(1):null,$w=new Uint16Array(_D?.buffer);function $D(B){return AC[0]=B,PE[0]}function Ao(B){return PE[0]=B,AC[0]}const Sg=zD?Zy:Vy,rg=zD?Wy:jy;function Zy(B){return _D[0]=B,$w[0]}function Vy(B){AC[0]=B;const A=PE[0],I=A>>31&1,g=A>>23&255,Q=A&8388607,C=I<<15;if(g===255)return Q!==0?C|32767:C|31744;const i=g-127+15;if(i>=31)return C|31744;if(i<=0){if(i<-10)return C;const D=(Q|8388608)>>1-i+13;return C|D}const E=Q>>13;return C|i<<10|E}function Wy(B){return $w[0]=B,_D[0]}function jy(B){const A=B>>15&1,I=B>>10&31,g=B&1023;let Q;if(I===0)if(g===0)Q=A<<31;else{let C=g,i=-14;for(;(C&1024)===0;)C<<=1,i--;C&=1023;const E=i+127,D=C<<13;Q=A<<31|E<<23|D}else if(I===31)g===0?Q=A<<31|2139095040:Q=A<<31|2143289344;else{const C=I-15+127,i=g<<13;Q=A<<31|C<<23|i}return PE[0]=Q,AC[0]}function IC(B){return Math.max(0,Math.min(255,Math.round(B*255)))}function Aa(B){const A=[],I=new Set;function g(Q){Q&&typeof Q=="object"&&!I.has(Q)&&(I.add(Q),Q instanceof ArrayBuffer?A.push(Q):ArrayBuffer.isView(Q)?A.push(Q.buffer):Array.isArray(Q)?Q.forEach(g):Object.values(Q).forEach(g))}return g(B),A}class zy{constructor({allocate:A,dispose:I,valid:g}){this.items=[],this.allocate=A,this.dispose=I,this.valid=g}alloc(A){for(;;){const I=this.items.pop();if(!I)break;if(this.valid(I,A))return I;this.dispose&&this.dispose(I)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function Ia(B,A,I,g,Q,C,i,E,D,o,s,t,w,a,G,S){const c=A*4,[y,F]=B;y[c]=$D(I),y[c+1]=$D(g),y[c+2]=$D(Q),y[c+3]=Sg(w),F[c]=Sg(a)|Sg(G)<<16,F[c+1]=Sg(S)|Sg(Math.log(C))<<16,F[c+2]=Sg(Math.log(i))|Sg(Math.log(E))<<16,F[c+3]=sG(D,o,s,t)}function Io(B,A){const I=ga,g=A*4,[Q,C]=B;return I.center.x=Ao(Q[g]),I.center.y=Ao(Q[g+1]),I.center.z=Ao(Q[g+2]),I.opacity=rg(Q[g+3]&65535),I.color.r=rg(C[g]&65535),I.color.g=rg(C[g]>>>16),I.color.b=rg(C[g+1]&65535),I.scales.x=Math.exp(rg(C[g+1]>>>16)),I.scales.y=Math.exp(rg(C[g+2]&65535)),I.scales.z=Math.exp(rg(C[g+2]>>>16)),tG(C[g+3],I.quaternion),I}function go(B,A,I,g,Q,C,i,E,D,o,s,t,w,a,G,S,c){const y=c?.rgbMin??0,F=(c?.rgbMax??1)-y,R=IC((a-y)/F),M=IC((G-y)/F),n=IC((S-y)/F),N=IC(c?.lodOpacity?.5*w:w),J=DG(_y.set(D,o,s,t)),L=J&255,H=J>>>8&255,Y=J>>>16&255,K=c?.lnScaleMin??uI,l=254/((c?.lnScaleMax??mI)-K),p=C<VD?0:Math.min(255,Math.max(1,Math.round((Math.log(C)-K)*l)+1)),u=i<VD?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-K)*l)+1)),b=E<VD?0:Math.min(255,Math.max(1,Math.round((Math.log(E)-K)*l)+1)),O=Sg(I),W=Sg(g),T=Sg(Q),j=A*4;B[j]=R|M<<8|n<<16|N<<24,B[j+1]=O|W<<16,B[j+2]=T|L<<16|H<<24,B[j+3]=p|u<<8|b<<16|Y<<24}const _y=new UI,$y=new q,AG=new q,IG=new UI,gG=new hQ,ga={center:$y,scales:AG,quaternion:IG,color:gG,opacity:0};function TE(B,A,I){const g=ga,Q=A*4,C=B[Q],i=B[Q+1],E=B[Q+2],D=B[Q+3],o=I?.rgbMin??0,s=(I?.rgbMax??1)-o;g.color.set(o+(C&255)/255*s,o+(C>>>8&255)/255*s,o+(C>>>16&255)/255*s),g.opacity=(C>>>24&255)/255,I?.lodOpacity&&(g.opacity=2*g.opacity),g.center.set(rg(i&65535),rg(i>>>16&65535),rg(E&65535));const t=I?.lnScaleMin??uI,w=((I?.lnScaleMax??mI)-t)/254,a=D&255;g.scales.x=a===0?0:Math.exp(t+(a-1)*w);const G=D>>>8&255;g.scales.y=G===0?0:Math.exp(t+(G-1)*w);const S=D>>>16&255;g.scales.z=S===0?0:Math.exp(t+(S-1)*w);const c=E>>>16&65535|D>>>8&16711680;return oG(c,g.quaternion),g}function UA(B){const A=_,I=Math.max(py,Math.min(Gg,Math.ceil(B/A))),g=Math.ceil(B/(A*I)),Q=A*I*g;return{width:A,height:I,depth:g,maxSplats:Q}}function OE(){return navigator.platform.toLowerCase().startsWith("win")?!1:navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function Qa(){return/Android/.test(navigator.userAgent)||/Tizen/.test(navigator.userAgent)}function Ba(){return!!navigator.xr&&/Oculus/.test(navigator.userAgent)}function XE(){return/iPhone|iPad/.test(navigator.userAgent)}function Ca(){return!!navigator.xr&&XE()&&/Safari/.test(navigator.userAgent)&&OE()}function Ea(B){const A=new Wi(B.autoStart);return A.startTime=B.startTime,A.oldTime=B.oldTime,A.elapsedTime=B.elapsedTime,A.running=B.running,A}const QG=qA(`
|
|
9288
9288
|
precision highp float;
|
|
9289
9289
|
|
|
9290
9290
|
in vec3 position;
|
|
@@ -9292,7 +9292,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
9292
9292
|
void main() {
|
|
9293
9293
|
gl_Position = vec4(position.xy, 0.0, 1.0);
|
|
9294
9294
|
}
|
|
9295
|
-
`);function
|
|
9295
|
+
`);function BG(B){const A=new q;for(const I of B)A.add(I);return A.divideScalar(B.length)}function CG(B){if(B.length===0)return new UI;const A=B[0].clone();for(let I=1;I<B.length;I++)B[I].dot(B[0])<0?(A.x-=B[I].x,A.y-=B[I].y,A.z-=B[I].z,A.w-=B[I].w):(A.x+=B[I].x,A.y+=B[I].y,A.z+=B[I].z,A.w+=B[I].w);return A.normalize()}function EG(B,A){const[I,g]=[new q,new UI],[Q,C]=[new q,new UI];B.decompose(I,g,new q),A.decompose(Q,C,new q);const i=I.distanceTo(Q),E=Math.abs(g.dot(C));return{distance:i,coorient:E}}function Qo({matrix1:B,matrix2:A,maxDistance:I,minCoorient:g}){const{distance:Q,coorient:C}=EG(B,A);return Q<=I&&(g==null||C>=g)}const iG=new UI,Bo=new q;function DG(B){const A=iG.copy(B).normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const I=2*Math.acos(A.w),g=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),Q=g<1e-6?Bo.set(1,0,0):Bo.set(A.x,A.y,A.z).divideScalar(g),C=Math.abs(Q.x)+Math.abs(Q.y)+Math.abs(Q.z);let i=Q.x/C,E=Q.y/C;if(Q.z<0){const w=i;i=(1-Math.abs(E))*(i>=0?1:-1),E=(1-Math.abs(w))*(E>=0?1:-1)}const D=i*.5+.5,o=E*.5+.5,s=Math.round(D*255),t=Math.round(o*255);return Math.round(I*(255/Math.PI))<<16|t<<8|s}function oG(B,A){const I=B&255,g=B>>>8&255,Q=B>>>16&255,C=I/255,i=g/255;let E=(C-.5)*2,D=(i-.5)*2;const o=1-(Math.abs(E)+Math.abs(D)),s=Math.max(-o,0);E+=E>=0?-s:s,D+=D>=0?-s:s;const t=Bo.set(E,D,o).normalize(),w=Q/255*Math.PI*.5,a=Math.sin(w),G=Math.cos(w);return A.set(t.x*a,t.y*a,t.z*a,G),A}function sG(B,A,I,g){const Q=Math.sqrt(B*B+A*A+I*I+g*g),C=(g<0?-B:B)/Q,i=(g<0?-A:A)/Q,E=(g<0?-I:I)/Q,D=(g<0?-g:g)/Q,o=2*Math.acos(D),s=Math.sqrt(C*C+i*i+E*E),t=s<1e-6?1:C/s,w=s<1e-6?0:i/s,a=s<1e-6?0:E/s,G=Math.abs(t)+Math.abs(w)+Math.abs(a);let S=t/G,c=w/G;if(a<0){const n=S;S=(1-Math.abs(c))*(S>=0?1:-1),c=(1-Math.abs(n))*(c>=0?1:-1)}const y=S*.5+.5,F=c*.5+.5,R=Math.round(y*1023),M=Math.round(F*1023);return Math.round(o*(4095/Math.PI))<<20|M<<10|R}function tG(B,A){const I=B&1023,g=B>>>10&1023,Q=B>>>20&4095,C=I/1023,i=g/1023;let E=(C-.5)*2,D=(i-.5)*2;const o=1-(Math.abs(E)+Math.abs(D)),s=Math.max(-o,0);E+=E>=0?-s:s,D+=D>=0?-s:s;const t=Math.sqrt(E*E+D*D+o*o),w=t<1e-6?0:E/t,a=t<1e-6?0:D/t,G=t<1e-6?0:o/t,S=Q/4095*Math.PI*.5,c=Math.sin(S),y=Math.cos(S);return A.set(w*c,a*c,G*c,y),A}function wG(B,A){const I=[];let g=0,Q=null;const C=new My((D,o)=>{if(I.push(D),g+=D.length,o||g>=A){const s=new Uint8Array(g);let t=0;for(const w of I)s.set(w,t),t+=w.length;Q=s.slice(0,A)}}),i=1024;let E=0;for(;Q==null&&E<B.length;){const D=B.slice(E,E+i);C.push(D,!1),E+=i}if(Q==null&&(C.push(new Uint8Array,!0),Q==null))throw new Error("Failed to decompress partial gzip");return Q}class aG{constructor(){this.messages={},this.messageIdNext=0,this.worker=new ay,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),I=new Promise((g,Q)=>{this.messages[A]={resolve:g,reject:Q}});return{id:A,promise:I}}onMessage(A){const{id:I,result:g,error:Q}=A.data,C=this.messages[I];C&&(delete this.messages[I],Q?C.reject(Q):C.resolve(g))}async call(A,I){const{id:g,promise:Q}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:I,id:g},{transfer:Aa(I)}),Q}}let ia=4,vE=0;const Da=[],oa=[];async function eG(){const B=Da.shift();if(B)return B;if(vE<ia){const A=new aG;return vE+=1,A}return new Promise(A=>{oa.push(A)})}function hG(B){if(vE>ia){vE-=1;return}const A=oa.shift();if(A){A(B);return}Da.push(B)}async function cG(B){const A=await eG();try{return await B(A)}finally{hG(A)}}const sa=`(function() {
|
|
9296
9296
|
"use strict";
|
|
9297
9297
|
class ChunkDecoder {
|
|
9298
9298
|
static __wrap(ptr) {
|
|
@@ -10843,7 +10843,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10843
10843
|
initialize().catch(console.error);
|
|
10844
10844
|
})();
|
|
10845
10845
|
//# sourceMappingURL=worker-CiGpey09.js.map
|
|
10846
|
-
`,
|
|
10846
|
+
`,ta=typeof self<"u"&&self.Blob&&new Blob([sa],{type:"text/javascript;charset=utf-8"});function yG(B){let A;try{if(A=ta&&(self.URL||self.webkitURL).createObjectURL(ta),!A)throw"";const I=new Worker(A,{name:B?.name});return I.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(sa),{name:B?.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}const wa=class Le{constructor(){this.queue=null,this.messages={},this.worker=new yG,this.worker.onmessage=A=>this.onMessage(A)}onMessage(A){var I;const{id:g,result:Q,error:C,status:i}=A.data,E=this.messages[g];E&&(C!==void 0?(delete this.messages[g],E.reject(C)):i!==void 0?(I=E.onStatus)==null||I.call(E,i):(delete this.messages[g],E.resolve(Q)))}tryExclusive(A){return this.queue==null?this.exclusive(A):null}async exclusive(A){const I=this.queue;I!=null?await new Promise(g=>{I.push(()=>g(void 0))}):this.queue=[];try{return await A(this)}finally{this.queue!=null&&(this.queue.length===0?this.queue=null:this.queue.shift()())}}async call(A,I,g={}){const Q=++Le.currentId,C=new Promise((i,E)=>{this.messages[Q]={resolve:i,reject:E,onStatus:g.onStatus}});return this.worker.postMessage({id:Q,name:A,args:I},{transfer:Aa(I)}),await C}dispose(){this.worker.terminate();const A=Object.values(this.messages);this.messages={};for(const I of A)I.reject(new Error("Worker terminate"))}};wa.currentId=0;let Co=wa;class GG{constructor(A=4){this.numWorkers=0,this.freelist=[],this.queue=[],this.maxWorkers=A}async withWorker(A){const I=await this.allocWorker();try{return await A(I)}finally{this.freeWorker(I)}}async allocWorker(){const A=this.freelist.pop();if(A)return A;if(this.numWorkers<this.maxWorkers){const I=new Co;return this.numWorkers+=1,I}return new Promise(I=>{this.queue.push(I)})}freeWorker(A){if(this.numWorkers>this.maxWorkers){this.numWorkers-=1;return}const I=this.queue.shift();if(I){I(A);return}this.freelist.push(A)}}const ZE=new GG,RA={type:"Gsplat"},Ag={type:"CovSplat"},VE={type:"PackedSplats"},aa={type:"ExtSplats"},gC=(B,A)=>new FG({packedSplats:B,index:A}),SG=(B,A,I,g)=>new RG({packedSplats:B,index:A,base:I,count:g}),rG=(B,A)=>new nG({extSplats:B,index:A}),Eo=B=>new MG({gsplat:B}),Ig=B=>new NG({gsplat:B}),EB=({gsplat:B,flags:A,index:I,center:g,scales:Q,quaternion:C,rgba:i,rgb:E,opacity:D,x:o,y:s,z:t,r:w,g:a,b:G})=>new JG({gsplat:B,flags:A,index:I,center:g,scales:Q,quaternion:C,rgba:i,rgb:E,opacity:D,x:o,y:s,z:t,r:w,g:a,b:G}),ea=(B,{scale:A,rotate:I,translate:g,recolor:Q})=>new UG({gsplat:B,scale:A,rotate:I,translate:g,recolor:Q}),ha=B=>new YG({index:B}),ca=B=>new dG({index:B}),PI=qA(`
|
|
10847
10847
|
struct Gsplat {
|
|
10848
10848
|
vec3 center;
|
|
10849
10849
|
uint flags;
|
|
@@ -10870,14 +10870,14 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10870
10870
|
bool isCovSplatActive(uint flags) {
|
|
10871
10871
|
return (flags & GSPLAT_FLAG_ACTIVE) != 0u;
|
|
10872
10872
|
}
|
|
10873
|
-
`),
|
|
10873
|
+
`),io=qA(`
|
|
10874
10874
|
struct PackedSplats {
|
|
10875
10875
|
usampler2DArray textureArray;
|
|
10876
10876
|
int numSplats;
|
|
10877
10877
|
vec4 rgbMinMaxLnScaleMinMax;
|
|
10878
10878
|
bool lodOpacity;
|
|
10879
10879
|
};
|
|
10880
|
-
`),
|
|
10880
|
+
`),ya=qA(`
|
|
10881
10881
|
bool readPackedArray(usampler2DArray texture, int numSplats, vec4 rgbMinMaxLnScaleMinMax, int index, out Gsplat gsplat) {
|
|
10882
10882
|
if ((index >= 0) && (index < numSplats)) {
|
|
10883
10883
|
uvec4 packedData = texelFetch(texture, splatTexCoord(index), 0);
|
|
@@ -10887,7 +10887,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10887
10887
|
return false;
|
|
10888
10888
|
}
|
|
10889
10889
|
}
|
|
10890
|
-
`);class
|
|
10890
|
+
`);class FG extends tA{constructor({packedSplats:A,index:I}){super({inTypes:{packedSplats:VE,index:"int"},outTypes:{gsplat:RA},inputs:{packedSplats:A,index:I},globals:()=>[PI,io,ya],statements:({inputs:g,outputs:Q})=>{const{gsplat:C}=Q;if(!C)return[];const{packedSplats:i,index:E}=g;let D;return i&&E?D=FA(`
|
|
10891
10891
|
${C}.flags = 0u;
|
|
10892
10892
|
if (readPackedArray(${i}.textureArray, ${i}.numSplats, ${i}.rgbMinMaxLnScaleMinMax, ${E}, ${C})) {
|
|
10893
10893
|
if (${i}.lodOpacity) {
|
|
@@ -10896,7 +10896,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10896
10896
|
bool zeroSize = all(equal(${C}.scales, vec3(0.0, 0.0, 0.0)));
|
|
10897
10897
|
${C}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
|
|
10898
10898
|
}
|
|
10899
|
-
`):D=[`${C}.flags = 0u;`],D.push(`${C}.index = ${E??"0"};`),D}})}dynoOut(){return new BI(this,"gsplat")}}class
|
|
10899
|
+
`):D=[`${C}.flags = 0u;`],D.push(`${C}.index = ${E??"0"};`),D}})}dynoOut(){return new BI(this,"gsplat")}}class RG extends tA{constructor({packedSplats:A,index:I,base:g,count:Q}){super({inTypes:{packedSplats:VE,index:"int",base:"int",count:"int"},outTypes:{gsplat:RA},inputs:{packedSplats:A,index:I,base:g,count:Q},globals:()=>[PI,io,ya],statements:({inputs:C,outputs:i})=>{const{gsplat:E}=i;if(!E)return[];const{packedSplats:D,index:o,base:s,count:t}=C;let w;return D&&o&&s&&t?w=FA(`
|
|
10900
10900
|
${E}.flags = 0u;
|
|
10901
10901
|
if (readPackedArray(${D}.textureArray, ${D}.numSplats, ${D}.rgbMinMaxLnScaleMinMax, ${o}, ${E})) {
|
|
10902
10902
|
if (${D}.lodOpacity) {
|
|
@@ -10905,13 +10905,13 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10905
10905
|
bool zeroSize = all(equal(${E}.scales, vec3(0.0, 0.0, 0.0)));
|
|
10906
10906
|
${E}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
|
|
10907
10907
|
}
|
|
10908
|
-
`):w=[`${E}.flags = 0u;`],w.push(`${E}.index = ${o??"0"};`),w}})}dynoOut(){return new BI(this,"gsplat")}}const
|
|
10908
|
+
`):w=[`${E}.flags = 0u;`],w.push(`${E}.index = ${o??"0"};`),w}})}dynoOut(){return new BI(this,"gsplat")}}const Ga=qA(`
|
|
10909
10909
|
struct ExtSplats {
|
|
10910
10910
|
usampler2DArray textureArray1;
|
|
10911
10911
|
usampler2DArray textureArray2;
|
|
10912
10912
|
int numSplats;
|
|
10913
10913
|
};
|
|
10914
|
-
`),
|
|
10914
|
+
`),kG=qA(`
|
|
10915
10915
|
void readExtArrays(usampler2DArray texture1, usampler2DArray texture2, int numSplats, int index, out Gsplat gsplat) {
|
|
10916
10916
|
gsplat.flags = 0u;
|
|
10917
10917
|
if ((index >= 0) && (index < numSplats)) {
|
|
@@ -10923,7 +10923,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10923
10923
|
gsplat.index = index;
|
|
10924
10924
|
}
|
|
10925
10925
|
}
|
|
10926
|
-
`);class
|
|
10926
|
+
`);class nG extends tA{constructor({extSplats:A,index:I}){super({inTypes:{extSplats:aa,index:"int"},outTypes:{gsplat:RA},inputs:{extSplats:A,index:I},globals:()=>[PI,Ga,kG],statements:({inputs:g,outputs:Q})=>{const{gsplat:C}=Q;if(!C)return[`${C}.flags = 0u;`];const{extSplats:i,index:E}=g;return i&&E?FA(`
|
|
10927
10927
|
readExtArrays(${i}.textureArray1, ${i}.textureArray2, ${i}.numSplats, ${E}, ${C});
|
|
10928
10928
|
`):[`${C}.flags = 0u;`]}})}dynoOut(){return new BI(this,"gsplat")}}qA(`
|
|
10929
10929
|
void readCovArrays(usampler2DArray texture1, usampler2DArray texture2, int numSplats, int index, out CovSplat covsplat) {
|
|
@@ -10937,7 +10937,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10937
10937
|
gsplat.index = index;
|
|
10938
10938
|
}
|
|
10939
10939
|
}
|
|
10940
|
-
`);class
|
|
10940
|
+
`);class MG extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:RA},outTypes:{covsplat:Ag},inputs:{gsplat:A},globals:()=>[PI,iB],statements:({inputs:I,outputs:g})=>{const{gsplat:Q}=I,{covsplat:C}=g;return Q?FA(`
|
|
10941
10941
|
${C}.flags = 0u;
|
|
10942
10942
|
if (isGsplatActive(${Q}.flags)) {
|
|
10943
10943
|
${C}.flags = ${Q}.flags;
|
|
@@ -10949,7 +10949,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10949
10949
|
${C}.xxyyzz = vec3(m[0][0], m[1][1], m[2][2]);
|
|
10950
10950
|
${C}.xyxzyz = vec3(m[0][1], m[0][2], m[1][2]);
|
|
10951
10951
|
}
|
|
10952
|
-
`):[`${C}.flags = 0u;`]}})}dynoOut(){return new BI(this,"covsplat")}}class
|
|
10952
|
+
`):[`${C}.flags = 0u;`]}})}dynoOut(){return new BI(this,"covsplat")}}class NG extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:RA},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[PI],statements:({inputs:I,outputs:g})=>{const{gsplat:Q}=I,{flags:C,active:i,index:E,center:D,scales:o,quaternion:s,rgba:t,rgb:w,opacity:a,x:G,y:S,z:c,r:y,g:F,b:R}=g;return[C?`${C} = ${Q?`${Q}.flags`:"0u"};`:null,i?`${i} = isGsplatActive(${Q?`${Q}.flags`:"0u"});`:null,E?`${E} = ${Q?`${Q}.index`:"0"};`:null,D?`${D} = ${Q?`${Q}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${Q?`${Q}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,s?`${s} = ${Q?`${Q}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,t?`${t} = ${Q?`${Q}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,w?`${w} = ${Q?`${Q}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,a?`${a} = ${Q?`${Q}.rgba.a`:"0.0"};`:null,G?`${G} = ${Q?`${Q}.center.x`:"0.0"};`:null,S?`${S} = ${Q?`${Q}.center.y`:"0.0"};`:null,c?`${c} = ${Q?`${Q}.center.z`:"0.0"};`:null,y?`${y} = ${Q?`${Q}.rgba.r`:"0.0"};`:null,F?`${F} = ${Q?`${Q}.rgba.g`:"0.0"};`:null,R?`${R} = ${Q?`${Q}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class JG extends tA{constructor({gsplat:A,flags:I,index:g,center:Q,scales:C,quaternion:i,rgba:E,rgb:D,opacity:o,x:s,y:t,z:w,r:a,g:G,b:S}){super({inTypes:{gsplat:RA,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:RA},inputs:{gsplat:A,flags:I,index:g,center:Q,scales:C,quaternion:i,rgba:E,rgb:D,opacity:o,x:s,y:t,z:w,r:a,g:G,b:S},globals:()=>[PI],statements:({inputs:c,outputs:y})=>{const{gsplat:F}=y;if(!F)return[];const{gsplat:R,flags:M,index:n,center:N,scales:J,quaternion:L,rgba:H,rgb:Y,opacity:K,x:l,y:p,z:u,r:b,g:O,b:W}=c;return[`${F}.flags = ${M??(R?`${R}.flags`:"0u")};`,`${F}.index = ${n??(R?`${R}.index`:"0")};`,`${F}.center = ${N??(R?`${R}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${F}.scales = ${J??(R?`${R}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${F}.quaternion = ${L??(R?`${R}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${F}.rgba = ${H??(R?`${R}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,Y?`${F}.rgba.rgb = ${Y};`:null,K?`${F}.rgba.a = ${K};`:null,l?`${F}.center.x = ${l};`:null,p?`${F}.center.y = ${p};`:null,u?`${F}.center.z = ${u};`:null,b?`${F}.rgba.r = ${b};`:null,O?`${F}.rgba.g = ${O};`:null,W?`${F}.rgba.b = ${W};`:null].filter(Boolean)}})}dynoOut(){return new BI(this,"gsplat")}}qA(`
|
|
10953
10953
|
vec3 gsplatNormal(vec3 scales, vec4 quaternion) {
|
|
10954
10954
|
float minScale = min(scales.x, min(scales.y, scales.z));
|
|
10955
10955
|
vec3 normal;
|
|
@@ -10962,33 +10962,33 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
10962
10962
|
}
|
|
10963
10963
|
return quatVec(quaternion, normal);
|
|
10964
10964
|
}
|
|
10965
|
-
`);class
|
|
10965
|
+
`);class UG extends tA{constructor({gsplat:A,scale:I,rotate:g,translate:Q,recolor:C}){super({inTypes:{gsplat:RA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:RA},inputs:{gsplat:A,scale:I,rotate:g,translate:Q,recolor:C},globals:()=>[PI],statements:({inputs:i,outputs:E,compile:D})=>{const{gsplat:o}=E;if(!o||!i.gsplat)return[];const{scale:s,rotate:t,translate:w,recolor:a}=i,G=D.indent;return[`${o} = ${i.gsplat};`,`if (isGsplatActive(${o}.flags)) {`,s?`${G}${o}.center *= ${s};`:null,t?`${G}${o}.center = quatVec(${t}, ${o}.center);`:null,w?`${G}${o}.center += ${w};`:null,s?`${G}${o}.scales *= ${s};`:null,t?`${G}${o}.quaternion = quatQuat(${t}, ${o}.quaternion);`:null,a?`${G}${o}.rgba *= ${a};`:null,"}"].filter(Boolean)}})}dynoOut(){return new BI(this,"gsplat")}}const Do=B=>new LG({covsplat:B}),Sa=({covsplat:B,flags:A,index:I,center:g,rgba:Q,rgb:C,opacity:i,x:E,y:D,z:o,r:s,g:t,b:w})=>new HG({covsplat:B,flags:A,index:I,center:g,rgba:Q,rgb:C,opacity:i,x:E,y:D,z:o,r:s,g:t,b:w});class LG extends tA{constructor({covsplat:A}){super({inTypes:{covsplat:Ag},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{covsplat:A},globals:()=>[iB],statements:({inputs:I,outputs:g})=>{const{covsplat:Q}=I,{flags:C,active:i,index:E,center:D,rgba:o,rgb:s,opacity:t,x:w,y:a,z:G,r:S,g:c,b:y}=g;return[C?`${C} = ${Q?`${Q}.flags`:"0u"};`:null,i?`${i} = isCovSplatActive(${Q?`${Q}.flags`:"0u"});`:null,E?`${E} = ${Q?`${Q}.index`:"0"};`:null,D?`${D} = ${Q?`${Q}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${Q?`${Q}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,s?`${s} = ${Q?`${Q}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,t?`${t} = ${Q?`${Q}.rgba.a`:"0.0"};`:null,w?`${w} = ${Q?`${Q}.center.x`:"0.0"};`:null,a?`${a} = ${Q?`${Q}.center.y`:"0.0"};`:null,G?`${G} = ${Q?`${Q}.center.z`:"0.0"};`:null,S?`${S} = ${Q?`${Q}.rgba.r`:"0.0"};`:null,c?`${c} = ${Q?`${Q}.rgba.g`:"0.0"};`:null,y?`${y} = ${Q?`${Q}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class HG extends tA{constructor({covsplat:A,flags:I,index:g,center:Q,rgba:C,rgb:i,opacity:E,x:D,y:o,z:s,r:t,g:w,b:a}){super({inTypes:{covsplat:Ag,flags:"uint",index:"int",center:"vec3",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{covsplat:Ag},inputs:{covsplat:A,flags:I,index:g,center:Q,rgba:C,rgb:i,opacity:E,x:D,y:o,z:s,r:t,g:w,b:a},globals:()=>[iB],statements:({inputs:G,outputs:S})=>{const{covsplat:c}=S;if(!c)return[];const{covsplat:y,flags:F,index:R,center:M,rgba:n,rgb:N,opacity:J,x:L,y:H,z:Y,r:K,g:l,b:p}=G;return[`${c}.flags = ${F??(y?`${y}.flags`:"0u")};`,`${c}.index = ${R??(y?`${y}.index`:"0")};`,`${c}.center = ${M??(y?`${y}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${c}.rgba = ${n??(y?`${y}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,N?`${c}.rgba.rgb = ${N};`:null,J?`${c}.rgba.a = ${J};`:null,L?`${c}.center.x = ${L};`:null,H?`${c}.center.y = ${H};`:null,Y?`${c}.center.z = ${Y};`:null,K?`${c}.rgba.r = ${K};`:null,l?`${c}.rgba.g = ${l};`:null,p?`${c}.rgba.b = ${p};`:null,`${c}.xxyyzz = ${y?`${y}.xxyyzz`:"vec3(0.0, 0.0, 0.0)"};`,`${c}.xyxzyz = ${y?`${y}.xyxzyz`:"vec3(0.0, 0.0, 0.0)"};`].filter(Boolean)}})}dynoOut(){return new BI(this,"covsplat")}}class YG extends tA{constructor({index:A}){super({inTypes:{index:"int"},outTypes:{coord:"ivec3"},inputs:{index:A},statements:({inputs:I,outputs:g})=>{const{index:Q}=I,{coord:C}=g;return!Q||!C?[]:[`${C} = splatTexCoord(${Q});`]}})}dynoOut(){return new BI(this,"coord")}}class dG extends tA{constructor({index:A}){super({inTypes:{index:"int"},outTypes:{coord:"ivec3"},inputs:{index:A},statements:({inputs:I,outputs:g})=>{const{index:Q}=I,{coord:C}=g;return!Q||!C?[]:[`${C} = pagedSplatTexCoord(${Q});`]}})}dynoOut(){return new BI(this,"coord")}}const ra=(B,A)=>new xG({gsplat:B,rgbMinMaxLnScaleMinMax:A}),KG=(B,A)=>new qG({covsplat:B,rgbMinMaxLnScaleMinMax:A}),lG=B=>new uG({gsplat:B}),Fa=B=>new mG({covsplat:B}),fG=(B,A,I,g,Q)=>new bG({gsplat:B,viewCenter:A,viewDir:I,sortRadial:g,cullCos:Q}),pG=(B,A,I,g,Q)=>new PG({covsplat:B,viewCenter:A,viewDir:I,sortRadial:g,cullCos:Q});class xG extends tA{constructor({gsplat:A,rgbMinMaxLnScaleMinMax:I}){super({inTypes:{gsplat:RA,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{gsplat:A,rgbMinMaxLnScaleMinMax:I},globals:()=>[PI],statements:({inputs:g,outputs:Q})=>{const{gsplat:C,rgbMinMaxLnScaleMinMax:i}=g;return C&&i?FA(`
|
|
10966
10966
|
if (isGsplatActive(${C}.flags)) {
|
|
10967
10967
|
target = packSplatEncoding(${C}.center, ${C}.scales, ${C}.quaternion, ${C}.rgba, ${i});
|
|
10968
10968
|
} else {
|
|
10969
10969
|
target = uvec4(0u, 0u, 0u, 0u);
|
|
10970
10970
|
}
|
|
10971
|
-
`):["target = uvec4(0u, 0u, 0u, 0u);"]}})}}class
|
|
10971
|
+
`):["target = uvec4(0u, 0u, 0u, 0u);"]}})}}class qG extends tA{constructor({covsplat:A,rgbMinMaxLnScaleMinMax:I}){super({inTypes:{covsplat:Ag,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{covsplat:A,rgbMinMaxLnScaleMinMax:I},globals:()=>[iB],statements:({inputs:g})=>{const{covsplat:Q,rgbMinMaxLnScaleMinMax:C}=g;return Q&&C?FA(`
|
|
10972
10972
|
if (isCovSplatActive(${Q}.flags)) {
|
|
10973
10973
|
target = packSplatCovEncoding(${Q}.center, ${Q}.rgba, ${Q}.xxyyzz, ${Q}.xyxzyz, ${C});
|
|
10974
10974
|
} else {
|
|
10975
10975
|
target = uvec4(0u);
|
|
10976
10976
|
}
|
|
10977
|
-
`):["target = uvec4(0u);"]}})}}class
|
|
10977
|
+
`):["target = uvec4(0u);"]}})}}class uG extends tA{constructor({gsplat:A}){super({inTypes:{gsplat:RA},inputs:{gsplat:A},globals:()=>[PI],statements:({inputs:I})=>{const{gsplat:g}=I;return g?FA(`
|
|
10978
10978
|
if (isGsplatActive(${g}.flags)) {
|
|
10979
10979
|
packSplatExt(target, target2, ${g}.center, ${g}.scales, ${g}.quaternion, ${g}.rgba);
|
|
10980
10980
|
} else {
|
|
10981
10981
|
target = uvec4(0u);
|
|
10982
10982
|
target2 = uvec4(0u);
|
|
10983
10983
|
}
|
|
10984
|
-
`):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class
|
|
10984
|
+
`):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class mG extends tA{constructor({covsplat:A}){super({inTypes:{covsplat:Ag},inputs:{covsplat:A},globals:()=>[iB],statements:({inputs:I})=>{const{covsplat:g}=I;return g?FA(`
|
|
10985
10985
|
if (isCovSplatActive(${g}.flags)) {
|
|
10986
10986
|
packSplatExtCov(target, target2, ${g}.center, ${g}.rgba, ${g}.xxyyzz, ${g}.xyxzyz);
|
|
10987
10987
|
} else {
|
|
10988
10988
|
target = uvec4(0u);
|
|
10989
10989
|
target2 = uvec4(0u);
|
|
10990
10990
|
}
|
|
10991
|
-
`):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class
|
|
10991
|
+
`):["target = uvec4(0u);","target2 = uvec4(0u);"]}})}}class bG extends tA{constructor({gsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C}){super({inTypes:{gsplat:RA,viewCenter:"vec3",viewDir:"vec3",sortRadial:"bool",cullCos:"float"},inputs:{gsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C},globals:()=>[PI],statements:({inputs:i})=>{const{gsplat:E,viewCenter:D,viewDir:o,sortRadial:s,cullCos:t}=i;return E&&D&&o&&s&&t?FA(`
|
|
10992
10992
|
float metric = 1.0 / 0.0;
|
|
10993
10993
|
if (isGsplatActive(${E}.flags)) {
|
|
10994
10994
|
vec3 center = ${E}.center - ${D};
|
|
@@ -11008,7 +11008,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
11008
11008
|
}
|
|
11009
11009
|
}
|
|
11010
11010
|
target3 = floatToVec4(metric);
|
|
11011
|
-
`):[]}})}}class
|
|
11011
|
+
`):[]}})}}class PG extends tA{constructor({covsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C}){super({inTypes:{covsplat:Ag,viewCenter:"vec3",viewDir:"vec3",sortRadial:"bool",cullCos:"float"},inputs:{covsplat:A,viewCenter:I,viewDir:g,sortRadial:Q,cullCos:C},globals:()=>[iB],statements:({inputs:i})=>{const{covsplat:E,viewCenter:D,viewDir:o,sortRadial:s,cullCos:t}=i;return E&&D&&o&&s&&t?FA(`
|
|
11012
11012
|
float metric = 1.0 / 0.0;
|
|
11013
11013
|
if (isCovSplatActive(${E}.flags)) {
|
|
11014
11014
|
vec3 center = ${E}.center - ${D};
|
|
@@ -11023,10 +11023,10 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
11023
11023
|
}
|
|
11024
11024
|
}
|
|
11025
11025
|
target3 = floatToVec4(metric);
|
|
11026
|
-
`):[]}})}}class
|
|
11026
|
+
`):[]}})}}class TG extends tA{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:I,outputs:g})=>[`target = ${I.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new BI(this,"rgba8")}}class dI extends tA{constructor({key:A,type:I,count:g,value:Q,update:C,globals:i}){A=A??"value",super({outTypes:{[A]:I},update:()=>{if(C){const E=C(this.value);E!==void 0&&(this.value=E)}this.uniform.value=this.value},generate:({inputs:E,outputs:D})=>{const o=i?.({inputs:E,outputs:D})??[],s={},t=D[A];return t&&(o.push(`uniform ${_w(t,I,g)};`),s[t]=this.uniform),{globals:o,uniforms:s}}}),this.type=I,this.count=g,this.value=Q,this.uniform={value:Q},this.outKey=A}dynoOut(){return new BI(this,this.outKey)}}class QC extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"bool",value:I,update:g})}}class Og extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"int",value:I,update:g})}}class DB extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"float",value:I,update:g})}}class Xg extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"vec3",value:I,update:g})}}class BC extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"vec4",value:I,update:g})}}class OG extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3",value:I,update:g})}}class Ra extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2D",value:I,update:g})}}class KI extends dI{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2DArray",value:I,update:g})}}class oo{constructor({graph:A,inputs:I,outputs:g,template:Q,consoleLog:C}){this.graph=A,this.template=Q,this.inputs=I??{},this.outputs=g??{};const i=new Ty({indent:this.template.indent});for(const D in this.outputs)this.outputs[D]&&i.declares.add(this.outputs[D]);const E=A.compile({inputs:this.inputs,outputs:this.outputs,compile:i});this.shader=Q.generate({globals:i.globals,statements:E}),this.uniforms=i.uniforms,this.updaters=i.updaters,C&&(console.log("*** COMPILED SHADER",this.shader),console.log("*** UNIFORMS",this.uniforms))}prepareMaterial(){return XG(this)}update(){for(const A of this.updaters)A()}}class WE{constructor(A){const I=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),g=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!I||!g)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,I.index),this.between=A.substring(I.index+I[0].length,g.index),this.after=A.substring(g.index+g[0].length),this.indent=g[1]}generate({globals:A,statements:I}){return this.before+Array.from(A).join(`
|
|
11027
11027
|
|
|
11028
11028
|
`)+this.between+I.map(g=>this.indent+g).join(`
|
|
11029
|
-
`)+this.after}}const ha=new WeakMap;function uG(B){let A=ha.get(B);return A||(A=new wE({glslVersion:Zi,vertexShader:zy,fragmentShader:B.shader,uniforms:B.uniforms}),ha.set(B,A),A)}function ca(B,A,I="add"){const g=()=>{throw new Error(`Invalid ${I} types: ${B}, ${A}`)};if(B===A)return B;if(B==="int"){if(rQ(A))return A;g()}if(A==="int"){if(rQ(B))return B;g()}if(B==="uint"){if(FQ(A))return A;g()}if(A==="uint"){if(FQ(B))return B;g()}if(B==="float"){if(_B(A))return A;g()}if(A==="float"){if(_B(B))return B;g()}throw new Error(`Invalid ${I} types: ${B}, ${A}`)}function bG(B,A){return ca(B,A,"sub")}function mG(B,A){const I=()=>{throw new Error(`Invalid mul types: ${B}, ${A}`)},g=Q=>Q;if(B==="int"){if(rQ(A))return g(A);I()}if(A==="int"){if(rQ(B))return g(B);I()}if(B==="uint"){if(FQ(A))return g(A);I()}if(A==="uint"){if(FQ(B))return g(B);I()}if(B==="float"){if(_B(A))return g(A);I()}if(A==="float"){if(_B(B))return g(B);I()}if(rQ(B)||FQ(B)||rQ(A)||FQ(A)){if(B===A)return g(B);I()}if(B==="vec2"){if(A==="vec2"||gB(A))return g("vec2");if(A==="mat3x2")return g("vec3");if(A==="mat4x2")return g("vec4");I()}if(B==="vec3"){if(A==="mat2x3")return g("vec2");if(A==="vec3"||QB(A))return g("vec3");if(A==="mat4x3")return g("vec4");I()}if(B==="vec4"){if(A==="mat2x4")return g("vec2");if(A==="mat3x4")return g("vec3");if(A==="vec4"||BB(A))return g("vec4");I()}if(A==="vec2"){if(gB(B))return g("vec2");if(B==="mat2x3")return g("vec3");if(B==="mat2x4")return g("vec4");I()}if(A==="vec3"){if(B==="mat3x2")return g("vec2");if(QB(B))return g("vec3");if(B==="mat3x4")return g("vec4");I()}if(A==="vec4"){if(B==="mat4x2")return g("vec2");if(B==="mat4x3")return g("vec3");if(BB(B))return g("vec4");I()}if(gB(B)){if(gB(A))return g("mat2");if(A==="mat3x2")return g("mat3x2");if(A==="mat4x2")return g("mat4x2");I()}if(B==="mat2x3"){if(gB(A))return g("mat2x3");if(A==="mat3x2")return g("mat3");if(A==="mat4x2")return g("mat4x3");I()}if(B==="mat2x4"){if(gB(A))return g("mat2x4");if(A==="mat3x2")return g("mat3x4");if(A==="mat4x2")return g("mat4");I()}if(B==="mat3x2"){if(A==="mat2x3")return g("mat2");if(QB(A))return g("mat3x2");if(A==="mat4x3")return g("mat4x2");I()}if(QB(B)){if(A==="mat2x3")return g("mat2x3");if(QB(A))return g("mat3");if(A==="mat4x3")return g("mat4x3");I()}if(B==="mat3x4"){if(A==="mat2x3")return g("mat2x4");if(QB(A))return g("mat3x4");if(A==="mat4x3")return g("mat4");I()}if(B==="mat4x2"){if(A==="mat2x4")return g("mat2");if(A==="mat3x4")return g("mat3x2");if(BB(A))return g("mat4x2");I()}if(B==="mat4x3"){if(A==="mat2x4")return g("mat2x3");if(A==="mat3x4")return g("mat3");if(BB(A))return g("mat4x3");I()}if(BB(B)){if(A==="mat2x4")return g("mat2x4");if(A==="mat3x4")return g("mat3x4");if(BB(A))return g("mat4");I()}throw new Error(`Invalid mul types: ${B}, ${A}`)}const nQ=(B,A)=>new PG({a:B,b:A}),oB=(B,A)=>new TG({a:B,b:A}),NQ=(B,A)=>new OG({a:B,b:A});class PG extends ZD{constructor({a:A,b:I}){super({a:A,b:I,outKey:"sum",outTypeFunc:ca}),this.statements=({inputs:g,outputs:Q})=>[`${Q.sum} = ${g.a} + ${g.b};`]}}class TG extends ZD{constructor({a:A,b:I}){super({a:A,b:I,outKey:"difference",outTypeFunc:bG}),this.statements=({inputs:g,outputs:Q})=>[`${Q.difference} = ${g.a} - ${g.b};`]}}class OG extends ZD{constructor({a:A,b:I}){super({a:A,b:I,outKey:"product",outTypeFunc:mG}),this.statements=({inputs:g,outputs:Q})=>[`${Q.product} = ${g.a} * ${g.b};`]}}const XG=B=>new ZG({value:B}),vG=B=>new VG({value:B}),ya=B=>new WG({value:B});class ZG extends bE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = floatBitsToUint(${I.a});`]}}class VG extends bE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packHalf2x16(${I.a});`]}}class WG extends bE{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:I,outputs:g})=>[`uvec4 uRgba = uvec4(${I.a} & 0xffu, (${I.a} >> 8u) & 0xffu, (${I.a} >> 16u) & 0xffu, (${I.a} >> 24u) & 0xffu);`,`${g.rgba8} = vec4(uRgba) / 255.0;`]}}const WE=B=>new zG({a:B}),jG=({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:i,g:E,b:D,a:o})=>new _G({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:i,g:E,b:D,a:o});class zG extends bE{constructor({a:A}){super({a:A,outTypeFunc:I=>I,outKey:"normalize"}),this.statements=({inputs:I,outputs:g})=>[`${g.normalize} = normalize(${I.a});`]}}class _G extends tA{constructor({vector:A,vectorType:I,x:g,y:Q,z:C,w:i,r:E,g:D,b:o,a:s}){if(!A&&!I)throw new Error("Either vector or vectorType must be provided");const t=I??RQ(A),w=ly(t),a=fy(t),G={vector:t,x:w,y:w,r:w,g:w},r={vector:A,x:g,y:Q,r:E,g:D};a>=3&&(Object.assign(G,{z:w,b:w}),Object.assign(r,{z:C,b:o})),a>=4&&(Object.assign(G,{w,a:w}),Object.assign(r,{w:i,a:s})),super({inTypes:G,outTypes:{vector:t},inputs:r}),this.statements=({inputs:c,outputs:y})=>{const{vector:R}=y,{vector:S,x:n,y:N,z:M,w:J,r:L,g:H,b:Y,a:d}=c,l=[`${R}.x = ${n??L??(S?`${S}.x`:uE(w))};`,`${R}.y = ${N??H??(S?`${S}.y`:uE(w))};`];return a>=3&&l.push(`${R}.z = ${M??Y??(S?`${S}.z`:uE(w))};`),a>=4&&l.push(`${R}.w = ${J??d??(S?`${S}.w`:uE(w))};`),l}}dynoOut(){return new BI(this,"vector")}}const $G=(B,{scale:A,scales:I,rotate:g,translate:Q})=>new IS({position:B,scale:A,scales:I,rotate:g,translate:Q}).outputs.position,AS=(B,{scale:A,scales:I,rotate:g})=>new gS({dir:B,scale:A,scales:I,rotate:g}).outputs.dir;class IS extends tA{constructor({position:A,scale:I,scales:g,rotate:Q,translate:C}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:I,scales:g,rotate:Q,translate:C},statements:({inputs:i,outputs:E})=>{const{position:D}=E;if(!D)return[];const{scale:o,scales:s,rotate:t,translate:w}=i;return[`${D} = ${i.position??"vec3(0.0, 0.0, 0.0)"};`,o?`${D} *= ${o};`:null,s?`${D} *= ${s};`:null,t?`${D} = quatVec(${t}, ${D});`:null,w?`${D} += ${w};`:null].filter(Boolean)}})}}class gS extends tA{constructor({dir:A,scale:I,scales:g,rotate:Q}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:I,scales:g,rotate:Q},statements:({inputs:C,outputs:i})=>{const{dir:E}=i;if(!E)return[];const{scale:D,scales:o,rotate:s}=C;return[`${E} = ${C.dir??"vec3(0.0, 0.0, 0.0)"};`,D?`${E} *= ${D};`:null,o?`${E} *= ${o};`:null,s?`${E} = quatVec(${s}, ${E});`:null].filter(Boolean)}})}}const jE=class WI{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.extra={},this.maxSh=3,this.isInitialized=!1,this.extArrays=[new Uint32Array(0),new Uint32Array(0)],this.textures=[WI.emptyTexture,WI.emptyTexture],this.extra={},this.dyno=new QS({extSplats:this}),this.dynoNumSh=new Og({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.lodSplats=A.lodSplats,A.extArrays?(this.extArrays=A.extArrays,this.maxSplats=Math.floor(Math.min(this.extArrays[0].length/4,this.extArrays[1].length/4)),this.numSplats=A.numSplats??this.maxSplats,this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY),this.updateTextures()):(this.maxSplats=A.maxSplats??0,this.numSplats=0,this.extArrays=[new Uint32Array(0),new Uint32Array(0)])}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new ho;if((g||I||i)&&await w.loadInternalAsync({extSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.textures[0]!==WI.emptyTexture&&(this.textures[0].dispose(),this.textures[0].source.data=null,this.textures[0]=WI.emptyTexture),this.textures[1]!==WI.emptyTexture&&(this.textures[1].dispose(),this.textures[1].source.data=null,this.textures[1]=WI.emptyTexture),this.extArrays=[new Uint32Array(0),new Uint32Array(0)];for(const A in this.extra){const I=this.extra[A];if(I instanceof KI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?!this.extra.sh3a||!this.extra.sh3b?2:3:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=eG(this.dyno,A);if(this.hasRgbDir()&&I){const Q=Ig(g).outputs.center,C=WE(oB(Q,I)),{sh1Texture:i,sh2Texture:E,sh3TextureA:D,sh3TextureB:o}=this.ensureShTextures();let{rgb:s}=Ga({coord:ia(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:i,sh2Texture:E,sh3TextureA:D,sh3TextureB:o});s=nQ(s,Ig(g).outputs.rgb),g=EB({gsplat:g,rgb:s})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let C=this.extra.sh1;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh1=t,C=t}const s=MQ(C,i,E,D,hA,oA,"RGBA32UI");A=new dI({value:s,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let C=this.extra.sh2;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh2=t,C=t}const s=MQ(C,i,E,D,hA,oA,"RGBA32UI");I=new dI({value:s,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3a||!this.extra.sh3b)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3TextureA;if(!g){let C=this.extra.sh3a;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3a=t,C=t}const s=MQ(C,i,E,D,hA,oA,"RGBA32UI");g=new dI({value:s,key:"sh3"}),this.extra.sh3TextureA=g}let Q=this.extra.sh3TextureB;if(!Q){let C=this.extra.sh3b;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3b=t,C=t}const s=MQ(C,i,E,D,hA,oA,"RGBA32UI");Q=new dI({value:s,key:"sh3b"}),this.extra.sh3TextureB=Q}return{sh1Texture:A,sh2Texture:I,sh3TextureA:g,sh3TextureB:Q}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.extArrays[0]?this.extArrays[0].length/4:0;if(!this.extArrays[0]||I>g){this.maxSplats=UA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4),C=new Uint32Array(this.maxSplats*4);this.extArrays[0]&&(Q.set(this.extArrays[0]),C.set(this.extArrays[1])),this.extArrays[0]=Q,this.extArrays[1]=C}return this.extArrays}getSplat(A){if(A>=this.numSplats)throw new Error("Invalid index");return _D(this.extArrays,A)}setSplat(A,I,g,Q,C,i){const E=this.ensureSplats(A+1);Zw(E,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,i.r,i.g,i.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const i=this.ensureSplats(this.numSplats+1);Zw(i,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(this.numSplats)for(let I=0;I<this.numSplats;++I){const g=_D(this.extArrays,I);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}updateTextures(){if(this.textures[0]!==WI.emptyTexture){const{width:A,height:I,depth:g}=this.textures[0].image;this.maxSplats!==A*I*g&&(this.textures[0].dispose(),this.textures[0]=WI.emptyTexture,this.textures[1].dispose(),this.textures[1]=WI.emptyTexture)}if(this.textures[0]===WI.emptyTexture){const{width:A,height:I,depth:g}=UA(this.maxSplats);this.textures[0]=MQ(this.extArrays[0],A,I,g,hA,oA,"RGBA32UI"),this.textures[1]=MQ(this.extArrays[1],A,I,g,hA,oA,"RGBA32UI")}else this.extArrays[0].buffer!==this.textures[0].image.data.buffer&&(this.textures[0].image.data=new Uint8Array(this.extArrays[0].buffer),this.textures[1].image.data=new Uint8Array(this.extArrays[1].buffer),this.textures[0].needsUpdate=!0,this.textures[1].needsUpdate=!0)}extractSplats(A,I){const g=UA(A.length).maxSplats,Q=new WI({maxSplats:g});for(let C=0;C<A.length;C++){const i=this.getSplat(A[C]);if(I){let E=(A[C]>>>16)*.61803398875;E=E-Math.floor(E);const D=Math.max(0,Math.min(1,Math.abs(E*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(E*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(E*6-1)-1));i.color.r*=D,i.color.g*=o,i.color.b*=s}Q.pushSplat(i.center,i.scales,i.quaternion,i.opacity,i.color)}return Q}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=[this.extArrays[0].slice(),this.extArrays[1].slice()],C=A?(await A.getArray()).slice():void 0,i={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},E=await vE.withWorker(async o=>await o.call(I?"qualityLodExtSplats":"tinyLodExtSplats",{numSplats:this.numSplats,extArrays:Q,extra:i,lodBase:g,rgba:C})),D=new WI(E);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}};jE.emptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),jE.emptyTexture=MQ(null,1,1,1,hA,oA,"RGBA32UI"),jE.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();let vg=jE;class QS extends KI{constructor({extSplats:A}={}){super({key:"extSplats",type:Ca,globals:()=>[sa],value:{textureArray1:vg.emptyTexture,textureArray2:vg.emptyTexture,numSplats:0},update:I=>{var g,Q,C;return I.textureArray1=((g=this.extSplats)==null?void 0:g.textures[0])??vg.emptyTexture,I.textureArray2=((Q=this.extSplats)==null?void 0:Q.textures[1])??vg.emptyTexture,I.numSplats=((C=this.extSplats)==null?void 0:C.numSplats)??0,I}}),this.extSplats=A}}const BS=qA(`
|
|
11029
|
+
`)+this.after}}const ka=new WeakMap;function XG(B){let A=ka.get(B);return A||(A=new aE({glslVersion:Vi,vertexShader:QG,fragmentShader:B.shader,uniforms:B.uniforms}),ka.set(B,A),A)}function na(B,A,I="add"){const g=()=>{throw new Error(`Invalid ${I} types: ${B}, ${A}`)};if(B===A)return B;if(B==="int"){if(rQ(A))return A;g()}if(A==="int"){if(rQ(B))return B;g()}if(B==="uint"){if(FQ(A))return A;g()}if(A==="uint"){if(FQ(B))return B;g()}if(B==="float"){if($B(A))return A;g()}if(A==="float"){if($B(B))return B;g()}throw new Error(`Invalid ${I} types: ${B}, ${A}`)}function vG(B,A){return na(B,A,"sub")}function ZG(B,A){const I=()=>{throw new Error(`Invalid mul types: ${B}, ${A}`)},g=Q=>Q;if(B==="int"){if(rQ(A))return g(A);I()}if(A==="int"){if(rQ(B))return g(B);I()}if(B==="uint"){if(FQ(A))return g(A);I()}if(A==="uint"){if(FQ(B))return g(B);I()}if(B==="float"){if($B(A))return g(A);I()}if(A==="float"){if($B(B))return g(B);I()}if(rQ(B)||FQ(B)||rQ(A)||FQ(A)){if(B===A)return g(B);I()}if(B==="vec2"){if(A==="vec2"||gB(A))return g("vec2");if(A==="mat3x2")return g("vec3");if(A==="mat4x2")return g("vec4");I()}if(B==="vec3"){if(A==="mat2x3")return g("vec2");if(A==="vec3"||QB(A))return g("vec3");if(A==="mat4x3")return g("vec4");I()}if(B==="vec4"){if(A==="mat2x4")return g("vec2");if(A==="mat3x4")return g("vec3");if(A==="vec4"||BB(A))return g("vec4");I()}if(A==="vec2"){if(gB(B))return g("vec2");if(B==="mat2x3")return g("vec3");if(B==="mat2x4")return g("vec4");I()}if(A==="vec3"){if(B==="mat3x2")return g("vec2");if(QB(B))return g("vec3");if(B==="mat3x4")return g("vec4");I()}if(A==="vec4"){if(B==="mat4x2")return g("vec2");if(B==="mat4x3")return g("vec3");if(BB(B))return g("vec4");I()}if(gB(B)){if(gB(A))return g("mat2");if(A==="mat3x2")return g("mat3x2");if(A==="mat4x2")return g("mat4x2");I()}if(B==="mat2x3"){if(gB(A))return g("mat2x3");if(A==="mat3x2")return g("mat3");if(A==="mat4x2")return g("mat4x3");I()}if(B==="mat2x4"){if(gB(A))return g("mat2x4");if(A==="mat3x2")return g("mat3x4");if(A==="mat4x2")return g("mat4");I()}if(B==="mat3x2"){if(A==="mat2x3")return g("mat2");if(QB(A))return g("mat3x2");if(A==="mat4x3")return g("mat4x2");I()}if(QB(B)){if(A==="mat2x3")return g("mat2x3");if(QB(A))return g("mat3");if(A==="mat4x3")return g("mat4x3");I()}if(B==="mat3x4"){if(A==="mat2x3")return g("mat2x4");if(QB(A))return g("mat3x4");if(A==="mat4x3")return g("mat4");I()}if(B==="mat4x2"){if(A==="mat2x4")return g("mat2");if(A==="mat3x4")return g("mat3x2");if(BB(A))return g("mat4x2");I()}if(B==="mat4x3"){if(A==="mat2x4")return g("mat2x3");if(A==="mat3x4")return g("mat3");if(BB(A))return g("mat4x3");I()}if(BB(B)){if(A==="mat2x4")return g("mat2x4");if(A==="mat3x4")return g("mat3x4");if(BB(A))return g("mat4");I()}throw new Error(`Invalid mul types: ${B}, ${A}`)}const nQ=(B,A)=>new VG({a:B,b:A}),oB=(B,A)=>new WG({a:B,b:A}),MQ=(B,A)=>new jG({a:B,b:A});class VG extends jD{constructor({a:A,b:I}){super({a:A,b:I,outKey:"sum",outTypeFunc:na}),this.statements=({inputs:g,outputs:Q})=>[`${Q.sum} = ${g.a} + ${g.b};`]}}class WG extends jD{constructor({a:A,b:I}){super({a:A,b:I,outKey:"difference",outTypeFunc:vG}),this.statements=({inputs:g,outputs:Q})=>[`${Q.difference} = ${g.a} - ${g.b};`]}}class jG extends jD{constructor({a:A,b:I}){super({a:A,b:I,outKey:"product",outTypeFunc:ZG}),this.statements=({inputs:g,outputs:Q})=>[`${Q.product} = ${g.a} * ${g.b};`]}}const zG=B=>new $G({value:B}),_G=B=>new AS({value:B}),Ma=B=>new IS({value:B});class $G extends bE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = floatBitsToUint(${I.a});`]}}class AS extends bE{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packHalf2x16(${I.a});`]}}class IS extends bE{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:I,outputs:g})=>[`uvec4 uRgba = uvec4(${I.a} & 0xffu, (${I.a} >> 8u) & 0xffu, (${I.a} >> 16u) & 0xffu, (${I.a} >> 24u) & 0xffu);`,`${g.rgba8} = vec4(uRgba) / 255.0;`]}}const jE=B=>new QS({a:B}),gS=({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:i,g:E,b:D,a:o})=>new BS({vector:B,vectorType:A,x:I,y:g,z:Q,w:C,r:i,g:E,b:D,a:o});class QS extends bE{constructor({a:A}){super({a:A,outTypeFunc:I=>I,outKey:"normalize"}),this.statements=({inputs:I,outputs:g})=>[`${g.normalize} = normalize(${I.a});`]}}class BS extends tA{constructor({vector:A,vectorType:I,x:g,y:Q,z:C,w:i,r:E,g:D,b:o,a:s}){if(!A&&!I)throw new Error("Either vector or vectorType must be provided");const t=I??RQ(A),w=my(t),a=by(t),G={vector:t,x:w,y:w,r:w,g:w},S={vector:A,x:g,y:Q,r:E,g:D};a>=3&&(Object.assign(G,{z:w,b:w}),Object.assign(S,{z:C,b:o})),a>=4&&(Object.assign(G,{w,a:w}),Object.assign(S,{w:i,a:s})),super({inTypes:G,outTypes:{vector:t},inputs:S}),this.statements=({inputs:c,outputs:y})=>{const{vector:F}=y,{vector:R,x:M,y:n,z:N,w:J,r:L,g:H,b:Y,a:K}=c,l=[`${F}.x = ${M??L??(R?`${R}.x`:mE(w))};`,`${F}.y = ${n??H??(R?`${R}.y`:mE(w))};`];return a>=3&&l.push(`${F}.z = ${N??Y??(R?`${R}.z`:mE(w))};`),a>=4&&l.push(`${F}.w = ${J??K??(R?`${R}.w`:mE(w))};`),l}}dynoOut(){return new BI(this,"vector")}}const CS=(B,{scale:A,scales:I,rotate:g,translate:Q})=>new iS({position:B,scale:A,scales:I,rotate:g,translate:Q}).outputs.position,ES=(B,{scale:A,scales:I,rotate:g})=>new DS({dir:B,scale:A,scales:I,rotate:g}).outputs.dir;class iS extends tA{constructor({position:A,scale:I,scales:g,rotate:Q,translate:C}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:I,scales:g,rotate:Q,translate:C},statements:({inputs:i,outputs:E})=>{const{position:D}=E;if(!D)return[];const{scale:o,scales:s,rotate:t,translate:w}=i;return[`${D} = ${i.position??"vec3(0.0, 0.0, 0.0)"};`,o?`${D} *= ${o};`:null,s?`${D} *= ${s};`:null,t?`${D} = quatVec(${t}, ${D});`:null,w?`${D} += ${w};`:null].filter(Boolean)}})}}class DS extends tA{constructor({dir:A,scale:I,scales:g,rotate:Q}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:I,scales:g,rotate:Q},statements:({inputs:C,outputs:i})=>{const{dir:E}=i;if(!E)return[];const{scale:D,scales:o,rotate:s}=C;return[`${E} = ${C.dir??"vec3(0.0, 0.0, 0.0)"};`,D?`${E} *= ${D};`:null,o?`${E} *= ${o};`:null,s?`${E} = quatVec(${s}, ${E});`:null].filter(Boolean)}})}}const zE=class WI{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.extra={},this.maxSh=3,this.isInitialized=!1,this.extArrays=[new Uint32Array(0),new Uint32Array(0)],this.textures=[WI.emptyTexture,WI.emptyTexture],this.extra={},this.dyno=new oS({extSplats:this}),this.dynoNumSh=new Og({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.lodSplats=A.lodSplats,A.extArrays?(this.extArrays=A.extArrays,this.maxSplats=Math.floor(Math.min(this.extArrays[0].length/4,this.extArrays[1].length/4)),this.numSplats=A.numSplats??this.maxSplats,this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY),this.updateTextures()):(this.maxSplats=A.maxSplats??0,this.numSplats=0,this.extArrays=[new Uint32Array(0),new Uint32Array(0)])}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new Go;if((g||I||i)&&await w.loadInternalAsync({extSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.textures[0]!==WI.emptyTexture&&(this.textures[0].dispose(),this.textures[0].source.data=null,this.textures[0]=WI.emptyTexture),this.textures[1]!==WI.emptyTexture&&(this.textures[1].dispose(),this.textures[1].source.data=null,this.textures[1]=WI.emptyTexture),this.extArrays=[new Uint32Array(0),new Uint32Array(0)];for(const A in this.extra){const I=this.extra[A];if(I instanceof dI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?!this.extra.sh3a||!this.extra.sh3b?2:3:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=rG(this.dyno,A);if(this.hasRgbDir()&&I){const Q=Ig(g).outputs.center,C=jE(oB(Q,I)),{sh1Texture:i,sh2Texture:E,sh3TextureA:D,sh3TextureB:o}=this.ensureShTextures();let{rgb:s}=Na({coord:ha(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:i,sh2Texture:E,sh3TextureA:D,sh3TextureB:o});s=nQ(s,Ig(g).outputs.rgb),g=EB({gsplat:g,rgb:s})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let C=this.extra.sh1;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh1=t,C=t}const s=NQ(C,i,E,D,hA,oA,"RGBA32UI");A=new KI({value:s,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let C=this.extra.sh2;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh2=t,C=t}const s=NQ(C,i,E,D,hA,oA,"RGBA32UI");I=new KI({value:s,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3a||!this.extra.sh3b)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3TextureA;if(!g){let C=this.extra.sh3a;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3a=t,C=t}const s=NQ(C,i,E,D,hA,oA,"RGBA32UI");g=new KI({value:s,key:"sh3"}),this.extra.sh3TextureA=g}let Q=this.extra.sh3TextureB;if(!Q){let C=this.extra.sh3b;const{width:i,height:E,depth:D,maxSplats:o}=UA(C.length/4);if(C.length<o*4){const t=new Uint32Array(o*4);t.set(C),this.extra.sh3b=t,C=t}const s=NQ(C,i,E,D,hA,oA,"RGBA32UI");Q=new KI({value:s,key:"sh3b"}),this.extra.sh3TextureB=Q}return{sh1Texture:A,sh2Texture:I,sh3TextureA:g,sh3TextureB:Q}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.extArrays[0]?this.extArrays[0].length/4:0;if(!this.extArrays[0]||I>g){this.maxSplats=UA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4),C=new Uint32Array(this.maxSplats*4);this.extArrays[0]&&(Q.set(this.extArrays[0]),C.set(this.extArrays[1])),this.extArrays[0]=Q,this.extArrays[1]=C}return this.extArrays}getSplat(A){if(A>=this.numSplats)throw new Error("Invalid index");return Io(this.extArrays,A)}setSplat(A,I,g,Q,C,i){const E=this.ensureSplats(A+1);Ia(E,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,i.r,i.g,i.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const i=this.ensureSplats(this.numSplats+1);Ia(i,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(this.numSplats)for(let I=0;I<this.numSplats;++I){const g=Io(this.extArrays,I);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}updateTextures(){if(this.textures[0]!==WI.emptyTexture){const{width:A,height:I,depth:g}=this.textures[0].image;this.maxSplats!==A*I*g&&(this.textures[0].dispose(),this.textures[0]=WI.emptyTexture,this.textures[1].dispose(),this.textures[1]=WI.emptyTexture)}if(this.textures[0]===WI.emptyTexture){const{width:A,height:I,depth:g}=UA(this.maxSplats);this.textures[0]=NQ(this.extArrays[0],A,I,g,hA,oA,"RGBA32UI"),this.textures[1]=NQ(this.extArrays[1],A,I,g,hA,oA,"RGBA32UI")}else this.extArrays[0].buffer!==this.textures[0].image.data.buffer&&(this.textures[0].image.data=new Uint8Array(this.extArrays[0].buffer),this.textures[1].image.data=new Uint8Array(this.extArrays[1].buffer),this.textures[0].needsUpdate=!0,this.textures[1].needsUpdate=!0)}extractSplats(A,I){const g=UA(A.length).maxSplats,Q=new WI({maxSplats:g});for(let C=0;C<A.length;C++){const i=this.getSplat(A[C]);if(I){let E=(A[C]>>>16)*.61803398875;E=E-Math.floor(E);const D=Math.max(0,Math.min(1,Math.abs(E*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(E*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(E*6-1)-1));i.color.r*=D,i.color.g*=o,i.color.b*=s}Q.pushSplat(i.center,i.scales,i.quaternion,i.opacity,i.color)}return Q}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=[this.extArrays[0].slice(),this.extArrays[1].slice()],C=A?(await A.getArray()).slice():void 0,i={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},E=await ZE.withWorker(async o=>await o.call(I?"qualityLodExtSplats":"tinyLodExtSplats",{numSplats:this.numSplats,extArrays:Q,extra:i,lodBase:g,rgba:C})),D=new WI(E);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}};zE.emptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),zE.emptyTexture=NQ(null,1,1,1,hA,oA,"RGBA32UI"),zE.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})();let vg=zE;class oS extends dI{constructor({extSplats:A}={}){super({key:"extSplats",type:aa,globals:()=>[Ga],value:{textureArray1:vg.emptyTexture,textureArray2:vg.emptyTexture,numSplats:0},update:I=>{var g,Q,C;return I.textureArray1=((g=this.extSplats)==null?void 0:g.textures[0])??vg.emptyTexture,I.textureArray2=((Q=this.extSplats)==null?void 0:Q.textures[1])??vg.emptyTexture,I.numSplats=((C=this.extSplats)==null?void 0:C.numSplats)??0,I}}),this.extSplats=A}}const sS=qA(`
|
|
11030
11030
|
vec3 evaluateExtSH1(uvec4 packedData, vec3 viewDir) {
|
|
11031
11031
|
vec3 sh1_0 = decodeExtRgb(packedData.x);
|
|
11032
11032
|
vec3 sh1_1 = decodeExtRgb(packedData.y);
|
|
@@ -11036,7 +11036,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
11036
11036
|
+ sh1_1 * (0.4886025 * viewDir.z)
|
|
11037
11037
|
+ sh1_2 * (-0.4886025 * viewDir.x);
|
|
11038
11038
|
}
|
|
11039
|
-
`),
|
|
11039
|
+
`),tS=qA(`
|
|
11040
11040
|
vec3 evaluateExtSH12(uvec4 packed1, uvec4 packed2, vec3 viewDir) {
|
|
11041
11041
|
vec3 sh1_0 = decodeExtRgb(packed1.x);
|
|
11042
11042
|
vec3 sh1_1 = decodeExtRgb(packed1.y);
|
|
@@ -11060,7 +11060,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
11060
11060
|
|
|
11061
11061
|
return sh1Rgb + sh2Rgb;
|
|
11062
11062
|
}
|
|
11063
|
-
`),
|
|
11063
|
+
`),wS=qA(`
|
|
11064
11064
|
vec3 evaluateExtSH3(uvec4 packedA, uvec4 packedB, vec3 viewDir) {
|
|
11065
11065
|
vec3 sh3_0 = decodeExtRgb(packedA.x);
|
|
11066
11066
|
vec3 sh3_1 = decodeExtRgb(packedA.y);
|
|
@@ -11085,7 +11085,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
11085
11085
|
+ sh3_5 * (1.4453057 * viewDir.z * (xx - yy))
|
|
11086
11086
|
+ sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy));
|
|
11087
11087
|
}
|
|
11088
|
-
`);function
|
|
11088
|
+
`);function Na({coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3TextureA:C,sh3TextureB:i}){return new tA({inTypes:{coord:"ivec3",viewDir:"vec3",numSh:"int",sh1Texture:"usampler2DArray",sh2Texture:"usampler2DArray",sh3TextureA:"usampler2DArray",sh3TextureB:"usampler2DArray"},outTypes:{rgb:"vec3"},inputs:{coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3TextureA:C,sh3TextureB:i},globals:()=>[sS,tS,wS],statements:({inputs:E,outputs:D})=>{const o=["vec3 rgb = vec3(0.0);"];return E.sh1Texture&&(E.sh2Texture?(o.push(...FA(`
|
|
11089
11089
|
if (${E.numSh} == 1) {
|
|
11090
11090
|
rgb = evaluateExtSH1(texelFetch(${E.sh1Texture}, ${E.coord}, 0), ${E.viewDir});
|
|
11091
11091
|
} else if (${E.numSh} >= 2) {
|
|
@@ -11098,7 +11098,7 @@ a=extmap-allow-mixed`)!==-1){const Q=g.sdp.split(`
|
|
|
11098
11098
|
if (${E.numSh} >= 1) {
|
|
11099
11099
|
rgb = evaluateExtSH1(texelFetch(${E.sh1Texture}, ${E.coord}, 0), ${E.viewDir});
|
|
11100
11100
|
}
|
|
11101
|
-
`))),o.push(`${D.rgb} = rgb;`),o}}).outputs}function MQ(B,A,I,g,Q,C,i){const E=new cI(B,A,I,g);return E.format=Q,E.type=C,E.internalFormat=i,E.needsUpdate=!0,E}function Sa(B){const A=pA.decode_rad_header(B);if(A[2])throw ka(A[1]);return ka(A[0])}function iS(){return pA.get_raycast_buffer()}function DS(){return pA.get_raycast_buffer2()}function oS(B,A,I,g,Q,C,i,E,D,o){return pA.raycast_ext_buffers(B,A,I,g,Q,C,i,E,D,o)}function sS(B,A,I,g,Q,C,i,E,D,o,s,t,w){return pA.raycast_packed_buffer(B,A,I,g,Q,C,i,E,D,o,s,t,w)}function tS(){return{__proto__:null,"./spark_rs_bg.js":{__proto__:null,__wbg_Error_2e59b1b37a9a34c3:function(B,A){return Error(zE(B,A))},__wbg___wbindgen_throw_81fc77679af83bc6:function(B,A){throw new Error(zE(B,A))},__wbg_error_a6fa202b58aa1cd3:function(B,A){let I,g;try{I=B,g=A,console.error(zE(B,A))}finally{pA.__wbindgen_free(I,g,1)}},__wbg_length_0c32cb8543c8e4c8:function(B){return B.length},__wbg_length_1e701798fdcaa3b4:function(B){return B.length},__wbg_length_fd4646b401926788:function(B){return B.length},__wbg_new_227d7c05414eb861:function(){return new Error},__wbg_new_4f9fafbb3909af72:function(){return new Object},__wbg_new_f3c9df4f38f3f798:function(){return new Array},__wbg_new_with_length_26bffbe236bf73f9:function(B){return new Float32Array(B>>>0)},__wbg_prototypesetcall_3e05eb9545565046:function(B,A,I){Uint8Array.prototype.set.call(aS(B,A),I)},__wbg_prototypesetcall_e42275e601e14eeb:function(B,A,I){Uint32Array.prototype.set.call(Fa(B,A),I)},__wbg_set_6be42768c690e380:function(B,A,I){B[A]=I},__wbg_set_6c60b2e8ad0e9383:function(B,A,I){B[A>>>0]=I},__wbg_set_8ee2d34facb8466e:function(){return cS(function(B,A,I){return Reflect.set(B,A,I)},arguments)},__wbg_set_a98c8da6557e63de:function(B,A,I){B.set(ra(A,I))},__wbg_stack_3b0d974bbf31e44f:function(B,A){const I=A.stack,g=yS(I,pA.__wbindgen_malloc,pA.__wbindgen_realloc),Q=Do;Ra().setInt32(B+4,Q,!0),Ra().setInt32(B+0,g,!0)},__wbg_subarray_d51e89458b3fdbf6:function(B,A,I){return B.subarray(A>>>0,I>>>0)},__wbindgen_cast_0000000000000001:function(B){return B},__wbindgen_cast_0000000000000002:function(B,A){return ra(B,A)},__wbindgen_cast_0000000000000003:function(B,A){return Fa(B,A)},__wbindgen_cast_0000000000000004:function(B,A){return zE(B,A)},__wbindgen_cast_0000000000000005:function(B){return BigInt.asUintN(64,B)},__wbindgen_init_externref_table:function(){const B=pA.__wbindgen_externrefs,A=B.grow(4);B.set(0,void 0),B.set(A+0,void 0),B.set(A+1,null),B.set(A+2,!0),B.set(A+3,!1)}}}}function wS(B){const A=pA.__externref_table_alloc();return pA.__wbindgen_externrefs.set(A,B),A}function ra(B,A){return B=B>>>0,eS().subarray(B/4,B/4+A)}function Fa(B,A){return B=B>>>0,hS().subarray(B/4,B/4+A)}function aS(B,A){return B=B>>>0,iC().subarray(B/1,B/1+A)}let JQ=null;function Ra(){return(JQ===null||JQ.buffer.detached===!0||JQ.buffer.detached===void 0&&JQ.buffer!==pA.memory.buffer)&&(JQ=new DataView(pA.memory.buffer)),JQ}let BC=null;function eS(){return(BC===null||BC.byteLength===0)&&(BC=new Float32Array(pA.memory.buffer)),BC}function zE(B,A){return B=B>>>0,SS(B,A)}let CC=null;function hS(){return(CC===null||CC.byteLength===0)&&(CC=new Uint32Array(pA.memory.buffer)),CC}let EC=null;function iC(){return(EC===null||EC.byteLength===0)&&(EC=new Uint8Array(pA.memory.buffer)),EC}function cS(B,A){try{return B.apply(this,A)}catch(I){const g=wS(I);pA.__wbindgen_exn_store(g)}}function yS(B,A,I){if(I===void 0){const E=DC.encode(B),D=A(E.length,1)>>>0;return iC().subarray(D,D+E.length).set(E),Do=E.length,D}let g=B.length,Q=A(g,1)>>>0;const C=iC();let i=0;for(;i<g;i++){const E=B.charCodeAt(i);if(E>127)break;C[Q+i]=E}if(i!==g){i!==0&&(B=B.slice(i)),Q=I(Q,g,g=i+B.length*3,1)>>>0;const E=iC().subarray(Q+i,Q+g),D=DC.encodeInto(B,E);i+=D.written,Q=I(Q,g,i,1)>>>0}return Do=i,Q}function ka(B){const A=pA.__wbindgen_externrefs.get(B);return pA.__externref_table_dealloc(B),A}let _E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});_E.decode();const GS=2146435072;let io=0;function SS(B,A){return io+=A,io>=GS&&(_E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),_E.decode(),io=A),_E.decode(iC().subarray(B,B+A))}const DC=new TextEncoder;"encodeInto"in DC||(DC.encodeInto=function(B,A){const I=DC.encode(B);return A.set(I),{read:B.length,written:I.length}});let Do=0,pA;function rS(B,A){return pA=B.exports,JQ=null,BC=null,CC=null,EC=null,pA.__wbindgen_start(),pA}async function FS(B,A){if(typeof Response=="function"&&B instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(B,A)}catch(Q){if(B.ok&&I(B.type)&&B.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",Q);else throw Q}const g=await B.arrayBuffer();return await WebAssembly.instantiate(g,A)}else{const g=await WebAssembly.instantiate(B,A);return g instanceof WebAssembly.Instance?{instance:g,module:B}:g}function I(g){switch(g){case"basic":case"cors":case"default":return!0}return!1}}async function na(B){if(pA!==void 0)return pA;B!==void 0&&(Object.getPrototypeOf(B)===Object.prototype?{module_or_path:B}=B:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),B===void 0&&(B=new URL("data:application/wasm;base64,AGFzbQEAAAABhQM1YAN/f38Bf2ACf38Bf2ACf38AYAN/f38AYAF/AGABfwF/YAV/f39/fwBgBH9/f38AYAAAYAABb2AEf39/fwF/YAZ/f39/f38AYAJ/fwFvYAFvAX9gAX0BfWAFf39/fn8AYAABf2AFf39/f38Bf2ADf39vAGAGf39/f39/AX9gB39/f39/f38AYAV/f35/fwBgBX9/fH9/AGAFf399f38AYAADf39/YANvb28AYANvf28AYANvb28Bf2ADb39/AW9gAX8Bb2ADb39/AGACf28AYAF8AW9gAX4Bb2AJf39/f399fX1/AGAHf39/fX9/fwBgB39/f39/f38Bf2ACfn8AYAJ/fgBgAn9+AX9gA39+fgBgBn9/f35/fwBgBn9/f3x/fwBgBn9/f31/fwBgBH9+fn8AYA59fX19fX19fX1/b319fwFvYA19fX19fX19fX1/fX1/AW9gAW8Df39/YAp9fX19fX19fX1/AW9gBH9+f38AYAR/fX9/AGAEf3x/fwBgAXwBfwK7CRgQLi9zcGFya19yc19iZy5qcxpfX3diZ19uZXdfNGY5ZmFmYmIzOTA5YWY3MgAJEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzZiZTQyNzY4YzY5MGUzODAAGRAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8wYzMyY2I4NTQzYzhlNGM4AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsXzNlMDVlYjk1NDU1NjUwNDYAEhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld19mM2M5ZGY0ZjM4ZjNmNzk4AAkQLi9zcGFya19yc19iZy5qcxpfX3diZ19zZXRfNmM2MGIyZThhZDBlOTM4MwAaEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzhlZTJkMzRmYWNiODQ2NmUAGxAuL3NwYXJrX3JzX2JnLmpzH19fd2JnX3N1YmFycmF5X2Q1MWU4OTQ1OGIzZmRiZjYAHBAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8xZTcwMTc5OGZkY2FhM2I0AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsX2U0MjI3NWU2MDFlMTRlZWIAEhAuL3NwYXJrX3JzX2JnLmpzJl9fd2JnX25ld193aXRoX2xlbmd0aF8yNmJmZmJlMjM2YmY3M2Y5AB0QLi9zcGFya19yc19iZy5qcx1fX3diZ19sZW5ndGhfZmQ0NjQ2YjQwMTkyNjc4OAANEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0X2E5OGM4ZGE2NTU3ZTYzZGUAHhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld18yMjdkN2MwNTQxNGViODYxAAkQLi9zcGFya19yc19iZy5qcxxfX3diZ19zdGFja18zYjBkOTc0YmJmMzFlNDRmAB8QLi9zcGFya19yc19iZy5qcxxfX3diZ19lcnJvcl9hNmZhMjAyYjU4YWExY2QzAAIQLi9zcGFya19yc19iZy5qcxxfX3diZ19FcnJvcl8yZTU5YjFiMzdhOWEzNGMzAAwQLi9zcGFya19yc19iZy5qcydfX3diZ19fX3diaW5kZ2VuX3Rocm93XzgxZmM3NzY3OWFmODNiYzYAAhAuL3NwYXJrX3JzX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAxACAQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMgAMEC4vc3BhcmtfcnNfYmcuanMgX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDMADBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA0AAwQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNQAhA5oCmAIFAAIBAQIFAQEGIgcAAwUBAAICDg4EBQUCCgEAACMDAQUkBQUCAgICBAIDAwACAAoFCAETAhQCAQIOBRQPAQUCAAUEDwEDAiUDAQIFAgUEBQEBBwEBAhAHAQUBAQUBDwEBAQEBJgYBCwYCCwQBBQInBAIBAgsDAQICAQMDBQECASgCBAcBBAQABgQEAgAAAAMBCwQEBgIGAgIGBykLKissAAAGAwcBAAIBAAMDAwMBAQIBAwMB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AWogATYCAAsgAkEIag8LQQAhAEHc58EAKAIAIgEgBU0NAEHc58EAIAEgBWsiATYCAEHk58EAQeTnwQAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQMAQsgAA8LIABBCGoL4RcCGX8CfCMAQbAEayIDJAAgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANCADcDaCADQgA3A2AgA0IANwNYIANCADcDUCADQgA3A0ggA0IANwNAIANCADcDOCADQgA3AzAgA0IANwMoIANCADcDICADQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgA0IANwO4AiADQgA3A7ACIANCADcDqAIgA0IANwOgAiADQgA3A5gCIANCADcDkAIgA0IANwOIAiADQgA3A4ACIANCADcD+AEgA0IANwPwASADQgA3A+gBIANCADcD4AEgA0IANwPYASADQgA3A9ABIANCADcDyAEgA0IANwPAASADQgA3A7gBIANCADcDsAEgA0IANwOoASADQgA3A6ABIANCADcD2AMgA0IANwPQAyADQgA3A8gDIANCADcDwAMgA0IANwO4AyADQgA3A7ADIANCADcDqAMgA0IANwOgAyADQgA3A5gDIANCADcDkAMgA0IANwOIAyADQgA3A4ADIANCADcD+AIgA0IANwPwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3A9ACIANCADcDyAIgA0IANwPAAiADQeADakEAQdAA/AsAQfTgwQAoAgAiCSEGIAJBA2tBGG0iBUEAIAVBAEobIgshBSALQQJ0QYThwQBqIQcDQCADIARBA3RqIAVBAEgEfEQAAAAAAAAAAAUgBygCALcLOQMAIAQgBkkiCgRAIAdBBGohByAFQQFqIQUgBCAKaiIEIAZNDQELC0EAIQUDQEEAIQQgA0HAAmogBUEDdGogHCAAIARBA3RqKwMAIAMgBSAEa0EDdGorAwCioDkDACAFIAlJIgQEQCAEIAVqIgUgCU0NAQsLRAAAAAAAAPB/RAAAAAAAAOB/IAIgC0FobGoiCkEYayIGQf4PSyIPG0QAAAAAAAAAAEQAAAAAAABgAyAGQblwSSIQG0QAAAAAAADwPyAGQYJ4SCIRGyAGQf8HSiISG0H9FyAGIAZB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AgQoAgwRAAAMDAsgASgCAEHXosEAQQMgASgCBCgCDBEAAAwLCyABKAIAQdqiwQBBBCABKAIEKAIMEQAADAoLIAEoAgBB3qLBAEEMIAEoAgQoAgwRAAAMCQsgASgCAEHqosEAQQ8gASgCBCgCDBEAAAwICyABKAIAQfmiwQBBDSABKAIEKAIMEQAADAcLIAEoAgBBhqPBAEEOIAEoAgQoAgwRAAAMBgsgASgCACAAKAIEIAAoAgggASgCBCgCDBEAAAwFCyAAKQMIIgpC/////////weDIQsgCkL///////////8Ag0L/////////9/8AWARAIApCNIinIQAgCkIAUw0CIAJBsAJqDAMLQYizwQBBi7PBACAKQgBZIgAbQY+zwQAgC1AiBBshA0EDQQQgABtBAyAEGyEADAMLIAEoAgBB5KTBAEEEIAEoAgQoAgwRAAAMAwsgAkEtOgCwAkEBIQggAkGxAmoLIQYCfwJAAkACQCAAQf8PcSIARSALUHFFBEAgAEECSSALQgBSciEDIAtCgICAgICAgAiEIAsgABsiC0IChiEKIAtCAYMhDwJAAkAgAEG1CGtBzHcgABsiAEEASARAIAJBkAJqQejOwAAgACAAQYWiU2xBFHYgAEF/R2siAGoiB0EEdCIEaykDACILIApCAoQiDBCYASACQYACakHwzsAAIARrKQMAIg0gDBCYASACQfABaiACKQOYAiIMIAIpA4ACfCIOIAIpA4gCIAwgDlatfCAAIAdBsdm1H2xBE3ZrQfwAakH/AHFBwABzIgQQtwEgAkGwAWogCyAKIANBf3OsfCIMEJgBIAJBoAFqIA0gDBCYASACQZABaiACKQO4ASIMIAIpA6ABfCIOIAIpA6gBIAwgDlatfCAEELcBIAJB4AFqIAsgChCYASACQdABaiANIAoQmAEgAkHAAWogAikD6AEiCyACKQPQAXwiDSACKQPYASALIA1WrXwgBBC3ASACKQPAASELIAIpA5ABIQwgAikD8AEhDiAAQQJJDQEgAEE/TyAKQn8gAK2GQn+Fg0IAUnINBkEBIQVBACEEDAULIAJBgAFqIABBwegEbEESdiAAQQNLayIHQQR0IgQpA8j3QCILIApCAoQiDRCYASACQfAAaiAEQdD3wABqKQMAIgwgDRCYASACQeAAaiACKQOIASIOIAIpA3B8IhAg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ABggBEH/AXFFDQYgASADQQFqNgIUIAJBAToAqAEgAiABNgKkASACQeQAaiACQaQBahBMAkACfyACLQBkQQFGBEAgAigCaAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAi0AZUEBRgRAIAJB5ABqIAIoAqQBED4gAigCZCIEQQJGBEAgAigCaAwQCyACKAJoIQYgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwQCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgVBAkcNASACKAJoDA8LQQBB/LrBABCoAQwOCyACKgJoIRAgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwOCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgdBAkcNASACKAJoDA0LQQFB/LrBABCoAQwMCyACKgJoIREgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwMCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIghBAkcNASACKAJoDAsLQQJB/LrBABCoAQwKCyACKgJoIRIgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwKCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIglBAkcNASACKAJoDAkLQQNB/LrBABCoAQwICyACKgJoIRMgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwICyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgpBAkcNASACKAJoDAcLQQRB/LrBABCoAQwGCyACKgJoIRQgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwGCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgtBAkcNASACKAJoDAULQQVB/LrBABCoAQwECyACKgJoIRUgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwECyACLQBlQQFHDQIgAkHkAGogAigCpAEQKiACLQBkQQFHDQEgAigCaAwDC0EGQfy6wQAQqAEMAgsgAi0AZSEMDAILQQdB/LrBABCoAQshBkECIQQLIAEgAS0AGEEBajoAGCACIAEQViIDNgKgASACIAw6AJwBIAIgFTgCmAEgAiALNgKUASACIBQ4ApAB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IAAtAABFBEAgAUH8xsAAQQUQRA8LIAFBgcfAAEEEEEQLHgAgAEUEQBCrAgALIAAgAiADIAQgBSABKAIQEREACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARCgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEHAAscACAARQRAEKsCAAsgACACIAMgBCABKAIQETEACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARMgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEzAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEDAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEAAAscAQFvIAAlASABJQEgARCrASACJQEgAhCrARABCw8AIAAEQBCeAgALEJMCAAsYACAARQRAEKsCAAsgACACIAEoAhARAQALHAAgASgCACAAKAIAIAAoAgQgASgCBCgCDBEAAAsfAEH858EALQAARQRAQfznwQBBAToAAAsgAEEBNgIACyYAIABBHGpBACAB/QACAP0M2geMSXhlTNPCfY9Nlp8mz/0j/WMbCyYAIABBHGpBACAB/QACAP0MpB4B+3qY2OUTfOG8yehUVf0j/WMbCxIAIAAgAUEBdEEBciACEMoBAAsYACABKAIAIAEoAgQgACgCACAAKAIEEEcLFwAgACgCACABIAAoAgRBDGooAgARAQALFgEBbyAAIAEQFCECEG4iACACJgEgAAsWAQFvIAAgARAVIQIQbiIAIAImASAACxYBAW8gACABEBYhAhBuIgAgAiYBIAALGQAgASgCAEGEtMEAQQUgASgCBCgCDBEAAAsZACABKAIAQYzMwABBEiABKAIEKAIMEQAACxUAIAEgACgCACIAKAIAIAAoAgQQRAsWACAAQci2wQA2AgQgACABQRxqNgIACxYAIABBhLfBADYCBCAAIAFBHGo2AgALEAAgAEEEahBAIABBHGoQWgsZACABKAIAQa+jwQBBCCABKAIEKAIMEQAACxkAIAEoAgBBo6PBAEEDIAEoAgQoAgwRAAALGQAgASgCAEHE08EAQRcgASgCBCgCDBEAAAsZACABKAIAQaLTwQBBFCABKAIEKAIMEQAACxkAIAEoAgBBmNPBAEEKIAEoAgQoAgwRAAALGQAgASgCAEGmo8EAQQkgASgCBCgCDBEA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c3NlcnRpb24gYGxlZnQgwBAgcmlnaHRgIGZhaWxlZDogwAkKICBsZWZ0OiDACQogcmlnaHQ6IMAAwAI6IMAAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL2xlZ2FjeS5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTcuMS9zcmMvcmF3LnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZm10LnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvbXV0ZXgvbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZXJyb3IucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGVycm9yLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb3JlL3NyYy9vcHMvZnVuY3Rpb24ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3luYy9sYXp5X2xvY2sucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlx3YXNtLWJpbmRnZW4tMC4yLjExN1xzcmNcZXh0ZXJucmVmLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAc3BhcmstbGliXHNyY1xzcGxhdF9lbmNvZGUucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGRlLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeW5jL29uY2UucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlX2NvcmUtMS4wLjIyOFxzcmNcZGVcbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL2JzdHIvbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy8uLi8uLi9iYWNrdHJhY2Uvc3JjL3N5bWJvbGl6ZS9tb2QucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAc3BhcmstbGliXHNyY1xyYWQucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXHJlYWQucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTMvc3JjL2RsbWFsbG9jLnJzAHNwYXJrLXJzXHNyY1xsaWIucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcanMtc3lzLTAuMy45NFxzcmNcbGliLnJzAC9ydXN0L2RlcHMvcnVzdGMtZGVtYW5nbGUtMC4xLjI3L3NyYy9saWIucnMAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL3YwLnJzAMAsIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXIAOWludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IHN0cjo6ZnJvbV91dGY4KMAEKSA9IMAiIHdhcyBleHBlY3RlZCB0byBoYXZlIDEgY2hhciwgYnV0IMARIGNoYXJzIHdlcmUgZm91bmQAEGZsb2F0aW5nIHBvaW50IGDAAWAAAWDABmAgb3IgYMABYAALY2hhcmFjdGVyIGDAAWAACWludGVnZXIgYMABYAAJYm9vbGVhbiBgwAFgAA9taXNzaW5nIGZpZWxkIGDAAWAAEWR1cGxpY2F0ZSBmaWVsZCBgwAFgAAFgwAFgABFzdGFydCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAPZW5kIGJ5dGUgaW5kZXggwCYgaXMgbm90IGEgY2hhciBib3VuZGFyeTsgaXQgaXMgaW5zaWRlIMAIIChieXRlcyDACyBvZiBzdHJpbmcpAMALIChvcyBlcnJvciDAASkABkVycm9yKMAILCBsaW5lOiDACiwgY29sdW1uOiDAASkAVwkQAEwAAACmAAAAMgAAAN0GEABPAAAAwgIAACYAAABIDBAAEwAAAE8AAAAiAAAASAwQABMAAABOAAAAIAAAAEgMEAATAAAAOgAAACAAAABIDBAAEwAAAG8AAAAoAAAAXAwQAG0AAACVAAAADgAAAG1ldGFjaHVua3NTdGFydAA+AAAADAAAAAQAAAA/AAAAQAAAAEEAQYChwAALQQEAAABCAAAAY2FwYWNpdHkgb3ZlcmZsb3cAAABUCxAAUAAAABwAAAAFAAAAQwAAAAwAAAAEAAAARAAAAEUAAABGAEHMocAAC8ECAQAAAEcAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAAugMQAEgAAACPAgAADgAAAGVuZCBvZiByYW5nZSBzaG91bGQgYmUgYSBjaGFyYWN0ZXIgYm91bmRhcnkKCkNhdXNlZCBieToAAAAAABAAAAAEAAAASAAAAEkAAABKAAAACgpTdGFjayBiYWNrdHJhY2U6CgBdAxAAXAAAADYAAAAfAAAAXQMQAFwAAAA8AAAAGwAAAGJhY2t0cmFjZSBjYXB0dXJlIGZhaWxlZHkFEABeAAAAZwQAAA4AAADmAhAATwAAAPwDAAAzAAAAPgAAAAwAAAAEAAAAPwAAAEAAAABLAEGYpMAACzkBAAAAQgAAAMMgAAAoBQACOiAAICAgICAgIAoKU3RhY2s6Cgo+AAAADAAAAAQAAABMAAAATQAAAE4AQdykwAALoQ4BAAAAQgAAAABwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMC4CDBQEMAoEAyYJDAIgBAIGOAEBAgMBAQU4CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsBASwDMAECBAICAgEkAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABEEFAAJNBkYLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJAQEIBAIBXwMCBAYBAgGdAQMIFQI5AgEBAQEMAQkBDgcDBUMBAgYBAQIBAQMEAwEBDgJVCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAghlAQEBAgQBBQAJAQL1AQoEBAGQBAICBAEgCigGAgQIAQkGAgMuDQECxgEBAwEByQcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQMXAQABBg8ADAMDAAU7BwABPwRRAQsCAAIALgIXAAUDBggIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAT+AvMBAgEHAgUBAAdtBwBggPAAAAAAAAAEAAAABAAAAE8AAAAgewosCmVudGl0eSBub3QgZm91bmRwZXJtaXNzaW9uIGRlbmllZGNvbm5lY3Rpb24gcmVmdXNlZGNvbm5lY3Rpb24gcmVzZXRob3N0IHVucmVhY2hhYmxlbmV0d29yayB1bnJlYWNoYWJsZWNvbm5lY3Rpb24gYWJvcnRlZG5vdCBjb25uZWN0ZWRhZGRyZXNzIGluIHVzZWFkZHJlc3Mgbm90IGF2YWlsYWJsZW5ldHdvcmsgZG93bmJyb2tlbiBwaXBlZW50aXR5IGFscmVhZHkgZXhpc3Rzb3BlcmF0aW9uIHdvdWxkIGJsb2Nrbm90IGEgZGlyZWN0b3J5aXMgYSBkaXJlY3RvcnlkaXJlY3Rvcnkgbm90IGVtcHR5cmVhZC1vbmx5IGZpbGVzeXN0ZW0gb3Igc3RvcmFnZSBtZWRpdW1maWxlc3lzdGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVpbnZhbGlkIGlucHV0IHBhcmFtZXRlcmludmFsaWQgZGF0YXRpbWVkIG91dHdyaXRlIHplcm9ubyBzdG9yYWdlIHNwYWNlc2VlayBvbiB1bnNlZWthYmxlIGZpbGVxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUg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V+l78mKNBz2XuxWH+TUEanmHyY61CgZk32IRccK8BhCPpXXkiHfWbGXRGyc1ymumpbf36dOSq/AdQRYfxKG8Hh7GX+4PD1aNsc0RZdMCYWRjo/8Ws7GJSE98HFHcm01QHOky3yiO1AbZyRYOfUlxc+Mgj7Ig2HYFFDsSfC4PgoUFm37qzVnxO1MrHcq+pQGeN6/L7tdH9C/cVRehmIQ0S/lYCb+sbMOMFqsSMC4wYnl0ZSBhcnJheU9wdGlvbiB2YWx1ZW5ld3R5cGUgc3RydWN0c2VxdWVuY2VtYXBlbnVtdW5pdCB2YXJpYW50bmV3dHlwZSB2YXJpYW50dHVwbGUgdmFyaWFudHN0cnVjdCB2YXJpYW50dW5pdHUzMnU2NHVzaXplZjMyYSBib29sZWFuYSBzdHJpbmdleHBsaWNpdCBwYW5pYwAAAPEJEABkAAAAJAkAABIAAABvbmUgb2YgLCAAAAC6CxAAYgAAAAACAAATAAAAugsQAGIAAAAFAgAAMwAAALoLEABiAAAACQIAAD4AAAC6CxAAYgAAAA8CAAA6AAAAPAYQAE8AAAA+BgAAFAAAADwGEABPAAAAPgYAACEAAAA8BhAATwAAADIGAAAUAAAAPAYQAE8AAAAyBgAAIQAAAG51bGxhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbim6CxAAYgAAALMBAAAaAAAAugsQAGIAAACrAQAAPQAAALoLEABiAAAApgEAAEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAEAAgADAAQABQAGAAcACAAJAP//////////////////CgALAAwADQAOAA8A/////////////////////////////////////////////////////////////////////woACwAMAA0ADgAPAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAEAAgADAAQABQAGAAcACAAJAA//////////////////+gALAAwADQAOAA8AD/////////////////////////////////////////////////////////////////////oACwAMAA0ADgAPAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////IGF0IGxpbmUgAAAA2AUQAGMAAAD3AQAAIQAAANgFEABjAAAA+wEAAAwAAADYBRAAYwAAAAICAAAhAAAA2AUQAGMAAAALAgAAKgAAANgFEABjAAAADwIAACwAAADYBRAAYwAAABQCAAAJAAAARU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdFT0Ygd2hpbGUgcGFyc2luZyBhIHZhbHVlZXhwZWN0ZWQgYDpgZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBpZGVudGV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgYCJgaW52YWxpZCBlc2NhcGVpbnZhbGlkIG51bWJlcm51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludGNvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5na2V5IG11c3QgYmUgYSBzdHJpbmdpbnZhbGlkIHZhbHVlOiBleHBlY3RlZCBrZXkgdG8gYmUgYSBudW1iZXIgaW4gcXVvdGVzZmxvYXQga2V5IG11c3QgYmUgZmluaXRlIChnb3QgTmFOIG9yICsvLWluZilsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGV0cmFpbGluZyBjb21tYXRyYWlsaW5nIGNoYXJhY3RlcnN1bmV4cGVjdGVkIGVuZCBvZiBoZXggZXNjYXBlcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkugsQAGIAAABcAgAAEwAAALoLEABiAAAAbgIAABkAAABpbmYtaW5mTmFOAAA+AAAADAAAAAQAAAA/AAAAQAAAAFoAQbSzwQALxwEBAAAAQgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAfwcQAEsAAABxCwAADgAAAEVycm9yAAAAPAYQAE8AAAC/BAAAJAAAAEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkAABgBBAAXgAAAGsAAAANAAAAAAAAAP//////////cFoQAEGItcEAC0XKDBAAZwAAADUAAAAOAAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGEAQdi1wQALBQEAAABoAEHotcEACwUBAAAAaQBB+LXBAAsFAQAAAGoAQYi2wQAL+QQBAAAAawAAAGludGVybmFsIGVy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"));const A=tS();(typeof B=="string"||typeof Request=="function"&&B instanceof Request||typeof URL=="function"&&B instanceof URL)&&(B=fetch(B));const{instance:I,module:g}=await FS(await B,A);return rS(I)}var RS=`precision highp float;\r
|
|
11101
|
+
`))),o.push(`${D.rgb} = rgb;`),o}}).outputs}function NQ(B,A,I,g,Q,C,i){const E=new cI(B,A,I,g);return E.format=Q,E.type=C,E.internalFormat=i,E.needsUpdate=!0,E}function Ja(B){const A=pA.decode_rad_header(B);if(A[2])throw Ya(A[1]);return Ya(A[0])}function aS(){return pA.get_raycast_buffer()}function eS(){return pA.get_raycast_buffer2()}function hS(B,A,I,g,Q,C,i,E,D,o){return pA.raycast_ext_buffers(B,A,I,g,Q,C,i,E,D,o)}function cS(B,A,I,g,Q,C,i,E,D,o,s,t,w){return pA.raycast_packed_buffer(B,A,I,g,Q,C,i,E,D,o,s,t,w)}function yS(){return{__proto__:null,"./spark_rs_bg.js":{__proto__:null,__wbg_Error_2e59b1b37a9a34c3:function(B,A){return Error(_E(B,A))},__wbg___wbindgen_throw_81fc77679af83bc6:function(B,A){throw new Error(_E(B,A))},__wbg_error_a6fa202b58aa1cd3:function(B,A){let I,g;try{I=B,g=A,console.error(_E(B,A))}finally{pA.__wbindgen_free(I,g,1)}},__wbg_length_0c32cb8543c8e4c8:function(B){return B.length},__wbg_length_1e701798fdcaa3b4:function(B){return B.length},__wbg_length_fd4646b401926788:function(B){return B.length},__wbg_new_227d7c05414eb861:function(){return new Error},__wbg_new_4f9fafbb3909af72:function(){return new Object},__wbg_new_f3c9df4f38f3f798:function(){return new Array},__wbg_new_with_length_26bffbe236bf73f9:function(B){return new Float32Array(B>>>0)},__wbg_prototypesetcall_3e05eb9545565046:function(B,A,I){Uint8Array.prototype.set.call(SS(B,A),I)},__wbg_prototypesetcall_e42275e601e14eeb:function(B,A,I){Uint32Array.prototype.set.call(La(B,A),I)},__wbg_set_6be42768c690e380:function(B,A,I){B[A]=I},__wbg_set_6c60b2e8ad0e9383:function(B,A,I){B[A>>>0]=I},__wbg_set_8ee2d34facb8466e:function(){return RS(function(B,A,I){return Reflect.set(B,A,I)},arguments)},__wbg_set_a98c8da6557e63de:function(B,A,I){B.set(Ua(A,I))},__wbg_stack_3b0d974bbf31e44f:function(B,A){const I=A.stack,g=kS(I,pA.__wbindgen_malloc,pA.__wbindgen_realloc),Q=to;Ha().setInt32(B+4,Q,!0),Ha().setInt32(B+0,g,!0)},__wbg_subarray_d51e89458b3fdbf6:function(B,A,I){return B.subarray(A>>>0,I>>>0)},__wbindgen_cast_0000000000000001:function(B){return B},__wbindgen_cast_0000000000000002:function(B,A){return Ua(B,A)},__wbindgen_cast_0000000000000003:function(B,A){return La(B,A)},__wbindgen_cast_0000000000000004:function(B,A){return _E(B,A)},__wbindgen_cast_0000000000000005:function(B){return BigInt.asUintN(64,B)},__wbindgen_init_externref_table:function(){const B=pA.__wbindgen_externrefs,A=B.grow(4);B.set(0,void 0),B.set(A+0,void 0),B.set(A+1,null),B.set(A+2,!0),B.set(A+3,!1)}}}}function GS(B){const A=pA.__externref_table_alloc();return pA.__wbindgen_externrefs.set(A,B),A}function Ua(B,A){return B=B>>>0,rS().subarray(B/4,B/4+A)}function La(B,A){return B=B>>>0,FS().subarray(B/4,B/4+A)}function SS(B,A){return B=B>>>0,DC().subarray(B/1,B/1+A)}let JQ=null;function Ha(){return(JQ===null||JQ.buffer.detached===!0||JQ.buffer.detached===void 0&&JQ.buffer!==pA.memory.buffer)&&(JQ=new DataView(pA.memory.buffer)),JQ}let CC=null;function rS(){return(CC===null||CC.byteLength===0)&&(CC=new Float32Array(pA.memory.buffer)),CC}function _E(B,A){return B=B>>>0,MS(B,A)}let EC=null;function FS(){return(EC===null||EC.byteLength===0)&&(EC=new Uint32Array(pA.memory.buffer)),EC}let iC=null;function DC(){return(iC===null||iC.byteLength===0)&&(iC=new Uint8Array(pA.memory.buffer)),iC}function RS(B,A){try{return B.apply(this,A)}catch(I){const g=GS(I);pA.__wbindgen_exn_store(g)}}function kS(B,A,I){if(I===void 0){const E=oC.encode(B),D=A(E.length,1)>>>0;return DC().subarray(D,D+E.length).set(E),to=E.length,D}let g=B.length,Q=A(g,1)>>>0;const C=DC();let i=0;for(;i<g;i++){const E=B.charCodeAt(i);if(E>127)break;C[Q+i]=E}if(i!==g){i!==0&&(B=B.slice(i)),Q=I(Q,g,g=i+B.length*3,1)>>>0;const E=DC().subarray(Q+i,Q+g),D=oC.encodeInto(B,E);i+=D.written,Q=I(Q,g,i,1)>>>0}return to=i,Q}function Ya(B){const A=pA.__wbindgen_externrefs.get(B);return pA.__externref_table_dealloc(B),A}let $E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});$E.decode();const nS=2146435072;let so=0;function MS(B,A){return so+=A,so>=nS&&($E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),$E.decode(),so=A),$E.decode(DC().subarray(B,B+A))}const oC=new TextEncoder;"encodeInto"in oC||(oC.encodeInto=function(B,A){const I=oC.encode(B);return A.set(I),{read:B.length,written:I.length}});let to=0,pA;function NS(B,A){return pA=B.exports,JQ=null,CC=null,EC=null,iC=null,pA.__wbindgen_start(),pA}async function JS(B,A){if(typeof Response=="function"&&B instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(B,A)}catch(Q){if(B.ok&&I(B.type)&&B.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",Q);else throw Q}const g=await B.arrayBuffer();return await WebAssembly.instantiate(g,A)}else{const g=await WebAssembly.instantiate(B,A);return g instanceof WebAssembly.Instance?{instance:g,module:B}:g}function I(g){switch(g){case"basic":case"cors":case"default":return!0}return!1}}async function da(B){if(pA!==void 0)return pA;B!==void 0&&(Object.getPrototypeOf(B)===Object.prototype?{module_or_path:B}=B:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),B===void 0&&(B=new URL("data:application/wasm;base64,AGFzbQEAAAABhQM1YAN/f38Bf2ACf38Bf2ACf38AYAN/f38AYAF/AGABfwF/YAV/f39/fwBgBH9/f38AYAAAYAABb2AEf39/fwF/YAZ/f39/f38AYAJ/fwFvYAFvAX9gAX0BfWAFf39/fn8AYAABf2AFf39/f38Bf2ADf39vAGAGf39/f39/AX9gB39/f39/f38AYAV/f35/fwBgBX9/fH9/AGAFf399f38AYAADf39/YANvb28AYANvf28AYANvb28Bf2ADb39/AW9gAX8Bb2ADb39/AGACf28AYAF8AW9gAX4Bb2AJf39/f399fX1/AGAHf39/fX9/fwBgB39/f39/f38Bf2ACfn8AYAJ/fgBgAn9+AX9gA39+fgBgBn9/f35/fwBgBn9/f3x/fwBgBn9/f31/fwBgBH9+fn8AYA59fX19fX19fX1/b319fwFvYA19fX19fX19fX1/fX1/AW9gAW8Df39/YAp9fX19fX19fX1/AW9gBH9+f38AYAR/fX9/AGAEf3x/fwBgAXwBfwK7CRgQLi9zcGFya19yc19iZy5qcxpfX3diZ19uZXdfNGY5ZmFmYmIzOTA5YWY3MgAJEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzZiZTQyNzY4YzY5MGUzODAAGRAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8wYzMyY2I4NTQzYzhlNGM4AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsXzNlMDVlYjk1NDU1NjUwNDYAEhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld19mM2M5ZGY0ZjM4ZjNmNzk4AAkQLi9zcGFya19yc19iZy5qcxpfX3diZ19zZXRfNmM2MGIyZThhZDBlOTM4MwAaEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0XzhlZTJkMzRmYWNiODQ2NmUAGxAuL3NwYXJrX3JzX2JnLmpzH19fd2JnX3N1YmFycmF5X2Q1MWU4OTQ1OGIzZmRiZjYAHBAuL3NwYXJrX3JzX2JnLmpzHV9fd2JnX2xlbmd0aF8xZTcwMTc5OGZkY2FhM2I0AA0QLi9zcGFya19yc19iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsX2U0MjI3NWU2MDFlMTRlZWIAEhAuL3NwYXJrX3JzX2JnLmpzJl9fd2JnX25ld193aXRoX2xlbmd0aF8yNmJmZmJlMjM2YmY3M2Y5AB0QLi9zcGFya19yc19iZy5qcx1fX3diZ19sZW5ndGhfZmQ0NjQ2YjQwMTkyNjc4OAANEC4vc3BhcmtfcnNfYmcuanMaX193Ymdfc2V0X2E5OGM4ZGE2NTU3ZTYzZGUAHhAuL3NwYXJrX3JzX2JnLmpzGl9fd2JnX25ld18yMjdkN2MwNTQxNGViODYxAAkQLi9zcGFya19yc19iZy5qcxxfX3diZ19zdGFja18zYjBkOTc0YmJmMzFlNDRmAB8QLi9zcGFya19yc19iZy5qcxxfX3diZ19lcnJvcl9hNmZhMjAyYjU4YWExY2QzAAIQLi9zcGFya19yc19iZy5qcxxfX3diZ19FcnJvcl8yZTU5YjFiMzdhOWEzNGMzAAwQLi9zcGFya19yc19iZy5qcydfX3diZ19fX3diaW5kZ2VuX3Rocm93XzgxZmM3NzY3OWFmODNiYzYAAhAuL3NwYXJrX3JzX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAxACAQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMgAMEC4vc3BhcmtfcnNfYmcuanMgX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDMADBAuL3NwYXJrX3JzX2JnLmpzIF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA0AAwQLi9zcGFya19yc19iZy5qcyBfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNQAhA5oCmAIFAAIBAQIFAQEGIgcAAwUBAAICDg4EBQUCCgEAACMDAQUkBQUCAgICBAIDAwACAAoFCAETAhQCAQIOBRQPAQUCAAUEDwEDAiUDAQIFAgUEBQEBBwEBAhAHAQUBAQUBDwEBAQEBJgYBCwYCCwQBBQInBAIBAgsDAQICAQMDBQECASgCBAcBBAQABgQEAgAAAAMBCwQEBgIGAgIGBykLKissAAAGAwcBAAIBAAMDAwMBAQIBAwMB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AWogATYCAAsgAkEIag8LQQAhAEHc58EAKAIAIgEgBU0NAEHc58EAIAEgBWsiATYCAEHk58EAQeTnwQAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQMAQsgAA8LIABBCGoL4RcCGX8CfCMAQbAEayIDJAAgA0IANwOYASADQgA3A5ABIANCADcDiAEgA0IANwOAASADQgA3A3ggA0IANwNwIANCADcDaCADQgA3A2AgA0IANwNYIANCADcDUCADQgA3A0ggA0IANwNAIANCADcDOCADQgA3AzAgA0IANwMoIANCADcDICADQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgA0IANwO4AiADQgA3A7ACIANCADcDqAIgA0IANwOgAiADQgA3A5gCIANCADcDkAIgA0IANwOIAiADQgA3A4ACIANCADcD+AEgA0IANwPwASADQgA3A+gBIANCADcD4AEgA0IANwPYASADQgA3A9ABIANCADcDyAEgA0IANwPAASADQgA3A7gBIANCADcDsAEgA0IANwOoASADQgA3A6ABIANCADcD2AMgA0IANwPQAyADQgA3A8gDIANCADcDwAMgA0IANwO4AyADQgA3A7ADIANCADcDqAMgA0IANwOgAyADQgA3A5gDIANCADcDkAMgA0IANwOIAyADQgA3A4ADIANCADcD+AIgA0IANwPwAiADQgA3A+gCIANCADcD4AIgA0IANwPYAiADQgA3A9ACIANCADcDyAIgA0IANwPAAiADQeADakEAQdAA/AsAQfTgwQAoAgAiCSEGIAJBA2tBGG0iBUEAIAVBAEobIgshBSALQQJ0QYThwQBqIQcDQCADIARBA3RqIAVBAEgEfEQAAAAAAAAAAAUgBygCALcLOQMAIAQgBkkiCgRAIAdBBGohByAFQQFqIQUgBCAKaiIEIAZNDQELC0EAIQUDQEEAIQQgA0HAAmogBUEDdGogHCAAIARBA3RqKwMAIAMgBSAEa0EDdGorAwCioDkDACAFIAlJIgQEQCAEIAVqIgUgCU0NAQsLRAAAAAAAAPB/RAAAAAAAAOB/IAIgC0FobGoiCkEYayIGQf4PSyIPG0QAAAAAAAAAAEQAAAAAAABgAyAGQblwSSIQG0QAAAAAAADwPyAGQYJ4SCIRGyAGQf8HSiISG0H9FyAGIAZB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AgQoAgwRAAAMDAsgASgCAEHXosEAQQMgASgCBCgCDBEAAAwLCyABKAIAQdqiwQBBBCABKAIEKAIMEQAADAoLIAEoAgBB3qLBAEEMIAEoAgQoAgwRAAAMCQsgASgCAEHqosEAQQ8gASgCBCgCDBEAAAwICyABKAIAQfmiwQBBDSABKAIEKAIMEQAADAcLIAEoAgBBhqPBAEEOIAEoAgQoAgwRAAAMBgsgASgCACAAKAIEIAAoAgggASgCBCgCDBEAAAwFCyAAKQMIIgpC/////////weDIQsgCkL///////////8Ag0L/////////9/8AWARAIApCNIinIQAgCkIAUw0CIAJBsAJqDAMLQYizwQBBi7PBACAKQgBZIgAbQY+zwQAgC1AiBBshA0EDQQQgABtBAyAEGyEADAMLIAEoAgBB5KTBAEEEIAEoAgQoAgwRAAAMAwsgAkEtOgCwAkEBIQggAkGxAmoLIQYCfwJAAkACQCAAQf8PcSIARSALUHFFBEAgAEECSSALQgBSciEDIAtCgICAgICAgAiEIAsgABsiC0IChiEKIAtCAYMhDwJAAkAgAEG1CGtBzHcgABsiAEEASARAIAJBkAJqQejOwAAgACAAQYWiU2xBFHYgAEF/R2siAGoiB0EEdCIEaykDACILIApCAoQiDBCYASACQYACakHwzsAAIARrKQMAIg0gDBCYASACQfABaiACKQOYAiIMIAIpA4ACfCIOIAIpA4gCIAwgDlatfCAAIAdBsdm1H2xBE3ZrQfwAakH/AHFBwABzIgQQtwEgAkGwAWogCyAKIANBf3OsfCIMEJgBIAJBoAFqIA0gDBCYASACQZABaiACKQO4ASIMIAIpA6ABfCIOIAIpA6gBIAwgDlatfCAEELcBIAJB4AFqIAsgChCYASACQdABaiANIAoQmAEgAkHAAWogAikD6AEiCyACKQPQAXwiDSACKQPYASALIA1WrXwgBBC3ASACKQPAASELIAIpA5ABIQwgAikD8AEhDiAAQQJJDQEgAEE/TyAKQn8gAK2GQn+Fg0IAUnINBkEBIQVBACEEDAULIAJBgAFqIABBwegEbEESdiAAQQNLayIHQQR0IgQpA8j3QCILIApCAoQiDRCYASACQfAAaiAEQdD3wABqKQMAIgwgDRCYASACQeAAaiACKQOIASIOIAIpA3B8IhAg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ABggBEH/AXFFDQYgASADQQFqNgIUIAJBAToAqAEgAiABNgKkASACQeQAaiACQaQBahBMAkACfyACLQBkQQFGBEAgAigCaAwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAi0AZUEBRgRAIAJB5ABqIAIoAqQBED4gAigCZCIEQQJGBEAgAigCaAwQCyACKAJoIQYgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwQCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgVBAkcNASACKAJoDA8LQQBB/LrBABCoAQwOCyACKgJoIRAgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwOCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgdBAkcNASACKAJoDA0LQQFB/LrBABCoAQwMCyACKgJoIREgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwMCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIghBAkcNASACKAJoDAsLQQJB/LrBABCoAQwKCyACKgJoIRIgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwKCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIglBAkcNASACKAJoDAkLQQNB/LrBABCoAQwICyACKgJoIRMgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwICyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgpBAkcNASACKAJoDAcLQQRB/LrBABCoAQwGCyACKgJoIRQgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwGCyACLQBlQQFHDQIgAkHkAGogAigCpAEQPiACKAJkIgtBAkcNASACKAJoDAULQQVB/LrBABCoAQwECyACKgJoIRUgAkHkAGogAkGkAWoQTCACLQBkQQFGBEAgAigCaAwECyACLQBlQQFHDQIgAkHkAGogAigCpAEQKiACLQBkQQFHDQEgAigCaAwDC0EGQfy6wQAQqAEMAgsgAi0AZSEMDAILQQdB/LrBABCoAQshBkECIQQLIAEgAS0AGEEBajoAGCACIAEQViIDNgKgASACIAw6AJwBIAIgFTgCmAEgAiALNgKUASACIBQ4ApABIAIgCjYCjAEgAiATOAKIASACIAk2AoQBIAIgEjgCgAEgAiAINgJ8IAIgETgCeCACIAc2AnQgAiAQOAJwIAIgBTYCbCACIAY2AmggAiAENgJkQQIhBSAEQQJHBEAgAw0GIAIgAkHsAGoiAygCMDYCYCACIAP9AAIg/QsDUCACIAP9AAIQ/QsDQCACIAP9AAIA/QsDMCAGIQMgBCEFDAYLIAMNAgwECyABIAEtABhBAWsiBDoAGCAEQf8BcUUNAiABIANBAWo2AhQgAkEBOgCoASACIAE2AqQBQf8BIQtBAiEOQQIhDUECIQpBAiEIQQIhBkECIQlBAiEHAn8DQAJAIAJB5ABqIAJBpAFqEEEgAi0AZEEBRgRAIAIoAmghBAwBCwJAAkACQAJAAkACQAJAAkACQCACLQBlQQFGBEAgAigCpAEiA0EANgIIIAMgAygCFEEBajYCFCACQeQAaiADQQxqIAMQJSACKAJoIQQgAigCZEECRg0KAkACQAJAIAIoAmxBBmsOBQAMDAwBDAsgBCgAAEHyzonrBHMiDyAEQQRqIgUvAABB6dwBc3JFDQMgBS8AAEHh8AFzIA9yDQEgCUECRg0EQbq5wQBBBhDGASEEQQIMDgsgBCkAAELs3M2alozbss0AhSIWIARBCGoiBTMAAELp3AGFhFANBCAFMwAAQuHwAYUgFoRQDQUgBCkAAELs3pH7hK7YsekAhSAFMwAAQvTyAYWEUEUNCiALQf8BcUH/AUYNCUHmucEAQQoQxgEhBEECDA0LIAUvAABB4fABcyIPIAQoAABB89DF6QRzckUNBSAPIAQoAABB89DJ6QRzckUNBiAPIAQoAABB89DN6QRzcg0JIA5BAkYNB0HgucEAQQYQxgEhBEECDAwLIA5BACAOQQJHGyEFIA1BACANQQJHGyENIApBACAKQQJHGyEKIAhBACAIQQJHGyEIIAZBACAGQQJHGyEGIAlBACAJQQJHGyEJQQIgCyALQf8BcUH/AUYbIQsgDCEEIAdBACAHQQJHGwwLCyAHQQJHBEBBtLnBAEEGEMYBIQRBAgwLCyADEIUBIgQNCCACQeQAaiADED4gAigCZCIHQQJGBEAgAigCaCEEDAkLIAIoAmghDAwJCyADEIUBIgQNByACQeQAaiADED4gAigCZCIJQQJGBEAgAigCaCEEDAgLIAIqAmghEgwICyAGQQJHBEBBwLnBAEEKEMYBIQRBAgwJCyADEIUBIgQNBiACQeQAaiADED4gAigCZCIGQQJGBEAgAigCaCEEDAcLIAIqAmghEAwHCyAIQQJHBEBByrnBAEEKEMYBIQRBAgwICyADEIUBIgQNBSACQeQAaiADED4gAigCZCIIQQJGBEAgAigCaCEEDAYLIAIqAmghEQwGCyAKQQJHBEBB1LnBAEEGEMYBIQRBAgwHCyADEIUBIgQNBCACQeQAaiADED4gAigCZCIKQQJGBEAgAigCaCEEDAULIAIqAmghEwwFCyANQQJHBEBB2rnBAEEGEMYBIQRBAgwGCyADEIUBIgQNAyACQeQAaiADED4gAigCZCINQQJGBEAgAigCaCEEDAQLIAIqAmghFAwECyADEIUBIgQNAiACQeQAaiADED4gAigCZCIOQQJGBEAgAigCaCEEDAMLIAIqAmghFQwDCyADEIUBIgQNASACQeQAaiADECogAi0AZEEBRgRAIAIoAmghBAwCCyACLQBlIQsMAgsgAxAeIgRFDQELC0ECCyEHIAEgAS0AGEEBajoAGCACIAEQdCIDNgKgASACIAs6AJwBIAIgFTgCmAEgAiAFNgKUASACIBQ4ApABIAIgDTYCjAEgAiATOAKIASACIAo2AoQBIAIgETgCgAEgAiAINgJ8IAIgEDgCeCACIAY2AnQgAiASOAJwIAIgCTYCbCACIAQ2AmggAiAHNgJkQQIhBSAHQQJHBEAgAw0FIAIgAkHsAGoiAygCMDYCYCACIAP9AAIg/QsDUCACIAP9AAIQ/QsDQCACIAP9AAIA/QsDMCAEIQMgByEFDAULIANFBEAgBCEDDAULIAJBoAFqEFogBCEDDAQLIAEgA0EBaiIENgIUAn8CQCAEIAVPDQAgASADQQJqIgc2AhQCQAJAIAQgBmotAABB9QBHDQAgByAEIAUgBCAFSxsiBEYNAiABIANBA2oiDDYCFCAGIAdqLQAAQewARwRAIAwhBwwBCyAEIAxGDQIgASADQQRqIgc2AhQgBiAMai0AAEHsAEYNAQsgAkEJNgJkIAJBKGogBiAFIAcQIyACQeQAaiACKAIoIAIoAiwQ0AEMAgsgAEECNgIADAgLIAJBBTYCZCACQSBqIAYgBSAEECMgAkHkAGogAigCICACKAIkENABCyEDIABBfzYCACAAIAM2AgQMBgsgAkGgAWoQWgwBCyACQRg2AmQgAkEQaiAGIAUgA0EBaiIBIAUgASAFSRsQIyACQeQAaiACKAIQIAIoAhQQ0AEMAwsgBiEDCyAFQQJGBEAgAyABEI4BDAILIAAgAigCYDYCOCAAIAL9AANQ/QsCKCAAIAL9AANA/QsCGCAAIAL9AAMw/QsCCCAAIAM2AgQgACAFNgIADAILIAJBGDYCZCACQQhqIAYgBSADQQFqIgEgBSABIAVJGxAjIAJB5ABqIAIoAgggAigCDBDQAQshAyAAQX82AgAgACADNgIECyACQbABaiQAC5oYAQt/IwBBgAFrIgMkAAJAIAAQhQEiAQ0AIABBADYCCCAAQQxqIQsCQCAAKAIUIgEgACgCECICTwRAIAsoAgAhBwwBCyAAKAIMIQcDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEgB2otAAAiBUEJaw4lAQEICAEICAgICAgICAgICAgICAgICAgBCAcICAgICAgICAgIBQALIAVB2wBrDiEFBwcHBwcHBwcHBwMHBwcHBwcHAQcHBwcHAgcHBwcHBwUHCyAAIAFBAWoiATYCFCABIAJHDQ4gAiEBDA8LIAAgAUEBaiIFNgIUIAIgBU0NByAAIAFBAmoiBDYCFAJAIAUgB2otAABB9QBHDQAgBCAFIAIgAiAFSRsiBUYNCCAAIAFBA2oiBjYCFCAEIAdqLQAAQewARwRAIAYhBAwBCyAFIAZGDQggACABQQRqIgQ2AhQgBiAHai0AAEHsAEYNDAsgA0EJNgJ0IANByABqIAcgAiAEECMgA0H0AGogAygCSCADKAJMENABIQEMDwsgACABQQFqIgU2AhQgAiAFTQ0HIAAgAUECaiIENgIUAkAgBSAHai0AAEHyAEcNACAEIAUgAiACIAVJGyIFRg0IIAAgAUEDaiIGNgIUIAQgB2otAABB9QBHBEAgBiEEDAELIAUgBkYNCCAAIAFBBGoiBDYCFCAGIAdqLQAAQeUARg0LCyADQQk2AnQgA0HYAGogByACIAQQIyADQfQAaiADKAJYIAMoAlwQ0AEhAQwOCyAAIAFBAWoiBTYCFCACIAVNDQcgACABQQJqIgQ2AhQCQCAFIAdqLQAAQeEARw0AIAQgBSACIAIgBUkbIgVGDQggACABQQNqIgY2AhQgBCAHai0AAEHsAEcEQCAGIQQMAQsgBSAGRg0IIAAgAUEEaiIINgIUIAYgB2otAABB8wBHBEAgCCEEDAELIAUgCEYNCCAAIAFBBWoiBDYCFCAHIAhqLQAAQeUARg0KCyADQQk2AnQgA0HoAGogByACIAQQIyADQfQAaiADKAJoIAMoAmwQ0AEhAQwNCyAAIAFBAWo2AhQMAwsgCkEBcSICIAAoAgAgACgCCCIBa0sEQCMAQRBrIgQkACACIAEgAmoiAUsEQEEAQQAQ5AEACyAEQQRqIAAoAgAiBiAAKAIEQQggASAGQQF0IgYgASAGSxsiASABQQhNGyIBQQFBARCMASAEKAIEQQFGBEAgBCgCCCAEKAIMEOQBAAsgBCgCCCEGIAAgATYCACAAIAY2AgQgBEEQaiQAIAAoAgghAQsgACACBH8gACgCBCABaiAJOgAAIAFBAWoFIAELNgIIIAAgACgCFEEBajYCFEEAIQQMCAsgACABQQFqNgIUIAsQUiIBDQoMBgsgBUEwa0H/AXFBCk8NBAsjAEEwayIFJAAgACgCDCEIAkACQAJAAkAgACgCFCIBIAAoAhAiBkkEQCAAIAFBAWoiBDYCFCABIAhqLQAAIgJBMEYNAiACQTFrQf8BcUEITQ0BIAQhAQsgBUENNgIkIAVBGGogCCAGIAEQIyAFQSRqIAUoAhggBSgCHBDQASEBDAMLIAQgBk8NAQNAIAQgCGotAABBMGtB/wFxQQlLDQIgACAEQQFqIgQ2AhQgBCAGRw0AC0EAIQEMAgsgBCAGTw0AIAQgCGotAABBMGtB/wFxQQlLDQAgBUENNgIkIAVBCGogCCAGIAFBAmoiBCAGIAQgBkkbECMgBUEkaiAFKAIIIAUoAgwQ0AEhAQwBC0EAIQEgBCAGTw0AAkACQCAEIAhqLQAAIgJB5QBGIAJBxQBGckUEQCACQS5HDQMgACAEQQFqIgI2AhQgAiAGTw0CIAIgCGotAABBMGtB/wFxQQlLDQIgBEECaiEEA0AgBiAEIgJGDQIgAkEBaiEEIAIgCGotAAAiB0Ewa0H/AXFBCkkNAAsgACACNgIUIAdBIHJB5QBHDQMLIwBBIGsiAiQAIAAgACgCFCIBQQFqIgQ2AhQgACgCDCEGAkAgBCAAKAIQIghPDQACQCAEIAZqLQAAQStrDgMAAQABCyAAIAFBAmoiBDYCFAsCQAJAIAQgCEkEQCAAIARBAWoiATYCFCAEIAZqLQAAQTBrQf8BcUEJTQ0BIAEhBAsgAkENNgIUIAJBCGogBiAIIAQQIyACQRRqIAIoAgggAigCDBDQASEEDAELQQAhBCABIAhPDQADQCABIAZqLQAAQTBrQf8BcUEJSw0BIAAgAUEBaiIBNgIUIAEgCEcNAAsLIAJBIGokACAEIQEMAgsgACAGNgIUDAELIAVBDTYCJCAFQRBqIAggBiAEQQJqIgQgBiAEIAZJGxAjIAVBJGogBSgCECAFKAIUENABIQELIAVBMGokACABRQ0EDAgLIANBBTYCdCADQUBrIAcgAiAFECMgA0H0AGogAygCQCADKAJEENABIQEMBwsgA0EFNgJ0IANB0ABqIAcgAiAFECMgA0H0AGogAygCUCADKAJUENABIQEMBgsgA0EFNgJ0IANB4ABqIAcgAiAFECMgA0H0AGogAygCYCADKAJkENABIQEMBQsgA0EKNgJ0IANBOGogByACIAFBAWoiACACIAAgAkkbECMgA0H0AGogAygCOCADKAI8ENABIQEMBAtBASEEIApBAXEEQCAJIQUMAQsgACgCCCIBRQRAQQAhAQwECyAAIAFBAWsiATYCCCAAKAIEIAFqLQAAIQULAkAgAwJ/AkACQAJAAkAgACgCFCIBIAAoAhAiAk8EQCAFIQkMAQsgACgCBCEGIAAoAgwhByAAKAAIIQogBSEJA0ACQAJAAkACQAJAAkAgASAHai0AACIFQQlrDiQBAQgIAQgICAgICAgICAgICAgICAgICAEICAgICAgICAgICAIACyAFQd0ARg0CIAVB/QBGDQMMBwsgACABQQFqIgE2AhQgASACRw0EIAIhAQwFCyAEQQFxRQ0GIAAgAUEBaiIBNgIUDAYLIAlB/wFxQdsARw0EDAELIAlB/wFxQfsARw0DCyAAIAFBAWoiATYCFCAKRQRAQQAhAQwKCyAAIApBAWsiCjYCCCAGIApqLQAAIQlBASEEIAEgAkkNAAsLAkAgAyAJQf8BcSIAQdsARwR/IABB+wBHDQFBAwVBAgs2AnQgA0EwaiALKAIAIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIwIAMoAjQQ0AEhAQwIC0GQtsEAQShB0LzBABDqAQALIARBAXFFDQBBByAJQf8BcSIAQdsARg0CGiAAQfsARg0BQZC2wQBBKEHgvMEAEOoBAAsgCUH/AXFB+wBHDQIgASACSQRAA0ACQAJAIAEgB2otAABBCWsiBEEZSw0AQQEgBHRBk4CABHENASAEQRlHDQAgACABQQFqNgIUIAsQUiIBDQkgACgCDCEHAkACQCAAKAIUIgEgACgCECICSQRAA0ACQCABIAdqLQAAQQlrDjIAAAMDAAMDAwMDAwMDAwMDAwMDAwMDAwADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBAMLIAAgAUEBaiIBNgIUIAEgAkcNAAsgAiEBCyADQQM2AnQgA0EgaiAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIgIAMoAiQQ0AEhAQwLCyADQQY2AnQgA0EYaiAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIYIAMoAhwQ0AEhAQwKCyAAIAFBAWoiATYCFAwGCyADQRE2AnQgA0EIaiAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIIIAMoAgwQ0AEhAQwICyAAIAFBAWoiATYCFCABIAJHDQALIAIhAQsgA0EDNgJ0IANBEGogByACIAFBAWoiACACIAAgAkkbECMgA0H0AGogAygCECADKAIUENABIQEMBQtBCAs2AnQgAyAHIAIgAUEBaiIAIAIgACACSRsQIyADQfQAaiADKAIAIAMoAgQQ0AEhAQwDC0EBIQogASACSQ0ACwsgA0EFNgJ0IANBKGogByACIAFBAWoiACACIAAgAkkbECMgA0H0AGogAygCKCADKAIsENABIQELIANBgAFqJAAgAQv+DwMHfwF+AXsjAEEwayIDJAACQAJAIAAoAgAiBkUEQCAAKAIQIgBFDQEgAEHhwsAAQQEQRCEEDAILIAAgACgCDEEBaiIENgIMAkACQAJAAkACQAJAAkACQCAEQfUDTwRAIAAoAhAiAUUNASABQcjCwABBGRBERQ0BDAgLAkACQAJAAkAgACgCCCICIAAoAgQiCE8EQCAAKAIQIgFFDQEgAUG4wsAAQRAQRA0MDAELQQEhBCAAIAJBAWoiBzYCCAJAAkACQAJAAkACQCACIAZqLQAAIgVByQBrDgYCAQEBCAUACwJAIAVBwgBrDgIDBAALIAVB2ABrDgIHCwALIAAoAhAiAUUNBCABQbjCwABBEBBERQ0EDBELIAAgARAfDRAgAQ0GDAwLIwBBIGsiAiQAAkACQCAAKAIARQRAIAAoAhAiAUUNASABQeHCwABBARBEIQEMAgsgAiAAEI8BIAIoAgBFBEAgACgCECIFBEBBASEBIAVByMLAAEG4wsAAIAItAARBAXEiBRtBGUEQIAUbEEQNAwsgACAC/QACAP0LAgAMAQsgACgCEEUNACAA/QACACEKIAAgAv0AAgD9CwIAIAIgCv0LAxAgACABQQFxEB8hASAAIAL9AAMQ/QsCAAwBC0EAIQELIAJBIGokACABRQ0MDA8LIANBIGogAEHzABCNASADLQAgQQFGBEAgAy0AISEBIAAoAhAiAgRAIAJByMLAAEG4wsAAIAFBAXEiAhtBGUEQIAIbEEQNEAsgACABOgAEDAoLIAAoAgBFBEAgACgCECIARQ0OIABB4cLAAEEBEEQhBAwPCyADKQMoIQkgA0EgaiAAED8gAygCIEUEQCADLQAkIQEgACgCECICBEAgAkHIwsAAQbjCwAAgAUEBcSICG0EZQRAgAhsQRA0QCyAAIAE6AAQMCgsgAyAD/QACIP0LAwAgACgCECIBRQ0LIAMgARAnDQwgACgCECIBRSAJUHINCyABKAIIQYCAgARxDQsgASgCAEHIxsAAQQEgASgCBCgCDBEAAA0OIAAoAhAjAEEQayICJABBESEBA0AgASACakECayAJp0EPcS0AjMRAOgAAIAFBAWshASAJQgSIIglCAFINAAtBAUGOx8AAQQIgASACakEBa0ERIAFrEEsgAkEQaiQADQ4gACgCECIBKAIAQcnGwABBASABKAIEKAIMEQAADQ4MCwsgByAISQRAIAAgAkECajYCCCAGIAdqLQAAIgJBwQBrQf8BcUEaSQ0CIAJB4QBrQX8hAkH/AXFBGkkNAgsgACgCECIBRQ0AIAFBuMLAAEEQEEQNCwtBACEEIABBADoABCAAQQA2AgAMDAtBASEEIAAgARAfDQsCQCAAKAIADQAgACgCECIBRQ0LIAFBysbAAEECEEQNDCAAKAIADQBBACEEIAAoAhAiAEUNDCAAQeHCwABBARBEIQQMDAsgA0EgaiAAQfMAEI0BIAMtACBBAUYEQCADLQAhIQEgACgCECICBEAgAkHIwsAAQbjCwAAgAUEBcSICG0EZQRAgAhsQRA0NCyAAIAE6AAQMBwsgACgCAEUEQCAAKAIQIgBFDQsgAEHhwsAAQQEQRCEEDAwLIAMpAyghCSADQSBqIAAQPyADKAIgRQRAIAMtACQhASAAKAIQIgIEQCACQcjCwABBuMLAACABQQFxIgIbQRlBECACGxBEDQ0LIAAgAToABAwHCyADIAP9AAIg/QsDEAJAAkACQCACQX9HBEAgACgCECIBBEAgAUHMxsAAQQMQRA0OCyACQcMARg0BIAJB0wBGDQIgAyACNgIgIAAoAhAiAUUNAyADQSBqIAEQeg0NDAMLIAMoAhQgAygCHHJFDQsgACgCECIBRQ0LIAFBysbAAEECEEQNDiAAKAIQIgFFDQsgA0EQaiABECdFDQsMDgsgACgCECIBRQ0BIAFBz8bAAEEHEEQNCwwBCyAAKAIQIgFFDQAgAUHWxsAAQQQQRA0KCyAAKAIQIQIgAygCFCADKAIcckUNBSACRQ0IIAJB2sbAAEEBEEQNCyAAKAIQIgFFDQggA0EQaiABECcNCyAAKAIQIQIMBQsgA0EgaiAAQfMAEI0BIAMtACBBAUcNAiADLQAhIQEgACgCECICBEAgAkHIwsAAQbjCwAAgAUEBcSICG0EZQRAgAhsQRA0LCyAAIAE6AAQMBQsgACgCECIBRQ0FIAFBysbAAEECEERFDQUMCQsgAEEBOgAEDAMLIwBBEGsiASQAIAAoAhAhAiAAQQA2AhAgAEEAEB8EQEH0wsAAQT0gAUEPakHkwsAAQbTDwAAQrgEACyAAIAI2AhAgAUEQaiQACyAAKAIQIgEEQCABQdzGwABBARBEDQcLIAAQJg0EIAVBzQBHBEAgACgCECIBBEAgAUHdxsAAQQQQRA0GCyAAQQAQHw0HCyAAKAIQIgFFDQMgAUHhxsAAQQEQREUNAwwGCyACRQ0CIAJB28bAAEEBEEQNBSAAKAIQIQEgAyAJNwMgIAFFDQIgA0EgaiABEHMNBSAAKAIQIgFFDQIgAUGVxcAAQQEQREUNAgwFC0EAIQQgAEEANgIADAQLIAAoAhAiAQRAIAFB3MbAAEEBEEQNBAsgABBnDQMgACgCECIBRQ0AIAFB4cbAAEEBEEQNAwtBACEEIAAoAgBFDQIgACAAKAIMQQFrNgIMDAILQQEhBAwBC0EAIQQLIANBMGokACAEC4YYAwd/AX4BeyMAQSBrIgUkAAJAAkAgACgCACIHRQRAIAAoAhAiAEUNASAAQeHCwABBARBEIQIMAgsCQAJAAkACQAJAIAAoAggiAiAAKAIEIgZPBEAgACgCECIBRQ0BIAFBuMLAAEEQEERFDQEMBQsgACACQQFqIgQ2AgggAiAHai0AACEDIAAgACgCDEEBaiIINgIMAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAhB9ANNBEACQCADQdEAaw4pDAsCEAIRAgICAgICAgICAgUICQIKAgIEBQQCBQQFBAMCAgUEAgICBQQACyADQcEAaw4CDgUBCyAAKAIQIgEEQCABQcjCwABBGRBEDRcLIABBAToABAwTCyAAKAIQIgFFDREgAUG4wsAAQRAQRA0VDBELIAAoAhAiAUUNE0EBIQIgAUH7xsAAQQEQREUNEwwWCyAAIAMQcA0TDBILIAQgBk8NECAEIAdqLQAAQe4ARg0BDBALIwBBIGsiAiQAAkACQCAAKAIARQRAIAAoAhAiAUUNASABQeHCwABBARBEIQEMAgsgAiAAEI8BIAIoAgBFBEAgACgCECIDBEBBASEBIANByMLAAEG4wsAAIAItAARBAXEiAxtBGUEQIAMbEEQNAwsgACAC/QACAP0LAgAMAQsgACgCEEUNACAA/QACACEKIAAgAv0AAgD9CwIAIAIgCv0LAxAgACABQQFxECAhASAAIAL9AAMQ/QsCAAwBC0EAIQELIAJBIGokACABDREMEAsgACACQQJqNgIIIAAoAhAiAUUNDkEBIQIgAUH+xMAAQQEQREUNDgwSCyAFQRhqIAAQgQEgBSgCGCIBRQRAIAUtABwhASAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0TCyAAIAE6AAQMDQsgBUEIaiABIAUoAhwQXQJAAkACQCAFKQMIQgFSDQAgBSkDECIJQgFWDQAgCadBAWsNAQwCCyAAKAIQIgFFDQ0gAUG4wsAAQRAQRA0RDA0LIAAoAhAiAUUNDyABQfzGwABBBRBEDRAMDwsgACgCECIBRQ0OIAFBgcfAAEEEEEQNDwwOCyAFQRhqIAAQgQEgBSgCGCIBRQRAIAUtABwhASAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0SCyAAIAE6AAQMDAsgBUEIaiABIAUoAhwQXQJAIAUpAwhCAVINACAFKQMQIglCgICAgBBaDQAgCaciAUGAsANzQYCAxABrQYCQvH9JDQAgACgCECEDIwBBIGsiAiQAAn9BACADRQ0AGgJAIAMoAgBBJyADKAIEKAIQEQEADQADQAJAAkACfwJAAkAgAUEiRwRAIAFBf0YEQCADKAIAQScgAygCBCgCEBEBAAwJCwJAAkACQAJAAkACQCABQSZMBEAgAUEJaw4FAgQJCQMBCyABQSdGDQUgAUHcAEYNBAwICyABDQcgAkIANwECIAJB3OAAOwEADAYLIAJCADcBAiACQdzoATsBAAwFCyACQgA3AQIgAkHc5AE7AQAMBAsgAkIANwECIAJB3NwBOwEADAMLIAJCADcBAiACQdy4ATsBAAwCCyACQgA3AQIgAkHczgA7AQAMAQtBfyEBIAMoAgBBIiADKAIEKAIQEQEADQYMBQtBAiEEQQAMAQsCQAJAAkAgAUH/BU0NACABEGVFDQAMAQsgARA4DQELIAJBEGogARCGASACIAIvABg7AQggAiACKQAQNwMAIAItABohASACLQAbIQQgAiACLwEIOwEYIAIgAikDADcDECABQf8BcSAEQf8BcUkNAgwDCyACIAE2AgBBgQEhBEGAAQshASACIAIvAQg7ARggAiACKQMANwMQCyAEQf8BcSEHIAFB/wFxIQQgAygCACEBIAMoAgQoAhAhBiACKAIQIQgDQCABIAdBgAFNBH8gAkEQaiAEai0AAAUgCAsgBhEBAA0DIAcgBEEBaiIERw0ACwtBfyEBDAALAAtBAQsgAkEgaiQADQ8MDgsgACgCECIBRQ0KIAFBuMLAAEEQEEQNDgwKCwJAIAENACAAKAIQIgNFDQBBASECIANBhcfAAEEBEEQNEAsgACgCECIDBEBBASECIANB6MbAAEEBEEQNEAsgABA6DQ0MCAsgBCAGTw0AIAQgB2otAABB5QBGDQELAkAgAQ0AIAAoAhAiBEUNAEEBIQIgBEGFx8AAQQEQRA0OCyAAKAIQIgQEQEEBIQIgBEHixsAAQQEQRA0OCyADQdIARw0BDAULIAAgAkECajYCCCAAEDoNCgwJCyAAKAIQIgJFDQMgAkHkxsAAQQQQRA0JDAMLAkAgAQ0AIAAoAhAiA0UNAEEBIQIgA0GFx8AAQQEQRA0LCyAAKAIQIgMEQEEBIQIgA0HIxsAAQQEQRA0LCyAAEJQBDQggACgCECIDRQ0HQQEhAiADQcnGwABBARBERQ0DDAoLAkAgAQ0AIAAoAhAiA0UNAEEBIQIgA0GFx8AAQQEQRA0KCyAAKAIQIgMEQEEBIQIgA0HxxsAAQQEQRA0KC0EAIQICfwJAIAAoAgAiA0UNAANAAkAgACgCCCIEIAAoAgRPDQAgAyAEai0AAEHFAEcNACAAIARBAWo2AggMAgsCQCACRQ0AIAAoAhAiA0UNACADQd+jwQBBAhBERQ0AQQEMAwtBASAAQQEQIA0CGiACQQFqIQIgACgCACIDDQALC0EACyEDIAUgAjYCBCAFIAM2AgBBASECIAUoAgBBAXENCSAFKAIEQQFGBEAgACgCECIDRQ0HIANB8sbAAEEBEEQNCgsgACgCECIDRQ0GIANBgsXAAEEBEERFDQIMCQsCQCABDQAgACgCECIDRQ0AQQEhAiADQYXHwABBARBEDQkLQQEhAiAAQQEQHw0IIAAoAgAiBEUEQCAAKAIQIgBFDQggAEHhwsAAQQEQRCECDAkLIAAoAggiAyAAKAIETwRAIAAoAhAiAUUNAyABQbjCwABBEBBERQ0DDAkLIAAgA0EBajYCCAJAAkACQCADIARqLQAAQdMAaw4DAgEEAAsgACgCECIBRQ0EIAFBuMLAAEEQEEQNCAwECyAAKAIQIgMEQCADQfHGwABBARBEDQoLIAAQlAENByAAKAIQIgNFDQYgA0GCxcAAQQEQREUNAgwJCyAAKAIQIgIEQCACQYbHwABBAxBEDQcLQQEhAkEAIQcjAEEgayIDJAACQAJAAkAgACgCACIERQ0AA0ACQCAAKAIIIgYgACgCBE8NACAEIAZqLQAAQcUARw0AIAAgBkEBajYCCAwCCwJAAkAgB0UNACAAKAIQIgRFDQAgBEHfo8EAQQIQRA0EIAAoAgANACAAKAIQIgZFDQFBASEEIAZB4cLAAEEBEERFDQEMBQsgAyAAQfMAEI0BIAMtAABBAUYEQCADLQABIQcgACgCECIGBEBBASEEIAZByMLAAEG4wsAAIAdBAXEiBhtBGUEQIAYbEEQNBgsgACAHOgAEIABBADYCAAwDCyAAKAIARQRAIAAoAhAiBkUNAUEBIQQgBkHhwsAAQQEQREUNAQwFCyADIAAQPyADKAIARQRAIAMtAAQhByAAKAIQIgYEQEEBIQQgBkHIwsAAQbjCwAAgB0EBcSIGG0EZQRAgBhsQRA0GCyAAIAc6AAQgAEEANgIADAMLIAMgA/0AAgD9CwMQAkAgACgCECIERQ0AIANBEGogBBAnDQQgACgCECIERQ0AIARBisXAAEECEEQNBAtBASEEIABBARAgDQQLIAdBAWshByAAKAIAIgQNAAsLQQAhBAwBC0EBIQQLIANBIGokACAEDQggACgCECIDRQ0FIANBicfAAEECEERFDQEMCAtBASECIABBARAgDQcLIAENAyAAKAIQIgFFDQNBASECIAFBlcXAAEEBEERFDQMMBgtBACECIABBADoABCAAQQA2AgAMBQtBACECIABBADYCAAwECyAAIAMQcA0BC0EAIQIgACgCAEUNAiAAIAAoAgxBAWs2AgwMAgtBASECDAELQQAhAgsgBUEgaiQAIAIL3QoDC38BfgJ7QQEhCkEBIQwgBEEBRwRAQQEhCEEBIQcDQAJAIAQgBiAJaiIFSwRAIAMgCGotAAAiCCADIAVqLQAAIgVPBEAgBSAIRwRAQQEhCkEAIQYgByEJIAdBAWohBwwDC0EAIAZBAWoiCCAIIApGIgUbIQYgCEEAIAUbIAdqIQcMAgsgBiAHakEBaiIHIAlrIQpBACEGDAELIAUgBEGAscAAELsBAAsgBiAHaiIIIARJDQALQQEhCEEBIQdBACEGQQAhBQNAAkACQCAEIAUgBmoiC0sEQCADIAhqLQAAIgggAyALai0AACILSw0BIAggC0cEQEEBIQxBACEGIAchBSAHQQFqIQcMAwtBACAGQQFqIgggCCAMRiILGyEGIAhBACALGyAHaiEHDAILIAsgBEGAscAAELsBAAsgBiAHakEBaiIHIAVrIQxBACEGCyAGIAdqIgggBEkNAAsLAkACQAJAAkAgCSAFIAUgCUkiBxsiCyAETQRAAn8CQAJAAkACQCAKIAwgBxsiByALaiIJIAdJIAQgCUlyRQRAIAMgAyAHaiALEL4BRQ0EIARBA3EhByAEQQRPDQFBACEIDAILIAcgCSAEQbCxwAAQbwALIARBDHEhBUEAIQgDQEIBIAMgCGoiCUEDajEAAIZCASAJMQAAhiAQhEIBIAlBAWoxAACGhEIBIAlBAmoxAACGhIQhECAFIAhBBGoiCEcNAAsgB0UNAQsgAyAIaiEGA0BCASAGMQAAhiAQhCEQIAZBAWohBiAHQQFrIgcNAAsLIAQgC2siByALIAcgC0sbQQFqIQdBfyEGIAshCUF/DAELIARBAWshDkEBIQlBACEGQQEhBUEAIQwDQCAEIAUiCCAGaiINSwRAIAQgBmsgBUF/c2oiBSAETw0HIA4gBiAMamsiCiAETw0GAkACQCADIAVqLQAAIgUgAyAKai0AACIKTwRAIAUgCkYNASAIQQFqIQVBACEGQQEhCSAIIQwMAgsgDUEBaiIFIAxrIQlBACEGDAELQQAgBkEBaiIFIAUgCUYiChshBiAFQQAgChsgCGohBQsgByAJRw0BCwtBASEJQQAhBkEBIQVBACEKA0AgBCAFIgggBmoiD0sEQCAEIAZrIAVBf3NqIgUgBE8NBCAOIAYgCmprIg0gBE8NBQJAAkAgAyAFai0AACIFIAMgDWotAAAiDU0EQCAFIA1GDQEgCEEBaiEFQQAhBkEBIQkgCCEKDAILIA9BAWoiBSAKayEJQQAhBgwBC0EAIAZBAWoiBSAFIAlGIg0bIQYgBUEAIA0bIAhqIQULIAcgCUcNAQsLIAQgCiAMIAogDEsbayEJQQAhBgJ/AkACQAJAAkAgBw4CAAIBCyAHDAMLIAMhCCAHQX5xIgYhBQNAQgEgCC8AAP0Q/Qw/Pz8/Pz8/Pz8/Pz8/Pz8//U79iQH9qQH9yQEiEv0dAIb9EkIBIBL9HQGG/R4BIBH9UCERIAhBAmohCCAFQQJrIgUNAAsgESARIBH9DQgJCgsMDQ4PAAECAwQFBgf9UP0dACEQIAYgB0YNAQsDQEIBIAMgBmoxAACGIBCEIRAgByAGQQFqIgZHDQALC0EACyEGIAQLIQggACAENgI8IAAgAzYCOCAAIAI2AjQgACABNgIwIAAgCDYCKCAAIAY2AiQgACACNgIgIABBADYCHCAAIAc2AhggACAJNgIUIAAgCzYCECAAIBA3AwggAEEBNgIADwtBACALIARBwLHAABBvAAsgBSAEQZCxwAAQuwEACyANIARBoLHAABC7AQALIAogBEGgscAAELsBAAsgBSAEQZCxwAAQuwEAC9MJAgh/CX0jAEEwayILJAAgAQRAQwAAAEBDAACAPyAILQAcGyEXIAgqAgwgCCoCCCIVk0MAAH5DlSEWA0AgAUEEIAFBBEkiDhshDQJAIBcgAC0AA7NDAAB/Q5WUIhggBV0NAAJ/AkAgAUECTwRAIAAoAgQiCEH//wFxRQRAIAhBEHQMAwsgCEH/B3EhCiAIQYCAAnEhCSAIQYD4AXEiDEGA+AFGBEAgCUEQdCIJQYCAgPwHciAKRQ0DGiAJIApBDXRyQYCAgP4HcgwDCyAJQRB0IQkgDEUNASAMQQ10QYCAgPwAcSAKQQ10ckGAgIDAA2ogCXIMAgtBAUEBQbjQwQAQuwEACyAJQYCAgNgDciAKZ0EQayIJQRd0ayAKIAlB//8DcUEIanRB////A3FyCyEPAn8gCEGAgHxxIAhBEHYiCEH//wFxRQ0AGiAIQf8HcSEKIAhBgIACcSEJIAhBgPgBcSIMQYD4AUYEQCAJQRB0IglBgICA/AdyIApFDQEaIAkgCEENdHJBgICA/gdyDAELIAlBEHQiCCAMQQ10QYCAgPwAcSAKQQ10ckGAgIDAA2pyIAwNABogCEGAgIDYA3IgCmdBEGsiCEEXdGsgCiAIQf//A3FBCGp0Qf///wNxcgshECALAn8CQAJAIAFBAkcEQCAAKAIIIghB//8BcUUEQCAIQRB0DAQLIAhB/wdxIQogCEGAgAJxIQkgCEGA+AFxIgxBgPgBRgRAIAlBEHQhCSAKDQIgCUGAgID8B3IMBAsgCUEQdCEJIAxFDQIgDEENdEGAgID8AHEgCkENdHJBgICAwANqIAlyDAMLQQJBAkHI0MEAELsBAAsgCSAKQQ10ckGAgID+B3IMAQsgCUGAgIDYA3IgCmdBEGsiCUEXdGsgCiAJQf//A3FBCGp0Qf///wNxcgs2AhAgCyAQNgIMIAsgDzYCCCALAn0CQCAORQRAIAAoAgwiCkEIdiEJQwAAAAAhEUMAAAAAIRIgCkH/AXEEQCAVIBYgCkEBa0H/AXGzlJIQUSESCyAKQYCA/AdxQRB2IQwgCUH/AXEEQCAVIBYgCUEBa0H/AXGzlJIQUSERCyAMDQFDAAAAAAwCC0EDIA1BqNDBABC7AQALIBUgFiAMQQFrQf8BcbOUkhBRCzgCHCALIBE4AhggCyASOAIUIAsgCkEYdrNDAAB/Q5VDAAAAP5RD2w9JQJQiERAsOAIsIAsgERArIhJDAACAPyAIQRB2Qf8BcbNDAAB/Q5UiESARkkMAAIC/kiITi5MgCEEYdrNDAAB/Q5UiESARkkMAAIC/kiIUi5MiESARIBGUIBNDAAAAACARjCIRIBEgEVwbIhFDAAAAACARQwAAAABeGyIRjCIZIBEgE0MAAAAAYBuSIhMgE5QgFCAZIBEgFEMAAAAAYBuSIhEgEZSSkpEiFJWUOAIoIAsgEiARIBSVlDgCJCALIBIgEyAUlZQ4AiAgCyADIAQgGCALQQhqIAtBFGogC0EgahA1IAsoAgBBAUcNACALKgIEIhEgBmBFIAcgEWBFcg0AIAIoAggiCCACKAIARgRAIAIQoQELIAIgCEEBajYCCCACKAIEIAhBAnRqIBE4AgALIAAgDUECdGohACABIA1rIgENAAsLIAtBMGokAAvACwIIfwV7AkACQAJAAkACQCACIANPBEAgA0UNBCABIANqIQUgA0EPTQRAA0AgASAFTw0GIAVBAWsiBS0AAEEKRw0ADAULAAsgBUEQayIE/QAAAP0MCgoKCgoKCgoKCgoKCgoKCiIM/SP9ZCIGBEAgBCAGZ0Efc2ohBQwECwJAAkACQCADQcAASSADIAVBD3FrIgVBwABJcg0AA0AgASAFaiIEQTBrIgb9AAQAIAz9IyINIARBQGoiCP0ABAAgDP0jIg79UCAEQSBrIgf9AAQAIAz9IyIP/VAgBEEQayIE/QAEACAM/SMiEP1Q/WRFBEAgBUFAaiIFQUBrQYABTw0BDAILCyAQ/WQiBQ0EIA/9ZCIEDQUgDf1kIgQNASAIIA79ZGdrQR9qIQUMBgsDQCAFQQ9MBEBBACEHIAVBAEoNA0EAIQQMCQsgASAFQRBrIgVqIgT9AAAAIAz9I/1kIgZFDQALIAQgBmdBH3NqIQUMBQsgBiAEZ0Efc2ohBQwEC0EAIQQgAf0AAAAgDP0j/WQiBUUNBSABIAVna0EfaiEFDAMLQQAgAyACQbilwQAQbwALIAQgBWdBH3NqIQUMAQsgByAEZ0Efc2ohBQsgBSABayIJQQFqIQcgAiAJSwRAIAEgB2oiCiABTQRAQQAhBAwDCyAJQQ5NBEBBACEEAkAgCUEDSQRAIAEhBQwBCyABIAdBHHEiAmohBf0MAAAAAAAAAAAAAAAAAAAAACEMIAIhBANAIAwgAf1cAAD9DAoKCgoKCgoKCgoKCgoKCgr9I/2JAf2pAf0MAQAAAAEAAAABAAAAAQAAAP1O/a4BIQwgAUEEaiEBIARBBGsiBA0ACyAMIAwgDP0NCAkKCwwNDg8AAQIDAAECA/2uASIMIAwgDP0NBAUGBwABAgMAAQIDAAECA/2uAf0bACEEIAIgB0YNBAsDQCAEIAUtAABBCkZqIQQgBUEBaiIFIApHDQALDAMLQQAhAgJAAkAgAUFwcUEQaiIEIAFBAWoiBiAEIAZLGyABayILQQRJBEAgASEGDAELIAEgC0F8cSIIaiEG/QwAAAAAAAAAAAAAAAAAAAAAIQwgCCECA0AgDCAB/VwAAP0MCgoKCgoKCgoKCgoKCgoKCv0j/YkB/akB/QwBAAAAAQAAAAEAAAABAAAA/U79rgEhDCABQQRqIQEgAkEEayICDQALIAwgDCAM/Q0ICQoLDA0ODwABAgMAAQID/a4BIgwgDCAM/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQIgCCALRg0BCwNAIAIgBi0AAEEKRmohAiAGQQFqIgYgBEkNAAsLAkAgCUE/SQ0AIAQgCkFAaiIBSw0AA0AgBP0ABAD9DAoKCgoKCgoKCgoKCgoKCgoiDP0j/WRpIAJqIARBEGr9AAQAIAz9I/1kaWogBEEgav0ABAAgDP0j/WRpaiAEQTBq/QAEACAM/SP9ZGlqIQIgBEFAayIEIAFNDQALCyAKQRBrIgEgBE8EQANAIAT9AAAA/QwKCgoKCgoKCgoKCgoKCgoK/SP9ZGkgAmohAiAEQRBqIgQgAU0NAAsLQQAhBgJAIAQgCk8NAAJAIAUgBGtBAWoiCUEESQRAIAQhAQwBCyAEIAlBfHEiCGohAf0MAAAAAAAAAAAAAAAAAAAAACEMIAghBQNAIAwgBP1cAAD9DAoKCgoKCgoKCgoKCgoKCgr9I/2JAf2pAf0MAQAAAAEAAAABAAAAAQAAAP1O/a4BIQwgBEEEaiEEIAVBBGsiBQ0ACyAMIAwgDP0NCAkKCwwNDg8AAQIDAAECA/2uASIMIAwgDP0NBAUGBwABAgMAAQIDAAECA/2uAf0bACEGIAggCUYNAQsDQCAGIAEtAABBCkZqIQYgAUEBaiIBIApHDQALCyACIAZqIQQMAgtBACAHIAJBqKXBABBvAAsLIAAgAyAHazYCBCAAIARBAWo2AgAL1wkBCH8jAEGAAWsiAyQAIAAoAgwhBgJ/AkACQAJAAkACQCAAKAIUIgggACgCECIESQRAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAYgCGotAAAiBUHbAGsOIQQLCwsLCwsLCwsLAwsLCwsLCwsBCwsLCwsCCwsLCwsLBQALIAVBImsODAkKCgoKCgoKCgoKCAoLIAAgCEEBaiIFNgIUIAQgBU0NDCAAIAhBAmoiBzYCFAJAIAUgBmotAABB9QBHDQAgBCEFIAQgB0YNDSAAIAhBA2oiCTYCFCAGIAdqLQAAQewARwRAIAkhBwwBCyAEIAlGDQ0gACAIQQRqIgc2AhQgBiAJai0AAEHsAEYNBQsgA0EJNgJwIANBGGogBiAEIAcQIyADQfAAaiADKAIYIAMoAhwQ0AEMEAsgACAIQQFqIgU2AhQgBCAFTQ0MIAAgCEECaiIHNgIUAkAgBSAGai0AAEHyAEcNACAEIQUgBCAHRg0NIAAgCEEDaiIJNgIUIAYgB2otAABB9QBHBEAgCSEHDAELIAQgCUYNDSAAIAhBBGoiBzYCFCAGIAlqLQAAQeUARg0FCyADQQk2AnAgA0EoaiAGIAQgBxAjIANB8ABqIAMoAiggAygCLBDQAQwPCyAAIAhBAWoiBTYCFCAEIAVNDQwgACAIQQJqIgc2AhQCQCAFIAZqLQAAQeEARw0AIAQhBSAEIAdGDQ0gACAIQQNqIgk2AhQgBiAHai0AAEHsAEcEQCAJIQcMAQsgBCAJRg0NIAAgCEEEaiIKNgIUIAYgCWotAABB8wBHBEAgCiEHDAELIAQgCkYNDSAAIAhBBWoiBzYCFCAGIApqLQAAQeUARg0FCyADQQk2AnAgA0E4aiAGIAQgBxAjIANB8ABqIAMoAjggAygCPBDQAQwOCyADQQo6AHAgA0HwAGogASACEKQBIAAQjgEMDQsgA0ELOgBwIANB8ABqIAEgAhCkASAAEI4BDAwLIANBBzoAcCADQfAAaiABIAIQpAEgABCOAQwLCyADQYACOwFwIANB8ABqIAEgAhCkASAAEI4BDAoLIANBADsBcCADQfAAaiABIAIQpAEgABCOAQwJCyAAIAhBAWo2AhQgA0FAayIEIABBABA2IAMpA0BCf1ENByAEIAEgAhCfASAAEI4BDAgLIABBADYCCCAAIAhBAWo2AhQgA0HkAGogAEEMaiAAECUgAygCaCIEIAMoAmRBAkYNBxogAyADKAJsNgJ4IAMgBDYCdCADQQU6AHAgA0HwAGogASACEKQBIAAQjgEMBwsgBUEwa0H/AXFBCkkNAQsgA0EKNgJwIANBCGogBiAEIAhBAWoiASAEIAEgBEkbECMgA0HwAGogAygCCCADKAIMENABIAAQjgEMBQsgA0HQAGogAEEBEDYgAykDUEJ/UQRAIAMoAlgMBQsgA0HQAGogASACEJ8BIAAQjgEMBAsgA0EFNgJwIANBEGogBiAEIAUQIyADQfAAaiADKAIQIAMoAhQQ0AEMAwsgA0EFNgJwIANBIGogBiAEIAUQIyADQfAAaiADKAIgIAMoAiQQ0AEMAgsgA0EFNgJwIANBMGogBiAEIAUQIyADQfAAaiADKAIwIAMoAjQQ0AEMAQsgAygCSAsgA0GAAWokAAuBEwEIfyMAQSBrIgYkAAJAAkADQAJAIAEoAgghAyABEIMBAkACQAJAIAEoAggiByABKAIEIgVHBEAgBSAHTQ0BIAEoAgAiCSAHai0AACIEQdwARwRAIARBIkcEQCABIAdBAWo2AgggBkEQNgIUIAAgASAGQRRqEMIBDAkLAkAgAigCCCIIBEAgAyAHTQ0BIAMgByAFQYSkwQAQbwALAkAgAyAHTQRAIAEgB0EBajYCCCAGQQhqIAMgCWogByADaxBCIAYoAghFBEAgBigCECEBIAYoAgwhAwwLCyAGQQ82AhQgBiABIAZBFGoQxQEgBigCACIDRQ0BIAYoAgQhAQwKCyADIAcgBUH0o8EAEG8ACyAAIAYoAgQ2AgQgAEECNgIADAkLAkACQCAHIANrIgUgAigCACAIa0sEQCACIAggBRCSASACKAIEIQQgAigCCCEIDAELIAIoAgQhBCADIAdGDQELIAVFDQAgBCAIaiADIAlqIAX8CgAACyABIAdBAWo2AgggAiAFIAhqIgI2AgggBkEIaiAEIAIQQiAAAn8gBigCCEUEQCAGKAIMIQMgBigCEAwBCyAGQQ82AhQgBiABIAZBFGoQxQEgBigCACIDRQ0EIAYoAgQLNgIIIAAgAzYCBCAAQQE2AgAMCAsCQCADIAdNBEACQAJAIAcgA2siCCACKAIAIAIoAggiBGtLBEAgAiAEIAgQkgEgAigCCCEEDAELIAMgB0YNAQsgCEUNACACKAIEIARqIAMgCWogCPwKAAALIAEgB0EBaiIKNgIIIAIgBCAIaiIDNgIIAkACQAJAAkACQAJAAkACQAJAAkACfyAFIApLBEAgASAHQQJqNgIIIAkgCmotAAAMAQsgBkEENgIUIAZBCGogASAGQRRqEMMBIAYtAAgNDCAGLQAJC0H/AXFBImsOVAIAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAFAAAABgAAAAAAAAAHAAAACAAJAQALIAZBDDYCFCABIAZBFGoQzAEhAwwPCyMAQSBrIgQkAAJAAkACQCABKAIEIgMgASgCCCIFTwRAAkAgAyAFa0EDTQRAIAEgAzYCCCAEQQQ2AhQgBEEMaiABIARBFGoQxAEgAyEHDAELIAEgBUEEaiIHNgIIIAEoAgAgBWoiBS0AAUEBdC8ByKVBIAUtAABBAXQvAcipQXLBQQh0IAUtAAJBAXQuAcipQXIgBS0AA0EBdC4ByKVBciIFQQBOBEAgBEEAOwEMIAQgBTsBDgwBCyAEQQw2AhQgBEEMaiABIARBFGoQxAELIAQvAQxBAUYEQCAEKAIQIQMMBAsgBC8BDiIFQYD4A3FBgLgDRg0BIAVBgMgAakH//wNxQYD4A08EQCABKAIAIQkCfyADIAdLBEAgByAJai0AAAwBCyAEQQQ2AhQgBEEMaiABIARBFGoQwwEgBC0ADEEBRgRAIAQoAhAhAwwGCyAELQANCyABIAdBAWoiCDYCCEHcAEYEQAJ/IAMgCEsEQCAIIAlqLQAADAELIARBBDYCFCAEQQxqIAEgBEEUahDDASAELQAMQQFGBEAgBCgCECEDDAcLIAQtAA0LIAdBAmohCEH1AEYEQCADIAhJDQUCQCADIAhrQQNNBEAgASADNgIIIARBBDYCFCAEQQxqIAEgBEEUahDEAQwBCyABIAdBBmo2AgggCCAJaiIDLQABQQF0LwHIpUEgAy0AAEEBdC8ByKlBcsFBCHQgAy0AAkEBdC4ByKlBciADLQADQQF0LgHIpUFyIgNBAE4EQCAEQQA7AQwgBCADOwEODAELIARBDDYCFCAEQQxqIAEgBEEUahDEAQsgBC8BDEEBRgRAIAQoAhAhAwwHCyAELwEOIgdBgEBrQf//A3FBgPgDTwRAIAdBgMgAakH//wNxIAVBgNAAakH//wNxQQp0ciIIQYCABGohBSACKAIAIAIoAggiA2tBA00EQCACIANBBBCSASACKAIIIQMLIAIgA0EEajYCCCACKAIEIANqIgMgBUESdkHwAXI6AAAgA0EDaiAHQT9xQYABcjoAACADIAhBBnZBP3FBgAFyOgACIAMgBUEMdkE/cUGAAXI6AAFBACEDDAcLIARBFDYCFCABIARBFGoQzAEhAwwGCyABIAg2AgggBEEXNgIUIAEgBEEUahDMASEDDAULIARBFzYCFCABIARBFGoQzAEhAwwECyAFQYABTwRAIAIoAgAgAigCCCIDa0EDTQRAIAIgA0EEEJIBIAIoAgghAwsgAigCBCADaiEHAn8gBUGAEEkEQCAFQQZ2QUByIQhBAgwBCyAHIAVBBnZBP3FBgAFyOgABIAVBDHZBYHIhCEEDCyEJIAcgCDoAACACIAMgCWo2AgggByAJakEBayAFQT9xQYABcjoAAEEAIQMMBAsgAigCCCIDIAIoAgBGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2ogBToAAEEAIQMMAwsgBSADIANB+LLBABBvAAsgBEEUNgIUIAEgBEEUahDMASEDDAELIAggAyADQfiywQAQbwALIARBIGokACADRQ0PDA4LIAIoAgAgA0YEQCACEKIBCyACIANBAWo2AgggAigCBCADakEiOgAADAwLIAIoAgAgA0YEQCACEKIBCyACIANBAWo2AgggAigCBCADakHcADoAAAwLCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBLzoAAAwKCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBCDoAAAwJCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBDDoAAAwICyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBCjoAAAwHCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBDToAAAwGCyACKAIAIANGBEAgAhCiAQsgAiADQQFqNgIIIAIoAgQgA2pBCToAAAwFCyADIAcgBUGUpMEAEG8ACyAGKAIMIQMMBAsgBkEENgIUIAAgASAGQRRqEMIBDAYLIAcgBUHko8EAELsBAAsgACAGKAIENgIEIABBAjYCAAwECwwBCwsgAEECNgIAIAAgAzYCBAwBCyAAIAE2AgggACADNgIEIABBADYCAAsgBkEgaiQAC68QAwd/An4BeyMAQSBrIgUkAAJAAkAgACgCACICRQRAIAAoAhAiAEUNASAAQeHCwABBARBEIQIMAgsCQAJAAkACQAJAAkACQCAAKAIIIgQgACgCBCIGTwRAIAAoAhAiAkUNASACQbjCwABBEBBERQ0BDAcLIAAgBEEBaiIBNgIIIAVBCGogAiAEai0AACIDEMgBIAUoAggiBwRAIAAoAhAiAEUNCCAAIAcgBSgCDBBEIQIMCQsgACAAKAIMQQFqIgc2AgwCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAHQfQDTQRAIANBwQBrDhcDBxAGEAUQEBAQEBAQEAICAQEDBBAQCBALIAAoAhAiAgRAIAJByMLAAEEZEEQNFAsgAEEBOgAEDBILIAAoAhAiBARAQQEhAiAEQeLGwABBARBEDRUgACgCACICRQ0JIAAoAgQhBiAAKAIIIQELIAEgBk8NCCABIAJqLQAAQcwARw0IIAAgAUEBajYCCCAFQRBqIAAQZCAFLQAQRQ0HIAUtABEhASAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0VCyAAIAE6AAQMEQsgACgCECIBBEBBASECIAFB6MbAAEEBEEQNFAsgA0HQAEcNCCAAKAIQIgJFDQkgAkHpxsAAQQYQRA0RDAkLIAAoAhAiAQRAQQEhAiABQcjGwABBARBEDRMLQQEhAiAAECYNEiADQcEARgRAIAAoAhAiAQRAIAFB78bAAEECEEQNFAsgAEEBECANEwsgACgCECIBRQ0OIAFBycbAAEEBEEQNEgwOCyAAKAIQIgEEQEEBIQIgAUHxxsAAQQEQRA0SCyAFIAAQkAFBASECIAUoAgBBAXENESAFKAIEQQFGBEAgACgCECIBRQ0OIAFB8sbAAEEBEEQNEgsgACgCECIBRQ0NIAFBgsXAAEEBEEQNEQwNC0EAIQIjAEEQayIBJAACQAJAAkACQCAAKAIARQRAIAAoAhAiAw0BDAQLIAEgAEHHABCNASABLQAAQQFGBEAgAS0AASEDIAAoAhAiBARAQQEhAiAEQcjCwABBuMLAACADQQFxIgQbQRlBECAEGxBEDQULIAAgAzoABEEAIQIgAEEANgIADAQLIAAoAhAiAgRAIAEpAwgiCVANAyACQcTDwABBBBBEDQIDQCAIIAlRBEAgACgCECIDRQ0FQQEhAiADQcjDwABBAhBERQ0FDAYLAkAgCFANACAAKAIQIgJFDQAgAkHfo8EAQQIQRA0EC0EBIQIgACAAKAIUQQFqNgIUIAhCAXwhCCAAQgEQhwFFDQALDAQLIAAQOyECDAMLIANB4cLAAEEBEEQhAgwCC0EBIQIMAQsgABA7IQIgACAAKAIUIAmnazYCFAsgAUEQaiQAIAINDgwMCyAAKAIQIgIEQCACQfPGwABBBBBEDQ4LQQEhAkEAIQEjAEEQayIDJAACQAJAAkACQCAAKAIARQRAIAAoAhAiBA0BDAQLIAMgAEHHABCNASADLQAAQQFGBEAgAy0AASEEIAAoAhAiBgRAQQEhASAGQcjCwABBuMLAACAEQQFxIgYbQRlBECAGGxBEDQULIAAgBDoABEEAIQEgAEEANgIADAQLIAAoAhAiAQRAIAMpAwgiCVANAyABQcTDwABBBBBEDQIDQCAIIAlRBEAgACgCECIERQ0FQQEhASAEQcjDwABBAhBERQ0FDAYLAkAgCFANACAAKAIQIgFFDQAgAUHfo8EAQQIQRA0EC0EBIQEgACAAKAIUQQFqNgIUIAhCAXwhCCAAQgEQhwFFDQALDAQLIAAQSCEBDAMLIARB4cLAAEEBEEQhAQwCC0EBIQEMAQsgABBIIQEgACAAKAIUIAmnazYCFAsgA0EQaiQAIAENDyAAKAIAIgNFDQYgACgCCCIBIAAoAgRPDQYgASADai0AAEHMAEcNBiAAIAFBAWo2AgggBUEQaiAAEGQgBS0AEEUNCCAFLQARIQEgACgCECIDBEAgA0HIwsAAQbjCwAAgAUEBcSIDG0EZQRAgAxsQRA0QCyAAIAE6AAQMDAsjAEEgayICJAACQAJAIAAoAgBFBEAgACgCECIBRQ0BIAFB4cLAAEEBEEQhAQwCCyACIAAQjwEgAigCAEUEQCAAKAIQIgMEQEEBIQEgA0HIwsAAQbjCwAAgAi0ABEEBcSIDG0EZQRAgAxsQRA0DCyAAIAL9AAIA/QsCAAwBCyAAKAIQRQ0AIAD9AAIAIQogACAC/QACAP0LAgAgAiAK/QsDECAAECYhASAAIAL9AAMQ/QsCAAwBC0EAIQELIAJBIGokACABDQwMCgtBASECIAAQJg0NIAAoAhAiAQRAIAFB98bAAEEEEEQNDgsgABBZDQ0MCQsgBSkDGCIIUA0AIAAgCBCHAQ0KIAAoAhAiAUUNAEEBIQIgAUHjxsAAQQEQRA0MCyADQdIARg0GIAAoAhAiAkUNBiACQeTGwABBBBBEDQkMBgsgACgCECICRQ0AIAJB5MbAAEEEEEQNCAsgABAmDQcMBQsgACgCECIBRQ0AIAFBuMLAAEEQEEQNCAtBACECIABBADoABCAAQQA2AgAMBwsgBSkDGCIIUA0CIAAoAhAiAgRAIAJBh8XAAEEDEEQNBQsgACAIEIcBDQQMAgsgACAENgIIIABBABAfDQMMAQsgABAmDQILQQAhAiAAKAIARQ0DIAAgACgCDEEBazYCDAwDC0EAIQIgAEEANgIADAILQQEhAgwBC0EAIQILIAVBIGokACACC60IAhR/An4jAEGQBGsiCCQAIAhBDGpBAEGABPwLAAJAAkAgACgCDCIQRQRAIAEoAgAgACgCACAAKAIEIAEoAgQoAgwRAAAhAAwBCyAAKAIAIQ0gACgCCCIOLQAAIQoCQCAAKAIEIg8EQCANIA9qIQkgCEEMaiECIA0hAANAAn8gACwAACIFQQBOBEAgBUH/AXEhAyAAQQFqDAELIAAtAAFBP3EhByAFQR9xIQMgBUFfTQRAIANBBnQgB3IhAyAAQQJqDAELIAAtAAJBP3EgB0EGdHIhByAFQXBJBEAgByADQQx0ciEDIABBA2oMAQsgA0ESdEGAgPAAcSAALQADQT9xIAdBBnRyciEDIABBBGoLIQAgBEGAAUYNAiACIAM2AgAgAkEEaiECIARBAWohBCAAIAlHDQALCyAOIBBqIRFBgAEgBCAEQYABTRshFSAEQQJ0IgBBBGohCyAAIAhqQQhqIQdBvAUhEkHIACEGIA4hBUGAASEMA0AgBUEBaiECQSQhAEEAIQNBASEUQQAhCQNAAn8gA0EBcQRAIAIgEUYNBCACQQFqIQUgAi0AAAwBCyACIQUgCgsiAkHhAGsiA0H/AXFBGk8EQCACQTBrQf8BcUEJSw0DIAJBFmshAwsgFK0iFiADQf8BcSICrX4iF0IgiKcNAiAXpyIDIAlqIgkgA0kNAiACQRpBASAAIAZrIgNBACAAIANPGyIDIANBAU0bIgMgA0EaTxsiA08EQCAWQSQgA2utfiIWQiCIpw0DIBanIRQgAEEkaiEAQQEhAyAFIQIMAQsLIAkgE2oiCiAJSQ0BIAogBEEBaiIDbiIGIAxqIgwgBkkgDEGAsANzQYCAxABrQYCQvH9JciAEIBVGcg0BIAchAAJAIAQiAiAKIAMgBmxrIgZNBEAgBkGAAUkNASAGQYABQZzEwAAQuwEACwNAIABBBGogACgCADYCACAAQQRrIQAgAkEBayICIAZLDQALCyAIQQxqIAZBAnRqIAw2AgAgBSARRwRAIAUtAAAhCkEAIQIgCSASbiIAIANuIABqIgBByANPBEADQCACQSRqIQIgACIEQSNuIQAgBEHX/ABLDQALCyAGQQFqIRMgAiAAQSRsQfz/A3EgAEEmakH//wNxbmohBiAHQQRqIQcgC0EEaiELQQIhEiADIQQMAQsLIARB/wBLDQIgCEEMaiECA0AgCCACKAIANgKMBCAIQYwEaiABEHoiAA0CIAJBBGohAiALQQRrIgsNAAsMAQtBASEAIAEoAgAiAkGMxcAAQQkgASgCBCgCDCIBEQAADQAgDwRAIAIgDSAPIAERAAANASACQf7EwABBASABEQAADQELIAIgDiAQIAERAAANACACQZXFwABBASABEQAAIQALIAhBkARqJAAgAA8LQQAgA0GAAUHMw8AAEG8AC6QIAg5/AXsjAEEgayIDJAACQAJAAkACQCACKAIIIgxBgICAwABxBEAgAi8BDCINDQELQQAhDSAMQYCAgIABcQ0BIAIoAgQhBCACKAIAIQIgAyABNgIMIAMgADYCCANAAkAgA0EQaiADQQhqEFAgAygCECIARQ0AIAMoAhwgAiAAIAMoAhQgBCgCDCIFEQAADQBFDQEgAkG42cEAQQMgBREAAEUNAQsLIABBAEchCQwDCyAMQYCAgIABcQ0AIAMgATYCDCADIAA2AggDQCADQRBqIANBCGoQUCADKAIQIgpFDQIgAygCHCELAkAgAygCFCIFQRBPBEAgCiAFEDchBgwBCyAFRQRAQQAhBgwBCyAFQQNxIQhBACEHQQAhBiAFQQRPBEAgBUEMcSEFA0AgBiAHIApq/VwAAP0Mv7+/v7+/v7+/v7+/v7+/v/0nIhH9GwBBAXFqIBH9hwH9pwEiEf0bAWsgEf0bAmsgEf0bA2shBiAFIAdBBGoiB0cNAAsgCEUNAQsgByAKaiEHA0AgBiAHLAAAQb9/SmohBiAHQQFqIQcgCEEBayIIDQALCyAEIAtBAEdqIAZqIQQMAAsACyACLwEOIgZFBEBBASEAQQAhAQwBCyADIAE2AgwgAyAANgIIIAYhBQJAA0AgA0EQaiADQQhqEFAgAygCECIHRQ0CIAcgAygCFCIPaiEQIAMoAhwhDkEAIQkgBSEIA0AgECAHIgtHBEAgCQJ/IAdBAWogBywAACIJQQBODQAaIAtBAmogCUFgSQ0AGiALQQRBAyAJQW9LG2oLIgcgC2tqIQkgCEEBayIIDQEMAwsLIAhFDQEgCiAPaiEKIAUgCGsgBGohBCAIIQUgDkUNACAEQQFqIQQgCiAOaiEKIAVBAWsiBQ0ACyABIApPBEAgBiEEIAohAQwCC0EAIAogAUHgwMAAEG8ACyABIAkgCmoiBU8EQCAGIQQgBSEBDAELQQAgBSABQfDAwAAQbwALQQAhBiANIARrIgRBACAEIA1NGyEFQQAhBAJAAkACQCAMQR12QQNxQQFrDgIAAQILIAUhBAwBCyAFQf7/A3FBAXYhBAsgDEH///8AcSEHIAIoAgQhCCACKAIAIQIDQCAGQf//A3EgBEH//wNxSQRAQQEhCSAGQQFqIQYgAiAHIAgoAhARAQBFDQEMAgsLIAMgATYCDCADIAA2AgggBSAEawJAA0AgA0EQaiADQQhqEFAgAygCECIBRQ0BIAMoAhwhBCACIAEgAygCFCAIKAIMIgERAABFBEAgBEUNASACQbjZwQBBAyABEQAARQ0BCwtBASEJDAELQf//A3EhAEEAIQYDQCAAIAZB//8DcU0EQEEAIQkMAgtBASEJIAZBAWohBiACIAcgCCgCEBEBAEUNAAsLIANBIGokACAJC4gIAhN/AX4CQAJAAkACQAJAAkAgASgCAEEBRgRAQQIhAiABKAIcIgUgASgCNCIERg0GIAEoAjAhCyAEIQMgBSABKAI8IghBAWsiEGoiAiAETw0BIAEoAjghDSAFIAtqIREgBSAIaiEHIAEoAhgiAyAFaiEOIAggA2shEiAFIAEoAhAiDGtBAWohEyABKQMIIRUgASgCJCIPQX9GIQkgDyEGIAUhAwNAIAMgBUcNAgJAAkAgFSACIAtqMQAAiKdBAXFFBEAgASAHNgIcIAchAyAJDQJBACECDAELIAwgBiAMIAYgDEsbIAkbIgogCCAIIApJGyEUIAohAwJAAkACQANAIAMiAiAURgRAQQAgBiAJGyEKIAwhAgNAIAIgCk0EQCABIAc2AhwgD0F/RwRAIAFBADYCJAsgACAHNgIIIAAgBTYCBEEAIQIMEAsgAkEBayICIAhPDQUgAiAFaiIDIARPDQMgAiANai0AACADIAtqLQAARg0ACyABIA42AhwgEiECIA4hAyAJRQ0FDAYLIAIgBWogBE8NAiACQQFqIQMgAiANai0AACACIBFqLQAARg0ACyACIBNqIQMgCQ0EQQAhAgwDCyADIARB7MPAABC7AQALIAQgBSAKaiIAIAAgBEkbIARB/MPAABC7AQALIAIgCEHcw8AAELsBAAsgASACNgIkIAIhBgsgAyAQaiICIARJDQALIABBCGohBiAAQQRqIQcgBCEDDAILQQIhAiABLQAODQUgASABLQAMIgVBAXM6AAwgASgCNCEDIAEoAjAhBgJAAkAgASgCBCIERQ0AIAMgBE0EQCADIARGDQEMAgsgBCAGaiwAAEFASA0BCwJAAkAgAyAERwRAAn8gBCAGaiICLAAAIgNBAE4EQCADQf8BcQwBCyACLQABQT9xIQcgA0EfcSEGIAZBBnQgB3IgA0FfTQ0AGiACLQACQT9xIAdBBnRyIQcgByAGQQx0ciADQXBJDQAaIAZBEnRBgIDwAHEgAi0AA0E/cSAHQQZ0cnILIQJBASEDIAVBAXFFDQEMAgsgBUEBcQ0BIAFBAToADgwICwJAIAJBgAFJDQBBAiEDIAJBgBBJDQBBA0EEIAJBgIAESRshAwsgACAENgIEIAAgAyAEaiIDNgIIIAEgAzYCBAwGCyAAIAQ2AgggACAENgIEQQAhAgwGCyAGIAMgBCADQfzMwAAQhAIACyAAQQhqIQYgAEEEaiEHIANFDQELIAMhAgNAAkAgAiAETwRAIAIgBEYNBAwBCyACIAtqLAAAQb9/TA0AIAIhBAwDCyACQQFqIgINAAsLQQAhBAsgASADIAQgAyAESxs2AhwgBiAENgIAIAcgBTYCAAtBASECCyAAIAI2AgALoAgBCH8jAEHQAGsiAiQAIAACfwJAAkACQAJAAkAgASgCFCIDIAEoAhAiBkkEQCABKAIMIQcDQCADIAdqLQAAIgRBCWsiCEEXS0EBIAh0QZOAgARxRXJFBEAgASADQQFqIgM2AhQgAyAGRw0BDAMLCyAEQe4ARg0DCyABKAIMIQcgAyAGTw0BA0AgAyAHai0AACIEQQlrIghBF0tBASAIdEGTgIAEcUVyDQQgASADQQFqIgM2AhQgAyAGRw0ACwsgBiEDCyACQQU2AkAgAkEIaiAHIAYgA0EBaiIBIAYgASAGSRsQIyAAIAJBQGsgAigCCCACKAIMENABNgIEDAILIAEgA0EBaiIFNgIUIAACfwJAIAUgBk8NACABIANBAmoiBDYCFAJAAkAgBSAHai0AAEH1AEcNACAEIAUgBiAFIAZLGyIFRg0CIAEgA0EDaiIINgIUIAQgB2otAABB7ABHBEAgCCEEDAELIAUgCEYNAiABIANBBGoiBDYCFCAHIAhqLQAAQewARg0BCyACQQk2AkAgAkE4aiAHIAYgBBAjIAJBQGsgAigCOCACKAI8ENABDAILIABBAjoAAUEADAQLIAJBBTYCQCACQTBqIAcgBiAFECMgAkFAayACKAIwIAIoAjQQ0AELNgIEDAELAkACQAJAIAACfyAEQeYAayIEBEAgBEEORwRAIAAgASACQc8AakG0u8EAECQgARCOATYCBAwGCyABIANBAWoiBTYCFAJAIAUgBk8NACABIANBAmoiBDYCFCAFIAdqLQAAQfIARw0FIAQgBSAGIAUgBksbIgVGDQAgASADQQNqIgg2AhQgBCAHai0AAEH1AEcEQCAIIQQMBgsgBSAIRg0AIAEgA0EEaiIENgIUIAcgCGotAABB5QBHDQVBAQwCCyACQQU2AkAgAkEQaiAHIAYgBRAjIAAgAkFAayACKAIQIAIoAhQQ0AE2AgQMBQsgASADQQFqIgU2AhQgBSAGTw0BIAEgA0ECaiIENgIUIAUgB2otAABB4QBHDQIgBCAFIAYgBSAGSxsiBUYNASABIANBA2oiCDYCFCAEIAdqLQAAQewARwRAIAghBAwDCyAFIAhGDQEgASADQQRqIgk2AhQgByAIai0AAEHzAEcEQCAJIQQMAwsgBSAJRg0BIAEgA0EFaiIENgIUIAcgCWotAABB5QBHDQJBAAs6AAFBAAwECyACQQU2AkAgAkEgaiAHIAYgBRAjIAAgAkFAayACKAIgIAIoAiQQ0AE2AgQMAgsgAkEJNgJAIAJBKGogByAGIAQQIyAAIAJBQGsgAigCKCACKAIsENABNgIEDAELIAJBCTYCQCACQRhqIAcgBiAEECMgACACQUBrIAIoAhggAigCHBDQATYCBAtBAQs6AAAgAkHQAGokAAu0CgIDfAN/IwBBEGsiBSQAIAC7IQECQCAAvCIGQf////8HcSIEQdufpPoDTwRAIARB0qftgwRPBEAgBEHW44iHBE8EQAJAAkACQAJAIARB////+wdNBEAgBUIANwMIAkAgBEHan6TuBE0EQCABIAFEg8jJbTBf5D+iRAAAAAAAADhDoEQAAAAAAAA4w6AiAkQAAABQ+yH5v6KgIAJEY2IaYbQQUb6ioCEBIAL8AiEEDAELIAUgBCAEQRd2QZYBayIEQRd0a767OQMAIAUgBUEIaiAEEBkhBCAGQQBOBEAgBSsDCCEBDAELQQAgBGshBCAFKwMImiEBCyAEQQNxQQFrDgMDBAECCyAAIACTIQAMBwsgASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQAMBgsgASABIAGiIgKiIgMgAiACoqIgAkSnRjuMh83GPqJEdOfK4vkAKr+goiABIAMgAkSy+26JEBGBP6JEd6zLVFVVxb+goqCgtiEADAULIAEgAaIiAUSBXgz9///fv6JEAAAAAAAA8D+gIAEgAaIiAkRCOgXhU1WlP6KgIAEgAqIgAURpUO7gQpP5PqJEJx4P6IfAVr+goqC2IQAMBAsgASABoiICIAGaoiIDIAIgAqKiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAyACRLL7bokQEYE/okR3rMtUVVXFv6CiIAGhoLYhAAwDCyAEQeDbv4UETwRARBgtRFT7IRnARBgtRFT7IRlAIAZBAE4bIAGgIgIgAiACoiIBoiIDIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiADIAFEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYhAAwDCyAGQQBOBEAgAUTSITN/fNkSwKAiASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQAMAwsgAUTSITN/fNkSQKAiASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLYhAAwCCyAEQeSX24AETwRARBgtRFT7IQnARBgtRFT7IQlAIAZBAE4bIAGgIgIgAqIiASACmqIiAyABIAGioiABRKdGO4yHzcY+okR058ri+QAqv6CiIAMgAUSy+26JEBGBP6JEd6zLVFVVxb+goiACoaC2IQAMAgsgBkEATgRAIAFEGC1EVPsh+b+gIgEgAaIiAUSBXgz9///fv6JEAAAAAAAA8D+gIAEgAaIiAkRCOgXhU1WlP6KgIAEgAqIgAURpUO7gQpP5PqJEJx4P6IfAVr+goqC2IQAMAgsgAUQYLURU+yH5P6AiASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQAMAQsgBEGAgIDMA08EQCABIAGiIgIgAaIiAyACIAKioiACRKdGO4yHzcY+okR058ri+QAqv6CiIAMgAkSy+26JEBGBP6JEd6zLVFVVxb+goiABoKC2IQAMAQsgBSAAQwAAgAOUIABDAACAe5IgBEGAgIAESRs4AgggBSoCCBoLIAVBEGokACAAC4wKAgN8A38jAEEQayIFJAAgALshAQJ9AkACQCAAvCIGQf////8HcSIEQdufpPoDTwRAIARB0qftgwRPBEAgBEHW44iHBE8EQAJAAkACQAJAIARB////+wdNBEAgBUIANwMIAkAgBEHan6TuBE0EQCABIAFEg8jJbTBf5D+iRAAAAAAAADhDoEQAAAAAAAA4w6AiAkQAAABQ+yH5v6KgIAJEY2IaYbQQUb6ioCEBIAL8AiEEDAELIAUgBCAEQRd2QZYBayIEQRd0a767OQMAIAUgBUEIaiAEEBkhBCAGQQBOBEAgBSsDCCEBDAELQQAgBGshBCAFKwMImiEBCyAEQQNxQQFrDgMDBAECCyAAIACTDAkLIAEgASABoiICoiIDIAIgAqKiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgASADIAJEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYMCAsgASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLYMBwsgASABoiICIAGaoiIDIAIgAqKiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAyACRLL7bokQEYE/okR3rMtUVVXFv6CiIAGhoLYMBgsgASABoiIBRIFeDP3//9+/okQAAAAAAADwP6AgASABoiICREI6BeFTVaU/oqAgASACoiABRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMDAULIARB39u/hQRLDQIgBkEATgRAIAFE0iEzf3zZEsCgIgIgAiACoiIBoiIDIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiADIAFEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYMBQtE0iEzf3zZEsAgAaEiAiACIAKiIgGiIgMgASABoqIgAUSnRjuMh83GPqJEdOfK4vkAKr+goiACIAMgAUSy+26JEBGBP6JEd6zLVFVVxb+goqCgtgwECyAEQeOX24AESw0CIAZBAE4EQEQYLURU+yH5PyABoSICIAIgAqIiAaIiAyABIAGioiABRKdGO4yHzcY+okR058ri+QAqv6CiIAIgAyABRLL7bokQEYE/okR3rMtUVVXFv6CioKC2DAQLIAFEGC1EVPsh+T+gIgIgAiACoiIBoiIDIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiADIAFEsvtuiRARgT+iRHesy1RVVcW/oKKgoLYMAwsgBEGAgIDMA08EQCABIAGiIgFEgV4M/f//37+iRAAAAAAAAPA/oCABIAGiIgJEQjoF4VNVpT+ioCABIAKiIAFEaVDu4EKT+T6iRCceD+iHwFa/oKKgtgwDCyAFIABDAACAe5I4AgggBSoCCBpDAACAPwwCC0QYLURU+yEZwEQYLURU+yEZQCAGQQBOGyABoCIBIAGiIgFEgV4M/f//37+iRAAAAAAAAPA/oCABIAGiIgJEQjoF4VNVpT+ioCABIAKiIAFEaVDu4EKT+T6iRCceD+iHwFa/oKKgtgwBC0QYLURU+yEJwEQYLURU+yEJQCAGQQBOGyABoCIBIAGiIgFEgV4M/f//37+iRAAAAAAAAPA/oCABIAGiIgJEQjoF4VNVpT+ioCABIAKiIAFEaVDu4EKT+T6iRCceD+iHwFa/oKKgtowLIAVBEGokAAvbCAEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAIANBAXENACADQQJxRQ0BIAEoAgAiAyAAaiEAIAEgA2siAUHg58EAKAIARgRAIAIoAgRBA3FBA0cNAUHY58EAIAA2AgAgAiACKAIEQX5xNgIEIAEgAEEBcjYCBCACIAA2AgAPCyABIAMQYgsCQAJAAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkHk58EAKAIARg0CIAJB4OfBACgCAEYNAyACIANBeHEiAhBiIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQeDnwQAoAgBHDQFB2OfBACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQJBHyECIABBgICACEkNAwwFC0Hk58EAIAE2AgBB3OfBAEHc58EAKAIAIABqIgA2AgAgASAAQQFyNgIEQeDnwQAoAgAgAUYEQEHY58EAQQA2AgBB4OfBAEEANgIACyAAQfDnwQAoAgAiAk0NBUHk58EAKAIAIgBFDQVB3OfBACgCACIDQSlJDQNBuOXBACEBA0AgACABKAIAIgRPBEAgACAEIAEoAgRqSQ0FCyABKAIIIQEMAAsAC0Hg58EAIAE2AgBB2OfBAEHY58EAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LAkBB0OfBACgCACICQQEgAEEDdnQiA3FFBEBB0OfBACACIANyNgIAIABB+AFxQcjlwQBqIgAhAgwBCyAAQfgBcSIAQcjlwQBqIQIgAEHQ5cEAaigCACEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPCyAAQSYgAEEIdmciAmt2QQFxIAJBAXRyQT5zIQIMAQtB+OfBAEHA5cEAKAIAIgAEf0EAIQEDQCABQQFqIQEgACgCCCIADQALQf8fIAEgAUH/H00bBUH/Hws2AgAgAiADTw0BQfDnwQBBfzYCAAwBCyABQgA3AhAgASACNgIcIAJBAnRBuOTBAGohAwJAQQEgAnQiBEHU58EAKAIAcUUEQCADIAE2AgAgASADNgIYIAEgATYCDCABIAE2AghB1OfBAEHU58EAKAIAIARyNgIADAELAkACQCAAIAMoAgAiAygCBEF4cUYEQCADIQIMAQsgAEEZIAJBAXZrQQAgAkEfRxt0IQQDQCADIARBHXZBBHFqIgUoAhAiAkUNAiAEQQF0IQQgAiEDIAIoAgRBeHEgAEcNAAsLIAIoAggiACABNgIMIAIgATYCCCABQQA2AhggASACNgIMIAEgADYCCAwBCyAFQRBqIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggLQfjnwQBB+OfBACgCAEEBayIANgIAIAANAEH458EAQcDlwQAoAgAiAAR/QQAhAQNAIAFBAWohASAAKAIIIgANAAtB/x8gASABQf8fTRsFQf8fCzYCAAsLywcBB38jAEHQAGsiASQAIAAoAgwhBAJAAkAgACgCFCICIAAoAhAiA0kEQANAIAIgBGotAAAiBUEJayIGQRlLDQJBASAGdEGTgIAEcUUEQCAGQRlHDQMgABBjIQIMBAsgACACQQFqIgI2AhQgAiADRw0ACyADIQILIAFBBTYCQCABQQhqIAQgAyACQQFqIgAgAyAAIANJGxAjIAFBQGsgASgCCCABKAIMENABIQIMAQsgBUH7AEcEQCABQQo2AkAgASAEIAMgAkEBaiIAIAMgACADSRsQIyABQUBrIAEoAgAgASgCBBDQASECDAELIAAgAC0AGEEBayIFOgAYAkACQAJAIAVB/wFxBEAgACACQQFqNgIUIAAQYyICDQIgABCFASICDQIgAiAAIAIbIQQgACgCFCICIAAoAhAiBkkEQCAAKAIMIQcDQCACIAdqLQAAIgVBCWsiA0EXS0EBIAN0QZOAgARxRXINAyAAIAJBAWoiAjYCFCACIAZHDQALCyABQQU2AkAgAUEYaiAEKAIMIAQoAhAiBSAEKAIUQQFqIgMgBSADIAVJGxAjIAFBQGsgASgCGCABKAIcENABIQIMAgsgAUEYNgJAIAFBEGogBCADIAJBAWoiACADIAAgA0kbECMgAUFAayABKAIQIAEoAhQQ0AEhAgwDCwJAAkAgBUHuAEYEQCAAIAJBAWoiBDYCFCAEIAZPDQIgACACQQJqIgM2AhQCQCAEIAdqLQAAQfUARw0AIAMgBCAGIAQgBksbIgRGDQMgACACQQNqIgU2AhQgAyAHai0AAEHsAEcEQCAFIQMMAQsgBCAFRg0DIAAgAkEEaiIDNgIUIAUgB2otAABB7ABGDQILIAFBCTYCQCABQThqIAcgBiADECMgAUFAayABKAI4IAEoAjwQ0AEhAgwDCyAEIAFBzwBqQcS7wQAQJCAEEI4BIQIMAgsgACAALQAYQQFqOgAYIAMgBkkEQANAIAMgB2otAAAiAkEJayIFQRdLQQEgBXRBk4CABHFFcg0EIAAgA0EBaiIDNgIUIAMgBkcNAAsgBiEDCyABQQM2AkAgAUEwaiAHIAYgAxAjIAFBQGsgASgCMCABKAI0ENABIQIMAwsgAUEFNgJAIAFBIGogByAGIAQQIyABQUBrIAEoAiAgASgCJBDQASECCyAAIAAtABhBAWo6ABgMAQsgAkH9AEYEQCAAIANBAWo2AhRBACECDAELIAFBCjYCQCABQShqIAcgBiADECMgAUFAayABKAIoIAEoAiwQ0AEhAgsgAUHQAGokACACC/MGAQl/IwBBMGsiASQAQX4hAgJAAkAgACgCBCIEIAAoAhAiA0kNACAAIAQgA2siBDYCBCAAIAAoAgAiAiADaiIINgIAAkACQAJAIANBAkYEQCACLQAAIgNBwQBrQV9xQQpqIANBMGsgA0E5SxsiBUEPSw0FIAItAAEiA0HBAGtBX3FBCmogA0EwayADQTlLGyIDQRBPDQVBfyECIAVBBHQgA3IiBcBBAE4NASAFQf8BcSIDQcABSQ0EAn9BAiADQeABSQ0AGkEDIANB8AFJDQAaIANB+AFPDQVBBAshA0EAIQIgAUEAOgALIAFBADsACSABIAU6AAggASADNgIEIANBAXRBAmshCSABIAFBCGo2AgAgAUEJaiEFA0AgBEECSQ0EIAAgBEECayIENgIEIAAgAiAIaiIGQQJqNgIAIAYtAAAiB0HBAGtBX3FBCmogB0EwayAHQTlLGyIHQQ9LDQYgBkEBai0AACIGQcEAa0FfcUEKaiAGQTBrIAZBOUsbIgZBEE8NBiAFIAdBBHQgBnI6AAAgBUEBaiEFIAkgAkECaiICRw0ACwwCC0GQtsEAQShBvMTAABDqAQALQQEhAyABQQE2AgQgAUEAOgALIAFBADsACSABIAU6AAggASABQQhqNgIACyABQRhqIAFBCGogAxBCIAEoAhgNACABIAEoAiAiAjYCECABIAEoAhwiADYCDCAAIAJqIQMCQCACRQ0AIAMCfyAALAAAIgJBAE4EQCACQf8BcSECIABBAWoMAQsgAC0AAUE/cSEFIAJBH3EhBCACQV9NBEAgBEEGdCAFciECIABBAmoMAQsgAC0AAkE/cSAFQQZ0ciEFIAJBcEkEQCAFIARBDHRyIQIgAEEDagwBCyAEQRJ0QYCA8ABxIAAtAANBP3EgBUEGdHJyIQIgAEEEagsiBEYNAiAELAAAQQBODQALIAECf0EAIQIgAyAAayIEQRBPBEAgACAEEDcMAQsgACADRwRAA0AgAiAALAAAQb9/SmohAiAAQQFqIQAgBEEBayIEDQALCyACCzYCFCABIAFBFGqtQoCAgIAwhDcDKCABIAFBDGqtQoCAgIDwBYQ3AyAgASABrUKAgICAgAaENwMYQZWcwAAgAUEYakGsxMAAEMoBAAtBfyECCyABQTBqJAAgAg8LQczEwAAQkQIAC9MHAgd/An4jAEFAaiICJAACQAJ/AkACQAJAAn8CQAJAAkACQCABKAIUIgMgASgCECIESQRAIAEoAgwhBQNAIAMgBWotAAAiBkEJayIIQRdLQQEgCHRBk4CABHFFckUEQCABIANBAWoiAzYCFCADIARHDQEMAwsLIAZB7gBGDQcLIAEoAgwhBSADIARPDQEDQAJAIAMgBWotAAAiBkEJaw4lAAAFBQAFBQUFBQUFBQUFBQUFBQUFBQUABQUFBQUFBQUFBQUFBAULIAEgA0EBaiIDNgIUIAMgBEcNAAsLIAQhAwsgAkEFNgIoIAIgBSAEIANBAWoiASAEIAEgBEkbECMgAkEoaiACKAIAIAIoAgQQ0AEMBgsgASADQQFqNgIUIAJBGGogAUEAEDYgAikDGCIKQn9RDQQgAikDICEJAkACQAJAIAqnQQFrDgIBAgALIAJBAzoAKCACIAk3AzAgAkEoaiACQT9qQfC1wQAQpAEMAwsgCUKAgICAEFQNAyACQQE6ACggAiAJNwMwIAJBKGogAkE/akHwtcEAEKUBDAILIAlCgICAgBBUDQIgAkECOgAoIAIgCTcDMCACQShqIAJBP2pB8LXBABClAQwBCyAGQTBrQf8BcUEKTwRAIAEgAkE/akHwtcEAECQgARCOAQwFCyACQRhqIAFBARA2IAIpAxgiCkJ/UQRAIAIoAiAMBQsgAikDICEJAkACQAJAIAqnQQFrDgIBAgALIAJBAzoAKCACIAk3AzAgAkEoaiACQT9qQfC1wQAQpAEMAgsgCUKAgICAEFQNAiACQQE6ACggAiAJNwMwIAJBKGogAkE/akHwtcEAEKUBDAELIAlCgICAgBBUDQEgAkECOgAoIAIgCTcDMCACQShqIAJBP2pB8LXBABClAQsgARCOAQwDCyAAIAk+AgQgAEEBNgIADAMLIAEgA0EBaiIHNgIUAn8CQCAEIAdNDQAgASADQQJqIgY2AhQCQAJAIAUgB2otAABB9QBHDQAgBiAHIAQgBCAHSRsiB0YNAiABIANBA2oiCDYCFCAFIAZqLQAAQewARwRAIAghBgwBCyAHIAhGDQIgASADQQRqIgY2AhQgBSAIai0AAEHsAEYNAQsgAkEJNgIoIAJBEGogBSAEIAYQIyACQShqIAIoAhAgAigCFBDQAQwCCyAAQQA2AgAMBAsgAkEFNgIoIAJBCGogBSAEIAcQIyACQShqIAIoAgggAigCDBDQAQshAyAAQQI2AgAgACADNgIEDAILIAIoAiALIQMgAEECNgIAIAAgAzYCBAsgAkFAayQAC+UGAQV/AkACQAJAAkACQAJAAkAgAEEEayIHKAIAIghBeHEiBEEEQQggCEEDcSIFGyABak8EQCAFQQAgAUEnaiIGIARJGw0BAkAgAkEJTwRAIAIgAxBcIgINAUEADwtBACECIANBzP97Sw0IQRAgA0ELakF4cSADQQtJGyEBIABBCGshBiAFRQRAIAZFIAFBgAJJciAEIAFrQYCACEsgASAET3JyDQcgAA8LIAQgBmohBQJAIAEgBEsEQCAFQeTnwQAoAgBGDQFB4OfBACgCACAFRwRAIAUoAgQiCEECcQ0JIAhBeHEiCCAEaiIEIAFJDQkgBSAIEGIgBCABayIFQRBPBEAgByABIAcoAgBBAXFyQQJyNgIAIAEgBmoiASAFQQNyNgIEIAQgBmoiBCAEKAIEQQFyNgIEIAEgBRA8DAkLIAcgBCAHKAIAQQFxckECcjYCACAEIAZqIgEgASgCBEEBcjYCBAwIC0HY58EAKAIAIARqIgQgAUkNCAJAIAQgAWsiBUEPTQRAIAcgCEEBcSAEckECcjYCACAEIAZqIgEgASgCBEEBcjYCBEEAIQVBACEBDAELIAcgASAIQQFxckECcjYCACABIAZqIgEgBUEBcjYCBCAEIAZqIgQgBTYCACAEIAQoAgRBfnE2AgQLQeDnwQAgATYCAEHY58EAIAU2AgAMBwsgBCABayIEQQ9NDQYgByABIAhBAXFyQQJyNgIAIAEgBmoiASAEQQNyNgIEIAUgBSgCBEEBcjYCBCABIAQQPAwGC0Hc58EAKAIAIARqIgQgAUsNBAwGCyADIAEgASADSxsiAwRAIAIgACAD/AoAAAsgBygCACIDQXhxIgcgAUEEQQggA0EDcSIBG2pJDQIgAUUgBiAHT3INBkGI18EAQS5BuNfBABDqAQALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0HI1sEAQS5B+NbBABDqAQALIAcgASAIQQFxckECcjYCACABIAZqIgUgBCABayIBQQFyNgIEQdznwQAgATYCAEHk58EAIAU2AgALIAZFDQAgAA8LIAMQGCIBRQ0BIANBfEF4IAcoAgAiAkEDcRsgAkF4cWoiAiACIANLGyICBEAgASAAIAL8CgAACyABIQILIAAQLQsgAgv8CAEEfyMAQSBrIgIkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4YAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYAAsgASgCACAAKAIEIAAoAgggASgCBCgCDBEAACEBDBgLAkACQAJAAkAgAC0ABEEBaw4DAQIDAAsgAiAAKAIINgIAQRQQGCIARQ0bIABBnNrBACgAADYAECAAQYzawQD9AAAA/QsAACACQRQ2AgwgAiAANgIIIAJBFDYCBCACIAKtQoCAgICwBoQ3AxggAiACQQRqrUKAgICAwAaENwMQIAEoAgAgASgCBEGun8AAIAJBEGoQRyEBIAIoAgQiAEUNGiACKAIIIgRBBGsoAgAiA0F4cSIFQQRBCCADQQNxIgMbIABqSQ0cIANBACAFIABBJ2pLGw0dIAQQLQwaCyABKAIAIAAtAAVBAnQiACgCzN9BIAAoAqTeQSABKAIEKAIMEQAAIQEMGQsgASAAKAIIIgAoAgAgACgCBBBEIQEMGAsgACgCCCIAKAIAIAEgACgCBCgCEBEBACEBDBcLIAEoAgBBtK7BAEEYIAEoAgQoAgwRAAAhAQwWCyABKAIAQcyuwQBBGyABKAIEKAIMEQAAIQEMFQsgASgCAEHnrsEAQRogASgCBCgCDBEAACEBDBQLIAEoAgBBga/BAEEZIAEoAgQoAgwRAAAhAQwTCyABKAIAQZqvwQBBDCABKAIEKAIMEQAAIQEMEgsgASgCAEGmr8EAQRMgASgCBCgCDBEAACEBDBELIAEoAgBBua/BAEETIAEoAgQoAgwRAAAhAQwQCyABKAIAQcyvwQBBDiABKAIEKAIMEQAAIQEMDwsgASgCAEHar8EAQQ4gASgCBCgCDBEAACEBDA4LIAEoAgBB6K/BAEEMIAEoAgQoAgwRAAAhAQwNCyABKAIAQfSvwQBBDiABKAIEKAIMEQAAIQEMDAsgASgCAEGCsMEAQQ4gASgCBCgCDBEAACEBDAsLIAEoAgBBkLDBAEETIAEoAgQoAgwRAAAhAQwKCyABKAIAQaOwwQBBGiABKAIEKAIMEQAAIQEMCQsgASgCAEG9sMEAQT4gASgCBCgCDBEAACEBDAgLIAEoAgBB+7DBAEEUIAEoAgQoAgwRAAAhAQwHCyABKAIAQY+xwQBBNCABKAIEKAIMEQAAIQEMBgsgASgCAEHDscEAQSwgASgCBCgCDBEAACEBDAULIAEoAgBB77HBAEEkIAEoAgQoAgwRAAAhAQwECyABKAIAQZOywQBBDiABKAIEKAIMEQAAIQEMAwsgASgCAEGhssEAQRMgASgCBCgCDBEAACEBDAILIAEoAgBBtLLBAEEcIAEoAgQoAgwRAAAhAQwBCyABKAIAQdCywQBBGCABKAIEKAIMEQAAIQELIAJBIGokACABDwtBAUEUEOQBAAtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQAL0QYCEX8BfiMAQRBrIgokACAKQQRqrUKAgICAMIQhFCAALQAMIQ8gACgCBCERIAAoAgAhECAAKAIIIghBBGohCQJ/A0ACQCAMIhINACADIQtBASEMAkACfyACIAZPBEADQCABIAZqIQUCQAJAAkACQAJAAkACQAJAIAIgBmsiB0EITwRAIAVBA2pBfHEiAyAFRg0BIAMgBWshBEEAIQMDQCADIAVqLQAAQQpGDQkgBCADQQFqIgNHDQALIAQgB0EIayIDSw0DDAILIAIgBkYNAyAFLQAAQQpGBEBBACEDDAgLIAdBAUYNBSAFLQABQQpGBEBBASEDDAgLIAdBAkYNBSAFLQACQQpGBEBBAiEDDAgLIAdBA0YNBSAFLQADQQpGBEBBAyEDDAgLIAdBBEYNBSAFLQAEQQpGBEBBBCEDDAgLIAdBBUYNBSAFLQAFQQpGBEBBBSEDDAgLIAdBBkYNBSAFLQAGQQpHDQVBBiEDDAcLIAdBCGshA0EAIQQLA0BBgIKECCAEIAVqIg4oAgAiE0GKlKjQAHNrIBNyQYCChAggDkEEaigCACIOQYqUqNAAc2sgDnJxQYCBgoR4cUGAgYKEeEcNASAEQQhqIgQgA00NAAsLIAQgB0cNAQsgAiEGIAsMBgsgBCAFaiEFIAIgBGsgBmshB0EAIQMDQCADIAVqLQAAQQpGDQIgByADQQFqIgNHDQALCyACIQYgCwwECyADIARqIQMLIAMgBmoiBEEBaiEGAkAgAiAETQ0AIAEgBGotAABBCkcNAEEAIQwgBiEDDAQLIAIgBk8NAAsLIAsLIQMgAiEECwJAIA9BAXFFBEAgAEEBOgAMIBAEQCAKIBE2AgQgCiAUNwMIIAgoAgAgCSgCAEGgpMAAIApBCGoQR0UNAkEBDAULIAgoAgBB2sDAAEEEIAkoAgAoAgwRAAANAgwBCyANRQ0AIAgoAgBBCiAJKAIAKAIQEQEADQEgEARAIAgoAgBBq6TAAEEHIAkoAgAoAgwRAAANAgwBCyAIKAIAQdrAwABBBCAJKAIAKAIMEQAADQELIA1BAWohDUEBIQ8gCCgCACABIAtqIAQgC2sgCSgCACgCDBEAAEUNAQsLIBJBAXMLIApBEGokAEEBcQuxBgEMfyMAQRBrIgkkAEEBIQsCQCACKAIAIgpBIiACKAIEIgwoAhAiDREBAA0AAkACQCABRQRAQQAhAUEAIQIMAQsgASEEIAAhCANAIAQgCGohDkEAIQICQAJAA0AgAiAIaiIGLQAAIgdB/wBrQf8BcUGhAUkgB0EiRnIgB0HcAEZyDQEgBCACQQFqIgJHDQALIAQgBWohBQwBCwJ/IAYsAAAiBEEATgRAIARB/wFxIQQgBkEBagwBCyAGLQABQT9xIQcgBEEfcSEIIARBX00EQCAIQQZ0IAdyIQQgBkECagwBCyAGLQACQT9xIAdBBnRyIQcgBEFwSQRAIAcgCEEMdHIhBCAGQQNqDAELIAhBEnRBgIDwAHEgBi0AA0E/cSAHQQZ0cnIhBCAGQQRqCyEIIAIgBWohAiAJIARBgYAEEEMCQCAJLQANIgUgCS0ADCIGayIHQf8BcUEBRg0AAkACQAJAIAIgA0kNAAJAIANFDQAgASADTQRAIAEgA0cNAgwBCyAAIANqLAAAQb9/TA0BCwJAIAJFDQAgASACTQRAIAEgAkYNAQwCCyAAIAJqLAAAQb9/TA0BCyAKIAAgA2ogAiADayAMKAIMIgMRAABFDQEMAgsgACABIAMgAkGQwcAAEIQCAAsCQCAFQYEBTwRAIAogCSgCACANEQEADQIMAQsgCiAGIAlqIAcgAxEAAA0BCyAEQYABSQRAIAJBAWohAwwCCyAEQYAQSQRAIAJBAmohAwwCC0EDQQQgBEGAgARJGyACaiEDDAELDAULAn9BASAEQYABSQ0AGkECIARBgBBJDQAaQQNBBCAEQYCABEkbCyACaiEFIA4gCGsiBA0BCwsgAyAFSw0BQQAhAgJAIANFDQAgASADTQRAIAMgASICRw0DDAELIAMiAiAAaiwAAEG/f0wNAgsgBUUEQEEAIQEMAQsgASAFTQRAIAEgBUYNASACIQMMAgsgACAFaiwAAEG/f0wEQCACIQMMAgsgBSEBCyAKIAAgAmogASACayAMKAIMEQAADQEgCkEiIA0RAQAhCwwBCyAAIAEgAyAFQaDBwAAQhAIACyAJQRBqJAAgCwvwBwIHewZ9IAEqAgggBCoCCJMiDyAGKgIMIg4gBv1dAgAiCCAP/RMgAf1dAgAgBP1dAgD95QEiB/0NAAECAxAREhMAAQIDAAECA/3mASAHIAYqAggiEv0TIAj9DQABAgMQERITAAECAwABAgMiCf3mAf3lASIK/R8BlCAI/R8BIhEgB/0fASASlCAPIBGUkyIPlCAI/R8AIhAgCv0fACITlJOSIhIgEpKSIRIgByAOIA+U/RMgDiATlP0gASAJIAr95gEgBkEEav1dAgAiCyAKIAj9DQQFBgcAAQIDAAECAwABAgMgD/0gAf3mAf3lAf3kASIHIAf95AH95AEhByACKgIIIA4gCCAC/V0CBCIIIAL9XQIAIgr9DQQFBgcQERITAAECAwABAgMiDf3mASAJIAr95gH95QEiDP0fAZQgESAJIAj95gEgCyAN/eYB/eUBIgj9HwCUIBAgCP0fAZSTkiIPIA+SkiEPIAogDv0TIAj95gEgCSAM/eYBIAsgDCAI/Q0EBQYHEBESEwABAgMAAQID/eYB/eUB/eQBIgggCP3kAf3kASEIAn8CQAJAQwAAgD8gAyADIANcGyIDQwAAgD8gA0MAAIA/XhtDAACAQJRDAABAwJIiAyAFKgIIlCIOIA4gA/0TIAX9XQIA/eYBIgn9HwEiESAJ/R8AIgMgAyADXBsiECAQIBEgESARXBsiEyAQIBNeGyIQIBAgEFwbIhAgECAOIA4gDlwbIhMgECATXhtDCtcjPJQiEF1FBEAgECARXkUEQCADIBBdRQRAIBJDAACAPyAOlSIDlCIOIAMgD5QiD5QgB/0MAACAPwAAgD8AAIA/AACAPyAJ/ecBIgn95gEiByAJIAj95gEiCP3mASIJ/R8AIAn9HwGSkiIDIAOUIAcgB/3mASIH/R8AIAf9HwGSIA4gDpSSQwAAgL+SIA8gD5QgCCAI/eYBIgf9HwAgB/0fAZKSIg6UkyIPQwAAAABdDQQgA4wgD5GTIA6VIQMMAwsgCP0fACIDi0O9N4Y1XQ0DIAf9HwEgCP0fASAH/R8AjCADlSIDlJIgEZUiESARlCASIA8gA5SSIA6VIg4gDpSSQwAAgD9eDQMMAgsgCP0fASIRi0O9N4Y1XQ0CIAcgEv0gASAIIA/9IAEgB/0fAYwgEZUiA/0T/eYB/eQBIAkgDv0gAf3nASIHIAf95gEiB/0fACAH/R8BkkMAAIA/Xg0CDAELIA+LQ703hjVdDQEgByAIIBKMIA+VIgP9E/3mAf3kASAJ/ecBIgcgB/3mASIH/R8AIAf9HwGSQwAAgD9eDQELQQEMAQtBAAshBiAAIAM4AgQgACAGNgIAC5AIAgd/A34jAEEwayIDJAACQAJAIAACfgJAAkACQAJAAkACQAJAAkACQCABKAIUIgQgASgCECIHSQRAIAEgBEEBaiIGNgIUIAEoAgwiCCAEai0AACIFQTBGBEACQAJAAkAgBiAHSQRAIAYgCGotAAAiBUEwa0H/AXFBCkkNAyAFQS5GDQEgBUHFAEYgBUHlAEZyDQILIAKtIQtCAEKAgICAgICAgIB/IAIbDA4LIANBIGogASACQgBBABBbIAMoAiANDgwMCyADQSBqIAEgAkIAQQAQVCADKAIgRQ0LIAAgAygCJDYCCCAAQn83AwAMDgsgA0ENNgIgIANBCGogCCAHIARBAmoiASAHIAEgB0kbECMgA0EgaiADKAIIIAMoAgwQ0AEhASAAQn83AwAgACABNgIIDA0LIAVBMWtB/wFxQQlPBEAgA0ENNgIgIANBEGogCCAHIAYQIyADQSBqIAMoAhAgAygCFBDQASEBIABCfzcDACAAIAE2AggMDQsgBUEwa61C/wGDIQogBiAHTw0BA0AgBiAIai0AAEEwayIEQf8BcSIFQQpPDQIgBUEFSyAKQpmz5syZs+bMGVJyIApCmbPmzJmz5swZWnFFBEAgASAGQQFqIgY2AhQgCkIKfiAErUL/AYN8IQogBiAHRw0BDAQLCyADQSBqIQkgAiEFQQAhBAJAAkACQCABKAIQIgIgASgCFCIITQ0AIAhBAWohByACIAhrIQIgASgCDCAIaiEIA0AgBCAIai0AACIGQTBrQf8BcUEKTwRAIAZBLkYNAyAGQcUARyAGQeUAR3ENAiAJIAEgBSAKIAQQVAwECyABIAQgB2o2AhQgAiAEQQFqIgRHDQALIAIhBAsgCSABIAUgCiAEEHYMAQsgCSABIAUgCiAEEFsLIAMoAiBBAUYEQCAAIAMoAiQ2AgggAEJ/NwMADA0LIAAgAysDKDkDCCAAQgA3AwAMDAsgA0EFNgIgIANBGGogASgCDCAHIAQQIyADQSBqIAMoAhggAygCHBDQASEBIABCfzcDACAAIAE2AggMCwsgBiAHTw0AIAYgCGotAAAiBUEuRg0BIAVBxQBGIAVB5QBGcg0CCyACRQ0CQgEhCwwECyADQSBqIAEgAiAKQQAQWyADKAIgDQQMAgsgA0EgaiABIAIgCkEAEFQgAygCIEUNASAAIAMoAiQ2AgggAEJ/NwMADAcLQgAgCn0iDEIAUwRAQgIhCyAMIQoMAgsgCrq9QoCAgICAgICAgH+EIQoMAQsgAykDKCEKCyAAIAo3AwggACALNwMADAQLIAAgAygCJDYCCCAAQn83AwAMAwsgAykDKAs3AwggACALNwMADAELIAAgAygCJDYCCCAAQn83AwALIANBMGokAAvTCAIHewp/IAEgACAAQQNqQXxxIgprIgtqIgxBA3EhDUEAIQEgACAKRwRAA0AgASAALAAAQb9/SmohASAAQQFqIQAgC0EBaiILDQALCwJAIA1FDQAgCiAMQfz///8HcWoiACwAAEG/f0ohCSANQQFGDQAgCSAALAABQb9/SmohCSANQQJGDQAgCSAALAACQb9/SmohCQsgDEECdiELIAEgCWohDAJAA0AgCiEJIAtFDQFBwAEgCyALQcABTxsiDkEDcSEPAkAgDkECdCIQQfAHcSIRRQRAQQAhAQwBC0EAIQEgCSEAIBBBEGsiCkEwTwRAIAAgCkEEdkEBaiISQfz///8BcSINQQR0aiEA/QwAAAAAAAAAAAAAAAAAAAAAIQIgDSEKIAkhAQNAIAH9AAIAIgMgAf0AAhAiBP0NDA0ODxwdHh8AAQIDAAECAyAB/QACICIGIAH9AAIwIgf9DQABAgMAAQIDDA0ODxwdHh/9DQABAgMEBQYHGBkaGxwdHh8iBf1NQQf9rQEgBUEG/a0B/VD9DAEBAQEBAQEBAQEBAQEBAQEiBf1OIAMgBP0NCAkKCxgZGhsAAQIDAAECAyAGIAf9DQABAgMAAQIDCAkKCxgZGhv9DQABAgMEBQYHGBkaGxwdHh8iCP1NQQf9rQEgCEEG/a0B/VAgBf1OIAMgBP0NBAUGBxQVFhcAAQIDAAECAyAGIAf9DQABAgMAAQIDBAUGBxQVFhf9DQABAgMEBQYHGBkaGxwdHh8iCP1NQQf9rQEgCEEG/a0B/VAgBf1OIAMgBP0NAAECAxAREhMAAQIDAAECAyAGIAf9DQABAgMAAQIDAAECAxAREhP9DQABAgMEBQYHGBkaGxwdHh8iA/1NQQf9rQEgA0EG/a0B/VAgBf1OIAL9rgH9rgH9rgH9rgEhAiABQUBrIQEgCkEEayIKDQALIAIgAiAD/Q0ICQoLDA0ODwABAgMAAQID/a4BIgIgAiAC/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQEgDSASRg0BCyAJIBFqIQoDQCAAQQhq/V0CACIC/U1BB/2tASACQQb9rQH9UP0MAQEBAQEBAQEBAQEBAQEBASIC/U4iA/0bASAA/V0CACIE/U1BB/2tASAEQQb9rQH9UCAC/U4iAv0bASAC/RsAIAFqaiAD/RsAamohASAAQRBqIgAgCkcNAAsLIAsgDmshCyAJIBBqIQogAUEIdkH/gfwHcSABQf+B/AdxakGBgARsQRB2IAxqIQwgD0UNAAsCfyAJIA5B/AFxQQJ0aiIBKAIAIgBBf3NBB3YgAEEGdnJBgYKECHEiACAPQQFGDQAaIAAgASgCBCIAQX9zQQd2IABBBnZyQYGChAhxaiIAIA9BAkYNABogACABKAIIIgBBf3NBB3YgAEEGdnJBgYKECHFqCyIAQQh2Qf+BHHEgAEH/gfwHcWpBgYAEbEEQdiAMaiEMCyAMC5YGAQZ/AkAgAEEgSQRADAELIABB/wBJBEBBASEBDAELAkACQCAAQYCABE8EQCAAQYCACEkNASAAQf7//wBxIgFBrp0LRyAAQeD//wBxQeDNCkcgAUGe8ApHcXEgAEHw1wtrQXFJcSAAQYDwC2tB3mxJcSAAQYCADGtBnnRJcSAAQdCmDGtBe0lxIABBgII4a0H65lRJcSAAQfCDOElxIQEMAwsgAEEIdkH/AXEhBQNAIAFBAmohBiACIAEtAKa6QCIDaiEEIAUgAS0ApbpAIgFHBEAgASAFSw0DIAQhAiAGIgFBzABHDQEMAwsCQAJAIAIgBEsgBEGcAktyRQRAIANFDQIgAkHxusAAaiEBDAELIAIgBEGcAkG0v8AAEG8ACwNAIAEtAAAgAEH/AXFHBEAgAUEBaiEBIANBAWsiAw0BDAILC0EAIQEMBAsgBCECIAYiAUHMAEcNAAsMAQsgAEEIdkH/AXEhBQNAAkAgAUECaiEGIAIgAS0A/rNAIgNqIQQgBSABLQD9s0AiAUcEQCABIAVLDQEgBCECIAYiAUHcAEcNAgwBCwJAAkAgAiAESyAEQdQBS3JFBEAgA0UNAiACQdm0wABqIQEMAQsgAiAEQdQBQbS/wAAQbwALA0AgAS0AACAAQf8BcUcEQCABQQFqIQEgA0EBayIDDQEMAgsLQQAhAQwECyAEIQIgBiIBQdwARw0BCwsgAEH//wNxIQRBASEBQQAhAANAIABBAWohAgJAIAAsAK22QCIDQQBOBEAgAiEADAELIAJB+ANHBEAgAEGutsAAai0AACADQf8AcUEIdHIhAyAAQQJqIQAMAQtBxL/AABCRAgALIAQgA2siBEEASA0CIAFBAXMhASAAQfgDRw0ACwwBC0EBIQFBACEDA0AgA0EBaiECAkAgAywAjb1AIgRBAE4EQCACIQMMAQsgAkGkAkcEQCADQY69wABqLQAAIARB/wBxQQh0ciEEIANBAmohAwwBC0HEv8AAEJECAAsgACAEayIAQQBIDQEgAUEBcyEBIANBpAJHDQALCyABQQFxC4MHAgV/AX4jAEFAaiIHJAAgACgCBCEKIAAoAgAhCCAHQQA2AgQCQAJAIAgtABBBAUcNACAIKAIAIQkCQAJAAkAgCkUEQCAHIAhBDGqtQoCAgIAwhDcDCCAJKAIAIAkoAgRBxdjBACAHQQhqIgsQRw0CIAgtABBBAUcNASAIKAIAIQkgB0KAgICAoAE3AxAgByAHQQRqrUKAgICA8AGENwMIIAkoAgAgCSgCBEHQ2MEAIAsQRw0CDAELIAkoAgBB3NjBAEEGIAkoAgQoAgwRAAANASAILQAQQQFHDQAgCCgCACEJIAdCgICAgNABNwMQIAdCpNjBgKABNwMIIAkoAgAgCSgCBEGs2MEAIAdBCGoQRw0BCwJAAkAgASgCAEF/RwRAQoCAgICAAiEMIAgtABBFDQEgByABKQIgNwMoIAcgAf0AAhD9CwMYIAcgAf0AAgD9CwMIIAgoAgAhASAHIAwgB0EIaq2ENwMwIAEoAgAgASgCBEG1hcAAIAdBMGoQR0UNAgwDCyAIKAIAIgEoAgBB4tjBAEEJIAEoAgQoAgwRAAANAgwBCyAHIAEpAiA3AyggByAB/QACEP0LAxggByAB/QACAP0LAwggCCgCACEBIAcgDCAHQQhqrYQ3AzAgASgCACABKAIEQevYwQAgB0EwahBHDQELIAgoAgAiASgCAEHE2MEAQQEgASgCBCgCDBEAAA0AIANBAXFFIAIoAgBBAkZyDQIgByAENgI8AkAgCC0AEEEBRgRAIAgoAgAhASAHQoCAgICgATcDECAHQqTYwYCgATcDCCABKAIAIAEoAgRBrNjBACAHQQhqEEcNAQsgCCgCACIBKAIAQbTYwQBBECABKAIEKAIMEQAADQAgCCgCBCAIKAIIIQMgByAIKAIAIgQ2AgggByACKQIANwIMIAcgAigCCDYCFCAEIAdBDGogAygCEBEAAA0AIAgoAgAhASAHQoCAgIAwIgwgB0E8aq2ENwMIIAEoAgAgASgCBEGugMAAIAdBCGoiAxBHDQBBASEBIAVBAUcNAiAHIAY2AjAgCCgCACECIAcgDCAHQTBqrYQ3AwggAigCACACKAIEQa6AwAAgAxBHRQ0CC0EBIQEMAwtBASEBDAILIAgoAgAiAigCAEHE2MEAQQEgAigCBCgCDBEAAA0BCyAAIApBAWo2AgRBACEBCyAHQUBrJAAgAQv4BgEHfyMAQUBqIgEkAAJAAkAgACgCAEUEQCAAKAIQIgBFDQEgAEHhwsAAQQEQRCECDAILIAFBBGogABCBAQJAAn8gASgCBCICRQRAIAEtAAghBCAAKAIQIgMEQEEBIQIgA0HIwsAAQbjCwAAgBEEBcSIDG0EZQRAgAxsQRA0FCyAAIAQ6AARBAAwBCwJAIAEoAggiBEEBcQ0AIAFCgICAgCA3AhAgASAEQf7///8HcSIDNgIIIAEgAjYCBCABIAIgA2oiBTYCDANAAkAgAUEEahAvQQJqDgIAAgELCyAAKAIQIgRFDQMgBCgCAEEiIAQoAgQoAhARAQANAiABQoCAgIAgNwIQIAEgBTYCDCABIAM2AgggASACNgIEA0ACQAJ/AkACQAJAAkACQCABQQRqEC8iAEECag4CAgABC0HMxcAAQSsgAUE/akG8xcAAQYzNwAAQrgEACyAAQSdHBEACQAJAAkACQAJAAkAgAEEhTARAIABBCWsOBQIECgoDAQsgAEEiRg0FIABB3ABGDQQMCQsgAA0IIAFCADcBGiABQdzgADsBGAwHCyABQgA3ARogAUHc6AE7ARgMBgsgAUIANwEaIAFB3OQBOwEYDAULIAFCADcBGiABQdzcATsBGAwECyABQgA3ARogAUHcuAE7ARgMAwsgAUIANwEaIAFB3MQAOwEYDAILIAQoAgBBJyAEKAIEKAIQEQEADQgMBQsgBCgCAEEiIAQoAgQoAhARAQAhAgwJC0ECIQNBAAwBCwJAAkACQCAAQf8FTQ0AIAAQZUUNAAwBCyAAEDgNAQsgAUEoaiAAEIYBIAEgAS8AMDsBICABIAEpACg3AxggAS0AMiECIAEtADMhAyABIAEvASA7ATAgASABKQMYNwMoIAJB/wFxIANB/wFxTw0DDAILIAEgADYCGEGBASEDQYABCyECIAEgAS8BIDsBMCABIAEpAxg3AygLIANB/wFxIQUgAkH/AXEhAyAEKAIAIQYgBCgCBCgCECEHIAEoAighAANAIAAhAiAGIAVBgAFNBH8gAUEoaiADai0AAAUgAgsgBxEBAA0EIANBAWoiAyAFRw0ACwwACwALIAAoAhAiAgRAIAJBuMLAAEEQEEQNAgsgAEEAOgAEQQALIQIgACACNgIADAILQQEhAgwBC0EAIQILIAFBQGskACACC7EGAQZ/IwBB8ABrIgIkAAJ/AkACQAJAIAAoAgAiAUUNAAJAIAAoAggiAyAAKAIEIgVPDQAgASADai0AAEHVAEcNAEEBIQQgACADQQFqIgM2AggLAkACQAJAIAMgBUkEQCABIANqLQAAQcsARg0BCyAERQ0DQQAhAwwBCyAAIANBAWoiBjYCCAJAAkAgBSAGTQ0AIAEgBmotAABBwwBHDQAgACADQQJqNgIIQQEhAUHcxMAAIQMMAQsgAkHIAGogABA/IAIoAkgiA0UEQCACLQBMIQEgACgCECIEBEBBASAEQcjCwABBuMLAACABQQFxIgQbQRlBECAEGxBEDQgaCyAAIAE6AAQgAEEANgIAQQAMBwsgAigCTCIBBEAgAigCVEUNAQsgACgCECIBBEAgAUG4wsAAQRAQRA0FCyAAQQA6AAQgAEEANgIAQQAMBgsgBEUNAQsgACgCECIEBEAgBEHdxMAAQQcQRA0DCyADRQ0BCyAAKAIQIgQEQCAEQeTEwABBCBBEDQILIAJBATsBRCACIAE2AkAgAkEANgI8IAJBAToAOCACQd8ANgI0IAIgATYCMCACQQA2AiwgAiABNgIoIAIgAzYCJCACQd8ANgIgIAJBGGogAkEgahBXIAIoAhgiAQRAIAQEQCAEIAEgAigCHBBEDQMLIAJByABqIAJBIGpBKPwKAAAgBCEBA0AgASEDAkADQCADIQUgAkEQaiACQcgAahBXIAIoAhAiBkUNAUEAIQMgBUUNAAsgAigCFCEDIAVB/sTAAEEBEEQNBEEAIQEgBEUNASAEIgEgBiADEEQNBAwBCwsgAUUNASABQfzEwABBAhBERQ0BDAILQezEwAAQkQIACyAAKAIQIgEEQCABQf/EwABBAxBEDQELIAJBCGogABCQAUEBIAIoAghBAXENAhogACgCECIBBEBBASABQYLFwABBARBEDQMaCyAAKAIAIgNFDQEgACgCCCIBIAAoAgRPDQEgASADai0AAEH1AEcNASAAIAFBAWo2AghBAAwCC0EBDAELIAAoAhAiAQRAQQEgAUGDxcAAQQQQRA0BGgsgABAmCyACQfAAaiQAC70GAQR/IAAgAWohAgJAAkACQAJAAkACQCAAKAIEIgNBAXENACADQQJxRQ0BIAAoAgAiAyABaiEBIAAgA2siAEHg58EAKAIARgRAIAIoAgRBA3FBA0cNAUHY58EAIAE2AgAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCACIAE2AgAPCyAAIAMQYgsCQAJAIAIoAgQiA0ECcUUEQCACQeTnwQAoAgBGDQIgAkHg58EAKAIARg0EIAIgA0F4cSIDEGIgACABIANqIgFBAXI2AgQgACABaiABNgIAIABB4OfBACgCAEcNAUHY58EAIAE2AgAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAk8EQEEfIQIgAUGAgIAISQ0EDAULAkBB0OfBACgCACICQQEgAUEDdnQiA3FFBEBB0OfBACACIANyNgIAIAFB+AFxQcjlwQBqIgEhAgwBCyABQfgBcSIBQcjlwQBqIQIgAUHQ5cEAaigCACEBCyACIAA2AgggASAANgIMDAULQeTnwQAgADYCAEHc58EAQdznwQAoAgAgAWoiATYCACAAIAFBAXI2AgQgAEHg58EAKAIARw0AQdjnwQBBADYCAEHg58EAQQA2AgALDwtB4OfBACAANgIAQdjnwQBB2OfBACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgAPCyABQSYgAUEIdmciA2t2QQFxIANBAXRyQT5zIQILIABCADcCECAAIAI2AhwgAkECdEG45MEAaiEEQQEgAnQiA0HU58EAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghB1OfBAEHU58EAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWoiBCgCECICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGAwBCyAEQRBqIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggPCyAAIAI2AgwgACABNgIIC+YFAQd/IwBBMGsiAyQAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEoAhQiAiABKAIQIgRJBEAgASgCDCEHA0AgAiAHai0AACIGQQlrIghBF0tBASAIdEGTgIAEcUVyRQRAIAEgAkEBaiICNgIUIAIgBEcNAQwDCwsgBkHuAEYNCQsgASgCDCEHIAIgBE8NASABQQxqIQgDQCACIAdqLQAAQQlrIgZBGUsNB0EBIAZ0QZOAgARxRQRAIAZBGUcNCCABQQA2AgggASACQQFqNgIUIANBIGogCCABECUgAygCJCIFIAMoAiAiAUECRg0JGiADKAIoIQIgAUEBRw0FIAJBAEgNDCACDQRBASEBDAcLIAEgAkEBaiICNgIUIAIgBEcNAAsLIAQhAgsgA0EFNgIgIANBCGogByAEIAJBAWoiASAEIAEgBEkbECMgA0EgaiADKAIIIAMoAgwQ0AEMBQsgAhAYIgENAUEBIAIQ5AEACyACQQBIDQYgAkUEQEEBIQEMAgsgAhAYIgFFDQcLIAJFDQAgASAFIAL8CgAACyAAIAI2AgggACABNgIEIAAgAjYCAAwDCyABIANBL2pBlLvBABAkIAEQjgELIQUgAEF+NgIAIAAgBTYCBAwBCyABIAJBAWoiBTYCFAJ/AkAgBCAFTQ0AIAEgAkECaiIGNgIUAkACQCAFIAdqLQAAQfUARw0AIAYgBSAEIAQgBUkbIgVGDQIgASACQQNqIgg2AhQgBiAHai0AAEHsAEcEQCAIIQYMAQsgBSAIRg0CIAEgAkEEaiIGNgIUIAcgCGotAABB7ABGDQELIANBCTYCICADQRhqIAcgBCAGECMgA0EgaiADKAIYIAMoAhwQ0AEMAgsgAEF/NgIADAILIANBBTYCICADQRBqIAcgBCAFECMgA0EgaiADKAIQIAMoAhQQ0AELIQIgAEF+NgIAIAAgAjYCBAsgA0EwaiQADwsQkwIAC0EBIAIQ5AEAC4kGAgd/An4jAEEwayICJAACQAJAIAACfQJAAn8CQAJAAkACQAJAIAEoAhQiAyABKAIQIgRJBEAgASgCDCEFA0AgAyAFai0AACIGQQlrIghBF0tBASAIdEGTgIAEcUVyRQRAIAEgA0EBaiIDNgIUIAMgBEcNAQwDCwsgBkHuAEYNCQsgASgCDCEFIAMgBE8NAQNAAkAgAyAFai0AACIGQQlrDiUAAAUFAAUFBQUFBQUFBQUFBQUFBQUFBQAFBQUFBQUFBQUFBQUEBQsgASADQQFqIgM2AhQgAyAERw0ACwsgBCEDCyACQQU2AhggAiAFIAQgA0EBaiIBIAQgASAESRsQIyACQRhqIAIoAgAgAigCBBDQAQwDCyABIANBAWo2AhQgAkEYaiABQQAQNiACKQMYIgpCf1ENASACKQMgIQkCQAJAIAqnQQFrDgIAAQULIAm1DAULIAm0DAQLIAZBMGtB/wFxQQpPBEAgASACQS9qQYC2wQAQJCABEI4BDAILIAJBGGogAUEBEDYgAikDGCIKQn9RDQAgAikDICEJAkACQAJAIAqnQQFrDgIBAgALIAm/tkMAAIA/QwAAgL8gCUIAWRuYDAULIAm1DAQLIAm0DAMLIAIoAiALIQMgAEECNgIAIAAgAzYCBAwDCyAJv7ZDAACAP0MAAIC/IAlCAFkbmAs4AgQgAEEBNgIADAELIAEgA0EBaiIHNgIUAn8CQCAEIAdNDQAgASADQQJqIgY2AhQCQAJAIAUgB2otAABB9QBHDQAgBiAHIAQgBCAHSRsiB0YNAiABIANBA2oiCDYCFCAFIAZqLQAAQewARwRAIAghBgwBCyAHIAhGDQIgASADQQRqIgY2AhQgBSAIai0AAEHsAEYNAQsgAkEJNgIYIAJBEGogBSAEIAYQIyACQRhqIAIoAhAgAigCFBDQAQwCCyAAQQA2AgAMAgsgAkEFNgIYIAJBCGogBSAEIAcQIyACQRhqIAIoAgggAigCDBDQAQshAyAAQQI2AgAgACADNgIECyACQTBqJAALlQUCBn8BfgJAIAEoAggiAiABKAIEIgRPDQAgASgCACACai0AAEH1AEcNAEEBIQcgASACQQFqIgI2AggLAkACQCACIARJBEAgASgCACIGIAJqLQAAQTBrIgNB/wFxIgVBCkkNAQsMAQsgASACQQFqIgI2AggCQAJAIAVFBEBBACEDDAELIANB/wFxIQMDQCACIARGBEAgBCECDAMLIAIgBmotAABBMGtB/wFxIgVBCUsNASABIAJBAWoiAjYCCCADrUIKfiIIQiCIUARAIAUgCKciBWoiAyAFTw0BCwsMAgsgAiAETw0AIAIgBmotAABB3wBHDQAgASACQQFqIgI2AggLAkACQAJAIAIgAiADaiIFTQRAIAEgBTYCCCAEIAVJDQQgAkUgAiAET3INASACIAZqLAAAQb9/Sg0BDAILDAMLIAVFIAQgBU1yRQRAIAUgBmosAABBv39MDQELIAIgBmohBCAHDQEgAEIBNwIIIAAgAzYCBCAAIAQ2AgAPCyAGIAQgAiAFQZjGwAAQhAIACyACIAZqQQFrIQYgAyEBAn8DQCABIgJFBEBBACEBIAQhBUEBDAILIAJBAWshASACIAZqLQAAQd8ARw0ACwJAAkAgAUUNAAJAIAEgA08EQCABIANHDQEgAg0CQQAhBgwDCyABIARqLAAAQb9/Sg0BCyAEIANBACABQajGwAAQhAIACwJAIAIgA08EQCADIQYgAiADRw0BDAILIAIgBGosAABBv39MDQAgAiEGDAELIAQgAyACIANBuMbAABCEAgALIAQgBmohBSADIAZrIQMgBAshAiADRQRADAELIAAgAzYCDCAAIAU2AgggACABNgIEIAAgAjYCAA8LIABBADYCACAAQQA6AAQLtgQBC38CQAJAAkAgACgCACIBQX9GIAFBAklyDQACQAJAIAAtABRBAWsOAgIAAQtBhLzBAEH5AEHAvMEAEMoBAAsgACgCCCEJIAAoAgwiCwRAA0AgCSAGQQxsaiIEKAIEIQogBCgCCCIIBEAgCkEkaiEBA0AgAUEEaygCACICQQBKBEAgASgCACIFQQRrKAIAIgNBeHEiB0EEQQggA0EDcSIDGyACakkNByADQQAgByACQSdqSxsNBiAFEC0LAkAgAUEUaygCACIFQQJGDQAgAUEQayECAkAgBUUEQCACKAIAIgJFDQIgAUEMaygCACIFQQRrKAIAIgNBeHEiB0EEQQggA0EDcSIDGyACakkNCSADRSAHIAJBJ2pNcg0BDAgLIAIoAgAiAkUNASABQQxrKAIAIgVBBGsoAgAiA0F4cSIHIAJBAXQiAkEEQQggA0EDcSIDG2pJDQggA0UNACAHIAJBJ2pLDQcLIAUQLQsgAUEsaiEBIAhBAWsiCA0ACwsgBCgCACIBBEAgCkEEaygCACIEQXhxIgggAUEsbCIBQQRBCCAEQQNxIgQbakkNBSAEQQAgCCABQSdqSxsNBCAKEC0LIAZBAWoiBiALRw0ACwsgACgCBCIARQ0AIAlBBGsoAgAiAUF4cSIGIABBDGwiAEEEQQggAUEDcSIBG2pJDQIgAUEAIAYgAEEnaksbDQEgCRAtCw8LQYjXwQBBLkG418EAEOoBAAtByNbBAEEuQfjWwQAQ6gEAC5kFAQd/IwBBQGoiAiQAIAEoAgAiBygCDCEGAkACQCAHKAIUIgQgBygCECIDSQRAA0AgBCAGai0AACIIQQlrIgVBF0tBASAFdEGTgIAEcUVyDQIgByAEQQFqIgQ2AhQgAyAERw0ACyADIQQLIAJBAzYCNEEBIQUgAkEoaiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCKCACKAIsENABNgIEDAELIAhB/QBGBEBBACEFIABBADoAAQwBCwJAAkACQCABLQAERQRAIAhBLEcNAUEBIQUgByAEQQFqIgQ2AhQgAyAESwRAA0AgBCAGai0AACIIQQlrIgFBGUsNBUEBIAF0QZOAgARxRQRAIAFBGUcNBiAAQQE6AAFBACEFDAcLIAcgBEEBaiIENgIUIAMgBEcNAAsgAyEECyACQQU2AjQgAkEQaiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCECACKAIUENABNgIEDAQLQQAhBSABQQA6AAQgCEEiRg0BIAJBETYCNEEBIQUgAiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCACACKAIEENABNgIEDAMLIAJBCDYCNEEBIQUgAkEgaiAGIAMgBEEBaiIBIAMgASADSRsQIyAAIAJBNGogAigCICACKAIkENABNgIEDAILIABBAToAAQwBCyAIQf0ARwRAIAJBETYCNCACQQhqIAYgAyAEQQFqIgEgAyABIANJGxAjIAAgAkE0aiACKAIIIAIoAgwQ0AE2AgQMAQsgAkEVNgI0IAJBGGogBiADIARBAWoiASADIAEgA0kbECMgACACQTRqIAIoAhggAigCHBDQATYCBAsgACAFOgAAIAJBQGskAAurBQIGfwF+AkAgAkUNACACQQdrIgNBACACIANPGyEHIAFBA2pBfHEgAWshCEEAIQMDQAJAAkACQCABIANqLQAAIgXAIgZBAE4EQCAIIANrQQNxDQEgAyAHTw0CA0AgASADaiIEQQRqKAIAIAQoAgByQYCBgoR4cQ0DIANBCGoiAyAHSQ0ACwwCC0KAgICAkCAhCQJAAkACQAJAAkACQAJAAkACQCAFLQD9sUBBAmsOAwABAgcLIANBAWoiBCACSQ0CQgAhCQwGCyADQQFqIgQgAkkNAkIAIQkMBQsgA0EBaiIEIAJJDQJCACEJDAQLIAEgBGosAABBv39KDQMMBAsgASAEaiwAACEEAkACQCAFQeABayIFBEAgBUENRgRADAIFDAMLAAsgBEFgcUGgf0YNAwwECyAEQZ9/Sg0DDAILIAZBH2pB/wFxQQxPBEAgBkF+cUFuRw0DIARBQEgNAgwDCyAEQUBIDQEMAgsgASAEaiwAACEEAkACQAJAAkAgBUHwAWsOBQEAAAACAAsgBkEPakH/AXFBAksNBCAEQUBIDQIMBAsgBEHwAGpB/wFxQTBJDQEMAwsgBEGPf0oNAgsgAiADQQJqIgRNBEBCACEJDAILIAEgBGosAABBv39KBEBCgICAgJDAACEJDAILQgAhCSADQQNqIgQgAk8NASABIARqLAAAQUBIDQJCgICAgJDgACEJDAELQgAhCSADQQJqIgQgAk8NACABIARqLAAAQb9/TA0BQoCAgICQwAAhCQsgACAJIAOthDcCBCAAQQE2AgAPCyAEQQFqIQMMAgsgA0EBaiEDDAELIAIgA00NAANAIAEgA2osAABBAEgNASACIANBAWoiA0cNAAsMAgsgAiADSw0ACwsgACACNgIIIAAgATYCBCAAQQA2AgAL2wUBA38jAEEgayIDJAAgAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDigCAQEBAQEBAQEDBQEBBAEBAQEBAQEBAQEBAQEBAQEBAQEBCAEBAQEHAAsgAUHcAEYNBQsgAkEBcUUgAUGABklyDQcgARBlRQ0HIANBADoADiADQQA7AQwgAyABQRR2LQCMxEA6AA8gAyABQQR2QQ9xLQCMxEA6ABMgAyABQQh2QQ9xLQCMxEA6ABIgAyABQQx2QQ9xLQCMxEA6ABEgAyABQRB2QQ9xLQCMxEA6ABAgAUEBcmdBAnYiAiADQQxqIgRqIgVB+wA6AAAgBUEBa0H1ADoAACAEIAJBAmsiAmpB3AA6AAAgACADKQEMNwAAIANB/QA6ABUgAyABQQ9xLQCMxEA6ABQgACADLwEUOwAIDAgLIABCADcBAiAAQdzgADsBAAwKCyAAQgA3AQIgAEHc6AE7AQAMCQsgAEIANwECIABB3OQBOwEADAgLIABCADcBAiAAQdzcATsBAAwHCyAAQgA3AQIgAEHcuAE7AQAMBgsgAkGAAnFFDQEgAEIANwECIABB3M4AOwEADAULIAJB////B3FBgIAETw0DCyABEDgNASADQQA6ABggA0EAOwEWIAMgAUEUdi0AjMRAOgAZIAMgAUEEdkEPcS0AjMRAOgAdIAMgAUEIdkEPcS0AjMRAOgAcIAMgAUEMdkEPcS0AjMRAOgAbIAMgAUEQdkEPcS0AjMRAOgAaIAFBAXJnQQJ2IgIgA0EWaiIEaiIFQfsAOgAAIAVBAWtB9QA6AAAgBCACQQJrIgJqQdwAOgAAIAAgAykBFjcAACADQf0AOgAfIAMgAUEPcS0AjMRAOgAeIAAgAy8BHjsACAtBCgwDCyAAIAE2AgBBgAEhAkGBAQwCCyAAQgA3AQIgAEHcxAA7AQALQQAhAkECCzoADSAAIAI6AAwgA0EgaiQAC9gEAgd/AXsCQAJAIAAoAggiB0GAgIDAAXFFDQACQAJAAkACQCAHQYCAgIABcQRAIAAvAQ4iAw0BQQAhAgwCCyACQRBPBEAgASACEDchAwwECyACRQRADAQLIAJBA3EhBSACQQRPBEAgAkEMcSEGA0AgAyABIARq/VwAAP0Mv7+/v7+/v7+/v7+/v7+/v/0nIgr9GwBBAXFqIAr9hwH9pwEiCv0bAWsgCv0bAmsgCv0bA2shAyAGIARBBGoiBEcNAAsgBUUNBAsgASAEaiEEA0AgAyAELAAAQb9/SmohAyAEQQFqIQQgBUEBayIFDQALDAMLIAEgAmohCUEAIQIgASEEIAMhBQNAIAQiBiAJRg0CAn8gBEEBaiAELAAAIghBAE4NABogBkECaiAIQWBJDQAaIAZBBEEDIAhBb0sbagsiBCAGayACaiECIAVBAWsiBQ0ACwtBACEFCyADIAVrIQMLIAMgAC8BDCIETw0AIAQgA2shBkEAIQNBACEFAkACQAJAIAdBHXZBA3FBAWsOAgABAgsgBiEFDAELIAZB/v8DcUEBdiEFCyAHQf///wBxIQggACgCBCEHIAAoAgAhAANAIANB//8DcSAFQf//A3FJBEBBASEEIANBAWohAyAAIAggBygCEBEBAEUNAQwDCwtBASEEIAAgASACIAcoAgwRAAANASAGIAVrQf//A3EhAUEAIQMDQCABIANB//8DcU0EQEEADwsgA0EBaiEDIAAgCCAHKAIQEQEARQ0ACwwBCyAAKAIAIAEgAiAAKAIEKAIMEQAAIQQLIAQLkgUCBX8CfiMAQTBrIgIkACABKAIMIQYgAAJ/AkACQAJ/AkACQCABKAIUIgMgASgCECIFSQRAA0ACQCADIAZqLQAAIgRBCWsOJQAABAQABAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAMECyABIANBAWoiAzYCFCADIAVHDQALIAUhAwsgAkEFNgIYQQEhBCACIAYgBSADQQFqIgEgBSABIAVJGxAjIAJBGGogAigCACACKAIEENABDAULQQEhBCABIANBAWo2AhQgAkEIaiABQQAQNiACKQMIIghCf1ENAyACKQMQIQcCQAJAAkACQCAIp0EBaw4CAQIACyACQQM6ABggAiAHNwMgIAJBGGogAkEvakHQtcEAEKQBDAQLIAdCgICAgBBUDQEgAkEBOgAYIAIgBzcDICACQRhqIAJBL2pB0LXBABClAQwDCyAHQoCAgIAQVA0AIAJBAjoAGCACIAc3AyAgAkEYaiACQS9qQdC1wQAQpQEMAgtBACEEIAenDAQLIARBMGtB/wFxQQpPBEBBASEEIAEgAkEvakHQtcEAECQgARCOAQwEC0EBIQQgAkEIaiABQQEQNiACKQMIIghCf1EEQCACKAIQDAQLIAIpAxAhBwJAAkACQCAIp0EBaw4CAQIACyACQQM6ABggAiAHNwMgIAJBGGogAkEvakHQtcEAEKQBDAILIAdCgICAgBBUDQIgAkEBOgAYIAIgBzcDICACQRhqIAJBL2pB0LXBABClAQwBCyAHQoCAgIAQVA0BIAJBAjoAGCACIAc3AyAgAkEYaiACQS9qQdC1wQAQpQELIAEQjgEMAgtBACEEIAenDAELIAIoAhALNgIEIAAgBDYCACACQTBqJAALrgQBC38gACgCBCEJIAAoAgAhCiAAKAIIIQsCQANAIAYNAQJ/AkAgAiAESQ0AA0AgASAEaiEFAkACQAJAAkACQCACIARrIgZBB00EQCACIARHDQEgAiEEDAcLIAVBA2pBfHEiACAFRg0BIAAgBWshA0EAIQADQCAAIAVqLQAAQQpGDQUgAyAAQQFqIgBHDQALIAMgBkEIayIASw0DDAILQQAhAANAIAAgBWotAABBCkYNBCAGIABBAWoiAEcNAAsgAiEEDAULIAZBCGshAEEAIQMLA0BBgIKECCADIAVqIgcoAgAiDUGKlKjQAHNrIA1yQYCChAggB0EEaigCACIHQYqUqNAAc2sgB3JxQYCBgoR4cUGAgYKEeEcNASADQQhqIgMgAE0NAAsLIAMgBkYEQCACIQQMAwsgAyAFaiEGIAIgA2sgBGshB0EAIQACQANAIAAgBmotAABBCkYNASAHIABBAWoiAEcNAAsgAiEEDAMLIAAgA2ohAAsgACAEaiIDQQFqIQQCQCACIANNDQAgACAFai0AAEEKRw0AQQAhBiAEIgUMAwsgAiAETw0ACwsgAiAIRg0CQQEhBiAIIQUgAgshAAJAIAstAAAEQCAKQdrAwABBBCAJKAIMEQAADQELQQAhAyAAIAhHBEAgACABakEBay0AAEEKRiEDCyAAIAhrIQAgASAIaiEHIAsgAzoAACAFIQggCiAHIAAgCSgCDBEAAEUNAQsLQQEhDAsgDAv7AwEIfyMAQRBrIgYkAAJ/AkAgA0EBcUUEQCACLQAAIgUNAUEADAILIAAgAiADQQF2IAEoAgwRAAAMAQsgASgCDCEKA0AgAkEBaiEEAkACQAJAAkAgBcBBAEgEQCAFQf8BcSIIQYABRg0BIAhBwAFHDQMgBiABNgIEIAYgADYCACAGQqCAgIAGNwIIIAMgB0EDdGoiAigCACAGIAIoAgQRAQBFDQJBAQwGCyAAIAQgBUH/AXEiAiAKEQAARQRAIAIgBGohAgwEC0EBDAULIAAgAkEDaiIEIAIvAAEiAiAKEQAARQRAIAIgBGohAgwDC0EBDAQLIAdBAWohByAEIQIMAQtBoICAgAYhCyAFQQFxBEAgAigAASELIAJBBWohBAtBACEIAn8gBUECcUUEQEEAIQkgBAwBCyAELwAAIQkgBEECagshAiAFQQRxBH8gAi8AACEIIAJBAmoFIAILIQQgBUEIcQR/IAQvAAAhByAEQQJqBSAECyECIAVBEHEEQCADIAlBA3RqLwEEIQkLIAYgBUEgcQR/IAMgCEEDdGovAQQFIAgLOwEOIAYgCTsBDCAGIAs2AgggBiABNgIEIAYgADYCAEEBIAMgB0EDdGoiBCgCACAGIAQoAgQRAQANAhogB0EBaiEHCyACLQAAIgUNAAtBAAsgBkEQaiQAC78EAQV/IwBBIGsiAyQAAn8CQAJAIAAoAgAiAUUNAANAAkAgACgCCCICIAAoAgRPDQAgASACai0AAEHFAEcNACAAIAJBAWo2AggMAgsCQCAERQ0AIAAoAhAiAUUNACABQYfFwABBAxBEDQMLIAAQcUH/AXEiAUECRg0CAkACQAJAIAAoAgAiAkUNAANAIAAoAggiBSAAKAIETw0BIAIgBWotAABB8ABHDQEgACAFQQFqNgIIAkAgAUEBcUUEQCAAKAIQIgFFDQEgAUHcxsAAQQEQRA0IDAELIAAoAhAiAUUNACABQd+jwQBBAhBEDQcLIAAoAgBFBEAgACgCECICRQ0EQQEgAkHhwsAAQQEQRA0IGgwECyADIAAQPyADKAIARQRAIAMtAAQhBCAAKAIQIgIEQEEBIAJByMLAAEG4wsAAIARBAXEiAhtBGUEQIAIbEEQNCRoLIAAgBDoABCAAQQA2AgBBAAwICyADIAP9AAIA/QsDEAJAIAAoAhAiAUUNACADQRBqIAEQJw0HIAAoAhAiAUUNACABQYvHwABBAxBEDQcLAkACQCAAKAIAIgJFDQAgACgCCCIBIAAoAgRPDQAgASACai0AAEHLAEcNACAAIAFBAWo2AgggAEEAECANCAwBCyAAECYNBwtBASEBIAAoAgAiAg0ACwwBCyABQQFxRQ0BCyAAKAIQIgJFDQBBASACQeHGwABBARBEDQQaCyAEQQFqIQQgACgCACIBDQALC0EADAELQQELIANBIGokAAvGBAEHfwJAAkACQAJAAkBBgIDAABAYIgQEQCAEQQRrLQAAQQNxBEAgBEEAQYCAwAD8CwALQYCAwAAQGCIFRQ0BIAVBBGstAABBA3EEQCAFQQBBgIDAAPwLAAtBgIAQEBgiBkUNAiAGQQRrLQAAQQNxBEAgBkEAQYCAEPwLAAsCQAJAQYTkwQAtAABBAWsOAgAFAQtBhOTBAEECOgAAQeDjwQAoAgAiAARAQeTjwQAoAgAiAkEEaygCACIBQXhxIgMgAEECdCIAQQRBCCABQQNxIgEbakkNBiABQQAgAyAAQSdqSxsNByACEC0LQezjwQAoAgAiAARAQfDjwQAoAgAiAkEEaygCACIBQXhxIgMgAEECdCIAQQRBCCABQQNxIgEbakkNBiABQQAgAyAAQSdqSxsNByACEC0LQfjjwQAoAgAiAEUNAEH848EAKAIAIgJBBGsoAgAiAUF4cSIDIABBAnQiAEEEQQggAUEDcSIBG2pJDQUgAUEAIAMgAEEnaksbDQYgAhAtC0GE5MEAQQE6AABBgOTBAEGAgAQ2AgBB/OPBACAGNgIAQfTjwQBCgICQgICAwAA3AgBB8OPBACAFNgIAQejjwQBCgICQgICAgAI3AgBB5OPBACAENgIAQdzjwQBCgICAgICAgAI3AgAPC0EEQYCAwAAQ5AEAC0EEQYCAwAAQ5AEAC0EEQYCAEBDkAQALQZy0wQBB/QBB3LTBABDKAQALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC74UAw9/A34Be0Gg5MEALQAAQQFHBEACQAJAAkACQAJAAkBBoOTBAC0AAEEBaw4CAAQBC0Gg5MEAQQI6AABBlOTBACgCACICRQ0AQZzkwQAoAgAiBgRAQZDkwQAoAgAiAkEIaiEEIAIpAwBCf4VCgIGChIiQoMCAf4MhEQNAIBFQBEADQCAEIgNBCGohBCACQeAAayECIAMpAwBCgIGChIiQoMCAf4MiEUKAgYKEiJCgwIB/UQ0ACyARQoCBgoSIkKDAgH+FIRELIAIgEXqnQQN2QXRsakEEaygCACIDQYQITwRAIAMQqwELIBFCAX0gEYMhESAGQQFrIgYNAAtBlOTBACgCACECCyACIAJBDGxBE2pBeHEiA2pBCWoiBEUNAEGQ5MEAKAIAIANrIgNBBGsoAgAiAkF4cSIGQQRBCCACQQNxIgIbIARqSQ0BIAJBACAGIARBJ2pLGw0CIAMQLQtBoOTBAEEBOgAAQZDkwQBB+LTBAP0AAgD9CwIAQYzkwQBBADYCAAwDC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtBnLTBAEH9AEHctMEAEMoBAAsLQYzkwQAoAgBFBEBBjOTBAEF/NgIAQZTkwQAoAgAiAyAAcSEEIABBGXYiEK1CgYKEiJCgwIABfiETQZDkwQAoAgAhAgJAAkADQCACIARqKQAAIhIgE4UiEUJ/hSARQoGChIiQoMCAAX2DQoCBgoSIkKDAgH+DIhFQRQRAA0AgACACIBF6p0EDdiAEaiADcUF0bGoiBkEMaygCAEYEQCAGQQhrKAIAIAFGDQQLIBFCAX0gEYMiEVBFDQALCyASIBJCAYaDQoCBgoSIkKDAgH+DUARAIAQgBUEIaiIFaiADcSEEDAELC0GY5MEAKAIARQRAAkBBACECAkACQAJAQZzkwQAoAgAiDEEBaiIEBEBBlOTBACgCACIJIAlBAWoiCkEDdiIFQQdsIAlBCEkbIgtBAXYgBEkEQAJ/IAtBAWoiAyAEIAMgBEsbIgRBD08EQCAEQf////8BSw0GQX8gBEEDdEEHbkEBa2d2QQFqDAELQQQgBEEIcUEIaiAEQQRJGwsiBK1CDH4iEUIgiKcNBCARpyIDQXhLDQQgA0EHakF4cSIDIARBCGoiAmoiBSADSSAFQfj///8HS3INBCAFEBgiBUUEQBCeAgALIAMgBWohByACBEAgB0H/ASAC/AsACyAEQQFrIgsgBEEDdkEHbCAEQQlJGyENQZDkwQAoAgAhBCAMBEAgBCkDAEJ/hUKAgYKEiJCgwIB/gyERIAQhA0EAIQUgDCECA0AgEVAEQANAIAVBCGohBSADQQhqIgMpAwBCgIGChIiQoMCAf4MiEUKAgYKEiJCgwIB/UQ0ACyARQoCBgoSIkKDAgH+FIRELIAcgBCAReqdBA3YgBWoiDkF0bGoiBkEMaygCACIIIAZBCGsoAgAgCBsiDyALcSIGaikAAEKAgYKEiJCgwIB/gyISUARAQQghCANAIAYgCGohBiAIQQhqIQggByAGIAtxIgZqKQAAQoCBgoSIkKDAgH+DIhJQDQALCyARQgF9IBGDIREgByASeqdBA3YgBmogC3EiBmosAABBAE4EQCAHKQMAQoCBgoSIkKDAgH+DeqdBA3YhBgsgBiAHaiAPQRl2Igg6AAAgByAGQQhrIAtxakEIaiAIOgAAIAcgBkF0bGpBDGsiBiAEIA5BdGxqQQxrIggoAAg2AAggBiAIKQAANwAAIAJBAWsiAg0ACwtBlOTBACALNgIAQZDkwQAgBzYCAEGY5MEAIA0gDGs2AgAgCUUNBSAJIApBDGxBB2pBeHEiAmpBCWoiA0UNBSAEIAJrIgRBBGsoAgAiAkF4cSIFQQRBCCACQQNxIgIbIANqSQ0CIAJBACAFIANBJ2pLGw0DIAQQLQwFCyAKBEBBkOTBACgCACEDAkACQCAFIApBB3FBAEdqIgdBAkkEQCAHIQQMAQsgB0EBcSEEIAdB/v///wNxIghBA3QhAiAIIQYgAyEFA0AgBSAF/QADACIU/U1BB/3NAf0MAQEBAQEBAQEBAQEBAQEBAf1OIBT9DH9/f39/f39/f39/f39/f3/9UP3OAf0LAwAgBUEQaiEFIAZBAmsiBg0ACyAHIAhGDQELIAIgA2ohBQNAIAUgBSkDACIRQn+FQgeIQoGChIiQoMCAAYMgEUL//v379+/fv/8AhHw3AwAgBUEIaiEFIARBAWsiBA0ACwsCQCAKQQhPBEAgAyAKaiADKQAANwAADAELIApFDQAgA0EIaiADIAr8CgAAC0EAIQQDQCAEIgVBAWohBAJAIAMgBWoiCi0AAEGAAUcNACADIARBdGxqIQYgAyAFQXRsaiICQQhrIQ4gAkEMayEPAkADQCAPKAIAIgIgDigCACACGyINIAlxIgchAiADIAdqKQAAQoCBgoSIkKDAgH+DIhFQBEBBCCEIA0AgAiAIaiECIAhBCGohCCADIAIgCXEiAmopAABCgIGChIiQoMCAf4MiEVANAAsLIAMgEXqnQQN2IAJqIAlxIgJqLAAAQQBOBEAgAykDAEKAgYKEiJCgwIB/g3qnQQN2IQILIAIgB2sgBSAHa3MgCXFBCE8EQCACIANqIgctAAAgByANQRl2Igc6AAAgAyACQQhrIAlxakEIaiAHOgAAIAMgAkF0bGoiB0EMayECQf8BRg0CIAYoAAAhCCAGIAIoAAA2AAAgAiAINgAAIAYoAAQhAiAGIAdBCGsiCCgAADYABCAIIAI2AAAgBigACCECIAYgB0EEayIHKAAANgAIIAcgAjYAAAwBCwsgCiANQRl2IgI6AAAgAyAFQQhrIAlxakEIaiACOgAADAELIApB/wE6AAAgAyAFQQhrIAlxakEIakH/AToAACACIAYoAAg2AAggAiAGKQAANwAACyAFIAlHDQALC0GY5MEAIAsgDGs2AgAMBAsMAgtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALQcjBwABBOUHkwcAAEMoBAAsLIAAgARDvASEEQZDkwQAoAgAiAkGU5MEAKAIAIgYgAHEiA2opAABCgIGChIiQoMCAf4MiEVAEQEEIIQUDQCADIAVqIQMgBUEIaiEFIAIgAyAGcSIDaikAAEKAgYKEiJCgwIB/gyIRUA0ACwsgAiAReqdBA3YgA2ogBnEiA2osAAAiBUEATgRAIAIgAikDAEKAgYKEiJCgwIB/g3qnQQN2IgNqLQAAIQULIAIgA2ogEDoAACACIANBCGsgBnFqQQhqIBA6AABBmOTBAEGY5MEAKAIAIAVBAXFrNgIAQZzkwQBBnOTBACgCAEEBajYCACACIANBdGxqIgNBBGsgBDYCACADQQhrIAE2AgAgA0EMayAANgIADAELIAZBBGsoAgAhBAsQbiIAIAQlASYBQYzkwQBBjOTBACgCAEEBajYCACAADwtBiLXBABDVAQALrwQCB38BfkErQX8gACgCCCIIQYCAgAFxIgYbIAZBFXZBASABGyAFaiEHAkAgCEGAgIAEcUUEQEEAIQIMAQsCf0EAIANFDQAaIAIsAABBv39KIgYgA0EBRg0AGiAGIAIsAAFBv39KagsgB2ohBwtBLSABGyEMAkAgAC8BDCILIAdLBEACQAJAIAhBgICACHFFBEAgCyAHayEJQQAhAUEAIQYCQAJAAkAgCEEddkEDcUEBaw4DAAEAAgsgCSEGDAELIAlB/v8DcUEBdiEGCyAIQf///wBxIQsgACgCBCEHIAAoAgAhCANAIAFB//8DcSAGQf//A3FPDQJBASEKIAFBAWohASAIIAsgBygCEBEBAEUNAAsMBAsgACAAKQIIIg2nQYCAgP95cUGwgICAAnI2AghBASEKIAAoAgAiBiAAKAIEIgkgDCACIAMQzwENA0EAIQEgCyAHa0H//wNxIQIDQCABQf//A3EgAk8NAiABQQFqIQEgBkEwIAkoAhARAQBFDQALDAMLQQEhCiAIIAcgDCACIAMQzwENAiAIIAQgBSAHKAIMEQAADQIgCSAGa0H//wNxIQBBACEBA0AgACABQf//A3FNBEBBAA8LIAFBAWohASAIIAsgBygCEBEBAEUNAAsMAgsgBiAEIAUgCSgCDBEAAA0BIAAgDTcCCEEADwtBASEKIAAoAgAiASAAKAIEIgAgDCACIAMQzwENACABIAQgBSAAKAIMEQAAIQoLIAoLjgQBB38jAEEwayICJAAgASgCACIHKAIMIQYCQAJAIAcoAhQiAyAHKAIQIgRJBEADQCADIAZqLQAAIgVBCWsiCEEXS0EBIAh0QZOAgARxRXINAiAHIANBAWoiAzYCFCADIARHDQALIAQhAwsgAkECNgIkQQEhBSACQRhqIAYgBCADQQFqIgEgBCABIARJGxAjIAAgAkEkaiACKAIYIAIoAhwQ0AE2AgQMAQsgBUHdAEYEQEEAIQUgAEEAOgABDAELAkACQCABLQAERQRAIAVBLEcNAUEBIQUgByADQQFqIgM2AhQgAyAESQRAA0AgAyAGai0AACIBQQlrIghBF0tBASAIdEGTgIAEcUVyDQQgByADQQFqIgM2AhQgAyAERw0ACyAEIQMLIAJBBTYCJCACIAYgBCADQQFqIgEgBCABIARJGxAjIAAgAkEkaiACKAIAIAIoAgQQ0AE2AgQMAwsgAEEBOgABQQAhBSABQQA6AAQMAgsgAkEHNgIkQQEhBSACQRBqIAYgBCADQQFqIgEgBCABIARJGxAjIAAgAkEkaiACKAIQIAIoAhQQ0AE2AgQMAQsgAUHdAEYEQCACQRU2AiQgAkEIaiAGIAQgA0EBaiIBIAQgASAESRsQIyAAIAJBJGogAigCCCACKAIMENABNgIEDAELIABBAToAAUEAIQULIAAgBToAACACQTBqJAAL+wMCD38BfiADIAEoAhgiCiAFayIJSwRAQQAgASgCDCIIayEQIAQgCGohESAIIAUgBSAISRsiEiAIayETIAEoAiAhDSABKAIQIQ8gASkDACEWA0ACQAJAIBYgAiAJajEAAIhCAYNQBEAgASAJNgIYIAUhByAJIQogBg0CDAELIAggDSAIIAggDUsbIAYbIgdBAWsgBUkhDAJAAkACQAJAA0AgB0UEQCAQIAUgDSAGGyIHIAggByAISxtqIQ4gCCAJaiEHIBMhCyARIQwDQCAORQRAIAEgCTYCGCAGRQRAIAEgBTYCIAsgACAKNgIIIAAgCTYCBCAAQQE2AgAPCyALRQ0DIAMgB00NBCAOQQFrIQ4gC0EBayELIAIgB2ohFCAMLQAAIAxBAWohDCAHQQFqIQcgFC0AAEYNAAsgCiAPayEKIA8hByAGRQ0GDAcLIAdBAWshByAMRQ0EIAcgCWoiCyADTw0DIAQgB2otAAAgAiALai0AAEYNAAsgByAKaiAIayEKIAUhByAGRQ0EDAULIBIgBUGkpMEAELsBAAsgAyAIIAlqIgAgACADSRsgA0G0pMEAELsBAAsgCyADQdSkwQAQuwEACyAHIAVBxKTBABC7AQALIAEgBzYCICAHIQ0LIAogBWsiCSADSQ0ACwsgAUEANgIYIABBADYCAAvLBAIFfwJ+IwBBMGsiAiQAIAEoAgwhBQJAAkAgAAJ/AkAgAAJ/AkACQCABKAIUIgMgASgCECIESQRAA0ACQCADIAVqLQAAIgZBCWsOJQAABAQABAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAMECyABIANBAWoiAzYCFCADIARHDQALIAQhAwsgAkEFNgIYIAIgBSAEIANBAWoiASAEIAEgBEkbECMgAkEYaiACKAIAIAIoAgQQ0AEhASAAQQE2AgAgACABNgIEDAYLIAEgA0EBajYCFCACQQhqIAFBABA2IAIpAwgiCEJ/UQ0EIAIpAxAhBwJAAkAgCKdBAWsOAgQBAAsgAkEDOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABCkAQwCCyAHQgBZDQIgAkECOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABClAQwBCyAGQTBrQf8BcUEKTwRAIAEgAkEvakHgtcEAECQgARCOASEBIABBATYCACAAIAE2AgQMBQsgAkEIaiABQQEQNiACKQMIIghCf1EEQCAAIAIoAhA2AgQgAEEBNgIADAULIAIpAxAhBwJAAkAgCKdBAWsOAgMBAAsgAkEDOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABCkAQwBCyAHQgBZDQEgAkECOgAYIAIgBzcDICACQRhqIAJBL2pB4LXBABClAQsgARCOATYCBEEBDAELIAAgBzcDCEEACzYCAAwBCyAAIAIoAhA2AgQgAEEBNgIACyACQTBqJAAL4QMBA38jAEEQayIEJAACQAJAAkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASAAIAEQdUUNAkEBIQIMAwsgACgCACECQQkhAwNAIAMgBGpBBmogAkEPcS0AjMRAOgAAIANBAWshAyACQQR2IgINAAtBASECIAFBAUGOx8AAQQIgAyAEakEHakEJIANrEEtFDQEMAgsgACgCACECQQkhAwNAIAMgBGpBBmogAkEPcS0AgMFAOgAAIANBAWshAyACQQR2IgINAAtBASECIAFBAUGOx8AAQQIgAyAEakEHakEJIANrEEsNAQsgASgCAEHYwMAAQQIgASgCBCgCDBEAAARAQQEhAgwBCyAAQQRqIQACQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BIAAgARB1IQIMAgsgACgCACECQQkhAwNAIAMgBGpBBmogAkEPcS0AjMRAOgAAIANBAWshAyACQQR2IgINAAsgAUEBQY7HwABBAiADIARqQQdqQQkgA2sQSyECDAELIAAoAgAhAkEJIQMDQCADIARqQQZqIAJBD3EtAIDBQDoAACADQQFrIQMgAkEEdiICDQALIAFBAUGOx8AAQQIgAyAEakEHakEJIANrEEshAgsgBEEQaiQAIAIL8gMBCH8gASgCBCIFBEAgASgCACEEA0ACQCADQQFqIQICfyACIAMgBGotAAAiCMAiCUEATg0AGgJAAkACQAJAAkACQAJAAkACQAJAAkAgCC0A/bFAQQJrDgMAAQIMC0Hfn8AAIAIgBGogAiAFTxssAABBQE4NCyADQQJqDAoLQd+fwAAgAiAEaiACIAVPGywAACEHIAhB4AFrIgZFDQEgBkENRg0CDAMLQd+fwAAgAiAEaiACIAVPGywAACEGIAhB8AFrDgUEAwMDBQMLIAdBYHFBoH9HDQgMBgsgB0Gff0oNBwwFCyAJQR9qQf8BcUEMTwRAIAlBfnFBbkcgB0FATnINBwwFCyAHQUBODQYMBAsgCUEPakH/AXFBAksgBkFATnINBQwCCyAGQfAAakH/AXFBME8NBAwBCyAGQY9/Sg0DC0Hfn8AAIAQgA0ECaiICaiACIAVPGywAAEG/f0oNAkHfn8AAIAQgA0EDaiICaiACIAVPGywAAEG/f0oNAiADQQRqDAELQd+fwAAgBCADQQJqIgJqIAIgBU8bLAAAQUBODQEgA0EDagsiAyICIAVJDQELCyAAIAM2AgQgACAENgIAIAEgBSACazYCBCABIAIgBGo2AgAgACACIANrNgIMIAAgAyAEajYCCA8LIABBADYCAAuHBAIEfwJ9IwBBEGshASAAvCIDQR92IQQCQAJ9IAACfwJAAkACQCADQf////8HcSICQdDYupUETwRAIAJBgICA/AdLBEAgAA8LIAJBl+TFlQRNBEAgA0EATg0CIAFDAACAgCAAlTgCCCABKgIIGgwCCyADQQBIBEAgAUMAAICAIACVOAIIIAEqAggaIAJBtOO/lgRNDQIMBwsgAEMAAAB/lA8LIAJBmOTF9QNNBEAgAkGAgIDIA00NAkEAIQEgAAwFCyACQZKrlPwDTQ0CCyAAQzuquD+UIARBAnQqAtDjQZL8AAwCCyABIABDAAAAf5I4AgwgASoCDBogAEMAAIA/kg8LIARFIARrCyIBsiIFQwByMb+UkiIAIAVDjr6/NZQiBpMLIQUgACAFIAUgBSAFlCIAIABDFVI1u5RDj6oqPpKUkyIAlEMAAABAIACTlSAGk5JDAACAP5IhBSABRQ0AAkACQAJAIAFB/wBMBEAgAUGCf04NAyAFQwAAgAyUIQUgAUGbfk0NASABQeYAaiEBDAMLIAVDAAAAf5QhBSABQf4BSw0BIAFB/wBrIQEMAgsgBUMAAIAMlCEFQbZ9IAEgAUG2fU0bQcwBaiEBDAELIAVDAAAAf5QhBUH9AiABIAFB/QJPG0H+AWshAQsgBSABQRd0QYCAgPwDakGAgID8B3G+lCEFCyAFC7wEAQV/IwBBIGsiASQAAkACQAJAAkACQANAIAAQgwEgACgCCCICIAAoAgQiA0YNASACIANPDQIgACgCACIFIAJqLQAAIgRB3ABHBEAgBEEiRwRAIAFBEDYCFCAAIAFBFGoQzAEhAAwHCyAAIAJBAWo2AghBACEADAYLIAAgAkEBaiIENgIIAkACQAJ/IAMgBEsEQCAAIAJBAmoiAjYCCCAEIAVqLQAADAELIAFBBDYCFCABQQxqIAAgAUEUahDDASABLQAMDQYgBCECIAEtAA0LQSJrDlQCAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAIAAAAAAAAAAgAAAAIAAgEACyABQQw2AhQgACABQRRqEMwBIQAMBgsgAiADSw0EAkAgAyACa0EDTQRAIAAgAzYCCCABQQQ2AhQgAUEMaiAAIAFBFGoQxAEMAQsgACACQQRqNgIIIAIgBWoiAi0AAUEBdC8ByKVBIAItAABBAXQvAcipQXIgAi0AAkEBdC8ByKlBciACLQADQQF0LwHIpUFywUEATgRAIAFBADsBDAwBCyABQQw2AhQgAUEMaiAAIAFBFGoQxAELIAEvAQxBAUcNAAsgASgCECEADAQLIAFBBDYCFCAAIAFBFGoQzAEhAAwDCyACIANB6LLBABC7AQALIAEoAhAhAAwBCyACIAMgA0H4ssEAEG8ACyABQSBqJAAgAAvJAwINfwF+An8gAyAFQQFrIg0gASgCFCIIaiIHSwRAIAUgASgCECIOayEPIAEoAhwhCyABKAIIIQogASkDACEUA0ACQCABAn8CQCAUIAIgB2oxAACIQgGDUARAIAEgBSAIaiIINgIUIAYNAwwBCyAKIAsgCiAKIAtJGyAGGyIJIAUgBSAJSRshDCACIAhqIRAgCSEHAkACQAJAA0AgByAMRgRAQQAgCyAGGyEMIAohBwNAIAcgDE0EQCABIAUgCGoiAjYCFCAGRQRAIAFBADYCHAsgACACNgIIIAAgCDYCBEEBDAwLIAdBAWsiByAFTw0FIAcgCGoiCSADTw0DIAQgB2otAAAgAiAJai0AAEYNAAsgASAIIA5qIgg2AhQgDyAGRQ0GGgwHCyAHIAhqIhEgA08NAiAHIBBqIRIgBCAHaiAHQQFqIQctAAAgEi0AAEYNAAsgESAKa0EBaiEIIAZFDQMMBQsgCSADQezDwAAQuwEACyADIAggCWoiACAAIANJGyADQfzDwAAQuwEACyAHIAVB3MPAABC7AQALQQALIgc2AhwgByELCyAIIA1qIgcgA0kNAAsLIAEgAzYCFEEACyEHIAAgBzYCAAv3BAEHfyMAQSBrIgYkAEEBIQkgASABKAIUIgdBAWoiBTYCFAJAIAUgASgCECIITw0AAkACQCABKAIMIAVqLQAAQStrDgMBAgACC0EAIQkLIAEgB0ECaiIFNgIUCwJAAkAgBSAISQRAIAEgBUEBaiIHNgIUIAEoAgwiCiAFai0AAEEwa0H/AXEiBUEKTwRAIAZBDTYCFCAGIAogCCAHECMgBkEUaiAGKAIAIAYoAgQQ0AEhASAAQQE2AgAgACABNgIEDAMLIAcgCE8NAQNAIAcgCmotAABBMGtB/wFxIgtBCk8NAiABIAdBAWoiBzYCFCAFQcyZs+YARyALQQdLciAFQcuZs+YASnFFBEAgBUEKbCALaiEFIAcgCEcNAQwDCwsjAEEgayIEJAAgAAJ/AkAgA0IAIAkbUARAIAEoAhQiBSABKAIQIgdPDQEgASgCDCEIA0AgBSAIai0AAEEwa0H/AXFBCk8NAiABIAVBAWoiBTYCFCAFIAdHDQALDAELIARBDjYCFCAEQQhqIAEoAgwgASgCECABKAIUECMgACAEQRRqIAQoAgggBCgCDBDQATYCBEEBDAELIABEAAAAAAAAAABEAAAAAAAAAIAgAhs5AwhBAAs2AgAgBEEgaiQADAILIAZBBTYCFCAGQQhqIAEoAgwgCCAFECMgBkEUaiAGKAIIIAYoAgwQ0AEhASAAQQE2AgAgACABNgIEDAELIAAgASACIAMCfyAJRQRAIAQgBWsiAEEfdUGAgICAeHMgACAAIARIIAVBAEpzGwwBCyAEIAVqIgBBH3VBgICAgHhzIAAgBUEASCAAIARIcxsLEHYLIAZBIGokAAv0AwIFfwF+IwBBIGsiAiQAAkACQCAAKAIAIgNBAkcEQEEBIQQCQAJ/AkAgA0EBRgRAIAIgAEEEajYCACABKAIIIAIgATYCDCACQoCAgICAyNAHNwIEIAKtQoCAgIDQB4QhB0GAgIAEcQ0BIAIgBzcDECACQQRqQYjLwABBtYXAACACQRBqEEcMAgsgASgCACIDIAAoAhAgACgCFCABKAIEKAIMIgERAAANBQwECyACIAc3AxAgAkEEakGIy8AAQevYwQAgAkEQahBHCyIDQQAgAigCBCIFG0UEQCADDQQgBUUNAUHEy8AAQTcgAkEfakG0y8AAQfzLwAAQrgEACyABKAIAQaDLwABBFCABKAIEKAIMEQAADQMLIAEoAgAhAyABKAIEKAIMIQEMAQsCQAJAAkAgACgCJCIERQ0AIAAoAiAhAANAIAJBBGogACAEEEICQCACKAIEQQFGBEAgAi0ADSEDIAItAAwhBSACKAIIIQYgAUG42cEAQQMQREUNAQwFCyABIAIoAgggAigCDBBEDQQMAgsgBUEBcUUNASAEIAMgBmoiA0kNAiAAIANqIQAgBCADayIEDQALC0EAIQQMAwsgAyAEIARBvNnBABBvAAtBASEEDAELIAMgACgCGCAAKAIcIAERAAAhBAsgAkEgaiQAIAQL0AMBBn8jAEEwayIBJAAgACgCDCEEAn8CQAJAAkACQCAAKAIUIgIgACgCECIDSQRAA0ACQCACIARqLQAAIgVBCWsOJAAABAQABAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBgMLIAAgAkEBaiICNgIUIAIgA0cNAAsgAyECCyABQQI2AiQgAUEIaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAgggASgCDBDQAQwECyAFQd0ARg0BCyABQRY2AiQgASAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAgAgASgCBBDQAQwCCyAAIAJBAWo2AhRBAAwBCyAAIAJBAWoiAjYCFAJAIAIgA08NAAJAA0AgAiAEai0AACIGQQlrIgVBF0tBASAFdEGTgIAEcUVyDQEgACACQQFqIgI2AhQgAiADRw0ACyADIQIMAQsgBkHdAEcNACABQRU2AiQgAUEYaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAhggASgCHBDQAQwBCyABQRY2AiQgAUEQaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQSRqIAEoAhAgASgCFBDQAQsgAUEwaiQAC5cDAQ1/IwBBEGsiBiQAAkAgAS0AJQ0AIAEoAgQhBwJAIAEoAhAiCCABKAIIIgxLDQAgCCABKAIMIgJJDQAgAUEUaiINIAEtABgiBWpBAWstAAAhCiAFQQVJIQ4DQCACIAdqIQsCQAJAAn8gCCACayIEQQdNBEBBACEDQQAgBEUNARoDQEEBIAogAyALai0AAEYNAhogBCADQQFqIgNHDQALIAQhA0EADAELIAZBCGogCiALIAQQaiAGKAIMIQMgBigCCAtBAUYEQCABIAIgA2pBAWoiAjYCDCACIAVJIAIgDEtyDQIgDkUNASAHIAIgBWsiA2ogDSAFEL4BDQIgASgCHCEEIAEgAjYCHCAEIAdqIQkgAyAEayEDDAULIAEgCDYCDAwDC0EAIAVBBEGgzMAAEG8ACyACIAhNDQALCyABQQE6ACUCQCABLQAkQQFGBEAgASgCICECIAEoAhwhAQwBCyABKAIgIgIgASgCHCIBRg0BCyABIAdqIQkgAiABayEDCyAAIAM2AgQgACAJNgIAIAZBEGokAAv6AgEEfyMAQRBrIgQkAAJ/IAIoAgBBAXEEQEHi2MEAIQVBCQwBCyAEQQRqIAIoAgQgAigCCBBCQeLYwQAgBCgCCCAEKAIEIgIbIQVBCSAEKAIMIAIbCyECIAUgAiABECghBQJAAkACQAJAIAAoAgAiAUF/RwRAIAFFDQIgACgCBCIAQQRrKAIAIgJBeHEiA0EEQQggAkEDcSICGyABakkNBCACRSADIAFBJ2pNcg0BDAMLIAAtAARBA0cNASAAKAIIIgAoAgAhASAAQQRqKAIAIgIoAgAiAwRAIAEgAxEEAAsgAigCBCICBEAgAUEEaygCACIDQXhxIgZBBEEIIANBA3EiAxsgAmpJDQQgA0EAIAYgAkEnaksbDQMgARAtCyAAQQRrKAIAIgFBeHEiAkEQQRQgAUEDcSIBG0kNAyABRQ0AIAJBNE8NAgsgABAtCyAEQRBqJAAgBQ8LQYjXwQBBLkG418EAEOoBAAtByNbBAEEuQfjWwQAQ6gEAC74DAQN/AkAgACgCACIDRQRAIAAoAhAiAEUNASAAQeHCwABBARBEDwsCQAJ/AkACQCAAKAIIIgEgACgCBE8EQCAAKAIQIgJFDQEgAkG4wsAAQRAQREUNAUEBDwtBASECIAAgAUEBajYCCAJAAkACQAJAIAEgA2otAABBzgBrDgUCAwAAAQALIAAoAhAiAUUNAyABQbjCwABBEBBERQ0DDAYLIABBABAgDQUgACgCECIBBEAgAUGhx8AAQQMQRA0GCyAAQQAQIEUNBgwFCyAAKAIQIgBFDQUgAEGnx8AAQQUQREUNBQwECyAAIAAoAgxBAWoiATYCDCABQfQDSw0BIAAQWQ0DA0AgACgCACIDBEACQCAAKAIIIgEgACgCBE8NACABIANqLQAAQcUARw0AIAAgAUEBajYCCCAAIAAoAgxBAWs2AgwMBwsgACgCECIBBEAgAUGkx8AAQQMQRA0GCyAAEFlFDQEMBQsLIAAoAhAiAUUNACABQbjCwABBEBBEDQMLIABBADoABEEADAELIAAoAhAiAQRAIAFByMLAAEEZEEQNAgsgAEEBOgAEQQALIQIgACACNgIACyACDwtBAAvPAgEFfwJAAkACQAJAAkACQCAAKAIAIgAoAgAOAgABAwsgACgCCCIBRQ0CIAAoAgQiA0EEaygCACICQXhxIgRBBEEIIAJBA3EiAhsgAWpJDQQgAkUgBCABQSdqTXINAQwDCyAALQAEQQNHDQEgACgCCCIDKAIAIQEgA0EEaigCACICKAIAIgQEQCABIAQRBAALIAIoAgQiAgRAIAFBBGsoAgAiBEF4cSIFQQRBCCAEQQNxIgQbIAJqSQ0EIARBACAFIAJBJ2pLGw0DIAEQLQsgA0EEaygCACIBQXhxIgJBEEEUIAFBA3EiARtJDQMgAUUNACACQTRPDQILIAMQLQsgAEEEaygCACIDQXhxIgFBGEEcIANBA3EiAxtJDQEgA0EAIAFBPE8bDQAgABAtDwtBiNfBAEEuQbjXwQAQ6gEAC0HI1sEAQS5B+NbBABDqAQALgAQBCX8jAEEgayIFJAAgASABKAIUIgdBAWoiCDYCFAJAIAEoAhAiBiAISwRAIAggBmshCiABKAIMIQlBACEHAkADQCAIIAlqLQAAIgtBMGsiDEH/AXEiDUEKTwRAIAdFBEAgBUENNgIUIAUgCSAGIAhBAWoiASAGIAEgBkkbECMgBUEUaiAFKAIAIAUoAgQQ0AEhASAAQQE2AgAgACABNgIEDAULIAQgB2ohBCALQSByQeUARwRAIAAgASACIAMgBBB2DAULIAAgASACIAMgBBBUDAQLIA1BBUsgA0KZs+bMmbPmzBlSciADQpiz5syZs+bMGVZxDQEgASAIQQFqIgg2AhQgB0EBayEHIANCCn4gDK1C/wGDfCEDIAYgCEcNAAsgACABIAIgAyAEIApqEHYMAgsgBCAHaiEGAkACQAJAIAEoAhQiBCABKAIQIghPDQAgASgCDCEHA0AgBCAHai0AACIJQTBrQf8BcUEJTQRAIAEgBEEBaiIENgIUIAQgCEcNAQwCCwsgCUEgckHlAEYNAQsgACABIAIgAyAGEHYMAQsgACABIAIgAyAGEFQLDAELIAVBBTYCFCAFQQhqIAEoAgwgBiAHQQJqIgEgBiABIAZJGxAjIAVBFGogBSgCCCAFKAIMENABIQEgAEEBNgIAIAAgATYCBAsgBUEgaiQAC+cCAQV/AkAgAUHN/3tBECAAIABBEE0bIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEBgiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQPAwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEDwLIABBCGohAwsgAwvZAgIEfwF+IwBB0ABrIgQkACAEIAEgAkH3xcAAQQEQIQNAIARBxABqIAQQKSAEKAJEIgNFDQALAkAgACACAn8gA0ECRwRAIAQoAkgMAQsgAgsiA2tBEE0EfiACIANHBEAgASACaiEGIAEgA2ohAwNAAn8gAywAACIBQQBOBEAgAUH/AXEhAiADQQFqDAELIAMtAAFBP3EhBSABQR9xIQIgAUFfTQRAIAJBBnQgBXIhAiADQQJqDAELIAMtAAJBP3EgBUEGdHIhBSABQXBJBEAgBSACQQx0ciECIANBA2oMAQsgAkESdEGAgPAAcSADLQADQT9xIAVBBnRyciECIANBBGoLIQMgAkHBAGtBX3FBCmogAkEwayACQTlLGyIBQRBPDQMgAa0gB0IEhoQhByADIAZHDQALCyAAIAc3AwhCAQUgBws3AwAgBEHQAGokAA8LQfjFwAAQkQIAC/oCAQZ/IwBBMGsiAiQAIAACfyAAAn8CQAJAAkACQCABKAIUIgMgASgCECIFTw0AIAEoAgwhBgNAIAMgBmotAAAiBEEJayIHQRdLQQEgB3RBk4CABHFFckUEQCABIANBAWoiAzYCFCADIAVHDQEMAgsLIARB7gBHDQAgASADQQFqIgA2AhQgACAFTw0DIAEgA0ECaiIENgIUIAAgBmotAABB9QBHDQIgBCAAIAUgACAFSxsiAEYNAyABIANBA2oiBzYCFCAEIAZqLQAAQewARg0BIAchBAwCCyACQQhqIAEQRSACKAIIIAAgAigCDDYCBEEBagwECyAAIAdGDQEgASADQQRqIgQ2AhRBACAGIAdqLQAAQewARg0DGgsgAkEJNgIkIAJBGGogBiAFIAQQIyACQSRqIAIoAhggAigCHBDQAQwBCyACQQU2AiQgAkEQaiAGIAUgABAjIAJBJGogAigCECACKAIUENABCzYCBEECCzYCACACQTBqJAALhQMBBX8CQCAAQoCAgIAQVARAIAEhAgwBCyABQQhrIgIgACAAQoDC1y+AIgBCgL6o0A9+fKciA0GQzgBuIgRBkM4AcCIFQeQAbiIGQQF0LwCczUA7AAAgAUEEayADIARBkM4AbGsiA0H//wNxQeQAbiIEQQF0LwCczUA7AAAgAUEGayAFIAZB5ABsa0H//wNxQQF0LwCczUA7AAAgAUECayADIARB5ABsa0H//wNxQQF0LwCczUA7AAALIACnIgFBkM4ATwRAIAJBBGshAgNAIAIgASIDIAFBkM4AbiIBQfCxf2xqIgRB5ABuIgVBAXQvAJzNQDsAACACQQJqIAQgBUHkAGxrQQF0LwCczUA7AAAgAkEEayECIANB/8HXL0sNAAsgAkEEaiECCyABQeMASwRAIAJBAmsiAiABIAFB//8DcUHkAG4iAUHkAGxrQf//A3FBAXQvAJzNQDsAAAsgAUEJTQRAIAJBAWsgAUEwcjoAAA8LIAJBAmsgAUEBdC8AnM1AOwAAC+8CAQZ/IwBBEGsiBSQAAkACQAJAAkACQAJAAkAgAkEBcQRAIAJBAXYhAwwBCyABLQAAIgNFDQEgASEEA0AgBEEBaiEEAkAgA8BBAEgEQCADQf8BcUGAAUYEQCAGIAQvAAAiA2ohBiADIARqQQJqIQQMAgsgBCADQQNxQQh4IghBBXRBgICAgARxIAhBB3RyQR12aiADQQF2QQJxaiADQQJ2QQJxaiEEIAZFIAdyIQcMAQsgBCADQf8BcSIDaiEEIAMgBmohBgsgBC0AACIDDQALQQAhAyAHIAZBEElxDQAgBkEBdCIDQQBIDQQLIAMNAQtBASEEQQAhAwwBCyADEBgiBEUNAgsgBUEANgIIIAUgBDYCBCAFIAM2AgAgBUGsocAAIAEgAhBHRQ0CQdShwABB1gAgBUEPakHEocAAQayiwAAQrgEACxCTAgALQQEgAxDkAQALIAAgBSgCCDYCCCAAIAUpAgA3AgAgBUEQaiQAC9YCAQN/IwBBEGsiAyQAAn8CQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BQQMhAiAALQAAIgAhBCAAQQpPBEAgAyAAIABB5ABuIgRB5ABsa0H/AXFBAXQvAJzNQDsADEEBIQILQQAgACAEG0UEQCACQQFrIgIgA0ELamogBEEBdC0Anc1AOgAACyABQQFBAUEAIANBC2ogAmpBAyACaxBLDAILIAAtAAAhAkEDIQADQCAAIANqQQdqIAJBD3FBjMTAAGotAAA6AAAgAEEBayEAIAJBBHZBD3EiAg0ACyABQQFBjsfAAEECIAAgA2pBCGpBAyAAaxBLDAELIAAtAAAhAkEDIQADQCAAIANqQQxqIAJBD3FBgMHAAGotAAA6AAAgAEEBayEAIAJBBHZBD3EiAg0ACyABQQFBjsfAAEECIAAgA2pBDWpBAyAAaxBLCyADQRBqJAALggMBBH8gACgCDCECAkACQAJAIAFBgAJPBEAgACgCGCEDAkACQCAAIAJGBEAgAEEUQRAgACgCFCICG2ooAgAiAQ0BQQAhAgwCCyAAKAIIIgEgAjYCDCACIAE2AggMAQsgAEEUaiAAQRBqIAIbIQQDQCAEIQUgASICQRRqIAJBEGogAigCFCIBGyEEIAJBFEEQIAEbaigCACIBDQALIAVBADYCAAsgA0UNAgJAIAAoAhxBAnRBuOTBAGoiASgCACAARwRAIAMoAhAgAEYNASADIAI2AhQgAg0DDAQLIAEgAjYCACACRQ0EDAILIAMgAjYCECACDQEMAgsgACgCCCIAIAJHBEAgACACNgIMIAIgADYCCA8LQdDnwQBB0OfBACgCAEF+IAFBA3Z3cTYCAA8LIAIgAzYCGCAAKAIQIgEEQCACIAE2AhAgASACNgIYCyAAKAIUIgBFDQAgAiAANgIUIAAgAjYCGA8LDwtB1OfBAEHU58EAKAIAQX4gACgCHHdxNgIAC74DAQZ/IwBBIGsiAyQAIAAoAgwhBAJ/AkACQAJAAkAgACgCFCIBIAAoAhAiAkkEQCAAQQxqIQYDQCABIARqLQAAQQlrIgVBGUsNAkEBIAV0QZOAgARxRQRAIAVBGUcNAyAAQQA2AgggACABQQFqNgIUIANBEGogBiAAECUgAygCFCICIAMoAhAiAUECRg0HGiADKAIYIQQgAUEBRw0EIARBBkcNBiACKAAAQefmweMGcyACQQRqLwAAQeHoAXNyRQ0FDAYLIAAgAUEBaiIBNgIUIAEgAkcNAAsgAiEBCyADQQU2AhAgA0EIaiAEIAIgAUEBaiIAIAIgACACSRsQIyADQRBqIAMoAgggAygCDBDQAQwECyAAIANBH2pBpLvBABAkIAAQjgEMAwsgBEEGRw0BIAIoAABB5+bB4wZzIAJBBGovAABB4egBc3INAQtBAAwBCyMAQSBrIgEkACABIAQ2AgQgASACNgIAIAFBATYCDCABQay5wQA2AgggASABQQhqrUKAgICAwAeENwMYIAEgAa1CgICAgPAAhDcDEEHBg8AAIAFBEGoQlQEgAUEgaiQAIAAQjgELIANBIGokAAvbAgIGfwJ+IwBBEGsiBCQAIAEoAgAhBgJAAkACQAJAIAEoAggiAyABKAIEIgJJBEAgAyAGai0AAEHfAEYNAQsgAyACIAIgA0kbIQcCQANAIAMgB0YNBAJAAkAgAyAGai0AACICQd8ARwRAIAJBMGsiBUH/AXFBCkkNAiACQeEAa0H/AXFBGkkNASACQcEAa0H/AXFBGk8NByACQR1rIQUMAgtBASECIAEgA0EBajYCCCAIQn9SBEAgACAIQgF8NwMIDAYLIABBADoAAQwHCyACQdcAayEFCyABIANBAWoiAzYCCCAEIAhCPhCYASAEKQMIQgBSDQEgBCkDACIJIAWtQv8Bg3wiCCAJWg0ACyAAQQA6AAFBASECDAQLIABBADoAAUEBIQIMAwsgAEIANwMIIAEgA0EBajYCCAtBACECDAELIABBADoAAUEBIQILIAAgAjoAACAEQRBqJAALxQIBBX9BEEEAIABBq50ETxsiAiACQQhyIgEgAEELdCICIAFBAnQoAtS/QEELdEkbIgEgAUEEciIBIAFBAnQoAtS/QEELdCACSxsiASABQQJyIgEgAUECdCgC1L9AQQt0IAJLGyIBIAFBAWoiASABQQJ0KALUv0BBC3QgAksbIgEgAUEBaiIBIAFBAnQoAtS/QEELdCACSxsiAUECdCgC1L9AQQt0IgQgAkYgAiAES2ogAWoiBEECdCICQdS/wABqIQUgAigC1L9AQRV2IQJB/wUhAQJAIARBH00EQCAFKAIEQRV2IQEgBEUNAQsgBUEEaygCAEH///8AcSEDCwJAIAEgAkF/c2pFDQAgACADayEDIAFBAWshAUEAIQADQCAAIAJB5KTAAGotAABqIgAgA0sNASABIAJBAWoiAkcNAAsLIAJBAXELlAIBBH8CQAJAAkACQCAAKAIAIgFBf0cEQCABRQ0CIAAoAgQiAEEEaygCACICQXhxIgNBBEEIIAJBA3EiAhsgAWpJDQQgAkUgAyABQSdqTXINAQwDCyAALQAEQQNHDQEgACgCCCIAKAIAIQEgAEEEaigCACICKAIAIgMEQCABIAMRBAALIAIoAgQiAgRAIAFBBGsoAgAiA0F4cSIEQQRBCCADQQNxIgMbIAJqSQ0EIANBACAEIAJBJ2pLGw0DIAEQLQsgAEEEaygCACIBQXhxIgJBEEEUIAFBA3EiARtJDQMgAUUNACACQTRPDQILIAAQLQsPC0GI18EAQS5BuNfBABDqAQALQcjWwQBBLkH41sEAEOoBAAvTAgEGfyMAQRBrIgQkAAJ/AkACQAJAIAAoAgAiA0UNAANAAkAgACgCCCIBIAAoAgQiBU8NACABIANqLQAAQcUARw0AIAAgAUEBajYCCAwCCwJAAkACQAJAAkAgAkUNACAAKAIQIgZFDQAgBkHfo8EAQQIQRA0IIAAoAgAiA0UNASAAKAIIIQEgACgCBCEFCyABIAVPDQAgASADai0AAEHLAGsOAgIBAAsgABAmDQYMAgsgACABQQFqNgIIIAQgABBkIAQtAAANBCAAIAQpAwgQhwENBQwBCyAAIAFBAWo2AghBASAAQQAQIA0FGgsgAkEBayECIAAoAgAiAw0ACwtBAAwCCyAELQABIQEgACgCECICBEBBASACQcjCwABBuMLAACABQQFxIgIbQRlBECACGxBEDQIaCyAAIAE6AAQgAEEANgIAQQAMAQtBAQsgBEEQaiQAC9sCAQh/IwBBIGsiAiQAIAAoAgQhBSAAKAIAIQNBASEGIAEoAgBByMbAAEEBIAEoAgQoAgwRAAAhACAFBEADQCAHIQhBASEHIABBAXEhBEEBIQACQCAEDQACQCABLQAKQYABcUUEQCAIQQFxRQ0BIAEoAgBB36PBAEECIAEoAgQoAgwRAABFDQEMAgsgASgCBCEEIAEoAgAhCSAIQQFxRQRAIAlBxNjBAEEBIAQoAgwRAAANAgsgAkEBOgAPIAIgBDYCBCACIAk2AgAgAkHosMAANgIUIAIgASkCCDcCGCACIAJBD2o2AgggAiACNgIQIAMgAkEQahBhBEAMAgsgAigCEEH3qsAAQQIgAigCFCgCDBEAACEADAELIAMgARBhIQALIANBAWohAyAFQQFrIgUNAAsLIABFBEAgASgCAEHJxsAAQQEgASgCBCgCDBEAACEGCyACQSBqJAAgBgvhAgIGfwF+IwBBIGsiAiQAIAAoAgAhAwJAAkACQAJAAkACQCAAKAIEIgQOAwMCAQALQQEhACABKAIAIgVB2KPBAEEHIAEoAgQiBigCDCIHEQAADQQgAiADNgIcIAIgAkEcaq1CgICAgJAGhCIINwMIIAUgBkGGnsAAIAJBCGoQRw0DIARBA3RBCGshBCADQQhqIQEDQCACIAE2AhwgBUHfo8EAQQIgBxEAAA0EIAIgCDcDCCAFIAZBhp7AACACQQhqEEcNBCABQQhqIQFBACEAIARBCGsiBA0ACwwECyACQoCAgIDwACIIIANBCGqthDcDECACIAggA62ENwMIIAEoAgAgASgCBEGincAAIAJBCGoQRyEADAMLIAIgA61CgICAgPAAhDcDCCABKAIAIAEoAgRBhp7AACACQQhqEEchAAwCC0G3o8EAQQ5ByKPBABDqAQALQQEhAAsgAkEgaiQAIAALsgIBBX8CQAJAAkAgAiACQQNqQXxxIgRGBEAgA0EIayEGQQAhBAwBCyADIAQgAmsiBCADIARJGyEEIAMEQCABQf8BcSEHQQEhBgNAIAIgBWotAAAgB0YNBCAEIAVBAWoiBUcNAAsLIAQgA0EIayIGSw0BCyABQf8BcUGBgoQIbCEFA0BBgIKECCACIARqIgcoAgAgBXMiCGsgCHJBgIKECCAHQQRqKAIAIAVzIgdrIAdycUGAgYKEeHFBgIGChHhHDQEgBEEIaiIEIAZNDQALCwJAIAMgBEYNACADIARrIQMgAiAEaiECQQAhBSABQf8BcSEBA0AgASACIAVqLQAARwRAIAVBAWoiBSADRw0BDAILCyAEIAVqIQVBASEGDAELQQAhBgsgACAFNgIEIAAgBjYCAAuiAgIEfwN+IwBBIGsiAyQAQRQhAiAAKQMAIgcgB0I/hyIGhSAGfSIGQugHWgRAA0AgA0EMaiACaiIAQQRrIAYiCCAGQpDOAIAiBkKQzgB+faciBEH//wNxQeQAbiIFQQF0LwCczUA7AAAgAEECayAEIAVB5ABsa0H//wNxQQF0LwCczUA7AAAgAkEEayECIAhC/6ziBFYNAAsLIAZCCVYEQCACQQJrIgIgA0EMamogBqciACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0LwCczUA7AAAgAK0hBgsgB1BFIAZQcUUEQCACQQFrIgIgA0EMamogBqdBAXQtAJ3NQDoAAAsgASAHQgBZQQFBACADQQxqIAJqQRQgAmsQSyADQSBqJAALmAIBB38jAEEQayIDJABBCiECIAAoAgAiBCAEQR91IgBzIABrIgBB6AdPBEADQCADQQZqIAJqIgVBBGsgACIGIABBkM4AbiIAQZDOAGxrIgdB//8DcUHkAG4iCEEBdC8AnM1AOwAAIAVBAmsgByAIQeQAbGtB//8DcUEBdC8AnM1AOwAAIAJBBGshAiAGQf+s4gRLDQALCyAAQQlLBEAgAkECayICIANBBmpqIAAgAEH//wNxQeQAbiIAQeQAbGtB//8DcUEBdC8AnM1AOwAAC0EAIAQgABtFBEAgAkEBayICIANBBmpqIABBAXQtAJ3NQDoAAAsgASAEQX9zQR92QQFBACADQQZqIAJqQQogAmsQSyADQRBqJAALugIBBH9BHyECIABCADcCECABQYCAgAhJBEAgAUEmIAFBCHZnIgNrdkEBcSADQQF0ckE+cyECCyAAIAI2AhwgAkECdEG45MEAaiEEQQEgAnQiA0HU58EAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghB1OfBAEHU58EAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWoiBCgCECICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBEEQaiAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC80DAQh/IwBBEGsiAyQAAkBBiOjBACgCAEUEQEGI6MEAQX82AgACfwJAAkACQEGU6MEAKAIAIgBBkOjBACgCACIBRgRAIABBjOjBACgCACIBRw0B0G9BgAEgACAAQYABTRsiBvwPASICQX9HDQIMBgsgACABTw0FQdjjwQAoAgAgAEECdGooAgAhAkEADAMLIAAgAU8NBEHY48EAKAIAIQIMAQsCQEGY6MEAKAIAIgFFBEBBmOjBACACNgIADAELIAAgAWogAkcNBAsgA0EEaiEEQdjjwQAoAgAhAkEBIQcCfyAAIAZqIgYiAUH/////AUsEQEEEDAELIAFBAnQhBQJAAn8gAARAIAIgAEECdEEEIAUQMQwBCyAFEBgLIgFFBEAgBEEENgIEDAELIAQgATYCBEEAIQcLQQgLIARqIAU2AgAgBCAHNgIAIAMoAgRBAUYNA0HY48EAIAMoAggiAjYCAEGM6MEAIAY2AgALIAIgAEECdGogAEEBaiICNgIAQZDowQAgAjYCAEGI6MEAKAIAQQFqCyEBQZTowQAgAjYCAEGI6MEAIAE2AgBBmOjBACgCACEBIANBEGokACAAIAFqDwtB1NvBABDVAQALAAuOAgIBfwF+IwBBIGsiBCQAAkACQAJAIAAgAk0EQCABIAJLDQFCgICAgDAhBSAAIAFNDQIgBCAANgIIIAQgATYCDCAEIAUgBEEMaq2ENwMYIAQgBSAEQQhqrYQ3AxBBsoDAACAEQRBqIAMQygEACyAEIAA2AgggBCACNgIMIARCgICAgDAiBSAEQQxqrYQ3AxggBCAFIARBCGqthDcDEEHHgsAAIARBEGogAxDKAQALIAQgATYCCCAEIAI2AgwgBEKAgICAMCIFIARBDGqthDcDGAwBCyAEIAE2AgggBCACNgIMIAQgBSAEQQxqrYQ3AxgLIAQgBSAEQQhqrYQ3AxBBgIPAACAEQRBqIAMQygEAC7QCAQN/IwBBIGsiAiQAAn8CQAJAAkAgACgCAEUEQCAAKAIQIgANAQwDCyACQQhqIAAQgQEgAigCCCIDRQRAIAItAAwhAyAAKAIQIgQEQEEBIARByMLAAEG4wsAAIANBAXEiBBtBGUEQIAQbEEQNBRoLIAAgAzoABCAAQQA2AgBBAAwECyACQQhqIAMgAigCDCIEEF0CQCACKQMIQgFRBEAgAiACKQMQNwMYIAAoAhAiAEUNBCACQRhqIAAQcw0BDAMLIAAoAhAiAEUNAyAAQY7HwABBAhBEDQAgACADIAQQREUNAgtBAQwDCyAAQeHCwABBARBEDAILIAAtAApBgAFxDQAgAiABEMgBIAIoAgAiAQRAIAAgASACKAIEEEQMAgtBkMfAABCRAgALQQALIAJBIGokAAu/AgIDfwF7IwBBIGsiAiQAAkACQAJAIAAoAgAiA0UNACAAKAIIIgEgACgCBE8NAAJAAkACQCABIANqLQAAIgNByQBHBEAgA0HCAEcNBCAAIAFBAWo2AgggAiAAEI8BIAIoAgANASAAKAIQIgFFDQIgAUHIwsAAQbjCwAAgAi0ABEEBcSIBG0EZQRAgARsQREUNAkECIQEMBgsgACABQQFqNgIIQQIhASAAQQAQH0UNBAwFCyAAKAIQRQ0BIAD9AAIAIQQgACAC/QACAP0LAgAgAiAE/QsDECAAEHEgACAC/QADEP0LAgBB/wFxIQEMBAsgACAC/QACAP0LAgALQQAhAQwCC0ECQQAgAEEAEB8bIQEMAQsgACgCECIDBEAgA0HcxsAAQQEQRA0BC0ECQQEgABBnGyEBCyACQSBqJAAgAQu9AgIEfwF+IwBBQGoiAiQAIAAoAgAhACACQQA2AjggAkKAgICAEDcCMCACQZSzwQA2AhwgAkKggICABjcCICACIAJBMGo2AhgCQAJAIAAgAkEYaiIDEDJFBEAgAiACKAI4NgIQIAIgAikCMDcDCCACQoCAgIAwIgYgAEEQaq2ENwMoIAIgBiAAQQxqrYQ3AyAgAiACQQhqrUKAgICAoAaENwMYIAEoAgAgASgCBEG/n8AAIAMQRyACKAIIIgAEQCACKAIMIgRBBGsoAgAiA0F4cSIFQQRBCCADQQNxIgMbIABqSQ0CIANBACAFIABBJ2pLGw0DIAQQLQsgAkFAayQADwtBvLPBAEE3IAJBP2pBrLPBAEH0s8EAEK4BAAtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALlgICBH8DfiMAQSBrIgMkAEEUIQIgACkDACIHIQYgB0LoB1oEQANAIANBDGogAmoiAEEEayAGIgggBkKQzgCAIgZCkM4Afn2nIgRB//8DcUHkAG4iBUEBdC8AnM1AOwAAIABBAmsgBCAFQeQAbGtB//8DcUEBdC8AnM1AOwAAIAJBBGshAiAIQv+s4gRWDQALCyAGQglWBEAgAkECayICIANBDGpqIAanIgAgAEH//wNxQeQAbiIAQeQAbGtB//8DcUEBdC8AnM1AOwAAIACtIQYLIAdQRSAGUHFFBEAgAkEBayICIANBDGpqIAanQQF0LQCdzUA6AAALIAFBAUEBQQAgA0EMaiACakEUIAJrEEsgA0EgaiQAC8ACAQV/IwBBMGsiASQAIAAoAgwhBAJ/AkACQAJAAkAgACgCFCICIAAoAhAiA0kEQANAAkAgAiAEai0AACIFQQlrDiQAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAYDCyAAIAJBAWoiAjYCFCACIANHDQALIAMhAgsgAUEDNgIkIAFBEGogBCADIAJBAWoiACADIAAgA0kbECMgAUEkaiABKAIQIAEoAhQQ0AEMBAsgBUH9AEYNAQsgAUEWNgIkIAFBCGogBCADIAJBAWoiACADIAAgA0kbECMgAUEkaiABKAIIIAEoAgwQ0AEMAgsgACACQQFqNgIUQQAMAQsgAUEVNgIkIAFBGGogBCADIAJBAWoiACADIAAgA0kbECMgAUEkaiABKAIYIAEoAhwQ0AELIAFBMGokAAuJAgEHfyMAQRBrIgMkAEEKIQIgACgCACIEIQAgBEHoB08EQANAIANBBmogAmoiBUEEayAAIgYgAEGQzgBuIgBBkM4AbGsiB0H//wNxQeQAbiIIQQF0LwCczUA7AAAgBUECayAHIAhB5ABsa0H//wNxQQF0LwCczUA7AAAgAkEEayECIAZB/6ziBEsNAAsLIABBCUsEQCACQQJrIgIgA0EGamogACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0LwCczUA7AAALQQAgBCAAG0UEQCACQQFrIgIgA0EGamogAEEBdC0Anc1AOgAACyABQQFBAUEAIANBBmogAmpBCiACaxBLIANBEGokAAuwAgICfwJ8IwBBIGsiBSQAIAO6IQcgAAJ/AkACQAJAAkAgBCAEQR91IgZzIAZrIgZBtQJPBEADQCAHRAAAAAAAAAAAYQ0FIARBAE4NAiAHRKDI64XzzOF/oyEHIARBtAJqIgQgBEEfdSIGcyAGayIGQbUCTw0ACwsgBkEDdCsD8LxBIQggBEEATg0BIAcgCKMhBwwDCyAFQQ42AhQgBUEIaiABKAIMIAEoAhAgASgCFBAjIAAgBUEUaiAFKAIIIAUoAgwQ0AE2AgQMAQsgByAIoiIHmUQAAAAAAADwf2INASAFQQ42AhQgBSABKAIMIAEoAhAgASgCFBAjIAAgBUEUaiAFKAIAIAUoAgQQ0AE2AgQLQQEMAQsgACAHIAeaIAIbOQMIQQALNgIAIAVBIGokAAuUAgEEfyMAQRBrIgIkACACQQA2AgwCfyABQYABTwRAIAFBP3FBgH9yIQMgAUEGdiEEIAFBgBBJBEAgAiADOgANIAIgBEHAAXI6AAxBAgwCCyABQQx2IQUgBEE/cUGAf3IhBCABQf//A00EQCACIAM6AA4gAiAEOgANIAIgBUHgAXI6AAxBAwwCCyACIAM6AA8gAiAEOgAOIAIgBUE/cUGAf3I6AA0gAiABQRJ2QXByOgAMQQQMAQsgAiABOgAMQQELIQEgACAAKAIEIgMgAWs2AgQgACAAKAIAIAEgA0tyIgQ2AgBBASEDIARFBEAgACgCCCIAKAIAIAJBDGogASAAKAIEKAIMEQAAIQMLIAJBEGokACADC4ECAQZ/IAAoAgghBAJ/QQEgAUGAAUkNABpBAiABQYAQSQ0AGkEDQQQgAUGAgARJGwsiBiAAKAIAIARrSwRAIAAgBCAGEJIBCyAAKAIEIARqIQICQCABQYABTwRAIAFBP3FBgH9yIQUgAUEGdiEDIAFBgBBJBEAgAiAFOgABIAIgA0HAAXI6AAAMAgsgAUEMdiEHIANBP3FBgH9yIQMgAUH//wNNBEAgAiAFOgACIAIgAzoAASACIAdB4AFyOgAADAILIAIgBToAAyACIAM6AAIgAiAHQT9xQYB/cjoAASACIAFBEnZBcHI6AAAMAQsgAiABOgAACyAAIAQgBmo2AghBAAuBAgEGfyAAKAIIIQQCf0EBIAFBgAFJDQAaQQIgAUGAEEkNABpBA0EEIAFBgIAESRsLIgYgACgCACAEa0sEQCAAIAQgBhCTAQsgACgCBCAEaiECAkAgAUGAAU8EQCABQT9xQYB/ciEFIAFBBnYhAyABQYAQSQRAIAIgBToAASACIANBwAFyOgAADAILIAFBDHYhByADQT9xQYB/ciEDIAFB//8DTQRAIAIgBToAAiACIAM6AAEgAiAHQeABcjoAAAwCCyACIAU6AAMgAiADOgACIAIgB0E/cUGAf3I6AAEgAiABQRJ2QXByOgAADAELIAIgAToAAAsgACAEIAZqNgIIQQAL+gEBA38jAEEQayICJAAgACgCACEAAn8gAS0AC0EYcUUEQCABKAIAIAAgASgCBCgCEBEBAAwBCyACQQA2AgwgASACQQxqAn8gAEGAAU8EQCAAQT9xQYB/ciEDIABBBnYhASAAQYAQSQRAIAIgAzoADSACIAFBwAFyOgAMQQIMAgsgAEEMdiEEIAFBP3FBgH9yIQEgAEH//wNNBEAgAiADOgAOIAIgAToADSACIARB4AFyOgAMQQMMAgsgAiADOgAPIAIgAToADiACIARBP3FBgH9yOgANIAIgAEESdkFwcjoADEEEDAELIAIgADoADEEBCxBECyACQRBqJAALrAIBBX8jAEEQayICJABBASEFAkAgASgCACIDQbDMwABBDSABKAIEIgYoAgwiBBEAAA0AIAEtAApBgAFxRQRAIANBhsfAAEEDIAQRAAANASADQb3MwABBBCAEEQAADQEgA0GKxcAAQQIgBBEAAA0BIAMgAC0AAEECdCIAKALc3UEgACgCxN1BIAQRAAANASADQYnHwABBAiAEEQAAIQUMAQsgA0H0qsAAQQMgBBEAAA0AIAIgBjYCBCACIAM2AgAgAkEBOgAPIAIgAkEPajYCCCACQb3MwABBBBBGDQAgAkGKxcAAQQIQRg0AIAIgAC0AAEECdCIAKAKM3kEgACgC9N1BEEYNACACQfeqwABBAhBGDQAgA0GVxcAAQQEgBBEAACEFCyACQRBqJAAgBQvsAQIGfwFvIwBBIGsiAiQAIAIgATcDAAJAAkACQCABQoCAgICAgIAQWgRAIAIgAq1CgICAgIABhDcDCCACQRRqQeabwAAgAkEIahBgIAIoAhQhAyACKAIYIgUgAigCHBAQIQgQbiIGIAgmASADBEAgBUEEaygCACIEQXhxIgdBBEEIIARBA3EiBBsgA2pJDQIgBEEAIAcgA0EnaksbDQMgBRAtC0EBIQMMAwsgAboQggIhBgwCC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAsgACAGNgIEIAAgAzYCACACQSBqJAALxQgDA38BfgFvIwBBIGsiBSQAQbTkwQBBtOTBACgCACIGQQFqNgIAAkACQAJAAkAgBkEASA0AAkACQEGo5MEALQAARQRAQajkwQBBAToAAEGk5MEAQaTkwQAoAgBBAWo2AgBBrOTBACgCACIGQQBIDQMgBiAGQQFqIgdKDQRBrOTBACAHNgIAQbDkwQAoAgANAUGs5MEAIAdBAWs2AgAMAgsgBSAAIAEoAhgRAgAACyAFQQhqIAAgASgCFBECACAFIAQ6AB0gBSADOgAcIAUgAjYCGCAFIAUpAwg3AhAgBUEQaiEAIwBBQGoiAiQAIAJBADYCFCACQoCAgIAQNwIMAkACQAJAAkACQCACQQxqIgRB/NrBAEEMELkBDQAgAiAAKAIIIgEpAgA3AhggAiABQQxqrUKAgICAMIQ3AzAgAiABQQhqrUKAgICAMIQ3AyggAiACQRhqrUKAgICAoAGENwMgIARBvKTAAEGqgMAAIAJBIGoiBBBHDQAgBCAAKAIAIgEgACgCBCgCDCIFEQIAIAEhAAJAIAL9AAQg/Qxc9ulf3AL2ufHBcGzyYcEk/SP9YwR/QQQFIAQgACAFEQIAIAL9AAQg/QzaB4xJeGVM08J9j02WnybP/ST9Uw0BIABBBGohAEEICyABaigCACEBIAAoAgAhACACQQxqIgRBiNvBAEECELkBDQEgBCAAIAEQuQENAQsgAiACKAIUIgA2AiggAiACKQIMIgg3AyAgCKciBiAAa0EJTQRAIAJBIGogAEEKEJMBIAIoAiAhBiACKAIoIQALIAIoAiQiBSAAaiIBQbKkwAApAAA3AAAgAUG6pMAALwAAOwAIIAIgAEEKaiIANgIoEA0hCRBuIgEgCSYBIAJBDGogASUBEA4gAigCDCEHAkACQCACKAIQIgQgBiAAa0sEQCACQSBqIAAgBBCTASACKAIgIQYgAigCJCEFIAIoAighAAwBCyAERQ0BCyAERQ0AIAAgBWogByAE/AoAAAsgAiAAIARqIgA2AiggBiAAa0EBTQRAIAJBIGogAEECEJMBIAIoAiQhBSACKAIoIQALIAAgBWpBihQ7AAAgAiAAQQJqIgA2AiggACACKAIgIgZJBEAgBSAGQQEgABAxIgVFDQILIAUgABAPIAQEQCAHQQRrKAIAIgBBeHEiBUEEQQggAEEDcSIAGyAEakkNAyAAQQAgBSAEQSdqSxsNBCAHEC0LIAFBhAhPBEAgARCrAQsgAkFAayQADAQLQbyzwQBBNyACQT9qQdSkwABB9LPBABCuAQALQQEgABDkAQALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0Gs5MEAQazkwQAoAgAiAEEBazYCACAAQQBMDQMLQajkwQBBADoAACADDQMLAAtByNfBAEEcQeTXwQAQywEAC0Gc28EAQc0AQcTbwQAQygEACwAL4AEBAn8jAEEQayIDJAAgACgCACEAAn8CQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BIAAgARB1DAILIAAoAgAhAkEJIQADQCAAIANqQQZqIAJBD3EtAIzEQDoAACAAQQFrIQAgAkEEdiICDQALIAFBAUGOx8AAQQIgACADakEHakEJIABrEEsMAQsgACgCACECQQkhAANAIAAgA2pBBmogAkEPcS0AgMFAOgAAIABBAWshACACQQR2IgINAAsgAUEBQY7HwABBAiAAIANqQQdqQQkgAGsQSwsgA0EQaiQAC/IBAQF/IwBBEGsiBiQAAkACQAJAIAEEQCAGQQRqIAEgAyAEIAUgAigCEBEGAAJAIAYoAgQiAiAGKAIMIgFNBEAgBigCCCEFDAELIAJBAnQhAiAGKAIIIQMgAUUEQCADQQRrKAIAIgRBeHEiBUEEQQggBEEDcSIEGyACakkNAyAEQQAgBSACQSdqSxsNBCADEC1BBCEFDAELIAMgAkEEIAFBAnQiAhAxIgVFDQQLIAAgATYCBCAAIAU2AgAgBkEQaiQADwsQqwIAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtBBCACEOQBAAvwAQECfyMAQRBrIgUkAAJAAkACQCABBEAgBUEEaiABIAMgBCACKAIQEQcAAkAgBSgCBCICIAUoAgwiAU0EQCAFKAIIIQQMAQsgAkECdCECIAUoAgghAyABRQRAIANBBGsoAgAiBEF4cSIGQQRBCCAEQQNxIgQbIAJqSQ0DIARBACAGIAJBJ2pLGw0EIAMQLUEEIQQMAQsgAyACQQQgAUECdCICEDEiBEUNBAsgACABNgIEIAAgBDYCACAFQRBqJAAPCxCrAgALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0EEIAIQ5AEAC+MBAQh/IAEoAggiAiABKAIEIgMgAiADSxshCCABKAIAIQUgAiEGAkACQANAIAggBiIERg0BIAEgBEEBaiIGNgIIIAQgBWotAAAiB0HhAGshCSAHQTBrQf8BcUEKSSAJQf8BcUEGSXINAAsgB0HfAEcNAAJAIAIEQCACIANPBEAgAiADRw0CIAMgBE8NBAwCCyACIAVqLAAAQUBIIAMgBElyDQEMAwsgAyAETw0CCyAFIAMgAiAEQYjGwAAQhAIACyAAQQA2AgAgAEEAOgAEDwsgACAEIAJrNgIEIAAgAiAFajYCAAvpAQIBfwF+IwBBQGoiBiQAIAYgATYCBCAGIAA2AgAgBiADNgIMIAYgAjYCCCAGQQI2AhQgBkH7scAANgIQIAQEQCAGQcEANgIcIAYgBDYCGCAGQoCAgICQASIHIAZBCGqthDcDOCAGIAcgBq2ENwMwIAYgBkEYaq1CgICAgJAChDcDKCAGIAZBEGqtQoCAgICgAYQ3AyBB9oTAACAGQSBqIAUQygEACyAGQoCAgICQASIHIAZBCGqthDcDMCAGIAcgBq2ENwMoIAYgBkEQaq1CgICAgKABhDcDIEG/hMAAIAZBIGogBRDKAQAL1QICBn8BfgJAIAAoAggiASAAKAIEIgJGDQAgASACSQRAIAAoAgAiBCABai0AACIDQSJGIANB3ABGciADQSBJcg0BIAQgAUEBaiIFaiEDQQAgAiAFayIGQfj///8HcWshAgNAIAMhASACRQRAIAAgBkF4cSAFajYCCAJAIAAoAggiASAAKAIEIgJPDQAgACgCACEEA0AgASAEai0AACIDQSJGIANB3ABGciADQSBJcg0BIAAgAUEBaiIBNgIIIAEgAkcNAAsLDAMLIAJBCGohAiABQQhqIQMgASkAACIHQn+FIAdC3Ljx4sWLl67cAIVCgYKEiJCgwIABfSAHQqLEiJGixIiRIoVCgYKEiJCgwIABfSAHQqDAgIGChIiQIH2EhINCgIGChIiQoMCAf4MiB1ANAAsgACABIARrIAd6p0EDdmo2AggPCyABIAJBmKXBABC7AQALC9ABAQN/IwBBEGsiAiQAIAJBADYCDCAAIAJBDGoCfyABQYABTwRAIAFBP3FBgH9yIQMgAUEGdiEAIAFBgBBJBEAgAiADOgANIAIgAEHAAXI6AAxBAgwCCyABQQx2IQQgAEE/cUGAf3IhACABQf//A00EQCACIAM6AA4gAiAAOgANIAIgBEHgAXI6AAxBAwwCCyACIAM6AA8gAiAAOgAOIAIgBEE/cUGAf3I6AA0gAiABQRJ2QXByOgAMQQQMAQsgAiABOgAMQQELEDMgAkEQaiQAC4YCAQR/IwBBIGsiASQAIAAoAgwhBAJ/AkACQCAAKAIUIgIgACgCECIDSQRAA0ACQCACIARqLQAAQQlrDjIAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAwQLIAAgAkEBaiICNgIUIAIgA0cNAAsgAyECCyABQQM2AhQgAUEIaiAEIAMgAkEBaiIAIAMgACADSRsQIyABQRRqIAEoAgggASgCDBDQAQwCCyAAIAJBAWo2AhRBAAwBCyABQQY2AhQgASAEIAMgAkEBaiIAIAMgACADSRsQIyABQRRqIAEoAgAgASgCBBDQAQsgAUEgaiQAC90BAQR/IwBBEGsiAkEAOgAIIAJBADsBBiACIAFBFHYtAIzEQDoACSACIAFBBHZBD3EtAIzEQDoADSACIAFBCHZBD3EtAIzEQDoADCACIAFBDHZBD3EtAIzEQDoACyACIAFBEHZBD3EtAIzEQDoACiABQQFyZ0ECdiIDIAJBBmoiBGoiBUH7ADoAACAFQQFrQfUAOgAAIAQgA0ECayIDakHcADoAACAAQQo6AAsgACADOgAKIAAgAikBBjcAACACQf0AOgAPIAIgAUEPcS0AjMRAOgAOIAAgAi8BDjsACAvDAQIDfwF+IwBBEGsiBCQAAkAgACgCECIDRQRADAELQQEhAiADQaDHwABBARBEDQAgAVAEQCADQfvGwABBARBEIQIMAQsCQCABIAA1AhQiBVgEQCAFIAF9IgFCGlQNASADQfvGwABBARBEDQIgBCABNwMIIARBCGogAxBzIQIMAgsgA0G4wsAAQRAQRA0BQQAhAiAAQQA6AAQgAEEANgIADAELIAQgAadB4QBqNgIEIARBBGogAxB6IQILIARBEGokACACC8gBAQR/IABBBGoQQAJAAkACQAJAIAAoAhwiAQRAIAAoAiAiAkEEaygCACIDQXhxIgRBBEEIIANBA3EiAxsgAWpJDQEgA0EAIAQgAUEnaksbDQIgAhAtCyAAQQRrKAIAIgFBeHFBLEEwIAFBA3EiAhtJDQIgAkEAIAFB0ABPGw0DIAAQLQ8LQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAvdAQICfwF+IwBBIGsiAiQAIAEoAgBBf0YEQCABKAIMIQMgAkEANgIYIAJCgICAgBA3AhAgAkEQakHY1cEAIAMoAgAiAygCACADKAIEEEcaIAIgAigCGCIDNgIIIAIgAikCECIENwMAIAEgAzYCCCABIAQ3AgALIAEoAgghAyABQQA2AgggASkCACEEIAFCgICAgBA3AgAgAiADNgIYIAIgBDcDEEEMEBgiAUUEQBCeAgALIAEgAigCGDYCCCABIAIpAxA3AgAgAEGM28EANgIEIAAgATYCACACQSBqJAALtwECAn8BfiMAQRBrIgIkACAAKAIAIQMCQCABKQIIIgSnIgBBgICABHFFDQAgAEGAgIDAAHEEQCAAQYCAgAhyIQAMAQsgAUEKOwEMIABBgICAyAByIQALIAEgAEGAgIAEcjYCCEEJIQADQCAAIAJqQQZqIANBD3EtAIzEQDoAACAAQQFrIQAgA0EEdiIDDQALIAFBAUGOx8AAQQIgACACakEHakEJIABrEEsgASAENwIIIAJBEGokAAu1AQEEfyMAQRBrIgIkACACIAEoAiQ2AgggAiABKQIcNwMAAkACQEEMEBgiAwRAIAMgAigCCDYCCCADIAIpAwA3AgAgAUEEahBAIAFBBGsoAgAiBEF4cUEsQTAgBEEDcSIFG0kNASAFQQAgBEHQAE8bDQIgARAtIABByLbBADYCBCAAIAM2AgAgAkEQaiQADwsQngIAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAuaAQICfwF+QQEhB0EEIQYCQCAFrSADrX4iCEIgiFBFBEBBACEDDAELIAinIgNBgICAgHggBGtLBEBBACEDDAELAkACQAJ/IAEEQCACIAEgBWwgBCADEDEMAQsgA0UEQCAEIQYMAgsgAxAYCyIGDQAgACAENgIEDAELIAAgBjYCBEEAIQcLQQghBgsgACAGaiADNgIAIAAgBzYCAAuiAQICfwF+IwBBEGsiAyQAAkACQAJAIAEoAggiBCABKAIESQRAIAEoAgAgBGotAAAgAkH/AXFGDQELIABCADcDCAwBC0EBIQIgASAEQQFqNgIIIAMgARBkIAMtAABFBEAgAykDCCIFQn9SBEAgACAFQgF8NwMIDAILIABBADoAAQwCCyAAIAMtAAE6AAEMAQtBACECCyAAIAI6AAAgA0EQaiQAC6MBAQN/IwBBEGsiAiQAAkACQAJAIAAoAgwEQCAAIQEMAQsgAkEIaiABKAIMIAEoAhAgASgCFBAjIAAgAigCCCACKAIMENABIQEgAEEEaygCACIDQXhxIgRBGEEcIANBA3EiAxtJDQEgA0EAIARBPE8bDQIgABAtCyACQRBqJAAgAQ8LQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC6IBAgJ/AX4jAEEQayICJAAgASgCCCEDIAIgARBkAkAgAi0AAEEBRgRAIAItAAEhASAAQQA2AgAgACABOgAEDAELIAIpAwgiBCADQQFrrVQEQCABKAIMQQFqIgNB9ANNBEAgACADNgIMIAAgBD4CCCAAIAEpAgA3AgAMAgsgAEEANgIAIABBAToABAwBCyAAQQA2AgAgAEEAOgAECyACQRBqJAALlAEBA38CfwJAAkAgASgCACIDRQRADAELA0ACQCABKAIIIgQgASgCBE8NACADIARqLQAAQcUARw0AIAEgBEEBajYCCAwCCwJAIAJFDQAgASgCECIDRQ0AIANB36PBAEECEEQNAwsgARAmDQIgAkEBaiECIAEoAgAiAw0ACwtBAAwBC0EBCyEBIAAgAjYCBCAAIAE2AgALjQEBBH8jAEEQayICJAACf0EBIAEoAgAiA0EnIAEoAgQiBSgCECIBEQEADQAaIAIgACgCAEGBAhBDAkAgAi0ADSIAQYEBTwRAIAMgAigCACABEQEARQ0BQQEMAgsgAyACIAItAAwiBGogACAEayAFKAIMEQAARQ0AQQEMAQsgA0EnIAERAQALIAJBEGokAAuGAQEBfyMAQRBrIgMkACACIAEgAmoiAUsEQEEAQQAQ5AEACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBEJsBIAMoAgRBAUYEQCADKAIIIAMoAgwQ5AEACyADKAIIIQIgACABNgIAIAAgAjYCBCADQRBqJAAL7AEBBH8jAEEQayIDJAAgAiABIAJqIgRLBEBBAEEAEOQBAAsgA0EEaiEBIAAoAgAiAiEFIAAoAgQhBgJAQQggBCACQQF0IgIgAiAESRsiAiACQQhNGyICQQBOBEACfyAFBEAgBiAFQQEgAhAxDAELIAIQGAsiBEUEQCABIAI2AgggAUEBNgIEIAFBATYCAAwCCyABIAI2AgggASAENgIEIAFBADYCAAwBCyABQQA2AgQgAUEBNgIACyADKAIEQQFGBEAgAygCCCADKAIMEOQBAAsgAygCCCEBIAAgAjYCACAAIAE2AgQgA0EQaiQAC4MBAQN/An8CQCAAKAIAIgFFDQADQAJAIAAoAggiAyAAKAIETw0AIAEgA2otAABBxQBHDQAgACADQQFqNgIIDAILAkAgAkUNACAAKAIQIgFFDQAgAUHfo8EAQQIQREUNAEEBDwtBASAAQQEQIA0CGiACQQFrIQIgACgCACIBDQALC0EACwvODgINfwF+IwBBEGsiCyQAQQEhAwJAAkAgAUEBcQRAAkAgAUEBdiIBRQ0AIAEQGCIDRQ0DIAFFDQAgAyAAIAH8CgAACyALIAE2AgwgCyADNgIIIAsgATYCBAwBCyALQQRqIAAgARBgCwJ/IwBB0ABrIggkACAIQRBqIAtBBGoiDSgCBCIGIA0oAggiAEHIrcEAQQkQIQJAAkAgCCgCEEUEQCAIAn9BACAILQAeDQAaIAgtAB0hBQJAIAgoAhgiAgRAIAgoAkAhAQJAIAgoAkQiAyACTQRAIAIgA0YNAQwHCyABIAJqLAAAQUBIDQYLIAEgAmoiB0EBaywAACIEQQBIBEAgBEE/cQJ/IAdBAmstAAAiBMAiCUG/f0oEQCAEQR9xDAELIAlBP3ECfyAHQQNrLQAAIgTAIglBv39KBEAgBEEPcQwBCyAJQT9xIAdBBGstAABBB3FBBnRyC0EGdHILIgdBBnRyIQQLIAVBAXENAQJ/QX8gBEGAAUkNABpBfiAEQYAQSQ0AGkF9QXwgBEGAgARJGwsgAmoiAkUEQEEAIQIMAgsCQCACIANPBEAgAiADRw0HDAELIAEgAmosAABBQEgNBgsgASACaiIBQQFrLAAAQQBODQEgAUECaywAABoMAQtBACICIAVBAXFFDQEaCyAIIAI2AghBAQs2AgQMAQsgCEEYaiEBIAgoAkwhAyAIKAJIIQQgCCgCRCEFIAgoAkAhAiAIKAI0QX9HBEAgCEEEaiABIAIgBSAEIANBABBNDAELIAhBBGogASACIAUgBCADQQEQTQsCQAJAAkACQCAIKAIEQQFGBEAgCCgCCCIBQQlqIgQhAgNAAkAgAkUNACAAIAJNBEAgACACRg0BDAcLIAIgBmosAABBQEgNBgsCQCAAIAJGBH8gAAUgAiAGai0AAEEwa0H/AXFBCkkNASACCyEFIAJFDQMCQCAAIAVNBEAgACAFRw0BDAULIAUgBmosAABBv39KDQQLIAYgACAFIABB5K3BABCEAgALIAJBAWohAgwACwALDAELIAAgBWtBCEkNACAFIAZqIgcpAABCoMa949aum7cgUg0AIAVBCGoiCSEDAkACQAJAAkADQAJAIANFDQAgACADTQRAIAAgA0YNAQwICyADIAZqLAAAQUBIDQcLAkACQAJAIAAgA0YEQCAAIQMMAQsgAyAGai0AAEEwa0H/AXFBCkkNASAAIANLDQgLIAQgBUsNAyAERQ0BIAQgBmosAABBv39KDQEMAwsgA0EBaiEDDAELCyACBEAgBywAAEFASA0BCyAEIAZqIQICQAJAAkAgBSAEayIODgIHAAELIAItAAAiCkEraw4DBgEGAQsgAi0AACEKCyACIApBK0YiBGohAiAOIARrIgdBCUkNAUEAIQQDQCAHRQ0DIAStQgp+Ig9CIIinDQQgAi0AAEEwayIKQQlLDQQgAkEBaiECIAdBAWshByAKIA+naiIEIApPDQALDAMLIAYgACAEIAVBhK7BABCEAgALIAdFBEBBACEEDAELQQAhBANAIAItAABBMGsiCkEJSw0CIAJBAWohAiAKIARBCmxqIQQgB0EBayIHDQALCwJAAkAgAyAJSQ0AIAkEQCAAIAlNBEAgACADRg0DDAILIAAgA0cNASAGIAlqLAAAQUBIDQEMAgsgACADRg0BCyAGIAAgCSADQZSuwQAQhAIACyAGIAlqIQICQAJAAkAgACAJayIKDgIEAAELIAItAAAiA0Eraw4DAwEDAQsgAi0AACEDC0EAIQdBf0EAIANBK0YiAxshCSACIANqIQICQCAKIANrIgNBCU8EQCAFIAlrQQhqIQMDQCAAIANGDQIgB61CCn4iD0IgiKcNBCACLQAAQTBrIgVBCUsNBCADQQFqIQMgAkEBaiECIAUgBSAPp2oiB00NAAsMAwsgA0UNACAFIAlrQQhqIQMDQCACLQAAQTBrIgVBCUsNAyACQQFqIQIgBSAHQQpsaiEHIAAgA0EBaiIDRw0ACwtBASEMIAAgAUkNASABRQRAIAEhAAwCCyAAIAFNBEAgASEADAILIAEiACAGaiwAAEG/f0oNAUHopMEAQTBBpK7BABDqAQALCwJAAkACQAJAAkAgDSgCACIBIABNDQAgAEUEQCAGQQRrKAIAIgNBeHEiBUEEQQggA0EDcSIDGyABakkNAiADQQAgBSABQSdqSxsNAyAGEC1BASEGDAELIAYgAUEBIAAQMSIGRQ0DC0EUEBgiAUUNAyABIAA2AgggASAGNgIEIAFBADYCACABIAdBACAMGzYCECABIARBACAMGzYCDCAIQdAAaiQAIAEMBwtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALQQEgABDkAQALEJ4CAAsgBiAAIAMgAEH0rcEAEIQCAAsgBiAAIAIgAEHUrcEAEIQCAAsgASADQQAgAkGMtMEAEIQCAAsgC0EQaiQADwtBASABEOQBAAuLAQEDfyABKAIcIQICQAJAQQQQGCIDBEAgAyACNgIAIAFBBGoQQCABQQRrKAIAIgJBeHFBJEEoIAJBA3EiBBtJDQEgBEEAIAJByABPGw0CIAEQLSAAQYS3wQA2AgQgACADNgIADwsQngIAC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAt3AgF/AX4jAEEgayICJAACfyAAKAIAIgAoAgxFBEAgACABEDIMAQsgAkKAgICAMCIDIABBEGqthDcDGCACIAMgAEEMaq2ENwMQIAIgAK1CgICAgNAGhDcDCCABKAIAIAEoAgRBuIHAACACQQhqEEcLIAJBIGokAAtiAQR+IAAgAkL/////D4MiAyABQv////8PgyIEfiIFIAQgAkIgiCICfiIEIAMgAUIgiCIGfnwiAUIghnwiAzcDACAAIAMgBVStIAIgBn4gASAEVK1CIIYgAUIgiIR8fDcDCAuNAQICfwF+IwBBIGsiAiQAIAEoAgBBf0YEQCABKAIMIQMgAkEANgIcIAJCgICAgBA3AhQgAkEUakHY1cEAIAMoAgAiAygCACADKAIEEEcaIAIgAigCHCIDNgIQIAIgAikCFCIENwMIIAEgAzYCCCABIAQ3AgALIABBjNvBADYCBCAAIAE2AgAgAkEgaiQAC3UBA38gAEEEahBAAkACQCAAKAIcIgIEQCAAKAIgIgBBBGsoAgAiAUF4cSIDQQRBCCABQQNxIgEbIAJqSQ0BIAFBACADIAJBJ2pLGw0CIAAQLQsPC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtjAQF/An8gA0EASARAQQEhAUEEDAELAn8CfyABBEAgAiABQQEgAxAxDAELIAMQGAsiBEUEQCAAQQE2AgRBAQwBCyAAIAQ2AgRBAAshASADIQRBCAsgAGogBDYCACAAIAE2AgALYQECfyMAQRBrIgIkACAAKAIAIQNBCSEAA0AgACACakEGaiADQQ9xLQCMxEA6AAAgAEEBayEAIANBBHYiAw0ACyABQQFBjsfAAEECIAAgAmpBB2pBCSAAaxBLIAJBEGokAAtxAQN/AkACQCAAKAIAIgJBAEoEQCAAKAIEIgBBBGsoAgAiAUF4cSIDQQRBCCABQQNxIgEbIAJqSQ0BIAFBACADIAJBJ2pLGw0CIAAQLQsPC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtuAQN/AkACQCAAKAIAIgIEQCAAKAIEIgBBBGsoAgAiAUF4cSIDQQRBCCABQQNxIgEbIAJqSQ0BIAFBACADIAJBJ2pLGw0CIAAQLQsPC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAt9AwF/AX4BfCMAQRBrIgMkAAJAAkACQAJAIAAoAgBBAWsOAgECAAsgACsDCCEFIANBAzoAACADIAU5AwgMAgsgACkDCCEEIANBAToAACADIAQ3AwgMAQsgACkDCCEEIANBAjoAACADIAQ3AwgLIAMgASACEKQBIANBEGokAAtoAQF/IwBBEGsiBSQAIAFFBEAQqwIACyAFQQhqIAEgAyAEIAIoAhARBwAgACAFKAIIIgJBAkYiATYCCCAAIAUoAgwiA0EAIAEbNgIEIABBACADQYAIIAJBAXEbIAEbNgIAIAVBEGokAAvrAQEIfyMAQRBrIgIkACACQQRqIQMgACgCACIBIQQgACgCBCEHQQEhBUEEIQYCQEEEIAFBAXQiASABQQRNGyIIIgFB/////wNLBEBBACEBDAELIAFBAnQiAUH8////B0sEQEEAIQEMAQsCQAJ/IAQEQCAHIARBAnRBBCABEDEMAQsgARAYCyIERQRAIANBBDYCBAwBCyADIAQ2AgRBACEFC0EIIQYLIAMgBmogATYCACADIAU2AgAgAigCBEEBRgRAIAIoAgggAigCDBDkAQALIAIoAgghASAAIAg2AgAgACABNgIEIAJBEGokAAtnAQN/IwBBEGsiASQAIAFBBGogACgCACICIAAoAgRBCCACQQF0IgIgAkEITRsiAhCbASABKAIEQQFGBEAgASgCCCABKAIMEOQBAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQAC2YBA38jAEEQayICJAACQCABKAIAIgQoAgBBAUcNACAELQAEQQNHDQAgAkEIaiAEKAIIIgEoAgAgASgCBCgCGBECACACKAIMIQEgAigCCCEDCyAAIAE2AgQgACADNgIAIAJBEGokAAthAQF/IwBBMGsiAyQAIAMgAjYCDCADIAE2AgggAyAA/QADAP0LAxAgAyADQQhqrUKAgICA4ACENwMoIAMgA0EQaq1CgICAgOAGhDcDIEGhhMAAIANBIGoQlQEgA0EwaiQAC2EBAX8jAEEwayIDJAAgAyACNgIMIAMgATYCCCADIAD9AAMA/QsDECADIANBCGqtQoCAgIDgAIQ3AyggAyADQRBqrUKAgICA4AaENwMgQYKEwAAgA0EgahCVASADQTBqJAALYwEBfyMAQRBrIgAkAAJ/IAIoAgAEQEHi2MEAIQNBCQwBCyAAQQRqIAIoAgQgAigCCBBCQeLYwQAgACgCCCAAKAIEIgIbIQNBCSAAKAIMIAIbCyECIAMgAiABECggAEEQaiQAC2QBAX8CQAJAIAEEQCAAQQRrKAIAIgJBeHEiA0EEQQggAkEDcSICGyABakkNASACQQAgAyABQSdqSxsNAiAAEC0LDwtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALXgEBfyMAQSBrIgIkACACQZy6wQA2AgwgAiABNgIIIAIgADYCBCACIAJBCGqtQoCAgIDgAIQ3AxggAiACQQRqrUKAgICAMIQ3AxBB44PAACACQRBqEJUBIAJBIGokAAtjAQF/IwBBEGsiBiQAIAFFBEAQqwIACyAGQQhqIAEgAyAEIAUgAigCEBEGACAGKAIMIQEgACAGKAIIIgI2AgggACABQQAgAkEBcSICGzYCBCAAQQAgASACGzYCACAGQRBqJAALZAECfyAAQQRqEEAgAEEcahBaAkAgAEEEaygCACIBQXhxQSRBKCABQQNxIgIbTwRAIAJBACABQcgATxsNASAAEC0PC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAt8AQF/AkACQCAAQYQITwRAIADQbyYBQYjowQAoAgANAiAAQZjowQAoAgAiAUkNASAAIAFrIgBBkOjBACgCAE8NAUHY48EAKAIAIABBAnRqQZTowQAoAgA2AgBBlOjBACAANgIAQYjowQBBADYCAAsPCwALQeTbwQAQ1QEAC2EBAX8jAEEQayIFJAAgAUUEQBCrAgALIAVBCGogASADIAQgAigCEBEHACAFKAIMIQEgACAFKAIIIgI2AgggACABQQAgAkEBcSICGzYCBCAAQQAgASACGzYCACAFQRBqJAALXQECfwJAIABBBGsoAgAiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIAAQLQ8LQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEAC1wBAX8jAEEgayIFJAAgBSABNgIEIAUgADYCACAFIAM2AgwgBSACNgIIIAUgBUEIaq1CgICAgJABhDcDGCAFIAWtQoCAgICgAYQ3AxBBsYXAACAFQRBqIAQQygEAC10BAX8gAEEEahBAAkAgAEEEaygCACIBQXhxQSxBMCABQQNxIgIbTwRAIAJBACABQdAATxsNASAAEC0PC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAtdAQF/IABBBGoQQAJAIABBBGsoAgAiAUF4cUEkQSggAUEDcSICG08EQCACQQAgAUHIAE8bDQEgABAtDwtByNbBAEEuQfjWwQAQ6gEAC0GI18EAQS5BuNfBABDqAQALWwEBfyMAQRBrIgUkACABRQRAEKsCAAsgBUEIaiABIAMgBCACKAIQEQcAIAAgBS0ACCIBNgIIIAAgBSgCDEEAIAEbNgIEIABBACAFLQAJIAEbNgIAIAVBEGokAAtZAQF/IwBBEGsiBCQAIAFFBEAQqwIACyAEQQhqIAEgAyACKAIQEQMAIAAgBC0ACCIBNgIIIAAgBCgCDEEAIAEbNgIEIABBACAELQAJIAEbNgIAIARBEGokAAtVAQF/IwBBEGsiBiQAIAFFBEAQqwIACyAGQQhqIAEgAyAEIAUgAigCEBEVACAGKAIMIQEgACAGKAIIIgI2AgQgACABQQAgAkEBcRs2AgAgBkEQaiQAC1UBAX8jAEEQayIGJAAgAUUEQBCrAgALIAZBCGogASADIAQgBSACKAIQEQYAIAYoAgwhASAAIAYoAggiAjYCBCAAIAFBACACQQFxGzYCACAGQRBqJAALVQEBfyMAQRBrIgYkACABRQRAEKsCAAsgBkEIaiABIAMgBCAFIAIoAhARFgAgBigCDCEBIAAgBigCCCICNgIEIAAgAUEAIAJBAXEbNgIAIAZBEGokAAtVAQF/IwBBEGsiBiQAIAFFBEAQqwIACyAGQQhqIAEgAyAEIAUgAigCEBEXACAGKAIMIQEgACAGKAIIIgI2AgQgACABQQAgAkEBcRs2AgAgBkEQaiQAC00BAX4CQCADQcAAcUUEQCADRQ0BIAJBACADa62GIAEgA60iBIiEIQEgAiAEiCECDAELIAIgA62IIQFCACECCyAAIAE3AwAgACACNwMIC1UBAX8CQAJAIAAoAgAgACgCCCIDayACSQRAIAAgAyACEJIBIAAoAgghAwwBCyACRQ0BCyACRQ0AIAAoAgQgA2ogASAC/AoAAAsgACACIANqNgIIQQALVQEBfwJAAkAgACgCACAAKAIIIgNrIAJJBEAgACADIAIQkwEgACgCCCEDDAELIAJFDQELIAJFDQAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAtTAQF/IwBBEGsiBSQAIAFFBEAQqwIACyAFQQhqIAEgAyAEIAIoAhARBwAgBSgCDCEBIAAgBSgCCCICNgIEIAAgAUEAIAJBAXEbNgIAIAVBEGokAAtPAgF/AX4jAEEgayIDJAAgAyABNgIMIAMgADYCCCADQoCAgIAwIgQgA0EIaq2ENwMYIAMgBCADQQxqrYQ3AxBBgYHAACADQRBqIAIQygEAC1EBAX8jAEEQayIEJAAgAUUEQBCrAgALIARBCGogASADIAIoAhARAwAgBCgCDCEBIAAgBCgCCCICNgIEIAAgAUEAIAJBAXEbNgIAIARBEGokAAs/AAJAIAFpQQFHIABBgICAgHggAWtLcg0AIAAEQAJ/IAFBCU8EQCABIAAQXAwBCyAAEBgLIgFFDQELIAEPCwALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIABBAWohACABQQFqIQEgAkEBayICDQEMAgsLIAQgBWshAwsgAwtQAQF/IwBBEGsiAiQAIAJBCGogASABKAIAKAIEEQIAIAIgAigCCCACKAIMKAIYEQIAIAIoAgQhASAAIAIoAgA2AgAgACABNgIEIAJBEGokAAtPAQJ/IAAoAgQhAiAAKAIAIQMCQCAAKAIIIgAtAABFDQAgA0HawMAAQQQgAigCDBEAAEUNAEEBDwsgACABQQpGOgAAIAMgASACKAIQEQEAC0oBAn8gACAAKAIEIgMgAms2AgQgACAAKAIAIAIgA0tyIgQ2AgBBASEDIAQEfyADBSAAKAIIIgAoAgAgASACIAAoAgQoAgwRAAALC0kBAX8jAEEQayIDJAAgA0EIaiABKAIAIAEoAgQgASgCCBAjIAIgAygCCCADKAIMENABIQEgAEECNgIAIAAgATYCBCADQRBqJAALSQEBfyMAQRBrIgMkACADQQhqIAEoAgAgASgCBCABKAIIECMgAiADKAIIIAMoAgwQ0AEhASAAQQE6AAAgACABNgIEIANBEGokAAtJAQF/IwBBEGsiAyQAIANBCGogASgCACABKAIEIAEoAggQIyACIAMoAgggAygCDBDQASEBIABBATsBACAAIAE2AgQgA0EQaiQAC0kBAX8jAEEQayIDJAAgA0EIaiABKAIAIAEoAgQgASgCCBAjIAIgAygCCCADKAIMENABIQEgAEEANgIAIAAgATYCBCADQRBqJAALPwEBfyMAQRBrIgIkACACIAE2AgQgAiAANgIAIAIgAq1CgICAgPAAhDcDCEHwncAAIAJBCGoQlQEgAkEQaiQACz8BAX8jAEEQayICJAAgAiABNgIEIAIgADYCACACIAKtQoCAgIDwAIQ3AwhB3J3AACACQQhqEJUBIAJBEGokAAtIAQF/AkAgAUHhAGsiAUH/AXFBGUsEQEEAIQEMAQsgAUECdEH8B3EiAigC3NxBIQEgAigC9NtBIQILIAAgAjYCBCAAIAE2AgALRgAgACgCAEF/RwRAIAEoAgAgACgCBCAAKAIIIAEoAgQoAgwRAAAPCyABKAIAIAEoAgQgACgCDCgCACIAKAIAIAAoAgQQRwvaAQIBfwF+IwBBIGsiAyQAIAMgATYCECADIAA2AgwgA0EBOwEcIAMgAjYCGCADIANBDGo2AhQjAEEQayIBJAAgA0EUaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCBCIDQQFxBEAgAigCACECIAAgA0EBdjYCBCAAIAI2AgAgAEHw1cEAIAEoAgQgASgCCCIALQAIIAAtAAkQfQALIABBfzYCACAAIAE2AgwgAEGM1sEAIAEoAgQgASgCCCIALQAIIAAtAAkQfQALOwEBfyMAQRBrIgMkACADIAE2AgQgAyAANgIAIAMgA61CgICAgKABhDcDCEG1hcAAIANBCGogAhDKAQALOQEBfyMAQRBrIgIkACACQQhqIAAoAgAgACgCBCAAKAIIECMgASACKAIIIAIoAgwQ0AEgAkEQaiQACz8BAn8gASgCBCECIAEoAgAhA0EIEBgiAUUEQBCeAgALIAEgAjYCBCABIAM2AgAgAEGg2sEANgIEIAAgATYCAAs4AQF/IwBBEGsiAiQAIAJBCGogACAAKAIAKAIEEQIAIAIoAgggASACKAIMKAIQEQEAIAJBEGokAAs1AAJAIAJBf0YNACAAIAIgASgCEBEBAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEAAAs2AQF/QRQQGCIDRQRAEJ4CAAsgAyACNgIQIAMgATYCDCADIAAoAgg2AgggAyAAKQIANwIAIAMLOgEBfyMAQRBrIgIkACACIAE2AgwgAiAANgIIIAJBCGpB5KrAACACQQxqQeSqwABBAEGowsAAEIIBAAstAAJAIANpQQFHIAFBgICAgHggA2tLcg0AIAAgASADIAIQMSIARQ0AIAAPCwALkgUBB38QbiISIAomAQJ/IwBB0ABrIg4kACAOQoCAgIDAADcCDCAOQQA2AhQgDiANQQBHOgA0IA5BgICA/AM2AjAgDkKAgID8g4CAwD83AiggDiAMOAIkIA4gCzgCICAOQoCAgICAgIDAPzcCGEGE5MEALQAAQQFHBEAQSQsCQAJAAkACQEHc48EAKAIARQRAQdzjwQBBfzYCAAJ/IAlFBEBBACENQQQMAQtB6OPBACgCACERQeTjwQAoAgAhE0EAIQ0DQCASJQEgDUECdCANQYCABCAJIA1rIg8gD0GAgARPGyIPaiINQQJ0EAchChBuIhAgCiYBIA9BAnQiDyARSw0DIA4gECUBEAgiFDYCOCAOIA82AkQgDyAURw0GIBMgDyAQJQEQCSAOIAI4AkAgDiABOAI8IA4gADgCOCAOIAU4AkwgDiAEOAJIIA4gAzgCRCATIA8gDkEMaiAOQThqIA5BxABqIAYgByAIIA5BGGoQIiAQQYQITwRAIBAQqwELIAkgDUsNAAtB3OPBACgCAEEBaiEPIA4oAhQhDSAOKAIQCyEJQdzjwQAgDzYCACANEAohChBuIg8gCiYBIA4gDyUBEAsiEDYCOCAOIA02AkQgDSAQRw0EIA8lASAJIA0QDCAOKAIMIg0EQCAJQQRrKAIAIhBBeHEiESANQQJ0Ig1BBEEIIBBBA3EiEBtqSQ0DIBBBACARIA1BJ2pLGw0EIAkQLQsgEkGECE8EQCASEKsBCyAOQdAAaiQAIA8MBQtB8J/AABDVAQALQQAgDyARQbCgwAAQbwALQcjWwQBBLkH41sEAEOoBAAtBiNfBAEEuQbjXwQAQ6gEACyAOQThqIA5BxABqENEBAAsiCSUBIAkQqwEL5wEBA38jAEEQayIAJABBiOTBAC0AAEEDRwRAIABBAToADyAAQQ9qIQECQAJAAkACQAJAAkBBiOTBAC0AAEEBaw4DAgEFAAtBiOTBAEECOgAAIAEtAAAgAUEAOgAARQ0CAkBBtOTBACgCAEH/////B3EEQEGk5MEAKAIADQELQazkwQAoAgANBEGI5MEAQQM6AABBsOTBAEEBNgIADAULQfHYwQBB6QBBqNnBABDKAQALQcTUwQBB8QBBwKDAABDKAQALQYCAwABB1QBBwKDAABDKAQALQeCfwAAQkQILAAsLIABBEGokAAstAQF/IwBBEGsiASQAIAEgAUEPaq1CgICAgLABhDcDAEG1hcAAIAEgABDKAQALuQICAX8BbwJ/IwBBQGoiDSQAQYTkwQAtAABBAUcEQBBJCwJAQdzjwQAoAgBFBEBB3OPBAEF/NgIAQYDkwQBBADYCACANIAxBAEc6ACQgDUGAgID8AzYCICANQoCAgPyDgIDAPzcCGCANIAs4AhQgDSAKOAIQIA1CgICAgICAgMA/NwIIIAlBAnQiCUHo48EAKAIAIgxLDQFB5OPBACgCACANIAI4AjAgDSABOAIsIA0gADgCKCANIAU4AjwgDSAEOAI4IA0gAzgCNCAJQfjjwQAgDUEoaiANQTRqIAYgByAIIA1BCGoQIkH848EAKAIAQYDkwQAoAgAQ7QFB3OPBAEHc48EAKAIAQQFqNgIAIA1BQGskAAwCC0Hwn8AAENUBAAtBACAJIAxBoKDAABBvAAsiCSUBIAkQqwELyEYDHH8EfgF8IwBBEGsiGCQAEG4iGSAAJgEjAEHQBmsiASQAAkACQAJAAkACQAJAAkACQAJAAkACfAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgGRCqAiITQQBOBEACQCATRQRAQQEhFAwBCyATEBgiFEUNAgsgGRCqAiECIAEgGRCqAiIMNgKQAyABIAI2ArgEIAIgDEcNAiAUIAIgGSUBEAMgE0EISQ0DIAEgFCgAACICNgLoASACQdKCkYIDRwRAIAEgAUHoAWqtQoCAgIDAAIQ3A7gEIAFB7AFqIQJBASEEAkACQCABQbgEaiIDQQFxBEACQCADQQF2IgNFDQAgAxAYIgRFDQIgA0UNACAEQejQwQAgA/wKAAALIAIgAzYCCCACIAQ2AgQgAiADNgIADAILIAJB6NDBACADEGAMAQtBASADEOQBAAsjAEEgayIDJAAgA0EIaiIJEOcBQSgQGCIERQRAEJ4CAAsgBEG0tcEANgIAIAQgCSkCADcCBCAEIAn9AAII/QsCDCAEIAIpAgA3AhwgBCACKAIINgIkIANBIGokAEF/DBcLQQIgFCgABCISQQhqIgIgE0sNFhogEkF4Tw0EIAFBADYC+AIgASASNgL0AiABQYABOgD8AiABQQA2AuwCIAFCgICAgBA3AuQCIAEgFEEIaiIDNgLwAgJAIBIEfwNAIAMgBWotAAAiEUEJayIMQRdLQQEgDHRBk4CABHFFcg0CIBIgBUEBaiIFRw0ACyABIBI2AvgCIBJBAWoFQQELIQIgAUEFNgK4BCABQdgAaiADIBIgAiASIAIgEkkbECMgAUG4BGogASgCWCABKAJcENABIQQMEwsgASAFNgL4AgJAIBFB2wBHBEAgEUH7AEYNASABQeQCaiICIAFBzwZqQeS7wQAQJCACEI4BIQQMFAsgAUH/ADoA/AIgASAFQQFqNgL4AiABQQE6ANAFIAEgAUHkAmo2AswFIAFBuARqIAFBzAVqEEwgAS0AuARBAUYEQCABKAK8BCEEDBELIAEtALkEQQFHDQkgAUHoAGogASgCzAUQRSABKAJsIQwgASgCaEEBcQRAIAwhBAwRCyABQbgEaiABQcwFahBMIAEtALgEQQFGBEAgASgCvAQhBAwRCwJAAkACQAJAAkACQAJAAkACQAJAIAEtALkEQQFGBEAgASgCzAUQLiIEDRsgAUG4BGogAUHMBWoQTCABLQC4BEEBRgRAIAEoArwEIQQMHAsgAS0AuQRBAUcNAiABQbgEaiABKALMBRBOIAEoArgEQQFHDQEgASgCvAQhBAwbC0EBQcy6wQAQqAEhBAwaCyABKQPABCEdIAFBuARqIAFBzAVqEEwgAS0AuARBAUYEQCABKAK8BCEEDBoLIAEtALkEQQFHDQIgAUG4BGogASgCzAUQMCABKAK4BCIFQQJHDQEgASgCvAQhBAwZC0ECQcy6wQAQqAEhBAwYCyABKAK8BCECIAFBuARqIAFBzAVqEEwgAS0AuARBAUYEQCABKAK8BCEEDBgLIAEtALkEQQFHDQIgAUG4BGogASgCzAUQKiABLQC4BEEBRw0BIAEoArwEIQQMFwtBA0HMusEAEKgBIQQMFgsgAS0AuQQhAyABQbgEaiABQcwFahBMIAEtALgEQQFGBEAgASgCvAQhBAwWCyABLQC5BEEBRw0CIAFBuARqIAEoAswFEDAgASgCuAQiEUECRw0BIAEoArwEIQQMFQtBBEHMusEAEKgBIQQMFAsgASgCvAQhDyABQbgEaiABQcwFahBMIAEtALgEQQFGBEAgASgCvAQhBAwUCyABLQC5BEEBRw0BIAFBuARqIAEoAswFEE4gASgCuARBAUcNAiABKAK8BCEEDBMLQQVBzLrBABCoASEEDBILQQZBzLrBABCoASEEDBELIAEpA8AEIR4gAUG4BGohByMAQRBrIgQkACAEQQRqIAFBzAVqIhAiCBBMAkAgBC0ABEEBRgRAIAcgBCgCCDYCBCAHQX42AgAMAQsgBC0ABUUEQCAHQX82AgAMAQsgBEEEaiAIKAIAEBogBCgCBEF/RgRAIAcgBCgCCDYCBCAHQX42AgAMAQsgByAEKAIMNgIIIAcgBCkCBDcCAAsgBEEQaiQAIAEoArwEIQQgASgCuAQiCEF+Rg0QIAhBf0YNBiABIAEoAsAENgLcBSABIAQ2AtgFIAEgCDYC1AUjAEFAaiIEJAAgBEEEaiAQEEwCQCAELQAEQQFGBEAgByAEKAIINgIEIAdBfjYCAAwBCyAELQAFRQRAIAdBfzYCAAwBCyAEQQRqIBAoAgAQHSAEKAIEQX9GBEAgByAEKAIINgIEIAdBfjYCAAwBCyAHIAQoAjw2AjggByAEKQI0NwIwIAcgBP0AAiT9CwIgIAcgBP0AAhT9CwIQIAcgBP0AAgT9CwIACyAEQUBrJAAgASgCvAQhBCABKAK4BCIIQX5GDQ8gASABKALwBDYCkAYgASAB/QAC4AT9CwOABiABIAH9AALQBP0LA/AFIAEgAf0AAsAE/QsD4AUgCEF/Rg0HIwBBEGsiCyQAIAtBCGogEBBMAkAgCy0ACEEBRgRAIAcgCygCDDYCBCAHQX82AgAMAQsgCy0ACUUEQCAHQQI2AgAMAQsgC0EIaiAQKAIAEF4gCygCCCIQQQJGBEAgByALKAIMNgIEIAdBfzYCAAwBCyAHIAsoAgw2AgQgByAQNgIACyALQRBqJAAgASgCuAQiC0F/RgRAIAEoArwEIQQMEAsgC0ECRg0IIAEoArwEIQYgAUG4BGohByMAQRBrIg4kACAOQQRqIAFBzAVqIg0QTAJAIA4tAARBAUYEQCAHIA4oAgg2AgQgB0F9NgIADAELIA4tAAVFBEAgB0F+NgIADAELIA5BBGogDSgCABA9IA4oAgRBfkYEQCAHIA4oAgg2AgQgB0F9NgIADAELIAcgDigCDDYCCCAHIA4pAgQ3AgALIA5BEGokACABKAK8BCEOIAEoArgEIg1BfUYEQCAOIQQMEAsgDUF+RwRAIAEoAsAEIQogASABKALcBTYC+AMgASABKQLUBTcD8AMgASAB/QAD4AX9CwOABCABIAH9AAPwBf0LA5AEIAEgAf0AA4AG/QsDoAQgASABKAKQBjYCsAQgBCEJIAIhBAwSC0EKQcy6wQAQqAEhBAwPCyABQf8AOgD8AiABIAVBAWo2AvgCIAFBAToAhAQgASABQeQCajYCgAQgAUHABGohFUF+IQ1BfyEGQX8hEUECIRZBAiEKQf8BIRdBAiEaQQAhAgNAIAFBuARqIAFBgARqEEEgAS0AuARBAUYEQCABKAK8BCEDIAYhAgwMCyABLQC5BEEBRgRAIAEoAoAEIgVBADYCCCAFIAUoAhRBAWo2AhQgAUG4BGogBUEMaiAFECUgASgCvAQhAwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoArgEQQJHBEACQAJAAkAgASgCwARBBGsOCgcABQEIBAgGCAIICyADKAAAQePe1fMGcyADQQRqIhstAABB9ABzckUNCiADKAAAQe3C4ZsFcyAbLQAAQegAc3INByAaQQJGDQtB37jBAEEFEMYBIQMgBiECDB8LIAMoAABB9srJmwdzIANBA2oiGygAAEHz0r3zBnNyRQ0HIAMoAABB7N6RowVzIBsoAABB1OSVqwZzckUNCyADKAAAQePetesGcyAbKAAAQe3KuaMHc3INBiANQX5GDRFBn7nBAEEHEMYBIQMgDUEBa0F9Sw0fIAcgDRCtAQwfCyADKQAAQuHYsZuErZ236wCFIANBBWoiGykAAEL13K2TlI/dsvMAhYRQDQwgAykAAELz4LGLxq6Rt+MAhSAbKQAAQsXcjfvGrJq35wCFhFBFDQUgEUF/Rg0OQYe5wQBBDRDGASEDCyAGIQIMHAsgAykAAELj0NXztu3UtPoAhSADQQhqMQAAQuUAhYRQRQ0DIApBAkYNCUHruMEAQQkQxgEhAyAGIQIMGwsgAygAAEHj0NXzBnMgA0EEai8AAEHr5gFzcg0CIAZBf0YNCkGBucEAQQYQxgEhAyAGIQIMGgsgAykAAELz0I36xqzZoe8AhSADQQNqKQAAQu/IlZv0rZ239ACFhFBFDQEgFkECRg0LQZS5wQBBCxDGASEDIAYhAgwZCyADKAAAQfTywasGRg0CCyAFEB4iA0UNDCAGIQIMFwsgAgRAQdS4wQBBBxDGASEDIAYhAgwXCyAFEIUBIg8Ef0EBBSABQfAAaiAFEEUgASgCdCEPIAEoAnALIgVBAXEEQCAPIQMgBiECDBcLQQEhAgwLCyAQQQFxDRQgBRCFASIDBEAgBiECDBYLQQEhECAFEC4iA0UNCiAGIQIMFQsgHVBFBEBBx7jBAEEFEMYBIQMgBiECDBULAkAgBRCFASIDRQRAIAFBuARqIAUQTiABKAK4BEEBRw0BIAEoArwEIQMLIAYhAgwVCyABKQPABCEgQgEhHQwJCwJAIAUQhQEiA0UEQCABQbgEaiAFEDAgASgCuAQiGkECRw0BIAEoArwEIQMLIAYhAgwUCyABKAK8BCEEDAgLIBdB/wFHBEBB5LjBAEEHEMYBIQMgBiECDBMLAkAgBRCFASIDRQRAIAFBuARqIAUQKiABLQC4BEEBRw0BIAEoArwEIQMLIAYhAgwTCyABLQC5BCEXDAcLAkAgBRCFASIDRQRAIAFBuARqIAUQMCABKAK4BCIKQQJHDQEgASgCvAQhAwsgBiECDBILIAEoArwEIQ4MBgsgH1BFBEBB9LjBAEENEMYBIQMgBiECDBELAkAgBRCFASIDRQRAIAFBuARqIAUQTiABKAK4BEEBRw0BIAEoArwEIQMLIAYhAgwRCyABKQPABCEeQgEhHwwFCwJAIAUQhQEiA0UEQCABQbgEaiAFEBogASgCvAQhAyABKAK4BCIFQX9HDQELQX8hAgwQCyABKALABCEMIAMhCyAFIQYMBAsCQCAFEIUBIgNFBEAgAUG4BGogBRAdIAEoArwEIQkgASgCuAQiEUF/Rw0BIAkhAwsgBiECDA8LIAEgFSgCMDYCkAYgASAV/QACIP0LA4AGIAEgFf0AAhD9CwPwBSABIBX9AAIA/QsD4AUMAwsCQCAFEIUBIgNFBEAgAUG4BGogBRBeIAEoArgEIhZBAkcNASABKAK8BCEDCyAGIQIMDgsgASgCvAQhCAwCCyAFEIUBIgMNDSABQbgEaiAFED0gASgCvAQhByABKAK4BCINQX5GBEAgByEDIAYhAgwPCyABKALABCEcDAELCyACQQFxRQRAQdS4wQBBBxDHASEDIAYhAgwLCyAQQQFxRQRAQdu4wQBBBBDHASEDIAYhAgwLCyAdp0EBcUUEQEHHuMEAQQUQxwEhAyAGIQIMCwsgH1AEQEH0uMEAQQ0QxwEhAyAGIQIMCwtBfyECAkACQCAGQX9HBEAgCkECRiECIBpBAkYhAyAXQf8BRiEFIBFBf0cNAUECIREMAgtBgbnBAEEGEMcBIQMMDAsgASABKAKQBjYCyAYgASAB/QACgAb9CwO4BiABIAH9AALwBf0LA6gGIAEgAf0AAuAF/QsDmAYLQQAgCiACGyEQQQAgGiADGyEKQQIgFyAFGyEDQX8gDSANQX5GGyENIBZBACAWQQJHGyEFIAetIBytQiCGhCEdDA0LEJMCAAtBASATEOQBAAsgAUGQA2ogAUG4BGoQ0QEAC0GBCCEJDBULQQggAiATQdjQwQAQbwALQQdBzLrBABCoASEEDAkLQQhBzLrBABCoASEEDAcLQQlBzLrBABCoASEEDAYLQQBBzLrBABCoASEEDAYLQdu4wQBBBBDGASEDIAYhAgsgDUEBa0F8Sw0BAkAgB0EEaygCACIEQXhxIhFBBEEIIARBA3EiBRsgDWpPBEAgBUEAIBEgDUEnaksbDQEgBxAtDAMLDBYLDBYLIAYhAgtBAiEKAkAgAkF/Rg0AIAwEQCALQSRqIQUDQCAFQQRrKAIAIhFBAEoEQCAFKAIAIghBBGsoAgAiBEF4cSIHQQRBCCAEQQNxIg8bIBFqSQ0XIA9BACAHIBFBJ2pLGw0YIAgQLQsgBUEwaiEFIAxBAWsiDA0ACwsgAkUNACALQQRrKAIAIgRBeHEiDCACQTBsIhFBBEEIIARBA3EiBRtySQ0UIAVBACAMIBFBJ2pLGw0VIAsQLQsgAyEECyABIAEtAPwCQQFqOgD8AiABQeQCahB0IQIgASAJNgLkBCABIBE2AuAEIAEgHjcD2AQgASAgNwPQBCABIAg2AswEIAEgBTYCyAQgASAONgLEBCABIBA2AsAEIAEgBDYCvAQgASADOgC4BSABIAI2AsAFIAEgDzYCtAUgASANNgKoBSABIAw2AqQFIAEgCzYCoAUgASAGNgKcBSABIAH9AAOYBv0LA+gEIAEgAf0AA6gG/QsD+AQgASAB/QADuAb9CwOIBSABIAEoAsgGNgKYBSABIAo2ArgEQQIhCCABIB03AqwFAkAgCkECRgRAIAINAQwFCyAdpyEOIAJFBEAgAUGQA2ogAUHABGpB3AD8CgAAIAEgAf0AA7AF/QsDgAMgCiEIDAULIAwEQCALQSRqIQUDQCAFQQRrKAIAIgRBAEoEQCAFKAIAIgNBBGsoAgAiCUF4cSIIQQRBCCAJQQNxIgkbIARqSQ0WIAlBACAIIARBJ2pLGw0XIAMQLQsgBUEwaiEFIAxBAWsiDA0ACwsgBgRAIAsgBkEwbBCtAQtBAiEIIA1BAEoEQCAOIA0QrQELIAIhBAwECyABQcAFahBaDAMLIAFB1AVqIgcoAgQhBSAHKAIIIhAEQCAFQSRqIQIDQCACQQRrKAIAIhVBAEoEQCACKAIAIhZBBGsoAgAiF0F4cSIaQQRBCCAXQQNxIhcbIBVqSQ0UIBdBACAaIBVBJ2pLGw0VIBYQLQsgAkEwaiECIBBBAWsiEA0ACwsgBygCACICBEAgBUEEaygCACIHQXhxIhAgAkEwbCICQQRBCCAHQQNxIgcbckkNEiAHQQAgECACQSdqSxsNEyAFEC0LC0ECIQULIAEgAS0A/AJBAWo6APwCIAFB5AJqEFYhAiABIAk2AuQEIAEgCDYC4AQgASAeNwPYBCABIB03A9AEIAEgBjYCzAQgASALNgLIBCABIA82AsQEIAEgETYCwAQgASAENgK8BCABIAH9AAOABP0LA+gEIAEgAf0AA5AE/QsD+AQgASAB/QADoAT9CwOIBSABIAEoArAENgKYBSABIAEoAvgDNgKkBSABIAEpA/ADNwKcBSABIAU2ArgEIAEgAjYCwAUgASADOgC4BSABIAw2ArQFIAEgCjYCsAUgASAONgKsBSABIA02AqgFQQIhCAJAIAVBAkYEQCACDQEMAgsgAkUEQCABQZADaiABQcAEakHcAPwKAAAgASABQbAFav0AAwD9CwOAAyABKAKkBSEMIAEoAqAFIQsgASgCnAUhBiAFIQgMAgsgASgCoAUhBAJAIAEoAqQFIgwEQCAEQSRqIQUDQCAFQQRrKAIAIgNBAEoEQCAFKAIAIglBBGsoAgAiCEF4cSIPQQRBCCAIQQNxIggbIANqSQ0UIAhBACAPIANBJ2pLGw0DIAkQLQsgBUEwaiEFIAxBAWsiDA0ACwsgASgCnAUiAwRAIAQgA0EwbBCtAQtBAiEIIA1BAEoEQCAOIA0QrQELIAIhBAwCCwwRCyABQcAFahBaCyAIQQJGBEAgBCABQeQCahCOASEEDAELIAFBiAJqIAFBkANqQdwA/AoAACABIAH9AAOAA/0LA/gBAkAgASgC+AIiBSABKAL0AiICSQRAIAEoAvACIQMDQCADIAVqLQAAQQlrIglBF0tBASAJdEGTgIAEcUVyDQIgAiAFQQFqIgVHDQALIAEgAjYC+AILIAEoAuQCIgUNAgwDCyABIAU2AvgCIAFBFjYCuAQgAUHgAGogAyACIAVBAWoiBCACIAIgBEsbECMgAUG4BGogASgCYCABKAJkENABIQQgDARAIAtBJGohBSAMIQMDQCAFQQRrKAIAIgJBAEoEQCAFKAIAIAIQrQELIAVBMGohBSADQQFrIgMNAAsLIAYEQCALIAZBMGwQrQELIA1BAEwNACAOIA0QrQELQQIhCCABKALkAiIFRQ0CCyABKALoAiICQQRrKAIAIgNBeHEiCUEEQQggA0EDcSIDGyAFakkNDCADQQAgCSAFQSdqSxsNDSACEC0LIAhBAkcNAgsjAEEgayIDJAAgA0EIaiIJEOcBIAQhAkEgEBgiBEUEQBCeAgALIARBmLXBADYCACAEIAI2AhwgBCAJKQIANwIEIAQgCf0AAgj9CwIMIANBIGokAEF/CyEIRAAAAAAAAAAADAELIAFBiAFqIAFBiAJqQdwA/AoAACABIAH9AAP4Af0LA3ggEkEHakF4cUEIargLISEgCEF/RgRAIAFBADYCwAQgAUKAgICAEDcCuAQgAUEIaiAEIAQoAgAoAgQRAgAgASABKQMINwKIAiABIAFBiAJqrUKAgICA0ACENwOQAyABQbgEakHgoMAAQbWFwAAgAUGQA2oQRw0CIAEoArgEIQYgASgCvAQiAiABKALABBDvASEJIAYEQCACQQRrKAIAIgNBeHEiBUEEQQggA0EDcSIDGyAGakkNCSADQQAgBSAGQSdqSxsNCiACEC0LIAQgBCgCACgCABEEAAwFCyABQZADaiICIAFBiAFqQdwA/AoAACABIAH9AAN4/QsDiAJBgQghCSAIQQJGDQAgASAENgK8BCABIAg2ArgEIAFBwARqIAJB3AD8CgAAIAEgDjYCrAUgASANNgKoBSABIAw2AqQFIAEgCzYCoAUgASAGNgKcBSABIAH9AAOIAv0LA7AFEIYCIQlB0KDAAEEEEO8BIQ8gAUEANgKIASABLQC4BSEDIAEoAsAEIAEoAuAEIQcgASgCyAQhERCGAiEFIAEoArQFuBCCAiECIAVB1LjBAEEHEEogAhDjAUGmucEAQQYQSiECIAVB27jBAEEEEEogAhDjASABQdAAaiABKQPQBBB8IAEoAlQhAiABKAJQQQFGDQIgBUHHuMEAQQUQSiACEOMBIAgEQCABQcgAaiAErRB8IAEoAkwhAiABKAJIQQFGDQMgBUHfuMEAQQUQSiACEOMBCyADQQJHBEAgBUHkuMEAQQcQSkGCCEGDCCADQQFxGxDjAQsEQCABQUBrIAE1AsQEEHwgASgCRCECIAEoAkBBAUYNAyAFQeu4wQBBCRBKIAIQ4wELIAFBOGogASkD2AQQfCABKAI8IQIgASgCOEEBRg0CIAVB9LjBAEENEEogAhDjARAEIQAQbiIKIAAmASAMBEAgCyAMQTBsaiESQQAhCCALIQMDQCADQSBqKAIAIANBCGooAgAhFSADKAIAIRYQhgIhBCABQTBqIANBEGopAwAQfCABKAI0IQICQAJAAkAgASgCMEEBcQ0AIARBuLjBAEEGEEogAhDjASABQShqIANBGGopAwAQfCABKAIsIQIgASgCKEEBcQ0AIARBvrjBAEEFEEogAhDjASAWBEAgAUEgaiADQQRqNQIAEHwgASgCJCECIAEoAiBBAXENASAEQcO4wQBBBBBKIAIQ4wELIBVFDQIgAUEYaiADQQxqNQIAEHwgASgCHCECIAEoAhhBAXFFDQELIARBhAhPBEAgBBCrAQsgCkGECEkNBiAKEKsBDAYLIARBx7jBAEEFEEogAhDjAQtBf0cEQCADQSRqKAIAIANBKGooAgAQ7wEhAiAEQcy4wQBBCBBKIAIQ4wELIAolASAIIAQlASAEEKsBEAUgCEEBaiEIIANBMGoiAyASRw0ACwsgBUGBucEAQQYQSiAKEOMBAkAgB0ECRg0AIAFBEGogAUGIAWohBAJAAn8CQCABQeAEaiICKAIAIgpBAkcEQBCGAiEDAn8gCkEBRgRAIAIqAgS7EIICDAELQYEIQYAIIAQtAAAbCyEKIANBtLnBAEEGEEogChDjAQJ/IAIoAghBAUYEQCACKgIMuxCCAgwBC0GBCEGACCAELQAAGwshCiADQbq5wQBBBhBKIAoQ4wECfyACKAIQQQFGBEAgAioCFLsQggIMAQtBgQhBgAggBC0AABsLIQogA0HAucEAQQoQSiAKEOMBAn8gAigCGEEBRgRAIAIqAhy7EIICDAELQYEIQYAIIAQtAAAbCyEKIANByrnBAEEKEEogChDjAQJ/IAIoAiBBAUYEQCACKgIkuxCCAgwBC0GBCEGACCAELQAAGwshCiADQdS5wQBBBhBKIAoQ4wECfyACKAIoQQFGBEAgAioCLLsQggIMAQtBgQhBgAggBC0AABsLIQogA0HaucEAQQYQSiAKEOMBIAIoAjBBAUcNASACKgI0uxCCAgwCC0GBCEGACCAELQAAGyEDDAILQYEIQYAIIAQtAAAbCyEKIANB4LnBAEEGEEogChDjASACLQA4IQIgBC0AACEEIANB5rnBAEEKEEpBgQhBgAggBEEBcRtBgghBgwggAkEBcRsgAkECRhsQ4wELIAVBh7nBAEENEEogAxDjAUEANgIAIAEoAhBBAXFFDQAgASgCFCECDAMLIBEEQCABKALMBLgQggIhAiAFQZS5wQBBCxBKIAIQ4wELIA1Bf0cEQCABQYgBaiEEAn8gAUGoBWoiAigCAEF/RwRAIAIoAgQgAigCCBDvAQwBC0GBCEGACCAELQAAGwshAiAFQZ+5wQBBBxBKIAIQ4wELIAkgDyAFEIcCQYDowQAtAAAEQEGA6MEAQQA6AABBhOjBACgCACECQYTowQBBADYCAAwDC0GE6MEAQQA2AgBBgOjBAEEAOgAAIAVBhAhPBEAgBRCrAQsgD0GECE8EQCAPEKsBCyAJQdSgwABBCxDvASIPICEQggIiBBCHAkGA6MEALQAABEBBgOjBAEEAOgAAQYTowQAoAgAhAkGE6MEAQQA2AgAgBEGECE8EQCAEEKsBCwwEC0GE6MEAQQA2AgBBgOjBAEEAOgAAIARBhAhPBEAgBBCrAQsgD0GECE8EQCAPEKsBCyAMBEAgC0EkaiEFA0AgBUEEaygCACICQQBKBEAgBSgCACIEQQRrKAIAIgNBeHEiCEEEQQggA0EDcSIDGyACakkNCiADQQAgCCACQSdqSxsNCyAEEC0LIAVBMGohBSAMQQFrIgwNAAsLIAYEQCALIAZBMGwQrQELIA1BAEwNACAOIA0QrQELIBMEQCAUQQRrKAIAIgZBeHEiAkEEQQggBkEDcSIGGyATakkNByAGQQAgAiATQSdqSxsNCCAUEC0LQQAhBSAZQYMITQ0FDAQLQbyzwQBBNyABQc8GakH4oMAAQfSzwQAQrgEACyAFQYQITwRAIAUQqwELCyAPQYMISwRAIA8QqwELIAlBhAhPBEAgCRCrAQsgDARAIAtBJGohBQNAIAVBBGsoAgAiBEEASgRAIAUoAgAiA0EEaygCACIJQXhxIghBBEEIIAlBA3EiCRsgBGpJDQYgCUEAIAggBEEnaksbDQcgAxAtCyAFQTBqIQUgDEEBayIMDQALCyAGBEAgC0EEaygCACIEQXhxIgMgBkEwbCIGQQRBCCAEQQNxIgQbckkNBCAEQQAgAyAGQSdqSxsNBSALEC0LIA1BAEoEQCAOQQRrKAIAIgZBeHEiBEEEQQggBkEDcSIGGyANakkNBCAGQQAgBCANQSdqSxsNBSAOEC0LIAIhCQsgFEEEaygCACIGQXhxIgJBBEEIIAZBA3EiBhsgE2pJDQIgBkEAIAIgE0EnaksbDQMgFBAtQQEhBSAZQYQISQ0BCyAZEKsBCyAYIAU2AgggGCAJQQAgBRs2AgQgGEEAIAkgBRs2AgAgAUHQBmokAAwCC0HI1sEAQS5B+NbBABDqAQALQYjXwQBBLkG418EAEOoBAAsgGCgCACAYKAIEIBgoAgggGEEQaiQAC4gMAwx/AXsBbwJ/IwBB0ABrIgskAEGE5MEALQAAQQFHBEAQSQtB3OPBACgCAEUEQEHc48EAQX82AgBBgOTBAEEANgIAIAlBAnQiDkHo48EAKAIAIgpNBEBB9OPBACgCACIKIA5PBEBB5OPBACgCACETQfDjwQAoAgAhFCALIAI4AhggCyABOAIUIAsgADgCECALIAU4AiQgCyAEOAIgIAsgAzgCHEEAIQ4gCUH/////A3EiEgRAA0ACQCAGAn8CQAJAIBIEQCARIBNqIgxBDGooAgAiCkH//wFxRQRAIApBEHQMBAsgCkH/B3EhCSAKQYCAAnEhDyAKQYD4AXEiCkGA+AFGBEAgD0EQdCEKIAkNAiAKQYCAgPwHcgwECyAPQRB0IQ8gCkUNAiAKQQ10QYCAgPwAcSAJQQ10ckGAgIDAA2ogD3IMAwtBA0EAQZjQwQAQuwEACyAKIAlBDXRyQYCAgP4HcgwBCyAPQYCAgNgDciAJZ0EQayIKQRd0ayAJIApB//8DcUEIanRB////A3FyC74iBF4NACALIAwqAgA4AiggCyAMQQRqKQIANwIsIBEgFGoiD0EIaigCACEJAn8gD0EEaigCACIMQRB2IgpB//8BcUUEQCAMQYCAfHEMAQsgCkH/B3EhDCAKQYCAAnEhDSAKQYD4AXEiEEGA+AFGBEAgDUEQdCINQYCAgPwHciAMRQ0BGiANIApBDXRyQYCAgP4HcgwBCyANQRB0IgogEEENdEGAgID8AHEgDEENdHJBgICAwANqciAQDQAaIAwgDGdBEGsiDEH//wNxQQhqdEH///8DcSAKQYCAgNgDciAMQRd0a3ILIRUgCUEQdiEKAn8gCUH//wFxBEAgCUH/B3EhDCAJQYCAAnEhDSAJQYD4AXEiEEGA+AFHBEAgDUEQdCINIBBBDXRBgICA/ABxIAxBDXRyQYCAgMADanIgEA0CGiAMIAxnQRBrIgxB//8DcUEIanRB////A3EgDUGAgIDYA3IgDEEXdGtyDAILIA1BEHQiDSAMQQ10ckGAgID+B3IgDA0BGiANQYCAgPwHcgwBCyAJQRB0CyEQIAsCfyAKQf//AXEEQCAKQf8HcSEJIApBgIACcSEMIApBgPgBcSINQYD4AUcEQCAMQRB0IgogDUENdEGAgID8AHEgCUENdHJBgICAwANqciANDQIaIAkgCWdBEGsiCUH//wNxQQhqdEH///8DcSAKQYCAgNgDciAJQRd0a3IMAgsgDEEQdCIMIApBDXRyQYCAgP4HciAJDQEaIAxBgICA/AdyDAELIAlBgIB8cQu+EFE4AjwgCyAQvhBROAI4IAsgFb4QUTgCNCALIA9BDGooAgAiCUEUdrNDAPB/RZVDAAAAP5RD2w9JQJQiABAsOAJMIAsgABArIgFDAACAPyAJQQp2/REgCf0cAf0M/wMAAP8DAAD/AwAA/wMAAP1O/foB/QwAwH9EAMB/RADAf0QAwH9E/ecBIhYgFv3kAf0MAACAvwAAgL8AAIC/AACAv/3kASIW/R8BIgKLkyAW/R8AIgOLkyIAIAAgAJQgAkMAAAAAIACMIgAgACAAXBsiAEMAAAAAIABDAAAAAF4bIgAgAIwiBSAW/QwAAAAAAAAAAAAAAAAAAAAA/Ub9TSIW/ccB/RsCQQFxG5IiAiAClCADIAAgBSAW/RsAQQFxG5IiACAAlJKSkSIDlZQ4AkggCyABIAAgA5WUOAJEIAsgASACIAOVlDgCQCALQQhqIAtBEGogC0EcaiAEIAtBKGogC0E0aiALQUBrEDUgCygCCEEBRw0AIAsqAgwiACAHYEUgACAIX0VyDQBB+OPBACgCACAORgRAQfjjwQAQoQELQfzjwQAoAgAgDkECdGogADgCAEGA5MEAIA5BAWoiDjYCAAsgEUEQaiERIBJBAWsiEg0ACwtB/OPBACgCACAOEO0BQdzjwQBB3OPBACgCAEEBajYCACALQdAAaiQADAMLQQAgDiAKQYCgwAAQbwALQQAgDiAKQZCgwAAQbwALQfCfwAAQ1QEACyIJJQEgCRCrAQslACAAKAIALQAARQRAIAFB/MbAAEEFEEQPCyABQYHHwABBBBBECyIAIAAtAABFBEAgAUH8xsAAQQUQRA8LIAFBgcfAAEEEEEQLHgAgAEUEQBCrAgALIAAgAiADIAQgBSABKAIQEREACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARCgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEHAAscACAARQRAEKsCAAsgACACIAMgBCABKAIQETEACxwAIABFBEAQqwIACyAAIAIgAyAEIAEoAhARMgALHAAgAEUEQBCrAgALIAAgAiADIAQgASgCEBEzAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEDAAsaACAARQRAEKsCAAsgACACIAMgASgCEBEAAAscAQFvIAAlASABJQEgARCrASACJQEgAhCrARABCw8AIAAEQBCeAgALEJMCAAsYACAARQRAEKsCAAsgACACIAEoAhARAQALHAAgASgCACAAKAIAIAAoAgQgASgCBCgCDBEAAAsfAEH858EALQAARQRAQfznwQBBAToAAAsgAEEBNgIACyYAIABBHGpBACAB/QACAP0M2geMSXhlTNPCfY9Nlp8mz/0j/WMbCyYAIABBHGpBACAB/QACAP0MpB4B+3qY2OUTfOG8yehUVf0j/WMbCxIAIAAgAUEBdEEBciACEMoBAAsYACABKAIAIAEoAgQgACgCACAAKAIEEEcLFwAgACgCACABIAAoAgRBDGooAgARAQALFgEBbyAAIAEQFCECEG4iACACJgEgAAsWAQFvIAAgARAVIQIQbiIAIAImASAACxYBAW8gACABEBYhAhBuIgAgAiYBIAALGQAgASgCAEGEtMEAQQUgASgCBCgCDBEAAAsZACABKAIAQYzMwABBEiABKAIEKAIMEQAACxUAIAEgACgCACIAKAIAIAAoAgQQRAsWACAAQci2wQA2AgQgACABQRxqNgIACxYAIABBhLfBADYCBCAAIAFBHGo2AgALEAAgAEEEahBAIABBHGoQWgsZACABKAIAQa+jwQBBCCABKAIEKAIMEQAACxkAIAEoAgBBo6PBAEEDIAEoAgQoAgwRAAALGQAgASgCAEHE08EAQRcgASgCBCgCDBEAAAsZACABKAIAQaLTwQBBFCABKAIEKAIMEQAACxkAIAEoAgBBmNPBAEEKIAEoAgQoAgwRAAALGQAgASgCAEGmo8EAQQkgASgCBCgCDBEA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c3NlcnRpb24gYGxlZnQgwBAgcmlnaHRgIGZhaWxlZDogwAkKICBsZWZ0OiDACQogcmlnaHQ6IMAAwAI6IMAAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL2xlZ2FjeS5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTcuMS9zcmMvcmF3LnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZm10LnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvbXV0ZXgvbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcYW55aG93LTEuMC45OFxzcmNcZXJyb3IucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGVycm9yLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb3JlL3NyYy9vcHMvZnVuY3Rpb24ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3luYy9sYXp5X2xvY2sucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlx3YXNtLWJpbmRnZW4tMC4yLjExN1xzcmNcZXh0ZXJucmVmLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAc3BhcmstbGliXHNyY1xzcGxhdF9lbmNvZGUucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXGRlLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeW5jL29uY2UucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlX2NvcmUtMS4wLjIyOFxzcmNcZGVcbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL2JzdHIvbW9kLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy8uLi8uLi9iYWNrdHJhY2Uvc3JjL3N5bWJvbGl6ZS9tb2QucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAc3BhcmstbGliXHNyY1xyYWQucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxzZXJkZV9qc29uLTEuMC4xNDVcc3JjXHJlYWQucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTMvc3JjL2RsbWFsbG9jLnJzAHNwYXJrLXJzXHNyY1xsaWIucnMAQzpcVXNlcnNcbWFyY2VcLmNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBDOlxVc2Vyc1xtYXJjZVwuY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAEM6XFVzZXJzXG1hcmNlXC5jYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcanMtc3lzLTAuMy45NFxzcmNcbGliLnJzAC9ydXN0L2RlcHMvcnVzdGMtZGVtYW5nbGUtMC4xLjI3L3NyYy9saWIucnMAL3J1c3QvZGVwcy9ydXN0Yy1kZW1hbmdsZS0wLjEuMjcvc3JjL3YwLnJzAMAsIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXIAOWludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IHN0cjo6ZnJvbV91dGY4KMAEKSA9IMAiIHdhcyBleHBlY3RlZCB0byBoYXZlIDEgY2hhciwgYnV0IMARIGNoYXJzIHdlcmUgZm91bmQAEGZsb2F0aW5nIHBvaW50IGDAAWAAAWDABmAgb3IgYMABYAALY2hhcmFjdGVyIGDAAWAACWludGVnZXIgYMABYAAJYm9vbGVhbiBgwAFgAA9taXNzaW5nIGZpZWxkIGDAAWAAEWR1cGxpY2F0ZSBmaWVsZCBgwAFgAAFgwAFgABFzdGFydCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAPZW5kIGJ5dGUgaW5kZXggwCYgaXMgbm90IGEgY2hhciBib3VuZGFyeTsgaXQgaXMgaW5zaWRlIMAIIChieXRlcyDACyBvZiBzdHJpbmcpAMALIChvcyBlcnJvciDAASkABkVycm9yKMAILCBsaW5lOiDACiwgY29sdW1uOiDAASkAVwkQAEwAAACmAAAAMgAAAN0GEABPAAAAwgIAACYAAABIDBAAEwAAAE8AAAAiAAAASAwQABMAAABOAAAAIAAAAEgMEAATAAAAOgAAACAAAABIDBAAEwAAAG8AAAAoAAAAXAwQAG0AAACVAAAADgAAAG1ldGFjaHVua3NTdGFydAA+AAAADAAAAAQAAAA/AAAAQAAAAEEAQYChwAALQQEAAABCAAAAY2FwYWNpdHkgb3ZlcmZsb3cAAABUCxAAUAAAABwAAAAFAAAAQwAAAAwAAAAEAAAARAAAAEUAAABGAEHMocAAC8ECAQAAAEcAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAAugMQAEgAAACPAgAADgAAAGVuZCBvZiByYW5nZSBzaG91bGQgYmUgYSBjaGFyYWN0ZXIgYm91bmRhcnkKCkNhdXNlZCBieToAAAAAABAAAAAEAAAASAAAAEkAAABKAAAACgpTdGFjayBiYWNrdHJhY2U6CgBdAxAAXAAAADYAAAAfAAAAXQMQAFwAAAA8AAAAGwAAAGJhY2t0cmFjZSBjYXB0dXJlIGZhaWxlZHkFEABeAAAAZwQAAA4AAADmAhAATwAAAPwDAAAzAAAAPgAAAAwAAAAEAAAAPwAAAEAAAABLAEGYpMAACzkBAAAAQgAAAMMgAAAoBQACOiAAICAgICAgIAoKU3RhY2s6Cgo+AAAADAAAAAQAAABMAAAATQAAAE4AQdykwAALoQ4BAAAAQgAAAABwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMC4CDBQEMAoEAyYJDAIgBAIGOAEBAgMBAQU4CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsBASwDMAECBAICAgEkAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABEEFAAJNBkYLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJAQEIBAIBXwMCBAYBAgGdAQMIFQI5AgEBAQEMAQkBDgcDBUMBAgYBAQIBAQMEAwEBDgJVCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAghlAQEBAgQBBQAJAQL1AQoEBAGQBAICBAEgCigGAgQIAQkGAgMuDQECxgEBAwEByQcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQMXAQABBg8ADAMDAAU7BwABPwRRAQsCAAIALgIXAAUDBggIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAT+AvMBAgEHAgUBAAdtBwBggPAAAAAAAAAEAAAABAAAAE8AAAAgewosCmVudGl0eSBub3QgZm91bmRwZXJtaXNzaW9uIGRlbmllZGNvbm5lY3Rpb24gcmVmdXNlZGNvbm5lY3Rpb24gcmVzZXRob3N0IHVucmVhY2hhYmxlbmV0d29yayB1bnJlYWNoYWJsZWNvbm5lY3Rpb24gYWJvcnRlZG5vdCBjb25uZWN0ZWRhZGRyZXNzIGluIHVzZWFkZHJlc3Mgbm90IGF2YWlsYWJsZW5ldHdvcmsgZG93bmJyb2tlbiBwaXBlZW50aXR5IGFscmVhZHkgZXhpc3Rzb3BlcmF0aW9uIHdvdWxkIGJsb2Nrbm90IGEgZGlyZWN0b3J5aXMgYSBkaXJlY3RvcnlkaXJlY3Rvcnkgbm90IGVtcHR5cmVhZC1vbmx5IGZpbGVzeXN0ZW0gb3Igc3RvcmFnZSBtZWRpdW1maWxlc3lzdGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVpbnZhbGlkIGlucHV0IHBhcmFtZXRlcmludmFsaWQgZGF0YXRpbWVkIG91dHdyaXRlIHplcm9ubyBzdG9yYWdlIHNwYWNlc2VlayBvbiB1bnNlZWthYmxlIGZpbGVxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUg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V+l78mKNBz2XuxWH+TUEanmHyY61CgZk32IRccK8BhCPpXXkiHfWbGXRGyc1ymumpbf36dOSq/AdQRYfxKG8Hh7GX+4PD1aNsc0RZdMCYWRjo/8Ws7GJSE98HFHcm01QHOky3yiO1AbZyRYOfUlxc+Mgj7Ig2HYFFDsSfC4PgoUFm37qzVnxO1MrHcq+pQGeN6/L7tdH9C/cVRehmIQ0S/lYCb+sbMOMFqsSMC4wYnl0ZSBhcnJheU9wdGlvbiB2YWx1ZW5ld3R5cGUgc3RydWN0c2VxdWVuY2VtYXBlbnVtdW5pdCB2YXJpYW50bmV3dHlwZSB2YXJpYW50dHVwbGUgdmFyaWFudHN0cnVjdCB2YXJpYW50dW5pdHUzMnU2NHVzaXplZjMyYSBib29sZWFuYSBzdHJpbmdleHBsaWNpdCBwYW5pYwAAAPEJEABkAAAAJAkAABIAAABvbmUgb2YgLCAAAAC6CxAAYgAAAAACAAATAAAAugsQAGIAAAAFAgAAMwAAALoLEABiAAAACQIAAD4AAAC6CxAAYgAAAA8CAAA6AAAAPAYQAE8AAAA+BgAAFAAAADwGEABPAAAAPgYAACEAAAA8BhAATwAAADIGAAAUAAAAPAYQAE8AAAAyBgAAIQAAAG51bGxhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbim6CxAAYgAAALMBAAAaAAAAugsQAGIAAACrAQAAPQAAALoLEABiAAAApgEAAEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAEAAgADAAQABQAGAAcACAAJAP//////////////////CgALAAwADQAOAA8A/////////////////////////////////////////////////////////////////////woACwAMAA0ADgAPAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAEAAgADAAQABQAGAAcACAAJAA//////////////////+gALAAwADQAOAA8AD/////////////////////////////////////////////////////////////////////oACwAMAA0ADgAPAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////IGF0IGxpbmUgAAAA2AUQAGMAAAD3AQAAIQAAANgFEABjAAAA+wEAAAwAAADYBRAAYwAAAAICAAAhAAAA2AUQAGMAAAALAgAAKgAAANgFEABjAAAADwIAACwAAADYBRAAYwAAABQCAAAJAAAARU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdFT0Ygd2hpbGUgcGFyc2luZyBhIHZhbHVlZXhwZWN0ZWQgYDpgZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBpZGVudGV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgYCJgaW52YWxpZCBlc2NhcGVpbnZhbGlkIG51bWJlcm51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludGNvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5na2V5IG11c3QgYmUgYSBzdHJpbmdpbnZhbGlkIHZhbHVlOiBleHBlY3RlZCBrZXkgdG8gYmUgYSBudW1iZXIgaW4gcXVvdGVzZmxvYXQga2V5IG11c3QgYmUgZmluaXRlIChnb3QgTmFOIG9yICsvLWluZilsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGV0cmFpbGluZyBjb21tYXRyYWlsaW5nIGNoYXJhY3RlcnN1bmV4cGVjdGVkIGVuZCBvZiBoZXggZXNjYXBlcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkugsQAGIAAABcAgAAEwAAALoLEABiAAAAbgIAABkAAABpbmYtaW5mTmFOAAA+AAAADAAAAAQAAAA/AAAAQAAAAFoAQbSzwQALxwEBAAAAQgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAfwcQAEsAAABxCwAADgAAAEVycm9yAAAAPAYQAE8AAAC/BAAAJAAAAEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkAABgBBAAXgAAAGsAAAANAAAAAAAAAP//////////cFoQAEGItcEAC0XKDBAAZwAAADUAAAAOAAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGEAQdi1wQALBQEAAABoAEHotcEACwUBAAAAaQBB+LXBAAsFAQAAAGoAQYi2wQAL+QQBAAAAawAAAGludGVybmFsIGVy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"));const A=yS();(typeof B=="string"||typeof Request=="function"&&B instanceof Request||typeof URL=="function"&&B instanceof URL)&&(B=fetch(B));const{instance:I,module:g}=await JS(await B,A);return NS(I)}var US=`precision highp float;\r
|
|
11102
11102
|
precision highp int;\r
|
|
11103
11103
|
precision highp sampler2D;\r
|
|
11104
11104
|
precision highp usampler2D;\r
|
|
@@ -11132,7 +11132,7 @@ void main() {\r
|
|
|
11132
11132
|
if ((index >= 0) && (index < targetCount)) {\r
|
|
11133
11133
|
produceSplat(index);\r
|
|
11134
11134
|
}\r
|
|
11135
|
-
}`,
|
|
11135
|
+
}`,LS=`precision highp float;\r
|
|
11136
11136
|
precision highp int;\r
|
|
11137
11137
|
precision highp sampler2D;\r
|
|
11138
11138
|
precision highp usampler2D;\r
|
|
@@ -11172,7 +11172,7 @@ void main() {\r
|
|
|
11172
11172
|
if ((index >= 0) && (index < targetCount)) {\r
|
|
11173
11173
|
produceSplat(index);\r
|
|
11174
11174
|
}\r
|
|
11175
|
-
}`,
|
|
11175
|
+
}`,HS=`precision highp float;\r
|
|
11176
11176
|
precision highp int;\r
|
|
11177
11177
|
precision highp sampler2D;\r
|
|
11178
11178
|
precision highp usampler2D;\r
|
|
@@ -11214,7 +11214,7 @@ void main() {\r
|
|
|
11214
11214
|
if ((index >= 0) && (index < targetCount)) {\r
|
|
11215
11215
|
produceSplat(index);\r
|
|
11216
11216
|
}\r
|
|
11217
|
-
}`,
|
|
11217
|
+
}`,YS=`precision highp float;\r
|
|
11218
11218
|
precision highp int;\r
|
|
11219
11219
|
precision highp sampler2D;\r
|
|
11220
11220
|
precision highp usampler2D;\r
|
|
@@ -11249,7 +11249,7 @@ void main() {\r
|
|
|
11249
11249
|
} else {\r
|
|
11250
11250
|
target = vec4(0.0, 0.0, 0.0, 0.0);\r
|
|
11251
11251
|
}\r
|
|
11252
|
-
}`,
|
|
11252
|
+
}`,dS=`precision highp float;\r
|
|
11253
11253
|
precision highp int;
|
|
11254
11254
|
|
|
11255
11255
|
#include <splatDefines>
|
|
@@ -11343,7 +11343,7 @@ void main() {\r
|
|
|
11343
11343
|
fragColor = rgba;\r
|
|
11344
11344
|
#endif\r
|
|
11345
11345
|
}\r
|
|
11346
|
-
}`,
|
|
11346
|
+
}`,KS=`precision highp float;\r
|
|
11347
11347
|
precision highp int;\r
|
|
11348
11348
|
precision highp usampler2DArray;
|
|
11349
11349
|
|
|
@@ -11559,7 +11559,7 @@ void main() {\r
|
|
|
11559
11559
|
vSplatUv = position.xy * maxStdDev;\r
|
|
11560
11560
|
vNdc = ndc;\r
|
|
11561
11561
|
gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);\r
|
|
11562
|
-
}`,
|
|
11562
|
+
}`,lS=`const float LN_SCALE_MIN = -12.0;\r
|
|
11563
11563
|
const float LN_SCALE_MAX = 9.0;
|
|
11564
11564
|
|
|
11565
11565
|
const uint SPLAT_TEX_WIDTH_BITS = 11u;\r
|
|
@@ -12083,7 +12083,7 @@ vec3 debugColorHue(uint i) {\r
|
|
|
12083
12083
|
|
|
12084
12084
|
vec3 rgb = clamp(abs(mod(hue*6.0 + vec3(0.0,4.0,2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\r
|
|
12085
12085
|
return mix(vec3(1.0), rgb, 0.85);
|
|
12086
|
-
}`,
|
|
12086
|
+
}`,fS=`precision highp float;\r
|
|
12087
12087
|
precision highp int;
|
|
12088
12088
|
|
|
12089
12089
|
#include <splatDefines>
|
|
@@ -12148,7 +12148,7 @@ void main() {\r
|
|
|
12148
12148
|
#endif
|
|
12149
12149
|
|
|
12150
12150
|
#include <logdepthbuf_fragment>\r
|
|
12151
|
-
}`,
|
|
12151
|
+
}`,pS=`precision highp float;\r
|
|
12152
12152
|
precision highp int;\r
|
|
12153
12153
|
precision highp usampler2DArray;
|
|
12154
12154
|
|
|
@@ -12419,12 +12419,12 @@ void main() {\r
|
|
|
12419
12419
|
gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);
|
|
12420
12420
|
|
|
12421
12421
|
#include <logdepthbuf_vertex>\r
|
|
12422
|
-
}`;let
|
|
12422
|
+
}`;let wo=null;function sB(){return wo||(Js.splatDefines=lS,wo={oldSplatVertex:KS,oldSplatFragment:dS,splatVertex:pS,splatFragment:fS,computeVec4Template:YS,computeUvec4Vec4Template:LS,computeUvec4x2Vec4Template:HS,computeUvec4Template:US}),wo}const Ai=class jg{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}static ensureBuffer(A,I){const g=Math.ceil(Math.max(1,A)/_)*_*4;if(I.byteLength>=g)return I;const Q=new ArrayBuffer(g);if(I instanceof ArrayBuffer)return Q;const C=I.constructor;return new C(Q)}ensureBuffer(A,I){return jg.ensureBuffer(A,I)}ensureCapacity(A){const{width:I,height:g,depth:Q,maxSplats:C}=UA(A);(!this.target||C>this.capacity)&&(this.dispose(),this.capacity=C,this.target=new Zi(I,g,Q,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:WQ,minFilter:WQ}),this.target.texture.format=Mg,this.target.texture.type=ug,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let I=jg.readbackProgram.get(A);if(!I){const Q=wI({index:"int"},{rgba8:"vec4"},({index:C})=>(A.inputs.index=C,{rgba8:new TG({rgba8:A.outputs.rgba8})}));jg.programTemplate||(jg.programTemplate=new WE(sB().computeVec4Template)),I=new oo({graph:Q,inputs:{index:"_index"},outputs:{rgba8:"target"},template:jg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),jg.readbackProgram.set(A,I)}const g=I.prepareMaterial();return jg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}process({count:A,material:I}){const g=this.renderer;if(!g)throw new Error("No renderer");if(!this.target)throw new Error("No target");const Q=_*Gg;I.uniforms.targetBase.value=0,I.uniforms.targetCount.value=A;let C=0;for(;C<A;){const i=Math.floor(C/Q),E=i*Q,D=Math.min(Gg,Math.ceil((A-E)/_));I.uniforms.targetLayer.value=i,this.target.scissor.set(0,0,_,D),g.setRenderTarget(this.target,i),g.xr.enabled=!1,g.autoClear=!1,jg.fullScreenQuad.render(g),C+=_*D}this.count=A}async read({readback:A}){const I=this.renderer;if(!I)throw new Error("No renderer");if(!this.target)throw new Error("No target");const g=Math.ceil(this.count/_)*_;if(A.byteLength<g*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${g*4}`);const Q=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),C=_*Gg;let i=0;const E=[];for(;i<this.count;){const D=Math.floor(i/C),o=D*C,s=Math.min(Gg,Math.ceil((this.count-o)/_));I.setRenderTarget(this.target,D);const t=_*s*4,w=Q.subarray(o*4,o*4+t),a=I?.readRenderTargetPixelsAsync(this.target,0,0,_,s,w);E.push(a),i+=_*s}return Promise.all(E).then(()=>A)}render({reader:A,count:I,renderer:g}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:Q,material:C}=this.prepareProgramMaterial(A);Q.update();const i=this.saveRenderState(this.renderer);this.process({count:I,material:C}),this.resetRenderState(this.renderer,i)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const I=this.saveRenderState(this.renderer),g=this.read({readback:A});return this.resetRenderState(this.renderer,I),g}async renderReadback({reader:A,count:I,renderer:g,readback:Q}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:C,material:i}=this.prepareProgramMaterial(A);C.update();const E=this.saveRenderState(this.renderer);this.process({count:I,material:i});const D=this.read({readback:Q});return this.resetRenderState(this.renderer,E),D}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};Ai.programTemplate=null,Ai.readbackProgram=new WeakMap,Ai.fullScreenQuad=new _i(new aE({visible:!1}));let sC=Ai;const ao=class TI{constructor(A={}){if(this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new dI({key:"rgbaArray",type:la,globals:()=>[xS],value:{texture:TI.getEmpty(),count:0},update:I=>(I.texture=this.getTexture(),I.count=this.count,I)}),A.array){this.array=A.array;const I=Math.floor(this.array.length/4);this.capacity=Math.ceil(I/_)*_,this.capacity>I&&(this.array=new Uint8Array(this.capacity*4),this.array.set(A.array)),this.count=Math.min(I,A.count??Number.POSITIVE_INFINITY)}else this.capacity=A.capacity??0,this.count=0}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var I;if(!this.array||A>(((I=this.array)==null?void 0:I.length)??0)/4){this.capacity=UA(A).maxSplats;const g=new Uint8Array(this.capacity*4);this.array&&g.set(this.array),this.array=g}return this.array}getTexture(){var A;let I=(A=this.readback)==null?void 0:A.getTexture();return(this.source||this.array)&&(I=this.maybeUpdateSource()),I??TI.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.capacity!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:I,depth:g}=UA(this.capacity);this.source=new cI(this.array,A,I,g),this.source.format=Mg,this.source.type=ug,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:I,renderer:g}){this.readback||(this.readback=new sC({renderer:g})),this.readback.render({reader:A,count:I,renderer:g}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:I,count:g,renderer:Q}){const{dynoSplats:C,dynoBase:i,dynoCount:E,reader:D}=TI.makeDynos();return C.packedSplats=A,i.value=I,E.value=g,this.render({reader:D,count:g,renderer:Q}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length<this.count*4)&&(this.array=new Uint8Array(this.capacity*4)),(await this.readback.readback({readback:this.array})).subarray(0,this.count*4)}async getArray(){if(this.readback)return await this.read();if(this.array)return this.array;throw new Error("No array")}static getEmpty(){if(!TI.emptySource){const A=new Uint8Array(4);TI.emptySource=new cI(A,1,1,1),TI.emptySource.format=Mg,TI.emptySource.type=ug,TI.emptySource.internalFormat="RGBA8",TI.emptySource.needsUpdate=!0}return TI.emptySource}static makeDynos(){if(!TI.dynos){const A=new So,I=new Og({value:0}),g=new Og({value:0}),Q=wI({index:"int"},{rgba8:"vec4"},({index:C})=>{if(!C)throw new Error("index is undefined");C=nQ(C,I);const i=SG(A,C,I,g);return{rgba8:Ig(i).outputs.rgba}});TI.dynos={dynoSplats:A,dynoBase:I,dynoCount:g,reader:Q}}return TI.dynos}};ao.emptySource=null,ao.dynos=null;let Ka=ao;const la={type:"RgbaArray"},xS=qA(`
|
|
12423
12423
|
struct RgbaArray {
|
|
12424
12424
|
sampler2DArray texture;
|
|
12425
12425
|
int count;
|
|
12426
12426
|
};
|
|
12427
|
-
`);function
|
|
12427
|
+
`);function qS(B){switch(B){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${B}`)}}function uS(B){switch(B){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${B}`)}}class fa extends dB{constructor(A={}){super();const{type:I,invert:g,opacity:Q,color:C,displace:i,radius:E}=A;this.type=I??"sphere",this.invert=g??!1,this.opacity=Q??1,this.color=C??new hQ(1,1,1),this.displace=i??new q(0,0,0),this.radius=E??0}}const pa=class He extends dB{constructor(A={}){const{name:I,rgbaBlendMode:g="multiply",sdfSmooth:Q=0,softEdge:C=0,invert:i=!1,sdfs:E=null}=A;super(),this.rgbaBlendMode=g,this.sdfSmooth=Q,this.softEdge=C,this.invert=i,this.sdfs=E,this.ordering=He.nextOrdering++,this.name=I??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.includes(A)||this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(I=>I!==A))}};pa.nextOrdering=1;let Ii=pa;class xa{constructor({maxSdfs:A,maxEdits:I}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new dI({key:"sdfArray",type:eo,globals:()=>[ho],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:g=>(g.numSdfs=this.numSdfs,g.sdfTexture=this.sdfTexture,g)}),this.maxEdits=Math.max(16,I??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new Og({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,I){const g=new cQ(A,8,I,hA,oA);return g.internalFormat="RGBA32UI",g.needsUpdate=!0,g}newEdits(A,I){return new dI({key:"edits",type:"uvec4",count:I,globals:()=>[co],value:A})}ensureCapacity({maxSdfs:A,maxEdits:I}){let g=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),I>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,I),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),g=!0),g}updateEditData(A,I){const g=this.editData[A]!==I;return this.editData[A]=I,g}updateEditFloatData(A,I){tB[0]=I;const g=this.editFloatData[A]!==tB[0];return g&&(this.editFloatData[A]=tB[0]),g}encodeEdit(A,{sdfFirst:I,sdfCount:g,invert:Q,rgbaBlendMode:C,softEdge:i,sdfSmooth:E}){const D=A*4;let o=!1;return o=this.updateEditData(D+0,C|(Q?256:0))||o,o=this.updateEditData(D+1,I|g<<16)||o,o=this.updateEditFloatData(D+2,i)||o,o=this.updateEditFloatData(D+3,E)||o,o}updateSdfData(A,I){const g=this.sdfData[A]!==I;return this.sdfData[A]=I,g}updateSdfFloatData(A,I){tB[0]=I;const g=this.sdfFloatData[A]!==tB[0];return g&&(this.sdfFloatData[A]=tB[0]),g}encodeSdf(A,{sdfType:I,invert:g,center:Q,quaternion:C,scale:i,sizes:E},D){const o=A*32,s=I|(g?256:0);let t=!1;t=this.updateSdfFloatData(o+0,Q?.x??0)||t,t=this.updateSdfFloatData(o+1,Q?.y??0)||t,t=this.updateSdfFloatData(o+2,Q?.z??0)||t,t=this.updateSdfData(o+3,s)||t,t=this.updateSdfFloatData(o+4,C?.x??0)||t,t=this.updateSdfFloatData(o+5,C?.y??0)||t,t=this.updateSdfFloatData(o+6,C?.z??0)||t,t=this.updateSdfFloatData(o+7,C?.w??0)||t,t=this.updateSdfFloatData(o+8,i?.x??0)||t,t=this.updateSdfFloatData(o+9,i?.y??0)||t,t=this.updateSdfFloatData(o+10,i?.z??0)||t,t=this.updateSdfData(o+11,0)||t,t=this.updateSdfFloatData(o+12,E?.x??0)||t,t=this.updateSdfFloatData(o+13,E?.y??0)||t,t=this.updateSdfFloatData(o+14,E?.z??0)||t,t=this.updateSdfFloatData(o+15,E?.w??0)||t;const w=Math.min(4,D.length);for(let a=0;a<w;++a){const G=o+16+a*4;t=this.updateSdfFloatData(G+0,D[a].x)||t,t=this.updateSdfFloatData(G+1,D[a].y)||t,t=this.updateSdfFloatData(G+2,D[a].z)||t,t=this.updateSdfFloatData(G+3,D[a].w)||t}return t}update(A){const I=A.reduce((t,{sdfs:w})=>t+w.length,0),g=this.ensureCapacity({maxEdits:A.length,maxSdfs:I}),Q=[new NI,new NI],C=new q,i=new UI,E=new q,D=new NI;let o=0,s=g;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,s=!0);for(const[t,{edit:w,sdfs:a}]of A.entries()){s=this.encodeEdit(t,{sdfFirst:o,sdfCount:a.length,invert:w.invert,rgbaBlendMode:uS(w.rgbaBlendMode),softEdge:w.softEdge,sdfSmooth:w.sdfSmooth})||s;let G=!1;for(const S of a)D.set(S.scale.x,S.scale.y,S.scale.z,S.radius),S.scale.setScalar(1),S.updateMatrixWorld(),S.matrixWorld.clone().invert().decompose(C,i,E),S.scale.set(D.x,D.y,D.z),S.updateMatrixWorld(),Q[0].set(S.color.r,S.color.g,S.color.b,S.opacity),Q[1].set(S.displace.x,S.displace.y,S.displace.z,1),G=this.encodeSdf(o,{sdfType:qS(S.type),invert:S.invert,center:C,quaternion:i,scale:E,sizes:D},Q)||G,o+=1;this.numSdfs=o,G&&(this.sdfTexture.needsUpdate=!0),s||(s=G)}return{updated:s,dynoUpdated:g}}modify(A){return mS(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}modifyCov(A){return bS(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const eo={type:"SdfArray"},ho=qA(`
|
|
12428
12428
|
struct SdfArray {
|
|
12429
12429
|
int numSdfs;
|
|
12430
12430
|
usampler2D sdfTexture;
|
|
@@ -12589,7 +12589,7 @@ void main() {\r
|
|
|
12589
12589
|
return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0)
|
|
12590
12590
|
: clamp(-distance / softEdge + 0.5, 0.0, 1.0);
|
|
12591
12591
|
}
|
|
12592
|
-
`),
|
|
12592
|
+
`),co=qA(`
|
|
12593
12593
|
const uint EDIT_FLAG_BLEND = 0xFFu;
|
|
12594
12594
|
const uint EDIT_BLEND_MULTIPLY = 0u;
|
|
12595
12595
|
const uint EDIT_BLEND_SET_RGB = 1u;
|
|
@@ -12647,7 +12647,7 @@ void main() {\r
|
|
|
12647
12647
|
decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth);
|
|
12648
12648
|
applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba);
|
|
12649
12649
|
}
|
|
12650
|
-
`);function
|
|
12650
|
+
`);function mS(B,A,I,g){return new tA({inTypes:{gsplat:RA,sdfArray:eo,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:RA},globals:()=>[ho,co],inputs:{gsplat:B,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:Q,outputs:C})=>{const{sdfArray:i,numEdits:E,rgbaDisplaceEdits:D}=Q,{gsplat:o}=C;return FA(`
|
|
12651
12651
|
${o} = ${Q.gsplat};
|
|
12652
12652
|
if (isGsplatActive(${o}.flags)) {
|
|
12653
12653
|
for (int editIndex = 0; editIndex < ${E}; ++editIndex) {
|
|
@@ -12657,7 +12657,7 @@ void main() {\r
|
|
|
12657
12657
|
);
|
|
12658
12658
|
}
|
|
12659
12659
|
}
|
|
12660
|
-
`)}}).outputs.gsplat}function
|
|
12660
|
+
`)}}).outputs.gsplat}function bS(B,A,I,g){return new tA({inTypes:{covsplat:Ag,sdfArray:eo,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{covsplat:Ag},globals:()=>[ho,co],inputs:{covsplat:B,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:Q,outputs:C})=>{const{sdfArray:i,numEdits:E,rgbaDisplaceEdits:D}=Q,{covsplat:o}=C;return FA(`
|
|
12661
12661
|
${o} = ${Q.covsplat};
|
|
12662
12662
|
if (isCovSplatActive(${o}.flags)) {
|
|
12663
12663
|
for (int editIndex = 0; editIndex < ${E}; ++editIndex) {
|
|
@@ -12667,7 +12667,7 @@ void main() {\r
|
|
|
12667
12667
|
);
|
|
12668
12668
|
}
|
|
12669
12669
|
}
|
|
12670
|
-
`)}}).outputs.covsplat}const tB=new Float32Array(1);class
|
|
12670
|
+
`)}}).outputs.covsplat}const tB=new Float32Array(1);class qa{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let I=this.cache.get(A);return I||(I=wI({index:"int"},{gsplat:RA},({index:g})=>{const{gsplat:Q}=A.apply({index:g});return this.modifier.apply({gsplat:Q})}),this.cache.set(A,I)),I}}class tC{constructor(){this.scale=new DB({value:Number.NEGATIVE_INFINITY}),this.rotate=new BC({value:new UI(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new Xg({value:new q(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return CS(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return ES(A,{rotate:this.rotate})}applyGsplat(A){return ea(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const I=new q,g=new UI,Q=new q;A.decompose(Q,g,I);const C=(I.x+I.y+I.z)/3;let i=!1;return C!==this.scale.value&&(this.scale.value=C,i=!0),Q.equals(this.translate.value)||(this.translate.value.copy(Q),i=!0),g.equals(this.rotate.value)||(this.rotate.value.copy(g),i=!0),i}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class gi{constructor(){this.basis=new OG({value:new VQ}),this.offset=new Xg({value:new q})}apply(A){const I=MQ(this.basis,A);return nQ(I,this.offset)}applyDir(A){return MQ(this.basis,A)}applyCovSplat(A){return new tA({inTypes:{covsplat:Ag,basis:"mat3",offset:"vec3"},outTypes:{covsplat:Ag},inputs:{covsplat:A,basis:this.basis,offset:this.offset},statements:({inputs:I,outputs:g})=>{const{covsplat:Q,basis:C,offset:i}=I;return!Q||!C||!i?[`${g.covsplat}.flags = 0u;`]:FA(`
|
|
12671
12671
|
${g.covsplat}.flags = 0u;
|
|
12672
12672
|
if (isCovSplatActive(${Q}.flags)) {
|
|
12673
12673
|
${g.covsplat}.flags = ${Q}.flags;
|
|
@@ -12685,34 +12685,34 @@ void main() {\r
|
|
|
12685
12685
|
${g.covsplat}.xxyyzz = vec3(cov[0][0], cov[1][1], cov[2][2]);
|
|
12686
12686
|
${g.covsplat}.xyxzyz = vec3(cov[0][1], cov[0][2], cov[1][2]);
|
|
12687
12687
|
}
|
|
12688
|
-
`)}}).outputs.covsplat}updateFromMatrix(A){const I=new VQ().setFromMatrix4(A),g=new q().setFromMatrixColumn(A,3),Q=!I.equals(this.basis.value)||!g.equals(this.offset.value);return Q&&(this.basis.value.copy(I),this.offset.value.copy(g)),Q}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class wB extends
|
|
12689
|
-
int indexDiv8 = ${
|
|
12688
|
+
`)}}).outputs.covsplat}updateFromMatrix(A){const I=new VQ().setFromMatrix4(A),g=new q().setFromMatrixColumn(A,3),Q=!I.equals(this.basis.value)||!g.equals(this.offset.value);return Q&&(this.basis.value.copy(I),this.offset.value.copy(g)),Q}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class wB extends dB{constructor({numSplats:A,generator:I,covGenerator:g,construct:Q,update:C}){if(super(),this.numSplats=A??0,this.generator=I,this.covGenerator=g,this.frameUpdate=C,this.version=0,this.mappingVersion=0,Q){const i=Q(this);Object.assign(this,i)}}updateVersion(){this.version+=1}updateMappingVersion(){this.mappingVersion+=1,this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const VI=class PA{constructor({extSplats:A,covSplats:I}={}){if(this.time=0,this.deltaTime=0,this.viewToWorld=new fA,this.viewOrigin=new q,this.viewDirection=new q,this.maxSplats=0,this.numSplats=0,this.target=null,this.mapping=[],this.version=-1,this.mappingVersion=-1,this.readback=null,this.readbackSplats=[],!vy)throw new Error("Spark requires THREE.js r179 or above");this.extSplats=A??!0,this.covSplats=I??!1}dispose(){this.target&&(this.target.dispose(),this.target=null)}getTextures(){return this.target?this.target.textures:PA.emptyTextures}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,i=Math.ceil(Q/_)*_;return I+=i,{base:C,count:Q}});return{maxSplats:I,mapping:g}}ensureGenerate({maxSplats:A}){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const I=UA(A??1),{width:g,height:Q,depth:C}=I;if(this.maxSplats=I.maxSplats,this.target=new Zi(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:WQ,minFilter:WQ,format:hA,type:oA}),this.target.scissorTest=!0,this.extSplats){const i=this.target.texture.clone(),E=this.target.texture.clone();E.format=Mg,E.type=ug,E.internalFormat="RGBA8",this.target.textures=[this.target.texture,i,E]}else{const i=this.target.texture.clone();i.format=Mg,i.type=ug,i.internalFormat="RGBA8",this.target.textures=[this.target.texture,i]}return!0}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}prepareProgramMaterial(A,I){const g=A??I;if(!g)throw new Error("Either generator or covGenerator must be provided");let Q=PA.generatorProgram.get(g);if(!Q){const i=wI({index:"int"},{},({index:E},D,{roots:o})=>{if(A&&(A.inputs.index=E),I&&(I.inputs.index=E),this.extSplats)if(this.covSplats)if(I){const s=Fa(I.outputs.covsplat);o.push(s)}else if(A){const s=Eo(A.outputs.gsplat),t=Fa(s);o.push(t)}else throw new Error("Generator must be provided");else if(A){const s=lG(A.outputs.gsplat);o.push(s)}else throw new Error("Generator must be provided");else{if(this.covSplats){let s;if(I)s=I.outputs.covsplat;else if(A)s=Eo(A.outputs.gsplat);else throw new Error("Generator must be provided");const t=oB(Do(s).outputs.center,PA.viewCenterUniform),w=MQ(Do(s).outputs.opacity,CB("float",.5));s=Sa({covsplat:s,center:t,opacity:w});const a=KG(s,CB("vec4",[0,1,uI,mI]));o.push(a)}else if(A){const s=oB(Ig(A.outputs.gsplat).outputs.center,PA.viewCenterUniform),t=MQ(Ig(A.outputs.gsplat).outputs.opacity,CB("float",.5)),w=EB({gsplat:A.outputs.gsplat,center:s,opacity:t}),a=ra(w,CB("vec4",[0,1,uI,mI]));o.push(a)}else throw new Error("Generator must be provided");if(!A)throw new Error("Generator must be provided")}if(A){const s=fG(A.outputs.gsplat,PA.viewCenterUniform,PA.viewDirUniform,PA.sortRadialUniform,PA.sortCullCosUniform);o.push(s)}if(I){const s=pG(I.outputs.covsplat,PA.viewCenterUniform,PA.viewDirUniform,PA.sortRadialUniform,PA.sortCullCosUniform);o.push(s)}});Q=new oo({graph:i,inputs:{index:"_index"},outputs:{},template:this.extSplats?PA.programExtTemplate:PA.programTemplate}),PA.generatorProgram.set(g,Q)}Object.assign(Q.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}});const C=Q.prepareMaterial();return PA.fullScreenQuad.material=C,{program:Q,material:C}}generate({generator:A,covGenerator:I,base:g,count:Q,renderer:C}){if(!this.target)throw new Error("Target must be initialized with ensureGenerate");if(g+Q>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:i,material:E}=this.prepareProgramMaterial(A,I);i.update();const D=this.saveRenderState(C),o=Math.ceil((g+Q)/_)*_,s=_*Gg;for(E.uniforms.targetBase.value=g,E.uniforms.targetCount.value=Q;g<o;){const t=Math.floor(g/s);E.uniforms.targetLayer.value=t;const w=t*s,a=Math.floor((g-w)/_),G=Math.min(Gg,Math.ceil((o-w)/_));this.target.scissor.set(0,a,_,G-a),C.setRenderTarget(this.target,t),C.xr.enabled=!1,C.autoClear=!1,PA.fullScreenQuad.render(C),g+=_*(G-a)}return this.resetRenderState(C,D),{nextBase:o}}prepareGenerate({renderer:A,scene:I,time:g,camera:Q,sortRadial:C,sortCullCos:i,renderSize:E,previous:D,lodInstances:o}){var s;this.viewToWorld.copy(Q.matrixWorld),Q.getWorldPosition(this.viewOrigin),Q.getWorldDirection(this.viewDirection),PA.viewCenterUniform.value.copy(this.viewOrigin),PA.viewDirUniform.value.copy(this.viewDirection),PA.sortRadialUniform.value=C,PA.sortCullCosUniform.value=i??-1,this.time=g,this.deltaTime=g-D.time;const t=[];I.traverse(n=>{n instanceof wB&&(!Q.layers||Q.layers.test(n.layers))&&t.push(n)});const w=new Set;I.traverseVisible(n=>{if(n instanceof Ii){let N=n.parent;for(;N!=null&&!(N instanceof EQ);)N=N.parent;N==null&&w.add(n)}});const a=Array.from(w);for(const n of t)try{(s=n.frameUpdate)==null||s.call(n,{renderer:A,object:n,time:this.time,deltaTime:this.deltaTime,viewToWorld:this.viewToWorld,camera:Q,renderSize:E,globalEdits:a,lodIndices:o&&n instanceof EQ?o.get(n):void 0})}catch(N){console.error("frameUpdate error",N),n.generator=void 0,n.covGenerator=void 0,n.generatorError=N}const G=[];I.traverseVisible(n=>{n instanceof wB&&(!Q.layers||Q.layers.test(n.layers))&&G.push(n)});const S=G.map(n=>n.numSplats),{maxSplats:c,mapping:y}=this.generateMapping(S),F=D.mapping.reduce((n,N)=>(n.set(N.node,N),n),new Map);this.mapping=[],this.numSplats=0,y.forEach(({base:n,count:N},J)=>{const L=G[J],H=F.get(L);H&&H.count!==L.numSplats&&L.updateMappingVersion();const{generator:Y,covGenerator:K}=L;if((Y||K)&&N>0){const{version:l,mappingVersion:p}=L;this.mapping.push({node:L,generator:Y,covGenerator:K,version:l,mappingVersion:p,base:n,count:N}),this.numSplats=Math.max(this.numSplats,n+N)}});const{splatsUpdated:R,mappingUpdated:M}=D.checkVersions(this.mapping);return this.version=D.version+(R?1:0),this.mappingVersion=D.mappingVersion+(M?1:0),{sameMapping:!M,version:this.version,mappingVersion:this.mappingVersion,visibleGenerators:G,generate:()=>{this.ensureGenerate({maxSplats:c});for(const{node:n,base:N,count:J}of this.mapping){const{generator:L,covGenerator:H}=n;(L||H)&&J>0&&this.generate({generator:L,covGenerator:H,base:N,count:J,renderer:A})}},readback:async()=>{const n=this.getTextures();this.readbackSplats.length===0&&(this.readbackSplats=[new KI({value:n[0],key:"extSplats"}),new KI({value:n[1],key:"extSplats"})]),this.readbackSplats[0].value=n[0],this.readbackSplats[1].value=n[1],this.readback||(this.readback=new sC({renderer:A}));const N=this.readback,J=this.extSplats?8:4,L=N.ensureBuffer(this.numSplats*J,new Uint32Array(0)),H=wI({index:"int"},{rgba8:"vec4"},({index:Y})=>({rgba8:new tA({inTypes:{index:"int",extSplats1:"usampler2DArray",extSplats2:"usampler2DArray"},outTypes:{rgba8:"vec4"},inputs:{index:Y,extSplats1:this.readbackSplats[0],extSplats2:this.readbackSplats[1]},statements:({inputs:K,outputs:l})=>this.extSplats?FA(`
|
|
12689
|
+
int indexDiv8 = ${K.index} >> 3;
|
|
12690
12690
|
ivec3 coord = splatTexCoord(indexDiv8);
|
|
12691
12691
|
uvec4 packedData;
|
|
12692
|
-
if ((${
|
|
12693
|
-
packedData = texelFetch(${
|
|
12692
|
+
if ((${K.index} & 4) == 0) {
|
|
12693
|
+
packedData = texelFetch(${K.extSplats1}, coord, 0);
|
|
12694
12694
|
} else {
|
|
12695
|
-
packedData = texelFetch(${
|
|
12695
|
+
packedData = texelFetch(${K.extSplats2}, coord, 0);
|
|
12696
12696
|
}
|
|
12697
12697
|
|
|
12698
|
-
int indexMod4 = ${
|
|
12698
|
+
int indexMod4 = ${K.index} & 3;
|
|
12699
12699
|
uint data = (indexMod4 == 0) ? packedData.x
|
|
12700
12700
|
: (indexMod4 == 1) ? packedData.y
|
|
12701
12701
|
: (indexMod4 == 2) ? packedData.z
|
|
12702
12702
|
: packedData.w;
|
|
12703
12703
|
${l.rgba8} = uintToVec4(data);
|
|
12704
12704
|
`):FA(`
|
|
12705
|
-
int indexDiv4 = ${
|
|
12705
|
+
int indexDiv4 = ${K.index} >> 2;
|
|
12706
12706
|
ivec3 coord = splatTexCoord(indexDiv4);
|
|
12707
|
-
uvec4 packedData = texelFetch(${
|
|
12707
|
+
uvec4 packedData = texelFetch(${K.extSplats1}, coord, 0);
|
|
12708
12708
|
|
|
12709
|
-
int indexMod4 = ${
|
|
12709
|
+
int indexMod4 = ${K.index} & 3;
|
|
12710
12710
|
uint data = (indexMod4 == 0) ? packedData.x
|
|
12711
12711
|
: (indexMod4 == 1) ? packedData.y
|
|
12712
12712
|
: (indexMod4 == 2) ? packedData.z
|
|
12713
12713
|
: packedData.w;
|
|
12714
12714
|
${l.rgba8} = uintToVec4(data);
|
|
12715
|
-
`)}).outputs.rgba8}));return await M.renderReadback({reader:H,count:this.numSplats*J,renderer:A,readback:L})}}}checkVersions(A){if(this.mapping.length!==A.length)return{splatsUpdated:!0,mappingUpdated:!0};const I=this.mapping.some((g,Q)=>{const C=A[Q];return g.node!==C.node||g.base!==C.base||g.count!==C.count||g.mappingVersion!==C.mappingVersion});return I?{splatsUpdated:!0,mappingUpdated:!0}:{splatsUpdated:this.mapping.some((g,Q)=>g.version!==A[Q].version),mappingUpdated:I}}};VI.viewCenterUniform=new Xg({value:new q}),VI.viewDirUniform=new Xg({value:new q}),VI.sortRadialUniform=new gC({value:!0}),VI.sortCullCosUniform=new DB({value:-1}),VI.emptyTexture=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),VI.emptyTextures=[VI.emptyTexture,VI.emptyTexture],VI.programExtTemplate=new VE(sB().computeUvec4x2Vec4Template),VI.programTemplate=new VE(sB().computeUvec4Vec4Template),VI.generatorProgram=new WeakMap,VI.fullScreenQuad=new zi(new wE({visible:!1}));let aB=VI;class pS extends Xi{constructor(){super(),this.setAttribute("position",new iI(xS,3)),this.setIndex(new iI(qS,1))}}const xS=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),qS=new Uint16Array([0,1,2,0,2,3]),tC=new q;function uS(B){const A=B.getWorldScale(tC);return(A.x+A.y+A.z)/3}const gi=class dA extends IQ{constructor(A){if(!A)throw new Error("SparkRenderer options are required");if(!A.renderer)throw new Error("renderer is required in SparkRenderer options");const I=dA.makeUniforms();Object.assign(I,A.extraUniforms??{});const g=sB(),Q=A.premultipliedAlpha??!0,C=new pS,i=new vQ({glslVersion:Zi,vertexShader:A.vertexShader??g.splatVertex,fragmentShader:A.fragmentShader??g.splatFragment,uniforms:I,premultipliedAlpha:Q,transparent:A.transparent??!0,depthTest:A.depthTest??!0,depthWrite:A.depthWrite??!1,side:dB,allowOverride:!1});super(C,i),this.renderSize=new JI,this.lastFrame=-1,this.updateTimeoutId=-1,this.orderingTexture=null,this.maxSplats=0,this.activeSplats=0,this.accumulators=[],this.sorting=!1,this.sortDirty=!1,this.lastSortTime=0,this.sortWorker=null,this.sortTimeoutId=-1,this.sortedCenter=new q().setScalar(Number.NEGATIVE_INFINITY),this.sortedDir=new q().setScalar(0),this.sortCullHalfAngle=Math.PI,this.readback32=new Uint32Array(0),this.ordering32=new Uint32Array(0),this.pauseWork=!1,this.lastLodRaycastTime=0,this.lodWorker=null,this.lodMeshes=[],this.lodDirty=!1,this.lodIds=new Map,this.lodIdToSplats=new Map,this.lodInitQueue=[],this.lodInstances=new Map,this.lodUpdates=[],this.lastTraverseTime=0,this.pagerId=0,this.superXY=1,this.flushAfterGenerate=!1,this.flushAfterRead=!1,this.readPause=1,this.sortPause=0,this.sortDelay=0,this.pageSizeWarning=!1,this.material=i,this.uniforms=I,this.frustumCulled=!1,this.renderer=A.renderer,this.onDirty=A.onDirty,this.dirty=!0,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!0,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.accumExtSplats=A.accumExtSplats??!1,this.covSplats=A.covSplats??!1,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.encodeLinear=A.encodeLinear??!1,this.sortRadial=A.sortRadial??!0,this.sortCullHalfAngle=A.sortCullHalfAngle??Math.PI,this.minSortIntervalMs=A.minSortIntervalMs??0,this.enableLod=A.enableLod??!0,this.enableDriveLod=A.enableDriveLod??this.enableLod,this.enableLodFetching=A.enableLodFetching??!0,this.lodSplatCount=A.lodSplatCount,this.lodSplatScale=A.lodSplatScale??1,this.lodRenderScale=A.lodRenderScale??1,this.lodInflate=A.lodInflate??!1,this.pagedExtSplats=A.pagedExtSplats??!1;const E=TE()?OE()?96:128:256;this.maxPagedSplats=A.maxPagedSplats??E*65536,this.numLodFetchers=A.numLodFetchers??3,this.behindFoveate=A.behindFoveate??.2,this.coneFov0=A.coneFov0??90,this.coneFov=A.coneFov??120,this.coneFoveate=A.coneFoveate??.4,this.lodRaycast=A.lodRaycast===void 0?TE()?1e4:25e3:A.lodRaycast,this.lodRaycastIntervalMs=A.lodRaycastIntervalMs??500,this.clock=A.clock?_w(A.clock):new Vi;const D={extSplats:this.accumExtSplats,covSplats:this.covSplats};if(this.display=new aB(D),this.current=this.display,this.accumulators.push(new aB(D)),this.accumulators.push(new aB(D)),A.target){const{width:o,height:s,doubleBuffer:t,superXY:w,...a}=A.target,G=Math.max(1,Math.min(4,w??1));if(o*G>8192||s*G>8192)throw new Error("Target size too large");this.superXY=G;const r=o*G,c=s*G,y={format:Ng,type:ug,colorSpace:tE,...a};this.target=new sE(r,c,y),t&&(this.backTarget=new sE(r,c,y)),this.encodeLinear=A.encodeLinear??!0}}clone(A){const I=this.constructor;return new I({renderer:this.renderer})}static makeUniforms(){return{renderSize:{value:new JI},near:{value:.1},far:{value:1e3},renderToViewQuat:{value:new UI},renderToViewPos:{value:new q},renderToViewScale:{value:1},renderToViewBasis:{value:new VQ},renderToViewOffset:{value:new q},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},enable2DGS:{value:!1},lodInflate:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},encodeLinear:{value:!1},ordering:{type:"t",value:dA.emptyOrdering},enableExtSplats:{value:!1},enableCovSplats:{value:!1},extSplats:{type:"t",value:aB.emptyTexture},extSplats2:{type:"t",value:aB.emptyTexture},time:{value:0},deltaTime:{value:0},debugFlag:{value:!1}}}dispose(){this.target&&(this.target.dispose(),this.target=void 0),this.backTarget&&(this.backTarget.dispose(),this.backTarget=void 0),this.orderingTexture&&(this.orderingTexture.dispose(),this.orderingTexture=null);const A=new Set;A.add(this.display),A.add(this.current);for(const g of this.accumulators)A.add(g);for(const g of A)g.dispose();const I=this.lodInstances.values();this.lodInstances.clear();for(const g of I)g.texture.dispose();this.sortWorker&&(this.sortWorker.dispose(),this.sortWorker=null),this.lodWorker&&(this.lodWorker.dispose(),this.lodWorker=null),this.pager&&(this.pager.dispose(),this.pager=void 0)}setDirty(){var A;this.dirty||(this.dirty=!0,(A=this.onDirty)==null||A.call(this))}onBeforeRender(A,I,g){var Q;const C=dA.sparkOverride??this,i=A.info.render.frame,E=i!==C.lastFrame;if(C.lastFrame=i,C.target)C.renderSize.set(C.target.width,C.target.height);else{const w=A.getDrawingBufferSize(C.renderSize);if(A.xr.isPresenting&&w.x===1&&w.y===1){const a=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;a&&(w.x=a.framebufferWidth,w.y=a.framebufferHeight)}}this.uniforms.renderSize.value.copy(C.renderSize);const D=g;this.uniforms.near.value=D.near,this.uniforms.far.value=D.far;const o=this.geometry;o.instanceCount=C.activeSplats;const s=new fA;this.display.extSplats||s.makeTranslation(C.display.viewOrigin);const t=g.matrixWorld.clone().invert().multiply(s);if(t.decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,tC),this.uniforms.renderToViewScale.value=(tC.x+tC.y+tC.z)/3,this.uniforms.renderToViewBasis.value.setFromMatrix4(t),this.uniforms.maxStdDev.value=C.maxStdDev,this.uniforms.minPixelRadius.value=C.minPixelRadius,this.uniforms.maxPixelRadius.value=C.maxPixelRadius,this.uniforms.minAlpha.value=C.minAlpha,this.uniforms.enable2DGS.value=C.enable2DGS,this.uniforms.lodInflate.value=C.lodInflate,this.uniforms.preBlurAmount.value=C.preBlurAmount,this.uniforms.blurAmount.value=C.blurAmount,this.uniforms.focalDistance.value=C.focalDistance,this.uniforms.apertureAngle.value=C.apertureAngle,this.uniforms.falloff.value=C.falloff,this.uniforms.clipXY.value=C.clipXY,this.uniforms.focalAdjustment.value=C.focalAdjustment,this.uniforms.encodeLinear.value=C.encodeLinear,this.uniforms.ordering.value=C.orderingTexture??dA.emptyOrdering,this.uniforms.enableExtSplats.value=this.display.extSplats,this.uniforms.enableCovSplats.value=this.display.covSplats,this.display.extSplats){const w=C.display.getTextures();this.uniforms.extSplats.value=w[0],this.uniforms.extSplats2.value=w[1]}else{const w=C.display.getTextures();this.uniforms.extSplats.value=w[0],this.uniforms.extSplats2.value=w[0]}if(this.uniforms.time.value=C.display.time,this.uniforms.deltaTime.value=C.display.deltaTime,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,C.autoUpdate&&E){const w=C.preUpdate&&!A.xr.isPresenting,a=A.xr.isPresenting?A.xr.getCamera().cameras[0]??A.xr.getCamera():g;w?C.updateInternal({scene:I,camera:a,autoUpdate:!0}):C.updateTimeoutId===-1&&(C.updateTimeoutId=setTimeout(()=>{C.updateTimeoutId=-1,C.updateInternal({scene:I,camera:a,autoUpdate:!0})},1))}C.dirty=!1}clearSplats(){this.activeSplats=0,this.display.numSplats=0,this.setDirty()}async update({scene:A,camera:I}){await this.updateInternal({scene:A,camera:I,autoUpdate:!1})}async updateInternal({scene:A,camera:I,autoUpdate:g}){if(this.pauseWork)return;const Q=this.renderer,C=this.time??this.clock.getElapsedTime(),i=I.getWorldPosition(new q),E=I.getWorldDirection(new q),D=i.distanceTo(this.sortedCenter)>.001*uS(I)||E.dot(this.sortedDir)<.999,o=this.accumulators.pop();if(!o)throw new Error("No next accumulator");if(o===this.current)throw new Error("Next accumulator is the same as the current accumulator");const{version:s,mappingVersion:t,visibleGenerators:w,generate:a}=o.prepareGenerate({renderer:Q,scene:A,time:C,camera:I,sortRadial:this.sortRadial??!0,sortCullCos:this.sortCullHalfAngle<Math.PI?Math.cos(this.sortCullHalfAngle):-1,renderSize:this.renderSize,previous:this.current,lodInstances:this.enableLod?this.lodInstances:void 0});let G=!0;const r=t!==this.display.mappingVersion,c=D||s!==this.current.version||r;g&&!c&&(G=!1),r&&this.sorting&&(G=!1),G?(a(),this.flushAfterGenerate&&Q.getContext().flush(),this.display.mappingVersion===o.mappingVersion?(this.accumulators.push(this.display),this.display=o):this.display!==this.current&&this.accumulators.push(this.current),this.current=o,this.sortDirty=!0,this.setDirty()):this.accumulators.push(o),this.enableDriveLod&&this.driveLod({visibleGenerators:w,camera:I,scene:A}),await this.driveSort()}async driveSort(){if(this.sorting||!this.sortDirty)return;this.sortTimeoutId!==-1&&(clearTimeout(this.sortTimeoutId),this.sortTimeoutId=-1);const A=performance.now();let I=this.lastSortTime?this.lastSortTime+this.minSortIntervalMs:A;if(this.sortCullHalfAngle<Math.PI&&this.current){const t=this.current.viewDirection.dot(this.sortedDir),w=Math.max(.087,(this.sortCullHalfAngle-Math.PI/3)/3);t<Math.cos(w)&&(I=A)}if(A<I){this.sortTimeoutId=setTimeout(()=>{this.sortTimeoutId=-1,this.driveSort()},I-A);return}this.sorting=!0,this.sortDirty=!1,this.readPause>0&&await new Promise(t=>setTimeout(t,this.readPause));const g=this.current;this.sortedCenter.copy(g.viewOrigin),this.sortedDir.copy(g.viewDirection);const{numSplats:Q,maxSplats:C}=g,i=Math.max(1,Math.ceil(C/16384)),E=i*16384;this.maxSplats=Math.max(this.maxSplats,E);const D=this.ordering32.length===this.maxSplats?this.ordering32:new Uint32Array(this.maxSplats);this.ordering32=new Uint32Array(0);const o=oC.ensureBuffer(C,this.readback32);this.readback32=o,await this.readbackDepth({current:g,renderer:this.renderer,numSplats:Q,readback:o}),this.sortPause>0&&await new Promise(t=>setTimeout(t,this.sortPause)),this.sortWorker||(this.sortWorker=new go);const s=await this.sortWorker.call("sortSplats32",{numSplats:Q,readback:o,ordering:D});if(this.sortDelay>0&&await new Promise(t=>setTimeout(t,this.sortDelay)),this.readback32=s.readback,this.activeSplats=s.activeSplats,this.orderingTexture&&i>this.orderingTexture.image.height&&(this.orderingTexture.dispose(),this.orderingTexture=null),this.orderingTexture){this.ordering32=s.ordering;const t=this.renderer,w=t.getContext();if(!t.properties.has(this.orderingTexture))this.orderingTexture.needsUpdate=!0;else{const a=t.properties.get(this.orderingTexture).__webglTexture;if(!a)throw new Error("ordering texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,a),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,i,w.RGBA_INTEGER,w.UNSIGNED_INT,s.ordering),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=new cQ(s.ordering,4096,i,hA,oA);t.internalFormat="RGBA32UI",t.needsUpdate=!0,this.orderingTexture=t}this.current.mappingVersion===g.mappingVersion&&this.current.mappingVersion!==this.display.mappingVersion&&(this.accumulators.push(this.display),this.display=this.current),this.lastSortTime=performance.now(),this.sorting=!1,this.setDirty(),this.driveSort()}ensureLodWorker(){return this.lodWorker||(this.lodWorker=new go),this.lodWorker}defaultSplatTarget(){return jw()?5e5:zw()?75e4:Ww()?1e6:OE()?15e5:25e5}driveLod({visibleGenerators:A,camera:I,scene:g}){var Q,C;const i=this.defaultSplatTarget(),E=(this.lodSplatCount??i)*this.lodSplatScale;let D=0;if(I instanceof Wi)D=2*Math.tan(.5*I.fov*Math.PI/180)/this.renderSize.y;else if(I instanceof Xe){const c=(I.top-I.bottom)/I.zoom,y=(I.right-I.left)/I.zoom,R=c/Math.max(1,this.renderSize.y),S=y/Math.max(1,this.renderSize.x);D=Math.min(S,R)}D*=this.lodRenderScale;const o=new q,s=new UI,t=new q;this.current.viewToWorld.decompose(o,s,t);const w=(t.x+t.y+t.z)/3;if(this.lodPosOverride&&o.copy(this.lodPosOverride),this.lodQuatOverride&&s.copy(this.lodQuatOverride).normalize(),this.lastLod){(this.lastLod.pixelScaleLimit!==D||this.lastLod.maxSplats!==E)&&(this.lodDirty=!0);const c=o.distanceTo(this.lastLod.pos),y=Math.max(0,1-c/w),R=s.dot(this.lastLod.quat),S=Math.max(0,1-(1-R)/.01);y*S<.999&&(this.lodDirty=!0)}const a=this.enableLod?A.filter(c=>{var y,R;return c instanceof EQ&&(((y=c.packedSplats)==null?void 0:y.lodSplats)||((R=c.extSplats)==null?void 0:R.lodSplats)||c.paged)&&c.enableLod!==!1}):[],G=a.some(c=>c.paged);this.lodMeshes.length!==a.length?this.lodDirty=!0:a.some((c,y)=>c!==this.lodMeshes[y].mesh||c.version>this.lodMeshes[y].version)&&(this.lodDirty=!0),this.lodMeshes=a.map(c=>({mesh:c,version:c.version+1})),this.lodInitQueue=[];const r=performance.now();for(const c of a){const y=((Q=c.packedSplats)==null?void 0:Q.lodSplats)??((C=c.extSplats)==null?void 0:C.lodSplats)??c.paged;if(y){const R=this.lodIds.get(y);R?R.lastTouched=r:this.lodInitQueue.push(y)}}this.ensureLodWorker().tryExclusive(async c=>{if(G&&!this.pager){this.pager=new UQ({renderer:this.renderer,extSplats:this.pagedExtSplats,maxSplats:this.maxPagedSplats,numFetchers:this.numLodFetchers});const{lodId:y}=await c.call("newLodTree",{capacity:this.pager.maxSplats});this.pagerId=y}if(this.pager)for(const{mesh:y}of this.lodMeshes)y.paged&&!y.paged.pager&&(y.paged.pager=this.pager);if(this.lodInitQueue.length>0){const y=this.lodInitQueue;for(this.lodInitQueue=[];y.length>0;){const R=y.shift();R&&(await this.initLodTree(c,R),this.lodDirty=!0)}}if(this.pager){const y=this.pager.consumeLodTreeUpdates();for(const{splats:R,page:S,chunk:n,numSplats:N,lodTree:M}of y){const J=this.lodIds.get(R);J&&(M&&n===0&&(J.rootPage=S),this.lodUpdates.push({lodId:J.lodId,pageBase:S*this.pager.pageSplats,chunkBase:n*this.pager.pageSplats,count:N,lodTreeData:M}))}}if(this.lodUpdates.length>0){const y=this.lodUpdates;this.lodUpdates=[],await c.call("updateLodTrees",{ranges:y}),this.lodDirty=!0}if(this.lodDirty){const y=performance.now(),R=new q;if(this.lastLod){const S=Math.max(1,y-this.lastLod.timestamp);R.copy(o).sub(this.lastLod.pos).multiplyScalar(this.lastTraverseTime/S)}this.lastLod={pos:o,quat:s,pixelScaleLimit:D,maxSplats:E,timestamp:y},this.lodDirty=!1,await this.updateLodInstances(c,R,a,E,o,s,D),this.currentLod=this.lastLod,this.setDirty()}await this.cleanupLodTrees(c)})}async initLodTree(A,I){if(I instanceof Kg||I instanceof vg){const{lodId:g}=await A.call("initLodTree",{numSplats:I.numSplats??0,lodTree:I.extra.lodTree.slice()});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}else{const{lodId:g}=await A.call("newSharedLodTree",{lodId:this.pagerId});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}}async updateLodInstances(A,I,g,Q,C,i,E){const D=new Map,o=new fA().compose(C,i,new q().setScalar(1)),s=g.reduce((y,R)=>{var S,n;D.set(R.uuid,R);const N=R.matrixWorld.clone().invert().multiply(o),M=((S=R.packedSplats)==null?void 0:S.lodSplats)??((n=R.extSplats)==null?void 0:n.lodSplats)??R.paged;if(!M)return y;const J=this.lodIds.get(M);return!J||this.pager&&R.paged&&J.rootPage===void 0||(y[R.uuid]={instanceId:R.uuid,lodId:J.lodId,rootPage:J.rootPage,viewToObjectCols:N.elements,lodScale:R.lodScale,behindFoveate:R.behindFoveate??this.behindFoveate,coneFov0:R.coneFov0??this.coneFov0,coneFov:R.coneFov??this.coneFov,coneFoveate:R.coneFoveate??this.coneFoveate}),y},{}),t=performance.now(),w=await A.call("traverseLodTrees",{maxSplats:Q,pixelScaleLimit:E,lastPixelLimit:this.lastPixelLimit,instances:s});this.lastTraverseTime=performance.now()-t;const{keyIndices:a,chunks:G,pixelLimit:r}=w;this.lastPixelLimit=r;const c=Object.values(a).reduce((y,{numSplats:R})=>y+R,0);if(this.updateLodIndices(D,a),this.pager){this.pager.processUploads();const y=g.map(R=>{if(!R.paged||!this.pager)return null;const S=R.getWorldPosition(new q);return{splats:R.paged,distance:S.distanceTo(C)}}).filter(R=>R!==null);!this.pageSizeWarning&&y.length>this.pager.maxPages&&(this.pageSizeWarning=!0,console.warn(`# paged SplatMeshes exceeds maxPages: ${y.length} > ${this.pager.maxPages}`)),y.sort((R,S)=>R.distance-S.distance),this.pager.fetchPriority=y.map(({splats:R})=>({splats:R,chunk:0}));for(const[R,S]of G){const n=this.lodIdToSplats.get(R);n instanceof wC&&S!==0&&this.pager.fetchPriority.push({splats:n,chunk:S})}this.pager.autoDrive=this.enableLodFetching,this.enableLodFetching&&this.pager.driveFetchers()}if(this.lodRaycast&&performance.now()-this.lastLodRaycastTime>=this.lodRaycastIntervalMs){this.lastLodRaycastTime=performance.now();const y=performance.now(),R=await A.call("traverseLodTrees",{maxSplats:Math.min(this.lodRaycast,Math.round(c*.1)),pixelScaleLimit:E,instances:s});performance.now()-y;const{keyIndices:S}=R;Object.values(S).reduce((n,{numSplats:N})=>n+N,0);for(const[n,N]of Object.entries(S)){const M=D.get(n);M.raycastIndices=N}}}async cleanupLodTrees(A){const I=performance.now();let g=null;for(const[Q,C]of this.lodIds.entries())(g==null||C.lastTouched<g.lastTouched)&&(g={splats:Q,lastTouched:C.lastTouched,lodId:C.lodId});if(!(!g||g.lastTouched>I-3e3)){this.lodIds.delete(g.splats),this.lodIdToSplats.delete(g.lodId);for(const[Q,C]of this.lodInstances.entries())C.lodId===g.lodId&&(C.texture.dispose(),this.lodInstances.delete(Q));await A.call("disposeLodTree",{lodId:g.lodId})}}updateLodIndices(A,I){for(const[g,Q]of Object.entries(I)){const{lodId:C,numSplats:i,indices:E}=Q,D=A.get(g);if(D.paged)D.paged.update(i,E);else{let o=this.lodInstances.get(D);o&&E.length>o.indices.length&&(o.texture.dispose(),o=void 0);const s=Math.ceil(E.length/16384);if(o){o.numSplats=i;const t=this.renderer,w=t.getContext();if(t.properties.has(o.texture)){const a=t.properties.get(o.texture).__webglTexture;if(!a)throw new Error("lodIndices texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,a),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,s,w.RGBA_INTEGER,w.UNSIGNED_INT,E),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=s*16384;if(E.length!==t)throw new Error("Indices length != capacity");const w=new cQ(E,4096,s,hA,oA);w.internalFormat="RGBA32UI",w.needsUpdate=!0,o={lodId:C,numSplats:i,indices:E,texture:w},this.lodInstances.set(D,o)}}D.updateMappingVersion()}}async readbackDepth({current:A,renderer:I,numSplats:g,readback:Q}){if(!I)throw new Error("No renderer");if(!A.target)throw new Error("No target");const C=Math.ceil(g/_)*_;if(Q.byteLength<C*4)throw new Error(`Readback buffer too small: ${Q.byteLength} < ${C*4}`);const i=new Uint8Array(Q.buffer),E=this.saveRenderState(I),D=_*Gg;let o=0;const s=[];for(;o<g;){const t=Math.floor(o/D),w=t*D,a=Math.min(Gg,Math.ceil((g-w)/_)),G=_*a*4,r=i.subarray(w*4,w*4+G);I.setRenderTarget(A.target,t);const c=I.readRenderTargetPixelsAsync(A.target,0,0,_,a,r,void 0,A.extSplats?2:1);s.push(c),this.flushAfterRead&&I.getContext().flush(),o+=_*a}return this.resetRenderState(I,E),Promise.all(s).then(()=>Q)}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}render(A,I){try{dA.sparkOverride=this,this.renderer.render(A,I)}finally{dA.sparkOverride=void 0}}renderTarget({scene:A,camera:I}){const g=this.backTarget??this.target;if(!g)throw new Error("No target");const Q=this.renderer.getRenderTarget();try{this.renderer.setRenderTarget(g),dA.sparkOverride=this,this.renderer.render(A,I)}finally{dA.sparkOverride=void 0,this.renderer.setRenderTarget(Q)}return g!==this.target&&([this.target,this.backTarget]=[this.backTarget,this.target]),g}async readTarget(){if(!this.target)throw new Error("Must initialize with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g));const Q=this.superPixels;await this.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,Q);const{superXY:C}=this;if(C===1)return Q;const i=A/C,E=I/C,D=i*E*4;(!this.targetPixels||this.targetPixels.length<D)&&(this.targetPixels=new Uint8Array(D));const o=this.targetPixels,s=C*C;for(let t=0;t<E;t++){const w=t*i;for(let a=0;a<i;a++){const G=a*C;let r=0,c=0,y=0,R=0;for(let n=0;n<C;n++){const N=(t*C+n)*A;for(let M=0;M<C;M++){const J=(N+G+M)*4;r+=Q[J],c+=Q[J+1],y+=Q[J+2],R+=Q[J+3]}}const S=(w+a)*4;o[S]=r/s,o[S+1]=c/s,o[S+2]=y/s,o[S+3]=R/s}}return o}async renderReadTarget({scene:A,camera:I}){return this.renderTarget({scene:A,camera:I}),this.readTarget()}async renderCubeMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:i=[],update:E=!0,filter:D=!1}){if(!dA.cubeRender||dA.cubeRender.target.width!==g||dA.cubeRender.near!==Q||dA.cubeRender.far!==C){dA.cubeRender&&dA.cubeRender.target.dispose();const w=new Ns(g,{format:Ng,type:ug,generateMipmaps:D,minFilter:D?Js:Ms,magFilter:Ms,colorSpace:D?ve:tE}),a=new Us(Q,C,w);dA.cubeRender={target:w,cubeCamera:a,near:Q,far:C}}const{target:o,cubeCamera:s}=dA.cubeRender;s.position.copy(I);const t=new Map;for(const w of i)t.set(w,w.visible),w.visible=!1;if(E){const w=new Ze;w.position.copy(I),await this.update({scene:A,camera:w})}try{dA.sparkOverride=this,s.update(this.renderer,A)}finally{dA.sparkOverride=void 0}for(const[w,a]of t.entries())w.visible=a;return o.texture}async readCubeTargets(){if(!dA.cubeRender)throw new Error("No cube render");const A=dA.cubeRender.target.texture,I=[],g=[];for(let Q=0;Q<A.images.length;++Q){const{width:C,height:i}=A.images[Q],E=C*i*4,D=new Uint8Array(E);g.push(D);const o=this.renderer.readRenderTargetPixelsAsync(dA.cubeRender.target,0,0,C,i,D,Q);I.push(o)}return await Promise.all(I),g}async renderEnvMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:i=[],update:E=!0}){var D;const o=await this.renderCubeMap({scene:A,worldCenter:I,size:g,near:Q,far:C,hideObjects:i,update:E,filter:!0});return dA.pmrem||(dA.pmrem=new Ls(this.renderer)),(D=dA.pmrem)==null?void 0:D.fromCubemap(o).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof IQ)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof lB&&(Q.envMap=I);else g.material instanceof lB&&(g.material.envMap=I)})}async getLodTreeLevel(A,I,g=!1){var Q,C;const i=this.lodInstances.get(A);if(!i)return null;const E=await this.ensureLodWorker().exclusive(async D=>await D.call("getLodTreeLevel",{lodId:i.lodId,level:I}));if((Q=A.packedSplats)!=null&&Q.lodSplats){const D=A.packedSplats.lodSplats.extractSplats(E.indices,g);return new EQ({packedSplats:D})}if((C=A.extSplats)!=null&&C.lodSplats){const D=A.extSplats.lodSplats.extractSplats(E.indices,g);return new EQ({extSplats:D})}throw new Error("Only LoD-enabled PackedSplats and ExtSplats are supported")}get premultipliedAlpha(){return this.material.premultipliedAlpha}set premultipliedAlpha(A){this.material.premultipliedAlpha!==A&&(this.material.premultipliedAlpha=A,this.material.needsUpdate=!0)}};gi.emptyOrdering=(()=>{const B=new Uint32Array(16384),A=new cQ(B,4096,1);return A.format=hA,A.type=oA,A.internalFormat="RGBA32UI",A.needsUpdate=!0,A})(),gi.cubeRender=null,gi.pmrem=null;let bS=gi;class wC{constructor(A){var I;if(this.shCodesSent=new WeakMap,this.pager=A.pager,this.rootUrl=A.rootUrl??"",this.requestHeader=A.requestHeader,this.withCredentials=A.withCredentials,this.numSh=0,this.maxSh=((I=A.pager)==null?void 0:I.maxSh)??3,this.numSplats=0,this.dynoNumSplats=new Og({value:0}),this.dynoIndices=new ea({value:UQ.emptyIndicesTexture}),this.rgbMinMaxLnScaleMinMax=new QC({value:new MI(0,1,uI,bI)}),this.lodOpacity=new gC({value:!1}),this.dynoNumSh=new Og({value:0}),this.shMax=new Xg({value:new q}),this.fileBytes=A.fileBytes,this.fileType=A.fileType,!this.fileType&&this.fileBytes&&(this.fileType=fa(this.fileBytes)),!this.fileType&&this.rootUrl&&(this.fileType=OS(this.rootUrl)),!this.fileType)throw new Error("Unable to determine file type");this.fileType===mI.RAD&&(this.radMetaPromise=this.getRadMeta())}dispose(){this.dynoIndices.value!==UQ.emptyIndicesTexture&&(this.dynoIndices.value.dispose(),this.dynoIndices.value=UQ.emptyIndicesTexture)}setMaxSh(A){this.maxSh=A}getRadMeta(){return this.radMetaPromise?this.radMetaPromise:(this.radMetaPromise=(async()=>{if(await mS,this.fileBytes){const A=Sa(this.fileBytes.slice(0,1048576));if(A)return A;throw new Error("Failed to decode RAD header")}if(!this.rootUrl)throw new Error("No url or fileBytes provided");for(const A of[65536,256*1024,1024*1024]){const I=await eo({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:0,bytes:A}),g=Sa(I);if(g)return g}throw new Error("Failed to decode RAD header")})().then(A=>A),this.radMetaPromise.catch(A=>{console.error(A)}),this.radMetaPromise)}chunkUrl(A){return this.rootUrl.replace(/-lod-0\./,`-lod-${A}.`)}async fetchDecodeChunk(A){let I;if(this.fileType===mI.RAD){const{meta:g,chunksStart:Q}=await this.getRadMeta();if(A<0||A>=g.chunks.length)throw new Error(`Chunk index out of range: ${A} (max: ${g.chunks.length-1})`);let{offset:C,bytes:i,filename:E}=g.chunks[A];if(E){if(this.fileBytes)throw new Error("Chunked RAD file not supported with fileBytes");const D=new URL(this.rootUrl,window.location.href).toString(),o=new URL(E,D).toString();I=await eo({url:o,requestHeader:this.requestHeader,withCredentials:this.withCredentials})}else if(C+=Q,this.fileBytes){if(C<0||C+i>this.fileBytes.length)throw new Error(`Invalid chunk offset or bytes: ${C} + ${i} > ${this.fileBytes.length}`);I=this.fileBytes.slice(C,C+i)}else if(this.rootUrl)I=await eo({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:C,bytes:i});else throw new Error("No url or fileBytes provided")}else if(!this.fileBytes)if(this.rootUrl){const g=this.chunkUrl(A),Q=new Request(g,{headers:this.requestHeader?new Headers(this.requestHeader):void 0,credentials:this.withCredentials?"include":"same-origin"}),C=await fetch(Q);if(!C.ok||!C.body)throw new Error(`Failed to fetch "${g}": ${C.status} ${C.statusText}`);I=new Uint8Array(await C.arrayBuffer())}else throw new Error("No url or fileBytes provided");return await vE.withWorker(async g=>{var Q,C,i,E,D;if(!this.pager)throw new Error("PagedSplats.pager not set");const o={sh1:this.sh1Codes,sh2:this.sh2Codes,sh3:this.sh3Codes},s=this.shCodesSent.get(g),t=!s||s.sh1!==o.sh1||s.sh2!==o.sh2||s.sh3!==o.sh3,w=()=>{t&&this.shCodesSent.set(g,o)};if(!this.pager.extSplats){const c=await g.call("loadPackedSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(Q=o.sh1)==null?void 0:Q.slice():void 0,sh2Codes:t?(C=o.sh2)==null?void 0:C.slice():void 0,sh3Codes:t?(i=o.sh3)==null?void 0:i.slice():void 0});w();const y=c.lodSplats;return this.splatEncoding||(this.splatEncoding=y.splatEncoding,this.numSh=y.extra.sh3?3:y.extra.sh2?2:y.extra.sh1?1:0,this.rgbMinMaxLnScaleMinMax.value.set(this.splatEncoding.rgbMin??0,this.splatEncoding.rgbMax??1,this.splatEncoding.lnScaleMin??uI,this.splatEncoding.lnScaleMax??bI),this.lodOpacity.value=this.splatEncoding.lodOpacity??!1,this.shMax.value.set(this.splatEncoding.sh1Max??1,this.splatEncoding.sh2Max??1,this.splatEncoding.sh3Max??1)),this.sh1Codes=y.extra.sh1Codes??this.sh1Codes,this.sh2Codes=y.extra.sh2Codes??this.sh2Codes,this.sh3Codes=y.extra.sh3Codes??this.sh3Codes,y}const a=o.sh3,G=await g.call("loadExtSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(E=o.sh1)==null?void 0:E.slice():void 0,sh2Codes:t?(D=o.sh2)==null?void 0:D.slice():void 0,sh3Codes:t&&a?[a[0].slice(),a[1].slice()]:void 0});w();const r=G.lodSplats;return this.splatEncoding||(this.splatEncoding=xE,this.numSh=r.extra.sh3a&&r.extra.sh3b?3:r.extra.sh2?2:r.extra.sh1?1:0),this.sh1Codes=r.extra.sh1Codes??this.sh1Codes,this.sh2Codes=r.extra.sh2Codes??this.sh2Codes,this.sh3Codes=r.extra.sh3Codes??this.sh3Codes,r})}update(A,I){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.renderer;this.numSplats=A,this.dynoNumSplats.value=this.numSplats;const Q=Math.ceil(A/16384);let C=this.dynoIndices.value===UQ.emptyIndicesTexture?void 0:this.dynoIndices.value;if(C&&Q>C.image.height&&(C.dispose(),C=void 0),!C)C=new cQ(I,4096,Q,hA,oA),C.internalFormat="RGBA32UI",C.needsUpdate=!0,g.initTexture(C),this.dynoIndices.value=C;else{C.image.data.set(I.subarray(0,A));const i=g.getContext();g.state.activeTexture(i.TEXTURE0),g.state.bindTexture(i.TEXTURE_2D,Ya(g,C)),i.bindBuffer(i.PIXEL_UNPACK_BUFFER,null),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.texSubImage2D(i.TEXTURE_2D,0,0,0,4096,Q,i.RGBA_INTEGER,i.UNSIGNED_INT,I),g.state.bindTexture(i.TEXTURE_2D,null)}}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return this.pager?Math.min(this.numSh,this.pager.maxSh)>0:!1}getNumSh(){return this.numSh}fetchSplat({index:A,viewOrigin:I}){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.readIndex.apply({index:A,numSplats:this.dynoNumSplats,indices:this.dynoIndices}).index;return this.pager.extSplats?this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatExtDir.apply({index:g,viewOrigin:I,numSh:this.dynoNumSh}).gsplat):this.pager.readSplatExt.apply({index:g}).gsplat:this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatDir.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity,viewOrigin:I,numSh:this.dynoNumSh,shMax:this.shMax}).gsplat):this.pager.readSplat.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity}).gsplat}forEachSplat(A){if(!this.pager||!this.numSplats)return;const I=this.pager.extSplats,g=this.dynoIndices.value.image.data,Q=this.pager.packedTexture.value.image.data,C=this.pager.extTexture.value.image.data,i=[Q,C];for(let E=0;E<this.numSplats;++E){const D=g[E],o=I?_D(i,D):PE(Q,D,this.splatEncoding);A(E,o.center,o.scales,o.quaternion,o.opacity,o.color)}}}const bA=class GA{constructor(A){this.fetchPause=0,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=[],this.renderer=A.renderer,this.extSplats=A.extSplats??!1,this.pageSplats=65536,this.maxSplats=A.maxSplats??16777216,this.maxPages=Math.ceil(this.maxSplats/this.pageSplats),this.maxSplats=this.maxPages*this.pageSplats,this.maxSh=A.maxSh??3,this.curSh=0,this.autoDrive=A.autoDrive??!0,this.numFetchers=A.numFetchers??3,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=new Array(this.maxPages),this.pageFreelist=Array.from({length:this.maxPages},(I,g)=>g),this.pageLru=new Set,this.freeablePages=[],this.newUploads=[],this.readyUploads=[],this.lodTreeUpdates=[],this.fetchers=[],this.fetched=[],this.fetchPriority=[],this.packedTexture=new dI({value:this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI")}),this.extTexture=new dI({value:this.extSplats?this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI"):GA.emptyExtTexture}),this.sh1Texture=new dI({value:this.extSplats?GA.emptyExtSh1Texture:GA.emptySh1Texture}),this.sh2Texture=new dI({value:this.extSplats?GA.emptyExtSh2Texture:GA.emptySh2Texture}),this.sh3Texture=new dI({value:this.extSplats?GA.emptyExtSh3Texture:GA.emptySh3Texture}),this.sh3TextureB=new dI({value:GA.emptyExtSh3BTexture}),this.readIndex=wI({index:"int",numSplats:"int",indices:"usampler2D"},{index:"int"},({index:I,numSplats:g,indices:Q})=>new tA({inTypes:{index:"int",numSplats:"int",indices:"usampler2D"},outTypes:{index:"int"},inputs:{index:I,numSplats:g,indices:Q},statements:({inputs:C,outputs:i})=>FA(`
|
|
12715
|
+
`)}).outputs.rgba8}));return await N.renderReadback({reader:H,count:this.numSplats*J,renderer:A,readback:L})}}}checkVersions(A){if(this.mapping.length!==A.length)return{splatsUpdated:!0,mappingUpdated:!0};const I=this.mapping.some((g,Q)=>{const C=A[Q];return g.node!==C.node||g.base!==C.base||g.count!==C.count||g.mappingVersion!==C.mappingVersion});return I?{splatsUpdated:!0,mappingUpdated:!0}:{splatsUpdated:this.mapping.some((g,Q)=>g.version!==A[Q].version),mappingUpdated:I}}};VI.viewCenterUniform=new Xg({value:new q}),VI.viewDirUniform=new Xg({value:new q}),VI.sortRadialUniform=new QC({value:!0}),VI.sortCullCosUniform=new DB({value:-1}),VI.emptyTexture=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),VI.emptyTextures=[VI.emptyTexture,VI.emptyTexture],VI.programExtTemplate=new WE(sB().computeUvec4x2Vec4Template),VI.programTemplate=new WE(sB().computeUvec4Vec4Template),VI.generatorProgram=new WeakMap,VI.fullScreenQuad=new _i(new aE({visible:!1}));let aB=VI;class PS extends vi{constructor(){super(),this.setAttribute("position",new iI(TS,3)),this.setIndex(new iI(OS,1))}}const TS=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),OS=new Uint16Array([0,1,2,0,2,3]),wC=new q;function XS(B){const A=B.getWorldScale(wC);return(A.x+A.y+A.z)/3}const Qi=class KA extends IQ{constructor(A){if(!A)throw new Error("SparkRenderer options are required");if(!A.renderer)throw new Error("renderer is required in SparkRenderer options");const I=KA.makeUniforms();Object.assign(I,A.extraUniforms??{});const g=sB(),Q=A.premultipliedAlpha??!0,C=new PS,i=new vQ({glslVersion:Vi,vertexShader:A.vertexShader??g.splatVertex,fragmentShader:A.fragmentShader??g.splatFragment,uniforms:I,premultipliedAlpha:Q,transparent:A.transparent??!0,depthTest:A.depthTest??!0,depthWrite:A.depthWrite??!1,side:KB,allowOverride:!1});super(C,i),this.renderSize=new JI,this.lastFrame=-1,this.updateTimeoutId=-1,this.orderingTexture=null,this.maxSplats=0,this.activeSplats=0,this.accumulators=[],this.sorting=!1,this.sortDirty=!1,this.lastSortTime=0,this.sortWorker=null,this.sortTimeoutId=-1,this.sortedCenter=new q().setScalar(Number.NEGATIVE_INFINITY),this.sortedDir=new q().setScalar(0),this.sortCullHalfAngle=Math.PI,this.readback32=new Uint32Array(0),this.ordering32=new Uint32Array(0),this.pauseWork=!1,this.lastLodRaycastTime=0,this.lodWorker=null,this.lodMeshes=[],this.lodDirty=!1,this.lodIds=new Map,this.lodIdToSplats=new Map,this.lodInitQueue=[],this.lodInstances=new Map,this.lodUpdates=[],this.lastTraverseTime=0,this.pagerId=0,this.superXY=1,this.flushAfterGenerate=!1,this.flushAfterRead=!1,this.readPause=1,this.sortPause=0,this.sortDelay=0,this.pageSizeWarning=!1,this.material=i,this.uniforms=I,this.frustumCulled=!1,this.renderer=A.renderer,this.onDirty=A.onDirty,this.dirty=!0,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!0,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.accumExtSplats=A.accumExtSplats??!1,this.covSplats=A.covSplats??!1,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.encodeLinear=A.encodeLinear??!1,this.sortRadial=A.sortRadial??!0,this.sortCullHalfAngle=A.sortCullHalfAngle??Math.PI,this.minSortIntervalMs=A.minSortIntervalMs??0,this.enableLod=A.enableLod??!0,this.enableDriveLod=A.enableDriveLod??this.enableLod,this.enableLodFetching=A.enableLodFetching??!0,this.lodSplatCount=A.lodSplatCount,this.lodSplatScale=A.lodSplatScale??1,this.lodRenderScale=A.lodRenderScale??1,this.lodInflate=A.lodInflate??!1,this.pagedExtSplats=A.pagedExtSplats??!1;const E=OE()?XE()?96:128:256;this.maxPagedSplats=A.maxPagedSplats??E*65536,this.numLodFetchers=A.numLodFetchers??3,this.behindFoveate=A.behindFoveate??.2,this.coneFov0=A.coneFov0??90,this.coneFov=A.coneFov??120,this.coneFoveate=A.coneFoveate??.4,this.lodRaycast=A.lodRaycast===void 0?OE()?1e4:25e3:A.lodRaycast,this.lodRaycastIntervalMs=A.lodRaycastIntervalMs??500,this.clock=A.clock?Ea(A.clock):new Wi;const D={extSplats:this.accumExtSplats,covSplats:this.covSplats};if(this.display=new aB(D),this.current=this.display,this.accumulators.push(new aB(D)),this.accumulators.push(new aB(D)),A.target){const{width:o,height:s,doubleBuffer:t,superXY:w,...a}=A.target,G=Math.max(1,Math.min(4,w??1));if(o*G>8192||s*G>8192)throw new Error("Target size too large");this.superXY=G;const S=o*G,c=s*G,y={format:Mg,type:ug,colorSpace:wE,...a};this.target=new tE(S,c,y),t&&(this.backTarget=new tE(S,c,y)),this.encodeLinear=A.encodeLinear??!0}}clone(A){const I=this.constructor;return new I({renderer:this.renderer})}static makeUniforms(){return{renderSize:{value:new JI},near:{value:.1},far:{value:1e3},renderToViewQuat:{value:new UI},renderToViewPos:{value:new q},renderToViewScale:{value:1},renderToViewBasis:{value:new VQ},renderToViewOffset:{value:new q},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},enable2DGS:{value:!1},lodInflate:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},encodeLinear:{value:!1},ordering:{type:"t",value:KA.emptyOrdering},enableExtSplats:{value:!1},enableCovSplats:{value:!1},extSplats:{type:"t",value:aB.emptyTexture},extSplats2:{type:"t",value:aB.emptyTexture},time:{value:0},deltaTime:{value:0},debugFlag:{value:!1}}}dispose(){this.target&&(this.target.dispose(),this.target=void 0),this.backTarget&&(this.backTarget.dispose(),this.backTarget=void 0),this.orderingTexture&&(this.orderingTexture.dispose(),this.orderingTexture=null);const A=new Set;A.add(this.display),A.add(this.current);for(const g of this.accumulators)A.add(g);for(const g of A)g.dispose();const I=this.lodInstances.values();this.lodInstances.clear();for(const g of I)g.texture.dispose();this.sortWorker&&(this.sortWorker.dispose(),this.sortWorker=null),this.lodWorker&&(this.lodWorker.dispose(),this.lodWorker=null),this.pager&&(this.pager.dispose(),this.pager=void 0)}setDirty(){var A;this.dirty||(this.dirty=!0,(A=this.onDirty)==null||A.call(this))}onBeforeRender(A,I,g){var Q;const C=KA.sparkOverride??this,i=A.info.render.frame,E=i!==C.lastFrame;if(C.lastFrame=i,C.target)C.renderSize.set(C.target.width,C.target.height);else{const w=A.getDrawingBufferSize(C.renderSize);if(A.xr.isPresenting&&w.x===1&&w.y===1){const a=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;a&&(w.x=a.framebufferWidth,w.y=a.framebufferHeight)}}this.uniforms.renderSize.value.copy(C.renderSize);const D=g;this.uniforms.near.value=D.near,this.uniforms.far.value=D.far;const o=this.geometry;o.instanceCount=C.activeSplats;const s=new fA;this.display.extSplats||s.makeTranslation(C.display.viewOrigin);const t=g.matrixWorld.clone().invert().multiply(s);if(t.decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,wC),this.uniforms.renderToViewScale.value=(wC.x+wC.y+wC.z)/3,this.uniforms.renderToViewBasis.value.setFromMatrix4(t),this.uniforms.maxStdDev.value=C.maxStdDev,this.uniforms.minPixelRadius.value=C.minPixelRadius,this.uniforms.maxPixelRadius.value=C.maxPixelRadius,this.uniforms.minAlpha.value=C.minAlpha,this.uniforms.enable2DGS.value=C.enable2DGS,this.uniforms.lodInflate.value=C.lodInflate,this.uniforms.preBlurAmount.value=C.preBlurAmount,this.uniforms.blurAmount.value=C.blurAmount,this.uniforms.focalDistance.value=C.focalDistance,this.uniforms.apertureAngle.value=C.apertureAngle,this.uniforms.falloff.value=C.falloff,this.uniforms.clipXY.value=C.clipXY,this.uniforms.focalAdjustment.value=C.focalAdjustment,this.uniforms.encodeLinear.value=C.encodeLinear,this.uniforms.ordering.value=C.orderingTexture??KA.emptyOrdering,this.uniforms.enableExtSplats.value=this.display.extSplats,this.uniforms.enableCovSplats.value=this.display.covSplats,this.display.extSplats){const w=C.display.getTextures();this.uniforms.extSplats.value=w[0],this.uniforms.extSplats2.value=w[1]}else{const w=C.display.getTextures();this.uniforms.extSplats.value=w[0],this.uniforms.extSplats2.value=w[0]}if(this.uniforms.time.value=C.display.time,this.uniforms.deltaTime.value=C.display.deltaTime,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,C.autoUpdate&&E){const w=C.preUpdate&&!A.xr.isPresenting,a=A.xr.isPresenting?A.xr.getCamera().cameras[0]??A.xr.getCamera():g;w?C.updateInternal({scene:I,camera:a,autoUpdate:!0}):C.updateTimeoutId===-1&&(C.updateTimeoutId=setTimeout(()=>{C.updateTimeoutId=-1,C.updateInternal({scene:I,camera:a,autoUpdate:!0})},1))}C.dirty=!1}clearSplats(){this.activeSplats=0,this.display.numSplats=0,this.setDirty()}async update({scene:A,camera:I}){await this.updateInternal({scene:A,camera:I,autoUpdate:!1})}async updateInternal({scene:A,camera:I,autoUpdate:g}){if(this.pauseWork)return;const Q=this.renderer,C=this.time??this.clock.getElapsedTime(),i=I.getWorldPosition(new q),E=I.getWorldDirection(new q),D=i.distanceTo(this.sortedCenter)>.001*XS(I)||E.dot(this.sortedDir)<.999,o=this.accumulators.pop();if(!o)throw new Error("No next accumulator");if(o===this.current)throw new Error("Next accumulator is the same as the current accumulator");const{version:s,mappingVersion:t,visibleGenerators:w,generate:a}=o.prepareGenerate({renderer:Q,scene:A,time:C,camera:I,sortRadial:this.sortRadial??!0,sortCullCos:this.sortCullHalfAngle<Math.PI?Math.cos(this.sortCullHalfAngle):-1,renderSize:this.renderSize,previous:this.current,lodInstances:this.enableLod?this.lodInstances:void 0});let G=!0;const S=t!==this.display.mappingVersion,c=D||s!==this.current.version||S;g&&!c&&(G=!1),S&&this.sorting&&(G=!1),G?(a(),this.flushAfterGenerate&&Q.getContext().flush(),this.display.mappingVersion===o.mappingVersion?(this.accumulators.push(this.display),this.display=o):this.display!==this.current&&this.accumulators.push(this.current),this.current=o,this.sortDirty=!0,this.setDirty()):this.accumulators.push(o),this.enableDriveLod&&this.driveLod({visibleGenerators:w,camera:I,scene:A}),await this.driveSort()}async driveSort(){if(this.sorting||!this.sortDirty)return;this.sortTimeoutId!==-1&&(clearTimeout(this.sortTimeoutId),this.sortTimeoutId=-1);const A=performance.now();let I=this.lastSortTime?this.lastSortTime+this.minSortIntervalMs:A;if(this.sortCullHalfAngle<Math.PI&&this.current){const t=this.current.viewDirection.dot(this.sortedDir),w=Math.max(.087,(this.sortCullHalfAngle-Math.PI/3)/3);t<Math.cos(w)&&(I=A)}if(A<I){this.sortTimeoutId=setTimeout(()=>{this.sortTimeoutId=-1,this.driveSort()},I-A);return}this.sorting=!0,this.sortDirty=!1,this.readPause>0&&await new Promise(t=>setTimeout(t,this.readPause));const g=this.current;this.sortedCenter.copy(g.viewOrigin),this.sortedDir.copy(g.viewDirection);const{numSplats:Q,maxSplats:C}=g,i=Math.max(1,Math.ceil(C/16384)),E=i*16384;this.maxSplats=Math.max(this.maxSplats,E);const D=this.ordering32.length===this.maxSplats?this.ordering32:new Uint32Array(this.maxSplats);this.ordering32=new Uint32Array(0);const o=sC.ensureBuffer(C,this.readback32);this.readback32=o,await this.readbackDepth({current:g,renderer:this.renderer,numSplats:Q,readback:o}),this.sortPause>0&&await new Promise(t=>setTimeout(t,this.sortPause)),this.sortWorker||(this.sortWorker=new Co);const s=await this.sortWorker.call("sortSplats32",{numSplats:Q,readback:o,ordering:D});if(this.sortDelay>0&&await new Promise(t=>setTimeout(t,this.sortDelay)),this.readback32=s.readback,this.activeSplats=s.activeSplats,this.orderingTexture&&i>this.orderingTexture.image.height&&(this.orderingTexture.dispose(),this.orderingTexture=null),this.orderingTexture){this.ordering32=s.ordering;const t=this.renderer,w=t.getContext();if(!t.properties.has(this.orderingTexture))this.orderingTexture.needsUpdate=!0;else{const a=t.properties.get(this.orderingTexture).__webglTexture;if(!a)throw new Error("ordering texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,a),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,i,w.RGBA_INTEGER,w.UNSIGNED_INT,s.ordering),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=new cQ(s.ordering,4096,i,hA,oA);t.internalFormat="RGBA32UI",t.needsUpdate=!0,this.orderingTexture=t}this.current.mappingVersion===g.mappingVersion&&this.current.mappingVersion!==this.display.mappingVersion&&(this.accumulators.push(this.display),this.display=this.current),this.lastSortTime=performance.now(),this.sorting=!1,this.setDirty(),this.driveSort()}ensureLodWorker(){return this.lodWorker||(this.lodWorker=new Co),this.lodWorker}defaultSplatTarget(){return Ba()?5e5:Ca()?75e4:Qa()?1e6:XE()?15e5:25e5}driveLod({visibleGenerators:A,camera:I,scene:g}){var Q,C;const i=this.defaultSplatTarget(),E=(this.lodSplatCount??i)*this.lodSplatScale;let D=0;if(I instanceof ji)D=2*Math.tan(.5*I.fov*Math.PI/180)/this.renderSize.y;else if(I instanceof $e){const c=(I.top-I.bottom)/I.zoom,y=(I.right-I.left)/I.zoom,F=c/Math.max(1,this.renderSize.y),R=y/Math.max(1,this.renderSize.x);D=Math.min(R,F)}D*=this.lodRenderScale;const o=new q,s=new UI,t=new q;this.current.viewToWorld.decompose(o,s,t);const w=(t.x+t.y+t.z)/3;if(this.lodPosOverride&&o.copy(this.lodPosOverride),this.lodQuatOverride&&s.copy(this.lodQuatOverride).normalize(),this.lastLod){(this.lastLod.pixelScaleLimit!==D||this.lastLod.maxSplats!==E)&&(this.lodDirty=!0);const c=o.distanceTo(this.lastLod.pos),y=Math.max(0,1-c/w),F=s.dot(this.lastLod.quat),R=Math.max(0,1-(1-F)/.01);y*R<.999&&(this.lodDirty=!0)}const a=this.enableLod?A.filter(c=>{var y,F;return c instanceof EQ&&(((y=c.packedSplats)==null?void 0:y.lodSplats)||((F=c.extSplats)==null?void 0:F.lodSplats)||c.paged)&&c.enableLod!==!1}):[],G=a.some(c=>c.paged);this.lodMeshes.length!==a.length?this.lodDirty=!0:a.some((c,y)=>c!==this.lodMeshes[y].mesh||c.version>this.lodMeshes[y].version)&&(this.lodDirty=!0),this.lodMeshes=a.map(c=>({mesh:c,version:c.version+1})),this.lodInitQueue=[];const S=performance.now();for(const c of a){const y=((Q=c.packedSplats)==null?void 0:Q.lodSplats)??((C=c.extSplats)==null?void 0:C.lodSplats)??c.paged;if(y){const F=this.lodIds.get(y);F?F.lastTouched=S:this.lodInitQueue.push(y)}}this.ensureLodWorker().tryExclusive(async c=>{if(G&&!this.pager){this.pager=new UQ({renderer:this.renderer,extSplats:this.pagedExtSplats,maxSplats:this.maxPagedSplats,numFetchers:this.numLodFetchers});const{lodId:y}=await c.call("newLodTree",{capacity:this.pager.maxSplats});this.pagerId=y}if(this.pager)for(const{mesh:y}of this.lodMeshes)y.paged&&!y.paged.pager&&(y.paged.pager=this.pager);if(this.lodInitQueue.length>0){const y=this.lodInitQueue;for(this.lodInitQueue=[];y.length>0;){const F=y.shift();F&&(await this.initLodTree(c,F),this.lodDirty=!0)}}if(this.pager){const y=this.pager.consumeLodTreeUpdates();for(const{splats:F,page:R,chunk:M,numSplats:n,lodTree:N}of y){const J=this.lodIds.get(F);J&&(N&&M===0&&(J.rootPage=R),this.lodUpdates.push({lodId:J.lodId,pageBase:R*this.pager.pageSplats,chunkBase:M*this.pager.pageSplats,count:n,lodTreeData:N}))}}if(this.lodUpdates.length>0){const y=this.lodUpdates;this.lodUpdates=[],await c.call("updateLodTrees",{ranges:y}),this.lodDirty=!0}if(this.lodDirty){const y=performance.now(),F=new q;if(this.lastLod){const R=Math.max(1,y-this.lastLod.timestamp);F.copy(o).sub(this.lastLod.pos).multiplyScalar(this.lastTraverseTime/R)}this.lastLod={pos:o,quat:s,pixelScaleLimit:D,maxSplats:E,timestamp:y},this.lodDirty=!1,await this.updateLodInstances(c,F,a,E,o,s,D),this.currentLod=this.lastLod,this.setDirty()}await this.cleanupLodTrees(c)})}async initLodTree(A,I){if(I instanceof dg||I instanceof vg){const{lodId:g}=await A.call("initLodTree",{numSplats:I.numSplats??0,lodTree:I.extra.lodTree.slice()});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}else{const{lodId:g}=await A.call("newSharedLodTree",{lodId:this.pagerId});this.lodIds.set(I,{lodId:g,lastTouched:performance.now()}),this.lodIdToSplats.set(g,I)}}async updateLodInstances(A,I,g,Q,C,i,E){const D=new Map,o=new fA().compose(C,i,new q().setScalar(1)),s=g.reduce((y,F)=>{var R,M;D.set(F.uuid,F);const n=F.matrixWorld.clone().invert().multiply(o),N=((R=F.packedSplats)==null?void 0:R.lodSplats)??((M=F.extSplats)==null?void 0:M.lodSplats)??F.paged;if(!N)return y;const J=this.lodIds.get(N);return!J||this.pager&&F.paged&&J.rootPage===void 0||(y[F.uuid]={instanceId:F.uuid,lodId:J.lodId,rootPage:J.rootPage,viewToObjectCols:n.elements,lodScale:F.lodScale,behindFoveate:F.behindFoveate??this.behindFoveate,coneFov0:F.coneFov0??this.coneFov0,coneFov:F.coneFov??this.coneFov,coneFoveate:F.coneFoveate??this.coneFoveate}),y},{}),t=performance.now(),w=await A.call("traverseLodTrees",{maxSplats:Q,pixelScaleLimit:E,lastPixelLimit:this.lastPixelLimit,instances:s});this.lastTraverseTime=performance.now()-t;const{keyIndices:a,chunks:G,pixelLimit:S}=w;this.lastPixelLimit=S;const c=Object.values(a).reduce((y,{numSplats:F})=>y+F,0);if(this.updateLodIndices(D,a),this.pager){this.pager.processUploads();const y=g.map(F=>{if(!F.paged||!this.pager)return null;const R=F.getWorldPosition(new q);return{splats:F.paged,distance:R.distanceTo(C)}}).filter(F=>F!==null);!this.pageSizeWarning&&y.length>this.pager.maxPages&&(this.pageSizeWarning=!0,console.warn(`# paged SplatMeshes exceeds maxPages: ${y.length} > ${this.pager.maxPages}`)),y.sort((F,R)=>F.distance-R.distance),this.pager.fetchPriority=y.map(({splats:F})=>({splats:F,chunk:0}));for(const[F,R]of G){const M=this.lodIdToSplats.get(F);M instanceof aC&&R!==0&&this.pager.fetchPriority.push({splats:M,chunk:R})}this.pager.autoDrive=this.enableLodFetching,this.enableLodFetching&&this.pager.driveFetchers()}if(this.lodRaycast&&performance.now()-this.lastLodRaycastTime>=this.lodRaycastIntervalMs){this.lastLodRaycastTime=performance.now();const y=performance.now(),F=await A.call("traverseLodTrees",{maxSplats:Math.min(this.lodRaycast,Math.round(c*.1)),pixelScaleLimit:E,instances:s});performance.now()-y;const{keyIndices:R}=F;Object.values(R).reduce((M,{numSplats:n})=>M+n,0);for(const[M,n]of Object.entries(R)){const N=D.get(M);N.raycastIndices=n}}}async cleanupLodTrees(A){const I=performance.now();let g=null;for(const[Q,C]of this.lodIds.entries())(g==null||C.lastTouched<g.lastTouched)&&(g={splats:Q,lastTouched:C.lastTouched,lodId:C.lodId});if(!(!g||g.lastTouched>I-3e3)){this.lodIds.delete(g.splats),this.lodIdToSplats.delete(g.lodId);for(const[Q,C]of this.lodInstances.entries())C.lodId===g.lodId&&(C.texture.dispose(),this.lodInstances.delete(Q));await A.call("disposeLodTree",{lodId:g.lodId})}}updateLodIndices(A,I){for(const[g,Q]of Object.entries(I)){const{lodId:C,numSplats:i,indices:E}=Q,D=A.get(g);if(D.paged)D.paged.update(i,E);else{let o=this.lodInstances.get(D);o&&E.length>o.indices.length&&(o.texture.dispose(),o=void 0);const s=Math.ceil(E.length/16384);if(o){o.numSplats=i;const t=this.renderer,w=t.getContext();if(t.properties.has(o.texture)){const a=t.properties.get(o.texture).__webglTexture;if(!a)throw new Error("lodIndices texture not found");t.state.activeTexture(w.TEXTURE0),t.state.bindTexture(w.TEXTURE_2D,a),w.bindBuffer(w.PIXEL_UNPACK_BUFFER,null),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,!1),w.texSubImage2D(w.TEXTURE_2D,0,0,0,4096,s,w.RGBA_INTEGER,w.UNSIGNED_INT,E),t.state.bindTexture(w.TEXTURE_2D,null)}}else{const t=s*16384;if(E.length!==t)throw new Error("Indices length != capacity");const w=new cQ(E,4096,s,hA,oA);w.internalFormat="RGBA32UI",w.needsUpdate=!0,o={lodId:C,numSplats:i,indices:E,texture:w},this.lodInstances.set(D,o)}}D.updateMappingVersion()}}async readbackDepth({current:A,renderer:I,numSplats:g,readback:Q}){if(!I)throw new Error("No renderer");if(!A.target)throw new Error("No target");const C=Math.ceil(g/_)*_;if(Q.byteLength<C*4)throw new Error(`Readback buffer too small: ${Q.byteLength} < ${C*4}`);const i=new Uint8Array(Q.buffer),E=this.saveRenderState(I),D=_*Gg;let o=0;const s=[];for(;o<g;){const t=Math.floor(o/D),w=t*D,a=Math.min(Gg,Math.ceil((g-w)/_)),G=_*a*4,S=i.subarray(w*4,w*4+G);I.setRenderTarget(A.target,t);const c=I.readRenderTargetPixelsAsync(A.target,0,0,_,a,S,void 0,A.extSplats?2:1);s.push(c),this.flushAfterRead&&I.getContext().flush(),o+=_*a}return this.resetRenderState(I,E),Promise.all(s).then(()=>Q)}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}render(A,I){try{KA.sparkOverride=this,this.renderer.render(A,I)}finally{KA.sparkOverride=void 0}}renderTarget({scene:A,camera:I}){const g=this.backTarget??this.target;if(!g)throw new Error("No target");const Q=this.renderer.getRenderTarget();try{this.renderer.setRenderTarget(g),KA.sparkOverride=this,this.renderer.render(A,I)}finally{KA.sparkOverride=void 0,this.renderer.setRenderTarget(Q)}return g!==this.target&&([this.target,this.backTarget]=[this.backTarget,this.target]),g}async readTarget(){if(!this.target)throw new Error("Must initialize with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g));const Q=this.superPixels;await this.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,Q);const{superXY:C}=this;if(C===1)return Q;const i=A/C,E=I/C,D=i*E*4;(!this.targetPixels||this.targetPixels.length<D)&&(this.targetPixels=new Uint8Array(D));const o=this.targetPixels,s=C*C;for(let t=0;t<E;t++){const w=t*i;for(let a=0;a<i;a++){const G=a*C;let S=0,c=0,y=0,F=0;for(let M=0;M<C;M++){const n=(t*C+M)*A;for(let N=0;N<C;N++){const J=(n+G+N)*4;S+=Q[J],c+=Q[J+1],y+=Q[J+2],F+=Q[J+3]}}const R=(w+a)*4;o[R]=S/s,o[R+1]=c/s,o[R+2]=y/s,o[R+3]=F/s}}return o}async renderReadTarget({scene:A,camera:I}){return this.renderTarget({scene:A,camera:I}),this.readTarget()}async renderCubeMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:i=[],update:E=!0,filter:D=!1}){if(!KA.cubeRender||KA.cubeRender.target.width!==g||KA.cubeRender.near!==Q||KA.cubeRender.far!==C){KA.cubeRender&&KA.cubeRender.target.dispose();const w=new Us(g,{format:Mg,type:ug,generateMipmaps:D,minFilter:D?Hs:Ls,magFilter:Ls,colorSpace:D?A0:wE}),a=new Ys(Q,C,w);KA.cubeRender={target:w,cubeCamera:a,near:Q,far:C}}const{target:o,cubeCamera:s}=KA.cubeRender;s.position.copy(I);const t=new Map;for(const w of i)t.set(w,w.visible),w.visible=!1;if(E){const w=new I0;w.position.copy(I),await this.update({scene:A,camera:w})}try{KA.sparkOverride=this,s.update(this.renderer,A)}finally{KA.sparkOverride=void 0}for(const[w,a]of t.entries())w.visible=a;return o.texture}async readCubeTargets(){if(!KA.cubeRender)throw new Error("No cube render");const A=KA.cubeRender.target.texture,I=[],g=[];for(let Q=0;Q<A.images.length;++Q){const{width:C,height:i}=A.images[Q],E=C*i*4,D=new Uint8Array(E);g.push(D);const o=this.renderer.readRenderTargetPixelsAsync(KA.cubeRender.target,0,0,C,i,D,Q);I.push(o)}return await Promise.all(I),g}async renderEnvMap({scene:A,worldCenter:I,size:g=256,near:Q=.1,far:C=1e3,hideObjects:i=[],update:E=!0}){var D;const o=await this.renderCubeMap({scene:A,worldCenter:I,size:g,near:Q,far:C,hideObjects:i,update:E,filter:!0});return KA.pmrem||(KA.pmrem=new ds(this.renderer)),(D=KA.pmrem)==null?void 0:D.fromCubemap(o).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof IQ)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof lB&&(Q.envMap=I);else g.material instanceof lB&&(g.material.envMap=I)})}async getLodTreeLevel(A,I,g=!1){var Q,C;const i=this.lodInstances.get(A);if(!i)return null;const E=await this.ensureLodWorker().exclusive(async D=>await D.call("getLodTreeLevel",{lodId:i.lodId,level:I}));if((Q=A.packedSplats)!=null&&Q.lodSplats){const D=A.packedSplats.lodSplats.extractSplats(E.indices,g);return new EQ({packedSplats:D})}if((C=A.extSplats)!=null&&C.lodSplats){const D=A.extSplats.lodSplats.extractSplats(E.indices,g);return new EQ({extSplats:D})}throw new Error("Only LoD-enabled PackedSplats and ExtSplats are supported")}get premultipliedAlpha(){return this.material.premultipliedAlpha}set premultipliedAlpha(A){this.material.premultipliedAlpha!==A&&(this.material.premultipliedAlpha=A,this.material.needsUpdate=!0)}};Qi.emptyOrdering=(()=>{const B=new Uint32Array(16384),A=new cQ(B,4096,1);return A.format=hA,A.type=oA,A.internalFormat="RGBA32UI",A.needsUpdate=!0,A})(),Qi.cubeRender=null,Qi.pmrem=null;let vS=Qi;class aC{constructor(A){var I;if(this.shCodesSent=new WeakMap,this.pager=A.pager,this.rootUrl=A.rootUrl??"",this.requestHeader=A.requestHeader,this.withCredentials=A.withCredentials,this.numSh=0,this.maxSh=((I=A.pager)==null?void 0:I.maxSh)??3,this.numSplats=0,this.dynoNumSplats=new Og({value:0}),this.dynoIndices=new Ra({value:UQ.emptyIndicesTexture}),this.rgbMinMaxLnScaleMinMax=new BC({value:new NI(0,1,uI,mI)}),this.lodOpacity=new QC({value:!1}),this.dynoNumSh=new Og({value:0}),this.shMax=new Xg({value:new q}),this.fileBytes=A.fileBytes,this.fileType=A.fileType,!this.fileType&&this.fileBytes&&(this.fileType=Ta(this.fileBytes)),!this.fileType&&this.rootUrl&&(this.fileType=jS(this.rootUrl)),!this.fileType)throw new Error("Unable to determine file type");this.fileType===bI.RAD&&(this.radMetaPromise=this.getRadMeta())}dispose(){this.dynoIndices.value!==UQ.emptyIndicesTexture&&(this.dynoIndices.value.dispose(),this.dynoIndices.value=UQ.emptyIndicesTexture)}setMaxSh(A){this.maxSh=A}getRadMeta(){return this.radMetaPromise?this.radMetaPromise:(this.radMetaPromise=(async()=>{if(await ZS,this.fileBytes){const A=Ja(this.fileBytes.slice(0,1048576));if(A)return A;throw new Error("Failed to decode RAD header")}if(!this.rootUrl)throw new Error("No url or fileBytes provided");for(const A of[65536,256*1024,1024*1024]){const I=await yo({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:0,bytes:A}),g=Ja(I);if(g)return g}throw new Error("Failed to decode RAD header")})().then(A=>A),this.radMetaPromise.catch(A=>{console.error(A)}),this.radMetaPromise)}chunkUrl(A){return this.rootUrl.replace(/-lod-0\./,`-lod-${A}.`)}async fetchDecodeChunk(A){let I;if(this.fileType===bI.RAD){const{meta:g,chunksStart:Q}=await this.getRadMeta();if(A<0||A>=g.chunks.length)throw new Error(`Chunk index out of range: ${A} (max: ${g.chunks.length-1})`);let{offset:C,bytes:i,filename:E}=g.chunks[A];if(E){if(this.fileBytes)throw new Error("Chunked RAD file not supported with fileBytes");const D=new URL(this.rootUrl,window.location.href).toString(),o=new URL(E,D).toString();I=await yo({url:o,requestHeader:this.requestHeader,withCredentials:this.withCredentials})}else if(C+=Q,this.fileBytes){if(C<0||C+i>this.fileBytes.length)throw new Error(`Invalid chunk offset or bytes: ${C} + ${i} > ${this.fileBytes.length}`);I=this.fileBytes.slice(C,C+i)}else if(this.rootUrl)I=await yo({url:this.rootUrl,requestHeader:this.requestHeader,withCredentials:this.withCredentials,offset:C,bytes:i});else throw new Error("No url or fileBytes provided")}else if(!this.fileBytes)if(this.rootUrl){const g=this.chunkUrl(A),Q=new Request(g,{headers:this.requestHeader?new Headers(this.requestHeader):void 0,credentials:this.withCredentials?"include":"same-origin"}),C=await fetch(Q);if(!C.ok||!C.body)throw new Error(`Failed to fetch "${g}": ${C.status} ${C.statusText}`);I=new Uint8Array(await C.arrayBuffer())}else throw new Error("No url or fileBytes provided");return await ZE.withWorker(async g=>{var Q,C,i,E,D;if(!this.pager)throw new Error("PagedSplats.pager not set");const o={sh1:this.sh1Codes,sh2:this.sh2Codes,sh3:this.sh3Codes},s=this.shCodesSent.get(g),t=!s||s.sh1!==o.sh1||s.sh2!==o.sh2||s.sh3!==o.sh3,w=()=>{t&&this.shCodesSent.set(g,o)};if(!this.pager.extSplats){const c=await g.call("loadPackedSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(Q=o.sh1)==null?void 0:Q.slice():void 0,sh2Codes:t?(C=o.sh2)==null?void 0:C.slice():void 0,sh3Codes:t?(i=o.sh3)==null?void 0:i.slice():void 0});w();const y=c.lodSplats;return this.splatEncoding||(this.splatEncoding=y.splatEncoding,this.numSh=y.extra.sh3?3:y.extra.sh2?2:y.extra.sh1?1:0,this.rgbMinMaxLnScaleMinMax.value.set(this.splatEncoding.rgbMin??0,this.splatEncoding.rgbMax??1,this.splatEncoding.lnScaleMin??uI,this.splatEncoding.lnScaleMax??mI),this.lodOpacity.value=this.splatEncoding.lodOpacity??!1,this.shMax.value.set(this.splatEncoding.sh1Max??1,this.splatEncoding.sh2Max??1,this.splatEncoding.sh3Max??1)),this.sh1Codes=y.extra.sh1Codes??this.sh1Codes,this.sh2Codes=y.extra.sh2Codes??this.sh2Codes,this.sh3Codes=y.extra.sh3Codes??this.sh3Codes,y}const a=o.sh3,G=await g.call("loadExtSplats",{fileBytes:I,pathName:this.chunkUrl(A),shCacheKey:this.rootUrl,sh1Codes:t?(E=o.sh1)==null?void 0:E.slice():void 0,sh2Codes:t?(D=o.sh2)==null?void 0:D.slice():void 0,sh3Codes:t&&a?[a[0].slice(),a[1].slice()]:void 0});w();const S=G.lodSplats;return this.splatEncoding||(this.splatEncoding=qE,this.numSh=S.extra.sh3a&&S.extra.sh3b?3:S.extra.sh2?2:S.extra.sh1?1:0),this.sh1Codes=S.extra.sh1Codes??this.sh1Codes,this.sh2Codes=S.extra.sh2Codes??this.sh2Codes,this.sh3Codes=S.extra.sh3Codes??this.sh3Codes,S})}update(A,I){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.renderer;this.numSplats=A,this.dynoNumSplats.value=this.numSplats;const Q=Math.ceil(A/16384);let C=this.dynoIndices.value===UQ.emptyIndicesTexture?void 0:this.dynoIndices.value;if(C&&Q>C.image.height&&(C.dispose(),C=void 0),!C)C=new cQ(I,4096,Q,hA,oA),C.internalFormat="RGBA32UI",C.needsUpdate=!0,g.initTexture(C),this.dynoIndices.value=C;else{C.image.data.set(I.subarray(0,A));const i=g.getContext();g.state.activeTexture(i.TEXTURE0),g.state.bindTexture(i.TEXTURE_2D,ua(g,C)),i.bindBuffer(i.PIXEL_UNPACK_BUFFER,null),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.texSubImage2D(i.TEXTURE_2D,0,0,0,4096,Q,i.RGBA_INTEGER,i.UNSIGNED_INT,I),g.state.bindTexture(i.TEXTURE_2D,null)}}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return this.pager?Math.min(this.numSh,this.pager.maxSh)>0:!1}getNumSh(){return this.numSh}fetchSplat({index:A,viewOrigin:I}){if(!this.pager)throw new Error("PagedSplats.pager not set");const g=this.pager.readIndex.apply({index:A,numSplats:this.dynoNumSplats,indices:this.dynoIndices}).index;return this.pager.extSplats?this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatExtDir.apply({index:g,viewOrigin:I,numSh:this.dynoNumSh}).gsplat):this.pager.readSplatExt.apply({index:g}).gsplat:this.hasRgbDir()&&I?(this.dynoNumSh.value=Math.min(this.numSh,this.maxSh,this.pager.maxSh),this.pager.readSplatDir.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity,viewOrigin:I,numSh:this.dynoNumSh,shMax:this.shMax}).gsplat):this.pager.readSplat.apply({index:g,rgbMinMaxLnScaleMinMax:this.rgbMinMaxLnScaleMinMax,lodOpacity:this.lodOpacity}).gsplat}forEachSplat(A){if(!this.pager||!this.numSplats)return;const I=this.pager.extSplats,g=this.dynoIndices.value.image.data,Q=this.pager.packedTexture.value.image.data,C=this.pager.extTexture.value.image.data,i=[Q,C];for(let E=0;E<this.numSplats;++E){const D=g[E],o=I?Io(i,D):TE(Q,D,this.splatEncoding);A(E,o.center,o.scales,o.quaternion,o.opacity,o.color)}}}const mA=class GA{constructor(A){this.fetchPause=0,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=[],this.renderer=A.renderer,this.extSplats=A.extSplats??!1,this.pageSplats=65536,this.maxSplats=A.maxSplats??16777216,this.maxPages=Math.ceil(this.maxSplats/this.pageSplats),this.maxSplats=this.maxPages*this.pageSplats,this.maxSh=A.maxSh??3,this.curSh=0,this.autoDrive=A.autoDrive??!0,this.numFetchers=A.numFetchers??3,this.splatsChunkToPage=new Map,this.pageToSplatsChunk=new Array(this.maxPages),this.pageFreelist=Array.from({length:this.maxPages},(I,g)=>g),this.pageLru=new Set,this.freeablePages=[],this.newUploads=[],this.readyUploads=[],this.lodTreeUpdates=[],this.fetchers=[],this.fetched=[],this.fetchPriority=[],this.packedTexture=new KI({value:this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI")}),this.extTexture=new KI({value:this.extSplats?this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI"):GA.emptyExtTexture}),this.sh1Texture=new KI({value:this.extSplats?GA.emptyExtSh1Texture:GA.emptySh1Texture}),this.sh2Texture=new KI({value:this.extSplats?GA.emptyExtSh2Texture:GA.emptySh2Texture}),this.sh3Texture=new KI({value:this.extSplats?GA.emptyExtSh3Texture:GA.emptySh3Texture}),this.sh3TextureB=new KI({value:GA.emptyExtSh3BTexture}),this.readIndex=wI({index:"int",numSplats:"int",indices:"usampler2D"},{index:"int"},({index:I,numSplats:g,indices:Q})=>new tA({inTypes:{index:"int",numSplats:"int",indices:"usampler2D"},outTypes:{index:"int"},inputs:{index:I,numSplats:g,indices:Q},statements:({inputs:C,outputs:i})=>FA(`
|
|
12716
12716
|
if (${C.index} >= ${C.numSplats}) {
|
|
12717
12717
|
return;
|
|
12718
12718
|
}
|
|
@@ -12735,7 +12735,7 @@ void main() {\r
|
|
|
12735
12735
|
if (${C.lodOpacity}) {
|
|
12736
12736
|
${i.gsplat}.rgba.a *= 2.0;
|
|
12737
12737
|
}
|
|
12738
|
-
`)}).outputs),this.readSplatDir=wI({index:"int",rgbMinMaxLnScaleMinMax:"vec4",lodOpacity:"bool",viewOrigin:"vec3",numSh:"int",shMax:"vec3"},{gsplat:RA},({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q,viewOrigin:C,numSh:i,shMax:E})=>{if(!I||!g||!Q||!C||!i||!E)throw new Error("index and viewOrigin are required");let D=this.readSplat.apply({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q}).gsplat;const o=Ig(D).outputs.center,s=
|
|
12738
|
+
`)}).outputs),this.readSplatDir=wI({index:"int",rgbMinMaxLnScaleMinMax:"vec4",lodOpacity:"bool",viewOrigin:"vec3",numSh:"int",shMax:"vec3"},{gsplat:RA},({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q,viewOrigin:C,numSh:i,shMax:E})=>{if(!I||!g||!Q||!C||!i||!E)throw new Error("index and viewOrigin are required");let D=this.readSplat.apply({index:I,rgbMinMaxLnScaleMinMax:g,lodOpacity:Q}).gsplat;const o=Ig(D).outputs.center,s=jE(oB(o,C));let t=Oa({coord:ca(I),viewDir:s,numSh:i,sh1Texture:this.sh1Texture,sh2Texture:this.sh2Texture,sh3Texture:this.sh3Texture,shMax:E}).rgb;return t=nQ(t,Ig(D).outputs.rgb),D=EB({gsplat:D,rgb:t}),{gsplat:D}}),this.readSplatExt=wI({index:"int"},{gsplat:RA},({index:I})=>new tA({inTypes:{index:"int",extTexture1:"usampler2DArray",extTexture2:"usampler2DArray"},outTypes:{gsplat:RA},inputs:{index:I,extTexture1:this.packedTexture,extTexture2:this.extTexture},globals:()=>[PI],statements:({inputs:g,outputs:Q})=>FA(`
|
|
12739
12739
|
int index = ${g.index};
|
|
12740
12740
|
ivec3 splatCoord = ivec3(index & 255, (index >> 8) & 255, index >> 16);
|
|
12741
12741
|
uvec4 ext1 = texelFetch(${g.extTexture1}, splatCoord, 0);
|
|
@@ -12752,10 +12752,10 @@ void main() {\r
|
|
|
12752
12752
|
|
|
12753
12753
|
${Q.gsplat}.index = index;
|
|
12754
12754
|
${Q.gsplat}.flags = GSPLAT_FLAG_ACTIVE;
|
|
12755
|
-
`)}).outputs),this.readSplatExtDir=wI({index:"int",viewOrigin:"vec3",numSh:"int"},{gsplat:RA},({index:I,viewOrigin:g,numSh:Q})=>{if(!I||!g||!Q)throw new Error("index and viewOrigin are required");let C=this.readSplatExt.apply({index:I}).gsplat;const i=Ig(C).outputs.center,E=
|
|
12755
|
+
`)}).outputs),this.readSplatExtDir=wI({index:"int",viewOrigin:"vec3",numSh:"int"},{gsplat:RA},({index:I,viewOrigin:g,numSh:Q})=>{if(!I||!g||!Q)throw new Error("index and viewOrigin are required");let C=this.readSplatExt.apply({index:I}).gsplat;const i=Ig(C).outputs.center,E=jE(oB(i,g));let D=Na({coord:ca(I),viewDir:E,numSh:Q,sh1Texture:this.sh1Texture,sh2Texture:this.sh2Texture,sh3TextureA:this.sh3Texture,sh3TextureB:this.sh3TextureB}).rgb;return D=nQ(D,Ig(C).outputs.rgb),C=EB({gsplat:C,rgb:D}),{gsplat:C}})}dispose(){this.autoDrive=!1,this.numFetchers=0,this.packedTexture.value.dispose(),this.packedTexture.value.source.data=null,this.extTexture.value!==GA.emptyExtTexture&&(this.extTexture.value.dispose(),this.extTexture.value.source.data=null),this.extSplats?(this.sh1Texture.value!==GA.emptyExtSh1Texture&&(this.sh1Texture.value.dispose(),this.sh1Texture.value.source.data=null),this.sh2Texture.value!==GA.emptyExtSh2Texture&&(this.sh2Texture.value.dispose(),this.sh2Texture.value.source.data=null),this.sh3Texture.value!==GA.emptyExtSh3Texture&&(this.sh3Texture.value.dispose(),this.sh3Texture.value.source.data=null),this.sh3TextureB.value!==GA.emptyExtSh3BTexture&&(this.sh3TextureB.value.dispose(),this.sh3TextureB.value.source.data=null)):(this.sh1Texture.value!==GA.emptySh1Texture&&(this.sh1Texture.value.dispose(),this.sh1Texture.value.source.data=null),this.sh2Texture.value!==GA.emptySh2Texture&&(this.sh2Texture.value.dispose(),this.sh2Texture.value.source.data=null),this.sh3Texture.value!==GA.emptySh3Texture&&(this.sh3Texture.value.dispose(),this.sh3Texture.value.source.data=null))}ensureShTextures(A){this.curSh=Math.max(this.curSh,A),this.extSplats?this.curSh>=1&&this.sh1Texture.value===GA.emptyExtSh1Texture&&(this.sh1Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI")):this.curSh>=1&&this.sh1Texture.value===GA.emptySh1Texture&&(this.sh1Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*2),256,256,this.maxPages,sE,oA,"RG32UI")),this.curSh>=2&&this.sh2Texture.value===(this.extSplats?GA.emptyExtSh2Texture:GA.emptySh2Texture)&&(this.sh2Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI")),this.extSplats?this.curSh>=3&&(this.sh3Texture.value===GA.emptyExtSh3Texture&&(this.sh3Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI")),this.sh3TextureB.value===GA.emptyExtSh3BTexture&&(this.sh3TextureB.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI"))):this.curSh>=3&&this.sh3Texture.value===GA.emptySh3Texture&&(this.sh3Texture.value=this.newUint32ArrayTexture(new Uint32Array(this.maxPages*256*256*4),256,256,this.maxPages,hA,oA,"RGBA32UI"))}allocatePage(){return this.pageFreelist.shift()}freePage(A){this.pageFreelist.push(A)}getSplatsChunk(A,I){const g=this.splatsChunkToPage.get(A);if(g)return g[I]}insertSplatsChunkPage(A,I,g,Q){this.splatsChunkToPage.has(A)||this.splatsChunkToPage.set(A,[]);const C=this.splatsChunkToPage.get(A);if(!C)throw new Error("impossible");I>=C.length&&(C.length=I+1);const i={page:g,lru:Q};return C[I]=i,this.pageLru.add(i),this.pageToSplatsChunk[g]={splats:A,chunk:I,time:performance.now()},this.pageToSplatsChunk[g]}removeSplatsChunkPage(A,I,g){const Q=this.splatsChunkToPage.get(A);if(!Q)throw new Error("impossible");const C=Q[I];if(!C)throw new Error(`pageLru not found for splats: ${A}, chunk: ${I}, page: ${g}`);for(this.pageLru.delete(C),Q[I]=void 0;Q.length>0&&Q[Q.length-1]===void 0;)Q.pop();for(Q.length===0&&this.splatsChunkToPage.delete(A),this.pageToSplatsChunk[g]=void 0;this.pageToSplatsChunk.length>0&&this.pageToSplatsChunk[this.pageToSplatsChunk.length-1]===void 0;)this.pageToSplatsChunk.pop()}uploadPage(A,I,g,Q){const C=A*this.pageSplats;this.packedTexture.value.image.data.subarray(C*4,C*4+I.length).set(I),this.packedTexture.value.addLayerUpdate(A),this.packedTexture.value.needsUpdate=!0,Q&&(this.extTexture.value.image.data.subarray(C*4,C*4+Q.length).set(Q),this.extTexture.value.addLayerUpdate(A),this.extTexture.value.needsUpdate=!0);const i=this.extSplats?g.sh3a&&g.sh3b?3:g.sh2?2:g.sh1?1:0:g.sh3?3:g.sh2?2:g.sh1?1:0;if(this.ensureShTextures(i),this.extSplats){if(this.sh1Texture.value!==GA.emptyExtSh1Texture&&g.sh1){const E=g.sh1;this.sh1Texture.value.image.data.subarray(C*4,C*4+E.length).set(E),this.sh1Texture.value.addLayerUpdate(A),this.sh1Texture.value.needsUpdate=!0}}else if(this.sh1Texture.value!==GA.emptySh1Texture&&g.sh1){const E=g.sh1;this.sh1Texture.value.image.data.subarray(C*2,C*2+E.length).set(E),this.sh1Texture.value.addLayerUpdate(A),this.sh1Texture.value.needsUpdate=!0}if(this.sh2Texture.value!==GA.emptySh2Texture&&g.sh2){const E=g.sh2;this.sh2Texture.value.image.data.subarray(C*4,C*4+E.length).set(E),this.sh2Texture.value.addLayerUpdate(A),this.sh2Texture.value.needsUpdate=!0}if(this.extSplats){if(this.sh3Texture.value!==GA.emptyExtSh3Texture&&g.sh3a){const E=g.sh3a;this.sh3Texture.value.image.data.subarray(C*4,C*4+E.length).set(E),this.sh3Texture.value.addLayerUpdate(A),this.sh3Texture.value.needsUpdate=!0}if(this.sh3TextureB.value!==GA.emptyExtSh3BTexture&&g.sh3b){const E=g.sh3b;this.sh3TextureB.value.image.data.subarray(C*4,C*4+E.length).set(E),this.sh3TextureB.value.addLayerUpdate(A),this.sh3TextureB.value.needsUpdate=!0}}else if(this.sh3Texture.value!==GA.emptySh3Texture&&g.sh3){const E=g.sh3;this.sh3Texture.value.image.data.subarray(C*4,C*4+E.length).set(E),this.sh3Texture.value.addLayerUpdate(A),this.sh3Texture.value.needsUpdate=!0}}getGlTexture(A){return ua(this.renderer,A)}newUint32ArrayTexture(A,I,g,Q,C,i,E){const D=new cI(A,I,g,Q);return D.format=C,D.type=i,D.internalFormat=E,D.needsUpdate=!0,this.renderer.initTexture(D),D}driveFetchers(){const A=[],I=[];let g=0;for(const{splats:i,chunk:E}of this.fetchPriority){const D=this.getSplatsChunk(i,E);if(D){g>=this.maxPages?I.push(D):A.push(D),g+=1;continue}if(this.fetched.some(({splats:o,chunk:s})=>i===o&&E===s)||this.fetchers.some(({splats:o,chunk:s})=>i===o&&E===s)){g+=1;continue}if(g<this.maxPages&&this.fetchers.length<this.numFetchers){g+=1;const o=i.fetchDecodeChunk(E).then(async s=>{this.fetched.push({splats:i,chunk:E,data:s}),this.fetchPause>0&&await new Promise(t=>setTimeout(t,this.fetchPause))},async s=>{console.warn(s);const t=250+500*Math.random();await new Promise(w=>setTimeout(w,t))}).finally(()=>{this.fetchers=this.fetchers.filter(({splats:s,chunk:t})=>i!==s||E!==t),this.processFetched()});this.fetchers.push({splats:i,chunk:E,promise:o}),o.then(s=>{this.autoDrive&&this.driveFetchers()})}}const Q=performance.now();for(const i of I.reverse())i.lru=Q,this.pageLru.delete(i),this.pageLru.add(i);const C=new Set(this.pageLru);for(const i of A.reverse())C.delete(i),i.lru=Q,this.pageLru.delete(i),this.pageLru.add(i);this.freeablePages=Array.from(C).map(({page:i})=>i)}allocateFreeable(){const A=this.freeablePages.shift();if(A===void 0)return;const I=this.pageToSplatsChunk[A];if(!I)throw new Error(`splatsChunk not found for page: ${A}`);const{splats:g,chunk:Q}=I;return this.removeSplatsChunkPage(g,Q,A),this.lodTreeUpdates.push({splats:g,page:A,chunk:Q,numSplats:this.pageSplats}),A}processFetched(){const A=performance.now();for(;;){const I=this.fetched.shift();if(!I)break;const{splats:g,chunk:Q,data:C}=I;let i=this.allocatePage();if(i===void 0&&(i=this.allocateFreeable(),i===void 0))return;this.insertSplatsChunkPage(g,Q,i,A);const{numSplats:E,extra:D}=C;if(this.lodTreeUpdates.push({splats:g,page:i,chunk:Q,numSplats:E,lodTree:D.lodTree}),this.extSplats){const o=C.extArrays,s=o[0],t=o[1];this.newUploads.push({page:i,numSplats:E,packedArray:s,extArray:t,extra:D})}else{const o=C.packedArray;this.newUploads.push({page:i,numSplats:E,packedArray:o,extra:D})}}}processUploads(){for(;;){const A=this.readyUploads.shift();if(!A)break;const{page:I,numSplats:g,packedArray:Q,extArray:C,extra:i}=A;this.uploadPage(I,Q,i,C)}}consumeLodTreeUpdates(){const A=this.lodTreeUpdates;return this.lodTreeUpdates=[],this.readyUploads.push(...this.newUploads),this.newUploads=[],A}};mA.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),mA.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*2),C=new cI(Q,B,A,I);return C.format=sE,C.type=oA,C.internalFormat="RG32UI",C.needsUpdate=!0,C})(),mA.emptyIndicesTexture=(()=>{const B=new Uint32Array(16384),A=new cQ(B,4096,1);return A.format=hA,A.type=oA,A.internalFormat="RGBA32UI",A.needsUpdate=!0,A})(),mA.emptyPackedTexture=mA.emptyUint32x4,mA.emptyExtTexture=mA.emptyUint32x4,mA.emptySh1Texture=mA.emptyUint32x2,mA.emptySh2Texture=mA.emptyUint32x4,mA.emptySh3Texture=mA.emptyUint32x4,mA.emptyExtSh1Texture=mA.emptyUint32x4,mA.emptyExtSh2Texture=mA.emptyUint32x4,mA.emptyExtSh3Texture=mA.emptyUint32x4,mA.emptyExtSh3BTexture=mA.emptyUint32x4;let UQ=mA;function ua(B,A){if(!B.properties.has(A))throw new Error("texture not found");const I=B.properties.get(A).__webglTexture;if(!I)throw new Error("texture not found");return I}const ZS=da();async function yo({url:B,requestHeader:A,withCredentials:I,offset:g,bytes:Q}){const C=new Request(B,{headers:A?new Headers(A):void 0,credentials:I?"include":"same-origin"});g!==void 0&&Q!==void 0&&C.headers.set("Range",`bytes=${g}-${g+Q-1}`);const i=await fetch(C);if(!i.ok||!i.body)throw new Error(`Failed to fetch "${B}": ${i.status} ${i.statusText}`);return new Uint8Array(await i.arrayBuffer())}class VS{constructor(){this.fetchDyno=new tA({inTypes:{},outTypes:{gsplat:RA},globals:()=>[PI],statements:({outputs:A})=>FA(`
|
|
12756
12756
|
${A.gsplat}.flags = 0u;
|
|
12757
12757
|
return;
|
|
12758
|
-
`)}).outputs.gsplat}prepareFetchSplat(){}dispose(){}getNumSplats(){return 0}hasRgbDir(){return!1}getNumSh(){return 0}setMaxSh(A){}fetchSplat({index:A}){return this.fetchDyno}forEachSplat(){}}const eB=class zg extends wB{constructor(A={}){if(super({update:I=>this.update(I)}),this.isInitialized=!1,this.recolor=new hQ(1,1,1),this.opacity=1,this.generatorDirty=!0,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.showLodPageDyno=new Og({value:0}),A.splats)this.splats=A.splats,this.numSplats=A.splats.getNumSplats();else if(A.paged){A.extSplats&&console.warn("To set extSplats with the paged option, set SparkRenderer.pagedExtSplats");const I=A.url??"";if(A.paged===!0)this.paged=new wC({rootUrl:I});else if(A.paged instanceof wC)this.paged=A.paged;else if(A.paged instanceof UQ)this.paged=new wC({rootUrl:I,pager:A.paged});else throw new Error("Invalid paged option");this.splats=this.paged}else A.extSplats?(this.extSplats=A.extSplats instanceof vg?A.extSplats:new vg,A.extSplats=this.extSplats,this.numSplats=this.extSplats.numSplats,this.splats=this.extSplats):A.packedSplats?(this.packedSplats=A.packedSplats,this.packedSplats.splatEncoding=A.splatEncoding??{...xE},this.splats=this.packedSplats):this.packedSplats=new Kg;if(this.editable=A.editable??!0,this.raycastable=A.raycastable??!0,this.minRaycastOpacity=A.minRaycastOpacity??.2,this.onFrame=A.onFrame,this.context={transform:new sC,viewToWorld:new sC,worldToView:new sC,viewToObject:new sC,covTransform:new Ii,covViewToWorld:new Ii,covWorldToView:new Ii,covViewToObject:new Ii,recolor:new QC({value:new MI().setScalar(Number.NEGATIVE_INFINITY)}),time:new DB({value:0}),deltaTime:new DB({value:0}),numSplats:new Og({value:0}),splats:new PS,enableLod:new gC({value:!1}),lodIndices:new ea({value:la,key:"lodIndices"})},this.covSplats=A.covSplats??!1,this.covSplats&&!this.extSplats)throw new Error("CovSplats requires ExtSplats");if(this.objectModifiers=A.objectModifier?[A.objectModifier]:void 0,this.worldModifiers=A.worldModifier?[A.worldModifier]:void 0,A.objectModifiers&&(this.objectModifiers=A.objectModifiers),A.worldModifiers&&(this.worldModifiers=A.worldModifiers),this.enableLod=A.enableLod,this.lodScale=A.lodScale??1,this.behindFoveate=A.behindFoveate,this.coneFov0=A.coneFov0,this.coneFov=A.coneFov,this.coneFoveate=A.coneFoveate,this.updateGenerator(),A.url||A.fileBytes||A.stream||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized||this.extSplats&&!this.extSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const I=A.onLoad(this);I instanceof Promise&&await I}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const I=A.onLoad(this);I instanceof Promise&&(this.initialized=I.then(()=>this))}}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,maxSplats:D,constructSplats:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:G}=A;if(this.packedSplats){if(I||g||i||o){const r={url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,maxSplats:D,construct:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:G};this.packedSplats.reinitialize(r)}await this.packedSplats.initialized,this.splats=this.packedSplats}else if(this.extSplats&&(I||g||i||o)){const r=o;this.extSplats.reinitialize({url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,maxSplats:D,construct:r,onProgress:s,lod:w,nonLod:a,lodAbove:G}),await this.extSplats.initialized,this.splats=this.extSplats}this.splats&&(this.numSplats=this.splats.getNumSplats(),this.updateGenerator())}static async staticInitialize(){await na(),zg.isStaticInitialized=!0}pushSplat(A,I,g,Q,C){this.packedSplats?this.packedSplats.pushSplat(A,I,g,Q,C):this.extSplats&&this.extSplats.pushSplat(A,I,g,Q,C)}forEachSplat(A){var I;(I=this.splats)==null||I.forEachSplat(A)}dispose(){this.splats&&this.splats!==this.packedSplats&&this.splats!==this.extSplats&&(this.splats.dispose(),this.splats=void 0),this.packedSplats&&(this.packedSplats.dispose(),this.packedSplats=void 0),this.extSplats&&(this.extSplats.dispose(),this.extSplats=void 0)}getBoundingBox(A=!0){var I;if(!this.initialized)throw new Error("Cannot get bounding box before SplatMesh is initialized");const g=new q(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),Q=new q(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),C=new q,i=[-1,1];function E(D,o,s,t,w,a){if(A)g.min(o),Q.max(o);else for(const G of i)for(const r of i)for(const c of i)C.set(G*s.x,r*s.y,c*s.z),C.applyQuaternion(t),C.add(o),g.min(C),Q.max(C)}return(I=this.splats)==null||I.forEachSplat(E),new ag(g,Q)}set objectModifier(A){A?this.objectModifiers=[A]:this.objectModifiers=void 0}set worldModifier(A){A?this.worldModifiers=[A]:this.worldModifiers=void 0}constructGenerator(A){if(this.covSplats)return this.constructCovGenerator(A);const{transform:I,viewToObject:g,recolor:Q}=A,C=wI({index:"int"},{gsplat:RA},({index:i})=>{if(!i)throw new Error("index is undefined");i=Ka(A.lodIndices,i,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.setMaxSh(this.maxSh),A.splats.prepareFetchSplat();let E=A.splats.fetchSplat({index:i,viewOrigin:g.translate});if(this.splatRgba&&(E=da(E,this.splatRgba.dyno,i,A.enableLod)),this.skinning&&(E=this.skinning.modify(E)),this.objectModifiers)for(const o of this.objectModifiers)E=o.apply({gsplat:E}).gsplat;E=I.applyGsplat(E);const D=NQ(Q,Ig(E).outputs.rgba);if(E=EB({gsplat:E,rgba:D}),this.rgbaDisplaceEdits&&(E=this.rgbaDisplaceEdits.modify(E)),this.worldModifiers)for(const o of this.worldModifiers)E=o.apply({gsplat:E}).gsplat;return{gsplat:E}});this.generator=C,this.covGenerator=void 0}constructCovGenerator(A){const{covTransform:I,covViewToObject:g,recolor:Q}=A,C=wI({index:"int"},{covsplat:Ag},({index:i})=>{if(!i)throw new Error("index is undefined");i=Ka(A.lodIndices,i,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.prepareFetchSplat();let E=A.splats.fetchSplat({index:i,viewOrigin:g.offset});if(this.splatRgba&&(E=da(E,this.splatRgba.dyno,i,A.enableLod)),this.objectModifiers)for(const s of this.objectModifiers)E=s.apply({gsplat:E}).gsplat;let D=Qo(E);if(this.skinning&&(D=this.skinning.modifyCov(D)),this.covObjectModifiers)for(const s of this.covObjectModifiers)D=s.apply({covsplat:D}).covsplat;D=I.applyCovSplat(D);const o=NQ(Q,Co(D).outputs.rgba);if(D=ta({covsplat:D,rgba:o}),this.rgbaDisplaceEdits&&(D=this.rgbaDisplaceEdits.modifyCov(D)),this.covWorldModifiers)for(const s of this.covWorldModifiers)D=s.apply({covsplat:D}).covsplat;return{covsplat:D}});this.generator=void 0,this.covGenerator=C}updateGenerator(){this.generatorDirty=!0}update({renderer:A,time:I,deltaTime:g,viewToWorld:Q,camera:C,renderSize:i,globalEdits:E,lodIndices:D}){var o,s,t;this.context.time.value=I,this.context.deltaTime.value=g,zg.dynoTime.value=I,this.showLodPageDyno.value=this.showLodPage??-1;const w=this.splats??this.packedSplats??this.extSplats;w&&(this.context.splats=w),this.numSplats=this.context.splats.getNumSplats();let a=!1;const G=((o=this.packedSplats)==null?void 0:o.lodSplats)??((s=this.extSplats)==null?void 0:s.lodSplats);if(this.context.enableLod.value=G!=null&&D!=null,this.enableLod===!1&&(this.context.enableLod.value=!1),this.context.lodIndices.value=D?.texture??la,this.context.enableLod.value&&G&&(this.context.splats=G,this.numSplats=D?.numSplats??0),this.context.numSplats.value=this.numSplats,this.context.splats!==this.lastSplats&&(this.lastSplats=this.context.splats,this.generatorDirty=!0),this.covSplats){this.context.covTransform.update(this)&&(a=!0),this.context.covViewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const R=Q.clone().invert();this.context.covWorldToView.updateFromMatrix(R)&&this.enableWorldToView&&(a=!0);const S=this.matrixWorld.clone().invert().multiply(Q);this.context.covViewToObject.updateFromMatrix(S)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}else{this.context.transform.update(this)&&(a=!0),this.context.viewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const R=Q.clone().invert();this.context.worldToView.updateFromMatrix(R)&&this.enableWorldToView&&(a=!0);const S=new fA().compose(this.context.transform.translate.value,this.context.transform.rotate.value,new q().setScalar(this.context.transform.scale.value)).invert().multiply(Q);this.context.viewToObject.updateFromMatrix(S)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}const r=new MI(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);r.equals(this.context.recolor.value)||(this.context.recolor.value.copy(r),a=!0);const c=this.editable?(this.edits??[]).concat(E):[];this.editable&&!this.edits&&this.traverseVisible(R=>{R instanceof Ai&&c.push(R)}),c.sort((R,S)=>R.ordering-S.ordering);const y=c.map(R=>{if(R.sdfs!=null)return{edit:R,sdfs:R.sdfs};const S=[];return R.traverseVisible(n=>{n instanceof Ja&&S.push(n)}),{edit:R,sdfs:S}});if(y.length>0&&!this.rgbaDisplaceEdits){const R=y.length,S=y.reduce((n,N)=>n+N.sdfs.length,0);this.rgbaDisplaceEdits=new La({maxEdits:R,maxSdfs:S}),this.generatorDirty=!0}if(this.rgbaDisplaceEdits){const R=this.rgbaDisplaceEdits.update(y);a||(a=R.updated),R.dynoUpdated&&(this.generatorDirty=!0)}this.generatorDirty&&(this.constructGenerator(this.context),this.generatorDirty=!1,a=!0),a&&this.updateVersion(),(t=this.onFrame)==null||t.call(this,{mesh:this,time:I,deltaTime:g})}raycast(A,I){var g,Q,C,i,E,D,o,s,t,w,a,G,r,c,y,R,S,n,N,M,J,L,H;if(!zg.isStaticInitialized||!this.raycastable||!this.packedSplats&&!this.extSplats&&!this.paged)return;const Y=this.paged!=null,d=Y?((Q=(g=this.paged)==null?void 0:g.pager)==null?void 0:Q.extSplats)??!1:this.extSplats!=null,{near:l,far:p,ray:u}=A,P=this.matrixWorld.clone().invert(),O=new VQ().setFromMatrix4(P),W=u.origin.clone().applyMatrix4(P),T=u.direction.clone().applyMatrix3(O),j=iS(),EA=j.length/4;let wA=0;const iA=((C=this.raycastIndices)==null?void 0:C.numSplats)??(Y?(i=this.paged)==null?void 0:i.numSplats:this.context.numSplats.value)??0,IA=((E=this.raycastIndices)==null?void 0:E.indices)??(Y?(D=this.paged)==null?void 0:D.dynoIndices.value.image.data:this.context.enableLod.value?this.context.lodIndices.value.image.data:null)??null;if(d){const BA=DS(),AA=Y?(y=(c=this.paged)==null?void 0:c.pager)==null?void 0:y.packedTexture.value.image.data:IA?(S=(R=this.extSplats)==null?void 0:R.lodSplats)==null?void 0:S.extArrays[0]:(n=this.extSplats)==null?void 0:n.extArrays[0],$=Y?(M=(N=this.paged)==null?void 0:N.pager)==null?void 0:M.extTexture.value.image.data:IA?(L=(J=this.extSplats)==null?void 0:J.lodSplats)==null?void 0:L.extArrays[1]:(H=this.extSplats)==null?void 0:H.extArrays[1];if(!AA||!$)return;for(let z=0;z<iA;z+=EA){const LA=Math.min(EA,iA-z);if(!IA)j.set(AA.subarray(z*4,(z+LA)*4)),BA.set($.subarray(z*4,(z+LA)*4));else for(let MA=0;MA<LA;++MA){const xA=IA[z+MA],aA=MA*4,DA=xA*4;j[aA]=AA[DA],j[aA+1]=AA[DA+1],j[aA+2]=AA[DA+2],j[aA+3]=AA[DA+3],BA[aA]=$[DA],BA[aA+1]=$[DA+1],BA[aA+2]=$[DA+2],BA[aA+3]=$[DA+3]}const NA=oS(W.x,W.y,W.z,T.x,T.y,T.z,this.minRaycastOpacity,l,p,LA);wA=this.appendRaycastBuffer(wA,NA)}}else{const BA=Y?(s=(o=this.paged)==null?void 0:o.pager)==null?void 0:s.packedTexture.value.image.data:IA?(w=(t=this.packedSplats)==null?void 0:t.lodSplats)==null?void 0:w.packedArray:(a=this.packedSplats)==null?void 0:a.packedArray;if(!BA)return;const AA=Y?(G=this.paged)==null?void 0:G.splatEncoding:(r=this.packedSplats)==null?void 0:r.splatEncoding;for(let $=0;$<iA;$+=EA){const z=Math.min(EA,iA-$);if(!IA)j.set(BA.subarray($*4,($+z)*4));else for(let NA=0;NA<z;++NA){const MA=IA[$+NA],xA=NA*4,aA=MA*4;j[xA]=BA[aA],j[xA+1]=BA[aA+1],j[xA+2]=BA[aA+2],j[xA+3]=BA[aA+3]}const LA=sS(W.x,W.y,W.z,T.x,T.y,T.z,this.minRaycastOpacity,l,p,z,AA?.lnScaleMin??uI,AA?.lnScaleMax??bI,AA?.lodOpacity??!1);wA=this.appendRaycastBuffer(wA,LA)}}for(const BA of zg.raycastBuffer.subarray(0,wA)){const AA=u.direction.clone().multiplyScalar(BA).add(u.origin);I.push({distance:BA,point:AA,object:this})}}appendRaycastBuffer(A,I){const g=A+I.length;let Q=zg.raycastBuffer.length;if(g>Q){for(;Q<g;)Q*=2;const C=new Float32Array(Q);C.set(zg.raycastBuffer.subarray(0,A)),zg.raycastBuffer=C}return zg.raycastBuffer.set(I,A),A+I.length}async createLodSplats({rgbaArray:A,quality:I}={}){this.packedSplats?await this.packedSplats.createLodSplats({quality:I,rgbaArray:A}):this.extSplats&&await this.extSplats.createLodSplats({quality:I,rgbaArray:A})}};eB.staticInitialized=eB.staticInitialize(),eB.isStaticInitialized=!1,eB.dynoTime=new DB({value:0}),eB.raycastBuffer=new Float32Array(1024);let EQ=eB;function Ka(B,A,I,g,Q){return vD({inTypes:{lodIndices:"usampler2D",index:"int",numSplats:"int",enableLod:"bool",showLodPage:"int"},outTypes:{index:"int"},inputs:{lodIndices:B,index:A,numSplats:I,enableLod:g,showLodPage:Q},statements:({inputs:C,outputs:i})=>FA(`
|
|
12758
|
+
`)}).outputs.gsplat}prepareFetchSplat(){}dispose(){}getNumSplats(){return 0}hasRgbDir(){return!1}getNumSh(){return 0}setMaxSh(A){}fetchSplat({index:A}){return this.fetchDyno}forEachSplat(){}}const eB=class zg extends wB{constructor(A={}){if(super({update:I=>this.update(I)}),this.isInitialized=!1,this.recolor=new hQ(1,1,1),this.opacity=1,this.generatorDirty=!0,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.showLodPageDyno=new Og({value:0}),A.splats)this.splats=A.splats,this.numSplats=A.splats.getNumSplats();else if(A.paged){A.extSplats&&console.warn("To set extSplats with the paged option, set SparkRenderer.pagedExtSplats");const I=A.url??"";if(A.paged===!0)this.paged=new aC({rootUrl:I});else if(A.paged instanceof aC)this.paged=A.paged;else if(A.paged instanceof UQ)this.paged=new aC({rootUrl:I,pager:A.paged});else throw new Error("Invalid paged option");this.splats=this.paged}else A.extSplats?(this.extSplats=A.extSplats instanceof vg?A.extSplats:new vg,A.extSplats=this.extSplats,this.numSplats=this.extSplats.numSplats,this.splats=this.extSplats):A.packedSplats?(this.packedSplats=A.packedSplats,this.packedSplats.splatEncoding=A.splatEncoding??{...qE},this.splats=this.packedSplats):this.packedSplats=new dg;if(this.editable=A.editable??!0,this.raycastable=A.raycastable??!0,this.minRaycastOpacity=A.minRaycastOpacity??.2,this.onFrame=A.onFrame,this.context={transform:new tC,viewToWorld:new tC,worldToView:new tC,viewToObject:new tC,covTransform:new gi,covViewToWorld:new gi,covWorldToView:new gi,covViewToObject:new gi,recolor:new BC({value:new NI().setScalar(Number.NEGATIVE_INFINITY)}),time:new DB({value:0}),deltaTime:new DB({value:0}),numSplats:new Og({value:0}),splats:new VS,enableLod:new QC({value:!1}),lodIndices:new Ra({value:Pa,key:"lodIndices"})},this.covSplats=A.covSplats??!1,this.covSplats&&!this.extSplats)throw new Error("CovSplats requires ExtSplats");if(this.objectModifiers=A.objectModifier?[A.objectModifier]:void 0,this.worldModifiers=A.worldModifier?[A.worldModifier]:void 0,A.objectModifiers&&(this.objectModifiers=A.objectModifiers),A.worldModifiers&&(this.worldModifiers=A.worldModifiers),this.enableLod=A.enableLod,this.lodScale=A.lodScale??1,this.behindFoveate=A.behindFoveate,this.coneFov0=A.coneFov0,this.coneFov=A.coneFov,this.coneFoveate=A.coneFoveate,this.updateGenerator(),A.url||A.fileBytes||A.stream||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized||this.extSplats&&!this.extSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const I=A.onLoad(this);I instanceof Promise&&await I}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const I=A.onLoad(this);I instanceof Promise&&(this.initialized=I.then(()=>this))}}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,maxSplats:D,constructSplats:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:G}=A;if(this.packedSplats){if(I||g||i||o){const S={url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,maxSplats:D,construct:o,onProgress:s,splatEncoding:t,lod:w,nonLod:a,lodAbove:G};this.packedSplats.reinitialize(S)}await this.packedSplats.initialized,this.splats=this.packedSplats}else if(this.extSplats&&(I||g||i||o)){const S=o;this.extSplats.reinitialize({url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,maxSplats:D,construct:S,onProgress:s,lod:w,nonLod:a,lodAbove:G}),await this.extSplats.initialized,this.splats=this.extSplats}this.splats&&(this.numSplats=this.splats.getNumSplats(),this.updateGenerator())}static async staticInitialize(){await da(),zg.isStaticInitialized=!0}pushSplat(A,I,g,Q,C){this.packedSplats?this.packedSplats.pushSplat(A,I,g,Q,C):this.extSplats&&this.extSplats.pushSplat(A,I,g,Q,C)}forEachSplat(A){var I;(I=this.splats)==null||I.forEachSplat(A)}dispose(){this.splats&&this.splats!==this.packedSplats&&this.splats!==this.extSplats&&(this.splats.dispose(),this.splats=void 0),this.packedSplats&&(this.packedSplats.dispose(),this.packedSplats=void 0),this.extSplats&&(this.extSplats.dispose(),this.extSplats=void 0)}getBoundingBox(A=!0){var I;if(!this.initialized)throw new Error("Cannot get bounding box before SplatMesh is initialized");const g=new q(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),Q=new q(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),C=new q,i=[-1,1];function E(D,o,s,t,w,a){if(A)g.min(o),Q.max(o);else for(const G of i)for(const S of i)for(const c of i)C.set(G*s.x,S*s.y,c*s.z),C.applyQuaternion(t),C.add(o),g.min(C),Q.max(C)}return(I=this.splats)==null||I.forEachSplat(E),new ag(g,Q)}set objectModifier(A){A?this.objectModifiers=[A]:this.objectModifiers=void 0}set worldModifier(A){A?this.worldModifiers=[A]:this.worldModifiers=void 0}constructGenerator(A){if(this.covSplats)return this.constructCovGenerator(A);const{transform:I,viewToObject:g,recolor:Q}=A,C=wI({index:"int"},{gsplat:RA},({index:i})=>{if(!i)throw new Error("index is undefined");i=ma(A.lodIndices,i,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.setMaxSh(this.maxSh),A.splats.prepareFetchSplat();let E=A.splats.fetchSplat({index:i,viewOrigin:g.translate});if(this.splatRgba&&(E=ba(E,this.splatRgba.dyno,i,A.enableLod)),this.skinning&&(E=this.skinning.modify(E)),this.objectModifiers)for(const o of this.objectModifiers)E=o.apply({gsplat:E}).gsplat;E=I.applyGsplat(E);const D=MQ(Q,Ig(E).outputs.rgba);if(E=EB({gsplat:E,rgba:D}),this.rgbaDisplaceEdits&&(E=this.rgbaDisplaceEdits.modify(E)),this.worldModifiers)for(const o of this.worldModifiers)E=o.apply({gsplat:E}).gsplat;return{gsplat:E}});this.generator=C,this.covGenerator=void 0}constructCovGenerator(A){const{covTransform:I,covViewToObject:g,recolor:Q}=A,C=wI({index:"int"},{covsplat:Ag},({index:i})=>{if(!i)throw new Error("index is undefined");i=ma(A.lodIndices,i,A.numSplats,A.enableLod,this.showLodPageDyno),A.splats.prepareFetchSplat();let E=A.splats.fetchSplat({index:i,viewOrigin:g.offset});if(this.splatRgba&&(E=ba(E,this.splatRgba.dyno,i,A.enableLod)),this.objectModifiers)for(const s of this.objectModifiers)E=s.apply({gsplat:E}).gsplat;let D=Eo(E);if(this.skinning&&(D=this.skinning.modifyCov(D)),this.covObjectModifiers)for(const s of this.covObjectModifiers)D=s.apply({covsplat:D}).covsplat;D=I.applyCovSplat(D);const o=MQ(Q,Do(D).outputs.rgba);if(D=Sa({covsplat:D,rgba:o}),this.rgbaDisplaceEdits&&(D=this.rgbaDisplaceEdits.modifyCov(D)),this.covWorldModifiers)for(const s of this.covWorldModifiers)D=s.apply({covsplat:D}).covsplat;return{covsplat:D}});this.generator=void 0,this.covGenerator=C}updateGenerator(){this.generatorDirty=!0}update({renderer:A,time:I,deltaTime:g,viewToWorld:Q,camera:C,renderSize:i,globalEdits:E,lodIndices:D}){var o,s,t;this.context.time.value=I,this.context.deltaTime.value=g,zg.dynoTime.value=I,this.showLodPageDyno.value=this.showLodPage??-1;const w=this.splats??this.packedSplats??this.extSplats;w&&(this.context.splats=w),this.numSplats=this.context.splats.getNumSplats();let a=!1;const G=((o=this.packedSplats)==null?void 0:o.lodSplats)??((s=this.extSplats)==null?void 0:s.lodSplats);if(this.context.enableLod.value=G!=null&&D!=null,this.enableLod===!1&&(this.context.enableLod.value=!1),this.context.lodIndices.value=D?.texture??Pa,this.context.enableLod.value&&G&&(this.context.splats=G,this.numSplats=D?.numSplats??0),this.context.numSplats.value=this.numSplats,this.context.splats!==this.lastSplats&&(this.lastSplats=this.context.splats,this.generatorDirty=!0),this.covSplats){this.context.covTransform.update(this)&&(a=!0),this.context.covViewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const F=Q.clone().invert();this.context.covWorldToView.updateFromMatrix(F)&&this.enableWorldToView&&(a=!0);const R=this.matrixWorld.clone().invert().multiply(Q);this.context.covViewToObject.updateFromMatrix(R)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}else{this.context.transform.update(this)&&(a=!0),this.context.viewToWorld.updateFromMatrix(Q)&&this.enableViewToWorld&&(a=!0);const F=Q.clone().invert();this.context.worldToView.updateFromMatrix(F)&&this.enableWorldToView&&(a=!0);const R=new fA().compose(this.context.transform.translate.value,this.context.transform.rotate.value,new q().setScalar(this.context.transform.scale.value)).invert().multiply(Q);this.context.viewToObject.updateFromMatrix(R)&&(this.enableViewToObject||this.context.splats.hasRgbDir())&&(a=!0)}const S=new NI(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);S.equals(this.context.recolor.value)||(this.context.recolor.value.copy(S),a=!0);const c=this.editable?(this.edits??[]).concat(E):[];this.editable&&!this.edits&&this.traverseVisible(F=>{F instanceof Ii&&c.push(F)}),c.sort((F,R)=>F.ordering-R.ordering);const y=c.map(F=>{if(F.sdfs!=null)return{edit:F,sdfs:F.sdfs};const R=[];return F.traverseVisible(M=>{M instanceof fa&&R.push(M)}),{edit:F,sdfs:R}});if(y.length>0&&!this.rgbaDisplaceEdits){const F=y.length,R=y.reduce((M,n)=>M+n.sdfs.length,0);this.rgbaDisplaceEdits=new xa({maxEdits:F,maxSdfs:R}),this.generatorDirty=!0}if(this.rgbaDisplaceEdits){const F=this.rgbaDisplaceEdits.update(y);a||(a=F.updated),F.dynoUpdated&&(this.generatorDirty=!0)}this.generatorDirty&&(this.constructGenerator(this.context),this.generatorDirty=!1,a=!0),a&&this.updateVersion(),(t=this.onFrame)==null||t.call(this,{mesh:this,time:I,deltaTime:g})}raycast(A,I){var g,Q,C,i,E,D,o,s,t,w,a,G,S,c,y,F,R,M,n,N,J,L,H;if(!zg.isStaticInitialized||!this.raycastable||!this.packedSplats&&!this.extSplats&&!this.paged)return;const Y=this.paged!=null,K=Y?((Q=(g=this.paged)==null?void 0:g.pager)==null?void 0:Q.extSplats)??!1:this.extSplats!=null,{near:l,far:p,ray:u}=A,b=this.matrixWorld.clone().invert(),O=new VQ().setFromMatrix4(b),W=u.origin.clone().applyMatrix4(b),T=u.direction.clone().applyMatrix3(O),j=aS(),EA=j.length/4;let wA=0;const iA=((C=this.raycastIndices)==null?void 0:C.numSplats)??(Y?(i=this.paged)==null?void 0:i.numSplats:this.context.numSplats.value)??0,IA=((E=this.raycastIndices)==null?void 0:E.indices)??(Y?(D=this.paged)==null?void 0:D.dynoIndices.value.image.data:this.context.enableLod.value?this.context.lodIndices.value.image.data:null)??null;if(K){const BA=eS(),AA=Y?(y=(c=this.paged)==null?void 0:c.pager)==null?void 0:y.packedTexture.value.image.data:IA?(R=(F=this.extSplats)==null?void 0:F.lodSplats)==null?void 0:R.extArrays[0]:(M=this.extSplats)==null?void 0:M.extArrays[0],$=Y?(N=(n=this.paged)==null?void 0:n.pager)==null?void 0:N.extTexture.value.image.data:IA?(L=(J=this.extSplats)==null?void 0:J.lodSplats)==null?void 0:L.extArrays[1]:(H=this.extSplats)==null?void 0:H.extArrays[1];if(!AA||!$)return;for(let z=0;z<iA;z+=EA){const LA=Math.min(EA,iA-z);if(!IA)j.set(AA.subarray(z*4,(z+LA)*4)),BA.set($.subarray(z*4,(z+LA)*4));else for(let NA=0;NA<LA;++NA){const xA=IA[z+NA],aA=NA*4,DA=xA*4;j[aA]=AA[DA],j[aA+1]=AA[DA+1],j[aA+2]=AA[DA+2],j[aA+3]=AA[DA+3],BA[aA]=$[DA],BA[aA+1]=$[DA+1],BA[aA+2]=$[DA+2],BA[aA+3]=$[DA+3]}const MA=hS(W.x,W.y,W.z,T.x,T.y,T.z,this.minRaycastOpacity,l,p,LA);wA=this.appendRaycastBuffer(wA,MA)}}else{const BA=Y?(s=(o=this.paged)==null?void 0:o.pager)==null?void 0:s.packedTexture.value.image.data:IA?(w=(t=this.packedSplats)==null?void 0:t.lodSplats)==null?void 0:w.packedArray:(a=this.packedSplats)==null?void 0:a.packedArray;if(!BA)return;const AA=Y?(G=this.paged)==null?void 0:G.splatEncoding:(S=this.packedSplats)==null?void 0:S.splatEncoding;for(let $=0;$<iA;$+=EA){const z=Math.min(EA,iA-$);if(!IA)j.set(BA.subarray($*4,($+z)*4));else for(let MA=0;MA<z;++MA){const NA=IA[$+MA],xA=MA*4,aA=NA*4;j[xA]=BA[aA],j[xA+1]=BA[aA+1],j[xA+2]=BA[aA+2],j[xA+3]=BA[aA+3]}const LA=cS(W.x,W.y,W.z,T.x,T.y,T.z,this.minRaycastOpacity,l,p,z,AA?.lnScaleMin??uI,AA?.lnScaleMax??mI,AA?.lodOpacity??!1);wA=this.appendRaycastBuffer(wA,LA)}}for(const BA of zg.raycastBuffer.subarray(0,wA)){const AA=u.direction.clone().multiplyScalar(BA).add(u.origin);I.push({distance:BA,point:AA,object:this})}}appendRaycastBuffer(A,I){const g=A+I.length;let Q=zg.raycastBuffer.length;if(g>Q){for(;Q<g;)Q*=2;const C=new Float32Array(Q);C.set(zg.raycastBuffer.subarray(0,A)),zg.raycastBuffer=C}return zg.raycastBuffer.set(I,A),A+I.length}async createLodSplats({rgbaArray:A,quality:I}={}){this.packedSplats?await this.packedSplats.createLodSplats({quality:I,rgbaArray:A}):this.extSplats&&await this.extSplats.createLodSplats({quality:I,rgbaArray:A})}};eB.staticInitialized=eB.staticInitialize(),eB.isStaticInitialized=!1,eB.dynoTime=new DB({value:0}),eB.raycastBuffer=new Float32Array(1024);let EQ=eB;function ma(B,A,I,g,Q){return WD({inTypes:{lodIndices:"usampler2D",index:"int",numSplats:"int",enableLod:"bool",showLodPage:"int"},outTypes:{index:"int"},inputs:{lodIndices:B,index:A,numSplats:I,enableLod:g,showLodPage:Q},statements:({inputs:C,outputs:i})=>FA(`
|
|
12759
12759
|
int index = ${C.index};
|
|
12760
12760
|
if (${C.showLodPage} < 0) {
|
|
12761
12761
|
if (index >= ${C.numSplats}) {
|
|
@@ -12775,12 +12775,12 @@ void main() {\r
|
|
|
12775
12775
|
}
|
|
12776
12776
|
${i.index} = start + index;
|
|
12777
12777
|
}
|
|
12778
|
-
`)}).outputs.index}function
|
|
12778
|
+
`)}).outputs.index}function ba(B,A,I,g){return WD({inTypes:{gsplat:RA,rgba:la,index:"int",enableLod:"bool"},outTypes:{gsplat:RA},inputs:{gsplat:B,rgba:A,index:I,enableLod:g},statements:({inputs:Q,outputs:C})=>FA(`
|
|
12779
12779
|
${C.gsplat} = ${Q.gsplat};
|
|
12780
12780
|
if (!${Q.enableLod} && (${Q.index} >= 0) && (${Q.index} < ${Q.rgba}.count)) {
|
|
12781
12781
|
${C.gsplat}.rgba = texelFetch(${Q.rgba}.texture, splatTexCoord(${Q.index}), 0);
|
|
12782
12782
|
}
|
|
12783
|
-
`)}).outputs.gsplat}const la=(()=>{const B=new cQ(new Uint32Array(16384),4096,1,hA,oA);return B.internalFormat="RGBA32UI",B.needsUpdate=!0,B})();new ZQ,new vQ,(()=>{try{new Function("return 42;")}catch{return!1}return!0})();class ho extends Te{constructor(A){super(A),this.fileLoader=new Oe(A)}load(A,I,g,Q){return this.loadInternal({url:A,onLoad:I,onProgress:g,onError:Q})}async loadAsync(A,I){return new Promise((g,Q)=>{this.load(A,C=>{g(C)},I,Q)})}parse(A){return new EQ({packedSplats:A})}loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:i,stream:E,streamLength:D,onLoad:o,onProgress:s,onError:t,lod:w,nonLod:a,lodAbove:G,lodBase:r}){Q instanceof ArrayBuffer&&(Q=new Uint8Array(Q));const c=Q?void 0:this.manager.resolveURL((this.path??"")+(g??""));let y=E?.getReader();this.manager.itemStart(c??""),vE.withWorker(async R=>{const S=A?.lod??I?.lod;S&&(w=S);const n=A?.nonLod??I?.nonLod;n!==void 0&&(a=n);const N=async L=>{const{loaded:H,total:Y}=L;if(H!==void 0&&s&&s(new ProgressEvent("progress",{lengthComputable:Y!==0,loaded:H,total:Y})),L.nextChunk){let d;if(!y)d=new Uint8Array(0);else{const{done:l,value:p}=await y.read();l?(y.releaseLock(),y=void 0,d=new Uint8Array(0)):d=p}R.call("nextChunk",{chunk:d})}},M=c?new URL(c,window.location.href).toString():void 0,J=await R.call(I?"loadExtSplats":"loadPackedSplats",{url:M,requestHeader:this.requestHeader,withCredentials:this.withCredentials,fileBytes:Q?.slice(),fileType:C,pathName:c||i,chunked:E!==void 0,chunkedLength:D,encoding:A?.splatEncoding,lod:w,lodBase:r,nonLod:a,lodAbove:G},{onStatus:N});if(J.lodSplats&&(I?J.lodSplats=new vg({...J.lodSplats}):J.lodSplats=new Kg({...J.lodSplats,maxSplats:A?.maxSplats})),I){const L={...J};I.initialize(L),o?.(I)}else{const L={...J};A?(A.initialize(L),o?.(A)):o?.(new Kg(L))}}).catch(R=>{this.manager.itemError(c??""),t?.(R)}).finally(()=>{this.manager.itemEnd(c??"")})}async loadInternalAsync({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:i,stream:E,streamLength:D,onProgress:o,lod:s,nonLod:t,lodAbove:w,lodBase:a}){return new Promise((G,r)=>{this.loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:i,stream:E,streamLength:D,onLoad:G,onProgress:o,onError:r,lod:s,nonLod:t,lodAbove:w,lodBase:a})})}}function fa(B){const A=new DataView(B.buffer).getUint32(0,!0);if((A&16777215)===7957616)return mI.PLY;if((A&16777215)===559903){const I=EG(B,4);return new DataView(I.buffer).getUint32(0,!0)===1347635022?mI.SPZ:void 0}if(A===67324752)return vS(B)?mI.PCSOGSZIP:void 0;if(A===809779538)return mI.RAD}function TS(B){const A=B.split(/[?#]/,1)[0],I=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),g=A.slice(I+1),Q=g.lastIndexOf(".");return Q<=0||Q===g.length-1?"":g.slice(Q+1).toLowerCase()}function OS(B){const A=TS(B);if(A==="ply")return mI.PLY;if(A==="spz")return mI.SPZ;if(A==="splat")return mI.SPLAT;if(A==="ksplat")return mI.KSPLAT;if(A==="sog")return mI.PCSOGSZIP;if(A==="rad")return mI.RAD}function XS(B){try{let A;if(typeof B=="string")A=B;else{const Q=B instanceof ArrayBuffer?new Uint8Array(B):B;if(Q.length>65536)return;A=new TextDecoder().decode(Q)}const I=JSON.parse(A);if(!I||typeof I!="object"||Array.isArray(I))return;const g=I.version===2;for(const Q of["means","scales","quats","sh0"]){if(!I[Q]||typeof I[Q]!="object"||Array.isArray(I[Q]))return;if(g){if(!I[Q].files||(Q==="scales"||Q==="sh0")&&!I[Q].codebook||Q==="means"&&(!I[Q].mins||!I[Q].maxs))return}else if(!I[Q].shape||!I[Q].files||Q!=="quats"&&(!I[Q].mins||!I[Q].maxs))return}return I}catch{return}}function vS(B){try{const A=B instanceof ArrayBuffer?new Uint8Array(B):B;let I=null;const g=My(A,{filter:({name:C})=>C.split(/[\\/]/).pop()==="meta.json"?(I=C,!0):!1});if(!I)return;const Q=XS(g[I]);return Q?{name:I,json:Q}:void 0}catch{return}}const LQ=class Rg{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.maxSh=3,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new co({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new QC({key:"rgbMinMaxLnScaleMinMax",value:new MI(0,1,uI,bI),update:I=>{var g,Q,C,i;return I.set(((g=this.splatEncoding)==null?void 0:g.rgbMin)??0,((Q=this.splatEncoding)==null?void 0:Q.rgbMax)??1,((C=this.splatEncoding)==null?void 0:C.lnScaleMin)??uI,((i=this.splatEncoding)==null?void 0:i.lnScaleMax)??bI),I}}),this.dynoNumSh=new Og({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.dynoShMax=new Xg({key:"shMax",value:new q,update:I=>{var g,Q,C;return I.set(((g=this.splatEncoding)==null?void 0:g.sh1Max)??1,((Q=this.splatEncoding)==null?void 0:Q.sh2Max)??1,((C=this.splatEncoding)==null?void 0:C.sh3Max)??1),I}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.splatEncoding=A.splatEncoding,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.splatEncoding=A.splatEncoding??this.splatEncoding,this.lodSplats=A.lodSplats,A.packedArray?(this.packedArray=A.packedArray,this.numSplats=A.numSplats??this.packedArray.length/4,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0)}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new ho;if((g||I||i)&&await w.loadInternalAsync({packedSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.target&&(this.target.dispose(),this.target.texture.source.data=null,this.target=null),this.source&&(this.source.dispose(),this.source.source.data=null,this.source=null),this.packedArray=null;for(const A in this.extra){const I=this.extra[A];if(I instanceof KI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?this.extra.sh3?3:2:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=IC(this.dyno,A);if(this.hasRgbDir()&&I){const Q=Ig(g).outputs.center,C=WE(oB(Q,I)),{sh1Texture:i,sh2Texture:E,sh3Texture:D}=this.ensureShTextures();let{rgb:o}=pa({coord:ia(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:i,sh2Texture:E,sh3Texture:D,shMax:this.dynoShMax});o=nQ(o,Ig(g).outputs.rgb),g=EB({gsplat:g,rgb:o})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let Q=this.extra.sh1;const{width:C,height:i,depth:E,maxSplats:D}=UA(Q.length/2);if(Q.length<D*2){const s=new Uint32Array(D*2);s.set(Q),this.extra.sh1=s,Q=s}const o=new cI(Q,C,i,E);o.format=oE,o.type=oA,o.internalFormat="RG32UI",o.needsUpdate=!0,A=new dI({value:o,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let Q=this.extra.sh2;const{width:C,height:i,depth:E,maxSplats:D}=UA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh2=s,Q=s}const o=new cI(Q,C,i,E);o.format=hA,o.type=oA,o.internalFormat="RGBA32UI",o.needsUpdate=!0,I=new dI({value:o,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3Texture;if(!g){let Q=this.extra.sh3;const{width:C,height:i,depth:E,maxSplats:D}=UA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh3=s,Q=s}const o=new cI(Q,C,i,E);o.format=hA,o.type=oA,o.internalFormat="RGBA32UI",o.needsUpdate=!0,g=new dI({value:o,key:"sh3"}),this.extra.sh3Texture=g}return{sh1Texture:A,sh2Texture:I,sh3Texture:g}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||I>g){this.maxSplats=UA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4);this.packedArray&&Q.set(this.packedArray),this.packedArray=Q}return this.packedArray}ensureSplatsSh(A,I){let g,Q;if(A===0)return this.ensureSplats(I);if(A===1)g=2,Q="sh1";else if(A===2)g=4,Q="sh2";else if(A===3)g=4,Q="sh3";else throw new Error(`Invalid level: ${A}`);let C=this.extra[Q]?this.extra[Q].length/g:0;const i=I<=C?C:Math.max(I,2*C);if(!this.extra[Q]||i>C){C=UA(i).maxSplats;const E=new Uint32Array(C*g);this.extra[Q]&&E.set(this.extra[Q]),this.extra[Q]=E}return this.extra[Q]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return PE(this.packedArray,A,this.splatEncoding)}setSplat(A,I,g,Q,C,i){const E=this.ensureSplats(A+1);$D(E,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,i.r,i.g,i.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const i=this.ensureSplats(this.numSplats+1);$D(i,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let I=0;I<this.numSplats;++I){const g=PE(this.packedArray,I,this.splatEncoding);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.target&&this.target.dispose();const I=UA(A??1),{width:g,height:Q,depth:C}=I;return this.maxSplats=I.maxSplats,this.target=new vi(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:WQ,minFilter:WQ}),this.target.texture.format=hA,this.target.texture.type=oA,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,i=Math.ceil(Q/_)*_;return I+=i,{base:C,count:Q}});return{maxSplats:I,mapping:g}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():Rg.getEmptyArray}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.maxSplats!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:I,depth:g}=UA(this.maxSplats);this.source=new cI(this.packedArray,A,I,g),this.source.format=hA,this.source.type=oA,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}prepareProgramMaterial(A){let I=Rg.generatorProgram.get(A);if(!I){const Q=wI({index:"int"},{},({index:C},i,{roots:E})=>{A.inputs.index=C;const D=A.outputs.gsplat,o=wa(D,this.dynoRgbMinMaxLnScaleMinMax);E.push(o)});Rg.programTemplate||(Rg.programTemplate=new VE(sB().computeUvec4Template)),I=new Eo({graph:Q,inputs:{index:"_index"},outputs:{output:"target"},template:Rg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),Rg.generatorProgram.set(A,I)}const g=I.prepareMaterial();return Rg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}generate({generator:A,base:I,count:g,renderer:Q}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(I+g>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:C,material:i}=this.prepareProgramMaterial(A);C.update();const E=this.saveRenderState(Q),D=Math.ceil((I+g)/_)*_,o=_*Gg;for(i.uniforms.targetBase.value=I,i.uniforms.targetCount.value=g;I<D;){const s=Math.floor(I/o);i.uniforms.targetLayer.value=s;const t=s*o,w=Math.floor((I-t)/_),a=Math.min(Gg,Math.ceil((D-t)/_));this.target.scissor.set(0,w,_,a-w),Q.setRenderTarget(this.target,s),Q.xr.enabled=!1,Q.autoClear=!1,Rg.fullScreenQuad.render(Q),I+=_*(a-w)}return this.resetRenderState(Q,E),{nextBase:D}}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=this.packedArray.slice(),C=A?(await A.getArray()).slice():void 0,i={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},E=await vE.withWorker(async o=>await o.call(I?"qualityLodPackedSplats":"tinyLodPackedSplats",{numSplats:this.numSplats,packedArray:Q,extra:i,lodBase:g,rgba:C,encoding:this.splatEncoding??xE})),D=new Rg(E);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}extractSplats(A,I){const g=UA(A.length).maxSplats,Q=new Rg({maxSplats:g});for(let C=0;C<A.length;C++){const i=this.getSplat(A[C]);if(I){let E=(A[C]>>>16)*.61803398875;E=E-Math.floor(E);const D=Math.max(0,Math.min(1,Math.abs(E*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(E*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(E*6-1)-1));i.color.r*=D,i.color.g*=o,i.color.b*=s}Q.pushSplat(i.center,i.scales,i.quaternion,i.opacity,i.color)}return Q}};LQ.getEmptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),LQ.programTemplate=null,LQ.generatorProgram=new WeakMap,LQ.fullScreenQuad=new zi(new wE({visible:!1})),LQ.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),LQ.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*2),C=new cI(Q,B,A,I);return C.format=oE,C.type=oA,C.internalFormat="RG32UI",C.needsUpdate=!0,C})();let Kg=LQ;class co extends KI{constructor({packedSplats:A}={}){super({key:"packedSplats",type:ZE,globals:()=>[Bo],value:{textureArray:Kg.getEmptyArray,numSplats:0,rgbMinMaxLnScaleMinMax:new MI(0,1,uI,bI),lodOpacity:!1},update:I=>{var g,Q,C,i,E,D,o,s,t,w,a,G;return I.textureArray=((g=this.packedSplats)==null?void 0:g.getTexture())??Kg.getEmptyArray,I.numSplats=((Q=this.packedSplats)==null?void 0:Q.numSplats)??0,I.rgbMinMaxLnScaleMinMax.set(((i=(C=this.packedSplats)==null?void 0:C.splatEncoding)==null?void 0:i.rgbMin)??0,((D=(E=this.packedSplats)==null?void 0:E.splatEncoding)==null?void 0:D.rgbMax)??1,((s=(o=this.packedSplats)==null?void 0:o.splatEncoding)==null?void 0:s.lnScaleMin)??uI,((w=(t=this.packedSplats)==null?void 0:t.splatEncoding)==null?void 0:w.lnScaleMax)??bI),I.lodOpacity=((G=(a=this.packedSplats)==null?void 0:a.splatEncoding)==null?void 0:G.lodOpacity)??!1,I}}),this.packedSplats=A}}const ZS=qA(`
|
|
12783
|
+
`)}).outputs.gsplat}const Pa=(()=>{const B=new cQ(new Uint32Array(16384),4096,1,hA,oA);return B.internalFormat="RGBA32UI",B.needsUpdate=!0,B})();new ZQ,new vQ,(()=>{try{new Function("return 42;")}catch{return!1}return!0})();class Go extends ze{constructor(A){super(A),this.fileLoader=new _e(A)}load(A,I,g,Q){return this.loadInternal({url:A,onLoad:I,onProgress:g,onError:Q})}async loadAsync(A,I){return new Promise((g,Q)=>{this.load(A,C=>{g(C)},I,Q)})}parse(A){return new EQ({packedSplats:A})}loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:i,stream:E,streamLength:D,onLoad:o,onProgress:s,onError:t,lod:w,nonLod:a,lodAbove:G,lodBase:S}){Q instanceof ArrayBuffer&&(Q=new Uint8Array(Q));const c=Q?void 0:this.manager.resolveURL((this.path??"")+(g??""));let y=E?.getReader();this.manager.itemStart(c??""),ZE.withWorker(async F=>{const R=A?.lod??I?.lod;R&&(w=R);const M=A?.nonLod??I?.nonLod;M!==void 0&&(a=M);const n=async L=>{const{loaded:H,total:Y}=L;if(H!==void 0&&s&&s(new ProgressEvent("progress",{lengthComputable:Y!==0,loaded:H,total:Y})),L.nextChunk){let K;if(!y)K=new Uint8Array(0);else{const{done:l,value:p}=await y.read();l?(y.releaseLock(),y=void 0,K=new Uint8Array(0)):K=p}F.call("nextChunk",{chunk:K})}},N=c?new URL(c,window.location.href).toString():void 0,J=await F.call(I?"loadExtSplats":"loadPackedSplats",{url:N,requestHeader:this.requestHeader,withCredentials:this.withCredentials,fileBytes:Q?.slice(),fileType:C,pathName:c||i,chunked:E!==void 0,chunkedLength:D,encoding:A?.splatEncoding,lod:w,lodBase:S,nonLod:a,lodAbove:G},{onStatus:n});if(J.lodSplats&&(I?J.lodSplats=new vg({...J.lodSplats}):J.lodSplats=new dg({...J.lodSplats,maxSplats:A?.maxSplats})),I){const L={...J};I.initialize(L),o?.(I)}else{const L={...J};A?(A.initialize(L),o?.(A)):o?.(new dg(L))}}).catch(F=>{this.manager.itemError(c??""),t?.(F)}).finally(()=>{this.manager.itemEnd(c??"")})}async loadInternalAsync({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:i,stream:E,streamLength:D,onProgress:o,lod:s,nonLod:t,lodAbove:w,lodBase:a}){return new Promise((G,S)=>{this.loadInternal({packedSplats:A,extSplats:I,url:g,fileBytes:Q,fileType:C,fileName:i,stream:E,streamLength:D,onLoad:G,onProgress:o,onError:S,lod:s,nonLod:t,lodAbove:w,lodBase:a})})}}function Ta(B){const A=new DataView(B.buffer).getUint32(0,!0);if((A&16777215)===7957616)return bI.PLY;if((A&16777215)===559903){const I=wG(B,4);return new DataView(I.buffer).getUint32(0,!0)===1347635022?bI.SPZ:void 0}if(A===67324752)return _S(B)?bI.PCSOGSZIP:void 0;if(A===809779538)return bI.RAD}function WS(B){const A=B.split(/[?#]/,1)[0],I=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),g=A.slice(I+1),Q=g.lastIndexOf(".");return Q<=0||Q===g.length-1?"":g.slice(Q+1).toLowerCase()}function jS(B){const A=WS(B);if(A==="ply")return bI.PLY;if(A==="spz")return bI.SPZ;if(A==="splat")return bI.SPLAT;if(A==="ksplat")return bI.KSPLAT;if(A==="sog")return bI.PCSOGSZIP;if(A==="rad")return bI.RAD}function zS(B){try{let A;if(typeof B=="string")A=B;else{const Q=B instanceof ArrayBuffer?new Uint8Array(B):B;if(Q.length>65536)return;A=new TextDecoder().decode(Q)}const I=JSON.parse(A);if(!I||typeof I!="object"||Array.isArray(I))return;const g=I.version===2;for(const Q of["means","scales","quats","sh0"]){if(!I[Q]||typeof I[Q]!="object"||Array.isArray(I[Q]))return;if(g){if(!I[Q].files||(Q==="scales"||Q==="sh0")&&!I[Q].codebook||Q==="means"&&(!I[Q].mins||!I[Q].maxs))return}else if(!I[Q].shape||!I[Q].files||Q!=="quats"&&(!I[Q].mins||!I[Q].maxs))return}return I}catch{return}}function _S(B){try{const A=B instanceof ArrayBuffer?new Uint8Array(B):B;let I=null;const g=dy(A,{filter:({name:C})=>C.split(/[\\/]/).pop()==="meta.json"?(I=C,!0):!1});if(!I)return;const Q=zS(g[I]);return Q?{name:I,json:Q}:void 0}catch{return}}const LQ=class Rg{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.maxSh=3,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new So({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new BC({key:"rgbMinMaxLnScaleMinMax",value:new NI(0,1,uI,mI),update:I=>{var g,Q,C,i;return I.set(((g=this.splatEncoding)==null?void 0:g.rgbMin)??0,((Q=this.splatEncoding)==null?void 0:Q.rgbMax)??1,((C=this.splatEncoding)==null?void 0:C.lnScaleMin)??uI,((i=this.splatEncoding)==null?void 0:i.lnScaleMax)??mI),I}}),this.dynoNumSh=new Og({key:"numSh",value:0,update:()=>Math.min(this.getNumSh(),this.maxSh)}),this.dynoShMax=new Xg({key:"shMax",value:new q,update:I=>{var g,Q,C;return I.set(((g=this.splatEncoding)==null?void 0:g.sh1Max)??1,((Q=this.splatEncoding)==null?void 0:Q.sh2Max)??1,((C=this.splatEncoding)==null?void 0:C.sh3Max)??1),I}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.maxSplats=A.maxSplats??0,this.splatEncoding=A.splatEncoding,this.lod=A.lod,this.nonLod=A.nonLod,A.url||A.fileBytes||A.stream||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){this.extra=A.extra??{},this.splatEncoding=A.splatEncoding??this.splatEncoding,this.lodSplats=A.lodSplats,A.packedArray?(this.packedArray=A.packedArray,this.numSplats=A.numSplats??this.packedArray.length/4,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/_)*_,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0)}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,construct:D,lod:o,nonLod:s,lodAbove:t}=A;this.lod=o,this.nonLod=s;const w=new Go;if((g||I||i)&&await w.loadInternalAsync({packedSplats:this,url:I,fileBytes:g,fileType:Q,fileName:C,stream:i,streamLength:E,onProgress:A.onProgress,lodAbove:t}),D){const a=D(this);a instanceof Promise&&await a}}dispose(){this.target&&(this.target.dispose(),this.target.texture.source.data=null,this.target=null),this.source&&(this.source.dispose(),this.source.source.data=null,this.source=null),this.packedArray=null;for(const A in this.extra){const I=this.extra[A];if(I instanceof dI){const g=I.value;g?.isTexture&&(g.dispose(),g.source.data=null)}}this.extra={},this.disposeLodSplats()}prepareFetchSplat(){}getNumSplats(){return this.numSplats}hasRgbDir(){return Math.min(this.getNumSh(),this.maxSh)>0}getNumSh(){return this.extra.sh1?this.extra.sh2?this.extra.sh3?3:2:1:0}setMaxSh(A){this.maxSh=A}fetchSplat({index:A,viewOrigin:I}){let g=gC(this.dyno,A);if(this.hasRgbDir()&&I){const Q=Ig(g).outputs.center,C=jE(oB(Q,I)),{sh1Texture:i,sh2Texture:E,sh3Texture:D}=this.ensureShTextures();let{rgb:o}=Oa({coord:ha(A),viewDir:C,numSh:this.dynoNumSh,sh1Texture:i,sh2Texture:E,sh3Texture:D,shMax:this.dynoShMax});o=nQ(o,Ig(g).outputs.rgb),g=EB({gsplat:g,rgb:o})}return g}ensureShTextures(){if(!this.extra.sh1)return{};let A=this.extra.sh1Texture;if(!A){let Q=this.extra.sh1;const{width:C,height:i,depth:E,maxSplats:D}=UA(Q.length/2);if(Q.length<D*2){const s=new Uint32Array(D*2);s.set(Q),this.extra.sh1=s,Q=s}const o=new cI(Q,C,i,E);o.format=sE,o.type=oA,o.internalFormat="RG32UI",o.needsUpdate=!0,A=new KI({value:o,key:"sh1"}),this.extra.sh1Texture=A}if(!this.extra.sh2)return{sh1Texture:A};let I=this.extra.sh2Texture;if(!I){let Q=this.extra.sh2;const{width:C,height:i,depth:E,maxSplats:D}=UA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh2=s,Q=s}const o=new cI(Q,C,i,E);o.format=hA,o.type=oA,o.internalFormat="RGBA32UI",o.needsUpdate=!0,I=new KI({value:o,key:"sh2"}),this.extra.sh2Texture=I}if(!this.extra.sh3)return{sh1Texture:A,sh2Texture:I};let g=this.extra.sh3Texture;if(!g){let Q=this.extra.sh3;const{width:C,height:i,depth:E,maxSplats:D}=UA(Q.length/4);if(Q.length<D*4){const s=new Uint32Array(D*4);s.set(Q),this.extra.sh3=s,Q=s}const o=new cI(Q,C,i,E);o.format=hA,o.type=oA,o.internalFormat="RGBA32UI",o.needsUpdate=!0,g=new KI({value:o,key:"sh3"}),this.extra.sh3Texture=g}return{sh1Texture:A,sh2Texture:I,sh3Texture:g}}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||I>g){this.maxSplats=UA(I).maxSplats;const Q=new Uint32Array(this.maxSplats*4);this.packedArray&&Q.set(this.packedArray),this.packedArray=Q}return this.packedArray}ensureSplatsSh(A,I){let g,Q;if(A===0)return this.ensureSplats(I);if(A===1)g=2,Q="sh1";else if(A===2)g=4,Q="sh2";else if(A===3)g=4,Q="sh3";else throw new Error(`Invalid level: ${A}`);let C=this.extra[Q]?this.extra[Q].length/g:0;const i=I<=C?C:Math.max(I,2*C);if(!this.extra[Q]||i>C){C=UA(i).maxSplats;const E=new Uint32Array(C*g);this.extra[Q]&&E.set(this.extra[Q]),this.extra[Q]=E}return this.extra[Q]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return TE(this.packedArray,A,this.splatEncoding)}setSplat(A,I,g,Q,C,i){const E=this.ensureSplats(A+1);go(E,A,I.x,I.y,I.z,g.x,g.y,g.z,Q.x,Q.y,Q.z,Q.w,C,i.r,i.g,i.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,Q,C){const i=this.ensureSplats(this.numSplats+1);go(i,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,Q,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let I=0;I<this.numSplats;++I){const g=TE(this.packedArray,I,this.splatEncoding);A(I,g.center,g.scales,g.quaternion,g.opacity,g.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.target&&this.target.dispose();const I=UA(A??1),{width:g,height:Q,depth:C}=I;return this.maxSplats=I.maxSplats,this.target=new Zi(g,Q,C,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:WQ,minFilter:WQ}),this.target.texture.format=hA,this.target.texture.type=oA,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let I=0;const g=A.map(Q=>{const C=I,i=Math.ceil(Q/_)*_;return I+=i,{base:C,count:Q}});return{maxSplats:I,mapping:g}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():Rg.getEmptyArray}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.maxSplats!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:I,depth:g}=UA(this.maxSplats);this.source=new cI(this.packedArray,A,I,g),this.source.format=hA,this.source.type=oA,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}prepareProgramMaterial(A){let I=Rg.generatorProgram.get(A);if(!I){const Q=wI({index:"int"},{},({index:C},i,{roots:E})=>{A.inputs.index=C;const D=A.outputs.gsplat,o=ra(D,this.dynoRgbMinMaxLnScaleMinMax);E.push(o)});Rg.programTemplate||(Rg.programTemplate=new WE(sB().computeUvec4Template)),I=new oo({graph:Q,inputs:{index:"_index"},outputs:{output:"target"},template:Rg.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),Rg.generatorProgram.set(A,I)}const g=I.prepareMaterial();return Rg.fullScreenQuad.material=g,{program:I,material:g}}saveRenderState(A){return{target:A.getRenderTarget(),xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,I){A.setRenderTarget(I.target),A.xr.enabled=I.xrEnabled,A.autoClear=I.autoClear}generate({generator:A,base:I,count:g,renderer:Q}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(I+g>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:C,material:i}=this.prepareProgramMaterial(A);C.update();const E=this.saveRenderState(Q),D=Math.ceil((I+g)/_)*_,o=_*Gg;for(i.uniforms.targetBase.value=I,i.uniforms.targetCount.value=g;I<D;){const s=Math.floor(I/o);i.uniforms.targetLayer.value=s;const t=s*o,w=Math.floor((I-t)/_),a=Math.min(Gg,Math.ceil((D-t)/_));this.target.scissor.set(0,w,_,a-w),Q.setRenderTarget(this.target,s),Q.xr.enabled=!1,Q.autoClear=!1,Rg.fullScreenQuad.render(Q),I+=_*(a-w)}return this.resetRenderState(Q,E),{nextBase:D}}disposeLodSplats(){this.lodSplats&&(this.lodSplats.dispose(),this.lodSplats=void 0)}async createLodSplats({rgbaArray:A,quality:I}={}){const g=typeof this.lod=="number"?Math.max(1.1,Math.min(2,this.lod)):I?1.75:1.5,Q=this.packedArray.slice(),C=A?(await A.getArray()).slice():void 0,i={sh1:this.extra.sh1?this.extra.sh1.slice():void 0,sh2:this.extra.sh2?this.extra.sh2.slice():void 0,sh3:this.extra.sh3?this.extra.sh3.slice():void 0},E=await ZE.withWorker(async o=>await o.call(I?"qualityLodPackedSplats":"tinyLodPackedSplats",{numSplats:this.numSplats,packedArray:Q,extra:i,lodBase:g,rgba:C,encoding:this.splatEncoding??qE})),D=new Rg(E);this.lodSplats&&this.lodSplats.dispose(),this.lodSplats=D,this.nonLod=!0,this.lod=I?"quality":!0}extractSplats(A,I){const g=UA(A.length).maxSplats,Q=new Rg({maxSplats:g});for(let C=0;C<A.length;C++){const i=this.getSplat(A[C]);if(I){let E=(A[C]>>>16)*.61803398875;E=E-Math.floor(E);const D=Math.max(0,Math.min(1,Math.abs(E*6-3)-1)),o=Math.max(0,Math.min(1,Math.abs(E*6+1)-1)),s=Math.max(0,Math.min(1,Math.abs(E*6-1)-1));i.color.r*=D,i.color.g*=o,i.color.b*=s}Q.pushSplat(i.center,i.scales,i.quaternion,i.opacity,i.color)}return Q}};LQ.getEmptyArray=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),LQ.programTemplate=null,LQ.generatorProgram=new WeakMap,LQ.fullScreenQuad=new _i(new aE({visible:!1})),LQ.emptyUint32x4=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*4),C=new cI(Q,B,A,I);return C.format=hA,C.type=oA,C.internalFormat="RGBA32UI",C.needsUpdate=!0,C})(),LQ.emptyUint32x2=(()=>{const{width:B,height:A,depth:I,maxSplats:g}=UA(1),Q=new Uint32Array(g*2),C=new cI(Q,B,A,I);return C.format=sE,C.type=oA,C.internalFormat="RG32UI",C.needsUpdate=!0,C})();let dg=LQ;class So extends dI{constructor({packedSplats:A}={}){super({key:"packedSplats",type:VE,globals:()=>[io],value:{textureArray:dg.getEmptyArray,numSplats:0,rgbMinMaxLnScaleMinMax:new NI(0,1,uI,mI),lodOpacity:!1},update:I=>{var g,Q,C,i,E,D,o,s,t,w,a,G;return I.textureArray=((g=this.packedSplats)==null?void 0:g.getTexture())??dg.getEmptyArray,I.numSplats=((Q=this.packedSplats)==null?void 0:Q.numSplats)??0,I.rgbMinMaxLnScaleMinMax.set(((i=(C=this.packedSplats)==null?void 0:C.splatEncoding)==null?void 0:i.rgbMin)??0,((D=(E=this.packedSplats)==null?void 0:E.splatEncoding)==null?void 0:D.rgbMax)??1,((s=(o=this.packedSplats)==null?void 0:o.splatEncoding)==null?void 0:s.lnScaleMin)??uI,((w=(t=this.packedSplats)==null?void 0:t.splatEncoding)==null?void 0:w.lnScaleMax)??mI),I.lodOpacity=((G=(a=this.packedSplats)==null?void 0:a.splatEncoding)==null?void 0:G.lodOpacity)??!1,I}}),this.packedSplats=A}}const $S=qA(`
|
|
12784
12784
|
vec3 evaluatePackedSH1(uvec2 packedData, vec3 viewDir, float sh1Max) {
|
|
12785
12785
|
// Extract sint7 values packed into 2 x uint32
|
|
12786
12786
|
vec3 sh1_0 = vec3(ivec3(
|
|
@@ -12804,7 +12804,7 @@ void main() {\r
|
|
|
12804
12804
|
+ sh1_2 * (-0.4886025 * viewDir.x);
|
|
12805
12805
|
return rgb * (sh1Max / 63.0);
|
|
12806
12806
|
}
|
|
12807
|
-
`),
|
|
12807
|
+
`),Ar=qA(`
|
|
12808
12808
|
vec3 evaluatePackedSH2(uvec4 packedData, vec3 viewDir, float sh2Max) {
|
|
12809
12809
|
// Extract sint8 values packed into 4 x uint32
|
|
12810
12810
|
vec3 sh2_0 = vec3(ivec3(
|
|
@@ -12840,7 +12840,7 @@ void main() {\r
|
|
|
12840
12840
|
+ sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y));
|
|
12841
12841
|
return rgb * (sh2Max / 127.0);
|
|
12842
12842
|
}
|
|
12843
|
-
`),
|
|
12843
|
+
`),Ir=qA(`
|
|
12844
12844
|
vec3 evaluatePackedSH3(uvec4 packedData, vec3 viewDir, float sh3Max) {
|
|
12845
12845
|
// Extract sint6 values packed into 4 x uint32
|
|
12846
12846
|
vec3 sh3_0 = vec3(ivec3(
|
|
@@ -12895,7 +12895,7 @@ void main() {\r
|
|
|
12895
12895
|
+ sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy));
|
|
12896
12896
|
return rgb * (sh3Max / 31.0);
|
|
12897
12897
|
}
|
|
12898
|
-
`);function
|
|
12898
|
+
`);function Oa({coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3Texture:C,shMax:i}){return new tA({inTypes:{coord:"ivec3",viewDir:"vec3",numSh:"int",sh1Texture:"usampler2DArray",sh2Texture:"usampler2DArray",sh3Texture:"usampler2DArray",shMax:"vec3"},outTypes:{rgb:"vec3"},inputs:{coord:B,viewDir:A,numSh:I,sh1Texture:g,sh2Texture:Q,sh3Texture:C,shMax:i},globals:()=>[$S,Ar,Ir],statements:({inputs:E,outputs:D})=>{const o=["vec3 rgb = vec3(0.0);"];return E.sh1Texture&&(o.push(...FA(`
|
|
12899
12899
|
if (${E.numSh} >= 1) {
|
|
12900
12900
|
vec3 sh1Rgb = evaluatePackedSH1(texelFetch(${E.sh1Texture}, ${E.coord}, 0).rg, ${E.viewDir}, ${E.shMax}.x);
|
|
12901
12901
|
rgb += sh1Rgb;
|
|
@@ -12908,7 +12908,7 @@ void main() {\r
|
|
|
12908
12908
|
vec3 sh3Rgb = evaluatePackedSH3(texelFetch(${E.sh3Texture}, ${E.coord}, 0), ${E.viewDir}, ${E.shMax}.z);
|
|
12909
12909
|
rgb += sh3Rgb;
|
|
12910
12910
|
}
|
|
12911
|
-
`)),o.push("}")),o.push("}")),o.push(`${D.rgb} = rgb;`),o}}).outputs}const
|
|
12911
|
+
`)),o.push("}")),o.push("}")),o.push(`${D.rgb} = rgb;`),o}}).outputs}const ro=class nC{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback16=new Uint16Array(0),this.readback32=new Uint32Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new fA,A.target){const{width:I,height:g,doubleBuffer:Q}=A.target,C=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=C,I*C>8192||g*C>8192)throw new Error("Target size too large");this.target=new tE(I*C,g*C,{format:Mg,type:ug,colorSpace:wE}),Q&&(this.back=new tE(I*C,g*C,{format:Mg,type:ug,colorSpace:wE})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.sort32=A.sort32,this.stochastic=A.stochastic??!1,this.orderingFreelist=new zy({allocate:I=>new Uint32Array(I),valid:(I,g)=>I.length===g}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.spark.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.spark.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.spark.autoViewpoints=this.spark.autoViewpoints.filter(I=>I!==this)),this.autoUpdate=A}async prepare({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}){for(g?this.viewToWorld=g:(this.camera=I??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));Q??!0;){const E=C?this.viewToWorld:this.spark.matrixWorld;if(this.spark.updateInternal({scene:A,originToWorld:E}))break;await new Promise(D=>setTimeout(D,10))}const i=this.spark.active;i.refCount+=1,await this.sortUpdate({accumulator:i,viewToWorld:this.viewToWorld}),this.spark.releaseAccumulator(i)}renderTarget({scene:A,camera:I}){var g;const Q=this.back??this.target;if(!Q)throw new Error("Must initialize SparkViewpoint with target");if(I=I??this.camera,!I)throw new Error("Must provide camera");if(I instanceof ji){const i=new ji().copy(I,!1);i.aspect=Q.width/Q.height,i.updateProjectionMatrix(),I=i}this.viewToWorld=I.matrixWorld.clone();const C=this.spark.renderer.getRenderTarget();try{this.spark.renderer.setRenderTarget(Q),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,I)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(C)}Q!==this.target&&([this.target,this.back]=[this.back,this.target]),(g=this.onTextureUpdated)==null||g.call(this,Q.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,I,this.superPixels);const{superXY:Q}=this;if(Q===1)return this.superPixels;const C=A/Q,i=I/Q,E=C*i*4;(!this.pixels||this.pixels.length<E)&&(this.pixels=new Uint8Array(E));const{superPixels:D,pixels:o}=this,s=Q*Q;for(let t=0;t<i;t++){const w=t*C;for(let a=0;a<C;a++){const G=a*Q;let S=0,c=0,y=0,F=0;for(let M=0;M<Q;M++){const n=(t*Q+M)*this.target.width;for(let N=0;N<Q;N++){const J=(n+G+N)*4;S+=D[J],c+=D[J+1],y+=D[J+2],F+=D[J+3]}}const R=(w+a)*4;o[R]=S/s,o[R+1]=c/s,o[R+2]=y/s,o[R+3]=F/s}}return o}async prepareRenderPixels({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}){return await this.prepare({scene:A,camera:I,viewToWorld:g,update:Q,forceOrigin:C}),this.renderTarget({scene:A,camera:I}),this.readTarget()}autoPoll({accumulator:A}){var I,g,Q;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let C=!1,i=!1;if(!this.display)C=!0;else if(A){C=!0;const{mappingVersion:D}=this.display.accumulator;A.mappingVersion===D&&(A.refCount+=1,this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,this.display.viewToWorld.copy(this.viewToWorld),i=!0,this.spark.viewpoint===this&&this.spark.prepareViewpoint(this))}const E=((I=this.sorting)==null?void 0:I.viewToWorld)??((g=this.display)==null?void 0:g.viewToWorld);E&&!Qo({matrix1:this.viewToWorld,matrix2:E,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(C=!0),C&&(A&&(A.refCount+=1),(Q=this.pending)!=null&&Q.accumulator&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:i},this.driveSort())}async driveSort(){for(var A;;){if(this.sorting||!this.pending)return;const{viewToWorld:I,displayed:g}=this.pending;let Q=this.pending.accumulator;if(Q||(Q=((A=this.display)==null?void 0:A.accumulator)??this.spark.active,Q.refCount+=1),this.pending=null,!Q)throw new Error("No accumulator to sort");this.sorting={viewToWorld:I},await this.sortUpdate({accumulator:Q,viewToWorld:I,displayed:g}),this.sorting=null,this.spark.releaseAccumulator(Q)}}async sortUpdate({accumulator:A,viewToWorld:I,displayed:g=!1}){if(this.sortingCheck)throw new Error("Only one sort at a time");this.sortingCheck=!0,A=A??this.spark.active;const{numSplats:Q,maxSplats:C}=A.splats;let i=0,E=this.orderingFreelist.alloc(C);if(this.stochastic){i=Q;for(let D=0;D<Q;++D)E[D]=D}else if(Q>0){const{reader:D,doubleSortReader:o,sort32Reader:s,dynoSortRadial:t,dynoOrigin:w,dynoDirection:a,dynoDepthBias:G,dynoSort360:S,dynoSplats:c}=nC.makeSorter(),y=this.sort32??!1;let F;if(y)this.readback32=D.ensureBuffer(C,this.readback32),F=this.readback32;else{const L=Math.ceil(C/2);this.readback16=D.ensureBuffer(L,this.readback16),F=this.readback16}const R=A.toWorld.clone().invert(),M=I.clone().premultiply(R);t.value=this.sort360?!0:this.sortRadial,w.value.set(0,0,0).applyMatrix4(M),a.value.set(0,0,-1).applyMatrix4(M).sub(w.value).normalize(),G.value=this.depthBias??1,S.value=this.sort360??!1,c.packedSplats=A.splats;const n=y?s:o,N=y?Q:Math.ceil(Q/2);await D.renderReadback({renderer:this.spark.renderer,reader:n,count:N,readback:F});const J=await cG(async L=>{const H=y?"sort32Splats":"sortDoubleSplats";return L.call(H,{maxSplats:C,numSplats:Q,readback:F,ordering:E})});y?this.readback32=J.readback:this.readback16=J.readback,E=J.ordering,i=J.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:I,ordering:E,activeSplats:i,displayed:g}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:I,ordering:g,activeSplats:Q,displayed:C=!1}){if(!this.display)A.refCount+=1,this.display={accumulator:A,viewToWorld:I,geometry:new PD(g,Q)};else{!C&&A!==this.display.accumulator&&(A.refCount+=1,this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=I;const i=this.display.geometry.ordering;i.length===g.length?this.display.geometry.update(g,Q):(this.display.geometry.dispose(),this.display.geometry=new PD(g,Q)),this.orderingFreelist.free(i)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!nC.dynos){const A=new QC({value:!0}),I=new Xg({value:new q}),g=new Xg({value:new q}),Q=new DB({value:1}),C=new QC({value:!1}),i=new So,E=new sC,D=wI({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("No index");const t={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},w=MQ(s,CB("int",2)),a=gC(i,w),G=Ro({gsplat:a,...t}),S=gC(i,nQ(w,CB("int",1))),c=Ro({gsplat:S,...t}),y=gS({vectorType:"vec2",x:G,y:c});return{rgba8:Ma(_G(y))}}),o=wI({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("No index");const t={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},w=gC(i,s),a=Ro({gsplat:w,...t});return{rgba8:Ma(zG(a))}});nC.dynos={dynoSortRadial:A,dynoOrigin:I,dynoDirection:g,dynoDepthBias:Q,dynoSort360:C,dynoSplats:i,reader:E,doubleSortReader:D,sort32Reader:o}}return nC.dynos}};ro.EMPTY_TEXTURE=new g0,ro.dynos=null;let Fo=ro;const gr=qA(`
|
|
12912
12912
|
float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) {
|
|
12913
12913
|
if (!isGsplatActive(gsplat.flags)) {
|
|
12914
12914
|
return INFINITY;
|
|
@@ -12922,9 +12922,9 @@ void main() {\r
|
|
|
12922
12922
|
|
|
12923
12923
|
return sortRadial ? length(center) : biasedDepth;
|
|
12924
12924
|
}
|
|
12925
|
-
`);function
|
|
12925
|
+
`);function Ro({gsplat:B,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C}){return WD({inTypes:{gsplat:RA,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[PI,gr],inputs:{gsplat:B,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:Q,sort360:C},statements:({inputs:i,outputs:E})=>{const{gsplat:D,sortRadial:o,sortOrigin:s,sortDirection:t,sortDepthBias:w,sort360:a}=i;return FA(`
|
|
12926
12926
|
${E.metric} = computeSort(${D}, ${o}, ${s}, ${t}, ${w}, ${a});
|
|
12927
|
-
`)}}).outputs.metric}class Qi{constructor(){this.splats=new Kg,this.toWorld=new fA,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:I,generators:g,forceUpdate:Q,originToWorld:C}){const i=this.mapping.reduce((o,s)=>(o.set(s.node,s),o),new Map);let E=0,D=0;for(const{node:o,generator:s,version:t,base:w,count:a}of g){const G=i.get(o);if((Q||s!==G?.generator||t!==G?.version||w!==G?.base||a!==G?.count)&&s&&a>0){const r=I.apply(s);try{this.splats.generate({generator:r,base:w,count:a,renderer:A})}catch(c){o.generator=void 0,o.generatorError=c}E+=1}D=Math.max(D,w+a)}return this.splats.numSplats=D,this.toWorld.copy(C),this.mapping=g,E!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:I,base:g,count:Q},C)=>{const{node:i,base:E,count:D}=A.mapping[C];return I===i&&g===E&&Q===D})}}const xa=5,ro=class RI extends IQ{constructor(A){const I=RI.makeUniforms(),g=sB(),Q=A.premultipliedAlpha??!0,C=new vQ({glslVersion:Zi,vertexShader:g.oldSplatVertex,fragmentShader:g.oldSplatFragment,uniforms:I,premultipliedAlpha:Q,transparent:!0,depthTest:!0,depthWrite:!1,side:dB});super(qa,C),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new QC({value:new UI}),this.translateToAccumulator=new Xg({value:new q}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.lastStochastic=null,this.pendingUpdate={scene:null,originToWorld:new fA,timeoutId:-1},this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=C,this.uniforms=I;const i=wI({gsplat:RA},{gsplat:RA},({gsplat:E})=>{if(!E)throw new Error("gsplat not defined");return E=Ea(E,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:E}});this.modifier=new Ha(i),this.premultipliedAlpha=Q,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...xE},this.active=new Qi,this.active.refCount=1,this.accumulatorCount=1,this.freeAccumulators=[];for(let E=0;E<1;++E)this.freeAccumulators.push(new Qi),this.accumulatorCount+=1;this.defaultView=new Go({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?_w(A.clock):new Vi}static makeUniforms(){return{renderSize:{value:new JI},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new UI},renderToViewPos:{value:new q},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},stochastic:{value:!1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:RI.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new Hs},splatTexAdd:{value:new JI},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:Kg.getEmptyArray},rgbMinMaxLnScaleMinMax:{value:new MI},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<xa}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=xa)return null;A=new Qi,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new Go({...A,spark:this})}onBeforeRender(A,I,g){var Q,C;const i=this.time??this.clock.getElapsedTime(),E=i-(this.viewpoint.lastTime??i);this.viewpoint.lastTime=i;const D=A.info.render.frame,o=D!==this.lastFrame;this.lastFrame=D;const s=this.viewpoint;if(s===this.defaultView){if(o)if(!A.xr.isPresenting)this.defaultView.viewToWorld=g.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const G=A.xr.getCamera().cameras;this.defaultCameras=G.map(r=>r.matrixWorld),this.defaultView.viewToWorld=zS(this.defaultCameras)??new fA}this.autoUpdate&&this.update({scene:I,viewToWorld:this.defaultView.viewToWorld})}if(o&&(this.material.premultipliedAlpha!==this.premultipliedAlpha&&(this.material.premultipliedAlpha=this.premultipliedAlpha,this.material.needsUpdate=!0),this.uniforms.time.value=i,this.uniforms.deltaTime.value=E,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,s.display&&s.stochastic&&(this.geometry.instanceCount=this.uniforms.numSplats.value)),s.target)this.uniforms.renderSize.value.set(s.target.width,s.target.height);else{const G=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(G.x===1&&G.y===1){const r=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;r&&(G.x=r.framebufferWidth,G.y=r.framebufferHeight)}}const t=g;if(this.uniforms.near.value=t.near,this.uniforms.far.value=t.far,this.uniforms.encodeLinear.value=s.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.minPixelRadius.value=this.minPixelRadius,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.stochastic.value=s.stochastic,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.lastStochastic!==!s.stochastic&&(this.lastStochastic=!s.stochastic,this.material.transparent=!s.stochastic,this.material.depthWrite=s.stochastic,this.material.needsUpdate=!0),this.splatTexture){const{enable:G,texture:r,multiply:c,add:y,near:R,far:S,mid:n}=this.splatTexture;G&&r?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=r,c?this.uniforms.splatTexMul.value.fromArray(c.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set(y?.x??.5,y?.y??.5),this.uniforms.splatTexNear.value=R??this.uniforms.near.value,this.uniforms.splatTexFar.value=S??this.uniforms.far.value,this.uniforms.splatTexMid.value=n??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=RI.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=RI.EMPTY_SPLAT_TEXTURE;const w=((C=s.display)==null?void 0:C.accumulator.toWorld)??new fA,a=g.matrixWorld.clone().invert();w.clone().premultiply(a).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new q)}prepareViewpoint(A){var I,g,Q,C;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:i,geometry:E}=this.viewpoint.display;this.uniforms.numSplats.value=i.splats.numSplats,this.uniforms.packedSplats.value=i.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((I=i.splats.splatEncoding)==null?void 0:I.rgbMin)??0,((g=i.splats.splatEncoding)==null?void 0:g.rgbMax)??1,((Q=i.splats.splatEncoding)==null?void 0:Q.lnScaleMin)??uI,((C=i.splats.splatEncoding)==null?void 0:C.lnScaleMax)??bI),this.geometry=E,this.material.transparent=!this.viewpoint.stochastic,this.material.depthWrite=this.viewpoint.stochastic,this.material.needsUpdate=!0}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=Kg.getEmptyArray,this.geometry=qa}update({scene:A,viewToWorld:I}){const g=this.matrixWorld;this.preUpdate?this.updateInternal({scene:A,originToWorld:g.clone(),viewToWorld:I}):(this.pendingUpdate.scene=A,this.pendingUpdate.originToWorld.copy(g),this.pendingUpdate.timeoutId===-1&&(this.pendingUpdate.timeoutId=setTimeout(()=>{const{scene:Q,originToWorld:C}=this.pendingUpdate;this.pendingUpdate.scene=null,this.pendingUpdate.timeoutId=-1,this.updateInternal({scene:Q,originToWorld:C,viewToWorld:I})&&this.renderer.getContext().flush()},1)))}updateInternal({scene:A,originToWorld:I,viewToWorld:g}){var Q;if(!this.canAllocAccumulator())return!1;I||(I=this.active.toWorld),g=g??I.clone();const C=this.time??this.clock.getElapsedTime(),i=C-(this.lastUpdateTime??C);this.lastUpdateTime=C;const E=this.active.mapping.reduce((r,c)=>(r.set(c.node,c),r),new Map),{generators:D,visibleGenerators:o,globalEdits:s}=this.compileScene(A);for(const r of D)(Q=r.frameUpdate)==null||Q.call(r,{renderer:this.renderer,object:r,time:C,deltaTime:i,viewToWorld:g,globalEdits:s});const t=new Set(o.map(r=>r.uuid));for(const r of D){const c=E.get(r),y=r.generator&&t.has(r.uuid)?r.numSplats:0;(this.needsUpdate||r.generator!==c?.generator||y!==c?.count)&&r.updateVersion()}const w=!Ao({matrix1:I,matrix2:this.active.toWorld,maxDistance:this.originDistance}),a=this.needsUpdate||w||D.length!==E.size||D.some(r=>{var c;return r.version!==((c=E.get(r))==null?void 0:c.version)});this.needsUpdate=!1;let G=null;if(a){if(G=this.maybeAllocAccumulator(),!G)throw new Error("Unreachable");const r=!Ao({matrix1:I,matrix2:G.toWorld,maxDistance:1e-5,minCoorient:.99999}),c=o.map((M,J)=>{const L=E.get(M);return L?[M.version-L.version,L.base,M]:[Number.POSITIVE_INFINITY,M.version,M]}).sort((M,J)=>M[0]!==J[0]?M[0]-J[0]:M[1]-J[1]).map(([M,J,L])=>L),y=c.map(M=>M.numSplats),{maxSplats:R,mapping:S}=G.splats.generateMapping(y),n=c.map((M,J)=>{const{base:L,count:H}=S[J];return{node:M,generator:M.generator,version:M.version,base:L,count:H}});I.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new q),G.ensureGenerate(R),G.splats.splatEncoding={...this.splatEncoding},G.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:n,forceUpdate:r,originToWorld:I}),G.splatsVersion=this.active.splatsVersion+1;const N=G.hasCorrespondence(this.active);G.mappingVersion=this.active.mappingVersion+(N?0:1),this.releaseAccumulator(this.active),this.active=G,this.prepareViewpoint()}return setTimeout(()=>{for(const r of this.autoViewpoints)r.autoPoll({accumulator:G??void 0})},1),!0}compileScene(A){const I=[];A.traverse(C=>{C instanceof wB&&I.push(C)});const g=[];A.traverseVisible(C=>{C instanceof wB&&g.push(C)});const Q=new Set;return A.traverseVisible(C=>{if(C instanceof Ai){let i=C.parent;for(;i!=null&&!(i instanceof EQ);)i=i.parent;i==null&&Q.add(C)}}),{generators:I,visibleGenerators:g,globalEdits:Array.from(Q)}}async renderEnvMap({renderer:A,scene:I,worldCenter:g,size:Q=256,near:C=.1,far:i=1e3,hideObjects:E=[],update:D=!1}){var o,s;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!RI.cubeRender||RI.cubeRender.target.width!==Q||RI.cubeRender.near!==C||RI.cubeRender.far!==i){RI.cubeRender&&RI.cubeRender.target.dispose();const r=new Ns(Q,{format:Ng,generateMipmaps:!0,minFilter:Js}),c=new Us(C,i,r);RI.cubeRender={target:r,camera:c,near:C,far:i}}RI.pmrem||(RI.pmrem=new Ls(A??this.renderer));const t=new fA().setPosition(g);await((o=this.envViewpoint)==null?void 0:o.prepare({scene:I,viewToWorld:t,update:D}));const{target:w,camera:a}=RI.cubeRender;a.position.copy(g);const G=new Map;for(const r of E)G.set(r,r.visible),r.visible=!1;this.prepareViewpoint(this.envViewpoint),a.update(A??this.renderer,I),this.prepareViewpoint(this.defaultView);for(const[r,c]of G.entries())r.visible=c;return(s=RI.pmrem)==null?void 0:s.fromCubemap(w.texture).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof IQ)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof lB&&(Q.envMap=I);else g.material instanceof lB&&(g.material.envMap=I)})}getRgba({generator:A,rgba:I}){const g=this.active.mapping.find(({node:Q})=>Q===A);if(!g)throw new Error("Generator not found");return I=I??new Na,I.fromPackedSplats({packedSplats:this.active.splats,base:g.base,count:g.count,renderer:this.renderer}),I}async readRgba({generator:A,rgba:I}){return I=this.getRgba({generator:A,rgba:I}),I.read()}};ro.cubeRender=null,ro.pmrem=null,ro.EMPTY_SPLAT_TEXTURE=new We;const qa=new uD(new Uint32Array(1),0);wI({packedSplats:ZE,index:"int"},{gsplat:RA},({packedSplats:B,index:A})=>{if(!B||!A)throw new Error("Invalid input");return{gsplat:IC(B,A)}});function zS(B){if(B.length===0)return null;const A=new q,I=new UI,g=new q,Q=[],C=[];for(const i of B)i.decompose(A,I,g),Q.push(A),C.push(I);return new fA().compose(_y(Q),$y(C),new q(1,1,1))}new fA,qA(`
|
|
12927
|
+
`)}}).outputs.metric}class Bi{constructor(){this.splats=new dg,this.toWorld=new fA,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:I,generators:g,forceUpdate:Q,originToWorld:C}){const i=this.mapping.reduce((o,s)=>(o.set(s.node,s),o),new Map);let E=0,D=0;for(const{node:o,generator:s,version:t,base:w,count:a}of g){const G=i.get(o);if((Q||s!==G?.generator||t!==G?.version||w!==G?.base||a!==G?.count)&&s&&a>0){const S=I.apply(s);try{this.splats.generate({generator:S,base:w,count:a,renderer:A})}catch(c){o.generator=void 0,o.generatorError=c}E+=1}D=Math.max(D,w+a)}return this.splats.numSplats=D,this.toWorld.copy(C),this.mapping=g,E!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:I,base:g,count:Q},C)=>{const{node:i,base:E,count:D}=A.mapping[C];return I===i&&g===E&&Q===D})}}const Xa=5,ko=class RI extends IQ{constructor(A){const I=RI.makeUniforms(),g=sB(),Q=A.premultipliedAlpha??!0,C=new vQ({glslVersion:Vi,vertexShader:g.oldSplatVertex,fragmentShader:g.oldSplatFragment,uniforms:I,premultipliedAlpha:Q,transparent:!0,depthTest:!0,depthWrite:!1,side:KB});super(va,C),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new BC({value:new UI}),this.translateToAccumulator=new Xg({value:new q}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.lastStochastic=null,this.pendingUpdate={scene:null,originToWorld:new fA,timeoutId:-1},this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=C,this.uniforms=I;const i=wI({gsplat:RA},{gsplat:RA},({gsplat:E})=>{if(!E)throw new Error("gsplat not defined");return E=ea(E,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:E}});this.modifier=new qa(i),this.premultipliedAlpha=Q,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.minPixelRadius=A.minPixelRadius??0,this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...qE},this.active=new Bi,this.active.refCount=1,this.accumulatorCount=1,this.freeAccumulators=[];for(let E=0;E<1;++E)this.freeAccumulators.push(new Bi),this.accumulatorCount+=1;this.defaultView=new Fo({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?Ea(A.clock):new Wi}static makeUniforms(){return{renderSize:{value:new JI},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new UI},renderToViewPos:{value:new q},maxStdDev:{value:1},minPixelRadius:{value:0},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},stochastic:{value:!1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:RI.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new Ks},splatTexAdd:{value:new JI},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:dg.getEmptyArray},rgbMinMaxLnScaleMinMax:{value:new NI},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<Xa}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=Xa)return null;A=new Bi,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new Fo({...A,spark:this})}onBeforeRender(A,I,g){var Q,C;const i=this.time??this.clock.getElapsedTime(),E=i-(this.viewpoint.lastTime??i);this.viewpoint.lastTime=i;const D=A.info.render.frame,o=D!==this.lastFrame;this.lastFrame=D;const s=this.viewpoint;if(s===this.defaultView){if(o)if(!A.xr.isPresenting)this.defaultView.viewToWorld=g.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const G=A.xr.getCamera().cameras;this.defaultCameras=G.map(S=>S.matrixWorld),this.defaultView.viewToWorld=Qr(this.defaultCameras)??new fA}this.autoUpdate&&this.update({scene:I,viewToWorld:this.defaultView.viewToWorld})}if(o&&(this.material.premultipliedAlpha!==this.premultipliedAlpha&&(this.material.premultipliedAlpha=this.premultipliedAlpha,this.material.needsUpdate=!0),this.uniforms.time.value=i,this.uniforms.deltaTime.value=E,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,s.display&&s.stochastic&&(this.geometry.instanceCount=this.uniforms.numSplats.value)),s.target)this.uniforms.renderSize.value.set(s.target.width,s.target.height);else{const G=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(G.x===1&&G.y===1){const S=(Q=A.xr.getSession())==null?void 0:Q.renderState.baseLayer;S&&(G.x=S.framebufferWidth,G.y=S.framebufferHeight)}}const t=g;if(this.uniforms.near.value=t.near,this.uniforms.far.value=t.far,this.uniforms.encodeLinear.value=s.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.minPixelRadius.value=this.minPixelRadius,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.stochastic.value=s.stochastic,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.lastStochastic!==!s.stochastic&&(this.lastStochastic=!s.stochastic,this.material.transparent=!s.stochastic,this.material.depthWrite=s.stochastic,this.material.needsUpdate=!0),this.splatTexture){const{enable:G,texture:S,multiply:c,add:y,near:F,far:R,mid:M}=this.splatTexture;G&&S?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=S,c?this.uniforms.splatTexMul.value.fromArray(c.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set(y?.x??.5,y?.y??.5),this.uniforms.splatTexNear.value=F??this.uniforms.near.value,this.uniforms.splatTexFar.value=R??this.uniforms.far.value,this.uniforms.splatTexMid.value=M??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=RI.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=RI.EMPTY_SPLAT_TEXTURE;const w=((C=s.display)==null?void 0:C.accumulator.toWorld)??new fA,a=g.matrixWorld.clone().invert();w.clone().premultiply(a).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new q)}prepareViewpoint(A){var I,g,Q,C;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:i,geometry:E}=this.viewpoint.display;this.uniforms.numSplats.value=i.splats.numSplats,this.uniforms.packedSplats.value=i.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((I=i.splats.splatEncoding)==null?void 0:I.rgbMin)??0,((g=i.splats.splatEncoding)==null?void 0:g.rgbMax)??1,((Q=i.splats.splatEncoding)==null?void 0:Q.lnScaleMin)??uI,((C=i.splats.splatEncoding)==null?void 0:C.lnScaleMax)??mI),this.geometry=E,this.material.transparent=!this.viewpoint.stochastic,this.material.depthWrite=this.viewpoint.stochastic,this.material.needsUpdate=!0}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=dg.getEmptyArray,this.geometry=va}update({scene:A,viewToWorld:I}){const g=this.matrixWorld;this.preUpdate?this.updateInternal({scene:A,originToWorld:g.clone(),viewToWorld:I}):(this.pendingUpdate.scene=A,this.pendingUpdate.originToWorld.copy(g),this.pendingUpdate.timeoutId===-1&&(this.pendingUpdate.timeoutId=setTimeout(()=>{const{scene:Q,originToWorld:C}=this.pendingUpdate;this.pendingUpdate.scene=null,this.pendingUpdate.timeoutId=-1,this.updateInternal({scene:Q,originToWorld:C,viewToWorld:I})&&this.renderer.getContext().flush()},1)))}updateInternal({scene:A,originToWorld:I,viewToWorld:g}){var Q;if(!this.canAllocAccumulator())return!1;I||(I=this.active.toWorld),g=g??I.clone();const C=this.time??this.clock.getElapsedTime(),i=C-(this.lastUpdateTime??C);this.lastUpdateTime=C;const E=this.active.mapping.reduce((S,c)=>(S.set(c.node,c),S),new Map),{generators:D,visibleGenerators:o,globalEdits:s}=this.compileScene(A);for(const S of D)(Q=S.frameUpdate)==null||Q.call(S,{renderer:this.renderer,object:S,time:C,deltaTime:i,viewToWorld:g,globalEdits:s});const t=new Set(o.map(S=>S.uuid));for(const S of D){const c=E.get(S),y=S.generator&&t.has(S.uuid)?S.numSplats:0;(this.needsUpdate||S.generator!==c?.generator||y!==c?.count)&&S.updateVersion()}const w=!Qo({matrix1:I,matrix2:this.active.toWorld,maxDistance:this.originDistance}),a=this.needsUpdate||w||D.length!==E.size||D.some(S=>{var c;return S.version!==((c=E.get(S))==null?void 0:c.version)});this.needsUpdate=!1;let G=null;if(a){if(G=this.maybeAllocAccumulator(),!G)throw new Error("Unreachable");const S=!Qo({matrix1:I,matrix2:G.toWorld,maxDistance:1e-5,minCoorient:.99999}),c=o.map((N,J)=>{const L=E.get(N);return L?[N.version-L.version,L.base,N]:[Number.POSITIVE_INFINITY,N.version,N]}).sort((N,J)=>N[0]!==J[0]?N[0]-J[0]:N[1]-J[1]).map(([N,J,L])=>L),y=c.map(N=>N.numSplats),{maxSplats:F,mapping:R}=G.splats.generateMapping(y),M=c.map((N,J)=>{const{base:L,count:H}=R[J];return{node:N,generator:N.generator,version:N.version,base:L,count:H}});I.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new q),G.ensureGenerate(F),G.splats.splatEncoding={...this.splatEncoding},G.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:M,forceUpdate:S,originToWorld:I}),G.splatsVersion=this.active.splatsVersion+1;const n=G.hasCorrespondence(this.active);G.mappingVersion=this.active.mappingVersion+(n?0:1),this.releaseAccumulator(this.active),this.active=G,this.prepareViewpoint()}return setTimeout(()=>{for(const S of this.autoViewpoints)S.autoPoll({accumulator:G??void 0})},1),!0}compileScene(A){const I=[];A.traverse(C=>{C instanceof wB&&I.push(C)});const g=[];A.traverseVisible(C=>{C instanceof wB&&g.push(C)});const Q=new Set;return A.traverseVisible(C=>{if(C instanceof Ii){let i=C.parent;for(;i!=null&&!(i instanceof EQ);)i=i.parent;i==null&&Q.add(C)}}),{generators:I,visibleGenerators:g,globalEdits:Array.from(Q)}}async renderEnvMap({renderer:A,scene:I,worldCenter:g,size:Q=256,near:C=.1,far:i=1e3,hideObjects:E=[],update:D=!1}){var o,s;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!RI.cubeRender||RI.cubeRender.target.width!==Q||RI.cubeRender.near!==C||RI.cubeRender.far!==i){RI.cubeRender&&RI.cubeRender.target.dispose();const S=new Us(Q,{format:Mg,generateMipmaps:!0,minFilter:Hs}),c=new Ys(C,i,S);RI.cubeRender={target:S,camera:c,near:C,far:i}}RI.pmrem||(RI.pmrem=new ds(A??this.renderer));const t=new fA().setPosition(g);await((o=this.envViewpoint)==null?void 0:o.prepare({scene:I,viewToWorld:t,update:D}));const{target:w,camera:a}=RI.cubeRender;a.position.copy(g);const G=new Map;for(const S of E)G.set(S,S.visible),S.visible=!1;this.prepareViewpoint(this.envViewpoint),a.update(A??this.renderer,I),this.prepareViewpoint(this.defaultView);for(const[S,c]of G.entries())S.visible=c;return(s=RI.pmrem)==null?void 0:s.fromCubemap(w.texture).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof IQ)if(Array.isArray(g.material))for(const Q of g.material)Q instanceof lB&&(Q.envMap=I);else g.material instanceof lB&&(g.material.envMap=I)})}getRgba({generator:A,rgba:I}){const g=this.active.mapping.find(({node:Q})=>Q===A);if(!g)throw new Error("Generator not found");return I=I??new Ka,I.fromPackedSplats({packedSplats:this.active.splats,base:g.base,count:g.count,renderer:this.renderer}),I}async readRgba({generator:A,rgba:I}){return I=this.getRgba({generator:A,rgba:I}),I.read()}};ko.cubeRender=null,ko.pmrem=null,ko.EMPTY_SPLAT_TEXTURE=new Q0;const va=new PD(new Uint32Array(1),0);wI({packedSplats:VE,index:"int"},{gsplat:RA},({packedSplats:B,index:A})=>{if(!B||!A)throw new Error("Invalid input");return{gsplat:gC(B,A)}});function Qr(B){if(B.length===0)return null;const A=new q,I=new UI,g=new q,Q=[],C=[];for(const i of B)i.decompose(A,I,g),Q.push(A),C.push(I);return new fA().compose(BG(Q),CG(C),new q(1,1,1))}new fA,qA(`
|
|
12928
12928
|
struct GsplatSkinning {
|
|
12929
12929
|
int numSplats;
|
|
12930
12930
|
int numBones;
|
|
@@ -13101,4 +13101,4 @@ void main() {\r
|
|
|
13101
13101
|
xxyyzz = vec3(cov[0][0], cov[1][1], cov[2][2]);
|
|
13102
13102
|
xyxzyz = vec3(cov[0][1], cov[0][2], cov[1][2]);
|
|
13103
13103
|
}
|
|
13104
|
-
`),new q(-1,-3,1).normalize(),new hQ(1,1,1),new hQ(.5,.5,1),new hQ(1,1,1),new hQ(.25,.25,.5);var ua=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(ua||{});const _S=Object.keys(ua);_S.length,new je(0,0,0,"YXZ");var Fo=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(Fo||{});const ba=Object.keys(Fo);ba.length;const $S=Object.freeze(Object.defineProperty({__proto__:null,ExtSplats:vg,JOINT_IDS:ba,JointEnum:Fo,LN_SCALE_MAX:bI,LN_SCALE_MIN:uI,OldSparkViewpoint:Go,OldSplatAccumulator:Qi,PackedSplats:Kg,PagedSplats:wC,Readback:oC,RgbaArray:Na,SparkRenderer:bS,SplatAccumulator:aB,SplatEdit:Ai,SplatEditSdf:Ja,SplatEdits:La,SplatFileType:mI,SplatGenerator:wB,SplatLoader:ho,SplatMesh:EQ,SplatModifier:Ha,SplatPager:UQ,SplatTransformer:sC,floatToUint8:AC,fromHalf:rg,getSplatFileType:fa,isAndroid:Ww,isIos:OE,isMobile:TE,isOculus:jw,isVisionPro:zw,setPackedSplat:$D,toHalf:Sg,unpackSplat:PE},Symbol.toStringTag,{value:"Module"})),Ro=0,ma=1,Pa=2,ko=2,no=1.25,Ta=1,SI=32,jA=SI/4,Oa=65535,Bi=Math.pow(2,-24),Ci=Symbol("SKIP_GENERATION"),Xa={strategy:Ro,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[Ci]:!1};function mA(B,A,I){return I.min.x=A[B],I.min.y=A[B+1],I.min.z=A[B+2],I.max.x=A[B+3],I.max.y=A[B+4],I.max.z=A[B+5],I}function va(B){let A=-1,I=-1/0;for(let g=0;g<3;g++){const Q=B[g+3]-B[g];Q>I&&(I=Q,A=g)}return A}function Za(B,A){A.set(B)}function Va(B,A,I){let g,Q;for(let C=0;C<3;C++){const i=C+3;g=B[C],Q=A[C],I[C]=g<Q?g:Q,g=B[i],Q=A[i],I[i]=g>Q?g:Q}}function Ei(B,A,I){for(let g=0;g<3;g++){const Q=A[B+2*g],C=A[B+2*g+1],i=Q-C,E=Q+C;i<I[g]&&(I[g]=i),E>I[g+3]&&(I[g+3]=E)}}function aC(B){const A=B[3]-B[0],I=B[4]-B[1],g=B[5]-B[2];return 2*(A*I+I*g+g*A)}function zA(B,A){return A[B+15]===Oa}function rI(B,A){return A[B+6]}function lI(B,A){return A[B+14]}function CI(B){return B+jA}function EI(B,A){const I=A[B+6];return B+I*jA}function No(B,A){return A[B+7]}function Mo(B,A,I,g,Q){let C=1/0,i=1/0,E=1/0,D=-1/0,o=-1/0,s=-1/0,t=1/0,w=1/0,a=1/0,G=-1/0,r=-1/0,c=-1/0;const y=B.offset||0;for(let R=(A-y)*6,S=(A+I-y)*6;R<S;R+=6){const n=B[R+0],N=B[R+1],M=n-N,J=n+N;M<C&&(C=M),J>D&&(D=J),n<t&&(t=n),n>G&&(G=n);const L=B[R+2],H=B[R+3],Y=L-H,d=L+H;Y<i&&(i=Y),d>o&&(o=d),L<w&&(w=L),L>r&&(r=L);const l=B[R+4],p=B[R+5],u=l-p,P=l+p;u<E&&(E=u),P>s&&(s=P),l<a&&(a=l),l>c&&(c=l)}g[0]=C,g[1]=i,g[2]=E,g[3]=D,g[4]=o,g[5]=s,Q[0]=t,Q[1]=w,Q[2]=a,Q[3]=G,Q[4]=r,Q[5]=c}const Zg=32,Ar=(B,A)=>B.candidate-A.candidate,iQ=new Array(Zg).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),ii=new Float32Array(6);function Ir(B,A,I,g,Q,C){let i=-1,E=0;if(C===Ro)i=va(A),i!==-1&&(E=(A[i]+A[i+3])/2);else if(C===ma)i=va(B),i!==-1&&(E=gr(I,g,Q,i));else if(C===Pa){const D=aC(B);let o=no*Q;const s=I.offset||0,t=(g-s)*6,w=(g+Q-s)*6;for(let a=0;a<3;a++){const G=A[a],r=(A[a+3]-G)/Zg;if(Q<Zg/4){const c=[...iQ];c.length=Q;let y=0;for(let S=t;S<w;S+=6,y++){const n=c[y];n.candidate=I[S+2*a],n.count=0;const{bounds:N,leftCacheBounds:M,rightCacheBounds:J}=n;for(let L=0;L<3;L++)J[L]=1/0,J[L+3]=-1/0,M[L]=1/0,M[L+3]=-1/0,N[L]=1/0,N[L+3]=-1/0;Ei(S,I,N)}c.sort(Ar);let R=Q;for(let S=0;S<R;S++){const n=c[S];for(;S+1<R&&c[S+1].candidate===n.candidate;)c.splice(S+1,1),R--}for(let S=t;S<w;S+=6){const n=I[S+2*a];for(let N=0;N<R;N++){const M=c[N];n>=M.candidate?Ei(S,I,M.rightCacheBounds):(Ei(S,I,M.leftCacheBounds),M.count++)}}for(let S=0;S<R;S++){const n=c[S],N=n.count,M=Q-n.count,J=n.leftCacheBounds,L=n.rightCacheBounds;let H=0;N!==0&&(H=aC(J)/D);let Y=0;M!==0&&(Y=aC(L)/D);const d=Ta+no*(H*N+Y*M);d<o&&(i=a,o=d,E=n.candidate)}}else{for(let R=0;R<Zg;R++){const S=iQ[R];S.count=0,S.candidate=G+r+R*r;const n=S.bounds;for(let N=0;N<3;N++)n[N]=1/0,n[N+3]=-1/0}for(let R=t;R<w;R+=6){let S=~~((I[R+2*a]-G)/r);S>=Zg&&(S=Zg-1);const n=iQ[S];n.count++,Ei(R,I,n.bounds)}const c=iQ[Zg-1];Za(c.bounds,c.rightCacheBounds);for(let R=Zg-2;R>=0;R--){const S=iQ[R],n=iQ[R+1];Va(S.bounds,n.rightCacheBounds,S.rightCacheBounds)}let y=0;for(let R=0;R<Zg-1;R++){const S=iQ[R],n=S.count,N=S.bounds,M=iQ[R+1].rightCacheBounds;n!==0&&(y===0?Za(N,ii):Va(N,ii,ii)),y+=n;let J=0,L=0;y!==0&&(J=aC(ii)/D);const H=Q-y;H!==0&&(L=aC(M)/D);const Y=Ta+no*(J*y+L*H);Y<o&&(i=a,o=Y,E=S.candidate)}}}}else console.warn(`BVH: Invalid build strategy value ${C} used.`);return{axis:i,pos:E}}function gr(B,A,I,g){let Q=0;const C=B.offset;for(let i=A,E=A+I;i<E;i++)Q+=B[(i-C)*6+g*2];return Q/I}class Jo{constructor(){this.boundingData=new Float32Array(6)}}function Qr(B,A,I,g,Q,C){let i=g,E=g+Q-1;const D=C.pos,o=C.axis*2,s=I.offset||0;for(;;){for(;i<=E&&I[(i-s)*6+o]<D;)i++;for(;i<=E&&I[(E-s)*6+o]>=D;)E--;if(i<E){for(let t=0;t<A;t++){let w=B[i*A+t];B[i*A+t]=B[E*A+t],B[E*A+t]=w}for(let t=0;t<6;t++){const w=i-s,a=E-s,G=I[w*6+t];I[w*6+t]=I[a*6+t],I[a*6+t]=G}i++,E--}else return i}}let Wa,Di,Uo,ja;const Br=Math.pow(2,32);function Lo(B){return"count"in B?1:1+Lo(B.left)+Lo(B.right)}function Cr(B,A,I){return Wa=new Float32Array(I),Di=new Uint32Array(I),Uo=new Uint16Array(I),ja=new Uint8Array(I),Ho(B,A)}function Ho(B,A){const I=B/4,g=B/2,Q="count"in A,C=A.boundingData;for(let i=0;i<6;i++)Wa[I+i]=C[i];if(Q)return A.buffer?(ja.set(new Uint8Array(A.buffer),B),B+A.buffer.byteLength):(Di[I+6]=A.offset,Uo[g+14]=A.count,Uo[g+15]=Oa,B+SI);{const{left:i,right:E,splitAxis:D}=A,o=B+SI;let s=Ho(o,i);const t=B/SI,w=s/SI-t;if(w>Br)throw new Error("MeshBVH: Cannot store relative child node offset greater than 32 bits.");return Di[I+6]=w,Di[I+7]=D,Ho(s,E)}}function Er(B,A,I,g,Q){const{maxDepth:C,verbose:i,maxLeafSize:E,strategy:D,onProgress:o}=Q,s=B.primitiveBuffer,t=B.primitiveBufferStride,w=new Float32Array(6);let a=!1;const G=new Jo;return Mo(A,I,g,G.boundingData,w),c(G,I,g,w),G;function r(y){o&&o(y/g)}function c(y,R,S,n=null,N=0){if(!a&&N>=C&&(a=!0,i&&console.warn(`BVH: Max depth of ${C} reached when generating BVH. Consider increasing maxDepth.`)),S<=E||N>=C)return r(R+S),y.offset=R,y.count=S,y;const M=Ir(y.boundingData,n,A,R,S,D);if(M.axis===-1)return r(R+S),y.offset=R,y.count=S,y;const J=Qr(s,t,A,R,S,M);if(J===R||J===R+S)r(R+S),y.offset=R,y.count=S;else{y.splitAxis=M.axis;const L=new Jo,H=R,Y=J-R;y.left=L,Mo(A,H,Y,L.boundingData,w),c(L,H,Y,w,N+1);const d=new Jo,l=J,p=S-Y;y.right=d,Mo(A,l,p,d.boundingData,w),c(d,l,p,w,N+1)}return y}}function ir(B,A){const I=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,g=B.getRootRanges(A.range),Q=g[0],C=g[g.length-1],i={offset:Q.offset,count:C.offset+C.count-Q.offset},E=new Float32Array(6*i.count);E.offset=i.offset,B.computePrimitiveBounds(i.offset,i.count,E),B._roots=g.map(D=>{const o=Er(B,E,D.offset,D.count,A),s=Lo(o),t=new I(SI*s);return Cr(0,o,t),t})}class Yo{constructor(A){this._getNewPrimitive=A,this._primitives=[]}getPrimitive(){const A=this._primitives;return A.length===0?this._getNewPrimitive():A.pop()}releasePrimitive(A){this._primitives.push(A)}}class Dr{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const A=[];let I=null;this.setBuffer=g=>{I&&A.push(I),I=g,this.float32Array=new Float32Array(g),this.uint16Array=new Uint16Array(g),this.uint32Array=new Uint32Array(g)},this.clearBuffer=()=>{I=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,A.length!==0&&this.setBuffer(A.pop())}}}const KA=new Dr;let DQ,hB;const cB=[],oi=new Yo(()=>new ag);function or(B,A,I,g,Q,C){DQ=oi.getPrimitive(),hB=oi.getPrimitive(),cB.push(DQ,hB),KA.setBuffer(B._roots[A]);const i=Ko(0,B.geometry,I,g,Q,C);KA.clearBuffer(),oi.releasePrimitive(DQ),oi.releasePrimitive(hB),cB.pop(),cB.pop();const E=cB.length;return E>0&&(hB=cB[E-1],DQ=cB[E-2]),i}function Ko(B,A,I,g,Q=null,C=0,i=0){const{float32Array:E,uint16Array:D,uint32Array:o}=KA;let s=B*2;if(zA(s,D)){const t=rI(B,o),w=lI(s,D);return mA(B,E,DQ),g(t,w,!1,i,C+B/jA,DQ)}else{let t=function(d){const{uint16Array:l,uint32Array:p}=KA;let u=d*2;for(;!zA(u,l);)d=CI(d),u=d*2;return rI(d,p)},w=function(d){const{uint16Array:l,uint32Array:p}=KA;let u=d*2;for(;!zA(u,l);)d=EI(d,p),u=d*2;return rI(d,p)+lI(u,l)};const a=CI(B),G=EI(B,o);let r=a,c=G,y,R,S,n;if(Q&&(S=DQ,n=hB,mA(r,E,S),mA(c,E,n),y=Q(S),R=Q(n),R<y)){r=G,c=a;const d=y;y=R,R=d,S=n}S||(S=DQ,mA(r,E,S));const N=zA(r*2,D),M=I(S,N,y,i+1,C+r/jA);let J;if(M===ko){const d=t(r),l=w(r)-d;J=g(d,l,!0,i+1,C+r/jA,S)}else J=M&&Ko(r,A,I,g,Q,C,i+1);if(J)return!0;n=hB,mA(c,E,n);const L=zA(c*2,D),H=I(n,L,R,i+1,C+c/jA);let Y;if(H===ko){const d=t(c),l=w(c)-d;Y=g(d,l,!0,i+1,C+c/jA,n)}else Y=H&&Ko(c,A,I,g,Q,C,i+1);return!!Y}}const eC=new KA.constructor,si=new KA.constructor,oQ=new Yo(()=>new ag),yB=new ag,GB=new ag,lo=new ag,fo=new ag;let po=!1;function sr(B,A,I,g){if(po)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");po=!0;const Q=B._roots,C=A._roots;let i,E=0,D=0;const o=new fA().copy(I).invert();for(let s=0,t=Q.length;s<t;s++){eC.setBuffer(Q[s]),D=0;const w=oQ.getPrimitive();mA(0,eC.float32Array,w),w.applyMatrix4(o);for(let a=0,G=C.length;a<G&&(si.setBuffer(C[a]),i=Fg(0,0,I,o,g,E,D,0,0,w),si.clearBuffer(),D+=C[a].byteLength/SI,!i);a++);if(oQ.releasePrimitive(w),eC.clearBuffer(),E+=Q[s].byteLength/SI,i)break}return po=!1,i}function Fg(B,A,I,g,Q,C=0,i=0,E=0,D=0,o=null,s=!1){let t,w;s?(t=si,w=eC):(t=eC,w=si);const a=t.float32Array,G=t.uint32Array,r=t.uint16Array,c=w.float32Array,y=w.uint32Array,R=w.uint16Array,S=B*2,n=A*2,N=zA(S,r),M=zA(n,R);let J=!1;if(M&&N)s?J=Q(rI(A,y),lI(A*2,R),rI(B,G),lI(B*2,r),D,i+A/jA,E,C+B/jA):J=Q(rI(B,G),lI(B*2,r),rI(A,y),lI(A*2,R),E,C+B/jA,D,i+A/jA);else if(M){const L=oQ.getPrimitive();mA(A,c,L),L.applyMatrix4(I);const H=CI(B),Y=EI(B,G);mA(H,a,yB),mA(Y,a,GB);const d=L.intersectsBox(yB),l=L.intersectsBox(GB);J=d&&Fg(A,H,g,I,Q,i,C,D,E+1,L,!s)||l&&Fg(A,Y,g,I,Q,i,C,D,E+1,L,!s),oQ.releasePrimitive(L)}else{const L=CI(A),H=EI(A,y);mA(L,c,lo),mA(H,c,fo);const Y=o.intersectsBox(lo),d=o.intersectsBox(fo);if(Y&&d)J=Fg(B,L,I,g,Q,C,i,E,D+1,o,s)||Fg(B,H,I,g,Q,C,i,E,D+1,o,s);else if(Y)if(N)J=Fg(B,L,I,g,Q,C,i,E,D+1,o,s);else{const l=oQ.getPrimitive();l.copy(lo).applyMatrix4(I);const p=CI(B),u=EI(B,G);mA(p,a,yB),mA(u,a,GB);const P=l.intersectsBox(yB),O=l.intersectsBox(GB);J=P&&Fg(L,p,g,I,Q,i,C,D,E+1,l,!s)||O&&Fg(L,u,g,I,Q,i,C,D,E+1,l,!s),oQ.releasePrimitive(l)}else if(d)if(N)J=Fg(B,H,I,g,Q,C,i,E,D+1,o,s);else{const l=oQ.getPrimitive();l.copy(fo).applyMatrix4(I);const p=CI(B),u=EI(B,G);mA(p,a,yB),mA(u,a,GB);const P=l.intersectsBox(yB),O=l.intersectsBox(GB);J=P&&Fg(H,p,g,I,Q,i,C,D,E+1,l,!s)||O&&Fg(H,u,g,I,Q,i,C,D,E+1,l,!s),oQ.releasePrimitive(l)}}return J}const za=new ag,SB=new Float32Array(6);class _a{constructor(){this._roots=null,this.primitiveBuffer=null,this.primitiveBufferStride=null}init(A){A={...Xa,...A},ir(this,A)}getRootRanges(){throw new Error("BVH: getRootRanges() not implemented")}writePrimitiveBounds(){throw new Error("BVH: writePrimitiveBounds() not implemented")}writePrimitiveRangeBounds(A,I,g,Q){let C=1/0,i=1/0,E=1/0,D=-1/0,o=-1/0,s=-1/0;for(let t=A,w=A+I;t<w;t++){this.writePrimitiveBounds(t,SB,0);const[a,G,r,c,y,R]=SB;a<C&&(C=a),c>D&&(D=c),G<i&&(i=G),y>o&&(o=y),r<E&&(E=r),R>s&&(s=R)}return g[Q+0]=C,g[Q+1]=i,g[Q+2]=E,g[Q+3]=D,g[Q+4]=o,g[Q+5]=s,g}computePrimitiveBounds(A,I,g){const Q=g.offset||0;for(let C=A,i=A+I;C<i;C++){this.writePrimitiveBounds(C,SB,0);const[E,D,o,s,t,w]=SB,a=(E+s)/2,G=(D+t)/2,r=(o+w)/2,c=(s-E)/2,y=(t-D)/2,R=(w-o)/2,S=(C-Q)*6;g[S+0]=a,g[S+1]=c+(Math.abs(a)+c)*Bi,g[S+2]=G,g[S+3]=y+(Math.abs(G)+y)*Bi,g[S+4]=r,g[S+5]=R+(Math.abs(r)+R)*Bi}return g}shiftPrimitiveOffsets(A){const I=this._indirectBuffer;if(I)for(let g=0,Q=I.length;g<Q;g++)I[g]+=A;else{const g=this._roots;for(let Q=0;Q<g.length;Q++){const C=g[Q],i=new Uint32Array(C),E=new Uint16Array(C),D=C.byteLength/SI;for(let o=0;o<D;o++){const s=jA*o,t=2*s;zA(t,E)&&(i[s+6]+=A)}}}}traverse(A,I=0){const g=this._roots[I],Q=new Uint32Array(g),C=new Uint16Array(g);i(0);function i(E,D=0){const o=E*2,s=zA(o,C);if(s){const t=Q[E+6],w=C[o+14];A(D,s,new Float32Array(g,E*4,6),t,w)}else{const t=CI(E),w=EI(E,Q),a=No(E,Q);A(D,s,new Float32Array(g,E*4,6),a)||(i(t,D+1),i(w,D+1))}}}refit(){const A=this._roots;for(let I=0,g=A.length;I<g;I++){const Q=A[I],C=new Uint32Array(Q),i=new Uint16Array(Q),E=new Float32Array(Q),D=Q.byteLength/SI;for(let o=D-1;o>=0;o--){const s=o*jA,t=s*2;if(zA(t,i)){const w=rI(s,C),a=lI(t,i);this.writePrimitiveRangeBounds(w,a,SB,0),E.set(SB,s)}else{const w=CI(s),a=EI(s,C);for(let G=0;G<3;G++){const r=E[w+G],c=E[w+G+3],y=E[a+G],R=E[a+G+3];E[s+G]=r<y?r:y,E[s+G+3]=c>R?c:R}}}}}getBoundingBox(A){return A.makeEmpty(),this._roots.forEach(I=>{mA(0,new Float32Array(I),za),A.union(za)}),A}shapecast(A){let{boundsTraverseOrder:I,intersectsBounds:g,intersectsRange:Q,intersectsPrimitive:C,scratchPrimitive:i,iterate:E}=A;if(Q&&C){const t=Q;Q=(w,a,G,r,c)=>t(w,a,G,r,c)?!0:E(w,a,this,C,G,r,i)}else Q||(C?Q=(t,w,a,G)=>E(t,w,this,C,a,G,i):Q=(t,w,a)=>a);let D=!1,o=0;const s=this._roots;for(let t=0,w=s.length;t<w;t++){const a=s[t];if(D=or(this,t,g,Q,I,o),D)break;o+=a.byteLength/SI}return D}bvhcast(A,I,g){let{intersectsRanges:Q}=g;return sr(this,A,I,Q)}}function tr(){return typeof SharedArrayBuffer<"u"}function xo(B){return B.index?B.index.count:B.attributes.position.count}function ti(B){return xo(B)/3}function wr(B,A=ArrayBuffer){return B>65535?new Uint32Array(new A(4*B)):new Uint16Array(new A(2*B))}function ar(B,A){if(!B.index){const I=B.attributes.position.count,g=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,Q=wr(I,g);B.setIndex(new iI(Q,1));for(let C=0;C<I;C++)Q[C]=C}}function er(B,A,I){const g=xo(B)/I,Q=A||B.drawRange,C=Q.start/I,i=(Q.start+Q.count)/I,E=Math.max(0,C),D=Math.min(g,i)-E;return{offset:Math.floor(E),count:Math.floor(D)}}function hr(B,A){return B.groups.map(I=>({offset:I.start/A,count:I.count/A}))}function $a(B,A,I){const g=er(B,A,I),Q=hr(B,I);if(!Q.length)return[g];const C=[],i=g.offset,E=g.offset+g.count,D=xo(B)/I,o=[];for(const w of Q){const{offset:a,count:G}=w,r=a,c=isFinite(G)?G:D-a,y=a+c;r<E&&y>i&&(o.push({pos:Math.max(i,r),isStart:!0}),o.push({pos:Math.min(E,y),isStart:!1}))}o.sort((w,a)=>w.pos!==a.pos?w.pos-a.pos:w.type==="end"?-1:1);let s=0,t=null;for(const w of o){const a=w.pos;s!==0&&a!==t&&C.push({offset:t,count:a-t}),s+=w.isStart?1:-1,t=a}return C}function Ae(B,A){const I=B[B.length-1],g=I.offset+I.count>2**16,Q=B.reduce((o,s)=>o+s.count,0),C=g?4:2,i=A?new SharedArrayBuffer(Q*C):new ArrayBuffer(Q*C),E=g?new Uint32Array(i):new Uint16Array(i);let D=0;for(let o=0;o<B.length;o++){const{offset:s,count:t}=B[o];for(let w=0;w<t;w++)E[D+w]=s+w;D+=t}return E}class Ie extends _a{get indirect(){return!!this._indirectBuffer}get primitiveStride(){return null}get primitiveBufferStride(){return this.indirect?1:this.primitiveStride}set primitiveBufferStride(A){}get primitiveBuffer(){return this.indirect?this._indirectBuffer:this.geometry.index.array}set primitiveBuffer(A){}constructor(A,I={}){if(A.isBufferGeometry){if(A.index&&A.index.isInterleavedBufferAttribute)throw new Error("BVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("BVH: Only BufferGeometries are supported.");if(I.useSharedArrayBuffer&&!tr())throw new Error("BVH: SharedArrayBuffer is not available.");super(),this.geometry=A,this.resolvePrimitiveIndex=I.indirect?g=>this._indirectBuffer[g]:g=>g,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,I={...Xa,...I},I[Ci]||this.init(I)}init(A){const{geometry:I,primitiveStride:g}=this;if(A.indirect){const Q=$a(I,A.range,g),C=Ae(Q,A.useSharedArrayBuffer);this._indirectBuffer=C}else ar(I,A);super.init(A),!I.boundingBox&&A.setBoundingBox&&(I.boundingBox=this.getBoundingBox(new ag))}getRootRanges(A){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:$a(this.geometry,A,this.primitiveStride)}raycastObject3D(){throw new Error("BVH: raycastObject3D() not implemented")}}class Vg{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(A,I){let g=1/0,Q=-1/0;for(let C=0,i=A.length;C<i;C++){const E=A[C][I];g=E<g?E:g,Q=E>Q?E:Q}this.min=g,this.max=Q}setFromPoints(A,I){let g=1/0,Q=-1/0;for(let C=0,i=I.length;C<i;C++){const E=I[C],D=A.dot(E);g=D<g?D:g,Q=D>Q?D:Q}this.min=g,this.max=Q}isSeparated(A){return this.min>A.max||A.min>this.max}}Vg.prototype.setFromBox=function(){const B=new q;return function(A,I){const g=I.min,Q=I.max;let C=1/0,i=-1/0;for(let E=0;E<=1;E++)for(let D=0;D<=1;D++)for(let o=0;o<=1;o++){B.x=g.x*E+Q.x*(1-E),B.y=g.y*D+Q.y*(1-D),B.z=g.z*o+Q.z*(1-o);const s=A.dot(B);C=Math.min(s,C),i=Math.max(s,i)}this.min=C,this.max=i}}();const cr=function(){const B=new q,A=new q,I=new q;return function(g,Q,C){const i=g.start,E=B,D=Q.start,o=A;I.subVectors(i,D),B.subVectors(g.end,g.start),A.subVectors(Q.end,Q.start);const s=I.dot(o),t=o.dot(E),w=o.dot(o),a=I.dot(E),G=E.dot(E)*w-t*t;let r,c;G!==0?r=(s*t-a*w)/G:r=0,c=(s+r*t)/w,C.x=r,C.y=c}}(),qo=function(){const B=new JI,A=new q,I=new q;return function(g,Q,C,i){cr(g,Q,B);let E=B.x,D=B.y;if(E>=0&&E<=1&&D>=0&&D<=1){g.at(E,C),Q.at(D,i);return}else if(E>=0&&E<=1){D<0?Q.at(0,i):Q.at(1,i),g.closestPointToPoint(i,!0,C);return}else if(D>=0&&D<=1){E<0?g.at(0,C):g.at(1,C),Q.closestPointToPoint(C,!0,i);return}else{let o;E<0?o=g.start:o=g.end;let s;D<0?s=Q.start:s=Q.end;const t=A,w=I;if(g.closestPointToPoint(s,!0,A),Q.closestPointToPoint(o,!0,I),t.distanceToSquared(s)<=w.distanceToSquared(o)){C.copy(t),i.copy(s);return}else{C.copy(o),i.copy(w);return}}}}(),yr=function(){const B=new q,A=new q,I=new Ys,g=new bg;return function(Q,C){const{radius:i,center:E}=Q,{a:D,b:o,c:s}=C;if(g.start=D,g.end=o,g.closestPointToPoint(E,!0,B).distanceTo(E)<=i||(g.start=D,g.end=s,g.closestPointToPoint(E,!0,B).distanceTo(E)<=i)||(g.start=o,g.end=s,g.closestPointToPoint(E,!0,B).distanceTo(E)<=i))return!0;const t=C.getPlane(I);if(Math.abs(t.distanceToPoint(E))<=i){const w=t.projectPoint(E,A);if(C.containsPoint(w))return!0}return!1}}(),Gr=["x","y","z"],Wg=1e-15,ge=Wg*Wg;function gg(B){return Math.abs(B)<Wg}class Qg extends eQ{constructor(...A){super(...A),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new q),this.satBounds=new Array(4).fill().map(()=>new Vg),this.points=[this.a,this.b,this.c],this.plane=new Ys,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new bg,this.needsUpdate=!0}intersectsSphere(A){return yr(A,this)}update(){const A=this.a,I=this.b,g=this.c,Q=this.points,C=this.satAxes,i=this.satBounds,E=C[0],D=i[0];this.getNormal(E),D.setFromPoints(E,Q);const o=C[1],s=i[1];o.subVectors(A,I),s.setFromPoints(o,Q);const t=C[2],w=i[2];t.subVectors(I,g),w.setFromPoints(t,Q);const a=C[3],G=i[3];a.subVectors(g,A),G.setFromPoints(a,Q);const r=o.length(),c=t.length(),y=a.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,r<Wg?c<Wg||y<Wg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(A),this.degenerateSegment.end.copy(g)):c<Wg?y<Wg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(I),this.degenerateSegment.end.copy(A)):y<Wg&&(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(g),this.degenerateSegment.end.copy(I)),this.plane.setFromNormalAndCoplanarPoint(E,A),this.needsUpdate=!1}}Qg.prototype.closestPointToSegment=function(){const B=new q,A=new q,I=new bg;return function(g,Q=null,C=null){const{start:i,end:E}=g,D=this.points;let o,s=1/0;for(let t=0;t<3;t++){const w=(t+1)%3;I.start.copy(D[t]),I.end.copy(D[w]),qo(I,g,B,A),o=B.distanceToSquared(A),o<s&&(s=o,Q&&Q.copy(B),C&&C.copy(A))}return this.closestPointToPoint(i,B),o=i.distanceToSquared(B),o<s&&(s=o,Q&&Q.copy(B),C&&C.copy(i)),this.closestPointToPoint(E,B),o=E.distanceToSquared(B),o<s&&(s=o,Q&&Q.copy(B),C&&C.copy(E)),Math.sqrt(s)}}(),Qg.prototype.intersectsTriangle=function(){const B=new Qg,A=new Vg,I=new Vg,g=new q,Q=new q,C=new q,i=new q,E=new bg,D=new bg,o=new q,s=new JI,t=new JI;function w(S,n,N,M){const J=g;!S.isDegenerateIntoPoint&&!S.isDegenerateIntoSegment?J.copy(S.plane.normal):J.copy(n.plane.normal);const L=S.satBounds,H=S.satAxes;for(let l=1;l<4;l++){const p=L[l],u=H[l];if(A.setFromPoints(u,n.points),p.isSeparated(A)||(i.copy(J).cross(u),A.setFromPoints(i,S.points),I.setFromPoints(i,n.points),A.isSeparated(I)))return!1}const Y=n.satBounds,d=n.satAxes;for(let l=1;l<4;l++){const p=Y[l],u=d[l];if(A.setFromPoints(u,S.points),p.isSeparated(A)||(i.crossVectors(J,u),A.setFromPoints(i,S.points),I.setFromPoints(i,n.points),A.isSeparated(I)))return!1}return N&&(M||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),N.start.set(0,0,0),N.end.set(0,0,0)),!0}function a(S,n,N,M,J,L,H,Y,d,l,p){let u=H/(H-Y);l.x=M+(J-M)*u,p.start.subVectors(n,S).multiplyScalar(u).add(S),u=H/(H-d),l.y=M+(L-M)*u,p.end.subVectors(N,S).multiplyScalar(u).add(S)}function G(S,n,N,M,J,L,H,Y,d,l,p){if(J>0)a(S.c,S.a,S.b,M,n,N,d,H,Y,l,p);else if(L>0)a(S.b,S.a,S.c,N,n,M,Y,H,d,l,p);else if(Y*d>0||H!=0)a(S.a,S.b,S.c,n,N,M,H,Y,d,l,p);else if(Y!=0)a(S.b,S.a,S.c,N,n,M,Y,H,d,l,p);else if(d!=0)a(S.c,S.a,S.b,M,n,N,d,H,Y,l,p);else return!0;return!1}function r(S,n,N,M){const J=n.degenerateSegment,L=S.plane.distanceToPoint(J.start),H=S.plane.distanceToPoint(J.end);return gg(L)?gg(H)?w(S,n,N,M):(N&&(N.start.copy(J.start),N.end.copy(J.start)),S.containsPoint(J.start)):gg(H)?(N&&(N.start.copy(J.end),N.end.copy(J.end)),S.containsPoint(J.end)):S.plane.intersectLine(J,g)!=null?(N&&(N.start.copy(g),N.end.copy(g)),S.containsPoint(g)):!1}function c(S,n,N){const M=n.a;return gg(S.plane.distanceToPoint(M))&&S.containsPoint(M)?(N&&(N.start.copy(M),N.end.copy(M)),!0):!1}function y(S,n,N){const M=S.degenerateSegment,J=n.a;return M.closestPointToPoint(J,!0,g),J.distanceToSquared(g)<ge?(N&&(N.start.copy(J),N.end.copy(J)),!0):!1}function R(S,n,N,M){if(S.isDegenerateIntoSegment)if(n.isDegenerateIntoSegment){const J=S.degenerateSegment,L=n.degenerateSegment,H=Q,Y=C;J.delta(H),L.delta(Y);const d=g.subVectors(L.start,J.start),l=H.x*Y.y-H.y*Y.x;if(gg(l))return!1;const p=(d.x*Y.y-d.y*Y.x)/l,u=-(H.x*d.y-H.y*d.x)/l;if(p<0||p>1||u<0||u>1)return!1;const P=J.start.z+H.z*p,O=L.start.z+Y.z*u;return gg(P-O)?(N&&(N.start.copy(J.start).addScaledVector(H,p),N.end.copy(J.start).addScaledVector(H,p)),!0):!1}else return n.isDegenerateIntoPoint?y(S,n,N):r(n,S,N,M);else{if(S.isDegenerateIntoPoint)return n.isDegenerateIntoPoint?n.a.distanceToSquared(S.a)<ge?(N&&(N.start.copy(S.a),N.end.copy(S.a)),!0):!1:n.isDegenerateIntoSegment?y(n,S,N):c(n,S,N);if(n.isDegenerateIntoPoint)return c(S,n,N);if(n.isDegenerateIntoSegment)return r(S,n,N,M)}}return function(S,n=null,N=!1){this.needsUpdate&&this.update(),S.isExtendedTriangle?S.needsUpdate&&S.update():(B.copy(S),B.update(),S=B);const M=R(this,S,n,N);if(M!==void 0)return M;const J=this.plane,L=S.plane;let H=L.distanceToPoint(this.a),Y=L.distanceToPoint(this.b),d=L.distanceToPoint(this.c);gg(H)&&(H=0),gg(Y)&&(Y=0),gg(d)&&(d=0);const l=H*Y,p=H*d;if(l>0&&p>0)return!1;let u=J.distanceToPoint(S.a),P=J.distanceToPoint(S.b),O=J.distanceToPoint(S.c);gg(u)&&(u=0),gg(P)&&(P=0),gg(O)&&(O=0);const W=u*P,T=u*O;if(W>0&&T>0)return!1;Q.copy(J.normal),C.copy(L.normal);const j=Q.cross(C);let EA=0,wA=Math.abs(j.x);const iA=Math.abs(j.y);iA>wA&&(wA=iA,EA=1),Math.abs(j.z)>wA&&(EA=2);const IA=Gr[EA],BA=this.a[IA],AA=this.b[IA],$=this.c[IA],z=S.a[IA],LA=S.b[IA],NA=S.c[IA];if(G(this,BA,AA,$,l,p,H,Y,d,s,E))return w(this,S,n,N);if(G(S,z,LA,NA,W,T,u,P,O,t,D))return w(this,S,n,N);if(s.y<s.x){const MA=s.y;s.y=s.x,s.x=MA,o.copy(E.start),E.start.copy(E.end),E.end.copy(o)}if(t.y<t.x){const MA=t.y;t.y=t.x,t.x=MA,o.copy(D.start),D.start.copy(D.end),D.end.copy(o)}return s.y<t.x||t.y<s.x?!1:(n&&(t.x>s.x?n.start.copy(D.start):n.start.copy(E.start),t.y<s.y?n.end.copy(D.end):n.end.copy(E.end)),!0)}}(),Qg.prototype.distanceToPoint=function(){const B=new q;return function(A){return this.closestPointToPoint(A,B),A.distanceTo(B)}}(),Qg.prototype.distanceToTriangle=function(){const B=new q,A=new q,I=["a","b","c"],g=new bg,Q=new bg;return function(C,i=null,E=null){const D=i||E?g:null;if(this.intersectsTriangle(C,D))return(i||E)&&(i&&D.getCenter(i),E&&D.getCenter(E)),0;let o=1/0;for(let s=0;s<3;s++){let t;const w=I[s],a=C[w];this.closestPointToPoint(a,B),t=a.distanceToSquared(B),t<o&&(o=t,i&&i.copy(B),E&&E.copy(a));const G=this[w];C.closestPointToPoint(G,B),t=G.distanceToSquared(B),t<o&&(o=t,i&&i.copy(G),E&&E.copy(B))}for(let s=0;s<3;s++){const t=I[s],w=I[(s+1)%3];g.set(this[t],this[w]);for(let a=0;a<3;a++){const G=I[a],r=I[(a+1)%3];Q.set(C[G],C[r]),qo(g,Q,B,A);const c=B.distanceToSquared(A);c<o&&(o=c,i&&i.copy(B),E&&E.copy(A))}}return Math.sqrt(o)}}();class FI{constructor(A,I,g){this.isOrientedBox=!0,this.min=new q,this.max=new q,this.matrix=new fA,this.invMatrix=new fA,this.points=new Array(8).fill().map(()=>new q),this.satAxes=new Array(3).fill().map(()=>new q),this.satBounds=new Array(3).fill().map(()=>new Vg),this.alignedSatBounds=new Array(3).fill().map(()=>new Vg),this.needsUpdate=!1,A&&this.min.copy(A),I&&this.max.copy(I),g&&this.matrix.copy(g)}set(A,I,g){this.min.copy(A),this.max.copy(I),this.matrix.copy(g),this.needsUpdate=!0}copy(A){this.min.copy(A.min),this.max.copy(A.max),this.matrix.copy(A.matrix),this.needsUpdate=!0}}FI.prototype.update=function(){return function(){const B=this.matrix,A=this.min,I=this.max,g=this.points;for(let D=0;D<=1;D++)for(let o=0;o<=1;o++)for(let s=0;s<=1;s++){const t=1*D|2*o|4*s,w=g[t];w.x=D?I.x:A.x,w.y=o?I.y:A.y,w.z=s?I.z:A.z,w.applyMatrix4(B)}const Q=this.satBounds,C=this.satAxes,i=g[0];for(let D=0;D<3;D++){const o=C[D],s=Q[D],t=1<<D,w=g[t];o.subVectors(i,w),s.setFromPoints(o,g)}const E=this.alignedSatBounds;E[0].setFromPointsField(g,"x"),E[1].setFromPointsField(g,"y"),E[2].setFromPointsField(g,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}}(),FI.prototype.intersectsBox=function(){const B=new Vg;return function(A){this.needsUpdate&&this.update();const I=A.min,g=A.max,Q=this.satBounds,C=this.satAxes,i=this.alignedSatBounds;if(B.min=I.x,B.max=g.x,i[0].isSeparated(B)||(B.min=I.y,B.max=g.y,i[1].isSeparated(B))||(B.min=I.z,B.max=g.z,i[2].isSeparated(B)))return!1;for(let E=0;E<3;E++){const D=C[E],o=Q[E];if(B.setFromBox(D,A),o.isSeparated(B))return!1}return!0}}(),FI.prototype.intersectsTriangle=function(){const B=new Qg,A=new Array(3),I=new Vg,g=new Vg,Q=new q;return function(C){this.needsUpdate&&this.update(),C.isExtendedTriangle?C.needsUpdate&&C.update():(B.copy(C),B.update(),C=B);const i=this.satBounds,E=this.satAxes;A[0]=C.a,A[1]=C.b,A[2]=C.c;for(let t=0;t<3;t++){const w=i[t],a=E[t];if(I.setFromPoints(a,A),w.isSeparated(I))return!1}const D=C.satBounds,o=C.satAxes,s=this.points;for(let t=0;t<3;t++){const w=D[t],a=o[t];if(I.setFromPoints(a,s),w.isSeparated(I))return!1}for(let t=0;t<3;t++){const w=E[t];for(let a=0;a<4;a++){const G=o[a];if(Q.crossVectors(w,G),I.setFromPoints(Q,A),g.setFromPoints(Q,s),I.isSeparated(g))return!1}}return!0}}(),FI.prototype.closestPointToPoint=function(){return function(B,A){return this.needsUpdate&&this.update(),A.copy(B).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),A}}(),FI.prototype.distanceToPoint=function(){const B=new q;return function(A){return this.closestPointToPoint(A,B),A.distanceTo(B)}}(),FI.prototype.distanceToBox=function(){const B=["x","y","z"],A=new Array(12).fill().map(()=>new bg),I=new Array(12).fill().map(()=>new bg),g=new q,Q=new q;return function(C,i=0,E=null,D=null){if(this.needsUpdate&&this.update(),this.intersectsBox(C))return(E||D)&&(C.getCenter(Q),this.closestPointToPoint(Q,g),C.closestPointToPoint(g,Q),E&&E.copy(g),D&&D.copy(Q)),0;const o=i*i,s=C.min,t=C.max,w=this.points;let a=1/0;for(let r=0;r<8;r++){const c=w[r];Q.copy(c).clamp(s,t);const y=c.distanceToSquared(Q);if(y<a&&(a=y,E&&E.copy(c),D&&D.copy(Q),y<o))return Math.sqrt(y)}let G=0;for(let r=0;r<3;r++)for(let c=0;c<=1;c++)for(let y=0;y<=1;y++){const R=(r+1)%3,S=(r+2)%3,n=c<<R|y<<S,N=1<<r|c<<R|y<<S,M=w[n],J=w[N];A[G].set(M,J);const L=B[r],H=B[R],Y=B[S],d=I[G],l=d.start,p=d.end;l[L]=s[L],l[H]=c?s[H]:t[H],l[Y]=y?s[Y]:t[H],p[L]=t[L],p[H]=c?s[H]:t[H],p[Y]=y?s[Y]:t[H],G++}for(let r=0;r<=1;r++)for(let c=0;c<=1;c++)for(let y=0;y<=1;y++){Q.x=r?t.x:s.x,Q.y=c?t.y:s.y,Q.z=y?t.z:s.z,this.closestPointToPoint(Q,g);const R=Q.distanceToSquared(g);if(R<a&&(a=R,E&&E.copy(g),D&&D.copy(Q),R<o))return Math.sqrt(R)}for(let r=0;r<12;r++){const c=A[r];for(let y=0;y<12;y++){const R=I[y];qo(c,R,g,Q);const S=g.distanceToSquared(Q);if(S<a&&(a=S,E&&E.copy(g),D&&D.copy(Q),S<o))return Math.sqrt(S)}}return Math.sqrt(a)}}();class Sr extends Yo{constructor(){super(()=>new Qg)}}const Bg=new Sr,hC=new q,uo=new q;function rr(B,A,I={},g=0,Q=1/0){const C=g*g,i=Q*Q;let E=1/0,D=null;if(B.shapecast({boundsTraverseOrder:s=>(hC.copy(A).clamp(s.min,s.max),hC.distanceToSquared(A)),intersectsBounds:(s,t,w)=>w<E&&w<i,intersectsTriangle:(s,t)=>{s.closestPointToPoint(A,hC);const w=A.distanceToSquared(hC);return w<E&&(uo.copy(hC),E=w,D=t),w<C}}),E===1/0)return null;const o=Math.sqrt(E);return I.point?I.point.copy(uo):I.point=uo.clone(),I.distance=o,I.faceIndex=D,I}const wi=parseInt(ji)>=169,Fr=parseInt(ji)<=161,HQ=new q,YQ=new q,KQ=new q,ai=new JI,ei=new JI,hi=new JI,Qe=new q,Be=new q,Ce=new q,cC=new q;function Rr(B,A,I,g,Q,C,i,E){let D;if(C===ze?D=B.intersectTriangle(g,I,A,!0,Q):D=B.intersectTriangle(A,I,g,C!==dB,Q),D===null)return null;const o=B.origin.distanceTo(Q);return o<i||o>E?null:{distance:o,point:Q.clone()}}function Ee(B,A,I,g,Q,C,i,E,D,o,s){HQ.fromBufferAttribute(A,C),YQ.fromBufferAttribute(A,i),KQ.fromBufferAttribute(A,E);const t=Rr(B,HQ,YQ,KQ,cC,D,o,s);if(t){if(g){ai.fromBufferAttribute(g,C),ei.fromBufferAttribute(g,i),hi.fromBufferAttribute(g,E),t.uv=new JI;const a=eQ.getInterpolation(cC,HQ,YQ,KQ,ai,ei,hi,t.uv);wi||(t.uv=a)}if(Q){ai.fromBufferAttribute(Q,C),ei.fromBufferAttribute(Q,i),hi.fromBufferAttribute(Q,E),t.uv1=new JI;const a=eQ.getInterpolation(cC,HQ,YQ,KQ,ai,ei,hi,t.uv1);wi||(t.uv1=a),Fr&&(t.uv2=t.uv1)}if(I){Qe.fromBufferAttribute(I,C),Be.fromBufferAttribute(I,i),Ce.fromBufferAttribute(I,E),t.normal=new q;const a=eQ.getInterpolation(cC,HQ,YQ,KQ,Qe,Be,Ce,t.normal);t.normal.dot(B.direction)>0&&t.normal.multiplyScalar(-1),wi||(t.normal=a)}const w={a:C,b:i,c:E,normal:new q,materialIndex:0};if(eQ.getNormal(HQ,YQ,KQ,w.normal),t.face=w,t.faceIndex=C,wi){const a=new q;eQ.getBarycoord(cC,HQ,YQ,KQ,a),t.barycoord=a}}return t}function ie(B){return B&&B.isMaterial?B.side:B}function ci(B,A,I,g,Q,C,i){const E=g*3;let D=E+0,o=E+1,s=E+2;const{index:t,groups:w}=B;B.index&&(D=t.getX(D),o=t.getX(o),s=t.getX(s));const{position:a,normal:G,uv:r,uv1:c}=B.attributes;if(Array.isArray(A)){const y=g*3;for(let R=0,S=w.length;R<S;R++){const{start:n,count:N,materialIndex:M}=w[R];if(y>=n&&y<n+N){const J=ie(A[M]),L=Ee(I,a,G,r,c,D,o,s,J,C,i);if(L)if(L.faceIndex=g,L.face.materialIndex=M,Q)Q.push(L);else return L}}}else{const y=ie(A),R=Ee(I,a,G,r,c,D,o,s,y,C,i);if(R)if(R.faceIndex=g,R.face.materialIndex=0,Q)Q.push(R);else return R}return null}function vA(B,A,I,g){const Q=B.a,C=B.b,i=B.c;let E=A,D=A+1,o=A+2;I&&(E=I.getX(E),D=I.getX(D),o=I.getX(o)),Q.x=g.getX(E),Q.y=g.getY(E),Q.z=g.getZ(E),C.x=g.getX(D),C.y=g.getY(D),C.z=g.getZ(D),i.x=g.getX(o),i.y=g.getY(o),i.z=g.getZ(o)}function kr(B,A,I,g,Q,C,i,E){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++)ci(D,A,I,s,C,i,E)}function nr(B,A,I,g,Q,C,i){const{geometry:E,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=ci(E,A,I,t,null,C,i),a&&a.distance<o&&(s=a,o=a.distance)}return s}function Nr(B,A,I,g,Q,C,i){const{geometry:E}=I,{index:D}=E,o=E.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=s,vA(i,w*3,D,o),i.needsUpdate=!0,g(i,w,Q,C))return!0}return!1}function Mr(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,i,E,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],i=new Uint32Array(C),E=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,G=!1){const r=w*2;if(zA(r,E)){const c=rI(w,i),y=lI(r,E);let R=1/0,S=1/0,n=1/0,N=-1/0,M=-1/0,J=-1/0;for(let L=3*c,H=3*(c+y);L<H;L++){let Y=g[L];const d=Q.getX(Y),l=Q.getY(Y),p=Q.getZ(Y);d<R&&(R=d),d>N&&(N=d),l<S&&(S=l),l>M&&(M=l),p<n&&(n=p),p>J&&(J=p)}return D[w+0]!==R||D[w+1]!==S||D[w+2]!==n||D[w+3]!==N||D[w+4]!==M||D[w+5]!==J?(D[w+0]=R,D[w+1]=S,D[w+2]=n,D[w+3]=N,D[w+4]=M,D[w+5]=J,!0):!1}else{const c=CI(w),y=EI(w,i);let R=G,S=!1,n=!1;if(A){if(!R){const Y=c/jA+a/SI,d=y/jA+a/SI;S=A.has(Y),n=A.has(d),R=!S&&!n}}else S=!0,n=!0;const N=R||S,M=R||n;let J=!1;N&&(J=t(c,a,R));let L=!1;M&&(L=t(y,a,R));const H=J||L;if(H)for(let Y=0;Y<3;Y++){const d=c+Y,l=y+Y,p=D[d],u=D[d+3],P=D[l],O=D[l+3];D[w+Y]=p<P?p:P,D[w+Y+3]=u>O?u:O}return H}}}function sQ(B,A,I,g,Q){let C,i,E,D,o,s;const t=1/I.direction.x,w=1/I.direction.y,a=1/I.direction.z,G=I.origin.x,r=I.origin.y,c=I.origin.z;let y=A[B],R=A[B+3],S=A[B+1],n=A[B+3+1],N=A[B+2],M=A[B+3+2];return t>=0?(C=(y-G)*t,i=(R-G)*t):(C=(R-G)*t,i=(y-G)*t),w>=0?(E=(S-r)*w,D=(n-r)*w):(E=(n-r)*w,D=(S-r)*w),C>D||E>i||((E>C||isNaN(C))&&(C=E),(D<i||isNaN(i))&&(i=D),a>=0?(o=(N-c)*a,s=(M-c)*a):(o=(M-c)*a,s=(N-c)*a),C>s||o>i)?!1:((o>C||C!==C)&&(C=o),(s<i||i!==i)&&(i=s),C<=Q&&i>=g)}function Jr(B,A,I,g,Q,C,i,E){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++){let w=o?o[s]:s;ci(D,A,I,w,C,i,E)}}function Ur(B,A,I,g,Q,C,i){const{geometry:E,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=ci(E,A,I,D?D[t]:t,null,C,i),a&&a.distance<o&&(s=a,o=a.distance)}return s}function Lr(B,A,I,g,Q,C,i){const{geometry:E}=I,{index:D}=E,o=E.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=I.resolveTriangleIndex(s),vA(i,w*3,D,o),i.needsUpdate=!0,g(i,w,Q,C))return!0}return!1}function Hr(B,A,I,g,Q,C,i){KA.setBuffer(B._roots[A]),bo(0,B,I,g,Q,C,i),KA.clearBuffer()}function bo(B,A,I,g,Q,C,i){const{float32Array:E,uint16Array:D,uint32Array:o}=KA,s=B*2;if(zA(s,D)){const t=rI(B,o),w=lI(s,D);kr(A,I,g,t,w,Q,C,i)}else{const t=CI(B);sQ(t,E,g,C,i)&&bo(t,A,I,g,Q,C,i);const w=EI(B,o);sQ(w,E,g,C,i)&&bo(w,A,I,g,Q,C,i)}}const Yr=["x","y","z"];function Kr(B,A,I,g,Q,C){KA.setBuffer(B._roots[A]);const i=mo(0,B,I,g,Q,C);return KA.clearBuffer(),i}function mo(B,A,I,g,Q,C){const{float32Array:i,uint16Array:E,uint32Array:D}=KA;let o=B*2;if(zA(o,E)){const s=rI(B,D),t=lI(o,E);return nr(A,I,g,s,t,Q,C)}else{const s=No(B,D),t=Yr[s],w=g.direction[t]>=0;let a,G;w?(a=CI(B),G=EI(B,D)):(a=EI(B,D),G=CI(B));const r=sQ(a,i,g,Q,C)?mo(a,A,I,g,Q,C):null;if(r){const y=r.point[t];if(w?y<=i[G+s]:y>=i[G+s+3])return r}const c=sQ(G,i,g,Q,C)?mo(G,A,I,g,Q,C):null;return r&&c?r.distance<=c.distance?r:c:r||c||null}}const yi=new ag,rB=new Qg,FB=new Qg,yC=new fA,De=new FI,Gi=new FI;function dr(B,A,I,g){KA.setBuffer(B._roots[A]);const Q=Po(0,B,I,g);return KA.clearBuffer(),Q}function Po(B,A,I,g,Q=null){const{float32Array:C,uint16Array:i,uint32Array:E}=KA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),De.set(I.boundingBox.min,I.boundingBox.max,g),Q=De),zA(D,i)){const o=A.geometry,s=o.index,t=o.attributes.position,w=I.index,a=I.attributes.position,G=rI(B,E),r=lI(D,i);if(yC.copy(g).invert(),I.boundsTree)return mA(B,C,Gi),Gi.matrix.copy(yC),Gi.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:c=>Gi.intersectsBox(c),intersectsTriangle:c=>{c.a.applyMatrix4(g),c.b.applyMatrix4(g),c.c.applyMatrix4(g),c.needsUpdate=!0;for(let y=G*3,R=(r+G)*3;y<R;y+=3)if(vA(FB,y,s,t),FB.needsUpdate=!0,c.intersectsTriangle(FB))return!0;return!1}});{const c=ti(I);for(let y=G*3,R=(r+G)*3;y<R;y+=3){vA(rB,y,s,t),rB.a.applyMatrix4(yC),rB.b.applyMatrix4(yC),rB.c.applyMatrix4(yC),rB.needsUpdate=!0;for(let S=0,n=c*3;S<n;S+=3)if(vA(FB,S,w,a),FB.needsUpdate=!0,rB.intersectsTriangle(FB))return!0}}}else{const o=CI(B),s=EI(B,E);return mA(o,C,yi),!!(Q.intersectsBox(yi)&&Po(o,A,I,g,Q)||(mA(s,C,yi),Q.intersectsBox(yi)&&Po(s,A,I,g,Q)))}}const Si=new fA,To=new FI,GC=new FI,lr=new q,fr=new q,pr=new q,xr=new q;function qr(B,A,I,g={},Q={},C=0,i=1/0){A.boundingBox||A.computeBoundingBox(),To.set(A.boundingBox.min,A.boundingBox.max,I),To.needsUpdate=!0;const E=B.geometry,D=E.attributes.position,o=E.index,s=A.attributes.position,t=A.index,w=Bg.getPrimitive(),a=Bg.getPrimitive();let G=lr,r=fr,c=null,y=null;Q&&(c=pr,y=xr);let R=1/0,S=null,n=null;return Si.copy(I).invert(),GC.matrix.copy(Si),B.shapecast({boundsTraverseOrder:N=>To.distanceToBox(N),intersectsBounds:(N,M,J)=>J<R&&J<i?(M&&(GC.min.copy(N.min),GC.max.copy(N.max),GC.needsUpdate=!0),!0):!1,intersectsRange:(N,M)=>{if(A.boundsTree)return A.boundsTree.shapecast({boundsTraverseOrder:J=>GC.distanceToBox(J),intersectsBounds:(J,L,H)=>H<R&&H<i,intersectsRange:(J,L)=>{for(let H=J,Y=J+L;H<Y;H++){vA(a,3*H,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let d=N,l=N+M;d<l;d++){vA(w,3*d,o,D),w.needsUpdate=!0;const p=w.distanceToTriangle(a,G,c);if(p<R&&(r.copy(G),y&&y.copy(c),R=p,S=d,n=H),p<C)return!0}}}});{const J=ti(A);for(let L=0,H=J;L<H;L++){vA(a,3*L,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let Y=N,d=N+M;Y<d;Y++){vA(w,3*Y,o,D),w.needsUpdate=!0;const l=w.distanceToTriangle(a,G,c);if(l<R&&(r.copy(G),y&&y.copy(c),R=l,S=Y,n=L),l<C)return!0}}}}}),Bg.releasePrimitive(w),Bg.releasePrimitive(a),R===1/0?null:(g.point?g.point.copy(r):g.point=r.clone(),g.distance=R,g.faceIndex=S,Q&&(Q.point?Q.point.copy(y):Q.point=y.clone(),Q.point.applyMatrix4(Si),r.applyMatrix4(Si),Q.distance=r.sub(Q.point).length(),Q.faceIndex=n),g)}function ur(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,i,E,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],i=new Uint32Array(C),E=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,G=!1){const r=w*2;if(zA(r,E)){const c=rI(w,i),y=lI(r,E);let R=1/0,S=1/0,n=1/0,N=-1/0,M=-1/0,J=-1/0;for(let L=c,H=c+y;L<H;L++){const Y=3*B.resolveTriangleIndex(L);for(let d=0;d<3;d++){let l=Y+d;l=g?g[l]:l;const p=Q.getX(l),u=Q.getY(l),P=Q.getZ(l);p<R&&(R=p),p>N&&(N=p),u<S&&(S=u),u>M&&(M=u),P<n&&(n=P),P>J&&(J=P)}}return D[w+0]!==R||D[w+1]!==S||D[w+2]!==n||D[w+3]!==N||D[w+4]!==M||D[w+5]!==J?(D[w+0]=R,D[w+1]=S,D[w+2]=n,D[w+3]=N,D[w+4]=M,D[w+5]=J,!0):!1}else{const c=CI(w),y=EI(w,i);let R=G,S=!1,n=!1;if(A){if(!R){const Y=c/jA+a/SI,d=y/jA+a/SI;S=A.has(Y),n=A.has(d),R=!S&&!n}}else S=!0,n=!0;const N=R||S,M=R||n;let J=!1;N&&(J=t(c,a,R));let L=!1;M&&(L=t(y,a,R));const H=J||L;if(H)for(let Y=0;Y<3;Y++){const d=c+Y,l=y+Y,p=D[d],u=D[d+3],P=D[l],O=D[l+3];D[w+Y]=p<P?p:P,D[w+Y+3]=u>O?u:O}return H}}}function br(B,A,I,g,Q,C,i){KA.setBuffer(B._roots[A]),Oo(0,B,I,g,Q,C,i),KA.clearBuffer()}function Oo(B,A,I,g,Q,C,i){const{float32Array:E,uint16Array:D,uint32Array:o}=KA,s=B*2;if(zA(s,D)){const t=rI(B,o),w=lI(s,D);Jr(A,I,g,t,w,Q,C,i)}else{const t=CI(B);sQ(t,E,g,C,i)&&Oo(t,A,I,g,Q,C,i);const w=EI(B,o);sQ(w,E,g,C,i)&&Oo(w,A,I,g,Q,C,i)}}const mr=["x","y","z"];function Pr(B,A,I,g,Q,C){KA.setBuffer(B._roots[A]);const i=Xo(0,B,I,g,Q,C);return KA.clearBuffer(),i}function Xo(B,A,I,g,Q,C){const{float32Array:i,uint16Array:E,uint32Array:D}=KA;let o=B*2;if(zA(o,E)){const s=rI(B,D),t=lI(o,E);return Ur(A,I,g,s,t,Q,C)}else{const s=No(B,D),t=mr[s],w=g.direction[t]>=0;let a,G;w?(a=CI(B),G=EI(B,D)):(a=EI(B,D),G=CI(B));const r=sQ(a,i,g,Q,C)?Xo(a,A,I,g,Q,C):null;if(r){const y=r.point[t];if(w?y<=i[G+s]:y>=i[G+s+3])return r}const c=sQ(G,i,g,Q,C)?Xo(G,A,I,g,Q,C):null;return r&&c?r.distance<=c.distance?r:c:r||c||null}}const ri=new ag,RB=new Qg,kB=new Qg,SC=new fA,oe=new FI,Fi=new FI;function Tr(B,A,I,g){KA.setBuffer(B._roots[A]);const Q=vo(0,B,I,g);return KA.clearBuffer(),Q}function vo(B,A,I,g,Q=null){const{float32Array:C,uint16Array:i,uint32Array:E}=KA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),oe.set(I.boundingBox.min,I.boundingBox.max,g),Q=oe),zA(D,i)){const o=A.geometry,s=o.index,t=o.attributes.position,w=I.index,a=I.attributes.position,G=rI(B,E),r=lI(D,i);if(SC.copy(g).invert(),I.boundsTree)return mA(B,C,Fi),Fi.matrix.copy(SC),Fi.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:c=>Fi.intersectsBox(c),intersectsTriangle:c=>{c.a.applyMatrix4(g),c.b.applyMatrix4(g),c.c.applyMatrix4(g),c.needsUpdate=!0;for(let y=G,R=r+G;y<R;y++)if(vA(kB,3*A.resolveTriangleIndex(y),s,t),kB.needsUpdate=!0,c.intersectsTriangle(kB))return!0;return!1}});{const c=ti(I);for(let y=G,R=r+G;y<R;y++){const S=A.resolveTriangleIndex(y);vA(RB,3*S,s,t),RB.a.applyMatrix4(SC),RB.b.applyMatrix4(SC),RB.c.applyMatrix4(SC),RB.needsUpdate=!0;for(let n=0,N=c*3;n<N;n+=3)if(vA(kB,n,w,a),kB.needsUpdate=!0,RB.intersectsTriangle(kB))return!0}}}else{const o=CI(B),s=EI(B,E);return mA(o,C,ri),!!(Q.intersectsBox(ri)&&vo(o,A,I,g,Q)||(mA(s,C,ri),Q.intersectsBox(ri)&&vo(s,A,I,g,Q)))}}const Ri=new fA,Zo=new FI,rC=new FI,Or=new q,Xr=new q,vr=new q,Zr=new q;function Vr(B,A,I,g={},Q={},C=0,i=1/0){A.boundingBox||A.computeBoundingBox(),Zo.set(A.boundingBox.min,A.boundingBox.max,I),Zo.needsUpdate=!0;const E=B.geometry,D=E.attributes.position,o=E.index,s=A.attributes.position,t=A.index,w=Bg.getPrimitive(),a=Bg.getPrimitive();let G=Or,r=Xr,c=null,y=null;Q&&(c=vr,y=Zr);let R=1/0,S=null,n=null;return Ri.copy(I).invert(),rC.matrix.copy(Ri),B.shapecast({boundsTraverseOrder:N=>Zo.distanceToBox(N),intersectsBounds:(N,M,J)=>J<R&&J<i?(M&&(rC.min.copy(N.min),rC.max.copy(N.max),rC.needsUpdate=!0),!0):!1,intersectsRange:(N,M)=>{if(A.boundsTree){const J=A.boundsTree;return J.shapecast({boundsTraverseOrder:L=>rC.distanceToBox(L),intersectsBounds:(L,H,Y)=>Y<R&&Y<i,intersectsRange:(L,H)=>{for(let Y=L,d=L+H;Y<d;Y++){const l=J.resolveTriangleIndex(Y);vA(a,3*l,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let p=N,u=N+M;p<u;p++){const P=B.resolveTriangleIndex(p);vA(w,3*P,o,D),w.needsUpdate=!0;const O=w.distanceToTriangle(a,G,c);if(O<R&&(r.copy(G),y&&y.copy(c),R=O,S=p,n=Y),O<C)return!0}}}})}else{const J=ti(A);for(let L=0,H=J;L<H;L++){vA(a,3*L,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let Y=N,d=N+M;Y<d;Y++){const l=B.resolveTriangleIndex(Y);vA(w,3*l,o,D),w.needsUpdate=!0;const p=w.distanceToTriangle(a,G,c);if(p<R&&(r.copy(G),y&&y.copy(c),R=p,S=Y,n=L),p<C)return!0}}}}}),Bg.releasePrimitive(w),Bg.releasePrimitive(a),R===1/0?null:(g.point?g.point.copy(r):g.point=r.clone(),g.distance=R,g.faceIndex=S,Q&&(Q.point?Q.point.copy(y):Q.point=y.clone(),Q.point.applyMatrix4(Ri),r.applyMatrix4(Ri),Q.distance=r.sub(Q.point).length(),Q.faceIndex=n),g)}function se(B,A,I){return B===null?null:(B.point.applyMatrix4(A.matrixWorld),B.distance=B.point.distanceTo(I.ray.origin),B.object=A,B)}const ki=new FI,ni=new _e,te=new q,we=new fA,ae=new q,Vo=["getX","getY","getZ"];class UB extends Ie{static serialize(A,I={}){I={cloneBuffers:!0,...I};const g=A.geometry,Q=A._roots,C=A._indirectBuffer,i=g.getIndex(),E={version:1,roots:null,index:null,indirectBuffer:null};return I.cloneBuffers?(E.roots=Q.map(D=>D.slice()),E.index=i?i.array.slice():null,E.indirectBuffer=C?C.slice():null):(E.roots=Q,E.index=i?i.array:null,E.indirectBuffer=C),E}static deserialize(A,I,g={}){g={setIndex:!0,indirect:!!A.indirectBuffer,...g};const{index:Q,roots:C,indirectBuffer:i}=A;A.version||(console.warn("MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data."),D(C));const E=new UB(I,{...g,[Ci]:!0});if(E._roots=C,E._indirectBuffer=i||null,g.setIndex){const o=I.getIndex();if(o===null){const s=new iI(A.index,1,!1);I.setIndex(s)}else o.array!==Q&&(o.array.set(Q),o.needsUpdate=!0)}return E;function D(o){for(let s=0;s<o.length;s++){const t=o[s],w=new Uint32Array(t),a=new Uint16Array(t);for(let G=0,r=t.byteLength/SI;G<r;G++){const c=jA*G,y=2*c;zA(y,a)||(w[c+6]=w[c+6]/jA-G)}}}}get primitiveStride(){return 3}get resolveTriangleIndex(){return this.resolvePrimitiveIndex}constructor(A,I={}){I.maxLeafTris&&(console.warn('MeshBVH: "maxLeafTris" option has been deprecated. Use maxLeafSize, instead.'),I={...I,maxLeafSize:I.maxLeafTris}),super(A,I)}shiftTriangleOffsets(A){return super.shiftPrimitiveOffsets(A)}writePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,i=Q.attributes.position,E=Q.index?Q.index.array:null,D=(C?C[A]:A)*3;let o=D+0,s=D+1,t=D+2;E&&(o=E[o],s=E[s],t=E[t]);for(let w=0;w<3;w++){const a=i[Vo[w]](o),G=i[Vo[w]](s),r=i[Vo[w]](t);let c=a;G<c&&(c=G),r<c&&(c=r);let y=a;G>y&&(y=G),r>y&&(y=r),I[g+w]=c,I[g+w+3]=y}return I}computePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,i=Q.attributes.position,E=Q.index?Q.index.array:null,D=i.normalized;if(A<0||I+A-g.offset>g.length/6)throw new Error("MeshBVH: compute triangle bounds range is invalid.");const o=i.array,s=i.offset||0;let t=3;i.isInterleavedBufferAttribute&&(t=i.data.stride);const w=["getX","getY","getZ"],a=g.offset;for(let G=A,r=A+I;G<r;G++){const c=(C?C[G]:G)*3,y=(G-a)*6;let R=c+0,S=c+1,n=c+2;E&&(R=E[R],S=E[S],n=E[n]),D||(R=R*t+s,S=S*t+s,n=n*t+s);for(let N=0;N<3;N++){let M,J,L;D?(M=i[w[N]](R),J=i[w[N]](S),L=i[w[N]](n)):(M=o[R+N],J=o[S+N],L=o[n+N]);let H=M;J<H&&(H=J),L<H&&(H=L);let Y=M;J>Y&&(Y=J),L>Y&&(Y=L);const d=(Y-H)/2,l=N*2;g[y+l+0]=H+d,g[y+l+1]=d+(Math.abs(H)+d)*Bi}}return g}raycastObject3D(A,I,g=[]){const{material:Q}=A;if(Q===void 0)return;we.copy(A.matrixWorld).invert(),ni.copy(I.ray).applyMatrix4(we),ae.setFromMatrixScale(A.matrixWorld),te.copy(ni.direction).multiply(ae);const C=te.length(),i=I.near/C,E=I.far/C;if(I.firstHitOnly===!0){let D=this.raycastFirst(ni,Q,i,E);D=se(D,A,I),D&&g.push(D)}else{const D=this.raycast(ni,Q,i,E);for(let o=0,s=D.length;o<s;o++){const t=se(D[o],A,I);t&&g.push(t)}}return g}refit(A=null){return(this.indirect?ur:Mr)(this,A)}raycast(A,I=Ks,g=0,Q=1/0){const C=this._roots,i=[],E=this.indirect?br:Hr;for(let D=0,o=C.length;D<o;D++)E(this,D,I,A,i,g,Q);return i}raycastFirst(A,I=Ks,g=0,Q=1/0){const C=this._roots;let i=null;const E=this.indirect?Pr:Kr;for(let D=0,o=C.length;D<o;D++){const s=E(this,D,I,A,g,Q);s!=null&&(i==null||s.distance<i.distance)&&(i=s)}return i}intersectsGeometry(A,I){let g=!1;const Q=this._roots,C=this.indirect?Tr:dr;for(let i=0,E=Q.length;i<E&&(g=C(this,i,A,I),!g);i++);return g}shapecast(A){const I=Bg.getPrimitive(),g=super.shapecast({...A,intersectsPrimitive:A.intersectsTriangle,scratchPrimitive:I,iterate:this.indirect?Lr:Nr});return Bg.releasePrimitive(I),g}bvhcast(A,I,g){let{intersectsRanges:Q,intersectsTriangles:C}=g;const i=Bg.getPrimitive(),E=this.geometry.index,D=this.geometry.attributes.position,o=this.indirect?G=>{const r=this.resolveTriangleIndex(G);vA(i,r*3,E,D)}:G=>{vA(i,G*3,E,D)},s=Bg.getPrimitive(),t=A.geometry.index,w=A.geometry.attributes.position,a=A.indirect?G=>{const r=A.resolveTriangleIndex(G);vA(s,r*3,t,w)}:G=>{vA(s,G*3,t,w)};if(C){if(!(A instanceof UB))throw new Error('MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.');const G=(r,c,y,R,S,n,N,M)=>{for(let J=y,L=y+R;J<L;J++){a(J),s.a.applyMatrix4(I),s.b.applyMatrix4(I),s.c.applyMatrix4(I),s.needsUpdate=!0;for(let H=r,Y=r+c;H<Y;H++)if(o(H),i.needsUpdate=!0,C(i,s,H,J,S,n,N,M))return!0}return!1};if(Q){const r=Q;Q=function(c,y,R,S,n,N,M,J){return r(c,y,R,S,n,N,M,J)?!0:G(c,y,R,S,n,N,M,J)}}else Q=G}return super.bvhcast(A,I,{intersectsRanges:Q})}intersectsBox(A,I){return ki.set(A.min,A.max,I),ki.needsUpdate=!0,this.shapecast({intersectsBounds:g=>ki.intersectsBox(g),intersectsTriangle:g=>ki.intersectsTriangle(g)})}intersectsSphere(A){return this.shapecast({intersectsBounds:I=>A.intersectsBox(I),intersectsTriangle:I=>I.intersectsSphere(A)})}closestPointToGeometry(A,I,g={},Q={},C=0,i=1/0){return(this.indirect?Vr:qr)(this,A,I,g,Q,C,i)}closestPointToPoint(A,I={},g=0,Q=1/0){return rr(this,A,I,g,Q)}}const nB={Mesh:IQ.prototype.raycast,Line:fs.prototype.raycast,LineSegments:ds.prototype.raycast,LineLoop:ls.prototype.raycast,Points:ps.prototype.raycast,BatchedMesh:A0.prototype.raycast},aI=new IQ,Ni=[];function Wr(B,A){if(this.isBatchedMesh)jr.call(this,B,A);else{const{geometry:I}=this;if(I.boundsTree)I.boundsTree.raycastObject3D(this,B,A);else{let g;if(this instanceof IQ)g=nB.Mesh;else if(this instanceof ds)g=nB.LineSegments;else if(this instanceof ls)g=nB.LineLoop;else if(this instanceof fs)g=nB.Line;else if(this instanceof ps)g=nB.Points;else throw new Error("BVH: Fallback raycast function not found.");g.call(this,B,A)}}}function jr(B,A){if(this.boundsTrees){const I=this.boundsTrees,g=this._drawInfo||this._instanceInfo,Q=this._drawRanges||this._geometryInfo,C=this.matrixWorld;aI.material=this.material,aI.geometry=this.geometry;const i=aI.geometry.boundsTree,E=aI.geometry.drawRange;aI.geometry.boundingSphere===null&&(aI.geometry.boundingSphere=new $e);for(let D=0,o=g.length;D<o;D++){if(!this.getVisibleAt(D))continue;const s=g[D].geometryIndex;if(aI.geometry.boundsTree=I[s],this.getMatrixAt(D,aI.matrixWorld).premultiply(C),!aI.geometry.boundsTree){this.getBoundingBoxAt(s,aI.geometry.boundingBox),this.getBoundingSphereAt(s,aI.geometry.boundingSphere);const t=Q[s];aI.geometry.setDrawRange(t.start,t.count)}aI.raycast(B,Ni);for(let t=0,w=Ni.length;t<w;t++){const a=Ni[t];a.object=this,a.batchId=D,A.push(a)}Ni.length=0}aI.geometry.boundsTree=i,aI.geometry.drawRange=E,aI.material=null,aI.geometry=null}else nB.BatchedMesh.call(this,B,A)}function zr(B={}){const{type:A=UB}=B;return this.boundsTree=new A(this,B),this.boundsTree}const dQ=new q,lQ=new q,fQ=new q,ee=new MI,Mi=new q,Wo=new q,he=new MI,ce=new MI,Ji=new fA,ye=new fA;function FC(B,A){if(!B&&!A)return;const I=B.count===A.count,g=B.normalized===A.normalized,Q=B.array.constructor===A.array.constructor,C=B.itemSize===A.itemSize;if(!I||!g||!Q||!C)throw new Error}function RC(B,A=null){const I=B.array.constructor,g=B.normalized,Q=B.itemSize,C=A===null?B.count:A;return new iI(new I(Q*C),Q,g)}function Ge(B,A,I=0){if(B.isInterleavedBufferAttribute){const g=B.itemSize;for(let Q=0,C=B.count;Q<C;Q++){const i=Q+I;A.setX(i,B.getX(Q)),g>=2&&A.setY(i,B.getY(Q)),g>=3&&A.setZ(i,B.getZ(Q)),g>=4&&A.setW(i,B.getW(Q))}}else{const g=A.array,Q=g.constructor,C=g.BYTES_PER_ELEMENT*B.itemSize*I;new Q(g.buffer,C,B.array.length).set(B.array)}}function _r(B,A,I){const g=B.elements,Q=A.elements;for(let C=0,i=Q.length;C<i;C++)g[C]+=Q[C]*I}function Se(B,A,I){const g=B.skeleton,Q=B.geometry,C=g.bones,i=g.boneInverses;he.fromBufferAttribute(Q.attributes.skinIndex,A),ce.fromBufferAttribute(Q.attributes.skinWeight,A),Ji.elements.fill(0);for(let E=0;E<4;E++){const D=ce.getComponent(E);if(D!==0){const o=he.getComponent(E);ye.multiplyMatrices(C[o].matrixWorld,i[o]),_r(Ji,ye,D)}}return Ji.multiply(B.bindMatrix).premultiply(B.bindMatrixInverse),I.transformDirection(Ji),I}function jo(B,A,I,g,Q){Mi.set(0,0,0);for(let C=0,i=B.length;C<i;C++){const E=A[C],D=B[C];E!==0&&(Wo.fromBufferAttribute(D,g),I?Mi.addScaledVector(Wo,E):Mi.addScaledVector(Wo.sub(Q),E))}Q.add(Mi)}function $r(B,A={useGroups:!1,updateIndex:!1,skipAttributes:[]},I=new ZQ){const g=B[0].index!==null,{useGroups:Q=!1,updateIndex:C=!1,skipAttributes:i=[]}=A,E=new Set(Object.keys(B[0].attributes)),D={};let o=0;I.clearGroups();for(let s=0;s<B.length;++s){const t=B[s];let w=0;if(g!==(t.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const a in t.attributes){if(!E.has(a))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+a+'" attribute exists among all geometries, or in none of them.');D[a]===void 0&&(D[a]=[]),D[a].push(t.attributes[a]),w++}if(w!==E.size)throw new Error("StaticGeometryGenerator: Make sure all geometries have the same number of attributes.");if(Q){let a;if(g)a=t.index.count;else if(t.attributes.position!==void 0)a=t.attributes.position.count;else throw new Error("StaticGeometryGenerator: The geometry must have either an index or a position attribute");I.addGroup(o,a,s),o+=a}}if(g){let s=!1;if(!I.index){let t=0;for(let w=0;w<B.length;++w)t+=B[w].index.count;I.setIndex(new iI(new Uint32Array(t),1,!1)),s=!0}if(C||s){const t=I.index;let w=0,a=0;for(let G=0;G<B.length;++G){const r=B[G],c=r.index;if(i[G]!==!0)for(let y=0;y<c.count;++y)t.setX(w,c.getX(y)+a),w++;a+=r.attributes.position.count}}}for(const s in D){const t=D[s];if(!(s in I.attributes)){let G=0;for(const r in t)G+=t[r].count;I.setAttribute(s,RC(D[s][0],G))}const w=I.attributes[s];let a=0;for(let G=0,r=t.length;G<r;G++){const c=t[G];i[G]!==!0&&Ge(c,w,a),a+=c.count}}return I}function AF(B,A){if(B===null||A===null)return B===A;if(B.length!==A.length)return!1;for(let I=0,g=B.length;I<g;I++)if(B[I]!==A[I])return!1;return!0}function IF(B){const{index:A,attributes:I}=B;if(A)for(let g=0,Q=A.count;g<Q;g+=3){const C=A.getX(g),i=A.getX(g+2);A.setX(g,i),A.setX(g+2,C)}else for(const g in I){const Q=I[g],C=Q.itemSize;for(let i=0,E=Q.count;i<E;i+=3)for(let D=0;D<C;D++){const o=Q.getComponent(i,D),s=Q.getComponent(i+2,D);Q.setComponent(i,D,s),Q.setComponent(i+2,D,o)}}return B}class gF{constructor(A){this.matrixWorld=new fA,this.geometryHash=null,this.boneMatrices=null,this.primitiveCount=-1,this.mesh=A,this.update()}update(){const A=this.mesh,I=A.geometry,g=A.skeleton,Q=(I.index?I.index.count:I.attributes.position.count)/3;if(this.matrixWorld.copy(A.matrixWorld),this.geometryHash=I.attributes.position.version,this.primitiveCount=Q,g){g.boneTexture||g.computeBoneTexture(),g.update();const C=g.boneMatrices;!this.boneMatrices||this.boneMatrices.length!==C.length?this.boneMatrices=C.slice():this.boneMatrices.set(C)}else this.boneMatrices=null}didChange(){const A=this.mesh,I=A.geometry,g=(I.index?I.index.count:I.attributes.position.count)/3;return!(this.matrixWorld.equals(A.matrixWorld)&&this.geometryHash===I.attributes.position.version&&AF(A.skeleton&&A.skeleton.boneMatrices||null,this.boneMatrices)&&this.primitiveCount===g)}}class QF{constructor(A){Array.isArray(A)||(A=[A]);const I=[];A.forEach(g=>{g.traverseVisible(Q=>{Q.isMesh&&I.push(Q)})}),this.meshes=I,this.useGroups=!0,this.applyWorldTransforms=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Array(I.length).fill().map(()=>new ZQ),this._diffMap=new WeakMap}getMaterials(){const A=[];return this.meshes.forEach(I=>{Array.isArray(I.material)?A.push(...I.material):A.push(I.material)}),A}generate(A=new ZQ){let I=[];const{meshes:g,useGroups:Q,_intermediateGeometry:C,_diffMap:i}=this;for(let E=0,D=g.length;E<D;E++){const o=g[E],s=C[E],t=i.get(o);!t||t.didChange(o)?(this._convertToStaticGeometry(o,s),I.push(!1),t?t.update():i.set(o,new gF(o))):I.push(!0)}if(C.length===0){A.setIndex(null);const E=A.attributes;for(const D in E)A.deleteAttribute(D);for(const D in this.attributes)A.setAttribute(this.attributes[D],new iI(new Float32Array(0),4,!1))}else $r(C,{useGroups:Q,skipAttributes:I},A);for(const E in A.attributes)A.attributes[E].needsUpdate=!0;return A}_convertToStaticGeometry(A,I=new ZQ){const g=A.geometry,Q=this.applyWorldTransforms,C=this.attributes.includes("normal"),i=this.attributes.includes("tangent"),E=g.attributes,D=I.attributes;!I.index&&g.index&&(I.index=g.index.clone()),D.position||I.setAttribute("position",RC(E.position)),C&&!D.normal&&E.normal&&I.setAttribute("normal",RC(E.normal)),i&&!D.tangent&&E.tangent&&I.setAttribute("tangent",RC(E.tangent)),FC(g.index,I.index),FC(E.position,D.position),C&&FC(E.normal,D.normal),i&&FC(E.tangent,D.tangent);const o=E.position,s=C?E.normal:null,t=i?E.tangent:null,w=g.morphAttributes.position,a=g.morphAttributes.normal,G=g.morphAttributes.tangent,r=g.morphTargetsRelative,c=A.morphTargetInfluences,y=new VQ;y.getNormalMatrix(A.matrixWorld),g.index&&I.index.array.set(g.index.array);for(let R=0,S=E.position.count;R<S;R++)dQ.fromBufferAttribute(o,R),s&&lQ.fromBufferAttribute(s,R),t&&(ee.fromBufferAttribute(t,R),fQ.fromBufferAttribute(t,R)),c&&(w&&jo(w,c,r,R,dQ),a&&jo(a,c,r,R,lQ),G&&jo(G,c,r,R,fQ)),A.isSkinnedMesh&&(A.applyBoneTransform(R,dQ),s&&Se(A,R,lQ),t&&Se(A,R,fQ)),Q&&dQ.applyMatrix4(A.matrixWorld),D.position.setXYZ(R,dQ.x,dQ.y,dQ.z),s&&(Q&&lQ.applyNormalMatrix(y),D.normal.setXYZ(R,lQ.x,lQ.y,lQ.z)),t&&(Q&&fQ.transformDirection(A.matrixWorld),D.tangent.setXYZW(R,fQ.x,fQ.y,fQ.z,ee.w));for(const R in this.attributes){const S=this.attributes[R];S==="position"||S==="tangent"||S==="normal"||!(S in E)||(D[S]||I.setAttribute(S,RC(E[S])),FC(E[S],D[S]),Ge(E[S],D[S]))}return A.matrixWorld.determinant()<0&&IF(I),I}}const BF=Object.freeze(Object.defineProperty({__proto__:null,AVERAGE:ma,BVH:_a,CENTER:Ro,CONTAINED:ko,ExtendedTriangle:Qg,GeometryBVH:Ie,MeshBVH:UB,OrientedBox:FI,SAH:Pa,SKIP_GENERATION:Ci,StaticGeometryGenerator:QF,acceleratedRaycast:Wr,computeBoundsTree:zr,generateIndirectBuffer:Ae},Symbol.toStringTag,{value:"Module"}));class CF{constructor(A){this.name="WorkerBase",this.running=!1,this.worker=A,this.worker.onerror=I=>{throw I.message?new Error(`${this.name}: Could not create Web Worker with error "${I.message}"`):new Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...A){if(this.running)throw new Error("GenerateMeshBVHWorker: Already running job.");if(this.worker===null)throw new Error("GenerateMeshBVHWorker: Worker has been disposed.");this.running=!0;const I=this.runTask(this.worker,...A);return I.finally(()=>{this.running=!1}),I}dispose(){this.worker.terminate(),this.worker=null}}const Cg={node:"node",material:"material",camera:"camera",light:"light"},pQ="KHR_animation_pointer",EF={CUBICSPLINE:void 0,LINEAR:xs,STEP:I0};class iF{constructor(A){this.name=pQ,this.parser=A,this.animationPointerResolver=null,this.pointerPathMap=new Map}setAnimationPointerResolver(A){return this.animationPointerResolver=A,this}loadAnimationTargetFromChannel(A){const I=A.target,g=I.node!==void 0?I.node:I.id;return this.parser.getDependency("node",g)}loadAnimationTargetFromChannelWithAnimationPointer(A){oF();const I=A.target,g=I.extensions&&I.extensions[pQ]&&I.path&&I.path==="pointer";if(!g)return null;let Q,C=Cg.node,i;if(g){const D=I.extensions[pQ];let o=D.pointer;if(!o){console.warn("Invalid path",D,I);return}if(o.startsWith("/materials/")?C=Cg.material:o.startsWith("/extensions/KHR_lights_punctual/lights/")?C=Cg.light:o.startsWith("/cameras/")&&(C=Cg.camera),i=this._tryResolveTargetId(o,C),i===null||isNaN(i)){console.warn("Failed resolving animation node id: "+i,o);return}switch(C){case Cg.material:const t=("/materials/"+i.toString()+"/").length,w=o.substring(0,t);switch(Q=o.substring(t),Q){case"pbrMetallicRoughness/baseColorFactor":Q="color";break;case"pbrMetallicRoughness/roughnessFactor":Q="roughness";break;case"pbrMetallicRoughness/metallicFactor":Q="metalness";break;case"emissiveFactor":Q="emissive";break;case"alphaCutoff":Q="alphaTest";break;case"occlusionTexture/strength":Q="aoMapIntensity";break;case"normalTexture/scale":Q="normalScale";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale":Q="map/repeat";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset":Q="map/offset";break;case"emissiveTexture/extensions/KHR_texture_transform/scale":Q="emissiveMap/repeat";break;case"emissiveTexture/extensions/KHR_texture_transform/offset":Q="emissiveMap/offset";break;case"extensions/KHR_materials_emissive_strength/emissiveStrength":Q="emissiveIntensity";break;case"extensions/KHR_materials_transmission/transmissionFactor":Q="transmission";break;case"extensions/KHR_materials_ior/ior":Q="ior";break;case"extensions/KHR_materials_volume/thicknessFactor":Q="thickness";break;case"extensions/KHR_materials_volume/attenuationColor":Q="attenuationColor";break;case"extensions/KHR_materials_volume/attenuationDistance":Q="attenuationDistance";break;case"extensions/KHR_materials_iridescence/iridescenceFactor":Q="iridescence";break;case"extensions/KHR_materials_iridescence/iridescenceIor":Q="iridescenceIOR";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMinimum":Q="iridescenceThicknessRange[0]";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMaximum":Q="iridescenceThicknessRange[1]";break;case"extensions/KHR_materials_clearcoat/clearcoatFactor":Q="clearcoat";break;case"extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor":Q="clearcoatRoughness";break;case"extensions/KHR_materials_sheen/sheenColorFactor":Q="sheenColor";break;case"extensions/KHR_materials_sheen/sheenRoughnessFactor":Q="sheenRoughness";break;case"extensions/KHR_materials_specular/specularFactor":Q="specularIntensity";break;case"extensions/KHR_materials_specular/specularColorFactor":Q="specularColor";break}o=w+Q;break;case Cg.node:const a=("/nodes/"+i.toString()+"/").length,G=o.substring(0,a);if(Q=o.substring(a),Q.startsWith("weights/")){const R=Q.substring(8);/^\d+$/.test(R)?Q="morphTargetInfluences["+R+"]":console.warn(pQ+": invalid weight index",Q,o)}else switch(Q){case"translation":Q="position";break;case"rotation":Q="quaternion";break;case"scale":Q="scale";break;case"weights":Q="morphTargetInfluences";break;case"extensions/KHR_node_visibility/visible":Q="visible";break}o=G+Q;break;case Cg.light:const r=("/extensions/KHR_lights_punctual/lights/"+i.toString()+"/").length;switch(Q=o.substring(r),Q){case"color":break;case"intensity":break;case"spot/innerConeAngle":Q="penumbra";break;case"spot/outerConeAngle":Q="angle";break;case"range":Q="distance";break}o="/lights/"+i.toString()+"/"+Q;break;case Cg.camera:const c=("/cameras/"+i.toString()+"/").length,y=o.substring(0,c);switch(Q=o.substring(c),Q){case"perspective/yfov":Q="fov";break;case"perspective/znear":case"orthographic/znear":Q="near";break;case"perspective/zfar":case"orthographic/zfar":Q="far";break;case"perspective/aspect":Q="aspect";break;case"orthographic/xmag":Q="zoom";break;case"orthographic/ymag":Q="zoom";break}o=y+Q;break}this.animationPointerResolver?.resolvePath&&(o=this.animationPointerResolver.resolvePath(o));const s=D.pointer;this.pointerPathMap.set(s,o)}if(i==null||isNaN(i)){console.warn("Failed resolving animation node id: "+i,I);return}let E;return C===Cg.node?E=this.parser.getDependency("node",i):C===Cg.material?E=this.parser.getDependency("material",i):C===Cg.light?E=this.parser.getDependency("light",i):C===Cg.camera?E=this.parser.getDependency("camera",i):console.error("Unhandled type",C),E}createAnimationTracksWithAnimationPointer(A,I,g,Q,C){if(!(C.extensions&&C.extensions[pQ]&&C.path&&C.path==="pointer"))return null;const i=C.extensions[pQ].pointer;let E=this.pointerPathMap.get(i);if(!E)return null;const D=[];E=E.replaceAll("/",".");const o=E.split(".");var s=A.name!==void 0&&A.name!==null?A.name:A.uuid;if(o[2]=s,o[3]?.startsWith("morphTargetInfluences")){const a=o[3];if(A.type==="Group"){for(const G of A.children)G.morphTargetInfluences&&(o[3]=G.name,o[4]=a,w(this.parser));return D}}w(this.parser);function t(a,G){try{const r=G.split(".").filter(Boolean),c=r[r.length-1].replace(/\[.*\]$/,"");return c in a?typeof a[c]=="boolean":!1}catch{return!1}}function w(a){E=o.join(".");let G,r=!1;switch(g.itemSize){case 1:Object.prototype.toString.call(g.array)==="[object Uint8Array]"&&t(A,E)?(G=E0,r=!0):G=i0;break;case 2:case 3:G=C0;break;case 4:E.endsWith(".quaternion")?G=Q0:G=B0;break}if(!G){console.warn("Unsupported output accessor format",g);return}const c=Q.interpolation!==void 0?EF[Q.interpolation]:xs;let y=a._getArrayFromAccessor(g);E.endsWith(".fov")&&(y=y.map(S=>S/Math.PI*180)),r&&(y=y.map(S=>S>0));const R=new G(E,I.array,y,c);if(c==="CUBICSPLINE"&&a._createCubicSplineTrackInterpolant(R),D.push(R),E&&g.itemSize===4&&E.startsWith(".materials.")&&E.endsWith(".color")){const S=new Float32Array(y.length/4);for(let N=0,M=y.length/4;N<M;N+=1)S[N]=y[N*4+3];const n=new G(E.replace(".color",".opacity"),I.array,S,c);c==="CUBICSPLINE"&&a._createCubicSplineTrackInterpolant(R),D.push(n)}}return D}_tryResolveTargetId(A,I){let g="";return I==="node"?g=A.substring(7):I==="material"?g=A.substring(11):I==="light"?g=A.substring(39):I==="camera"&&(g=A.substring(9)),g=g.substring(0,g.indexOf("/")),Number.parseInt(g)}loadAnimation(A){const I=this,g=this.parser.json,Q=this.parser,C=g.animations[A],i=C.name?C.name:"animation_"+A,E=[],D=[],o=[],s=[],t=[];for(let w=0,a=C.channels.length;w<a;w++){const G=C.channels[w],r=C.samplers[G.sampler],c=G.target,y=C.parameters!==void 0?C.parameters[r.input]:r.input,R=C.parameters!==void 0?C.parameters[r.output]:r.output;let S=I.loadAnimationTargetFromChannelWithAnimationPointer(G);S||(S=I.loadAnimationTargetFromChannel(G)),E.push(S),D.push(Q.getDependency("accessor",y)),o.push(Q.getDependency("accessor",R)),s.push(r),t.push(c)}return Promise.all([Promise.all(E),Promise.all(D),Promise.all(o),Promise.all(s),Promise.all(t)]).then(function(w){const a=w[0],G=w[1],r=w[2],c=w[3],y=w[4],R=[];for(let S=0,n=a.length;S<n;S++){const N=a[S],M=G[S],J=r[S],L=c[S],H=y[S];if(N===void 0)continue;N.updateMatrix&&(N.updateMatrix(),N.matrixAutoUpdate=!0);let Y=I.createAnimationTracksWithAnimationPointer(N,M,J,L,H);if(Y||(Y=Q._createAnimationTracks(N,M,J,L,H)),Y)for(let d=0;d<Y.length;d++)R.push(Y[d])}return new g0(i,void 0,R)})}}let re=!1,DF=null;function oF(){if(re)return;re=!0;const B=DF||=qs.findNode;qs.findNode=function(A,I){if(!I)return B(A,I);if(I.startsWith(".materials.")){const g=I.substring(11).substring(I.indexOf(".")),Q=g.indexOf("."),C=Q<0?g:g.substring(0,Q);let i=null;return A.traverse(E=>{i!==null||E.type!=="Mesh"&&E.type!=="SkinnedMesh"||E.material&&(E.material.uuid===C||E.material.name===C)&&(i=E.material,i!==null&&(g.endsWith(".map")?i=i.map:g.endsWith(".emissiveMap")&&(i=i.emissiveMap)))}),i}else if(I.startsWith(".nodes.")||I.startsWith(".lights.")||I.startsWith(".cameras.")){const g=I.split(".");let Q;for(let C=1;C<g.length;C++){const i=g[C];if(i.length==36)Q=A.getObjectByProperty("uuid",i);else if(Q&&Q[i]){const E=Number.parseInt(i);let D=i;E>=0&&(D=E),Q=Q[D]}else{const E=A.getObjectByName(i);E&&(Q=E)}}if(!Q){const C=B(A,g[2]);return C||console.warn(pQ+": Property binding not found",I,A,A.name,g),C}return Q}return B(A,I)}}const sF=Object.freeze(Object.defineProperty({__proto__:null,GLTFAnimationPointerExtension:iF},Symbol.toStringTag,{value:"Module"}));var tF=Object.defineProperty,wF=(B,A,I)=>A in B?tF(B,A,{enumerable:!0,configurable:!0,writable:!0,value:I}):B[A]=I,ZA=(B,A,I)=>(wF(B,typeof A!="symbol"?A+"":A,I),I);(function(){class B{}class A extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class I extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class g extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class Q extends B{constructor(h,F="unrestricted"){super(),ZA(this,"type"),ZA(this,"value"),this.value=h,this.type=F}}class C extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class i extends B{}class E extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class D extends B{}class o extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class s extends B{constructor(h,F="integer"){super(),ZA(this,"value"),ZA(this,"type"),this.value=h,this.type=F}}class t extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class w extends B{constructor(h,F,k){super(),ZA(this,"value"),ZA(this,"type"),ZA(this,"unit"),this.value=h,this.type=F,this.unit=k}}class a extends B{}class G extends B{}class r extends B{}class c extends B{}class y extends B{}class R extends B{}class S extends B{}class n extends B{}class N extends B{}class M extends B{}class J extends B{}class L extends B{}class H{constructor(h){ZA(this,"input"),ZA(this,"index",0),this.input=h}consume(){const h=this.input.codePointAt(this.index);return h!==void 0&&(this.index+=String.fromCodePoint(h).length),h}reconsume(h){h!==void 0&&(this.index-=String.fromCodePoint(h).length)}peek(){const h=[];let F=this.index;for(let k=0;k<3&&F<this.input.length;k++){const U=this.input.codePointAt(F);h.push(U),F+=String.fromCodePoint(U).length}return h}}function Y(e){return e===10}function d(e){return Y(e)||e===8192||e===32}function l(e){return e>=48&&e<=57}function p(e){return l(e)||e>=65&&e<=70||e>=97&&e<=102}function u(e){return function(h){return function(F){return F>=65&&F<=90}(h)||function(F){return F>=97&&F<=122}(h)}(e)||function(h){return h>=128}(e)||e===95}function P(e){return u(e)||l(e)||e===45}function O(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function W(e,h){return e===92&&!Y(h)}function T(e,h,F){return e===45?u(h)||h===45||W(h,F):!!u(e)||e===92&&W(e,h)}function j(e,h,F){return e===43||e===45?l(h)||h===46&&l(F):l(e===46?h:e)}function EA(e){const h=e.consume();if(p(h)){let F=[h];for(;p(...e.peek())&&F.length<5;)F.push(e.consume());d(...e.peek())&&e.consume();const k=parseInt(String.fromCodePoint(...F),16);return k===0||k>1114111?65533:k}return h===void 0?65533:h}function wA(e,h){const F=new C("");for(;;){const k=e.consume();if(k===h||k===void 0)return F;if(k===10)return e.reconsume(k),new i;if(k===92){const U=e.peek()[0];U===void 0||(Y(U)?e.consume():F.value+=String.fromCodePoint(EA(e)))}else F.value+=String.fromCodePoint(k)}}function iA(e){let h="";for(;;){const F=e.consume();if(P(F))h+=String.fromCodePoint(F);else{if(!W(...e.peek()))return e.reconsume(F),h;h+=String.fromCodePoint(EA(e))}}}function IA(e){let h=function(F){let k="integer",U="";for([43,45].includes(F.peek()[0])&&(U+=String.fromCodePoint(F.consume()));l(...F.peek());)U+=String.fromCodePoint(F.consume());if(F.peek()[0]===46&&l(F.peek()[1]))for(U+=String.fromCodePoint(F.consume(),F.consume()),k="number";l(...F.peek());)U+=String.fromCodePoint(F.consume());return[69,101].includes(F.peek()[0])&&([45,43].includes(F.peek()[1])&&l(F.peek()[2])?(U+=String.fromCodePoint(F.consume(),F.consume(),F.consume()),k="number"):l(F.peek()[1])&&(U+=String.fromCodePoint(F.consume(),F.consume()),k="number")),{value:parseFloat(U),type:k}}(e);return T(...e.peek())?new w(h.value,h.type,iA(e)):e.peek()[0]===37?(e.consume(),new t(h.value)):new s(h.value,h.type)}function BA(e){for(;;){const h=e.consume();if(h===41||h===void 0)return;W(...e.peek())&&EA(e)}}function AA(e){const h=iA(e);if(h.match(/url/i)&&e.peek()[0]===40){for(e.consume();d(e.peek()[0])&&d(e.peek()[1]);)e.consume();return[34,39].includes(e.peek()[0])||d(e.peek()[0])&&[34,39].includes(e.peek()[1])?new I(h):function(F){const k=new E("");for(;d(...F.peek());)F.consume();for(;;){const U=F.consume();if(U===41||U===void 0)return k;if(d(U)){for(;d(...F.peek());)F.consume();return F.peek()[0]===41||F.peek()[0]===void 0?(F.consume(),k):(BA(F),new D)}if([34,39,40].includes(U)||O(U))return BA(F),new D;if(U===92){if(!W(...F.peek()))return BA(F),new D;k.value+=EA(F)}else k.value+=String.fromCodePoint(U)}}(e)}return e.peek()[0]===40?(e.consume(),new I(h)):new A(h)}function $(e){const h=e.consume(),F=e.peek();if(d(h)){for(;d(...e.peek());)e.consume();return new a}if(h===34)return wA(e,h);if(h===35){if(P(F[0])||W(...F)){const k=new Q;return T(...F)&&(k.type="id"),k.value=iA(e),k}return new o(String.fromCodePoint(h))}return h===39?wA(e,h):h===40?new N:h===41?new M:h===43?j(...F)?(e.reconsume(h),IA(e)):new o(String.fromCodePoint(h)):h===44?new R:h===45?j(...e.peek())?(e.reconsume(h),IA(e)):e.peek()[0]===45&&e.peek()[1]===62?(e.consume(),e.consume(),new r):T(...e.peek())?(e.reconsume(h),AA(e)):new o(String.fromCodePoint(h)):h===46?j(...e.peek())?(e.reconsume(h),IA(e)):new o(String.fromCodePoint(h)):h===58?new c:h===59?new y:h===60?F[0]===33&&F[1]===45&&F[2]===45?(e.consume(),e.consume(),e.consume(),new G):new o(String.fromCodePoint(h)):h===64?T(...F)?new g(iA(e)):new o(String.fromCodePoint(h)):h===91?new S:h===92?W(...F)?(e.reconsume(h),AA(e)):new o(String.fromCodePoint(h)):h===93?new n:h===123?new J:h===125?new L:l(h)?(e.reconsume(h),IA(e)):u(h)?(e.reconsume(h),AA(e)):h===void 0?void 0:new o(String.fromCodePoint(h))}const z=new Set(["px","deg","s","hz","dppx","number","fr"]);function LA(e){return z.has(e.toLowerCase())}function NA(e,h){if(["x","y"].includes(e))return e;if(!h)throw new Error("To determine the normalized axis the computedStyle of the source is required.");const F=h.writingMode=="horizontal-tb";if(e==="block")e=F?"y":"x";else{if(e!=="inline")throw new TypeError(`Invalid axis \u201C${e}\u201D`);e=F?"x":"y"}return e}function MA(e){const h=[];let F=0;function k(){let K=0;const f=F;for(;F<e.length;){const b=e.slice(F,F+1);if(/\s/.test(b)&&K===0)break;if(b==="(")K+=1;else if(b===")"&&(K-=1,K===0)){F++;break}F++}return e.slice(f,F)}function U(){for(;/\s/.test(e.slice(F,F+1));)F++}for(;F<e.length;){const K=e.slice(F,F+1);/\s/.test(K)?U():h.push(k())}return h}function xA(e,h){return e.reduce((F,k)=>(F.has(k[h])?F.get(k[h]).push(k):F.set(k[h],[k]),F),new Map)}function aA(e,h){const F=[],k=[];for(const U of e)h(U)?F.push(U):k.push(U);return[F,k]}function DA(e,h={}){function F(k){return Array.from(k).map(U=>DA(U,h))}if(e instanceof CSSUnitValue){if(e.unit==="percent"&&h.percentageReference){const U=e.value/100*h.percentageReference.value,K=h.percentageReference.unit;return new CSSUnitValue(U,K)}const k=e.toSum();if(k&&k.values.length===1&&(e=k.values[0]),e instanceof CSSUnitValue&&e.unit==="em"&&h.fontSize&&(e=new CSSUnitValue(e.value*h.fontSize.value,h.fontSize.unit)),e instanceof CSSKeywordValue){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number")}return e}if(!e.operator)return e;switch(e.operator){case"sum":e=new CSSMathSum(...F(e.values));break;case"product":e=new CSSMathProduct(...F(e.values));break;case"negate":e=new CSSMathNegate(DA(e.value,h));break;case"clamp":e=new CSSMathClamp(DA(e.lower,h),DA(e.value,h),DA(e.upper,h));break;case"invert":e=new CSSMathInvert(DA(e.value,h));break;case"min":e=new CSSMathMin(...F(e.values));break;case"max":e=new CSSMathMax(...F(e.values))}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const k=Array.from(e.values);if(k.every(U=>U instanceof CSSUnitValue&&U.unit!=="percent"&&LA(U.unit)&&U.unit===k[0].unit)){const U=Math[e.operator].apply(Math,k.map(({value:K})=>K));return new CSSUnitValue(U,k[0].unit)}}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const k=Array.from(e.values),[U,K]=aA(k,b=>b instanceof CSSUnitValue&&b.unit!=="percent"),f=Array.from(xA(U,"unit").values());if(f.some(b=>b.length>0)){const b=f.map(x=>{const m=Math[e.operator].apply(Math,x.map(({value:V})=>V));return new CSSUnitValue(m,x[0].unit)});e=e instanceof CSSMathMin?new CSSMathMin(...b,...K):new CSSMathMax(...b,...K)}return k.length===1?k[0]:e}if(e instanceof CSSMathNegate)return e.value instanceof CSSUnitValue?new CSSUnitValue(0-e.value.value,e.value.unit):e.value instanceof CSSMathNegate?e.value.value:e;if(e instanceof CSSMathInvert)return e.value instanceof CSSMathInvert?e.value.value:e;if(e instanceof CSSMathSum){let k=function(K){const f=K.filter(b=>b instanceof CSSUnitValue);return[...K.filter(b=>!(b instanceof CSSUnitValue)),...Array.from(xA(f,"unit").entries()).map(([b,x])=>{const m=x.reduce((V,{value:QA})=>V+QA,0);return new CSSUnitValue(m,b)})]},U=[];for(const K of e.values)K instanceof CSSMathSum?U.push(...K.values):U.push(K);return U=k(U),U.length===1?U[0]:new CSSMathSum(...U)}if(e instanceof CSSMathProduct){let k=[];for(const f of e.values)f instanceof CSSMathProduct?k.push(...f.values):k.push(f);const[U,K]=aA(k,f=>f instanceof CSSUnitValue&&f.unit==="number");if(U.length>1){const f=U.reduce((b,{value:x})=>b*x,1);k=[new CSSUnitValue(f,"number"),...K]}if(k.length===2){let f,b;for(const x of k)x instanceof CSSUnitValue&&x.unit==="number"?f=x:x instanceof CSSMathSum&&[...x.values].every(m=>m instanceof CSSUnitValue)&&(b=x);if(f&&b)return new CSSMathSum(...[...b.values].map(x=>new CSSUnitValue(x.value*f.value,x.unit)))}if(k.every(f=>f instanceof CSSUnitValue&&LA(f.unit)||f instanceof CSSMathInvert&&f.value instanceof CSSUnitValue&&LA(f.value.unit))){const f=new CSSMathProduct(...k).toSum();if(f&&f.values.length===1)return f.values[0]}return new CSSMathProduct(...k)}return e}const JA=null,jI=["percent","length","angle","time","frequency","resolution","flex"],_A={fontRelativeLengths:{units:new Set(["em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh"])},viewportRelativeLengths:{units:new Set(["vw","lvw","svw","dvw","vh","lvh","svh","dvh","vi","lvi","svi","dvi","vb","lvb","svb","dvb","vmin","lvmin","svmin","dvmin","vmax","lvmax","svmax","dvmax"])},absoluteLengths:{units:new Set(["cm","mm","Q","in","pt","pc","px"]),compatible:!0,canonicalUnit:"px",ratios:{cm:96/2.54,mm:96/2.54/10,Q:96/2.54/40,in:96,pc:16,pt:96/72,px:1}},angle:{units:new Set(["deg","grad","rad","turn"]),compatible:!0,canonicalUnit:"deg",ratios:{deg:1,grad:.9,rad:180/Math.PI,turn:360}},time:{units:new Set(["s","ms"]),compatible:!0,canonicalUnit:"s",ratios:{s:1,ms:.001}},frequency:{units:new Set(["hz","khz"]),compatible:!0,canonicalUnit:"hz",ratios:{hz:1,khz:1e3}},resolution:{units:new Set(["dpi","dpcm","dppx"]),compatible:!0,canonicalUnit:"dppx",ratios:{dpi:1/96,dpcm:2.54/96,dppx:1}}},HA=new Map;for(const e of Object.values(_A))if(e.compatible)for(const h of e.units)HA.set(h,e);function fI(e){return HA.get(e)}function Eg(e,h){const F={...e};for(const k of Object.keys(h))F[k]?F[k]+=h[k]:F[k]=h[k];return F}function ig(e){return e==="number"?{}:e==="percent"?{percent:1}:_A.absoluteLengths.units.has(e)||_A.fontRelativeLengths.units.has(e)||_A.viewportRelativeLengths.units.has(e)?{length:1}:_A.angle.units.has(e)?{angle:1}:_A.time.units.has(e)?{time:1}:_A.frequency.units.has(e)?{frequency:1}:_A.resolution.units.has(e)?{resolution:1}:e==="fr"?{flex:1}:JA}function pI(e){if(e instanceof CSSUnitValue){let{unit:h,value:F}=e;const k=fI(e.unit);return k&&h!==k.canonicalUnit&&(F*=k.ratios[h],h=k.canonicalUnit),h==="number"?[[F,{}]]:[[F,{[h]:1}]]}if(e instanceof CSSMathInvert){if(!(e.value instanceof CSSUnitValue))throw new Error("Not implemented");const h=pI(e.value);if(h===JA||h.length>1)return JA;const F=h[0],k={};for(const[U,K]of Object.entries(F[1]))k[U]=-1*K;return h[0]=[1/F[0],k],h}if(e instanceof CSSMathProduct){let h=[[1,{}]];for(const F of e.values){const k=pI(F),U=[];if(k===JA)return JA;for(const K of h)for(const f of k)U.push([K[0]*f[0],Eg(K[1],f[1])]);h=U}return h}throw new Error("Not implemented")}function Dg(e,h){if(ig(h)===JA)throw new SyntaxError("The string did not match the expected pattern.");const F=pI(e);if(!F)throw new TypeError;if(F.length>1)throw new TypeError("Sum has more than one item");const k=function(U,K){const f=U.unit,b=U.value,x=fI(f),m=fI(K);return!m||x!==m?JA:new CSSUnitValue(b*m.ratios[f]/m.ratios[K],K)}(zI(F[0]),h);if(k===JA)throw new TypeError;return k}function zI(e){const[h,F]=e,k=Object.entries(F);if(k.length>1)return JA;if(k.length===0)return new CSSUnitValue(h,"number");const U=k[0];return U[1]!==1?JA:new CSSUnitValue(h,U[0])}function _I(e,...h){if(h&&h.length)throw new Error("Not implemented");const F=pI(e).map(k=>zI(k));if(F.some(k=>k===JA))throw new TypeError("Type error");return new CSSMathSum(...F)}function XI(e,h){if(e.percentHint&&h.percentHint&&e.percentHint!==h.percentHint)return JA;const F={...e,percentHint:e.percentHint??h.percentHint};for(const k of jI)h[k]&&(F[k]??(F[k]=0),F[k]+=h[k]);return F}class $A{constructor(h,F){ZA(this,"name"),ZA(this,"values"),this.name=h,this.values=F}}class kI{constructor(h,F){ZA(this,"value"),ZA(this,"associatedToken"),this.value=h,this.associatedToken=F}}function vI(e){if(Array.isArray(e))return e;if(typeof e=="string")return function(h){const F=new H(h),k=[];for(;;){const U=$(F);if(U===void 0)return k;k.push(U)}}(e);throw new TypeError("Invalid input type "+typeof e)}function nI(e){const h=e.shift();return h instanceof J||h instanceof S||h instanceof N?function(F,k){let U;if(k instanceof J)U=L;else if(k instanceof N)U=M;else{if(!(k instanceof S))return;U=n}const K=new kI([],k);for(;;){const f=F.shift();if(f instanceof U||f===void 0)return K;F.unshift(f),K.value.push(nI(F))}}(e,h):h instanceof I?function(F,k){const U=new $A(F.value,[]);for(;;){const K=k.shift();if(K instanceof M||K===void 0)return U;k.unshift(K),U.values.push(nI(k))}}(h,e):h}function eA(e){if(e instanceof N||e instanceof M)return 6;if(e instanceof o)switch(e.value){case"*":case"/":return 4;case"+":case"-":return 2}}function og(e){return e[e.length-1]}function lg(e,h,F){const k=["+","-"].includes(e.value)?"ADDITION":"MULTIPLICATION",U=h.type===k?h.values:[h],K=F.type===k?F.values:[F];return e.value==="-"?K[0]={type:"NEGATE",value:K[0]}:e.value==="/"&&(K[0]={type:"INVERT",value:K[0]}),{type:k,values:[...U,...K]}}function sg(e){if(e.type==="ADDITION")return new CSSMathSum(...e.values.map(h=>sg(h)));if(e.type==="MULTIPLICATION")return new CSSMathProduct(...e.values.map(h=>sg(h)));if(e.type==="NEGATE")return new CSSMathNegate(sg(e.value));if(e.type==="INVERT")return new CSSMathInvert(sg(e.value));if(e instanceof kI)return kA(new $A("calc",e.value));if(e instanceof A){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number");throw new SyntaxError("Invalid math expression")}return $o(e)}function kA(e){if(e.name==="min"||e.name==="max"){const k=e.values.filter(U=>!(U instanceof a||U instanceof R)).map(U=>DA(kA(new $A("calc",U))));return e.name==="min"?new CSSMathMin(...k):new CSSMathMax(...k)}if(e.name!=="calc")return null;const h=sg(function(k){const U=[],K=[];for(;k.length;){const f=k.shift();if(f instanceof s||f instanceof w||f instanceof t||f instanceof $A||f instanceof kI||f instanceof A)K.push(f);else if(f instanceof o&&["*","/","+","-"].includes(f.value)){for(;U.length&&!(og(U)instanceof N)&&eA(og(U))>eA(f);){const b=U.pop(),x=K.pop(),m=K.pop();K.push(lg(b,m,x))}U.push(f)}else if(f instanceof N)U.push(f);else if(f instanceof M){if(!U.length)return null;for(;!(og(U)instanceof N);){const b=U.pop(),x=K.pop(),m=K.pop();K.push(lg(b,m,x))}if(!(og(U)instanceof N))return null;U.pop()}else if(!(f instanceof a))return null}for(;U.length;){if(og(U)instanceof N)return null;const f=U.pop(),b=K.pop(),x=K.pop();K.push(lg(f,x,b))}return K[0]}([...e.values]));let F;try{F=DA(h)}catch{new CSSStyleSheet().insertRule("error",0)}return F instanceof CSSUnitValue?new CSSMathSum(F):F}function $o(e){return e instanceof $A&&["calc","min","max","clamp"].includes(e.name)?kA(e):e instanceof s&&e.value===0&&!e.unit?new CSSUnitValue(0,"px"):e instanceof s?new CSSUnitValue(e.value,"number"):e instanceof t?new CSSUnitValue(e.value,"percent"):e instanceof w?new CSSUnitValue(e.value,e.unit):void 0}function ke(e){const h=function(F){const k=vI(F);for(;k[0]instanceof a;)k.shift();if(k[0]===void 0)return null;const U=nI(k);for(;k[0]instanceof a;)k.shift();return k[0]===void 0?U:null}(e);return h===null&&new CSSStyleSheet().insertRule("error",0),h instanceof s||h instanceof t||h instanceof w||h instanceof $A||new CSSStyleSheet().insertRule("error",0),h instanceof w&&ig(h.unit)===null&&new CSSStyleSheet().insertRule("error",0),$o(h)}(function(){let e=new WeakMap;function h(K){const f=[];for(let x=0;x<K.length;x++)f[x]=typeof(b=K[x])=="number"?new CSSUnitValue(b,"number"):b;var b;return f}class F{static parse(f){return f instanceof F?f:DA(ke(f),{})}}class k extends F{constructor(f,b,x,m){super(),e.set(this,{values:h(f),operator:b,name:x||b,delimiter:m||", "})}get operator(){return e.get(this).operator}get values(){return e.get(this).values}toString(){const f=e.get(this);return`${f.name}(${f.values.join(f.delimiter)})`}}const U={CSSNumericValue:F,CSSMathValue:k,CSSUnitValue:class extends F{constructor(K,f){super(),e.set(this,{value:K,unit:f})}get value(){return e.get(this).value}set value(K){e.get(this).value=K}get unit(){return e.get(this).unit}to(K){return Dg(this,K)}toSum(...K){return _I(this,...K)}type(){return ig(e.get(this).unit)}toString(){const K=e.get(this);return`${K.value}${function(f){switch(f){case"percent":return"%";case"number":return"";default:return f.toLowerCase()}}(K.unit)}`}},CSSKeywordValue:class{constructor(K){this.value=K}toString(){return this.value.toString()}},CSSMathSum:class extends k{constructor(K){super(arguments,"sum","calc"," + ")}},CSSMathProduct:class extends k{constructor(K){super(arguments,"product","calc"," * ")}toSum(...K){return _I(this,...K)}type(){return e.get(this).values.map(K=>K.type()).reduce(XI)}},CSSMathNegate:class extends k{constructor(K){super([arguments[0]],"negate","-")}get value(){return e.get(this).values[0]}type(){return this.value.type()}},CSSMathInvert:class extends k{constructor(K){super([1,arguments[0]],"invert","calc"," / ")}get value(){return e.get(this).values[1]}type(){return function(K){const f={};for(const b of jI)f[b]=-1*K[b];return f}(e.get(this).values[1].type())}},CSSMathMax:class extends k{constructor(){super(arguments,"max")}},CSSMathMin:class extends k{constructor(){super(arguments,"min")}}};if(!window.CSS&&!Reflect.defineProperty(window,"CSS",{value:{}}))throw Error("Error installing CSSOM support");window.CSSUnitValue||["number","percent","em","ex","px","cm","mm","in","pt","pc","Q","vw","vh","vmin","vmax","rems","ch","deg","rad","grad","turn","ms","s","Hz","kHz","dppx","dpi","dpcm","fr"].forEach(K=>{if(!Reflect.defineProperty(CSS,K,{value:f=>new CSSUnitValue(f,K)}))throw Error(`Error installing CSS.${K}`)});for(let[K,f]of Object.entries(U))if(!(K in window)&&!Reflect.defineProperty(window,K,{value:f}))throw Error(`Error installing CSSOM support for ${K}`)})();const As="block";let eI=new WeakMap,fg=new WeakMap;const IE=["entry","exit","cover","contain","entry-crossing","exit-crossing"];function Is(e){return e===document.scrollingElement?document:e}function wQ(e){di(e);let h=eI.get(e).animations;if(h.length===0)return;let F=e.currentTime;for(let k=0;k<h.length;k++)h[k].tickAnimation(F)}function gs(e,h){if(!e)return null;const F=fg.get(e).sourceMeasurements,k=getComputedStyle(e);let U=F.scrollTop;return NA(h,k)==="x"&&(U=Math.abs(F.scrollLeft)),U}function Ki(e,h){const F=DA(e,h);if(F instanceof CSSUnitValue){if(F.unit==="px")return F.value;throw TypeError("Unhandled unit type "+F.unit)}throw TypeError("Unsupported value type: "+typeof e)}function di(e){if(!(e instanceof PQ))return void function(F){const k=eI.get(F);if(!k.anonymousSource)return;const U=Bs(k.anonymousSource,k.anonymousTarget);LB(F,U)}(e);const h=e.subject;if(!h||getComputedStyle(h).display=="none")return void LB(e,null);LB(e,ui(h))}function Qs(e){return["block","inline","x","y"].includes(e)}function li(e){const h=getComputedStyle(e);return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientWidth:e.clientWidth,clientHeight:e.clientHeight,writingMode:h.writingMode,direction:h.direction,scrollPaddingTop:h.scrollPaddingTop,scrollPaddingBottom:h.scrollPaddingBottom,scrollPaddingLeft:h.scrollPaddingLeft,scrollPaddingRight:h.scrollPaddingRight}}function fi(e,h){if(!e||!h)return;let F=0,k=0,U=h;const K=e.offsetParent;for(;U&&U!=K;)k+=U.offsetLeft,F+=U.offsetTop,U=U.offsetParent;k-=e.offsetLeft+e.clientLeft,F-=e.offsetTop+e.clientTop;const f=getComputedStyle(h);return{top:F,left:k,offsetWidth:h.offsetWidth,offsetHeight:h.offsetHeight,fontSize:f.fontSize}}function gE(e){let h=fg.get(e);h.sourceMeasurements=li(e);for(const F of h.timelineRefs){const k=F.deref();k instanceof PQ&&(eI.get(k).subjectMeasurements=fi(e,k.subject))}h.updateScheduled||(setTimeout(()=>{for(const F of h.timelineRefs){const k=F.deref();k&&wQ(k)}h.updateScheduled=!1}),h.updateScheduled=!0)}function LB(e,h){const F=eI.get(e),k=F.source;if(k!=h){if(k){const U=fg.get(k);if(U){U.timelineRefs.delete(e);const K=Array.from(U.timelineRefs).filter(f=>f.deref()===void 0);for(const f of K)U.timelineRefs.delete(f);U.timelineRefs.size===0&&(U.disconnect(),fg.delete(k))}}if(F.source=h,h){let U=fg.get(h);if(!U){U={timelineRefs:new Set,sourceMeasurements:li(h)},fg.set(h,U);const K=new ResizeObserver(x=>{for(const m of x)gE(F.source)});K.observe(h);for(const x of h.children)K.observe(x);const f=new MutationObserver(x=>{for(const m of x)gE(m.target)});f.observe(h,{attributes:!0,attributeFilter:["style","class"]});const b=()=>{U.sourceMeasurements.scrollLeft=h.scrollLeft,U.sourceMeasurements.scrollTop=h.scrollTop;for(const x of U.timelineRefs){const m=x.deref();m&&wQ(m)}};Is(h).addEventListener("scroll",b),U.disconnect=()=>{K.disconnect(),f.disconnect(),Is(h).removeEventListener("scroll",b)}}U.timelineRefs.add(new WeakRef(e))}}}function pi(e,h){let F=eI.get(e).animations;for(let k=0;k<F.length;k++)F[k].animation==h&&F.splice(k,1)}function xi(e,h,F){let k=eI.get(e).animations;for(let U=0;U<k.length;U++)if(k[U].animation==h)return;k.push({animation:h,tickAnimation:F}),queueMicrotask(()=>{wQ(e)})}class NI{constructor(h){if(eI.set(this,{source:null,axis:As,anonymousSource:h?h.anonymousSource:null,anonymousTarget:h?h.anonymousTarget:null,subject:null,inset:null,animations:[],subjectMeasurements:null}),LB(this,h&&h.source!==void 0?h.source:document.scrollingElement),h&&h.axis!==void 0&&h.axis!=As){if(!Qs(h.axis))throw TypeError("Invalid axis");eI.get(this).axis=h.axis}wQ(this)}set source(h){LB(this,h),wQ(this)}get source(){return eI.get(this).source}set axis(h){if(!Qs(h))throw TypeError("Invalid axis");eI.get(this).axis=h,wQ(this)}get axis(){return eI.get(this).axis}get duration(){return CSS.percent(100)}get phase(){const h=this.source;if(!h)return"inactive";let F=getComputedStyle(h);return F.display=="none"?"inactive":h==document.scrollingElement||F.overflow!="visible"&&F.overflow!="clip"?"active":"inactive"}get currentTime(){const h=this.source;if(!h||!h.isConnected||this.phase=="inactive")return null;const F=getComputedStyle(h);if(F.display==="inline"||F.display==="none")return null;const k=this.axis,U=gs(h,k),K=function(f,b){const x=fg.get(f).sourceMeasurements,m=getComputedStyle(f).writingMode=="horizontal-tb";return b==="block"?b=m?"y":"x":b==="inline"&&(b=m?"x":"y"),b==="y"?x.scrollHeight-x.clientHeight:b==="x"?x.scrollWidth-x.clientWidth:void 0}(h,k);return K>0?CSS.percent(100*U/K):CSS.percent(100)}get __polyfill(){return!0}}function qi(e,h){let F=e.parentElement;for(;F!=null;){if(h(F))return F;F=F.parentElement}}function Bs(e,h){switch(e){case"root":return document.scrollingElement;case"nearest":return ui(h);case"self":return h;default:throw new TypeError("Invalid ScrollTimeline Source Type.")}}function ne(e){switch(getComputedStyle(e).display){case"block":case"inline-block":case"list-item":case"table":case"table-caption":case"flow-root":case"flex":case"grid":return!0}return!1}function Cs(e){const h=getComputedStyle(e);return h.transform!="none"||h.perspective!="none"||h.willChange=="transform"||h.willChange=="perspective"||h.filter!="none"||h.willChange=="filter"||h.backdropFilter!="none"}function Ne(e){return getComputedStyle(e).position!="static"||Cs(e)}function Me(e){switch(getComputedStyle(e).position){case"static":case"relative":case"sticky":return qi(e,ne);case"absolute":return qi(e,Ne);case"fixed":return qi(e,Cs)}}function ui(e){if(e&&e.isConnected){for(;e=Me(e);)switch(getComputedStyle(e)["overflow-x"]){case"auto":case"scroll":case"hidden":return e==document.body&&getComputedStyle(document.scrollingElement).overflow=="visible"?document.scrollingElement:e}return document.scrollingElement}}function HB(e,h){const F=eI.get(e),k=F.subjectMeasurements,U=fg.get(F.source).sourceMeasurements;return e.phase==="inactive"?null:e instanceof PQ?bi(h,U,k,F.axis,F.inset):null}function bi(e,h,F,k,U){const K=h.direction=="rtl"||h.writingMode=="vertical-rl";let f,b,x={fontSize:F.fontSize};NA(k,h)==="x"?(f=F.offsetWidth,b=F.left,x.scrollPadding=[h.scrollPaddingLeft,h.scrollPaddingRight],K&&(b+=h.scrollWidth-h.clientWidth,x.scrollPadding=[h.scrollPaddingRight,h.scrollPaddingLeft]),x.containerSize=h.clientWidth):(f=F.offsetHeight,b=F.top,x.scrollPadding=[h.scrollPaddingTop,h.scrollPaddingBottom],x.containerSize=h.clientHeight);const m=function(Oi,iE){const qe={start:0,end:0};if(!Oi)return qe;const[ue,be]=[Oi.start,Oi.end].map((rs,Fs)=>rs==="auto"?iE.scrollPadding[Fs]==="auto"?0:parseFloat(iE.scrollPadding[Fs]):Ki(rs,{percentageReference:CSS.px(iE.containerSize),fontSize:CSS.px(parseFloat(iE.fontSize))}));return{start:ue,end:be}}(U,x),V=b-x.containerSize+m.end,QA=b+f-m.start,CA=V+f,YA=QA-f,OA=Math.min(CA,YA),xI=Math.max(CA,YA);let tg,$I;const Ss=f>x.containerSize-m.start-m.end;switch(e){case"cover":tg=V,$I=QA;break;case"contain":tg=OA,$I=xI;break;case"entry":tg=V,$I=OA;break;case"exit":tg=xI,$I=QA;break;case"entry-crossing":tg=V,$I=Ss?xI:OA;break;case"exit-crossing":tg=Ss?OA:xI,$I=QA}return{start:tg,end:$I}}function Es(e,h){if(e instanceof PQ){const{rangeName:F,offset:k}=h;return is(HB(e,F),k,HB(e,"cover"),e.subject)}if(e instanceof NI){const{axis:F,source:k}=e,{sourceMeasurements:U}=fg.get(k);let K;return K=NA(F,U)==="x"?U.scrollWidth-U.clientWidth:U.scrollHeight-U.clientHeight,Ki(h,{percentageReference:CSS.px(K)})/K}unsupportedTimeline(e)}function is(e,h,F,k){if(!e||!F)return 0;let U=getComputedStyle(k);return(Ki(h,{percentageReference:CSS.px(e.end-e.start),fontSize:CSS.px(parseFloat(U.fontSize))})+e.start-F.start)/(F.end-F.start)}let PQ=class extends NI{constructor(e){super(e);const h=eI.get(this);h.subject=e&&e.subject?e.subject:void 0,e&&e.inset&&(h.inset=function(F){if(!F)return{start:0,end:0};let k;if(k=typeof F=="string"?MA(F).map(U=>{if(U==="auto")return"auto";try{return CSSNumericValue.parse(U)}catch{throw TypeError(`Could not parse inset "${F}"`)}}):Array.isArray(F)?F:[F],k.length===0||k.length>2)throw TypeError("Invalid inset");for(const U of k){if(U==="auto")continue;const K=U.type();if(K.length!==1&&K.percent!==1)throw TypeError("Invalid inset")}return{start:k[0],end:k[1]??k[0]}}(e.inset)),h.subject&&(new ResizeObserver(()=>{gE(h.source)}).observe(h.subject),new MutationObserver(()=>{gE(h.source)}).observe(h.subject,{attributes:!0,attributeFilter:["class","style"]})),di(this),h.subjectMeasurements=fi(h.source,h.subject),wQ(this)}get source(){return di(this),eI.get(this).source}set source(e){throw new Error("Cannot set the source of a view timeline")}get subject(){return eI.get(this).subject}get axis(){return eI.get(this).axis}get currentTime(){const e=gs(this.source,this.axis);if(e==null)return null;const h=HB(this,"cover");if(!h)return null;const F=(e-h.start)/(h.end-h.start);return CSS.percent(100*F)}get startOffset(){return CSS.px(HB(this,"cover").start)}get endOffset(){return CSS.px(HB(this,"cover").end)}};const Je=document.getAnimations,Ue=window.Element.prototype.getAnimations,Le=window.Element.prototype.animate,Ds=window.Animation;class TQ{constructor(){this.state="pending",this.nativeResolve=this.nativeReject=null,this.promise=new Promise((h,F)=>{this.nativeResolve=h,this.nativeReject=F})}resolve(h){this.state="resolved",this.nativeResolve(h)}reject(h){this.state="rejected",this.promise.catch(()=>{}),this.nativeReject(h)}}function YB(e){e.readyPromise=new TQ,requestAnimationFrame(()=>{var h;(((h=e.timeline)==null?void 0:h.currentTime)??null)!==null&&(QE(e),e.pendingTask!=="play"||e.startTime===null&&e.holdTime===null?e.pendingTask==="pause"&&ts(e):ss(e))})}function os(){return new DOMException("The user aborted a request","AbortError")}function aQ(e,h){if(h===null)return h;if(typeof h!="number")throw new DOMException(`Unexpected value: ${h}. Cannot convert to CssNumberish`,"InvalidStateError");const F=e.rangeDuration??100,k=xg(e),U=k?F*h/k:0;return CSS.percent(U)}function uA(e,h){if(e.timeline){if(h===null)return h;if(h.unit==="percent"){const F=e.rangeDuration??100,k=xg(e);return h.value*k/F}throw new DOMException("CSSNumericValue must be a percentage for progress based animations.","NotSupportedError")}{if(h==null||typeof h=="number")return h;const F=h.to("ms");if(F)return F.value;throw new DOMException("CSSNumericValue must be either a number or a time value for time based animations.","InvalidStateError")}}function ss(e){const h=uA(e,e.timeline.currentTime);if(e.holdTime!=null)ng(e),e.animation.playbackRate==0?e.startTime=h:(e.startTime=h-e.holdTime/e.animation.playbackRate,e.holdTime=null);else if(e.startTime!==null&&e.pendingPlaybackRate!==null){const F=(h-e.startTime)*e.animation.playbackRate;ng(e);const k=e.animation.playbackRate;k==0?(e.holdTime=null,e.startTime=h):e.startTime=h-F/k}e.readyPromise&&e.readyPromise.state=="pending"&&e.readyPromise.resolve(e.proxy),pg(e,!1,!1),qg(e),e.pendingTask=null}function ts(e){const h=uA(e,e.timeline.currentTime);e.startTime!=null&&e.holdTime==null&&(e.holdTime=(h-e.startTime)*e.animation.playbackRate),ng(e),e.startTime=null,e.readyPromise.resolve(e.proxy),pg(e,!1,!1),qg(e),e.pendingTask=null}function ws(e){if(!e.finishedPromise||e.finishedPromise.state!="pending"||e.proxy.playState!="finished")return;e.finishedPromise.resolve(e.proxy),e.animation.pause();const h=new CustomEvent("finish",{detail:{currentTime:e.proxy.currentTime,timelineTime:e.proxy.timeline.currentTime}});Object.defineProperty(h,"currentTime",{get:function(){return this.detail.currentTime}}),Object.defineProperty(h,"timelineTime",{get:function(){return this.detail.timelineTime}}),requestAnimationFrame(()=>{queueMicrotask(()=>{e.animation.dispatchEvent(h)})})}function OQ(e){return e.pendingPlaybackRate!==null?e.pendingPlaybackRate:e.animation.playbackRate}function ng(e){e.pendingPlaybackRate!==null&&(e.animation.playbackRate=e.pendingPlaybackRate,e.pendingPlaybackRate=null)}function as(e){if(!e.timeline)return null;const h=uA(e,e.timeline.currentTime);if(h===null||e.startTime===null)return null;let F=(h-e.startTime)*e.animation.playbackRate;return F==-0&&(F=0),F}function pg(e,h,F){if(!e.timeline)return;let k=h?uA(e,e.proxy.currentTime):as(e);if(k&&e.startTime!=null&&!e.proxy.pending){const U=OQ(e),K=xg(e);let f=e.previousCurrentTime;U>0&&k>=K&&e.previousCurrentTime!=null?((f===null||f<K)&&(f=K),e.holdTime=h?k:f):U<0&&k<=0?((f==null||f>0)&&(f=0),e.holdTime=h?k:f):U!=0&&(h&&e.holdTime!==null&&(e.startTime=function(b,x){if(!b.timeline)return null;const m=uA(b,b.timeline.currentTime);return m==null?null:m-x/b.animation.playbackRate}(e,e.holdTime)),e.holdTime=null)}qg(e),e.previousCurrentTime=uA(e,e.proxy.currentTime),e.proxy.playState=="finished"?(e.finishedPromise||(e.finishedPromise=new TQ),e.finishedPromise.state=="pending"&&(F?ws(e):Promise.resolve().then(()=>{ws(e)}))):(e.finishedPromise&&e.finishedPromise.state=="resolved"&&(e.finishedPromise=new TQ),e.animation.playState!="paused"&&e.animation.pause())}function xg(e){const h=function(k){const U=k.proxy.effect.getTiming();return k.normalizedTiming||U}(e),F=h.delay+h.endDelay+h.iterations*h.duration;return Math.max(0,F)}function qg(e){if(e.timeline)if(e.startTime!==null){const h=e.timeline.currentTime;if(h==null)return;mi(e,(uA(e,h)-e.startTime)*e.animation.playbackRate)}else e.holdTime!==null&&mi(e,e.holdTime)}function mi(e,h){const F=e.timeline,k=e.animation.playbackRate,U=F.currentTime&&F.currentTime.value==(k<0?0:100)?k<0?.001:-.001:0;e.animation.currentTime=h+U}function Pi(e,h){if(!e.timeline)return;const F=e.proxy.playState=="paused"&&e.proxy.pending;let k=!1,U=uA(e,e.proxy.currentTime);OQ(e)==0&&U==null&&(e.holdTime=0),U==null&&(e.autoAlignStartTime=!0),(e.proxy.playState==="finished"||F)&&(e.holdTime=null,e.startTime=null,e.autoAlignStartTime=!0),e.holdTime&&(e.startTime=null),e.pendingTask&&(e.pendingTask=null,k=!0),(e.holdTime!==null||e.autoAlignStartTime||F||e.pendingPlaybackRate!==null)&&(e.readyPromise&&!k&&(e.readyPromise=null),qg(e),e.readyPromise||YB(e),e.pendingTask="play",xi(e.timeline,e.animation,Ti.bind(e.proxy)),pg(e,!1,!1))}function Ti(e){const h=gA.get(this);if(!h)return;if(e==null)return void(h.proxy.playState!=="paused"&&h.animation.playState!="idle"&&h.animation.cancel());QE(h),h.pendingTask&&requestAnimationFrame(()=>{h.pendingTask!=="play"||h.startTime===null&&h.holdTime===null?h.pendingTask==="pause"&&ts(h):ss(h)});const F=this.playState;if(F=="running"||F=="finished"){const k=uA(h,e);mi(h,(k-uA(h,this.startTime))*this.playbackRate),pg(h,!1,!1)}}function es(e){e.specifiedTiming=null}let gA=new WeakMap;window.addEventListener("pagehide",e=>{gA=new WeakMap},!1);let hs=new WeakMap;function QE(e){if(!e.autoAlignStartTime||!e.timeline||!e.timeline.currentTime||e.proxy.playState==="idle"||e.proxy.playState==="paused"&&e.holdTime!==null)return;const h=e.rangeDuration;let F,k;try{F=CSS.percent(100*function(K){if(!K.animationRange)return 0;const f=K.animationRange.start==="normal"?cs(K.timeline):K.animationRange.start;return Es(K.timeline,f)}(e))}catch(K){F=CSS.percent(0),e.animationRange.start="normal",console.warn("Exception when calculating start offset",K)}try{k=CSS.percent(100*(1-function(K){if(!K.animationRange)return 0;const f=K.animationRange.end==="normal"?ys(K.timeline):K.animationRange.end;return 1-Es(K.timeline,f)}(e)))}catch(K){k=CSS.percent(100),e.animationRange.end="normal",console.warn("Exception when calculating end offset",K)}e.rangeDuration=k.value-F.value;const U=OQ(e);e.startTime=uA(e,U>=0?F:k),e.holdTime=null,e.rangeDuration!==h&&es(e)}function BE(e){throw new Error("Unsupported timeline class")}function cs(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(0)}:e instanceof NI?CSS.percent(0):void BE()}function ys(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(100)}:e instanceof NI?CSS.percent(100):void BE()}function He(e,h){if(!h)return{start:"normal",end:"normal"};const F={start:cs(e),end:ys(e)};if(e instanceof ViewTimeline){const k=MA(h),U=[],K=[];if(k.forEach(f=>{if(IE.includes(f))U.push(f);else try{K.push(CSSNumericValue.parse(f))}catch{throw TypeError(`Could not parse range "${h}"`)}}),U.length>2||K.length>2||K.length==1)throw TypeError("Invalid time range or unsupported time range format.");return U.length&&(F.start.rangeName=U[0],F.end.rangeName=U.length>1?U[1]:U[0]),K.length>1&&(F.start.offset=K[0],F.end.offset=K[1]),F}if(e instanceof NI){const k=h.split(" ");if(k.length!=2)throw TypeError("Invalid time range or unsupported time range format.");return F.start=CSSNumericValue.parse(k[0]),F.end=CSSNumericValue.parse(k[1]),F}BE()}function CE(e,h,F){if(!h||h==="normal")return"normal";if(e instanceof ViewTimeline){let k="cover",U=F==="start"?CSS.percent(0):CSS.percent(100);if(h instanceof Object)h.rangeName!==void 0&&(k=h.rangeName),h.offset!==void 0&&(U=h.offset);else{const K=MA(h);K.length===1?IE.includes(K[0])?k=K[0]:U=DA(CSSNumericValue.parse(K[0]),{}):K.length===2&&(k=K[0],U=DA(CSSNumericValue.parse(K[1]),{}))}if(!IE.includes(k))throw TypeError("Invalid range name");return{rangeName:k,offset:U}}if(e instanceof NI)return CSSNumericValue.parse(h);BE()}class EE{constructor(h,F,k={}){const U=F instanceof NI,K=h instanceof Ds?h:new Ds(h,U?void 0:F);hs.set(K,this),gA.set(this,{animation:K,timeline:U?F:void 0,playState:U?"idle":null,readyPromise:null,finishedPromise:null,startTime:null,holdTime:null,rangeDuration:null,previousCurrentTime:null,autoAlignStartTime:!1,pendingPlaybackRate:null,pendingTask:null,specifiedTiming:null,normalizedTiming:null,effect:null,animationRange:U?He(F,k["animation-range"]):null,proxy:this})}get effect(){const h=gA.get(this);return h.timeline?(h.effect||(h.effect=function(F){const k=F.animation.effect,U=k.updateTiming,K={apply:function(m){k.getTiming();const V=m.apply(k);if(F.timeline){const QA=F.duration??100;V.localTime=aQ(F,V.localTime),V.endTime=aQ(F,V.endTime),V.activeDuration=aQ(F,V.activeDuration);const CA=xg(F),YA=V.iterations?(CA-V.delay-V.endDelay)/V.iterations:0;V.duration=CA?CSS.percent(QA*YA/CA):CSS.percent(0),F.timeline.currentTime===void 0&&(V.localTime=null)}return V}},f={apply:function(m,V){if(F.specifiedTiming)return F.specifiedTiming;F.specifiedTiming=m.apply(k);let QA,CA=Object.assign({},F.specifiedTiming);if(CA.duration===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");return(CA.duration===null||CA.duration==="auto"||F.autoDurationEffect)&&F.timeline&&(F.autoDurationEffect=!0,CA.delay=0,CA.endDelay=0,QA=CA.iterations?1e5:0,CA.duration=CA.iterations?(QA-CA.delay-CA.endDelay)/CA.iterations:0,CA.duration<0&&(CA.duration=0,CA.endDelay=QA-CA.delay),U.apply(k,[CA])),F.normalizedTiming=CA,F.specifiedTiming}},b={apply:function(m,V,QA){if(QA&&QA.length){if(F.timeline&&QA[0]){const CA=QA[0],YA=CA.duration;if(YA===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");if(CA.iterations===1/0)throw TypeError("Effect iterations cannot be Infinity when used with Scroll Timelines");YA!==void 0&&YA!=="auto"&&(F.autoDurationEffect=null)}F.specifiedTiming&&m.apply(k,[F.specifiedTiming]),m.apply(k,QA),es(F)}}},x=new Proxy(k,{get:function(m,V){const QA=m[V];return typeof QA=="function"?QA.bind(k):QA},set:function(m,V,QA){return m[V]=QA,!0}});return x.getComputedTiming=new Proxy(k.getComputedTiming,K),x.getTiming=new Proxy(k.getTiming,f),x.updateTiming=new Proxy(k.updateTiming,b),x}(h)),h.effect):h.animation.effect}set effect(h){const F=gA.get(this);F.animation.effect=h,F.effect=null,F.autoDurationEffect=null}get timeline(){const h=gA.get(this);return h.timeline||h.animation.timeline}set timeline(h){const F=gA.get(this),k=this.timeline;if(k==h)return;const U=this.playState,K=this.currentTime;let f,b=xg(F);f=K===null?null:b===0?0:uA(F,K)/b;const x=k instanceof NI,m=h instanceof NI,V=this.pending;if(x&&pi(F.timeline,F.animation),m)return F.timeline=h,ng(F),F.autoAlignStartTime=!0,F.startTime=null,F.holdTime=null,U!=="running"&&U!=="finished"||(F.readyPromise&&F.readyPromise.state!=="resolved"||YB(F),F.pendingTask="play",xi(F.timeline,F.animation,Ti.bind(this))),U==="paused"&&f!==null&&(F.holdTime=f*b),V&&(F.readyPromise&&F.readyPromise.state!="resolved"||YB(F),F.pendingTask=U=="paused"?"pause":"play"),F.startTime!==null&&(F.holdTime=null),void pg(F,!1,!1);if(F.animation.timeline!=h)throw TypeError("Unsupported timeline: "+h);if(pi(F.timeline,F.animation),F.timeline=null,x)switch(K!==null&&(F.animation.currentTime=f*xg(F)),U){case"paused":F.animation.pause();break;case"running":case"finished":F.animation.play()}}get startTime(){const h=gA.get(this);return h.timeline?aQ(h,h.startTime):h.animation.startTime}set startTime(h){const F=gA.get(this);if(h=uA(F,h),!F.timeline)return void(F.animation.startTime=h);F.autoAlignStartTime=!1,uA(F,F.timeline.currentTime)==null&&F.startTime!=null&&(F.holdTime=null,qg(F));const k=uA(F,this.currentTime);ng(F),F.startTime=h,F.startTime!==null&&F.animation.playbackRate!=0?F.holdTime=null:F.holdTime=k,F.pendingTask&&(F.pendingTask=null,F.readyPromise.resolve(this)),pg(F,!0,!1),qg(F)}get currentTime(){const h=gA.get(this);return h.timeline?h.holdTime!=null?aQ(h,h.holdTime):aQ(h,as(h)):h.animation.currentTime}set currentTime(h){const F=gA.get(this);F.timeline?(function(k,U){if(U==null&&k.currentTime!==null)throw new TypeError;U=uA(k,U),k.autoAlignStartTime=!1,k.holdTime!==null||k.startTime===null||k.timeline.phase==="inactive"||k.animation.playbackRate===0?k.holdTime=U:k.startTime=uA(k,k.timeline.currentTime)-U/k.animation.playbackRate,k.timeline.phase==="inactive"&&(k.startTime=null),k.previousCurrentTime=null}(F,h),F.pendingTask=="pause"&&(F.holdTime=uA(F,h),ng(F),F.startTime=null,F.pendingTask=null,F.readyPromise.resolve(this)),pg(F,!0,!1)):F.animation.currentTime=h}get playbackRate(){return gA.get(this).animation.playbackRate}set playbackRate(h){const F=gA.get(this);if(!F.timeline)return void(F.animation.playbackRate=h);F.pendingPlaybackRate=null;const k=this.currentTime;F.animation.playbackRate=h,k!==null&&(this.currentTime=k)}get playState(){const h=gA.get(this);if(!h.timeline)return h.animation.playState;const F=uA(h,this.currentTime);return F===null&&h.startTime===null&&h.pendingTask==null?"idle":h.pendingTask=="pause"||h.startTime===null&&h.pendingTask!="play"?"paused":F!=null&&(h.animation.playbackRate>0&&F>=xg(h)||h.animation.playbackRate<0&&F<=0)?"finished":"running"}get rangeStart(){var h;return((h=gA.get(this).animationRange)==null?void 0:h.start)??"normal"}set rangeStart(h){const F=gA.get(this);if(!F.timeline)return F.animation.rangeStart=h;F.timeline instanceof NI&&(F.animationRange.start=CE(F.timeline,h,"start"),QE(F),qg(F))}get rangeEnd(){var h;return((h=gA.get(this).animationRange)==null?void 0:h.end)??"normal"}set rangeEnd(h){const F=gA.get(this);if(!F.timeline)return F.animation.rangeEnd=h;F.timeline instanceof NI&&(F.animationRange.end=CE(F.timeline,h,"end"),QE(F),qg(F))}get replaceState(){return gA.get(this).animation.pending}get pending(){const h=gA.get(this);return h.timeline?!!h.readyPromise&&h.readyPromise.state=="pending":h.animation.pending}finish(){const h=gA.get(this);if(!h.timeline)return void h.animation.finish();const F=OQ(h),k=xg(h);if(F==0)throw new DOMException("Cannot finish Animation with a playbackRate of 0.","InvalidStateError");if(F>0&&k==1/0)throw new DOMException("Cannot finish Animation with an infinite target effect end.","InvalidStateError");ng(h);const U=F<0?0:k;this.currentTime=aQ(h,U);const K=uA(h,h.timeline.currentTime);h.startTime===null&&K!==null&&(h.startTime=K-U/h.animation.playbackRate),h.pendingTask=="pause"&&h.startTime!==null&&(h.holdTime=null,h.pendingTask=null,h.readyPromise.resolve(this)),h.pendingTask=="play"&&h.startTime!==null&&(h.pendingTask=null,h.readyPromise.resolve(this)),pg(h,!0,!0)}play(){const h=gA.get(this);h.timeline?Pi(h):h.animation.play()}pause(){const h=gA.get(this);h.timeline?this.playState!="paused"&&(h.animation.currentTime===null&&(h.autoAlignStartTime=!0),h.pendingTask=="play"?h.pendingTask=null:h.readyPromise=null,h.readyPromise||YB(h),h.pendingTask="pause",xi(h.timeline,h.animation,Ti.bind(h.proxy))):h.animation.pause()}reverse(){const h=gA.get(this),F=OQ(h),k=uA(h,this.currentTime),U=xg(h)==1/0,K=F!=0&&(F<0||k>0||!U);if(!h.timeline||!K)return K&&(h.pendingPlaybackRate=-OQ(h)),void h.animation.reverse();if(h.timeline.phase=="inactive")throw new DOMException("Cannot reverse an animation with no active timeline","InvalidStateError");this.updatePlaybackRate(-F),Pi(h)}updatePlaybackRate(h){const F=gA.get(this);if(F.pendingPlaybackRate=h,!F.timeline)return void F.animation.updatePlaybackRate(h);const k=this.playState;if(!F.readyPromise||F.readyPromise.state!="pending")switch(k){case"idle":case"paused":ng(F);break;case"finished":const U=uA(F,F.timeline.currentTime),K=U!==null?(U-F.startTime)*F.animation.playbackRate:null;F.startTime=h==0?U:U!=null&&K!=null?(U-K)/h:null,ng(F),pg(F,!1,!1),qg(F);break;default:Pi(F)}}persist(){gA.get(this).animation.persist()}get id(){return gA.get(this).animation.id}set id(h){gA.get(this).animation.id=h}cancel(){const h=gA.get(this);h.timeline?(this.playState!="idle"&&(function(F){F.pendingTask&&(F.pendingTask=null,ng(F),F.readyPromise.reject(os()),YB(F),F.readyPromise.resolve(F.proxy))}(h),h.finishedPromise&&h.finishedPromise.state=="pending"&&h.finishedPromise.reject(os()),h.finishedPromise=new TQ,h.animation.cancel()),h.startTime=null,h.holdTime=null,pi(h.timeline,h.animation)):h.animation.cancel()}get onfinish(){return gA.get(this).animation.onfinish}set onfinish(h){gA.get(this).animation.onfinish=h}get oncancel(){return gA.get(this).animation.oncancel}set oncancel(h){gA.get(this).animation.oncancel=h}get onremove(){return gA.get(this).animation.onremove}set onremove(h){gA.get(this).animation.onremove=h}get finished(){const h=gA.get(this);return h.timeline?(h.finishedPromise||(h.finishedPromise=new TQ),h.finishedPromise.promise):h.animation.finished}get ready(){const h=gA.get(this);return h.timeline?(h.readyPromise||(h.readyPromise=new TQ,h.readyPromise.resolve(this)),h.readyPromise.promise):h.animation.ready}addEventListener(h,F,k){gA.get(this).animation.addEventListener(h,F,k)}removeEventListener(h,F,k){gA.get(this).animation.removeEventListener(h,F,k)}dispatchEvent(h){gA.get(this).animation.dispatchEvent(h)}}function Ye(e,h){const F=h.timeline;F instanceof NI&&delete h.timeline;const k=Le.apply(this,[e,h]),U=new EE(k,F);return F instanceof NI&&(k.pause(),gA.get(U).animationRange={start:CE(F,h.rangeStart,"start"),end:CE(F,h.rangeEnd,"end")},U.play()),U}function Gs(e){for(let h=0;h<e.length;++h){let F=hs.get(e[h]);F&&(e[h]=F)}return e}function Ke(e){return Gs(Ue.apply(this,[e]))}function de(e){return Gs(Je.apply(this,[e]))}const AI={IDENTIFIER:/[\w\\\@_-]+/g,WHITE_SPACE:/\s*/g,TIME:/^[0-9]+(s|ms)/,SCROLL_TIMELINE:/scroll-timeline\s*:([^;}]+)/,SCROLL_TIMELINE_NAME:/scroll-timeline-name\s*:([^;}]+)/,SCROLL_TIMELINE_AXIS:/scroll-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE:/view-timeline\s*:([^;}]+)/,VIEW_TIMELINE_NAME:/view-timeline-name\s*:([^;}]+)/,VIEW_TIMELINE_AXIS:/view-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE_INSET:/view-timeline-inset\s*:([^;}]+)/,ANIMATION_TIMELINE:/animation-timeline\s*:([^;}]+)/,ANIMATION_TIME_RANGE:/animation-range\s*:([^;}]+)/,ANIMATION_NAME:/animation-name\s*:([^;}]+)/,ANIMATION:/animation\s*:([^;}]+)/,ANONYMOUS_SCROLL_TIMELINE:/scroll\(([^)]*)\)/,ANONYMOUS_VIEW_TIMELINE:/view\(([^)]*)\)/},XQ=["block","inline","x","y"],le=["nearest","root","self"],$g=new class{constructor(){this.cssRulesWithTimelineName=[],this.nextAnonymousTimelineNameIndex=0,this.anonymousScrollTimelineOptions=new Map,this.anonymousViewTimelineOptions=new Map,this.sourceSelectorToScrollTimeline=[],this.subjectSelectorToViewTimeline=[],this.keyframeNamesSelectors=new Map}transpileStyleSheet(e,h,F){const k={sheetSrc:e,index:0,name:F};for(;k.index<k.sheetSrc.length&&(this.eatWhitespace(k),!(k.index>=k.sheetSrc.length));){if(this.lookAhead("/*",k)){for(;this.lookAhead("/*",k);)this.eatComment(k),this.eatWhitespace(k);continue}const U=this.parseQualifiedRule(k);U&&(h?this.parseKeyframesAndSaveNameMapping(U,k):this.handleScrollTimelineProps(U,k))}return k.sheetSrc}getAnimationTimelineOptions(e,h){for(let F=this.cssRulesWithTimelineName.length-1;F>=0;F--){const k=this.cssRulesWithTimelineName[F];try{if(h.matches(k.selector)&&(!k["animation-name"]||k["animation-name"]==e))return{"animation-timeline":k["animation-timeline"],"animation-range":k["animation-range"]}}catch{}}return null}getAnonymousScrollTimelineOptions(e,h){const F=this.anonymousScrollTimelineOptions.get(e);return F?{anonymousSource:F.source,anonymousTarget:h,source:Bs(F.source??"nearest",h),axis:F.axis?F.axis:"block"}:null}getScrollTimelineOptions(e,h){const F=this.getAnonymousScrollTimelineOptions(e,h);if(F)return F;for(let k=this.sourceSelectorToScrollTimeline.length-1;k>=0;k--){const U=this.sourceSelectorToScrollTimeline[k];if(U.name==e){const K=this.findPreviousSiblingOrAncestorMatchingSelector(h,U.selector);if(K)return{source:K,...U.axis?{axis:U.axis}:{}}}}return null}findPreviousSiblingOrAncestorMatchingSelector(e,h){let F=e;for(;F;){if(F.matches(h))return F;F=F.previousElementSibling||F.parentElement}return null}getAnonymousViewTimelineOptions(e,h){const F=this.anonymousViewTimelineOptions.get(e);return F?{subject:h,axis:F.axis?F.axis:"block",inset:F.inset?F.inset:"auto"}:null}getViewTimelineOptions(e,h){const F=this.getAnonymousViewTimelineOptions(e,h);if(F)return F;for(let k=this.subjectSelectorToViewTimeline.length-1;k>=0;k--){const U=this.subjectSelectorToViewTimeline[k];if(U.name==e){const K=this.findPreviousSiblingOrAncestorMatchingSelector(h,U.selector);if(K)return{subject:K,axis:U.axis,inset:U.inset}}}return null}handleScrollTimelineProps(e,h){if(e.selector.includes("@keyframes"))return;const F=e.block.contents.includes("animation-name:"),k=e.block.contents.includes("animation-timeline:"),U=e.block.contents.includes("animation:");if(this.saveSourceSelectorToScrollTimeline(e),this.saveSubjectSelectorToViewTimeline(e),!k&&!F&&!U)return;let K=[],f=[],b=!1;k&&(K=this.extractScrollTimelineNames(e.block.contents)),F&&(f=this.extractMatches(e.block.contents,AI.ANIMATION_NAME)),k&&F||(U&&this.extractMatches(e.block.contents,AI.ANIMATION).forEach(x=>{const m=this.extractAnimationName(x);m&&k&&f.push(m),k&&(this.hasDuration(x)||(this.hasAutoDuration(x)&&(e.block.contents=e.block.contents.replace("auto"," ")),e.block.contents=e.block.contents.replace(x," 1s "+x),b=!0))}),b&&this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,h)),this.saveRelationInList(e,K,f)}saveSourceSelectorToScrollTimeline(e){const h=e.block.contents.includes("scroll-timeline:"),F=e.block.contents.includes("scroll-timeline-name:"),k=e.block.contents.includes("scroll-timeline-axis:");if(!h&&!F)return;let U=[];if(h){const f=this.extractMatches(e.block.contents,AI.SCROLL_TIMELINE);for(const b of f){const x=this.split(b);let m={selector:e.selector,name:""};x.length==1?m.name=x[0]:x.length==2&&(XQ.includes(x[0])?(m.axis=x[0],m.name=x[1]):(m.axis=x[1],m.name=x[0])),U.push(m)}}if(F){const f=this.extractMatches(e.block.contents,AI.SCROLL_TIMELINE_NAME);for(let b=0;b<f.length;b++)if(b<U.length)U[b].name=f[b];else{let x={selector:e.selector,name:f[b]};U.push(x)}}let K=[];if(k){const f=this.extractMatches(e.block.contents,AI.SCROLL_TIMELINE_AXIS);if(K=f.filter(b=>XQ.includes(b)),K.length!=f.length)throw new Error("Invalid axis")}for(let f=0;f<U.length;f++)K.length&&(U[f].axis=K[f%U.length]);this.sourceSelectorToScrollTimeline.push(...U)}saveSubjectSelectorToViewTimeline(e){const h=e.block.contents.includes("view-timeline:"),F=e.block.contents.includes("view-timeline-name:"),k=e.block.contents.includes("view-timeline-axis:"),U=e.block.contents.includes("view-timeline-inset:");if(!h&&!F)return;let K=[];if(h){const x=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE);for(let m of x){const V=this.split(m);let QA={selector:e.selector,name:"",inset:null};V.length==1?QA.name=V[0]:V.length==2&&(XQ.includes(V[0])?(QA.axis=V[0],QA.name=V[1]):(QA.axis=V[1],QA.name=V[0])),K.push(QA)}}if(F){const x=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE_NAME);for(let m=0;m<x.length;m++)if(m<K.length)K[m].name=x[m];else{let V={selector:e.selector,name:x[m],inset:null};K.push(V)}}let f=[],b=[];if(U&&(f=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE_INSET)),k){const x=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE_AXIS);if(b=x.filter(m=>XQ.includes(m)),b.length!=x.length)throw new Error("Invalid axis")}for(let x=0;x<K.length;x++)f.length&&(K[x].inset=f[x%K.length]),b.length&&(K[x].axis=b[x%K.length]);this.subjectSelectorToViewTimeline.push(...K)}hasDuration(e){return e.split(" ").filter(h=>{return F=h,AI.TIME.exec(F);var F}).length>=1}hasAutoDuration(e){return e.split(" ").filter(h=>h==="auto").length>=1}saveRelationInList(e,h,F){let k=[];e.block.contents.includes("animation-range:")&&(k=this.extractMatches(e.block.contents,AI.ANIMATION_TIME_RANGE));const U=Math.max(h.length,F.length,k.length);for(let K=0;K<U;K++)this.cssRulesWithTimelineName.push({selector:e.selector,"animation-timeline":h[K%h.length],...F.length?{"animation-name":F[K%F.length]}:{},...k.length?{"animation-range":k[K%k.length]}:{}})}extractScrollTimelineNames(e){const h=AI.ANIMATION_TIMELINE.exec(e)[1].trim(),F=[];return h.split(",").map(k=>k.trim()).forEach(k=>{if(function(U){return(U.startsWith("scroll")||U.startsWith("view"))&&U.includes("(")}(k)){const U=this.saveAnonymousTimelineName(k);F.push(U)}else F.push(k)}),F}saveAnonymousTimelineName(e){const h=":t"+this.nextAnonymousTimelineNameIndex++;return e.startsWith("scroll(")?this.anonymousScrollTimelineOptions.set(h,this.parseAnonymousScrollTimeline(e)):this.anonymousViewTimelineOptions.set(h,this.parseAnonymousViewTimeline(e)),h}parseAnonymousScrollTimeline(e){const h=AI.ANONYMOUS_SCROLL_TIMELINE.exec(e);if(!h)return null;const F=h[1],k={};return F.split(" ").forEach(U=>{XQ.includes(U)?k.axis=U:le.includes(U)&&(k.source=U)}),k}parseAnonymousViewTimeline(e){const h=AI.ANONYMOUS_VIEW_TIMELINE.exec(e);if(!h)return null;const F=h[1],k={};return F.split(" ").forEach(U=>{XQ.includes(U)?k.axis=U:k.inset=k.inset?`${k.inset} ${U}`:U}),k}extractAnimationName(e){return this.findMatchingEntryInContainer(e,this.keyframeNamesSelectors)}findMatchingEntryInContainer(e,h){const F=e.split(" ").filter(k=>h.has(k));return F?F[0]:null}parseIdentifier(e){AI.IDENTIFIER.lastIndex=e.index;const h=AI.IDENTIFIER.exec(e.sheetSrc);if(!h)throw this.parseError(e,"Expected an identifier");return e.index+=h[0].length,h[0]}parseKeyframesAndSaveNameMapping(e,h){if(e.selector.startsWith("@keyframes")){const F=this.replaceKeyframesAndGetMapping(e,h);e.selector.split(" ").forEach((k,U)=>{U>0&&this.keyframeNamesSelectors.set(k,F)})}}replaceKeyframesAndGetMapping(e,h){function F(x){return IE.some(m=>x.startsWith(m))}const k=e.block.contents,U=function(x){let m=0,V=-1,QA=-1;const CA=[];for(let YA=0;YA<x.length;YA++)x[YA]=="{"?m++:x[YA]=="}"&&m--,m==1&&x[YA]!="{"&&x[YA]!="}"&&V==-1&&(V=YA),m==2&&x[YA]=="{"&&(QA=YA,CA.push({start:V,end:QA}),V=QA=-1);return CA}(k);if(U.length==0)return new Map;const K=new Map;let f=!1;const b=[];b.push(k.substring(0,U[0].start));for(let x=0;x<U.length;x++){const m=k.substring(U[x].start,U[x].end);let V=[];m.split(",").forEach(QA=>{const CA=QA.split(" ").map(OA=>OA.trim()).filter(OA=>OA!="").join(" "),YA=K.size;K.set(YA,CA),V.push(`${YA}%`),F(CA)&&(f=!0)}),b.push(V.join(",")),x==U.length-1?b.push(k.substring(U[x].end)):b.push(k.substring(U[x].end,U[x+1].start))}return f?(e.block.contents=b.join(""),this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,h),K):new Map}parseQualifiedRule(e){const h=e.index,F=this.parseSelector(e).trim();if(F)return{selector:F,block:this.eatBlock(e),startIndex:h,endIndex:e.index}}removeEnclosingDoubleQuotes(e){let h=e[0]=='"'?1:0,F=e[e.length-1]=='"'?e.length-1:e.length;return e.substring(h,F)}assertString(e,h){if(e.sheetSrc.substr(e.index,h.length)!=h)throw this.parseError(e,`Did not find expected sequence ${h}`);e.index+=h.length}replacePart(e,h,F,k){if(k.sheetSrc=k.sheetSrc.slice(0,e)+F+k.sheetSrc.slice(h),k.index>=h){const U=k.index-h;k.index=e+F.length+U}}eatComment(e){this.assertString(e,"/*"),this.eatUntil("*/",e,!0),this.assertString(e,"*/")}eatBlock(e){const h=e.index;this.assertString(e,"{");let F=1;for(;F!=0;)this.lookAhead("/*",e)?this.eatComment(e):(e.sheetSrc[e.index]==="{"?F++:e.sheetSrc[e.index]==="}"&&F--,this.advance(e));const k=e.index;return{startIndex:h,endIndex:k,contents:e.sheetSrc.slice(h,k)}}advance(e){if(e.index++,e.index>e.sheetSrc.length)throw this.parseError(e,"Advanced beyond the end")}parseError(e,h){return Error(`(${e.name?e.name:"<anonymous file>"}): ${h}`)}eatUntil(e,h,F=!1){const k=h.index;for(;!this.lookAhead(e,h);)this.advance(h);return F&&(h.sheetSrc=h.sheetSrc.slice(0,k)+" ".repeat(h.index-k)+h.sheetSrc.slice(h.index)),h.sheetSrc.slice(k,h.index)}parseSelector(e){let h=e.index;if(this.eatUntil("{",e),h===e.index)throw Error("Empty selector");return e.sheetSrc.slice(h,e.index)}eatWhitespace(e){AI.WHITE_SPACE.lastIndex=e.index;const h=AI.WHITE_SPACE.exec(e.sheetSrc);h&&(e.index+=h[0].length)}lookAhead(e,h){return h.sheetSrc.substr(h.index,e.length)==e}peek(e){return e.sheetSrc[e.index]}extractMatches(e,h,F=","){return h.exec(e)[1].trim().split(F).map(k=>k.trim())}split(e){return e.split(" ").map(h=>h.trim()).filter(h=>h!="")}};function fe(e,h,F,k,U,K){const f=li(h),b=fi(h,F);return is(bi(e,f,b,k,U),K,bi("cover",f,b,k,U),F)}function pe(e,h,F){const k=$g.getAnimationTimelineOptions(h,F);if(!k)return null;const U=k["animation-timeline"];if(!U)return null;let K=$g.getScrollTimelineOptions(U,F)||$g.getViewTimelineOptions(U,F);return K?(K.subject&&function(f,b){const x=ui(b.subject),m=b.axis||b.axis;function V(CA,YA){let OA=null;for(const[xI,tg]of CA)if(xI==100*YA.offset){if(tg=="from")OA=0;else if(tg=="to")OA=100;else{const $I=tg.split(" ");OA=$I.length==1?parseFloat($I[0]):100*fe($I[0],x,b.subject,m,b.inset,CSS.percent(parseFloat($I[1])))}break}return OA}const QA=$g.keyframeNamesSelectors.get(f.animationName);if(QA&&QA.size){const CA=[];f.effect.getKeyframes().forEach(OA=>{const xI=V(QA,OA);xI!==null&&xI>=0&&xI<=100&&(OA.offset=xI/100,CA.push(OA))});const YA=CA.sort((OA,xI)=>OA.offset<xI.offset?-1:OA.affset>xI.offset?1:0);f.effect.setKeyframes(YA)}}(e,K),{timeline:K.source?new NI(K):new PQ(K),animOptions:k}):null}function xe(){if(CSS.supports("animation-timeline: --works"))return!0;(function(){function h(k){if(k.innerHTML.trim().length===0||"aphrodite"in k.dataset)return;let U=$g.transpileStyleSheet(k.innerHTML,!0);U=$g.transpileStyleSheet(U,!1),k.innerHTML=U}function F(k){k.type!="text/css"&&k.rel!="stylesheet"||!k.href||new URL(k.href,document.baseURI).origin==location.origin&&fetch(k.getAttribute("href")).then(async U=>{const K=await U.text();let f=$g.transpileStyleSheet(K,!0);if(f=$g.transpileStyleSheet(K,!1),f!=K){const b=new Blob([f],{type:"text/css"}),x=URL.createObjectURL(b);k.setAttribute("href",x)}})}new MutationObserver(k=>{for(const U of k)for(const K of U.addedNodes)K instanceof HTMLStyleElement&&h(K),K instanceof HTMLLinkElement&&F(K)}).observe(document.documentElement,{childList:!0,subtree:!0}),document.querySelectorAll("style").forEach(k=>h(k)),document.querySelectorAll("link").forEach(k=>F(k))})();const e=CSS.supports;CSS.supports=h=>(h=h.replaceAll(/(animation-timeline|scroll-timeline(-(name|axis))?|view-timeline(-(name|axis|inset))?|timeline-scope)\s*:/g,"--supported-property:"),e(h)),window.addEventListener("animationstart",h=>{h.target.getAnimations().filter(F=>F.animationName===h.animationName).forEach(F=>{const k=pe(F,F.animationName,h.target);if(k)if(!k.timeline||F instanceof EE)F.timeline=k.timeline;else{const U=new EE(F,k.timeline,k.animOptions);F.pause(),U.play()}})})}(function(){if(!xe()){if(!Reflect.defineProperty(window,"ScrollTimeline",{value:NI}))throw Error("Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window");if(!Reflect.defineProperty(window,"ViewTimeline",{value:PQ}))throw Error("Error installing ViewTimeline polyfill: could not attach ViewTimeline to window");if(!Reflect.defineProperty(Element.prototype,"animate",{value:Ye}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's animate to DOM Element");if(!Reflect.defineProperty(window,"Animation",{value:EE}))throw Error("Error installing Animation constructor.");if(!Reflect.defineProperty(Element.prototype,"getAnimations",{value:Ke}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to DOM Element");if(!Reflect.defineProperty(document,"getAnimations",{value:de}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to document")}})()})();const aF=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),eF=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{$h as BatchedParticleRenderer,zo as Builder,nC as ByteBuffer,qQ as ConstantColor,rA as ConstantValue,kg as Matrix4,UB as MeshBVH,O0 as MotionController,yD as PROJECT_DOCUMENT_KEY,Yi as ParticleSystem,X as RenderMode,Os as SIZE_PREFIX_LENGTH,RE as TrailParticle,OI as Vector4,CF as WorkerBase,eF as __viteBrowserExternal,at as applyDef,ht as applyOver,Ts as attachNeedleIdsToLoadedGltf,By as bundler,Ic as createNoise4D,et as createOverApplyState,U0 as deriveInstanceId,Cc as enableProjectDocumentInspection,sc as evaluateProjectDocument,u0 as fetchProfile,ic as getProjectDocumentInspection,Nc as index,BF as index$1,sF as index$2,st as isProjectDocument,Qc as reportProjectIssues,bB as resolveDocumentRemoteSrc,yt as resolveMaterialEntity,aF as scrollTimeline,$S as spark_module,SD as splitPath,G0 as v5};
|
|
13104
|
+
`),new q(-1,-3,1).normalize(),new hQ(1,1,1),new hQ(.5,.5,1),new hQ(1,1,1),new hQ(.25,.25,.5);var Za=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(Za||{});const Br=Object.keys(Za);Br.length,new B0(0,0,0,"YXZ");var no=(B=>(B.w="wrist",B.t0="thumb-metacarpal",B.t1="thumb-phalanx-proximal",B.t2="thumb-phalanx-distal",B.t3="thumb-tip",B.i0="index-finger-metacarpal",B.i1="index-finger-phalanx-proximal",B.i2="index-finger-phalanx-intermediate",B.i3="index-finger-phalanx-distal",B.i4="index-finger-tip",B.m0="middle-finger-metacarpal",B.m1="middle-finger-phalanx-proximal",B.m2="middle-finger-phalanx-intermediate",B.m3="middle-finger-phalanx-distal",B.m4="middle-finger-tip",B.r0="ring-finger-metacarpal",B.r1="ring-finger-phalanx-proximal",B.r2="ring-finger-phalanx-intermediate",B.r3="ring-finger-phalanx-distal",B.r4="ring-finger-tip",B.p0="pinky-finger-metacarpal",B.p1="pinky-finger-phalanx-proximal",B.p2="pinky-finger-phalanx-intermediate",B.p3="pinky-finger-phalanx-distal",B.p4="pinky-finger-tip",B))(no||{});const Va=Object.keys(no);Va.length;const Cr=Object.freeze(Object.defineProperty({__proto__:null,ExtSplats:vg,JOINT_IDS:Va,JointEnum:no,LN_SCALE_MAX:mI,LN_SCALE_MIN:uI,OldSparkViewpoint:Fo,OldSplatAccumulator:Bi,PackedSplats:dg,PagedSplats:aC,Readback:sC,RgbaArray:Ka,SparkRenderer:vS,SplatAccumulator:aB,SplatEdit:Ii,SplatEditSdf:fa,SplatEdits:xa,SplatFileType:bI,SplatGenerator:wB,SplatLoader:Go,SplatMesh:EQ,SplatModifier:qa,SplatPager:UQ,SplatTransformer:tC,floatToUint8:IC,fromHalf:rg,getSplatFileType:Ta,isAndroid:Qa,isIos:XE,isMobile:OE,isOculus:Ba,isVisionPro:Ca,setPackedSplat:go,toHalf:Sg,unpackSplat:TE},Symbol.toStringTag,{value:"Module"})),Mo=0,Wa=1,ja=2,No=2,Jo=1.25,za=1,SI=32,jA=SI/4,_a=65535,Ci=Math.pow(2,-24),Ei=Symbol("SKIP_GENERATION"),$a={strategy:Mo,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[Ei]:!1};function bA(B,A,I){return I.min.x=A[B],I.min.y=A[B+1],I.min.z=A[B+2],I.max.x=A[B+3],I.max.y=A[B+4],I.max.z=A[B+5],I}function Ae(B){let A=-1,I=-1/0;for(let g=0;g<3;g++){const Q=B[g+3]-B[g];Q>I&&(I=Q,A=g)}return A}function Ie(B,A){A.set(B)}function ge(B,A,I){let g,Q;for(let C=0;C<3;C++){const i=C+3;g=B[C],Q=A[C],I[C]=g<Q?g:Q,g=B[i],Q=A[i],I[i]=g>Q?g:Q}}function ii(B,A,I){for(let g=0;g<3;g++){const Q=A[B+2*g],C=A[B+2*g+1],i=Q-C,E=Q+C;i<I[g]&&(I[g]=i),E>I[g+3]&&(I[g+3]=E)}}function eC(B){const A=B[3]-B[0],I=B[4]-B[1],g=B[5]-B[2];return 2*(A*I+I*g+g*A)}function zA(B,A){return A[B+15]===_a}function rI(B,A){return A[B+6]}function lI(B,A){return A[B+14]}function CI(B){return B+jA}function EI(B,A){const I=A[B+6];return B+I*jA}function Uo(B,A){return A[B+7]}function Lo(B,A,I,g,Q){let C=1/0,i=1/0,E=1/0,D=-1/0,o=-1/0,s=-1/0,t=1/0,w=1/0,a=1/0,G=-1/0,S=-1/0,c=-1/0;const y=B.offset||0;for(let F=(A-y)*6,R=(A+I-y)*6;F<R;F+=6){const M=B[F+0],n=B[F+1],N=M-n,J=M+n;N<C&&(C=N),J>D&&(D=J),M<t&&(t=M),M>G&&(G=M);const L=B[F+2],H=B[F+3],Y=L-H,K=L+H;Y<i&&(i=Y),K>o&&(o=K),L<w&&(w=L),L>S&&(S=L);const l=B[F+4],p=B[F+5],u=l-p,b=l+p;u<E&&(E=u),b>s&&(s=b),l<a&&(a=l),l>c&&(c=l)}g[0]=C,g[1]=i,g[2]=E,g[3]=D,g[4]=o,g[5]=s,Q[0]=t,Q[1]=w,Q[2]=a,Q[3]=G,Q[4]=S,Q[5]=c}const Zg=32,Er=(B,A)=>B.candidate-A.candidate,iQ=new Array(Zg).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),Di=new Float32Array(6);function ir(B,A,I,g,Q,C){let i=-1,E=0;if(C===Mo)i=Ae(A),i!==-1&&(E=(A[i]+A[i+3])/2);else if(C===Wa)i=Ae(B),i!==-1&&(E=Dr(I,g,Q,i));else if(C===ja){const D=eC(B);let o=Jo*Q;const s=I.offset||0,t=(g-s)*6,w=(g+Q-s)*6;for(let a=0;a<3;a++){const G=A[a],S=(A[a+3]-G)/Zg;if(Q<Zg/4){const c=[...iQ];c.length=Q;let y=0;for(let R=t;R<w;R+=6,y++){const M=c[y];M.candidate=I[R+2*a],M.count=0;const{bounds:n,leftCacheBounds:N,rightCacheBounds:J}=M;for(let L=0;L<3;L++)J[L]=1/0,J[L+3]=-1/0,N[L]=1/0,N[L+3]=-1/0,n[L]=1/0,n[L+3]=-1/0;ii(R,I,n)}c.sort(Er);let F=Q;for(let R=0;R<F;R++){const M=c[R];for(;R+1<F&&c[R+1].candidate===M.candidate;)c.splice(R+1,1),F--}for(let R=t;R<w;R+=6){const M=I[R+2*a];for(let n=0;n<F;n++){const N=c[n];M>=N.candidate?ii(R,I,N.rightCacheBounds):(ii(R,I,N.leftCacheBounds),N.count++)}}for(let R=0;R<F;R++){const M=c[R],n=M.count,N=Q-M.count,J=M.leftCacheBounds,L=M.rightCacheBounds;let H=0;n!==0&&(H=eC(J)/D);let Y=0;N!==0&&(Y=eC(L)/D);const K=za+Jo*(H*n+Y*N);K<o&&(i=a,o=K,E=M.candidate)}}else{for(let F=0;F<Zg;F++){const R=iQ[F];R.count=0,R.candidate=G+S+F*S;const M=R.bounds;for(let n=0;n<3;n++)M[n]=1/0,M[n+3]=-1/0}for(let F=t;F<w;F+=6){let R=~~((I[F+2*a]-G)/S);R>=Zg&&(R=Zg-1);const M=iQ[R];M.count++,ii(F,I,M.bounds)}const c=iQ[Zg-1];Ie(c.bounds,c.rightCacheBounds);for(let F=Zg-2;F>=0;F--){const R=iQ[F],M=iQ[F+1];ge(R.bounds,M.rightCacheBounds,R.rightCacheBounds)}let y=0;for(let F=0;F<Zg-1;F++){const R=iQ[F],M=R.count,n=R.bounds,N=iQ[F+1].rightCacheBounds;M!==0&&(y===0?Ie(n,Di):ge(n,Di,Di)),y+=M;let J=0,L=0;y!==0&&(J=eC(Di)/D);const H=Q-y;H!==0&&(L=eC(N)/D);const Y=za+Jo*(J*y+L*H);Y<o&&(i=a,o=Y,E=R.candidate)}}}}else console.warn(`BVH: Invalid build strategy value ${C} used.`);return{axis:i,pos:E}}function Dr(B,A,I,g){let Q=0;const C=B.offset;for(let i=A,E=A+I;i<E;i++)Q+=B[(i-C)*6+g*2];return Q/I}class Ho{constructor(){this.boundingData=new Float32Array(6)}}function or(B,A,I,g,Q,C){let i=g,E=g+Q-1;const D=C.pos,o=C.axis*2,s=I.offset||0;for(;;){for(;i<=E&&I[(i-s)*6+o]<D;)i++;for(;i<=E&&I[(E-s)*6+o]>=D;)E--;if(i<E){for(let t=0;t<A;t++){let w=B[i*A+t];B[i*A+t]=B[E*A+t],B[E*A+t]=w}for(let t=0;t<6;t++){const w=i-s,a=E-s,G=I[w*6+t];I[w*6+t]=I[a*6+t],I[a*6+t]=G}i++,E--}else return i}}let Qe,oi,Yo,Be;const sr=Math.pow(2,32);function Ko(B){return"count"in B?1:1+Ko(B.left)+Ko(B.right)}function tr(B,A,I){return Qe=new Float32Array(I),oi=new Uint32Array(I),Yo=new Uint16Array(I),Be=new Uint8Array(I),lo(B,A)}function lo(B,A){const I=B/4,g=B/2,Q="count"in A,C=A.boundingData;for(let i=0;i<6;i++)Qe[I+i]=C[i];if(Q)return A.buffer?(Be.set(new Uint8Array(A.buffer),B),B+A.buffer.byteLength):(oi[I+6]=A.offset,Yo[g+14]=A.count,Yo[g+15]=_a,B+SI);{const{left:i,right:E,splitAxis:D}=A,o=B+SI;let s=lo(o,i);const t=B/SI,w=s/SI-t;if(w>sr)throw new Error("MeshBVH: Cannot store relative child node offset greater than 32 bits.");return oi[I+6]=w,oi[I+7]=D,lo(s,E)}}function wr(B,A,I,g,Q){const{maxDepth:C,verbose:i,maxLeafSize:E,strategy:D,onProgress:o}=Q,s=B.primitiveBuffer,t=B.primitiveBufferStride,w=new Float32Array(6);let a=!1;const G=new Ho;return Lo(A,I,g,G.boundingData,w),c(G,I,g,w),G;function S(y){o&&o(y/g)}function c(y,F,R,M=null,n=0){if(!a&&n>=C&&(a=!0,i&&console.warn(`BVH: Max depth of ${C} reached when generating BVH. Consider increasing maxDepth.`)),R<=E||n>=C)return S(F+R),y.offset=F,y.count=R,y;const N=ir(y.boundingData,M,A,F,R,D);if(N.axis===-1)return S(F+R),y.offset=F,y.count=R,y;const J=or(s,t,A,F,R,N);if(J===F||J===F+R)S(F+R),y.offset=F,y.count=R;else{y.splitAxis=N.axis;const L=new Ho,H=F,Y=J-F;y.left=L,Lo(A,H,Y,L.boundingData,w),c(L,H,Y,w,n+1);const K=new Ho,l=J,p=R-Y;y.right=K,Lo(A,l,p,K.boundingData,w),c(K,l,p,w,n+1)}return y}}function ar(B,A){const I=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,g=B.getRootRanges(A.range),Q=g[0],C=g[g.length-1],i={offset:Q.offset,count:C.offset+C.count-Q.offset},E=new Float32Array(6*i.count);E.offset=i.offset,B.computePrimitiveBounds(i.offset,i.count,E),B._roots=g.map(D=>{const o=wr(B,E,D.offset,D.count,A),s=Ko(o),t=new I(SI*s);return tr(0,o,t),t})}class fo{constructor(A){this._getNewPrimitive=A,this._primitives=[]}getPrimitive(){const A=this._primitives;return A.length===0?this._getNewPrimitive():A.pop()}releasePrimitive(A){this._primitives.push(A)}}class er{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const A=[];let I=null;this.setBuffer=g=>{I&&A.push(I),I=g,this.float32Array=new Float32Array(g),this.uint16Array=new Uint16Array(g),this.uint32Array=new Uint32Array(g)},this.clearBuffer=()=>{I=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,A.length!==0&&this.setBuffer(A.pop())}}}const dA=new er;let DQ,hB;const cB=[],si=new fo(()=>new ag);function hr(B,A,I,g,Q,C){DQ=si.getPrimitive(),hB=si.getPrimitive(),cB.push(DQ,hB),dA.setBuffer(B._roots[A]);const i=po(0,B.geometry,I,g,Q,C);dA.clearBuffer(),si.releasePrimitive(DQ),si.releasePrimitive(hB),cB.pop(),cB.pop();const E=cB.length;return E>0&&(hB=cB[E-1],DQ=cB[E-2]),i}function po(B,A,I,g,Q=null,C=0,i=0){const{float32Array:E,uint16Array:D,uint32Array:o}=dA;let s=B*2;if(zA(s,D)){const t=rI(B,o),w=lI(s,D);return bA(B,E,DQ),g(t,w,!1,i,C+B/jA,DQ)}else{let t=function(K){const{uint16Array:l,uint32Array:p}=dA;let u=K*2;for(;!zA(u,l);)K=CI(K),u=K*2;return rI(K,p)},w=function(K){const{uint16Array:l,uint32Array:p}=dA;let u=K*2;for(;!zA(u,l);)K=EI(K,p),u=K*2;return rI(K,p)+lI(u,l)};const a=CI(B),G=EI(B,o);let S=a,c=G,y,F,R,M;if(Q&&(R=DQ,M=hB,bA(S,E,R),bA(c,E,M),y=Q(R),F=Q(M),F<y)){S=G,c=a;const K=y;y=F,F=K,R=M}R||(R=DQ,bA(S,E,R));const n=zA(S*2,D),N=I(R,n,y,i+1,C+S/jA);let J;if(N===No){const K=t(S),l=w(S)-K;J=g(K,l,!0,i+1,C+S/jA,R)}else J=N&&po(S,A,I,g,Q,C,i+1);if(J)return!0;M=hB,bA(c,E,M);const L=zA(c*2,D),H=I(M,L,F,i+1,C+c/jA);let Y;if(H===No){const K=t(c),l=w(c)-K;Y=g(K,l,!0,i+1,C+c/jA,M)}else Y=H&&po(c,A,I,g,Q,C,i+1);return!!Y}}const hC=new dA.constructor,ti=new dA.constructor,oQ=new fo(()=>new ag),yB=new ag,GB=new ag,xo=new ag,qo=new ag;let uo=!1;function cr(B,A,I,g){if(uo)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");uo=!0;const Q=B._roots,C=A._roots;let i,E=0,D=0;const o=new fA().copy(I).invert();for(let s=0,t=Q.length;s<t;s++){hC.setBuffer(Q[s]),D=0;const w=oQ.getPrimitive();bA(0,hC.float32Array,w),w.applyMatrix4(o);for(let a=0,G=C.length;a<G&&(ti.setBuffer(C[a]),i=Fg(0,0,I,o,g,E,D,0,0,w),ti.clearBuffer(),D+=C[a].byteLength/SI,!i);a++);if(oQ.releasePrimitive(w),hC.clearBuffer(),E+=Q[s].byteLength/SI,i)break}return uo=!1,i}function Fg(B,A,I,g,Q,C=0,i=0,E=0,D=0,o=null,s=!1){let t,w;s?(t=ti,w=hC):(t=hC,w=ti);const a=t.float32Array,G=t.uint32Array,S=t.uint16Array,c=w.float32Array,y=w.uint32Array,F=w.uint16Array,R=B*2,M=A*2,n=zA(R,S),N=zA(M,F);let J=!1;if(N&&n)s?J=Q(rI(A,y),lI(A*2,F),rI(B,G),lI(B*2,S),D,i+A/jA,E,C+B/jA):J=Q(rI(B,G),lI(B*2,S),rI(A,y),lI(A*2,F),E,C+B/jA,D,i+A/jA);else if(N){const L=oQ.getPrimitive();bA(A,c,L),L.applyMatrix4(I);const H=CI(B),Y=EI(B,G);bA(H,a,yB),bA(Y,a,GB);const K=L.intersectsBox(yB),l=L.intersectsBox(GB);J=K&&Fg(A,H,g,I,Q,i,C,D,E+1,L,!s)||l&&Fg(A,Y,g,I,Q,i,C,D,E+1,L,!s),oQ.releasePrimitive(L)}else{const L=CI(A),H=EI(A,y);bA(L,c,xo),bA(H,c,qo);const Y=o.intersectsBox(xo),K=o.intersectsBox(qo);if(Y&&K)J=Fg(B,L,I,g,Q,C,i,E,D+1,o,s)||Fg(B,H,I,g,Q,C,i,E,D+1,o,s);else if(Y)if(n)J=Fg(B,L,I,g,Q,C,i,E,D+1,o,s);else{const l=oQ.getPrimitive();l.copy(xo).applyMatrix4(I);const p=CI(B),u=EI(B,G);bA(p,a,yB),bA(u,a,GB);const b=l.intersectsBox(yB),O=l.intersectsBox(GB);J=b&&Fg(L,p,g,I,Q,i,C,D,E+1,l,!s)||O&&Fg(L,u,g,I,Q,i,C,D,E+1,l,!s),oQ.releasePrimitive(l)}else if(K)if(n)J=Fg(B,H,I,g,Q,C,i,E,D+1,o,s);else{const l=oQ.getPrimitive();l.copy(qo).applyMatrix4(I);const p=CI(B),u=EI(B,G);bA(p,a,yB),bA(u,a,GB);const b=l.intersectsBox(yB),O=l.intersectsBox(GB);J=b&&Fg(H,p,g,I,Q,i,C,D,E+1,l,!s)||O&&Fg(H,u,g,I,Q,i,C,D,E+1,l,!s),oQ.releasePrimitive(l)}}return J}const Ce=new ag,SB=new Float32Array(6);class Ee{constructor(){this._roots=null,this.primitiveBuffer=null,this.primitiveBufferStride=null}init(A){A={...$a,...A},ar(this,A)}getRootRanges(){throw new Error("BVH: getRootRanges() not implemented")}writePrimitiveBounds(){throw new Error("BVH: writePrimitiveBounds() not implemented")}writePrimitiveRangeBounds(A,I,g,Q){let C=1/0,i=1/0,E=1/0,D=-1/0,o=-1/0,s=-1/0;for(let t=A,w=A+I;t<w;t++){this.writePrimitiveBounds(t,SB,0);const[a,G,S,c,y,F]=SB;a<C&&(C=a),c>D&&(D=c),G<i&&(i=G),y>o&&(o=y),S<E&&(E=S),F>s&&(s=F)}return g[Q+0]=C,g[Q+1]=i,g[Q+2]=E,g[Q+3]=D,g[Q+4]=o,g[Q+5]=s,g}computePrimitiveBounds(A,I,g){const Q=g.offset||0;for(let C=A,i=A+I;C<i;C++){this.writePrimitiveBounds(C,SB,0);const[E,D,o,s,t,w]=SB,a=(E+s)/2,G=(D+t)/2,S=(o+w)/2,c=(s-E)/2,y=(t-D)/2,F=(w-o)/2,R=(C-Q)*6;g[R+0]=a,g[R+1]=c+(Math.abs(a)+c)*Ci,g[R+2]=G,g[R+3]=y+(Math.abs(G)+y)*Ci,g[R+4]=S,g[R+5]=F+(Math.abs(S)+F)*Ci}return g}shiftPrimitiveOffsets(A){const I=this._indirectBuffer;if(I)for(let g=0,Q=I.length;g<Q;g++)I[g]+=A;else{const g=this._roots;for(let Q=0;Q<g.length;Q++){const C=g[Q],i=new Uint32Array(C),E=new Uint16Array(C),D=C.byteLength/SI;for(let o=0;o<D;o++){const s=jA*o,t=2*s;zA(t,E)&&(i[s+6]+=A)}}}}traverse(A,I=0){const g=this._roots[I],Q=new Uint32Array(g),C=new Uint16Array(g);i(0);function i(E,D=0){const o=E*2,s=zA(o,C);if(s){const t=Q[E+6],w=C[o+14];A(D,s,new Float32Array(g,E*4,6),t,w)}else{const t=CI(E),w=EI(E,Q),a=Uo(E,Q);A(D,s,new Float32Array(g,E*4,6),a)||(i(t,D+1),i(w,D+1))}}}refit(){const A=this._roots;for(let I=0,g=A.length;I<g;I++){const Q=A[I],C=new Uint32Array(Q),i=new Uint16Array(Q),E=new Float32Array(Q),D=Q.byteLength/SI;for(let o=D-1;o>=0;o--){const s=o*jA,t=s*2;if(zA(t,i)){const w=rI(s,C),a=lI(t,i);this.writePrimitiveRangeBounds(w,a,SB,0),E.set(SB,s)}else{const w=CI(s),a=EI(s,C);for(let G=0;G<3;G++){const S=E[w+G],c=E[w+G+3],y=E[a+G],F=E[a+G+3];E[s+G]=S<y?S:y,E[s+G+3]=c>F?c:F}}}}}getBoundingBox(A){return A.makeEmpty(),this._roots.forEach(I=>{bA(0,new Float32Array(I),Ce),A.union(Ce)}),A}shapecast(A){let{boundsTraverseOrder:I,intersectsBounds:g,intersectsRange:Q,intersectsPrimitive:C,scratchPrimitive:i,iterate:E}=A;if(Q&&C){const t=Q;Q=(w,a,G,S,c)=>t(w,a,G,S,c)?!0:E(w,a,this,C,G,S,i)}else Q||(C?Q=(t,w,a,G)=>E(t,w,this,C,a,G,i):Q=(t,w,a)=>a);let D=!1,o=0;const s=this._roots;for(let t=0,w=s.length;t<w;t++){const a=s[t];if(D=hr(this,t,g,Q,I,o),D)break;o+=a.byteLength/SI}return D}bvhcast(A,I,g){let{intersectsRanges:Q}=g;return cr(this,A,I,Q)}}function yr(){return typeof SharedArrayBuffer<"u"}function mo(B){return B.index?B.index.count:B.attributes.position.count}function wi(B){return mo(B)/3}function Gr(B,A=ArrayBuffer){return B>65535?new Uint32Array(new A(4*B)):new Uint16Array(new A(2*B))}function Sr(B,A){if(!B.index){const I=B.attributes.position.count,g=A.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,Q=Gr(I,g);B.setIndex(new iI(Q,1));for(let C=0;C<I;C++)Q[C]=C}}function rr(B,A,I){const g=mo(B)/I,Q=A||B.drawRange,C=Q.start/I,i=(Q.start+Q.count)/I,E=Math.max(0,C),D=Math.min(g,i)-E;return{offset:Math.floor(E),count:Math.floor(D)}}function Fr(B,A){return B.groups.map(I=>({offset:I.start/A,count:I.count/A}))}function ie(B,A,I){const g=rr(B,A,I),Q=Fr(B,I);if(!Q.length)return[g];const C=[],i=g.offset,E=g.offset+g.count,D=mo(B)/I,o=[];for(const w of Q){const{offset:a,count:G}=w,S=a,c=isFinite(G)?G:D-a,y=a+c;S<E&&y>i&&(o.push({pos:Math.max(i,S),isStart:!0}),o.push({pos:Math.min(E,y),isStart:!1}))}o.sort((w,a)=>w.pos!==a.pos?w.pos-a.pos:w.type==="end"?-1:1);let s=0,t=null;for(const w of o){const a=w.pos;s!==0&&a!==t&&C.push({offset:t,count:a-t}),s+=w.isStart?1:-1,t=a}return C}function De(B,A){const I=B[B.length-1],g=I.offset+I.count>2**16,Q=B.reduce((o,s)=>o+s.count,0),C=g?4:2,i=A?new SharedArrayBuffer(Q*C):new ArrayBuffer(Q*C),E=g?new Uint32Array(i):new Uint16Array(i);let D=0;for(let o=0;o<B.length;o++){const{offset:s,count:t}=B[o];for(let w=0;w<t;w++)E[D+w]=s+w;D+=t}return E}class oe extends Ee{get indirect(){return!!this._indirectBuffer}get primitiveStride(){return null}get primitiveBufferStride(){return this.indirect?1:this.primitiveStride}set primitiveBufferStride(A){}get primitiveBuffer(){return this.indirect?this._indirectBuffer:this.geometry.index.array}set primitiveBuffer(A){}constructor(A,I={}){if(A.isBufferGeometry){if(A.index&&A.index.isInterleavedBufferAttribute)throw new Error("BVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("BVH: Only BufferGeometries are supported.");if(I.useSharedArrayBuffer&&!yr())throw new Error("BVH: SharedArrayBuffer is not available.");super(),this.geometry=A,this.resolvePrimitiveIndex=I.indirect?g=>this._indirectBuffer[g]:g=>g,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,I={...$a,...I},I[Ei]||this.init(I)}init(A){const{geometry:I,primitiveStride:g}=this;if(A.indirect){const Q=ie(I,A.range,g),C=De(Q,A.useSharedArrayBuffer);this._indirectBuffer=C}else Sr(I,A);super.init(A),!I.boundingBox&&A.setBoundingBox&&(I.boundingBox=this.getBoundingBox(new ag))}getRootRanges(A){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:ie(this.geometry,A,this.primitiveStride)}raycastObject3D(){throw new Error("BVH: raycastObject3D() not implemented")}}class Vg{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(A,I){let g=1/0,Q=-1/0;for(let C=0,i=A.length;C<i;C++){const E=A[C][I];g=E<g?E:g,Q=E>Q?E:Q}this.min=g,this.max=Q}setFromPoints(A,I){let g=1/0,Q=-1/0;for(let C=0,i=I.length;C<i;C++){const E=I[C],D=A.dot(E);g=D<g?D:g,Q=D>Q?D:Q}this.min=g,this.max=Q}isSeparated(A){return this.min>A.max||A.min>this.max}}Vg.prototype.setFromBox=function(){const B=new q;return function(A,I){const g=I.min,Q=I.max;let C=1/0,i=-1/0;for(let E=0;E<=1;E++)for(let D=0;D<=1;D++)for(let o=0;o<=1;o++){B.x=g.x*E+Q.x*(1-E),B.y=g.y*D+Q.y*(1-D),B.z=g.z*o+Q.z*(1-o);const s=A.dot(B);C=Math.min(s,C),i=Math.max(s,i)}this.min=C,this.max=i}}();const Rr=function(){const B=new q,A=new q,I=new q;return function(g,Q,C){const i=g.start,E=B,D=Q.start,o=A;I.subVectors(i,D),B.subVectors(g.end,g.start),A.subVectors(Q.end,Q.start);const s=I.dot(o),t=o.dot(E),w=o.dot(o),a=I.dot(E),G=E.dot(E)*w-t*t;let S,c;G!==0?S=(s*t-a*w)/G:S=0,c=(s+S*t)/w,C.x=S,C.y=c}}(),bo=function(){const B=new JI,A=new q,I=new q;return function(g,Q,C,i){Rr(g,Q,B);let E=B.x,D=B.y;if(E>=0&&E<=1&&D>=0&&D<=1){g.at(E,C),Q.at(D,i);return}else if(E>=0&&E<=1){D<0?Q.at(0,i):Q.at(1,i),g.closestPointToPoint(i,!0,C);return}else if(D>=0&&D<=1){E<0?g.at(0,C):g.at(1,C),Q.closestPointToPoint(C,!0,i);return}else{let o;E<0?o=g.start:o=g.end;let s;D<0?s=Q.start:s=Q.end;const t=A,w=I;if(g.closestPointToPoint(s,!0,A),Q.closestPointToPoint(o,!0,I),t.distanceToSquared(s)<=w.distanceToSquared(o)){C.copy(t),i.copy(s);return}else{C.copy(o),i.copy(w);return}}}}(),kr=function(){const B=new q,A=new q,I=new ls,g=new mg;return function(Q,C){const{radius:i,center:E}=Q,{a:D,b:o,c:s}=C;if(g.start=D,g.end=o,g.closestPointToPoint(E,!0,B).distanceTo(E)<=i||(g.start=D,g.end=s,g.closestPointToPoint(E,!0,B).distanceTo(E)<=i)||(g.start=o,g.end=s,g.closestPointToPoint(E,!0,B).distanceTo(E)<=i))return!0;const t=C.getPlane(I);if(Math.abs(t.distanceToPoint(E))<=i){const w=t.projectPoint(E,A);if(C.containsPoint(w))return!0}return!1}}(),nr=["x","y","z"],Wg=1e-15,se=Wg*Wg;function gg(B){return Math.abs(B)<Wg}class Qg extends eQ{constructor(...A){super(...A),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new q),this.satBounds=new Array(4).fill().map(()=>new Vg),this.points=[this.a,this.b,this.c],this.plane=new ls,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new mg,this.needsUpdate=!0}intersectsSphere(A){return kr(A,this)}update(){const A=this.a,I=this.b,g=this.c,Q=this.points,C=this.satAxes,i=this.satBounds,E=C[0],D=i[0];this.getNormal(E),D.setFromPoints(E,Q);const o=C[1],s=i[1];o.subVectors(A,I),s.setFromPoints(o,Q);const t=C[2],w=i[2];t.subVectors(I,g),w.setFromPoints(t,Q);const a=C[3],G=i[3];a.subVectors(g,A),G.setFromPoints(a,Q);const S=o.length(),c=t.length(),y=a.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,S<Wg?c<Wg||y<Wg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(A),this.degenerateSegment.end.copy(g)):c<Wg?y<Wg?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(I),this.degenerateSegment.end.copy(A)):y<Wg&&(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(g),this.degenerateSegment.end.copy(I)),this.plane.setFromNormalAndCoplanarPoint(E,A),this.needsUpdate=!1}}Qg.prototype.closestPointToSegment=function(){const B=new q,A=new q,I=new mg;return function(g,Q=null,C=null){const{start:i,end:E}=g,D=this.points;let o,s=1/0;for(let t=0;t<3;t++){const w=(t+1)%3;I.start.copy(D[t]),I.end.copy(D[w]),bo(I,g,B,A),o=B.distanceToSquared(A),o<s&&(s=o,Q&&Q.copy(B),C&&C.copy(A))}return this.closestPointToPoint(i,B),o=i.distanceToSquared(B),o<s&&(s=o,Q&&Q.copy(B),C&&C.copy(i)),this.closestPointToPoint(E,B),o=E.distanceToSquared(B),o<s&&(s=o,Q&&Q.copy(B),C&&C.copy(E)),Math.sqrt(s)}}(),Qg.prototype.intersectsTriangle=function(){const B=new Qg,A=new Vg,I=new Vg,g=new q,Q=new q,C=new q,i=new q,E=new mg,D=new mg,o=new q,s=new JI,t=new JI;function w(R,M,n,N){const J=g;!R.isDegenerateIntoPoint&&!R.isDegenerateIntoSegment?J.copy(R.plane.normal):J.copy(M.plane.normal);const L=R.satBounds,H=R.satAxes;for(let l=1;l<4;l++){const p=L[l],u=H[l];if(A.setFromPoints(u,M.points),p.isSeparated(A)||(i.copy(J).cross(u),A.setFromPoints(i,R.points),I.setFromPoints(i,M.points),A.isSeparated(I)))return!1}const Y=M.satBounds,K=M.satAxes;for(let l=1;l<4;l++){const p=Y[l],u=K[l];if(A.setFromPoints(u,R.points),p.isSeparated(A)||(i.crossVectors(J,u),A.setFromPoints(i,R.points),I.setFromPoints(i,M.points),A.isSeparated(I)))return!1}return n&&(N||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),n.start.set(0,0,0),n.end.set(0,0,0)),!0}function a(R,M,n,N,J,L,H,Y,K,l,p){let u=H/(H-Y);l.x=N+(J-N)*u,p.start.subVectors(M,R).multiplyScalar(u).add(R),u=H/(H-K),l.y=N+(L-N)*u,p.end.subVectors(n,R).multiplyScalar(u).add(R)}function G(R,M,n,N,J,L,H,Y,K,l,p){if(J>0)a(R.c,R.a,R.b,N,M,n,K,H,Y,l,p);else if(L>0)a(R.b,R.a,R.c,n,M,N,Y,H,K,l,p);else if(Y*K>0||H!=0)a(R.a,R.b,R.c,M,n,N,H,Y,K,l,p);else if(Y!=0)a(R.b,R.a,R.c,n,M,N,Y,H,K,l,p);else if(K!=0)a(R.c,R.a,R.b,N,M,n,K,H,Y,l,p);else return!0;return!1}function S(R,M,n,N){const J=M.degenerateSegment,L=R.plane.distanceToPoint(J.start),H=R.plane.distanceToPoint(J.end);return gg(L)?gg(H)?w(R,M,n,N):(n&&(n.start.copy(J.start),n.end.copy(J.start)),R.containsPoint(J.start)):gg(H)?(n&&(n.start.copy(J.end),n.end.copy(J.end)),R.containsPoint(J.end)):R.plane.intersectLine(J,g)!=null?(n&&(n.start.copy(g),n.end.copy(g)),R.containsPoint(g)):!1}function c(R,M,n){const N=M.a;return gg(R.plane.distanceToPoint(N))&&R.containsPoint(N)?(n&&(n.start.copy(N),n.end.copy(N)),!0):!1}function y(R,M,n){const N=R.degenerateSegment,J=M.a;return N.closestPointToPoint(J,!0,g),J.distanceToSquared(g)<se?(n&&(n.start.copy(J),n.end.copy(J)),!0):!1}function F(R,M,n,N){if(R.isDegenerateIntoSegment)if(M.isDegenerateIntoSegment){const J=R.degenerateSegment,L=M.degenerateSegment,H=Q,Y=C;J.delta(H),L.delta(Y);const K=g.subVectors(L.start,J.start),l=H.x*Y.y-H.y*Y.x;if(gg(l))return!1;const p=(K.x*Y.y-K.y*Y.x)/l,u=-(H.x*K.y-H.y*K.x)/l;if(p<0||p>1||u<0||u>1)return!1;const b=J.start.z+H.z*p,O=L.start.z+Y.z*u;return gg(b-O)?(n&&(n.start.copy(J.start).addScaledVector(H,p),n.end.copy(J.start).addScaledVector(H,p)),!0):!1}else return M.isDegenerateIntoPoint?y(R,M,n):S(M,R,n,N);else{if(R.isDegenerateIntoPoint)return M.isDegenerateIntoPoint?M.a.distanceToSquared(R.a)<se?(n&&(n.start.copy(R.a),n.end.copy(R.a)),!0):!1:M.isDegenerateIntoSegment?y(M,R,n):c(M,R,n);if(M.isDegenerateIntoPoint)return c(R,M,n);if(M.isDegenerateIntoSegment)return S(R,M,n,N)}}return function(R,M=null,n=!1){this.needsUpdate&&this.update(),R.isExtendedTriangle?R.needsUpdate&&R.update():(B.copy(R),B.update(),R=B);const N=F(this,R,M,n);if(N!==void 0)return N;const J=this.plane,L=R.plane;let H=L.distanceToPoint(this.a),Y=L.distanceToPoint(this.b),K=L.distanceToPoint(this.c);gg(H)&&(H=0),gg(Y)&&(Y=0),gg(K)&&(K=0);const l=H*Y,p=H*K;if(l>0&&p>0)return!1;let u=J.distanceToPoint(R.a),b=J.distanceToPoint(R.b),O=J.distanceToPoint(R.c);gg(u)&&(u=0),gg(b)&&(b=0),gg(O)&&(O=0);const W=u*b,T=u*O;if(W>0&&T>0)return!1;Q.copy(J.normal),C.copy(L.normal);const j=Q.cross(C);let EA=0,wA=Math.abs(j.x);const iA=Math.abs(j.y);iA>wA&&(wA=iA,EA=1),Math.abs(j.z)>wA&&(EA=2);const IA=nr[EA],BA=this.a[IA],AA=this.b[IA],$=this.c[IA],z=R.a[IA],LA=R.b[IA],MA=R.c[IA];if(G(this,BA,AA,$,l,p,H,Y,K,s,E))return w(this,R,M,n);if(G(R,z,LA,MA,W,T,u,b,O,t,D))return w(this,R,M,n);if(s.y<s.x){const NA=s.y;s.y=s.x,s.x=NA,o.copy(E.start),E.start.copy(E.end),E.end.copy(o)}if(t.y<t.x){const NA=t.y;t.y=t.x,t.x=NA,o.copy(D.start),D.start.copy(D.end),D.end.copy(o)}return s.y<t.x||t.y<s.x?!1:(M&&(t.x>s.x?M.start.copy(D.start):M.start.copy(E.start),t.y<s.y?M.end.copy(D.end):M.end.copy(E.end)),!0)}}(),Qg.prototype.distanceToPoint=function(){const B=new q;return function(A){return this.closestPointToPoint(A,B),A.distanceTo(B)}}(),Qg.prototype.distanceToTriangle=function(){const B=new q,A=new q,I=["a","b","c"],g=new mg,Q=new mg;return function(C,i=null,E=null){const D=i||E?g:null;if(this.intersectsTriangle(C,D))return(i||E)&&(i&&D.getCenter(i),E&&D.getCenter(E)),0;let o=1/0;for(let s=0;s<3;s++){let t;const w=I[s],a=C[w];this.closestPointToPoint(a,B),t=a.distanceToSquared(B),t<o&&(o=t,i&&i.copy(B),E&&E.copy(a));const G=this[w];C.closestPointToPoint(G,B),t=G.distanceToSquared(B),t<o&&(o=t,i&&i.copy(G),E&&E.copy(B))}for(let s=0;s<3;s++){const t=I[s],w=I[(s+1)%3];g.set(this[t],this[w]);for(let a=0;a<3;a++){const G=I[a],S=I[(a+1)%3];Q.set(C[G],C[S]),bo(g,Q,B,A);const c=B.distanceToSquared(A);c<o&&(o=c,i&&i.copy(B),E&&E.copy(A))}}return Math.sqrt(o)}}();class FI{constructor(A,I,g){this.isOrientedBox=!0,this.min=new q,this.max=new q,this.matrix=new fA,this.invMatrix=new fA,this.points=new Array(8).fill().map(()=>new q),this.satAxes=new Array(3).fill().map(()=>new q),this.satBounds=new Array(3).fill().map(()=>new Vg),this.alignedSatBounds=new Array(3).fill().map(()=>new Vg),this.needsUpdate=!1,A&&this.min.copy(A),I&&this.max.copy(I),g&&this.matrix.copy(g)}set(A,I,g){this.min.copy(A),this.max.copy(I),this.matrix.copy(g),this.needsUpdate=!0}copy(A){this.min.copy(A.min),this.max.copy(A.max),this.matrix.copy(A.matrix),this.needsUpdate=!0}}FI.prototype.update=function(){return function(){const B=this.matrix,A=this.min,I=this.max,g=this.points;for(let D=0;D<=1;D++)for(let o=0;o<=1;o++)for(let s=0;s<=1;s++){const t=1*D|2*o|4*s,w=g[t];w.x=D?I.x:A.x,w.y=o?I.y:A.y,w.z=s?I.z:A.z,w.applyMatrix4(B)}const Q=this.satBounds,C=this.satAxes,i=g[0];for(let D=0;D<3;D++){const o=C[D],s=Q[D],t=1<<D,w=g[t];o.subVectors(i,w),s.setFromPoints(o,g)}const E=this.alignedSatBounds;E[0].setFromPointsField(g,"x"),E[1].setFromPointsField(g,"y"),E[2].setFromPointsField(g,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}}(),FI.prototype.intersectsBox=function(){const B=new Vg;return function(A){this.needsUpdate&&this.update();const I=A.min,g=A.max,Q=this.satBounds,C=this.satAxes,i=this.alignedSatBounds;if(B.min=I.x,B.max=g.x,i[0].isSeparated(B)||(B.min=I.y,B.max=g.y,i[1].isSeparated(B))||(B.min=I.z,B.max=g.z,i[2].isSeparated(B)))return!1;for(let E=0;E<3;E++){const D=C[E],o=Q[E];if(B.setFromBox(D,A),o.isSeparated(B))return!1}return!0}}(),FI.prototype.intersectsTriangle=function(){const B=new Qg,A=new Array(3),I=new Vg,g=new Vg,Q=new q;return function(C){this.needsUpdate&&this.update(),C.isExtendedTriangle?C.needsUpdate&&C.update():(B.copy(C),B.update(),C=B);const i=this.satBounds,E=this.satAxes;A[0]=C.a,A[1]=C.b,A[2]=C.c;for(let t=0;t<3;t++){const w=i[t],a=E[t];if(I.setFromPoints(a,A),w.isSeparated(I))return!1}const D=C.satBounds,o=C.satAxes,s=this.points;for(let t=0;t<3;t++){const w=D[t],a=o[t];if(I.setFromPoints(a,s),w.isSeparated(I))return!1}for(let t=0;t<3;t++){const w=E[t];for(let a=0;a<4;a++){const G=o[a];if(Q.crossVectors(w,G),I.setFromPoints(Q,A),g.setFromPoints(Q,s),I.isSeparated(g))return!1}}return!0}}(),FI.prototype.closestPointToPoint=function(){return function(B,A){return this.needsUpdate&&this.update(),A.copy(B).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),A}}(),FI.prototype.distanceToPoint=function(){const B=new q;return function(A){return this.closestPointToPoint(A,B),A.distanceTo(B)}}(),FI.prototype.distanceToBox=function(){const B=["x","y","z"],A=new Array(12).fill().map(()=>new mg),I=new Array(12).fill().map(()=>new mg),g=new q,Q=new q;return function(C,i=0,E=null,D=null){if(this.needsUpdate&&this.update(),this.intersectsBox(C))return(E||D)&&(C.getCenter(Q),this.closestPointToPoint(Q,g),C.closestPointToPoint(g,Q),E&&E.copy(g),D&&D.copy(Q)),0;const o=i*i,s=C.min,t=C.max,w=this.points;let a=1/0;for(let S=0;S<8;S++){const c=w[S];Q.copy(c).clamp(s,t);const y=c.distanceToSquared(Q);if(y<a&&(a=y,E&&E.copy(c),D&&D.copy(Q),y<o))return Math.sqrt(y)}let G=0;for(let S=0;S<3;S++)for(let c=0;c<=1;c++)for(let y=0;y<=1;y++){const F=(S+1)%3,R=(S+2)%3,M=c<<F|y<<R,n=1<<S|c<<F|y<<R,N=w[M],J=w[n];A[G].set(N,J);const L=B[S],H=B[F],Y=B[R],K=I[G],l=K.start,p=K.end;l[L]=s[L],l[H]=c?s[H]:t[H],l[Y]=y?s[Y]:t[H],p[L]=t[L],p[H]=c?s[H]:t[H],p[Y]=y?s[Y]:t[H],G++}for(let S=0;S<=1;S++)for(let c=0;c<=1;c++)for(let y=0;y<=1;y++){Q.x=S?t.x:s.x,Q.y=c?t.y:s.y,Q.z=y?t.z:s.z,this.closestPointToPoint(Q,g);const F=Q.distanceToSquared(g);if(F<a&&(a=F,E&&E.copy(g),D&&D.copy(Q),F<o))return Math.sqrt(F)}for(let S=0;S<12;S++){const c=A[S];for(let y=0;y<12;y++){const F=I[y];bo(c,F,g,Q);const R=g.distanceToSquared(Q);if(R<a&&(a=R,E&&E.copy(g),D&&D.copy(Q),R<o))return Math.sqrt(R)}}return Math.sqrt(a)}}();class Mr extends fo{constructor(){super(()=>new Qg)}}const Bg=new Mr,cC=new q,Po=new q;function Nr(B,A,I={},g=0,Q=1/0){const C=g*g,i=Q*Q;let E=1/0,D=null;if(B.shapecast({boundsTraverseOrder:s=>(cC.copy(A).clamp(s.min,s.max),cC.distanceToSquared(A)),intersectsBounds:(s,t,w)=>w<E&&w<i,intersectsTriangle:(s,t)=>{s.closestPointToPoint(A,cC);const w=A.distanceToSquared(cC);return w<E&&(Po.copy(cC),E=w,D=t),w<C}}),E===1/0)return null;const o=Math.sqrt(E);return I.point?I.point.copy(Po):I.point=Po.clone(),I.distance=o,I.faceIndex=D,I}const ai=parseInt(zi)>=169,Jr=parseInt(zi)<=161,HQ=new q,YQ=new q,dQ=new q,ei=new JI,hi=new JI,ci=new JI,te=new q,we=new q,ae=new q,yC=new q;function Ur(B,A,I,g,Q,C,i,E){let D;if(C===C0?D=B.intersectTriangle(g,I,A,!0,Q):D=B.intersectTriangle(A,I,g,C!==KB,Q),D===null)return null;const o=B.origin.distanceTo(Q);return o<i||o>E?null:{distance:o,point:Q.clone()}}function ee(B,A,I,g,Q,C,i,E,D,o,s){HQ.fromBufferAttribute(A,C),YQ.fromBufferAttribute(A,i),dQ.fromBufferAttribute(A,E);const t=Ur(B,HQ,YQ,dQ,yC,D,o,s);if(t){if(g){ei.fromBufferAttribute(g,C),hi.fromBufferAttribute(g,i),ci.fromBufferAttribute(g,E),t.uv=new JI;const a=eQ.getInterpolation(yC,HQ,YQ,dQ,ei,hi,ci,t.uv);ai||(t.uv=a)}if(Q){ei.fromBufferAttribute(Q,C),hi.fromBufferAttribute(Q,i),ci.fromBufferAttribute(Q,E),t.uv1=new JI;const a=eQ.getInterpolation(yC,HQ,YQ,dQ,ei,hi,ci,t.uv1);ai||(t.uv1=a),Jr&&(t.uv2=t.uv1)}if(I){te.fromBufferAttribute(I,C),we.fromBufferAttribute(I,i),ae.fromBufferAttribute(I,E),t.normal=new q;const a=eQ.getInterpolation(yC,HQ,YQ,dQ,te,we,ae,t.normal);t.normal.dot(B.direction)>0&&t.normal.multiplyScalar(-1),ai||(t.normal=a)}const w={a:C,b:i,c:E,normal:new q,materialIndex:0};if(eQ.getNormal(HQ,YQ,dQ,w.normal),t.face=w,t.faceIndex=C,ai){const a=new q;eQ.getBarycoord(yC,HQ,YQ,dQ,a),t.barycoord=a}}return t}function he(B){return B&&B.isMaterial?B.side:B}function yi(B,A,I,g,Q,C,i){const E=g*3;let D=E+0,o=E+1,s=E+2;const{index:t,groups:w}=B;B.index&&(D=t.getX(D),o=t.getX(o),s=t.getX(s));const{position:a,normal:G,uv:S,uv1:c}=B.attributes;if(Array.isArray(A)){const y=g*3;for(let F=0,R=w.length;F<R;F++){const{start:M,count:n,materialIndex:N}=w[F];if(y>=M&&y<M+n){const J=he(A[N]),L=ee(I,a,G,S,c,D,o,s,J,C,i);if(L)if(L.faceIndex=g,L.face.materialIndex=N,Q)Q.push(L);else return L}}}else{const y=he(A),F=ee(I,a,G,S,c,D,o,s,y,C,i);if(F)if(F.faceIndex=g,F.face.materialIndex=0,Q)Q.push(F);else return F}return null}function vA(B,A,I,g){const Q=B.a,C=B.b,i=B.c;let E=A,D=A+1,o=A+2;I&&(E=I.getX(E),D=I.getX(D),o=I.getX(o)),Q.x=g.getX(E),Q.y=g.getY(E),Q.z=g.getZ(E),C.x=g.getX(D),C.y=g.getY(D),C.z=g.getZ(D),i.x=g.getX(o),i.y=g.getY(o),i.z=g.getZ(o)}function Lr(B,A,I,g,Q,C,i,E){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++)yi(D,A,I,s,C,i,E)}function Hr(B,A,I,g,Q,C,i){const{geometry:E,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=yi(E,A,I,t,null,C,i),a&&a.distance<o&&(s=a,o=a.distance)}return s}function Yr(B,A,I,g,Q,C,i){const{geometry:E}=I,{index:D}=E,o=E.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=s,vA(i,w*3,D,o),i.needsUpdate=!0,g(i,w,Q,C))return!0}return!1}function dr(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,i,E,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],i=new Uint32Array(C),E=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,G=!1){const S=w*2;if(zA(S,E)){const c=rI(w,i),y=lI(S,E);let F=1/0,R=1/0,M=1/0,n=-1/0,N=-1/0,J=-1/0;for(let L=3*c,H=3*(c+y);L<H;L++){let Y=g[L];const K=Q.getX(Y),l=Q.getY(Y),p=Q.getZ(Y);K<F&&(F=K),K>n&&(n=K),l<R&&(R=l),l>N&&(N=l),p<M&&(M=p),p>J&&(J=p)}return D[w+0]!==F||D[w+1]!==R||D[w+2]!==M||D[w+3]!==n||D[w+4]!==N||D[w+5]!==J?(D[w+0]=F,D[w+1]=R,D[w+2]=M,D[w+3]=n,D[w+4]=N,D[w+5]=J,!0):!1}else{const c=CI(w),y=EI(w,i);let F=G,R=!1,M=!1;if(A){if(!F){const Y=c/jA+a/SI,K=y/jA+a/SI;R=A.has(Y),M=A.has(K),F=!R&&!M}}else R=!0,M=!0;const n=F||R,N=F||M;let J=!1;n&&(J=t(c,a,F));let L=!1;N&&(L=t(y,a,F));const H=J||L;if(H)for(let Y=0;Y<3;Y++){const K=c+Y,l=y+Y,p=D[K],u=D[K+3],b=D[l],O=D[l+3];D[w+Y]=p<b?p:b,D[w+Y+3]=u>O?u:O}return H}}}function sQ(B,A,I,g,Q){let C,i,E,D,o,s;const t=1/I.direction.x,w=1/I.direction.y,a=1/I.direction.z,G=I.origin.x,S=I.origin.y,c=I.origin.z;let y=A[B],F=A[B+3],R=A[B+1],M=A[B+3+1],n=A[B+2],N=A[B+3+2];return t>=0?(C=(y-G)*t,i=(F-G)*t):(C=(F-G)*t,i=(y-G)*t),w>=0?(E=(R-S)*w,D=(M-S)*w):(E=(M-S)*w,D=(R-S)*w),C>D||E>i||((E>C||isNaN(C))&&(C=E),(D<i||isNaN(i))&&(i=D),a>=0?(o=(n-c)*a,s=(N-c)*a):(o=(N-c)*a,s=(n-c)*a),C>s||o>i)?!1:((o>C||C!==C)&&(C=o),(s<i||i!==i)&&(i=s),C<=Q&&i>=g)}function Kr(B,A,I,g,Q,C,i,E){const{geometry:D,_indirectBuffer:o}=B;for(let s=g,t=g+Q;s<t;s++){let w=o?o[s]:s;yi(D,A,I,w,C,i,E)}}function lr(B,A,I,g,Q,C,i){const{geometry:E,_indirectBuffer:D}=B;let o=1/0,s=null;for(let t=g,w=g+Q;t<w;t++){let a;a=yi(E,A,I,D?D[t]:t,null,C,i),a&&a.distance<o&&(s=a,o=a.distance)}return s}function fr(B,A,I,g,Q,C,i){const{geometry:E}=I,{index:D}=E,o=E.attributes.position;for(let s=B,t=A+B;s<t;s++){let w;if(w=I.resolveTriangleIndex(s),vA(i,w*3,D,o),i.needsUpdate=!0,g(i,w,Q,C))return!0}return!1}function pr(B,A,I,g,Q,C,i){dA.setBuffer(B._roots[A]),To(0,B,I,g,Q,C,i),dA.clearBuffer()}function To(B,A,I,g,Q,C,i){const{float32Array:E,uint16Array:D,uint32Array:o}=dA,s=B*2;if(zA(s,D)){const t=rI(B,o),w=lI(s,D);Lr(A,I,g,t,w,Q,C,i)}else{const t=CI(B);sQ(t,E,g,C,i)&&To(t,A,I,g,Q,C,i);const w=EI(B,o);sQ(w,E,g,C,i)&&To(w,A,I,g,Q,C,i)}}const xr=["x","y","z"];function qr(B,A,I,g,Q,C){dA.setBuffer(B._roots[A]);const i=Oo(0,B,I,g,Q,C);return dA.clearBuffer(),i}function Oo(B,A,I,g,Q,C){const{float32Array:i,uint16Array:E,uint32Array:D}=dA;let o=B*2;if(zA(o,E)){const s=rI(B,D),t=lI(o,E);return Hr(A,I,g,s,t,Q,C)}else{const s=Uo(B,D),t=xr[s],w=g.direction[t]>=0;let a,G;w?(a=CI(B),G=EI(B,D)):(a=EI(B,D),G=CI(B));const S=sQ(a,i,g,Q,C)?Oo(a,A,I,g,Q,C):null;if(S){const y=S.point[t];if(w?y<=i[G+s]:y>=i[G+s+3])return S}const c=sQ(G,i,g,Q,C)?Oo(G,A,I,g,Q,C):null;return S&&c?S.distance<=c.distance?S:c:S||c||null}}const Gi=new ag,rB=new Qg,FB=new Qg,GC=new fA,ce=new FI,Si=new FI;function ur(B,A,I,g){dA.setBuffer(B._roots[A]);const Q=Xo(0,B,I,g);return dA.clearBuffer(),Q}function Xo(B,A,I,g,Q=null){const{float32Array:C,uint16Array:i,uint32Array:E}=dA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),ce.set(I.boundingBox.min,I.boundingBox.max,g),Q=ce),zA(D,i)){const o=A.geometry,s=o.index,t=o.attributes.position,w=I.index,a=I.attributes.position,G=rI(B,E),S=lI(D,i);if(GC.copy(g).invert(),I.boundsTree)return bA(B,C,Si),Si.matrix.copy(GC),Si.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:c=>Si.intersectsBox(c),intersectsTriangle:c=>{c.a.applyMatrix4(g),c.b.applyMatrix4(g),c.c.applyMatrix4(g),c.needsUpdate=!0;for(let y=G*3,F=(S+G)*3;y<F;y+=3)if(vA(FB,y,s,t),FB.needsUpdate=!0,c.intersectsTriangle(FB))return!0;return!1}});{const c=wi(I);for(let y=G*3,F=(S+G)*3;y<F;y+=3){vA(rB,y,s,t),rB.a.applyMatrix4(GC),rB.b.applyMatrix4(GC),rB.c.applyMatrix4(GC),rB.needsUpdate=!0;for(let R=0,M=c*3;R<M;R+=3)if(vA(FB,R,w,a),FB.needsUpdate=!0,rB.intersectsTriangle(FB))return!0}}}else{const o=CI(B),s=EI(B,E);return bA(o,C,Gi),!!(Q.intersectsBox(Gi)&&Xo(o,A,I,g,Q)||(bA(s,C,Gi),Q.intersectsBox(Gi)&&Xo(s,A,I,g,Q)))}}const ri=new fA,vo=new FI,SC=new FI,mr=new q,br=new q,Pr=new q,Tr=new q;function Or(B,A,I,g={},Q={},C=0,i=1/0){A.boundingBox||A.computeBoundingBox(),vo.set(A.boundingBox.min,A.boundingBox.max,I),vo.needsUpdate=!0;const E=B.geometry,D=E.attributes.position,o=E.index,s=A.attributes.position,t=A.index,w=Bg.getPrimitive(),a=Bg.getPrimitive();let G=mr,S=br,c=null,y=null;Q&&(c=Pr,y=Tr);let F=1/0,R=null,M=null;return ri.copy(I).invert(),SC.matrix.copy(ri),B.shapecast({boundsTraverseOrder:n=>vo.distanceToBox(n),intersectsBounds:(n,N,J)=>J<F&&J<i?(N&&(SC.min.copy(n.min),SC.max.copy(n.max),SC.needsUpdate=!0),!0):!1,intersectsRange:(n,N)=>{if(A.boundsTree)return A.boundsTree.shapecast({boundsTraverseOrder:J=>SC.distanceToBox(J),intersectsBounds:(J,L,H)=>H<F&&H<i,intersectsRange:(J,L)=>{for(let H=J,Y=J+L;H<Y;H++){vA(a,3*H,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let K=n,l=n+N;K<l;K++){vA(w,3*K,o,D),w.needsUpdate=!0;const p=w.distanceToTriangle(a,G,c);if(p<F&&(S.copy(G),y&&y.copy(c),F=p,R=K,M=H),p<C)return!0}}}});{const J=wi(A);for(let L=0,H=J;L<H;L++){vA(a,3*L,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let Y=n,K=n+N;Y<K;Y++){vA(w,3*Y,o,D),w.needsUpdate=!0;const l=w.distanceToTriangle(a,G,c);if(l<F&&(S.copy(G),y&&y.copy(c),F=l,R=Y,M=L),l<C)return!0}}}}}),Bg.releasePrimitive(w),Bg.releasePrimitive(a),F===1/0?null:(g.point?g.point.copy(S):g.point=S.clone(),g.distance=F,g.faceIndex=R,Q&&(Q.point?Q.point.copy(y):Q.point=y.clone(),Q.point.applyMatrix4(ri),S.applyMatrix4(ri),Q.distance=S.sub(Q.point).length(),Q.faceIndex=M),g)}function Xr(B,A=null){A&&Array.isArray(A)&&(A=new Set(A));const I=B.geometry,g=I.index?I.index.array:null,Q=I.attributes.position;let C,i,E,D,o=0;const s=B._roots;for(let w=0,a=s.length;w<a;w++)C=s[w],i=new Uint32Array(C),E=new Uint16Array(C),D=new Float32Array(C),t(0,o),o+=C.byteLength;function t(w,a,G=!1){const S=w*2;if(zA(S,E)){const c=rI(w,i),y=lI(S,E);let F=1/0,R=1/0,M=1/0,n=-1/0,N=-1/0,J=-1/0;for(let L=c,H=c+y;L<H;L++){const Y=3*B.resolveTriangleIndex(L);for(let K=0;K<3;K++){let l=Y+K;l=g?g[l]:l;const p=Q.getX(l),u=Q.getY(l),b=Q.getZ(l);p<F&&(F=p),p>n&&(n=p),u<R&&(R=u),u>N&&(N=u),b<M&&(M=b),b>J&&(J=b)}}return D[w+0]!==F||D[w+1]!==R||D[w+2]!==M||D[w+3]!==n||D[w+4]!==N||D[w+5]!==J?(D[w+0]=F,D[w+1]=R,D[w+2]=M,D[w+3]=n,D[w+4]=N,D[w+5]=J,!0):!1}else{const c=CI(w),y=EI(w,i);let F=G,R=!1,M=!1;if(A){if(!F){const Y=c/jA+a/SI,K=y/jA+a/SI;R=A.has(Y),M=A.has(K),F=!R&&!M}}else R=!0,M=!0;const n=F||R,N=F||M;let J=!1;n&&(J=t(c,a,F));let L=!1;N&&(L=t(y,a,F));const H=J||L;if(H)for(let Y=0;Y<3;Y++){const K=c+Y,l=y+Y,p=D[K],u=D[K+3],b=D[l],O=D[l+3];D[w+Y]=p<b?p:b,D[w+Y+3]=u>O?u:O}return H}}}function vr(B,A,I,g,Q,C,i){dA.setBuffer(B._roots[A]),Zo(0,B,I,g,Q,C,i),dA.clearBuffer()}function Zo(B,A,I,g,Q,C,i){const{float32Array:E,uint16Array:D,uint32Array:o}=dA,s=B*2;if(zA(s,D)){const t=rI(B,o),w=lI(s,D);Kr(A,I,g,t,w,Q,C,i)}else{const t=CI(B);sQ(t,E,g,C,i)&&Zo(t,A,I,g,Q,C,i);const w=EI(B,o);sQ(w,E,g,C,i)&&Zo(w,A,I,g,Q,C,i)}}const Zr=["x","y","z"];function Vr(B,A,I,g,Q,C){dA.setBuffer(B._roots[A]);const i=Vo(0,B,I,g,Q,C);return dA.clearBuffer(),i}function Vo(B,A,I,g,Q,C){const{float32Array:i,uint16Array:E,uint32Array:D}=dA;let o=B*2;if(zA(o,E)){const s=rI(B,D),t=lI(o,E);return lr(A,I,g,s,t,Q,C)}else{const s=Uo(B,D),t=Zr[s],w=g.direction[t]>=0;let a,G;w?(a=CI(B),G=EI(B,D)):(a=EI(B,D),G=CI(B));const S=sQ(a,i,g,Q,C)?Vo(a,A,I,g,Q,C):null;if(S){const y=S.point[t];if(w?y<=i[G+s]:y>=i[G+s+3])return S}const c=sQ(G,i,g,Q,C)?Vo(G,A,I,g,Q,C):null;return S&&c?S.distance<=c.distance?S:c:S||c||null}}const Fi=new ag,RB=new Qg,kB=new Qg,rC=new fA,ye=new FI,Ri=new FI;function Wr(B,A,I,g){dA.setBuffer(B._roots[A]);const Q=Wo(0,B,I,g);return dA.clearBuffer(),Q}function Wo(B,A,I,g,Q=null){const{float32Array:C,uint16Array:i,uint32Array:E}=dA;let D=B*2;if(Q===null&&(I.boundingBox||I.computeBoundingBox(),ye.set(I.boundingBox.min,I.boundingBox.max,g),Q=ye),zA(D,i)){const o=A.geometry,s=o.index,t=o.attributes.position,w=I.index,a=I.attributes.position,G=rI(B,E),S=lI(D,i);if(rC.copy(g).invert(),I.boundsTree)return bA(B,C,Ri),Ri.matrix.copy(rC),Ri.needsUpdate=!0,I.boundsTree.shapecast({intersectsBounds:c=>Ri.intersectsBox(c),intersectsTriangle:c=>{c.a.applyMatrix4(g),c.b.applyMatrix4(g),c.c.applyMatrix4(g),c.needsUpdate=!0;for(let y=G,F=S+G;y<F;y++)if(vA(kB,3*A.resolveTriangleIndex(y),s,t),kB.needsUpdate=!0,c.intersectsTriangle(kB))return!0;return!1}});{const c=wi(I);for(let y=G,F=S+G;y<F;y++){const R=A.resolveTriangleIndex(y);vA(RB,3*R,s,t),RB.a.applyMatrix4(rC),RB.b.applyMatrix4(rC),RB.c.applyMatrix4(rC),RB.needsUpdate=!0;for(let M=0,n=c*3;M<n;M+=3)if(vA(kB,M,w,a),kB.needsUpdate=!0,RB.intersectsTriangle(kB))return!0}}}else{const o=CI(B),s=EI(B,E);return bA(o,C,Fi),!!(Q.intersectsBox(Fi)&&Wo(o,A,I,g,Q)||(bA(s,C,Fi),Q.intersectsBox(Fi)&&Wo(s,A,I,g,Q)))}}const ki=new fA,jo=new FI,FC=new FI,jr=new q,zr=new q,_r=new q,$r=new q;function AF(B,A,I,g={},Q={},C=0,i=1/0){A.boundingBox||A.computeBoundingBox(),jo.set(A.boundingBox.min,A.boundingBox.max,I),jo.needsUpdate=!0;const E=B.geometry,D=E.attributes.position,o=E.index,s=A.attributes.position,t=A.index,w=Bg.getPrimitive(),a=Bg.getPrimitive();let G=jr,S=zr,c=null,y=null;Q&&(c=_r,y=$r);let F=1/0,R=null,M=null;return ki.copy(I).invert(),FC.matrix.copy(ki),B.shapecast({boundsTraverseOrder:n=>jo.distanceToBox(n),intersectsBounds:(n,N,J)=>J<F&&J<i?(N&&(FC.min.copy(n.min),FC.max.copy(n.max),FC.needsUpdate=!0),!0):!1,intersectsRange:(n,N)=>{if(A.boundsTree){const J=A.boundsTree;return J.shapecast({boundsTraverseOrder:L=>FC.distanceToBox(L),intersectsBounds:(L,H,Y)=>Y<F&&Y<i,intersectsRange:(L,H)=>{for(let Y=L,K=L+H;Y<K;Y++){const l=J.resolveTriangleIndex(Y);vA(a,3*l,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let p=n,u=n+N;p<u;p++){const b=B.resolveTriangleIndex(p);vA(w,3*b,o,D),w.needsUpdate=!0;const O=w.distanceToTriangle(a,G,c);if(O<F&&(S.copy(G),y&&y.copy(c),F=O,R=p,M=Y),O<C)return!0}}}})}else{const J=wi(A);for(let L=0,H=J;L<H;L++){vA(a,3*L,t,s),a.a.applyMatrix4(I),a.b.applyMatrix4(I),a.c.applyMatrix4(I),a.needsUpdate=!0;for(let Y=n,K=n+N;Y<K;Y++){const l=B.resolveTriangleIndex(Y);vA(w,3*l,o,D),w.needsUpdate=!0;const p=w.distanceToTriangle(a,G,c);if(p<F&&(S.copy(G),y&&y.copy(c),F=p,R=Y,M=L),p<C)return!0}}}}}),Bg.releasePrimitive(w),Bg.releasePrimitive(a),F===1/0?null:(g.point?g.point.copy(S):g.point=S.clone(),g.distance=F,g.faceIndex=R,Q&&(Q.point?Q.point.copy(y):Q.point=y.clone(),Q.point.applyMatrix4(ki),S.applyMatrix4(ki),Q.distance=S.sub(Q.point).length(),Q.faceIndex=M),g)}function Ge(B,A,I){return B===null?null:(B.point.applyMatrix4(A.matrixWorld),B.distance=B.point.distanceTo(I.ray.origin),B.object=A,B)}const ni=new FI,Mi=new E0,Se=new q,re=new fA,Fe=new q,zo=["getX","getY","getZ"];class UB extends oe{static serialize(A,I={}){I={cloneBuffers:!0,...I};const g=A.geometry,Q=A._roots,C=A._indirectBuffer,i=g.getIndex(),E={version:1,roots:null,index:null,indirectBuffer:null};return I.cloneBuffers?(E.roots=Q.map(D=>D.slice()),E.index=i?i.array.slice():null,E.indirectBuffer=C?C.slice():null):(E.roots=Q,E.index=i?i.array:null,E.indirectBuffer=C),E}static deserialize(A,I,g={}){g={setIndex:!0,indirect:!!A.indirectBuffer,...g};const{index:Q,roots:C,indirectBuffer:i}=A;A.version||(console.warn("MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data."),D(C));const E=new UB(I,{...g,[Ei]:!0});if(E._roots=C,E._indirectBuffer=i||null,g.setIndex){const o=I.getIndex();if(o===null){const s=new iI(A.index,1,!1);I.setIndex(s)}else o.array!==Q&&(o.array.set(Q),o.needsUpdate=!0)}return E;function D(o){for(let s=0;s<o.length;s++){const t=o[s],w=new Uint32Array(t),a=new Uint16Array(t);for(let G=0,S=t.byteLength/SI;G<S;G++){const c=jA*G,y=2*c;zA(y,a)||(w[c+6]=w[c+6]/jA-G)}}}}get primitiveStride(){return 3}get resolveTriangleIndex(){return this.resolvePrimitiveIndex}constructor(A,I={}){I.maxLeafTris&&(console.warn('MeshBVH: "maxLeafTris" option has been deprecated. Use maxLeafSize, instead.'),I={...I,maxLeafSize:I.maxLeafTris}),super(A,I)}shiftTriangleOffsets(A){return super.shiftPrimitiveOffsets(A)}writePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,i=Q.attributes.position,E=Q.index?Q.index.array:null,D=(C?C[A]:A)*3;let o=D+0,s=D+1,t=D+2;E&&(o=E[o],s=E[s],t=E[t]);for(let w=0;w<3;w++){const a=i[zo[w]](o),G=i[zo[w]](s),S=i[zo[w]](t);let c=a;G<c&&(c=G),S<c&&(c=S);let y=a;G>y&&(y=G),S>y&&(y=S),I[g+w]=c,I[g+w+3]=y}return I}computePrimitiveBounds(A,I,g){const Q=this.geometry,C=this._indirectBuffer,i=Q.attributes.position,E=Q.index?Q.index.array:null,D=i.normalized;if(A<0||I+A-g.offset>g.length/6)throw new Error("MeshBVH: compute triangle bounds range is invalid.");const o=i.array,s=i.offset||0;let t=3;i.isInterleavedBufferAttribute&&(t=i.data.stride);const w=["getX","getY","getZ"],a=g.offset;for(let G=A,S=A+I;G<S;G++){const c=(C?C[G]:G)*3,y=(G-a)*6;let F=c+0,R=c+1,M=c+2;E&&(F=E[F],R=E[R],M=E[M]),D||(F=F*t+s,R=R*t+s,M=M*t+s);for(let n=0;n<3;n++){let N,J,L;D?(N=i[w[n]](F),J=i[w[n]](R),L=i[w[n]](M)):(N=o[F+n],J=o[R+n],L=o[M+n]);let H=N;J<H&&(H=J),L<H&&(H=L);let Y=N;J>Y&&(Y=J),L>Y&&(Y=L);const K=(Y-H)/2,l=n*2;g[y+l+0]=H+K,g[y+l+1]=K+(Math.abs(H)+K)*Ci}}return g}raycastObject3D(A,I,g=[]){const{material:Q}=A;if(Q===void 0)return;re.copy(A.matrixWorld).invert(),Mi.copy(I.ray).applyMatrix4(re),Fe.setFromMatrixScale(A.matrixWorld),Se.copy(Mi.direction).multiply(Fe);const C=Se.length(),i=I.near/C,E=I.far/C;if(I.firstHitOnly===!0){let D=this.raycastFirst(Mi,Q,i,E);D=Ge(D,A,I),D&&g.push(D)}else{const D=this.raycast(Mi,Q,i,E);for(let o=0,s=D.length;o<s;o++){const t=Ge(D[o],A,I);t&&g.push(t)}}return g}refit(A=null){return(this.indirect?Xr:dr)(this,A)}raycast(A,I=fs,g=0,Q=1/0){const C=this._roots,i=[],E=this.indirect?vr:pr;for(let D=0,o=C.length;D<o;D++)E(this,D,I,A,i,g,Q);return i}raycastFirst(A,I=fs,g=0,Q=1/0){const C=this._roots;let i=null;const E=this.indirect?Vr:qr;for(let D=0,o=C.length;D<o;D++){const s=E(this,D,I,A,g,Q);s!=null&&(i==null||s.distance<i.distance)&&(i=s)}return i}intersectsGeometry(A,I){let g=!1;const Q=this._roots,C=this.indirect?Wr:ur;for(let i=0,E=Q.length;i<E&&(g=C(this,i,A,I),!g);i++);return g}shapecast(A){const I=Bg.getPrimitive(),g=super.shapecast({...A,intersectsPrimitive:A.intersectsTriangle,scratchPrimitive:I,iterate:this.indirect?fr:Yr});return Bg.releasePrimitive(I),g}bvhcast(A,I,g){let{intersectsRanges:Q,intersectsTriangles:C}=g;const i=Bg.getPrimitive(),E=this.geometry.index,D=this.geometry.attributes.position,o=this.indirect?G=>{const S=this.resolveTriangleIndex(G);vA(i,S*3,E,D)}:G=>{vA(i,G*3,E,D)},s=Bg.getPrimitive(),t=A.geometry.index,w=A.geometry.attributes.position,a=A.indirect?G=>{const S=A.resolveTriangleIndex(G);vA(s,S*3,t,w)}:G=>{vA(s,G*3,t,w)};if(C){if(!(A instanceof UB))throw new Error('MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.');const G=(S,c,y,F,R,M,n,N)=>{for(let J=y,L=y+F;J<L;J++){a(J),s.a.applyMatrix4(I),s.b.applyMatrix4(I),s.c.applyMatrix4(I),s.needsUpdate=!0;for(let H=S,Y=S+c;H<Y;H++)if(o(H),i.needsUpdate=!0,C(i,s,H,J,R,M,n,N))return!0}return!1};if(Q){const S=Q;Q=function(c,y,F,R,M,n,N,J){return S(c,y,F,R,M,n,N,J)?!0:G(c,y,F,R,M,n,N,J)}}else Q=G}return super.bvhcast(A,I,{intersectsRanges:Q})}intersectsBox(A,I){return ni.set(A.min,A.max,I),ni.needsUpdate=!0,this.shapecast({intersectsBounds:g=>ni.intersectsBox(g),intersectsTriangle:g=>ni.intersectsTriangle(g)})}intersectsSphere(A){return this.shapecast({intersectsBounds:I=>A.intersectsBox(I),intersectsTriangle:I=>I.intersectsSphere(A)})}closestPointToGeometry(A,I,g={},Q={},C=0,i=1/0){return(this.indirect?AF:Or)(this,A,I,g,Q,C,i)}closestPointToPoint(A,I={},g=0,Q=1/0){return Nr(this,A,I,g,Q)}}const nB={Mesh:IQ.prototype.raycast,Line:qs.prototype.raycast,LineSegments:ps.prototype.raycast,LineLoop:xs.prototype.raycast,Points:us.prototype.raycast,BatchedMesh:D0.prototype.raycast},aI=new IQ,Ni=[];function IF(B,A){if(this.isBatchedMesh)gF.call(this,B,A);else{const{geometry:I}=this;if(I.boundsTree)I.boundsTree.raycastObject3D(this,B,A);else{let g;if(this instanceof IQ)g=nB.Mesh;else if(this instanceof ps)g=nB.LineSegments;else if(this instanceof xs)g=nB.LineLoop;else if(this instanceof qs)g=nB.Line;else if(this instanceof us)g=nB.Points;else throw new Error("BVH: Fallback raycast function not found.");g.call(this,B,A)}}}function gF(B,A){if(this.boundsTrees){const I=this.boundsTrees,g=this._drawInfo||this._instanceInfo,Q=this._drawRanges||this._geometryInfo,C=this.matrixWorld;aI.material=this.material,aI.geometry=this.geometry;const i=aI.geometry.boundsTree,E=aI.geometry.drawRange;aI.geometry.boundingSphere===null&&(aI.geometry.boundingSphere=new i0);for(let D=0,o=g.length;D<o;D++){if(!this.getVisibleAt(D))continue;const s=g[D].geometryIndex;if(aI.geometry.boundsTree=I[s],this.getMatrixAt(D,aI.matrixWorld).premultiply(C),!aI.geometry.boundsTree){this.getBoundingBoxAt(s,aI.geometry.boundingBox),this.getBoundingSphereAt(s,aI.geometry.boundingSphere);const t=Q[s];aI.geometry.setDrawRange(t.start,t.count)}aI.raycast(B,Ni);for(let t=0,w=Ni.length;t<w;t++){const a=Ni[t];a.object=this,a.batchId=D,A.push(a)}Ni.length=0}aI.geometry.boundsTree=i,aI.geometry.drawRange=E,aI.material=null,aI.geometry=null}else nB.BatchedMesh.call(this,B,A)}function QF(B={}){const{type:A=UB}=B;return this.boundsTree=new A(this,B),this.boundsTree}const KQ=new q,lQ=new q,fQ=new q,Re=new NI,Ji=new q,_o=new q,ke=new NI,ne=new NI,Ui=new fA,Me=new fA;function RC(B,A){if(!B&&!A)return;const I=B.count===A.count,g=B.normalized===A.normalized,Q=B.array.constructor===A.array.constructor,C=B.itemSize===A.itemSize;if(!I||!g||!Q||!C)throw new Error}function kC(B,A=null){const I=B.array.constructor,g=B.normalized,Q=B.itemSize,C=A===null?B.count:A;return new iI(new I(Q*C),Q,g)}function Ne(B,A,I=0){if(B.isInterleavedBufferAttribute){const g=B.itemSize;for(let Q=0,C=B.count;Q<C;Q++){const i=Q+I;A.setX(i,B.getX(Q)),g>=2&&A.setY(i,B.getY(Q)),g>=3&&A.setZ(i,B.getZ(Q)),g>=4&&A.setW(i,B.getW(Q))}}else{const g=A.array,Q=g.constructor,C=g.BYTES_PER_ELEMENT*B.itemSize*I;new Q(g.buffer,C,B.array.length).set(B.array)}}function BF(B,A,I){const g=B.elements,Q=A.elements;for(let C=0,i=Q.length;C<i;C++)g[C]+=Q[C]*I}function Je(B,A,I){const g=B.skeleton,Q=B.geometry,C=g.bones,i=g.boneInverses;ke.fromBufferAttribute(Q.attributes.skinIndex,A),ne.fromBufferAttribute(Q.attributes.skinWeight,A),Ui.elements.fill(0);for(let E=0;E<4;E++){const D=ne.getComponent(E);if(D!==0){const o=ke.getComponent(E);Me.multiplyMatrices(C[o].matrixWorld,i[o]),BF(Ui,Me,D)}}return Ui.multiply(B.bindMatrix).premultiply(B.bindMatrixInverse),I.transformDirection(Ui),I}function $o(B,A,I,g,Q){Ji.set(0,0,0);for(let C=0,i=B.length;C<i;C++){const E=A[C],D=B[C];E!==0&&(_o.fromBufferAttribute(D,g),I?Ji.addScaledVector(_o,E):Ji.addScaledVector(_o.sub(Q),E))}Q.add(Ji)}function CF(B,A={useGroups:!1,updateIndex:!1,skipAttributes:[]},I=new ZQ){const g=B[0].index!==null,{useGroups:Q=!1,updateIndex:C=!1,skipAttributes:i=[]}=A,E=new Set(Object.keys(B[0].attributes)),D={};let o=0;I.clearGroups();for(let s=0;s<B.length;++s){const t=B[s];let w=0;if(g!==(t.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const a in t.attributes){if(!E.has(a))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+a+'" attribute exists among all geometries, or in none of them.');D[a]===void 0&&(D[a]=[]),D[a].push(t.attributes[a]),w++}if(w!==E.size)throw new Error("StaticGeometryGenerator: Make sure all geometries have the same number of attributes.");if(Q){let a;if(g)a=t.index.count;else if(t.attributes.position!==void 0)a=t.attributes.position.count;else throw new Error("StaticGeometryGenerator: The geometry must have either an index or a position attribute");I.addGroup(o,a,s),o+=a}}if(g){let s=!1;if(!I.index){let t=0;for(let w=0;w<B.length;++w)t+=B[w].index.count;I.setIndex(new iI(new Uint32Array(t),1,!1)),s=!0}if(C||s){const t=I.index;let w=0,a=0;for(let G=0;G<B.length;++G){const S=B[G],c=S.index;if(i[G]!==!0)for(let y=0;y<c.count;++y)t.setX(w,c.getX(y)+a),w++;a+=S.attributes.position.count}}}for(const s in D){const t=D[s];if(!(s in I.attributes)){let G=0;for(const S in t)G+=t[S].count;I.setAttribute(s,kC(D[s][0],G))}const w=I.attributes[s];let a=0;for(let G=0,S=t.length;G<S;G++){const c=t[G];i[G]!==!0&&Ne(c,w,a),a+=c.count}}return I}function EF(B,A){if(B===null||A===null)return B===A;if(B.length!==A.length)return!1;for(let I=0,g=B.length;I<g;I++)if(B[I]!==A[I])return!1;return!0}function iF(B){const{index:A,attributes:I}=B;if(A)for(let g=0,Q=A.count;g<Q;g+=3){const C=A.getX(g),i=A.getX(g+2);A.setX(g,i),A.setX(g+2,C)}else for(const g in I){const Q=I[g],C=Q.itemSize;for(let i=0,E=Q.count;i<E;i+=3)for(let D=0;D<C;D++){const o=Q.getComponent(i,D),s=Q.getComponent(i+2,D);Q.setComponent(i,D,s),Q.setComponent(i+2,D,o)}}return B}class DF{constructor(A){this.matrixWorld=new fA,this.geometryHash=null,this.boneMatrices=null,this.primitiveCount=-1,this.mesh=A,this.update()}update(){const A=this.mesh,I=A.geometry,g=A.skeleton,Q=(I.index?I.index.count:I.attributes.position.count)/3;if(this.matrixWorld.copy(A.matrixWorld),this.geometryHash=I.attributes.position.version,this.primitiveCount=Q,g){g.boneTexture||g.computeBoneTexture(),g.update();const C=g.boneMatrices;!this.boneMatrices||this.boneMatrices.length!==C.length?this.boneMatrices=C.slice():this.boneMatrices.set(C)}else this.boneMatrices=null}didChange(){const A=this.mesh,I=A.geometry,g=(I.index?I.index.count:I.attributes.position.count)/3;return!(this.matrixWorld.equals(A.matrixWorld)&&this.geometryHash===I.attributes.position.version&&EF(A.skeleton&&A.skeleton.boneMatrices||null,this.boneMatrices)&&this.primitiveCount===g)}}class oF{constructor(A){Array.isArray(A)||(A=[A]);const I=[];A.forEach(g=>{g.traverseVisible(Q=>{Q.isMesh&&I.push(Q)})}),this.meshes=I,this.useGroups=!0,this.applyWorldTransforms=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Array(I.length).fill().map(()=>new ZQ),this._diffMap=new WeakMap}getMaterials(){const A=[];return this.meshes.forEach(I=>{Array.isArray(I.material)?A.push(...I.material):A.push(I.material)}),A}generate(A=new ZQ){let I=[];const{meshes:g,useGroups:Q,_intermediateGeometry:C,_diffMap:i}=this;for(let E=0,D=g.length;E<D;E++){const o=g[E],s=C[E],t=i.get(o);!t||t.didChange(o)?(this._convertToStaticGeometry(o,s),I.push(!1),t?t.update():i.set(o,new DF(o))):I.push(!0)}if(C.length===0){A.setIndex(null);const E=A.attributes;for(const D in E)A.deleteAttribute(D);for(const D in this.attributes)A.setAttribute(this.attributes[D],new iI(new Float32Array(0),4,!1))}else CF(C,{useGroups:Q,skipAttributes:I},A);for(const E in A.attributes)A.attributes[E].needsUpdate=!0;return A}_convertToStaticGeometry(A,I=new ZQ){const g=A.geometry,Q=this.applyWorldTransforms,C=this.attributes.includes("normal"),i=this.attributes.includes("tangent"),E=g.attributes,D=I.attributes;!I.index&&g.index&&(I.index=g.index.clone()),D.position||I.setAttribute("position",kC(E.position)),C&&!D.normal&&E.normal&&I.setAttribute("normal",kC(E.normal)),i&&!D.tangent&&E.tangent&&I.setAttribute("tangent",kC(E.tangent)),RC(g.index,I.index),RC(E.position,D.position),C&&RC(E.normal,D.normal),i&&RC(E.tangent,D.tangent);const o=E.position,s=C?E.normal:null,t=i?E.tangent:null,w=g.morphAttributes.position,a=g.morphAttributes.normal,G=g.morphAttributes.tangent,S=g.morphTargetsRelative,c=A.morphTargetInfluences,y=new VQ;y.getNormalMatrix(A.matrixWorld),g.index&&I.index.array.set(g.index.array);for(let F=0,R=E.position.count;F<R;F++)KQ.fromBufferAttribute(o,F),s&&lQ.fromBufferAttribute(s,F),t&&(Re.fromBufferAttribute(t,F),fQ.fromBufferAttribute(t,F)),c&&(w&&$o(w,c,S,F,KQ),a&&$o(a,c,S,F,lQ),G&&$o(G,c,S,F,fQ)),A.isSkinnedMesh&&(A.applyBoneTransform(F,KQ),s&&Je(A,F,lQ),t&&Je(A,F,fQ)),Q&&KQ.applyMatrix4(A.matrixWorld),D.position.setXYZ(F,KQ.x,KQ.y,KQ.z),s&&(Q&&lQ.applyNormalMatrix(y),D.normal.setXYZ(F,lQ.x,lQ.y,lQ.z)),t&&(Q&&fQ.transformDirection(A.matrixWorld),D.tangent.setXYZW(F,fQ.x,fQ.y,fQ.z,Re.w));for(const F in this.attributes){const R=this.attributes[F];R==="position"||R==="tangent"||R==="normal"||!(R in E)||(D[R]||I.setAttribute(R,kC(E[R])),RC(E[R],D[R]),Ne(E[R],D[R]))}return A.matrixWorld.determinant()<0&&iF(I),I}}const sF=Object.freeze(Object.defineProperty({__proto__:null,AVERAGE:Wa,BVH:Ee,CENTER:Mo,CONTAINED:No,ExtendedTriangle:Qg,GeometryBVH:oe,MeshBVH:UB,OrientedBox:FI,SAH:ja,SKIP_GENERATION:Ei,StaticGeometryGenerator:oF,acceleratedRaycast:IF,computeBoundsTree:QF,generateIndirectBuffer:De},Symbol.toStringTag,{value:"Module"}));class tF{constructor(A){this.name="WorkerBase",this.running=!1,this.worker=A,this.worker.onerror=I=>{throw I.message?new Error(`${this.name}: Could not create Web Worker with error "${I.message}"`):new Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...A){if(this.running)throw new Error("GenerateMeshBVHWorker: Already running job.");if(this.worker===null)throw new Error("GenerateMeshBVHWorker: Worker has been disposed.");this.running=!0;const I=this.runTask(this.worker,...A);return I.finally(()=>{this.running=!1}),I}dispose(){this.worker.terminate(),this.worker=null}}const Cg={node:"node",material:"material",camera:"camera",light:"light"},pQ="KHR_animation_pointer",wF={CUBICSPLINE:void 0,LINEAR:ms,STEP:o0};class aF{constructor(A){this.name=pQ,this.parser=A,this.animationPointerResolver=null,this.pointerPathMap=new Map}setAnimationPointerResolver(A){return this.animationPointerResolver=A,this}loadAnimationTargetFromChannel(A){const I=A.target,g=I.node!==void 0?I.node:I.id;return this.parser.getDependency("node",g)}loadAnimationTargetFromChannelWithAnimationPointer(A){cF();const I=A.target,g=I.extensions&&I.extensions[pQ]&&I.path&&I.path==="pointer";if(!g)return null;let Q,C=Cg.node,i;if(g){const D=I.extensions[pQ];let o=D.pointer;if(!o){console.warn("Invalid path",D,I);return}if(o.startsWith("/materials/")?C=Cg.material:o.startsWith("/extensions/KHR_lights_punctual/lights/")?C=Cg.light:o.startsWith("/cameras/")&&(C=Cg.camera),i=this._tryResolveTargetId(o,C),i===null||isNaN(i)){console.warn("Failed resolving animation node id: "+i,o);return}switch(C){case Cg.material:const t=("/materials/"+i.toString()+"/").length,w=o.substring(0,t);switch(Q=o.substring(t),Q){case"pbrMetallicRoughness/baseColorFactor":Q="color";break;case"pbrMetallicRoughness/roughnessFactor":Q="roughness";break;case"pbrMetallicRoughness/metallicFactor":Q="metalness";break;case"emissiveFactor":Q="emissive";break;case"alphaCutoff":Q="alphaTest";break;case"occlusionTexture/strength":Q="aoMapIntensity";break;case"normalTexture/scale":Q="normalScale";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale":Q="map/repeat";break;case"pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset":Q="map/offset";break;case"emissiveTexture/extensions/KHR_texture_transform/scale":Q="emissiveMap/repeat";break;case"emissiveTexture/extensions/KHR_texture_transform/offset":Q="emissiveMap/offset";break;case"extensions/KHR_materials_emissive_strength/emissiveStrength":Q="emissiveIntensity";break;case"extensions/KHR_materials_transmission/transmissionFactor":Q="transmission";break;case"extensions/KHR_materials_ior/ior":Q="ior";break;case"extensions/KHR_materials_volume/thicknessFactor":Q="thickness";break;case"extensions/KHR_materials_volume/attenuationColor":Q="attenuationColor";break;case"extensions/KHR_materials_volume/attenuationDistance":Q="attenuationDistance";break;case"extensions/KHR_materials_iridescence/iridescenceFactor":Q="iridescence";break;case"extensions/KHR_materials_iridescence/iridescenceIor":Q="iridescenceIOR";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMinimum":Q="iridescenceThicknessRange[0]";break;case"extensions/KHR_materials_iridescence/iridescenceThicknessMaximum":Q="iridescenceThicknessRange[1]";break;case"extensions/KHR_materials_clearcoat/clearcoatFactor":Q="clearcoat";break;case"extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor":Q="clearcoatRoughness";break;case"extensions/KHR_materials_sheen/sheenColorFactor":Q="sheenColor";break;case"extensions/KHR_materials_sheen/sheenRoughnessFactor":Q="sheenRoughness";break;case"extensions/KHR_materials_specular/specularFactor":Q="specularIntensity";break;case"extensions/KHR_materials_specular/specularColorFactor":Q="specularColor";break}o=w+Q;break;case Cg.node:const a=("/nodes/"+i.toString()+"/").length,G=o.substring(0,a);if(Q=o.substring(a),Q.startsWith("weights/")){const F=Q.substring(8);/^\d+$/.test(F)?Q="morphTargetInfluences["+F+"]":console.warn(pQ+": invalid weight index",Q,o)}else switch(Q){case"translation":Q="position";break;case"rotation":Q="quaternion";break;case"scale":Q="scale";break;case"weights":Q="morphTargetInfluences";break;case"extensions/KHR_node_visibility/visible":Q="visible";break}o=G+Q;break;case Cg.light:const S=("/extensions/KHR_lights_punctual/lights/"+i.toString()+"/").length;switch(Q=o.substring(S),Q){case"color":break;case"intensity":break;case"spot/innerConeAngle":Q="penumbra";break;case"spot/outerConeAngle":Q="angle";break;case"range":Q="distance";break}o="/lights/"+i.toString()+"/"+Q;break;case Cg.camera:const c=("/cameras/"+i.toString()+"/").length,y=o.substring(0,c);switch(Q=o.substring(c),Q){case"perspective/yfov":Q="fov";break;case"perspective/znear":case"orthographic/znear":Q="near";break;case"perspective/zfar":case"orthographic/zfar":Q="far";break;case"perspective/aspect":Q="aspect";break;case"orthographic/xmag":Q="zoom";break;case"orthographic/ymag":Q="zoom";break}o=y+Q;break}this.animationPointerResolver?.resolvePath&&(o=this.animationPointerResolver.resolvePath(o));const s=D.pointer;this.pointerPathMap.set(s,o)}if(i==null||isNaN(i)){console.warn("Failed resolving animation node id: "+i,I);return}let E;return C===Cg.node?E=this.parser.getDependency("node",i):C===Cg.material?E=this.parser.getDependency("material",i):C===Cg.light?E=this.parser.getDependency("light",i):C===Cg.camera?E=this.parser.getDependency("camera",i):console.error("Unhandled type",C),E}createAnimationTracksWithAnimationPointer(A,I,g,Q,C){if(!(C.extensions&&C.extensions[pQ]&&C.path&&C.path==="pointer"))return null;const i=C.extensions[pQ].pointer;let E=this.pointerPathMap.get(i);if(!E)return null;const D=[];E=E.replaceAll("/",".");const o=E.split(".");var s=A.name!==void 0&&A.name!==null?A.name:A.uuid;if(o[2]=s,o[3]?.startsWith("morphTargetInfluences")){const a=o[3];if(A.type==="Group"){for(const G of A.children)G.morphTargetInfluences&&(o[3]=G.name,o[4]=a,w(this.parser));return D}}w(this.parser);function t(a,G){try{const S=G.split(".").filter(Boolean),c=S[S.length-1].replace(/\[.*\]$/,"");return c in a?typeof a[c]=="boolean":!1}catch{return!1}}function w(a){E=o.join(".");let G,S=!1;switch(g.itemSize){case 1:Object.prototype.toString.call(g.array)==="[object Uint8Array]"&&t(A,E)?(G=e0,S=!0):G=h0;break;case 2:case 3:G=a0;break;case 4:E.endsWith(".quaternion")?G=t0:G=w0;break}if(!G){console.warn("Unsupported output accessor format",g);return}const c=Q.interpolation!==void 0?wF[Q.interpolation]:ms;let y=a._getArrayFromAccessor(g);E.endsWith(".fov")&&(y=y.map(R=>R/Math.PI*180)),S&&(y=y.map(R=>R>0));const F=new G(E,I.array,y,c);if(c==="CUBICSPLINE"&&a._createCubicSplineTrackInterpolant(F),D.push(F),E&&g.itemSize===4&&E.startsWith(".materials.")&&E.endsWith(".color")){const R=new Float32Array(y.length/4);for(let n=0,N=y.length/4;n<N;n+=1)R[n]=y[n*4+3];const M=new G(E.replace(".color",".opacity"),I.array,R,c);c==="CUBICSPLINE"&&a._createCubicSplineTrackInterpolant(F),D.push(M)}}return D}_tryResolveTargetId(A,I){let g="";return I==="node"?g=A.substring(7):I==="material"?g=A.substring(11):I==="light"?g=A.substring(39):I==="camera"&&(g=A.substring(9)),g=g.substring(0,g.indexOf("/")),Number.parseInt(g)}loadAnimation(A){const I=this,g=this.parser.json,Q=this.parser,C=g.animations[A],i=C.name?C.name:"animation_"+A,E=[],D=[],o=[],s=[],t=[];for(let w=0,a=C.channels.length;w<a;w++){const G=C.channels[w],S=C.samplers[G.sampler],c=G.target,y=C.parameters!==void 0?C.parameters[S.input]:S.input,F=C.parameters!==void 0?C.parameters[S.output]:S.output;let R=I.loadAnimationTargetFromChannelWithAnimationPointer(G);R||(R=I.loadAnimationTargetFromChannel(G)),E.push(R),D.push(Q.getDependency("accessor",y)),o.push(Q.getDependency("accessor",F)),s.push(S),t.push(c)}return Promise.all([Promise.all(E),Promise.all(D),Promise.all(o),Promise.all(s),Promise.all(t)]).then(function(w){const a=w[0],G=w[1],S=w[2],c=w[3],y=w[4],F=[];for(let R=0,M=a.length;R<M;R++){const n=a[R],N=G[R],J=S[R],L=c[R],H=y[R];if(n===void 0)continue;n.updateMatrix&&(n.updateMatrix(),n.matrixAutoUpdate=!0);let Y=I.createAnimationTracksWithAnimationPointer(n,N,J,L,H);if(Y||(Y=Q._createAnimationTracks(n,N,J,L,H)),Y)for(let K=0;K<Y.length;K++)F.push(Y[K])}return new s0(i,void 0,F)})}}function eF(B,A){for(const I of B.children){const g=I.getObjectByName(A);if(g)return g}}let Ue=!1,hF=null;function cF(){if(Ue)return;Ue=!0;const B=hF||=bs.findNode;bs.findNode=function(A,I){if(!I)return B(A,I);if(I.startsWith(".materials.")){const g=I.substring(11).substring(I.indexOf(".")),Q=g.indexOf("."),C=Q<0?g:g.substring(0,Q);let i=null;return A.traverse(E=>{i!==null||E.type!=="Mesh"&&E.type!=="SkinnedMesh"||E.material&&(E.material.uuid===C||E.material.name===C)&&(i=E.material,i!==null&&(g.endsWith(".map")?i=i.map:g.endsWith(".emissiveMap")&&(i=i.emissiveMap)))}),i}else if(I.startsWith(".nodes.")||I.startsWith(".lights.")||I.startsWith(".cameras.")){const g=I.split(".");let Q;for(let C=1;C<g.length;C++){const i=g[C],E=i.length==36;let D;if(!E&&Q?.isObject3D&&(D=eF(Q,i)),E)Q=A.getObjectByProperty("uuid",i);else if(D)Q=D;else if(Q&&Q[i]){const o=Number.parseInt(i);let s=i;o>=0&&(s=o),Q=Q[s]}else if(!Q||!Q.isObject3D){const o=A.getObjectByName(i);o&&(Q=o)}}if(!Q){const C=B(A,g[2]);return C||console.warn(pQ+": Property binding not found",I,A,A.name,g),C}return Q}return B(A,I)}}const yF=Object.freeze(Object.defineProperty({__proto__:null,GLTFAnimationPointerExtension:aF},Symbol.toStringTag,{value:"Module"}));var GF=Object.defineProperty,SF=(B,A,I)=>A in B?GF(B,A,{enumerable:!0,configurable:!0,writable:!0,value:I}):B[A]=I,ZA=(B,A,I)=>(SF(B,typeof A!="symbol"?A+"":A,I),I);(function(){class B{}class A extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class I extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class g extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class Q extends B{constructor(h,r="unrestricted"){super(),ZA(this,"type"),ZA(this,"value"),this.value=h,this.type=r}}class C extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class i extends B{}class E extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class D extends B{}class o extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class s extends B{constructor(h,r="integer"){super(),ZA(this,"value"),ZA(this,"type"),this.value=h,this.type=r}}class t extends B{constructor(h){super(),ZA(this,"value"),this.value=h}}class w extends B{constructor(h,r,k){super(),ZA(this,"value"),ZA(this,"type"),ZA(this,"unit"),this.value=h,this.type=r,this.unit=k}}class a extends B{}class G extends B{}class S extends B{}class c extends B{}class y extends B{}class F extends B{}class R extends B{}class M extends B{}class n extends B{}class N extends B{}class J extends B{}class L extends B{}class H{constructor(h){ZA(this,"input"),ZA(this,"index",0),this.input=h}consume(){const h=this.input.codePointAt(this.index);return h!==void 0&&(this.index+=String.fromCodePoint(h).length),h}reconsume(h){h!==void 0&&(this.index-=String.fromCodePoint(h).length)}peek(){const h=[];let r=this.index;for(let k=0;k<3&&r<this.input.length;k++){const U=this.input.codePointAt(r);h.push(U),r+=String.fromCodePoint(U).length}return h}}function Y(e){return e===10}function K(e){return Y(e)||e===8192||e===32}function l(e){return e>=48&&e<=57}function p(e){return l(e)||e>=65&&e<=70||e>=97&&e<=102}function u(e){return function(h){return function(r){return r>=65&&r<=90}(h)||function(r){return r>=97&&r<=122}(h)}(e)||function(h){return h>=128}(e)||e===95}function b(e){return u(e)||l(e)||e===45}function O(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function W(e,h){return e===92&&!Y(h)}function T(e,h,r){return e===45?u(h)||h===45||W(h,r):!!u(e)||e===92&&W(e,h)}function j(e,h,r){return e===43||e===45?l(h)||h===46&&l(r):l(e===46?h:e)}function EA(e){const h=e.consume();if(p(h)){let r=[h];for(;p(...e.peek())&&r.length<5;)r.push(e.consume());K(...e.peek())&&e.consume();const k=parseInt(String.fromCodePoint(...r),16);return k===0||k>1114111?65533:k}return h===void 0?65533:h}function wA(e,h){const r=new C("");for(;;){const k=e.consume();if(k===h||k===void 0)return r;if(k===10)return e.reconsume(k),new i;if(k===92){const U=e.peek()[0];U===void 0||(Y(U)?e.consume():r.value+=String.fromCodePoint(EA(e)))}else r.value+=String.fromCodePoint(k)}}function iA(e){let h="";for(;;){const r=e.consume();if(b(r))h+=String.fromCodePoint(r);else{if(!W(...e.peek()))return e.reconsume(r),h;h+=String.fromCodePoint(EA(e))}}}function IA(e){let h=function(r){let k="integer",U="";for([43,45].includes(r.peek()[0])&&(U+=String.fromCodePoint(r.consume()));l(...r.peek());)U+=String.fromCodePoint(r.consume());if(r.peek()[0]===46&&l(r.peek()[1]))for(U+=String.fromCodePoint(r.consume(),r.consume()),k="number";l(...r.peek());)U+=String.fromCodePoint(r.consume());return[69,101].includes(r.peek()[0])&&([45,43].includes(r.peek()[1])&&l(r.peek()[2])?(U+=String.fromCodePoint(r.consume(),r.consume(),r.consume()),k="number"):l(r.peek()[1])&&(U+=String.fromCodePoint(r.consume(),r.consume()),k="number")),{value:parseFloat(U),type:k}}(e);return T(...e.peek())?new w(h.value,h.type,iA(e)):e.peek()[0]===37?(e.consume(),new t(h.value)):new s(h.value,h.type)}function BA(e){for(;;){const h=e.consume();if(h===41||h===void 0)return;W(...e.peek())&&EA(e)}}function AA(e){const h=iA(e);if(h.match(/url/i)&&e.peek()[0]===40){for(e.consume();K(e.peek()[0])&&K(e.peek()[1]);)e.consume();return[34,39].includes(e.peek()[0])||K(e.peek()[0])&&[34,39].includes(e.peek()[1])?new I(h):function(r){const k=new E("");for(;K(...r.peek());)r.consume();for(;;){const U=r.consume();if(U===41||U===void 0)return k;if(K(U)){for(;K(...r.peek());)r.consume();return r.peek()[0]===41||r.peek()[0]===void 0?(r.consume(),k):(BA(r),new D)}if([34,39,40].includes(U)||O(U))return BA(r),new D;if(U===92){if(!W(...r.peek()))return BA(r),new D;k.value+=EA(r)}else k.value+=String.fromCodePoint(U)}}(e)}return e.peek()[0]===40?(e.consume(),new I(h)):new A(h)}function $(e){const h=e.consume(),r=e.peek();if(K(h)){for(;K(...e.peek());)e.consume();return new a}if(h===34)return wA(e,h);if(h===35){if(b(r[0])||W(...r)){const k=new Q;return T(...r)&&(k.type="id"),k.value=iA(e),k}return new o(String.fromCodePoint(h))}return h===39?wA(e,h):h===40?new n:h===41?new N:h===43?j(...r)?(e.reconsume(h),IA(e)):new o(String.fromCodePoint(h)):h===44?new F:h===45?j(...e.peek())?(e.reconsume(h),IA(e)):e.peek()[0]===45&&e.peek()[1]===62?(e.consume(),e.consume(),new S):T(...e.peek())?(e.reconsume(h),AA(e)):new o(String.fromCodePoint(h)):h===46?j(...e.peek())?(e.reconsume(h),IA(e)):new o(String.fromCodePoint(h)):h===58?new c:h===59?new y:h===60?r[0]===33&&r[1]===45&&r[2]===45?(e.consume(),e.consume(),e.consume(),new G):new o(String.fromCodePoint(h)):h===64?T(...r)?new g(iA(e)):new o(String.fromCodePoint(h)):h===91?new R:h===92?W(...r)?(e.reconsume(h),AA(e)):new o(String.fromCodePoint(h)):h===93?new M:h===123?new J:h===125?new L:l(h)?(e.reconsume(h),IA(e)):u(h)?(e.reconsume(h),AA(e)):h===void 0?void 0:new o(String.fromCodePoint(h))}const z=new Set(["px","deg","s","hz","dppx","number","fr"]);function LA(e){return z.has(e.toLowerCase())}function MA(e,h){if(["x","y"].includes(e))return e;if(!h)throw new Error("To determine the normalized axis the computedStyle of the source is required.");const r=h.writingMode=="horizontal-tb";if(e==="block")e=r?"y":"x";else{if(e!=="inline")throw new TypeError(`Invalid axis \u201C${e}\u201D`);e=r?"x":"y"}return e}function NA(e){const h=[];let r=0;function k(){let d=0;const f=r;for(;r<e.length;){const m=e.slice(r,r+1);if(/\s/.test(m)&&d===0)break;if(m==="(")d+=1;else if(m===")"&&(d-=1,d===0)){r++;break}r++}return e.slice(f,r)}function U(){for(;/\s/.test(e.slice(r,r+1));)r++}for(;r<e.length;){const d=e.slice(r,r+1);/\s/.test(d)?U():h.push(k())}return h}function xA(e,h){return e.reduce((r,k)=>(r.has(k[h])?r.get(k[h]).push(k):r.set(k[h],[k]),r),new Map)}function aA(e,h){const r=[],k=[];for(const U of e)h(U)?r.push(U):k.push(U);return[r,k]}function DA(e,h={}){function r(k){return Array.from(k).map(U=>DA(U,h))}if(e instanceof CSSUnitValue){if(e.unit==="percent"&&h.percentageReference){const U=e.value/100*h.percentageReference.value,d=h.percentageReference.unit;return new CSSUnitValue(U,d)}const k=e.toSum();if(k&&k.values.length===1&&(e=k.values[0]),e instanceof CSSUnitValue&&e.unit==="em"&&h.fontSize&&(e=new CSSUnitValue(e.value*h.fontSize.value,h.fontSize.unit)),e instanceof CSSKeywordValue){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number")}return e}if(!e.operator)return e;switch(e.operator){case"sum":e=new CSSMathSum(...r(e.values));break;case"product":e=new CSSMathProduct(...r(e.values));break;case"negate":e=new CSSMathNegate(DA(e.value,h));break;case"clamp":e=new CSSMathClamp(DA(e.lower,h),DA(e.value,h),DA(e.upper,h));break;case"invert":e=new CSSMathInvert(DA(e.value,h));break;case"min":e=new CSSMathMin(...r(e.values));break;case"max":e=new CSSMathMax(...r(e.values))}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const k=Array.from(e.values);if(k.every(U=>U instanceof CSSUnitValue&&U.unit!=="percent"&&LA(U.unit)&&U.unit===k[0].unit)){const U=Math[e.operator].apply(Math,k.map(({value:d})=>d));return new CSSUnitValue(U,k[0].unit)}}if(e instanceof CSSMathMin||e instanceof CSSMathMax){const k=Array.from(e.values),[U,d]=aA(k,m=>m instanceof CSSUnitValue&&m.unit!=="percent"),f=Array.from(xA(U,"unit").values());if(f.some(m=>m.length>0)){const m=f.map(x=>{const P=Math[e.operator].apply(Math,x.map(({value:V})=>V));return new CSSUnitValue(P,x[0].unit)});e=e instanceof CSSMathMin?new CSSMathMin(...m,...d):new CSSMathMax(...m,...d)}return k.length===1?k[0]:e}if(e instanceof CSSMathNegate)return e.value instanceof CSSUnitValue?new CSSUnitValue(0-e.value.value,e.value.unit):e.value instanceof CSSMathNegate?e.value.value:e;if(e instanceof CSSMathInvert)return e.value instanceof CSSMathInvert?e.value.value:e;if(e instanceof CSSMathSum){let k=function(d){const f=d.filter(m=>m instanceof CSSUnitValue);return[...d.filter(m=>!(m instanceof CSSUnitValue)),...Array.from(xA(f,"unit").entries()).map(([m,x])=>{const P=x.reduce((V,{value:QA})=>V+QA,0);return new CSSUnitValue(P,m)})]},U=[];for(const d of e.values)d instanceof CSSMathSum?U.push(...d.values):U.push(d);return U=k(U),U.length===1?U[0]:new CSSMathSum(...U)}if(e instanceof CSSMathProduct){let k=[];for(const f of e.values)f instanceof CSSMathProduct?k.push(...f.values):k.push(f);const[U,d]=aA(k,f=>f instanceof CSSUnitValue&&f.unit==="number");if(U.length>1){const f=U.reduce((m,{value:x})=>m*x,1);k=[new CSSUnitValue(f,"number"),...d]}if(k.length===2){let f,m;for(const x of k)x instanceof CSSUnitValue&&x.unit==="number"?f=x:x instanceof CSSMathSum&&[...x.values].every(P=>P instanceof CSSUnitValue)&&(m=x);if(f&&m)return new CSSMathSum(...[...m.values].map(x=>new CSSUnitValue(x.value*f.value,x.unit)))}if(k.every(f=>f instanceof CSSUnitValue&&LA(f.unit)||f instanceof CSSMathInvert&&f.value instanceof CSSUnitValue&&LA(f.value.unit))){const f=new CSSMathProduct(...k).toSum();if(f&&f.values.length===1)return f.values[0]}return new CSSMathProduct(...k)}return e}const JA=null,jI=["percent","length","angle","time","frequency","resolution","flex"],_A={fontRelativeLengths:{units:new Set(["em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh"])},viewportRelativeLengths:{units:new Set(["vw","lvw","svw","dvw","vh","lvh","svh","dvh","vi","lvi","svi","dvi","vb","lvb","svb","dvb","vmin","lvmin","svmin","dvmin","vmax","lvmax","svmax","dvmax"])},absoluteLengths:{units:new Set(["cm","mm","Q","in","pt","pc","px"]),compatible:!0,canonicalUnit:"px",ratios:{cm:96/2.54,mm:96/2.54/10,Q:96/2.54/40,in:96,pc:16,pt:96/72,px:1}},angle:{units:new Set(["deg","grad","rad","turn"]),compatible:!0,canonicalUnit:"deg",ratios:{deg:1,grad:.9,rad:180/Math.PI,turn:360}},time:{units:new Set(["s","ms"]),compatible:!0,canonicalUnit:"s",ratios:{s:1,ms:.001}},frequency:{units:new Set(["hz","khz"]),compatible:!0,canonicalUnit:"hz",ratios:{hz:1,khz:1e3}},resolution:{units:new Set(["dpi","dpcm","dppx"]),compatible:!0,canonicalUnit:"dppx",ratios:{dpi:1/96,dpcm:2.54/96,dppx:1}}},HA=new Map;for(const e of Object.values(_A))if(e.compatible)for(const h of e.units)HA.set(h,e);function fI(e){return HA.get(e)}function Eg(e,h){const r={...e};for(const k of Object.keys(h))r[k]?r[k]+=h[k]:r[k]=h[k];return r}function ig(e){return e==="number"?{}:e==="percent"?{percent:1}:_A.absoluteLengths.units.has(e)||_A.fontRelativeLengths.units.has(e)||_A.viewportRelativeLengths.units.has(e)?{length:1}:_A.angle.units.has(e)?{angle:1}:_A.time.units.has(e)?{time:1}:_A.frequency.units.has(e)?{frequency:1}:_A.resolution.units.has(e)?{resolution:1}:e==="fr"?{flex:1}:JA}function pI(e){if(e instanceof CSSUnitValue){let{unit:h,value:r}=e;const k=fI(e.unit);return k&&h!==k.canonicalUnit&&(r*=k.ratios[h],h=k.canonicalUnit),h==="number"?[[r,{}]]:[[r,{[h]:1}]]}if(e instanceof CSSMathInvert){if(!(e.value instanceof CSSUnitValue))throw new Error("Not implemented");const h=pI(e.value);if(h===JA||h.length>1)return JA;const r=h[0],k={};for(const[U,d]of Object.entries(r[1]))k[U]=-1*d;return h[0]=[1/r[0],k],h}if(e instanceof CSSMathProduct){let h=[[1,{}]];for(const r of e.values){const k=pI(r),U=[];if(k===JA)return JA;for(const d of h)for(const f of k)U.push([d[0]*f[0],Eg(d[1],f[1])]);h=U}return h}throw new Error("Not implemented")}function Dg(e,h){if(ig(h)===JA)throw new SyntaxError("The string did not match the expected pattern.");const r=pI(e);if(!r)throw new TypeError;if(r.length>1)throw new TypeError("Sum has more than one item");const k=function(U,d){const f=U.unit,m=U.value,x=fI(f),P=fI(d);return!P||x!==P?JA:new CSSUnitValue(m*P.ratios[f]/P.ratios[d],d)}(zI(r[0]),h);if(k===JA)throw new TypeError;return k}function zI(e){const[h,r]=e,k=Object.entries(r);if(k.length>1)return JA;if(k.length===0)return new CSSUnitValue(h,"number");const U=k[0];return U[1]!==1?JA:new CSSUnitValue(h,U[0])}function _I(e,...h){if(h&&h.length)throw new Error("Not implemented");const r=pI(e).map(k=>zI(k));if(r.some(k=>k===JA))throw new TypeError("Type error");return new CSSMathSum(...r)}function XI(e,h){if(e.percentHint&&h.percentHint&&e.percentHint!==h.percentHint)return JA;const r={...e,percentHint:e.percentHint??h.percentHint};for(const k of jI)h[k]&&(r[k]??(r[k]=0),r[k]+=h[k]);return r}class $A{constructor(h,r){ZA(this,"name"),ZA(this,"values"),this.name=h,this.values=r}}class kI{constructor(h,r){ZA(this,"value"),ZA(this,"associatedToken"),this.value=h,this.associatedToken=r}}function vI(e){if(Array.isArray(e))return e;if(typeof e=="string")return function(h){const r=new H(h),k=[];for(;;){const U=$(r);if(U===void 0)return k;k.push(U)}}(e);throw new TypeError("Invalid input type "+typeof e)}function nI(e){const h=e.shift();return h instanceof J||h instanceof R||h instanceof n?function(r,k){let U;if(k instanceof J)U=L;else if(k instanceof n)U=N;else{if(!(k instanceof R))return;U=M}const d=new kI([],k);for(;;){const f=r.shift();if(f instanceof U||f===void 0)return d;r.unshift(f),d.value.push(nI(r))}}(e,h):h instanceof I?function(r,k){const U=new $A(r.value,[]);for(;;){const d=k.shift();if(d instanceof N||d===void 0)return U;k.unshift(d),U.values.push(nI(k))}}(h,e):h}function eA(e){if(e instanceof n||e instanceof N)return 6;if(e instanceof o)switch(e.value){case"*":case"/":return 4;case"+":case"-":return 2}}function og(e){return e[e.length-1]}function lg(e,h,r){const k=["+","-"].includes(e.value)?"ADDITION":"MULTIPLICATION",U=h.type===k?h.values:[h],d=r.type===k?r.values:[r];return e.value==="-"?d[0]={type:"NEGATE",value:d[0]}:e.value==="/"&&(d[0]={type:"INVERT",value:d[0]}),{type:k,values:[...U,...d]}}function sg(e){if(e.type==="ADDITION")return new CSSMathSum(...e.values.map(h=>sg(h)));if(e.type==="MULTIPLICATION")return new CSSMathProduct(...e.values.map(h=>sg(h)));if(e.type==="NEGATE")return new CSSMathNegate(sg(e.value));if(e.type==="INVERT")return new CSSMathInvert(sg(e.value));if(e instanceof kI)return kA(new $A("calc",e.value));if(e instanceof A){if(e.value==="e")return new CSSUnitValue(Math.E,"number");if(e.value==="pi")return new CSSUnitValue(Math.PI,"number");throw new SyntaxError("Invalid math expression")}return gs(e)}function kA(e){if(e.name==="min"||e.name==="max"){const k=e.values.filter(U=>!(U instanceof a||U instanceof F)).map(U=>DA(kA(new $A("calc",U))));return e.name==="min"?new CSSMathMin(...k):new CSSMathMax(...k)}if(e.name!=="calc")return null;const h=sg(function(k){const U=[],d=[];for(;k.length;){const f=k.shift();if(f instanceof s||f instanceof w||f instanceof t||f instanceof $A||f instanceof kI||f instanceof A)d.push(f);else if(f instanceof o&&["*","/","+","-"].includes(f.value)){for(;U.length&&!(og(U)instanceof n)&&eA(og(U))>eA(f);){const m=U.pop(),x=d.pop(),P=d.pop();d.push(lg(m,P,x))}U.push(f)}else if(f instanceof n)U.push(f);else if(f instanceof N){if(!U.length)return null;for(;!(og(U)instanceof n);){const m=U.pop(),x=d.pop(),P=d.pop();d.push(lg(m,P,x))}if(!(og(U)instanceof n))return null;U.pop()}else if(!(f instanceof a))return null}for(;U.length;){if(og(U)instanceof n)return null;const f=U.pop(),m=d.pop(),x=d.pop();d.push(lg(f,x,m))}return d[0]}([...e.values]));let r;try{r=DA(h)}catch{new CSSStyleSheet().insertRule("error",0)}return r instanceof CSSUnitValue?new CSSMathSum(r):r}function gs(e){return e instanceof $A&&["calc","min","max","clamp"].includes(e.name)?kA(e):e instanceof s&&e.value===0&&!e.unit?new CSSUnitValue(0,"px"):e instanceof s?new CSSUnitValue(e.value,"number"):e instanceof t?new CSSUnitValue(e.value,"percent"):e instanceof w?new CSSUnitValue(e.value,e.unit):void 0}function Ye(e){const h=function(r){const k=vI(r);for(;k[0]instanceof a;)k.shift();if(k[0]===void 0)return null;const U=nI(k);for(;k[0]instanceof a;)k.shift();return k[0]===void 0?U:null}(e);return h===null&&new CSSStyleSheet().insertRule("error",0),h instanceof s||h instanceof t||h instanceof w||h instanceof $A||new CSSStyleSheet().insertRule("error",0),h instanceof w&&ig(h.unit)===null&&new CSSStyleSheet().insertRule("error",0),gs(h)}(function(){let e=new WeakMap;function h(d){const f=[];for(let x=0;x<d.length;x++)f[x]=typeof(m=d[x])=="number"?new CSSUnitValue(m,"number"):m;var m;return f}class r{static parse(f){return f instanceof r?f:DA(Ye(f),{})}}class k extends r{constructor(f,m,x,P){super(),e.set(this,{values:h(f),operator:m,name:x||m,delimiter:P||", "})}get operator(){return e.get(this).operator}get values(){return e.get(this).values}toString(){const f=e.get(this);return`${f.name}(${f.values.join(f.delimiter)})`}}const U={CSSNumericValue:r,CSSMathValue:k,CSSUnitValue:class extends r{constructor(d,f){super(),e.set(this,{value:d,unit:f})}get value(){return e.get(this).value}set value(d){e.get(this).value=d}get unit(){return e.get(this).unit}to(d){return Dg(this,d)}toSum(...d){return _I(this,...d)}type(){return ig(e.get(this).unit)}toString(){const d=e.get(this);return`${d.value}${function(f){switch(f){case"percent":return"%";case"number":return"";default:return f.toLowerCase()}}(d.unit)}`}},CSSKeywordValue:class{constructor(d){this.value=d}toString(){return this.value.toString()}},CSSMathSum:class extends k{constructor(d){super(arguments,"sum","calc"," + ")}},CSSMathProduct:class extends k{constructor(d){super(arguments,"product","calc"," * ")}toSum(...d){return _I(this,...d)}type(){return e.get(this).values.map(d=>d.type()).reduce(XI)}},CSSMathNegate:class extends k{constructor(d){super([arguments[0]],"negate","-")}get value(){return e.get(this).values[0]}type(){return this.value.type()}},CSSMathInvert:class extends k{constructor(d){super([1,arguments[0]],"invert","calc"," / ")}get value(){return e.get(this).values[1]}type(){return function(d){const f={};for(const m of jI)f[m]=-1*d[m];return f}(e.get(this).values[1].type())}},CSSMathMax:class extends k{constructor(){super(arguments,"max")}},CSSMathMin:class extends k{constructor(){super(arguments,"min")}}};if(!window.CSS&&!Reflect.defineProperty(window,"CSS",{value:{}}))throw Error("Error installing CSSOM support");window.CSSUnitValue||["number","percent","em","ex","px","cm","mm","in","pt","pc","Q","vw","vh","vmin","vmax","rems","ch","deg","rad","grad","turn","ms","s","Hz","kHz","dppx","dpi","dpcm","fr"].forEach(d=>{if(!Reflect.defineProperty(CSS,d,{value:f=>new CSSUnitValue(f,d)}))throw Error(`Error installing CSS.${d}`)});for(let[d,f]of Object.entries(U))if(!(d in window)&&!Reflect.defineProperty(window,d,{value:f}))throw Error(`Error installing CSSOM support for ${d}`)})();const Qs="block";let eI=new WeakMap,fg=new WeakMap;const gE=["entry","exit","cover","contain","entry-crossing","exit-crossing"];function Bs(e){return e===document.scrollingElement?document:e}function wQ(e){li(e);let h=eI.get(e).animations;if(h.length===0)return;let r=e.currentTime;for(let k=0;k<h.length;k++)h[k].tickAnimation(r)}function Cs(e,h){if(!e)return null;const r=fg.get(e).sourceMeasurements,k=getComputedStyle(e);let U=r.scrollTop;return MA(h,k)==="x"&&(U=Math.abs(r.scrollLeft)),U}function Ki(e,h){const r=DA(e,h);if(r instanceof CSSUnitValue){if(r.unit==="px")return r.value;throw TypeError("Unhandled unit type "+r.unit)}throw TypeError("Unsupported value type: "+typeof e)}function li(e){if(!(e instanceof PQ))return void function(r){const k=eI.get(r);if(!k.anonymousSource)return;const U=is(k.anonymousSource,k.anonymousTarget);LB(r,U)}(e);const h=e.subject;if(!h||getComputedStyle(h).display=="none")return void LB(e,null);LB(e,mi(h))}function Es(e){return["block","inline","x","y"].includes(e)}function fi(e){const h=getComputedStyle(e);return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientWidth:e.clientWidth,clientHeight:e.clientHeight,writingMode:h.writingMode,direction:h.direction,scrollPaddingTop:h.scrollPaddingTop,scrollPaddingBottom:h.scrollPaddingBottom,scrollPaddingLeft:h.scrollPaddingLeft,scrollPaddingRight:h.scrollPaddingRight}}function pi(e,h){if(!e||!h)return;let r=0,k=0,U=h;const d=e.offsetParent;for(;U&&U!=d;)k+=U.offsetLeft,r+=U.offsetTop,U=U.offsetParent;k-=e.offsetLeft+e.clientLeft,r-=e.offsetTop+e.clientTop;const f=getComputedStyle(h);return{top:r,left:k,offsetWidth:h.offsetWidth,offsetHeight:h.offsetHeight,fontSize:f.fontSize}}function QE(e){let h=fg.get(e);h.sourceMeasurements=fi(e);for(const r of h.timelineRefs){const k=r.deref();k instanceof PQ&&(eI.get(k).subjectMeasurements=pi(e,k.subject))}h.updateScheduled||(setTimeout(()=>{for(const r of h.timelineRefs){const k=r.deref();k&&wQ(k)}h.updateScheduled=!1}),h.updateScheduled=!0)}function LB(e,h){const r=eI.get(e),k=r.source;if(k!=h){if(k){const U=fg.get(k);if(U){U.timelineRefs.delete(e);const d=Array.from(U.timelineRefs).filter(f=>f.deref()===void 0);for(const f of d)U.timelineRefs.delete(f);U.timelineRefs.size===0&&(U.disconnect(),fg.delete(k))}}if(r.source=h,h){let U=fg.get(h);if(!U){U={timelineRefs:new Set,sourceMeasurements:fi(h)},fg.set(h,U);const d=new ResizeObserver(x=>{for(const P of x)QE(r.source)});d.observe(h);for(const x of h.children)d.observe(x);const f=new MutationObserver(x=>{for(const P of x)QE(P.target)});f.observe(h,{attributes:!0,attributeFilter:["style","class"]});const m=()=>{U.sourceMeasurements.scrollLeft=h.scrollLeft,U.sourceMeasurements.scrollTop=h.scrollTop;for(const x of U.timelineRefs){const P=x.deref();P&&wQ(P)}};Bs(h).addEventListener("scroll",m),U.disconnect=()=>{d.disconnect(),f.disconnect(),Bs(h).removeEventListener("scroll",m)}}U.timelineRefs.add(new WeakRef(e))}}}function xi(e,h){let r=eI.get(e).animations;for(let k=0;k<r.length;k++)r[k].animation==h&&r.splice(k,1)}function qi(e,h,r){let k=eI.get(e).animations;for(let U=0;U<k.length;U++)if(k[U].animation==h)return;k.push({animation:h,tickAnimation:r}),queueMicrotask(()=>{wQ(e)})}class MI{constructor(h){if(eI.set(this,{source:null,axis:Qs,anonymousSource:h?h.anonymousSource:null,anonymousTarget:h?h.anonymousTarget:null,subject:null,inset:null,animations:[],subjectMeasurements:null}),LB(this,h&&h.source!==void 0?h.source:document.scrollingElement),h&&h.axis!==void 0&&h.axis!=Qs){if(!Es(h.axis))throw TypeError("Invalid axis");eI.get(this).axis=h.axis}wQ(this)}set source(h){LB(this,h),wQ(this)}get source(){return eI.get(this).source}set axis(h){if(!Es(h))throw TypeError("Invalid axis");eI.get(this).axis=h,wQ(this)}get axis(){return eI.get(this).axis}get duration(){return CSS.percent(100)}get phase(){const h=this.source;if(!h)return"inactive";let r=getComputedStyle(h);return r.display=="none"?"inactive":h==document.scrollingElement||r.overflow!="visible"&&r.overflow!="clip"?"active":"inactive"}get currentTime(){const h=this.source;if(!h||!h.isConnected||this.phase=="inactive")return null;const r=getComputedStyle(h);if(r.display==="inline"||r.display==="none")return null;const k=this.axis,U=Cs(h,k),d=function(f,m){const x=fg.get(f).sourceMeasurements,P=getComputedStyle(f).writingMode=="horizontal-tb";return m==="block"?m=P?"y":"x":m==="inline"&&(m=P?"x":"y"),m==="y"?x.scrollHeight-x.clientHeight:m==="x"?x.scrollWidth-x.clientWidth:void 0}(h,k);return d>0?CSS.percent(100*U/d):CSS.percent(100)}get __polyfill(){return!0}}function ui(e,h){let r=e.parentElement;for(;r!=null;){if(h(r))return r;r=r.parentElement}}function is(e,h){switch(e){case"root":return document.scrollingElement;case"nearest":return mi(h);case"self":return h;default:throw new TypeError("Invalid ScrollTimeline Source Type.")}}function de(e){switch(getComputedStyle(e).display){case"block":case"inline-block":case"list-item":case"table":case"table-caption":case"flow-root":case"flex":case"grid":return!0}return!1}function Ds(e){const h=getComputedStyle(e);return h.transform!="none"||h.perspective!="none"||h.willChange=="transform"||h.willChange=="perspective"||h.filter!="none"||h.willChange=="filter"||h.backdropFilter!="none"}function Ke(e){return getComputedStyle(e).position!="static"||Ds(e)}function le(e){switch(getComputedStyle(e).position){case"static":case"relative":case"sticky":return ui(e,de);case"absolute":return ui(e,Ke);case"fixed":return ui(e,Ds)}}function mi(e){if(e&&e.isConnected){for(;e=le(e);)switch(getComputedStyle(e)["overflow-x"]){case"auto":case"scroll":case"hidden":return e==document.body&&getComputedStyle(document.scrollingElement).overflow=="visible"?document.scrollingElement:e}return document.scrollingElement}}function HB(e,h){const r=eI.get(e),k=r.subjectMeasurements,U=fg.get(r.source).sourceMeasurements;return e.phase==="inactive"?null:e instanceof PQ?bi(h,U,k,r.axis,r.inset):null}function bi(e,h,r,k,U){const d=h.direction=="rtl"||h.writingMode=="vertical-rl";let f,m,x={fontSize:r.fontSize};MA(k,h)==="x"?(f=r.offsetWidth,m=r.left,x.scrollPadding=[h.scrollPaddingLeft,h.scrollPaddingRight],d&&(m+=h.scrollWidth-h.clientWidth,x.scrollPadding=[h.scrollPaddingRight,h.scrollPaddingLeft]),x.containerSize=h.clientWidth):(f=r.offsetHeight,m=r.top,x.scrollPadding=[h.scrollPaddingTop,h.scrollPaddingBottom],x.containerSize=h.clientHeight);const P=function(Xi,DE){const ve={start:0,end:0};if(!Xi)return ve;const[Ze,Ve]=[Xi.start,Xi.end].map((ks,ns)=>ks==="auto"?DE.scrollPadding[ns]==="auto"?0:parseFloat(DE.scrollPadding[ns]):Ki(ks,{percentageReference:CSS.px(DE.containerSize),fontSize:CSS.px(parseFloat(DE.fontSize))}));return{start:Ze,end:Ve}}(U,x),V=m-x.containerSize+P.end,QA=m+f-P.start,CA=V+f,YA=QA-f,OA=Math.min(CA,YA),xI=Math.max(CA,YA);let tg,$I;const Rs=f>x.containerSize-P.start-P.end;switch(e){case"cover":tg=V,$I=QA;break;case"contain":tg=OA,$I=xI;break;case"entry":tg=V,$I=OA;break;case"exit":tg=xI,$I=QA;break;case"entry-crossing":tg=V,$I=Rs?xI:OA;break;case"exit-crossing":tg=Rs?OA:xI,$I=QA}return{start:tg,end:$I}}function os(e,h){if(e instanceof PQ){const{rangeName:r,offset:k}=h;return ss(HB(e,r),k,HB(e,"cover"),e.subject)}if(e instanceof MI){const{axis:r,source:k}=e,{sourceMeasurements:U}=fg.get(k);let d;return d=MA(r,U)==="x"?U.scrollWidth-U.clientWidth:U.scrollHeight-U.clientHeight,Ki(h,{percentageReference:CSS.px(d)})/d}unsupportedTimeline(e)}function ss(e,h,r,k){if(!e||!r)return 0;let U=getComputedStyle(k);return(Ki(h,{percentageReference:CSS.px(e.end-e.start),fontSize:CSS.px(parseFloat(U.fontSize))})+e.start-r.start)/(r.end-r.start)}let PQ=class extends MI{constructor(e){super(e);const h=eI.get(this);h.subject=e&&e.subject?e.subject:void 0,e&&e.inset&&(h.inset=function(r){if(!r)return{start:0,end:0};let k;if(k=typeof r=="string"?NA(r).map(U=>{if(U==="auto")return"auto";try{return CSSNumericValue.parse(U)}catch{throw TypeError(`Could not parse inset "${r}"`)}}):Array.isArray(r)?r:[r],k.length===0||k.length>2)throw TypeError("Invalid inset");for(const U of k){if(U==="auto")continue;const d=U.type();if(d.length!==1&&d.percent!==1)throw TypeError("Invalid inset")}return{start:k[0],end:k[1]??k[0]}}(e.inset)),h.subject&&(new ResizeObserver(()=>{QE(h.source)}).observe(h.subject),new MutationObserver(()=>{QE(h.source)}).observe(h.subject,{attributes:!0,attributeFilter:["class","style"]})),li(this),h.subjectMeasurements=pi(h.source,h.subject),wQ(this)}get source(){return li(this),eI.get(this).source}set source(e){throw new Error("Cannot set the source of a view timeline")}get subject(){return eI.get(this).subject}get axis(){return eI.get(this).axis}get currentTime(){const e=Cs(this.source,this.axis);if(e==null)return null;const h=HB(this,"cover");if(!h)return null;const r=(e-h.start)/(h.end-h.start);return CSS.percent(100*r)}get startOffset(){return CSS.px(HB(this,"cover").start)}get endOffset(){return CSS.px(HB(this,"cover").end)}};const fe=document.getAnimations,pe=window.Element.prototype.getAnimations,xe=window.Element.prototype.animate,ts=window.Animation;class TQ{constructor(){this.state="pending",this.nativeResolve=this.nativeReject=null,this.promise=new Promise((h,r)=>{this.nativeResolve=h,this.nativeReject=r})}resolve(h){this.state="resolved",this.nativeResolve(h)}reject(h){this.state="rejected",this.promise.catch(()=>{}),this.nativeReject(h)}}function YB(e){e.readyPromise=new TQ,requestAnimationFrame(()=>{var h;(((h=e.timeline)==null?void 0:h.currentTime)??null)!==null&&(BE(e),e.pendingTask!=="play"||e.startTime===null&&e.holdTime===null?e.pendingTask==="pause"&&es(e):as(e))})}function ws(){return new DOMException("The user aborted a request","AbortError")}function aQ(e,h){if(h===null)return h;if(typeof h!="number")throw new DOMException(`Unexpected value: ${h}. Cannot convert to CssNumberish`,"InvalidStateError");const r=e.rangeDuration??100,k=xg(e),U=k?r*h/k:0;return CSS.percent(U)}function uA(e,h){if(e.timeline){if(h===null)return h;if(h.unit==="percent"){const r=e.rangeDuration??100,k=xg(e);return h.value*k/r}throw new DOMException("CSSNumericValue must be a percentage for progress based animations.","NotSupportedError")}{if(h==null||typeof h=="number")return h;const r=h.to("ms");if(r)return r.value;throw new DOMException("CSSNumericValue must be either a number or a time value for time based animations.","InvalidStateError")}}function as(e){const h=uA(e,e.timeline.currentTime);if(e.holdTime!=null)ng(e),e.animation.playbackRate==0?e.startTime=h:(e.startTime=h-e.holdTime/e.animation.playbackRate,e.holdTime=null);else if(e.startTime!==null&&e.pendingPlaybackRate!==null){const r=(h-e.startTime)*e.animation.playbackRate;ng(e);const k=e.animation.playbackRate;k==0?(e.holdTime=null,e.startTime=h):e.startTime=h-r/k}e.readyPromise&&e.readyPromise.state=="pending"&&e.readyPromise.resolve(e.proxy),pg(e,!1,!1),qg(e),e.pendingTask=null}function es(e){const h=uA(e,e.timeline.currentTime);e.startTime!=null&&e.holdTime==null&&(e.holdTime=(h-e.startTime)*e.animation.playbackRate),ng(e),e.startTime=null,e.readyPromise.resolve(e.proxy),pg(e,!1,!1),qg(e),e.pendingTask=null}function hs(e){if(!e.finishedPromise||e.finishedPromise.state!="pending"||e.proxy.playState!="finished")return;e.finishedPromise.resolve(e.proxy),e.animation.pause();const h=new CustomEvent("finish",{detail:{currentTime:e.proxy.currentTime,timelineTime:e.proxy.timeline.currentTime}});Object.defineProperty(h,"currentTime",{get:function(){return this.detail.currentTime}}),Object.defineProperty(h,"timelineTime",{get:function(){return this.detail.timelineTime}}),requestAnimationFrame(()=>{queueMicrotask(()=>{e.animation.dispatchEvent(h)})})}function OQ(e){return e.pendingPlaybackRate!==null?e.pendingPlaybackRate:e.animation.playbackRate}function ng(e){e.pendingPlaybackRate!==null&&(e.animation.playbackRate=e.pendingPlaybackRate,e.pendingPlaybackRate=null)}function cs(e){if(!e.timeline)return null;const h=uA(e,e.timeline.currentTime);if(h===null||e.startTime===null)return null;let r=(h-e.startTime)*e.animation.playbackRate;return r==-0&&(r=0),r}function pg(e,h,r){if(!e.timeline)return;let k=h?uA(e,e.proxy.currentTime):cs(e);if(k&&e.startTime!=null&&!e.proxy.pending){const U=OQ(e),d=xg(e);let f=e.previousCurrentTime;U>0&&k>=d&&e.previousCurrentTime!=null?((f===null||f<d)&&(f=d),e.holdTime=h?k:f):U<0&&k<=0?((f==null||f>0)&&(f=0),e.holdTime=h?k:f):U!=0&&(h&&e.holdTime!==null&&(e.startTime=function(m,x){if(!m.timeline)return null;const P=uA(m,m.timeline.currentTime);return P==null?null:P-x/m.animation.playbackRate}(e,e.holdTime)),e.holdTime=null)}qg(e),e.previousCurrentTime=uA(e,e.proxy.currentTime),e.proxy.playState=="finished"?(e.finishedPromise||(e.finishedPromise=new TQ),e.finishedPromise.state=="pending"&&(r?hs(e):Promise.resolve().then(()=>{hs(e)}))):(e.finishedPromise&&e.finishedPromise.state=="resolved"&&(e.finishedPromise=new TQ),e.animation.playState!="paused"&&e.animation.pause())}function xg(e){const h=function(k){const U=k.proxy.effect.getTiming();return k.normalizedTiming||U}(e),r=h.delay+h.endDelay+h.iterations*h.duration;return Math.max(0,r)}function qg(e){if(e.timeline)if(e.startTime!==null){const h=e.timeline.currentTime;if(h==null)return;Pi(e,(uA(e,h)-e.startTime)*e.animation.playbackRate)}else e.holdTime!==null&&Pi(e,e.holdTime)}function Pi(e,h){const r=e.timeline,k=e.animation.playbackRate,U=r.currentTime&&r.currentTime.value==(k<0?0:100)?k<0?.001:-.001:0;e.animation.currentTime=h+U}function Ti(e,h){if(!e.timeline)return;const r=e.proxy.playState=="paused"&&e.proxy.pending;let k=!1,U=uA(e,e.proxy.currentTime);OQ(e)==0&&U==null&&(e.holdTime=0),U==null&&(e.autoAlignStartTime=!0),(e.proxy.playState==="finished"||r)&&(e.holdTime=null,e.startTime=null,e.autoAlignStartTime=!0),e.holdTime&&(e.startTime=null),e.pendingTask&&(e.pendingTask=null,k=!0),(e.holdTime!==null||e.autoAlignStartTime||r||e.pendingPlaybackRate!==null)&&(e.readyPromise&&!k&&(e.readyPromise=null),qg(e),e.readyPromise||YB(e),e.pendingTask="play",qi(e.timeline,e.animation,Oi.bind(e.proxy)),pg(e,!1,!1))}function Oi(e){const h=gA.get(this);if(!h)return;if(e==null)return void(h.proxy.playState!=="paused"&&h.animation.playState!="idle"&&h.animation.cancel());BE(h),h.pendingTask&&requestAnimationFrame(()=>{h.pendingTask!=="play"||h.startTime===null&&h.holdTime===null?h.pendingTask==="pause"&&es(h):as(h)});const r=this.playState;if(r=="running"||r=="finished"){const k=uA(h,e);Pi(h,(k-uA(h,this.startTime))*this.playbackRate),pg(h,!1,!1)}}function ys(e){e.specifiedTiming=null}let gA=new WeakMap;window.addEventListener("pagehide",e=>{gA=new WeakMap},!1);let Gs=new WeakMap;function BE(e){if(!e.autoAlignStartTime||!e.timeline||!e.timeline.currentTime||e.proxy.playState==="idle"||e.proxy.playState==="paused"&&e.holdTime!==null)return;const h=e.rangeDuration;let r,k;try{r=CSS.percent(100*function(d){if(!d.animationRange)return 0;const f=d.animationRange.start==="normal"?Ss(d.timeline):d.animationRange.start;return os(d.timeline,f)}(e))}catch(d){r=CSS.percent(0),e.animationRange.start="normal",console.warn("Exception when calculating start offset",d)}try{k=CSS.percent(100*(1-function(d){if(!d.animationRange)return 0;const f=d.animationRange.end==="normal"?rs(d.timeline):d.animationRange.end;return 1-os(d.timeline,f)}(e)))}catch(d){k=CSS.percent(100),e.animationRange.end="normal",console.warn("Exception when calculating end offset",d)}e.rangeDuration=k.value-r.value;const U=OQ(e);e.startTime=uA(e,U>=0?r:k),e.holdTime=null,e.rangeDuration!==h&&ys(e)}function CE(e){throw new Error("Unsupported timeline class")}function Ss(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(0)}:e instanceof MI?CSS.percent(0):void CE()}function rs(e){return e instanceof ViewTimeline?{rangeName:"cover",offset:CSS.percent(100)}:e instanceof MI?CSS.percent(100):void CE()}function qe(e,h){if(!h)return{start:"normal",end:"normal"};const r={start:Ss(e),end:rs(e)};if(e instanceof ViewTimeline){const k=NA(h),U=[],d=[];if(k.forEach(f=>{if(gE.includes(f))U.push(f);else try{d.push(CSSNumericValue.parse(f))}catch{throw TypeError(`Could not parse range "${h}"`)}}),U.length>2||d.length>2||d.length==1)throw TypeError("Invalid time range or unsupported time range format.");return U.length&&(r.start.rangeName=U[0],r.end.rangeName=U.length>1?U[1]:U[0]),d.length>1&&(r.start.offset=d[0],r.end.offset=d[1]),r}if(e instanceof MI){const k=h.split(" ");if(k.length!=2)throw TypeError("Invalid time range or unsupported time range format.");return r.start=CSSNumericValue.parse(k[0]),r.end=CSSNumericValue.parse(k[1]),r}CE()}function EE(e,h,r){if(!h||h==="normal")return"normal";if(e instanceof ViewTimeline){let k="cover",U=r==="start"?CSS.percent(0):CSS.percent(100);if(h instanceof Object)h.rangeName!==void 0&&(k=h.rangeName),h.offset!==void 0&&(U=h.offset);else{const d=NA(h);d.length===1?gE.includes(d[0])?k=d[0]:U=DA(CSSNumericValue.parse(d[0]),{}):d.length===2&&(k=d[0],U=DA(CSSNumericValue.parse(d[1]),{}))}if(!gE.includes(k))throw TypeError("Invalid range name");return{rangeName:k,offset:U}}if(e instanceof MI)return CSSNumericValue.parse(h);CE()}class iE{constructor(h,r,k={}){const U=r instanceof MI,d=h instanceof ts?h:new ts(h,U?void 0:r);Gs.set(d,this),gA.set(this,{animation:d,timeline:U?r:void 0,playState:U?"idle":null,readyPromise:null,finishedPromise:null,startTime:null,holdTime:null,rangeDuration:null,previousCurrentTime:null,autoAlignStartTime:!1,pendingPlaybackRate:null,pendingTask:null,specifiedTiming:null,normalizedTiming:null,effect:null,animationRange:U?qe(r,k["animation-range"]):null,proxy:this})}get effect(){const h=gA.get(this);return h.timeline?(h.effect||(h.effect=function(r){const k=r.animation.effect,U=k.updateTiming,d={apply:function(P){k.getTiming();const V=P.apply(k);if(r.timeline){const QA=r.duration??100;V.localTime=aQ(r,V.localTime),V.endTime=aQ(r,V.endTime),V.activeDuration=aQ(r,V.activeDuration);const CA=xg(r),YA=V.iterations?(CA-V.delay-V.endDelay)/V.iterations:0;V.duration=CA?CSS.percent(QA*YA/CA):CSS.percent(0),r.timeline.currentTime===void 0&&(V.localTime=null)}return V}},f={apply:function(P,V){if(r.specifiedTiming)return r.specifiedTiming;r.specifiedTiming=P.apply(k);let QA,CA=Object.assign({},r.specifiedTiming);if(CA.duration===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");return(CA.duration===null||CA.duration==="auto"||r.autoDurationEffect)&&r.timeline&&(r.autoDurationEffect=!0,CA.delay=0,CA.endDelay=0,QA=CA.iterations?1e5:0,CA.duration=CA.iterations?(QA-CA.delay-CA.endDelay)/CA.iterations:0,CA.duration<0&&(CA.duration=0,CA.endDelay=QA-CA.delay),U.apply(k,[CA])),r.normalizedTiming=CA,r.specifiedTiming}},m={apply:function(P,V,QA){if(QA&&QA.length){if(r.timeline&&QA[0]){const CA=QA[0],YA=CA.duration;if(YA===1/0)throw TypeError("Effect duration cannot be Infinity when used with Scroll Timelines");if(CA.iterations===1/0)throw TypeError("Effect iterations cannot be Infinity when used with Scroll Timelines");YA!==void 0&&YA!=="auto"&&(r.autoDurationEffect=null)}r.specifiedTiming&&P.apply(k,[r.specifiedTiming]),P.apply(k,QA),ys(r)}}},x=new Proxy(k,{get:function(P,V){const QA=P[V];return typeof QA=="function"?QA.bind(k):QA},set:function(P,V,QA){return P[V]=QA,!0}});return x.getComputedTiming=new Proxy(k.getComputedTiming,d),x.getTiming=new Proxy(k.getTiming,f),x.updateTiming=new Proxy(k.updateTiming,m),x}(h)),h.effect):h.animation.effect}set effect(h){const r=gA.get(this);r.animation.effect=h,r.effect=null,r.autoDurationEffect=null}get timeline(){const h=gA.get(this);return h.timeline||h.animation.timeline}set timeline(h){const r=gA.get(this),k=this.timeline;if(k==h)return;const U=this.playState,d=this.currentTime;let f,m=xg(r);f=d===null?null:m===0?0:uA(r,d)/m;const x=k instanceof MI,P=h instanceof MI,V=this.pending;if(x&&xi(r.timeline,r.animation),P)return r.timeline=h,ng(r),r.autoAlignStartTime=!0,r.startTime=null,r.holdTime=null,U!=="running"&&U!=="finished"||(r.readyPromise&&r.readyPromise.state!=="resolved"||YB(r),r.pendingTask="play",qi(r.timeline,r.animation,Oi.bind(this))),U==="paused"&&f!==null&&(r.holdTime=f*m),V&&(r.readyPromise&&r.readyPromise.state!="resolved"||YB(r),r.pendingTask=U=="paused"?"pause":"play"),r.startTime!==null&&(r.holdTime=null),void pg(r,!1,!1);if(r.animation.timeline!=h)throw TypeError("Unsupported timeline: "+h);if(xi(r.timeline,r.animation),r.timeline=null,x)switch(d!==null&&(r.animation.currentTime=f*xg(r)),U){case"paused":r.animation.pause();break;case"running":case"finished":r.animation.play()}}get startTime(){const h=gA.get(this);return h.timeline?aQ(h,h.startTime):h.animation.startTime}set startTime(h){const r=gA.get(this);if(h=uA(r,h),!r.timeline)return void(r.animation.startTime=h);r.autoAlignStartTime=!1,uA(r,r.timeline.currentTime)==null&&r.startTime!=null&&(r.holdTime=null,qg(r));const k=uA(r,this.currentTime);ng(r),r.startTime=h,r.startTime!==null&&r.animation.playbackRate!=0?r.holdTime=null:r.holdTime=k,r.pendingTask&&(r.pendingTask=null,r.readyPromise.resolve(this)),pg(r,!0,!1),qg(r)}get currentTime(){const h=gA.get(this);return h.timeline?h.holdTime!=null?aQ(h,h.holdTime):aQ(h,cs(h)):h.animation.currentTime}set currentTime(h){const r=gA.get(this);r.timeline?(function(k,U){if(U==null&&k.currentTime!==null)throw new TypeError;U=uA(k,U),k.autoAlignStartTime=!1,k.holdTime!==null||k.startTime===null||k.timeline.phase==="inactive"||k.animation.playbackRate===0?k.holdTime=U:k.startTime=uA(k,k.timeline.currentTime)-U/k.animation.playbackRate,k.timeline.phase==="inactive"&&(k.startTime=null),k.previousCurrentTime=null}(r,h),r.pendingTask=="pause"&&(r.holdTime=uA(r,h),ng(r),r.startTime=null,r.pendingTask=null,r.readyPromise.resolve(this)),pg(r,!0,!1)):r.animation.currentTime=h}get playbackRate(){return gA.get(this).animation.playbackRate}set playbackRate(h){const r=gA.get(this);if(!r.timeline)return void(r.animation.playbackRate=h);r.pendingPlaybackRate=null;const k=this.currentTime;r.animation.playbackRate=h,k!==null&&(this.currentTime=k)}get playState(){const h=gA.get(this);if(!h.timeline)return h.animation.playState;const r=uA(h,this.currentTime);return r===null&&h.startTime===null&&h.pendingTask==null?"idle":h.pendingTask=="pause"||h.startTime===null&&h.pendingTask!="play"?"paused":r!=null&&(h.animation.playbackRate>0&&r>=xg(h)||h.animation.playbackRate<0&&r<=0)?"finished":"running"}get rangeStart(){var h;return((h=gA.get(this).animationRange)==null?void 0:h.start)??"normal"}set rangeStart(h){const r=gA.get(this);if(!r.timeline)return r.animation.rangeStart=h;r.timeline instanceof MI&&(r.animationRange.start=EE(r.timeline,h,"start"),BE(r),qg(r))}get rangeEnd(){var h;return((h=gA.get(this).animationRange)==null?void 0:h.end)??"normal"}set rangeEnd(h){const r=gA.get(this);if(!r.timeline)return r.animation.rangeEnd=h;r.timeline instanceof MI&&(r.animationRange.end=EE(r.timeline,h,"end"),BE(r),qg(r))}get replaceState(){return gA.get(this).animation.pending}get pending(){const h=gA.get(this);return h.timeline?!!h.readyPromise&&h.readyPromise.state=="pending":h.animation.pending}finish(){const h=gA.get(this);if(!h.timeline)return void h.animation.finish();const r=OQ(h),k=xg(h);if(r==0)throw new DOMException("Cannot finish Animation with a playbackRate of 0.","InvalidStateError");if(r>0&&k==1/0)throw new DOMException("Cannot finish Animation with an infinite target effect end.","InvalidStateError");ng(h);const U=r<0?0:k;this.currentTime=aQ(h,U);const d=uA(h,h.timeline.currentTime);h.startTime===null&&d!==null&&(h.startTime=d-U/h.animation.playbackRate),h.pendingTask=="pause"&&h.startTime!==null&&(h.holdTime=null,h.pendingTask=null,h.readyPromise.resolve(this)),h.pendingTask=="play"&&h.startTime!==null&&(h.pendingTask=null,h.readyPromise.resolve(this)),pg(h,!0,!0)}play(){const h=gA.get(this);h.timeline?Ti(h):h.animation.play()}pause(){const h=gA.get(this);h.timeline?this.playState!="paused"&&(h.animation.currentTime===null&&(h.autoAlignStartTime=!0),h.pendingTask=="play"?h.pendingTask=null:h.readyPromise=null,h.readyPromise||YB(h),h.pendingTask="pause",qi(h.timeline,h.animation,Oi.bind(h.proxy))):h.animation.pause()}reverse(){const h=gA.get(this),r=OQ(h),k=uA(h,this.currentTime),U=xg(h)==1/0,d=r!=0&&(r<0||k>0||!U);if(!h.timeline||!d)return d&&(h.pendingPlaybackRate=-OQ(h)),void h.animation.reverse();if(h.timeline.phase=="inactive")throw new DOMException("Cannot reverse an animation with no active timeline","InvalidStateError");this.updatePlaybackRate(-r),Ti(h)}updatePlaybackRate(h){const r=gA.get(this);if(r.pendingPlaybackRate=h,!r.timeline)return void r.animation.updatePlaybackRate(h);const k=this.playState;if(!r.readyPromise||r.readyPromise.state!="pending")switch(k){case"idle":case"paused":ng(r);break;case"finished":const U=uA(r,r.timeline.currentTime),d=U!==null?(U-r.startTime)*r.animation.playbackRate:null;r.startTime=h==0?U:U!=null&&d!=null?(U-d)/h:null,ng(r),pg(r,!1,!1),qg(r);break;default:Ti(r)}}persist(){gA.get(this).animation.persist()}get id(){return gA.get(this).animation.id}set id(h){gA.get(this).animation.id=h}cancel(){const h=gA.get(this);h.timeline?(this.playState!="idle"&&(function(r){r.pendingTask&&(r.pendingTask=null,ng(r),r.readyPromise.reject(ws()),YB(r),r.readyPromise.resolve(r.proxy))}(h),h.finishedPromise&&h.finishedPromise.state=="pending"&&h.finishedPromise.reject(ws()),h.finishedPromise=new TQ,h.animation.cancel()),h.startTime=null,h.holdTime=null,xi(h.timeline,h.animation)):h.animation.cancel()}get onfinish(){return gA.get(this).animation.onfinish}set onfinish(h){gA.get(this).animation.onfinish=h}get oncancel(){return gA.get(this).animation.oncancel}set oncancel(h){gA.get(this).animation.oncancel=h}get onremove(){return gA.get(this).animation.onremove}set onremove(h){gA.get(this).animation.onremove=h}get finished(){const h=gA.get(this);return h.timeline?(h.finishedPromise||(h.finishedPromise=new TQ),h.finishedPromise.promise):h.animation.finished}get ready(){const h=gA.get(this);return h.timeline?(h.readyPromise||(h.readyPromise=new TQ,h.readyPromise.resolve(this)),h.readyPromise.promise):h.animation.ready}addEventListener(h,r,k){gA.get(this).animation.addEventListener(h,r,k)}removeEventListener(h,r,k){gA.get(this).animation.removeEventListener(h,r,k)}dispatchEvent(h){gA.get(this).animation.dispatchEvent(h)}}function ue(e,h){const r=h.timeline;r instanceof MI&&delete h.timeline;const k=xe.apply(this,[e,h]),U=new iE(k,r);return r instanceof MI&&(k.pause(),gA.get(U).animationRange={start:EE(r,h.rangeStart,"start"),end:EE(r,h.rangeEnd,"end")},U.play()),U}function Fs(e){for(let h=0;h<e.length;++h){let r=Gs.get(e[h]);r&&(e[h]=r)}return e}function me(e){return Fs(pe.apply(this,[e]))}function be(e){return Fs(fe.apply(this,[e]))}const AI={IDENTIFIER:/[\w\\\@_-]+/g,WHITE_SPACE:/\s*/g,TIME:/^[0-9]+(s|ms)/,SCROLL_TIMELINE:/scroll-timeline\s*:([^;}]+)/,SCROLL_TIMELINE_NAME:/scroll-timeline-name\s*:([^;}]+)/,SCROLL_TIMELINE_AXIS:/scroll-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE:/view-timeline\s*:([^;}]+)/,VIEW_TIMELINE_NAME:/view-timeline-name\s*:([^;}]+)/,VIEW_TIMELINE_AXIS:/view-timeline-axis\s*:([^;}]+)/,VIEW_TIMELINE_INSET:/view-timeline-inset\s*:([^;}]+)/,ANIMATION_TIMELINE:/animation-timeline\s*:([^;}]+)/,ANIMATION_TIME_RANGE:/animation-range\s*:([^;}]+)/,ANIMATION_NAME:/animation-name\s*:([^;}]+)/,ANIMATION:/animation\s*:([^;}]+)/,ANONYMOUS_SCROLL_TIMELINE:/scroll\(([^)]*)\)/,ANONYMOUS_VIEW_TIMELINE:/view\(([^)]*)\)/},XQ=["block","inline","x","y"],Pe=["nearest","root","self"],$g=new class{constructor(){this.cssRulesWithTimelineName=[],this.nextAnonymousTimelineNameIndex=0,this.anonymousScrollTimelineOptions=new Map,this.anonymousViewTimelineOptions=new Map,this.sourceSelectorToScrollTimeline=[],this.subjectSelectorToViewTimeline=[],this.keyframeNamesSelectors=new Map}transpileStyleSheet(e,h,r){const k={sheetSrc:e,index:0,name:r};for(;k.index<k.sheetSrc.length&&(this.eatWhitespace(k),!(k.index>=k.sheetSrc.length));){if(this.lookAhead("/*",k)){for(;this.lookAhead("/*",k);)this.eatComment(k),this.eatWhitespace(k);continue}const U=this.parseQualifiedRule(k);U&&(h?this.parseKeyframesAndSaveNameMapping(U,k):this.handleScrollTimelineProps(U,k))}return k.sheetSrc}getAnimationTimelineOptions(e,h){for(let r=this.cssRulesWithTimelineName.length-1;r>=0;r--){const k=this.cssRulesWithTimelineName[r];try{if(h.matches(k.selector)&&(!k["animation-name"]||k["animation-name"]==e))return{"animation-timeline":k["animation-timeline"],"animation-range":k["animation-range"]}}catch{}}return null}getAnonymousScrollTimelineOptions(e,h){const r=this.anonymousScrollTimelineOptions.get(e);return r?{anonymousSource:r.source,anonymousTarget:h,source:is(r.source??"nearest",h),axis:r.axis?r.axis:"block"}:null}getScrollTimelineOptions(e,h){const r=this.getAnonymousScrollTimelineOptions(e,h);if(r)return r;for(let k=this.sourceSelectorToScrollTimeline.length-1;k>=0;k--){const U=this.sourceSelectorToScrollTimeline[k];if(U.name==e){const d=this.findPreviousSiblingOrAncestorMatchingSelector(h,U.selector);if(d)return{source:d,...U.axis?{axis:U.axis}:{}}}}return null}findPreviousSiblingOrAncestorMatchingSelector(e,h){let r=e;for(;r;){if(r.matches(h))return r;r=r.previousElementSibling||r.parentElement}return null}getAnonymousViewTimelineOptions(e,h){const r=this.anonymousViewTimelineOptions.get(e);return r?{subject:h,axis:r.axis?r.axis:"block",inset:r.inset?r.inset:"auto"}:null}getViewTimelineOptions(e,h){const r=this.getAnonymousViewTimelineOptions(e,h);if(r)return r;for(let k=this.subjectSelectorToViewTimeline.length-1;k>=0;k--){const U=this.subjectSelectorToViewTimeline[k];if(U.name==e){const d=this.findPreviousSiblingOrAncestorMatchingSelector(h,U.selector);if(d)return{subject:d,axis:U.axis,inset:U.inset}}}return null}handleScrollTimelineProps(e,h){if(e.selector.includes("@keyframes"))return;const r=e.block.contents.includes("animation-name:"),k=e.block.contents.includes("animation-timeline:"),U=e.block.contents.includes("animation:");if(this.saveSourceSelectorToScrollTimeline(e),this.saveSubjectSelectorToViewTimeline(e),!k&&!r&&!U)return;let d=[],f=[],m=!1;k&&(d=this.extractScrollTimelineNames(e.block.contents)),r&&(f=this.extractMatches(e.block.contents,AI.ANIMATION_NAME)),k&&r||(U&&this.extractMatches(e.block.contents,AI.ANIMATION).forEach(x=>{const P=this.extractAnimationName(x);P&&k&&f.push(P),k&&(this.hasDuration(x)||(this.hasAutoDuration(x)&&(e.block.contents=e.block.contents.replace("auto"," ")),e.block.contents=e.block.contents.replace(x," 1s "+x),m=!0))}),m&&this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,h)),this.saveRelationInList(e,d,f)}saveSourceSelectorToScrollTimeline(e){const h=e.block.contents.includes("scroll-timeline:"),r=e.block.contents.includes("scroll-timeline-name:"),k=e.block.contents.includes("scroll-timeline-axis:");if(!h&&!r)return;let U=[];if(h){const f=this.extractMatches(e.block.contents,AI.SCROLL_TIMELINE);for(const m of f){const x=this.split(m);let P={selector:e.selector,name:""};x.length==1?P.name=x[0]:x.length==2&&(XQ.includes(x[0])?(P.axis=x[0],P.name=x[1]):(P.axis=x[1],P.name=x[0])),U.push(P)}}if(r){const f=this.extractMatches(e.block.contents,AI.SCROLL_TIMELINE_NAME);for(let m=0;m<f.length;m++)if(m<U.length)U[m].name=f[m];else{let x={selector:e.selector,name:f[m]};U.push(x)}}let d=[];if(k){const f=this.extractMatches(e.block.contents,AI.SCROLL_TIMELINE_AXIS);if(d=f.filter(m=>XQ.includes(m)),d.length!=f.length)throw new Error("Invalid axis")}for(let f=0;f<U.length;f++)d.length&&(U[f].axis=d[f%U.length]);this.sourceSelectorToScrollTimeline.push(...U)}saveSubjectSelectorToViewTimeline(e){const h=e.block.contents.includes("view-timeline:"),r=e.block.contents.includes("view-timeline-name:"),k=e.block.contents.includes("view-timeline-axis:"),U=e.block.contents.includes("view-timeline-inset:");if(!h&&!r)return;let d=[];if(h){const x=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE);for(let P of x){const V=this.split(P);let QA={selector:e.selector,name:"",inset:null};V.length==1?QA.name=V[0]:V.length==2&&(XQ.includes(V[0])?(QA.axis=V[0],QA.name=V[1]):(QA.axis=V[1],QA.name=V[0])),d.push(QA)}}if(r){const x=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE_NAME);for(let P=0;P<x.length;P++)if(P<d.length)d[P].name=x[P];else{let V={selector:e.selector,name:x[P],inset:null};d.push(V)}}let f=[],m=[];if(U&&(f=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE_INSET)),k){const x=this.extractMatches(e.block.contents,AI.VIEW_TIMELINE_AXIS);if(m=x.filter(P=>XQ.includes(P)),m.length!=x.length)throw new Error("Invalid axis")}for(let x=0;x<d.length;x++)f.length&&(d[x].inset=f[x%d.length]),m.length&&(d[x].axis=m[x%d.length]);this.subjectSelectorToViewTimeline.push(...d)}hasDuration(e){return e.split(" ").filter(h=>{return r=h,AI.TIME.exec(r);var r}).length>=1}hasAutoDuration(e){return e.split(" ").filter(h=>h==="auto").length>=1}saveRelationInList(e,h,r){let k=[];e.block.contents.includes("animation-range:")&&(k=this.extractMatches(e.block.contents,AI.ANIMATION_TIME_RANGE));const U=Math.max(h.length,r.length,k.length);for(let d=0;d<U;d++)this.cssRulesWithTimelineName.push({selector:e.selector,"animation-timeline":h[d%h.length],...r.length?{"animation-name":r[d%r.length]}:{},...k.length?{"animation-range":k[d%k.length]}:{}})}extractScrollTimelineNames(e){const h=AI.ANIMATION_TIMELINE.exec(e)[1].trim(),r=[];return h.split(",").map(k=>k.trim()).forEach(k=>{if(function(U){return(U.startsWith("scroll")||U.startsWith("view"))&&U.includes("(")}(k)){const U=this.saveAnonymousTimelineName(k);r.push(U)}else r.push(k)}),r}saveAnonymousTimelineName(e){const h=":t"+this.nextAnonymousTimelineNameIndex++;return e.startsWith("scroll(")?this.anonymousScrollTimelineOptions.set(h,this.parseAnonymousScrollTimeline(e)):this.anonymousViewTimelineOptions.set(h,this.parseAnonymousViewTimeline(e)),h}parseAnonymousScrollTimeline(e){const h=AI.ANONYMOUS_SCROLL_TIMELINE.exec(e);if(!h)return null;const r=h[1],k={};return r.split(" ").forEach(U=>{XQ.includes(U)?k.axis=U:Pe.includes(U)&&(k.source=U)}),k}parseAnonymousViewTimeline(e){const h=AI.ANONYMOUS_VIEW_TIMELINE.exec(e);if(!h)return null;const r=h[1],k={};return r.split(" ").forEach(U=>{XQ.includes(U)?k.axis=U:k.inset=k.inset?`${k.inset} ${U}`:U}),k}extractAnimationName(e){return this.findMatchingEntryInContainer(e,this.keyframeNamesSelectors)}findMatchingEntryInContainer(e,h){const r=e.split(" ").filter(k=>h.has(k));return r?r[0]:null}parseIdentifier(e){AI.IDENTIFIER.lastIndex=e.index;const h=AI.IDENTIFIER.exec(e.sheetSrc);if(!h)throw this.parseError(e,"Expected an identifier");return e.index+=h[0].length,h[0]}parseKeyframesAndSaveNameMapping(e,h){if(e.selector.startsWith("@keyframes")){const r=this.replaceKeyframesAndGetMapping(e,h);e.selector.split(" ").forEach((k,U)=>{U>0&&this.keyframeNamesSelectors.set(k,r)})}}replaceKeyframesAndGetMapping(e,h){function r(x){return gE.some(P=>x.startsWith(P))}const k=e.block.contents,U=function(x){let P=0,V=-1,QA=-1;const CA=[];for(let YA=0;YA<x.length;YA++)x[YA]=="{"?P++:x[YA]=="}"&&P--,P==1&&x[YA]!="{"&&x[YA]!="}"&&V==-1&&(V=YA),P==2&&x[YA]=="{"&&(QA=YA,CA.push({start:V,end:QA}),V=QA=-1);return CA}(k);if(U.length==0)return new Map;const d=new Map;let f=!1;const m=[];m.push(k.substring(0,U[0].start));for(let x=0;x<U.length;x++){const P=k.substring(U[x].start,U[x].end);let V=[];P.split(",").forEach(QA=>{const CA=QA.split(" ").map(OA=>OA.trim()).filter(OA=>OA!="").join(" "),YA=d.size;d.set(YA,CA),V.push(`${YA}%`),r(CA)&&(f=!0)}),m.push(V.join(",")),x==U.length-1?m.push(k.substring(U[x].end)):m.push(k.substring(U[x].end,U[x+1].start))}return f?(e.block.contents=m.join(""),this.replacePart(e.block.startIndex,e.block.endIndex,e.block.contents,h),d):new Map}parseQualifiedRule(e){const h=e.index,r=this.parseSelector(e).trim();if(r)return{selector:r,block:this.eatBlock(e),startIndex:h,endIndex:e.index}}removeEnclosingDoubleQuotes(e){let h=e[0]=='"'?1:0,r=e[e.length-1]=='"'?e.length-1:e.length;return e.substring(h,r)}assertString(e,h){if(e.sheetSrc.substr(e.index,h.length)!=h)throw this.parseError(e,`Did not find expected sequence ${h}`);e.index+=h.length}replacePart(e,h,r,k){if(k.sheetSrc=k.sheetSrc.slice(0,e)+r+k.sheetSrc.slice(h),k.index>=h){const U=k.index-h;k.index=e+r.length+U}}eatComment(e){this.assertString(e,"/*"),this.eatUntil("*/",e,!0),this.assertString(e,"*/")}eatBlock(e){const h=e.index;this.assertString(e,"{");let r=1;for(;r!=0;)this.lookAhead("/*",e)?this.eatComment(e):(e.sheetSrc[e.index]==="{"?r++:e.sheetSrc[e.index]==="}"&&r--,this.advance(e));const k=e.index;return{startIndex:h,endIndex:k,contents:e.sheetSrc.slice(h,k)}}advance(e){if(e.index++,e.index>e.sheetSrc.length)throw this.parseError(e,"Advanced beyond the end")}parseError(e,h){return Error(`(${e.name?e.name:"<anonymous file>"}): ${h}`)}eatUntil(e,h,r=!1){const k=h.index;for(;!this.lookAhead(e,h);)this.advance(h);return r&&(h.sheetSrc=h.sheetSrc.slice(0,k)+" ".repeat(h.index-k)+h.sheetSrc.slice(h.index)),h.sheetSrc.slice(k,h.index)}parseSelector(e){let h=e.index;if(this.eatUntil("{",e),h===e.index)throw Error("Empty selector");return e.sheetSrc.slice(h,e.index)}eatWhitespace(e){AI.WHITE_SPACE.lastIndex=e.index;const h=AI.WHITE_SPACE.exec(e.sheetSrc);h&&(e.index+=h[0].length)}lookAhead(e,h){return h.sheetSrc.substr(h.index,e.length)==e}peek(e){return e.sheetSrc[e.index]}extractMatches(e,h,r=","){return h.exec(e)[1].trim().split(r).map(k=>k.trim())}split(e){return e.split(" ").map(h=>h.trim()).filter(h=>h!="")}};function Te(e,h,r,k,U,d){const f=fi(h),m=pi(h,r);return ss(bi(e,f,m,k,U),d,bi("cover",f,m,k,U),r)}function Oe(e,h,r){const k=$g.getAnimationTimelineOptions(h,r);if(!k)return null;const U=k["animation-timeline"];if(!U)return null;let d=$g.getScrollTimelineOptions(U,r)||$g.getViewTimelineOptions(U,r);return d?(d.subject&&function(f,m){const x=mi(m.subject),P=m.axis||m.axis;function V(CA,YA){let OA=null;for(const[xI,tg]of CA)if(xI==100*YA.offset){if(tg=="from")OA=0;else if(tg=="to")OA=100;else{const $I=tg.split(" ");OA=$I.length==1?parseFloat($I[0]):100*Te($I[0],x,m.subject,P,m.inset,CSS.percent(parseFloat($I[1])))}break}return OA}const QA=$g.keyframeNamesSelectors.get(f.animationName);if(QA&&QA.size){const CA=[];f.effect.getKeyframes().forEach(OA=>{const xI=V(QA,OA);xI!==null&&xI>=0&&xI<=100&&(OA.offset=xI/100,CA.push(OA))});const YA=CA.sort((OA,xI)=>OA.offset<xI.offset?-1:OA.affset>xI.offset?1:0);f.effect.setKeyframes(YA)}}(e,d),{timeline:d.source?new MI(d):new PQ(d),animOptions:k}):null}function Xe(){if(CSS.supports("animation-timeline: --works"))return!0;(function(){function h(k){if(k.innerHTML.trim().length===0||"aphrodite"in k.dataset)return;let U=$g.transpileStyleSheet(k.innerHTML,!0);U=$g.transpileStyleSheet(U,!1),k.innerHTML=U}function r(k){k.type!="text/css"&&k.rel!="stylesheet"||!k.href||new URL(k.href,document.baseURI).origin==location.origin&&fetch(k.getAttribute("href")).then(async U=>{const d=await U.text();let f=$g.transpileStyleSheet(d,!0);if(f=$g.transpileStyleSheet(d,!1),f!=d){const m=new Blob([f],{type:"text/css"}),x=URL.createObjectURL(m);k.setAttribute("href",x)}})}new MutationObserver(k=>{for(const U of k)for(const d of U.addedNodes)d instanceof HTMLStyleElement&&h(d),d instanceof HTMLLinkElement&&r(d)}).observe(document.documentElement,{childList:!0,subtree:!0}),document.querySelectorAll("style").forEach(k=>h(k)),document.querySelectorAll("link").forEach(k=>r(k))})();const e=CSS.supports;CSS.supports=h=>(h=h.replaceAll(/(animation-timeline|scroll-timeline(-(name|axis))?|view-timeline(-(name|axis|inset))?|timeline-scope)\s*:/g,"--supported-property:"),e(h)),window.addEventListener("animationstart",h=>{h.target.getAnimations().filter(r=>r.animationName===h.animationName).forEach(r=>{const k=Oe(r,r.animationName,h.target);if(k)if(!k.timeline||r instanceof iE)r.timeline=k.timeline;else{const U=new iE(r,k.timeline,k.animOptions);r.pause(),U.play()}})})}(function(){if(!Xe()){if(!Reflect.defineProperty(window,"ScrollTimeline",{value:MI}))throw Error("Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window");if(!Reflect.defineProperty(window,"ViewTimeline",{value:PQ}))throw Error("Error installing ViewTimeline polyfill: could not attach ViewTimeline to window");if(!Reflect.defineProperty(Element.prototype,"animate",{value:ue}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's animate to DOM Element");if(!Reflect.defineProperty(window,"Animation",{value:iE}))throw Error("Error installing Animation constructor.");if(!Reflect.defineProperty(Element.prototype,"getAnimations",{value:me}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to DOM Element");if(!Reflect.defineProperty(document,"getAnimations",{value:be}))throw Error("Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to document")}})()})();const rF=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),FF=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{Ec as BatchedParticleRenderer,As as Builder,MC as ByteBuffer,qQ as ConstantColor,rA as ConstantValue,kg as Matrix4,UB as MeshBVH,z0 as MotionController,GD as PROJECT_DOCUMENT_KEY,di as ParticleSystem,X as RenderMode,Vs as SIZE_PREFIX_LENGTH,kE as TrailParticle,OI as Vector4,tF as WorkerBase,FF as __viteBrowserExternal,RD as applyDef,nD as applyOver,Zs as attachNeedleIdsToLoadedGltf,sy as bundler,Dc as createNoise4D,kD as createOverApplyState,p0 as deriveInstanceId,wc as enableProjectDocumentInspection,Gc as evaluateProjectDocument,v0 as fetchProfile,ec as getProjectDocumentInspection,Yc as index,sF as index$1,yF as index$2,et as isProjectDocument,Xs as joinPath,sc as reportProjectIssues,mB as resolveDocumentRemoteSrc,Mt as resolveMaterialEntity,rF as scrollTimeline,Cr as spark_module,UE as splitPath,N0 as v5};
|