<!-- SOLUV · part 627 -->
2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(`
`)+`
`+m);let b=S+g+a,x=S+m+o,E=Vp(i,i.VERTEX_SHADER,b),T=Vp(i,i.FRAGMENT_SHADER,x);i.attachShader(_,E),i.attachShader(_,T),e.index0AttributeName!==void 0?i.bindAttribLocation(_,0,e.index0AttributeName):e.hasPositionAttribute===!0&&i.bindAttribLocation(_,0,"position"),i.linkProgram(_);function R(L){if(s.debug.checkShaderErrors){let F=i.getProgramInfoLog(_)||"",z=i.getShaderInfoLog(E)||"",D=i.getShaderInfoLog(T)||"",B=F.trim(),X=z.trim(),W=D.trim(),st=!0,q=!0;if(i.getProgramParameter(_,i.LINK_STATUS)===!1)if(st=!1,typeof s.debug.onShaderError=="function")s.debug.onShaderError(i,_,E,T);else{let Q=Gp(i,E,"vertex"),et=Gp(i,T,"fragment");Lt("WebGLProgram: Shader Error "+i.getError()+" - VALIDATE_STATUS "+i.getProgramParameter(_,i.VALIDATE_STATUS)+`

Material Name: `+L.name+`
Material Type: `+L.type+`

Program Info Log: `+B+`
`+Q+`
`+et)}else B!==""?ut("WebGLProgram: Program Info Log:",B):(X===""||W==="")&&(q=!1);q&&(L.diagnostics={runnable:st,programLog:B,vertexShader:{log:X,prefix:g},fragmentShader:{log:W,prefix:m}})}i.deleteShader(E),i.deleteShader(T),v=new qs(i,_),A=sS(i,_)}let v;this.getUniforms=function(){return v===void 0&&R(this),v};let A;this.getAttributes=function(){return A===void 0&&R(this),A};let I=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return I===!1&&(I=i.getProgramParameter(_,Zy)),I},this.destroy=function(){n.releaseStatesOfProgram(this),i.deleteProgram(_),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=Jy++,this.cacheKey=t,this.usedTimes=1,this.program=_,this.vertexShader=E,this.fragmentShader=T,this}var yS=0,rd=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t,e,n){let i=this._getShaderCacheForMaterial(t);return i.has(e)===!1&&(i.add(e),e.usedTimes++),i.has(n)===!1&&(i.add(n),n.usedTimes++),this}remove(t){let e=this.materialCache.get(t);for(let n of e)n.usedTimes--,n.usedTimes===0&&this.shaderCache.delete(n.code);return this.materialCache.delete(t),this}getVertexShaderStage(t){return this._getShaderStage(t.vertexShader)}getFragmentShaderStage(t){return this._getShaderStage(t.fragmentShader)}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){let e=this.materialCache,n=e.get(t);return n===void 0&&(n=new Set,e.set(t,n)),n}_getShaderStage(t){let e=this.shaderCache,n=e.get(t);return n===void 0&&(n=new ad(t),e.set(t,n)),n}},ad=class{constructor(t){this.id=yS++,this.code=t,this.usedTimes=0}};function SS(s){return s===Mi||s===ra||s===aa}function MS(s,t,e,n,i,r){let a=new ws,o=new rd,l=new Set,c=[],h=new Map,d=n.logarithmicDepthBuffer,u=n.precision,f={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distance",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function p(v){return l.add(v),v===0?"uv":`uv${v}`}function _(v,A,I,L,F,z){let D=L.fog,B=F.geometry,X=v.isMeshStandardMaterial||v.isMeshLambertMaterial||v.isMeshPhongMaterial?L.environment:null,W=v.isMeshStandardMaterial||v.isMeshLambertMaterial&&!v.envMap||v.isMeshPhongMaterial&&!v.envMap,st=t.get(v.envMap||X,W),q=st&&st.mapping===Vs?st.image.height:null,Q=f[v.type];v.precision!==null&&(u=n.getMaxPrecision(v.precision),u!==v.precision&&ut("WebGLProgram.getParameters:",v.precision,"not supported, using",u,"instead."));let et=B.morphAttributes.position||B.morphAttributes.normal||B.morphAttributes.color,Dt=et!==void 0?et.length:0,wt=0;B.morphAttributes.position!==void 0&&(wt=1),B.morphAttributes.normal!==void 0&&(wt=2),B.morphAttributes.color!==void 0&&(wt=3);let se,Qt,ne,J;if(Q){let ge=Gn[Q];se=ge.vertexShader,Qt=ge.fragmentShader}else{se=v.vertexShader,Qt=v.fragmentShader;let ge=o.getVertexShaderStage(v),oe=o.getFragmentShaderStage(v);o.update(v,ge,oe),ne=ge.id,J=oe.id}let j=s.getRenderTarget(),xt=s.state.buffers.depth.getReversed(),Vt=F.isInstancedMesh===!0,bt=F.isBatchedMesh===!0,Gt=!!v.map,he=!!v.matcap,tt=!!st,rt=!!v.aoMap,at=!!v.lightMap,ot=!!v.bumpMap&&v.wireframe===!1,ht=!!v.normalMap,Bt=!!v.displacementMap,Ot=!!v.emissiveMap,Ht=!!v.metalnessMap,qt=!!v.roughnessMap,P=v.anisotropy>0,ae=v.clearcoat>0,jt=v.dispersion>0,w=v.retroreflectivity>0,y=v.iridescence>0,O=v.sheen>0,G=v.transmission>0,Y=P&&!!v.anisotropyMap,lt=ae&&!!v.clearcoatMap,ct=ae&&!!v.clearcoatNormalMap,Z=ae&&!!v.clearcoatRoughnessMap,K=y&&!!v.iridescenceMap,dt=y&&!!v.iridescenceThicknessMap,Nt=O&&!!v.sheenColorMap,gt=O&&!!v.sheenRoughnessMap,ft=!!v.specularMap,Ut=!!v.specularColorMap,zt=!!v.