phy-engine
Version:
JavaScript 3D Physics for three.js
1 lines • 3.64 MB
JavaScript
!function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).JOLT={})}(this,(function(A){"use strict";var I="undefined"!=typeof document?document.currentScript:null;const g=new Map,C=new Map,B={LAYER_NON_MOVING:0,LAYER_MOVING:1,LAYER_ALL:1,Ar:null,ArPos:{},ms:0,deltaTime:0,invDelta:0,physicsSystem:null,bodyInterface:null,world:null,groupFilter:null,delta:0,tmpStep:0,gravity:null,key:[],reflow:{ray:[],point:{},contact:{},velocity:{},stat:{fps:0,delta:0,ms:0}}},Q={clear:()=>{g.clear(),C.clear()},byName:A=>g.has(A)?g.get(A):null,byContact:A=>C.has(A),clearContact:()=>{C.clear()},addContact:(A,I={})=>{Q.byContact(A)||C.set(A,I)},removeContact:A=>{C.delete(A)},add:A=>{if("ray"!==A.type&&"contact"!==A.type)switch(A.type){case"joint":B.physicsSystem.AddConstraint(A);break;case"body":case"solid":B.bodyInterface.AddBody(A.GetID(),Jolt.EActivation_Activate)}g.set(A.name,A)},remove:A=>{if("ray"!==A.type&&"contact"!==A.type)switch(A.type){case"terrain":A.release();break;case"joint":B.physicsSystem.RemoveConstraint(A);break;case"body":case"solid":B.bodyInterface.RemoveBody(A.GetID()),B.bodyInterface.DestroyBody(A.GetID())}g.delete(A.name)},stats:()=>{},extends:()=>{Jolt.Vec3.prototype.set=function(A,I,g){return this.Set(A,I,g),this},Jolt.Vec3.prototype.clone=function(A){return new Jolt.RVec3(A.GetX(),A.GetY(),A.GetZ())},Jolt.Vec3.prototype.fromArray=function(A,I){return I=I||0,this.Set(A[I],A[I+1],A[I+2]),this},Jolt.Vec3.prototype.toArray=function(A,I){let g=void 0!==A;if(g||(A=[]),A[I=I||0]=this.GetX(),A[I+1]=this.GetY(),A[I+2]=this.GetZ(),!g)return A},Jolt.RVec3.prototype.set=function(A,I,g){return this.Set(A,I,g),this},Jolt.RVec3.prototype.clone=function(A){return new Jolt.RVec3(A.GetX(),A.GetY(),A.GetZ())},Jolt.RVec3.prototype.fromArray=function(A,I){return I=I||0,this.Set(A[I],A[I+1],A[I+2]),this},Jolt.RVec3.prototype.toArray=function(A,I){let g=void 0!==A;if(g||(A=[]),A[I=I||0]=this.GetX(),A[I+1]=this.GetY(),A[I+2]=this.GetZ(),!g)return A},Jolt.Quat.prototype.set=function(A,I,g,C){return this.Set(A,I,g,C),this},Jolt.Quat.prototype.fromArray=function(A,I){return I=I||0,this.Set(A[I],A[I+1],A[I+2],A[I+3]),this},Jolt.Quat.prototype.toArray=function(A,I){let g=void 0!==A;if(g||(A=[]),A[I=I||0]=this.GetX(),A[I+1]=this.GetY(),A[I+2]=this.GetZ(),A[I+3]=this.GetW(),!g)return A},Jolt.Quat.prototype.identity=function(){return this.Set(0,0,0,1),this},Jolt.Mat44.prototype.toArray=function(A,I){return[this.GetTranslation().toArray(),this.GetQuaternion().toArray()]}}},E=4e3,i=1e3,o=4e3,t=100,D=100,e={bodyFull:14,body:8,joint:16,contact:1,ray:11,character:16,vehicle:72,solver:128};class S{constructor(){this.id=0,this.list=[],this.type="item",this.Utils=null}reset(){let A=this.list.length;for(;A--;)this.dispose(this.list[A]);this.list=[],this.id=0}byName(A){return this.Utils.byName(A)}setName(A={}){let I=void 0!==A.name?A.name:this.type+this.id++;return A.id=this.remove(I,!0),A.name=I,I}addToWorld(A,I=-1){this.Utils.add(A),-1!==I?this.list[I]=A:this.list.push(A)}remove(A,I){let g=this.byName(A);return g?this.clear(g,I):-1}clear(A,I){let g=this.list.indexOf(A);return-1===g||I?this.list[g]=null:this.list.splice(g,1),this.dispose(A),g}dispose(A){null!==A&&this.Utils.remove(A)}add(A={}){}set(A={}){}step(A,I){}}const y=Math.PI,a=y/180,p=180/y,K=Number.EPSILON,s=.5*y,k={luminousPowers:{"110000 lm (1000W)":11e4,"3500 lm (300W)":3500,"1700 lm (100W)":1700,"800 lm (60W)":800,"400 lm (40W)":400,"180 lm (25W)":180,"20 lm (4W)":20,Off:0},luminousIrradiances:{"0.0001 lx (Moonless Night)":1e-4,"0.002 lx (Night Airglow)":.002,"0.5 lx (Full Moon)":.5,"3.4 lx (City Twilight)":3.4,"50 lx (Living Room)":50,"100 lx (Very Overcast)":100,"350 lx (Office Room)":350,"400 lx (Sunrise/Sunset)":400,"1000 lx (Overcast)":1e3,"18000 lx (Daylight)":18e3,"50000 lx (Direct Sun)":5e4},exposure:A=>Math.pow(A,5),candelaToLumens:A=>4*A*Math.PI,lumensToCandela:A=>A/(4*Math.PI),todeg:p,torad:a,toFixed:(A,I=3)=>1*A.toFixed(I),toRound:(A,I=3)=>Math.trunc(A),clamp:(A,I=0,g=1)=>A=(A=A<I?I:A)>g?g:A,clampA:(A,I,g)=>Math.max(I,Math.min(g,A)),smoothstep:(A,I,g)=>A*(g=-2*(g=k.clamp(g))*g*g+3*g*g)+I*(1-g),remap:(A,I,g,C,B)=>C+(A-I)*(B-C)/(g-I),lerp:(A,I,g)=>(1-g)*A+g*I,damp:(A,I,g,C)=>k.lerp(A,I,1-Math.exp(-g*C)),nearAngle:(A,I,g=!1)=>I+Math.atan2(Math.sin(A-I),Math.cos(A-I))*(g?p:1),unwrapDeg:A=>A-360*Math.floor((A+180)/360),unwrapRad:A=>Math.atan2(Math.sin(A),Math.cos(A)),nearEquals:(A,I,g=1e-4)=>Math.abs(A-I)<=g,autoSize:(A=[1,1,1],I="box")=>{1===A.length&&(A[1]=A[0]);let g=A[0],C=A[1];return"sphere"===I&&(A=[g,g,g]),"cylinder"!==I&&"wheel"!==I&&"capsule"!==I||(A=[g,C,g]),"cone"!==I&&"pyramid"!==I||(A=[g,C,g]),2===A.length&&(A[2]=A[0]),A},shuffle:A=>A.map((A=>({value:A,sort:Math.random()}))).sort(((A,I)=>A.sort-I.sort)).map((({value:A})=>A)),randomSign:()=>Math.random()<.5?-1:1,randSpread:A=>A*(.5-Math.random()),rand:(A=0,I=1)=>A+Math.random()*(I-A),randInt:(A,I)=>A+Math.floor(Math.random()*(I-A+1)),randIntUnic:(A,I,g)=>{for(var C=[];C.length<g;){var B=k.randInt(A,I);-1===C.indexOf(B)&&C.push(B)}return C},fromTransform:(A,I,g,C=[0,0,0,1],B=!1)=>{let Q=k.composeMatrixArray(A,I),E=k.composeMatrixArray(g,C);return B&&(Q=k.invertMatrixArray(Q)),Q=k.multiplyMatrixArray(Q,E),[Q[12],Q[13],Q[14]]},fromTransformToQ:(A,I,g=!1)=>{let C=k.composeMatrixArray(A,I),B=k.decomposeFullMatrixArray(C).q;return g&&(B=k.quatInvert(B)),B},lerpTransform:(A,I,g)=>{let C=A[0],B=A[1],Q=I[0],E=I[1];return Q=k.lerpArray(C,Q,g),E=k.slerpQuatArray(B,E,g),[Q,E]},composeMatrixArray:(A,I,g=[1,1,1])=>{const C=I[0],B=I[1],Q=I[2],E=I[3],i=C+C,o=B+B,t=Q+Q,D=C*i,e=C*o,S=C*t,y=B*o,a=B*t,p=Q*t,K=E*i,s=E*o,k=E*t,r=g[0],w=g[1],M=g[2];return[(1-(y+p))*r,(e+k)*r,(S-s)*r,0,(e-k)*w,(1-(D+p))*w,(a+K)*w,0,(S+s)*M,(a-K)*M,(1-(D+y))*M,0,A[0],A[1],A[2],1]},multiplyMatrixArray:(A,I)=>{const g=A,C=I,B=[],Q=g[0],E=g[4],i=g[8],o=g[12],t=g[1],D=g[5],e=g[9],S=g[13],y=g[2],a=g[6],p=g[10],K=g[14],s=g[3],k=g[7],r=g[11],w=g[15],M=C[0],n=C[4],c=C[8],h=C[12],G=C[1],J=C[5],U=C[9],N=C[13],_=C[2],l=C[6],F=C[10],Y=C[14],R=C[3],q=C[7],d=C[11],L=C[15];return B[0]=Q*M+E*G+i*_+o*R,B[4]=Q*n+E*J+i*l+o*q,B[8]=Q*c+E*U+i*F+o*d,B[12]=Q*h+E*N+i*Y+o*L,B[1]=t*M+D*G+e*_+S*R,B[5]=t*n+D*J+e*l+S*q,B[9]=t*c+D*U+e*F+S*d,B[13]=t*h+D*N+e*Y+S*L,B[2]=y*M+a*G+p*_+K*R,B[6]=y*n+a*J+p*l+K*q,B[10]=y*c+a*U+p*F+K*d,B[14]=y*h+a*N+p*Y+K*L,B[3]=s*M+k*G+r*_+w*R,B[7]=s*n+k*J+r*l+w*q,B[11]=s*c+k*U+r*F+w*d,B[15]=s*h+k*N+r*Y+w*L,B},invertMatrixArray:A=>{const I=A,g=I[0],C=I[1],B=I[2],Q=I[3],E=I[4],i=I[5],o=I[6],t=I[7],D=I[8],e=I[9],S=I[10],y=I[11],a=I[12],p=I[13],K=I[14],s=I[15],k=e*K*t-p*S*t+p*o*y-i*K*y-e*o*s+i*S*s,r=a*S*t-D*K*t-a*o*y+E*K*y+D*o*s-E*S*s,w=D*p*t-a*e*t+a*i*y-E*p*y-D*i*s+E*e*s,M=a*e*o-D*p*o-a*i*S+E*p*S+D*i*K-E*e*K,n=g*k+C*r+B*w+Q*M;if(0===n)return[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];const c=1/n;return I[0]=k*c,I[1]=(p*S*Q-e*K*Q-p*B*y+C*K*y+e*B*s-C*S*s)*c,I[2]=(i*K*Q-p*o*Q+p*B*t-C*K*t-i*B*s+C*o*s)*c,I[3]=(e*o*Q-i*S*Q-e*B*t+C*S*t+i*B*y-C*o*y)*c,I[4]=r*c,I[5]=(D*K*Q-a*S*Q+a*B*y-g*K*y-D*B*s+g*S*s)*c,I[6]=(a*o*Q-E*K*Q-a*B*t+g*K*t+E*B*s-g*o*s)*c,I[7]=(E*S*Q-D*o*Q+D*B*t-g*S*t-E*B*y+g*o*y)*c,I[8]=w*c,I[9]=(a*e*Q-D*p*Q-a*C*y+g*p*y+D*C*s-g*e*s)*c,I[10]=(E*p*Q-a*i*Q+a*C*t-g*p*t-E*C*s+g*i*s)*c,I[11]=(D*i*Q-E*e*Q-D*C*t+g*e*t+E*C*y-g*i*y)*c,I[12]=M*c,I[13]=(D*p*B-a*e*B+a*C*S-g*p*S-D*C*K+g*e*K)*c,I[14]=(a*i*B-E*p*B-a*C*o+g*p*o+E*C*K-g*i*K)*c,I[15]=(E*e*B-D*i*B+D*C*o-g*e*o-E*C*S+g*i*S)*c,I},matrixArrayDeterminant:A=>{const I=A,g=I[0],C=I[4],B=I[8],Q=I[12],E=I[1],i=I[5],o=I[9],t=I[13],D=I[2],e=I[6],S=I[10],y=I[14];return I[3]*(+Q*o*e-B*t*e-Q*i*S+C*t*S+B*i*y-C*o*y)+I[7]*(+g*o*y-g*t*S+Q*E*S-B*E*y+B*t*D-Q*o*D)+I[11]*(+g*t*e-g*i*y-Q*E*e+C*E*y+Q*i*D-C*t*D)+I[15]*(-B*i*D-g*o*e+g*i*S+B*E*e-C*E*S+C*o*D)},decomposeMatrixArray:A=>[A[12],A[13],A[14]],decomposeFullMatrixArray:A=>{const I=A;let g=k.lengthArray([I[0],I[1],I[2]]);const C=k.lengthArray([I[4],I[5],I[6]]),B=k.lengthArray([I[8],I[9],I[10]]);k.matrixArrayDeterminant(A)<0&&(g=-g);let Q=[...A];const E=1/g,i=1/C,o=1/B;Q[0]*=E,Q[1]*=E,Q[2]*=E,Q[4]*=i,Q[5]*=i,Q[6]*=i,Q[8]*=o,Q[9]*=o,Q[10]*=o;let t=k.quatFromRotationMatrix(Q);return{p:[A[12],A[13],A[14]],q:t,s:[g,C,B]}},applyTransformArray:(A,I,g,C=[1,1,1])=>{const B=k.composeMatrixArray(I,g,C),Q=A[0],E=A[1],i=A[2],o=1/(B[3]*Q+B[7]*E+B[11]*i+B[15]);return[(B[0]*Q+B[4]*E+B[8]*i+B[12])*o,(B[1]*Q+B[5]*E+B[9]*i+B[13])*o,(B[2]*Q+B[6]*E+B[10]*i+B[14])*o]},slerpQuatArray:(A,I,g)=>{if(0===g)return A;if(1===g)return I;let C=[...A];const B=A[0],Q=A[1],E=A[2],i=A[3],o=I[0],t=I[1],D=I[2],e=I[3];let S=i*e+B*o+Q*t+E*D;if(S<0?(C=[-o,-t,-D,-e],S=-S):C=[...I],S>=1)return A;const y=1-S*S;if(y<=K){const A=1-g;return C[3]=A*i+g*C[3],C[0]=A*B+g*C[0],C[1]=A*Q+g*C[1],C[2]=A*E+g*C[2],k.quatNomalize(C)}const a=Math.sqrt(y),p=Math.atan2(a,S),s=Math.sin((1-g)*p)/a,r=Math.sin(g*p)/a;return C[3]=i*s+C[3]*r,C[0]=B*s+C[0]*r,C[1]=Q*s+C[1]*r,C[2]=E*s+C[2]*r,C},toLocalQuatArray:(A=[0,0,0],I)=>{let g=k.quatFromEuler(A),C=k.quatInvert(I.quaternion.toArray());return k.quatMultiply(C,g)},quatFromRotationMatrix:A=>{let I=[0,0,0,1];const g=A,C=g[0],B=g[4],Q=g[8],E=g[1],i=g[5],o=g[9],t=g[2],D=g[6],e=g[10],S=C+i+e;if(S>0){const A=.5/Math.sqrt(S+1);I[3]=.25/A,I[0]=(D-o)*A,I[1]=(Q-t)*A,I[2]=(E-B)*A}else if(C>i&&C>e){const A=2*Math.sqrt(1+C-i-e);I[3]=(D-o)/A,I[0]=.25*A,I[1]=(B+E)/A,I[2]=(Q+t)/A}else if(i>e){const A=2*Math.sqrt(1+i-C-e);I[3]=(Q-t)/A,I[0]=(B+E)/A,I[1]=.25*A,I[2]=(o+D)/A}else{const A=2*Math.sqrt(1+e-C-i);I[3]=(E-B)/A,I[0]=(Q+t)/A,I[1]=(o+D)/A,I[2]=.25*A}return I},quatFromEuler:(A=[0,0,0],I=!0)=>{const g=Math.cos,C=Math.sin,B=I?a:1,Q=A[0]*B*.5,E=A[1]*B*.5,i=A[2]*B*.5,o=g(Q),t=g(E),D=g(i),e=C(Q),S=C(E),y=C(i);return[e*t*D+o*S*y,o*S*D-e*t*y,o*t*y+e*S*D,o*t*D-e*S*y]},quatFromAxis:(A=[0,0,0],I,g=!0)=>{const C=.5*I*(g?a:1),B=Math.sin(C);return[A[0]*B,A[1]*B,A[2]*B,Math.cos(C)]},quatNomalize:A=>{let I=k.lengthArray(A);return 0===I?[0,0,0,1]:(I=1/I,k.scaleArray(A,I,4))},quatInvert:A=>[-A[0],-A[1],-A[2],A[3]],quatMultiply:(A,I)=>{const g=A[0],C=A[1],B=A[2],Q=A[3],E=I[0],i=I[1],o=I[2],t=I[3];return[g*t+Q*E+C*o-B*i,C*t+Q*i+B*E-g*o,B*t+Q*o+g*i-C*E,Q*t-g*E-C*i-B*o]},quatToAxis:A=>{let I=2*Math.acos(A[3]);const g=Math.sqrt(1-A[3]*A[3]);return g<1e-4?[1,0,0]:[A[0]/g,A[1]/g,A[2]/g,I]},eulerFromMatrix:A=>{const I=A[0],g=A[4],C=A[8];A[1];const B=A[5],Q=A[9];A[2];const E=A[6],i=A[10];let o=[0,0,0];return o[1]=Math.asin(k.clamp(C,-1,1)),Math.abs(C)<.9999999?(o[0]=Math.atan2(-Q,i),o[2]=Math.atan2(-g,I)):(o[0]=Math.atan2(E,B),o[2]=0),o},angleTo:(A,I)=>2*Math.acos(Math.abs(k.clamp(k.dotArray(A,I),-1,1))),fixedArray:(A,I)=>{let g=A.length,C=[];for(;g--;)C[g]=k.toFixed(A[g],I);return C},getSize:A=>.001*A.byteLength+"kb",perpendicularArray:A=>{const I=Math.sqrt(A[0]*A[0]+A[1]*A[1]+A[2]*A[2]);let g=Math.acos(A[1]/I);const C=Math.atan2(A[2],A[0]);g>s?g-=s:g+=s;return[I*Math.sin(g)*Math.cos(C),I*Math.cos(g),I*Math.sin(g)*Math.sin(C)]},crossArray:(A,I)=>{const g=A[0],C=A[1],B=A[2],Q=I[0],E=I[1],i=I[2];return[C*i-B*E,B*Q-g*i,g*E-C*Q]},applyQuaternion:(A,I)=>{const g=A[0],C=A[1],B=A[2],Q=I[0],E=I[1],i=I[2],o=I[3],t=2*(E*B-i*C),D=2*(i*g-Q*B),e=2*(Q*C-E*g);return[g+o*t+E*e-i*D,C+o*D+i*t-Q*e,B+o*e+Q*D-E*t]},nullArray:(A,I,g)=>{let C=0;for(;g--;)C+=A[I+g];return C},equalArray:(A,I)=>{let g=A.length;for(;g--;)if(A[g]!==I[g])return!1;return!0},lerpArray:(A,I,g)=>{if(0===g)return A;if(1===g)return I;let C=A.length,B=[];for(;C--;)B[C]=A[C],B[C]+=(I[C]-B[C])*g;return B},zeroArray:(A,I=0,g)=>{for(g=g??A.length;g--;)A[I+g]=0;return A},lengthArray:A=>{let I=A.length,g=0;for(;I--;)g+=A[I]*A[I];return Math.sqrt(g)},dotArray:(A,I)=>{let g=A.length,C=0;for(;g--;)C+=A[g]*I[g];return C},addArray:(A,I,g)=>{g=g??A.length;let C=[];for(;g--;)C[g]=A[g]+I[g];return C},subArray:(A,I,g)=>{g=g??A.length;let C=[];for(;g--;)C[g]=A[g]-I[g];return C},mulArray:(A,I,g)=>{if(I instanceof Array){let C=[];for(g=g??A.length;g--;)C[g]=A[g]*I[g];return C}return A.map((A=>A*I))},worldscale:(A,I)=>A.map((A=>A*I)),divArray:(A,I,g)=>k.mulArray(A,1/I,g),scaleArray:(A,I,g)=>k.mulArray(A,I,g),fillArray:(A,I,g=0,C)=>{for(C=C??A.length;C--;)I[g+C]=A[C]},copyArray:(A,I)=>{},cloneArray:A=>[...A],distanceArray:(A,I=[0,0,0])=>k.lengthArray(k.subArray(A,I)),normalizeArray:A=>k.divArray(A,k.lengthArray(A)||1),normalArray:(A,I=[0,0,0])=>k.normalizeArray(k.subArray(I,A)),getCenter:(A,I)=>(A.computeBoundingBox(),A.boundingBox.getCenter(I)),getVolume:(A,I,g=null)=>{let C=1,B=I;switch(A){case"sphere":C=4*Math.PI*B[0]*B[0]*B[0]/3;break;case"cone":C=Math.PI*B[0]*(.5*B[1])*2;break;case"box":C=.5*B[0]*8*(.5*B[1])*(.5*B[2]);break;case"cylinder":C=Math.PI*B[0]*B[0]*(.5*B[1])*2;break;case"capsule":C=4*Math.PI*B[0]*B[0]*B[0]/3+Math.PI*B[0]*B[0]*(.5*B[1])*2;break;case"convex":case"mesh":C=k.getConvexVolume(g)}return C},getConvexVolume:A=>{let I,g=A.length/3,C=[0,0,0],B=[0,0,0];for(;g--;)I=3*g,A[I]<C[0]?C[0]=A[I]:A[I]>B[0]&&(B[0]=A[I]),A[I+1]<C[1]?C[1]=A[I+1]:A[I+1]>B[1]&&(B[1]=A[I+1]),A[I+2]<C[2]?C[2]=A[I+2]:A[I+2]>B[2]&&(B[2]=A[I+2]);let Q=[B[0]-C[0],B[1]-C[1],B[2]-C[2]];return.5*Q[0]*8*(.5*Q[1])*(.5*Q[2])},massFromDensity:(A,I)=>A*I,densityFromMass:(A,I)=>A/I,toNonIndexed:A=>A.index?A.clone().toNonIndexed():A,getIndex:(A,I)=>!A.index||I?null:A.index.array||null,getSameVertex:A=>{const I=A.getAttribute("position"),g=I.array,C=[],B=[],Q={};new THREE.Vector3;let E,i=0;k.getHash(A);let o,t,D=!1,e=0;for(let A=0;A<I.count;A++){i=3*A,o={x:g[i],y:g[i+1],z:g[i+2],id:A},D=!1,E=C.length;for(let I=0;I<E;I++)t=C[I],o.x===t.x&&o.y===t.y&&o.z===t.z&&(D=!0,Q[A]=t.id);D||(o.id=e++,C.push(o),B.push([o.x,o.y,o.z]))}return[B,Q]},getVertex:(A,I)=>{let g=A.attributes.position.array;return I&&A.index&&(g=(A=A.clone().toNonIndexed()).attributes.position.array),g},getNormal:A=>A.attributes.normal.array,getFaces:A=>{let I=[];if(A.index){let g=A.getIndex();for(let A=0;A<g.count;A+=3)I.push([g.getX(A),g.getX(A+1),g.getX(A+2)])}else{let g=A.getAttribute("position").count;for(let A=0;A<g;A+=3)I.push([A,A+1,A+2])}return I},getConnectedFaces:A=>{const I=[];let g,C,B,Q,E,i,o,t=A.length,D=t;for(;D--;)for(C=A[D],g=t;g--;)g!==D&&(B=A[g],Q=C.filter((A=>B.includes(A))),Q.length>1&&(o=[],E=[...C],i=E.indexOf(Q[0]),E.splice(i,1),i=E.indexOf(Q[1]),E.splice(i,1),o.push(E[0]),E=[...B],i=E.indexOf(Q[0]),E.splice(i,1),i=E.indexOf(Q[1]),E.splice(i,1),o.push(E[0]),I.push(o)));return I},reduce:A=>{},barycentric:(A,I)=>{},solve:(A,I)=>{},getHash:(A,I=1e-4)=>{I=Math.max(I,Number.EPSILON);const g={},C={},B=A.getAttribute("position"),Q=B.count,E=B.array,i=.5*I,o=Math.log10(1/I),t=Math.pow(10,o),D=i*t;let e;for(let A=0;A<Q;A++){e=3*A;let I=`${~~(E[e]*t+D)},${~~(E[e+1]*t+D)},${~~(E[e+2]*t+D)}`;g[I]?g[I].push(A):g[I]=[A]}let S=0;for(let A in g)C[S++]=g[A];return C}},r=k;class w extends S{constructor(){super(),this.Utils=Q,this.type="body",this.itype="body",this.num=e[this.type],this.full=!1,this.v=new Jolt.RVec3,this.q=new Jolt.Quat,this.v2=new Jolt.RVec3,this.q2=new Jolt.Quat}setFull(A){this.num=e[A?"bodyFull":"body"],this.full=A}step(){const A=B.Ar,I=B.ArPos[this.itype];let g,C,Q,E,i,o,t=this.list.length;for(;t--;)g=this.list[t],g&&(C=I+t*this.num,g.lockPos&&B.bodyInterface.MoveKinematic(g.GetID(),g.GetPosition(),g.GetRotation(),B.deltaTime),A[C]=g.IsActive()?1:0,Q=g.GetPosition(),E=g.GetRotation(),Q.toArray(A,C+1),E.toArray(A,C+4),this.full?(i=g.GetLinearVelocity(),o=g.GetAngularVelocity(),i.toArray(A,C+8),o.toArray(A,C+11),1===A[C]&&(A[C]=9.8*i.Length())):g.getVelocity&&(i=g.GetLinearVelocity().toArray(),o=g.GetAngularVelocity().toArray(),B.reflow.velocity[g.name]=[...i,...o]))}shape(A={}){let I,g,C,B,Q=null,E=A.type||"box",i=A.size||[1,1,1],o=.01,t=null;switch(E){case"plane":i=[300,1,300],B=new Jolt.ConvexHullShapeSettings;let E=[.5*i[0],0,.5*i[2],.5*i[0],0,.5*-i[2],.5*-i[0],0,.5*-i[2],.5*-i[0],0,.5*i[2]];for(I=4;I--;)g=3*I,B.mPoints.push_back(this.v.fromArray(E,g));Q=B.Create().Get();break;case"box":Q=new Jolt.BoxShape(this.v.set(.5*i[0],.5*i[1],.5*i[2]),o,t);break;case"sphere":Q=new Jolt.SphereShape(i[0],t);break;case"cylinder":Q=new Jolt.CylinderShape(.5*i[1],i[0],o,t);break;case"capsule":Q=new Jolt.CapsuleShape(.5*i[1],i[0],o,t);break;case"particle":Q=new Jolt.SphereShape(A.pSize||.05,t);break;case"convex":for(B=new Jolt.ConvexHullShapeSettings,I=Math.floor(A.v.length/3),C=0;I--;)g=3*C,B.mPoints.push_back(this.v.fromArray(A.v,g)),C++;Q=B.Create().Get();break;case"mesh":let D=new Jolt.TriangleList,e=A.v,S=Math.floor(e.length/3);for(D.resize(S),I=S/3,C=0;I--;){g=9*C;let A=D.at(C),I=A.get_mV(0),B=A.get_mV(1),Q=A.get_mV(2);I.x=e[g+0],I.y=e[g+1],I.z=e[g+2],B.x=e[g+3],B.y=e[g+4],B.z=e[g+5],Q.x=e[g+6],Q.y=e[g+7],Q.z=e[g+8],C++}Q=new Jolt.MeshShapeSettings(D,t).Create().Get()}return A.density&&Q.SetDensity,Q.volume=r.getVolume(E,i,A.v),Q}shapeSetting(A={}){let I,g,C,B=null,Q=A.type||"box",E=A.size||[1,1,1],i=null;switch(Q){case"box":B=new Jolt.BoxShapeSettings(this.v.set(.5*E[0],.5*E[1],.5*E[2]),0,i);break;case"sphere":B=new Jolt.SphereShapeSettings(E[0],i);break;case"cylinder":B=new Jolt.CylinderShapeSettings(.5*E[1],E[0],0,i);break;case"capsule":B=new Jolt.CapsuleShapeSettings(.5*E[1],E[0],0,i);break;case"convex":for(B=new Jolt.ConvexHullShapeSettings,I=Math.floor(A.v.length/3),C=0;I--;)g=3*C,B.mPoints.push_back(this.v.fromArray(A.v,g)),C++;break;case"mesh":let Q=new Jolt.TriangleList,o=A.v,t=Math.floor(o.length/3);for(Q.resize(t),I=t/3,C=0;I--;){g=9*C;let A=Q.at(C),I=A.get_mV(0),B=A.get_mV(1),E=A.get_mV(2);I.x=o[g+0],I.y=o[g+1],I.z=o[g+2],B.x=o[g+3],B.y=o[g+4],B.z=o[g+5],E.x=o[g+6],E.y=o[g+7],E.z=o[g+8],C++}B=new Jolt.MeshShapeSettings(Q,i)}return B.volume=r.getVolume(Q,E,A.v),B}add(A={}){let I,g=this.setName(A),C="body"===this.type?A.kinematic?Jolt.EMotionType_Kinematic:Jolt.EMotionType_Dynamic:Jolt.EMotionType_Static,Q="body"===this.type?B.LAYER_MOVING:B.LAYER_NON_MOVING,E=0;switch(void 0!==A.move&&(Q=A.move?B.LAYER_MOVING:B.LAYER_NON_MOVING),this.v.fromArray(A.pos||[0,0,0]),this.q.fromArray(A.quat||[0,0,0,1]),A.type){case"null":I=new Jolt.BodyCreationSettings(this.shape({type:"sphere",size:[.01]}),this.v.fromArray(A.pos||[0,0,0]),this.q.fromArray(A.quat||[0,0,0,1]),C,Q);break;case"compound":let g,B,o=new Jolt.StaticCompoundShapeSettings;for(var i=0;i<A.shapes.length;i++)g=A.shapes[i],B=this.shapeSetting(g),E+=B.volume,o.AddShape(this.v2.fromArray(g.pos||[0,0,0]),this.q2.fromArray(g.quat||[0,0,0,1]),B);I=new Jolt.BodyCreationSettings(o.Create().Get(),this.v.fromArray(A.pos||[0,0,0]),this.q.fromArray(A.quat||[0,0,0,1]),C,Q),Jolt.destroy(o);break;default:A.shapeType&&(A.type=A.shapeType);let t=this.shape(A);E=t.volume,I=new Jolt.BodyCreationSettings(t,this.v.fromArray(A.pos||[0,0,0]),this.q.fromArray(A.quat||[0,0,0,1]),C,Q)}if(A.density&&(A.mass=r.massFromDensity(A.density||0,E)),A.mass&&(I.mOverrideMassProperties=1,I.mMassPropertiesOverride.mMass=A.mass),A.massCenter&&console.log(I.mMassPropertiesOverride),A.inertia&&(I.mOverrideMassProperties=1,I.mMassPropertiesOverride.mInertia.PostScaled(this.v.fromArray(A.inertia))),A.linearFactor||A.angularFactor){let g=0;A.linearFactor?(A.linearFactor[0]>0&&(g|=Jolt.EAllowedDOFs_TranslationX),A.linearFactor[1]>0&&(g|=Jolt.EAllowedDOFs_TranslationY),A.linearFactor[2]>0&&(g|=Jolt.EAllowedDOFs_TranslationZ)):g|=Jolt.EAllowedDOFs_TranslationX|Jolt.EAllowedDOFs_TranslationY|Jolt.EAllowedDOFs_TranslationZ,A.angularFactor?(A.angularFactor[0]>0&&(g|=Jolt.EAllowedDOFs_RotationX),A.angularFactor[1]>0&&(g|=Jolt.EAllowedDOFs_RotationY),A.angularFactor[2]>0&&(g|=Jolt.EAllowedDOFs_RotationZ)):g|=Jolt.EAllowedDOFs_RotationX|Jolt.EAllowedDOFs_RotationY|Jolt.EAllowedDOFs_RotationZ,I.mAllowedDOFs=g}void 0!==A.motionQuality&&(I.mMotionQuality=A.motionQuality),void 0!==A.useCCD&&(I.mMotionQuality=1),void 0!==A.maxLinear&&(I.mMaxLinearVelocity=A.maxLinear),void 0!==A.maxAngular&&(I.mMaxAngularVelocity=A.maxAngular),void 0!==A.noGravity&&(I.mGravityFactor=A.noGravity?0:1),void 0!==A.gravityScale&&(I.mGravityFactor=A.gravityScale),void 0!==A.kinematic&&(I.mAllowDynamicOrKinematic=A.kinematic),void 0!==A.sensor&&(I.mIsSensor=A.sensor),void 0!==A.damping&&(I.mLinearDamping=A.damping[0],I.mAngularDamping=A.damping[1]);const o=B.bodyInterface.CreateBody(I);Jolt.destroy(I),o.name=g,o.type=this.type,o.isKinematic=A.kinematic||!1,o.breakable=A.breakable||!1,this.addToWorld(o,A.id),delete A.pos,delete A.quat,delete A.mass,delete A.kinematic,this.set(A,o)}set(A={},I=null){if(null===I&&(I=this.byName(A.name)),null!==I){if(void 0!==A.getVelocity&&(I.getVelocity=A.getVelocity),void 0!==A.friction&&I.SetFriction(A.friction),void 0!==A.restitution&&I.SetRestitution(A.restitution),void 0!==A.group&&void 0!==A.mask&&(A.filter=[A.group,A.mask]),A.filter){const g=I.GetCollisionGroup();g.SetGroupFilter(B.groupFilter),g.SetGroupID(A.filter[0]),g.SetSubGroupID(A.filter[1])}if(void 0!==A.kinematic&&"body"===I.type&&(I.isKinematic=A.kinematic||!1,I.mMotionType=0==A.kinematic?Jolt.EMotionType_Kinematic:Jolt.EMotionType_Dynamic),void 0!==A.bullet&&B.bodyInterface.SetMotionQuality(I.GetID(),A.bullet?1:0),void 0!==A.motionQuality&&B.bodyInterface.SetMotionQuality(I.GetID(),A.motionQuality),A.gravityScale&&B.bodyInterface.SetGravityFactor(I.GetID(),A.gravityScale),A.sleep&&B.bodyInterface.DeactivateBody(I.GetID()),(A.activate||A.wake)&&B.bodyInterface.ActivateBody(I.GetID()),void 0!==A.neverSleep&&I.SetAllowSleeping(!A.neverSleep),A.noGravity,void 0!==A.linearVelocity&&I.SetLinearVelocity(this.v.fromArray(A.linearVelocity)),void 0!==A.linearVelocityClamped&&I.SetLinearVelocityClamped(this.v.fromArray(A.linearVelocityClamped)),void 0!==A.angularVelocity&&I.SetAngularVelocity(this.v.fromArray(A.angularVelocity)),void 0!==A.angularVelocityClamped&&I.SetAngularVelocityClamped(this.v.fromArray(A.angularVelocityClamped)),A.angularFactor,A.reset&&(I.SetLinearVelocity(this.v.set(0,0,0)),I.SetAngularVelocity(this.v.set(0,0,0)),I.ResetForce(),I.ResetTorque()),A.pos||A.quat)if(I.isKinematic){let g=A.pos?this.v.fromArray(A.pos):I.GetPosition(),C=A.quat?this.q.fromArray(A.quat):I.GetRotation();B.bodyInterface.MoveKinematic(I.GetID(),g,C,B.deltaTime),I.old={p:g,q:C},I.lockPos=!0}else A.pos&&B.bodyInterface.SetPosition(I.GetID(),this.v.fromArray(A.pos),null),A.quat&&B.bodyInterface.SetRotation(I.GetID(),this.q.fromArray(A.quat),null);if(A.impulse&&(I.IsActive()||B.bodyInterface.ActivateBody(I.GetID()),I.AddImpulse(this.v.fromArray(A.impulse),A.impulseCenter?this.v2.fromArray(A.impulseCenter):I.GetPosition())),A.angularImpulse&&I.AddAngularImpulse(this.v.fromArray(A.angularImpulse)),A.force&&I.AddForce(this.v.fromArray(A.force),A.forcePosition?this.v2.fromArray(A.forcePosition):I.GetPosition()),A.torque&&I.AddTorque(this.v.fromArray(A.torque)),void 0!==A.useManifoldReduction&&I.SetUseManifoldReduction(A.useManifoldReduction),I.GetMotionProperties&&(A.massInfo&&this.getMassInfo(I),A.mass&&this.setMass(I,A.mass),void 0!==A.damping&&(I.GetMotionProperties().SetLinearDamping(A.damping[0]),I.GetMotionProperties().SetAngularDamping(A.damping[1])),void 0!==A.inertiaScale)){let g=I.GetMotionProperties().GetInverseInertiaDiagonal().toArray(),C=I.GetMotionProperties().GetInertiaRotation();g=r.mulArray(g,1/A.inertiaScale),I.GetMotionProperties().SetInverseInertia(this.v2.fromArray(g),C)}}}setMass(A,I){A.GetMotionProperties().SetInverseMass(1/I)}getMassInfo(A){if("string"==typeof A&&(A=this.byName(A)),null===A)return;if("body"!==this.type)return;const I={invMass:A.GetMotionProperties().GetInverseMass(),massCenter:A.GetCenterOfMassPosition().toArray(),inertia:A.GetMotionProperties().GetInverseInertiaDiagonal().toArray(),inertiaRotation:A.GetMotionProperties().GetInertiaRotation().toArray(),invInertia:A.GetInverseInertia().toArray(),damping:[A.GetMotionProperties().GetLinearDamping(),A.GetMotionProperties().GetAngularDamping()]};console.log(I)}getShape(A){return A.GetShape()}}class M extends S{constructor(){super(),this.Utils=Q,this.type="joint",this.v=new Jolt.RVec3,this.min=new Jolt.RVec3(0,0,0),this.max=new Jolt.RVec3(0,0,0)}step(){}add(A={}){let I,g=this.setName(A),C=A.mode||"hinge",B=this.byName(A.b1),Q=this.byName(A.b2),E=A.pos1?A.pos1:[0,0,0],i=A.axis1?A.axis1:[1,0,0],o=A.pos2?A.pos2:[0,0,0],t=A.axis2?A.axis2:[1,0,0],D=r.perpendicularArray(i),e=r.perpendicularArray(t),S=null;switch(C){case"fixe":I=new Jolt.FixedConstraintSettings,I.mAutoDetectPoint=!0,S="FixedConstraint";break;case"hinge":I=new Jolt.HingeConstraintSettings,S="HingeConstraint";break;case"distance":I=new Jolt.DistanceConstraintSettings,S="DistanceConstraint";break;case"prismatic":I=new Jolt.SliderConstraintSettings,S="SliderConstraint";break;case"spherical":I=new Jolt.PointConstraintSettings,S="PointConstraintConstraint";break;case"cone":I=new Jolt.ConeConstraintSettings,S="ConeConstraint";break;case"ragdoll":I=new Jolt.SwingTwistConstraintSettings,S="SwingTwistConstraint";break;case"generic":case"cylindrical":I=new Jolt.SixDOFConstraintSettings,S="SixDOFConstraint"}if(!I)return;switch(I.mPoint1&&I.mPoint1.fromArray(E),I.mPoint2&&I.mPoint2.fromArray(o),I.mPosition1&&I.mPosition1.fromArray(E),I.mPosition2&&I.mPosition2.fromArray(o),I.mAxisX1&&I.mAxisX1.fromArray(i),I.mAxisY1&&I.mAxisY1.fromArray(D),I.mAxisX2&&I.mAxisX2.fromArray(t),I.mAxisY2&&I.mAxisY2.fromArray(e),I.mHingeAxis1&&I.mHingeAxis1.fromArray(i),I.mHingeAxis2&&I.mHingeAxis2.fromArray(t),I.mSliderAxis1&&I.mSliderAxis1.fromArray(i),I.mSliderAxis2&&I.mSliderAxis2.fromArray(t),I.mNormalAxis1&&I.mNormalAxis1.fromArray(D),I.mNormalAxis2&&I.mNormalAxis2.fromArray(e),I.mSpace&&(I.mSpace=0),C){case"generic":I.MakeFixedAxis(0),I.MakeFixedAxis(1),I.MakeFixedAxis(2),I.MakeFixedAxis(3),I.MakeFixedAxis(4),I.MakeFixedAxis(5);break;case"cylindrical":I.MakeFixedAxis(1),I.MakeFixedAxis(2),I.MakeFixedAxis(4),I.MakeFixedAxis(5)}const y=Jolt.castObject(I.Create(B,Q),Jolt[S]);y.name=g,y.type=this.type,y.mode=C,y.visible=void 0===A.visible||A.visible,Jolt.destroy(I),this.set(A,y),this.addToWorld(y)}set(A={},I=null){if(null===I&&(I=this.byName(A.name)),null!==I)switch(void 0!==A.enable&&I.SetEnabled(A.enable),I.mode){case"hinge":A.lm&&I.SetLimits(A.lm[0]*a,A.lm[1]*a);break;case"spherical":break;case"prismatic":if(A.lm&&(I.SetLimits(A.lm[0],A.lm[1]),A.spring)){let g=I.GetLimitsSpringSettings();g.mStiffness=A.spring[0],g.mDamping=A.spring[1],g.mFrequency=A.spring[0],g.mMode=1}break;case"cylindrical":A.lm&&(this.min.set(A.lm[0],0,0),this.max.set(A.lm[1],0,0),I.SetTranslationLimits(this.min,this.max)),A.lmr&&(this.min.set(A.lmr[0]*a,0,0),this.max.set(A.lmr[1]*a,0,0),I.SetRotationLimits(this.min,this.max)),I.SetEnabled(!0);break;case"generic":A.lm&&(I.SetTranslationLimits(this.min,this.max),I.SetRotationLimits(this.min,this.max))}}setSpring(A,I){}}class n extends S{constructor(){super(),this.Utils=Q,this.type="ray",this.initRay=!1}reset(){super.reset(),this.initRay&&(this.initRay=!1,Jolt.destroy(this.ray),Jolt.destroy(this.bp_filter),Jolt.destroy(this.object_filter),Jolt.destroy(this.body_filter),Jolt.destroy(this.shape_filter),this.collector.body=null,this.collector.OnBody=null,this.collector.AddHit=null,Jolt.destroy(this.collector))}init(){this.initRay||(this.initRay=!0,this.v1=new Jolt.RVec3,this.v2=new Jolt.RVec3,this.ray=new Jolt.RRayCast,this.ray_settings=new Jolt.RayCastSettings,this.ray_settings.mTreatConvexAsSolid=!1,this.bp_filter=new Jolt.DefaultBroadPhaseLayerFilter(B.world.GetObjectVsBroadPhaseLayerFilter(),B.LAYER_MOVING),this.object_filter=new Jolt.DefaultObjectLayerFilter(B.world.GetObjectLayerPairFilter(),B.LAYER_ALL),this.body_filter=new Jolt.BodyFilter,this.shape_filter=new Jolt.ShapeFilter,this.collector=new Jolt.CastRayCollectorJS,this.collector.OnBody=function(A){A=Jolt.wrapPointer(A,Jolt.Body),this.collector.body=A}.bind(this),this.collector.AddHit=function(A){A=Jolt.wrapPointer(A,Jolt.RayCastResult);const I=this.ray.n,g=B.Ar;if(0!==g[I])return;let C=this.ray.GetPointOnRay(A.mFraction),Q=this.collector.body.GetWorldSpaceSurfaceNormal(A.mSubShapeID2,C),E=this.ray.mOrigin.toArray(),i=C.toArray();Q.toArray(g,I+8),g[I]=1,g[I+1]=r.distanceArray(E,i),g[I+2]=E[0],g[I+3]=E[1],g[I+4]=E[2],g[I+5]=i[0],g[I+6]=i[1],g[I+7]=i[2],B.reflow.ray[this.ray.id]=this.collector.body.name}.bind(this),this.collector.Reset=function(){this.collector.ResetEarlyOutFraction()}.bind(this))}step(){const A=B.Ar,I=B.ArPos[this.type];B.reflow.ray=[];let g,C,Q,E=this.list.length;for(;E--;)C=I+E*e.ray,g=this.list[E],Q=g.getPoint(),this.ray.mOrigin.fromArray(Q[0]),this.ray.mDirection.fromArray(r.subArray(Q[1],Q[0])),this.ray.n=C,this.ray.id=E,A[C]=0,this.collector.Reset(),this.ray_settings.mTreatConvexAsSolid=g.selfHit,B.physicsSystem.GetNarrowPhaseQuery().CastRay(this.ray,this.ray_settings,this.collector,this.bp_filter,this.object_filter,this.body_filter,this.shape_filter)}add(A={}){this.setName(A);let I=new c(A);this.addToWorld(I,A.id),this.init()}set(A={},I=null){null===I&&(I=this.byName(A.name)),null!==I&&(A.begin&&(I.begin=A.begin),A.end&&(I.end=A.end))}}class c{constructor(A={}){this.type="ray",this.name=A.name,this.parent=A.parent||"",this.selfHit=A.selfHit||!1,this.noRotation=A.noRotation||!1,this.begin=A.begin||[0,0,0],this.end=A.end||[0,0,1]}getPoint(){if(this.parent){const A=Q.byName(this.parent);if(A){const I=A.GetPosition().toArray(),g=this.noRotation?[0,0,0,1]:A.GetRotation().toArray();return[r.applyTransformArray(this.begin,I,g),r.applyTransformArray(this.end,I,g)]}}return[this.begin,this.end]}}class h extends S{constructor(){super(),this.Utils=Q,this.type="contact",this.initContact=!1}reset(){super.reset(),this.initContact&&(this.initContact=!1,Jolt.destroy(this.contactListener))}init(){this.initContact||(this.initContact=!0,this.contactListener=new Jolt.ContactListenerJS,this.contactListener.OnContactValidate=(A,I,g,C)=>{A=Jolt.wrapPointer(A,Jolt.Body),I=Jolt.wrapPointer(I,Jolt.Body);const B=A.name,Q=I.name;return B&&Q&&(C=Jolt.wrapPointer(C,Jolt.CollideShapeResult)),Jolt.ValidateResult_AcceptAllContactsForThisBodyPair},this.contactListener.OnContactAdded=(A,I,g,C)=>{A=Jolt.wrapPointer(A,Jolt.Body),I=Jolt.wrapPointer(I,Jolt.Body);const B=A.name,E=I.name;g=Jolt.wrapPointer(g,Jolt.ContactManifold),(C=Jolt.wrapPointer(C,Jolt.ContactSettings)).mCombinedRestitution=.5,B&&E&&Q.addContact(B+"_"+E)},this.contactListener.OnContactPersisted=(A,I,g,C)=>{A=Jolt.wrapPointer(A,Jolt.Body),I=Jolt.wrapPointer(I,Jolt.Body);const B=A.name,E=I.name;g=Jolt.wrapPointer(g,Jolt.ContactManifold),(C=Jolt.wrapPointer(C,Jolt.ContactSettings)).mCombinedRestitution=.5,B&&E&&Q.addContact(B+"_"+E)},this.contactListener.OnContactRemoved=A=>{},B.physicsSystem.SetContactListener(this.contactListener))}step(){const A=B.Ar,I=B.ArPos[this.type];let g,C,E,i=this.list.length;for(;i--;)g=this.list[i],C=I+i*e.contact,E=Q.byContact(g.cc)?1:0,E||(E=Q.byContact(g.cr)?1:0),A[C]=E;Q.clearContact()}add(A={}){this.setName(A);let I=this.byName(A.b1);if(this.byName(A.b2),null===I)return;let g=new G(A);this.addToWorld(g,A.id),this.init()}}class G{constructor(A={}){this.type="contact",this.name=A.name,this.cc=A.b1+"_"+A.b2,this.cr=A.b2+"_"+A.b1}}class J extends S{constructor(){super(),this.type="terrain",this.Utils=Q}add(A){this.setName(A);let I=new U(A);this.addToWorld(I,A.id)}set(A={},I=null){null===I&&(I=this.byName(A.name)),null!==I&&I.set(A)}}class U{constructor(A){this.type="terrain",this.name=A.name,this.needUpdate=!1,this.heightField=null,this.heights=null,this.shape=null,this.init(A)}init(A){this.size=A.size,this.sample=A.sample,this.squarSize=[this.size[0]/(this.sample[0]-1),this.size[2]/(this.sample[1]-1)],this.scale=[this.squarSize[0],this.size[1],this.squarSize[1]],this.setData(A);let I=A.pos||[0,0,0];I[0]=I[0]-.5*this.size[0],I[2]=I[2]-.5*this.size[2];const g=new Jolt.RVec3(0,0,0).fromArray(I),C=new Jolt.Quat(0,0,0,1);let Q=new Jolt.BodyCreationSettings(this.shape,g,C,Jolt.EMotionType_Static,B.LAYER_NON_MOVING);this.body=B.bodyInterface.CreateBody(Q),Jolt.destroy(Q),B.bodyInterface.AddBody(this.body.GetID(),Jolt.EActivation_Activate)}setData(A){let I=A.heightData;const g=new Jolt.HeightFieldShapeSettings;g.mOffset.Set(0,0,0),g.mScale.Set(this.scale[0],this.scale[1],this.scale[2]),g.mSampleCount=this.sample[0],g.mBlockSize=2;const C=I.length;g.mHeightSamples.resize(C),this.heightSamples=new Float32Array(Jolt.HEAPF32.buffer,Jolt.getPointer(g.mHeightSamples.data()),C);for(let A=0;A<C;A++)this.heightSamples[A]=I[A];this.shape=g.Create().Get()}release(){B.bodyInterface.RemoveBody(this.body.GetID()),B.bodyInterface.DestroyBody(this.body.GetID()),Jolt.destroy(this.shape)}set(A){if(A.heightData){let I=A.heightData;const g=this.sample[0],C=Jolt._webidl_malloc(g*g*4),Q=new Float32Array(Jolt.HEAPF32.buffer,C,g*g),E=Jolt.castObject(this.body.GetShape(),Jolt.HeightFieldShape),i=I.length;for(let A=0;A<i;A++)Q[A]=I[A]*this.size[1];const o=this.body.GetCenterOfMassPosition();E.SetHeights(0,0,g,g,C,g,B.world.GetTempAllocator()),B.bodyInterface.NotifyShapeChanged(this.body,o,!1,Jolt.EActivation_Activate)}}}async function N(A={}){var g=A,C="object"==typeof window,B="undefined"!=typeof WorkerGlobalScope,Q="object"==typeof process&&process.versions?.node&&"renderer"!=process.type;if(Q){const{createRequire:A}=await import("module");var E=A("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:I&&"SCRIPT"===I.tagName.toUpperCase()&&I.src||new URL("Jolt.min.js",document.baseURI).href)}var i,o="./this.program",t="undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:I&&"SCRIPT"===I.tagName.toUpperCase()&&I.src||new URL("Jolt.min.js",document.baseURI).href;if(Q){var D=E("fs");t.startsWith("file:")&&E("path").dirname(E("url").fileURLToPath(t)),i=A=>(A=c(A)?new URL(A):A,D.readFileSync(A)),1<process.argv.length&&(o=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2)}else if(C||B){try{new URL(".",t)}catch{}B&&(i=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)})}var e,S,y,a,p,K,s,k,r,w=console.log.bind(console),M=console.error.bind(console),n=!1,c=A=>A.startsWith("file://"),h=!1;function G(A){throw g.onAbort?.(A),M(A="Aborted("+A+")"),n=!0,A=new WebAssembly.RuntimeError(A+". Build with -sASSERTIONS for more info."),y?.(A),A}async function J(A){var I=r;try{var g=await async function(A){if(!ArrayBuffer.isView(A))if(A==r&&e)A=new Uint8Array(e);else{if(!i)throw"both async and sync fetching of the wasm failed";A=i(A)}return A}(I);return await WebAssembly.instantiate(g,A)}catch(A){M(`failed to asynchronously prepare wasm: ${A}`),G(A)}}for(var U,N=A=>{for(;0<A.length;)A.shift()(g)},_=[],l=[],F=()=>{var A=g.preRun.shift();l.push(A)},Y=(A,I,g,C)=>{if(!(0<C))return 0;var B=g;C=g+C-1;for(var Q=0;Q<A.length;++Q){var E=A.codePointAt(Q);if(127>=E){if(g>=C)break;I[g++]=E}else if(2047>=E){if(g+1>=C)break;I[g++]=192|E>>6,I[g++]=128|63&E}else if(65535>=E){if(g+2>=C)break;I[g++]=224|E>>12,I[g++]=128|E>>6&63,I[g++]=128|63&E}else{if(g+3>=C)break;I[g++]=240|E>>18,I[g++]=128|E>>12&63,I[g++]=128|E>>6&63,I[g++]=128|63&E,Q++}}return I[g]=0,g-B},R=[],q=(A,I,g)=>{R.length=0;for(var C;C=p[I++];){var B=105!=C;g+=(B&=112!=C)&&g%8?4:0,R.push(112==C?s[g>>2]:105==C?K[g>>2]:k[g>>3]),g+=B?8:4}return O_A[A](...R)},d={},L=()=>{if(!U){var A,I={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:o||"./this.program"};for(A in d)void 0===d[A]?delete I[A]:I[A]=d[A];var g=[];for(A in I)g.push(`${A}=${I[A]}`);U=g}return U},O=A=>{for(var I=0,g=0;g<A.length;++g){var C=A.charCodeAt(g);127>=C?I++:2047>=C?I+=2:55296<=C&&57343>=C?(I+=4,++g):I+=3}return I},H=[null,[],[]],f="undefined"!=typeof TextDecoder?new TextDecoder:void 0,m=(A,I=0)=>{for(var g=I,C=g+void 0;A[g]&&!(g>=C);)++g;if(16<g-I&&A.buffer&&f)return f.decode(A.subarray(I,g));for(C="";I<g;){var B=A[I++];if(128&B){var Q=63&A[I++];if(192==(224&B))C+=String.fromCharCode((31&B)<<6|Q);else{var E=63&A[I++];65536>(B=224==(240&B)?(15&B)<<12|Q<<6|E:(7&B)<<18|Q<<12|E<<6|63&A[I++])?C+=String.fromCharCode(B):(B-=65536,C+=String.fromCharCode(55296|B>>10,56320|1023&B))}}else C+=String.fromCharCode(B)}return C},u=[],b=new Uint8Array(123),j=25;0<=j;--j)b[48+j]=52+j,b[65+j]=j,b[97+j]=26+j;if(b[43]=62,b[47]=63,g.print&&(w=g.print),g.printErr&&(M=g.printErr),g.wasmBinary&&(e=g.wasmBinary),g.thisProgram&&(o=g.thisProgram),g.preInit)for("function"==typeof g.preInit&&(g.preInit=[g.preInit]);0<g.preInit.length;)g.preInit.shift()();var T,P,x,Z,V,X,v,z,W,$,AA,IA,gA,CA,BA,QA,EA,iA,oA,tA,DA,eA,SA,yA,aA,pA,KA,sA,kA,rA,wA,MA,nA,cA,hA,GA,JA,UA,NA,_A,lA,FA,YA,RA,qA,dA,LA,OA,HA,fA,mA,uA,bA,jA,TA,PA,xA,ZA,VA,XA,vA,zA,WA,$A,AI,II,gI,CI,BI,QI,EI,iI,oI,tI,DI,eI,SI,yI,aI,pI,KI,sI,kI,rI,wI,MI,nI,cI,hI,GI,JI,UI,NI,_I,lI,FI,YI,RI,qI,dI,LI,OI,HI,fI,mI,uI,bI,jI,TI,PI,xI,ZI,VI,XI,vI,zI,WI,$I,Ag,Ig,gg,Cg,Bg,Qg,Eg,ig,og,tg,Dg,eg,Sg,yg,ag,pg,Kg,sg,kg,rg,wg,Mg,ng,cg,hg,Gg,Jg,Ug,Ng,_g,lg,Fg,Yg,Rg,qg,dg,Lg,Og,Hg,fg,mg,ug,bg,jg,Tg,Pg,xg,Zg,Vg,Xg,vg,zg,Wg,$g,AC,IC,gC,CC,BC,QC,EC,iC,oC,tC,DC,eC,SC,yC,aC,pC,KC,sC,kC,rC,wC,MC,nC,cC,hC,GC,JC,UC,NC,_C,lC,FC,YC,RC,qC,dC,LC,OC,HC,fC,mC,uC,bC,jC,TC,PC,xC,ZC,VC,XC,vC,zC,WC,$C,AB,IB,gB,CB,BB,QB,EB,iB,oB,tB,DB,eB,SB,yB,aB,pB,KB,sB,kB,rB,wB,MB,nB,cB,hB,GB,JB,UB,NB,_B,lB,FB,YB,RB,qB,dB,LB,OB,HB,fB,mB,uB,bB,jB,TB,PB,xB,ZB,VB,XB,vB,zB,WB,$B,AQ,IQ,gQ,CQ,BQ,QQ,EQ,iQ,oQ,tQ,DQ,eQ,SQ,yQ,aQ,pQ,KQ,sQ,kQ,rQ,wQ,MQ,nQ,cQ,hQ,GQ,JQ,UQ,NQ,_Q,lQ,FQ,YQ,RQ,qQ,dQ,LQ,OQ,HQ,fQ,mQ,uQ,bQ,jQ,TQ,PQ,xQ,ZQ,VQ,XQ,vQ,zQ,WQ,$Q,AE,IE,gE,CE,BE,QE,EE,iE,oE,tE,DE,eE,SE,yE,aE,pE,KE,sE,kE,rE,wE,ME,nE,cE,hE,GE,JE,UE,NE,_E,lE,FE,YE,RE,qE,dE,LE,OE,HE,fE,mE,uE,bE,jE,TE,PE,xE,ZE,VE,XE,vE,zE,WE,$E,Ai,Ii,gi,Ci,Bi,Qi,Ei,ii,oi,ti,Di,ei,Si,yi,ai,pi,Ki,si,ki,ri,wi,Mi,ni,ci,hi,Gi,Ji,Ui,Ni,_i,li,Fi,Yi,Ri,qi,di,Li,Oi,Hi,fi,mi,ui,bi,ji,Ti,Pi,xi,Zi,Vi,Xi,vi,zi,Wi,$i,Ao,Io,go,Co,Bo,Qo,Eo,io,oo,to,Do,eo,So,yo,ao,po,Ko,so,ko,ro,wo,Mo,no,co,ho,Go,Jo,Uo,No,_o,lo,Fo,Yo,Ro,qo,Lo,Oo,Ho,fo,mo,uo,bo,jo,To,Po,xo,Zo,Vo,Xo,vo,zo,Wo,$o,At,It,gt,Ct,Bt,Qt,Et,it,ot,tt,Dt,et,St,yt,at,pt,Kt,st,kt,rt,wt,Mt,nt,ct,ht,Gt,Jt,Ut,Nt,_t,lt,Ft,Yt,Rt,qt,dt,Lt,Ot,Ht,ft,mt,ut,bt,jt,Tt,Pt,xt,Zt,Vt,Xt,vt,zt,Wt,$t,AD,ID,gD,CD,BD,QD,ED,iD,oD,tD,DD,eD,SD,yD,aD,pD,KD,sD,kD,rD,wD,MD,nD,cD,hD,GD,JD,UD,ND,_D,lD,FD,YD,RD,qD,dD,LD,OD,HD,fD,mD,uD,bD,jD,TD,PD,xD,ZD,VD,XD,vD,zD,WD,$D,Ae,Ie,ge,Ce,Be,Qe,Ee,ie,oe,te,De,ee,Se,ye,ae,pe,Ke,se,ke,re,we,Me,ne,ce,he,Ge,Je,Ue,Ne,_e,le,Fe,Ye,Re,qe,de,Le,Oe,He,fe,me,ue,be,je,Te,Pe,xe,Ze,Ve,Xe,ve,ze,We,$e,AS,IS,gS,CS,BS,QS,ES,iS,oS,tS,DS,eS,SS,yS,aS,pS,KS,sS,kS,rS,wS,MS,nS,cS,hS,GS,JS,US,NS,_S,lS,FS,YS,RS,qS,dS,LS,OS,HS,fS,mS,uS,bS,jS,TS,PS,xS,ZS,VS,XS,vS,zS,WS,$S,Ay,Iy,gy,Cy,By,Qy,Ey,iy,oy,ty,Dy,ey,Sy,yy,ay,py,Ky,sy,ky,ry,wy,My,ny,cy,hy,Gy,Jy,Uy,Ny,_y,ly,Fy,Yy,Ry,qy,dy,Ly,Oy,Hy,fy,my,uy,by,jy,Ty,Py,xy,Zy,Vy,Xy,vy,zy,Wy,$y,Aa,Ia,ga,Ca,Ba,Qa,Ea,ia,oa,ta,Da,ea,Sa,ya,aa,pa,Ka,sa,ka,ra,wa,Ma,na,ca,ha,Ga,Ja,Ua,Na,_a,la,Fa,Ya,Ra,qa,da,La,Oa,Ha,fa,ma,ua,ba,ja,Ta,Pa,xa,Za,Va,Xa,va,za,Wa,$a,Ap,Ip,gp,Cp,Bp,Qp,Ep,ip,op,tp,Dp,ep,Sp,yp,ap,pp,Kp,sp,kp,rp,wp,Mp,np,cp,hp,Gp,Jp,Up,Np,_p,lp,Fp,Yp,Rp,qp,dp,Lp,Op,Hp,fp,mp,up,bp,jp,Tp,Pp,xp,Zp,Vp,Xp,vp,zp,Wp,$p,AK,IK,gK,CK,BK,QK,EK,iK,oK,tK,DK,eK,SK,yK,aK,pK,KK,sK,kK,rK,wK,MK,nK,cK,hK,GK,JK,UK,NK,_K,lK,FK,YK,RK,qK,dK,LK,OK,HK,fK,mK,uK,bK,jK,TK,PK,xK,ZK,VK,XK,vK,zK,WK,$K,As,Is,gs,Cs,Bs,Qs,Es,is,os,ts,Ds,es,Ss,ys,as,ps,Ks,ss,ks,rs,ws,Ms,ns,cs,hs,Gs,Js,Us,Ns,_s,ls,Fs,Ys,Rs,qs,ds,Ls,Os,Hs,fs,ms,us,bs,js,Ts,Ps,xs,Zs,Vs,Xs,vs,zs,Ws,$s,Ak,Ik,gk,Ck,Bk,Qk,Ek,ik,ok,tk,Dk,ek,Sk,yk,ak,pk,Kk,sk,kk,rk,wk,Mk,nk,ck,hk,Gk,Jk,Uk,Nk,_k,lk,Fk,Yk,Rk,qk,dk,Lk,Ok,Hk,fk,mk,uk,bk,jk,Tk,Pk,xk,Zk,Vk,Xk,vk,zk,Wk,$k,Ar,Ir,gr,Cr,Br,Qr,Er,ir,or,tr,Dr,er,Sr,yr,ar,pr,Kr,sr,kr,rr,wr,Mr,nr,cr,hr,Gr,Jr,Ur,Nr,_r,lr,Fr,Yr,Rr,qr,dr,Lr,Or,Hr,fr,mr,ur,br,jr,Tr,Pr,xr,Zr,Vr,Xr,vr,zr,Wr,$r,Aw,Iw,gw,Cw,Bw,Qw,Ew,iw,ow,tw,Dw,ew,Sw,yw,aw,pw,Kw,sw,kw,rw,ww,Mw,nw,cw,hw,Gw,Jw,Uw,Nw,_w,lw,Fw,Yw,Rw,qw,dw,Lw,Ow,Hw,fw,mw,uw,bw,jw,Tw,Pw,xw,Zw,Vw,Xw,vw,zw,Ww,$w,AM,IM,gM,CM,BM,QM,EM,iM,oM,tM,DM,eM,SM,yM,aM,pM,KM,sM,kM,rM,wM,MM,nM,cM,hM,GM,JM,UM,NM,_M,lM,FM,YM,RM,qM,dM,LM,OM,HM,fM,mM,uM,bM,jM,TM,PM,xM,ZM,VM,XM,vM,zM,WM,$M,An,In,gn,Cn,Bn,Qn,En,on,tn,Dn,en,Sn,yn,an,pn,Kn,sn,kn,rn,wn,Mn,nn,cn,hn,Gn,Jn,Un,Nn,_n,ln,Fn,Yn,Rn,qn,dn,Ln,On,Hn,fn,mn,un,bn,jn,Tn,Pn,xn,Zn,Vn,Xn,vn,zn,Wn,$n,Ac,Ic,gc,Cc,Bc,Qc,Ec,ic,oc,tc,Dc,ec,Sc,yc,ac,pc,Kc,sc,kc,rc,wc,Mc,nc,cc,hc,Gc,Jc,Uc,Nc,_c,lc,Fc,Yc,Rc,qc,dc,Lc,Oc,Hc,fc,mc,uc,bc,jc,Tc,Pc,xc,Zc,Vc,Xc,vc,zc,Wc,$c,Ah,Ih,gh,Ch,Bh,Qh,Eh,ih,oh,th,Dh,eh,Sh,yh,ah,ph,Kh,sh,kh,rh,wh,Mh,nh,ch,hh,Gh,Jh,Uh,Nh,_h,lh,Fh,Yh,Rh,qh,dh,Lh,Oh,Hh,fh,mh,uh,bh,jh,Th,Ph,xh,Zh,Vh,Xh,vh,zh,Wh,$h,AG,IG,gG,CG,BG,QG,EG,iG,oG,tG,DG,eG,SG,yG,aG,pG,KG,sG,kG,rG,wG,MG,nG,cG,hG,GG,JG,UG,NG,_G,lG,FG,YG,RG,qG,dG,LG,OG,HG,fG,mG,uG,bG,jG,TG,PG,xG,ZG,VG,XG,vG,zG,WG,$G,AJ,IJ,gJ,CJ,BJ,QJ,EJ,iJ,oJ,tJ,DJ,eJ,SJ,yJ,aJ,pJ,KJ,sJ,kJ,rJ,wJ,MJ,nJ,cJ,hJ,GJ,JJ,UJ,NJ,_J,lJ,FJ,YJ,RJ,qJ,dJ,LJ,OJ,HJ,fJ,mJ,uJ,bJ,jJ,TJ,PJ,xJ,ZJ,VJ,XJ,vJ,zJ,WJ,$J,AU,IU,gU,CU,BU,QU,EU,iU,oU,tU,DU,eU,SU,yU,aU,pU,KU,sU,kU,rU,wU,MU,nU,cU,hU,GU,JU,UU,NU,_U,lU,FU,YU,RU,qU,dU,LU,OU,HU,fU,mU,uU,bU,jU,TU,PU,xU,ZU,VU,XU,vU,zU,WU,$U,AN,IN,gN,CN,BN,QN,EN,iN,oN,tN,DN,eN,SN,yN,aN,pN,KN,sN,kN,rN,wN,MN,nN,cN,hN,GN,JN,UN,NN,_N,lN,FN,YN,RN,qN,dN,LN,ON,HN,fN,mN,uN,bN,jN,TN,PN,xN,ZN,VN,XN,vN,zN,WN,$N,A_,I_,g_,C_,B_,Q_,E_,i_,o_,t_,D_,e_,S_,y_,a_,p_,K_,s_,k_,r_,w_,M_,n_,c_,h_,G_,J_,U_,N_,__,l_,F_,Y_,R_,q_,d_,L_,O_,H_,f_,m_,u_,b_,j_,T_,P_,x_,Z_,V_,X_,v_,z_,W_,$_,Al,Il,gl,Cl,Bl,Ql,El,il,ol,tl,Dl,el,Sl,yl,al,pl,Kl,sl,kl,rl,wl,Ml,nl,cl,hl,Gl,Jl,Ul,Nl,_l,ll,Fl,Yl,Rl,ql,dl,Ll,Ol,Hl,fl,ml,ul,bl,jl,Tl,Pl,xl,Zl,Vl,Xl,vl,zl,Wl,$l,AF,IF,gF,CF,BF,QF,EF,iF,oF,tF,DF,eF,SF,yF,aF,pF,KF,sF,kF,rF,wF,MF,nF,cF,hF,GF,JF,UF,NF,_F,lF,FF,YF,RF,qF,dF,LF,OF,HF,fF,mF,uF,bF,jF,TF,PF,xF,ZF,VF,XF,vF,zF,WF,$F,AY,IY,gY,CY,BY,QY,EY,iY,oY,tY,DY,eY,SY,yY,aY,pY,KY,sY,kY,rY,wY,MY,nY,cY,hY,GY,JY,UY,NY,_Y,lY,FY,YY,RY,qY,dY,LY,OY,HY,fY,mY,uY,bY,jY,TY,PY,xY,ZY,VY,XY,vY,zY,WY,$Y,AR,IR,gR,CR,BR,QR,ER,iR,oR,tR,DR,eR,SR,yR,aR,pR,KR,sR,kR,rR,wR,MR,nR,cR,hR,GR,JR,UR,NR,_R,lR,FR,YR,RR,qR,dR,LR,OR,HR,fR,mR,uR,bR,jR,TR,PR,xR,ZR,VR,XR,vR,zR,WR,$R,Aq,Iq,gq,Cq,Bq,Qq,Eq,iq,oq,tq,Dq,eq,Sq,yq,aq,pq,Kq,sq,kq,rq,wq,Mq,nq,cq,hq,Gq,Jq,Uq,Nq,_q,lq,Fq,Yq,Rq,qq,dq,Lq,Oq,Hq,fq,mq,uq,bq,jq,Tq,Pq,xq,Zq,Vq,Xq,vq,zq,Wq,$q,Ad,Id,gd,Cd,Bd,Qd,Ed,id,od,td,Dd,ed,Sd,yd,ad,pd,Kd,sd,kd,rd,wd,Md,nd,cd,hd,Gd,Jd,Ud,Nd,_d,ld,Fd,Yd,Rd,qd,dd,Ld,Od,Hd,fd,md,ud,bd,jd,Td,Pd,xd,Zd,Vd,Xd,vd,zd,Wd,$d,AL,IL,gL,CL,BL,QL,EL,iL,oL,tL,DL,eL,SL,yL,aL,pL,KL,sL,kL,rL,wL,ML,nL,cL,hL,GL,JL,UL,NL,_L,lL,FL,YL,RL,qL,dL,LL,OL,HL,fL,mL,uL,bL,jL,TL,PL,xL,ZL,VL,XL,vL,zL,WL,$L,AO,IO,gO,CO,BO,QO,EO,iO,oO,tO,DO,eO,SO,yO,aO,pO,KO,sO,kO,rO,wO,MO,nO,cO,hO,GO,JO,UO,NO,_O,lO,FO,YO,RO,qO,dO,LO,OO,HO,fO,mO,uO,bO,jO,TO,PO,xO,ZO,VO,XO,vO,zO,WO,$O,AH,IH,gH,CH,BH,QH,EH,iH,oH,tH,DH,eH,SH,yH,aH,pH,KH,sH,kH,rH,wH,MH,nH,cH,hH,GH,JH,UH,NH,_H,lH,FH,YH,RH,qH,dH,LH,OH,HH,fH,mH,uH,bH,jH,TH,PH,xH,ZH,VH,XH,vH,zH,WH,$H,Af,If,gf,Cf,Bf,Qf,Ef,of,tf,Df,ef,Sf,yf,af,pf,Kf,sf,kf,rf,wf,Mf,nf,cf,hf,Gf,Jf,Uf,Nf,_f,lf,Ff,Yf,Rf,qf,df,Lf,Of,Hf,ff,mf,uf,bf,jf,Tf,Pf,xf,Zf,Vf,Xf,vf,zf,Wf,$f,Am,Im,gm,Cm,Bm,Qm,Em,im,om,tm,Dm,em,Sm,ym,am,pm,Km,sm,km,rm,wm,Mm,nm,cm,hm,Gm,Jm,Um,Nm,_m,lm,Fm,Ym,Rm,qm,dm,Lm,Om,Hm,fm,mm,um,bm,jm,Tm,Pm,xm,Zm,Vm,Xm,vm,zm,Wm,$m,Au,Iu,gu,Cu,Bu,Qu,Eu,iu,ou,tu,Du,eu,Su,yu,au,pu,Ku,su,ku,ru,wu,Mu,nu,cu,hu,Gu,Ju,Uu,Nu,_u,lu,Fu,Yu,Ru,qu,du,Lu,Ou,Hu,fu,mu,uu,bu,ju,Tu,Pu,xu,Zu,Vu,Xu,vu,zu,Wu,$u,Ab,Ib,gb,Cb,Bb,Qb,Eb,ib,ob,tb,Db,eb,Sb,yb,ab,pb,Kb,sb,kb,rb,wb,Mb,nb,cb,hb,Gb,Jb,Ub,Nb,_b,lb,Fb,Yb,Rb,qb,db,Lb,Ob,Hb,fb,mb,ub,bb,jb,Tb,Pb,xb,Zb,Vb,Xb,vb,zb,Wb,$b,Aj,Ij,gj,Cj,Bj,Qj,Ej,ij,oj,tj,Dj,ej,Sj,yj,aj,pj,Kj,sj,kj,rj,wj,Mj,nj,cj,hj,Gj,Jj,Uj,Nj,_j,lj,Fj,Yj,Rj,qj,dj,Lj,Oj,Hj,fj,mj,uj,bj,jj,Tj,Pj,xj,Zj,Vj,Xj,vj,zj,Wj,$j,AT,IT,gT,CT,BT,QT,ET,iT,oT,tT,DT,eT,ST,yT,aT,pT,KT,sT,kT,rT,wT,MT,nT,cT,hT,GT,JT,UT,NT,_T,lT,FT,YT,RT,qT,dT,LT,OT,HT,fT,mT,uT,bT,jT,TT,PT,xT,ZT,VT,XT,vT,zT,WT,$T,AP,IP,gP,CP,BP,QP,EP,iP,oP,tP,DP,eP,SP,yP,aP,pP,KP,sP,kP,rP,wP,MP,nP,cP,hP,GP,JP,UP,NP,_P,lP,FP,YP,RP,qP,dP,LP,OP,HP,fP,mP,uP,bP,jP,TP,PP,xP,ZP,VP,XP,vP,zP,WP,$P,Ax,Ix,gx,Cx,Bx,Qx,Ex,ix,ox,tx,Dx,ex,Sx,yx,ax,px,Kx,sx,kx,rx,wx,Mx,nx,cx,hx,Gx,Jx,Ux,Nx,_x,lx,Fx,Yx,Rx,qx,dx,Lx,Ox,Hx,fx,mx,ux,bx,jx,Tx,Px,xx,Zx,Vx,Xx,vx,zx,Wx,$x,AZ,IZ,gZ,CZ,BZ,QZ,EZ,iZ,oZ,tZ,DZ,eZ,SZ,yZ,aZ,pZ,KZ,sZ,kZ,rZ,wZ,MZ,nZ,cZ,hZ,GZ,JZ,UZ,NZ,_Z,lZ,FZ,YZ,RZ,qZ,dZ,LZ,OZ,HZ,fZ,mZ,uZ,bZ,jZ,TZ,PZ,xZ,ZZ,VZ,XZ,vZ,zZ,WZ,$Z,AV,IV,gV,CV,BV,QV,EV,iV,oV,tV,DV,eV,SV,yV,aV,pV,KV,sV,kV,rV,wV,MV,nV,cV,hV,GV,JV,UV,NV,_V,lV,FV,YV,RV,qV,dV,LV,OV,HV,fV,mV,uV,bV,jV,TV,PV,xV,ZV,VV,XV,vV,zV,WV,$V,AX,IX,gX,CX,BX,QX,EX,iX,oX,tX,DX,eX,SX,yX,aX,pX,KX,sX,kX,rX,wX,MX,nX,cX,hX,GX,JX,UX,NX,_X,lX,FX,YX,RX,qX,dX,LX,OX,HX,fX,mX,uX,bX,jX,TX,PX,xX,ZX,VX,XX,vX,zX,WX,$X,Av,Iv,gv,Cv,Bv,Qv,Ev,iv,ov,tv,Dv,ev,Sv,yv,av,pv,Kv,sv,kv,rv,wv,Mv,nv,cv,hv,Gv,Jv,Uv,Nv,_v,lv,Fv,Yv,Rv,qv,dv,Lv,Ov,Hv,fv,mv,uv,bv,jv,Tv,Pv,xv,Zv,Vv,Xv,vv,zv,Wv,$v,Az,Iz,gz,Cz,Bz,Qz,Ez,iz,oz,tz,Dz,ez,Sz,yz,az,pz,Kz,sz,kz,rz,wz,Mz,nz,cz,hz,Gz,Jz,Uz,Nz,_z,lz,Fz,Yz,Rz,qz,dz,Lz,Oz,Hz,fz,mz,uz,bz,jz,Tz,Pz,xz,Zz,Vz,Xz,vz,zz,Wz,$z,AW,IW,gW,CW,BW,QW,EW,iW,oW,tW,DW,eW,SW,yW,aW,pW,KW,sW,kW,rW,wW,MW,nW,cW,hW,GW,JW,UW,NW,_W,lW,FW,YW,RW,qW,dW,LW,OW,HW,fW,mW,uW,bW,jW,TW,PW,xW,ZW,VW,XW,vW,zW,WW,$W,A$,I$,g$,C$,B$,Q$,E$,i$,o$,t$,D$,e$,S$,y$,a$,p$,K$,s$,k$,r$,w$,M$,n$,c$,h$,G$,J$,U$,N$,_$,l$,F$,Y$,R$,q$,d$,L$,O$,H$,f$,m$,u$,b$,j$,T$,P$,x$,Z$,V$,X$,v$,z$,W$,$$,A0,I0,g0,C0,B0,Q0,E0,i0,o0,t0,D0,e0,S0,y0,a0,p0,K0,s0,k0,r0,w0,M0,n0,c0,h0,G0,J0,U0,N0,_0,l0,F0,Y0,R0,q0,d0,L0,O0,H0,f0,m0,u0,b0,j0,T0,P0,x0,Z0,V0,X0,v0,z0,W0,$0,A4,I4,g4,C4,B4,Q4,E4,i4,o4,t4,D4,e4,S4,y4,a4,p4,K4,s4,k4,r4,w4,M4,n4,c4,h4,G4,J4,U4,N4,_4,l4,F4,Y4,R4,q4,d4,L4,O4,H4,f4,m4,u4,b4,j4,T4,P4,x4,Z4,V4,X4,v4,z4,W4,$4,A2,I2,g2,C2,B2,Q2,E2,i2,o2,t2,D2,e2,S2,y2,a2,p2,K2,s2,k2,r2,w2,M2,n2,c2,h2,G2,J2,U2,N2,_2,l2,F2,Y2,R2,q2,d2,L2,O2,H2,f2,m2,u2,b2,j2,T2,P2,x2,Z2,V2,X2,v2,z2,W2,$2,A3,I3,g3,C3,B3,Q3,E3,i3,o3,t3,D3,e3,S3,y3,a3,p3,K3,s3,k3,r3,w3,M3,n3,c3,h3,G3,J3,U3,N3,_3,l3,F3,Y3,R3,q3,d3,L3,O3,H3,f3,m3,u3,b3,j3,T3,P3,x3,Z3,V3,X3,v3,z3,W3,$3,A8,I8,g8,C8,B8,Q8,E8,i8,o8,t8,D8,e8,S8,y8,a8,p8,K8,s8,k8,r8,w8,M8,n8,c8,h8,G8,J8,U8,N8,_8,l8,F8,Y8,R8,q8,d8,L8,O8,H8,f8,m8,u8,b8,j8,T8,P8,x8,Z8,V8,X8,v8,z8,W8,$8,A5,I5,g5,C5,B5,Q5,E5,i5,o5,t5,D5,e5,S5,y5,a5,p5,K5,s5,k5,r5,w5,M5,n5,c5,h5,G5,J5,U5,N5,_5,l5,F5,Y5,R5,q5,d5,L5,O5,H5,f5,m5,u5,b5,j5,T5,P5,x5,Z5,V5,X5,v5,z5,W5,$5,A1,I1,g1,C1,B1,Q1,E1,i1,o1,t1,D1,e1,S1,y1,a1,p1,K1,s1,k1,r1,w1,M1,n1,c1,h1,G1,J1,U1,N1,_1,l1,F1,Y1,R1,q1,d1,L1,O1,H1,f1,m1,u1,b1,j1,T1,P1,x1,Z1,V1,X1,v1,z1,W1,$1,A9,I9,g9,C9,B9,Q9,E9,i9,o9,t9,D9,e9,S9,y9,a9,p9,K9,s9,k9,r9,w9,M9,n9,c9,h9,G9,J9,U9,N9,_9,l9,F9,Y9,R9,q9,d9,L9,O9,H9,f9,m9,u9,b9,j9,T9,P9,x9,Z9,V9,X9,v9,z9,W9,$9,A6,I6,g6,C6,B6,Q6,E6,i6,o6,t6,D6,e6,S6,y6,a6,p6,K6,s6,k6,r6,w6,M6,n6,c6,h6,G6,J6,U6,N6,_6,l6,F6,Y6,R6,q6,d6,L6,O6,H6,f6,m6,u6,b6,j6,T6,P6,x6,Z6,V6,X6,v6,z6,W6,$6,A7,I7,g7,C7,B7,Q7,E7,i7,o7,t7,D7,e7,S7,y7,a7,p7,K7,s7,k7,r7,w7,M7,n7,c7,h7,G7,J7,U7,N7,_7,l7,F7,Y7,R7,q7,d7,L7,O7,H7,f7,m7,u7,b7,j7,T7,P7,x7,Z7,V7,X7,v7,z7,W7,$7,AAA,IAA,gAA,CAA,BAA,QAA,EAA,iAA,oAA,tAA,DAA,eAA,SAA,yAA,aAA,pAA,KAA,sAA,kAA,rAA,wAA,MAA,nAA,cAA,hAA,GAA,JAA,UAA,NAA,_AA,lAA,FAA,YAA,RAA,qAA,dAA,LAA,OAA,HAA,fAA,mAA,uAA,bAA,jAA,TAA,PAA,xAA,ZAA,VAA,XAA,vAA,zAA,WAA,$AA,AIA,IIA,gIA,CIA,BIA,QIA,EIA,iIA,oIA,tIA,DIA,eIA,SIA,yIA,aIA,pIA,KIA,sIA,kIA,rIA,wIA,MIA,nIA,cIA,hIA,GIA,JIA,UIA,NIA,_IA,lIA,FIA,YIA,RIA,qIA,dIA,LIA,OIA,HIA,fIA,mIA,uIA,bIA,jIA,TIA,PIA,xIA,ZIA,VIA,XIA,vIA,zIA,WIA,$IA,AgA,IgA,ggA,CgA,BgA,QgA,EgA,igA,ogA,tgA,DgA,egA,SgA,ygA,agA,pgA,KgA,sgA,kgA,rgA,wgA,MgA,ngA,cgA,hgA,GgA,JgA,UgA,NgA,_gA,lgA,FgA,YgA,RgA,qgA,dgA,LgA,OgA,HgA,fgA,mgA,ugA,bgA,jgA,TgA,PgA,xgA,ZgA,VgA,XgA,vgA,zgA,WgA,$gA,ACA,ICA,gCA,CCA,BCA,QCA,ECA,iCA,oCA,tCA,DCA,eCA,SCA,yCA,aCA,pCA,KCA,sCA,kCA,rCA,wCA,MCA,nCA,cCA,hCA,GCA,JCA,UCA,NCA,_CA,lCA,FCA,YCA,RCA,qCA,dCA,LCA,OCA,HCA,fCA,mCA,uCA,bCA,jCA,TCA,PCA,xCA,ZCA,VCA,XCA,vCA,zCA,WCA,$CA,ABA,IBA,gBA,CBA,BBA,QBA,EBA,iBA,oBA,tBA,DBA,eBA,SBA,yBA,aBA,pBA,KBA,sBA,kBA,rBA,wBA,MBA,nBA,cBA,hBA,GBA,JBA,UBA,NBA,_BA,lBA,FBA,YBA,RBA,qBA,dBA,LBA,OBA,HBA,fBA,mBA,uBA,bBA,jBA,TBA,PBA,xBA,ZBA,VBA,XBA,vBA,zBA,WBA,$BA,AQA,IQA,gQA,CQA,BQA,QQA,EQA,iQA,oQA,tQA,DQA,eQA,SQA,yQA,aQA,pQA,KQA,sQA,kQA,rQA,wQA,MQA,nQA,cQA,hQA,GQA,JQA,UQA,NQA,_QA,lQA,FQA,YQA,RQA,qQA,dQA,LQA,OQA,HQA,fQA,mQA,uQA,bQA,jQA,TQA,PQA,xQA,ZQA,VQA,XQA,vQA,zQA,WQA,$QA,AEA,IEA,gEA,CEA,BEA,QEA,EEA,iEA,oEA,tEA,DEA,eEA,SEA,yEA,aEA,pEA,KEA,sEA,kEA,rEA,wEA,MEA,nEA,cEA,hEA,GEA,JEA,UEA,NEA,_EA,lEA,FEA,YEA,REA,qEA,dEA,LEA,OEA,HEA,fEA,mEA,uEA,bEA,jEA,TEA,PEA,xEA,ZEA,VEA,XEA,vEA,zEA,WEA,$EA,AiA,IiA,giA,CiA,BiA,QiA,EiA,iiA,oiA,tiA,DiA,eiA,SiA,yiA,aiA,piA,KiA,siA,kiA,riA,wiA,MiA,niA,ciA,hiA,GiA,JiA,UiA,NiA,_iA,liA,FiA,YiA,RiA,qiA,diA,LiA,OiA,HiA,fiA,miA,uiA,biA,jiA,TiA,PiA,xiA,ZiA,ViA,XiA,viA,ziA,WiA,$iA,AoA,IoA,goA,CoA,BoA,QoA,EoA,ioA,ooA,toA,DoA,eoA,SoA,yoA,aoA,poA,KoA,soA,koA,roA,woA,MoA,noA,coA,hoA,GoA,JoA,UoA,NoA,_oA,loA,FoA,YoA,RoA,qoA,doA,LoA,OoA,HoA,foA,moA,uoA,boA,joA,ToA,PoA,xoA,ZoA,VoA,XoA,voA,zoA,WoA,$oA,AtA,ItA,gtA,CtA,BtA,QtA,EtA,itA,otA,ttA,DtA,etA,StA,ytA,atA,ptA,KtA,stA,ktA,rtA,wtA,MtA,ntA,ctA,htA,GtA,JtA,UtA,NtA,_tA,ltA,FtA,YtA,RtA,qtA,dtA,LtA,OtA,HtA,ftA,mtA,utA,btA,jtA,TtA,PtA,xtA,ZtA,VtA,XtA,vtA,ztA,WtA,$tA,ADA,IDA,gDA,CDA,BDA,QDA,EDA,iDA,oDA,tDA,DDA,eDA,SDA,yDA,aDA,pDA,KDA,sDA,kDA,rDA,wDA,MDA,nDA,cDA,hDA,GDA,JDA,UDA,NDA,_DA,lDA,FDA,YDA,RDA,qDA,dDA,LDA,ODA,HDA,fDA,mDA,uDA,bDA,jDA,TDA,PDA,xDA,ZDA,VDA,XDA,vDA,zDA,WDA,$DA,AeA,IeA,geA,CeA,BeA,QeA,EeA,ieA,oeA,teA,DeA,eeA,SeA,yeA,aeA,peA,KeA,seA,keA,reA,weA,MeA,neA,ceA,heA,GeA,JeA,UeA,NeA,_eA,leA,FeA,YeA,ReA,qeA,deA,LeA,OeA,HeA,feA,meA,ueA,beA,jeA,TeA,PeA,xeA,ZeA,VeA,XeA,veA,zeA,WeA,$eA,ASA,ISA,gSA,CSA,BSA,QSA,ESA,iSA,oSA,tSA,DSA,eSA,SSA,ySA,aSA,pSA,KSA,sSA,kSA,rSA,wSA,MSA,nSA,cSA,hSA,GSA,JSA,USA,NSA,_SA,lSA,FSA,YSA,RSA,qSA,dSA,LSA,OSA,HSA,fSA,mSA,uSA,bSA,jSA,TSA,PSA,xSA,ZSA,VSA,XSA,vSA,zSA,WSA,$SA,AyA,IyA,gyA,CyA,ByA,QyA,EyA,iyA,oyA,tyA,DyA,eyA,SyA,yyA,ayA,pyA,KyA,syA,kyA,ryA,wyA,MyA,nyA,cyA,hyA,GyA,JyA,UyA,NyA,_yA,lyA,FyA,YyA,RyA,qyA,dyA,LyA,OyA,HyA,fyA,myA,uyA,byA,jyA,TyA,PyA,xyA,ZyA,VyA,XyA,vyA,zyA,WyA,$yA,AaA,IaA,gaA,CaA,BaA,QaA,EaA,iaA,oaA,taA,DaA,eaA,SaA,yaA,aaA,paA,KaA,saA,kaA,raA,waA,MaA,naA,caA,haA,GaA,JaA,UaA,NaA,_aA,laA,FaA,Ya