0xab0b…f9ad

All memos sent from and to 0xab0b…f9ad.

*Exstasis* is an exploration in abstract pixel painting. Inspired by the work 20th-century abstract expressionists like Miró and Kandinsky, along with 16-bit pixel art aesthetics, the algorithm filters organic curvilinear forms through digital noise and pixel dithering to achieve a uniquely fluid effect. *Exstasis* revels in ecstatic movement and rich patterns informed by the very colors that comprise it. Central to the project is a pixelating technique known as Bayer dithering. This method of ordered dithering was invented to approximate shading and color tone when the available colors and number of pixels were limited by the hardware constraints of the time (think Sega Genesis, Commodore 64, etc). Although advancements in digital displays have since rendered this sort of technique all but obsolete, *Exstasis* employs the dither to deconstruct colors into their fundamental components, creating fascinating grid-like structures which weave throughout the artwork. The dithering is paired with a more sophisticated form of digital noise called fractal Brownian motion to warp the forms in unexpected and compelling ways. By fusing pixel art's nostalgic allure with a more abstract futuristic technique, *Exstasis* manifests as a uniquely fresh and distinct artwork. As a generative artist, I have always been most interested in exploring the facets of digital art which are unique to the medium, and *Exstasis* is my truest exploration to date. Constantly evolving and in motion, with a distinctly digital aesthetic, this work could not have been realized in any other medium. ░░▒▒▓▓▓▓▒▒░░
let e;S=Uint32Array.from([0,1,s=t=2,3].map((t=>parseInt(tokenData.hash.substr(8*t+2,8),16)))),R=e=>(t=S[3],S[3]=S[2],S[2]=S[1],S[1]=s=S[0],t^=t<<11,S[0]^=t^t>>>8^s>>>19,S[0]/2**32);const i=(t,e)=>t+(e-t)*R(),o=(t,e)=>Math.floor(i(t,e+1)),a=t=>{const e=t.map((t=>t[0])).reduce(((t,e)=>t+e),0);let s=i(0,e),o=0;for(let e=0;e<t.length-1;e++)if(o+=t[e][0],o>=s)return t[e][1];return t[t.length-1][1]},r=[[["ABC3AA"],["214E38","5E7C4B","9DAD98"],["596f50","5E7C4B","214E38"],["CE8CA4","D79976","B1685B"],["5E7C4B","214E38","9DAD98"],["214E38","5E7C4B","9DAD98"]],[["4B1B4B"],["49734A","2F5033","274627"],["C88587","BC5C64"],["3A4967","7B86AA","2C3559"],["C5903C","C79D66","905E12"],["ACAB9E","D6B16E","BBA3AA"]],[["FCBAB9"],["3E3F38","616760","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","C67668","CCAA99"],["B3340B","DB7429","E44D27"]],[["DBC3CA"],["a9184a","cc4d6d","a4133c"],["0474B9","4A94D0","28558A"],["048C64","276A62"],["EAB004","DDAB2E"],["BBA3AA","ACAB9E","CCAA99"]],[["DACAB0"],["CDB079","A5843A","CCA659"],["8182C2","6198A1","5F85A8"],["576B37","94A983","4B4826"],["BD3631","BC4444","E28892"],["7B8E9B","969BB1","475158"]],[["4e1320"],["5C0300","6E260E","800020"],["DDAA99","CEB397","D2B48C"],["48260D","6F4037","70101B"],["6E3320","967969","5C2C06"],["CEB397","CFB2A8","DDAA99"]],[["C1A6E3"],["9D7CC9","8A64FF","4912B2"],["8364FF","6E3BC1","B390E5"],["5C22A9","9D7CC9","4F28D3"],["4F28D3","A990E5","9D7CC9"],["9D7CC9","8A64FF","7959B4"]],[["2A403F"],["495F5B","C89C82","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","D08F65","C1774E"],["B3340B","DB7429","E44D27"]],[["DDBEA9"],["C2997F","966A50","6E3320"],["D36628","B86233","DB7429"],["9E522D","C65B1F","C67668"],["6D4032","6E3320","7C4533"],["C59B82","F1BD95","C1774E"]],[["364536"],["E68B56","E7A967","F1BD95"],["E7A967","D08F65","E68B56"],["554E22","4B4826","554E22"],["E68B56","6D4032","E69B56"],["6E3320","7c4533","6D4032"]],[["302066"],["8948d8","4F28D3","8182C2"],["da4a4b","cc4d6d","AC4F7A"],["e96e1c","a34a0e","e96b18"],["B3340B","DB7429","E44D27"],["4F28D3","7E3FCD"]],[["690505"],["9B2A0D","B72609","940804"],["B3340B","DB7429","E44D27"],["DB501F","E5881C","e96e1c"],["D1AA85","8C1426","D65747"],["D1AA85","A27174","C89C82"]],[["B7BAD3"],["111F49","828CC6","262F81"],["7A9AE4","0C2555","88A3C4"],["111F49","526D9B","9EACE4"],["526D9B","564CE5","7A8bD4"],["7CA1E8","828CC6","111F49"],["50439B","9EACE4","4672AA"]],[["D1B2E8"],["E23E5D","8948d8","842058"],["944CF4","3363F6","4F28D3"],["FCAC14","D89711","e96e1c"],["FB6205","FA4C05","cc4d6d"],["046333","213C1A","A7A07E"]]];let n,l,c;const f=[-.5,0,-.375,.125,.25,-.25,.375,-.125,-.3125,.1875,-.4375,.0625,.4375,-.0625,.3125,-.1875];let m,p,d,g=!0,C=!1,u={reg:[1.5,1.5],high:[2,1.5]},D=a([[9,"reg"],[1,"m"]]),B=("m"===D?30:40)+o(-10,10),A=("m"===D?50:85)+o(-10,10),x="m"===D?40:70,v=.7;let y,E,b,F,_,M,z,k,U=550,P=U,G=o(1,4),T={fa:.15,f:-.04,aM:-.005,f1:1.18,f2:2.98,f3:8},V={mega:{fa:.21,f:-.08,aM:-.005},high:{fa:.18,f:-.06,aM:-.005},medium:{fa:.15,f:-.04,aM:-.005}},I=a([[18,"normal"],[2,"wider"],[1,"micro"]]),j=1;const W=i(0,1e6);let H;function setup(){desiredAspectRatio=5/3;const t=window.innerHeight,s=window.innerWidth;t<=s&&1.6666666666666667*t<s?(w=1.6666666666666667*max(window.innerHeight,1),h=max(window.innerHeight,1)):(w=max(window.innerWidth,1),h=max(window.innerWidth,1)/1.6666666666666667),createCanvas(w,h,WEBGL),e=h/800,pB=r[o(0,r.length-1)],j=1/e,pixelDensity(j),smooth(),d=a([[30,"reg"],[1,"high"]]),H=a([[1,"mega"],[8,"high"]]),T.fa=V[H].fa,T.f=V[H].f,T.aM=V[H].aM,T.f2+=i(0,50),T.f1+=i(0,20),v+=i(-.05,.05),U=550,U+=o(-125,75),"micro"===I&&(U-=o(20,100)),P=U,m=u[d][0],p=u[d][1],E=50,b=30,y=.2,c=color("#"+pB[0][0]),M=createGraphics(width,height),M.pixelDensity(2*j),M.background(0),z=createGraphics(width,height),z.pixelDensity(2*j),z.background(0),F=createGraphics(width,height),F.pixelDensity(j),_=createGraphics(width,height),_.pixelDensity(j),k=new q(F,n,M),n=new X(50,30,10,0),noiseDetail(8,.4),noiseSeed(W),l=createShader("attribute vec3 aPosition;attribute vec2 aTexCoord;uniform mat4 uProjectionMatrix,uModelViewMatrix;varying vec2 vTexCoord;varying vec3 vPos;void main(){vTexCoord=aTexCoord;vec4 positionVec4=vec4(aPosition,1);positionVec4.xy=positionVec4.xy*2.-1.;vPos=normalize((uProjectionMatrix*uModelViewMatrix*positionVec4).xyz);gl_Position=positionVec4;}","precision mediump float;uniform float b[16];uniform sampler2D l,lD,tex,texD;uniform vec2 res;uniform float t;uniform vec3 bgc;vec3 cc=bgc/255.;uniform float dStep,bgD;uniform bool w;uniform float fa,fv,aM,f1,f2,f3;float r(vec2 p){vec3 p3=fract(vec3(p.xyx)*.1031);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float nf(vec2 st){vec2 i=floor(st),f=fract(st);float a=r(i),b=r(i+vec2(1,0)),c=r(i+vec2(0,1)),d=r(i+vec2(1));vec2 u=f*f*(3.-2.*f);return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y;}float fbm2(vec2 st){float v=fv,a=fa;vec2 shift=vec2(100);mat2 rot=mat2(.87758256189,.4794255386,-.4794255386,.87758256189);for(int i=0;i<4;++i)rot=mat2(.87758256189*float(i),.4794255386,-.4794255386*float(i),.87758256189*float(i*2)),v+=a*nf(st),st=rot*st*2.+shift,a*=aM;return v;}float f(vec2 uv){vec2 p=uv*f3;p=vec2(fbm2(p+f1+t),fbm2(p+f2+t));return fbm2(p*f3);}float i(float s,float rot){vec2 fc=gl_FragCoord.xy;if(rot!=0.){float c=1.,s=0.,mo=mod(rot,8.);if(mo==1.)c=.7071067812,s=.7071067812;else if(mo==2.)c=0.,s=1.;else if(mo==3.)c=-.7071067812,s=.7071067812;else if(mo==4.)c=-1.,s=0.;else if(mo==5.)c=-.7071067812,s=-.7071067812;else if(mo==6.)c=0.,s=-1.;else if(mo==7.)c=.7071067812,s=-.7071067812;mat2 m=mat2(c,s,-s,c);fc=m*(gl_FragCoord.xy-res.xy);}int x=int(mod(fc.x,4.*s)/s),y=int(mod(fc.y,4.*s)/s),j=x+y*4;for(int i=0;i<16;i++)if(i==j)return b[i]/16.;}float d(float c,float pAmt,float ang){float c_r=0.,b=0.;b=i(pAmt,ang);float o_c=1.-c+10.*b;if(o_c<.48)c_r=1.;return c_r;}vec3 dC(vec3 c,float pAmt,float ang){return vec3(d(c.x,pAmt,ang),d(c.y,pAmt,ang),d(c.z,pAmt,ang));}void main(){vec2 uv=gl_FragCoord.xy/res.xy;uv.y=1.-uv.y;float a=0.,dA=dStep,fbm=f(uv);vec2 uvD=uv;uvD+=fbm;uv+=fbm;vec4 _l=texture2D(l,uv),ld=texture2D(lD,uvD),t=texture2D(tex,uv),tD=texture2D(texD,uvD);vec3 c=_l.xyz,cD=ld.xyz;if(tD.z<=.99&&t.z<=.99)c=cc,t=vec4(0);else if(tD.z>.99&&t.z>.99)c=mix(c,cD,.75);else if(tD.z>.99)c=cD,t=tD;if(t.y>.4)a=floor(t.y*10.);if(t.z==0.)dA=bgD,a=0.;c=dC(c,dA,a);gl_FragColor=vec4(c.xyz,1);}"),document.getElementById("defaultCanvas0").imageSmoothingEnabled=!1}let L=0,N=0;function draw(){C||(N++,L+=7e-4,g&&(L+=.0011)),n.display(),shader(l),l.setUniform("res",[width*pixelDensity(),height*pixelDensity()]),l.setUniform("b",f),l.setUniform("l",F),l.setUniform("lD",_),l.setUniform("texD",z),l.setUniform("tex",M),l.setUniform("dStep",m),l.setUniform("bgD",p),l.setUniform("t",L),l.setUniform("fa",T.fa),l.setUniform("fv",T.f),l.setUniform("aM",T.aM),l.setUniform("f1",T.f1),l.setUniform("f2",T.f2),l.setUniform("f3",T.f3),l.setUniform("bgc",[red(c),green(c),blue(c)]),rect(0,0,width,height),N===P&&(g=!1)}function keyTyped(){" "===key&&(C||console.log("Stopped at frame "+N),C=!C)}class X{constructor(t,e,i){switch(this.angles=[],this.xM=.05,this.yM=.05,this.resX=t,this.resY=e,this.speed=y,this.curves=[],I){case"wider":this.top_x=.15*width,this.bottom_x=.85*width,this.top_y=.15*height,this.bottom_y=.85*height;break;case"normal":this.top_x=.2*width,this.bottom_x=.8*width,this.top_y=.2*height,this.bottom_y=.8*height;break;case"micro":this.top_x=.25*width,this.bottom_x=.75*width,this.top_y=.3*height,this.bottom_y=.7*height}this.t=0,this.rand=R(),this.form=new J,this.uGS=new Set;for(let i=0;i<t;i++){this.angles.push([]);for(let t=0;t<e;t++){let e=this.updateAngle(i,t);this.angles[i].push(e)}}this.gamt=8;for(let t=0;t<9;t++)for(let e=0;e<9;e++){let i=map(t,0,8,this.top_x,this.bottom_x),s=map(e,0,8,this.top_y,this.bottom_y);this.inFrame(i,s)&&this.uGS.add([t,e])}for(let t=0;t<i;t++){let t=this.cR(),e=t[0],i=t[1];this.addCurve(e,i)}}aFC(t,e){let i=int(map(t,this.top_x,this.bottom_x,0,this.angles.length-1)),s=int(map(e,this.top_y,this.bottom_y,0,this.angles[0].length-1));return(i>this.angles.length-1||i<0)&&(i=0),(s>this.angles[0].length-1||s<0)&&(s=0),this.angles[i][s]}inFrame(t,e){return t>=this.top_x&&t<=this.bottom_x&&e>=this.top_y&&e<=this.bottom_y}cR(){let t=-1,e=-1;if(this.uGS.size){let o=!1;for(;!o&&this.uGS.size;){let h=(s=this.uGS,[...s][Math.floor(R()*s.size)]),a=map(h[0],0,this.gamt,this.top_x,this.bottom_x),r=map(h[1],0,this.gamt,this.top_y,this.bottom_y);if(this.uGS.delete(h),this.inFrame(a,r)){let s=(this.bottom_x-this.top_x)/this.gamt*.25,h=(this.bottom_y-this.top_y)/this.gamt*.25;t=a+i(-s,s),e=r+i(-h,h),o=!0}}}var s;return-1!==t&&-1!==e||(t=i(this.top_x,this.bottom_x),e=i(this.top_y,this.bottom_y)),[t,e]}addCurve(t,e){let i=new Y(t,e,this);i.angle=this.aFC(t,e),this.curves.push(i)}updateAngle(t,e){let i=0,s=map(t,0,this.angles.length-1,this.top_x,this.bottom_x),o=map(e,0,this.angles[0].length-1,this.top_y,this.bottom_y);return i=noise(t*this.xM+1.5*this.t,e*this.yM+1.5*this.t)*PI*2+G*PI*.5,3===G&&(i=.49*PI+atan2(o-h/2,s-w/2)-.5*map(noise(t*this.xM+this.t,e*this.yM+this.t),0,1,0,PI)),i}update(){for(let t=0;t<this.angles.length;t++)for(let e=0;e<this.angles[0].length;e++){let i=this.updateAngle(t,e);this.angles[t][e]=i}g&&(this.t+=.005*this.speed)}drawCurve(t){let e=t.x,i=t.y;const s=t.stepLength;let o=t.aliveCount/t.fullAlive;o=min(o,1);let h=color("#"+pB[t.ci][t.index%pB[t.ci].length]),a=color("#"+pB[t.ci][(t.index+1)%pB[t.ci].length]),r=this.aFC(e,i);t.curly?r+=sin(this.t*map(t.rand2,0,1,10,30)+map(t.rand,0,1,0,100)):r+=.3*t.rand*cos(this.t*map(t.rand2,0,1,2,10)+map(t.rand,0,1,0,100));let n=1===t.shapeType?.05:.6;if(t.angle=lerp(r,n),t.angle=r,g&&!C){let r=t.grow?t.th*o:t.th;h=lerpColor(h,a,o);let n=t.rand2<.25?r+2*t.rand2:r,l=t.rand<.25?r+2*t.rand:r;k.paint(e,i,n,l,h,t.rand,t.rand2,t.angle,t.shapeType,t.fbm);let c=t.angle;t.x+=this.speed*s*cos(c)*(t.curly?2:1),t.y+=this.speed*s*sin(c)*(t.curly?2:1),t.aliveCount+=t.aliveRate*this.speed,this.inFrame(t.x,t.y)||(t.aliveCount*=1.5)}g&&t.aliveCount>t.fullAlive&&t.newPos()}display(){this.update();for(let t=0;t<this.curves.length;t++){const e=this.curves[t];this.drawCurve(e)}}}class Y{constructor(t,e,i){this.x=t,this.y=e,this.parent=i,this.randomize()}randomize(){this.stepLength=e*i(2,3),this.th=e*i(B,A),this.ci=o(1,5),this.index=o(0,2),this.rand=R(),this.rand2=R(),this.aliveCount=0,this.fullAlive=o(20,x),this.aliveRate=i(.7,2),this.grow=R()<v,this.shapeType=R()>.4?0:1,this.curly=R()>.4,this.angle=this.parent.aFC(this.x,this.y),this.fbm=R()<.5}newPos(){let t=this.parent.cR();this.x=t[0],this.y=t[1],this.randomize()}}class q{constructor(t){this.l=t,t.rectMode(CENTER),this.l.background(c),_.background(c)}paint(t,i,s,o,h,a,r,n,l,c){let f=this.l,m=M;c&&(f=_,m=z),f.fill(h),f.noStroke(),f.rectMode(CENTER),m.noStroke(),m.rectMode(CENTER),m.colorMode(RGB);let p=.97,d=color(map(a,0,1,0,255),map(r,0,1,0,255),255);if(m.fill(d),m.stroke(d),1===l||2===l){let a=1==l?10*e:0;f.push(),f.translate(t,i),f.rotate(n),f.fill(h),f.rect(0,0,s,o,a),f.pop(),m.push(),m.translate(t,i),m.rotate(n),m.rect(0,0,s*p,o*p,a),m.pop()}else f.fill(h),f.ellipse(t,i,s,o),m.ellipse(t,i,s*p,o*p)}getColor(t,e,i){return this.getColorFromBlock(this.getColorBlock(t,e),i)}getColorBlock(t,e){const i=[1,2,3,4,5];let s=0;return n&&n.form&&n.form.shapes.forEach(((i,o)=>{s+=i.getBlock(t,e,s)})),s=s<0?i.length-1:s,i[s%i.length]}getColorFromBlock(t,e){return color("#"+pB[t][e%pB[t].length])}}class J{constructor(){this.shapes=[],this.shapes.push(new K(F.width/2,F.height/2,F.height/2,F.height/2,0,3)),this.shapes.push(new K(F.width*i(.6,1),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2)),this.shapes.push(new K(F.width*i(0,.4),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2))}}class K{constructor(t,e,i,s,o,h){this.x=t,this.y=e,this.w=i,this.h=s,this.type=o,this.level=h}getBlock(t,e,i){let s=dist(t,e,this.x,this.y);return s<this.w&&(i+=int(map(s,0,this.w,0,this.level))),i}}
let e;S=Uint32Array.from([0,1,s=t=2,3].map((t=>parseInt(tokenData.hash.substr(8*t+2,8),16)))),R=e=>(t=S[3],S[3]=S[2],S[2]=S[1],S[1]=s=S[0],t^=t<<11,S[0]^=t^t>>>8^s>>>19,S[0]/2**32);const i=(t,e)=>t+(e-t)*R(),o=(t,e)=>Math.floor(i(t,e+1)),a=t=>{const e=t.map((t=>t[0])).reduce(((t,e)=>t+e),0);let s=i(0,e),o=0;for(let e=0;e<t.length-1;e++)if(o+=t[e][0],o>=s)return t[e][1];return t[t.length-1][1]},r=[[["ABC3AA"],["214E38","5E7C4B","9DAD98"],["596f50","5E7C4B","214E38"],["CE8CA4","D79976","B1685B"],["5E7C4B","214E38","9DAD98"],["214E38","5E7C4B","9DAD98"]],[["4B1B4B"],["49734A","2F5033","274627"],["C88587","BC5C64"],["3A4967","7B86AA","2C3559"],["C5903C","C79D66","905E12"],["ACAB9E","D6B16E","BBA3AA"]],[["FCBAB9"],["3E3F38","616760","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","C67668","CCAA99"],["B3340B","DB7429","E44D27"]],[["DBC3CA"],["a9184a","cc4d6d","a4133c"],["0474B9","4A94D0","28558A"],["048C64","276A62"],["EAB004","DDAB2E"],["BBA3AA","ACAB9E","CCAA99"]],[["DACAB0"],["CDB079","A5843A","CCA659"],["8182C2","6198A1","5F85A8"],["576B37","94A983","4B4826"],["BD3631","BC4444","E28892"],["7B8E9B","969BB1","475158"]],[["4e1320"],["5C0300","6E260E","800020"],["DDAA99","CEB397","D2B48C"],["48260D","6F4037","70101B"],["6E3320","967969","5C2C06"],["CEB397","CFB2A8","DDAA99"]],[["C1A6E3"],["9D7CC9","8A64FF","4912B2"],["8364FF","6E3BC1","B390E5"],["5C22A9","9D7CC9","4F28D3"],["4F28D3","A990E5","9D7CC9"],["9D7CC9","8A64FF","7959B4"]],[["2A403F"],["495F5B","C89C82","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","D08F65","C1774E"],["B3340B","DB7429","E44D27"]],[["DDBEA9"],["C2997F","966A50","6E3320"],["D36628","B86233","DB7429"],["9E522D","C65B1F","C67668"],["6D4032","6E3320","7C4533"],["C59B82","F1BD95","C1774E"]],[["364536"],["E68B56","E7A967","F1BD95"],["E7A967","D08F65","E68B56"],["554E22","4B4826","554E22"],["E68B56","6D4032","E69B56"],["6E3320","7c4533","6D4032"]],[["302066"],["8948d8","4F28D3","8182C2"],["da4a4b","cc4d6d","AC4F7A"],["e96e1c","a34a0e","e96b18"],["B3340B","DB7429","E44D27"],["4F28D3","7E3FCD"]],[["690505"],["9B2A0D","B72609","940804"],["B3340B","DB7429","E44D27"],["DB501F","E5881C","e96e1c"],["D1AA85","8C1426","D65747"],["D1AA85","A27174","C89C82"]],[["B7BAD3"],["111F49","828CC6","262F81"],["7A9AE4","0C2555","88A3C4"],["111F49","526D9B","9EACE4"],["526D9B","564CE5","7A8bD4"],["7CA1E8","828CC6","111F49"],["50439B","9EACE4","4672AA"]],[["D1B2E8"],["E23E5D","8948d8","842058"],["944CF4","3363F6","4F28D3"],["FCAC14","D89711","e96e1c"],["FB6205","FA4C05","cc4d6d"],["046333","213C1A","A7A07E"]]];let n,l,c;const f=[-.5,0,-.375,.125,.25,-.25,.375,-.125,-.3125,.1875,-.4375,.0625,.4375,-.0625,.3125,-.1875];let m,p,d,g=!0,C=!1,u={reg:[1.5,1.5],high:[2,1.5]},D=a([[9,"reg"],[1,"m"]]),B=("m"===D?40:30)+o(-10,10),A=("m"===D?50:80)+o(-10,10),x="m"===D?40:70,v=.7;let y,E,b,F,_,M,z,k,U=550,P=U,G=o(1,4),T={fa:.15,f:-.04,aM:-.005,f1:1.18,f2:2.98,f3:8},V={mega:{fa:.21,f:-.08,aM:-.005},high:{fa:.18,f:-.06,aM:-.005},medium:{fa:.15,f:-.04,aM:-.005}},I=a([[18,"normal"],[2,"wider"],[1,"micro"]]),j=1;const W=i(0,1e6);let H;function setup(){desiredAspectRatio=5/3;const t=window.innerHeight,s=window.innerWidth;t<=s&&1.6666666666666667*t<s?(w=1.6666666666666667*max(window.innerHeight,1),h=max(window.innerHeight,1)):(w=max(window.innerWidth,1),h=max(window.innerWidth,1)/1.6666666666666667),createCanvas(w,h,WEBGL),e=h/800,pB=r[o(0,r.length-1)],j=1/e,pixelDensity(j),smooth(),d=a([[30,"reg"],[1,"high"]]),H=a([[1,"mega"],[8,"high"]]),T.fa=V[H].fa,T.f=V[H].f,T.aM=V[H].aM,T.f2+=i(0,50),T.f1+=i(0,20),v+=i(-.05,.05),U=550,U+=o(-125,75),"micro"===I&&(U-=o(20,100)),P=U,m=u[d][0],p=u[d][1],E=50,b=30,y=.2,c=color("#"+pB[0][0]),M=createGraphics(width,height),M.pixelDensity(2*j),M.background(0),z=createGraphics(width,height),z.pixelDensity(2*j),z.background(0),F=createGraphics(width,height),F.pixelDensity(j),_=createGraphics(width,height),_.pixelDensity(j),k=new q(F,n,M),n=new X(50,30,10,0),noiseDetail(8,.4),noiseSeed(W),l=createShader("attribute vec3 aPosition;attribute vec2 aTexCoord;uniform mat4 uProjectionMatrix,uModelViewMatrix;varying vec2 vTexCoord;varying vec3 vPos;void main(){vTexCoord=aTexCoord;vec4 positionVec4=vec4(aPosition,1);positionVec4.xy=positionVec4.xy*2.-1.;vPos=normalize((uProjectionMatrix*uModelViewMatrix*positionVec4).xyz);gl_Position=positionVec4;}","precision mediump float;uniform float b[16];uniform sampler2D l,lD,tex,texD;uniform vec2 res;uniform float t;uniform vec3 bgc;vec3 cc=bgc/255.;uniform float dStep,bgD;uniform bool w;uniform float fa,fv,aM,f1,f2,f3;float r(vec2 p){vec3 p3=fract(vec3(p.xyx)*.1031);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float nf(vec2 st){vec2 i=floor(st),f=fract(st);float a=r(i),b=r(i+vec2(1,0)),c=r(i+vec2(0,1)),d=r(i+vec2(1));vec2 u=f*f*(3.-2.*f);return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y;}float fbm2(vec2 st){float v=fv,a=fa;vec2 shift=vec2(100);mat2 rot=mat2(.87758256189,.4794255386,-.4794255386,.87758256189);for(int i=0;i<4;++i)rot=mat2(.87758256189*float(i),.4794255386,-.4794255386*float(i),.87758256189*float(i*2)),v+=a*nf(st),st=rot*st*2.+shift,a*=aM;return v;}float f(vec2 uv){vec2 p=uv*f3;p=vec2(fbm2(p+f1+t),fbm2(p+f2+t));return fbm2(p*f3);}float i(float s,float rot){vec2 fc=gl_FragCoord.xy;if(rot!=0.){float c=1.,s=0.,mo=mod(rot,8.);if(mo==1.)c=.7071067812,s=.7071067812;else if(mo==2.)c=0.,s=1.;else if(mo==3.)c=-.7071067812,s=.7071067812;else if(mo==4.)c=-1.,s=0.;else if(mo==5.)c=-.7071067812,s=-.7071067812;else if(mo==6.)c=0.,s=-1.;else if(mo==7.)c=.7071067812,s=-.7071067812;mat2 m=mat2(c,s,-s,c);fc=m*(gl_FragCoord.xy-res.xy);}int x=int(mod(fc.x,4.*s)/s),y=int(mod(fc.y,4.*s)/s),j=x+y*4;for(int i=0;i<16;i++)if(i==j)return b[i]/16.;}float d(float c,float pAmt,float ang){float c_r=0.,b=0.;b=i(pAmt,ang);float o_c=1.-c+10.*b;if(o_c<.48)c_r=1.;return c_r;}vec3 dC(vec3 c,float pAmt,float ang){return vec3(d(c.x,pAmt,ang),d(c.y,pAmt,ang),d(c.z,pAmt,ang));}void main(){vec2 uv=gl_FragCoord.xy/res.xy;uv.y=1.-uv.y;float a=0.,dA=dStep,fbm=f(uv);vec2 uvD=uv;uvD+=fbm;uv+=fbm;vec4 _l=texture2D(l,uv),ld=texture2D(lD,uvD),t=texture2D(tex,uv),tD=texture2D(texD,uvD);vec3 c=_l.xyz,cD=ld.xyz;if(tD.z<=.99&&t.z<=.99)c=cc,t=vec4(0);else if(tD.z>.99&&t.z>.99)c=mix(c,cD,.75);else if(tD.z>.99)c=cD,t=tD;if(t.y>.4)a=floor(t.y*10.);if(t.z==0.)dA=bgD,a=0.;c=dC(c,dA,a);gl_FragColor=vec4(c.xyz,1);}"),document.getElementById("defaultCanvas0").imageSmoothingEnabled=!1}let L=0,N=0;function draw(){C||(N++,L+=7e-4,g&&(L+=.0011)),n.display(),shader(l),l.setUniform("res",[width*pixelDensity(),height*pixelDensity()]),l.setUniform("b",f),l.setUniform("l",F),l.setUniform("lD",_),l.setUniform("texD",z),l.setUniform("tex",M),l.setUniform("dStep",m),l.setUniform("bgD",p),l.setUniform("t",L),l.setUniform("fa",T.fa),l.setUniform("fv",T.f),l.setUniform("aM",T.aM),l.setUniform("f1",T.f1),l.setUniform("f2",T.f2),l.setUniform("f3",T.f3),l.setUniform("bgc",[red(c),green(c),blue(c)]),rect(0,0,width,height),N===P&&(g=!1)}function keyTyped(){" "===key&&(C||console.log("Stopped at frame "+N),C=!C)}class X{constructor(t,e,i){switch(this.angles=[],this.xM=.05,this.yM=.05,this.resX=t,this.resY=e,this.speed=y,this.curves=[],I){case"wider":this.top_x=.15*width,this.bottom_x=.85*width,this.top_y=.15*height,this.bottom_y=.85*height;break;case"normal":this.top_x=.2*width,this.bottom_x=.8*width,this.top_y=.2*height,this.bottom_y=.8*height;break;case"micro":this.top_x=.25*width,this.bottom_x=.75*width,this.top_y=.3*height,this.bottom_y=.7*height}this.t=0,this.rand=R(),this.form=new J,this.uGS=new Set;for(let i=0;i<t;i++){this.angles.push([]);for(let t=0;t<e;t++){let e=this.updateAngle(i,t);this.angles[i].push(e)}}this.gamt=8;for(let t=0;t<9;t++)for(let e=0;e<9;e++){let i=map(t,0,8,this.top_x,this.bottom_x),s=map(e,0,8,this.top_y,this.bottom_y);this.inFrame(i,s)&&this.uGS.add([t,e])}for(let t=0;t<i;t++){let t=this.cR(),e=t[0],i=t[1];this.addCurve(e,i)}}aFC(t,e){let i=int(map(t,this.top_x,this.bottom_x,0,this.angles.length-1)),s=int(map(e,this.top_y,this.bottom_y,0,this.angles[0].length-1));return(i>this.angles.length-1||i<0)&&(i=0),(s>this.angles[0].length-1||s<0)&&(s=0),this.angles[i][s]}inFrame(t,e){return t>=this.top_x&&t<=this.bottom_x&&e>=this.top_y&&e<=this.bottom_y}cR(){let t=-1,e=-1;if(this.uGS.size){let o=!1;for(;!o&&this.uGS.size;){let h=(s=this.uGS,[...s][Math.floor(R()*s.size)]),a=map(h[0],0,this.gamt,this.top_x,this.bottom_x),r=map(h[1],0,this.gamt,this.top_y,this.bottom_y);if(this.uGS.delete(h),this.inFrame(a,r)){let s=(this.bottom_x-this.top_x)/this.gamt*.25,h=(this.bottom_y-this.top_y)/this.gamt*.25;t=a+i(-s,s),e=r+i(-h,h),o=!0}}}var s;return-1!==t&&-1!==e||(t=i(this.top_x,this.bottom_x),e=i(this.top_y,this.bottom_y)),[t,e]}addCurve(t,e){let i=new Y(t,e,this);i.angle=this.aFC(t,e),this.curves.push(i)}updateAngle(t,e){let i=0,s=map(t,0,this.angles.length-1,this.top_x,this.bottom_x),o=map(e,0,this.angles[0].length-1,this.top_y,this.bottom_y);return i=noise(t*this.xM+1.5*this.t,e*this.yM+1.5*this.t)*PI*2+G*PI*.5,3===G&&(i=.49*PI+atan2(o-h/2,s-w/2)-.5*map(noise(t*this.xM+this.t,e*this.yM+this.t),0,1,0,PI)),i}update(){for(let t=0;t<this.angles.length;t++)for(let e=0;e<this.angles[0].length;e++){let i=this.updateAngle(t,e);this.angles[t][e]=i}g&&(this.t+=.005*this.speed)}drawCurve(t){let e=t.x,i=t.y;const s=t.stepLength;let o=t.aliveCount/t.fullAlive;o=min(o,1);let h=color("#"+pB[t.ci][t.index%pB[t.ci].length]),a=color("#"+pB[t.ci][(t.index+1)%pB[t.ci].length]),r=this.aFC(e,i);t.curly?r+=sin(this.t*map(t.rand2,0,1,10,30)+map(t.rand,0,1,0,100)):r+=.3*t.rand*cos(this.t*map(t.rand2,0,1,2,10)+map(t.rand,0,1,0,100));let n=1===t.shapeType?.05:.6;if(t.angle=lerp(r,n),t.angle=r,g&&!C){let r=t.grow?t.th*o:t.th;h=lerpColor(h,a,o);let n=t.rand2<.25?r+2*t.rand2:r,l=t.rand<.25?r+2*t.rand:r;k.paint(e,i,n,l,h,t.rand,t.rand2,t.angle,t.shapeType,t.fbm);let c=t.angle;t.x+=this.speed*s*cos(c)*(t.curly?2:1),t.y+=this.speed*s*sin(c)*(t.curly?2:1),t.aliveCount+=t.aliveRate*this.speed,this.inFrame(t.x,t.y)||(t.aliveCount*=1.5)}g&&t.aliveCount>t.fullAlive&&t.newPos()}display(){this.update();for(let t=0;t<this.curves.length;t++){const e=this.curves[t];this.drawCurve(e)}}}class Y{constructor(t,e,i){this.x=t,this.y=e,this.parent=i,this.randomize()}randomize(){this.stepLength=e*i(2,3),this.th=e*i(B,A),this.ci=o(1,5),this.index=o(0,2),this.rand=R(),this.rand2=R(),this.aliveCount=0,this.fullAlive=o(20,x),this.aliveRate=i(.7,2),this.grow=R()<v,this.shapeType=R()>.4?0:1,this.curly=R()>.4,this.angle=this.parent.aFC(this.x,this.y),this.fbm=R()<.5}newPos(){let t=this.parent.cR();this.x=t[0],this.y=t[1],this.randomize()}}class q{constructor(t){this.l=t,t.rectMode(CENTER),this.l.background(c),_.background(c)}paint(t,i,s,o,h,a,r,n,l,c){let f=this.l,m=M;c&&(f=_,m=z),f.fill(h),f.noStroke(),f.rectMode(CENTER),m.noStroke(),m.rectMode(CENTER),m.colorMode(RGB);let p=.97,d=color(map(a,0,1,0,255),map(r,0,1,0,255),255);if(m.fill(d),m.stroke(d),1===l||2===l){let a=1==l?10*e:0;f.push(),f.translate(t,i),f.rotate(n),f.fill(h),f.rect(0,0,s,o,a),f.pop(),m.push(),m.translate(t,i),m.rotate(n),m.rect(0,0,s*p,o*p,a),m.pop()}else f.fill(h),f.ellipse(t,i,s,o),m.ellipse(t,i,s*p,o*p)}getColor(t,e,i){return this.getColorFromBlock(this.getColorBlock(t,e),i)}getColorBlock(t,e){const i=[1,2,3,4,5];let s=0;return n&&n.form&&n.form.shapes.forEach(((i,o)=>{s+=i.getBlock(t,e,s)})),s=s<0?i.length-1:s,i[s%i.length]}getColorFromBlock(t,e){return color("#"+pB[t][e%pB[t].length])}}class J{constructor(){this.shapes=[],this.shapes.push(new K(F.width/2,F.height/2,F.height/2,F.height/2,0,3)),this.shapes.push(new K(F.width*i(.6,1),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2)),this.shapes.push(new K(F.width*i(0,.4),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2))}}class K{constructor(t,e,i,s,o,h){this.x=t,this.y=e,this.w=i,this.h=s,this.type=o,this.level=h}getBlock(t,e,i){let s=dist(t,e,this.x,this.y);return s<this.w&&(i+=int(map(s,0,this.w,0,this.level))),i}}
*Exstasis* is an exploration in abstract pixel painting. Inspired by the work 20th-century abstract expressionists like Miró and Kandinsky, along with 16-bit pixel art aesthetics, the algorithm filters organic curvilinear forms through digital noise and pixel dithering to achieve a uniquely fluid effect. *Exstasis* revels in ecstatic movement and rich patterns informed by the very colors that comprise it. Central the project is a pixelating technique known as Bayer dithering. This method of ordered dithering was invented to approximate shading and color tone when the available colors and number of pixels were limited by the hardware constraints of the time (think Sega Genesis, Commodore 64, etc). Although advancements in digital displays have since rendered this sort of technique all but obsolete, *Exstasis* employs the dither to deconstruct colors into their fundamental components, creating fascinating grid-like structures which weave throughout the artwork. The dithering is paired with a more sophisticated form of digital noise called fractal Brownian motion to warp the forms in unexpected and compelling ways. By fusing pixel art's nostalgic allure with a more abstract futuristic technique, *Exstasis* manifests as a uniquely fresh and distinct artwork. As a generative artist, I have always been most interested in exploring the facets of digital art which are unique to the medium, and *Exstasis* is my truest exploration to date. Constantly evolving and in motion, with a distinctly digital aesthetic, this work could not have been realized in any other medium. ░░▒▒▓▓▓▓▒▒░░
let e;S=Uint32Array.from([0,1,s=t=2,3].map((t=>parseInt(tokenData.hash.substr(8*t+2,8),16)))),R=e=>(t=S[3],S[3]=S[2],S[2]=S[1],S[1]=s=S[0],t^=t<<11,S[0]^=t^t>>>8^s>>>19,S[0]/2**32);const i=(t,e)=>t+(e-t)*R(),o=(t,e)=>Math.floor(i(t,e+1)),a=t=>{const e=t.map((t=>t[0])).reduce(((t,e)=>t+e),0);let s=i(0,e),o=0;for(let e=0;e<t.length-1;e++)if(o+=t[e][0],o>=s)return t[e][1];return t[t.length-1][1]},r=[[["ABC3AA"],["214E38","5E7C4B","9DAD98"],["596f50","5E7C4B","214E38"],["CE8CA4","D79976","B1685B"],["5E7C4B","214E38","9DAD98"],["214E38","5E7C4B","9DAD98"]],[["4B1B4B"],["49734A","2F5033","274627"],["C88587","BC5C64"],["3A4967","7B86AA","2C3559"],["C5903C","C79D66","905E12"],["ACAB9E","D6B16E","BBA3AA"]],[["FCBAB9"],["3E3F38","616760","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","C67668","CCAA99"],["B3340B","DB7429","E44D27"]],[["DBC3CA"],["a9184a","cc4d6d","a4133c"],["0474B9","4A94D0","28558A"],["048C64","276A62"],["EAB004","DDAB2E"],["BBA3AA","ACAB9E","CCAA99"]],[["DACAB0"],["CDB079","A5843A","CCA659"],["8182C2","6198A1","5F85A8"],["576B37","94A983","4B4826"],["BD3631","BC4444","E28892"],["7B8E9B","969BB1","475158"]],[["4e1320"],["5C0300","6E260E","800020"],["DDAA99","CEB397","D2B48C"],["48260D","6F4037","70101B"],["6E3320","967969","5C2C06"],["CEB397","CFB2A8","DDAA99"]],[["C1A6E3"],["9D7CC9","8A64FF","4912B2"],["8364FF","6E3BC1","B390E5"],["5C22A9","9D7CC9","4F28D3"],["4F28D3","A990E5","9D7CC9"],["9D7CC9","8A64FF","7959B4"]],[["2A403F"],["495F5B","C89C82","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","D08F65","C1774E"],["B3340B","DB7429","E44D27"]],[["DDBEA9"],["C2997F","966A50","6E3320"],["D36628","B86233","DB7429"],["9E522D","C65B1F","C67668"],["6D4032","6E3320","7C4533"],["C59B82","F1BD95","C1774E"]],[["364536"],["E68B56","E7A967","F1BD95"],["E7A967","D08F65","E68B56"],["554E22","4B4826","554E22"],["E68B56","6D4032","E69B56"],["6E3320","7c4533","6D4032"]],[["302066"],["8948d8","4F28D3","8182C2"],["da4a4b","cc4d6d","AC4F7A"],["e96e1c","a34a0e","e96b18"],["B3340B","DB7429","E44D27"],["4F28D3","7E3FCD"]],[["690505"],["9B2A0D","B72609","940804"],["B3340B","DB7429","E44D27"],["DB501F","E5881C","e96e1c"],["D1AA85","8C1426","D65747"],["D1AA85","A27174","C89C82"]],[["B7BAD3"],["111F49","828CC6","262F81"],["7A9AE4","0C2555","88A3C4"],["111F49","526D9B","9EACE4"],["526D9B","564CE5","7A8bD4"],["7CA1E8","828CC6","111F49"],["50439B","9EACE4","4672AA"]],[["D1B2E8"],["E23E5D","8948d8","842058"],["944CF4","3363F6","4F28D3"],["FCAC14","D89711","e96e1c"],["FB6205","FA4C05","cc4d6d"],["046333","213C1A","A7A07E"]]];let n,l,c;const f=[-.5,0,-.375,.125,.25,-.25,.375,-.125,-.3125,.1875,-.4375,.0625,.4375,-.0625,.3125,-.1875];let m,p,d,g=!0,C=!1,u={reg:[1.5,1.5],high:[2,1.5]},D=a([[9,"reg"],[1,"m"]]),B=("m"===D?40:30)+o(-10,10),A=("m"===D?50:80)+o(-10,10),x="m"===D?40:70,v=.7;let y,E,b,F,_,M,z,k,U=550,P=U,G=o(1,4),T={fa:.15,f:-.04,aM:-.005,f1:1.18,f2:2.98,f3:8},V={mega:{fa:.21,f:-.08,aM:-.005},high:{fa:.18,f:-.06,aM:-.005}},I=a([[18,"normal"],[2,"wider"],[1,"micro"]]),j=1;const W=i(0,1e6);let H;function setup(){desiredAspectRatio=5/3;const t=window.innerHeight,s=window.innerWidth;t<=s&&1.6666666666666667*t<s?(w=1.6666666666666667*max(window.innerHeight,1),h=max(window.innerHeight,1)):(w=max(window.innerWidth,1),h=max(window.innerWidth,1)/1.6666666666666667),createCanvas(w,h,WEBGL),l=createShader("attribute vec3 aPosition;attribute vec2 aTexCoord;uniform mat4 uProjectionMatrix,uModelViewMatrix;varying vec2 vTexCoord;varying vec3 vPos;void main(){vTexCoord=aTexCoord;vec4 positionVec4=vec4(aPosition,1);positionVec4.xy=positionVec4.xy*2.-1.;vPos=normalize((uProjectionMatrix*uModelViewMatrix*positionVec4).xyz);gl_Position=positionVec4;}","precision mediump float;uniform float b[16];uniform sampler2D l,lD,tex,texD;uniform vec2 res;uniform float t;uniform vec3 bgc;vec3 cc=bgc/255.;uniform float dStep,bgD;uniform bool w;uniform float fa,fv,aM,f1,f2,f3;float r(vec2 p){vec3 p3=fract(vec3(p.xyx)*.1031);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float nf(vec2 st){vec2 i=floor(st),f=fract(st);float a=r(i),b=r(i+vec2(1,0)),c=r(i+vec2(0,1)),d=r(i+vec2(1));vec2 u=f*f*(3.-2.*f);return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y;}float fbm2(vec2 st){float v=fv,a=fa;vec2 shift=vec2(100);mat2 rot=mat2(.87758256189,.4794255386,-.4794255386,.87758256189);for(int i=0;i<4;++i)rot=mat2(.87758256189*float(i),.4794255386,-.4794255386*float(i),.87758256189*float(i*2)),v+=a*nf(st),st=rot*st*2.+shift,a*=aM;return v;}float f(vec2 uv){vec2 p=uv*f3;p=vec2(fbm2(p+f1+t),fbm2(p+f2+t));return fbm2(p*f3);}float i(float s,float rot){vec2 fc=gl_FragCoord.xy;if(rot!=0.){float c=1.,s=0.,mo=mod(rot,8.);if(mo==1.)c=.7071067812,s=.7071067812;else if(mo==2.)c=0.,s=1.;else if(mo==3.)c=-.7071067812,s=.7071067812;else if(mo==4.)c=-1.,s=0.;else if(mo==5.)c=-.7071067812,s=-.7071067812;else if(mo==6.)c=0.,s=-1.;else if(mo==7.)c=.7071067812,s=-.7071067812;mat2 m=mat2(c,s,-s,c);fc=m*(gl_FragCoord.xy-res.xy);}int x=int(mod(fc.x,4.*s)/s),y=int(mod(fc.y,4.*s)/s),j=x+y*4;for(int i=0;i<16;i++)if(i==j)return b[i]/16.;}float d(float c,float pAmt,float ang){float c_r=0.,b=0.;b=i(pAmt,ang);float o_c=1.-c+10.*b;if(o_c<.48)c_r=1.;return c_r;}vec3 dC(vec3 c,float pAmt,float ang){return vec3(d(c.x,pAmt,ang),d(c.y,pAmt,ang),d(c.z,pAmt,ang));}void main(){vec2 uv=gl_FragCoord.xy/res.xy;uv.y=1.-uv.y;float a=0.,dA=dStep,fbm=f(uv);vec2 uvD=uv;uvD+=fbm;uv+=fbm;vec4 _l=texture2D(l,uv),ld=texture2D(lD,uvD),t=texture2D(tex,uv),tD=texture2D(texD,uvD);vec3 c=_l.xyz,cD=ld.xyz;if(tD.z<=.99&&t.z<=.99)c=cc,t=vec4(0);else if(tD.z>.99&&t.z>.99)c=mix(c,cD,.75);else if(tD.z>.99)c=cD,t=tD;if(t.y>.4)a=floor(t.y*10.);if(t.z==0.)dA=bgD,a=0.;c=dC(c,dA,a);gl_FragColor=vec4(c.xyz,1);}"),e=h/800,pB=r[o(0,r.length-1)],j=1/e,pixelDensity(j),smooth(),d=a([[30,"reg"],[1,"high"]]),H=a([[1,"mega"],[8,"high"]]),T.fa=V[H].fa,T.f=V[H].f,T.aM=V[H].aM,T.f2+=i(0,50),T.f1+=i(0,20),v+=i(-.05,.05),U=550,U+=o(-125,75),"micro"===I&&(U-=o(20,100)),P=U,m=u[d][0],p=u[d][1],E=50,b=30,y=.2,c=color("#"+pB[0][0]),M=createGraphics(width,height),M.pixelDensity(2*j),M.background(0),z=createGraphics(width,height),z.pixelDensity(2*j),z.background(0),F=createGraphics(width,height),F.pixelDensity(j),_=createGraphics(width,height),_.pixelDensity(j),k=new q(F,n,M),n=new X(50,30,10,0),noiseDetail(8,.4),noiseSeed(W),document.getElementById("defaultCanvas0").imageSmoothingEnabled=!1}let L=0,N=0;function draw(){C||(N++,L+=7e-4,g&&(L+=.0011)),n.display(),shader(l),l.setUniform("res",[width*pixelDensity(),height*pixelDensity()]),l.setUniform("b",f),l.setUniform("l",F),l.setUniform("lD",_),l.setUniform("texD",z),l.setUniform("tex",M),l.setUniform("dStep",m),l.setUniform("bgD",p),l.setUniform("t",L),l.setUniform("fa",T.fa),l.setUniform("fv",T.f),l.setUniform("aM",T.aM),l.setUniform("f1",T.f1),l.setUniform("f2",T.f2),l.setUniform("f3",T.f3),l.setUniform("bgc",[red(c),green(c),blue(c)]),rect(0,0,width,height),N===P&&(g=!1)}function keyTyped(){" "===key&&(C||console.log("Stopped at frame "+N),C=!C)}class X{constructor(t,e,i){switch(this.angles=[],this.xM=.05,this.yM=.05,this.resX=t,this.resY=e,this.speed=y,this.curves=[],I){case"wider":this.top_x=.15*width,this.bottom_x=.85*width,this.top_y=.15*height,this.bottom_y=.85*height;break;case"normal":this.top_x=.2*width,this.bottom_x=.8*width,this.top_y=.2*height,this.bottom_y=.8*height;break;case"micro":this.top_x=.25*width,this.bottom_x=.75*width,this.top_y=.3*height,this.bottom_y=.7*height}this.t=0,this.rand=R(),this.form=new J,this.uGS=new Set;for(let i=0;i<t;i++){this.angles.push([]);for(let t=0;t<e;t++){let e=this.updateAngle(i,t);this.angles[i].push(e)}}this.gamt=8;for(let t=0;t<9;t++)for(let e=0;e<9;e++){let i=map(t,0,8,this.top_x,this.bottom_x),s=map(e,0,8,this.top_y,this.bottom_y);this.inFrame(i,s)&&this.uGS.add([t,e])}for(let t=0;t<i;t++){let t=this.cR(),e=t[0],i=t[1];this.addCurve(e,i)}}aFC(t,e){let i=int(map(t,this.top_x,this.bottom_x,0,this.angles.length-1)),s=int(map(e,this.top_y,this.bottom_y,0,this.angles[0].length-1));return(i>this.angles.length-1||i<0)&&(i=0),(s>this.angles[0].length-1||s<0)&&(s=0),this.angles[i][s]}inFrame(t,e){return t>=this.top_x&&t<=this.bottom_x&&e>=this.top_y&&e<=this.bottom_y}cR(){let t=-1,e=-1;if(this.uGS.size){let o=!1;for(;!o&&this.uGS.size;){let h=(s=this.uGS,[...s][Math.floor(R()*s.size)]),a=map(h[0],0,this.gamt,this.top_x,this.bottom_x),r=map(h[1],0,this.gamt,this.top_y,this.bottom_y);if(this.uGS.delete(h),this.inFrame(a,r)){let s=(this.bottom_x-this.top_x)/this.gamt*.25,h=(this.bottom_y-this.top_y)/this.gamt*.25;t=a+i(-s,s),e=r+i(-h,h),o=!0}}}var s;return-1!==t&&-1!==e||(t=i(this.top_x,this.bottom_x),e=i(this.top_y,this.bottom_y)),[t,e]}addCurve(t,e){let i=new Y(t,e,this);i.angle=this.aFC(t,e),this.curves.push(i)}updateAngle(t,e){let i=0,s=map(t,0,this.angles.length-1,this.top_x,this.bottom_x),o=map(e,0,this.angles[0].length-1,this.top_y,this.bottom_y);return i=noise(t*this.xM+1.5*this.t,e*this.yM+1.5*this.t)*PI*2+G*PI*.5,3===G&&(i=.49*PI+atan2(o-h/2,s-w/2)-.5*map(noise(t*this.xM+this.t,e*this.yM+this.t),0,1,0,PI)),i}update(){for(let t=0;t<this.angles.length;t++)for(let e=0;e<this.angles[0].length;e++){let i=this.updateAngle(t,e);this.angles[t][e]=i}g&&(this.t+=.005*this.speed)}drawCurve(t){let e=t.x,i=t.y;const s=t.stepLength;let o=t.aliveCount/t.fullAlive;o=min(o,1);let h=color("#"+pB[t.ci][t.index%pB[t.ci].length]),a=color("#"+pB[t.ci][(t.index+1)%pB[t.ci].length]),r=this.aFC(e,i);t.curly?r+=sin(this.t*map(t.rand2,0,1,10,30)+map(t.rand,0,1,0,100)):r+=.3*t.rand*cos(this.t*map(t.rand2,0,1,2,10)+map(t.rand,0,1,0,100));let n=1===t.shapeType?.05:.6;if(t.angle=lerp(r,n),t.angle=r,g&&!C){let r=t.grow?t.th*o:t.th;h=lerpColor(h,a,o);let n=t.rand2<.25?r+2*t.rand2:r,l=t.rand<.25?r+2*t.rand:r;k.paint(e,i,n,l,h,t.rand,t.rand2,t.angle,t.shapeType,t.fbm);let c=t.angle;t.x+=this.speed*s*cos(c)*(t.curly?2:1),t.y+=this.speed*s*sin(c)*(t.curly?2:1),t.aliveCount+=t.aliveRate*this.speed,this.inFrame(t.x,t.y)||(t.aliveCount*=1.5)}g&&t.aliveCount>t.fullAlive&&t.newPos()}display(){this.update();for(let t=0;t<this.curves.length;t++){const e=this.curves[t];this.drawCurve(e)}}}class Y{constructor(t,e,i){this.x=t,this.y=e,this.parent=i,this.randomize()}randomize(){this.stepLength=e*i(2,3),this.th=e*i(B,A),this.ci=o(1,5),this.index=o(0,2),this.rand=R(),this.rand2=R(),this.aliveCount=0,this.fullAlive=o(20,x),this.aliveRate=i(.7,2),this.grow=R()<v,this.shapeType=R()>.4?0:1,this.curly=R()>.4,this.angle=this.parent.aFC(this.x,this.y),this.fbm=R()<.5}newPos(){let t=this.parent.cR();this.x=t[0],this.y=t[1],this.randomize()}}class q{constructor(t){this.l=t,t.rectMode(CENTER),this.l.background(c),_.background(c)}paint(t,i,s,o,h,a,r,n,l,c){let f=this.l,m=M;c&&(f=_,m=z),f.fill(h),f.noStroke(),f.rectMode(CENTER),m.noStroke(),m.rectMode(CENTER),m.colorMode(RGB);let p=.97,d=color(map(a,0,1,0,255),map(r,0,1,0,255),255);if(m.fill(d),m.stroke(d),1===l||2===l){let a=1==l?10*e:0;f.push(),f.translate(t,i),f.rotate(n),f.fill(h),f.rect(0,0,s,o,a),f.pop(),m.push(),m.translate(t,i),m.rotate(n),m.rect(0,0,s*p,o*p,a),m.pop()}else f.fill(h),f.ellipse(t,i,s,o),m.ellipse(t,i,s*p,o*p)}getColor(t,e,i){return this.getColorFromBlock(this.getColorBlock(t,e),i)}getColorBlock(t,e){const i=[1,2,3,4,5];let s=0;return n&&n.form&&n.form.shapes.forEach(((i,o)=>{s+=i.getBlock(t,e,s)})),s=s<0?i.length-1:s,i[s%i.length]}getColorFromBlock(t,e){return color("#"+pB[t][e%pB[t].length])}}class J{constructor(){this.shapes=[],this.shapes.push(new K(F.width/2,F.height/2,F.height/2,F.height/2,0,3)),this.shapes.push(new K(F.width*i(.6,1),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2)),this.shapes.push(new K(F.width*i(0,.4),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2))}}class K{constructor(t,e,i,s,o,h){this.x=t,this.y=e,this.w=i,this.h=s,this.type=o,this.level=h}getBlock(t,e,i){let s=dist(t,e,this.x,this.y);return s<this.w&&(i+=int(map(s,0,this.w,0,this.level))),i}}
let e;S=Uint32Array.from([0,1,s=t=2,3].map((t=>parseInt(tokenData.hash.substr(8*t+2,8),16)))),R=e=>(t=S[3],S[3]=S[2],S[2]=S[1],S[1]=s=S[0],t^=t<<11,S[0]^=t^t>>>8^s>>>19,S[0]/2**32);const i=(t,e)=>t+(e-t)*R(),o=(t,e)=>Math.floor(i(t,e+1)),a=t=>{const e=t.map((t=>t[0])).reduce(((t,e)=>t+e),0);let s=i(0,e),o=0;for(let e=0;e<t.length-1;e++)if(o+=t[e][0],o>=s)return t[e][1];return t[t.length-1][1]},r=[[["ABC3AA"],["214E38","5E7C4B","9DAD98"],["596f50","5E7C4B","214E38"],["CE8CA4","D79976","B1685B"],["5E7C4B","214E38","9DAD98"],["214E38","5E7C4B","9DAD98"]],[["4B1B4B"],["49734A","2F5033","274627"],["C88587","BC5C64"],["3A4967","7B86AA","2C3559"],["C5903C","C79D66","905E12"],["ACAB9E","D6B16E","BBA3AA"]],[["FCBAB9"],["3E3F38","616760","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","C67668","CCAA99"],["B3340B","DB7429","E44D27"]],[["DBC3CA"],["a9184a","cc4d6d","a4133c"],["0474B9","4A94D0","28558A"],["048C64","276A62"],["EAB004","DDAB2E"],["BBA3AA","ACAB9E","CCAA99"]],[["DACAB0"],["CDB079","A5843A","CCA659"],["8182C2","6198A1","5F85A8"],["576B37","94A983","4B4826"],["BD3631","BC4444","E28892"],["7B8E9B","969BB1","475158"]],[["4e1320"],["5C0300","6E260E","800020"],["DDAA99","CEB397","D2B48C"],["48260D","6F4037","70101B"],["6E3320","967969","5C2C06"],["CEB397","CFB2A8","DDAA99"]],[["C1A6E3"],["9D7CC9","8A64FF","4912B2"],["8364FF","6E3BC1","B390E5"],["5C22A9","9D7CC9","4F28D3"],["4F28D3","A990E5","9D7CC9"],["9D7CC9","8A64FF","7959B4"]],[["2A403F"],["495F5B","C89C82","67716E"],["D65747","C67668","DB7429"],["E77808","D08F65","DB7429"],["C89C82","D08F65","C1774E"],["B3340B","DB7429","E44D27"]],[["DDBEA9"],["C2997F","966A50","6E3320"],["D36628","B86233","DB7429"],["9E522D","C65B1F","C67668"],["6D4032","6E3320","7C4533"],["C59B82","F1BD95","C1774E"]],[["364536"],["E68B56","E7A967","F1BD95"],["E7A967","D08F65","E68B56"],["554E22","4B4826","554E22"],["E68B56","6D4032","E69B56"],["6E3320","7c4533","6D4032"]],[["302066"],["8948d8","4F28D3","8182C2"],["da4a4b","cc4d6d","AC4F7A"],["e96e1c","a34a0e","e96b18"],["B3340B","DB7429","E44D27"],["4F28D3","7E3FCD"]],[["690505"],["9B2A0D","B72609","940804"],["B3340B","DB7429","E44D27"],["DB501F","E5881C","e96e1c"],["D1AA85","8C1426","D65747"],["D1AA85","A27174","C89C82"]],[["B7BAD3"],["111F49","828CC6","262F81"],["7A9AE4","0C2555","88A3C4"],["111F49","526D9B","9EACE4"],["526D9B","564CE5","7A8bD4"],["7CA1E8","828CC6","111F49"],["50439B","9EACE4","4672AA"]],[["D1B2E8"],["E23E5D","8948d8","842058"],["944CF4","3363F6","4F28D3"],["FCAC14","D89711","e96e1c"],["FB6205","FA4C05","cc4d6d"],["046333","213C1A","A7A07E"]]];let n,l,c;const f=[-.5,0,-.375,.125,.25,-.25,.375,-.125,-.3125,.1875,-.4375,.0625,.4375,-.0625,.3125,-.1875];let m,p,d,g=!0,C=!1,u={reg:[1.5,1.5],high:[2,1.5]},D=a([[9,"reg"],[1,"m"]]),B=("m"===D?40:30)+o(-10,10),A=("m"===D?50:80)+o(-10,10),x="m"===D?40:70,v=.7;let y,E,b,F,_,M,z,k,U=550,P=U,G=o(1,4),T={fa:.15,f:-.04,aM:-.005,f1:1.18,f2:2.98,f3:8},V={mega:{fa:.21,f:-.08,aM:-.005},high:{fa:.18,f:-.06,aM:-.005},medium:{fa:.15,f:-.04,aM:-.005}},I=a([[18,"normal"],[2,"wider"],[1,"micro"]]),j=1;const W=i(0,1e6);let H;function setup(){desiredAspectRatio=5/3;const t=window.innerHeight,s=window.innerWidth;t<=s&&1.6666666666666667*t<s?(w=1.6666666666666667*max(window.innerHeight,1),h=max(window.innerHeight,1)):(w=max(window.innerWidth,1),h=max(window.innerWidth,1)/1.6666666666666667),createCanvas(w,h,WEBGL),l=createShader("attribute vec3 aPosition;attribute vec2 aTexCoord;uniform mat4 uProjectionMatrix,uModelViewMatrix;varying vec2 vTexCoord;varying vec3 vPos;void main(){vTexCoord=aTexCoord;vec4 positionVec4=vec4(aPosition,1);positionVec4.xy=positionVec4.xy*2.-1.;vPos=normalize((uProjectionMatrix*uModelViewMatrix*positionVec4).xyz);gl_Position=positionVec4;}","precision mediump float;uniform float b[16];uniform sampler2D l,lD,tex,texD;uniform vec2 res;uniform float t;uniform vec3 bgc;vec3 cc=bgc/255.;uniform float dStep,bgD;uniform bool w;uniform float fa,fv,aM,f1,f2,f3;float r(vec2 p){vec3 p3=fract(vec3(p.xyx)*.1031);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}float nf(vec2 st){vec2 i=floor(st),f=fract(st);float a=r(i),b=r(i+vec2(1,0)),c=r(i+vec2(0,1)),d=r(i+vec2(1));vec2 u=f*f*(3.-2.*f);return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y;}float fbm2(vec2 st){float v=fv,a=fa;vec2 shift=vec2(100);mat2 rot=mat2(.87758256189,.4794255386,-.4794255386,.87758256189);for(int i=0;i<4;++i)rot=mat2(.87758256189*float(i),.4794255386,-.4794255386*float(i),.87758256189*float(i*2)),v+=a*nf(st),st=rot*st*2.+shift,a*=aM;return v;}float f(vec2 uv){vec2 p=uv*f3;p=vec2(fbm2(p+f1+t),fbm2(p+f2+t));return fbm2(p*f3);}float i(float s,float rot){vec2 fc=gl_FragCoord.xy;if(rot!=0.){float c=1.,s=0.,mo=mod(rot,8.);if(mo==1.)c=.7071067812,s=.7071067812;else if(mo==2.)c=0.,s=1.;else if(mo==3.)c=-.7071067812,s=.7071067812;else if(mo==4.)c=-1.,s=0.;else if(mo==5.)c=-.7071067812,s=-.7071067812;else if(mo==6.)c=0.,s=-1.;else if(mo==7.)c=.7071067812,s=-.7071067812;mat2 m=mat2(c,s,-s,c);fc=m*(gl_FragCoord.xy-res.xy);}int x=int(mod(fc.x,4.*s)/s),y=int(mod(fc.y,4.*s)/s),j=x+y*4;for(int i=0;i<16;i++)if(i==j)return b[i]/16.;}float d(float c,float pAmt,float ang){float c_r=0.,b=0.;b=i(pAmt,ang);float o_c=1.-c+10.*b;if(o_c<.48)c_r=1.;return c_r;}vec3 dC(vec3 c,float pAmt,float ang){return vec3(d(c.x,pAmt,ang),d(c.y,pAmt,ang),d(c.z,pAmt,ang));}void main(){vec2 uv=gl_FragCoord.xy/res.xy;uv.y=1.-uv.y;float a=0.,dA=dStep,fbm=f(uv);vec2 uvD=uv;uvD+=fbm;uv+=fbm;vec4 _l=texture2D(l,uv),ld=texture2D(lD,uvD),t=texture2D(tex,uv),tD=texture2D(texD,uvD);vec3 c=_l.xyz,cD=ld.xyz;if(tD.z<=.99&&t.z<=.99)c=cc,t=vec4(0);else if(tD.z>.99&&t.z>.99)c=mix(c,cD,.75);else if(tD.z>.99)c=cD,t=tD;if(t.y>.4)a=floor(t.y*10.);if(t.z==0.)dA=bgD,a=0.;c=dC(c,dA,a);gl_FragColor=vec4(c.xyz,1);}"),e=h/800,pB=r[o(0,r.length-1)],j=1/e,pixelDensity(j),smooth(),d=a([[30,"reg"],[1,"high"]]),H=a([[1,"mega"],[8,"high"],[1,"medium"]]),T.fa=V[H].fa,T.f=V[H].f,T.aM=V[H].aM,T.f2+=i(0,50),T.f1+=i(0,20),v+=i(-.05,.05),U=550,U+=o(-125,75),"micro"===I&&(U-=o(20,100)),P=U,m=u[d][0],p=u[d][1],E=50,b=30,y=.2,c=color("#"+pB[0][0]),M=createGraphics(width,height),M.pixelDensity(2*j),M.background(0),z=createGraphics(width,height),z.pixelDensity(2*j),z.background(0),F=createGraphics(width,height),F.pixelDensity(j),_=createGraphics(width,height),_.pixelDensity(j),k=new q(F,n,M),n=new X(50,30,10,0),noiseDetail(8,.4),noiseSeed(W),document.getElementById("defaultCanvas0").imageSmoothingEnabled=!1}let L=0,N=0;function draw(){C||(N++,L+=7e-4,g&&(L+=.0011)),n.display(),shader(l),l.setUniform("res",[width*pixelDensity(),height*pixelDensity()]),l.setUniform("b",f),l.setUniform("l",F),l.setUniform("lD",_),l.setUniform("texD",z),l.setUniform("tex",M),l.setUniform("dStep",m),l.setUniform("bgD",p),l.setUniform("t",L),l.setUniform("fa",T.fa),l.setUniform("fv",T.f),l.setUniform("aM",T.aM),l.setUniform("f1",T.f1),l.setUniform("f2",T.f2),l.setUniform("f3",T.f3),l.setUniform("bgc",[red(c),green(c),blue(c)]),rect(0,0,width,height),N===P&&(g=!1)}function keyTyped(){" "===key&&(C||console.log("Stopped at frame "+N),C=!C)}class X{constructor(t,e,i){switch(this.angles=[],this.xM=.05,this.yM=.05,this.resX=t,this.resY=e,this.speed=y,this.curves=[],I){case"wider":this.top_x=.15*width,this.bottom_x=.85*width,this.top_y=.15*height,this.bottom_y=.85*height;break;case"normal":this.top_x=.2*width,this.bottom_x=.8*width,this.top_y=.2*height,this.bottom_y=.8*height;break;case"micro":this.top_x=.25*width,this.bottom_x=.75*width,this.top_y=.3*height,this.bottom_y=.7*height}this.t=0,this.rand=R(),this.form=new J,this.uGS=new Set;for(let i=0;i<t;i++){this.angles.push([]);for(let t=0;t<e;t++){let e=this.updateAngle(i,t);this.angles[i].push(e)}}this.gamt=8;for(let t=0;t<9;t++)for(let e=0;e<9;e++){let i=map(t,0,8,this.top_x,this.bottom_x),s=map(e,0,8,this.top_y,this.bottom_y);this.inFrame(i,s)&&this.uGS.add([t,e])}for(let t=0;t<i;t++){let t=this.cR(),e=t[0],i=t[1];this.addCurve(e,i)}}aFC(t,e){let i=int(map(t,this.top_x,this.bottom_x,0,this.angles.length-1)),s=int(map(e,this.top_y,this.bottom_y,0,this.angles[0].length-1));return(i>this.angles.length-1||i<0)&&(i=0),(s>this.angles[0].length-1||s<0)&&(s=0),this.angles[i][s]}inFrame(t,e){return t>=this.top_x&&t<=this.bottom_x&&e>=this.top_y&&e<=this.bottom_y}cR(){let t=-1,e=-1;if(this.uGS.size){let o=!1;for(;!o&&this.uGS.size;){let h=(s=this.uGS,[...s][Math.floor(R()*s.size)]),a=map(h[0],0,this.gamt,this.top_x,this.bottom_x),r=map(h[1],0,this.gamt,this.top_y,this.bottom_y);if(this.uGS.delete(h),this.inFrame(a,r)){let s=(this.bottom_x-this.top_x)/this.gamt*.25,h=(this.bottom_y-this.top_y)/this.gamt*.25;t=a+i(-s,s),e=r+i(-h,h),o=!0}}}var s;return-1!==t&&-1!==e||(t=i(this.top_x,this.bottom_x),e=i(this.top_y,this.bottom_y)),[t,e]}addCurve(t,e){let i=new Y(t,e,this);i.angle=this.aFC(t,e),this.curves.push(i)}updateAngle(t,e){let i=0,s=map(t,0,this.angles.length-1,this.top_x,this.bottom_x),o=map(e,0,this.angles[0].length-1,this.top_y,this.bottom_y);return i=noise(t*this.xM+1.5*this.t,e*this.yM+1.5*this.t)*PI*2+G*PI*.5,3===G&&(i=.49*PI+atan2(o-h/2,s-w/2)-.5*map(noise(t*this.xM+this.t,e*this.yM+this.t),0,1,0,PI)),i}update(){for(let t=0;t<this.angles.length;t++)for(let e=0;e<this.angles[0].length;e++){let i=this.updateAngle(t,e);this.angles[t][e]=i}g&&(this.t+=.005*this.speed)}drawCurve(t){let e=t.x,i=t.y;const s=t.stepLength;let o=t.aliveCount/t.fullAlive;o=min(o,1);let h=color("#"+pB[t.ci][t.index%pB[t.ci].length]),a=color("#"+pB[t.ci][(t.index+1)%pB[t.ci].length]),r=this.aFC(e,i);t.curly?r+=sin(this.t*map(t.rand2,0,1,10,30)+map(t.rand,0,1,0,100)):r+=.3*t.rand*cos(this.t*map(t.rand2,0,1,2,10)+map(t.rand,0,1,0,100));let n=1===t.shapeType?.05:.6;if(t.angle=lerp(r,n),t.angle=r,g&&!C){let r=t.grow?t.th*o:t.th;h=lerpColor(h,a,o);let n=t.rand2<.25?r+2*t.rand2:r,l=t.rand<.25?r+2*t.rand:r;k.paint(e,i,n,l,h,t.rand,t.rand2,t.angle,t.shapeType,t.fbm);let c=t.angle;t.x+=this.speed*s*cos(c)*(t.curly?2:1),t.y+=this.speed*s*sin(c)*(t.curly?2:1),t.aliveCount+=t.aliveRate*this.speed,this.inFrame(t.x,t.y)||(t.aliveCount*=1.5)}g&&t.aliveCount>t.fullAlive&&t.newPos()}display(){this.update();for(let t=0;t<this.curves.length;t++){const e=this.curves[t];this.drawCurve(e)}}}class Y{constructor(t,e,i){this.x=t,this.y=e,this.parent=i,this.randomize()}randomize(){this.stepLength=e*i(2,3),this.th=e*i(B,A),this.ci=o(1,5),this.index=o(0,2),this.rand=R(),this.rand2=R(),this.aliveCount=0,this.fullAlive=o(20,x),this.aliveRate=i(.7,2),this.grow=R()<v,this.shapeType=R()>.4?0:1,this.curly=R()>.4,this.angle=this.parent.aFC(this.x,this.y),this.fbm=R()<.5}newPos(){let t=this.parent.cR();this.x=t[0],this.y=t[1],this.randomize()}}class q{constructor(t){this.l=t,t.rectMode(CENTER),this.l.background(c),_.background(c)}paint(t,i,s,o,h,a,r,n,l,c){let f=this.l,m=M;c&&(f=_,m=z),f.fill(h),f.noStroke(),f.rectMode(CENTER),m.noStroke(),m.rectMode(CENTER),m.colorMode(RGB);let p=.97,d=color(map(a,0,1,0,255),map(r,0,1,0,255),255);if(m.fill(d),m.stroke(d),1===l||2===l){let a=1==l?10*e:0;f.push(),f.translate(t,i),f.rotate(n),f.fill(h),f.rect(0,0,s,o,a),f.pop(),m.push(),m.translate(t,i),m.rotate(n),m.rect(0,0,s*p,o*p,a),m.pop()}else f.fill(h),f.ellipse(t,i,s,o),m.ellipse(t,i,s*p,o*p)}getColor(t,e,i){return this.getColorFromBlock(this.getColorBlock(t,e),i)}getColorBlock(t,e){const i=[1,2,3,4,5];let s=0;return n&&n.form&&n.form.shapes.forEach(((i,o)=>{s+=i.getBlock(t,e,s)})),s=s<0?i.length-1:s,i[s%i.length]}getColorFromBlock(t,e){return color("#"+pB[t][e%pB[t].length])}}class J{constructor(){this.shapes=[],this.shapes.push(new K(F.width/2,F.height/2,F.height/2,F.height/2,0,3)),this.shapes.push(new K(F.width*i(.6,1),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2)),this.shapes.push(new K(F.width*i(0,.4),F.height/2,F.height/2*i(.6,1.1),F.height/2*i(.6,1.1),0,2))}}class K{constructor(t,e,i,s,o,h){this.x=t,this.y=e,this.w=i,this.h=s,this.type=o,this.level=h}getBlock(t,e,i){let s=dist(t,e,this.x,this.y);return s<this.w&&(i+=int(map(s,0,this.w,0,this.level))),i}}
https://kinesis.artThe Kinesis Art Collective is an experimental art studio exploring generative motion through digital art forms via the release of a series of limited, curated public mints.https://twitter.com/_kinesisart