0x122cdf09…f8b5sent to0x99a9b7c1…b069·#17,012,021·view on Etherscan
cd = mix( cd, cg0 * planetPer, planetEdge );\n cd += pb * cg1 * planetEdge * 0.2 * planetRadPer;\n\n float dp = max( 0.0, dot( vec3( normalize( dirToSun ), -u_renderPer * 15.0 ), planetN ) * rimGlow );\n cd += dp * distPer * planetEdge * 0.75;\n cd += smoothstep( -planetRad * 0.025, 0.0, planetDist ) * 0.2 * planetEdge * u_atmos;\n cd += rimGlow * 0.1 * planetEdge;\n cd += smoothstep( -8.0, 1.0, planetDist ) * 0.2 * planetEdge;\n }\n \n // landscape\n if( u_environmentId > 0 ){\n float reflectMask = pow( sin( uv.x * PI ), 21.0 );\n reflectMask += pow( sin( uv.x * PI ), 5.0 ) * 0.2;\n float gl = u_groundLevel;\n float skyMask = smoothstep( gl, gl + haze*0.04, uv.y );\n float seaMask = 1.0 - skyMask;\n\n float pnh1 = texture( u_noiseClouds, vec2( uv.x * 0.1, uv.y * 2.0 ) ).w * 0.5;\n float pnh2 = texture( u_noiseClouds, vec2( uv.x * 0.03, uv.y * 2.0 ) ).w * 0.5;\n float wispy0 = texture( u_noiseClouds, vec2( uv.x * 0.05, uv.y * 0.5 ) ).x;\n float wispy1 = texture( u_noiseClouds, vec2( uv.x * 0.1, uv.y * 1.5 ) ).x;\n\n float seaGrad = smoothstep( 0.0, gl, uv.y );\n\n if( u_environmentId == 1 ){ // ocean\n float nn = cn0 * 0.004 + cn0 * 0.002 + cn2 * 0.001 + 0.005;\n float gl0 = gl + nn - sin( uv.x * PI + 0.75 ) * 0.015;\n float lm = smoothstep( gl0, gl0 + haze*0.1, uv.y );\n float cloudyMask = cloudy * skyMask;\n\n cd *= skyMask;\n cd += ( pow( smoothstep( gl + ( cloudy + 1.0 ), gl, uv.y ), 3.0 ) ) * wispy0 * 0.3 * skyMask; // horizon glow\n cd += sin( smoothstep( gl + 0.2, gl - 0.2, uv.y ) * PI ) * cloudyMask * wispy1;\n cd += sin( smoothstep( gl-0.1, gl+0.3, uv.y ) * PI ) * cloudyMask * cn1 * 0.15;\n cd += sin( smoothstep( gl-0.1, gl+0.6, uv.y ) * PI ) * cloudyMask * cn0 * 0.3;\n cd += seaMask * 0.02; // sea base color\n cd += seaGrad * 0.1 * seaMask; // sea noisy gradient to horizon\n cd += ( pow( smoothstep( gl + haze, gl, uv.y ), 4.0 ) ) * haze * skyMask; // horizon glow\n cd += ( pow( smoothstep( gl + haze * 2.0, gl, uv.y ), 2.0 ) ) * max( u_cloudiness, 0.2 ) * sqrt( reflectMask ) * skyMask; // horizon glow\n cd += pow( 1.0 - abs( uv.y - gl ), 23.0 ) * 0.1;\n \n cd += pnh1 * pnh2 * reflectMask * seaMask * seaGrad * 0.3; // reflection\n cd += reflectMask * seaMask * 0.45 + pnh2 * smoothstep( gl * 0.3, gl, uv.y ) * seaMask * 0.3; // sugimoto\n cd -= sin( smoothstep( gl + 0.02, gl - 0.05, uv.y ) * PI ) * wispy1 * 0.2 * seaMask * u_cloudiness; // darker waters\n \n if( u_cloudiness > 0.2 ){\n float clouds0 = cn2 * sin( smoothstep( gl + 0.02 + cn1 * 0.05, gl + ( cn0 * 0.05 + cn2 * 0.05 ), uv.y + cn2 * 0.01 ) * PI );\n float clouds1 = cn0 * sin( smoothstep( gl + 0.02 + cn1 * 0.06, gl + ( cn0 * 0.2 + cn2 * 0.1 ) * cn0 + 0.05, uv.y + cn2 * 0.003 ) * PI );\n float clouds2 = cn0 * sin( smoothstep( gl + 0.02 + cn0 * 0.03, gl + ( cn0 * 0.3 + cn2 * 0.2 ) * cn0 + 0.1, uv.y + cn2 * 0.001 ) * PI );\n float cFinal = clouds0 * cn0 * 0.4 + clouds1 * cn1 * 1.4 + clouds2 * 0.35;\n cd += cFinal * u_cloudiness * cn0;\n }\n\n } else if( u_environmentId == 2 ){ // hills\n cd += pow( smoothstep( 0.9, gl, uv.y ), 1.0 ) * 0.1; // horizon glow\n cd += smoothstep( gl + max( u_cityHaze, 0.1 ) * 3.0, gl, uv.y ) * 0.2;\n float origCd = cd;\n int numHills = 4;\n for( int i=0; i<numHills; i++ ){\n float per = float(i) / float( numHills - 1 );\n float nn = ( cos( sin( uv.x * ( 6.0 + per * 3.0 ) + per * 4.95 + cn0 * 0.7 + u_rf0 * 52.0 ) )/( PI * 0.35 ) ) * 0.05;\n nn += sin( uv.x * ( 5.0 - per * 1.0 ) + per * 5.7 + ( cn0 + cn1 + cn2 * 0.5 ) * 0.5 + u_rf1 * 11.0 ) * 0.1;\n float gl0 = gl + nn * ( 1.0 - per * 0.7 ) - per * 0.05;\n float lm = smoothstep( gl0, gl0+0.0025, uv.y );\n cd = mix( origCd, cd, lm );\n cd -= ( 1.0 - lm ) * ( 0.1 + reflectMask * 0.03 ) * ( per * 0.5 );\n }\n }\n }\n \n // thick clouds\n cd -= ( cn0 * 0.5 - cn1 * 0.3 ) * cloudy;\n float rf0 = u_rf0 * 0.5 + 0.25;\n float cgrad = smoothstep( rf0 - cn0 * 0.25 + uv.x * 0.2, rf0 + cn0 * 0.25 + uv.x * 0.2, uv.y ) * u_cloudiness;\n cd -= ( cn0 * 0.5 - cn1 * 0.3 ) * cgrad;\n\n // fg light pollution\n cd += ( 1.0 - uv.y + cn2 * 0.02 ) * ( haze + 0.05 ) * 0.3;\n \n if( u_bailyBeads == 1 ){\n cd += beadsCd * 0.15;\n }\n \n cd *= 0.0865;\n\n color.xyz = vec3( cd );\n}\n"),attributes:{position:{data:Ie,size:2},uv:{data:Me,size:2}},count:3}),Ce.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat})},Oe=(n,e)=>{Ce.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,Ce.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,oe.fb.read.targetTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,Gn.fb.read.targetTexture),n.activeTexture(n.TEXTURE2),n.bindTexture(n.TEXTURE_2D,On.fb.read.targetTexture),n.activeTexture(n.TEXTURE3),n.bindTexture(n.TEXTURE_2D,xe.fb.read.targetTexture),n.activeTexture(n.TEXTURE4),n.bindTexture(n.TEXTURE_2D,Pe.fb.read.targetTexture),n.activeTexture(n.TEXTURE5),n.bindTexture(n.TEXTURE_2D,In.fb.read.targetTexture),Ce.renderer.bindUniform("u_sky",0),Ce.renderer.bindUniform("u_pointCloud",1),Ce.renderer.bindUniform("u_sunTex",2),Ce.renderer.bindUniform("u_planetsTex",3),Ce.renderer.bindUniform("u_beadsTex",4),Ce.renderer.bindUniform("u_noiseClouds",5),Ce.renderer.bindUniform("u_sunPos",an.sunPos),Ce.renderer.bindUniform("u_sunRad",an.sunRad),Ce.renderer.bindUniform("u_sunRadPer",Be),Ce.renderer.bindUniform("u_numPlanets",an.numPlanets),Ce.renderer.bindUniform("u_bailyBeads",an.bailyBeads),Ce.renderer.bindUniform("u_environmentId",an.environmentId),Ce.renderer.bindUniform("u_groundLevel",an.groundLevel),Ce.renderer.bindUniform("u_cityHaze",an.cityHaze),Ce.renderer.bindUniform("u_cloudiness",an.cloudiness),Ce.renderer.bindUniform("u_flareIntensity",an.flareIntensity),Ce.renderer.bindUniform("u_renderPer",e),Ce.renderer.bindUniform("u_rf0",an.rf0),Ce.renderer.bindUniform("u_rf1",an.rf1),Ce.renderer.bindUniform("u_ruv",[123.45*an.rf0,123.45*an.rf1]),Ce.renderer.bindUniform("u_res",[an.height,an.height]),Ce.renderer.bindUniform("u_atmos",an.atmos),Ce.renderer.bindUniform("u_multi",[an.coronaMulti,an.surfaceMulti,an.coronaGlowMulti]),Ce.renderer.render(an.height,an.height),Ce.fb.swap()};const Xe=new Float32Array([-1,-1,3,-1,-1,3]),ke=new Float32Array([0,0,2,0,0,2]),Ne={},Ge=e=>{Ne.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\nin vec2 v_uv;\nout vec4 color;\n\nuniform sampler2D u_framebuffer;\nuniform sampler2D u_scene;\n\nuniform vec2 u_res;\nuniform vec2 u_invRes;\nuniform int u_isRendering;\nuniform float u_renderPer;\nuniform int u_renderFrame;\nuniform float u_rf0;\nuniform float u_rf1;\n\nfloat off = 0.990;\nfloat off2 = 0.005;\n\nvec4 blur( float off, float multi ) {\n vec4 col = vec4( 0. );\n for(float x = -off; x <= off; x++) {\n for(float y = -off; y <= off; y++) {\n col += texture( u_framebuffer, v_uv+vec2(x,y)*u_invRes );\n }\n }\n col /= multi;\n return col;\n}\n\nvoid main() {\n vec2 fc = gl_FragCoord.xy;\n vec2 uv = fc / u_res;\n\n vec4 frag = texture( u_scene, uv );\n \tvec4 prev = texture( u_framebuffer, uv );\n\tfloat decay = 0.1;\n\n if( u_isRendering == 1 ){\n if( u_renderPer > 0.0 ){\n if( u_renderPer < 0.3 ) prev = blur( 1.0, 9.0 );\n\n float multi = 0.1;\n color = prev * ( off + u_renderPer * off2 ) + frag * multi;\n color = clamp( color, vec4( 0.0 ), vec4( 1.0 ) );\n if( u_renderPer > 0.999 ){\n color = prev;\n }\n } else { // LIVE VIEW\n color = prev * decay + frag;\n }\n } else {\n color = prev * decay + frag;\n }\n color = clamp( color, vec4( 0.0 ), vec4( 1.0 ) );\n}"),attributes:{position:{data:Xe,size:2},uv:{data:ke,size:2}},count:3}),Ne.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat})},Ve=(n,e,r,t)=>{Ne.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,Ne.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,Ne.fb.read.targetTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,Ce.fb.read.targetTexture),Ne.renderer.bindUniform("u_framebuffer",0),Ne.renderer.bindUniform("u_scene",1),Ne.renderer.bindUniform("u_renderPer",r),Ne.renderer.bindUniform("u_isRendering",t),Ne.renderer.bindUniform("u_renderFrame",e),Ne.renderer.bindUniform("u_res",[an.height,an.height]),Ne.renderer.bindUniform("u_invRes",[1/an.height,1/an.height]),Ne.renderer.bindUniform("u_rf0",an.rf0),Ne.renderer.bindUniform("u_rf1",an.rf1),Ne.renderer.render(an.height,an.height),Ne.fb.swap()};const qe=new Float32Array([-1,-1,3,-1,-1,3]),He=new Float32Array([0,0,2,0,0,2]),Ye={},We=e=>{Ye.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\nin vec2 v_uv;\nout vec4 color;\n\nuniform sampler2D u_trails;\nuniform sampler2D u_noiseClouds;\nuniform sampler2D u_forces;\n\nuniform int u_borderId;\nuniform float u_borderWidth;\nuniform float u_borderCornerRad;\nuniform float u_damage;\nuniform float u_cloudiness;\nuniform int u_tint;\nuniform vec2 u_res;\nuniform float u_renderPer;\n\n#define PI 3.14159265\n#define TAU 6.28318530718\n\nconst vec3 cd0 = vec3( 0.05, 0.02, 0.15 );\nconst vec3 cd1 = vec3( 0.5, 0.4, 0.8 );\nconst vec3 cd2 = vec3( 1.0, 0.7, 0.7 );\nconst vec3 cd3 = vec3( 1.0, 1.0, 0.9 );\nconst vec3 cd4 = vec3( 1.0, 1.0, 1.0 );\n\nfloat random( vec2 st ){\n return fract(sin(dot(st.xy,vec2(12.9898,78.233)))*43758.5453123);\n}\n\nfloat hash11(float p){\n p = fract(p * .1031);\n p *= p + 33.33;\n p *= p + p;\n return fract(p);\n}\n\nvec3 bc( vec3 v, float b, float c ){\n return (v - 0.5) * c + 0.5 + b;\n}\n\nvec3 gamma( vec3 v, float p ){\n return vec3(pow(abs(v.r), p),pow(abs(v.g), p),pow(abs(v.b), p));\n}\n\nvec3 quintColor( vec3 c0, vec3 c1, vec3 c2, vec3 c3, vec3 c4, float per ){\n vec3 c = c0;\n if( per < 0.25 ){\n c = mix( c0, c1, per * 4.0 );\n } else if( per < 0.5 ){\n c = mix( c1, c2, ( per - 0.25 ) * 4.0 );\n } else if( per < 0.75 ){\n c = mix( c2, c3, ( per - 0.5 ) * 4.0 );\n } else {\n c = mix( c3, c4, ( per - 0.75 ) * 4.0 );\n }\n return c;\n}\n\nvec3 palette( in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d ){\n return a + b*cos( TAU*(c*t+d) );\n}\n\nfloat sdCircle( vec2 p, float r ){\n return length(p) - r;\n}\n\nfloat sdRoundedBox( in vec2 p, in vec2 b, in vec4 r ){\n r.xy = (p.x>0.0)?r.xy : r.zw;\n r.x = (p.y>0.0)?r.x : r.y;\n vec2 q = abs(p)-b+r.x;\n return min(max(q.x,q.y),0.0) + length(max(q,0.0)) - r.x;\n}\n\nvoid main() {\n \n vec2 frag = gl_FragCoord.xy;\n float ar = u_res.x/u_res.y;\n float ar2 = ( 1.0 - ar ) * 0.5;\n vec2 uv = frag / u_res;\n uv.x = uv.x * ar + ar2;\n vec2 fragCoord = frag + vec2( u_res.y * ar2, 0.0 );\n\n // GET NOISE CLOUDS\n vec4 clouds = texture( u_noiseClouds, uv );\n float cn0 = clouds.x;\n float cn1 = clouds.y;\n float cn2 = clouds.z;\n float cn3 = clouds.w;\n\n // set initial color\n color.xyz = vec3( 0.0 );\n \n // main image\n color += texture( u_trails, uv );\n color.xyz = vec3( max( color.x, max( color.y, color.z ) ) );\n \n // aging\n float dmg = u_damage * 0.5;\n\n // borders\n vec2 bp = (2.0*frag-u_res)/u_res.y;\n vec2 bp2 = (vec2( 2.0, ar*2.0 )*frag-u_res*vec2( 1.0, ar))/u_res.x;\n float br = u_borderId == 0 ? 0.0 : u_borderCornerRad;\n vec2 bs = vec2( ar - u_borderWidth, 1.0 - u_borderWidth );\n float borderSdf = sdRoundedBox( bp, bs, vec4( br ) );\n float b0 = smoothstep( -0.002, 0.0, borderSdf );\n float b1 = smoothstep( -0.01, 0.0, borderSdf );\n float b2 = smoothstep( -0.03, 0.0, borderSdf );\n float b3 = smoothstep( -0.1, 0.0, borderSdf );\n float b4 = smoothstep( -0.2, 0.0, borderSdf );\n float vign = sdCircle( bp2, 0.75 );\n float borderShadow = smoothstep( 0.9, 0.0, vign );\n float vignBlend = smoothstep( 0.66, -0.2, vign );\n \n if( u_borderId > 0 ){\n // aged discoloring\n color.xyz = mix( color.xyz, vec3( cos( color.xyz * PI * 2.0 ) ), dmg ); // color cycles with higher dmg\n float edgeDark = ( b4 * 0.1 + b3 * cn0 * 0.3 - b3 * cn1 * 0.3 + b2 * cn2 * 0.3 - b3 * cn2 * 0.15 );\n color.xyz *= 1.0 - edgeDark;\n\n // more clouds\n color.xyz -= cn0 * u_cloudiness * 0.2;\n\n // final noise and bgcolor\n color.xyz = clamp( color.xyz, 0.0, 1.0 );\n color.xyz = color.xyz * 0.8 + 0.1;\n float fn0 = ( random( ( fragCoord + vec2( 52.5, 77.8 ) ) * 0.01 ) ) * 0.025;\n color.xyz += fn0;\n\n color.xyz = clamp( color.xyz, 0.0, 1.0 );\n color.xyz *= vec3( borderShadow - b3 * 0.1 - b2 * 0.1 ); // final vignette\n\n if( u_borderId == 2 ){ // color edges\n float bMix = mix( b2, b3, dmg * 2.0 );\n float edge = clamp( 1.0 - bMix\n + cn0 * 0.5\n - sin( cn0 * 14.0 ) * 0.1\n - sin( cn3 * 7.0 + cn2 * 3.0 ) * 0.1\n - hash11( frag.x * frag.y ) * 0.1\n - b4 * 0.2\n + cn0 * 0.35\n + cn1 * 0.25, 0.0, 1.0 );\n color.xyz += ( 1.0 - edge ) * 0.2;\n float edgePer = clamp( pow( edge, 2.0 ), 0.0, 1.0 );\n vec3 stain = quintColor( cd0, cd1, cd2, cd3, cd4, pow( fract( edgePer * 2.0 ), 0.5 ) );\n color.xyz *= mix( stain, cd4, edgePer );\n }\n\n float innerb0 = smoothstep( -0.005, -0.002, borderSdf );\n color.xyz -= vec3( innerb0 * 0.05 );\n color.xyz = mix( vec3( 0.02 ), color.xyz, 1.0 - b0 );\n } else {\n if( u_tint != 9 )\n color.xyz *= ( vignBlend * 0.5 + 0.5 );\n }\n\n float b = max( color.x, max( color.y, color.z ) );\n \n // tinting\n int tint = u_tint;\n if( tint == 0 ){\n color.xyz = max( color.xyz, vec3( 0.05 ) );\n color.xyz = bc( color.xyz, 0.0, 1.1 );\n color.xyz = gamma( color.xyz, 1.5 );\n\n } else if( tint == 1 ){\n color.xyz = bc( color.xyz, 0.025, 1.1 );\n color.xyz = mix( color.xyz - vec3( 0.1, 0.15, 0.2 ), color.xyz * vec3( 1.0, 1.0, 0.9 ), vignBlend );\n color.xyz *= quintColor( cd2, cd2, cd3, cd3, cd4, b );\n\n } else if( tint == 2 ){\n vec3 nc = palette( b * 0.6 + 0.4, vec3( 0.5 ), vec3( 0.5 ), vec3( 0.9, 0.95, 1.0 ), vec3( 0.05, 0.07, 0.15 ) );\n color.xyz = mix( pow( nc, vec3( 1.5 ) ), vec3( b ), b );\n\n } else if( tint == 3 ){\n color.xyz = bc( color.xyz, 0.02, 0.9 );\n color.xyz = gamma( color.xyz, 1.2 );\n color.xyz = mix( color.xyz - vec3( 0.05, 0.1, 0.1 ), color.xyz * vec3( 1.0, 1.0, 0.95 ), vignBlend );\n color.xyz *= quintColor( cd1, cd1, cd2, cd3, cd4, b );\n\n } else if( tint == 4 ){\n color.xyz = vec3( pow( b, 1.5 ), 0.0, 0.0 );\n\n } else if( tint == 5 ){\n color.xyz = quintColor( cd0, cd1, cd2, cd3, cd4, b * b );\n\n } else if( tint == 6 ){\n color.xyz = quintColor( vec3( 0.05, 0.02, 0.01 ), vec3( 0.3, 0.05, 0.025 ), vec3( 0.6, 0.3, 0.1 ), vec3( 1.0, 0.7, 0.3 ), vec3( 1.0, 1.0, 0.7 ), b );\n\n } else if( tint == 7 ){\n color.xyz = palette( b, vec3( 0.5 ), vec3( 0.5 ), vec3( 1.0 ), vec3( 0.9, 1.0, 0.22 ) );\n\n } else if( tint == 8 ){\n color.xyz = vec3( 1.0 ) - color.xyz;\n color.xyz = bc( color.xyz, 0.15, 1.1 );\n\n }\n color.xyz *= u_renderPer;\n}\n"),attributes:{position:{data:qe,size:2},uv:{data:He,size:2}},count:3})},Ke=(n,e,r)=>{Ye.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,null),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,Ne.fb.read.targetTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,In.fb.read.targetTexture),n.activeTexture(n.TEXTURE2),n.bindTexture(n.TEXTURE_2D,zn.fb.read.targetTexture),Ye.renderer.bindUniform("u_trails",0),Ye.renderer.bindUniform("u_noiseClouds",1),Ye.renderer.bindUniform("u_forces",2),Ye.renderer.bindUniform("u_borderId",an.borderId),Ye.renderer.bindUniform("u_borderWidth",an.borderWidth),Ye.renderer.bindUniform("u_borderCornerRad",an.borderCornerRad),Ye.renderer.bindUniform("u_damage",an.damage),Ye.renderer.bindUniform("u_cloudiness",an.cloudiness),Ye.renderer.bindUniform("u_tint",an.tintId),Ye.renderer.bindUniform("u_res",[n.canvas.width,n.canvas.height]),Ye.renderer.bindUniform("u_renderPer",Math.sqrt(e)),Ye.renderer.render()},je=(n,e)=>{const r=n.canvas.toDataURL("image/png",1).replace("image/png","image/octet-stream"),t=document.createElement("a");t.download="image_"+e+".png",t.href=r,t.click()};const Je=new Float32Array([-1,-1,3,-1,-1,3]),Qe=new Float32Array([0,0,2,0,0,2]),Ze={},$e=(n,e,r)=>{Ze.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,null),Ze.renderer.bindUniform("u_preloadPer",e),Ze.renderer.bindUniform("u_prerenderPer",r),Ze.renderer.bindUniform("u_res",[n.canvas.width,n.canvas.height]),Ze.renderer.render()};console.log(tokenData.tokenId+" "+tokenData.hash);const nr=document.createElement("canvas"),er=nr.getContext("webgl2",{premultipliedAlpha:!1,alpha:!1,preserveDrawingBuffer:!0});function rr(n,e,r,t,o){return t+(o-t)*(n-e)/(r-e)}const tr=(n,e,r)=>Math.min(Math.max(n,e),r);let or=168+an.exposureFrames,ar=0,ir=0,sr=0,dr=0;document.addEventListener("keydown",(function(n){let e=n.key;"s"==e?je(er,tokenData.hash):"0"==e?dr=0:"1"==e?dr=1:"2"==e?dr=2:"3"==e?dr=3:"4"==e?dr=4:"5"==e&&(dr=5)}),!1);const ur=er.getExtension("EXT_color_buffer_float");er.getExtension("OES_texture_float_linear"),er.getExtension("EXT_float_blend");const fr=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document;(an.hasFloat=!!ur)&&!fr?(an.fbType=er.FLOAT,an.fbFormat=er.RGBA32F):(an.fbType=er.HALF_FLOAT,an.fbFormat=er.RGBA16F),document.body.appendChild(nr);const cr=()=>{nr.width=1836,nr.height=2400,nr.style.maxWidth="100%",nr.style.maxHeight="100%"};window.addEventListener("resize",cr);const lr=e=>{requestAnimationFrame(lr);let r=tr(rr(sr,0,16,0,1),0,1),t=tr(rr(sr,17,167,0,1),0,1),o=tr(rr(sr,168,or,0,1),0,1);var a;0==sr?(a=er,Ze.renderer=s(a,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\nin vec2 v_uv;\nout vec4 color;\n\nuniform float u_preloadPer;\nuniform float u_prerenderPer;\nuniform vec2 u_res;\n\n#define PI 3.14159265\n#define TAU 6.28318\n#define HPI 3.141592/2.0\nvoid main() {\n \n vec2 frag = gl_FragCoord.xy;\n vec2 uv = frag / u_res;\n\n float pl = u_preloadPer;\n float pr = min( u_prerenderPer * 1.25, 1.0 );\n float pout = max( ( u_prerenderPer * 1.25 ) - 1.0, 0.0 ) * 4.0;\n float fadeIn = clamp( pl * 5.0 - 0.2, 0.0, 1.0 );\n float fadeOut = 1.0 - pout;\n vec4 bg = vec4( 0.0, 0.0, 0.0, 1.0 );\n color.xyz = vec3( 0.0 );\n\n float r = 50.0;\n vec2 c = u_res/2.0;\n vec2 p = c + vec2( 0.0, ( 1.0 - pr ) * r * 2.2 );\n float d0 = distance( frag, c );\n float d1 = distance( frag, p );\n vec2 dir = normalize( c - frag );\n float angle = atan( dir.y, dir.x );\n float anglePer = fract( ( angle + PI ) / TAU - 0.25 );\n\n float loader = smoothstep( r*pl, r*pl-2.0, d0 ) * fadeIn;\n loader += sin( smoothstep( r - 1.0, r + 5.0, d0 ) * PI ) * pl * 0.5;\n\n loader += pow( smoothstep( r*(pr*35.0), 0.0, d0 ), 25.0 ) * pow( pr, 5.0 ) * 0.3; // outer glow\n loader += smoothstep( r + ( sin( angle * 42.0 + u_prerenderPer * 10.0 ) * 0.5 + 0.5 ) * 30.0 * sin( pout * PI ) + 2.0, r, d0 ) * pow( pl, 55.0 );\n loader = min( loader, 1.0 );\n loader -= smoothstep( r+1.0, r-1.0, d1 );\n loader = max( loader, 0.0 );\n loader += smoothstep( r, r-2.0, d1 ) * 0.25 * pow( pr, 11.0 );\n loader *= fadeOut;\n\n color.xyz += vec3( loader );\n}\n"),attributes:{position:{data:Je,size:2},uv:{data:Qe,size:2}},count:3})):1==sr?An(er):2==sr?ne(er):3==sr?ae(er):4==sr?Xn(er):5==sr?he(er):6==sr?Se(er):7==sr?Mn(er):8==sr?(Cn(er),ee(er),ie(er),Pn(er),kn(er),ye(er),De(er)):9==sr?qn(er):10==sr?_n(er):11==sr?gn(er):12==sr?Le(er):13==sr?Ge(er):14==sr&&We(er),t<.999?$e(er,r,t):(1==ar?ir++:o=0,o<.999&&(Yn(er,o),pn(er),xn(er),Oe(er,o),Ve(er,ir,o,ar)),Ke(er,o)),sr++,168==sr&&(ar=1)};requestAnimationFrame(lr),cr();