@cognite/reveal 4.39.0 → 4.39.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ var on = Object.create, sn = Object.defineProperty, cn = Object.getOwnPropertyDe
24
24
  enumerable: !0
25
25
  }) : n, e)), hn = {
26
26
  name: "@cognite/reveal",
27
- version: "4.39.0",
27
+ version: "4.39.1",
28
28
  description: "WebGL based 3D viewer for CAD and point clouds processed in Cognite Data Fusion.",
29
29
  homepage: "https://github.com/cognitedata/reveal/tree/master/viewer",
30
30
  repository: {
@@ -119,7 +119,7 @@ var on = Object.create, sn = Object.defineProperty, cn = Object.getOwnPropertyDe
119
119
  "eslint-plugin-unused-imports": "^4.0.0",
120
120
  globals: "^17.0.0",
121
121
  "typescript-eslint": "^8.0.0",
122
- glob: "^13.0.0",
122
+ glob: "^14.0.0",
123
123
  "happy-dom": "^21.0.0",
124
124
  "moq.ts": "10.0.8",
125
125
  prettier: "^3.2.5",
@@ -139,7 +139,7 @@ var on = Object.create, sn = Object.defineProperty, cn = Object.getOwnPropertyDe
139
139
  three: "0.186.1"
140
140
  },
141
141
  files: ["dist"],
142
- packageManager: "pnpm@12.15.0"
142
+ packageManager: "pnpm@12.16.1"
143
143
  }, gn = "precision highp float;vec4 LinearTosRGB(in vec4 value){return vec4(mix(pow(value.rgb,vec3(0.41666))*1.055-vec3(0.055),value.rgb*12.92,vec3(lessThanEqual(value.rgb,vec3(0.0031308)))),value.a);}vec3 derivateNormal(vec3 v_viewPosition){vec3 fdx=vec3(dFdx(v_viewPosition.x),dFdx(v_viewPosition.y),dFdx(v_viewPosition.z));vec3 fdy=vec3(dFdy(v_viewPosition.x),dFdy(v_viewPosition.y),dFdy(v_viewPosition.z));vec3 normal=normalize(cross(fdx,fdy));return normal;}vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;\n#if defined(IS_TEXTURED)\nuniform sampler2D tDiffuse;in vec2 v_uv;\n#else\nin vec3 v_color;\n#endif\nin vec3 v_viewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(v_viewPosition)){discard;}\n#if defined(IS_TEXTURED)\nvec3 diffuseColor=texture(tDiffuse,v_uv).rgb;diffuseColor=LinearTosRGB(vec4(diffuseColor,1.0)).xyz;vec4 color=determineColor(diffuseColor,appearance);color=vec4(mix(diffuseColor,vec3(color),0.6),color.a);\n#else\nvec4 color=determineColor(v_color,appearance);\n#endif\nvec3 normal=derivateNormal(v_viewPosition);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.TriangleMesh);}", _n = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;\n#if defined(IS_TEXTURED)\nin vec2 uv;\n#else\nin vec3 color;\n#endif\nin vec3 position;in float treeIndex;out vec3 v_viewPosition;out vec4 v_nodeAppearanceTexel;\n#if defined(IS_TEXTURED)\nout vec2 v_uv;\n#else\nout vec3 v_color;\n#endif\nout highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec4 modelViewPosition=modelViewMatrix*treeIndexWorldTransform*vec4(position,1.0);v_viewPosition=modelViewPosition.xyz;\n#if defined(IS_TEXTURED)\nv_uv=uv;\n#else\nv_color=color;\n#endif\ngl_Position=projectionMatrix*modelViewPosition;}", vn = "precision highp float;vec3 derivateNormal(vec3 v_viewPosition){vec3 fdx=vec3(dFdx(v_viewPosition.x),dFdx(v_viewPosition.y),dFdx(v_viewPosition.z));vec3 fdy=vec3(dFdy(v_viewPosition.x),dFdy(v_viewPosition.y),dFdy(v_viewPosition.z));vec3 normal=normalize(cross(fdx,fdy));return normal;}vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec3 v_color;in vec3 v_viewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(v_viewPosition)){discard;}vec4 color=determineColor(v_color,appearance);vec3 normal=derivateNormal(v_viewPosition);updateFragmentColor(renderMode,color,treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.InstancedMesh);}", yn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;out vec3 v_color;out vec3 v_viewPosition;out highp vec2 v_treeIndexPacked;out vec4 v_nodeAppearanceTexel;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);v_color=a_color;vec3 transformed=(a_instanceMatrix*vec4(position,1.0)).xyz;vec4 modelViewPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);v_viewPosition=modelViewPosition.xyz;gl_Position=projectionMatrix*modelViewPosition;}", bn = "precision highp float;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec2 v_xy;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);float dist=dot(v_xy,v_xy);vec3 normal=normalize(v_normal);if(dist>0.25)discard;NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", xn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;in vec3 a_normal;out vec2 v_xy;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out vec4 v_nodeAppearanceTexel;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);v_xy=vec2(position.x,position.y);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 transformed=(a_instanceMatrix*vec4(position,1.0)).xyz;vec4 mvPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(normalize(a_normal),0.0)).xyz;vViewPosition=mvPosition.xyz;gl_Position=projectionMatrix*mvPosition;}", Sn = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in vec4 v_centerB;in vec4 v_W;in vec4 v_U;in float v_angle;in float v_arcAngle;in vec4 v_centerA;in vec4 v_V;in vec3 v_color;in vec3 v_normal;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec3 normal=normalize(v_normal);vec4 color=determineColor(v_color,appearance);float R1=v_centerB.w;vec4 U=v_U;vec4 W=v_W;vec4 V=v_V;float height=length(v_centerA.xyz-v_centerB.xyz);float R2=v_centerA.w;float dR=R2-R1;mat3 basis=mat3(U.xyz,V.xyz,W.xyz);vec3 surfacePoint=vec3(U.w,V.w,W.w);vec3 rayTarget=surfacePoint;float rayTargetDist=length(rayTarget);\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 rayDirection=vec3(0.0,0.0,-1.0);\n#else\nvec3 rayDirection=normalize(rayTarget);\n#endif\nvec3 diff=rayTarget-v_centerB.xyz;vec3 E=diff*basis;vec3 D=rayDirection*basis;float a=dot(D.xy,D.xy);float b=dot(E.xy,D.xy);float c=dot(E.xy,E.xy)-R1*R1;if(R1!=R2){float dRLInv=dR/height;float dRdRL2Inv=dRLInv*dRLInv;a-=D.z*D.z*dRdRL2Inv;b-=dRLInv*(E.z*D.z*dRLInv+R1*D.z);c-=dRLInv*(E.z*E.z*dRLInv+2.0*R1*E.z);}float d=b*b-a*c;if(d<0.0){discard;}float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;if(dist2<dist1){float tmp=dist1;dist1=dist2;dist2=tmp;}float dist=dist1;vec3 intersectionPoint=E+dist*D;float theta=atan(intersectionPoint.y,intersectionPoint.x);if(theta<v_angle)theta+=2.0*PI;if(theta<v_angle)theta+=2.0*PI;vec3 p=rayTarget+dist*rayDirection;bool isInner=false;if(intersectionPoint.z<=0.0||intersectionPoint.z>height||theta>v_angle+v_arcAngle||isClipped(p)||rayTargetDist+dist<0.0){isInner=true;dist=dist2;intersectionPoint=E+dist*D;theta=atan(intersectionPoint.y,intersectionPoint.x);p=rayTarget+dist*rayDirection;if(theta<v_angle)theta+=2.0*PI;if(theta<v_angle)theta+=2.0*PI;if(intersectionPoint.z<=0.0||intersectionPoint.z>height||theta>v_angle+v_arcAngle||isClipped(p)||rayTargetDist+dist<0.0){discard;}}\n#if !defined(COGNITE_RENDER_COLOR_ID) && !defined(COGNITE_RENDER_DEPTH)\nif(R1!=R2){vec3 n=-normalize(W.xyz);vec3 P1=v_centerB.xyz;vec3 P2=v_centerA.xyz;vec3 A=cross(P1-p,P2 - p);vec3 t=normalize(cross(n,A));vec3 o1=P1+R1*t;vec3 o2=P2+R2*t;vec3 B=o2-o1;normal=normalize(cross(A,B));}else{vec3 p_local=p-v_centerB.xyz;normal=normalize(p_local-W.xyz*dot(p_local,W.xyz));}if(dot(normal,vec3(0.0,0.0,1.0))<0.0){normal*=-1.0;}\n#endif\nfloat fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", Cn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}bool isWithinSpan(vec3 point,vec3 span){return all(lessThan(abs(point),span));}vec3 transformQuadToCoverScreenInViewSpace(vec3 position,mat4 projectionMatrix,float near){float tanFov=1.0/projectionMatrix[1][1];float aspect=projectionMatrix[1][1]/projectionMatrix[0][0];float maxAspect=max(aspect,1.0/aspect);vec3 fullScreenQuadCorner=vec3(position.xy*maxAspect*tanFov*near,-near - 1e-6);return fullScreenQuadCorner;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in vec3 normal;in float a_treeIndex;in vec3 a_centerA;in vec3 a_centerB;in float a_radiusA;in float a_radiusB;in vec3 a_color;in vec3 a_localXAxis;in float a_angle;in float a_arcAngle;out vec4 v_centerB;out vec4 v_U;out vec4 v_W;out vec4 v_centerA;out vec4 v_V;out float v_angle;out float v_arcAngle;out vec3 v_color;out vec3 v_normal;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 centerA=mul3(treeIndexWorldTransform,a_centerA);vec3 centerB=mul3(treeIndexWorldTransform,a_centerB);vec3 center=0.5*(centerA+centerB);float halfHeight=0.5*length(centerA-centerB);vec3 dir=normalize(centerA-centerB);vec3 newPosition=position;vec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-center;float maxRadius=max(a_radiusA,a_radiusB);float leftUpScale=maxRadius;vec3 lDir=dir;if(dot(objectToCameraModelSpace,dir)<0.0){lDir=-lDir;}vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));newPosition.x*=1.0-(maxRadius*(position.x+1.0)*0.0025/halfHeight);mat3 billboardWorldRotation=mat3(lDir,left,up);vec3 cylinderAxisScales=vec3(halfHeight,maxRadius,maxRadius);mat3 inverseBillboardWorldRotation=transpose(billboardWorldRotation);vec3 cameraPosInCylinderSpace=inverseBillboardWorldRotation*(rayOrigin-center);mat3 billboardWorldScaleRotation=mat3(halfHeight*lDir,maxRadius*left,maxRadius*up);vec3 localBillboardPosition=center+billboardWorldScaleRotation*newPosition;vec3 surfacePoint=mul3(modelViewMatrix,localBillboardPosition);float near=min(1.0,projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0));if(isWithinSpan(cameraPosInCylinderSpace,cylinderAxisScales+vec3(near))){surfacePoint=transformQuadToCoverScreenInViewSpace(newPosition,projectionMatrix,near);}gl_Position=projectionMatrix*vec4(surfacePoint,1.0);v_angle=a_angle;v_arcAngle=a_arcAngle;v_W.xyz=dir;v_U.xyz=(treeIndexWorldTransform*vec4(a_localXAxis,0.0)).xyz;v_W.xyz=normalize(normalMatrix*v_W.xyz);v_U.xyz=normalize(normalMatrix*v_U.xyz);v_W.w=surfacePoint.z;v_U.w=surfacePoint.x;mat4 modelToTransformOffset=modelViewMatrix*treeIndexWorldTransform;float radiusB=length((modelToTransformOffset*vec4(a_localXAxis*a_radiusB,0.0)).xyz);float radiusA=length((modelToTransformOffset*vec4(a_localXAxis*a_radiusA,0.0)).xyz);v_centerB.xyz=mul3(modelViewMatrix,centerB);v_centerB.w=radiusB;v_V.xyz=-cross(v_U.xyz,v_W.xyz);v_V.w=surfacePoint.y;v_centerA.xyz=mul3(modelViewMatrix,centerA);v_centerA.w=radiusA;v_color=a_color;v_normal=normalMatrix*normal;}", wn = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in vec4 U;in vec4 V;in vec4 axis;in vec4 v_centerA;in vec4 v_centerB;in float height;in vec3 v_color;in vec3 v_normal;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(v_normal);mat3 basis=mat3(U.xyz,V.xyz,axis.xyz);vec3 surfacePoint=vec3(U.w,V.w,axis.w);vec3 rayTarget=surfacePoint;float rayTargetDist=length(rayTarget);\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 rayDirection=vec3(0.0,0.0,-1.0);\n#else\nvec3 rayDirection=normalize(rayTarget);\n#endif\nvec3 diff=rayTarget-v_centerA.xyz;vec3 E=diff*basis;float L=height;vec3 D=rayDirection*basis;float R1=v_centerA.w;float R2=v_centerB.w;float dR=R2-R1;float a=dot(D.xy,D.xy);float b=dot(E.xy,D.xy);float c=dot(E.xy,E.xy)-R1*R1;float L2Inv=1.0/(L*L);if(R1!=R2){float dRLInv=dR/L;float dRdRL2Inv=dRLInv*dRLInv;a-=D.z*D.z*dRdRL2Inv;b-=dRLInv*(E.z*D.z*dRLInv+R1*D.z);c-=dRLInv*(E.z*E.z*dRLInv+2.0*R1*E.z);}vec2 displacement=((v_centerB.xyz-v_centerA.xyz)*basis).xy;float displacementLengthSquared=dot(displacement,displacement);a+=D.z*(D.z*displacementLengthSquared-2.0*L*dot(D.xy,displacement))*L2Inv;b+=(D.z*E.z*displacementLengthSquared-L*(D.x*E.z*displacement.x+D.y*E.z*displacement.y+D.z*E.x*displacement.x+D.z*E.y*displacement.y))*L2Inv;c+=E.z*(E.z*displacementLengthSquared-2.0*L*dot(E.xy,displacement))*L2Inv;float d=b*b-a*c;if(d<0.0){discard;}float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;if(dist2<dist1){float tmp=dist1;dist1=dist2;dist2=tmp;}float dist=dist1;float intersectionPointZ=E.z+dist*D.z;vec3 p=rayTarget+dist*rayDirection;if(intersectionPointZ<=0.0||intersectionPointZ>=L||isClipped(p)||rayTargetDist+dist<0.0){dist=dist2;intersectionPointZ=E.z+dist*D.z;p=rayTarget+dist*rayDirection;if(intersectionPointZ<=0.0||intersectionPointZ>=L||isClipped(p)||rayTargetDist+dist<0.0){discard;}}\n#if !defined(COGNITE_RENDER_COLOR_ID) && !defined(COGNITE_RENDER_DEPTH)\nvec3 n=normalize(-axis.xyz);vec3 v_centerA=v_centerA.xyz;vec3 v_centerB=v_centerB.xyz;vec3 A=cross(v_centerA-p,v_centerB - p);vec3 t=normalize(cross(n,A));vec3 o1=v_centerA+R1*t;vec3 o2=v_centerB+R2*t;vec3 B=o2-o1;normal=normalize(cross(A,B));\n#endif\nif(dot(normal,vec3(0.0,0.0,1.0))<0.0){normal*=-1.0;}float fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", Tn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}bool isWithinSpan(vec3 point,vec3 span){return all(lessThan(abs(point),span));}vec3 transformQuadToCoverScreenInViewSpace(vec3 position,mat4 projectionMatrix,float near){float tanFov=1.0/projectionMatrix[1][1];float aspect=projectionMatrix[1][1]/projectionMatrix[0][0];float maxAspect=max(aspect,1.0/aspect);vec3 fullScreenQuadCorner=vec3(position.xy*maxAspect*tanFov*near,-near - 1e-6);return fullScreenQuadCorner;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in vec3 normal;in float a_treeIndex;in vec3 a_centerA;in vec3 a_centerB;in float a_radiusA;in float a_radiusB;in vec3 a_normal;in vec3 a_color;out vec4 v_centerA;out vec4 v_centerB;out vec4 U;out vec4 V;out vec4 axis;out float height;out vec3 v_color;out vec3 v_normal;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);mat4 modelToTransformOffset=modelViewMatrix*treeIndexWorldTransform;vec3 centerA=mul3(treeIndexWorldTransform,a_centerA);vec3 centerB=mul3(treeIndexWorldTransform,a_centerB);vec3 normalWithOffset=normalize((treeIndexWorldTransform*vec4(a_normal,0)).xyz);vec3 centerAInCameraSpace=(modelViewMatrix*vec4(centerA,1.0)).xyz;vec3 centerBInCameraSpace=(modelViewMatrix*vec4(centerB,1.0)).xyz;height=dot(normalize(centerA-centerB),normalWithOffset)*length(centerAInCameraSpace - centerBInCameraSpace);vec3 lDir;vec3 center=0.5*(centerA+centerB);vec3 newPosition=position;vec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-center;vec3 maxCenterProjected=centerA-dot(centerA,normalWithOffset)*normalWithOffset;vec3 minCenterProjected=centerB-dot(centerB,normalWithOffset)*normalWithOffset;float distanceBetweenProjectedCenters=length(maxCenterProjected-minCenterProjected);lDir=normalWithOffset;float dirSign=1.0;if(dot(objectToCameraModelSpace,lDir)<0.0){dirSign=-1.0;lDir*=-1.;}vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));axis.xyz=-normalWithOffset;U.xyz=cross(objectToCameraModelSpace,axis.xyz);V.xyz=cross(U.xyz,axis.xyz);axis.xyz=normalize(normalMatrix*axis.xyz);U.xyz=normalize(normalMatrix*U.xyz);V.xyz=normalize(normalMatrix*V.xyz);newPosition.x*=1.0-(a_radiusA*(position.x+1.0)*0.0025/height);v_centerA.xyz=mul3(modelViewMatrix,centerA);v_centerB.xyz=mul3(modelViewMatrix,centerB);float radiusA=length((modelToTransformOffset*vec4(normalize(vec3(1.0))*a_radiusA,0.0)).xyz);float radiusB=length((modelToTransformOffset*vec4(normalize(vec3(1.0))*a_radiusB,0.0)).xyz);v_centerA.w=radiusA;v_centerB.w=radiusB;float radiusIncludedDisplacement=0.5*(2.0*max(a_radiusA,a_radiusB)+distanceBetweenProjectedCenters);mat3 billboardWorldRotation=mat3(lDir,left,up);vec3 cylinderAxisScales=vec3(height,radiusIncludedDisplacement,radiusIncludedDisplacement);mat3 inverseBillboardWorldRotation=transpose(billboardWorldRotation);vec3 cameraPosInCylinderSpace=inverseBillboardWorldRotation*(rayOrigin-center);mat3 billboardWorldScaleRotation=mat3(0.5*height*lDir,radiusIncludedDisplacement*left,radiusIncludedDisplacement*up);vec3 localBillboardPosition=center+billboardWorldScaleRotation*newPosition;vec3 surfacePoint=mul3(modelViewMatrix,localBillboardPosition);float near=min(1.0,projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0));if(isWithinSpan(cameraPosInCylinderSpace,cylinderAxisScales+vec3(near))){surfacePoint=transformQuadToCoverScreenInViewSpace(newPosition,projectionMatrix,near);}U.w=surfacePoint.x;V.w=surfacePoint.y;axis.w=surfacePoint.z;v_color=a_color;v_normal=normalMatrix*normal;gl_Position=projectionMatrix*vec4(surfacePoint,1.0);}", En = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in vec4 center;in float hRadius;in float height;in vec4 U;in vec4 V;in vec4 sphereNormal;in vec3 v_color;in vec3 v_normal;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(sphereNormal.xyz);float vRadius=center.w;float ratio=vRadius/hRadius;mat3 basis=mat3(U.xyz,V.xyz,sphereNormal.xyz);mat3 scaledBasis=mat3(ratio*U.xyz,ratio*V.xyz,sphereNormal.xyz);vec3 surfacePoint=vec3(U.w,V.w,sphereNormal.w);vec3 rayTarget=surfacePoint;\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 rayDirection=vec3(0.0,0.0,-1.0);\n#else\nvec3 rayDirection=normalize(rayTarget);\n#endif\nvec3 diff=rayTarget-center.xyz;vec3 E=diff*scaledBasis;vec3 D=rayDirection*scaledBasis;float a=dot(D,D);float b=dot(E,D);float c=dot(E,E)-vRadius*vRadius;float d=b*b-a*c;if(d<0.0)discard;float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;if(dist2<dist1){float tmp=dist1;dist1=dist2;dist2=tmp;}float dist=dist1;float intersectionPointZ=E.z+dist*D.z;vec3 p=rayTarget+dist*rayDirection;if(intersectionPointZ<=vRadius-height||intersectionPointZ>vRadius||isClipped(p)){dist=dist2;intersectionPointZ=E.z+dist*D.z;p=rayTarget+dist*rayDirection;if(intersectionPointZ<=vRadius-height||intersectionPointZ>vRadius||isClipped(p)){discard;}}\n#if !defined(COGNITE_RENDER_COLOR_ID) && !defined(COGNITE_RENDER_DEPTH)\nnormal=vec3(p-center.xyz)*basis;normal.z=normal.z*(hRadius/vRadius)*(hRadius/vRadius);normal=normalize(basis*normal);if(dot(normal,rayDirection)>0.){normal=-normal;}\n#endif\nfloat fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", Dn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 inverseNormalMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in float a_treeIndex;in vec3 a_color;in vec3 a_center;in vec3 a_normal;in float a_horizontalRadius;in float a_verticalRadius;in float a_height;out vec4 center;out float hRadius;out float height;out vec4 U;out vec4 V;out vec4 sphereNormal;out vec3 v_color;out vec3 v_normal;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 centerWithOffset=mul3(treeIndexWorldTransform,a_center).xyz;vec3 normalWithOffset=(treeIndexWorldTransform*vec4(a_normal,0)).xyz;vec3 lDir;float distanceToCenterOfSegment=a_verticalRadius-a_height*0.5;vec3 centerOfSegment=centerWithOffset+normalWithOffset*distanceToCenterOfSegment;\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 objectToCameraModelSpace=inverseNormalMatrix*vec3(0.0,0.0,1.0);\n#else\nvec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-centerOfSegment;\n#endif\nvec3 newPosition=position;float bb=dot(objectToCameraModelSpace,normalWithOffset);if(bb<0.0){lDir=-normalWithOffset;}else{lDir=normalWithOffset;}vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));newPosition.x*=1.0-(a_verticalRadius*(position.x+1.0)*0.0025/a_height);float ratio=max(0.0,1.0-a_height/a_verticalRadius);float maxRadiusOfSegment=a_horizontalRadius*sqrt(1.0-ratio*ratio);vec3 displacement=vec3(newPosition.x*a_height*0.5,maxRadiusOfSegment*newPosition.y,maxRadiusOfSegment*newPosition.z);vec3 surfacePoint=centerOfSegment+mat3(lDir,left,up)*displacement;vec3 transformed=surfacePoint;surfacePoint=mul3(modelViewMatrix,surfacePoint);center.xyz=mul3(modelViewMatrix,centerWithOffset);center.w=a_verticalRadius;hRadius=a_horizontalRadius;height=a_height;v_color=a_color;sphereNormal.xyz=normalMatrix*normalWithOffset;U.xyz=normalMatrix*up;V.xyz=normalMatrix*left;U.w=surfacePoint.x;V.w=surfacePoint.y;sphereNormal.w=surfacePoint.z;vec4 mvPosition=modelViewMatrix*vec4(transformed,1.0);gl_Position=projectionMatrix*mvPosition;}", On = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in highp vec2 v_treeIndexPacked;in vec3 v_color;in vec3 v_viewPos;in mat3 v_modelBasis;in vec3 v_centerB;in vec2 v_angles;in vec4 v_planeA;in vec4 v_planeB;in float v_radius;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec4 color=determineColor(v_color,appearance);vec3 rayTarget=v_viewPos;vec3 rayDirection=normalize(rayTarget);float rayTargetDist=length(rayTarget);vec3 diff=rayTarget-v_centerB;vec3 E=diff*v_modelBasis;vec3 D=rayDirection*v_modelBasis;float a=dot(D.xy,D.xy);float b=dot(E.xy,D.xy);float c=dot(E.xy,E.xy)-v_radius*v_radius;float d=b*b-a*c;if(d<0.0)discard;float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;float dist=min(dist1,dist2);vec3 intersectionPoint=E+dist*D;float theta=atan(intersectionPoint.y,intersectionPoint.x);theta+=theta<v_angles[0]? 2.0*PI : 0.0;theta+=theta<v_angles[0]? 2.0*PI : 0.0;vec3 p=rayTarget+dist*rayDirection;vec3 planeACenter=vec3(0.0,0.0,v_planeA.w);vec3 planeANormal=v_planeA.xyz;vec3 planeBCenter=vec3(0.0,0.0,v_planeB.w);vec3 planeBNormal=v_planeB.xyz;float normalFactor=1.0;if(dot(intersectionPoint-planeACenter,planeANormal)>0.0||dot(intersectionPoint-planeBCenter,planeBNormal)>0.0||theta>v_angles[1]+v_angles[0]||isClipped(p)||rayTargetDist+dist<0.0){dist=max(dist1,dist2);intersectionPoint=E+dist*D;theta=atan(intersectionPoint.y,intersectionPoint.x);theta+=theta<0.0 ? 2.0*PI : 0.0;theta+=theta<v_angles[0]? 2.0*PI : 0.0;p=rayTarget+dist*rayDirection;if(dot(intersectionPoint-planeACenter,planeANormal)>0.0||dot(intersectionPoint-planeBCenter,planeBNormal)>0.0||theta>v_angles[1]+v_angles[0]||isClipped(p)||rayTargetDist+dist<0.0){discard;}normalFactor=-1.0;}vec3 p_local=p-v_centerB;vec3 normal=normalize(p_local-v_modelBasis[2]*dot(p_local,v_modelBasis[2]))*normalFactor;float fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", kn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}bool isWithinSpan(vec3 point,vec3 span){return all(lessThan(abs(point),span));}vec3 transformQuadToCoverScreenInViewSpace(vec3 position,mat4 projectionMatrix,float near){float tanFov=1.0/projectionMatrix[1][1];float aspect=projectionMatrix[1][1]/projectionMatrix[0][0];float maxAspect=max(aspect,1.0/aspect);vec3 fullScreenQuadCorner=vec3(position.xy*maxAspect*tanFov*near,-near - 1e-6);return fullScreenQuadCorner;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in vec3 normal;in float a_treeIndex;in vec3 a_centerA;in vec3 a_centerB;in float a_radius;in vec3 a_color;in vec4 a_planeA;in vec4 a_planeB;in vec3 a_localXAxis;in float a_angle;in float a_arcAngle;flat out float v_treeIndex;out vec3 v_centerB;out mat3 v_modelBasis;out vec3 v_viewPos;out vec4 v_planeA;out vec4 v_planeB;out vec2 v_angles;out vec3 v_color;out float v_radius;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);mat4 modelToView=modelViewMatrix*treeIndexWorldTransform;vec3 centerA=mul3(treeIndexWorldTransform,a_centerA);vec3 centerB=mul3(treeIndexWorldTransform,a_centerB);vec3 center=0.5*(centerA+centerB);float halfHeight=0.5*length(centerA-centerB);vec3 dir=normalize(centerA-centerB);vec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-center;vec3 lDir=faceforward(dir,-objectToCameraModelSpace,dir);vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));mat3 billboardWorldRotation=mat3(lDir,left,up);vec3 cylinderAxisScales=vec3(halfHeight,a_radius,a_radius);mat3 inverseBillboardWorldRotation=transpose(billboardWorldRotation);vec3 cameraPosInCylinderSpace=inverseBillboardWorldRotation*(rayOrigin-center);mat3 billboardWorldScaleRotation=mat3(halfHeight*lDir,a_radius*left,a_radius*up);vec3 localBillboardPosition=center+billboardWorldScaleRotation*position;vec3 viewBillboardPosition=mul3(modelViewMatrix,localBillboardPosition);float near=min(1.0,projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0));if(isWithinSpan(cameraPosInCylinderSpace,cylinderAxisScales+vec3(near))){viewBillboardPosition=transformQuadToCoverScreenInViewSpace(position,projectionMatrix,near);}gl_Position=projectionMatrix*vec4(viewBillboardPosition,1.0);v_treeIndex=a_treeIndex;v_angles[0]=a_angle;v_angles[1]=a_arcAngle;v_modelBasis[0]=normalize(normalMatrix*(treeIndexWorldTransform*vec4(a_localXAxis,0.0)).xyz);v_modelBasis[2]=normalize(normalMatrix*dir);v_modelBasis[1]=normalize(cross(v_modelBasis[2],v_modelBasis[0]));float radius=length((modelViewMatrix*vec4(a_localXAxis*a_radius,0.0)).xyz);v_centerB=mul3(modelViewMatrix,centerB);v_radius=radius;float planeAngleA=acos(dot(normalize(a_planeA.xyz),normalize(vec3(0.0,0.0,1.0))));float planeAngleB=acos(dot(normalize(a_planeB.xyz),normalize(vec3(0.0,0.0,-1.0))));vec4 planeA=a_planeA;planeA.w=length((modelViewMatrix*vec4(halfHeight*2.0*dir,0.0)).xyz)-tan(planeAngleA)*radius;vec4 planeB=a_planeB;planeB.w=tan(planeAngleB)*radius;v_planeA=planeA;v_planeB=planeB;v_viewPos=viewBillboardPosition;v_color=a_color;}", An = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform lowp int renderMode;in float v_oneMinusThicknessSqr;in vec2 v_xy;in float v_angle;in float v_arcAngle;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);float dist=dot(v_xy,v_xy);float theta=atan(v_xy.y,v_xy.x);vec3 normal=normalize(v_normal);theta+=theta<v_angle ? 2.0*PI : 0.0;theta+=theta<v_angle ? 2.0*PI : 0.0;if(dist>0.25||dist<0.25*v_oneMinusThicknessSqr||theta>=v_angle+v_arcAngle){discard;}updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", jn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;in float a_angle;in float a_arcAngle;in float a_thickness;in vec3 a_normal;out float v_oneMinusThicknessSqr;out vec2 v_xy;out float v_angle;out float v_arcAngle;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);v_oneMinusThicknessSqr=(1.0-a_thickness)*(1.0 - a_thickness);v_xy=vec2(position.x,position.y);v_angle=a_angle;v_arcAngle=a_arcAngle;mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 transformed=(a_instanceMatrix*vec4(position,1.0)).xyz;vec4 mvPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(normalize(a_normal),0.0)).xyz;vViewPosition=mvPosition.xyz;gl_Position=projectionMatrix*mvPosition;}", Mn = "precision highp float;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(v_normal);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", Nn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;in float a_arcAngle;in float a_radius;in float a_tubeRadius;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out vec4 v_nodeAppearanceTexel;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);float theta=position.x*a_arcAngle;float phi=position.y;float cosTheta=cos(theta);float sinTheta=sin(theta);vec3 pos3=vec3(0);pos3.x=(a_radius+a_tubeRadius*cos(phi))*cosTheta;pos3.y=(a_radius+a_tubeRadius*cos(phi))*sinTheta;pos3.z=a_tubeRadius*sin(phi);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 transformed=(a_instanceMatrix*vec4(pos3,1.0)).xyz;vec3 center=(a_instanceMatrix*vec4(a_radius*cosTheta,a_radius*sinTheta,0.0,1.0)).xyz;vec3 objectNormal=normalize(transformed.xyz-center);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(objectNormal,0.0)).xyz;vec4 modelViewPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);vViewPosition=modelViewPosition.xyz;gl_Position=projectionMatrix*modelViewPosition;}", Pn = "precision highp float;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;uniform vec3 cadLightDirection;uniform vec3 cadUpDirection;uniform bool cadLightingEnabled;const vec3 CAD_LIGHT_COLOR=vec3(1.0,0.98,0.94);const vec3 CAD_VIEW_DIRECTION=vec3(0.0,0.0,1.0);float cadWrappedDiffuse(vec3 N,vec3 L){const float wrap=0.18;return max((dot(N,L)+wrap)/(1.0+wrap),0.0);}vec3 shadeCadColorDefault(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec3 albedo=colorRGB*(0.4+0.6*amplitude);vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;return albedo*mc*1.7;}vec3 shadeCadColorSun(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 N=normalize(normal);float ndotl=cadWrappedDiffuse(N,cadLightDirection);float hemi=0.5+0.5*dot(N,cadUpDirection);vec3 ambient=colorRGB*mix(0.18,0.36,hemi);vec3 diffuse=colorRGB*CAD_LIGHT_COLOR*ndotl*0.88;vec3 H=normalize(cadLightDirection+CAD_VIEW_DIRECTION);float spec=pow(clamp(dot(N,H),0.0,1.0),32.0)*0.28;vec3 mc=texture(matCapTexture,N.xy*0.5+0.5).rgb;return(ambient+diffuse+vec3(spec))*mix(vec3(1.0),mc,0.28)*1.15;}float shadeCadLumaDefault(vec3 normal){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));return 0.4+0.6*amplitude;}float shadeCadLumaSun(vec3 normal){return 0.28+0.72*cadWrappedDiffuse(normalize(normal),cadLightDirection);}vec3 shadeCadColor(vec3 colorRGB,vec3 normal,sampler2D matCapTexture){vec3 shaded=vec3(0.0);if(!cadLightingEnabled){shaded=shadeCadColorDefault(colorRGB,normal,matCapTexture);}else{shaded=shadeCadColorSun(colorRGB,normal,matCapTexture);}return shaded;}float shadeCadLuma(vec3 normal){float shaded=0.0;if(!cadLightingEnabled){shaded=shadeCadLumaDefault(normal);}else{shaded=shadeCadLumaSun(normal);}return shaded;}\n#include <packing>\nuniform float modelIndex;out vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\noutputColor=vec4(shadeCadColor(colorRGB,normal,matCapTexture),color.a);}else if(renderMode==RenderTypeGhost){float s=shadeCadLuma(normal);outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),(modelIndex+1.0)/255.0);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(v_normal);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", Fn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in float a_treeIndex;in vec3 a_color;in vec3 a_vertex1;in vec3 a_vertex2;in vec3 a_vertex3;in vec3 a_vertex4;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out vec4 v_nodeAppearanceTexel;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);vec3 transformed;if(position.x<1.5){transformed=position.x==0.0 ? a_vertex1 : a_vertex2;}else{transformed=position.x==2.0 ? a_vertex3 : a_vertex4;}mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 objectNormal=cross(a_vertex1-a_vertex2,a_vertex1 - a_vertex3);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(objectNormal,0.0)).xyz;vec4 mvPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);vViewPosition=mvPosition.xyz;gl_Position=projectionMatrix*mvPosition;}", In = "precision highp float;uniform sampler2D tDepth;uniform sampler2D tDiffuse;\n#if defined(use_edl) || defined(fill_gaps)\nuniform float screenWidth;uniform float screenHeight;\n#endif\n#if defined(fill_gaps)\nuniform float cameraNear;uniform float cameraFar;uniform bool orthographicCamera;uniform float worldPerPixel;\n#endif\n#if defined(use_edl)\n#define MAX_FLOAT 3.402823466e+38\n#define point_size_relative_to_screen_height (1.0 / 1080.0)\nvec2 calculateObscurance(float depth,float screenWidth,float screenHeight,vec2 neighbours[NEIGHBOUR_COUNT],float radius,vec2 vUv,sampler2D depthTexture,sampler2D logDepthTexture){vec2 uvRadius=radius/vec2(screenWidth/(screenHeight*point_size_relative_to_screen_height),1.0f/point_size_relative_to_screen_height);float sum=0.0;float minNeighbourDepth=MAX_FLOAT;vec2 minNeighbourUv=vec2(0.0,0.0);bool thisOutside=depth==0.0;for(int i=0;i<NEIGHBOUR_COUNT;i++){vec2 uvNeighbour=vUv+uvRadius*neighbours[i];float neighbourDepth=texture(logDepthTexture,uvNeighbour).a;bool isSmallestNeighbourDepth=neighbourDepth<minNeighbourDepth;minNeighbourDepth=isSmallestNeighbourDepth ? neighbourDepth : minNeighbourDepth;minNeighbourUv=isSmallestNeighbourDepth ? uvNeighbour : minNeighbourUv;bool otherOutside=neighbourDepth==0.0;sum+=otherOutside ? 0.0:(thisOutside ? 100.0 : max(0.0,depth-neighbourDepth));}return vec2(sum/float(NEIGHBOUR_COUNT),texture(depthTexture,minNeighbourUv).r);}uniform vec2 neighbours[NEIGHBOUR_COUNT];uniform float edlStrength;uniform float radius;\n#endif\n#if defined(use_edl) && defined(points_blend)\nuniform sampler2D tLogDepth;\n#endif\n#define MIN_BLEND_WEIGHT 1.0e-6\n#if defined(fill_gaps)\n#define FILL_GAPS_DIAMETER (2 * FILL_GAPS_RADIUS + 1)\n#define FILL_GAPS_TAPS (FILL_GAPS_DIAMETER * FILL_GAPS_DIAMETER)\n#define FILL_GAPS_EMPTY -1.0\nfloat gapFillEyeDistance(vec2 uv,float windowDepth){\n#if defined(use_edl) && defined(points_blend)\nreturn exp2(textureLod(tLogDepth,uv,0.0).a*10.0);\n#elif defined(use_edl)\nreturn exp2(textureLod(tDiffuse,uv,0.0).a*10.0);\n#else\nif(orthographicCamera){return cameraNear+windowDepth*(cameraFar-cameraNear);}float ndcZ=windowDepth*2.0-1.0;return(2.0*cameraNear*cameraFar)/(cameraFar+cameraNear-ndcZ*(cameraFar - cameraNear));\n#endif\n}float gapFillNeighbourEye(vec2 uv){if(any(lessThan(uv,vec2(0.0)))||any(greaterThan(uv,vec2(1.0)))){return FILL_GAPS_EMPTY;}float neighbourDepth=textureLod(tDepth,uv,0.0).r;if(neighbourDepth>=1.0){return FILL_GAPS_EMPTY;}return gapFillEyeDistance(uv,neighbourDepth);}\n#endif\n#define EDL_STRENGTH_FACTOR 400.0\nin vec2 vUv;out vec4 outputColor;void main(){float depth=texture(tDepth,vUv).r;vec4 color=texture(tDiffuse,vUv);bool shouldDiscard=depth>=1.0;vec2 sourceUv=vUv;\n#if defined(fill_gaps) && defined(points_blend)\nbool weaklyCovered=depth<1.0&&color.w<float(FILL_GAPS_MIN_COVERAGE_WEIGHT);\n#endif\n#if defined(points_blend)\nshouldDiscard=shouldDiscard||color.w<=0.0;color=color/max(color.w,MIN_BLEND_WEIGHT);\n#endif\noutputColor=vec4(color.rgb,1.0);gl_FragDepth=depth;\n#if defined(fill_gaps)\n#if defined(points_blend)\nbool isGap=depth>=1.0||weaklyCovered;\n#else\nbool isGap=depth>=1.0;\n#endif\nif(isGap){vec2 texel=1.0/vec2(screenWidth,screenHeight);vec2 filledUv=vUv;bool filled=false;float neighbourEyes[FILL_GAPS_TAPS];for(int stepIndex=0;stepIndex<FILL_GAPS_STEPS;stepIndex++){int stride=1<<stepIndex;float nearEye=1.0e30;float sourceEye=1.0e30;vec2 sourceCandidateUv=vUv;bool anyCovered=false;for(int y=-FILL_GAPS_RADIUS;y<=FILL_GAPS_RADIUS;y++){for(int x=-FILL_GAPS_RADIUS;x<=FILL_GAPS_RADIUS;x++){int tap=(y+FILL_GAPS_RADIUS)*FILL_GAPS_DIAMETER+(x+FILL_GAPS_RADIUS);neighbourEyes[tap]=FILL_GAPS_EMPTY;if(x==0&&y==0){continue;}vec2 uvNeighbour=vUv+vec2(float(x*stride),float(y*stride))*texel;float neighbourEye=gapFillNeighbourEye(uvNeighbour);neighbourEyes[tap]=neighbourEye;if(neighbourEye==FILL_GAPS_EMPTY){continue;}anyCovered=true;nearEye=min(nearEye,neighbourEye);\n#if defined(points_blend)\nfloat neighbourWeight=textureLod(tDiffuse,uvNeighbour,0.0).w;bool canSource=neighbourWeight>=max(float(FILL_GAPS_MIN_COVERAGE_WEIGHT),MIN_BLEND_WEIGHT);\n#else\nbool canSource=true;\n#endif\nif(canSource&&neighbourEye<sourceEye){sourceEye=neighbourEye;sourceCandidateUv=uvNeighbour;}}}if(!anyCovered){continue;}float reachPixels=float(stride*FILL_GAPS_RADIUS);float worldPerPixelAtSurface=orthographicCamera ? worldPerPixel : worldPerPixel*nearEye;float worldWindow=max(worldPerPixelAtSurface,0.0)*reachPixels;bool withinWorldGap=worldPerPixel<=0.0||worldWindow<=float(FILL_GAPS_MAX_WORLD_GAP);float allowedSpread=nearEye*float(FILL_GAPS_DEPTH_TOL)+float(FILL_GAPS_GRAZE_TOL)*worldWindow;bool sourceOnSurface=sourceEye-nearEye<=allowedSpread;int covered=0;int coveredPP=0;int coveredPN=0;int coveredNP=0;int coveredNN=0;for(int y=-FILL_GAPS_RADIUS;y<=FILL_GAPS_RADIUS;y++){for(int x=-FILL_GAPS_RADIUS;x<=FILL_GAPS_RADIUS;x++){int tap=(y+FILL_GAPS_RADIUS)*FILL_GAPS_DIAMETER+(x+FILL_GAPS_RADIUS);float neighbourEye=neighbourEyes[tap];if(neighbourEye==FILL_GAPS_EMPTY){continue;}if(neighbourEye-nearEye>allowedSpread){continue;}covered++;if(x>=0&&y>=0){coveredPP++;}if(x>=0&&y<=0){coveredPN++;}if(x<=0&&y>=0){coveredNP++;}if(x<=0&&y<=0){coveredNN++;}}}bool surrounded=coveredPP>0&&coveredPN>0&&coveredNP>0&&coveredNN>0;if(withinWorldGap&&sourceOnSurface&&covered>=FILL_GAPS_MIN_COVERED&&surrounded){filledUv=sourceCandidateUv;filled=true;break;}}if(filled){sourceUv=filledUv;color=textureLod(tDiffuse,filledUv,0.0);\n#if defined(points_blend)\ncolor=color/max(color.w,MIN_BLEND_WEIGHT);\n#endif\ndepth=textureLod(tDepth,filledUv,0.0).r;shouldDiscard=false;outputColor=vec4(color.rgb,1.0);gl_FragDepth=depth;}}\n#endif\n#if defined(use_edl)\n#if defined (points_blend)\nfloat edlDepth=textureLod(tLogDepth,sourceUv,0.0).a;vec2 obs=calculateObscurance(edlDepth,screenWidth,screenHeight,neighbours,radius,vUv,tDepth,tLogDepth);\n#else\nfloat edlDepth=color.a;vec2 obs=calculateObscurance(edlDepth,screenWidth,screenHeight,neighbours,radius,vUv,tDepth,tDiffuse);\n#endif\nfloat shade=exp(-obs.x*EDL_STRENGTH_FACTOR*edlStrength);shouldDiscard=shouldDiscard&&obs.x==0.0;outputColor.xyz*=shade;gl_FragDepth=obs.y;\n#endif\nif(shouldDiscard){discard;}}", Ln = "uniform mat4 modelMatrix;uniform mat4 projectionMatrix;in vec3 position;in vec2 uv;out vec2 vUv;const mat4 unitOrthographicProjection=mat4(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,-1.,0.,0.,0.,0.,1.);void main(){vUv=uv;gl_Position=unitOrthographicProjection*modelMatrix*vec4(position,1.0);}", Rn = "precision highp float;precision highp int;uniform mat4 viewMatrix;uniform vec3 cameraPosition;uniform mat4 projectionMatrix;uniform float spacing;uniform float pcIndex;uniform float nodeIndexBits;uniform float screenWidth;uniform float screenHeight;out vec4 outputColor;\n#ifdef highlight_point\nuniform vec4 highlightedPointColor;\n#endif\nin vec3 vColor;\n#if defined(weighted_splats)\nin float vLinearDepth;\n#endif\n#if defined(use_edl)\nin float vLogDepth;\n#endif\n#if defined(paraboloid_point_shape)\nin vec3 vViewPosition;\n#endif\n#if defined(weighted_splats) || defined(paraboloid_point_shape)\nin float vRadius;\n#endif\nfloat specularStrength=1.0;void main(){vec3 color=vColor;float depth=gl_FragCoord.z;\n#if defined(circle_point_shape) || defined(paraboloid_point_shape) || defined (weighted_splats)\nfloat u=2.0*gl_PointCoord.x-1.0;float v=2.0*gl_PointCoord.y-1.0;\n#endif\n#if defined(circle_point_shape) || defined(paraboloid_point_shape)\nfloat cc=u*u+v*v;if(cc>1.0){discard;}\n#endif\n#if defined color_type_point_index\nuint pointIndex=uint(color.r*255.0+0.5)|(uint(color.g*255.0+0.5)<<8u)|(uint(color.b*255.0+0.5)<<16u);uint packedIndex=pointIndex|(uint(pcIndex+0.5)<<(32u-uint(nodeIndexBits+0.5)));outputColor=vec4(float(packedIndex&0xFFu),float((packedIndex>>8u)&0xFFu),float((packedIndex>>16u)&0xFFu),float((packedIndex>>24u)&0xFFu))/255.0;\n#else\noutputColor=vec4(color,1.0);\n#endif\n#if defined paraboloid_point_shape\nfloat wi=0.0-(u*u+v*v);vec4 pos=vec4(vViewPosition,1.0);pos.z+=wi*vRadius;float linearDepth=-pos.z;pos=projectionMatrix*pos;pos=pos/pos.w;float expDepth=pos.z;depth=(pos.z+1.0)/2.0;gl_FragDepth=depth;\n#if defined(color_type_depth)\noutputColor.r=linearDepth;outputColor.g=expDepth;\n#endif\n#endif\n#if defined(use_edl)\noutputColor.a=vLogDepth;\n#endif\n#if defined weighted_splats\nfloat distance=2.0*length(gl_PointCoord.xy-0.5);float weight=max(0.0,1.0-distance);weight=pow(weight,1.5);outputColor.a=weight;outputColor.rgb=outputColor.rgb*weight;\n#endif\n}", zn = "precision highp float;precision highp int;\n#define point_size_relative_to_screen_height (1.0 / 1080.0)\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}\n#define max_clip_boxes 30\nin vec3 position;in vec3 color;in float intensity;in float classification;in float objectId;in vec4 indices;uniform mat4 modelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform float screenWidth;uniform float screenHeight;uniform float fov;uniform float spacing;uniform float heightMin;uniform float heightMax;uniform float size;uniform float minSize;uniform float maxSize;uniform float octreeSize;uniform float level;uniform float vnStart;uniform bool isLeafNode;uniform vec2 intensityRange;uniform float intensityGamma;uniform float intensityContrast;uniform float intensityBrightness;uniform float rgbGamma;uniform float rgbContrast;uniform float rgbBrightness;uniform sampler2D visibleNodes;uniform sampler2D gradient;uniform sampler2D classificationLUT;uniform sampler2D objectIdLUT;out vec3 vColor;\n#if defined(weighted_splats)\nout float vLinearDepth;\n#endif\n#if defined(use_edl)\nout float vLogDepth;\n#endif\n#if defined(weighted_splats) || defined(paraboloid_point_shape) || defined(hq_depth_pass)\nout float vRadius;out vec3 vViewPosition;\n#endif\n#if defined(adaptive_point_size) || defined(color_type_lod)\nint numberOfOnes(int number,int index){int numOnes=0;int tmp=128;for(int i=7;i>=0;i--){if(number>=tmp){number=number-tmp;if(i<=index){numOnes++;}}tmp=tmp/2;}return numOnes;}bool isBitSet(int number,int index){int powi=1;if(index==0){powi=1;}else if(index==1){powi=2;}else if(index==2){powi=4;}else if(index==3){powi=8;}else if(index==4){powi=16;}else if(index==5){powi=32;}else if(index==6){powi=64;}else if(index==7){powi=128;}int ndp=number/powi;return mod(float(ndp),2.0)!=0.0;}float getLOD(){vec3 offset=vec3(0.0,0.0,0.0);int iOffset=int(vnStart);float depth=level;for(float i=0.0;i<=30.0;i++){float nodeSizeAtLevel=octreeSize/pow(2.0,i+level+0.0);vec3 index3d=(position-offset)/nodeSizeAtLevel;index3d=floor(index3d+0.5);int index=int(round(4.0*index3d.x+2.0*index3d.y+index3d.z));vec4 value=texture(visibleNodes,vec2(float(iOffset)/2048.0,0.0));int mask=int(round(value.r*255.0));if(isBitSet(mask,index)){int advanceG=int(round(value.g*255.0))*256;int advanceB=int(round(value.b*255.0));int advanceChild=numberOfOnes(mask,index-1);int advance=advanceG+advanceB+advanceChild;iOffset=iOffset+advance;depth++;}else{return value.a*255.0;}offset=offset+(vec3(1.0,1.0,1.0)*nodeSizeAtLevel*0.5)*index3d;}return depth;}float getPointSizeAttenuation(){return 0.5*pow(2.0,getLOD());}\n#endif\nfloat getContrastFactor(float contrast){return(1.0158730158730156*(contrast+1.0))/(1.0158730158730156-contrast);}vec3 getRGB(){return color;}float getIntensity(){float w=(intensity-intensityRange.x)/(intensityRange.y - intensityRange.x);w=pow(w,intensityGamma);w=w+intensityBrightness;w=(w-0.5)*getContrastFactor(intensityContrast)+0.5;w=clamp(w,0.0,1.0);return w;}vec3 getRgbWithIntensityFallback(){vec3 rgb=getRGB();float intensity=getIntensity();return rgb!=vec3(0.0)? rgb : vec3(intensity);}vec3 getElevation(){vec4 world=modelMatrix*vec4(position,1.0);float w=(world.y-heightMin)/(heightMax-heightMin);vec3 cElevation=texture(gradient,vec2(w,1.0-w)).rgb;return cElevation;}vec4 getClassification(){vec2 uv=vec2(classification/255.0,0.5);vec4 classColor=texture(classificationLUT,uv);return classColor;}void main(){vec4 mvPosition=modelViewMatrix*vec4(position,1.0);\n#if defined paraboloid_point_shape\nvViewPosition=mvPosition.xyz;\n#endif\nvec4 classification=getClassification();float outColorAlpha=classification.a;gl_Position=projectionMatrix*mvPosition;\n#if defined weighted_splats\nvLinearDepth=gl_Position.w;\n#endif\n#if defined(use_edl)\nvLogDepth=log2(-mvPosition.z)/10.0;\n#endif\nfloat pointSize=1.0;float slope=tan(fov/2.0);float projFactor=-0.5/(point_size_relative_to_screen_height*slope*mvPosition.z);float size=size*screenHeight*point_size_relative_to_screen_height;float minSize=minSize*screenHeight*point_size_relative_to_screen_height;float maxSize=maxSize*screenHeight*point_size_relative_to_screen_height;\n#if defined fixed_point_size\npointSize=size;\n#elif defined attenuated_point_size\npointSize=size*spacing*projFactor;\n#elif defined adaptive_point_size\nfloat worldSpaceSize=2.0*size*spacing/getPointSizeAttenuation();pointSize=worldSpaceSize*projFactor;\n#endif\npointSize=max(minSize,pointSize);pointSize=min(maxSize,pointSize);\n#if defined(weighted_splats) || defined(paraboloid_point_shape) || defined(hq_depth_pass)\nvRadius=pointSize/projFactor;\n#endif\ngl_PointSize=pointSize;\n#ifdef color_type_rgb\nvColor=getRGB();\n#elif defined color_type_height\nvec3 rgb=getRgbWithIntensityFallback();vColor=rgb==vec3(0.0,0.0,0.0)? getElevation(): mix(getElevation(),rgb,0.4);\n#elif defined color_type_depth\nfloat linearDepth=-mvPosition.z;float expDepth=(gl_Position.z/gl_Position.w)*0.5+0.5;vColor=vec3(linearDepth,expDepth,0.0);\n#elif defined color_type_intensity\nfloat w=getIntensity();vColor=vec3(w,w,w);\n#elif defined color_type_lod\nfloat w=getLOD()/10.0;vColor=texture(gradient,vec2(w,1.0-w)).rgb;\n#elif defined color_type_point_index\nvColor=indices.rgb;\n#elif defined color_type_classification\nvec3 rgb=getRgbWithIntensityFallback();vColor=rgb==vec3(0.0,0.0,0.0)? classification.rgb: mix(classification.rgb,rgb,0.4);\n#endif\nif(outColorAlpha==0.0){gl_Position=vec4(100.0,100.0,100.0,0.0);return;}\n#if defined hq_depth_pass\nfloat originalDepth=gl_Position.w;float adjustedDepth=originalDepth+2.0*vRadius;float adjust=adjustedDepth/originalDepth;mvPosition.xyz=mvPosition.xyz*adjust;gl_Position=projectionMatrix*mvPosition;\n#endif\nif(isClipped((modelViewMatrix*vec4(position,1.0)).xyz)){gl_Position=vec4(1000.0,1000.0,1000.0,1.0);}int lutX=int(objectId)% OBJECT_STYLING_TEXTURE_WIDTH;int lutY=int(objectId)/OBJECT_STYLING_TEXTURE_WIDTH;vec4 styleTexel=texelFetch(objectIdLUT,ivec2(lutX,lutY),0);vec3 styleColor=styleTexel.rgb;float alphaUnwrapped=floor((styleTexel.a*255.0)+0.5);if(mod(alphaUnwrapped,2.0)==0.0){gl_Position=vec4(100.0,100.0,100.0,0.0);return;}\n#if !defined(color_type_point_index)\nif(any(greaterThan(styleColor,vec3(0.0)))){vColor=(styleColor*0.8+vColor*0.2);}\n#endif\n}", Bn = "precision highp float;float rand2d(in vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}uniform mat4 projMatrix;uniform mat4 inverseProjectionMatrix;uniform vec3 kernel[MAX_KERNEL_SIZE];uniform sampler2D tDepth;uniform float sampleRadius;uniform float bias;in vec2 vUv;out vec4 outputColor;vec3 viewPosFromDepth(float depth,vec2 uv){float z=depth*2.0-1.0;vec4 clipSpacePosition=vec4(uv*2.0-1.0,z,1.0);vec4 viewSpacePosition=inverseProjectionMatrix*clipSpacePosition;viewSpacePosition/=viewSpacePosition.w;return viewSpacePosition.xyz;}vec3 computeWorldNormalFromDepth(sampler2D depthTexture,vec2 resolution,vec2 uv,float sampleDepth){float dx=1.0/resolution.x;float dy=1.0/resolution.y;vec2 uv1=uv+vec2(dx,0.0);float d1=texture(depthTexture,uv1).r;vec2 uv2=uv+vec2(0.0,dy);float d2=texture(depthTexture,uv2).r;vec2 uv3=uv+vec2(-dx,0.0);float d3=texture(depthTexture,uv3).r;vec2 uv4=uv+vec2(0.0,-dy);float d4=texture(depthTexture,uv4).r;bool horizontalSampleCondition=abs(d1-sampleDepth)<abs(d3 - sampleDepth);float horizontalSampleDepth=horizontalSampleCondition ? d1 : d3;vec2 horizontalSampleUv=horizontalSampleCondition ? uv1 : uv3;bool verticalSampleCondition=abs(d2-sampleDepth)<abs(d4 - sampleDepth);float verticalSampleDepth=verticalSampleCondition ? d2 : d4;vec2 verticalSampleUv=verticalSampleCondition ? uv2 : uv4;vec3 viewPos=viewPosFromDepth(sampleDepth,vUv);vec3 viewPos1=(horizontalSampleCondition==verticalSampleCondition)? viewPosFromDepth(horizontalSampleDepth,horizontalSampleUv): viewPosFromDepth(verticalSampleDepth,verticalSampleUv);vec3 viewPos2=(horizontalSampleCondition==verticalSampleCondition)? viewPosFromDepth(verticalSampleDepth,verticalSampleUv): viewPosFromDepth(horizontalSampleDepth,horizontalSampleUv);return normalize(cross(viewPos1-viewPos,viewPos2 - viewPos));}float LARGE_DISTANCE_SAMPLE_FACTOR=0.05;void main(){float d=texture(tDepth,vUv).r;ivec2 textureSize=textureSize(tDepth,0);vec3 viewNormal=computeWorldNormalFromDepth(tDepth,vec2(float(textureSize.x),float(textureSize.y)),vUv,d);vec3 viewPosition=viewPosFromDepth(d,vUv);float distanceFactor=max(length(viewPosition)*LARGE_DISTANCE_SAMPLE_FACTOR,1.0);vec3 covector=normalize(vec3(rand2d(vUv),rand2d(vUv*3.0),rand2d(vUv*5.0)));vec3 tangent=normalize(covector-viewNormal*dot(covector,viewNormal));vec3 bitangent=cross(viewNormal,tangent);mat3 TBN=mat3(tangent,bitangent,viewNormal);float occlusion=0.0;for(int i=0;i<MAX_KERNEL_SIZE;i++){vec3 sampleVector=TBN*kernel[i];vec3 samplePosition=viewPosition+sampleVector*sampleRadius*distanceFactor;vec4 offset=projMatrix*vec4(samplePosition,1.0);offset.xyz/=offset.w;offset.xyz=offset.xyz*0.5+0.5;float realDepth=texture(tDepth,offset.xy).r;vec3 realPos=viewPosFromDepth(realDepth,offset.xy);float rangeCheck=smoothstep(0.0,1.0,sampleRadius/length(viewPosition-realPos));occlusion+=(realPos.z>=samplePosition.z+bias ? 1.0 : 0.0)*rangeCheck;}float occlusionFactor=1.0-clamp(occlusion/float(MAX_KERNEL_SIZE),0.0,1.0);outputColor=vec4(occlusionFactor);}", Vn = "uniform mat4 modelMatrix;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;in vec3 position;in vec2 uv;out vec2 vUv;void main(){vUv=uv;gl_Position=projectionMatrix*viewMatrix*modelMatrix*vec4(position,1.0);}", Hn = "precision highp float;uniform sampler2D tDiffuse;\n#if defined(DEPTH_WRITE)\nuniform sampler2D tDepth;\n#endif\n#if defined(SSAO_BLUR)\nuniform sampler2D tSsao;\n#endif\n#if defined(ALPHA)\nuniform float alpha;\n#endif\n#if defined(OUTLINE)\nuniform sampler2D tOutlineColors;\n#endif\n#if defined(CAD_SHADOW)\nuniform sampler2D tCadShadow;uniform bool cadShadowEnabled;\n#endif\nin vec2 vUv;in float near;in float far;out vec4 fragColor;\n#if defined(SSAO_BLUR)\nvec4 gaussianBlur(sampler2D tDiffuse,vec2 uv){ivec2 textureSize=textureSize(tDiffuse,0);vec2 resolution=vec2(float(textureSize.x),float(textureSize.y));return texture(tDiffuse,uv+vec2(-3.1111111,-3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(-1.3333333,-3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-3.1111111,-1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-1.3333333,-1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(0.0000000,-3.1111111)/resolution)*0.0096130+texture(tDiffuse,uv+vec2(0.0000000,-1.3333333)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(1.3333333,-3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(3.1111111,-3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(1.3333333,-1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(3.1111111,-1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-3.1111111,0.0000000)/resolution)*0.0096130+texture(tDiffuse,uv+vec2(-1.3333333,0.0000000)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(-3.1111111,1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-1.3333333,1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(-3.1111111,3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(-1.3333333,3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(0.0000000,1.3333333)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(0.0000000,3.1111111)/resolution)*0.0096130+texture(tDiffuse,uv+vec2(1.3333333,1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(3.1111111,1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(1.3333333,3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(3.1111111,3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(1.3333333,0.0000000)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(3.1111111,0.0000000)/resolution)*0.0096130+texture(tDiffuse,uv)*0.0747681;}\n#endif\n#if defined(FXAA)\n#ifndef FXAA_REDUCE_MIN\n#define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n#define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n#define FXAA_SPAN_MAX 8.0\n#endif\nvec4 fxaa(sampler2D tex){vec4 color;vec2 fragCoord=gl_FragCoord.xy;ivec2 textureSize=textureSize(tDiffuse,0);vec2 resolution=vec2(float(textureSize.x),float(textureSize.y));vec2 inverseResolution=vec2(1.0/resolution.x,1.0/resolution.y);vec2 v_rgbNW=(fragCoord+vec2(-1.0,-1.0))*inverseResolution;vec2 v_rgbNE=(fragCoord+vec2(1.0,-1.0))*inverseResolution;vec2 v_rgbSW=(fragCoord+vec2(-1.0,1.0))*inverseResolution;vec2 v_rgbSE=(fragCoord+vec2(1.0,1.0))*inverseResolution;vec2 v_rgbM=vec2(fragCoord*inverseResolution);vec3 rgbNW=texture(tex,v_rgbNW).xyz;vec3 rgbNE=texture(tex,v_rgbNE).xyz;vec3 rgbSW=texture(tex,v_rgbSW).xyz;vec3 rgbSE=texture(tex,v_rgbSE).xyz;vec4 texColor=texture(tex,v_rgbM);vec3 rgbM=texColor.xyz;vec3 luma=vec3(0.299,0.587,0.114);float lumaNW=dot(rgbNW,luma);float lumaNE=dot(rgbNE,luma);float lumaSW=dot(rgbSW,luma);float lumaSE=dot(rgbSE,luma);float lumaM=dot(rgbM,luma);float lumaMin=min(lumaM,min(min(lumaNW,lumaNE),min(lumaSW,lumaSE)));float lumaMax=max(lumaM,max(max(lumaNW,lumaNE),max(lumaSW,lumaSE)));mediump vec2 dir;dir.x=-((lumaNW+lumaNE)-(lumaSW+lumaSE));dir.y=((lumaNW+lumaSW)-(lumaNE+lumaSE));float dirReduce=max((lumaNW+lumaNE+lumaSW+lumaSE)*(0.25*FXAA_REDUCE_MUL),FXAA_REDUCE_MIN);float rcpDirMin=1.0/(min(abs(dir.x),abs(dir.y))+dirReduce);dir=min(vec2(FXAA_SPAN_MAX,FXAA_SPAN_MAX),max(vec2(-FXAA_SPAN_MAX,-FXAA_SPAN_MAX),dir*rcpDirMin));vec4 rgbA=0.5*(texture(tex,inverseResolution*(fragCoord+dir*(1.0/3.0-0.5)))+texture(tex,inverseResolution*(fragCoord+dir*(2.0/3.0-0.5))));vec4 rgbB=rgbA*0.5+0.25*(texture(tex,inverseResolution*(fragCoord+dir*-0.5))+texture(tex,inverseResolution*(fragCoord+dir*0.5)));float lumaB=dot(rgbB.rgb,luma);if((lumaB<lumaMin)||(lumaB>lumaMax)){color=rgbA;}else{color=rgbB;}return color;}\n#endif\n#if defined(EDGES)\nmat3 G[9];const mat3 g0=mat3(0.3535533845424652,0,-0.3535533845424652,0.5,0,-0.5,0.3535533845424652,0,-0.3535533845424652);const mat3 g1=mat3(0.3535533845424652,0.5,0.3535533845424652,0,0,0,-0.3535533845424652,-0.5,-0.3535533845424652);const mat3 g2=mat3(0,0.3535533845424652,-0.5,-0.3535533845424652,0,0.3535533845424652,0.5,-0.3535533845424652,0);const mat3 g3=mat3(0.5,-0.3535533845424652,0,-0.3535533845424652,0,0.3535533845424652,0,0.3535533845424652,-0.5);const mat3 g4=mat3(0,-0.5,0,0.5,0,0.5,0,-0.5,0);const mat3 g5=mat3(-0.5,0,0.5,0,0,0,0.5,0,-0.5);const mat3 g6=mat3(0.1666666716337204,-0.3333333432674408,0.1666666716337204,-0.3333333432674408,0.6666666865348816,-0.3333333432674408,0.1666666716337204,-0.3333333432674408,0.1666666716337204);const mat3 g7=mat3(-0.3333333432674408,0.1666666716337204,-0.3333333432674408,0.1666666716337204,0.6666666865348816,0.1666666716337204,-0.3333333432674408,0.1666666716337204,-0.3333333432674408);const mat3 g8=mat3(0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408);float edgeDetectionFilter(sampler2D baseTexture){ivec2 fragCoord=ivec2(gl_FragCoord.xy);G[0]=g0,G[1]=g1,G[2]=g2,G[3]=g3,G[4]=g4,G[5]=g5,G[6]=g6,G[7]=g7,G[8]=g8;mat3 I;I[0][0]=length(texelFetch(baseTexture,fragCoord+ivec2(-1,-1),0).rgb);I[0][1]=length(texelFetch(baseTexture,fragCoord+ivec2(-1,0),0).rgb);I[0][2]=length(texelFetch(baseTexture,fragCoord+ivec2(-1,1),0).rgb);I[1][0]=length(texelFetch(baseTexture,fragCoord+ivec2(0,-1),0).rgb);I[1][1]=length(texelFetch(baseTexture,fragCoord+ivec2(0,0),0).rgb);I[1][2]=length(texelFetch(baseTexture,fragCoord+ivec2(0,1),0).rgb);I[2][0]=length(texelFetch(baseTexture,fragCoord+ivec2(1,-1),0).rgb);I[2][1]=length(texelFetch(baseTexture,fragCoord+ivec2(1,0),0).rgb);I[2][2]=length(texelFetch(baseTexture,fragCoord+ivec2(1,1),0).rgb);float dp0=dot(G[0][0],I[0])+dot(G[0][1],I[1])+dot(G[0][2],I[2]);float cnv0=dp0*dp0;float dp1=dot(G[1][0],I[0])+dot(G[1][1],I[1])+dot(G[1][2],I[2]);float cnv1=dp1*dp1;float dp2=dot(G[2][0],I[0])+dot(G[2][1],I[1])+dot(G[2][2],I[2]);float cnv2=dp2*dp2;float dp3=dot(G[3][0],I[0])+dot(G[3][1],I[1])+dot(G[3][2],I[2]);float cnv3=dp3*dp3;float dp4=dot(G[4][0],I[0])+dot(G[4][1],I[1])+dot(G[4][2],I[2]);float cnv4=dp4*dp4;float dp5=dot(G[5][0],I[0])+dot(G[5][1],I[1])+dot(G[5][2],I[2]);float cnv5=dp5*dp5;float dp6=dot(G[6][0],I[0])+dot(G[6][1],I[1])+dot(G[6][2],I[2]);float cnv6=dp6*dp6;float dp7=dot(G[7][0],I[0])+dot(G[7][1],I[1])+dot(G[7][2],I[2]);float cnv7=dp7*dp7;float dp8=dot(G[8][0],I[0])+dot(G[8][1],I[1])+dot(G[8][2],I[2]);float cnv8=dp8*dp8;float M=(cnv0+cnv1)+(cnv2+cnv3);float S=(cnv4+cnv5)+(cnv6+cnv7)+(cnv8+M);return sqrt(M/S);}\n#endif\n#if defined(OUTLINE)\nfloat floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}const int texelOffset=2;int computeFloatEncodedOutlineIndex(float bitEncodedFloat){return int(floatBitsSubset(floor((bitEncodedFloat*255.0)+0.5),5,8));}ivec4 computeNeighborOutlineIndices(sampler2D tDiffuse,ivec2 fragCoord){int outlineN=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,texelOffset)).a);int outlineS=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(texelOffset,0)).a);int outlineE=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,-texelOffset)).a);int outlineW=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(-texelOffset,0)).a);return ivec4(outlineN,outlineS,outlineE,outlineW);}int fetchOutlineIndex(sampler2D tDiffuse){ivec2 fragCoord=ivec2(gl_FragCoord.xy);int outlineIndex=computeFloatEncodedOutlineIndex(texelFetch(tDiffuse,fragCoord,0).a);ivec4 neighbours=computeNeighborOutlineIndices(tDiffuse,fragCoord);bvec4 isEqualToPixel=equal(neighbours,ivec4(outlineIndex));bvec4 isMiss=equal(neighbours,ivec4(0));bvec4 isEqualOrMiss=bvec4(isEqualToPixel.x||isMiss.x,isEqualToPixel.y||isMiss.y,isEqualToPixel.z||isMiss.z,isEqualToPixel.w||isMiss.w);bool hasOutline=outlineIndex>0&&!(all(isEqualToPixel))&&all(isEqualOrMiss);return hasOutline ? outlineIndex : 0;}\n#endif\n#if defined(EDGES) && defined(DEPTH_WRITE)\nfloat toViewZ(float depth,float near,float far){return near*far/(far-depth*(far - near));}\n#endif\n#if defined(CAD_SHADOW)\nfloat cadShadowDither(){float n=fract(52.9829189*fract(dot(gl_FragCoord.xy,vec2(0.06711056,0.00583715))));return(n-0.5)/255.0;}float sampleCadShadow(){vec2 texel=1.0/vec2(textureSize(tCadShadow,0));float sum=texture(tCadShadow,vUv+texel*vec2(-0.5,-0.5)).r;sum+=texture(tCadShadow,vUv+texel*vec2(0.5,-0.5)).r;sum+=texture(tCadShadow,vUv+texel*vec2(-0.5,0.5)).r;sum+=texture(tCadShadow,vUv+texel*vec2(0.5,0.5)).r;return clamp(sum*0.25+cadShadowDither(),0.0,1.0);}\n#endif\nvoid main(){vec4 diffuse=texture(tDiffuse,vUv);if(diffuse.a==0.0){discard;}\n#if defined(FXAA)\nfragColor=fxaa(tDiffuse);\n#else\nfragColor=diffuse;\n#if defined(SSAO_BLUR)\nfragColor*=gaussianBlur(tSsao,vUv);\n#endif\n#if defined(CAD_SHADOW)\nif(cadShadowEnabled){fragColor.rgb*=sampleCadShadow();}\n#endif\n#if defined(EDGES)\nfloat edgeStrength=edgeDetectionFilter(tDiffuse);edgeStrength=(1.0-pow(1.0 - edgeStrength,2.0));\n#if defined(DEPTH_WRITE)\nfloat depthEdge=toViewZ(texture(tDepth,vUv).r,near,far);edgeStrength*=(1.0-smoothstep(10.0,40.0,depthEdge));\n#endif\nfragColor.rgb*=isnan(edgeStrength)? 1.0 :(1.0-edgeStrength);\n#endif\n#if defined(OUTLINE)\nint outline=fetchOutlineIndex(tDiffuse);fragColor.rgb=outline>0 ? texelFetch(tOutlineColors,ivec2(outline,0),0).rgb : fragColor.rgb;\n#endif\n#endif\n#if defined(ALPHA)\nfragColor.a=alpha;\n#endif\n#if defined(DEPTH_WRITE)\ngl_FragDepth=texture(tDepth,vUv).r;\n#endif\n}", Un = "uniform mat4 modelMatrix;uniform mat4 projectionMatrix;in vec3 position;in vec2 uv;out float near;out float far;out vec2 vUv;const mat4 unitOrthographicProjection=mat4(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,-1.,0.,0.,0.,0.,1.);void main(){vUv=uv;near=projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0);far=projectionMatrix[3][2]/(projectionMatrix[2][2]+1.0);gl_Position=unitOrthographicProjection*modelMatrix*vec4(position,1.0);}", Wn = "precision highp float;uniform sampler2D tDepth;in vec2 vUv;out vec4 fragColor;uniform mat4 inverseProjectionMatrix;uniform mat4 cadCameraMatrixWorld;uniform mat4 cadShadowMatrix;uniform highp sampler2D tCadShadowMap;uniform vec3 cadShadowLightDirection;uniform float cadShadowTexelWorld;uniform float cadShadowStableTexelWorld;uniform float cadShadowDepthRange;uniform float cadShadowStrength;uniform float cadShadowTerminatorFade;const float CAD_SHADOW_EMPTY_DEPTH=1.0;const int CAD_SHADOW_TAPS=16;const float CAD_SHADOW_CONTACT_TEXELS=1.25;const float CAD_SHADOW_CONTACT_STABLE_FRACTION=0.12;const float CAD_SHADOW_LIGHT_SPREAD=0.018;const float CAD_SHADOW_MAX_PENUMBRA_WORLD=0.2;const float CAD_SHADOW_MAX_PENUMBRA_TEXELS=28.0;const float CAD_SHADOW_BORDER_FADE=0.08;const int CAD_SHADOW_BLOCKER_PROBES=8;const vec2 CAD_SHADOW_DISK[CAD_SHADOW_TAPS]=vec2[](vec2(0.1767767,0.0000000),vec2(-0.2257722,0.2068258),vec2(0.0345581,-0.3937712),vec2(0.2845712,0.3711728),vec2(-0.5222232,-0.0923739),vec2(0.4946954,-0.3146847),vec2(-0.1654659,0.6155250),vec2(-0.3155615,-0.6075944),vec2(0.6846422,0.2500302),vec2(-0.7122561,0.2940090),vec2(0.3433545,-0.7337286),vec2(0.2537302,0.8089320),vec2(-0.7647459,-0.4431859),vec2(0.8971340,-0.1972324),vec2(-0.5475069,0.7787722),vec2(-0.1264868,-0.9760897));vec3 cadShadowViewPosFromDepth(float depth,vec2 uv){float z=depth*2.0-1.0;vec4 clipSpacePosition=vec4(uv*2.0-1.0,z,1.0);vec4 viewSpacePosition=inverseProjectionMatrix*clipSpacePosition;return viewSpacePosition.xyz/viewSpacePosition.w;}vec3 cadShadowWorldFromView(vec3 viewPos){return(cadCameraMatrixWorld*vec4(viewPos,1.0)).xyz;}vec3 cadShadowViewNormal(sampler2D depthTexture,vec2 uv,float depth,vec3 viewPos,out float reliable){ivec2 size=textureSize(depthTexture,0);ivec2 coord=ivec2(uv*vec2(size));ivec2 maxCoord=size-ivec2(1);float depthRight=texelFetch(depthTexture,clamp(coord+ivec2(1,0),ivec2(0),maxCoord),0).r;float depthLeft=texelFetch(depthTexture,clamp(coord+ivec2(-1,0),ivec2(0),maxCoord),0).r;float depthUp=texelFetch(depthTexture,clamp(coord+ivec2(0,1),ivec2(0),maxCoord),0).r;float depthDown=texelFetch(depthTexture,clamp(coord+ivec2(0,-1),ivec2(0),maxCoord),0).r;vec2 texel=1.0/vec2(size);bool useRight=abs(depthRight-depth)<abs(depthLeft - depth);bool useUp=abs(depthUp-depth)<abs(depthDown - depth);vec3 horizontal=cadShadowViewPosFromDepth(useRight ? depthRight : depthLeft,uv+vec2(useRight ? texel.x :-texel.x,0.0))- viewPos;vec3 vertical=cadShadowViewPosFromDepth(useUp ? depthUp : depthDown,uv+vec2(0.0,useUp ? texel.y :-texel.y))- viewPos;vec3 first=(useRight==useUp)? horizontal : vertical;vec3 second=(useRight==useUp)? vertical : horizontal;float horizontalLength=length(horizontal);float verticalLength=length(vertical);float longest=max(horizontalLength,verticalLength);reliable=smoothstep(0.55,0.92,min(horizontalLength,verticalLength)/max(longest,1.0e-5));vec3 n=normalize(cross(first,second));return n*(1.0-2.0*step(0.0,dot(n,viewPos)));}mat2 cadShadowKernelRotation(vec3 worldPos){vec2 seed=floor(worldPos.xz*1000.0)+floor(worldPos.y*1000.0)*vec2(0.7548777,0.5698403);float n=fract(52.9829189*fract(dot(seed,vec2(0.06711056,0.00583715))));float theta=6.2831853*n;float c=cos(theta);float s=sin(theta);return mat2(c,s,-s,c);}float cadShadowTexelLit(ivec2 coord,ivec2 maxCoord,vec2 receiverTexelPos,float receiverDepth,vec2 gradPerTexel,float tolerance){coord=clamp(coord,ivec2(0),maxCoord);float stored=texelFetch(tCadShadowMap,coord,0).r;if(stored>=CAD_SHADOW_EMPTY_DEPTH){return 1.0;}float predicted=receiverDepth+dot(gradPerTexel,vec2(coord)+0.5-receiverTexelPos);return step(predicted-tolerance,stored);}float cadShadowPlaneVisibility(vec2 texelPos,ivec2 maxCoord,vec2 receiverTexelPos,float receiverDepth,vec2 gradPerTexel,float tolerance){if(any(lessThan(texelPos,vec2(0.0)))||any(greaterThan(texelPos,vec2(maxCoord)+1.0))){return 1.0;}vec2 centered=texelPos-0.5;vec2 fraction=fract(centered);ivec2 origin=ivec2(floor(centered));float litRow0=mix(cadShadowTexelLit(origin,maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance),cadShadowTexelLit(origin+ivec2(1,0),maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance),fraction.x);float litRow1=mix(cadShadowTexelLit(origin+ivec2(0,1),maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance),cadShadowTexelLit(origin+ivec2(1,1),maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance),fraction.x);return mix(litRow0,litRow1,fraction.y);}float cadShadowBlockerGap(vec2 texelPos,ivec2 maxCoord,vec2 receiverTexelPos,float receiverDepth,vec2 gradPerTexel,float tolerance){if(any(lessThan(texelPos,vec2(0.0)))||any(greaterThan(texelPos,vec2(maxCoord)+1.0))){return-1.0;}ivec2 coord=clamp(ivec2(texelPos),ivec2(0),maxCoord);float stored=texelFetch(tCadShadowMap,coord,0).r;if(stored>=CAD_SHADOW_EMPTY_DEPTH){return-1.0;}float gap=receiverDepth+dot(gradPerTexel,vec2(coord)+0.5-receiverTexelPos)- stored;return gap>tolerance ? gap :-1.0;}vec2 cadShadowBlockerSearch(vec2 sampleTexelPos,ivec2 maxCoord,vec2 receiverTexelPos,float receiverDepth,vec2 gradPerTexel,float tolerance,float searchTexels,mat2 rotation){float gapSum=0.0;float count=0.0;float gap=cadShadowBlockerGap(sampleTexelPos,maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance);if(gap>0.0){gapSum+=gap;count+=1.0;}for(int i=0;i<CAD_SHADOW_BLOCKER_PROBES;i++){vec2 offset=rotation*CAD_SHADOW_DISK[i*(CAD_SHADOW_TAPS/CAD_SHADOW_BLOCKER_PROBES)];gap=cadShadowBlockerGap(sampleTexelPos+offset*searchTexels,maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance);if(gap>0.0){gapSum+=gap;count+=1.0;}}float probes=float(CAD_SHADOW_BLOCKER_PROBES+1);float separation=count>0.5 ?(gapSum/count)*cadShadowDepthRange :-1.0;return vec2(separation,count/probes);}float cadShadowShapeEdge(float occlusion){return occlusion*occlusion*(3.0-2.0*occlusion);}vec2 cadShadowDepthGradient(vec3 N){vec3 T=cross(N,cadShadowLightDirection);float tLen2=dot(T,T);if(tLen2<1.0e-8){T=cross(N,vec3(0.0,0.0,1.0));tLen2=dot(T,T);}T*=inversesqrt(max(tLen2,1.0e-12));vec3 B=cross(N,T);vec3 rowX=vec3(cadShadowMatrix[0].x,cadShadowMatrix[1].x,cadShadowMatrix[2].x);vec3 rowY=vec3(cadShadowMatrix[0].y,cadShadowMatrix[1].y,cadShadowMatrix[2].y);vec3 rowZ=vec3(cadShadowMatrix[0].z,cadShadowMatrix[1].z,cadShadowMatrix[2].z);vec2 duT=0.5*vec2(dot(rowX,T),dot(rowY,T));vec2 duB=0.5*vec2(dot(rowX,B),dot(rowY,B));float dzT=0.5*dot(rowZ,T);float dzB=0.5*dot(rowZ,B);float det=duT.x*duB.y-duT.y*duB.x;float valid=step(1.0e-12,abs(det));float invDet=valid*sign(det)/max(abs(det),1.0e-12);return vec2((dzT*duB.y-dzB*duT.y)*invDet,(duT.x*dzB-duB.x*dzT)*invDet);}float cadShadowOcclusion(vec3 worldPos,vec3 worldNormal,float planeTrust){vec3 lightNdc=(cadShadowMatrix*vec4(worldPos,1.0)).xyz;if(any(greaterThan(abs(lightNdc.xy),vec2(1.0)))||lightNdc.z<-1.0){return 0.0;}float border=max(abs(lightNdc.x),abs(lightNdc.y));float borderFade=1.0-smoothstep(1.0 - CAD_SHADOW_BORDER_FADE,1.0,border);ivec2 size=textureSize(tCadShadowMap,0);ivec2 maxCoord=size-ivec2(1);vec2 receiverTexelPos=(lightNdc.xy*0.5+0.5)*vec2(size);float receiverDepth=lightNdc.z*0.5+0.5;float normalLen2=dot(worldNormal,worldNormal);vec3 N=normalLen2>1.0e-8 ? worldNormal*inversesqrt(normalLen2): vec3(0.0,1.0,0.0);vec2 gradPerTexel=cadShadowDepthGradient(N)/vec2(size);float slope=length(gradPerTexel);float texelDepth=max(cadShadowTexelWorld/max(cadShadowDepthRange,1.0e-6),1.0e-8);float tolerance=slope*0.9+texelDepth*0.15;float shiftTexels=clamp(0.45*tolerance/max(slope,texelDepth*0.25),0.0,0.7);vec2 towardCaster=slope>1.0e-8 ?-gradPerTexel/slope : vec2(0.0);vec2 sampleTexelPos=receiverTexelPos+towardCaster*shiftTexels;float invTexelWorld=1.0/max(cadShadowTexelWorld,1.0e-8);float contactTexels=max(CAD_SHADOW_CONTACT_TEXELS,cadShadowStableTexelWorld*invTexelWorld*CAD_SHADOW_CONTACT_STABLE_FRACTION);float maxPenumbraTexels=clamp(CAD_SHADOW_MAX_PENUMBRA_WORLD*invTexelWorld,contactTexels,CAD_SHADOW_MAX_PENUMBRA_TEXELS);maxPenumbraTexels=mix(contactTexels,maxPenumbraTexels,clamp(planeTrust,0.0,1.0));mat2 rotation=cadShadowKernelRotation(worldPos);vec2 blocker=cadShadowBlockerSearch(sampleTexelPos,maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance,maxPenumbraTexels,rotation);if(blocker.y>=1.0){return borderFade;}float penumbraTexels=contactTexels;if(blocker.x>0.0){penumbraTexels=clamp(blocker.x*CAD_SHADOW_LIGHT_SPREAD*invTexelWorld,contactTexels,maxPenumbraTexels);}float visibility=0.0;for(int i=0;i<CAD_SHADOW_TAPS;i++){visibility+=cadShadowPlaneVisibility(sampleTexelPos+rotation*CAD_SHADOW_DISK[i]*penumbraTexels,maxCoord,receiverTexelPos,receiverDepth,gradPerTexel,tolerance);}return clamp(1.0-visibility/float(CAD_SHADOW_TAPS),0.0,1.0)*borderFade;}float cadShadowLit(sampler2D depthTexture,vec2 uv){float depth=texture(depthTexture,uv).r;if(depth>=CAD_SHADOW_EMPTY_DEPTH){return 1.0;}if(cadShadowTerminatorFade<0.0){return 1.0;}vec3 viewPos=cadShadowViewPosFromDepth(depth,uv);vec3 worldPos=cadShadowWorldFromView(viewPos);vec3 lightNdc=(cadShadowMatrix*vec4(worldPos,1.0)).xyz;if(any(greaterThan(abs(lightNdc.xy),vec2(1.0)))||lightNdc.z<-1.0){return 1.0;}float normalReliable=0.0;vec3 viewNormal=cadShadowViewNormal(depthTexture,uv,depth,viewPos,normalReliable);vec3 rawNormal=mat3(cadCameraMatrixWorld)*viewNormal;float rawLen2=dot(rawNormal,rawNormal);vec3 surfaceNormal=rawLen2>1.0e-8 ? rawNormal*inversesqrt(rawLen2): vec3(0.0,1.0,0.0);float upAmount=dot(surfaceNormal,vec3(0.0,1.0,0.0));float floorWeight=smoothstep(0.4,0.8,upAmount);if(normalReliable<0.35&&upAmount>0.15){floorWeight=1.0;}vec3 worldNormal=normalize(mix(surfaceNormal,vec3(0.0,1.0,0.0),floorWeight));float planeTrust=max(floorWeight,normalReliable);float occlusion=cadShadowShapeEdge(cadShadowOcclusion(worldPos,worldNormal,planeTrust));return 1.0-occlusion*cadShadowStrength;}\n#ifdef CAD_SHADOW_FOCUS_PROBE\nuniform float cameraFar;const int CAD_SHADOW_PROBE_GRID=7;const float CAD_SHADOW_PROBE_EXTENT=0.4;void main(){float logSum=0.0;float count=0.0;for(int y=0;y<CAD_SHADOW_PROBE_GRID;y++){for(int x=0;x<CAD_SHADOW_PROBE_GRID;x++){vec2 cell=vec2(float(x),float(y))/float(CAD_SHADOW_PROBE_GRID-1)- 0.5;vec2 uv=0.5+cell*CAD_SHADOW_PROBE_EXTENT;float depth=texture(tDepth,uv).r;if(depth<CAD_SHADOW_EMPTY_DEPTH){float distance=-cadShadowViewPosFromDepth(depth,uv).z;if(distance>0.0){logSum+=log(distance);count+=1.0;}}}}if(count<0.5){fragColor=vec4(0.0);return;}float normalized=clamp(exp(logSum/count)/max(cameraFar,1.0e-6),0.0,1.0);vec3 packed=fract(normalized*vec3(1.0,255.0,65025.0));packed-=packed.yzz*vec3(1.0/255.0,1.0/255.0,0.0);fragColor=vec4(packed,1.0);}\n#else\nvoid main(){float lit=cadShadowLit(tDepth,vUv);fragColor=vec4(lit,lit,lit,1.0);}\n#endif\n", Gn = "precision highp float;uniform sampler2D tDiffuse;uniform sampler2D tDepth;uniform sampler2D tBlendDiffuse;uniform sampler2D tBlendDepth;uniform float blendFactor;\n#if defined(ALPHA)\nuniform float alpha;\n#endif\n#if defined(OUTLINE)\nuniform sampler2D tOutlineColors;\n#endif\nin vec2 vUv;out vec4 fragColor;\n#if defined(OUTLINE)\nfloat floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}const int texelOffset=2;int computeFloatEncodedOutlineIndex(float bitEncodedFloat){return int(floatBitsSubset(floor((bitEncodedFloat*255.0)+0.5),5,8));}ivec4 computeNeighborOutlineIndices(sampler2D tDiffuse,ivec2 fragCoord){int outlineN=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,texelOffset)).a);int outlineS=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(texelOffset,0)).a);int outlineE=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,-texelOffset)).a);int outlineW=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(-texelOffset,0)).a);return ivec4(outlineN,outlineS,outlineE,outlineW);}int fetchOutlineIndex(sampler2D tDiffuse){ivec2 fragCoord=ivec2(gl_FragCoord.xy);int outlineIndex=computeFloatEncodedOutlineIndex(texelFetch(tDiffuse,fragCoord,0).a);ivec4 neighbours=computeNeighborOutlineIndices(tDiffuse,fragCoord);bvec4 isEqualToPixel=equal(neighbours,ivec4(outlineIndex));bvec4 isMiss=equal(neighbours,ivec4(0));bvec4 isEqualOrMiss=bvec4(isEqualToPixel.x||isMiss.x,isEqualToPixel.y||isMiss.y,isEqualToPixel.z||isMiss.z,isEqualToPixel.w||isMiss.w);bool hasOutline=outlineIndex>0&&!(all(isEqualToPixel))&&all(isEqualOrMiss);return hasOutline ? outlineIndex : 0;}\n#endif\nvoid main(){vec4 diffuse=texture(tDiffuse,vUv);if(diffuse.a==0.0){discard;}float depth=texture(tDepth,vUv).r;vec4 blendDiffuse=texture(tBlendDiffuse,vUv);float blendDepth=texture(tBlendDepth,vUv).r;fragColor=mix(diffuse,blendDiffuse,blendFactor*step(0.0,depth-blendDepth));\n#if defined(OUTLINE)\nint outline=fetchOutlineIndex(tDiffuse);fragColor.rgb=outline>0 ? texelFetch(tOutlineColors,ivec2(outline,0),0).rgb : fragColor.rgb;\n#endif\n#if defined(ALPHA)\nfragColor.a=alpha;\n#endif\ngl_FragDepth=min(depth,blendDepth);}", F = {
