0x7d8d846f…ebc1sent to0x9f79e46a…7794·#17,804,562·view on Etherscan
const t=document,i=window,e=Math,s=e.PI,r=2*s,a=i.devicePixelRatio>1.5?i.devicePixelRatio:1;let h=i.innerWidth/a,n=i.innerHeight/a,o=e.min(h,n);function l(t,i,s){return e.max(i,e.min(t,s))}function c(t,i,e,s,r){return s+(r-s)*(t-i)/(e-i)}function f(t=[],i){let s=e.hypot(...t);t.forEach(((e,r)=>t[r]=s?e/s*i:0))}function d(t,i,e){let s=l((e-t)/(i-t),0,1);return s*s*(3-2*s)}function u(t,i,s,r){let a=parseInt(t.substring(1,3),16),h=parseInt(t.substring(3,5),16),n=parseInt(t.substring(5,7),16),[o,l,c]=p(a,h,n);return o=(o+i)%360,l=e.min(l+s,100),c=e.min(c+r,100),`hsl(${o},${l}%,${c}%)`}function p(t,i,s){t/=255,i/=255,s/=255;let r=e.min(t,i,s),a=e.max(t,i,s),h=a-r,n=0,o=0,l=0;return n=0==h?0:a==t?(i-s)/h%6:a==i?(s-t)/h+2:(t-i)/h+4,n=(60*n+360)%360|0,l=(a+r)/2,o=0==h?0:h/(1-e.abs(2*l-1)),o=+(100*o).toFixed(1),l=+(100*l).toFixed(1),[n,o,l]}class m{constructor(){this.useA=!1;let t=function(t){let i=parseInt(t.substring(0,8),16),e=parseInt(t.substring(8,16),16),s=parseInt(t.substring(16,24),16),r=parseInt(t.substring(24,32),16);return function(){i|=0,e|=0,s|=0,r|=0;let t=(i+e|0)+r|0;return r=r+1|0,i=e^e>>>9,e=s+(s<<3)|0,s=s<<21|s>>>11,s=s+t|0,(t>>>0)/4294967296}};this.prngA=new t(tokenData.hash.substring(2,34)),this.prngB=new t(tokenData.hash.substring(34,66));for(let t=0;t<1e6;t+=2)this.prngA(),this.prngB()}D(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}N(t,i){return t+(i-t)*this.D()}I(t,i){return 0|this.N(t,i+1)}B(t){return this.D()<t}}const g=new m;class v{constructor(t,i,s,a,l,c,f,d,p,m,v,A){let b=g.D(),E=r*b,S=h/n;this.P=new Float32Array([[.5,.5],[1/S*e.cos(E)*.5*v/w+.5,.5*e.sin(E)*v/w+.5],[1/S*e.cos(E)*1/1.5*v/w,1*e.sin(E)/1.5*v/w],[b,g.D()],[b,.5],[.5,b],[b,1/(w-C)*(v-C+.5)],[b,(g.B(.5)?-1:1)*b],[1/(w-C)*(v-C+.5),b]][iDM]),this.rG=A,this.V=new Float32Array([g.N(-1e-6,1e-6),g.N(-1e-6,1e-6)]),this.A=new Float32Array([0,0]),this.mS=t,this.mSS=this.mS,this.mF=i,this.bs=s,this.bc=a,this.ba=l,this.pS=c,this.pC=f,this.pA=d,this.c=p,this.lc1=u(this.c,15,10,5),this.lc2=u(this.c,30,10,10),this.dc1=u(this.c,-10,15,-5),this.dc2=u(this.c,-20,15,-10),this.R=m,this.RB=m,this.RO=o*g.N(0,g.D())*.005,this.vis=0,this.g=v,this.an=g.D(r)}E(){this.P[0]=(this.P[0]+1)%1,this.P[1]=(this.P[1]+1)%1}AL(t){let i=this.pS,s=[0,0],r=0;for(let a of t){let[t,h]=a.P,[n,o]=this.P;if(e.abs(t-n)<=i&&e.abs(h-o)<=i){if(e.hypot(n-t,o-h)<=i&&a!=this){let t=B[this.g][a.g].a;s.forEach(((i,e,s)=>s[e]+=a.V[e]*t)),r++}}}return r>0&&(s.forEach(((t,i,e)=>e[i]=e[i]/r*this.mS-this.V[i])),f(s,this.mF)),s}CO(t){this.A=[-(this.P[0]-G[0]),-(this.P[1]-G[1])],f(this.A,this.mF*t)}CG(t,i){this.A=[-(this.P[0]-G[0]),-(this.P[1]-G[1])];let s=e.hypot(this.P[0]-G[0],this.P[1]-G[1])*i;f(this.V,this.mS/s),f(this.A,this.mF*t)}EX(){this.V=[5*g.N(-1,1),5*g.N(-1,1)],f(this.V,2*this.mS)}COH(t){let i=this.pC,s=[0,0],r=0;for(let a of t){let[t,h]=a.P,[n,o]=this.P;if(e.abs(t-n)<=i&&e.abs(h-o)<=i){if(e.hypot(n-t,o-h)<=i&&a!=this){let t=B[this.g][a.g].c;s.forEach(((i,e,s)=>s[e]+=a.P[e]*t)),r++}}}return r>0&&(s=s.map(((t,i,e)=>(t/r-this.P[i])*this.mS-this.V[i])),f(s,this.mF)),s}SE(t){let i=this.pA,s=[0,0],r=0;for(let a of t){let[t,h]=a.P,[n,o]=this.P;if(e.abs(t-n)<=i&&e.abs(h-o)<=i){let l=e.hypot(n-t,o-h);if(l<i&&a!==this){let[i,e]=[(n-t)/l,(o-h)/l],c=B[this.g][a.g].s;s=s.map(((t,s)=>t+[i,e][s]*c)),r++}}}return r>0&&(s.forEach(((t,i,e)=>e[i]=e[i]/r*this.mS-this.V[i])),f(s,this.mF)),s}F(t){let i=this.AL(t),e=this.COH(t),s=this.SE(t);this.A.forEach(((t,r,a)=>a[r]=this.bs*s[r]+this.bc*e[r]+this.ba*i[r]))}U(){this.P[0]+=this.V[0],this.P[1]+=this.V[1],this.V[0]+=this.A[0],this.V[1]+=this.A[1],f(this.V,this.mS)}SH(){let t=this.R,i=o/100,[s,a]=[this.P[0]*h|0,this.P[1]*n|0];t*=e.min(s<=i?s/i:1,s>=h-i?(h-s)/i:1,a<=i?a/i:1,a>=n-i?(n-a)/i:1),this.R+=this.RO,this.R>2*this.RB&&(this.R=this.RB);const l=F.createRadialGradient(s,a,0,s,a,this.R);this.g<y?(l.addColorStop(0,this.c+"25"),l.addColorStop(.2,this.c+"17"),l.addColorStop(1,this.c+"00")):(l.addColorStop(0,this.lc1),l.addColorStop(.01,this.c),l.addColorStop(.1,this.c+"17"),l.addColorStop(1,this.c+"00")),F.beginPath(),F.arc(s,a,e.abs(t),0,r),F.fillStyle=l,F.globalAlpha=this.vis,F.fill(),F.closePath();let c=o/250;if(c>=1&&this.g>y-1&&g.B(.5)){let t=e.abs(this.RB/7),i=t*e.sin(this.an),r=t*e.cos(this.an);this.an+=.01,F.fillStyle=this.lc1,F.fillRect(s+i,a+r,c,c),F.fillStyle=this.lc2,F.fillRect(s-i,a-r,c,c),F.fillStyle=this.dc1,F.fillRect(s+i,a-r,c,c),F.fillStyle=this.dc2,F.fillRect(s-i,a+r,c,c)}this.rG&&(F.beginPath(),F.strokeStyle=this.c+"30",1==this.rG&&F.arc(s-5*this.V[0]*o,a-5*this.V[1]*o,e.abs(t/4),0,r),F.lineWidth=.001*o,F.stroke(),F.closePath()),F.globalAlpha=1,this.vis+=.01}}let A=550,b=[],E=g.B(.3)?g.I(0,2):g.B(.65)?g.I(3,10):g.B(.65)?g.I(11,16):g.I(17,19);bV=.04,iDM=g.B(.65)?g.I(0,3):g.B(.65)?g.I(4,5):g.I(6,8),aM=g.B(.02)?4:g.I(0,3),dir=g.I(3,5);let S={Iris:dir,Creation:"☉◯✧░⦵⌽☰⦻〣"[iDM],Expansion:["F","E","GC","EC","SL"][aM],Palette:E};console.log(S,tokenData.hash);const R="attribute vec2 a_position;attribute vec2 a_texCoord;uniform vec2 u_res;varying vec2 vUv;void main(){vec2 clipSpace=a_position/u_res*2.-1.;gl_Position=vec4(clipSpace*vec2(1.,-1.),0.,1.);vUv=a_texCoord;}",P=`precision highp float;varying vec2 vUv;uniform sampler2D u_image;uniform float dl;uniform float t;const float dir=${dir}.,Pi=3.14159;float r(vec2 p){return fract(dot(p,vec2(12.9898,78.233))*43758.5453123);}float n(vec2 x){vec2 i=floor(x),l=fract(x),u=l*l*(3.-2.*l);float a=r(i+vec2(0,0)),b=r(i+vec2(1,0)),c=r(i+vec2(0,1)),d=r(i+vec2(1,1));return 2.*(a+(b-a)*u.x+(c-a)*u.y+(a-b-c+d)*u.x*u.y)-1.;}void main(){float nM=.5,tt=0.,off=n(vUv);mat2 mr=mat2(.96,.28,-.28,.96);for(float i=1.;i<3.;i++)mr*=mr,nM-=1./pow(2.,i)*n(pow(2.,i)*mr*vUv*${g.N(2,5)}-t/${g.N(50,200)});nM=clamp(nM,.25,.89);vec4 c=vec4(0.);for(float d=0.;d<Pi;d+=Pi/dir)for(float e=-17.;e<=17.;e++){float p=(e+off-.5)/17.,w=1.-abs(p);vec4 spl=texture2D(u_image,vUv+vec2(cos(d),sin(d))*dl*p*nM);c+=spl*w;tt+=w;}c/=tt;float l=length(c),m=smoothstep(1.15,1.731,l)*l*2.9,v=length(vUv-.5)/.8;vec4 L=c/l*m;v=smoothstep(1.,0.,v);gl_FragColor=vec4((c.rgb+L.rgb)*v,1.);}`;function N(t){return Array.from({length:t.length/3},((i,e)=>"#"+t.slice(3*e,3*e+3).split("").map((t=>(+t.charCodeAt()-333).toString(16).padStart(2,"0"))).join("")))}b=N(["ŤşŧŭśƃŸőųȠȷȍƃƯǝȯNJƟȺȒƤǵȧȆ","ŭŘŎōƀƢŘţųȿǒżƵȞȳɆƵōdzȧȤȬȐȘ","ŤőŒŖšŲōŭŽǵŭŧƻȂȱɌǘōȽȠǻȑȬȨ","ŘţųȁȪȪżŢŤƒǦȂǵƘŵȑȱǯ","šƃƏŜǘǚȹǧŶȧȟȥǵŭŧšƃƏȾɋȓ","šōŖŤşŧżŲƊƭƟǁȱƮƨȝŽƉǚǾȑɅȋǂ","ūūƊŶƀǨǁDZȉȃȣșɌƇŭūūƊȾɋȓ","ŞōƢżŢŤɀŷōŷǸȜȲƒŕƹȇȂȐȗǮɈȷȂ","ƛƀLjŭśƃȭƐƿƧǶȳŧŏŝƗƛƶȬǰȘɃȦǰ","ŠŠŐőŏŔƪƍŻȼǴżȼDŽŤDŽȌǴɈȷȂȑȬȨ","ŗŗŧşŏŏɌǘōŽŭŶƱǫȵǞnjɌ","ƒƐƿżŶưȼǡƹȑǴNJƽǔnj","ůůůDŽDŽDŽƑƑƑǷǷǷǭǭǭšššșșș","ūūƊŶŸŽƦźźƊƍƓȫȆƵưƴƽɋɊȫ","őŏŔōŭŽƬƥƝƛƀLjƭDzǷƭƟǁɇȺȎȍǿǤ","ŭŘŎȾȢǠƑƀŞɆŶōōƀƢǒȄǽȼȤǴ","ƇŧŷɃDZƍƑōžɀƩƘɆȖƲōƀƢɌɌǾ","ƛƀLjƦȉǙǯȞƿɂǨŠȱƵƚ","ȭǷƉƋżƨųŞſɌȅƼȇƩşƽǔnj","ūūƊȘſƋōŭŽōǬǼȷƴƍȹȕƝ"][E]);let I=[],w=b.length,C=3,y=6,_=8,B=[];for(let t=0;t<w;t++){B[t]=[];for(let i=0;i<w;i++)B[t][i]={a:g.I(-5,5),c:g.N(-2,5),s:t==i?g.N(1,2):g.N(-3,3)}}function T(t){for(let i=0;i<w;i++){let e=b[i],s=g.N(.04,.09),r=g.N(.04,.09),a=g.N(.04,.09),h=1e-4*g.N(15,g.N(15,70)),n=.001*g.N(1,5),l=.1*g.N(1,g.N(1,g.N(1,7))),c=.1*g.N(.5,g.N(.5,g.N(.5,2))),f=.1*g.N(1,g.N(1,g.N(5,10))),d=i>=y?1:0;spotsNumber=i<C?t/w/3:t/w;for(let t=0;t<spotsNumber;t++)radius=i<y?g.B(.3)?g.I(o/10,o/6):g.I(o/200,g.I(o/100,g.I(o/100,o/50))):g.B(.1)?g.I(o/10,o/5):g.I(o/200,g.I(o/150,g.I(o/100,o/10))),I.push(new v(h,n,f,c,l,a,r,s,e,0|radius,i,g.B(.2)?d:0))}}T(A);const x=document.createElement("canvas"),F=x.getContext("2d");x.width=h,x.height=n;let D=1100,U=2==aM?900:500,M=0,L=1e3,V=D+U+M,G=[.25+g.N(0,.5),.25+g.N(0,.5)];if(aM>0)for(let t of I)t.pS=.001,t.pC=.001,t.pA=.001;function O(){F.fillStyle="#00000001",F.fillRect(0,0,x.width,x.height);for(let t of I){if(t.E(),0==aM&&t.F(I),1==aM)if(L>D&&L<V-M){let i=(L-D)/U;t.CO(d(0,1,i))}else L>=V-M?L==V-M&&t.EX():t.F(I);if(2==aM&&L>D){let i=(L-D)/U;t.CG(i**3,4)}3==aM&&t.CG(1.51,g.N(3,5)),4==aM&&t.CG(.151,.01),t.U(),t.SH()}at(),L++,L==V&&(L%=V,G=[.1+g.N(0,.8),.1+g.N(0,.8)]),i.requestAnimationFrame(O)}function k(t,i,e){var s=t.createShader(i);return t.shaderSource(s,e),t.compileShader(s),s}function X(t,i,e){var s=t.createProgram();return t.attachShader(s,i),t.attachShader(s,e),t.linkProgram(s),s}function $(t,i,e,s,r){let a=i,h=i+s,n=e,o=e+r;t.bufferData(t.ARRAY_BUFFER,new Float32Array([a,n,h,n,a,o,a,o,h,n,h,o]),t.STATIC_DRAW)}const H=t.createElement("canvas"),W=H.getContext("webgl");t.body.appendChild(H),H.width=h,H.height=n,H.style.width="100%",H.style.height="100%",W.drawingBufferColorSpace="display-p3";let Y=k(W,W.VERTEX_SHADER,R),q=k(W,W.FRAGMENT_SHADER,P),j=X(W,Y,q),z=W.getAttribLocation(j,"a_position"),J=W.getAttribLocation(j,"a_texCoord"),K=W.ARRAY_BUFFER,Q=W.TEXTURE_2D;var Z=W.createBuffer();W.bindBuffer(K,Z),$(W,0,0,x.width,x.height);var tt=W.createBuffer();W.bindBuffer(K,tt),W.bufferData(K,new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]),W.STATIC_DRAW);var it=W.createTexture();W.bindTexture(Q,it),W.texParameteri(Q,W.TEXTURE_WRAP_S,W.CLAMP_TO_EDGE),W.texParameteri(Q,W.TEXTURE_WRAP_T,W.CLAMP_TO_EDGE),W.texParameteri(Q,W.TEXTURE_MIN_FILTER,W.NEAREST),W.texParameteri(Q,W.TEXTURE_MAG_FILTER,W.NEAREST);let et=W.getUniformLocation(j,"u_res"),st=W.getUniformLocation(j,"dl"),rt=W.getUniformLocation(j,"t");function at(){W.texImage2D(W.TEXTURE_2D,0,W.RGBA,W.RGBA,W.UNSIGNED_BYTE,F.canvas),W.useProgram(j),W.enableVertexAttribArray(z),W.bindBuffer(K,Z),W.vertexAttribPointer(z,2,W.FLOAT,!1,0,0),W.enableVertexAttribArray(J),W.bindBuffer(K,tt),W.vertexAttribPointer(J,2,W.FLOAT,!1,0,0),W.uniform2f(et,W.canvas.width,W.canvas.height),W.uniform1f(st,bV),W.uniform1f(rt,e.abs(L)),W.drawArrays(W.TRIANGLES,0,6)}function ht(){let i=parseInt(+new URLSearchParams(window.location.search).get("multiplier"))||4,e=h*i|0,s=n*i|0;function r(t,i){W.canvas.width=F.canvas.width=t,W.canvas.height=F.canvas.height=i,W.viewport(0,0,t,i),W.clear(W.COLOR_BUFFER_BIT),W.drawArrays(W.TRIANGLES,0,6)}r(e,s);let a=t.createElement("canvas"),o=a.getContext("2d"),l=new Image;[a.width,a.height]=[e,s],o.drawImage(H,0,0),l.src=a.toDataURL();let c=t.createElement("a");c.href=l.src,c.download=`Gravity ${e}x${s}px ${tokenData.hash}.png`,c.style.display="none",t.body.appendChild(c),c.click(),t.body.removeChild(c),r(h,n)}W.viewport(0,0,W.canvas.width,W.canvas.height),i.requestAnimationFrame(O);const nt=t=>{"s"===t.key&&ht()};t.addEventListener("keydown",nt);