From 98a566edbb1a5f0dcf0043be17a5ffbde3310855 Mon Sep 17 00:00:00 2001 From: Quinton Ashley Date: Sun, 31 Mar 2024 22:30:18 -0500 Subject: [PATCH] 1.9.13 --- package.json | 2 +- q5.js | 6 +++--- q5.min.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4ae5067..255aa5d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "quinton-ashley", "name": "q5", - "version": "1.9.12", + "version": "1.9.13", "description": "An implementation of the p5.js 2D API that's smaller and faster", "main": "q5-server.js", "scripts": { diff --git a/q5.js b/q5.js index 9c9d096..258a53a 100644 --- a/q5.js +++ b/q5.js @@ -733,9 +733,9 @@ function Q5(scope, parent) { }; $.fullscreen = (v) => { - if (!v === undefined) return document.fullscreenElement; - if (v) document.requestFullscreen(); - else document.exitFullscreen(); + if (v === undefined) return document.fullscreenElement; + if (v) document.body.requestFullscreen(); + else document.body.exitFullscreen(); }; // MATH diff --git a/q5.min.js b/q5.min.js index 9008015..5464faa 100644 --- a/q5.min.js +++ b/q5.min.js @@ -4,4 +4,4 @@ * @author quinton-ashley and LingDong- * @license AGPL-3.0 */ -function Q5(e,t){let a=this;a._q5=!0;let o=0;if(e||(e="global"),"auto"==e){if(!window.setup&&!window.draw)return;e="global"}"global"==e&&(Q5._hasGlobal=a._isGlobal=!0);let n=window.OffscreenCanvas||function(){return document.createElement("canvas")},r=null,i=a.ctx=a.drawingContext=null;if(a.canvas=null,a.pixels=[],a.noCanvas=()=>{a.canvas?.remove&&a.canvas.remove(),a.canvas=0,i=a.ctx=a.drawingContext=0},Q5._nodejs?Q5._createNodeJSCanvas&&(a.canvas=Q5._createNodeJSCanvas(100,100)):"image"!=e&&"graphics"!=e||(a.canvas=new n(100,100)),a.canvas||("object"==typeof document?(a.canvas=document.createElement("canvas"),a.canvas.id="defaultCanvas"+Q5._instanceCount++,a.canvas.classList.add("p5Canvas","q5Canvas")):a.noCanvas()),a.canvas.width=a.width=100,a.canvas.height=a.height=100,a.canvas&&"graphics"!=e&&"image"!=e){function s(){t??=document.getElementsByTagName("main")[0],t||(t=document.createElement("main"),document.body.append(t)),a.canvas.parent(t)}a._setupDone=!1,a._resize=()=>{a.frameCount>1&&(a._shouldResize=!0)},t&&"string"==typeof t&&(t=document.getElementById(t)),a.canvas.parent=e=>{"string"==typeof e&&(e=document.getElementById(e)),e.append(a.canvas),"function"==typeof ResizeObserver?(a._ro&&a._ro.disconnect(),a._ro=new ResizeObserver(a._resize),a._ro.observe(t)):a.frameCount||window.addEventListener("resize",a._resize)},document.body?s():document.addEventListener("DOMContentLoaded",s)}function l(e,t){t??=e||a.canvas.height,e??=a.canvas.width,null==f&&(f=new n(e,t).getContext("2d",{colorSpace:a.canvas.colorSpace})),f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}function c(){let e=a.canvas.width*a.canvas.height*4;x&&e==x.length||(x=new Uint8ClampedArray(e))}function h(e,t){a._filters||(a._filters=[],a._filters[a.THRESHOLD]=(e,t)=>{void 0===t?t=127.5:t*=255;for(let a=0;a=t?255:0}},a._filters[a.GRAY]=e=>{for(let t=0;t{for(let t=0;t{for(let t=0;t{t??=4;let a=t-1;for(let o=0;o>8)/a,e[o+1]=255*(e[o+1]*t>>8)/a,e[o+2]=255*(e[o+2]*t>>8)/a},a._filters[a.DILATE]=e=>{c(),x.set(e);let[t,o]=[a.canvas.width,a.canvas.height];for(let a=0;a{c(),x.set(e);let[t,o]=[a.canvas.width,a.canvas.height];for(let a=0;a{t=t||1,t=Math.floor(t*a._pixelDensity),c(),x.set(e);let o=2*t+1,n=function(e){let a=new Float32Array(e),o=.3*t+.8,n=o*o*2;for(let t=0;t{r=i.getImageData(0,0,a.canvas.width,a.canvas.height),a.pixels=r.data},a.updatePixels=()=>{null!=r&&i.putImageData(r,0,0)},a.filter=(e,t)=>{if(!i.filter)return h(e,t);if(l(),"string"==typeof e)d(e);else if(e==a.THRESHOLD){t??=.5,t=Math.max(t,1e-5),d(`saturate(0%) brightness(${Math.floor(.5/t*100)}%) contrast(1000000%)`)}else e==a.GRAY?d("saturate(0%)"):e==a.OPAQUE?(f.fillStyle="black",f.fillRect(0,0,f.canvas.width,f.canvas.height),f.drawImage(a.canvas,0,0),i.save(),i.resetTransform(),i.drawImage(f.canvas,0,0),i.restore()):e==a.INVERT?d("invert(100%)"):e==a.BLUR?d(`blur(${Math.ceil(t*a._pixelDensity/1)||1}px)`):h(e,t)},a.resize=(e,t)=>{l(),f.drawImage(a.canvas,0,0),a.width=e,a.height=t,a.canvas.width=e*a._pixelDensity,a.canvas.height=t*a._pixelDensity,i.save(),i.resetTransform(),i.clearRect(0,0,a.canvas.width,a.canvas.height),i.drawImage(f.canvas,0,0,a.canvas.width,a.canvas.height),i.restore()},a.get=(e,t,o,n)=>{let r=a._pixelDensity||1;if(void 0!==e&&void 0===o){let o=i.getImageData(e*r,t*r,1,1).data;return new a.Color(o[0],o[1],o[2],o[3]/255)}e=(e||0)*r,t=(t||0)*r;let s=o=o||a.width,l=n=n||a.height;o*=r,n*=r;let c=a.createImage(o,n),h=i.getImageData(e,t,o,n);return c.ctx.putImageData(h,0,0),c._pixelDensity=r,c.width=s,c.height=l,c},a.set=(e,t,o)=>{if(o._q5){let n=a._tint;return a._tint=null,a.image(o,e,t),void(a._tint=n)}a.pixels.length||a.loadPixels();let n=a._pixelDensity||1;for(let r=0;ra._tint=null,a.mask=e=>{i.save(),i.resetTransform();let t=i.globalCompositeOperation;i.globalCompositeOperation="destination-in",i.drawImage(e.canvas,0,0),i.globalCompositeOperation=t,i.restore()},a._save=(e,t,a)=>{if(t=t||"untitled","jpg"==(a=a||"png")||"png"==a||"webp"==a)e=e.toDataURL("image/"+a);else{let t="text/plain";"json"==a&&("string"!=typeof e&&(e=JSON.stringify(e)),t="text/json"),e=new Blob([e],{type:t}),e=URL.createObjectURL(e)}let o=document.createElement("a");o.href=e,o.download=t+"."+a,document.body.append(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(o.href)},a.save=(e,t,o)=>{if((!e||"string"==typeof e&&(!t||!o&&t.length<5))&&(o=t,t=e,e=a.canvas),o)return a._save(e,t,o);t?(t=t.split("."),a._save(e,t[0],t.at(-1))):a._save(e)},a.canvas.save=a.save,a.saveCanvas=a.save;let u=null,g=!0,_=[],p={},m=0,f=null,v=null,x=null;if(a.THRESHOLD=1,a.GRAY=2,a.OPAQUE=3,a.INVERT=4,a.POSTERIZE=5,a.DILATE=6,a.ERODE=7,a.BLUR=8,"image"==e)return;function y(e,t){a.width=e,a.height=t;let o=function(){let e={};for(let t in i)"function"!=typeof i[t]&&(e[t]=i[t]);return delete e.canvas,e}();a.canvas.width=Math.ceil(e*a._pixelDensity),a.canvas.height=Math.ceil(t*a._pixelDensity),!a.canvas.fullscreen&&a.canvas.style&&(a.canvas.style.width=e+"px",a.canvas.style.height=t+"px");for(let e in o)a.ctx[e]=o[e];i.scale(a._pixelDensity,a._pixelDensity)}a.BLEND="source-over",a.REMOVE="destination-out",a.ADD="lighter",a.DARKEST="darken",a.LIGHTEST="lighten",a.DIFFERENCE="difference",a.SUBTRACT="subtract",a.EXCLUSION="exclusion",a.MULTIPLY="multiply",a.SCREEN="screen",a.REPLACE="copy",a.OVERLAY="overlay",a.HARD_LIGHT="hard-light",a.SOFT_LIGHT="soft-light",a.DODGE="color-dodge",a.BURN="color-burn",a.RGB="rgb",a.RGBA="rgb",a.HSB="hsb",a.CHORD=0,a.PIE=1,a.OPEN=2,a.RADIUS="radius",a.CORNER="corner",a.CORNERS="corners",a.ROUND="round",a.SQUARE="butt",a.PROJECT="square",a.MITER="miter",a.BEVEL="bevel",a.CLOSE=1,a.NORMAL="normal",a.ITALIC="italic",a.BOLD="bold",a.BOLDITALIC="italic bold",a.CENTER="center",a.LEFT="left",a.RIGHT="right",a.TOP="top",a.BOTTOM="bottom",a.BASELINE="alphabetic",a.LANDSCAPE="landscape",a.PORTRAIT="portrait",a.ALT=18,a.BACKSPACE=8,a.CONTROL=17,a.DELETE=46,a.DOWN_ARROW=40,a.ENTER=13,a.ESCAPE=27,a.LEFT_ARROW=37,a.OPTION=18,a.RETURN=13,a.RIGHT_ARROW=39,a.SHIFT=16,a.TAB=9,a.UP_ARROW=38,a.DEGREES="degrees",a.RADIANS="radians",a.HALF_PI=Math.PI/2,a.PI=Math.PI,a.QUARTER_PI=Math.PI/4,a.TAU=2*Math.PI,a.TWO_PI=2*Math.PI,a.ARROW="default",a.CROSS="crosshair",a.HAND="pointer",a.MOVE="move",a.TEXT="text",a.VIDEO={video:!0,audio:!1},a.AUDIO={video:!1,audio:!0},a.SHR3=1,a.LCG=2,a.hint=(e,t)=>{a[e]=t},a.frameCount=0,a.deltaTime=16,a.mouseX=0,a.mouseY=0,a.touches=[],a.mouseButton=null,a.keyIsPressed=!1,a.mouseIsPressed=!1,a.key=null,a.keyCode=null,a.accelerationX=0,a.accelerationY=0,a.accelerationZ=0,a.rotationX=0,a.rotationY=0,a.rotationZ=0,a.relRotationX=0,a.relRotationY=0,a.relRotationZ=0,a.pmouseX=0,a.pmouseY=0,a.pAccelerationX=0,a.pAccelerationY=0,a.pAccelerationZ=0,a.pRotationX=0,a.pRotationY=0,a.pRotationZ=0,a.pRelRotationX=0,a.pRelRotationY=0,a.pRelRotationZ=0,Object.defineProperty(a,"deviceOrientation",{get:()=>window.screen?.orientation?.type}),Object.defineProperty(a,"windowWidth",{get:()=>window.innerWidth}),Object.defineProperty(a,"windowHeight",{get:()=>window.innerHeight}),a._colorMode="rgb",a._doStroke=!0,a._doFill=!0,a._strokeSet=!1,a._fillSet=!1,a._tint=null,a._ellipseMode=a.CENTER,a._rectMode=a.CORNER,a._curveDetail=20,a._curveAlpha=0,a._loop=!0,a._textFont="sans-serif",a._textSize=12,a._textLeading=15,a._textLeadDiff=3,a._textStyle="normal",a._pixelDensity=1,a._targetFrameRate=0,a._targetFrameDuration=16.666666666666668,a._frameRate=a._fps=60,a.resizeCanvas=(e,t)=>{e==a.width&&t==a.height||y(e,t)},a.createGraphics=function(e,t,o){let n=new Q5("graphics");return o??={},o.alpha??=!0,n._createCanvas.call(a,e,t,o),n},a.createImage=(e,t,a)=>new Q5.Image(e,t,a),a.displayDensity=()=>window.devicePixelRatio,a.pixelDensity=e=>e&&e!=a._pixelDensity?(a._pixelDensity=e,y(a.width,a.height),e):a._pixelDensity,a.fullscreen=e=>{if(void 0===!e)return document.fullscreenElement;e?document.requestFullscreen():document.exitFullscreen()},a.map=(e,t,a,o,n,r)=>{let i=o+1*(e-t)/(a-t)*(n-o);return r?oe*(1-a)+t*a,a.constrain=(e,t,a)=>Math.min(Math.max(e,t),a),a.dist=function(){let e=arguments;return 4==e.length?Math.hypot(e[0]-e[2],e[1]-e[3]):Math.hypot(e[0]-e[3],e[1]-e[4],e[2]-e[5])},a.norm=(e,t,o)=>a.map(e,t,o,0,1),a.sq=e=>e*e,a.fract=e=>e-Math.floor(e),a.angleMode=e=>a._angleMode=e,a._DEGTORAD=Math.PI/180,a._RADTODEG=180/Math.PI,a.degrees=e=>e*a._RADTODEG,a.radians=e=>e*a._DEGTORAD,a.abs=Math.abs,a.ceil=Math.ceil,a.exp=Math.exp,a.floor=Math.floor,a.log=Math.log,a.mag=Math.hypot,a.max=Math.max,a.min=Math.min,a.round=Math.round,a.pow=Math.pow,a.sqrt=Math.sqrt,a.sin=e=>("degrees"==a._angleMode&&(e=a.radians(e)),Math.sin(e)),a.cos=e=>("degrees"==a._angleMode&&(e=a.radians(e)),Math.cos(e)),a.tan=e=>("degrees"==a._angleMode&&(e=a.radians(e)),Math.tan(e)),a.asin=e=>{let t=Math.asin(e);return"degrees"==a._angleMode&&(t=a.degrees(t)),t},a.acos=e=>{let t=Math.acos(e);return"degrees"==a._angleMode&&(t=a.degrees(t)),t},a.atan=e=>{let t=Math.atan(e);return"degrees"==a._angleMode&&(t=a.degrees(t)),t},a.atan2=(e,t)=>{let o=Math.atan2(e,t);return"degrees"==a._angleMode&&(o=a.degrees(o)),o},a.nf=(e,t,a)=>{let o=e<0,n=(e=Math.abs(e)).toFixed(a).split(".");n[0]=n[0].padStart(t,"0");let r=n.join(".");return o&&(r="-"+r),r},a.createVector=(e,t,o)=>new Q5.Vector(e,t,o,a),a.curvePoint=(e,t,a,o,n)=>{const r=n*n*n,i=n*n;return e*(-.5*r+i-.5*n)+t*(1.5*r-2.5*i+1)+a*(-1.5*r+2*i+.5*n)+o*(.5*r-.5*i)},a.bezierPoint=(e,t,a,o,n)=>{const r=1-n;return Math.pow(r,3)*e+3*Math.pow(r,2)*n*t+3*r*Math.pow(n,2)*a+Math.pow(n,3)*o},a.curveTangent=(e,t,a,o,n)=>{const r=n*n;return e*(-3*r/2+2*n-.5)+t*(9*r/2-5*n)+a*(-9*r/2+4*n+.5)+o*(3*r/2-n)},a.bezierTangent=(e,t,a,o,n)=>{const r=1-n;return 3*o*Math.pow(n,2)-3*a*Math.pow(n,2)+6*a*r*n-6*t*r*n+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)},Q5.supportsHDR?a.Color=Q5.ColorRGBA_P3:a.Color=Q5.ColorRGBA,a.colorMode=e=>{a._colorMode=e,"oklch"==e?a.Color=Q5.ColorOKLCH:"rgb"==e?"srgb"==a.canvas.colorSpace?a.Color=Q5.ColorRGBA:a.Color=Q5.ColorRGBA_P3:"srgb"==e&&(a.Color=Q5.ColorRGBA,a._colorMode="rgb")};let w={aqua:[0,255,255],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],crimson:[220,20,60],darkviolet:[148,0,211],gold:[255,215,0],green:[0,128,0],gray:[128,128,128],grey:[128,128,128],hotpink:[255,105,180],indigo:[75,0,130],khaki:[240,230,140],lightgreen:[144,238,144],lime:[0,255,0],magenta:[255,0,255],navy:[0,0,128],orange:[255,165,0],olive:[128,128,0],peachpuff:[255,218,185],pink:[255,192,203],purple:[128,0,128],red:[255,0,0],skyblue:[135,206,235],tan:[210,180,140],turquoise:[64,224,208],transparent:[0,0,0,0],white:[255,255,255],violet:[238,130,238],yellow:[255,255,0]};function M(e){let t=a._angleMode==a.DEGREES?180:Math.PI,o=2*t;if(0<=e&&e<=o)return e;for(;e<0;)e+=o;for(;e>=t;)e-=o;return e}function R(e,t,o,n,r,s,l,c){if(!a._doFill&&!a._doStroke)return;let h=M(r),d=M(s);if(h>d&&([h,d]=[d,h]),0==h){if(0==d)return;if(a._angleMode==a.DEGREES&&360==d||d==a.TAU)return a.ellipse(e,t,o,n)}i.beginPath();for(let r=0;re.r,a.green=e=>e.g,a.blue=e=>e.b,a.alpha=e=>e.a,a.lightness=e=>100*(.2126*e.r+.7152*e.g+.0722*e.b)/255,a.lerpColor=(e,t,o)=>{if("rgb"==a._colorMode)return new a.Color(a.constrain(a.lerp(e.r,t.r,o),0,255),a.constrain(a.lerp(e.g,t.g,o),0,255),a.constrain(a.lerp(e.b,t.b,o),0,255),a.constrain(a.lerp(e.a,t.a,o),0,255));{let n=t.h-e.h;n>180&&(n-=360),n<-180&&(n+=360);let r=e.h+o*n;return r<0&&(r+=360),r>360&&(r-=360),new a.Color(a.constrain(a.lerp(e.l,t.l,o),0,100),a.constrain(a.lerp(e.c,t.c,o),0,100),r,a.constrain(a.lerp(e.a,t.a,o),0,255))}},a.strokeWeight=e=>{e||(a._doStroke=!1),i.lineWidth=e||1e-4},a.stroke=function(e){if(a._doStroke=!0,a._strokeSet=!0,e._q5Color||"string"==typeof e||(e=a.color(...arguments)),e.a<=0)return a._doStroke=!1;i.strokeStyle=e.toString()},a.noStroke=()=>a._doStroke=!1,a.fill=function(e){if(a._doFill=!0,a._fillSet=!0,e._q5Color||"string"==typeof e||(e=a.color(...arguments)),e.a<=0)return a._doFill=!1;i.fillStyle=e.toString()},a.noFill=()=>a._doFill=!1,a.smooth=()=>a._smooth=!0,a.noSmooth=()=>a._smooth=!1,a.blendMode=e=>i.globalCompositeOperation=e,a.strokeCap=e=>i.lineCap=e,a.strokeJoin=e=>i.lineJoin=e,a.ellipseMode=e=>a._ellipseMode=e,a.rectMode=e=>a._rectMode=e,a.curveDetail=e=>a._curveDetail=e,a.curveAlpha=e=>a._curveAlpha=e,a.curveTightness=e=>a._curveAlpha=e,a.clear=()=>{i.clearRect(0,0,a.canvas.width,a.canvas.height)},a.background=function(e){if(e._q5)return a.image(e,0,0,a.width,a.height);i.save(),i.resetTransform(),e._q5color||"string"==typeof e||(e=a.color(...arguments)),i.fillStyle=e.toString(),i.fillRect(0,0,a.canvas.width,a.canvas.height),i.restore()},a.line=(e,t,o,n)=>{a._doStroke&&(i.beginPath(),i.moveTo(e,t),i.lineTo(o,n),i.stroke())},a.arc=(e,t,o,n,r,i,s,l)=>{if(r==i)return a.ellipse(e,t,o,n);l??=25,s??=a.PIE,a._ellipseMode==a.CENTER?R(e,t,o,n,r,i,s,l):a._ellipseMode==a.RADIUS?R(e,t,2*o,2*n,r,i,s,l):a._ellipseMode==a.CORNER?R(e+o/2,t+n/2,o,n,r,i,s,l):a._ellipseMode==a.CORNERS&&R((e+o)/2,(t+n)/2,o-e,n-t,r,i,s,l)},a.ellipse=(e,t,o,n)=>{n??=o,a._ellipseMode==a.CENTER?S(e,t,o,n):a._ellipseMode==a.RADIUS?S(e,t,2*o,2*n):a._ellipseMode==a.CORNER?S(e+o/2,t+n/2,o,n):a._ellipseMode==a.CORNERS&&S((e+o)/2,(t+n)/2,o-e,n-t)},a.circle=(e,t,o)=>a.ellipse(e,t,o,o),a.point=(e,t)=>{e.x&&(t=e.y,e=e.x),i.beginPath(),i.ellipse(e,t,.4,.4,0,0,a.TAU),i.stroke()},a.rect=(e,t,o,n,r,i,s,l)=>{a._rectMode==a.CENTER?C(e-o/2,t-n/2,o,n,r,i,s,l):a._rectMode==a.RADIUS?C(e-o,t-n,2*o,2*n,r,i,s,l):a._rectMode==a.CORNER?C(e,t,o,n,r,i,s,l):a._rectMode==a.CORNERS&&C(e,t,o-e,n-t,r,i,s,l)},a.square=(e,t,o,n,r,i,s)=>a.rect(e,t,o,o,n,r,i,s),a.beginShape=()=>{b(),i.beginPath(),g=!0},a.beginContour=()=>{i.closePath(),b(),g=!0},a.endContour=()=>{b(),g=!0},a.vertex=(e,t)=>{b(),g?i.moveTo(e,t):i.lineTo(e,t),g=!1},a.bezierVertex=(e,t,a,o,n,r)=>{b(),i.bezierCurveTo(e,t,a,o,n,r)},a.quadraticVertex=(e,t,a,o)=>{b(),i.quadraticCurveTo(e,t,a,o)},a.bezier=(e,t,o,n,r,i,s,l)=>{a.beginShape(),a.vertex(e,t),a.bezierVertex(o,n,r,i,s,l),a.endShape()},a.triangle=(e,t,o,n,r,i)=>{a.beginShape(),a.vertex(e,t),a.vertex(o,n),a.vertex(r,i),a.endShape(a.CLOSE)},a.quad=(e,t,o,n,r,i,s,l)=>{a.beginShape(),a.vertex(e,t),a.vertex(o,n),a.vertex(r,i),a.vertex(s,l),a.endShape(a.CLOSE)},a.endShape=e=>{b(),e&&i.closePath(),a._doFill&&i.fill(),a._doStroke&&i.stroke(),a._doFill||a._doStroke||(i.save(),i.fillStyle="none",i.fill(),i.restore())},a.curveVertex=(e,t)=>{if(_.push([e,t]),_.length<4)return;let o=function(e,t,a,o,n,r,i,s,l,c){function h(e,t,a,o,n,r){let i=Math.pow(o-t,2)+Math.pow(n-a,2);return Math.pow(i,.5*r)+e}let d=[],u=h(0,e,t,a,o,c),g=h(u,a,o,n,r,c),_=h(g,n,r,i,s,c);for(let c=0;c0?(p[e]=1,p[e+1]=0):(p[e]=0,p[e+1]=1));let m=e*p[0]+a*p[1],f=t*p[0]+o*p[1],v=a*p[2]+n*p[3],x=o*p[2]+r*p[3],y=n*p[4]+i*p[5],w=r*p[4]+s*p[5],M=m*p[6]+v*p[7],R=f*p[6]+x*p[7],S=v*p[8]+y*p[9],C=x*p[8]+w*p[9],b=M*p[2]+S*p[3],D=R*p[2]+C*p[3];d.push([b,D])}return d}(..._[_.length-4],..._[_.length-3],..._[_.length-2],..._[_.length-1],a._curveDetail,a._curveAlpha);for(let e=0;e{a.beginShape(),a.curveVertex(e,t),a.curveVertex(o,n),a.curveVertex(r,i),a.curveVertex(s,l),a.endShape()},a.opacity=e=>i.globalAlpha=e,a.translate=(e,t)=>i.translate(e,t),a.rotate=e=>{"degrees"==a._angleMode&&(e=a.radians(e)),i.rotate(e)},a.scale=(e,t)=>{t??=e,i.scale(e,t)},a.applyMatrix=(e,t,a,o,n,r)=>i.transform(e,t,a,o,n,r),a.shearX=e=>i.transform(1,0,a.tan(e),1,0,0),a.shearY=e=>i.transform(1,a.tan(e),0,1,0,0),a.resetMatrix=()=>{i.resetTransform(),i.scale(a._pixelDensity,a._pixelDensity)},a._styleNames=["_doStroke","_doFill","_strokeSet","_fillSet","_tint","_imageMode","_rectMode","_ellipseMode","_textFont","_textLeading","_leadingSet","_textSize","_textAlign","_textBaseline","_textStyle","_textWrap"],a._styles=[],a.push=a.pushMatrix=()=>{i.save();let e={};for(let t of a._styleNames)e[t]=a[t];a._styles.push(e)},a.pop=a.popMatrix=()=>{i.restore();let e=a._styles.pop();for(let t of a._styleNames)a[t]=e[t]},a.imageMode=e=>a._imageMode=e,a.image=(e,t,o,r,s,l,c,h,d)=>{let u=e._q5?e.canvas:e;var g,_;Q5._createNodeJSCanvas&&(u=u.context.canvas),e._q5&&null!=a._tint&&(g=e.canvas.width,_=e.canvas.height,_??=g||a.canvas.height,g??=a.canvas.width,null==v&&(v=new n(g,_).getContext("2d",{colorSpace:a.canvas.colorSpace})),v.canvas.width==g&&v.canvas.height==_||(v.canvas.width=g,v.canvas.height=_),v.drawImage(e.canvas,0,0),e.tinted(a._tint)),r??=e.width||e.videoWidth,s??=e.height||e.videoHeight,"center"==a._imageMode&&(t-=.5*r,o-=.5*s);let p=e._pixelDensity||1;l??=0,c??=0,h?h*=p:h=u.width||u.videoWidth,d?d*=p:d=u.height||u.videoHeight,i.drawImage(u,l*p,c*p,h,d,t,o,r,s),function(){if(!e._q5||!a._tint)return;let t=e.ctx;t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(v.canvas,0,0),t.restore()}()},a._incrementPreload=()=>o++,a._decrementPreload=()=>o--,a.loadImage=function(e,t,n){o++;let r=[...arguments].at(-1);n="object"!=typeof r||r;let i=a.createImage(1,1,n.alpha),s=i.ctx;if(Q5._nodejs&&global.CairoCanvas)CairoCanvas.loadImage(e).then((e=>{i.width=s.canvas.width=e.width,i.height=s.canvas.height=e.height,s.drawImage(e,0,0),o--,t&&t(i)})).catch((e=>{throw o--,e}));else{let a=new window.Image;a.src=e,a.crossOrigin="Anonymous",a._pixelDensity=1,a.onload=()=>{i.width=s.canvas.width=a.naturalWidth,i.height=s.canvas.height=a.naturalHeight,s.drawImage(a,0,0),o--,t&&t(i)},a.onerror=e=>{throw o--,e}}return i},a._clearTemporaryBuffers=()=>{f=null,v=null,x=null},a.loadFont=(e,t)=>{o++;let a=e.split("/"),n=a[a.length-1].split(".")[0].replace(" ",""),r=new FontFace(n,"url("+e+")");return document.fonts.add(r),r.load().then((()=>{o--,t&&t(n)})),n},a.textFont=e=>a._textFont=e,a.textSize=e=>{if(void 0===e)return a._textSize;a._textSize=e,a._leadingSet||(a._textLeading=1.25*e,a._textLeadDiff=a._textLeading-e)},a.textLeading=e=>{if(void 0===e)return a._textLeading;a._textLeading=e,a._textLeadDiff=e-a._textSize,a._leadingSet=!0},a.textStyle=e=>a._textStyle=e,a.textAlign=(e,t)=>{i.textAlign=e,t&&(i.textBaseline=t==a.CENTER?"middle":t)},a.textWidth=e=>(i.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`,i.measureText(e).width),a.textAscent=e=>(i.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`,i.measureText(e).actualBoundingBoxAscent),a.textDescent=e=>(i.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`,i.measureText(e).actualBoundingBoxDescent),a._textCache=!0,a._TimedCache=class extends Map{constructor(){super(),this.maxSize=500}set(e,t){t.lastAccessed=Date.now(),super.set(e,t),this.size>this.maxSize&&this.gc()}get(e){const t=super.get(e);return t&&(t.lastAccessed=Date.now()),t}gc(){let e,t=1/0,a=0;for(const[o,n]of this.entries())n.lastAccessed(t&&(a._tic.maxSize=t),void 0!==e&&(a._textCache=e),a._textCache),a.createTextImage=(e,t,o)=>{let n=a._textCache;a._textCache=!0,a._useCache=!0,a.text(e,0,0,t,o),a._useCache=!1;let r=D(e,t,o);return a._textCache=n,a._tic.get(r)},a.text=(e,t,o,n,r)=>{if(void 0===e)return;if(e=e.toString(),!a._doFill&&!a._doStroke)return;let s,l,c,h,d,u,g,_,p=1,m=i.getTransform(),f=a._useCache||a._textCache&&(0!=m.b||0!=m.c);if(f){if(h=D(e,n,r),l=a._tic.get(h),l)return void a.textImage(l,t,o);c=a.createGraphics.call(a,1,1),s=c.ctx,p=a._pixelDensity}else s=i,d=t,u=o;s.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`;let v=e.split("\n");if(f){d=0,u=a._textLeading*v.length;let t=s.measureText(" ");g=t.fontBoundingBoxAscent,_=t.fontBoundingBoxDescent,r??=u+_,c.resizeCanvas(Math.ceil(s.measureText(e).width),Math.ceil(r)),s.fillStyle=i.fillStyle,s.strokeStyle=i.strokeStyle,s.lineWidth=i.lineWidth}let x=s.fillStyle;a._fillSet||(s.fillStyle="black");for(let e=0;er));e++);a._fillSet||(s.fillStyle=x),f&&(l=c.get(),l._ascent=g,l._descent=_,a._tic.set(h,l),a.textImage(l,t,o))},a.textImage=(e,t,o)=>{let n=a._imageMode;a._imageMode="corner","center"==i.textAlign?t-=.5*e.width:"right"==i.textAlign&&(t-=e.width),"alphabetic"==i.textBaseline&&(o-=a._textLeading),"middle"==i.textBaseline?o-=e._descent+.5*e._ascent+a._textLeadDiff:"bottom"==i.textBaseline?o-=e._ascent+e._descent+a._textLeadDiff:"top"==i.textBaseline&&(o-=e._descent+a._textLeadDiff),a.image(e,t,o),a._imageMode=n};var E,I=4095,T=4,A=.5,O=e=>.5*(1-Math.cos(e*Math.PI));a.noise=(e,t,a)=>{if(t??=0,a??=0,null==E){E=new Array(4096);for(var o=0;o<4096;o++)E[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),a<0&&(a=-a);for(var n,r,i,s,l,c=Math.floor(e),h=Math.floor(t),d=Math.floor(a),u=e-c,g=t-h,_=a-d,p=0,m=.5,f=0;f=1&&(c++,u--),(g*=2)>=1&&(h++,g--),(_*=2)>=1&&(d++,_--)}return p},a.noiseDetail=(e,t)=>{e>0&&(T=e),t>0&&(A=t)};const P=()=>{let e,t,a=4294967295;return{setSeed(o){e=t=(o??Math.random()*a)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17,e^=e>>13,e^=e<<5,(e>>>0)/a)}};let k=P();k.setSeed(),a.noiseSeed=e=>{let t=void 0===e?4294967295*Math.random():e;E||(E=new Float32Array(4096));for(var a=0;a<4096;a++)t^=t<<17,t^=t>>13,t^=t<<5,E[a]=(t>>>0)/4294967295},a.randomSeed=e=>k.setSeed(e),a.random=(e,t)=>void 0===e?k.rand():"number"==typeof e?void 0!==t?k.rand()*(t-e)+e:k.rand()*e:e[Math.trunc(e.length*k.rand())],a.randomGenerator=e=>{e==a.LCG?k=(()=>{const e=4294967296;let t,a;return{setSeed(o){a=t=(o??Math.random()*e)>>>0},getSeed:()=>t,rand:()=>(a=(1664525*a+1013904223)%e,a/e)}})():e==a.SHR3&&(k=P()),k.setSeed()};var z=new function(){var e,t,a,o=new Array(128),n=new Array(256),r=new Array(128),i=new Array(128),s=new Array(256),l=new Array(256),c=()=>4294967296*k.rand()-2147483648,h=()=>.5+2.328306e-10*(c()|0),d=()=>{for(var t,n,s,l,d=3.44262;;){if(t=a*r[e],0==e){do{s=h(),l=h(),t=.2904764*-Math.log(s),n=-Math.log(l)}while(n+n0?d+t:-d-t}if(i[e]+h()*(i[e-1]-i[e]){for(var a;;){if(0==e)return 7.69711-Math.log(h());if(a=t*s[e],l[e]+h()*(l[e-1]-l[e])(a=c(),e=127&a,Math.abs(a)(t=c()>>>0){var e,t,a=2147483648,c=4294967296,h=3.442619855899,d=h,u=.00991256303526217,g=7.697117470131487,_=g,p=.003949659822581572;for(e=u/Math.exp(-.5*h*h),o[0]=Math.floor(h/e*a),o[1]=0,r[0]=e/a,r[127]=h/a,i[0]=1,i[127]=Math.exp(-.5*h*h),t=126;t>=1;t--)h=Math.sqrt(-2*Math.log(u/h+Math.exp(-.5*h*h))),o[t+1]=Math.floor(h/d*a),d=h,i[t]=Math.exp(-.5*h*h),r[t]=h/a;for(e=p/Math.exp(-g),n[0]=Math.floor(g/e*c),n[1]=0,s[0]=e/c,s[255]=g/c,l[0]=1,l[255]=Math.exp(-g),t=254;t>=1;t--)g=-Math.log(p/g+Math.exp(-g)),n[t+1]=Math.floor(g/_*c),_=g,l[t]=Math.exp(-g),s[t]=g/c}};function Q(e){let t=e||performance.now();if(a._lastFrameTime??=t-a._targetFrameDuration,a._loop)u=F(Q);else if(a.frameCount&&!a._redraw)return;if(u&&a.frameCount){if(t-a._lastFrameTime(z.hasInit||(z.zigset(),z.hasInit=!0),z.RNOR()*t+e),a.randomExponential=()=>(z.hasInit||(z.zigset(),z.hasInit=!0),z.REXP()),a.Element=function(e){this.elt=e},a._elements=[],a.createCapture=e=>{var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then((e=>{t.srcObject=e})),t.style.position="absolute",t.style.opacity=1e-5,t.style.zIndex=-1e3,document.body.append(t),t},a.print=console.log,a.describe=()=>{},a.noLoop=()=>{a._loop=!1,u=null},a.loop=()=>{a._loop=!0,null==u&&Q()},a.redraw=e=>{e??=1,a._redraw=!0;for(let t=0;t{a.noLoop(),a.canvas.remove()},a.frameRate=e=>(e&&(a._targetFrameRate=e,a._targetFrameDuration=1e3/e),a._frameRate),a.getTargetFrameRate=()=>a._targetFrameRate,a.getFPS=()=>a._fps,"object"==typeof localStorage&&(a.storeItem=localStorage.setItem,a.getItem=localStorage.getItem,a.removeItem=localStorage.removeItem,a.clearStorage=localStorage.clear),a._updateMouse=e=>{if(e.changedTouches)return;let t=a.canvas.getBoundingClientRect(),o=a.canvas.scrollWidth/a.width||1,n=a.canvas.scrollHeight/a.height||1;a.mouseX=(e.clientX-t.left)/o,a.mouseY=(e.clientY-t.top)/n},a._onmousedown=e=>{a._updateMouse(e),a.mouseIsPressed=!0,a.mouseButton=[a.LEFT,a.CENTER,a.RIGHT][e.button],a.mousePressed(e)},a._onmousemove=e=>{a._updateMouse(e),a.mouseIsPressed?a.mouseDragged(e):a.mouseMoved(e)},a._onmouseup=e=>{a._updateMouse(e),a.mouseIsPressed=!1,a.mouseReleased(e)},a._onclick=e=>{a._updateMouse(e),a.mouseIsPressed=!0,a.mouseClicked(e),a.mouseIsPressed=!1},a.cursor=(e,t,o)=>{let n="";e.includes(".")&&(e=`url("${e}")`,n=", auto"),void 0!==t&&(e+=" "+t+" "+o),a.canvas.style.cursor=e+n},a.noCursor=()=>{a.canvas.style.cursor="none"},a._onkeydown=e=>{e.repeat||(a.keyIsPressed=!0,a.key=e.key,a.keyCode=e.keyCode,p[a.keyCode]=!0,a.keyPressed(e),1==e.key.length&&a.keyTyped(e))},a._onkeyup=e=>{a.keyIsPressed=!1,a.key=e.key,a.keyCode=e.keyCode,p[a.keyCode]=!1,a.keyReleased(e)},a._ontouchstart=e=>{a.touches=[...e.touches].map(L),a._isTouchAware||(a.mouseX=a.touches[0].x,a.mouseY=a.touches[0].y,a.mouseIsPressed=!0,a.mouseButton=a.LEFT,a.mousePressed(e)||e.preventDefault()),a.touchStarted(e)||e.preventDefault()},a._ontouchmove=e=>{a.touches=[...e.touches].map(L),a._isTouchAware||(a.mouseX=a.touches[0].x,a.mouseY=a.touches[0].y,a.mouseDragged(e)||e.preventDefault()),a.touchMoved(e)||e.preventDefault()},a._ontouchend=e=>{a.touches=[...e.touches].map(L),a._isTouchAware||a.touches.length||(a.mouseIsPressed=!1,a.mouseReleased(e)||e.preventDefault()),a.touchEnded(e)||e.preventDefault()},"graphics"!=e&&(a.keyIsDown=e=>!!p[e],a.canvas.onmousedown=e=>a._onmousedown(e),a.canvas.onmouseup=e=>a._onmouseup(e),a.canvas.onclick=e=>a._onclick(e),a.canvas.ontouchstart=e=>a._ontouchstart(e),a.canvas.ontouchmove=e=>a._ontouchmove(e),a.canvas.ontouchcancel=a.canvas.ontouchend=e=>a._ontouchend(e)),a.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPermission),a.requestSensorPermissions=()=>{DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then((e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then((e=>{"granted"==e&&(a.hasSensorPermission=!0)})).catch(alert)})).catch(alert)};window.ondeviceorientation=e=>{a.pRotationX=a.rotationX,a.pRotationY=a.rotationY,a.pRotationZ=a.rotationZ,a.pRelRotationX=a.relRotationX,a.pRelRotationY=a.relRotationY,a.pRelRotationZ=a.relRotationZ,a.rotationX=e.beta*(Math.PI/180),a.rotationY=e.gamma*(Math.PI/180),a.rotationZ=e.alpha*(Math.PI/180),a.relRotationX=[-a.rotationY,-a.rotationX,a.rotationY][Math.trunc(window.orientation/90)+1],a.relRotationY=[-a.rotationX,a.rotationY,a.rotationX][Math.trunc(window.orientation/90)+1],a.relRotationZ=a.rotationZ},window.ondevicemotion=e=>{if(a.pAccelerationX=a.accelerationX,a.pAccelerationY=a.accelerationY,a.pAccelerationZ=a.accelerationZ,!e.acceleration){let r=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])((n=a.rotationY,t=[a.cos(n),0,a.sin(n),0,0,1,0,0,-a.sin(n),0,a.cos(n),0,0,0,0,1],o=(e=>[1,0,0,0,0,a.cos(e),-a.sin(e),0,0,a.sin(e),a.cos(e),0,0,0,0,1])(a.rotationX),[t[0]*o[0]+t[1]*o[4]+t[2]*o[8]+t[3]*o[12],t[0]*o[1]+t[1]*o[5]+t[2]*o[9]+t[3]*o[13],t[0]*o[2]+t[1]*o[6]+t[2]*o[10]+t[3]*o[14],t[0]*o[3]+t[1]*o[7]+t[2]*o[11]+t[3]*o[15],t[4]*o[0]+t[5]*o[4]+t[6]*o[8]+t[7]*o[12],t[4]*o[1]+t[5]*o[5]+t[6]*o[9]+t[7]*o[13],t[4]*o[2]+t[5]*o[6]+t[6]*o[10]+t[7]*o[14],t[4]*o[3]+t[5]*o[7]+t[6]*o[11]+t[7]*o[15],t[8]*o[0]+t[9]*o[4]+t[10]*o[8]+t[11]*o[12],t[8]*o[1]+t[9]*o[5]+t[10]*o[9]+t[11]*o[13],t[8]*o[2]+t[9]*o[6]+t[10]*o[10]+t[11]*o[14],t[8]*o[3]+t[9]*o[7]+t[10]*o[11]+t[11]*o[15],t[12]*o[0]+t[13]*o[4]+t[14]*o[8]+t[15]*o[12],t[12]*o[1]+t[13]*o[5]+t[14]*o[9]+t[15]*o[13],t[12]*o[2]+t[13]*o[6]+t[14]*o[10]+t[15]*o[14],t[12]*o[3]+t[13]*o[7]+t[14]*o[11]+t[15]*o[15]]),[0,0,-9.80665]);a.accelerationX=e.accelerationIncludingGravity.x+r[0],a.accelerationY=e.accelerationIncludingGravity.y+r[1],a.accelerationZ=e.accelerationIncludingGravity.z-r[2]}var t,o,n},a.year=()=>(new Date).getFullYear(),a.day=()=>(new Date).getDay(),a.hour=()=>(new Date).getHours(),a.minute=()=>(new Date).getMinutes(),a.second=()=>(new Date).getSeconds(),a.millis=()=>performance.now()-m,a._loadFile=(e,t,a)=>{o++;let n={};return fetch(e).then((e=>"json"==a?e.json():"text"==a?e.text():void 0)).then((e=>{o--,Object.assign(n,e),t&&t(e)})),n},a.loadStrings=(e,t)=>a._loadFile(e,t,"text"),a.loadJSON=(e,t)=>a._loadFile(e,t,"json"),a.loadSound=(e,t)=>{o++;let a=new Audio(e);return a.addEventListener("canplaythrough",(()=>{o--,t&&t(a)})),a.load(),a.setVolume=e=>a.volume=e,a.setLoop=e=>a.loop=e,a},"global"==e&&(Object.assign(Q5,a),delete Q5.Q5),Q5.Image??=_Q5Image;for(let G of Q5.prototype._methods.init)G.call(a);for(let[V,Y]of Object.entries(Q5.prototype))"_"!=V[0]&&"function"==typeof a[V]&&(a[V]=Y.bind(a));if("global"==e){let H=Object.getOwnPropertyNames(a),j=Q5._nodejs?global:window;for(let X of H)"function"==typeof a[X]?j[X]=a[X]:Object.defineProperty(j,X,{get:()=>a[X],set:e=>a[X]=e})}if("function"==typeof e&&e(a),"image"==e)return;let F=window.requestAnimationFrame||function(e){const t=a._lastFrameTime+a._targetFrameDuration;return setTimeout((()=>{e(t)}),t-performance.now())},N="global"==e?Q5._nodejs?global:window:a,q=N.preload,B=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchMoved","touchEnded","windowResized"];for(let U of B)N[U]?a._isGlobal&&(a[U]=N[U]):a[U]=()=>{};function $(){if(a._startDone=!0,o>0)return F($);m=performance.now(),a.setup(),a.frameCount||(null===i&&a.createCanvas(100,100),a._setupDone=!0,i&&a.resetMatrix(),F(Q))}a._isTouchAware=a.touchStarted||a.touchMoved||a.mouseReleased,window&&"graphics"!=e&&(window.addEventListener("mousemove",(e=>a._onmousemove(e)),!1),window.addEventListener("keydown",(e=>a._onkeydown(e)),!1),window.addEventListener("keyup",(e=>a._onkeyup(e)),!1)),(a.setup||a.draw)&&(a._startDone=!1,arguments.length||q?(a.preload(),$()):(N.preload=a.preload=()=>{a._startDone||$()},setTimeout(a.preload,32)))}Q5.Color=class{constructor(){this._q5Color=!0}},Q5.ColorOKLCH=class extends Q5.Color{constructor(e,t,a,o){super(),this.l=e,this.c=t,this.h=a,this.a=o??1}toString(){return`color(oklch ${this.l} ${this.c} ${this.h} / ${this.a})`}},Q5.ColorRGBA=class extends Q5.Color{constructor(e,t,a,o){super(),this.r=e,this.g=t,this.b=a,this.a=o??255}setRed(e){this.r=e}setGreen(e){this.g=e}setBlue(e){this.b=e}setAlpha(e){this.a=e}get levels(){return[this.r,this.g,this.b,this.a]}toString(){return`rgb(${this.r} ${this.g} ${this.b} / ${this.a/255})`}},Q5.ColorRGBA_P3=class extends Q5.ColorRGBA{constructor(e,t,a,o){super(e,t,a,o),this._edited=!0}get r(){return this._r}set r(e){this._r=e,this._edited=!0}get g(){return this._g}set g(e){this._g=e,this._edited=!0}get b(){return this._b}set b(e){this._b=e,this._edited=!0}get a(){return this._a}set a(e){this._a=e,this._edited=!0}toString(){if(this._edited){let e=(this._r/255).toFixed(3),t=(this._g/255).toFixed(3),a=(this._b/255).toFixed(3),o=(this._a/255).toFixed(3);this._css=`color(display-p3 ${e} ${t} ${a} / ${o})`,this._edited=!1}return this._css}},Q5.Vector=class{constructor(e,t,a,o){this.x=e||0,this.y=t||0,this.z=a||0,this._$=o||window,this._cn=null,this._cnsq=null}set(e,t,a){this.x=e||0,this.y=t||0,this.z=a||0}copy(){return new Q5.Vector(this.x,this.y,this.z)}_arg2v(e,t,a){return void 0!==e.x?e:void 0!==t?{x:e,y:t,z:a||0}:{x:e,y:e,z:e}}_calcNorm(){this._cnsq=this.x*this.x+this.y*this.y+this.z*this.z,this._cn=Math.sqrt(this._cnsq)}add(){let e=this._arg2v(...arguments);return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}rem(){let e=this._arg2v(...arguments);return this.x%=e.x,this.y%=e.y,this.z%=e.z,this}sub(){let e=this._arg2v(...arguments);return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}mult(){let e=this._arg2v(...arguments);return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}div(){let e=this._arg2v(...arguments);return e.x?this.x/=e.x:this.x=0,e.y?this.y/=e.y:this.y=0,e.z?this.z/=e.z:this.z=0,this}mag(){return this._calcNorm(),this._cn}magSq(){return this._calcNorm(),this._cnsq}dot(){let e=this._arg2v(...arguments);return this.x*e.x+this.y*e.y+this.z*e.z}dist(){let e=this._arg2v(...arguments),t=this.x-e.x,a=this.y-e.y,o=this.z-e.z;return Math.sqrt(t*t+a*a+o*o)}cross(){let e=this._arg2v(...arguments),t=this.y*e.z-this.z*e.y,a=this.z*e.x-this.x*e.z,o=this.x*e.y-this.y*e.x;return this.x=t,this.y=a,this.z=o,this}normalize(){this._calcNorm();let e=this._cn;return 0!=e&&(this.x/=e,this.y/=e,this.z/=e),this._cn=1,this._cnsq=1,this}limit(e){this._calcNorm();let t=this._cn;if(t>e){let a=e/t;this.x*=a,this.y*=a,this.z*=a,this._cn=e,this._cnsq=e*e}return this}setMag(e){this._calcNorm();let t=e/this._cn;return this.x*=t,this.y*=t,this.z*=t,this._cn=e,this._cnsq=e*e,this}heading(){return this._$.atan2(this.y,this.x)}rotate(e){let t=this._$.cos(e),a=this._$.sin(e),o=this.x*t-this.y*a,n=this.x*a+this.y*t;return this.x=o,this.y=n,this}angleBetween(){let e=this._arg2v(...arguments),t=Q5.Vector.cross(this,e);return this._$.atan2(t.mag(),this.dot(e))*Math.sign(t.z||1)}lerp(){let e=[...arguments],t=this._arg2v(...e.slice(0,-1)),a=e[e.length-1];return this.x+=(t.x-this.x)*a,this.y+=(t.y-this.y)*a,this.z+=(t.z-this.z)*a,this}reflect(e){return e.normalize(),this.sub(e.mult(2*this.dot(e)))}array(){return[this.x,this.y,this.z]}equals(e,t){return t??=Number.EPSILON||0,Math.abs(e.x-this.x)e.copy().add(t),Q5.Vector.cross=(e,t)=>e.copy().cross(t),Q5.Vector.dist=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z),Q5.Vector.div=(e,t)=>e.copy().div(t),Q5.Vector.dot=(e,t)=>e.copy().dot(t),Q5.Vector.equals=(e,t,a)=>e.equals(t,a),Q5.Vector.lerp=(e,t,a)=>e.copy().lerp(t,a),Q5.Vector.limit=(e,t)=>e.copy().limit(t),Q5.Vector.heading=e=>this._$.atan2(e.y,e.x),Q5.Vector.magSq=e=>e.x*e.x+e.y*e.y+e.z*e.z,Q5.Vector.mag=e=>Math.sqrt(Q5.Vector.magSq(e)),Q5.Vector.mult=(e,t)=>e.copy().mult(t),Q5.Vector.normalize=e=>e.copy().normalize(),Q5.Vector.rem=(e,t)=>e.copy().rem(t),Q5.Vector.sub=(e,t)=>e.copy().sub(t);for(let e of["fromAngle","fromAngles","random2D","random3D"])Q5.Vector[e]=(t,a,o)=>(new Q5.Vector)[e](t,a,o);class _Q5Image extends Q5{constructor(e,t,a){super("image"),delete this.createCanvas,a??={},a.alpha??=!0,this._createCanvas(e,t,"2d",a),this._loop=!1}get w(){return this.width}get h(){return this.height}}"object"!=typeof window&&(window=0),Q5._nodejs="object"==typeof process,Q5.canvasOptions={alpha:!1,desynchronized:!1,colorSpace:"display-p3"},window.matchMedia&&matchMedia("(dynamic-range: high) and (color-gamut: p3)").matches?Q5.supportsHDR=!0:Q5.canvasOptions.colorSpace="srgb",Q5._instanceCount=0,Q5._friendlyError=(e,t)=>{throw t+": "+e},Q5._validateParameters=()=>!0,Q5.prototype._methods={init:[],pre:[],post:[],remove:[]},Q5.prototype.registerMethod=(e,t)=>Q5.prototype._methods[e].push(t),Q5.prototype.registerPreloadMethod=(e,t)=>Q5.prototype[e]=t[e],"object"==typeof module?(global.p5??=Q5,module.exports=global.Q5=Q5):(window.p5??=Q5,window.Q5=Q5),"object"==typeof document&&document.addEventListener("DOMContentLoaded",(()=>{Q5._hasGlobal||new Q5("auto")})); +function Q5(e,t){let a=this;a._q5=!0;let o=0;if(e||(e="global"),"auto"==e){if(!window.setup&&!window.draw)return;e="global"}"global"==e&&(Q5._hasGlobal=a._isGlobal=!0);let n=window.OffscreenCanvas||function(){return document.createElement("canvas")},r=null,i=a.ctx=a.drawingContext=null;if(a.canvas=null,a.pixels=[],a.noCanvas=()=>{a.canvas?.remove&&a.canvas.remove(),a.canvas=0,i=a.ctx=a.drawingContext=0},Q5._nodejs?Q5._createNodeJSCanvas&&(a.canvas=Q5._createNodeJSCanvas(100,100)):"image"!=e&&"graphics"!=e||(a.canvas=new n(100,100)),a.canvas||("object"==typeof document?(a.canvas=document.createElement("canvas"),a.canvas.id="defaultCanvas"+Q5._instanceCount++,a.canvas.classList.add("p5Canvas","q5Canvas")):a.noCanvas()),a.canvas.width=a.width=100,a.canvas.height=a.height=100,a.canvas&&"graphics"!=e&&"image"!=e){function s(){t??=document.getElementsByTagName("main")[0],t||(t=document.createElement("main"),document.body.append(t)),a.canvas.parent(t)}a._setupDone=!1,a._resize=()=>{a.frameCount>1&&(a._shouldResize=!0)},t&&"string"==typeof t&&(t=document.getElementById(t)),a.canvas.parent=e=>{"string"==typeof e&&(e=document.getElementById(e)),e.append(a.canvas),"function"==typeof ResizeObserver?(a._ro&&a._ro.disconnect(),a._ro=new ResizeObserver(a._resize),a._ro.observe(t)):a.frameCount||window.addEventListener("resize",a._resize)},document.body?s():document.addEventListener("DOMContentLoaded",s)}function l(e,t){t??=e||a.canvas.height,e??=a.canvas.width,null==f&&(f=new n(e,t).getContext("2d",{colorSpace:a.canvas.colorSpace})),f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}function c(){let e=a.canvas.width*a.canvas.height*4;x&&e==x.length||(x=new Uint8ClampedArray(e))}function h(e,t){a._filters||(a._filters=[],a._filters[a.THRESHOLD]=(e,t)=>{void 0===t?t=127.5:t*=255;for(let a=0;a=t?255:0}},a._filters[a.GRAY]=e=>{for(let t=0;t{for(let t=0;t{for(let t=0;t{t??=4;let a=t-1;for(let o=0;o>8)/a,e[o+1]=255*(e[o+1]*t>>8)/a,e[o+2]=255*(e[o+2]*t>>8)/a},a._filters[a.DILATE]=e=>{c(),x.set(e);let[t,o]=[a.canvas.width,a.canvas.height];for(let a=0;a{c(),x.set(e);let[t,o]=[a.canvas.width,a.canvas.height];for(let a=0;a{t=t||1,t=Math.floor(t*a._pixelDensity),c(),x.set(e);let o=2*t+1,n=function(e){let a=new Float32Array(e),o=.3*t+.8,n=o*o*2;for(let t=0;t{r=i.getImageData(0,0,a.canvas.width,a.canvas.height),a.pixels=r.data},a.updatePixels=()=>{null!=r&&i.putImageData(r,0,0)},a.filter=(e,t)=>{if(!i.filter)return h(e,t);if(l(),"string"==typeof e)d(e);else if(e==a.THRESHOLD){t??=.5,t=Math.max(t,1e-5),d(`saturate(0%) brightness(${Math.floor(.5/t*100)}%) contrast(1000000%)`)}else e==a.GRAY?d("saturate(0%)"):e==a.OPAQUE?(f.fillStyle="black",f.fillRect(0,0,f.canvas.width,f.canvas.height),f.drawImage(a.canvas,0,0),i.save(),i.resetTransform(),i.drawImage(f.canvas,0,0),i.restore()):e==a.INVERT?d("invert(100%)"):e==a.BLUR?d(`blur(${Math.ceil(t*a._pixelDensity/1)||1}px)`):h(e,t)},a.resize=(e,t)=>{l(),f.drawImage(a.canvas,0,0),a.width=e,a.height=t,a.canvas.width=e*a._pixelDensity,a.canvas.height=t*a._pixelDensity,i.save(),i.resetTransform(),i.clearRect(0,0,a.canvas.width,a.canvas.height),i.drawImage(f.canvas,0,0,a.canvas.width,a.canvas.height),i.restore()},a.get=(e,t,o,n)=>{let r=a._pixelDensity||1;if(void 0!==e&&void 0===o){let o=i.getImageData(e*r,t*r,1,1).data;return new a.Color(o[0],o[1],o[2],o[3]/255)}e=(e||0)*r,t=(t||0)*r;let s=o=o||a.width,l=n=n||a.height;o*=r,n*=r;let c=a.createImage(o,n),h=i.getImageData(e,t,o,n);return c.ctx.putImageData(h,0,0),c._pixelDensity=r,c.width=s,c.height=l,c},a.set=(e,t,o)=>{if(o._q5){let n=a._tint;return a._tint=null,a.image(o,e,t),void(a._tint=n)}a.pixels.length||a.loadPixels();let n=a._pixelDensity||1;for(let r=0;ra._tint=null,a.mask=e=>{i.save(),i.resetTransform();let t=i.globalCompositeOperation;i.globalCompositeOperation="destination-in",i.drawImage(e.canvas,0,0),i.globalCompositeOperation=t,i.restore()},a._save=(e,t,a)=>{if(t=t||"untitled","jpg"==(a=a||"png")||"png"==a||"webp"==a)e=e.toDataURL("image/"+a);else{let t="text/plain";"json"==a&&("string"!=typeof e&&(e=JSON.stringify(e)),t="text/json"),e=new Blob([e],{type:t}),e=URL.createObjectURL(e)}let o=document.createElement("a");o.href=e,o.download=t+"."+a,document.body.append(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(o.href)},a.save=(e,t,o)=>{if((!e||"string"==typeof e&&(!t||!o&&t.length<5))&&(o=t,t=e,e=a.canvas),o)return a._save(e,t,o);t?(t=t.split("."),a._save(e,t[0],t.at(-1))):a._save(e)},a.canvas.save=a.save,a.saveCanvas=a.save;let u=null,g=!0,_=[],p={},m=0,f=null,v=null,x=null;if(a.THRESHOLD=1,a.GRAY=2,a.OPAQUE=3,a.INVERT=4,a.POSTERIZE=5,a.DILATE=6,a.ERODE=7,a.BLUR=8,"image"==e)return;function y(e,t){a.width=e,a.height=t;let o=function(){let e={};for(let t in i)"function"!=typeof i[t]&&(e[t]=i[t]);return delete e.canvas,e}();a.canvas.width=Math.ceil(e*a._pixelDensity),a.canvas.height=Math.ceil(t*a._pixelDensity),!a.canvas.fullscreen&&a.canvas.style&&(a.canvas.style.width=e+"px",a.canvas.style.height=t+"px");for(let e in o)a.ctx[e]=o[e];i.scale(a._pixelDensity,a._pixelDensity)}a.BLEND="source-over",a.REMOVE="destination-out",a.ADD="lighter",a.DARKEST="darken",a.LIGHTEST="lighten",a.DIFFERENCE="difference",a.SUBTRACT="subtract",a.EXCLUSION="exclusion",a.MULTIPLY="multiply",a.SCREEN="screen",a.REPLACE="copy",a.OVERLAY="overlay",a.HARD_LIGHT="hard-light",a.SOFT_LIGHT="soft-light",a.DODGE="color-dodge",a.BURN="color-burn",a.RGB="rgb",a.RGBA="rgb",a.HSB="hsb",a.CHORD=0,a.PIE=1,a.OPEN=2,a.RADIUS="radius",a.CORNER="corner",a.CORNERS="corners",a.ROUND="round",a.SQUARE="butt",a.PROJECT="square",a.MITER="miter",a.BEVEL="bevel",a.CLOSE=1,a.NORMAL="normal",a.ITALIC="italic",a.BOLD="bold",a.BOLDITALIC="italic bold",a.CENTER="center",a.LEFT="left",a.RIGHT="right",a.TOP="top",a.BOTTOM="bottom",a.BASELINE="alphabetic",a.LANDSCAPE="landscape",a.PORTRAIT="portrait",a.ALT=18,a.BACKSPACE=8,a.CONTROL=17,a.DELETE=46,a.DOWN_ARROW=40,a.ENTER=13,a.ESCAPE=27,a.LEFT_ARROW=37,a.OPTION=18,a.RETURN=13,a.RIGHT_ARROW=39,a.SHIFT=16,a.TAB=9,a.UP_ARROW=38,a.DEGREES="degrees",a.RADIANS="radians",a.HALF_PI=Math.PI/2,a.PI=Math.PI,a.QUARTER_PI=Math.PI/4,a.TAU=2*Math.PI,a.TWO_PI=2*Math.PI,a.ARROW="default",a.CROSS="crosshair",a.HAND="pointer",a.MOVE="move",a.TEXT="text",a.VIDEO={video:!0,audio:!1},a.AUDIO={video:!1,audio:!0},a.SHR3=1,a.LCG=2,a.hint=(e,t)=>{a[e]=t},a.frameCount=0,a.deltaTime=16,a.mouseX=0,a.mouseY=0,a.touches=[],a.mouseButton=null,a.keyIsPressed=!1,a.mouseIsPressed=!1,a.key=null,a.keyCode=null,a.accelerationX=0,a.accelerationY=0,a.accelerationZ=0,a.rotationX=0,a.rotationY=0,a.rotationZ=0,a.relRotationX=0,a.relRotationY=0,a.relRotationZ=0,a.pmouseX=0,a.pmouseY=0,a.pAccelerationX=0,a.pAccelerationY=0,a.pAccelerationZ=0,a.pRotationX=0,a.pRotationY=0,a.pRotationZ=0,a.pRelRotationX=0,a.pRelRotationY=0,a.pRelRotationZ=0,Object.defineProperty(a,"deviceOrientation",{get:()=>window.screen?.orientation?.type}),Object.defineProperty(a,"windowWidth",{get:()=>window.innerWidth}),Object.defineProperty(a,"windowHeight",{get:()=>window.innerHeight}),a._colorMode="rgb",a._doStroke=!0,a._doFill=!0,a._strokeSet=!1,a._fillSet=!1,a._tint=null,a._ellipseMode=a.CENTER,a._rectMode=a.CORNER,a._curveDetail=20,a._curveAlpha=0,a._loop=!0,a._textFont="sans-serif",a._textSize=12,a._textLeading=15,a._textLeadDiff=3,a._textStyle="normal",a._pixelDensity=1,a._targetFrameRate=0,a._targetFrameDuration=16.666666666666668,a._frameRate=a._fps=60,a.resizeCanvas=(e,t)=>{e==a.width&&t==a.height||y(e,t)},a.createGraphics=function(e,t,o){let n=new Q5("graphics");return o??={},o.alpha??=!0,n._createCanvas.call(a,e,t,o),n},a.createImage=(e,t,a)=>new Q5.Image(e,t,a),a.displayDensity=()=>window.devicePixelRatio,a.pixelDensity=e=>e&&e!=a._pixelDensity?(a._pixelDensity=e,y(a.width,a.height),e):a._pixelDensity,a.fullscreen=e=>{if(void 0===e)return document.fullscreenElement;e?document.body.requestFullscreen():document.body.exitFullscreen()},a.map=(e,t,a,o,n,r)=>{let i=o+1*(e-t)/(a-t)*(n-o);return r?oe*(1-a)+t*a,a.constrain=(e,t,a)=>Math.min(Math.max(e,t),a),a.dist=function(){let e=arguments;return 4==e.length?Math.hypot(e[0]-e[2],e[1]-e[3]):Math.hypot(e[0]-e[3],e[1]-e[4],e[2]-e[5])},a.norm=(e,t,o)=>a.map(e,t,o,0,1),a.sq=e=>e*e,a.fract=e=>e-Math.floor(e),a.angleMode=e=>a._angleMode=e,a._DEGTORAD=Math.PI/180,a._RADTODEG=180/Math.PI,a.degrees=e=>e*a._RADTODEG,a.radians=e=>e*a._DEGTORAD,a.abs=Math.abs,a.ceil=Math.ceil,a.exp=Math.exp,a.floor=Math.floor,a.log=Math.log,a.mag=Math.hypot,a.max=Math.max,a.min=Math.min,a.round=Math.round,a.pow=Math.pow,a.sqrt=Math.sqrt,a.sin=e=>("degrees"==a._angleMode&&(e=a.radians(e)),Math.sin(e)),a.cos=e=>("degrees"==a._angleMode&&(e=a.radians(e)),Math.cos(e)),a.tan=e=>("degrees"==a._angleMode&&(e=a.radians(e)),Math.tan(e)),a.asin=e=>{let t=Math.asin(e);return"degrees"==a._angleMode&&(t=a.degrees(t)),t},a.acos=e=>{let t=Math.acos(e);return"degrees"==a._angleMode&&(t=a.degrees(t)),t},a.atan=e=>{let t=Math.atan(e);return"degrees"==a._angleMode&&(t=a.degrees(t)),t},a.atan2=(e,t)=>{let o=Math.atan2(e,t);return"degrees"==a._angleMode&&(o=a.degrees(o)),o},a.nf=(e,t,a)=>{let o=e<0,n=(e=Math.abs(e)).toFixed(a).split(".");n[0]=n[0].padStart(t,"0");let r=n.join(".");return o&&(r="-"+r),r},a.createVector=(e,t,o)=>new Q5.Vector(e,t,o,a),a.curvePoint=(e,t,a,o,n)=>{const r=n*n*n,i=n*n;return e*(-.5*r+i-.5*n)+t*(1.5*r-2.5*i+1)+a*(-1.5*r+2*i+.5*n)+o*(.5*r-.5*i)},a.bezierPoint=(e,t,a,o,n)=>{const r=1-n;return Math.pow(r,3)*e+3*Math.pow(r,2)*n*t+3*r*Math.pow(n,2)*a+Math.pow(n,3)*o},a.curveTangent=(e,t,a,o,n)=>{const r=n*n;return e*(-3*r/2+2*n-.5)+t*(9*r/2-5*n)+a*(-9*r/2+4*n+.5)+o*(3*r/2-n)},a.bezierTangent=(e,t,a,o,n)=>{const r=1-n;return 3*o*Math.pow(n,2)-3*a*Math.pow(n,2)+6*a*r*n-6*t*r*n+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)},Q5.supportsHDR?a.Color=Q5.ColorRGBA_P3:a.Color=Q5.ColorRGBA,a.colorMode=e=>{a._colorMode=e,"oklch"==e?a.Color=Q5.ColorOKLCH:"rgb"==e?"srgb"==a.canvas.colorSpace?a.Color=Q5.ColorRGBA:a.Color=Q5.ColorRGBA_P3:"srgb"==e&&(a.Color=Q5.ColorRGBA,a._colorMode="rgb")};let w={aqua:[0,255,255],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],crimson:[220,20,60],darkviolet:[148,0,211],gold:[255,215,0],green:[0,128,0],gray:[128,128,128],grey:[128,128,128],hotpink:[255,105,180],indigo:[75,0,130],khaki:[240,230,140],lightgreen:[144,238,144],lime:[0,255,0],magenta:[255,0,255],navy:[0,0,128],orange:[255,165,0],olive:[128,128,0],peachpuff:[255,218,185],pink:[255,192,203],purple:[128,0,128],red:[255,0,0],skyblue:[135,206,235],tan:[210,180,140],turquoise:[64,224,208],transparent:[0,0,0,0],white:[255,255,255],violet:[238,130,238],yellow:[255,255,0]};function M(e){let t=a._angleMode==a.DEGREES?180:Math.PI,o=2*t;if(0<=e&&e<=o)return e;for(;e<0;)e+=o;for(;e>=t;)e-=o;return e}function R(e,t,o,n,r,s,l,c){if(!a._doFill&&!a._doStroke)return;let h=M(r),d=M(s);if(h>d&&([h,d]=[d,h]),0==h){if(0==d)return;if(a._angleMode==a.DEGREES&&360==d||d==a.TAU)return a.ellipse(e,t,o,n)}i.beginPath();for(let r=0;re.r,a.green=e=>e.g,a.blue=e=>e.b,a.alpha=e=>e.a,a.lightness=e=>100*(.2126*e.r+.7152*e.g+.0722*e.b)/255,a.lerpColor=(e,t,o)=>{if("rgb"==a._colorMode)return new a.Color(a.constrain(a.lerp(e.r,t.r,o),0,255),a.constrain(a.lerp(e.g,t.g,o),0,255),a.constrain(a.lerp(e.b,t.b,o),0,255),a.constrain(a.lerp(e.a,t.a,o),0,255));{let n=t.h-e.h;n>180&&(n-=360),n<-180&&(n+=360);let r=e.h+o*n;return r<0&&(r+=360),r>360&&(r-=360),new a.Color(a.constrain(a.lerp(e.l,t.l,o),0,100),a.constrain(a.lerp(e.c,t.c,o),0,100),r,a.constrain(a.lerp(e.a,t.a,o),0,255))}},a.strokeWeight=e=>{e||(a._doStroke=!1),i.lineWidth=e||1e-4},a.stroke=function(e){if(a._doStroke=!0,a._strokeSet=!0,e._q5Color||"string"==typeof e||(e=a.color(...arguments)),e.a<=0)return a._doStroke=!1;i.strokeStyle=e.toString()},a.noStroke=()=>a._doStroke=!1,a.fill=function(e){if(a._doFill=!0,a._fillSet=!0,e._q5Color||"string"==typeof e||(e=a.color(...arguments)),e.a<=0)return a._doFill=!1;i.fillStyle=e.toString()},a.noFill=()=>a._doFill=!1,a.smooth=()=>a._smooth=!0,a.noSmooth=()=>a._smooth=!1,a.blendMode=e=>i.globalCompositeOperation=e,a.strokeCap=e=>i.lineCap=e,a.strokeJoin=e=>i.lineJoin=e,a.ellipseMode=e=>a._ellipseMode=e,a.rectMode=e=>a._rectMode=e,a.curveDetail=e=>a._curveDetail=e,a.curveAlpha=e=>a._curveAlpha=e,a.curveTightness=e=>a._curveAlpha=e,a.clear=()=>{i.clearRect(0,0,a.canvas.width,a.canvas.height)},a.background=function(e){if(e._q5)return a.image(e,0,0,a.width,a.height);i.save(),i.resetTransform(),e._q5color||"string"==typeof e||(e=a.color(...arguments)),i.fillStyle=e.toString(),i.fillRect(0,0,a.canvas.width,a.canvas.height),i.restore()},a.line=(e,t,o,n)=>{a._doStroke&&(i.beginPath(),i.moveTo(e,t),i.lineTo(o,n),i.stroke())},a.arc=(e,t,o,n,r,i,s,l)=>{if(r==i)return a.ellipse(e,t,o,n);l??=25,s??=a.PIE,a._ellipseMode==a.CENTER?R(e,t,o,n,r,i,s,l):a._ellipseMode==a.RADIUS?R(e,t,2*o,2*n,r,i,s,l):a._ellipseMode==a.CORNER?R(e+o/2,t+n/2,o,n,r,i,s,l):a._ellipseMode==a.CORNERS&&R((e+o)/2,(t+n)/2,o-e,n-t,r,i,s,l)},a.ellipse=(e,t,o,n)=>{n??=o,a._ellipseMode==a.CENTER?S(e,t,o,n):a._ellipseMode==a.RADIUS?S(e,t,2*o,2*n):a._ellipseMode==a.CORNER?S(e+o/2,t+n/2,o,n):a._ellipseMode==a.CORNERS&&S((e+o)/2,(t+n)/2,o-e,n-t)},a.circle=(e,t,o)=>a.ellipse(e,t,o,o),a.point=(e,t)=>{e.x&&(t=e.y,e=e.x),i.beginPath(),i.ellipse(e,t,.4,.4,0,0,a.TAU),i.stroke()},a.rect=(e,t,o,n,r,i,s,l)=>{a._rectMode==a.CENTER?b(e-o/2,t-n/2,o,n,r,i,s,l):a._rectMode==a.RADIUS?b(e-o,t-n,2*o,2*n,r,i,s,l):a._rectMode==a.CORNER?b(e,t,o,n,r,i,s,l):a._rectMode==a.CORNERS&&b(e,t,o-e,n-t,r,i,s,l)},a.square=(e,t,o,n,r,i,s)=>a.rect(e,t,o,o,n,r,i,s),a.beginShape=()=>{C(),i.beginPath(),g=!0},a.beginContour=()=>{i.closePath(),C(),g=!0},a.endContour=()=>{C(),g=!0},a.vertex=(e,t)=>{C(),g?i.moveTo(e,t):i.lineTo(e,t),g=!1},a.bezierVertex=(e,t,a,o,n,r)=>{C(),i.bezierCurveTo(e,t,a,o,n,r)},a.quadraticVertex=(e,t,a,o)=>{C(),i.quadraticCurveTo(e,t,a,o)},a.bezier=(e,t,o,n,r,i,s,l)=>{a.beginShape(),a.vertex(e,t),a.bezierVertex(o,n,r,i,s,l),a.endShape()},a.triangle=(e,t,o,n,r,i)=>{a.beginShape(),a.vertex(e,t),a.vertex(o,n),a.vertex(r,i),a.endShape(a.CLOSE)},a.quad=(e,t,o,n,r,i,s,l)=>{a.beginShape(),a.vertex(e,t),a.vertex(o,n),a.vertex(r,i),a.vertex(s,l),a.endShape(a.CLOSE)},a.endShape=e=>{C(),e&&i.closePath(),a._doFill&&i.fill(),a._doStroke&&i.stroke(),a._doFill||a._doStroke||(i.save(),i.fillStyle="none",i.fill(),i.restore())},a.curveVertex=(e,t)=>{if(_.push([e,t]),_.length<4)return;let o=function(e,t,a,o,n,r,i,s,l,c){function h(e,t,a,o,n,r){let i=Math.pow(o-t,2)+Math.pow(n-a,2);return Math.pow(i,.5*r)+e}let d=[],u=h(0,e,t,a,o,c),g=h(u,a,o,n,r,c),_=h(g,n,r,i,s,c);for(let c=0;c0?(p[e]=1,p[e+1]=0):(p[e]=0,p[e+1]=1));let m=e*p[0]+a*p[1],f=t*p[0]+o*p[1],v=a*p[2]+n*p[3],x=o*p[2]+r*p[3],y=n*p[4]+i*p[5],w=r*p[4]+s*p[5],M=m*p[6]+v*p[7],R=f*p[6]+x*p[7],S=v*p[8]+y*p[9],b=x*p[8]+w*p[9],C=M*p[2]+S*p[3],D=R*p[2]+b*p[3];d.push([C,D])}return d}(..._[_.length-4],..._[_.length-3],..._[_.length-2],..._[_.length-1],a._curveDetail,a._curveAlpha);for(let e=0;e{a.beginShape(),a.curveVertex(e,t),a.curveVertex(o,n),a.curveVertex(r,i),a.curveVertex(s,l),a.endShape()},a.opacity=e=>i.globalAlpha=e,a.translate=(e,t)=>i.translate(e,t),a.rotate=e=>{"degrees"==a._angleMode&&(e=a.radians(e)),i.rotate(e)},a.scale=(e,t)=>{t??=e,i.scale(e,t)},a.applyMatrix=(e,t,a,o,n,r)=>i.transform(e,t,a,o,n,r),a.shearX=e=>i.transform(1,0,a.tan(e),1,0,0),a.shearY=e=>i.transform(1,a.tan(e),0,1,0,0),a.resetMatrix=()=>{i.resetTransform(),i.scale(a._pixelDensity,a._pixelDensity)},a._styleNames=["_doStroke","_doFill","_strokeSet","_fillSet","_tint","_imageMode","_rectMode","_ellipseMode","_textFont","_textLeading","_leadingSet","_textSize","_textAlign","_textBaseline","_textStyle","_textWrap"],a._styles=[],a.push=a.pushMatrix=()=>{i.save();let e={};for(let t of a._styleNames)e[t]=a[t];a._styles.push(e)},a.pop=a.popMatrix=()=>{i.restore();let e=a._styles.pop();for(let t of a._styleNames)a[t]=e[t]},a.imageMode=e=>a._imageMode=e,a.image=(e,t,o,r,s,l,c,h,d)=>{let u=e._q5?e.canvas:e;var g,_;Q5._createNodeJSCanvas&&(u=u.context.canvas),e._q5&&null!=a._tint&&(g=e.canvas.width,_=e.canvas.height,_??=g||a.canvas.height,g??=a.canvas.width,null==v&&(v=new n(g,_).getContext("2d",{colorSpace:a.canvas.colorSpace})),v.canvas.width==g&&v.canvas.height==_||(v.canvas.width=g,v.canvas.height=_),v.drawImage(e.canvas,0,0),e.tinted(a._tint)),r??=e.width||e.videoWidth,s??=e.height||e.videoHeight,"center"==a._imageMode&&(t-=.5*r,o-=.5*s);let p=e._pixelDensity||1;l??=0,c??=0,h?h*=p:h=u.width||u.videoWidth,d?d*=p:d=u.height||u.videoHeight,i.drawImage(u,l*p,c*p,h,d,t,o,r,s),function(){if(!e._q5||!a._tint)return;let t=e.ctx;t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(v.canvas,0,0),t.restore()}()},a._incrementPreload=()=>o++,a._decrementPreload=()=>o--,a.loadImage=function(e,t,n){o++;let r=[...arguments].at(-1);n="object"!=typeof r||r;let i=a.createImage(1,1,n.alpha),s=i.ctx;if(Q5._nodejs&&global.CairoCanvas)CairoCanvas.loadImage(e).then((e=>{i.width=s.canvas.width=e.width,i.height=s.canvas.height=e.height,s.drawImage(e,0,0),o--,t&&t(i)})).catch((e=>{throw o--,e}));else{let a=new window.Image;a.src=e,a.crossOrigin="Anonymous",a._pixelDensity=1,a.onload=()=>{i.width=s.canvas.width=a.naturalWidth,i.height=s.canvas.height=a.naturalHeight,s.drawImage(a,0,0),o--,t&&t(i)},a.onerror=e=>{throw o--,e}}return i},a._clearTemporaryBuffers=()=>{f=null,v=null,x=null},a.loadFont=(e,t)=>{o++;let a=e.split("/"),n=a[a.length-1].split(".")[0].replace(" ",""),r=new FontFace(n,"url("+e+")");return document.fonts.add(r),r.load().then((()=>{o--,t&&t(n)})),n},a.textFont=e=>a._textFont=e,a.textSize=e=>{if(void 0===e)return a._textSize;a._textSize=e,a._leadingSet||(a._textLeading=1.25*e,a._textLeadDiff=a._textLeading-e)},a.textLeading=e=>{if(void 0===e)return a._textLeading;a._textLeading=e,a._textLeadDiff=e-a._textSize,a._leadingSet=!0},a.textStyle=e=>a._textStyle=e,a.textAlign=(e,t)=>{i.textAlign=e,t&&(i.textBaseline=t==a.CENTER?"middle":t)},a.textWidth=e=>(i.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`,i.measureText(e).width),a.textAscent=e=>(i.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`,i.measureText(e).actualBoundingBoxAscent),a.textDescent=e=>(i.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`,i.measureText(e).actualBoundingBoxDescent),a._textCache=!0,a._TimedCache=class extends Map{constructor(){super(),this.maxSize=500}set(e,t){t.lastAccessed=Date.now(),super.set(e,t),this.size>this.maxSize&&this.gc()}get(e){const t=super.get(e);return t&&(t.lastAccessed=Date.now()),t}gc(){let e,t=1/0,a=0;for(const[o,n]of this.entries())n.lastAccessed(t&&(a._tic.maxSize=t),void 0!==e&&(a._textCache=e),a._textCache),a.createTextImage=(e,t,o)=>{let n=a._textCache;a._textCache=!0,a._useCache=!0,a.text(e,0,0,t,o),a._useCache=!1;let r=D(e,t,o);return a._textCache=n,a._tic.get(r)},a.text=(e,t,o,n,r)=>{if(void 0===e)return;if(e=e.toString(),!a._doFill&&!a._doStroke)return;let s,l,c,h,d,u,g,_,p=1,m=i.getTransform(),f=a._useCache||a._textCache&&(0!=m.b||0!=m.c);if(f){if(h=D(e,n,r),l=a._tic.get(h),l)return void a.textImage(l,t,o);c=a.createGraphics.call(a,1,1),s=c.ctx,p=a._pixelDensity}else s=i,d=t,u=o;s.font=`${a._textStyle} ${a._textSize}px ${a._textFont}`;let v=e.split("\n");if(f){d=0,u=a._textLeading*v.length;let t=s.measureText(" ");g=t.fontBoundingBoxAscent,_=t.fontBoundingBoxDescent,r??=u+_,c.resizeCanvas(Math.ceil(s.measureText(e).width),Math.ceil(r)),s.fillStyle=i.fillStyle,s.strokeStyle=i.strokeStyle,s.lineWidth=i.lineWidth}let x=s.fillStyle;a._fillSet||(s.fillStyle="black");for(let e=0;er));e++);a._fillSet||(s.fillStyle=x),f&&(l=c.get(),l._ascent=g,l._descent=_,a._tic.set(h,l),a.textImage(l,t,o))},a.textImage=(e,t,o)=>{let n=a._imageMode;a._imageMode="corner","center"==i.textAlign?t-=.5*e.width:"right"==i.textAlign&&(t-=e.width),"alphabetic"==i.textBaseline&&(o-=a._textLeading),"middle"==i.textBaseline?o-=e._descent+.5*e._ascent+a._textLeadDiff:"bottom"==i.textBaseline?o-=e._ascent+e._descent+a._textLeadDiff:"top"==i.textBaseline&&(o-=e._descent+a._textLeadDiff),a.image(e,t,o),a._imageMode=n};var E,I=4095,T=4,A=.5,O=e=>.5*(1-Math.cos(e*Math.PI));a.noise=(e,t,a)=>{if(t??=0,a??=0,null==E){E=new Array(4096);for(var o=0;o<4096;o++)E[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),a<0&&(a=-a);for(var n,r,i,s,l,c=Math.floor(e),h=Math.floor(t),d=Math.floor(a),u=e-c,g=t-h,_=a-d,p=0,m=.5,f=0;f=1&&(c++,u--),(g*=2)>=1&&(h++,g--),(_*=2)>=1&&(d++,_--)}return p},a.noiseDetail=(e,t)=>{e>0&&(T=e),t>0&&(A=t)};const P=()=>{let e,t,a=4294967295;return{setSeed(o){e=t=(o??Math.random()*a)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17,e^=e>>13,e^=e<<5,(e>>>0)/a)}};let k=P();k.setSeed(),a.noiseSeed=e=>{let t=void 0===e?4294967295*Math.random():e;E||(E=new Float32Array(4096));for(var a=0;a<4096;a++)t^=t<<17,t^=t>>13,t^=t<<5,E[a]=(t>>>0)/4294967295},a.randomSeed=e=>k.setSeed(e),a.random=(e,t)=>void 0===e?k.rand():"number"==typeof e?void 0!==t?k.rand()*(t-e)+e:k.rand()*e:e[Math.trunc(e.length*k.rand())],a.randomGenerator=e=>{e==a.LCG?k=(()=>{const e=4294967296;let t,a;return{setSeed(o){a=t=(o??Math.random()*e)>>>0},getSeed:()=>t,rand:()=>(a=(1664525*a+1013904223)%e,a/e)}})():e==a.SHR3&&(k=P()),k.setSeed()};var z=new function(){var e,t,a,o=new Array(128),n=new Array(256),r=new Array(128),i=new Array(128),s=new Array(256),l=new Array(256),c=()=>4294967296*k.rand()-2147483648,h=()=>.5+2.328306e-10*(c()|0),d=()=>{for(var t,n,s,l,d=3.44262;;){if(t=a*r[e],0==e){do{s=h(),l=h(),t=.2904764*-Math.log(s),n=-Math.log(l)}while(n+n0?d+t:-d-t}if(i[e]+h()*(i[e-1]-i[e]){for(var a;;){if(0==e)return 7.69711-Math.log(h());if(a=t*s[e],l[e]+h()*(l[e-1]-l[e])(a=c(),e=127&a,Math.abs(a)(t=c()>>>0){var e,t,a=2147483648,c=4294967296,h=3.442619855899,d=h,u=.00991256303526217,g=7.697117470131487,_=g,p=.003949659822581572;for(e=u/Math.exp(-.5*h*h),o[0]=Math.floor(h/e*a),o[1]=0,r[0]=e/a,r[127]=h/a,i[0]=1,i[127]=Math.exp(-.5*h*h),t=126;t>=1;t--)h=Math.sqrt(-2*Math.log(u/h+Math.exp(-.5*h*h))),o[t+1]=Math.floor(h/d*a),d=h,i[t]=Math.exp(-.5*h*h),r[t]=h/a;for(e=p/Math.exp(-g),n[0]=Math.floor(g/e*c),n[1]=0,s[0]=e/c,s[255]=g/c,l[0]=1,l[255]=Math.exp(-g),t=254;t>=1;t--)g=-Math.log(p/g+Math.exp(-g)),n[t+1]=Math.floor(g/_*c),_=g,l[t]=Math.exp(-g),s[t]=g/c}};function Q(e){let t=e||performance.now();if(a._lastFrameTime??=t-a._targetFrameDuration,a._loop)u=F(Q);else if(a.frameCount&&!a._redraw)return;if(u&&a.frameCount){if(t-a._lastFrameTime(z.hasInit||(z.zigset(),z.hasInit=!0),z.RNOR()*t+e),a.randomExponential=()=>(z.hasInit||(z.zigset(),z.hasInit=!0),z.REXP()),a.Element=function(e){this.elt=e},a._elements=[],a.createCapture=e=>{var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then((e=>{t.srcObject=e})),t.style.position="absolute",t.style.opacity=1e-5,t.style.zIndex=-1e3,document.body.append(t),t},a.print=console.log,a.describe=()=>{},a.noLoop=()=>{a._loop=!1,u=null},a.loop=()=>{a._loop=!0,null==u&&Q()},a.redraw=e=>{e??=1,a._redraw=!0;for(let t=0;t{a.noLoop(),a.canvas.remove()},a.frameRate=e=>(e&&(a._targetFrameRate=e,a._targetFrameDuration=1e3/e),a._frameRate),a.getTargetFrameRate=()=>a._targetFrameRate,a.getFPS=()=>a._fps,"object"==typeof localStorage&&(a.storeItem=localStorage.setItem,a.getItem=localStorage.getItem,a.removeItem=localStorage.removeItem,a.clearStorage=localStorage.clear),a._updateMouse=e=>{if(e.changedTouches)return;let t=a.canvas.getBoundingClientRect(),o=a.canvas.scrollWidth/a.width||1,n=a.canvas.scrollHeight/a.height||1;a.mouseX=(e.clientX-t.left)/o,a.mouseY=(e.clientY-t.top)/n},a._onmousedown=e=>{a._updateMouse(e),a.mouseIsPressed=!0,a.mouseButton=[a.LEFT,a.CENTER,a.RIGHT][e.button],a.mousePressed(e)},a._onmousemove=e=>{a._updateMouse(e),a.mouseIsPressed?a.mouseDragged(e):a.mouseMoved(e)},a._onmouseup=e=>{a._updateMouse(e),a.mouseIsPressed=!1,a.mouseReleased(e)},a._onclick=e=>{a._updateMouse(e),a.mouseIsPressed=!0,a.mouseClicked(e),a.mouseIsPressed=!1},a.cursor=(e,t,o)=>{let n="";e.includes(".")&&(e=`url("${e}")`,n=", auto"),void 0!==t&&(e+=" "+t+" "+o),a.canvas.style.cursor=e+n},a.noCursor=()=>{a.canvas.style.cursor="none"},a._onkeydown=e=>{e.repeat||(a.keyIsPressed=!0,a.key=e.key,a.keyCode=e.keyCode,p[a.keyCode]=!0,a.keyPressed(e),1==e.key.length&&a.keyTyped(e))},a._onkeyup=e=>{a.keyIsPressed=!1,a.key=e.key,a.keyCode=e.keyCode,p[a.keyCode]=!1,a.keyReleased(e)},a._ontouchstart=e=>{a.touches=[...e.touches].map(L),a._isTouchAware||(a.mouseX=a.touches[0].x,a.mouseY=a.touches[0].y,a.mouseIsPressed=!0,a.mouseButton=a.LEFT,a.mousePressed(e)||e.preventDefault()),a.touchStarted(e)||e.preventDefault()},a._ontouchmove=e=>{a.touches=[...e.touches].map(L),a._isTouchAware||(a.mouseX=a.touches[0].x,a.mouseY=a.touches[0].y,a.mouseDragged(e)||e.preventDefault()),a.touchMoved(e)||e.preventDefault()},a._ontouchend=e=>{a.touches=[...e.touches].map(L),a._isTouchAware||a.touches.length||(a.mouseIsPressed=!1,a.mouseReleased(e)||e.preventDefault()),a.touchEnded(e)||e.preventDefault()},"graphics"!=e&&(a.keyIsDown=e=>!!p[e],a.canvas.onmousedown=e=>a._onmousedown(e),a.canvas.onmouseup=e=>a._onmouseup(e),a.canvas.onclick=e=>a._onclick(e),a.canvas.ontouchstart=e=>a._ontouchstart(e),a.canvas.ontouchmove=e=>a._ontouchmove(e),a.canvas.ontouchcancel=a.canvas.ontouchend=e=>a._ontouchend(e)),a.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPermission),a.requestSensorPermissions=()=>{DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then((e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then((e=>{"granted"==e&&(a.hasSensorPermission=!0)})).catch(alert)})).catch(alert)};window.ondeviceorientation=e=>{a.pRotationX=a.rotationX,a.pRotationY=a.rotationY,a.pRotationZ=a.rotationZ,a.pRelRotationX=a.relRotationX,a.pRelRotationY=a.relRotationY,a.pRelRotationZ=a.relRotationZ,a.rotationX=e.beta*(Math.PI/180),a.rotationY=e.gamma*(Math.PI/180),a.rotationZ=e.alpha*(Math.PI/180),a.relRotationX=[-a.rotationY,-a.rotationX,a.rotationY][Math.trunc(window.orientation/90)+1],a.relRotationY=[-a.rotationX,a.rotationY,a.rotationX][Math.trunc(window.orientation/90)+1],a.relRotationZ=a.rotationZ},window.ondevicemotion=e=>{if(a.pAccelerationX=a.accelerationX,a.pAccelerationY=a.accelerationY,a.pAccelerationZ=a.accelerationZ,!e.acceleration){let r=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])((n=a.rotationY,t=[a.cos(n),0,a.sin(n),0,0,1,0,0,-a.sin(n),0,a.cos(n),0,0,0,0,1],o=(e=>[1,0,0,0,0,a.cos(e),-a.sin(e),0,0,a.sin(e),a.cos(e),0,0,0,0,1])(a.rotationX),[t[0]*o[0]+t[1]*o[4]+t[2]*o[8]+t[3]*o[12],t[0]*o[1]+t[1]*o[5]+t[2]*o[9]+t[3]*o[13],t[0]*o[2]+t[1]*o[6]+t[2]*o[10]+t[3]*o[14],t[0]*o[3]+t[1]*o[7]+t[2]*o[11]+t[3]*o[15],t[4]*o[0]+t[5]*o[4]+t[6]*o[8]+t[7]*o[12],t[4]*o[1]+t[5]*o[5]+t[6]*o[9]+t[7]*o[13],t[4]*o[2]+t[5]*o[6]+t[6]*o[10]+t[7]*o[14],t[4]*o[3]+t[5]*o[7]+t[6]*o[11]+t[7]*o[15],t[8]*o[0]+t[9]*o[4]+t[10]*o[8]+t[11]*o[12],t[8]*o[1]+t[9]*o[5]+t[10]*o[9]+t[11]*o[13],t[8]*o[2]+t[9]*o[6]+t[10]*o[10]+t[11]*o[14],t[8]*o[3]+t[9]*o[7]+t[10]*o[11]+t[11]*o[15],t[12]*o[0]+t[13]*o[4]+t[14]*o[8]+t[15]*o[12],t[12]*o[1]+t[13]*o[5]+t[14]*o[9]+t[15]*o[13],t[12]*o[2]+t[13]*o[6]+t[14]*o[10]+t[15]*o[14],t[12]*o[3]+t[13]*o[7]+t[14]*o[11]+t[15]*o[15]]),[0,0,-9.80665]);a.accelerationX=e.accelerationIncludingGravity.x+r[0],a.accelerationY=e.accelerationIncludingGravity.y+r[1],a.accelerationZ=e.accelerationIncludingGravity.z-r[2]}var t,o,n},a.year=()=>(new Date).getFullYear(),a.day=()=>(new Date).getDay(),a.hour=()=>(new Date).getHours(),a.minute=()=>(new Date).getMinutes(),a.second=()=>(new Date).getSeconds(),a.millis=()=>performance.now()-m,a._loadFile=(e,t,a)=>{o++;let n={};return fetch(e).then((e=>"json"==a?e.json():"text"==a?e.text():void 0)).then((e=>{o--,Object.assign(n,e),t&&t(e)})),n},a.loadStrings=(e,t)=>a._loadFile(e,t,"text"),a.loadJSON=(e,t)=>a._loadFile(e,t,"json"),a.loadSound=(e,t)=>{o++;let a=new Audio(e);return a.addEventListener("canplaythrough",(()=>{o--,t&&t(a)})),a.load(),a.setVolume=e=>a.volume=e,a.setLoop=e=>a.loop=e,a},"global"==e&&(Object.assign(Q5,a),delete Q5.Q5),Q5.Image??=_Q5Image;for(let G of Q5.prototype._methods.init)G.call(a);for(let[V,Y]of Object.entries(Q5.prototype))"_"!=V[0]&&"function"==typeof a[V]&&(a[V]=Y.bind(a));if("global"==e){let H=Object.getOwnPropertyNames(a),j=Q5._nodejs?global:window;for(let X of H)"function"==typeof a[X]?j[X]=a[X]:Object.defineProperty(j,X,{get:()=>a[X],set:e=>a[X]=e})}if("function"==typeof e&&e(a),"image"==e)return;let F=window.requestAnimationFrame||function(e){const t=a._lastFrameTime+a._targetFrameDuration;return setTimeout((()=>{e(t)}),t-performance.now())},N="global"==e?Q5._nodejs?global:window:a,q=N.preload,B=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchMoved","touchEnded","windowResized"];for(let U of B)N[U]?a._isGlobal&&(a[U]=N[U]):a[U]=()=>{};function $(){if(a._startDone=!0,o>0)return F($);m=performance.now(),a.setup(),a.frameCount||(null===i&&a.createCanvas(100,100),a._setupDone=!0,i&&a.resetMatrix(),F(Q))}a._isTouchAware=a.touchStarted||a.touchMoved||a.mouseReleased,window&&"graphics"!=e&&(window.addEventListener("mousemove",(e=>a._onmousemove(e)),!1),window.addEventListener("keydown",(e=>a._onkeydown(e)),!1),window.addEventListener("keyup",(e=>a._onkeyup(e)),!1)),(a.setup||a.draw)&&(a._startDone=!1,arguments.length||q?(a.preload(),$()):(N.preload=a.preload=()=>{a._startDone||$()},setTimeout(a.preload,32)))}Q5.Color=class{constructor(){this._q5Color=!0}},Q5.ColorOKLCH=class extends Q5.Color{constructor(e,t,a,o){super(),this.l=e,this.c=t,this.h=a,this.a=o??1}toString(){return`color(oklch ${this.l} ${this.c} ${this.h} / ${this.a})`}},Q5.ColorRGBA=class extends Q5.Color{constructor(e,t,a,o){super(),this.r=e,this.g=t,this.b=a,this.a=o??255}setRed(e){this.r=e}setGreen(e){this.g=e}setBlue(e){this.b=e}setAlpha(e){this.a=e}get levels(){return[this.r,this.g,this.b,this.a]}toString(){return`rgb(${this.r} ${this.g} ${this.b} / ${this.a/255})`}},Q5.ColorRGBA_P3=class extends Q5.ColorRGBA{constructor(e,t,a,o){super(e,t,a,o),this._edited=!0}get r(){return this._r}set r(e){this._r=e,this._edited=!0}get g(){return this._g}set g(e){this._g=e,this._edited=!0}get b(){return this._b}set b(e){this._b=e,this._edited=!0}get a(){return this._a}set a(e){this._a=e,this._edited=!0}toString(){if(this._edited){let e=(this._r/255).toFixed(3),t=(this._g/255).toFixed(3),a=(this._b/255).toFixed(3),o=(this._a/255).toFixed(3);this._css=`color(display-p3 ${e} ${t} ${a} / ${o})`,this._edited=!1}return this._css}},Q5.Vector=class{constructor(e,t,a,o){this.x=e||0,this.y=t||0,this.z=a||0,this._$=o||window,this._cn=null,this._cnsq=null}set(e,t,a){this.x=e||0,this.y=t||0,this.z=a||0}copy(){return new Q5.Vector(this.x,this.y,this.z)}_arg2v(e,t,a){return void 0!==e.x?e:void 0!==t?{x:e,y:t,z:a||0}:{x:e,y:e,z:e}}_calcNorm(){this._cnsq=this.x*this.x+this.y*this.y+this.z*this.z,this._cn=Math.sqrt(this._cnsq)}add(){let e=this._arg2v(...arguments);return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}rem(){let e=this._arg2v(...arguments);return this.x%=e.x,this.y%=e.y,this.z%=e.z,this}sub(){let e=this._arg2v(...arguments);return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}mult(){let e=this._arg2v(...arguments);return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}div(){let e=this._arg2v(...arguments);return e.x?this.x/=e.x:this.x=0,e.y?this.y/=e.y:this.y=0,e.z?this.z/=e.z:this.z=0,this}mag(){return this._calcNorm(),this._cn}magSq(){return this._calcNorm(),this._cnsq}dot(){let e=this._arg2v(...arguments);return this.x*e.x+this.y*e.y+this.z*e.z}dist(){let e=this._arg2v(...arguments),t=this.x-e.x,a=this.y-e.y,o=this.z-e.z;return Math.sqrt(t*t+a*a+o*o)}cross(){let e=this._arg2v(...arguments),t=this.y*e.z-this.z*e.y,a=this.z*e.x-this.x*e.z,o=this.x*e.y-this.y*e.x;return this.x=t,this.y=a,this.z=o,this}normalize(){this._calcNorm();let e=this._cn;return 0!=e&&(this.x/=e,this.y/=e,this.z/=e),this._cn=1,this._cnsq=1,this}limit(e){this._calcNorm();let t=this._cn;if(t>e){let a=e/t;this.x*=a,this.y*=a,this.z*=a,this._cn=e,this._cnsq=e*e}return this}setMag(e){this._calcNorm();let t=e/this._cn;return this.x*=t,this.y*=t,this.z*=t,this._cn=e,this._cnsq=e*e,this}heading(){return this._$.atan2(this.y,this.x)}rotate(e){let t=this._$.cos(e),a=this._$.sin(e),o=this.x*t-this.y*a,n=this.x*a+this.y*t;return this.x=o,this.y=n,this}angleBetween(){let e=this._arg2v(...arguments),t=Q5.Vector.cross(this,e);return this._$.atan2(t.mag(),this.dot(e))*Math.sign(t.z||1)}lerp(){let e=[...arguments],t=this._arg2v(...e.slice(0,-1)),a=e[e.length-1];return this.x+=(t.x-this.x)*a,this.y+=(t.y-this.y)*a,this.z+=(t.z-this.z)*a,this}reflect(e){return e.normalize(),this.sub(e.mult(2*this.dot(e)))}array(){return[this.x,this.y,this.z]}equals(e,t){return t??=Number.EPSILON||0,Math.abs(e.x-this.x)e.copy().add(t),Q5.Vector.cross=(e,t)=>e.copy().cross(t),Q5.Vector.dist=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z),Q5.Vector.div=(e,t)=>e.copy().div(t),Q5.Vector.dot=(e,t)=>e.copy().dot(t),Q5.Vector.equals=(e,t,a)=>e.equals(t,a),Q5.Vector.lerp=(e,t,a)=>e.copy().lerp(t,a),Q5.Vector.limit=(e,t)=>e.copy().limit(t),Q5.Vector.heading=e=>this._$.atan2(e.y,e.x),Q5.Vector.magSq=e=>e.x*e.x+e.y*e.y+e.z*e.z,Q5.Vector.mag=e=>Math.sqrt(Q5.Vector.magSq(e)),Q5.Vector.mult=(e,t)=>e.copy().mult(t),Q5.Vector.normalize=e=>e.copy().normalize(),Q5.Vector.rem=(e,t)=>e.copy().rem(t),Q5.Vector.sub=(e,t)=>e.copy().sub(t);for(let e of["fromAngle","fromAngles","random2D","random3D"])Q5.Vector[e]=(t,a,o)=>(new Q5.Vector)[e](t,a,o);class _Q5Image extends Q5{constructor(e,t,a){super("image"),delete this.createCanvas,a??={},a.alpha??=!0,this._createCanvas(e,t,"2d",a),this._loop=!1}get w(){return this.width}get h(){return this.height}}"object"!=typeof window&&(window=0),Q5._nodejs="object"==typeof process,Q5.canvasOptions={alpha:!1,desynchronized:!1,colorSpace:"display-p3"},window.matchMedia&&matchMedia("(dynamic-range: high) and (color-gamut: p3)").matches?Q5.supportsHDR=!0:Q5.canvasOptions.colorSpace="srgb",Q5._instanceCount=0,Q5._friendlyError=(e,t)=>{throw t+": "+e},Q5._validateParameters=()=>!0,Q5.prototype._methods={init:[],pre:[],post:[],remove:[]},Q5.prototype.registerMethod=(e,t)=>Q5.prototype._methods[e].push(t),Q5.prototype.registerPreloadMethod=(e,t)=>Q5.prototype[e]=t[e],"object"==typeof module?(global.p5??=Q5,module.exports=global.Q5=Q5):(window.p5??=Q5,window.Q5=Q5),"object"==typeof document&&document.addEventListener("DOMContentLoaded",(()=>{Q5._hasGlobal||new Q5("auto")}));