144
144
  detailedMesh: {
145
145
  fragment: gn,
@@ -12034,7 +12034,7 @@ var pm = class extends dm {
12034
12034
  };
12035
12035
  hm = _m, hm.POOL_MAX_IDLE = 7e3;
12036
12036
  // packages/pointclouds/src/potree-three-loader/workers/eptBinaryDecoder.worker.ts?worker&inline
12037
- var vm = "/*!\n* Copyright 2021 Cognite AS\n*/\nfunction e(e,t){throw Error(t||`Unexpected object: `+e)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nlet t=/* @__PURE__ */ function(e){return e[e.Box=0]=`Box`,e[e.Cylinder=1]=`Cylinder`,e[e.Composite=2]=`Composite`,e}({});function n(e,t,n,r){let i=b(e,O.__wbindgen_malloc),a=D,o=y(r,O.__wbindgen_malloc),s=D,c=O.assign_points(i,a,t,n,o,s);if(c[2])throw S(c[1]);return S(c[0])}function r(){return{__proto__:null,\"./pointclouds_wasm_bg.js\":{__proto__:null,__wbg_Error_30c8987f7c2ed4e2:function(e,t){return Error(m(e,t))},__wbg_Number_14af1003b8dd5ead:function(e){return Number(e)},__wbg_String_8564e559799eccda:function(e,t){let n=x(String(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32(e+4,r,!0),l().setInt32(e+0,n,!0)},__wbg___wbindgen_boolean_get_5b446f51afd21013:function(e){let t=e,n=typeof t==`boolean`?t:void 0;return v(n)?16777215:+!!n},__wbg___wbindgen_debug_string_4687d8d8c2017d52:function(e,t){let n=x(a(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32(e+4,r,!0),l().setInt32(e+0,n,!0)},__wbg___wbindgen_in_92f62ee1427d9e49:function(e,t){return e in t},__wbg___wbindgen_is_function_1f9d30630b8b1d3d:function(e){return typeof e==`function`},__wbg___wbindgen_is_object_3c45d4f2dde4e749:function(e){let t=e;return typeof t==`object`&&!!t},__wbg___wbindgen_is_undefined_8865fb403f8fe9d8:function(e){return e===void 0},__wbg___wbindgen_jsval_loose_eq_677f21e468d6b461:function(e,t){return e==t},__wbg___wbindgen_number_get_2e0e7dee9f701a71:function(e,t){let n=t,r=typeof n==`number`?n:void 0;l().setFloat64(e+8,v(r)?0:r,!0),l().setInt32(e+0,!v(r),!0)},__wbg___wbindgen_string_get_0380ccaa2f57f0d9:function(e,t){let n=t,r=typeof n==`string`?n:void 0;var i=v(r)?0:x(r,O.__wbindgen_malloc,O.__wbindgen_realloc),a=D;l().setInt32(e+4,a,!0),l().setInt32(e+0,i,!0)},__wbg___wbindgen_throw_41e9ee4f547fc59a:function(e,t){throw Error(m(e,t))},__wbg_call_6137034ef55c9d0f:function(){return _(function(e,t){return e.call(t)},arguments)},__wbg_done_b41a1d26cdb37fb6:function(e){return e.done},__wbg_fill_6629e977d3f595f8:function(e,t,n,r){return e.fill(t,n>>>0,r>>>0)},__wbg_get_658f6698067d9515:function(){return _(function(e,t){return Reflect.get(e,t)},arguments)},__wbg_get_unchecked_288889d017702237:function(e,t){return e[t>>>0]},__wbg_get_with_ref_key_6412cf3094599694:function(e,t){return e[t]},__wbg_instanceof_ArrayBuffer_a99f175873e5d9b8:function(e){let t;try{t=e instanceof ArrayBuffer}catch{t=!1}return t},__wbg_instanceof_Uint8Array_828cef2aaacafc31:function(e){let t;try{t=e instanceof Uint8Array}catch{t=!1}return t},__wbg_isArray_e15a2ff68ffdbef2:function(e){return Array.isArray(e)},__wbg_isSafeInteger_717808ad6a54bd9e:function(e){return Number.isSafeInteger(e)},__wbg_iterator_e3c31c892080e444:function(){return Symbol.iterator},__wbg_length_58572db4c38f3c3e:function(e){return e.length},__wbg_length_7f3c00c40364105e:function(e){return e.length},__wbg_length_d4bdea10311bd9cf:function(e){return e.length},__wbg_new_1dbf7428bba60a42:function(e){return new Uint8Array(e)},__wbg_new_with_length_6b2193ba95fe514b:function(e){return new Uint16Array(e>>>0)},__wbg_next_33784799010f1bbe:function(e){return e.next},__wbg_next_f4aac29c42af995c:function(){return _(function(e){return e.next()},arguments)},__wbg_prototypesetcall_8b03c01e2c0f8066:function(e,t,n){Float32Array.prototype.set.call(o(e,t),n)},__wbg_prototypesetcall_bc27214492979395:function(e,t,n){Uint8Array.prototype.set.call(s(e,t),n)},__wbg_set_index_0abc337288a6a949:function(e,t,n){e[t>>>0]=n},__wbg_value_f3c585ee8f5ba40c:function(e){return e.value},__wbindgen_generic_0000000000000001:function(e,t){return m(e,t)},__wbindgen_init_externref_table:function(){let e=O.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function i(e){let t=O.__externref_table_alloc();return O.__wbindgen_externrefs.set(t,e),t}function a(e){let t=typeof e;if(t==`number`||t==`boolean`||e==null)return`${e}`;if(t==`string`)return`\"${e}\"`;if(t==`symbol`){let t=e.description;return t==null?`Symbol`:`Symbol(${t})`}if(t==`function`){let t=e.name;return typeof t==`string`&&t.length>0?`Function(${t})`:`Function`}if(Array.isArray(e)){let t=e.length,n=`[`;t>0&&(n+=a(e[0]));for(let r=1;r<t;r++)n+=`, `+a(e[r]);return n+=`]`,n}let n=/\\[object ([^\\]]+)\\]/.exec(toString.call(e)),r;if(n&&n.length>1)r=n[1];else return toString.call(e);if(r==`Object`)try{return`Object(`+JSON.stringify(e)+`)`}catch{return`Object`}return e instanceof Error?`${e.name}: ${e.message}\\n${e.stack}`:r}function o(e,t){return e>>>=0,d().subarray(e/4,e/4+t)}function s(e,t){return e>>>=0,g().subarray(e/1,e/1+t)}let c=null;function l(){return(c===null||c.buffer.detached===!0||c.buffer.detached===void 0&&c.buffer!==O.memory.buffer)&&(c=new DataView(O.memory.buffer)),c}let u=null;function d(){return(u===null||u.byteLength===0)&&(u=new Float32Array(O.memory.buffer)),u}let f=null;function p(){return(f===null||f.byteLength===0)&&(f=new Float64Array(O.memory.buffer)),f}function m(e,t){return T(e>>>0,t)}let h=null;function g(){return(h===null||h.byteLength===0)&&(h=new Uint8Array(O.memory.buffer)),h}function _(e,t){try{return e.apply(this,t)}catch(e){let t=i(e);O.__wbindgen_exn_store(t)}}function v(e){return e==null}function y(e,t){let n=t(e.length*8,8)>>>0;return p().set(e,n/8),D=e.length,n}function b(e,t){let n=t(e.length*4,4)>>>0;for(let t=0;t<e.length;t++){let r=i(e[t]);l().setUint32(n+4*t,r,!0)}return D=e.length,n}function x(e,t,n){if(n===void 0){let n=E.encode(e),r=t(n.length,1)>>>0;return g().subarray(r,r+n.length).set(n),D=n.length,r}let r=e.length,i=t(r,1)>>>0,a=g(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=g().subarray(i+o,i+r),a=E.encodeInto(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return D=o,i}function S(e){let t=O.__wbindgen_externrefs.get(e);return O.__externref_table_dealloc(e),t}let C=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0});C.decode();let w=0;function T(e,t){return w+=t,w>=2146435072&&(C=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}),C.decode(),w=t),C.decode(g().subarray(e,e+t))}const E=new TextEncoder;`encodeInto`in E||(E.encodeInto=function(e,t){let n=E.encode(e);return t.set(n),{read:e.length,written:n.length}});let D=0,O;function k(e,t){return O=e.exports,c=null,u=null,f=null,h=null,O.__wbindgen_start(),O}async function A(e,t){if(typeof Response==`function`&&e instanceof Response){if(!e.ok)throw Error(`failed to fetch Wasm: ${e.status} ${e.statusText} fetching '${e.url}'`);if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(n(e.type)&&e.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\",t);else throw t}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}function n(e){switch(e){case`basic`:case`cors`:case`default`:return!0}return!1}}async function ee(e){if(O!==void 0)return O;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(`data:application/wasm;base64,AGFzbQEAAAABkQIoYAJ/fwF/YAN/f38Bf2ACf38AYAF/AX9gAX8AYAFvAX9gBH9/f38AYAN/f38AYAV/f39/fwBgAABgBH9/f38Bf2ABbwFvYAJ/bwBgBn9/f39/fwBgAm9vAW9gBX9/f39/AX9gAn9/AW9gA39/bwBgAm9vAX9gBn9/f39/fwF/YAV/f31/fwBgBX9/fn9/AGAFf398f38AYAADf39/YAABb2ACb38Bb2ABbwF8YAF/AW9gBG9/f38Bb2ADb39/AGAJf39/f39/fn5+AGAAAX9gA39+fgBgBn9/f31/fwBgBn9/f35/fwBgBn9/f3x/fwBgBn9/b29/fwN/f39gBH99f38AYAR/fn9/AGAEf3x/fwACoBIlGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxxfX3diZ19FcnJvcl8zMGM4OTg3ZjdjMmVkNGUyABAYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JnX2l0ZXJhdG9yX2UzYzMxYzg5MjA4MGU0NDQAGBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMaX193YmdfZ2V0XzY1OGY2Njk4MDY3ZDk1MTUADhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfX193YmluZGdlbl9pc19mdW5jdGlvbl8xZjlkMzA2MzBiOGIxZDNkAAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2NhbGxfNjEzNzAzNGVmNTVjOWQwZgAOGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcytfX3diZ19fX3diaW5kZ2VuX2lzX29iamVjdF8zYzQ1ZDRmMmRkZTRlNzQ5AAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX25leHRfMzM3ODQ3OTkwMTBmMWJiZQALGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx1fX3diZ19sZW5ndGhfN2YzYzAwYzQwMzY0MTA1ZQAFGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsX2JjMjcyMTQ0OTI5NzkzOTUAERguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMbX193YmdfbmV4dF9mNGFhYzI5YzQyYWY5OTVjAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2RvbmVfYjQxYTFkMjZjZGIzN2ZiNgAFGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxxfX3diZ192YWx1ZV9mM2M1ODVlZThmNWJhNDBjAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzLF9fd2JnX19fd2JpbmRnZW5fbnVtYmVyX2dldF8yZTBlN2RlZTlmNzAxYTcxAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJF9fd2JnX2dldF91bmNoZWNrZWRfMjg4ODg5ZDAxNzcwMjIzNwAZGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcydfX3diZ19nZXRfd2l0aF9yZWZfa2V5XzY0MTJjZjMwOTQ1OTk2OTQADhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMuX193YmdfX193YmluZGdlbl9pc191bmRlZmluZWRfODg2NWZiNDAzZjhmZTlkOAAFGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcyRfX3diZ19fX3diaW5kZ2VuX2luXzkyZjYyZWUxNDI3ZDllNDkAEhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMwX193YmdfX193YmluZGdlbl9qc3ZhbF9sb29zZV9lcV82NzdmMjFlNDY4ZDZiNDYxABIYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHl9fd2JnX2lzQXJyYXlfZTE1YTJmZjY4ZmZkYmVmMgAFGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx1fX3diZ19sZW5ndGhfZDRiZGVhMTAzMTFiZDljZgAFGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcyRfX3diZ19pc1NhZmVJbnRlZ2VyXzcxNzgwOGFkNmE1NGJkOWUABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfTnVtYmVyXzE0YWYxMDAzYjhkZDVlYWQAGhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoXzU4NTcyZGI0YzM4ZjNjM2UABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMnX193YmdfcHJvdG90eXBlc2V0Y2FsbF84YjAzYzAxZTJjMGY4MDY2ABEYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJl9fd2JnX25ld193aXRoX2xlbmd0aF82YjIxOTNiYTk1ZmU1MTRiABsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2ZpbGxfNjYyOWU5NzdkM2Y1OTVmOAAcGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcyBfX3diZ19zZXRfaW5kZXhfMGFiYzMzNzI4OGE2YTk0OQAdGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy1fX3diZ19fX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0XzViNDQ2ZjUxYWZkMjEwMTMABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfX193YmluZGdlbl9zdHJpbmdfZ2V0XzAzODBjY2FhMmY1N2YwZDkADBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfaW5zdGFuY2VvZl9VaW50OEFycmF5XzgyOGNlZjJhYWFjYWZjMzEABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfaW5zdGFuY2VvZl9BcnJheUJ1ZmZlcl9hOTlmMTc1ODczZTVkOWI4AAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzGl9fd2JnX25ld18xZGJmNzQyOGJiYTYwYTQyAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX1N0cmluZ184NTY0ZTU1OTc5OWVjY2RhAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfNDFlOWVlNGY1NDdmYzU5YQACGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy5fX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ180Njg3ZDhkOGMyMDE3ZDUyAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMjX193YmluZGdlbl9nZW5lcmljXzAwMDAwMDAwMDAwMDAwMDEAEAOmAaQBAgMGAgECBAIKAAIHAAcAABMKAAEAAQIAAQIHHgICDQACBgAfAAIAAAAEAgAAAAAEAQACAgIAAgAIAAYHByAIAgQEBAgBDQgC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NgIMIAEgAjYCDCABIAA2AggPC0GUzMAAIAE2AgBBjMzAAEGMzMAAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LQZDIwAAQsQEAC0EAIQFB9MnAACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0GszMAAQbTMwAAoAgAiACABIAAgAUsbQX8gABs2AgAgAiAETw0BQaTMwABBfzYCAA8LIAFCADcCECABIAI2AhwgAkECdEHsyMAAaiEDAkBBASACdCIEQYjMwAAoAgBxRQRAIAMgATYCACABIAM2AhggASABNgIMIAEgATYCCEGIzMAAQYjMwAAoAgAgBHI2AgAMAQsCQAJAIAAgAygCACIDKAIEQXhxRgRAIAMhAgwBCyAAQRkgAkEBdmtBACACQR9HG3QhBANAIAMgBEEddkEEcWoiBSgCECICRQ0CIARBAXQhBCACIQMgAigCBEF4cSAARw0ACwsgAigCCCIAIAE2AgwgAiABNgIIIAFBADYCGCABIAI2AgwgASAANgIIDAELIAVBEGogATYCACABIAM2AhggASABNgIMIAEgATYCCAtBACEBQazMwABBrMzAACgCAEEBayIANgIAIABFDQELDwtB9MnAACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0GszMAAQbTMwAAoAgAiACABIAAgAUsbQX8gABs2AgAL1QgDBX8BfgN8IwBB4ABrIgIkACACIAE2AhQCQAJAAkACQAJAAkACQAJAAkAgARDCAQRAIAEQwwEhAyACQQA2AiQgAiADNgIgIAJBADYCHCACIAJBFGo2AhggAkEoaiACQRhqEFkgAikDKCIHQgJRBEAgACACKAIwNgIEIABBATYCAAwKCyAHQgFSDQEgAisDMCEIIAJBOGogAkEYahBZIAIpAzgiB0ICUQRAIAAgAigCQDYCBCAAQQE2AgAMCgsCfwJAAkACQCAHQgFRBEAgAisDQCEJIAJByABqIAJBGGoQWSACKQNIIgdCAlYNAiAHp0EBaw4CAgEDC0EBIAJB3wBqQcTAwAAQaSEDIABBATYCACAAIAM2AgQMDQsgAigCUAwCCyAAIAIrA1A5AxggACAJOQMQIAAgCDkDCCAAQQA2AgAMCwtBAiACQd8AakHEwMAAEGkLIQQgAEEBNgIAIAAgBDYCBAwJCyAC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AyAFSw0BIAQgAkEBaiICRw0ACwsgAkEBcQ0FC0EAIQVBBkEAIAFBgPwDTxsiAiACQQNqIgIgASACQQJ0KAKQrUBB////AHFJGyICIAJBAWoiAiABIAJBAnQoApCtQEH///8AcUkbIgIgAkEBaiICIAEgAkECdCgCkK1AQf///wBxSRsiAkECdCgCkK1AQQt0IgMgAUELdCIERiADIARJaiACaiIEQQJ0IgJBkK3AAGohByACKAKQrUBBFXYhAkEjIQMCQCAEQQpNBEAgBygCBEEVdiEDIARFDQELIAdBBGsoAgBB////AHEhBQsCQCADIAJBf3NqRQ0AIAEgBWshBSADQQFrIQRBACEDA0AgAyACQb2kwABqLQAAaiIDIAVLDQEgBCACQQFqIgJHDQALCyACQQFxDQRBACEFQQVBACABQb2hBE8bIgIgAkEDaiICIAEgAkECdCgCwK1AQf///wBxSRsiAiACQQFqIgIgASACQQJ0KALArUBB////AHFJGyICIAJBAWoiAiABIAJBAnQoAsCtQEH///8AcUkbIgJBAnQoAsCtQEELdCIDIAFBC3QiBEYgAyAESWogAmoiBEECdCICQcCtwABqIQcgAigCwK1AQRV2IQJBKyEDAkAgBEEJTQRAIAcoAgRBFXYhAyAERQ0BCyAHQQRrKAIAQf///wBxIQULAkAgAyACQX9zakUNACABIAVrIQUgA0EBayEEQQAhAwNAIAMgAkHgpMAAai0AAGoiAyAFSw0BIAQgAkEBaiICRw0ACwsgAkEBcUUNAgwECyAAQgA3AQIgAEHcxAA7AQALQQAhAkECDAMLAn9BASECAkACQCABQfgGSQ0AIAFB/v8PSQ0BIAFBgYA4RiABQaCAOGtB4ABJciABQYCCOGtB8AFJIAFBgIA8a0H+/wNJcnINACABQYCAQGpB/v8DSSECCyACDAELQQAhBUEbQQAgAUH85QZPGyICIAJBDWoiAiABIAJBAnQoArSqQEH///8AcUkbIgIgAkEHaiICIAEgAkECdCgCtKpAQf///wBxSRsiAiACQQNqIgIgASACQQJ0KAK0qkBB////AHFJGyICIAJBAmoiAiABIAJBAnQoArSqQEH///8AcUkbIgIgAkEBaiICIAEgAkECdCgCtKpAQf///wBxSRsiAkECdCgCtKpAQQt0IgMgAUELdCIE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IAEgAvwKAAALIAAgAiADajYCCEEAC1MBAX8jAEEQayIFJAAgAUUEQBDFAQALIAVBCGogASADIAQgAigCEBEGACAFKAIMIQEgACAFKAIIIgI2AgQgACABQQAgAkEBcRs2AgAgBUEQaiQAC1ACAX8BfiMAQSBrIgMkACADIAE2AgwgAyAANgIIIANCgICAgKABIgQgA0EIaq2ENwMYIAMgBCADQQxqrYQ3AxBB54DAACADQRBqIAIQgQEAC1EBAX8jAEEQayIEJAAgAUUEQBDFAQALIARBCGogASADIAIoAhARBwAgBCgCDCEBIAAgBCgCCCICNgIEIAAgAUEAIAJBAXEbNgIAIARBEGokAAtDAQN/AkAgAkUNAANAIAAtAAAiBCABLQAAIgVGBEAgAEEBaiEAIAFBAWohASACQQFrIgINAQwCCwsgBCAFayEDCyADC0gBAn8jAEEgayIGJAAgAUUEQBDFAQALIAZBFGoiByABIAMgBCAFIAIoAhARCAAgBkEIaiAHEFggACAGKQMINwIAIAZBIGokAAtDAAJAIAFpQQFHIABBgICAgHggAWtLcg0AAkAgAEUNACABQQlPBEAgASAAEDwiAQ0BDAILIAAQJiIBRQ0BCyABDwsAC0YBAn8jAEEgayIFJAAgAUUEQBDFAQALIAVBFGoiBiABIAMgBCACKAIQEQYAIAVBCGogBhBYIAAgBSkDCDcCACAFQSBqJAALPgEBfyMAQRBrIgIkACACIAE2AgQgAiAANgIAIAIgAq1CgICAgJABhDcDCEH6j8AAIAJBCGoQUiACQRBqJAALPgEBfyMAQRBrIgIkACACIAE2AgQgAiAANgIAIAIgAq1CgICAgJABhDcDCEGOkMAAIAJBCGoQUiACQRBqJAAL62UDIX8VfgF8IAEoAggiA0GAgIABcSECIAArAwAhOAJAAkACQAJAIANBgICAgAFxRQRAAn8gASENIAJBAEchASMAQZALayIEJABCASEvIDi9IiNC/////////weDIiZCgICAgICAgAiEICNCAYZC/v///////w+DICNCNIinQf8PcSIAGyIpQgGDISRBAiEIAkACQAJAAkACfwJAAn8CQAJAAkACQAJAICZQIgJBAkEDIAIbQQQgI0KAgICAgICA+P8AgyImUBsgJkKAgICAgICA+P8AURtBAWsOBAIABAED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AAscACAARQRAEMUBAAsgACACIAMgBCABKAIQESUACxwAIABFBEAQxQEACyAAIAIgAyAEIAEoAhARJgALHAAgAEUEQBDFAQALIAAgAiADIAQgASgCEBEnAAsaACAARQRAEMUBAAsgACACIAMgASgCEBEHAAsaACAARQRAEMUBAAsgACACIAMgASgCEBEBAAsaAQFvIAAlASABJQEQDiECEEgiACACJgEgAAsPACAABEAQtwEACxCvAQALGAAgAEUEQBDFAQALIAAgAiABKAIQEQAACxwAIAEoAgAgACgCACAAKAIEIAEoAgQoAgwRAQALEgAgACABQQF0QQFyIAIQgQEACxcAIAAoAgAgASAAKAIEQQxqKAIAEQAACxYBAW8gACABEAAhAhBIIgAgAiYBIAALFgEBbyAAJQEQCSEBEEgiACABJgEgAAsWAQFvIAAlARALIQEQSCIAIAEmASAACxYBAW8gACABECQhAhBIIgAgAiYBIAALGQAgASgCAEGEk8AAQQUgASgCBCgCDBEBAAsZACABKAIAQeC/wABBFCABKAIEKAIMEQEACxkAIAEoAgBB9L/AAEERIAEoAgQoAgwRAQALGQAgASgCAEGFwMAAQRcgASgCBCgCDBEBAAsZACABKAIAQZzAwABBFyABKAIEKAIMEQEACxkAIAEoAgBBpMLAAEEVIAEoAgQoAgwRAQALGQAgASgCAEGQwsAAQRQgASgCBCgCDBEBAAsZACABKAIAQc/FwABBAyABKAIEKAIMEQEACxkAIAEoAgBB0sXAAEEDIAEoAgQoAgwRAQALHAAgAEH4xsAAKQIANwIIIABB8MbAACkCADcCAAscACAAQYjHwAApAgA3AgggAEGAx8AAKQIANwIACxQAIAAoAgAgASAAKAIEKAIMEQAAC8AIAQF/IwBBMGsiBSQAIAUgAzYCBCAFIAI2AgAgBSABNgIIAkACQAJAAkACQAJAIAEgAk8EQCABIANJDQYgAiADSw0BIAJFIAEgAk1yDQMgACACaiwAAEG/f0oNAyAAIAJBAWsiA2osAABBv39MBEAgAkECayIDIAJBA2sgACADaiwAAEG/f0obIQMLA0ACQCABIAJHBEAgACACaiwAAEG/f0wNAQwFCyABIAFBtKfAABB3AAsgAkEBaiICIAFJDQALIAEhAgwCCyAFIAVBCGqtQoCA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aW5nIGJveDogwAAQYXNzZXJ0aW9uIGBsZWZ0IMAXIHJpZ2h0YCBmYWlsZWQKICBsZWZ0OiDACQogcmlnaHQ6IMAAJUdvdCBlcnJvciB3aGlsZSBkZXNlcmlhbGl6aW5nIHNoYXBlOiDAAMACOiDAAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTcuMS9zcmMvcmF3LnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9mbHQyZGVjL3N0cmF0ZWd5L2dyaXN1LnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZGl5X2Zsb2F0LnJzAHBhY2thZ2VzL3BvaW50Y2xvdWRzL3dhc20vc3JjL3BhcnNlX2lucHV0cy5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvcndsb2NrL25vX3RocmVhZHMucnMAL3J1c3RjLzU4Y2Y4ZjljMzViMzU1MTk5NzI3NjI3ZDA3YWUzNGE0ZTI4NDZkNjcvbGlicmFyeS9jb3JlL3NyYy9udW0vaW1wL2ZsdDJkZWMvc3RyYXRlZ3kvZHJhZ29uLnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9iaWdudW0ucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy4xMDYvc3JjL2Z1dHVyZXMvanNwaS5ycwBwYWNrYWdlcy9wb2ludGNsb3Vkcy93YXNtL3NyYy9wb2ludF9vY3RyZWUvb2N0cmVlX25vZGUucnMAL3J1c3RjLzU4Y2Y4ZjljMzViMzU1MTk5NzI3NjI3ZDA3YWUzNGE0ZTI4NDZkNjcvbGlicmFyeS9jb3JlL3NyYy9mbXQvbW9kLnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvY29yZS9zcmMvc3RyL21vZC5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTQvc3JjL2RsbWFsbG9jLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2pzLXN5cy0wLjMuMTA2L3NyYy9saWIucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvc2VyZGUtd2FzbS1iaW5kZ2VuLTAuNi41L3NyYy9saWIucnMAEGZsb2F0aW5nIHBvaW50IGDAAWAAC2NoYXJhY3RlciBgwAFgAAlpbnRlZ2VyIGDAAWAACWJvb2xlYW4gYMABYAAPbWlzc2luZyBmaWVsZCBgwAFgABFkdXBsaWNhdGUgZmllbGQgYMABYAARc3RhcnQgYnl0ZSBpbmRleCDAJiBpcyBub3QgYSBjaGFyIGJvdW5kYXJ5OyBpdCBpcyBpbnNpZGUgwAggKGJ5dGVzIMALIG9mIHN0cmluZykAD2VuZCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAISnNWYWx1ZSjAASkAY2FwYWNpdHkgb3ZlcmZsb3cjBhAAUAAAABwAAAAFAAAAMQAAAAwAAAAEAAAAMgAAADMAAAA0AEGUksAAC8ggAQAAADUAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAACgMQAEgAAACRAgAADgAAAEVycm9yAAIGBAcBAQEUAQABJgIyAgMBNwgbBAYLAAE8AmUOOwIxAg8BHAIBAQsFIgXtAQgCAgIWAQcBAQMEAgkCAgIECAEEAgEFAhkCAwEGBAICFgEHAQIBAgECAgEBBQQCAgMDAQcEAQEHEQoDAQkBAwEWAQcBAgEFAgoBAwEDAgEPBAIMBwcBAwEIAgICFgEHAQIBBQIJAgICAwcDBAIBBQISCgIBBgMDAQQDAgEBAQIDAgMDAwwEBQMDAQQCAQYBDhUFDQEDARcBEAIJAQMBBAcCAQMBAgIEAgoHFgEDARcBCgEFAgkBAwEEBwIFAwEEAgoBAwwNAQMBMwEDAQYEEAIaAQMBEgMYAQkBAQIHAwEEBgEBAQgGCgIDDDoEHSUCAQEBBQEYAQEBFwIFAQEBBwEKAgQgSAEkBCcBJAEPAQ0lxgEBBQECAAEEAgcBAQEEAikBBAIhAQQCBwEBAQQCDwE5AQQCQwIgAxoGVgIGAgADWQcWCRgJFAwNAQMBAgxeAgoGCgYaBlkHKwVGCh8BDAQMBAEDKgIFCywEGgYLAz4CQQEdAgsGCgYOAi4CDBRNAaYIPAMPAz4FKwILCCsFAAIGAiYCBgIIAQEBAQEBAR8CNQEPAQ4CBgETAgMBCQFlAQwCGwENAyIOIQ+MBAAWCxUAAgAFLQEBBQECOAcCDhgJBwEHAQcBBwEHAQcBBwEHAX4iGgFZDNYaUAFWAmcFKwFeAVYJMAEAAzcJABS4CN0UPAMKBjgIRggMBnQLHgNOAQsEIQE3CQ4CCgJnGBwKBgIGAgYJBwEHATwEfgIKBgAMFwQxBAACaiYHDAUFGgEFAQEBAgECAQAgKgYzARMBBAQFAYcCAQG+AwYCBgIGAgMDBwEHCgUCDAEaARMBAgEPAg4iewUDBC0DWAENAwEvLoIdAzEPHAQkCR4FKwUeASUEDiqeAgoGJAQkBCgINAsMAQ8BBwECAQsBDwEHAQIDNAwACRYKCBgGASoBCUUGAgEBLAECAwECFwFICAkwEwECBSEDGwUbJjgEFAIyAQIFCAEDAR0CAwQK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`,``+import.meta.url));let t=r();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:n,module:i}=await A(await e,t);return k(n,i)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function te(e,t,r,i){return ee().then(()=>n(e,t,r,new Float64Array(i)))}\n/*!\n* Copyright 2022 Cognite AS\n*/\nfunction j(n){switch(n.shape.shapeType){case t.Cylinder:{let e=n.shape;return{object_id:n.objectId,cylinder:{center_a:e.centerA,center_b:e.centerB,radius:e.radius}}}case t.Box:{let e=n.shape;return{object_id:n.objectId,oriented_box:{inv_instance_matrix:e.invMatrix.data}}}case t.Composite:throw Error(`Cannot assign points to objects - encountered unexpected composite object`);default:e(n.shape.shapeType)}}async function ne(e,t,n,r){let i=t.map(e=>j(e));try{return await te(i,e,{min:r.min.toArray(),max:r.max.toArray()},n.toArray())}catch(e){return Promise.reject(Error(e))}}var M,N,re,ie,P,ae;let oe,se,ce\n/**\n* @license\n* Copyright 2010-2026 Three.js Authors\n* SPDX-License-Identifier: MIT\n*/\n;const le=1e3,ue=1001,de=1002,fe=2300,pe=2301,me=2302,he=2303,ge=2400,_e=2401,ve=2402,F=`srgb`,ye=`srgb-linear`,be=`linear`,xe=2e3;function Se(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ce(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}const we={};function Te(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable \"THREE.Node.captureStackTrace\" to capture stack traces.`}return e}function I(...e){e=Te(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function L(...e){e=Te(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function Ee(...e){let t=e.join(` `);t in we||(we[t]=!0,I(...e))}var De=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n!==void 0&&n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}};const R=/* @__PURE__ */ `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`.split(`.`);function Oe(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(R[e&255]+R[e>>8&255]+R[e>>16&255]+R[e>>24&255]+`-`+R[t&255]+R[t>>8&255]+`-`+R[t>>16&15|64]+R[t>>24&255]+`-`+R[n&63|128]+R[n>>8&255]+`-`+R[n>>16&255]+R[n>>24&255]+R[r&255]+R[r>>8&255]+R[r>>16&255]+R[r>>24&255]).toLowerCase()}function z(e,t,n){return Math.max(t,Math.min(n,e))}function ke(e,t){return(e%t+t)%t}function Ae(e,t,n){return(1-n)*e+n*t}oe=Symbol.iterator;var je=class{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`THREE.Vector2: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`THREE.Vector2: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=z(this.x,e.x,t.x),this.y=z(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=z(this.x,e,t),this.y=z(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(z(n,e,t))}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(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.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(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(z(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[oe](){yield this.x,yield this.y}};M=je,M.prototype.isVector2=!0;var Me=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:I(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(z(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),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(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._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 e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}};se=Symbol.iterator;var B=class{constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`THREE.Vector3: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`THREE.Vector3: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Pe.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Pe.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=z(this.x,e.x,t.x),this.y=z(this.y,e.y,t.y),this.z=z(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=z(this.x,e,t),this.y=z(this.y,e,t),this.z=z(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(z(n,e,t))}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(e){return this.x*e.x+this.y*e.y+this.z*e.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(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Ne.copy(this).projectOnVector(e),this.sub(Ne)}reflect(e){return this.sub(Ne.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(z(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[se](){yield this.x,yield this.y,yield this.z}};N=B,N.prototype.isVector3=!0;const Ne=/*@__PURE__*/ new B,Pe=/*@__PURE__*/ new Me;var Fe=class{constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return Ee(`Matrix3: .scale() is deprecated. Use .makeScale() instead.`),this.premultiply(Ie.makeScale(e,t)),this}rotate(e){return Ee(`Matrix3: .rotate() is deprecated. Use .makeRotation() instead.`),this.premultiply(Ie.makeRotation(-e)),this}translate(e,t){return Ee(`Matrix3: .translate() is deprecated. Use .makeTranslation() instead.`),this.premultiply(Ie.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}};re=Fe,re.prototype.isMatrix3=!0;const Ie=/*@__PURE__*/ new Fe,Le=/*@__PURE__*/ new Fe().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Re=/*@__PURE__*/ new Fe().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function ze(){let e={enabled:!0,workingColorSpace:ye,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n||(this.spaces[t].transfer===`srgb`&&(e.r=H(e.r),e.g=H(e.g),e.b=H(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=Be(e.r),e.g=Be(e.g),e.b=Be(e.b))),e},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?be:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Ee(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Ee(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[ye]:{primaries:t,whitePoint:r,transfer:be,toXYZ:Le,fromXYZ:Re,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:F},outputColorSpaceConfig:{drawingBufferColorSpace:F}},[F]:{primaries:t,whitePoint:r,transfer:`srgb`,toXYZ:Le,fromXYZ:Re,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:F}}}),e}const V=/*@__PURE__*/ ze();function H(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Be(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}let Ve;var He=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{Ve===void 0&&(Ve=Ce(`canvas`)),Ve.width=e.width,Ve.height=e.height;let t=Ve.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=Ve}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Ce(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=H(i[e]/255)*255;return n.putImageData(r,0,0),t}if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(H(t[e]/255)*255):t[e]=H(t[e]);return{data:t,width:e.width,height:e.height}}return I(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}};let Ue=0;var We=class{constructor(e=null){this.isTextureSource=!0,Object.defineProperty(this,\"id\",{value:Ue++}),this.uuid=Oe(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayWidth,t.displayHeight,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(Ge(r[t].image)):e.push(Ge(r[t]))}else e=Ge(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function Ge(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?He.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(I(`Texture: Unable to serialize Texture.`),{})}let Ke=0;const qe=/*@__PURE__*/ new B;var Je=class e extends De{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=ue,i=ue,a=1006,o=1008,s=1023,c=1009,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,\"id\",{value:Ke++}),this.uuid=Oe(),this.name=``,this.source=new We(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new je(0,0),this.repeat=new je(1,1),this.center=new je(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Fe,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(qe).x}get height(){return this.source.getSize(qe).y}get depth(){return this.source.getSize(qe).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){I(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];r===void 0?I(`Texture.setValues(): property '${t}' does not exist.`):r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case le:e.x-=Math.floor(e.x);break;case ue:e.x=e.x<0?0:1;break;case de:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case le:e.y-=Math.floor(e.y);break;case ue:e.y=e.y<0?0:1;break;case de:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Je.DEFAULT_IMAGE=null,Je.DEFAULT_MAPPING=300,Je.DEFAULT_ANISOTROPY=1,ce=Symbol.iterator,ie=class{constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`THREE.Vector4: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`THREE.Vector4: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)<a&&Math.abs(u-m)<a&&Math.abs(p-h)<a){if(Math.abs(l+d)<o&&Math.abs(u+m)<o&&Math.abs(p+h)<o&&Math.abs(c+f+g-3)<o)return this.set(1,0,0,0),this;t=Math.PI;let e=(c+1)/2,s=(f+1)/2,_=(g+1)/2,v=(l+d)/4,y=(u+m)/4,b=(p+h)/4;return e>s&&e>_?e<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(e),r=v/n,i=y/n):s>_?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=b/r):_<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(_),n=y/i,r=b/i),this.set(n,r,i,t),this}let _=Math.sqrt((h-p)*(h-p)+(u-m)*(u-m)+(d-l)*(d-l));return Math.abs(_)<.001&&(_=1),this.x=(h-p)/_,this.y=(u-m)/_,this.z=(d-l)/_,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=z(this.x,e.x,t.x),this.y=z(this.y,e.y,t.y),this.z=z(this.z,e.z,t.z),this.w=z(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=z(this.x,e,t),this.y=z(this.y,e,t),this.z=z(this.z,e,t),this.w=z(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(z(n,e,t))}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(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.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(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[ce](){yield this.x,yield this.y,yield this.z,yield this.w}},ie.prototype.isVector4=!0;var Ye=class e{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,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 e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinantAffine()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinantAffine()===0)return this.identity();let t=this.elements,n=e.elements,r=1/Xe.setFromMatrixColumn(e,0).length(),i=1/Xe.setFromMatrixColumn(e,1).length(),a=1/Xe.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Ze,e,Qe)}lookAt(e,t,n){let r=this.elements;return W.subVectors(e,t),W.lengthSq()===0&&(W.z=1),W.normalize(),$e.crossVectors(n,W),$e.lengthSq()===0&&(Math.abs(n.z)===1?W.x+=1e-4:W.z+=1e-4,W.normalize(),$e.crossVectors(n,W)),$e.normalize(),et.crossVectors(W,$e),r[0]=$e.x,r[4]=et.x,r[8]=W.x,r[1]=$e.y,r[5]=et.y,r[9]=W.y,r[2]=$e.z,r[6]=et.z,r[10]=W.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],ee=r[10],te=r[14],j=r[3],ne=r[7],M=r[11],N=r[15];return i[0]=a*x+o*T+s*k+c*j,i[4]=a*S+o*E+s*A+c*ne,i[8]=a*C+o*D+s*ee+c*M,i[12]=a*w+o*O+s*te+c*N,i[1]=l*x+u*T+d*k+f*j,i[5]=l*S+u*E+d*A+f*ne,i[9]=l*C+u*D+d*ee+f*M,i[13]=l*w+u*O+d*te+f*N,i[2]=p*x+m*T+h*k+g*j,i[6]=p*S+m*E+h*A+g*ne,i[10]=p*C+m*D+h*ee+g*M,i[14]=p*w+m*O+h*te+g*N,i[3]=_*x+v*T+y*k+b*j,i[7]=_*S+v*E+y*A+b*ne,i[11]=_*C+v*D+y*ee+b*M,i[15]=_*w+v*O+y*te+b*N,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}determinantAffine(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[1],a=e[5],o=e[9],s=e[2],c=e[6],l=e[10];return t*(a*l-o*c)-n*(i*l-o*s)+r*(i*c-a*s)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,w=l*h-d*p,T=l*g-f*p,E=u*h-d*m,D=u*g-f*m,O=d*g-f*h,k=_*O-v*D+y*E+b*T-x*w+S*C;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let A=1/k;return e[0]=(o*O-s*D+c*E)*A,e[1]=(r*D-n*O-i*E)*A,e[2]=(m*S-h*x+g*b)*A,e[3]=(d*x-u*S-f*b)*A,e[4]=(s*T-a*O-c*w)*A,e[5]=(t*O-r*T+i*w)*A,e[6]=(h*y-p*S-g*v)*A,e[7]=(l*S-d*y+f*v)*A,e[8]=(a*D-o*T+c*C)*A,e[9]=(n*T-t*D-i*C)*A,e[10]=(p*x-m*y+g*_)*A,e[11]=(u*y-l*x-f*_)*A,e[12]=(o*w-a*E-s*C)*A,e[13]=(t*E-n*w+r*C)*A,e[14]=(m*v-p*b-h*_)*A,e[15]=(l*b-u*v+d*_)*A,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinantAffine();if(i===0)return n.set(1,1,1),t.identity(),this;let a=Xe.set(r[0],r[1],r[2]).length(),o=Xe.set(r[4],r[5],r[6]).length(),s=Xe.set(r[8],r[9],r[10]).length();i<0&&(a=-a),U.copy(this);let c=1/a,l=1/o,u=1/s;return U.elements[0]*=c,U.elements[1]*=c,U.elements[2]*=c,U.elements[4]*=l,U.elements[5]*=l,U.elements[6]*=l,U.elements[8]*=u,U.elements[9]*=u,U.elements[10]*=u,t.setFromRotationMatrix(U),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=xe,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=xe,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}};P=Ye,P.prototype.isMatrix4=!0;const Xe=/*@__PURE__*/ new B,U=/*@__PURE__*/ new Ye,Ze=/*@__PURE__*/ new B(0,0,0),Qe=/*@__PURE__*/ new B(1,1,1),$e=/*@__PURE__*/ new B,et=/*@__PURE__*/ new B,W=/*@__PURE__*/ new B,tt=/*@__PURE__*/ new Ye,nt=/*@__PURE__*/ new Me;var rt=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(z(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-z(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(z(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-z(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(z(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-z(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:I(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return tt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(tt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return nt.setFromEuler(this),this.setFromQuaternion(nt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};rt.DEFAULT_ORDER=`XYZ`;var it=class{constructor(){this.mask=1}set(e){this.mask=1<<e>>>0}enable(e){this.mask|=1<<e}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e}disable(e){this.mask&=~(1<<e)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return!!(this.mask&1<<e)}};let at=0;const ot=/*@__PURE__*/ new B,st=/*@__PURE__*/ new Me,G=/*@__PURE__*/ new Ye,ct=/*@__PURE__*/ new B,lt=/*@__PURE__*/ new B,ut=/*@__PURE__*/ new B,dt=/*@__PURE__*/ new Me,ft=/*@__PURE__*/ new B(1,0,0),pt=/*@__PURE__*/ new B(0,1,0),mt=/*@__PURE__*/ new B(0,0,1),ht={type:`added`},gt={type:`removed`},_t={type:`childadded`,child:null},vt={type:`childremoved`,child:null};var yt=class e extends De{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,\"id\",{value:at++}),this.uuid=Oe(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new B,n=new rt,r=new Me,i=new B(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Ye},normalMatrix:{value:new Fe}}),this.matrix=new Ye,this.matrixWorld=new Ye,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new it,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return st.setFromAxisAngle(e,t),this.quaternion.multiply(st),this}rotateOnWorldAxis(e,t){return st.setFromAxisAngle(e,t),this.quaternion.premultiply(st),this}rotateX(e){return this.rotateOnAxis(ft,e)}rotateY(e){return this.rotateOnAxis(pt,e)}rotateZ(e){return this.rotateOnAxis(mt,e)}translateOnAxis(e,t){return ot.copy(e).applyQuaternion(this.quaternion),this.position.add(ot.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(ft,e)}translateY(e){return this.translateOnAxis(pt,e)}translateZ(e){return this.translateOnAxis(mt,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(G.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?ct.copy(e):ct.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),lt.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?G.lookAt(lt,ct,this.up):G.lookAt(ct,lt,this.up),this.quaternion.setFromRotationMatrix(G),r&&(G.extractRotation(r.matrixWorld),st.setFromRotationMatrix(G),this.quaternion.premultiply(st.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(L(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(ht),_t.child=e,this.dispatchEvent(_t),_t.child=null):L(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(gt),vt.child=e,this.dispatchEvent(vt),vt.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),G.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),G.multiply(e.parent.matrixWorld)),e.applyMatrix4(G),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(ht),_t.child=e,this.dispatchEvent(_t),_t.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(lt,e,ut),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(lt,dt,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}intersectsFrustum(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t,n=!1){let r=this.parent;if(e===!0&&r!==null&&r.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||n)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,n=!0),t===!0){let e=this.children;for(let t=0,r=e.length;t<r;t++)e[t].updateWorldMatrix(!1,!0,n)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,r.name=this.name,r.castShadow=this.castShadow,r.receiveShadow=this.receiveShadow,r.visible=this.visible,r.frustumCulled=this.frustumCulled,r.renderOrder=this.renderOrder,r.static=this.static,r.matrixAutoUpdate=this.matrixAutoUpdate,Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0){if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material)}if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}dispose(){this.dispatchEvent({type:`dispose`})}};yt.DEFAULT_UP=/*@__PURE__*/ new B(0,1,0),yt.DEFAULT_MATRIX_AUTO_UPDATE=!0,yt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const bt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},K={h:0,s:0,l:0},xt={h:0,s:0,l:0};function St(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Ct=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=F){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,V.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=V.workingColorSpace){return this.r=e,this.g=t,this.b=n,V.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=V.workingColorSpace){if(e=ke(e,1),t=z(t,0,1),n=z(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=St(i,r,e+1/3),this.g=St(i,r,e),this.b=St(i,r,e-1/3)}return V.colorSpaceToWorking(this,r),this}setStyle(e,t=F){function n(t){t!==void 0&&parseFloat(t)<1&&I(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\\w+)\\(([^\\)]*)\\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:I(`Color: Unknown color model `+e)}}else if(r=/^\\#([A-Fa-f\\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);I(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=F){let n=bt[e.toLowerCase()];return n===void 0?I(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=H(e.r),this.g=H(e.g),this.b=H(e.b),this}copyLinearToSRGB(e){return this.r=Be(e.r),this.g=Be(e.g),this.b=Be(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=F){return V.workingToColorSpace(q.copy(this),e),Math.round(z(q.r*255,0,255))*65536+Math.round(z(q.g*255,0,255))*256+Math.round(z(q.b*255,0,255))}getHexString(e=F){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=V.workingColorSpace){V.workingToColorSpace(q.copy(this),t);let n=q.r,r=q.g,i=q.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=V.workingColorSpace){return V.workingToColorSpace(q.copy(this),t),e.r=q.r,e.g=q.g,e.b=q.b,e}getStyle(e=F){V.workingToColorSpace(q.copy(this),e);let t=q.r,n=q.g,r=q.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(K),this.setHSL(K.h+e,K.s+t,K.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(K),e.getHSL(xt);let n=Ae(K.h,xt.h,t),r=Ae(K.s,xt.s,t),i=Ae(K.l,xt.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};const q=/*@__PURE__*/ new Ct;Ct.NAMES=bt;var wt=class{constructor(e=new B(1/0,1/0,1/0),t=new B(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(Y.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(Y.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=Y.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,Y):Y.fromBufferAttribute(r,t),Y.applyMatrix4(e.matrixWorld),this.expandByPoint(Y);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),Tt.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),Tt.copy(e.boundingBox)),Tt.applyMatrix4(e.matrixWorld),this.union(Tt)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Y),Y.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(At),jt.subVectors(this.max,At),Et.subVectors(e.a,At),Dt.subVectors(e.b,At),Ot.subVectors(e.c,At),X.subVectors(Dt,Et),Z.subVectors(Ot,Dt),kt.subVectors(Et,Ot);let t=[0,-X.z,X.y,0,-Z.z,Z.y,0,-kt.z,kt.y,X.z,0,-X.x,Z.z,0,-Z.x,kt.z,0,-kt.x,-X.y,X.x,0,-Z.y,Z.x,0,-kt.y,kt.x,0];return!Pt(t,Et,Dt,Ot,jt)||(t=[1,0,0,0,1,0,0,0,1],!Pt(t,Et,Dt,Ot,jt))?!1:(Mt.crossVectors(X,Z),t=[Mt.x,Mt.y,Mt.z],Pt(t,Et,Dt,Ot,jt))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Y).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Y).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(J[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),J[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),J[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),J[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),J[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),J[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),J[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),J[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(J)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}};const J=[/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B],Y=/*@__PURE__*/ new B,Tt=/*@__PURE__*/ new wt,Et=/*@__PURE__*/ new B,Dt=/*@__PURE__*/ new B,Ot=/*@__PURE__*/ new B,X=/*@__PURE__*/ new B,Z=/*@__PURE__*/ new B,kt=/*@__PURE__*/ new B,At=/*@__PURE__*/ new B,jt=/*@__PURE__*/ new B,Mt=/*@__PURE__*/ new B,Nt=/*@__PURE__*/ new B;function Pt(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Nt.fromArray(e,a);let o=i.x*Math.abs(Nt.x)+i.y*Math.abs(Nt.y)+i.z*Math.abs(Nt.z),s=t.dot(Nt),c=n.dot(Nt),l=r.dot(Nt);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}function Ft(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function It(e){return e!==void 0&&e.inTangents!==void 0&&e.outTangents!==void 0}var Lt=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e<r)){for(let a=n+2;;){if(r===void 0){if(e<i)break forward_scan;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(i=r,r=t[++n],e<r)break seek}a=t.length;break linear_scan}if(!(e>=i)){let o=t[1];e<o&&(n=2,i=o);for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(r=i,i=t[--n-1],e>=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n<a;){let r=n+a>>>1;e<t[r]?a=r:n=r+1}if(r=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(r===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,r)}return this.interpolate_(n,i,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r;for(let e=0;e!==r;++e)t[e]=n[i+e];return t}interpolate_(){throw Error(`THREE.Interpolant: Call to abstract method.`)}intervalChanged_(){}},Rt=class extends Lt{constructor(e,t,n,r){super(e,t,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ge,endingEnd:ge}}intervalChanged_(e,t,n){let r=this.parameterPositions,i=e-2,a=e+1,o=r[i],s=r[a];if(o===void 0)switch(this.getSettings_().endingStart){case _e:i=e,o=2*t-n;break;case ve:i=r.length-2,o=t+r[i]-r[i+1];break;default:i=e,o=n}if(s===void 0)switch(this.getSettings_().endingEnd){case _e:a=e,s=2*n-t;break;case ve:a=1,s=n+r[1]-r[0];break;default:a=e-1,s=t}let c=(n-t)*.5,l=this.valueSize;this._weightPrev=c/(t-o),this._weightNext=c/(s-n),this._offsetPrev=i*l,this._offsetNext=a*l}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,f=this._weightNext,p=(n-t)/(r-t),m=p*p,h=m*p,g=-d*h+2*d*m-d*p,_=(1+d)*h+(-1.5-2*d)*m+(-.5+d)*p+1,v=(-1-f)*h+(1.5+f)*m+.5*p,y=f*h-f*m;for(let e=0;e!==o;++e)i[e]=g*a[l+e]+_*a[c+e]+v*a[s+e]+y*a[u+e];return i}},zt=class extends Lt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=(n-t)/(r-t),u=1-l;for(let e=0;e!==o;++e)i[e]=a[c+e]*u+a[s+e]*l;return i}},Bt=class extends Lt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e){return this.copySampleValue_(e-1)}},Vt=class extends Lt{interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this.inTangents,u=this.outTangents;if(!l||!u){let e=(n-t)/(r-t),l=1-e;for(let t=0;t!==o;++t)i[t]=a[c+t]*l+a[s+t]*e;return i}let d=o*2,f=e-1;for(let p=0;p!==o;++p){let o=a[c+p],m=a[s+p],h=f*d+p*2,g=u[h],_=u[h+1],v=e*d+p*2,y=l[v],b=l[v+1],x=Wt(n,t,g,y,r);i[p]=Ht(x,o,_,b,m)}return i}};function Ht(e,t,n,r,i){let a=1-e;return a*a*a*t+3*a*a*e*n+3*a*e*e*r+e*e*e*i}function Ut(e,t,n,r,i){let a=1-e;return 3*a*a*(n-t)+6*a*e*(r-n)+3*e*e*(i-r)}function Wt(e,t,n,r,i){let a=(e-t)/(i-t);for(let o=0;o<8;o++){let o=Ht(a,t,n,r,i)-e;if(Math.abs(o)<1e-10)break;let s=Ut(a,t,n,r,i);if(Math.abs(s)<1e-10)break;a=Math.max(0,Math.min(1,a-o/s))}return a}var Q=class{constructor(e,t,n,r){if(e===void 0)throw Error(`THREE.KeyframeTrack: track name is undefined`);if(t===void 0||t.length===0)throw Error(`THREE.KeyframeTrack: no keyframes in track named `+e);this.name=e,this.times=Ft(t,this.TimeBufferType),this.values=Ft(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:Ft(e.times,Array),values:Ft(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(n.interpolation=t),It(e.settings)&&(n.settings={inTangents:Ft(e.settings.inTangents,Array),outTangents:Ft(e.settings.outTangents,Array)})}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new Bt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new zt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new Rt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodBezier(e){let t=new Vt(this.times,this.values,this.getValueSize(),e);return this.settings&&(t.inTangents=this.settings.inTangents,t.outTangents=this.settings.outTangents),t}setInterpolation(e){let t;switch(e){case fe:t=this.InterpolantFactoryMethodDiscrete;break;case pe:t=this.InterpolantFactoryMethodLinear;break;case me:t=this.InterpolantFactoryMethodSmooth;break;case he:t=this.InterpolantFactoryMethodBezier}if(t===void 0){let t=`unsupported interpolation for `+this.ValueTypeName+` keyframe track named `+this.name;if(this.createInterpolant===void 0){if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t)}return I(`KeyframeTrack:`,t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return fe;case this.InterpolantFactoryMethodLinear:return pe;case this.InterpolantFactoryMethodSmooth:return me;case this.InterpolantFactoryMethodBezier:return he}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]*=e;It(this.settings)&&(Gt(this.settings.inTangents,e),Gt(this.settings.outTangents,e))}return this}trim(e,t){let n=this.times,r=n.length,i=0,a=r-1;for(;i!==r&&n[i]<e;)++i;for(;a!==-1&&n[a]>t;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(L(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(L(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){L(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){L(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Se(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){L(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===me,i=e.length-1,a=1;for(let o=1;o<i;++o){let i=!1,s=e[o];if(s!==e[o+1]&&(o!==1||s!==e[0])){if(r)i=!0;else{let e=o*n,r=e-n,a=e+n;for(let o=0;o!==n;++o){let n=t[e+o];if(n!==t[r+o]||n!==t[a+o]){i=!0;break}}}}if(i){if(o!==a){e[a]=e[o];let r=o*n,i=a*n;for(let e=0;e!==n;++e)t[i+e]=t[r+e]}++a}}if(i>0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,It(this.settings)&&(r.settings={inTangents:this.settings.inTangents.slice(),outTangents:this.settings.outTangents.slice()}),r}};function Gt(e,t){for(let n=0,r=e.length;n!==r;n+=2)e[n]*=t}Q.prototype.ValueTypeName=``,Q.prototype.TimeBufferType=Float32Array,Q.prototype.ValueBufferType=Float32Array,Q.prototype.DefaultInterpolation=pe;var Kt=class extends Q{constructor(e,t,n){super(e,t,n)}};Kt.prototype.ValueTypeName=`bool`,Kt.prototype.ValueBufferType=Array,Kt.prototype.DefaultInterpolation=fe,Kt.prototype.InterpolantFactoryMethodLinear=void 0,Kt.prototype.InterpolantFactoryMethodSmooth=void 0;var qt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};qt.prototype.ValueTypeName=`color`;var Jt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Jt.prototype.ValueTypeName=`number`;var Yt=class extends Lt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Me.slerpFlat(i,0,a,c-o,a,c,s);return i}},Xt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new Yt(this.times,this.values,this.getValueSize(),e)}};Xt.prototype.ValueTypeName=`quaternion`,Xt.prototype.InterpolantFactoryMethodSmooth=void 0;var Zt=class extends Q{constructor(e,t,n){super(e,t,n)}};Zt.prototype.ValueTypeName=`string`,Zt.prototype.ValueBufferType=Array,Zt.prototype.DefaultInterpolation=fe,Zt.prototype.InterpolantFactoryMethodLinear=void 0,Zt.prototype.InterpolantFactoryMethodSmooth=void 0;var Qt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Qt.prototype.ValueTypeName=`vector`;const $t=/* @__PURE__ */ RegExp(`[\\\\[\\\\]\\\\.:\\\\/]`,`g`),en=/* @__PURE__ */ RegExp(`^((?:[^\\\\[\\\\]\\\\.:\\\\/]+[\\\\/:])*)([^\\\\[\\\\]:\\\\/]+)?(?:\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?)?\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?$`),tn=[`material`,`materials`,`bones`,`map`];var nn=class{constructor(e,t,n){let r=n||$.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},$=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\\s/g,`_`).replace($t,``)}static parseTrackName(e){let t=en.exec(e);if(t===null)throw Error(`THREE.PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);tn.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`THREE.PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r<e.length;r++){let i=e[r];if(i.name===t||i.uuid===t)return i;let a=n(i.children);if(a)return a}return null},r=n(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)e[t++]=n[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let t=this.node,n=this.parsedPath,r=n.objectName,i=n.propertyName,a=n.propertyIndex;if(t||(t=e.findNode(this.rootNode,n.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){I(`PropertyBinding: No target node found for track: `+this.path+`.`);return}if(r){let e=n.objectIndex;switch(r){case`materials`:if(!t.material){L(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.materials){L(`PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.`,this);return}t=t.material.materials;break;case`bones`:if(!t.skeleton){L(`PropertyBinding: Can not bind to bones as node does not have a skeleton.`,this);return}t=t.skeleton.bones;for(let n=0;n<t.length;n++)if(t[n].name===e){e=n;break}break;case`map`:if(`map`in t){t=t.map;break}if(!t.material){L(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.map){L(`PropertyBinding: Can not bind to material.map as node.material does not have a map.`,this);return}t=t.material.map;break;default:if(t[r]===void 0){L(`PropertyBinding: Can not bind to objectName of node undefined.`,this);return}t=t[r]}if(e!==void 0){if(t[e]===void 0){L(`PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.`,this,t);return}t=t[e]}}let o=t[i];if(o===void 0){let e=n.nodeName;L(`PropertyBinding: Trying to update property for track: `+e+`.`+i+` but it wasn't found.`,t);return}let s=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?s=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(s=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(a!==void 0){if(i===`morphTargetInfluences`){if(!t.geometry){L(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.`,this);return}if(!t.geometry.morphAttributes){L(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.`,this);return}t.morphTargetDictionary[a]!==void 0&&(a=t.morphTargetDictionary[a])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};$.Composite=nn,$.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},$.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},$.prototype.GetterByBindingType=[$.prototype._getValue_direct,$.prototype._getValue_array,$.prototype._getValue_arrayElement,$.prototype._getValue_toArray],$.prototype.SetterByBindingTypeAndVersioning=[[$.prototype._setValue_direct,$.prototype._setValue_direct_setNeedsUpdate,$.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[$.prototype._setValue_array,$.prototype._setValue_array_setNeedsUpdate,$.prototype._setValue_array_setMatrixWorldNeedsUpdate],[$.prototype._setValue_arrayElement,$.prototype._setValue_arrayElement_setNeedsUpdate,$.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[$.prototype._setValue_fromArray,$.prototype._setValue_fromArray_setNeedsUpdate,$.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]],ae=class{constructor(e,t,n,r){this.elements=[1,0,0,1],e!==void 0&&this.set(e,t,n,r)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let n=0;n<4;n++)this.elements[n]=e[n+t];return this}set(e,t,n,r){let i=this.elements;return i[0]=e,i[2]=t,i[1]=n,i[3]=r,this}},ae.prototype.isMatrix2=!0,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`186`}})),typeof window<`u`&&(window.__THREE__?I(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`186`);async function rn(e,t,n,r){let i=e.buffer,a=new DataView(i),o=e.schema,s=e.scale,c=e.offset,l=e.mins,u=o.reduce((e,t)=>(e[t.name]=t,e),{}),d=e=>{let t=0;for(let n=0;n<o.length;++n){if(o[n].name===e)return t;t+=o[n].size}};function f(e){let t=d(e),n=u[e].type,r=u[e].size;if(n==`signed`)switch(r){case 1:return e=>a.getInt8(e+t);case 2:return e=>a.getInt16(e+t,!0);case 4:return e=>a.getInt32(e+t,!0);default:throw Error(`Unrecognized byte size for \"signed\" numbers`)}if(n==`unsigned`)switch(r){case 1:return e=>a.getUint8(e+t);case 2:return e=>a.getUint16(e+t,!0);case 4:return e=>a.getUint32(e+t,!0);default:throw Error(`Unrecognized byte size for \"unsigned\" numbers`)}if(n==`float`)switch(r){case 4:return e=>a.getFloat32(e+t,!0);case 8:return e=>a.getFloat64(e+t,!0);default:throw Error(`Unrecognized byte size for \"float\" numbers`)}let i=JSON.stringify(u[e]);throw Error(`Invalid dimension specification for ${e}: ${i}`)}let p=o.reduce((e,t)=>e+t.size,0);if(p===0||i.byteLength===0)throw Error(`Invalid buffer: pointSize=${p}, byteLength=${i.byteLength}`);let m=Math.floor(i.byteLength/p);if(m===0)throw Error(`Buffer too small: ${i.byteLength} bytes for point size ${p}`);let h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,ee,te,j=!1,M=/* @__PURE__ */ new ArrayBuffer(m*4*3),N=new Float32Array(M),re=[f(`X`),f(`Y`),f(`Z`)];if(u.Red&&u.Green&&u.Blue){h=/* @__PURE__ */ new ArrayBuffer(m*4),x=new Uint8Array(h),D=[f(`Red`),f(`Green`),f(`Blue`)];let e,t,n,r;for(let i=0;i<m&&!j;++i)r=i*p,e=D[0](r),t=D[1](r),n=D[2](r),(e>255||t>255||n>255)&&(j=!0)}u.Intensity&&(g=/* @__PURE__ */ new ArrayBuffer(m*4),S=new Float32Array(g),O=f(`Intensity`)),u.Classification&&(_=new ArrayBuffer(m),C=new Uint8Array(_),k=f(`Classification`)),u.ReturnNumber&&(v=new ArrayBuffer(m),w=new Uint8Array(v),A=f(`ReturnNumber`)),u.NumberOfReturns&&(y=new ArrayBuffer(m),T=new Uint8Array(y),ee=f(`NumberOfReturns`)),u.PointSourceId&&(b=/* @__PURE__ */ new ArrayBuffer(m*2),E=new Uint16Array(b),te=f(`PointSourceId`));let ie=[0,0,0],P={min:[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],max:[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]},ae,oe,se,ce,le,ue;for(let e=0;e<m;++e){let t=e*p;N&&(ae=re[0](t)*s[0]+c[0]-l[0],oe=re[1](t)*s[1]+c[1]-l[1],se=re[2](t)*s[2]+c[2]-l[2],ie[0]+=ae/m,ie[1]+=oe/m,ie[2]+=se/m,P.min[0]=Math.min(P.min[0],ae),P.min[1]=Math.min(P.min[1],oe),P.min[2]=Math.min(P.min[2],se),P.max[0]=Math.max(P.max[0],ae),P.max[1]=Math.max(P.max[1],oe),P.max[2]=Math.max(P.max[2],se),N[3*e+0]=ae,N[3*e+1]=oe,N[3*e+2]=se),x&&(ce=D[0](t),le=D[1](t),ue=D[2](t),j&&(ce/=256,le/=256,ue/=256),x[4*e+0]=ce,x[4*e+1]=le,x[4*e+2]=ue),S&&(S[e]=O(t)),C&&(C[e]=k(t)),w&&(w[e]=A(t)),T&&(T[e]=ee(t)),E&&(E[e]=te(t))}let de=/* @__PURE__ */ new ArrayBuffer(m*4),fe=new Uint32Array(de);for(let e=0;e<m;++e)fe[e]=e;let pe=(await ne(N,t,new B().fromArray(n),new wt(new B().fromArray(r.min),new B().fromArray(r.max)))).buffer;return{numPoints:m,tightBoundingBox:P,mean:ie,position:M,color:h,intensity:g,classification:_,returnNumber:v,numberOfReturns:y,pointSourceId:b,indices:de,objectId:pe}}\n/**\n* @license\n* Copyright 2019 Google LLC\n* SPDX-License-Identifier: Apache-2.0\n*/\nconst an=Symbol(`Comlink.proxy`),on=Symbol(`Comlink.endpoint`),sn=Symbol(`Comlink.releaseProxy`),cn=Symbol(`Comlink.finalizer`),ln=Symbol(`Comlink.thrown`),un=e=>typeof e==`object`&&!!e||typeof e==`function`,dn=/* @__PURE__ */ new Map([[`proxy`,{canHandle:e=>un(e)&&e[an],serialize(e){let{port1:t,port2:n}=new MessageChannel;return pn(e,t),[n,[n]]},deserialize(e){return e.start(),gn(e)}}],[`throw`,{canHandle:e=>un(e)&&ln in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(Error(e.value.message),e.value):e.value}}]]);function fn(e,t){for(let n of e)if(t===n||n===`*`||n instanceof RegExp&&n.test(t))return!0;return!1}function pn(e,t=globalThis,n=[`*`]){t.addEventListener(`message`,function r(i){if(!i||!i.data)return;if(!fn(n,i.origin)){console.warn(`Invalid origin '${i.origin}' for comlink proxy`);return}let{id:a,type:o,path:s}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(An),l;try{let t=s.slice(0,-1).reduce((e,t)=>e[t],e),n=s.reduce((e,t)=>e[t],e);switch(o){case`GET`:l=n;break;case`SET`:t[s.slice(-1)[0]]=An(i.data.value),l=!0;break;case`APPLY`:l=n.apply(t,c);break;case`CONSTRUCT`:l=On(new n(...c));break;case`ENDPOINT`:{let{port1:t,port2:n}=new MessageChannel;pn(e,n),l=Dn(t,[t])}break;case`RELEASE`:l=void 0;break;default:return}}catch(e){l={value:e,[ln]:0}}Promise.resolve(l).catch(e=>({value:e,[ln]:0})).then(n=>{let[i,s]=kn(n);t.postMessage(Object.assign(Object.assign({},i),{id:a}),s),o===`RELEASE`&&(t.removeEventListener(`message`,r),hn(t),cn in e&&typeof e[cn]==`function`&&e[cn]())}).catch(e=>{let[n,r]=kn({value:/* @__PURE__ */ TypeError(`Unserializable return value`),[ln]:0});t.postMessage(Object.assign(Object.assign({},n),{id:a}),r)})}),t.start&&t.start()}function mn(e){return e.constructor.name===`MessagePort`}function hn(e){mn(e)&&e.close()}function gn(e,t){let n=/* @__PURE__ */ new Map;return e.addEventListener(`message`,function(e){let{data:t}=e;if(!t||!t.id)return;let r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}}),Cn(e,n,[],t)}function _n(e){if(e)throw Error(`Proxy has been released and is not useable`)}function vn(e){return jn(e,/* @__PURE__ */ new Map,{type:`RELEASE`}).then(()=>{hn(e)})}const yn=/* @__PURE__ */ new WeakMap,bn=`FinalizationRegistry`in globalThis&&new FinalizationRegistry(e=>{let t=(yn.get(e)||0)-1;yn.set(e,t),t===0&&vn(e)});function xn(e,t){let n=(yn.get(t)||0)+1;yn.set(t,n),bn&&bn.register(e,t,e)}function Sn(e){bn&&bn.unregister(e)}function Cn(e,t,n=[],r=function(){}){let i=!1,a=new Proxy(r,{get(r,o){if(_n(i),o===sn)return()=>{Sn(a),vn(e),t.clear(),i=!0};if(o===`then`){if(n.length===0)return{then:()=>a};let r=jn(e,t,{type:`GET`,path:n.map(e=>e.toString())}).then(An);return r.then.bind(r)}return Cn(e,t,[...n,o])},set(r,a,o){_n(i);let[s,c]=kn(o);return jn(e,t,{type:`SET`,path:[...n,a].map(e=>e.toString()),value:s},c).then(An)},apply(r,a,o){_n(i);let s=n[n.length-1];if(s===on)return jn(e,t,{type:`ENDPOINT`}).then(An);if(s===`bind`)return Cn(e,t,n.slice(0,-1));let[c,l]=Tn(o);return jn(e,t,{type:`APPLY`,path:n.map(e=>e.toString()),argumentList:c},l).then(An)},construct(r,a){_n(i);let[o,s]=Tn(a);return jn(e,t,{type:`CONSTRUCT`,path:n.map(e=>e.toString()),argumentList:o},s).then(An)}});return xn(a,e),a}function wn(e){return Array.prototype.concat.apply([],e)}function Tn(e){let t=e.map(kn);return[t.map(e=>e[0]),wn(t.map(e=>e[1]))]}const En=/* @__PURE__ */ new WeakMap;function Dn(e,t){return En.set(e,t),e}function On(e){return Object.assign(e,{[an]:!0})}function kn(e){for(let[t,n]of dn)if(n.canHandle(e)){let[r,i]=n.serialize(e);return[{type:`HANDLER`,name:t,value:r},i]}return[{type:`RAW`,value:e},En.get(e)||[]]}function An(e){switch(e.type){case`HANDLER`:return dn.get(e.name).deserialize(e.value);case`RAW`:return e.value}}function jn(e,t,n,r){return new Promise(i=>{let a=Mn();t.set(a,i),e.start&&e.start(),e.postMessage(Object.assign({id:a},n),r)})}function Mn(){return[,,,,].fill(0).map(()=>Math.floor(Math.random()*(2**53-1)).toString(16)).join(`-`)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function Nn(e,t,n,r){let i=await rn(e,t,n,r);return Dn(i,[i.position,i.color,i.intensity,i.classification,i.returnNumber,i.numberOfReturns,i.pointSourceId,i.indices,i.objectId].filter(Pn))}function Pn(e){return e!==void 0}pn(Nn);\n//# sourceMappingURL=eptBinaryDecoder.worker-DjciQFFi.js.map", ym = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", vm], { type: "text/javascript;charset=utf-8" });
12037
+ var vm = "/*!\n* Copyright 2021 Cognite AS\n*/\nfunction e(e,t){throw Error(t||`Unexpected object: `+e)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nlet t=/* @__PURE__ */ function(e){return e[e.Box=0]=`Box`,e[e.Cylinder=1]=`Cylinder`,e[e.Composite=2]=`Composite`,e}({});function n(e,t,n,r){let i,a,o,s;try{i=b(e,O.__wbindgen_malloc),a=D,o=y(r,O.__wbindgen_malloc),s=D}catch(e){throw o&&O.__wbindgen_free(o,s*8,8),i&&(O.__externref_drop_slice(i,a),O.__wbindgen_free(i,a*4,4)),e}let c=O.assign_points(i,a,t,n,o,s);if(c[2])throw S(c[1]);return S(c[0])}function r(){return{__proto__:null,\"./pointclouds_wasm_bg.js\":{__proto__:null,__wbg_Error_208446807d0d1e30:function(e,t){return Error(m(e,t))},__wbg_Number_ff192a72a0dcdf6d:function(e){return Number(e)},__wbg_String_8564e559799eccda:function(e,t){let n=x(String(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32((e>>>0)+4,r,!0),l().setInt32((e>>>0)+0,n,!0)},__wbg___wbindgen_boolean_get_4f1baf9a00be3c74:function(e){let t=e,n=typeof t==`boolean`?t:void 0;return v(n)?16777215:+!!n},__wbg___wbindgen_debug_string_f249a2a76caa9a55:function(e,t){let n=x(a(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32((e>>>0)+4,r,!0),l().setInt32((e>>>0)+0,n,!0)},__wbg___wbindgen_in_3f58a9d3b3a7eed2:function(e,t){return e in t},__wbg___wbindgen_is_function_741ff2bb612836f5:function(e){return typeof e==`function`},__wbg___wbindgen_is_object_8b968c3ab8e96595:function(e){let t=e;return typeof t==`object`&&!!t},__wbg___wbindgen_is_undefined_be5b34249ff1fc15:function(e){return e===void 0},__wbg___wbindgen_jsval_loose_eq_b2f214e2e4b30e36:function(e,t){return e==t},__wbg___wbindgen_number_get_934b640d0889af78:function(e,t){let n=t,r=typeof n==`number`?n:void 0;l().setFloat64((e>>>0)+8,v(r)?0:r,!0),l().setInt32((e>>>0)+0,!v(r),!0)},__wbg___wbindgen_string_get_7ce8eee7fd327545:function(e,t){let n=t,r=typeof n==`string`?n:void 0;var i=v(r)?0:x(r,O.__wbindgen_malloc,O.__wbindgen_realloc),a=D;l().setInt32((e>>>0)+4,a,!0),l().setInt32((e>>>0)+0,i,!0)},__wbg___wbindgen_throw_4c88d8bf264fd984:function(e,t){throw Error(m(e,t))},__wbg_call_40b008ba32f73991:function(){return _(function(e,t){return e.call(t)},arguments)},__wbg_done_57e08d0be6e30c02:function(e){return e.done},__wbg_fill_8d596ab9ab8b9091:function(e,t,n,r){return e.fill(t,n>>>0,r>>>0)},__wbg_get_635eea311fa1a291:function(){return _(function(e,t){return Reflect.get(e,t)},arguments)},__wbg_get_unchecked_e6325ad374eff861:function(e,t){return e[t>>>0]},__wbg_get_with_ref_key_fc601247060b7204:function(e,t){return e[t]},__wbg_instanceof_ArrayBuffer_12cdaa4161423e6b:function(e){let t;try{t=e instanceof ArrayBuffer}catch{t=!1}return t},__wbg_instanceof_Uint8Array_d7aeb0dcb3108fea:function(e){let t;try{t=e instanceof Uint8Array}catch{t=!1}return t},__wbg_isArray_bcf1376d0d732d08:function(e){return Array.isArray(e)},__wbg_isSafeInteger_1a35ba4d31e71d38:function(e){return Number.isSafeInteger(e)},__wbg_iterator_e4c5e8f68ada7b58:function(){return Symbol.iterator},__wbg_length_186163212ffe79c3:function(e){return e.length},__wbg_length_6e9d2869242cabf3:function(e){return e.length},__wbg_length_b03a0fabb109b1e9:function(e){return e.length},__wbg_new_13de428334042d26:function(e){return new Uint8Array(e)},__wbg_new_with_length_e361f9c2ada6de6d:function(e){return new Uint16Array(e>>>0)},__wbg_next_178c1651c11432b3:function(e){return e.next},__wbg_next_af5ac6a08bb0a717:function(){return _(function(e){return e.next()},arguments)},__wbg_prototypesetcall_13162965d1fe7aa3:function(e,t,n){Uint8Array.prototype.set.call(s(e,t),n)},__wbg_prototypesetcall_22b1bb88c4ec5c5a:function(e,t,n){Float32Array.prototype.set.call(o(e,t),n)},__wbg_set_index_b4a9a55ccd437c2d:function(e,t,n){e[t>>>0]=n},__wbg_value_e0f328965e184931:function(e){return e.value},__wbindgen_generic_0000000000000001:function(e,t){return m(e,t)},__wbindgen_init_externref_table:function(){let e=O.__wbindgen_externrefs;e.set(0,void 0),e.set(1024,void 0),e.set(1025,null),e.set(1026,!0),e.set(1027,!1)}}}}function i(e){let t=O.__externref_table_alloc();return O.__wbindgen_externrefs.set(t,e),t}function a(e){switch(typeof e){case`number`:case`boolean`:case`undefined`:return`${e}`;case`string`:return JSON.stringify(e);case`bigint`:return`${e}n`;case`symbol`:return e.description===void 0?`Symbol`:`Symbol(${e.description})`;case`function`:return typeof e.name==`string`&&e.name!==``?`Function(${e.name})`:`Function`;case`object`:{var t;if(e===null)return`null`;if(Array.isArray(e))return`[`+Array.from(e,a).join(`, `)+`]`;if(e instanceof Error)return`${e.name}: ${e.message}\\n${e.stack}`;let n=toString.call(e),r=(t=/\\[object ([^\\]]+)\\]/.exec(n))==null?void 0:t[1];if(r===void 0)return n;if(r===`Object`)try{return`Object(`+JSON.stringify(e)+`)`}catch{return`Object`}return r}}}function o(e,t){return e>>>=0,d().subarray(e/4,e/4+t)}function s(e,t){return e>>>=0,g().subarray(e/1,e/1+t)}let c=null;function l(){return(c===null||c.buffer.detached===!0||c.buffer.detached===void 0&&c.buffer!==O.memory.buffer)&&(c=new DataView(O.memory.buffer)),c}let u=null;function d(){return(u===null||u.byteLength===0)&&(u=new Float32Array(O.memory.buffer)),u}let f=null;function p(){return(f===null||f.byteLength===0)&&(f=new Float64Array(O.memory.buffer)),f}function m(e,t){return e>>>=0,T(g().subarray(e,e+t))}let h=null;function g(){return(h===null||h.byteLength===0)&&(h=new Uint8Array(O.memory.buffer)),h}function _(e,t){try{return e.apply(this,t)}catch(e){let t=i(e);O.__wbindgen_exn_store(t)}}function v(e){return e==null}function y(e,t){let n=t(e.length*8,8)>>>0;return p().set(e,n/8),D=e.length,n}function b(e,t){let n=t(e.length*4,4)>>>0;for(let t=0;t<e.length;t++){let r=i(e[t]);l().setUint32(n+4*t,r,!0)}return D=e.length,n}function x(e,t,n){if(n===void 0){let n=E.encode(e),r=t(n.length,1)>>>0;return g().subarray(r,r+n.length).set(n),D=n.length,r}let r=e.length,i=t(r,1)>>>0,a=g(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=g().subarray(i+o,i+r),a=E.encodeInto(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return D=o,i}function S(e){let t=O.__wbindgen_externrefs.get(e);return O.__externref_table_dealloc(e),t}let C=new TextDecoder(`utf-8`,{ignoreBOM:!0});C.decode();let w=0;function T(e){return w+=e.length,w>=2146435072&&(C=new TextDecoder(`utf-8`,{ignoreBOM:!0}),C.decode(),w=e.length),C.decode(e)}const E=new TextEncoder;`encodeInto`in E||(E.encodeInto=function(e,t){let n=E.encode(e);return t.set(n),{read:e.length,written:n.length}});let D=0,O;function k(e,t){return O=e.exports,c=null,u=null,f=null,h=null,O.__wbindgen_start(),O}async function A(e,t){if(typeof Response==`function`&&e instanceof Response){if(!e.ok)throw Error(`failed to fetch Wasm: ${e.status} ${e.statusText} fetching '${e.url}'`);if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(n(e.type)&&e.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\",t);else throw t}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}function n(e){switch(e){case`basic`:case`cors`:case`default`:return!0}return!1}}let j;async function ee(e){return O===void 0?(j===void 0&&(j=M(e),j.catch(()=>{j=void 0})),j):O}async function M(e){e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(`data:application/wasm;base64,AGFzbQEAAAABlwIoYAJ/fwF/YAN/f38Bf2ACf38AYAF/AX9gAX8AYAN/f38AYAFvAX9gAW8Bb2ACf28AYAAAYAR/f39/AX9gBX9/f39/AGACb28Bb2AEf39/fwBgAn9/AW9gAm9vAX9gA39/bwBgBn9/f39/fwF/YAZ/f39/f38AYAV/f39/fwF/YAFvAXxgAX8Bb2AEb39/fwFvYANvf38AYAABb2ACb38Bb2AJf39/f39/fn5+AGAAAX9gA39+fgBgBn9/f3x/fwBgBn9/f35/fwBgBn9/f31/fwBgBn9/b29/fwN/f39gBX9/fX9/AX9gBX9/fn9/AX9gBX9/fH9/AX9gBX9/fX9/AGAFf39+f38AYAV/f3x/fwBgAAN/f38CoBIlGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx5fX3diZ19pc0FycmF5X2JjZjEzNzZkMGQ3MzJkMDgABhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoX2IwM2EwZmFiYjEwOWIxZTkABhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMbX193YmdfbmV4dF9hZjVhYzZhMDhiYjBhNzE3AAcYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2RvbmVfNTdlMDhkMGJlNmUzMGMwMgAGGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxxfX3diZ192YWx1ZV9lMGYzMjg5NjVlMTg0OTMxAAcYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzLF9fd2JnX19fd2JpbmRnZW5fbnVtYmVyX2dldF85MzRiNjQwZDA4ODlhZjc4AAgYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHF9fd2JnX0Vycm9yXzIwODQ0NjgwN2QwZDFlMzAADhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMrX193YmdfX193YmluZGdlbl9pc19vYmplY3RfOGI5NjhjM2FiOGU5NjU5NQAGGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcydfX3diZ19nZXRfd2l0aF9yZWZfa2V5X2ZjNjAxMjQ3MDYwYjcyMDQADBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMuX193YmdfX193YmluZGdlbl9pc191bmRlZmluZWRfYmU1YjM0MjQ5ZmYxZmMxNQAGGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcyRfX3diZ19fX3diaW5kZ2VuX2luXzNmNThhOWQzYjNhN2VlZDIADxguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMwX193YmdfX193YmluZGdlbl9qc3ZhbF9sb29zZV9lcV9iMmYyMTRlMmU0YjMwZTM2AA8YLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJF9fd2JnX2lzU2FmZUludGVnZXJfMWEzNWJhNGQzMWU3MWQzOAAGGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx1fX3diZ19OdW1iZXJfZmYxOTJhNzJhMGRjZGY2ZAAUGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx1fX3diZ19sZW5ndGhfNmU5ZDI4NjkyNDJjYWJmMwAGGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcydfX3diZ19wcm90b3R5cGVzZXRjYWxsXzIyYjFiYjg4YzRlYzVjNWEAEBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMmX193YmdfbmV3X3dpdGhfbGVuZ3RoX2UzNjFmOWMyYWRhNmRlNmQAFRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMbX193YmdfZmlsbF84ZDU5NmFiOWFiOGI5MDkxABYYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzIF9fd2JnX3NldF9pbmRleF9iNGE5YTU1Y2NkNDM3YzJkABcYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JnX2l0ZXJhdG9yX2U0YzVlOGY2OGFkYTdiNTgAGBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMaX193YmdfZ2V0XzYzNWVlYTMxMWZhMWEyOTEADBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfX193YmluZGdlbl9pc19mdW5jdGlvbl83NDFmZjJiYjYxMjgzNmY1AAYYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2NhbGxfNDBiMDA4YmEzMmY3Mzk5MQAMGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxtfX3diZ19uZXh0XzE3OGMxNjUxYzExNDMyYjMABxguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoXzE4NjE2MzIxMmZmZTc5YzMABhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMnX193YmdfcHJvdG90eXBlc2V0Y2FsbF8xMzE2Mjk2NWQxZmU3YWEzABAYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJF9fd2JnX2dldF91bmNoZWNrZWRfZTYzMjVhZDM3NGVmZjg2MQAZGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy1fX3diZ19fX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0XzRmMWJhZjlhMDBiZTNjNzQABhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfX193YmluZGdlbl9zdHJpbmdfZ2V0XzdjZThlZWU3ZmQzMjc1NDUACBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfaW5zdGFuY2VvZl9VaW50OEFycmF5X2Q3YWViMGRjYjMxMDhmZWEABhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfaW5zdGFuY2VvZl9BcnJheUJ1ZmZlcl8xMmNkYWE0MTYxNDIzZTZiAAYYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzGl9fd2JnX25ld18xM2RlNDI4MzM0MDQyZDI2AAcYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX1N0cmluZ184NTY0ZTU1OTc5OWVjY2RhAAgYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfNGM4OGQ4YmYyNjRmZDk4NAACGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy5fX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ19mMjQ5YTJhNzZjYWE5YTU1AAgYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMjX193YmluZGdlbl9nZW5lcmljXzAwMDAwMDAwMDAwMDAwMDEADgOiAaABBQMNAQICBAIKAAIFAAAFAAARCgEBAAIAAQIFAhoCEgACDQAbAAIAAAAABAIAAAAEAQACAgQAAgALAAUFBQIcCwIE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QZDMwAAgAUEPakF4cSIAQQhrIgM2AgBBiMzAACACQShrIgcgASAAa2pBCGoiADYCACADIABBAXI2AgQgASAHakEoNgIEQZzMwABBgICAATYCACAEIAZBIGtBeHFBCGsiACAAIARBEGpJGyIDQRs2AgRB5MnAACkCACEJIANBEGpB7MnAACkCADcCACADQQhqIgAgCTcCAEHoycAAIAI2AgBB5MnAACABNgIAQezJwAAgADYCAEHwycAAQQA2AgAgA0EcaiEAA0AgAEEHNgIAIABBBGoiACAGSQ0ACyADIARGDQYgAyADKAIEQX5xNgIEIAQgAyAEayIAQQFyNgIEIAMgADYCACAAQYACTwRAIAQgABBFDAcLAkBB/MvAACgCACIBQQEgAEEDdnQiAnFFBEBB/MvAACABIAJyNgIAIABB+AFxQfTJwABqIgAhAgwBCyAAQfgBcSIAQfTJwABqIQIgAEH8ycAAaigCACEACyACIAQ2AgggACAENgIMIAQgAjYCDCAEIAA2AggMBgsgACACIAZqNgIEQZDMwABBkMzAACgCACIAQQ9qQXhxIgFBCGsiBDYCAEGIzMAAQYjMwAAoAgAgAmoiAiAAIAFrakEIaiIBNgIAIAQgAUEBcjYCBCAAIAJqQSg2AgRBnMzAAEGAgIABNgIADAULQZDMwAAgADYCAEGIzMAAQYjMwAAoAgAgA2oiATYCACAAIAFBAXI2AgQMAgtBjMzAACAANgIAQYTMwABBhMzAACgCACADaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgAMAQtBoMzAACABNgIADAELIARBCGoPC0HoycAAIAI2AgBB5MnAACABNgIAQYDKwABB9MnAADYCAEGIysAAQfzJwAA2AgBB/MnAAEH0ycAANgIAQZDKwABBhMrAADYCAEGEysAAQfzJwAA2AgBBmMrAAEGMysAANgIAQYzKwABBhMrAADYCAEGgysAAQZTKwAA2AgBBlMrAAEGMysAANgIAQajKwABBnMrAADYCAEGcysAAQZTKwAA2AgBBsMrAAEGkysAANgIAQaTKwABBnMrAADYCAEG4ysAAQazKwAA2AgBBrMrAAEGkysAANgIAQaTMwABBrMzAACgCACIAQX8gABs2AgBB8MnAAEEANgIAQcDKwABBtMrAADYCAEG0ysAAQazKwAA2AgBB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IgAhAgwBCyAAQfgBcSIAQfTJwABqIQIgAEH8ycAAaigCACEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0GMzMAAIAE2AgBBhMzAAEGEzMAAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LQYjIwAAQrgEAC0EAIQFB7MnAACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0GkzMAAQazMwAAoAgAiACABIAAgAUsbQX8gABs2AgAgAiAETw0BQZzMwABBfzYCAA8LIAFCADcCECABIAI2AhwgAkECdEHkyMAAaiEDAkBBASACdCIEQYDMwAAoAgBxRQRAIAMgATYCACABIAM2AhggASABNgIMIAEgATYCCEGAzMAAQYDMwAAoAgAgBHI2AgAMAQsCQAJAIAAgAygCACIDKAIEQXhxRgRAIAMhAgwBCyAAQRkgAkEBdmtBACACQR9HG3QhBANAIAMgBEEddkEEcWoiBSgCECICRQ0CIARBAXQhBCACIQMgAigCBEF4cSAARw0ACwsgAigCCCIAIAE2AgwgAiABNgIIIAFBADYCGCABIAI2AgwgASAANgIIDAELIAVBEGogATYCACABIAM2AhggASABNgIMIAEgATYCCAtBACEBQaTMwABBpMzAACgCAEEBayIANgIAIABFDQELDwtB7MnAACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0GkzMAAQazMwAAoAgAiACABIAAgAUsbQX8gABs2AgALyAgDBX8BfgN8IwBB4ABrIgIkACACIAE2AhQCQAJAAkACQAJAAkACQAJAAkAgARC6AQRAIAEQuwEhAyACQQA2AiQgAiADNgIgIAJBADYCHCACIAJBFGo2AhggAkEoaiACQRhqEFggAikDKCIHQgJRBEAgACACKAIwNgIEIABBATYCAAwKCyAHQgFSDQEgAisDMCEIIAJBOGogAkEYahBYIAIpAzgiB0ICUQRAIAAgAigCQDYCBCAAQQE2AgAMCgsCfwJAAkACQCAHQgFRBEAgAisDQCEJIAJByABqIAJBGGoQWCACKQNIIgdCAlYNAiAHp0EBaw4CAgEDC0EBIAJB3wBqQfzAwAAQbCEDIABBATYCACAAIAM2AgQMDQsgAigCUAwCCyAAIAIrA1A5AxggACAJOQMQIAAgCDkD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DQEgBCACQQFqIgJHDQALCyACQQFxDQULQQAhBUEGQQAgAUGA/ANPGyICIAJBA2oiAiABIAJBAnQoAsytQEH///8AcUkbIgIgAkEBaiICIAEgAkECdCgCzK1AQf///wBxSRsiAiACQQFqIgIgASACQQJ0KALMrUBB////AHFJGyICQQJ0KALMrUBBC3QiAyABQQt0IgRGIAMgBElqIAJqIgRBAnQiAkHMrcAAaiEHIAIoAsytQEEVdiECQSMhAwJAIARBCk0EQCAHKAIEQRV2IQMgBEUNAQsgB0EEaygCAEH///8AcSEFCwJAIAMgAkF/c2pFDQAgASAFayEFIANBAWshBEEAIQMDQCADIAJB+aTAAGotAABqIgMgBUsNASAEIAJBAWoiAkcNAAsLIAJBAXENBEEAIQVBBUEAIAFBvaEETxsiAiACQQNqIgIgASACQQJ0KAL8rUBB////AHFJGyICIAJBAWoiAiABIAJBAnQoAvytQEH///8AcUkbIgIgAkEBaiICIAEgAkECdCgC/K1AQf///wBxSRsiAkECdCgC/K1AQQt0IgMgAUELdCIERiADIARJaiACaiIEQQJ0IgJB/K3AAGohByACKAL8rUBBFXYhAkErIQMCQCAEQQlNBEAgBygCBEEVdiEDIARFDQELIAdBBGsoAgBB////AHEhBQsCQCADIAJBf3NqRQ0AIAEgBWshBSADQQFrIQRBACEDA0AgAyACQZylwABqLQAAaiIDIAVLDQEgBCACQQFqIgJHDQALCyACQQFxRQ0CDAQLIABCADcBAiAAQdzEADsBAAtBACECQQIMAwsCf0EBIQICQAJAIAFB+AZJDQAgAUH+/w9JDQEgAUGBgDhGIAFBoIA4a0HgAElyIAFBgII4a0HwAUkgAUGAgDxrQf7/A0lycg0AIAFBgIBAakH+/wNJIQILIAIMAQtBACEFQRtBACABQfzlBk8bIgIgAkENaiICIAEgAkECdCgC8KpAQf///wBxSRsiAiACQQdqIgIgASACQQJ0KALwqkBB////AHFJGyICIAJBA2oiAiABIAJBAnQoAvCqQEH///8AcUkbIgIgAkECaiICIAEgAkECdCgC8KpAQf///wBxSRsiAiACQQFqIgIgASACQQJ0KALwqkBB////AHFJGyICQQJ0KALwqkBBC3QiAyABQQt0IgRGIAMg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QRBqEE0gA0EgaiQACwMAAAtdAQJ/AkAgAEEEaygCACICQXhxIgNBBEEIIAJBA3EiAhsgAWpPBEAgAkEAIAMgAUEnaksbDQEgABArDwtBiMfAAEEuQbjHwAAQlQEAC0HIx8AAQS5B+MfAABCVAQALAwAACwMAAAsDAAALAwAAC2YBAX8CQAJAAkACQAJAIAAtAAxBAWsOAwEDAQALIAAoAgBB/////wdPDQEgACgCBEUNACAAQQhrIgEgASgCAEEBaiIBNgIAIAFFDQMgAEEBOgAMAAsPCxCDAQALIABBAzoADA8LAAtqAQF/AkAgAEGECE8EQCAA0G8mAUHwzMAAKAIADQEgAEGAzcAAKAIAIgFJDQEgACABayIAQfjMwAAoAgBPDQFB/MzAACgCACEBQfzMwAAgADYCAEG0zMAAKAIAIABBAnRqIAE2AgALDwsAC1QBAX8CQAJAIAAoAgAgACgCCCIDayACSQRAIAAgAyACEGAgACgCCCEDDAELIAJFDQELIAJFDQAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAtOAgF/AX4jAEEgayIDJAAgAyABNgIMIAMgADYCCCADQoCAgIAgIgQgA0EIaq2ENwMYIAMgBCADQQxqrYQ3AxBB54DAACADQRBqIAIQfQALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIABBAWohACABQQFqIQEgAkEBayICDQEMAgsLIAQgBWshAwsgAwtCAAJAIAFpQQFHIABBgICAgHggAWtLcg0AAkAgAEUNACABQQlPBEAgASAAEDwiAQ0BAAsgABAmIgFFDQELIAEPCwALPgEBfyMAQRBrIgIkACACIAE2AgQgAiAANgIAIAIgAq1CgICAgNAAhDcDCEGOkMAAIAJBCGoQTSACQRBqJAALPgEBfyMAQRBrIgIkACACIAE2AgQgAiAANgIAIAIgAq1CgICAgNAAhDcDCEH6j8AAIAJBCGoQTSACQRBqJAAL5GUDIX8VfgF8IAEoAggiA0GAgIABcSECIAArAwAhOAJAAkACQAJAIANBgICAgAFxRQRAAn8gASENIAJBAEchASMAQZALayIEJABCASEvIDi9IiNC/////////weDIiZCgICAgICAgAiEICNCAYZC/v///////w+DICNCNIinQf8PcSIAGyIpQgGD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gMAAC8USAiEQAAkAAAALIRAACAAAABMhEAAMAAAAFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAABVieXRlIHJhbmdlIHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAACBpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzIMASIGJ1dCB0aGUgaW5kZXggaXMgwAARc3RhcnQgYnl0ZSBpbmRleCDAJyBpcyBvdXQgb2YgYm91bmRzIGZvciBzdHJpbmcgb2YgbGVuZ3RoIMAAD2VuZCBieXRlIGluZGV4IMAnIGlzIG91dCBvZiBib3VuZHMgZm9yIHN0cmluZyBvZiBsZW5ndGggwAAScmFuZ2Ugc3RhcnQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAQcmFuZ2UgZW5kIGluZGV4IMAiIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIMAAB3N0cmluZyDAAA9pbnZhbGlkIGxlbmd0aCDACywgZXhwZWN0ZWQgwAAPaW52YWxpZCB2YWx1ZTogwAssIGV4cGVjdGVkIMAADmludmFsaWQgdHlwZTogwAssIGV4cGVjdGVkIMAALEdvdCBlcnJvciB3aGlsZSBkZXNlcmlhbGl6aW5nIGJvdW5kaW5nIGJveDogwAAQYXNzZXJ0aW9uIGBsZWZ0IMAXIHJpZ2h0YCBmYWlsZWQKICBsZWZ0OiDACQogcmlnaHQ6IMAAJUdvdCBlcnJvciB3aGlsZSBkZXNlcmlhbGl6aW5nIHNoYXBlOiDAAMACOiDAAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTcuMS9zcmMvcmF3LnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9mbHQyZGVjL3N0cmF0ZWd5L2dyaXN1LnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZGl5X2Zsb2F0LnJzAHBhY2thZ2VzL3BvaW50Y2xvdWRzL3dhc20vc3JjL3BhcnNlX2lucHV0cy5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvcndsb2NrL25vX3RocmVhZHMucnMAL3J1c3RjLzU4Y2Y4ZjljMzViMzU1MTk5NzI3NjI3ZDA3YWUzNGE0ZTI4NDZkNjcvbGlicmFyeS9jb3JlL3NyYy9udW0vaW1wL2ZsdDJkZWMvc3RyYXRlZ3kvZHJhZ29uLnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9iaWdudW0ucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy4xMDcvc3JjL2Z1dHVyZXMvanNwaS5ycwBwYWNrYWdlcy9wb2ludGNsb3Vkcy93YXNtL3NyYy9wb2ludF9vY3RyZWUvb2N0cmVlX25vZGUucnMAL3J1c3RjLzU4Y2Y4ZjljMzViMzU1MTk5NzI3NjI3ZDA3YWUzNGE0ZTI4NDZkNjcvbGlicmFyeS9jb3JlL3NyYy9mbXQvbW9kLnJzAC9ydXN0Yy81OGNmOGY5YzM1YjM1NTE5OTcyNzYyN2QwN2FlMzRhNGUyODQ2ZDY3L2xpYnJhcnkvY29yZS9zcmMvc3RyL21vZC5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvNThjZjhmOWMzNWIzNTUxOTk3Mjc2MjdkMDdhZTM0YTRlMjg0NmQ2Ny9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTQvc3JjL2RsbWFsbG9jLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2pzLXN5cy0wLjMuMTA3L3NyYy9saWIucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvc2VyZGUtd2FzbS1iaW5kZ2VuLTAuNi41L3NyYy9saWIucnMAEGZsb2F0aW5nIHBvaW50IGDAAWAAC2NoYXJhY3RlciBgwAFgAAlpbnRlZ2VyIGDAAWAACWJvb2xlYW4gYMABYAAPbWlzc2luZyBmaWVsZCBgwAFgABFkdXBsaWNhdGUgZmllbGQgYMABYAARc3RhcnQgYnl0ZSBpbmRleCDAJiBpcyBub3QgYSBjaGFyIGJvdW5kYXJ5OyBpdCBpcyBpbnNpZGUgwAggKGJ5dGVzIMALIG9mIHN0cmluZykAD2VuZCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAISnNWYWx1ZSjAASkAAB8hEAADAAAAIiEQAAMAAABhbiBhcnJheSBvZiBsZW5ndGggM2FuIGFycmF5IG9mIGxlbmd0aCAxNmNhcGFjaXR5IG92ZXJmbG93AAAjBhAAUAAAABwAAAAFAAAAQQAAAAwAAAAEAAAAQgAAAEMAAABEAEHQksAAC8QgAQAAAEUAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAACgMQAEgAAACRAgAADgAAAEVycm9yAAIGBAcBAQEUAQABJgIyAgMBNwgbBAYLAAE8AmUOOwIxAg8BHAIBAQsFIgXtAQgCAgIWAQcBAQMEAgkCAgIECAEEAgEFAhkCAwEGBAICFgEHAQIBAgECAgEBBQQCAgMDAQcEAQEHEQoDAQkBAwEWAQcBAgEFAgoBAwEDAgEPBAIMBwcBAwEIAgICFgEHAQIBBQIJAgICAwcDBAIBBQISCgIBBgMDAQQDAgEBAQIDAgMDAwwEBQMDAQQCAQYBDhUFDQEDARcBEAIJAQMBBAcCAQMBAgIEAgoHFgEDARcBCgEFAgkBAwEEBwIFAwEEAgoBAwwNAQMBMwEDAQYEEAIaAQMBEgMYAQkBAQIHAwEEBgEBAQgGCgIDDDoEHSUCAQEBBQEYAQEBFwIFAQEBBwEKAgQgSAEkBCcBJAEPAQ0lxgEBBQECAAEEAgcBAQEEAikBBAIhAQQCBwEBAQQCDwE5AQQCQwIgAxoGVgIGAgADWQcWCRgJFAwNAQMBAgxeAgoGCgYaBlkHKwVGCh8BDAQMBAEDKgIFCywEGgYLAz4CQQEdAgsGCgYOAi4CDBRNAaYIPAMPAz4FKwILCCsFAAIGAiYCBgIIAQEBAQEBAR8CNQEPAQ4CBgETAgMBCQFlAQwCGwENAyIOIQ+MBAAWCxUAAgAFLQEBBQECOAcCDhgJBwEHAQcBBwEHAQcBBwEHAX4iGgFZDNYaUAFWAmcFKwFeAVYJMAEAAzcJABS4CN0UPAMKBjgIRggMBnQLHgNOAQsEIQE3CQ4CCgJnGBwKBgIGAgYJBwEHATwEfgIKBgAMFwQxBAACaiYHDAUFGgEFAQEBAgECAQAgKgYzARMBBAQFAYcCAQG+AwYCBgIGAgMDBwEHCgUCDAEaARMBAgEPAg4iewUDBC0DWAENAwEvLoIdAzEPHAQkCR4FKwUeASUEDiqeAgoGJAQkBCgINAsMAQ8BBwECAQsBDwEHAQIDNAwACRYKCBgGASoBCUUGAgEBLAECAwECFwFICAkwEwECBSEDGwUbJjgEFAIyAQIFCAEDAR0CAwQKBwkHQCAnBAwJNgMdAhsFGgcEDAdQSTczDTMHLggKBiYDHQgC0B8BKgEDAgIQBggJIS4IKhYaJhwUFwlOBCQJRAoBAhkHCgY1ARIIJwlgARQLEgEvPgcBAQEEAQ8BCwY7BQoGBAEIAgICFgEHAQIBBQEKAgICAwIBBgEFBwIHAwULCgEBAgEBJgEKAQECAQEEAQoBAggCHVwBBR5ICAqmNgImIkULCgYNEzoGCgYUHBsCDwQXuTxkUwwIAgECCAECAR4BAgIMCQpGCAIuAgsbSAhTDUkHClYIWCIOCgYJAS0BDgodAyACFgEOSQcBAgEsAwEBAgEJCAoGBgECASUBAgEGBwoGLAQK9hkHEQEpAx1VAQ8yDQBmbwEFC8QAYw0ACgAFAAA6AAAHHwEKBFEBCgYe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AACIAAAACAAAAE8AAABQAAAAUQAAAFVucmVjb2duaXplZCBnZW9tZXRyeSB0eXBlIGZvdW5kIHdoaWxlIHBhcnNpbmcAAKkDEAAtAAAAMQAAABsAAACpAxAALQAAADIAAAAbAAAAqQMQAC0AAAAzAAAAGwAAAHN0cnVjdCBJbnB1dEN5bGluZGVyc3RydWN0IElucHV0U2hhcGVzdHJ1Y3QgSW5wdXRCb3VuZGluZ0JveHN0cnVjdCBJbnB1dE9yaWVudGVkQm94AEH0wMAACwUBAAAAUgBBhMHAAAsFAQAAAFMAQZTBwAALBQEAAABUAEGkwcAACwUBAAAAVQBBtMHAAAsFAQAAAFYAQcTBwAALBQEAAABXAEHUwcAACwUBAAAAWABB5MHAAAt/AQAAAFkAAABjZW50ZXJfYWNlbnRlcl9icmFkaXVzb2JqZWN0X2lkY3lsaW5kZXJvcmllbnRlZF9ib3htaW5tYXhpbnZfaW5zdGFuY2VfbWF0cml4UQUQADkAAACEAAAAHQAAAFEFEAA5AAAAigAAABoAAAACAgICAgICAgICAgBBgMPAAAsIAgIAAAAAAAIAQbfDwAALAQIAQd3DwAALAQEAQfjDwAALAQEAQdjEwAALowFieXRlIGFycmF5dW5pdCB2YWx1ZU9wdGlvbiB2YWx1ZW5ld3R5cGUgc3RydWN0c2VxdWVuY2VtYXBlbnVtdW5pdCB2YXJpYW50bmV3dHlwZSB2YXJpYW50dHVwbGUgdmFyaWFudHN0cnVjdCB2YXJpYW50ZjY0dTE2AAAAAAAAAAgAAAAEAAAAWgAAAFsAAABcAAAALjAAAP//////////8CIQAEGIxsAAC9kCUwcQAGUAAAA1AAAADgAAAEEAAAAMAAAABAAAAF0AAABeAAAAXwAAAAAAAAAIAAAABAAAAGAAAABhAAAAYgAAAGMAAABkAAAAEAAAAAQAAABlAAAAZgAAAGcAAABoAAAAXPbpX9wC9rnxwXBs8mHBJDs3TUqCEEUJw6Vh0T8gOo9hc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAADMBhAAKgAAAOkEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAzAYQACoAAADvBAAADQAAAMwGEAAqAAAATQUAAB4AAAByd2xvY2sgb3ZlcmZsb3dlZCByZWFkIGxvY2tz1wMQAF0AAAAYAAAALAAAAAAAAAAIAAAABAAAAGkAAABBAAAADAAAAAQAAABqAEGqzMAACwsBAP8PAABrAAAABAB8CXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS45OS4xICg1OGNmOGY5YzMgMjAyNi0xMC0xMykGd2FscnVzBjAuMjcuMwx3YXNtLWJpbmRnZW4TMC4yLjEzMCAoYzkzYjhhZTg0KQCUAQ90YXJnZXRfZmVhdHVyZXMIKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVlKw9idWxrLW1lbW9yeS1vcHQrFmNhbGwtaW5kaXJlY3Qtb3Zlcmxvbmc=`,``+import.meta.url));let t=r();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:n,module:i}=await A(await e,t);return k(n,i)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function te(e,t,r,i){return ee().then(()=>n(e,t,r,new Float64Array(i)))}\n/*!\n* Copyright 2022 Cognite AS\n*/\nfunction N(n){switch(n.shape.shapeType){case t.Cylinder:{let e=n.shape;return{object_id:n.objectId,cylinder:{center_a:e.centerA,center_b:e.centerB,radius:e.radius}}}case t.Box:{let e=n.shape;return{object_id:n.objectId,oriented_box:{inv_instance_matrix:e.invMatrix.data}}}case t.Composite:throw Error(`Cannot assign points to objects - encountered unexpected composite object`);default:e(n.shape.shapeType)}}async function ne(e,t,n,r){let i=t.map(e=>N(e));try{return await te(i,e,{min:r.min.toArray(),max:r.max.toArray()},n.toArray())}catch(e){return Promise.reject(Error(e))}}var re,ie,P,ae,oe,se;let ce,le,ue\n/**\n* @license\n* Copyright 2010-2026 Three.js Authors\n* SPDX-License-Identifier: MIT\n*/\n;const de=1e3,fe=1001,pe=1002,me=2300,he=2301,ge=2302,_e=2303,ve=2400,ye=2401,be=2402,F=`srgb`,xe=`srgb-linear`,Se=`linear`,Ce=2e3;function we(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Te(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}const Ee={};function De(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable \"THREE.Node.captureStackTrace\" to capture stack traces.`}return e}function I(...e){e=De(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function L(...e){e=De(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function Oe(...e){let t=e.join(` `);t in Ee||(Ee[t]=!0,I(...e))}var ke=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n!==void 0&&n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}};const R=/* @__PURE__ */ `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`.split(`.`);function Ae(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(R[e&255]+R[e>>8&255]+R[e>>16&255]+R[e>>24&255]+`-`+R[t&255]+R[t>>8&255]+`-`+R[t>>16&15|64]+R[t>>24&255]+`-`+R[n&63|128]+R[n>>8&255]+`-`+R[n>>16&255]+R[n>>24&255]+R[r&255]+R[r>>8&255]+R[r>>16&255]+R[r>>24&255]).toLowerCase()}function z(e,t,n){return Math.max(t,Math.min(n,e))}function je(e,t){return(e%t+t)%t}function Me(e,t,n){return(1-n)*e+n*t}ce=Symbol.iterator;var Ne=class{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`THREE.Vector2: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`THREE.Vector2: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=z(this.x,e.x,t.x),this.y=z(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=z(this.x,e,t),this.y=z(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(z(n,e,t))}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(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.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(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(z(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[ce](){yield this.x,yield this.y}};re=Ne,re.prototype.isVector2=!0;var Pe=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:I(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(z(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),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(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._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 e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}};le=Symbol.iterator;var B=class{constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`THREE.Vector3: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`THREE.Vector3: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Ie.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Ie.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=z(this.x,e.x,t.x),this.y=z(this.y,e.y,t.y),this.z=z(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=z(this.x,e,t),this.y=z(this.y,e,t),this.z=z(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(z(n,e,t))}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(e){return this.x*e.x+this.y*e.y+this.z*e.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(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Fe.copy(this).projectOnVector(e),this.sub(Fe)}reflect(e){return this.sub(Fe.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(z(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[le](){yield this.x,yield this.y,yield this.z}};ie=B,ie.prototype.isVector3=!0;const Fe=/*@__PURE__*/ new B,Ie=/*@__PURE__*/ new Pe;var Le=class{constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return Oe(`Matrix3: .scale() is deprecated. Use .makeScale() instead.`),this.premultiply(Re.makeScale(e,t)),this}rotate(e){return Oe(`Matrix3: .rotate() is deprecated. Use .makeRotation() instead.`),this.premultiply(Re.makeRotation(-e)),this}translate(e,t){return Oe(`Matrix3: .translate() is deprecated. Use .makeTranslation() instead.`),this.premultiply(Re.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}};P=Le,P.prototype.isMatrix3=!0;const Re=/*@__PURE__*/ new Le,ze=/*@__PURE__*/ new Le().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Be=/*@__PURE__*/ new Le().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Ve(){let e={enabled:!0,workingColorSpace:xe,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n||(this.spaces[t].transfer===`srgb`&&(e.r=H(e.r),e.g=H(e.g),e.b=H(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=He(e.r),e.g=He(e.g),e.b=He(e.b))),e},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?Se:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Oe(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Oe(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[xe]:{primaries:t,whitePoint:r,transfer:Se,toXYZ:ze,fromXYZ:Be,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:F},outputColorSpaceConfig:{drawingBufferColorSpace:F}},[F]:{primaries:t,whitePoint:r,transfer:`srgb`,toXYZ:ze,fromXYZ:Be,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:F}}}),e}const V=/*@__PURE__*/ Ve();function H(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function He(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}let Ue;var We=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{Ue===void 0&&(Ue=Te(`canvas`)),Ue.width=e.width,Ue.height=e.height;let t=Ue.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=Ue}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Te(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=H(i[e]/255)*255;return n.putImageData(r,0,0),t}if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(H(t[e]/255)*255):t[e]=H(t[e]);return{data:t,width:e.width,height:e.height}}return I(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}};let Ge=0;var Ke=class{constructor(e=null){this.isTextureSource=!0,Object.defineProperty(this,\"id\",{value:Ge++}),this.uuid=Ae(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayWidth,t.displayHeight,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(qe(r[t].image)):e.push(qe(r[t]))}else e=qe(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function qe(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?We.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(I(`Texture: Unable to serialize Texture.`),{})}let Je=0;const Ye=/*@__PURE__*/ new B;var Xe=class e extends ke{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=fe,i=fe,a=1006,o=1008,s=1023,c=1009,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,\"id\",{value:Je++}),this.uuid=Ae(),this.name=``,this.source=new Ke(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new Ne(0,0),this.repeat=new Ne(1,1),this.center=new Ne(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Le,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Ye).x}get height(){return this.source.getSize(Ye).y}get depth(){return this.source.getSize(Ye).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){I(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];r===void 0?I(`Texture.setValues(): property '${t}' does not exist.`):r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case de:e.x-=Math.floor(e.x);break;case fe:e.x=e.x<0?0:1;break;case pe:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case de:e.y-=Math.floor(e.y);break;case fe:e.y=e.y<0?0:1;break;case pe:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Xe.DEFAULT_IMAGE=null,Xe.DEFAULT_MAPPING=300,Xe.DEFAULT_ANISOTROPY=1,ue=Symbol.iterator,ae=class{constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`THREE.Vector4: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`THREE.Vector4: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)<a&&Math.abs(u-m)<a&&Math.abs(p-h)<a){if(Math.abs(l+d)<o&&Math.abs(u+m)<o&&Math.abs(p+h)<o&&Math.abs(c+f+g-3)<o)return this.set(1,0,0,0),this;t=Math.PI;let e=(c+1)/2,s=(f+1)/2,_=(g+1)/2,v=(l+d)/4,y=(u+m)/4,b=(p+h)/4;return e>s&&e>_?e<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(e),r=v/n,i=y/n):s>_?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=b/r):_<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(_),n=y/i,r=b/i),this.set(n,r,i,t),this}let _=Math.sqrt((h-p)*(h-p)+(u-m)*(u-m)+(d-l)*(d-l));return Math.abs(_)<.001&&(_=1),this.x=(h-p)/_,this.y=(u-m)/_,this.z=(d-l)/_,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=z(this.x,e.x,t.x),this.y=z(this.y,e.y,t.y),this.z=z(this.z,e.z,t.z),this.w=z(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=z(this.x,e,t),this.y=z(this.y,e,t),this.z=z(this.z,e,t),this.w=z(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(z(n,e,t))}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(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.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(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[ue](){yield this.x,yield this.y,yield this.z,yield this.w}},ae.prototype.isVector4=!0;var Ze=class e{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,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 e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinantAffine()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinantAffine()===0)return this.identity();let t=this.elements,n=e.elements,r=1/Qe.setFromMatrixColumn(e,0).length(),i=1/Qe.setFromMatrixColumn(e,1).length(),a=1/Qe.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose($e,e,et)}lookAt(e,t,n){let r=this.elements;return W.subVectors(e,t),W.lengthSq()===0&&(W.z=1),W.normalize(),tt.crossVectors(n,W),tt.lengthSq()===0&&(Math.abs(n.z)===1?W.x+=1e-4:W.z+=1e-4,W.normalize(),tt.crossVectors(n,W)),tt.normalize(),nt.crossVectors(W,tt),r[0]=tt.x,r[4]=nt.x,r[8]=W.x,r[1]=tt.y,r[5]=nt.y,r[9]=W.y,r[2]=tt.z,r[6]=nt.z,r[10]=W.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],j=r[10],ee=r[14],M=r[3],te=r[7],N=r[11],ne=r[15];return i[0]=a*x+o*T+s*k+c*M,i[4]=a*S+o*E+s*A+c*te,i[8]=a*C+o*D+s*j+c*N,i[12]=a*w+o*O+s*ee+c*ne,i[1]=l*x+u*T+d*k+f*M,i[5]=l*S+u*E+d*A+f*te,i[9]=l*C+u*D+d*j+f*N,i[13]=l*w+u*O+d*ee+f*ne,i[2]=p*x+m*T+h*k+g*M,i[6]=p*S+m*E+h*A+g*te,i[10]=p*C+m*D+h*j+g*N,i[14]=p*w+m*O+h*ee+g*ne,i[3]=_*x+v*T+y*k+b*M,i[7]=_*S+v*E+y*A+b*te,i[11]=_*C+v*D+y*j+b*N,i[15]=_*w+v*O+y*ee+b*ne,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}determinantAffine(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[1],a=e[5],o=e[9],s=e[2],c=e[6],l=e[10];return t*(a*l-o*c)-n*(i*l-o*s)+r*(i*c-a*s)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,w=l*h-d*p,T=l*g-f*p,E=u*h-d*m,D=u*g-f*m,O=d*g-f*h,k=_*O-v*D+y*E+b*T-x*w+S*C;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let A=1/k;return e[0]=(o*O-s*D+c*E)*A,e[1]=(r*D-n*O-i*E)*A,e[2]=(m*S-h*x+g*b)*A,e[3]=(d*x-u*S-f*b)*A,e[4]=(s*T-a*O-c*w)*A,e[5]=(t*O-r*T+i*w)*A,e[6]=(h*y-p*S-g*v)*A,e[7]=(l*S-d*y+f*v)*A,e[8]=(a*D-o*T+c*C)*A,e[9]=(n*T-t*D-i*C)*A,e[10]=(p*x-m*y+g*_)*A,e[11]=(u*y-l*x-f*_)*A,e[12]=(o*w-a*E-s*C)*A,e[13]=(t*E-n*w+r*C)*A,e[14]=(m*v-p*b-h*_)*A,e[15]=(l*b-u*v+d*_)*A,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinantAffine();if(i===0)return n.set(1,1,1),t.identity(),this;let a=Qe.set(r[0],r[1],r[2]).length(),o=Qe.set(r[4],r[5],r[6]).length(),s=Qe.set(r[8],r[9],r[10]).length();i<0&&(a=-a),U.copy(this);let c=1/a,l=1/o,u=1/s;return U.elements[0]*=c,U.elements[1]*=c,U.elements[2]*=c,U.elements[4]*=l,U.elements[5]*=l,U.elements[6]*=l,U.elements[8]*=u,U.elements[9]*=u,U.elements[10]*=u,t.setFromRotationMatrix(U),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=Ce,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=Ce,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}};oe=Ze,oe.prototype.isMatrix4=!0;const Qe=/*@__PURE__*/ new B,U=/*@__PURE__*/ new Ze,$e=/*@__PURE__*/ new B(0,0,0),et=/*@__PURE__*/ new B(1,1,1),tt=/*@__PURE__*/ new B,nt=/*@__PURE__*/ new B,W=/*@__PURE__*/ new B,rt=/*@__PURE__*/ new Ze,it=/*@__PURE__*/ new Pe;var at=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(z(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-z(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(z(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-z(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(z(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-z(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:I(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return rt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(rt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return it.setFromEuler(this),this.setFromQuaternion(it,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};at.DEFAULT_ORDER=`XYZ`;var ot=class{constructor(){this.mask=1}set(e){this.mask=1<<e>>>0}enable(e){this.mask|=1<<e}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e}disable(e){this.mask&=~(1<<e)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return!!(this.mask&1<<e)}};let st=0;const ct=/*@__PURE__*/ new B,lt=/*@__PURE__*/ new Pe,G=/*@__PURE__*/ new Ze,ut=/*@__PURE__*/ new B,dt=/*@__PURE__*/ new B,ft=/*@__PURE__*/ new B,pt=/*@__PURE__*/ new Pe,mt=/*@__PURE__*/ new B(1,0,0),ht=/*@__PURE__*/ new B(0,1,0),gt=/*@__PURE__*/ new B(0,0,1),_t={type:`added`},vt={type:`removed`},yt={type:`childadded`,child:null},bt={type:`childremoved`,child:null};var xt=class e extends ke{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,\"id\",{value:st++}),this.uuid=Ae(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new B,n=new at,r=new Pe,i=new B(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Ze},normalMatrix:{value:new Le}}),this.matrix=new Ze,this.matrixWorld=new Ze,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new ot,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return lt.setFromAxisAngle(e,t),this.quaternion.multiply(lt),this}rotateOnWorldAxis(e,t){return lt.setFromAxisAngle(e,t),this.quaternion.premultiply(lt),this}rotateX(e){return this.rotateOnAxis(mt,e)}rotateY(e){return this.rotateOnAxis(ht,e)}rotateZ(e){return this.rotateOnAxis(gt,e)}translateOnAxis(e,t){return ct.copy(e).applyQuaternion(this.quaternion),this.position.add(ct.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(mt,e)}translateY(e){return this.translateOnAxis(ht,e)}translateZ(e){return this.translateOnAxis(gt,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(G.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?ut.copy(e):ut.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),dt.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?G.lookAt(dt,ut,this.up):G.lookAt(ut,dt,this.up),this.quaternion.setFromRotationMatrix(G),r&&(G.extractRotation(r.matrixWorld),lt.setFromRotationMatrix(G),this.quaternion.premultiply(lt.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(L(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(_t),yt.child=e,this.dispatchEvent(yt),yt.child=null):L(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(vt),bt.child=e,this.dispatchEvent(bt),bt.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),G.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),G.multiply(e.parent.matrixWorld)),e.applyMatrix4(G),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(_t),yt.child=e,this.dispatchEvent(yt),yt.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(dt,e,ft),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(dt,pt,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}intersectsFrustum(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t,n=!1){let r=this.parent;if(e===!0&&r!==null&&r.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||n)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,n=!0),t===!0){let e=this.children;for(let t=0,r=e.length;t<r;t++)e[t].updateWorldMatrix(!1,!0,n)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,r.name=this.name,r.castShadow=this.castShadow,r.receiveShadow=this.receiveShadow,r.visible=this.visible,r.frustumCulled=this.frustumCulled,r.renderOrder=this.renderOrder,r.static=this.static,r.matrixAutoUpdate=this.matrixAutoUpdate,Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0){if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material)}if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}dispose(){this.dispatchEvent({type:`dispose`})}};xt.DEFAULT_UP=/*@__PURE__*/ new B(0,1,0),xt.DEFAULT_MATRIX_AUTO_UPDATE=!0,xt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const St={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},K={h:0,s:0,l:0},Ct={h:0,s:0,l:0};function wt(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Tt=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=F){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,V.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=V.workingColorSpace){return this.r=e,this.g=t,this.b=n,V.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=V.workingColorSpace){if(e=je(e,1),t=z(t,0,1),n=z(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=wt(i,r,e+1/3),this.g=wt(i,r,e),this.b=wt(i,r,e-1/3)}return V.colorSpaceToWorking(this,r),this}setStyle(e,t=F){function n(t){t!==void 0&&parseFloat(t)<1&&I(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\\w+)\\(([^\\)]*)\\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:I(`Color: Unknown color model `+e)}}else if(r=/^\\#([A-Fa-f\\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);I(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=F){let n=St[e.toLowerCase()];return n===void 0?I(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=H(e.r),this.g=H(e.g),this.b=H(e.b),this}copyLinearToSRGB(e){return this.r=He(e.r),this.g=He(e.g),this.b=He(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=F){return V.workingToColorSpace(q.copy(this),e),Math.round(z(q.r*255,0,255))*65536+Math.round(z(q.g*255,0,255))*256+Math.round(z(q.b*255,0,255))}getHexString(e=F){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=V.workingColorSpace){V.workingToColorSpace(q.copy(this),t);let n=q.r,r=q.g,i=q.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=V.workingColorSpace){return V.workingToColorSpace(q.copy(this),t),e.r=q.r,e.g=q.g,e.b=q.b,e}getStyle(e=F){V.workingToColorSpace(q.copy(this),e);let t=q.r,n=q.g,r=q.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(K),this.setHSL(K.h+e,K.s+t,K.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(K),e.getHSL(Ct);let n=Me(K.h,Ct.h,t),r=Me(K.s,Ct.s,t),i=Me(K.l,Ct.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};const q=/*@__PURE__*/ new Tt;Tt.NAMES=St;var Et=class{constructor(e=new B(1/0,1/0,1/0),t=new B(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(Y.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(Y.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=Y.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,Y):Y.fromBufferAttribute(r,t),Y.applyMatrix4(e.matrixWorld),this.expandByPoint(Y);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),Dt.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),Dt.copy(e.boundingBox)),Dt.applyMatrix4(e.matrixWorld),this.union(Dt)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Y),Y.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Mt),Nt.subVectors(this.max,Mt),Ot.subVectors(e.a,Mt),kt.subVectors(e.b,Mt),At.subVectors(e.c,Mt),X.subVectors(kt,Ot),Z.subVectors(At,kt),jt.subVectors(Ot,At);let t=[0,-X.z,X.y,0,-Z.z,Z.y,0,-jt.z,jt.y,X.z,0,-X.x,Z.z,0,-Z.x,jt.z,0,-jt.x,-X.y,X.x,0,-Z.y,Z.x,0,-jt.y,jt.x,0];return!It(t,Ot,kt,At,Nt)||(t=[1,0,0,0,1,0,0,0,1],!It(t,Ot,kt,At,Nt))?!1:(Pt.crossVectors(X,Z),t=[Pt.x,Pt.y,Pt.z],It(t,Ot,kt,At,Nt))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Y).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Y).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(J[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),J[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),J[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),J[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),J[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),J[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),J[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),J[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(J)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}};const J=[/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B,/*@__PURE__*/ new B],Y=/*@__PURE__*/ new B,Dt=/*@__PURE__*/ new Et,Ot=/*@__PURE__*/ new B,kt=/*@__PURE__*/ new B,At=/*@__PURE__*/ new B,X=/*@__PURE__*/ new B,Z=/*@__PURE__*/ new B,jt=/*@__PURE__*/ new B,Mt=/*@__PURE__*/ new B,Nt=/*@__PURE__*/ new B,Pt=/*@__PURE__*/ new B,Ft=/*@__PURE__*/ new B;function It(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Ft.fromArray(e,a);let o=i.x*Math.abs(Ft.x)+i.y*Math.abs(Ft.y)+i.z*Math.abs(Ft.z),s=t.dot(Ft),c=n.dot(Ft),l=r.dot(Ft);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}function Lt(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function Rt(e){return e!==void 0&&e.inTangents!==void 0&&e.outTangents!==void 0}var zt=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e<r)){for(let a=n+2;;){if(r===void 0){if(e<i)break forward_scan;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(i=r,r=t[++n],e<r)break seek}a=t.length;break linear_scan}if(!(e>=i)){let o=t[1];e<o&&(n=2,i=o);for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(r=i,i=t[--n-1],e>=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n<a;){let r=n+a>>>1;e<t[r]?a=r:n=r+1}if(r=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(r===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,r)}return this.interpolate_(n,i,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r;for(let e=0;e!==r;++e)t[e]=n[i+e];return t}interpolate_(){throw Error(`THREE.Interpolant: Call to abstract method.`)}intervalChanged_(){}},Bt=class extends zt{constructor(e,t,n,r){super(e,t,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ve,endingEnd:ve}}intervalChanged_(e,t,n){let r=this.parameterPositions,i=e-2,a=e+1,o=r[i],s=r[a];if(o===void 0)switch(this.getSettings_().endingStart){case ye:i=e,o=2*t-n;break;case be:i=r.length-2,o=t+r[i]-r[i+1];break;default:i=e,o=n}if(s===void 0)switch(this.getSettings_().endingEnd){case ye:a=e,s=2*n-t;break;case be:a=1,s=n+r[1]-r[0];break;default:a=e-1,s=t}let c=(n-t)*.5,l=this.valueSize;this._weightPrev=c/(t-o),this._weightNext=c/(s-n),this._offsetPrev=i*l,this._offsetNext=a*l}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,f=this._weightNext,p=(n-t)/(r-t),m=p*p,h=m*p,g=-d*h+2*d*m-d*p,_=(1+d)*h+(-1.5-2*d)*m+(-.5+d)*p+1,v=(-1-f)*h+(1.5+f)*m+.5*p,y=f*h-f*m;for(let e=0;e!==o;++e)i[e]=g*a[l+e]+_*a[c+e]+v*a[s+e]+y*a[u+e];return i}},Vt=class extends zt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=(n-t)/(r-t),u=1-l;for(let e=0;e!==o;++e)i[e]=a[c+e]*u+a[s+e]*l;return i}},Ht=class extends zt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e){return this.copySampleValue_(e-1)}},Ut=class extends zt{interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this.inTangents,u=this.outTangents;if(!l||!u){let e=(n-t)/(r-t),l=1-e;for(let t=0;t!==o;++t)i[t]=a[c+t]*l+a[s+t]*e;return i}let d=o*2,f=e-1;for(let p=0;p!==o;++p){let o=a[c+p],m=a[s+p],h=f*d+p*2,g=u[h],_=u[h+1],v=e*d+p*2,y=l[v],b=l[v+1],x=Kt(n,t,g,y,r);i[p]=Wt(x,o,_,b,m)}return i}};function Wt(e,t,n,r,i){let a=1-e;return a*a*a*t+3*a*a*e*n+3*a*e*e*r+e*e*e*i}function Gt(e,t,n,r,i){let a=1-e;return 3*a*a*(n-t)+6*a*e*(r-n)+3*e*e*(i-r)}function Kt(e,t,n,r,i){let a=(e-t)/(i-t);for(let o=0;o<8;o++){let o=Wt(a,t,n,r,i)-e;if(Math.abs(o)<1e-10)break;let s=Gt(a,t,n,r,i);if(Math.abs(s)<1e-10)break;a=Math.max(0,Math.min(1,a-o/s))}return a}var Q=class{constructor(e,t,n,r){if(e===void 0)throw Error(`THREE.KeyframeTrack: track name is undefined`);if(t===void 0||t.length===0)throw Error(`THREE.KeyframeTrack: no keyframes in track named `+e);this.name=e,this.times=Lt(t,this.TimeBufferType),this.values=Lt(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:Lt(e.times,Array),values:Lt(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(n.interpolation=t),Rt(e.settings)&&(n.settings={inTangents:Lt(e.settings.inTangents,Array),outTangents:Lt(e.settings.outTangents,Array)})}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new Ht(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new Vt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new Bt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodBezier(e){let t=new Ut(this.times,this.values,this.getValueSize(),e);return this.settings&&(t.inTangents=this.settings.inTangents,t.outTangents=this.settings.outTangents),t}setInterpolation(e){let t;switch(e){case me:t=this.InterpolantFactoryMethodDiscrete;break;case he:t=this.InterpolantFactoryMethodLinear;break;case ge:t=this.InterpolantFactoryMethodSmooth;break;case _e:t=this.InterpolantFactoryMethodBezier}if(t===void 0){let t=`unsupported interpolation for `+this.ValueTypeName+` keyframe track named `+this.name;if(this.createInterpolant===void 0){if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t)}return I(`KeyframeTrack:`,t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return me;case this.InterpolantFactoryMethodLinear:return he;case this.InterpolantFactoryMethodSmooth:return ge;case this.InterpolantFactoryMethodBezier:return _e}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]*=e;Rt(this.settings)&&(qt(this.settings.inTangents,e),qt(this.settings.outTangents,e))}return this}trim(e,t){let n=this.times,r=n.length,i=0,a=r-1;for(;i!==r&&n[i]<e;)++i;for(;a!==-1&&n[a]>t;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(L(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(L(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){L(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){L(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&we(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){L(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===ge,i=e.length-1,a=1;for(let o=1;o<i;++o){let i=!1,s=e[o];if(s!==e[o+1]&&(o!==1||s!==e[0])){if(r)i=!0;else{let e=o*n,r=e-n,a=e+n;for(let o=0;o!==n;++o){let n=t[e+o];if(n!==t[r+o]||n!==t[a+o]){i=!0;break}}}}if(i){if(o!==a){e[a]=e[o];let r=o*n,i=a*n;for(let e=0;e!==n;++e)t[i+e]=t[r+e]}++a}}if(i>0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,Rt(this.settings)&&(r.settings={inTangents:this.settings.inTangents.slice(),outTangents:this.settings.outTangents.slice()}),r}};function qt(e,t){for(let n=0,r=e.length;n!==r;n+=2)e[n]*=t}Q.prototype.ValueTypeName=``,Q.prototype.TimeBufferType=Float32Array,Q.prototype.ValueBufferType=Float32Array,Q.prototype.DefaultInterpolation=he;var Jt=class extends Q{constructor(e,t,n){super(e,t,n)}};Jt.prototype.ValueTypeName=`bool`,Jt.prototype.ValueBufferType=Array,Jt.prototype.DefaultInterpolation=me,Jt.prototype.InterpolantFactoryMethodLinear=void 0,Jt.prototype.InterpolantFactoryMethodSmooth=void 0;var Yt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Yt.prototype.ValueTypeName=`color`;var Xt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Xt.prototype.ValueTypeName=`number`;var Zt=class extends zt{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Pe.slerpFlat(i,0,a,c-o,a,c,s);return i}},Qt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new Zt(this.times,this.values,this.getValueSize(),e)}};Qt.prototype.ValueTypeName=`quaternion`,Qt.prototype.InterpolantFactoryMethodSmooth=void 0;var $t=class extends Q{constructor(e,t,n){super(e,t,n)}};$t.prototype.ValueTypeName=`string`,$t.prototype.ValueBufferType=Array,$t.prototype.DefaultInterpolation=me,$t.prototype.InterpolantFactoryMethodLinear=void 0,$t.prototype.InterpolantFactoryMethodSmooth=void 0;var en=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};en.prototype.ValueTypeName=`vector`;const tn=/* @__PURE__ */ RegExp(`[\\\\[\\\\]\\\\.:\\\\/]`,`g`),nn=/* @__PURE__ */ RegExp(`^((?:[^\\\\[\\\\]\\\\.:\\\\/]+[\\\\/:])*)([^\\\\[\\\\]:\\\\/]+)?(?:\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?)?\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?$`),rn=[`material`,`materials`,`bones`,`map`];var an=class{constructor(e,t,n){let r=n||$.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},$=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\\s/g,`_`).replace(tn,``)}static parseTrackName(e){let t=nn.exec(e);if(t===null)throw Error(`THREE.PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);rn.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`THREE.PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r<e.length;r++){let i=e[r];if(i.name===t||i.uuid===t)return i;let a=n(i.children);if(a)return a}return null},r=n(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)e[t++]=n[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let t=this.node,n=this.parsedPath,r=n.objectName,i=n.propertyName,a=n.propertyIndex;if(t||(t=e.findNode(this.rootNode,n.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){I(`PropertyBinding: No target node found for track: `+this.path+`.`);return}if(r){let e=n.objectIndex;switch(r){case`materials`:if(!t.material){L(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.materials){L(`PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.`,this);return}t=t.material.materials;break;case`bones`:if(!t.skeleton){L(`PropertyBinding: Can not bind to bones as node does not have a skeleton.`,this);return}t=t.skeleton.bones;for(let n=0;n<t.length;n++)if(t[n].name===e){e=n;break}break;case`map`:if(`map`in t){t=t.map;break}if(!t.material){L(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.map){L(`PropertyBinding: Can not bind to material.map as node.material does not have a map.`,this);return}t=t.material.map;break;default:if(t[r]===void 0){L(`PropertyBinding: Can not bind to objectName of node undefined.`,this);return}t=t[r]}if(e!==void 0){if(t[e]===void 0){L(`PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.`,this,t);return}t=t[e]}}let o=t[i];if(o===void 0){let e=n.nodeName;L(`PropertyBinding: Trying to update property for track: `+e+`.`+i+` but it wasn't found.`,t);return}let s=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?s=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(s=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(a!==void 0){if(i===`morphTargetInfluences`){if(!t.geometry){L(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.`,this);return}if(!t.geometry.morphAttributes){L(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.`,this);return}t.morphTargetDictionary[a]!==void 0&&(a=t.morphTargetDictionary[a])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};$.Composite=an,$.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},$.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},$.prototype.GetterByBindingType=[$.prototype._getValue_direct,$.prototype._getValue_array,$.prototype._getValue_arrayElement,$.prototype._getValue_toArray],$.prototype.SetterByBindingTypeAndVersioning=[[$.prototype._setValue_direct,$.prototype._setValue_direct_setNeedsUpdate,$.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[$.prototype._setValue_array,$.prototype._setValue_array_setNeedsUpdate,$.prototype._setValue_array_setMatrixWorldNeedsUpdate],[$.prototype._setValue_arrayElement,$.prototype._setValue_arrayElement_setNeedsUpdate,$.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[$.prototype._setValue_fromArray,$.prototype._setValue_fromArray_setNeedsUpdate,$.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]],se=class{constructor(e,t,n,r){this.elements=[1,0,0,1],e!==void 0&&this.set(e,t,n,r)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let n=0;n<4;n++)this.elements[n]=e[n+t];return this}set(e,t,n,r){let i=this.elements;return i[0]=e,i[2]=t,i[1]=n,i[3]=r,this}},se.prototype.isMatrix2=!0,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`186`}})),typeof window<`u`&&(window.__THREE__?I(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`186`);async function on(e,t,n,r){let i=e.buffer,a=new DataView(i),o=e.schema,s=e.scale,c=e.offset,l=e.mins,u=o.reduce((e,t)=>(e[t.name]=t,e),{}),d=e=>{let t=0;for(let n=0;n<o.length;++n){if(o[n].name===e)return t;t+=o[n].size}};function f(e){let t=d(e),n=u[e].type,r=u[e].size;if(n==`signed`)switch(r){case 1:return e=>a.getInt8(e+t);case 2:return e=>a.getInt16(e+t,!0);case 4:return e=>a.getInt32(e+t,!0);default:throw Error(`Unrecognized byte size for \"signed\" numbers`)}if(n==`unsigned`)switch(r){case 1:return e=>a.getUint8(e+t);case 2:return e=>a.getUint16(e+t,!0);case 4:return e=>a.getUint32(e+t,!0);default:throw Error(`Unrecognized byte size for \"unsigned\" numbers`)}if(n==`float`)switch(r){case 4:return e=>a.getFloat32(e+t,!0);case 8:return e=>a.getFloat64(e+t,!0);default:throw Error(`Unrecognized byte size for \"float\" numbers`)}let i=JSON.stringify(u[e]);throw Error(`Invalid dimension specification for ${e}: ${i}`)}let p=o.reduce((e,t)=>e+t.size,0);if(p===0||i.byteLength===0)throw Error(`Invalid buffer: pointSize=${p}, byteLength=${i.byteLength}`);let m=Math.floor(i.byteLength/p);if(m===0)throw Error(`Buffer too small: ${i.byteLength} bytes for point size ${p}`);let h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,ee,M=!1,te=/* @__PURE__ */ new ArrayBuffer(m*4*3),N=new Float32Array(te),re=[f(`X`),f(`Y`),f(`Z`)];if(u.Red&&u.Green&&u.Blue){h=/* @__PURE__ */ new ArrayBuffer(m*4),x=new Uint8Array(h),D=[f(`Red`),f(`Green`),f(`Blue`)];let e,t,n,r;for(let i=0;i<m&&!M;++i)r=i*p,e=D[0](r),t=D[1](r),n=D[2](r),(e>255||t>255||n>255)&&(M=!0)}u.Intensity&&(g=/* @__PURE__ */ new ArrayBuffer(m*4),S=new Float32Array(g),O=f(`Intensity`)),u.Classification&&(_=new ArrayBuffer(m),C=new Uint8Array(_),k=f(`Classification`)),u.ReturnNumber&&(v=new ArrayBuffer(m),w=new Uint8Array(v),A=f(`ReturnNumber`)),u.NumberOfReturns&&(y=new ArrayBuffer(m),T=new Uint8Array(y),j=f(`NumberOfReturns`)),u.PointSourceId&&(b=/* @__PURE__ */ new ArrayBuffer(m*2),E=new Uint16Array(b),ee=f(`PointSourceId`));let ie=[0,0,0],P={min:[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],max:[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]},ae,oe,se,ce,le,ue;for(let e=0;e<m;++e){let t=e*p;N&&(ae=re[0](t)*s[0]+c[0]-l[0],oe=re[1](t)*s[1]+c[1]-l[1],se=re[2](t)*s[2]+c[2]-l[2],ie[0]+=ae/m,ie[1]+=oe/m,ie[2]+=se/m,P.min[0]=Math.min(P.min[0],ae),P.min[1]=Math.min(P.min[1],oe),P.min[2]=Math.min(P.min[2],se),P.max[0]=Math.max(P.max[0],ae),P.max[1]=Math.max(P.max[1],oe),P.max[2]=Math.max(P.max[2],se),N[3*e+0]=ae,N[3*e+1]=oe,N[3*e+2]=se),x&&(ce=D[0](t),le=D[1](t),ue=D[2](t),M&&(ce/=256,le/=256,ue/=256),x[4*e+0]=ce,x[4*e+1]=le,x[4*e+2]=ue),S&&(S[e]=O(t)),C&&(C[e]=k(t)),w&&(w[e]=A(t)),T&&(T[e]=j(t)),E&&(E[e]=ee(t))}let de=/* @__PURE__ */ new ArrayBuffer(m*4),fe=new Uint32Array(de);for(let e=0;e<m;++e)fe[e]=e;let pe=(await ne(N,t,new B().fromArray(n),new Et(new B().fromArray(r.min),new B().fromArray(r.max)))).buffer;return{numPoints:m,tightBoundingBox:P,mean:ie,position:te,color:h,intensity:g,classification:_,returnNumber:v,numberOfReturns:y,pointSourceId:b,indices:de,objectId:pe}}\n/**\n* @license\n* Copyright 2019 Google LLC\n* SPDX-License-Identifier: Apache-2.0\n*/\nconst sn=Symbol(`Comlink.proxy`),cn=Symbol(`Comlink.endpoint`),ln=Symbol(`Comlink.releaseProxy`),un=Symbol(`Comlink.finalizer`),dn=Symbol(`Comlink.thrown`),fn=e=>typeof e==`object`&&!!e||typeof e==`function`,pn=/* @__PURE__ */ new Map([[`proxy`,{canHandle:e=>fn(e)&&e[sn],serialize(e){let{port1:t,port2:n}=new MessageChannel;return hn(e,t),[n,[n]]},deserialize(e){return e.start(),vn(e)}}],[`throw`,{canHandle:e=>fn(e)&&dn in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(Error(e.value.message),e.value):e.value}}]]);function mn(e,t){for(let n of e)if(t===n||n===`*`||n instanceof RegExp&&n.test(t))return!0;return!1}function hn(e,t=globalThis,n=[`*`]){t.addEventListener(`message`,function r(i){if(!i||!i.data)return;if(!mn(n,i.origin)){console.warn(`Invalid origin '${i.origin}' for comlink proxy`);return}let{id:a,type:o,path:s}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(Mn),l;try{let t=s.slice(0,-1).reduce((e,t)=>e[t],e),n=s.reduce((e,t)=>e[t],e);switch(o){case`GET`:l=n;break;case`SET`:t[s.slice(-1)[0]]=Mn(i.data.value),l=!0;break;case`APPLY`:l=n.apply(t,c);break;case`CONSTRUCT`:l=An(new n(...c));break;case`ENDPOINT`:{let{port1:t,port2:n}=new MessageChannel;hn(e,n),l=kn(t,[t])}break;case`RELEASE`:l=void 0;break;default:return}}catch(e){l={value:e,[dn]:0}}Promise.resolve(l).catch(e=>({value:e,[dn]:0})).then(n=>{let[i,s]=jn(n);t.postMessage(Object.assign(Object.assign({},i),{id:a}),s),o===`RELEASE`&&(t.removeEventListener(`message`,r),_n(t),un in e&&typeof e[un]==`function`&&e[un]())}).catch(e=>{let[n,r]=jn({value:/* @__PURE__ */ TypeError(`Unserializable return value`),[dn]:0});t.postMessage(Object.assign(Object.assign({},n),{id:a}),r)})}),t.start&&t.start()}function gn(e){return e.constructor.name===`MessagePort`}function _n(e){gn(e)&&e.close()}function vn(e,t){let n=/* @__PURE__ */ new Map;return e.addEventListener(`message`,function(e){let{data:t}=e;if(!t||!t.id)return;let r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}}),Tn(e,n,[],t)}function yn(e){if(e)throw Error(`Proxy has been released and is not useable`)}function bn(e){return Nn(e,/* @__PURE__ */ new Map,{type:`RELEASE`}).then(()=>{_n(e)})}const xn=/* @__PURE__ */ new WeakMap,Sn=`FinalizationRegistry`in globalThis&&new FinalizationRegistry(e=>{let t=(xn.get(e)||0)-1;xn.set(e,t),t===0&&bn(e)});function Cn(e,t){let n=(xn.get(t)||0)+1;xn.set(t,n),Sn&&Sn.register(e,t,e)}function wn(e){Sn&&Sn.unregister(e)}function Tn(e,t,n=[],r=function(){}){let i=!1,a=new Proxy(r,{get(r,o){if(yn(i),o===ln)return()=>{wn(a),bn(e),t.clear(),i=!0};if(o===`then`){if(n.length===0)return{then:()=>a};let r=Nn(e,t,{type:`GET`,path:n.map(e=>e.toString())}).then(Mn);return r.then.bind(r)}return Tn(e,t,[...n,o])},set(r,a,o){yn(i);let[s,c]=jn(o);return Nn(e,t,{type:`SET`,path:[...n,a].map(e=>e.toString()),value:s},c).then(Mn)},apply(r,a,o){yn(i);let s=n[n.length-1];if(s===cn)return Nn(e,t,{type:`ENDPOINT`}).then(Mn);if(s===`bind`)return Tn(e,t,n.slice(0,-1));let[c,l]=Dn(o);return Nn(e,t,{type:`APPLY`,path:n.map(e=>e.toString()),argumentList:c},l).then(Mn)},construct(r,a){yn(i);let[o,s]=Dn(a);return Nn(e,t,{type:`CONSTRUCT`,path:n.map(e=>e.toString()),argumentList:o},s).then(Mn)}});return Cn(a,e),a}function En(e){return Array.prototype.concat.apply([],e)}function Dn(e){let t=e.map(jn);return[t.map(e=>e[0]),En(t.map(e=>e[1]))]}const On=/* @__PURE__ */ new WeakMap;function kn(e,t){return On.set(e,t),e}function An(e){return Object.assign(e,{[sn]:!0})}function jn(e){for(let[t,n]of pn)if(n.canHandle(e)){let[r,i]=n.serialize(e);return[{type:`HANDLER`,name:t,value:r},i]}return[{type:`RAW`,value:e},On.get(e)||[]]}function Mn(e){switch(e.type){case`HANDLER`:return pn.get(e.name).deserialize(e.value);case`RAW`:return e.value}}function Nn(e,t,n,r){return new Promise(i=>{let a=Pn();t.set(a,i),e.start&&e.start(),e.postMessage(Object.assign({id:a},n),r)})}function Pn(){return[,,,,].fill(0).map(()=>Math.floor(Math.random()*(2**53-1)).toString(16)).join(`-`)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function Fn(e,t,n,r){let i=await on(e,t,n,r);return kn(i,[i.position,i.color,i.intensity,i.classification,i.returnNumber,i.numberOfReturns,i.pointSourceId,i.indices,i.objectId].filter(In))}function In(e){return e!==void 0}hn(Fn);\n//# sourceMappingURL=eptBinaryDecoder.worker-DaGMeDuG.js.map", ym = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", vm], { type: "text/javascript;charset=utf-8" });
12038
12038
  function bm(e) {
12039
12039
  let t;
12040
12040
  try {
@@ -16704,7 +16704,7 @@ var Z_ = class {
16704
16704
  }
16705
16705
  purgeRevision(e, t) {
16706
16706
  let n = st(this._inProgressDownloads, (e) => e.revision === t);
16707
- n && (vt(this._inProgressDownloads, n), n.abort()), xt(this._loaded360Images, (e) => e.revision === t), t.dispose(), e.image360Visualization.visible || e.unloadImage();
16707
+ n && (vt(this._inProgressDownloads, n), n.abort()), xt(this._loaded360Images, (e) => e.revision === t), t.disposeGpuResources(), e.image360Visualization.visible || e.unloadImage();
16708
16708
  }
16709
16709
  createAbortSignal() {
16710
16710
  let e = new AbortController();
@@ -17691,7 +17691,10 @@ var Vv = class {
17691
17691
  (e = this._allAnnotations) == null || e.forEach((e) => e.setDefaultStyle(this._defaultAppearance));
17692
17692
  }
17693
17693
  dispose() {
17694
- this._previewTextures.forEach((e) => e.texture.dispose()), this._fullResolutionTextures.forEach((e) => e.texture.dispose()), this._previewTextures = [], this._fullResolutionTextures = [], this._allAnnotations !== void 0 && (this._allAnnotations.forEach((e) => e.dispose()), this._allAnnotations = void 0), this._annotationKeyToAnnotationObject.clear();
17694
+ this.disposeGpuResources(), this._allAnnotations !== void 0 && (this._allAnnotations.forEach((e) => e.dispose()), this._allAnnotations = void 0), this._annotationKeyToAnnotationObject.clear();
17695
+ }
17696
+ disposeGpuResources() {
17697
+ this._previewTextures.forEach((e) => e.texture.dispose()), this._fullResolutionTextures.forEach((e) => e.texture.dispose()), this._previewTextures = [], this._fullResolutionTextures = [];
17695
17698
  }
17696
17699
  applyTextures() {
17697
17700
  this._fullResolutionTextures.length === 6 ? this._image360VisualizationBox.setImages(this._fullResolutionTextures) : this._previewTextures.length === 6 && this._image360VisualizationBox.setImages(this._previewTextures);