textmode.js 0.2.1-beta.3 → 0.2.1-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +2145 -1808
- package/dist/textmode.esm.min.js +1715 -1377
- package/dist/textmode.umd.js +9 -9
- package/dist/textmode.umd.min.js +8 -7
- package/dist/types/assets/shaders-minified/frag/image-to-mrt.d.ts +14 -0
- package/dist/types/assets/shaders-minified/frag/present.d.ts +14 -0
- package/dist/types/assets/shaders-minified/index.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/rendering/index.d.ts +0 -2
- package/dist/types/rendering/webgl/DrawQueue.d.ts +9 -7
- package/dist/types/rendering/webgl/InstanceData.d.ts +15 -15
- package/dist/types/rendering/webgl/RenderPipeline.d.ts +1 -0
- package/dist/types/rendering/webgl/RenderState.d.ts +13 -19
- package/dist/types/rendering/webgl/Renderer.d.ts +13 -2
- package/dist/types/rendering/webgl/Shader.d.ts +20 -5
- package/dist/types/rendering/webgl/ShaderManager.d.ts +12 -11
- package/dist/types/rendering/webgl/geometries/BaseGeometry.d.ts +2 -1
- package/dist/types/rendering/webgl/types/DrawCommand.d.ts +2 -2
- package/dist/types/textmode/Canvas.d.ts +6 -0
- package/dist/types/textmode/TextmodeImage.d.ts +92 -0
- package/dist/types/textmode/Textmodifier.d.ts +17 -2
- package/dist/types/textmode/font/CharacterExtractor.d.ts +14 -14
- package/dist/types/textmode/font/MetricsCalculator.d.ts +1 -21
- package/dist/types/textmode/font/typr/Typr.d.ts +2 -0
- package/dist/types/textmode/font/typr/types.d.ts +6 -0
- package/dist/types/textmode/font/utils/index.d.ts +0 -1
- package/dist/types/textmode/mixins/AnimationMixin.d.ts +8 -0
- package/dist/types/textmode/mixins/FontMixin.d.ts +43 -3
- package/dist/types/textmode/mixins/KeyboardMixin.d.ts +2 -3
- package/dist/types/textmode/mixins/MouseMixin.d.ts +6 -6
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +23 -5
- package/package.json +1 -1
- package/dist/types/rendering/webgl/types/ShaderTypes.d.ts +0 -35
- package/dist/types/textmode/font/utils/CmapParser.d.ts +0 -47
package/dist/textmode.umd.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
var
|
|
1
|
+
var xe=Object.defineProperty;var ye=(C,R,_)=>R in C?xe(C,R,{enumerable:!0,configurable:!0,writable:!0,value:_}):C[R]=_;var l=(C,R,_)=>ye(C,typeof R!="symbol"?R+"":R,_);var e,s;e=this,s=function(C){class R extends Error{constructor(t,i={}){super(R.i(t,i)),this.name="TextmodeError"}static i(t,i){return`${t}${i&&Object.keys(i).length>0?`
|
|
2
2
|
|
|
3
|
-
📋 Context:`+Object.entries(
|
|
4
|
-
- ${
|
|
3
|
+
📋 Context:`+Object.entries(i).map(([r,n])=>`
|
|
4
|
+
- ${r}: ${R.o(n)}`).join(""):""}
|
|
5
5
|
|
|
6
6
|
${"↓".repeat(24)}
|
|
7
|
-
`}static
|
|
8
|
-
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float
|
|
9
|
-
precision highp float;in vec2 v_uv;
|
|
10
|
-
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`))}tt(){return this.qA("ascii-conversion",()=>new Y(this.wA,"attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.,1.);}","precision mediump float;uniform sampler2D a;uniform vec2 b;uniform sampler2D d;uniform sampler2D e;uniform sampler2D f;uniform sampler2D c;uniform sampler2D g;uniform vec2 h;uniform vec2 i;uniform vec2 j;mat2 A(float B){float C=sin(B);float c=cos(B);return mat2(c,-C,C,c);}void main(){vec2 D=(gl_FragCoord.xy-j)/i;vec2 E=D*h;vec2 F=floor(E);vec2 G=(F+0.5)/h;vec4 H=texture2D(d,G);vec4 I=texture2D(e,G);vec4 J=texture2D(f,G);bool K=J.r>0.5;bool L=J.g>0.5;bool M=J.b>0.5;vec4 N=texture2D(c,G);int O=int(N.r*255.+0.5)+int(N.g*255.+0.5)*256;int P=int(mod(float(O),b.x));int Q=O/int(b.x);float R=(b.y-1.)-float(Q);vec2 S=vec2(float(P),R)/b;vec4 T=texture2D(g,G);float U=T.r*255.+T.g;float V=-(U*360./255.)*0.017453292;vec2 W=fract(E)-0.5;if(L)W.x=-W.x;if(M)W.y=-W.y;W=A(V)*W+0.5;vec2 X=1./b;vec2 Y=S+W*X;vec2 Z=S+X;if(any(lessThan(Y,S))||any(greaterThan(Y,Z))){gl_FragColor=K?H:I;return;}vec4 a=texture2D(a,Y);if(K)a.rgb=1.-a.rgb;gl_FragColor=mix(I,H,a);}"))}et(t){return new Y(this.wA,H,t)}st(t,s){return new Y(this.wA,t,s)}kA(){for(const t of this.jA.values())t.kA();this.jA.clear()}}var P=(n=>(n.RECTANGLE="rectangle",n.LINE="line",n.ELLIPSE="ellipse",n.ARC="arc",n.TRIANGLE="triangle",n.BEZIER_CURVE="bezier_curve",n.CUSTOM="custom",n))(P||{});class rA{constructor(t){o(this,"wA");o(this,"it",new Map);this.wA=t}Bt(t,s,i,B){const r=this.wA;let E=this.it.get(t);E||(E=new Map,this.it.set(t,E));let Q=E.get(s)||null;if(!Q){Q=r.createVertexArray(),E.set(s,Q),r.bindVertexArray(Q),r.bindBuffer(r.ARRAY_BUFFER,B);const g=r.getAttribLocation(t,"a_position");g!==-1&&(r.enableVertexAttribArray(g),r.vertexAttribPointer(g,i.Et.Qt.size,r.FLOAT,!1,i.rt,i.Et.Qt.offset),r.vertexAttribDivisor(g,0));const a=r.getAttribLocation(t,"a_texCoord");a!==-1&&(r.enableVertexAttribArray(a),r.vertexAttribPointer(a,i.Et.nt.size,r.FLOAT,!1,i.rt,i.Et.nt.offset),r.vertexAttribDivisor(a,0))}r.bindVertexArray(Q)}gt(){this.wA.bindVertexArray(null)}kA(){const t=this.wA;for(const[,s]of this.it)for(const[,i]of s)i&&t.deleteVertexArray(i);this.it.clear()}}class EA{constructor(t,s){o(this,"ot");o(this,"wA");o(this,"vA");o(this,"ht",null);o(this,"ct",null);this.wA=t,this.ot=new rA(t),this.vA=s}Ct(t,s,i){const{shader:B}=t,r=L(this.wA)||this.wA.getParameter(this.wA.VIEWPORT);B.JA({k:r[2]/r[3],t:[r[2],r[3]]});const E=a=>{if(!a||!a.lt())return;const c=a.unitGeometry,h=a.unitBuffer;try{this.ot.Bt(B.XA,a.type+"",c,h),a.batch.Dt(B),a.batch.Pt(c.ut,c.It)}finally{a.batch.wt(B),this.ot.gt(),a.ft()}};let Q=null,g=null;for(const a of s){if(a.type===P.CUSTOM){g&&(E(g),Q=null,g=null),this.dt(t,a.params,a.state,i.get(P.RECTANGLE));continue}Q!==null&&a.type!==Q&&(E(g),Q=null,g=null);let c=g;c&&a.type===Q||(c=i.get(a.type)||null,g=c,Q=a.type),c&&c._t(a.params,a.state)}E(g)}dt(t,s,i,B){const{x:r,y:E,width:Q,height:g,shader:a,uniforms:c}=s;if(a===this.vt())return this.yt(B,a,c,Math.floor(r),Math.floor(E),Math.max(1,Math.floor(Q)),Math.max(1,Math.floor(g)),i),void t.shader.HA();const h=this.bt(Math.max(1,Math.floor(Q)),Math.max(1,Math.floor(g)));h.begin(),this.yt(B,a,c,0,0,h.width,h.height,{}),h.end();const l=this.vt(),C={l:h.textures[0],m:h.textures[1],n:h.textures[2],o:h.textures[3],p:h.textures[4],q:[h.width,h.height]};this.yt(B,l,C,Math.floor(r),Math.floor(E),Math.max(1,Math.floor(Q)),Math.max(1,Math.floor(g)),i),t.shader.HA()}yt(t,s,i,B,r,E,Q,g){s.HA(),s.JA(i);const a=this.wA.getParameter(this.wA.VIEWPORT);if(s.JA({k:a[2]/a[3],t:[a[2],a[3]]}),t.ft(),t._t({x:B,y:r,width:E,height:Q},g),t.lt()){const c=t.unitGeometry,h=t.unitBuffer;try{this.ot.Bt(s.XA,t.type+"",c,h),t.batch.Dt(s),t.batch.Pt(c.ut,c.It)}finally{t.batch.wt(s),this.ot.gt(),t.ft()}}}vt(){return this.vA.At()}bt(t,s){return this.ht&&this.ct&&this.ct.w===t&&this.ct.h===s||(this.ht&&this.ht.kA(),this.ht=new U(this.wA,t,s,5),this.ct={w:t,h:s}),this.ht}}class QA{constructor(){o(this,"$t",[]);o(this,"Gt",1);o(this,"Mt",0)}xt(t){if(this.Mt>=this.$t.length){const i={id:this.Gt++,type:t,params:{},state:{V:1,Z:0,N:0,X:0,character:[0,0,0],charColor:[1,1,1,1],bgColor:[0,0,0,1],flipHorizontally:!1,flipVertically:!1,invert:!1,charRotation:[0,0]}};this.$t.push(i)}const s=this.$t[this.Mt];switch(s.id=this.Gt++,s.type=t,t){case P.RECTANGLE:case P.ELLIPSE:s.params&&"width"in s.params||(s.params={x:0,y:0,width:0,height:0});break;case P.CUSTOM:s.params&&"shader"in s.params||(s.params={x:0,y:0,width:0,height:0,shader:void 0,uniforms:{}});break;case P.ARC:s.params&&"start"in s.params||(s.params={x:0,y:0,width:0,height:0,start:0,stop:0});break;case P.LINE:s.params&&"x2"in s.params||(s.params={x1:0,y1:0,x2:0,y2:0,thickness:void 0});break;case P.TRIANGLE:s.params&&"x3"in s.params||(s.params={x1:0,y1:0,x2:0,y2:0,x3:0,y3:0});break;case P.BEZIER_CURVE:s.params&&"cp2y"in s.params||(s.params={x1:0,y1:0,cp1x:0,cp1y:0,cp2x:0,cp2y:0,x2:0,y2:0,thickness:void 0});break;default:s.params||(s.params={})}return this.Mt++,s}Yt(t,s,i,B,r){const E=this.xt(P.RECTANGLE);return E.params.x=t,E.params.y=s,E.params.width=i,E.params.height=B,r.BA(E.state),E.id}Ft(t,s,i,B,r,E,Q){const g=this.xt(P.CUSTOM);return g.params.x=t,g.params.y=s,g.params.width=i,g.params.height=B,g.params.shader=r,g.params.uniforms=E,Q.BA(g.state),g.id}Rt(t,s,i,B,r,E){const Q=this.xt(P.LINE);return Q.params.x1=t,Q.params.y1=s,Q.params.x2=i,Q.params.y2=B,Q.params.thickness=r,E.BA(Q.state),Q.id}St(t,s,i,B,r){const E=this.xt(P.ELLIPSE);return E.params.x=t,E.params.y=s,E.params.width=i,E.params.height=B,r.BA(E.state),E.id}kt(t,s,i,B,r,E,Q){const g=this.xt(P.ARC);return g.params.x=t,g.params.y=s,g.params.width=i,g.params.height=B,g.params.start=r,g.params.stop=E,Q.BA(g.state),g.id}zt(t,s,i,B,r,E,Q){const g=this.xt(P.TRIANGLE);return g.params.x1=t,g.params.y1=s,g.params.x2=i,g.params.y2=B,g.params.x3=r,g.params.y3=E,Q.BA(g.state),g.id}Ot(t,s,i,B,r,E,Q,g,a,c){const h=this.xt(P.BEZIER_CURVE);return h.params.x1=t,h.params.y1=s,h.params.cp1x=i,h.params.cp1y=B,h.params.cp2x=r,h.params.cp2y=E,h.params.x2=Q,h.params.y2=g,h.params.thickness=a,c.BA(h.state),h.id}get length(){return this.Mt}get isEmpty(){return this.Mt===0}Lt(){this.Mt=0}[Symbol.iterator](){let t=0;const s=this.Mt,i=this.$t;return{next:()=>t<s?{value:i[t++],done:!1}:{value:void 0,done:!0}}}}const b=class b{static Tt(t,s,i=0){var E,Q,g,a,c,h,l,C,D,u;const B=s||new Float32Array(b.FLOATS_PER_INSTANCE);let r=i;return B[r++]=t.position[0],B[r++]=t.position[1],B[r++]=t.size[0],B[r++]=t.size[1],B[r++]=t.AA[0],B[r++]=t.AA[1],B[r++]=t.AA[2],B[r++]=t.primaryColor[0],B[r++]=t.primaryColor[1],B[r++]=t.primaryColor[2],B[r++]=t.primaryColor[3],B[r++]=t.secondaryColor[0],B[r++]=t.secondaryColor[1],B[r++]=t.secondaryColor[2],B[r++]=t.secondaryColor[3],B[r++]=t.rotation[0],B[r++]=t.rotation[1],B[r++]=t.transform[0],B[r++]=t.transform[1],B[r++]=t.transform[2],B[r++]=t.globalRotationX,B[r++]=t.globalRotationY,B[r++]=t.globalRotationZ,B[r++]=t.rotationCenter[0],B[r++]=t.rotationCenter[1],B[r++]=((E=t.arcAngles)==null?void 0:E[0])||0,B[r++]=((Q=t.arcAngles)==null?void 0:Q[1])||0,B[r++]=((g=t.bezierControlPoint1)==null?void 0:g[0])||0,B[r++]=((a=t.bezierControlPoint1)==null?void 0:a[1])||0,B[r++]=((c=t.bezierControlPoint2)==null?void 0:c[0])||0,B[r++]=((h=t.bezierControlPoint2)==null?void 0:h[1])||0,B[r++]=((l=t.bezierStartPoint)==null?void 0:l[0])||0,B[r++]=((C=t.bezierStartPoint)==null?void 0:C[1])||0,B[r++]=((D=t.bezierEndPoint)==null?void 0:D[0])||0,B[r++]=((u=t.bezierEndPoint)==null?void 0:u[1])||0,B}static Ut(t){const s=t.length*b.FLOATS_PER_INSTANCE,i=new Float32Array(s);for(let B=0;B<t.length;B++){const r=B*b.FLOATS_PER_INSTANCE;b.Tt(t[B],i,r)}return i}};o(b,"BYTES_PER_INSTANCE",140),o(b,"FLOATS_PER_INSTANCE",35);let T=b;const f=class f{};o(f,"STRIDE",T.BYTES_PER_INSTANCE),o(f,"ATTRIBUTES",{a_instancePosition:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:0,divisor:1},a_instanceSize:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:8,divisor:1},a_instanceCharacter:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:16,divisor:1},a_instancePrimaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:28,divisor:1},a_instanceSecondaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:44,divisor:1},a_instanceRotation:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:60,divisor:1},a_instanceTransform:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:68,divisor:1},a_instanceGlobalRotation:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:80,divisor:1},a_instanceRotationCenter:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:92,divisor:1},a_instanceArcAngles:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:100,divisor:1},a_instanceBezierCP1:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:108,divisor:1},a_instanceBezierCP2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:116,divisor:1},a_instanceBezierStart:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:124,divisor:1},a_instanceBezierEnd:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:f.STRIDE,offset:132,divisor:1}});let O=f;class nA{constructor(t,s=1e3,i=1.5){o(this,"wA");o(this,"Wt",[]);o(this,"Ht");o(this,"Kt");o(this,"Jt",null);o(this,"Vt",!0);o(this,"Zt",0);o(this,"Nt",new Map);o(this,"Xt",null);this.wA=t,this.Ht=s,this.Kt=i,this.jt()}_t(t){const s=this.Wt.length;return this.Wt.push(t),this.Vt=!0,s}get count(){return this.Wt.length}get isEmpty(){return this.Wt.length===0}clear(){this.Wt.length=0,this.Vt=!0}qt(t){if(t<=this.Ht)return;const s=Math.ceil(t*this.Kt);this.Ht=s,this.jt()}jt(){const t=this.wA;this.Jt&&t.deleteBuffer(this.Jt),this.Jt=t.createBuffer();const s=this.Ht*T.BYTES_PER_INSTANCE;t.bindBuffer(t.ARRAY_BUFFER,this.Jt),t.bufferData(t.ARRAY_BUFFER,s,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.Vt=!0,this.Zt=0}Ae(){if(!this.Vt||this.Wt.length===0)return;const t=this.wA,s=this.Wt.length;this.qt(s),(!this.Xt||this.Xt.length<s*T.FLOATS_PER_INSTANCE)&&(this.Xt=new Float32Array(s*T.FLOATS_PER_INSTANCE));const i=T.Ut(this.Wt);t.bindBuffer(t.ARRAY_BUFFER,this.Jt),s<=this.Zt?t.bufferSubData(t.ARRAY_BUFFER,0,i):t.bufferData(t.ARRAY_BUFFER,i,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.Vt=!1,this.Zt=s}te(t){let s=this.Nt.get(t);if(!s){s=new Map;const i=this.wA;for(const B in O.ATTRIBUTES){const r=i.getAttribLocation(t,B);r!==-1&&s.set(B,r)}this.Nt.set(t,s)}return s}Dt(t){if(!this.Jt||this.Wt.length===0)return;const s=this.wA,i=t.XA;this.Ae();const B=this.te(i);s.bindBuffer(s.ARRAY_BUFFER,this.Jt);for(const[r,E]of B){const Q=O.ATTRIBUTES[r];Q&&(s.enableVertexAttribArray(E),s.vertexAttribPointer(E,Q.size,Q.type,Q.normalized,Q.stride,Q.offset),s.vertexAttribDivisor(E,Q.divisor))}}wt(t){const s=this.wA,i=this.te(t.XA);for(const[,B]of i)s.disableVertexAttribArray(B),s.vertexAttribDivisor(B,0)}Pt(t,s){this.Wt.length!==0&&this.wA.drawArraysInstanced(t,0,s,this.Wt.length)}kA(){const t=this.wA;this.Jt&&(t.deleteBuffer(this.Jt),this.Jt=null),this.Wt.length=0,this.Nt.clear(),this.Xt=null}}class F{constructor(t,s,i,B){o(this,"wA");o(this,"ee");o(this,"se");o(this,"ie");o(this,"Be",null);this.wA=t,this.ee=s,this.se=i,this.ie=B;const r=this.wA.createBuffer();if(!r)throw Error("Failed to create unit geometry buffer");this.wA.bindBuffer(this.wA.ARRAY_BUFFER,r),this.wA.bufferData(this.wA.ARRAY_BUFFER,this.ie.Qe,this.wA.STATIC_DRAW),this.wA.bindBuffer(this.wA.ARRAY_BUFFER,null),this.Be=r}get type(){return this.se}get unitGeometry(){return this.ie}get unitBuffer(){return this.Be}get batch(){return this.ee}ft(){this.ee.clear()}lt(){return!this.ee.isEmpty}kA(){this.ee.kA(),this.Be&&(this.wA.deleteBuffer(this.Be),this.Be=null)}Ee(t,s,i,B,r){const E=this.re(t,s,i,B,r.rotationX||0,r.rotationY||0,r.rotationZ||0);return{position:[t,s],size:[i,B],AA:r.character||[0,0,0],primaryColor:r.charColor||[1,1,1,1],secondaryColor:r.bgColor||[0,0,0,1],rotation:r.charRotation||[0,0],transform:[r.invert?1:0,r.flipHorizontally?1:0,r.flipVertically?1:0],globalRotationX:E.radiansX,globalRotationY:E.radiansY,globalRotationZ:E.radiansZ,rotationCenter:[E.centerX,E.centerY]}}ne(t,s){const i=L(this.wA)||[0,0,this.wA.canvas.width,this.wA.canvas.height];return{nx:t/i[2]*2-1,ny:1-s/i[3]*2}}ge(t,s,i){const B=this.ne(s,i);t.rotationCenter=[B.nx,B.ny]}re(t,s,i,B,r,E,Q){const g=L(this.wA)||[0,0,this.wA.canvas.width,this.wA.canvas.height],a=g[2],c=g[3];return{centerX:(t+i/2)/a*2-1,centerY:1-(s+B/2)/c*2,radiansX:-r*Math.PI/180,radiansY:-E*Math.PI/180,radiansZ:-Q*Math.PI/180,aspectRatio:a/c}}}const oA={Qe:new Float32Array([0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,1]),It:6,ut:WebGL2RenderingContext.TRIANGLES,rt:16,Et:{Qt:{size:2,offset:0},nt:{size:2,offset:8}}};class gA extends F{constructor(t,s){super(t,s,P.RECTANGLE,oA)}_t(t,s){const i=this.Ee(t.x,t.y,t.width,t.height,s);return this.ee._t(i)}}const aA={Qe:new Float32Array([0,-.5,0,0,1,-.5,1,0,0,.5,0,1,0,.5,0,1,1,-.5,1,0,1,.5,1,1]),It:6,ut:WebGL2RenderingContext.TRIANGLES,rt:16,Et:{Qt:{size:2,offset:0},nt:{size:2,offset:8}}};class hA extends F{constructor(t,s){super(t,s,P.LINE,aA)}_t(t,s){const i=t.x2-t.x1,B=t.y2-t.y1,r=Math.hypot(i,B),E=Math.atan2(B,i),Q=t.thickness||s.lineWeight||1,g=t.x1+i/2,a=t.y1+B/2,c=g-r/2,h=a,l={character:s.character,charColor:s.charColor,bgColor:s.bgColor,charRotation:s.charRotation,flipHorizontally:s.flipHorizontally,flipVertically:s.flipVertically,invert:s.invert,rotationX:s.rotationX||0,rotationY:s.rotationY||0,rotationZ:(s.rotationZ||0)+180*E/Math.PI,lineWeight:Q},C=this.Ee(c,h,r,Q,l);return this.ge(C,g,a),this.ee._t(C)}}const cA={Qe:function(n=32){const t=[],s=2*Math.PI/n;for(let i=0;i<n;i++){const B=i*s,r=(i+1)%n*s,E=Math.cos(B),Q=Math.sin(B),g=.5*(E+1),a=.5*(Q+1),c=Math.cos(r),h=Math.sin(r),l=.5*(c+1),C=.5*(h+1);t.push(0,0,.5,.5,E,Q,g,a,c,h,l,C)}return new Float32Array(t)}(32),It:96,ut:WebGL2RenderingContext.TRIANGLES,rt:16,Et:{Qt:{size:2,offset:0},nt:{size:2,offset:8}}};class lA extends F{constructor(t,s){super(t,s,P.ELLIPSE,cA)}_t(t,s){const i=this.Ee(t.x,t.y,t.width,t.height,s);return this.ge(i,t.x,t.y),this.ee._t(i)}}let CA={Qe:function(n){const t=[];for(let s=0;s<n;s++){const i=s/n,B=(s+1)/n;t.push(i,0,i,0,i,1,i,1,B,1,B,1)}return new Float32Array(t)}(32),It:96,ut:WebGL2RenderingContext.TRIANGLES,rt:16,Et:{Qt:{size:2,offset:0},nt:{size:2,offset:8}}};class DA extends F{constructor(t,s){super(t,s,P.ARC,CA)}_t(t,s){const i=t.x-t.width/2,B=t.y-t.height/2,r=t.start*Math.PI/180,E=t.stop*Math.PI/180,Q=this.Ee(i,B,t.width,t.height,s);return this.ge(Q,t.x,t.y),Q.arcAngles=[r,E],this.ee._t(Q)}}const PA={Qe:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),It:3,ut:WebGL2RenderingContext.TRIANGLES,rt:16,Et:{Qt:{size:2,offset:0},nt:{size:2,offset:8}}};class uA extends F{constructor(t,s){super(t,s,P.TRIANGLE,PA)}_t(t,s){const i=Math.min(t.x1,t.x2,t.x3),B=Math.max(t.x1,t.x2,t.x3),r=Math.min(t.y1,t.y2,t.y3),E=B-i,Q=Math.max(t.y1,t.y2,t.y3)-r,g=this.Ee(i,r,E,Q,s),a=i+.5*E,c=r+Q*(1/3);return this.ge(g,a,c),this.ee._t(g)}}function X(n,t,s,i,B){const r=1-n,E=r*r,Q=n*n;return E*r*t+3*E*n*s+3*r*Q*i+Q*n*B}const wA={Qe:function(n=16){const t=[];for(let s=0;s<n;s++){const i=s/n,B=(s+1)/n;t.push(i,-.5,i,0),t.push(B,-.5,B,0),t.push(i,.5,i,1),t.push(i,.5,i,1),t.push(B,-.5,B,0),t.push(B,.5,B,1)}return new Float32Array(t)}(16),It:96,ut:WebGL2RenderingContext.TRIANGLES,rt:16,Et:{Qt:{size:2,offset:0},nt:{size:2,offset:8}}};class IA extends F{constructor(t,s){super(t,s,P.BEZIER_CURVE,wA)}_t(t,s){const i=s.lineWeight||1,B=X(.5,t.x1,t.cp1x,t.cp2x,t.x2),r=X(.5,t.y1,t.cp1y,t.cp2y,t.y2),E={character:s.character,charColor:s.charColor,bgColor:s.bgColor,charRotation:s.charRotation,flipHorizontally:s.flipHorizontally,flipVertically:s.flipVertically,invert:s.invert,rotationX:s.rotationX||0,rotationY:s.rotationY||0,rotationZ:s.rotationZ||0,lineWeight:i},Q=this.Ee(0,0,1,i,E);return this.ge(Q,B,r),Q.bezierStartPoint=[t.x1,t.y1],Q.bezierControlPoint1=[t.cp1x,t.cp1y],Q.bezierControlPoint2=[t.cp2x,t.cp2y],Q.bezierEndPoint=[t.x2,t.y2],this.ee._t(Q)}}class fA{constructor(t){o(this,"wA");o(this,"oe",null);o(this,"ae");o(this,"he",null);o(this,"ce",{});o(this,"Ce",null);o(this,"le",new Map);o(this,"De");o(this,"Pe");o(this,"ue");o(this,"K",[]);this.wA=t,this.ae=new BA(t),this.ue=new $,this.De=new EA(t,this),this.Pe=new QA,this.Ce=t.createBuffer(),S(this.wA,[0,0,this.wA.canvas.width,this.wA.canvas.height])}Ie(t){let s=this.le.get(t);if(s)return s;const i=new nA(this.wA);return s=(0,{[P.RECTANGLE]:()=>new gA(this.wA,i),[P.LINE]:()=>new hA(this.wA,i),[P.ELLIPSE]:()=>new lA(this.wA,i),[P.ARC]:()=>new DA(this.wA,i),[P.TRIANGLE]:()=>new uA(this.wA,i),[P.BEZIER_CURVE]:()=>new IA(this.wA,i)}[t])(),this.le.set(t,s),s}we(t){this.oe!==t&&(this.oe=t,t.HA())}fe(t,s){return this.ae.st(t,s)}At(){return this.ae.At()}YA(){return this.ae.YA()}tt(){return this.ae.tt()}de(t){this.he=t,t&&(this.ce={})}VA(t,s){this.ce[t]=s}_e(t){Object.assign(this.ce,t)}et(t){return this.ae.et(t)}pe(t,s,i,B,r){const E=this.At(),Q={l:t.textures[0],m:t.textures[1],n:t.textures[2],o:t.textures[3],p:t.textures[4],q:[t.width,t.height]};this.Pe.Ft(s,i,B,r,E,Q,this.ue)}me(t,s,i,B){var u;const r=this.wA,E=r.canvas.width,Q=r.canvas.height,g=t/E*2-1,a=(t+i)/E*2-1,c=1-s/Q*2,h=1-(s+B)/Q*2,l=new Float32Array([g,h,a,h,g,c,a,h,a,c,g,c]);r.bindBuffer(r.ARRAY_BUFFER,this.Ce),r.bufferData(r.ARRAY_BUFFER,l,r.DYNAMIC_DRAW);const C=((u=this.oe)==null?void 0:u.XA)||r.getParameter(r.CURRENT_PROGRAM),D=C?r.getAttribLocation(C,"a_position"):-1;D!==-1&&(r.enableVertexAttribArray(D),r.vertexAttribPointer(D,2,r.FLOAT,!1,8,0)),r.drawArrays(r.TRIANGLES,0,6),D!==-1&&r.disableVertexAttribArray(D)}ve(t,s,i,B){this.he?(this.Pe.Ft(t,s,i,B,this.he,{...this.ce},this.ue),this.he=null,this.ce={}):this.Pe.Yt(t,s,i,B,this.ue)}ye(t,s,i,B){this.Pe.Rt(t,s,i,B,this.ue.lineWeight,this.ue)}be(t,s,i,B){this.Pe.St(t,s,i,B,this.ue)}$e(t,s,i,B,r,E){this.Pe.zt(t,s,i,B,r,E,this.ue)}Ge(t,s,i,B,r,E,Q,g){const a=this.ue.lineWeight;this.Pe.Ot(t,s,i,B,r,E,Q,g,a,this.ue)}Me(t,s,i=1,B={}){return new U(this.wA,t,s,i,B,this,!0)}xe(t,s,i,B,r,E){this.Pe.kt(t,s,i,B,r,E,this.ue)}Ye(t,s=t,i=t,B=255){this.state.DA(t,s,i,B),this.Lt(t/255,s/255,i/255,B/255)}Lt(t=0,s=0,i=0,B=0){this.wA.clearColor(t,s,i,B),this.wA.clear(this.wA.COLOR_BUFFER_BIT)}Fe(){this.wA.viewport(0,0,this.wA.canvas.width,this.wA.canvas.height),S(this.wA,[0,0,this.wA.canvas.width,this.wA.canvas.height])}get context(){return this.wA}get state(){return this.ue}RA(t){this.K.push(this.ue),this.ue=t}SA(){const t=this.K.pop();t&&(this.ue=t)}FA(t){const s=t,i=L(this.wA)??this.wA.getParameter(this.wA.VIEWPORT),B={shader:s,gl:this.wA,viewport:i};this.we(s);const r=new Set;for(const E of this.Pe)E.type===P.CUSTOM?r.add(P.RECTANGLE):r.add(E.type);for(const E of r)E!==P.CUSTOM&&this.Ie(E);this.De.Ct(B,this.Pe,this.le),this.Pe.Lt()}kA(){this.wA.deleteBuffer(this.Ce),this.Pe.Lt();for(const t of this.le.values())t.kA();this.ae.kA()}}const d={readShort:(n,t)=>(d.t.uint16[0]=n[t]<<8|n[t+1],d.t.int16[0]),readUshort:(n,t)=>n[t]<<8|n[t+1],readUshorts(n,t,s){const i=[];for(let B=0;B<s;B++)i.push(d.readUshort(n,t+2*B));return i},readUint(n,t){const s=d.t.uint8;return s[3]=n[t],s[2]=n[t+1],s[1]=n[t+2],s[0]=n[t+3],d.t.uint32[0]},readASCII(n,t,s){let i="";for(let B=0;B<s;B++)i+=String.fromCharCode(n[t+B]);return i},t:(()=>{const n=new ArrayBuffer(8);return{uint8:new Uint8Array(n),int16:new Int16Array(n),uint16:new Uint16Array(n),uint32:new Uint32Array(n)}})()},dA={parseTab(n,t,s){const i={tables:[],ids:{},off:t};n=new Uint8Array(n.buffer,t,s),t=0;const B=d,r=B.readUshort,E=r(n,t+=2);t+=2;const Q=[];for(let g=0;g<E;g++){const a=r(n,t),c=r(n,t+=2);t+=2;const h=B.readUint(n,t);t+=4;const l=`p${a}e${c}`;let C=Q.indexOf(h);if(C===-1){let D;C=i.tables.length,Q.push(h);const u=r(n,h);D=u===4?this.parse4(n,h):u===12?this.parse12(n,h):{format:u},i.tables.push(D)}i.ids[l]=C}return i},parse4(n,t){const s=d,i=s.readUshort,B=s.readUshorts,r=t,E=i(n,t+=2);t+=2;const Q=i(n,t+=2)>>>1,g={format:4,searchRange:i(n,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,g.entrySelector=i(n,t),t+=2,g.rangeShift=i(n,t),t+=2,g.endCount=B(n,t,Q),t+=2*Q,t+=2,g.startCount=B(n,t,Q),t+=2*Q;for(let a=0;a<Q;a++)g.idDelta.push(s.readShort(n,t)),t+=2;return g.idRangeOffset=B(n,t,Q),t+=2*Q,g.glyphIdArray=B(n,t,r+E-t>>1),g},parse12(n,t){const s=d.readUint;s(n,t+=4),s(n,t+=4);const i=s(n,t+=4);t+=4;const B=new Uint32Array(3*i);for(let r=0;r<3*i;r+=3)B[r]=s(n,t+(r<<2)),B[r+1]=s(n,t+(r<<2)+4),B[r+2]=s(n,t+(r<<2)+8);return{format:12,groups:B}}},pA={parseTab(n,t,s){const i=d;t+=18;const B=i.readUshort(n,t);t+=2,t+=16;const r=i.readShort(n,t);t+=2;const E=i.readShort(n,t);t+=2;const Q=i.readShort(n,t);t+=2;const g=i.readShort(n,t);return t+=2,t+=6,{unitsPerEm:B,xMin:r,yMin:E,xMax:Q,yMax:g,indexToLocFormat:i.readShort(n,t)}}},mA={parseTab(n,t,s){const i=d;t+=4;const B=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],r={};for(let E=0;E<B.length;E++){const Q=B[E],g=Q==="advanceWidthMax"||Q==="numberOfHMetrics"?i.readUshort:i.readShort;r[Q]=g(n,t+2*E)}return r}},yA={parseTab(n,t,s,i){const B=d,r=[],E=[],Q=i.maxp.numGlyphs,g=i.hhea.numberOfHMetrics;let a=0,c=0,h=0;for(;h<g;)a=B.readUshort(n,t+(h<<2)),c=B.readShort(n,t+(h<<2)+2),r.push(a),E.push(c),h++;for(;h<Q;)r.push(a),E.push(c),h++;return{aWidth:r,lsBearing:E}}},Z={cmap:dA,head:pA,hhea:mA,maxp:{parseTab(n,t,s){const i=d;return i.readUint(n,t),t+=4,{numGlyphs:i.readUshort(n,t)}}},hmtx:yA,loca:{parseTab(n,t,s,i){const B=d,r=[],E=i.head.indexToLocFormat,Q=i.maxp.numGlyphs+1;if(E===0)for(let g=0;g<Q;g++)r.push(B.readUshort(n,t+(g<<1))<<1);else if(E===1)for(let g=0;g<Q;g++)r.push(B.readUint(n,t+(g<<2)));return r}},glyf:{parseTab(n,t,s,i){const B=[],r=i.maxp.numGlyphs;for(let E=0;E<r;E++)B.push(null);return B},Re(n,t){const s=d,i=n.Se,B=n.loca;if(B[t]===B[t+1])return null;const r=v.findTable(i,"glyf",n.ke);if(!r)return null;let E=r[0]+B[t];const Q={};if(Q.noc=s.readShort(i,E),E+=2,Q.xMin=s.readShort(i,E),E+=2,Q.yMin=s.readShort(i,E),E+=2,Q.xMax=s.readShort(i,E),E+=2,Q.yMax=s.readShort(i,E),E+=2,Q.xMin>=Q.xMax||Q.yMin>=Q.yMax)return null;if(Q.noc>0){Q.endPts=[];for(let l=0;l<Q.noc;l++)Q.endPts.push(s.readUshort(i,E)),E+=2;const g=s.readUshort(i,E);if(E+=2,i.length-E<g)return null;E+=g;const a=Q.endPts[Q.noc-1]+1;Q.flags=[];for(let l=0;l<a;l++){const C=i[E];if(E++,Q.flags.push(C),8&C){const D=i[E];E++;for(let u=0;u<D;u++)Q.flags.push(C),l++}}Q.xs=[];for(let l=0;l<a;l++){const C=Q.flags[l],D=!!(16&C);2&C?(Q.xs.push(D?i[E]:-i[E]),E++):D?Q.xs.push(0):(Q.xs.push(s.readShort(i,E)),E+=2)}Q.ys=[];for(let l=0;l<a;l++){const C=Q.flags[l],D=!!(32&C);4&C?(Q.ys.push(D?i[E]:-i[E]),E++):D?Q.ys.push(0):(Q.ys.push(s.readShort(i,E)),E+=2)}let c=0,h=0;for(let l=0;l<a;l++)c+=Q.xs[l],h+=Q.ys[l],Q.xs[l]=c,Q.ys[l]=h}else Q.parts=[],Q.endPts=[],Q.flags=[],Q.xs=[],Q.ys=[];return Q}}},v={parse:n=>[((t,s,i,B)=>{const r=Z,E={Se:t,ze:s,ke:i};for(const Q in r){const g=Q,a=v.findTable(t,g,i);if(a){const[c,h]=a;let l=B[c];l==null&&(l=r[g].parseTab(t,c,h,E),B[c]=l),E[g]=l}}return E})(new Uint8Array(n),0,0,{})],findTable(n,t,s){const i=d,B=i.readUshort(n,s+4);let r=s+12;for(let E=0;E<B;E++){const Q=i.readASCII(n,r,4);i.readUint(n,r+4);const g=i.readUint(n,r+8),a=i.readUint(n,r+12);if(Q===t)return[g,a];r+=16}return null},T:Z,B:d};class W{constructor(){o(this,"Oe",new Map);o(this,"Le",new Map)}Te(t,s){const i=`${this.Ue(t)}_${s}`;if(this.Oe.has(i))return this.Oe.get(i);const B=t.cmap;if(!B||!B.tables)return this.Oe.set(i,0),0;let r=0;for(const E of B.tables)if(E.format===4?r=this.We(s,E):E.format===12&&(r=this.He(s,E)),r>0)break;return this.Oe.set(i,r),r}Ke(t,s){const i=s.codePointAt(0);return i===void 0?0:this.Te(t,i)}Je(t,s){const i=t.hmtx;return i&&i.aWidth&&i.aWidth.length!==0?s<i.aWidth.length?i.aWidth[s]:i.aWidth[i.aWidth.length-1]:0}Ve(t,s){const i=s/t.head.unitsPerEm,B=t.hhea.ascender*i,r=t.hhea.descender*i,E=t.hhea.lineGap*i;return{ascender:B,descender:r,lineGap:E,lineHeight:B-r+E,unitsPerEm:t.head.unitsPerEm,scale:i}}Ze(){this.Oe.clear(),this.Le.clear()}Ue(t){return`${t.ke}_${t.Se.length}`}We(t,s){const i=s.endCount.length;let B=-1;for(let r=0;r<i;r++)if(t<=s.endCount[r]){B=r;break}if(B===-1||t<s.startCount[B])return 0;if(s.idRangeOffset[B]===0)return t+s.idDelta[B]&65535;{const r=s.idRangeOffset[B]/2+(t-s.startCount[B])-(i-B);if(r>=0&&r<s.glyphIdArray.length){const E=s.glyphIdArray[r];return E===0?0:E+s.idDelta[B]&65535}}return 0}He(t,s){const i=s.groups.length/3;for(let B=0;B<i;B++){const r=s.groups[3*B],E=s.groups[3*B+1],Q=s.groups[3*B+2];if(t>=r&&t<=E)return Q+(t-r)}return 0}}class vA{constructor(t){o(this,"Ne");this.Ne=t}Xe(t){var i;const s=[];return(i=t.cmap)!=null&&i.tables?(t.cmap.tables.forEach(B=>{if(B.format===4){const r=this.je(B);s.push(...r)}else if(B.format===12){const r=this.qe(B);s.push(...r)}}),[...new Set(s)]):[]}As(t,s){return this.Ne.Ke(t,s)>0}ts(t,s){for(const i of s)if(!this.As(t,i))return!1;return!0}es(t,s){return s.filter(i=>this.As(t,i))}ss(t){return t.filter(s=>this.Bs(s))}je(t){const s=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return s;for(let i=0;i<t.startCount.length;i++){const B=t.startCount[i],r=t.endCount[i];if(B!==65535||r!==65535){for(let E=B;E<=r;E++)if(this.Qs(t,E,i)>0)try{const Q=String.fromCodePoint(E);s.push(Q)}catch{}}}return s}qe(t){const s=[];if(!t.groups)return s;for(let i=0;i<t.groups.length;i+=3){const B=t.groups[i],r=t.groups[i+1],E=t.groups[i+2];for(let Q=B;Q<=r;Q++)if(E+(Q-B)>0)try{const g=String.fromCodePoint(Q);s.push(g)}catch{}}return s}Qs(t,s,i){if(t.idRangeOffset[i]===0)return s+t.idDelta[i]&65535;{const B=t.idRangeOffset[i]/2+(s-t.startCount[i])-(t.startCount.length-i);if(B>=0&&t.glyphIdArray&&B<t.glyphIdArray.length){const r=t.glyphIdArray[B];if(r!==0)return r+t.idDelta[i]&65535}}return 0}Bs(t){const s=t.codePointAt(0)||0;return!(s>=0&&s<=31&&s!==9&&s!==10&&s!==13||s>=127&&s<=159)}}class xA{constructor(){o(this,"Es");const t=new W;this.Es=new vA(t)}extractCharacters(t){return this.Es.Xe(t)}filterProblematicCharacters(t){return this.Es.ss(t)}characterExists(t,s){return this.Es.As(t,s)}allCharactersExist(t,s){return this.Es.ts(t,s)}}class bA{constructor(t){o(this,"rs");o(this,"ns");o(this,"vA");o(this,"gs");this.vA=t,this.gs=new W,this.rs=document.createElement("canvas"),this.ns=this.rs.getContext("2d",{willReadFrequently:!0,alpha:!1})}createTextureAtlas(t,s,i,B){const r=t.length,E=Math.ceil(Math.sqrt(r)),Q=Math.ceil(r/E),g=s.width*E,a=s.height*Q,c=typeof B=="object"?B:null;this.hs(g,a),this.cs(t,s,E,i,c);const h=this.vA.Me(g,a,1,{filter:"nearest"});return h.MA(this.rs),{framebuffer:h,columns:E,rows:Q}}hs(t,s){this.rs.width=t,this.rs.height=s,this.rs.style.width=t+"px",this.rs.style.height=t+"px",this.ns.imageSmoothingEnabled=!1,this.rs.style.imageRendering="pixelated",this.ns.fillStyle="black",this.ns.fillRect(0,0,t,s),this.ns.textBaseline="top",this.ns.textAlign="left",this.ns.fillStyle="white"}cs(t,s,i,B,r){const E=B/r.head.unitsPerEm;for(let Q=0;Q<t.length;Q++){const g=Q%i,a=Math.floor(Q/i),c=t[Q].character,h=this.Cs(r,c);if(!h)continue;const l=c.codePointAt(0)||0,C=this.gs.Te(r,l),D=this.ls(r,C)*E,u=g*s.width,m=a*s.height,p=u+.5*s.width,y=m+.5*s.height,x=Math.round(p-.5*s.width),_=Math.round(y-.5*B),it=x+.5*(s.width-D),Bt=_+r.hhea.ascender*E;this.Ds(h,it,Bt,E)}}Cs(t,s){const i=s.codePointAt(0)||0,B=this.gs.Te(t,i);if(B===0)return null;if(t.glyf&&t.glyf[B]!==null)return t.glyf[B];if(v&&v.T&&v.T.glyf){const r=v.T.glyf.Re(t,B);return t.glyf&&r&&(t.glyf[B]=r),r}return null}ls(t,s){const i=t.hmtx;return i&&i.aWidth?s<i.aWidth.length?i.aWidth[s]:i.aWidth[i.aWidth.length-1]:0}Ds(t,s,i,B){if(!t||!t.xs||t.noc===0)return;const{xs:r,ys:E,endPts:Q,flags:g}=t;if(!(r&&E&&Q&&g))return;this.ns.beginPath();let a=0;for(let c=0;c<Q.length;c++){const h=Q[c];if(!(h<a)){if(h>=a){const l=s+r[a]*B,C=i-E[a]*B;this.ns.moveTo(l,C);let D=a+1;for(;D<=h;)if(1&g[D]){const u=s+r[D]*B,m=i-E[D]*B;this.ns.lineTo(u,m),D++}else{const u=s+r[D]*B,m=i-E[D]*B;let p=D+1>h?a:D+1;if(1&g[p]){const y=s+r[p]*B,x=i-E[p]*B;this.ns.quadraticCurveTo(u,m,y,x),D=p+1}else{const y=(u+(s+r[p]*B))/2,x=(m+(i-E[p]*B))/2;this.ns.quadraticCurveTo(u,m,y,x),D=p}}this.ns.closePath()}a=h+1}}this.ns.fill()}}class RA{constructor(){o(this,"Ne");this.Ne=new W}calculateMaxGlyphDimensions(t,s,i){let B=0;const r=this.Ne.Ve(i,s),E=r.lineHeight;for(const Q of t){const g=this.Ne.Ke(i,Q);if(g===0)continue;const a=this.Ne.Je(i,g)*r.scale;B=Math.max(B,a)}return{width:Math.ceil(B),height:Math.ceil(E)}}getCharacterAdvanceWidth(t,s,i){const B=this.Ne.Ve(i,s),r=this.Ne.Ke(i,t);return this.Ne.Je(i,r)*B.scale}getFontMetrics(t,s){return this.Ne.Ve(s,t)}Ze(){this.Ne.Ze()}}class TA{constructor(){o(this,"gs");this.gs=new W}createCharacterObjects(t,s){return t.map((i,B)=>{const r=i.codePointAt(0)||0,E=this.Ps(B);let Q=0;if(s.hmtx&&s.hmtx.aWidth){const g=this.gs.Te(s,r);g>0&&s.hmtx.aWidth[g]!==void 0&&(Q=s.hmtx.aWidth[g])}return{character:i,unicode:r,color:E,advanceWidth:Q}})}Ps(t){return[t%256/255,Math.floor(t/256)%256/255,Math.floor(t/65536)%256/255]}us(t,s){if(!G._(typeof t=="string","Character must be a string.",{method:"getCharacterColor",providedValue:t}))return[0,0,0];const i=s.find(B=>B.character===t);return i?i.color:[0,0,0]}Is(t,s){return G._(typeof t=="string"&&t.length>0,"Characters must be a string with at least one character.",{method:"getCharacterColors",providedValue:t})?Array.from(t).map(i=>this.us(i,s)||[0,0,0]):[[0,0,0]]}}class j{constructor(t,s=16){o(this,"ws");o(this,"fs",[]);o(this,"ds");o(this,"_s",16);o(this,"ps",0);o(this,"vs",0);o(this,"bs",{width:0,height:0});o(this,"$s");o(this,"Gs");o(this,"Ms");o(this,"Ys");o(this,"Fs");this._s=s,this.Gs=new xA,this.Ms=new bA(t),this.Ys=new RA,this.Fs=new TA}async Rs(t){let s;if(t){const i=await fetch(t);if(!i.ok)throw new w(`Failed to load font file: ${i.status} ${i.statusText}`);s=await i.arrayBuffer()}else s=await(await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
|
|
11
|
-
`)).arrayBuffer();await this.Ss(s),this.ws=v.parse(s)[0],await this.ks()}zs(t){if(t===void 0)return this._s;this._s=t,this.bs=this.Ys.calculateMaxGlyphDimensions(this.fs.map(i=>i.character),this._s,this.ws);const s=this.Ms.createTextureAtlas(this.fs,this.bs,this._s,this.ws);this.ds=s.framebuffer,this.ps=s.columns,this.vs=s.rows}async Os(t){try{const s=await fetch(t);if(!s.ok)throw new w(`Failed to load font file: ${s.status} ${s.statusText}`);const i=await s.arrayBuffer();await this.Ss(i);const B=v.parse(i);if(!B||B.length===0)throw Error("Failed to parse font file");this.ws=B[0],await this.ks()}catch(s){throw new w("Failed to load font: "+(s instanceof Error?s.message:"Unknown error"),s)}}async Ss(t){const s=Date.now();this.$s=new FontFace("CustomFont_"+s,t),await this.$s.load(),document.fonts.add(this.$s)}async ks(){const t=this.Gs.extractCharacters(this.ws),s=this.Gs.filterProblematicCharacters(t);this.fs=this.Fs.createCharacterObjects(s,this.ws),this.bs=this.Ys.calculateMaxGlyphDimensions(s,this._s,this.ws);const i=this.Ms.createTextureAtlas(this.fs,this.bs,this._s,this.ws);this.ds=i.framebuffer,this.ps=i.columns,this.vs=i.rows}us(t){return this.Fs.us(t,this.fs)}Is(t){return this.Fs.Is(t,this.fs)}kA(){this.ds.kA(),document.fonts.delete(this.$s)}get fontFramebuffer(){return this.ds}get characters(){return this.fs}get textureColumns(){return this.ps}get textureRows(){return this.vs}get maxGlyphDimensions(){return this.bs}get fontSize(){return this._s}get font(){return this.ws}}class q{constructor(t,s,i){o(this,"Ls");o(this,"Ts");o(this,"PA");o(this,"uA");o(this,"Us");o(this,"Ws");o(this,"Hs");o(this,"Ks");o(this,"Js");this.Hs=t,this.Ks=s,this.Js=i,this.iA()}iA(){this.Ls=Math.floor(this.Hs.width/this.Ks),this.Ts=Math.floor(this.Hs.height/this.Js),this.PA=this.Ls*this.Ks,this.uA=this.Ts*this.Js,this.Us=Math.floor((this.Hs.width-this.PA)/2),this.Ws=Math.floor((this.Hs.height-this.uA)/2)}Vs(t,s){this.Ks=t,this.Js=s,this.iA()}get cellWidth(){return this.Ks}get cellHeight(){return this.Js}get cols(){return this.Ls}get rows(){return this.Ts}get width(){return this.PA}get height(){return this.uA}get offsetX(){return this.Us}get offsetY(){return this.Ws}}class AA{constructor(t={}){o(this,"Hs");o(this,"Zs");o(this,"Ns");t.canvas?(this.Hs=t.canvas,this.Ns=!1):(this.Hs=this.Xs(t.width,t.height),this.Ns=!0),this.Hs.style.imageRendering="pixelated"}Xs(t,s){const i=document.createElement("canvas");return i.className="textmodeCanvas",i.style.imageRendering="pixelated",i.width=t||800,i.height=s||600,document.body.appendChild(i),i}js(t,s){this.Hs.width=t??this.Hs.width,this.Hs.height=s??this.Hs.height}qs(){const t=this.Hs.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1,stencil:!1,powerPreference:"high-performance"});if(!t)throw new w("`textmode.js` requires WebGL2 support.");return t}kA(){this.Zs&&this.Zs.disconnect();const t=this.Hs.getContext("webgl")||this.Hs.getContext("webgl2");if(t){const s=t.getExtension("WEBGL_lose_context");s&&s.loseContext()}this.Ns&&this.Hs.parentNode&&this.Hs.parentNode.removeChild(this.Hs)}get canvas(){return this.Hs}get width(){return this.Hs.width}get height(){return this.Hs.height}}class MA{constructor(t=60){o(this,"Ai");o(this,"ti");o(this,"ei",null);o(this,"si",0);o(this,"ii",!0);o(this,"Bi",0);o(this,"Qi",0);o(this,"Ei",[]);o(this,"ri",10);o(this,"ni",0);this.Ai=t,this.ti=1e3/t}start(t){if(!this.ii)return;this.si=performance.now();const s=i=>{if(!this.ii)return void(this.ei=null);const B=i-this.si;B>=this.ti&&(t(),this.si=i-B%this.ti),this.ii&&(this.ei=requestAnimationFrame(s))};this.ei=requestAnimationFrame(s)}stop(){this.ei&&(cancelAnimationFrame(this.ei),this.ei=null)}pause(){this.ii&&(this.ii=!1,this.stop())}resume(t){this.ii||(this.ii=!0,this.start(t))}frameRate(t,s){if(t===void 0)return this.Bi;this.Ai=t,this.ti=1e3/t,this.ii&&s&&(this.stop(),this.start(s))}measureFrameRate(){const t=performance.now();if(this.Qi>0){const s=t-this.Qi;this.Ei.push(s),this.Ei.length>this.ri&&this.Ei.shift();const i=this.Ei.reduce((B,r)=>B+r,0)/this.Ei.length;this.Bi=1e3/i}this.Qi=t}get isLooping(){return this.ii}get frameRateLimit(){return this.Ai}get currentFrameRate(){return this.Bi}get frameCount(){return this.ni}set frameCount(t){this.ni=t}incrementFrame(){this.ni++}resetFrameCount(){this.ni=0}}class FA{constructor(){o(this,"gi",new Map);o(this,"oi",null);o(this,"ai",null);o(this,"hi");o(this,"ci");o(this,"Ci",!1);o(this,"li");o(this,"Di");o(this,"Pi",{ArrowUp:"UP_ARROW",ArrowDown:"DOWN_ARROW",ArrowLeft:"LEFT_ARROW",ArrowRight:"RIGHT_ARROW",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",Enter:"ENTER",Return:"RETURN",Tab:"TAB",Escape:"ESCAPE",Backspace:"BACKSPACE",Delete:"DELETE",Insert:"INSERT",Home:"HOME",End:"END",PageUp:"PAGE_UP",PageDown:"PAGE_DOWN",Shift:"SHIFT",Control:"CONTROL",Alt:"ALT",Meta:"META"," ":"SPACE"})}ui(){this.Ci||(this.hi=t=>{this.Ii(t)},this.ci=t=>{this.wi(t)},window.addEventListener("keydown",this.hi,{passive:!1}),window.addEventListener("keyup",this.ci,{passive:!1}),this.Ci=!0)}fi(){this.Ci&&(window.removeEventListener("keydown",this.hi),window.removeEventListener("keyup",this.ci),this.Ci=!1,this.gi.clear(),this.oi=null,this.ai=null)}di(t){this.li=t}_i(t){this.Di=t}pi(t){const s=this.mi(t),i=this.gi.get(t)||this.gi.get(s);return(i==null?void 0:i.isPressed)||!1}yi(){return this.oi}bi(){return this.ai}$i(){const t=[];for(const[s,i]of this.gi)i.isPressed&&t.push(s);return t}Gi(){return{ctrl:this.pi("Control"),shift:this.pi("Shift"),alt:this.pi("Alt"),meta:this.pi("Meta")}}Mi(){this.gi.clear(),this.oi=null,this.ai=null}Ii(t){const s=t.key,i=Date.now();this.gi.has(s)||this.gi.set(s,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const B=this.gi.get(s);if(!B.isPressed&&(B.isPressed=!0,B.lastPressTime=i,this.oi=s,this.li)){const r={key:s,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.li(r)}}wi(t){const s=t.key,i=Date.now();this.gi.has(s)||this.gi.set(s,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const B=this.gi.get(s);if(B.isPressed=!1,B.lastReleaseTime=i,this.ai=s,this.Di){const r={key:s,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.Di(r)}}mi(t){return this.Pi[t]||t.toLowerCase()}}class GA{constructor(t){o(this,"Hs");o(this,"xi");o(this,"Yi",{x:-1,y:-1});o(this,"Fi",{x:-1,y:-1});o(this,"Ri",null);o(this,"Si");o(this,"ki");o(this,"zi");o(this,"Oi");o(this,"Li");o(this,"Ti");o(this,"Ci",!1);o(this,"Ui");o(this,"Wi");o(this,"Hi");o(this,"Ki");o(this,"Ji");this.Hs=t}Rs(t){this.xi=t,this.Vi()}ui(){if(this.Ci)return;const t=this.Hs.canvas;this.Si=s=>{this.Zi(s),this.Ni(s)},this.ki=()=>{this.Fi={...this.Yi},this.Yi.x=-1,this.Yi.y=-1,this.Ri=null},this.zi=s=>{this.Zi(s),this.Xi(s)},this.Oi=s=>{this.Zi(s),this.ji(s)},this.Li=s=>{this.Zi(s),this.qi(s)},this.Ti=s=>{this.Zi(s),this.AB(s)},t.addEventListener("mousemove",this.Si,{passive:!0}),t.addEventListener("mouseleave",this.ki,{passive:!0}),t.addEventListener("mousedown",this.zi,{passive:!0}),t.addEventListener("mouseup",this.Oi,{passive:!0}),t.addEventListener("click",this.Li,{passive:!0}),t.addEventListener("wheel",this.Ti,{passive:!1}),this.Ci=!0}fi(){if(!this.Ci)return;const t=this.Hs.canvas;t.removeEventListener("mousemove",this.Si),t.removeEventListener("mouseleave",this.ki),t.removeEventListener("mousedown",this.zi),t.removeEventListener("mouseup",this.Oi),t.removeEventListener("click",this.Li),t.removeEventListener("wheel",this.Ti),this.Ci=!1}Vi(){if(this.Ci)try{if(this.Ri){const t=new MouseEvent("mousemove",{clientX:this.Ri.x,clientY:this.Ri.y,bubbles:!1,cancelable:!1});this.Zi(t)}else this.Yi.x!==-1&&this.Yi.y!==-1&&(this.Yi.x>=this.xi.cols||this.Yi.y>=this.xi.rows)&&(this.Yi.x=-1,this.Yi.y=-1)}catch{this.Yi.x=-1,this.Yi.y=-1}}tB(t){this.Ui=t}di(t){this.Wi=t}_i(t){this.Hi=t}eB(t){this.Ki=t}sB(t){this.Ji=t}iB(){return{x:this.Yi.x,y:this.Yi.y}}Ni(t){if(this.Ki){const s={position:{...this.Yi},previousPosition:{...this.Fi},originalEvent:t};this.Ki(s)}}Xi(t){if(this.Wi){const s={position:{...this.Yi},previousPosition:{...this.Fi},button:t.button,originalEvent:t};this.Wi(s)}}ji(t){if(this.Hi){const s={position:{...this.Yi},previousPosition:{...this.Fi},button:t.button,originalEvent:t};this.Hi(s)}}qi(t){if(this.Ui){const s={position:{...this.Yi},previousPosition:{...this.Fi},button:t.button,originalEvent:t};this.Ui(s)}}AB(t){if(this.Ji){const s={position:{...this.Yi},previousPosition:{...this.Fi},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.Ji(s)}}Zi(t){const s=this.Hs.canvas;this.Fi={...this.Yi},this.Ri={x:t.clientX,y:t.clientY};const i=s.getBoundingClientRect(),B=t.clientX-i.left,r=t.clientY-i.top,E=s.width/i.width,Q=r*(s.height/i.height),g=B*E-this.xi.offsetX,a=Q-this.xi.offsetY,c=Math.floor(g/this.xi.cellWidth),h=Math.floor(a/this.xi.cellHeight);c>=0&&c<this.xi.cols&&h>=0&&h<this.xi.rows?(this.Yi.x=c,this.Yi.y=h):(this.Yi.x=-1,this.Yi.y=-1)}}const YA=n=>class extends n{rotate(t=0,s=0,i=0){this.vA.state.EA(t),this.vA.state.rA(s),this.vA.state.nA(i)}rotateX(t){this.vA.state.EA(t)}rotateY(t){this.vA.state.rA(t)}rotateZ(t){this.vA.state.nA(t)}push(){this.vA.state.J()}pop(){this.vA.state.sA()}rect(t,s,i=1,B=1){this.vA.ve(t,s,i,B)}point(t,s){this.vA.ve(t,s,1,1)}line(t,s,i,B){this.vA.ye(t,s,i,B)}lineWeight(t){this.vA.state.QA(t)}background(t,s=t,i=t,B=255){this.vA.Ye(t,s,i,B)}char(t){this.vA.state.gA(this.ws.us(t))}charColor(t,s,i){this.vA.state.oA(t,s,i)}cellColor(t,s,i){this.vA.state.aA(t,s,i)}flipX(t){this.vA.state.hA(t)}flipY(t){this.vA.state.cA(t)}charRotation(t){this.vA.state.lA(t)}invert(t){this.vA.state.CA(t)}clear(){this.vA.Ye(0,0,0,0)}ellipse(t,s,i,B){this.vA.be(t,s,i/2,B/2)}triangle(t,s,i,B,r,E){this.vA.$e(t,s,i,B,r,E)}bezierCurve(t,s,i,B,r,E,Q,g){this.vA.Ge(t,s,i,B,r,E,Q,g)}arc(t,s,i,B,r,E){this.vA.xe(t,s,i,B,r,E)}shader(t){this.vA.de(t)}setUniform(t,s){this.vA.VA(t,s)}setUniforms(t){this.vA._e(t)}createFilterShader(t){return this.vA.et(t)}createFramebuffer(t){return this.vA.Me(t.width,t.height,5,{filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte"})}image(t,s,i,B,r){this.vA.pe(t,s,i,B??t.width,r??t.height)}};class N{BB(t){const s=t.xA(0),i=t.xA(1),B=t.xA(2),r=t.xA(3);return{characterPixels:s,primaryColorPixels:i,secondaryColorPixels:B,transformPixels:t.xA(4),rotationPixels:r}}QB(t,s){return t[s]+(t[s+1]<<8)}EB(t,s){return{r:t[s],g:t[s+1],b:t[s+2],a:t[s+3]}}}class J{rB(t,s){return new Blob([t],{type:s})}nB(t,s,i){try{const B=this.rB(t,i),r=URL.createObjectURL(B),E=document.createElement("a");E.href=r,E.download=s,E.style.display="none",E.rel="noopener",document.body.appendChild(E),E.click(),document.body.removeChild(E),URL.revokeObjectURL(r)}catch(B){throw console.error("Failed to download file:",B),Error("File download failed: "+(B instanceof Error?B.message:"Unknown error"))}}gB(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}oB(){const t=new Date;return{date:t.toISOString().split("T")[0],time:t.toTimeString().split(" ")[0].replace(/:/g,"-")}}aB(t){return t.replace(/[<>:"/\\|?*]/g,"_").replace(/\s+/g,"_").replace(/_{2,}/g,"_").replace(/^_+|_+$/g,"").substring(0,255)}hB(){return"textmode-export-"+this.gB()}}class _A extends N{cB(t,s,i){const B=t[i]===255,r=t[i+1]===255,E=t[i+2]===255,Q=s[i],g=s[i+1];return{isInverted:B,flipHorizontal:r,flipVertical:E,rotation:Math.round(360*(Q+g/255)/255*100)/100}}CB(t,s,i){return{x:t,y:s,cellX:t*i.cellWidth,cellY:s*i.cellHeight}}lB(t,s){const i=[];let B=0;for(let r=0;r<s.rows;r++)for(let E=0;E<s.cols;E++){const Q=4*B,g=this.QB(t.characterPixels,Q);let a=this.EB(t.primaryColorPixels,Q),c=this.EB(t.secondaryColorPixels,Q);const h=this.cB(t.transformPixels,t.rotationPixels,Q);if(h.isInverted){const C=a;a=c,c=C}const l=this.CB(E,r,s);i.push({charIndex:g,primaryColor:a,secondaryColor:c,transform:h,position:l}),B++}return i}}class SA{DB(t,s){const i=t.cmap;for(const B of i.tables)if(B.format===4){const r=B;for(let E=0;E<r.startCount.length;E++)if(s>=r.startCount[E]&&s<=r.endCount[E]){if(r.idRangeOffset[E]===0)return s+r.idDelta[E]&65535;{const Q=r.idRangeOffset[E]/2+(s-r.startCount[E])-(r.startCount.length-E);if(Q>=0&&Q<r.glyphIdArray.length){const g=r.glyphIdArray[Q];if(g!==0)return g+r.idDelta[E]&65535}}}}else if(B.format===12){const r=B;for(let E=0;E<r.groups.length;E+=3){const Q=r.groups[E],g=r.groups[E+1],a=r.groups[E+2];if(s>=Q&&s<=g)return a+(s-Q)}}return 0}PB(t,s,i,B,r){const E=r/t.head.unitsPerEm;return{getBoundingBox:()=>({x1:i+s.xMin*E,y1:B+-s.yMax*E,x2:i+s.xMax*E,y2:B+-s.yMin*E}),toSVG:()=>this.uB(s,i,B,E)}}uB(t,s,i,B){if(!t||!t.xs)return"";const{xs:r,ys:E,endPts:Q,flags:g}=t;if(!(r&&E&&Q&&g))return"";let a="",c=0;for(let h=0;h<Q.length;h++){const l=Q[h];if(!(l<c)){if(l>=c){const C=s+r[c]*B,D=i-E[c]*B;a+=`M${C.toFixed(2)},${D.toFixed(2)}`;let u=c+1;for(;u<=l;)if(1&g[u]){const m=s+r[u]*B,p=i-E[u]*B;a+=`L${m.toFixed(2)},${p.toFixed(2)}`,u++}else{const m=s+r[u]*B,p=i-E[u]*B;let y=u+1>l?c:u+1;if(1&g[y]){const x=s+r[y]*B,_=i-E[y]*B;a+=`Q${m.toFixed(2)},${p.toFixed(2)} ${x.toFixed(2)},${_.toFixed(2)}`,u=y+1}else{const x=(m+(s+r[y]*B))/2,_=(p+(i-E[y]*B))/2;a+=`Q${m.toFixed(2)},${p.toFixed(2)} ${x.toFixed(2)},${_.toFixed(2)}`,u=y}}a+="Z"}c=l+1}}return a}IB(t,s,i,B,r){const E=t.codePointAt(0)||0,Q=this.DB(s,E);let g=null;return s.glyf&&s.glyf[Q]!==null?g=s.glyf[Q]:(g=v.T.glyf.Re(s,Q),s.glyf[Q]=g),this.PB(s,g,i,B,r)}wB(t,s,i,B,r,E,Q,g){const a=i+(r-g*(Q/s.head.unitsPerEm))/2,c=B+(E+.7*Q)/2;return this.IB(t,s,a,c,Q).toSVG()||null}}class LA{constructor(){o(this,"fB");this.fB=new SA}dB(t){const{width:s,height:i}=t;return`<?xml version="1.0" encoding="UTF-8"?><svg width="${s}" height="${i}" viewBox="0 0 ${s} ${i}" xmlns="http://www.w3.org/2000/svg"><title>textmode.js sketch</title>`}_B(){return"</g></svg>"}pB(t,s){if(!s.includeBackgroundRectangles)return"";const[i,B,r,E]=s.backgroundColor;return`<rect width="${t.width}" height="${t.height}" fill="rgba(${i},${B},${r},${E/255})"/>`}mB(t,s){const{transform:i,position:B}=t;if(!i.flipHorizontal&&!i.flipVertical&&!i.rotation)return"";const r=B.cellX+s.cellWidth/2,E=B.cellY+s.cellHeight/2,Q=[];if(i.flipHorizontal||i.flipVertical){const g=i.flipHorizontal?-1:1,a=i.flipVertical?-1:1;Q.push(`translate(${r} ${E})scale(${g} ${a})translate(${-r} ${-E})`)}return i.rotation&&Q.push(`rotate(${i.rotation} ${r} ${E})`),` transform="${Q.join(" ")}"`}vB(t,s,i){if(!i.includeBackgroundRectangles||t.secondaryColor.a===0)return"";const{position:B}=t,{r,g:E,b:Q,a:g}=t.secondaryColor,a=`rgba(${r},${E},${Q},${g/255})`;return i.drawMode==="stroke"?`<rect x="${B.cellX}" y="${B.cellY}" width="${s.cellWidth}" height="${s.cellHeight}" stroke="${a}" fill="none" stroke-width="${i.strokeWidth}"/>`:`<rect x="${B.cellX}" y="${B.cellY}" width="${s.cellWidth}" height="${s.cellHeight}" fill="${a}"/>`}IB(t,s,i,B){const r=i.characters[t.charIndex];if(!r)return"";const E=this.fB.wB(r.character,i.font,t.position.cellX,t.position.cellY,s.cellWidth,s.cellHeight,i.fontSize,r.advanceWidth);if(!E)return"";const{r:Q,g,b:a,a:c}=t.primaryColor,h=`rgba(${Q},${g},${a},${c/255})`;return B.drawMode==="stroke"?`<path d="${E}" stroke="${h}" stroke-width="${B.strokeWidth}" fill="none"/>`:`<path d="${E}" fill="${h}"/>`}yB(t,s,i,B){const r=[],E=this.vB(t,s,B);E&&r.push(E);const Q=this.IB(t,s,i,B);if(Q){const g=this.mB(t,s);r.push(g?`<g${g}>${Q}</g>`:Q)}return r.join("")}bB(t,s,i,B){const r=[this.dB(s),this.pB(s,B),'<g id="ascii-cells">'];for(const E of t)r.push(this.yB(E,s,i,B));return r.push(this._B()),r.join("")}$B(t){return t.replace(/<path[^>]*d=""[^>]*\/>/g,"").replace(/\s+/g," ").replace(/> </g,"><")}}class UA extends J{GB(t){return this.rB(t,"image/svg+xml;charset=utf-8")}MB(t,s){this.nB(t,this.aB(s)+".svg","image/svg+xml;charset=utf-8")}xB(t,s){this.MB(t,s||this.hB())}}class tA{constructor(){o(this,"YB");o(this,"FB");o(this,"RB");this.YB=new _A,this.FB=new LA,this.RB=new UA}SB(t){return{includeBackgroundRectangles:t.includeBackgroundRectangles??!0,drawMode:t.drawMode??"fill",strokeWidth:t.strokeWidth??1,backgroundColor:t.backgroundColor??[0,0,0,0],filename:t.filename||this.RB.hB()}}kB(t,s={}){const i=this.YB.lB(this.YB.BB(t.pipeline),t.grid),B=this.FB.bB(i,t.grid,t.font,this.SB(s));return this.FB.$B(B)}xB(t,s={}){this.RB.xB(this.kB(t,s),s.filename)}}class OA extends N{zB(t,s,i,B=" "){var Q;const r=[];let E=0;for(let g=0;g<s.rows;g++){const a=[];for(let c=0;c<s.cols;c++){const h=4*E,l=this.QB(t.characterPixels,h),C=((Q=i.characters[l])==null?void 0:Q.character)||B;a.push(C),E++}r.push(a)}return r}}class WA{OB(t,s){const i=[];for(const r of t){let E=r.join("");s.preserveTrailingSpaces||(E=E.replace(/\s+$/,"")),i.push(E)}const B=s.lineEnding==="crlf"?`\r
|
|
7
|
+
`}static o(t){if(t===null)return"null";if(t===void 0)return"undefined";if(typeof t=="string")return`"${t}"`;if(typeof t=="number"||typeof t=="boolean")return t+"";if(Array.isArray(t))return t.length===0?"[]":t.length<=5?`[${t.map(i=>R.o(i)).join(", ")}]`:`[${t.slice(0,3).map(i=>R.o(i)).join(", ")}, ... +${t.length-3} more]`;if(typeof t=="object"){const i=Object.keys(t);return i.length===0?"{}":i.length<=3?`{ ${i.map(r=>`${r}: ${R.o(t[r])}`).join(", ")} }`:`{ ${i.slice(0,2).map(r=>`${r}: ${R.o(t[r])}`).join(", ")}, ... +${i.length-2} more }`}return t+""}}var _=(c=>(c[c.SILENT=0]="SILENT",c[c.WARNING=1]="WARNING",c[c.ERROR=2]="ERROR",c[c.THROW=3]="THROW",c))(_||{});const O=class O{constructor(){l(this,"u",{globalLevel:3})}static m(){return O.l||(O.l=new O),O.l}_(t,i){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",n="color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";switch(this.u.globalLevel){case 0:return!1;case 1:return console.group(r,n),console.warn(R.i(t,i)),console.groupEnd(),!1;case 2:return console.group(r,n),console.error(R.i(t,i)),console.groupEnd(),!1;default:throw new R(t,i)}}v(t,i,r){return!!t||(this._(i,r),!1)}A(t){this.u.globalLevel=t}};l(O,"l",null);let J=O;const W=J.m(),rt=new WeakMap;function Y(c,t){rt.set(c,t)}function V(c){return rt.get(c)}class nt{constructor(){l(this,"C",1);l(this,"U",0);l(this,"$",0);l(this,"M",0);l(this,"F",[0,0,0]);l(this,"R",[1,1,1,1]);l(this,"P",[0,0,0,1]);l(this,"S",!1);l(this,"G",!1);l(this,"D",!1);l(this,"L",[0,0]);l(this,"k",[0,0,0,1]);l(this,"O",[])}H(){this.O.push({I:this.C,N:this.U,X:this.$,W:this.M,L:[...this.L],V:this.S,K:this.G,D:this.D,j:[...this.F],Y:[...this.R],q:[...this.P]})}Z(){const t=this.O.pop();t?(this.C=t.I,this.U=t.N,this.$=t.X,this.M=t.W,this.L=t.L,this.S=t.V,this.G=t.K,this.D=t.D,this.F=t.j,this.R=t.Y,this.P=t.q):console.warn("pop() called without matching push()")}J(t){t.I=this.C,t.N=this.U,t.X=this.$,t.W=this.M,t.j[0]=this.F[0],t.j[1]=this.F[1],t.j[2]=this.F[2],t.Y[0]=this.R[0],t.Y[1]=this.R[1],t.Y[2]=this.R[2],t.Y[3]=this.R[3],t.q[0]=this.P[0],t.q[1]=this.P[1],t.q[2]=this.P[2],t.q[3]=this.P[3],t.V=this.S,t.K=this.G,t.D=this.D,t.L[0]=this.L[0],t.L[1]=this.L[1]}get lineWeight(){return this.C}get canvasBackgroundColor(){return this.k}tt(t){this.C=Math.abs(t)}et(t){this.U=t}st(t){this.$=t}it(t){this.M=t}rt(t){this.F=t}nt(t,i,r,n=255){this.R=[t/255,i/255,r/255,n/255]}ot(t,i,r,n=255){this.P=[t/255,i/255,r/255,n/255]}ht(t){this.S=t}ct(t){this.G=t}lt(t){this.D=t}ut(t){const i=255*t/360,r=Math.floor(i)/255,n=Math.round(i-Math.floor(i));this.L=[r,n]}ft(t,i,r,n){this.k=[t/255,i/255,r/255,n/255]}}class j{constructor(t,i,r=i,n=1,o={},a=null,h=!1){l(this,"dt");l(this,"gt");l(this,"u");l(this,"_t",null);l(this,"vt");l(this,"yt");l(this,"At",[]);l(this,"wt");l(this,"Ct",null);l(this,"bt",[]);l(this,"xt",null);l(this,"$t",!1);l(this,"Mt",null);this.dt=i,this.gt=r,this.u={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",...o},this.vt=t,this.wt=Math.min(Math.max(1,n),8),this.xt=a,this.$t=!!h,this.Mt=this.$t?new nt:null;const u=t.getParameter(t.MAX_DRAW_BUFFERS),f=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.wt=Math.min(this.wt,u,f),this.yt=t.createFramebuffer(),this.Ft(),this.Rt(),this.bt=Array(this.wt).fill(null)}Ft(){const t=this.vt,i=this.u.filter==="linear"?t.LINEAR:t.NEAREST,r=this.u.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,n=this.u.type==="float"?t.FLOAT:t.UNSIGNED_BYTE;for(let o=0;o<this.wt;o++){const a=t.createTexture();t.bindTexture(t.TEXTURE_2D,a),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,r),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.dt,this.gt,0,t.RGBA,n,null),this.At.push(a)}t.bindTexture(t.TEXTURE_2D,null)}Rt(){const t=this.vt;if(t.bindFramebuffer(t.FRAMEBUFFER,this.yt),this.wt===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.At[0],0);else{const r=[];for(let n=0;n<this.wt;n++){const o=t.COLOR_ATTACHMENT0+n;t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,this.At[n],0),r.push(o)}t.drawBuffers(r)}const i=t.checkFramebufferStatus(t.FRAMEBUFFER);i!==t.FRAMEBUFFER_COMPLETE&&console.error("GLFramebuffer is not complete:",i),t.bindFramebuffer(t.FRAMEBUFFER,null)}zt(t){const i=this.vt;i.bindTexture(i.TEXTURE_2D,this.At[0]),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,1),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,t),i.bindTexture(i.TEXTURE_2D,null)}resize(t,i){this.dt=t,this.gt=i,this._t=null,this.bt=Array(this.wt).fill(null);const r=this.vt,n=this.u.type==="float"?r.FLOAT:r.UNSIGNED_BYTE;for(const o of this.At)r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,this.dt,this.gt,0,r.RGBA,n,null);r.bindTexture(r.TEXTURE_2D,null)}Pt(t){const i=this.vt,r=this.bt[t];if(r)return r;const n=this.dt,o=this.gt,a=new Uint8Array(n*o*4),h=i.getParameter(i.READ_FRAMEBUFFER_BINDING);i.bindFramebuffer(i.READ_FRAMEBUFFER,this.yt),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,n,o,i.RGBA,i.UNSIGNED_BYTE,a),i.bindFramebuffer(i.READ_FRAMEBUFFER,h);const u=4*n,f=new Uint8Array(a.length);for(let g=0;g<o;g++){const d=(o-1-g)*u,m=g*u;f.set(a.subarray(d,d+u),m)}return this.bt[t]=f,f}begin(){var i,r,n,o;const t=this.vt;if(this.xt){const a=((r=(i=this.xt).Tt)==null?void 0:r.call(i))??null;a&&this.xt.St(a),this.$t&&this.Mt&&((o=(n=this.xt).Et)==null||o.call(n,this.Mt))}this.Ct={framebuffer:t.getParameter(t.FRAMEBUFFER_BINDING),viewport:t.getParameter(t.VIEWPORT)},t.bindFramebuffer(t.FRAMEBUFFER,this.yt),this.bt=Array(this.wt).fill(null);for(let a=0;a<this.wt;a++)t.clearBufferfv(t.COLOR,a,new Float32Array([0,0,0,0]));t.viewport(0,0,this.dt,this.gt),Y(t,[0,0,this.dt,this.gt])}end(){var i,r,n,o;if(!this.Ct)return;const t=this.vt;if(this.xt){const a=((r=(i=this.xt).Tt)==null?void 0:r.call(i))??null;a&&this.xt.St(a)}t.bindFramebuffer(t.FRAMEBUFFER,this.Ct.framebuffer),t.viewport(...this.Ct.viewport),Y(t,this.Ct.viewport),this.Ct=null,this.xt&&this.$t&&this.Mt&&((o=(n=this.xt).Bt)==null||o.call(n))}Gt(){const t=this.vt;t.deleteFramebuffer(this.yt);for(const i of this.At)t.deleteTexture(i)}get width(){return this.dt}get height(){return this.gt}get textures(){return[...this.At]}}class N{constructor(t,i,r){l(this,"vt");l(this,"Dt");l(this,"Lt",new Map);l(this,"kt",new Map);l(this,"Ot",0);this.vt=t,this.Dt=this.Ht(i,r),this.It()}It(){const t=this.vt.getProgramParameter(this.Dt,this.vt.ACTIVE_UNIFORMS);for(let i=0;i<t;i++){const r=this.vt.getActiveUniform(this.Dt,i);if(r){const n=this.vt.getUniformLocation(this.Dt,r.name);if(n&&(this.Lt.set(r.name,n),this.kt.set(r.name,{type:r.type,size:r.size}),r.size>1)){const o=r.name.replace(/\[.*\]$/,"");this.Lt.has(o)||(this.Lt.set(o,n),this.kt.set(o,{type:r.type,size:r.size}))}}}}Ht(t,i){const r=this.Nt(this.vt.VERTEX_SHADER,t),n=this.Nt(this.vt.FRAGMENT_SHADER,i),o=this.vt.createProgram();if(this.vt.attachShader(o,r),this.vt.attachShader(o,n),this.vt.linkProgram(o),!this.vt.getProgramParameter(o,this.vt.LINK_STATUS)){const a=this.vt.getProgramInfoLog(o);throw Error("Shader program link error: "+a)}return this.vt.deleteShader(r),this.vt.deleteShader(n),o}Nt(t,i){const r=this.vt.createShader(t);if(this.vt.shaderSource(r,i),this.vt.compileShader(r),!this.vt.getShaderParameter(r,this.vt.COMPILE_STATUS)){const n=this.vt.getShaderInfoLog(r);throw this.vt.deleteShader(r),Error("Shader compilation error: "+n)}return r}Xt(){this.vt.useProgram(this.Dt),this.Wt()}Wt(){this.Ot=0}Vt(t){for(const[i,r]of Object.entries(t))this.Kt(i,r)}jt(t){return this.Lt.has(t)}Yt(t){return this.kt.get(t)||null}qt(){const t=[];for(const[i,r]of this.kt.entries())t.push({name:i,...r});return t}Kt(t,i){var u;const r=this.Lt.get(t);if(!r)return;const n=this.kt.get(t);if(!n)return void console.warn(`No type information found for uniform '${t}'`);const{type:o,size:a}=n,h=this.vt;if(typeof i=="number")switch(o){case h.INT:case h.BOOL:h.uniform1i(r,i);break;case h.FLOAT:h.uniform1f(r,i);break;default:console.warn(`Unexpected uniform type for scalar '${t}': ${o}`),h.uniform1f(r,i)}else if(typeof i=="boolean")h.uniform1i(r,i?1:0);else if(Array.isArray(i))if(Array.isArray(i[0])){const f=i,g=((u=f[0])==null?void 0:u.length)||0,d=f.flat();switch(o){case h.FLOAT_VEC2:g===2?h.uniform2fv(r,d):console.warn(`Vector length mismatch for '${t}': expected 2, got ${g}`);break;case h.FLOAT_VEC3:g===3?h.uniform3fv(r,d):console.warn(`Vector length mismatch for '${t}': expected 3, got ${g}`);break;case h.FLOAT_VEC4:g===4?h.uniform4fv(r,d):console.warn(`Vector length mismatch for '${t}': expected 4, got ${g}`);break;default:console.warn(`Unsupported uniform type for vector array '${t}': ${o}`)}}else switch(o){case h.FLOAT_VEC2:i.length===2?h.uniform2f(r,i[0],i[1]):console.warn(`Vector length mismatch for '${t}': expected 2, got ${i.length}`);break;case h.FLOAT_VEC3:i.length===3?h.uniform3f(r,i[0],i[1],i[2]):console.warn(`Vector length mismatch for '${t}': expected 3, got ${i.length}`);break;case h.FLOAT_VEC4:i.length===4?h.uniform4f(r,i[0],i[1],i[2],i[3]):console.warn(`Vector length mismatch for '${t}': expected 4, got ${i.length}`);break;case h.INT:a>1?h.uniform1iv(r,i):console.warn(`Array provided for scalar uniform '${t}'`);break;case h.FLOAT:a>1?h.uniform1fv(r,i):console.warn(`Array provided for scalar uniform '${t}'`);break;default:console.warn(`Unsupported uniform type for array '${t}': ${o}`)}else if(i instanceof WebGLTexture){const f=this.Zt();h.uniform1i(r,f),h.activeTexture(h.TEXTURE0+f),h.bindTexture(h.TEXTURE_2D,i)}else if(i instanceof j){const f=this.Zt();h.uniform1i(r,f),h.activeTexture(h.TEXTURE0+f),h.bindTexture(h.TEXTURE_2D,i.textures[0])}else console.warn(`Unsupported uniform type for '${t}':`,typeof i)}Zt(){return this.Ot++}get Qt(){return this.Dt}Gt(){this.vt.deleteProgram(this.Dt)}}const K=`#version 300 es
|
|
8
|
+
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float U9;uniform vec2 Uy;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 A(float B){float C=sin(B),D=cos(B);return mat3(1,0,0,0,D,-C,0,C,D);}mat3 E(float B){float C=sin(B),D=cos(B);return mat3(D,0,C,0,1,0,-C,0,D);}mat3 F(float B){float C=sin(B),D=cos(B);return mat3(D,-C,0,C,D,0,0,0,1);}vec2 G(float H,vec2 I,vec2 J,vec2 K,vec2 L){float M=1.-H,N=M*M,O=H*H;return N*M*I+3.*N*H*J+3.*M*O*K+O*H*L;}vec2 P(float H,vec2 I,vec2 J,vec2 K,vec2 L){float M=1.-H,N=M*M,O=H*H;return-3.*N*I+3.*N*J-6.*M*H*J+6.*M*H*K-3.*O*K+3.*O*L;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 Q;bool R=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool S=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(R){float H=a_position.x;vec2 T=G(H,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 U=P(H,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float V=length(U);U=V>0.?U/V:vec2(1,0);Q=T+vec2(-U.y,U.x)*a_position.y*a_instanceSize.y;}else if(S){float C=a_instanceArcAngles.x,W=a_instanceArcAngles.y;C=mod(C,6.28318530718);if(C<0.)C+=6.28318530718;W=mod(W,6.28318530718);if(W<0.)W+=6.28318530718;float X=C-W;if(X<=0.)X+=6.28318530718;float Y=C-a_position.x*X;vec2 Z=vec2(cos(Y),sin(Y))*a_position.y;Q=Z*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{Q=a_position*a_instanceSize+a_instancePosition;}vec2 a=(Q/Uy)*2.-1.;a.y=-a.y;if(length(a_instanceGlobalRotation)>0.){vec3 b=vec3(a-a_instanceRotationCenter,0);b.x*=U9;if(a_instanceGlobalRotation.x!=0.)b=A(-a_instanceGlobalRotation.x)*b;if(a_instanceGlobalRotation.y!=0.)b=E(-a_instanceGlobalRotation.y)*b;if(a_instanceGlobalRotation.z!=0.)b=F(-a_instanceGlobalRotation.z)*b;b.x/=U9;a=b.xy+a_instanceRotationCenter;}gl_Position=vec4(a,0,1);}`,ot="attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.,1.);}";class vt{constructor(t){l(this,"vt");l(this,"Jt");l(this,"te");l(this,"ee");l(this,"se");this.vt=t,this.te=new N(this.vt,K,`#version 300 es
|
|
9
|
+
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`),this.Jt=new N(this.vt,K,`#version 300 es
|
|
10
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Ue;uniform sampler2D Uf;uniform sampler2D Ug;uniform sampler2D Uh;uniform sampler2D Ui;uniform vec2 Uj;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*Uj;vec2 C=(floor(B)+0.5f)/Uj;vec4 D=texture(Ue,C);vec4 E=texture(Uf,C);if(E.a==0.){discard;}vec4 F=texture(Ug,C);vec4 G=texture(Uh,C);vec4 H=texture(Ui,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;o_rotation=G;o_transform=H;}`),this.ee=new N(this.vt,ot,"precision mediump float;uniform sampler2D U0;uniform vec2 U1;uniform sampler2D U3;uniform sampler2D U4;uniform sampler2D U5;uniform sampler2D U2;uniform sampler2D U6;uniform vec2 U7;uniform vec2 U8;mat2 A(float B){float C=sin(B);float D=cos(B);return mat2(D,-C,C,D);}void main(){vec2 E=gl_FragCoord.xy/U8;vec2 F=E*U7;vec2 G=floor(F);vec2 H=(G+0.5)/U7;vec4 I=texture2D(U3,H);vec4 J=texture2D(U4,H);vec4 K=texture2D(U5,H);bool L=K.r>0.5;bool M=K.g>0.5;bool N=K.b>0.5;vec4 O=texture2D(U2,H);int P=int(O.r*255.+0.5)+int(O.g*255.+0.5)*256;int Q=int(mod(float(P),U1.x));int R=P/int(U1.x);float S=(U1.y-1.)-float(R);vec2 T=vec2(float(Q),S)/U1;vec4 U=texture2D(U6,H);float V=U.r*255.+U.g;float W=-(V*360./255.)*0.017453292;vec2 X=fract(F)-0.5;if(M)X.x=-X.x;if(N)X.y=-X.y;X=A(W)*X+0.5;vec2 Y=1./U1;vec2 Z=T+X*Y;vec2 a=T+Y;if(any(lessThan(Z,T))||any(greaterThan(Z,a))){gl_FragColor=L?I:J;return;}vec4 b=texture2D(U0,Z);if(L)b.rgb=1.-b.rgb;gl_FragColor=mix(J,I,b);}"),this.se=new N(this.vt,K,`#version 300 es
|
|
11
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Uk;uniform bool Ul;uniform bool Um;uniform bool Un;uniform vec2 Uo;uniform bool Up;uniform vec3 Uq;uniform bool Ur;uniform vec3 Us;uniform vec4 Ut;uniform int Uu;uniform vec3 Uv[64];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;float A(vec3 B){return dot(B,vec3(0.299,0.587,0.114));}void main(){vec2 C=vec2(v_uv.x,1.-v_uv.y);vec4 D=texture(Uk,C);float E=A(D.rgb);if(Uu>0){float F=float(Uu);float G=clamp(E*(F-1.),0.,F-1.);int H=int(floor(G+0.5));vec3 I=Uv[H];o_character=vec4(I,1.);}else{o_character=vec4(E,0.,0.,1.);}vec3 J=D.rgb;vec3 K=Up?Uq:J;vec3 L=Ur?Us:J;float M=Up?1.:D.a;float N;if(D.a<0.01){K=Ut.rgb;L=Ut.rgb;M=Ut.a;N=Ut.a;}else{N=Ur?1.:D.a;}o_primaryColor=vec4(K,M);o_secondaryColor=vec4(L,N);o_rotation=vec4(Uo.xy,0.,1.);o_transform=vec4(float(Ul),float(Um),float(Un),1.);}`)}ie(){return this.Jt}Tt(){return this.te}re(){return this.ee}ne(){return this.se}oe(t){return new N(this.vt,K,t)}ae(t,i){return new N(this.vt,t,i)}Gt(){this.Jt.Gt(),this.te.Gt(),this.ee.Gt(),this.se.Gt()}}var b=(c=>(c.RECTANGLE="rectangle",c.LINE="line",c.ELLIPSE="ellipse",c.ARC="arc",c.TRIANGLE="triangle",c.BEZIER_CURVE="bezier_curve",c.CUSTOM="custom",c))(b||{});class At{constructor(t){l(this,"vt");l(this,"he",new Map);this.vt=t}ce(t,i,r,n){const o=this.vt;let a=this.he.get(t);a||(a=new Map,this.he.set(t,a));let h=a.get(i)||null;if(!h){h=o.createVertexArray(),a.set(i,h),o.bindVertexArray(h),o.bindBuffer(o.ARRAY_BUFFER,n);const u=o.getAttribLocation(t,"a_position");u!==-1&&(o.enableVertexAttribArray(u),o.vertexAttribPointer(u,r.ue.le.size,o.FLOAT,!1,r.fe,r.ue.le.offset),o.vertexAttribDivisor(u,0));const f=o.getAttribLocation(t,"a_texCoord");f!==-1&&(o.enableVertexAttribArray(f),o.vertexAttribPointer(f,r.ue.de.size,o.FLOAT,!1,r.fe,r.ue.de.offset),o.vertexAttribDivisor(f,0))}o.bindVertexArray(h)}pe(){this.vt.bindVertexArray(null)}Gt(){for(const[,t]of this.he)for(const[,i]of t)i&&this.vt.deleteVertexArray(i)}}class xt{constructor(t,i){l(this,"me");l(this,"vt");l(this,"xt");l(this,"ge",null);l(this,"_e",null);this.vt=t,this.me=new At(t),this.xt=i}ve(t,i,r){const{shader:n}=t,o=V(this.vt)||this.vt.getParameter(this.vt.VIEWPORT);n.Vt({U9:o[2]/o[3],Uy:[o[2],o[3]]});const a=f=>{if(!f||!f.ye())return;const g=f.unitGeometry,d=f.unitBuffer;try{this.me.ce(n.Qt,f.type+"",g,d),f.batch.Ae(n),f.batch.we(g.Ce,g.be)}finally{f.batch.xe(n),this.me.pe(),f.$e()}};let h=null,u=null;for(const f of i){if(f.type===b.CUSTOM){u&&(a(u),h=null,u=null),this.Me(t,f.params,f.state,r.get(b.RECTANGLE));continue}h!==null&&f.type!==h&&(a(u),h=null,u=null);let g=u;g&&f.type===h||(g=r.get(f.type)||null,u=g,h=f.type),g&&g.Fe(f.params,f.state)}a(u)}Me(t,i,r,n){const{x:o,y:a,width:h,height:u,shader:f,uniforms:g}=i,d=this.Re(Math.max(1,Math.floor(h)),Math.max(1,Math.floor(u)));d.begin(),this.ze(n,f,g,0,0,d.width,d.height,{}),d.end();const m=this.Pe(),x={Ue:d.textures[0],Uf:d.textures[1],Ug:d.textures[2],Uh:d.textures[3],Ui:d.textures[4],Uj:[d.width,d.height]};this.ze(n,m,x,Math.floor(o),Math.floor(a),Math.max(1,Math.floor(h)),Math.max(1,Math.floor(u)),r),t.shader.Xt()}ze(t,i,r,n,o,a,h,u){i.Xt(),i.Vt(r);const f=this.vt.getParameter(this.vt.VIEWPORT);if(i.Vt({U9:f[2]/f[3],Uy:[f[2],f[3]]}),t.$e(),t.Fe({x:n,y:o,width:a,height:h},u),t.ye()){const g=t.unitGeometry,d=t.unitBuffer;try{this.me.ce(i.Qt,t.type+"",g,d),t.batch.Ae(i),t.batch.we(g.Ce,g.be)}finally{t.batch.xe(i),this.me.pe(),t.$e()}}}Pe(){return this.xt.ie()}Re(t,i){return this.ge&&this._e&&this._e.w===t&&this._e.h===i||(this.ge&&this.ge.Gt(),this.ge=new j(this.vt,t,i,5),this._e={w:t,h:i}),this.ge}Gt(){this.me.Gt(),this.ge&&this.ge.Gt()}}class yt{constructor(){l(this,"Te",[]);l(this,"Se",1);l(this,"Ee",0)}Be(t){if(this.Ee>=this.Te.length){const r={id:this.Se++,type:t,params:{},state:{I:1,N:0,X:0,W:0,j:[0,0,0],Y:[1,1,1,1],q:[0,0,0,1],V:!1,K:!1,D:!1,L:[0,0]}};this.Te.push(r)}const i=this.Te[this.Ee];return i.id=this.Se++,i.type=t,this.Ee++,i}Ge(t,i,r,n,o){const a=this.Be(b.RECTANGLE);return a.params.x=t,a.params.y=i,a.params.width=r,a.params.height=n,o.J(a.state),a.id}De(t,i,r,n,o,a,h){const u=this.Be(b.CUSTOM);return u.params.x=t,u.params.y=i,u.params.width=r,u.params.height=n,u.params.shader=o,u.params.uniforms=a,h.J(u.state),u.id}Le(t,i,r,n,o,a){const h=this.Be(b.LINE);return h.params.x1=t,h.params.y1=i,h.params.x2=r,h.params.y2=n,h.params.thickness=o,a.J(h.state),h.id}ke(t,i,r,n,o){const a=this.Be(b.ELLIPSE);return a.params.x=t,a.params.y=i,a.params.width=r,a.params.height=n,o.J(a.state),a.id}Oe(t,i,r,n,o,a,h){const u=this.Be(b.ARC);return u.params.x=t,u.params.y=i,u.params.width=r,u.params.height=n,u.params.start=o,u.params.stop=a,h.J(u.state),u.id}He(t,i,r,n,o,a,h){const u=this.Be(b.TRIANGLE);return u.params.x1=t,u.params.y1=i,u.params.x2=r,u.params.y2=n,u.params.x3=o,u.params.y3=a,h.J(u.state),u.id}Ie(t,i,r,n,o,a,h,u,f,g){const d=this.Be(b.BEZIER_CURVE);return d.params.x1=t,d.params.y1=i,d.params.cp1x=r,d.params.cp1y=n,d.params.cp2x=o,d.params.cp2y=a,d.params.x2=h,d.params.y2=u,d.params.thickness=f,g.J(d.state),d.id}get length(){return this.Ee}get isEmpty(){return this.Ee===0}Ne(){this.Ee=0}[Symbol.iterator](){let t=0;const i=this.Ee,r=this.Te;return{next:()=>t<i?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}const D=class D{static Xe(t,i,r=0){var a,h,u,f,g,d,m,x,A,p;const n=i||new Float32Array(D.FLOATS_PER_INSTANCE);let o=r;return n[o++]=t.le[0],n[o++]=t.le[1],n[o++]=t.Ee[0],n[o++]=t.Ee[1],n[o++]=t.j[0],n[o++]=t.j[1],n[o++]=t.j[2],n[o++]=t.Y[0],n[o++]=t.Y[1],n[o++]=t.Y[2],n[o++]=t.Y[3],n[o++]=t.q[0],n[o++]=t.q[1],n[o++]=t.q[2],n[o++]=t.q[3],n[o++]=t.L[0],n[o++]=t.L[1],n[o++]=t.We[0],n[o++]=t.We[1],n[o++]=t.We[2],n[o++]=t.N,n[o++]=t.X,n[o++]=t.W,n[o++]=t.Ve[0],n[o++]=t.Ve[1],n[o++]=((a=t.Ke)==null?void 0:a[0])||0,n[o++]=((h=t.Ke)==null?void 0:h[1])||0,n[o++]=((u=t.je)==null?void 0:u[0])||0,n[o++]=((f=t.je)==null?void 0:f[1])||0,n[o++]=((g=t.Ye)==null?void 0:g[0])||0,n[o++]=((d=t.Ye)==null?void 0:d[1])||0,n[o++]=((m=t.qe)==null?void 0:m[0])||0,n[o++]=((x=t.qe)==null?void 0:x[1])||0,n[o++]=((A=t.Ze)==null?void 0:A[0])||0,n[o++]=((p=t.Ze)==null?void 0:p[1])||0,n}static Qe(t){const i=t.length*D.FLOATS_PER_INSTANCE,r=new Float32Array(i);for(let n=0;n<t.length;n++){const o=n*D.FLOATS_PER_INSTANCE;D.Xe(t[n],r,o)}return r}};l(D,"BYTES_PER_INSTANCE",140),l(D,"FLOATS_PER_INSTANCE",35);let I=D;const U=class U{};l(U,"STRIDE",I.BYTES_PER_INSTANCE),l(U,"ATTRIBUTES",{a_instancePosition:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:0,divisor:1},a_instanceSize:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:8,divisor:1},a_instanceCharacter:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:16,divisor:1},a_instancePrimaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:28,divisor:1},a_instanceSecondaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:44,divisor:1},a_instanceRotation:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:60,divisor:1},a_instanceTransform:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:68,divisor:1},a_instanceGlobalRotation:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:80,divisor:1},a_instanceRotationCenter:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:92,divisor:1},a_instanceArcAngles:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:100,divisor:1},a_instanceBezierCP1:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:108,divisor:1},a_instanceBezierCP2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:116,divisor:1},a_instanceBezierStart:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:124,divisor:1},a_instanceBezierEnd:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:132,divisor:1}});let q=U;class Et{constructor(t,i=1e3,r=1.5){l(this,"vt");l(this,"Je",[]);l(this,"ts");l(this,"es");l(this,"ss",null);l(this,"rs",!0);l(this,"ns",0);l(this,"hs",new Map);l(this,"cs",null);this.vt=t,this.ts=i,this.es=r,this.ls()}Fe(t){const i=this.Je.length;return this.Je.push(t),this.rs=!0,i}get count(){return this.Je.length}get isEmpty(){return this.Je.length===0}clear(){this.Je.length=0,this.rs=!0}us(t){if(t<=this.ts)return;const i=Math.ceil(t*this.es);this.ts=i,this.ls()}ls(){const t=this.vt;this.ss&&t.deleteBuffer(this.ss),this.ss=t.createBuffer();const i=this.ts*I.BYTES_PER_INSTANCE;t.bindBuffer(t.ARRAY_BUFFER,this.ss),t.bufferData(t.ARRAY_BUFFER,i,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.rs=!0,this.ns=0}fs(){if(!this.rs||this.Je.length===0)return;const t=this.vt,i=this.Je.length;this.us(i),(!this.cs||this.cs.length<i*I.FLOATS_PER_INSTANCE)&&(this.cs=new Float32Array(i*I.FLOATS_PER_INSTANCE));const r=I.Qe(this.Je);t.bindBuffer(t.ARRAY_BUFFER,this.ss),i<=this.ns?t.bufferSubData(t.ARRAY_BUFFER,0,r):t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.rs=!1,this.ns=i}ds(t){let i=this.hs.get(t);if(!i){i=new Map;const r=this.vt;for(const n in q.ATTRIBUTES){const o=r.getAttribLocation(t,n);o!==-1&&i.set(n,o)}this.hs.set(t,i)}return i}Ae(t){if(!this.ss||this.Je.length===0)return;const i=this.vt,r=t.Qt;this.fs();const n=this.ds(r);i.bindBuffer(i.ARRAY_BUFFER,this.ss);for(const[o,a]of n){const h=q.ATTRIBUTES[o];h&&(i.enableVertexAttribArray(a),i.vertexAttribPointer(a,h.size,h.type,h.normalized,h.stride,h.offset),i.vertexAttribDivisor(a,h.divisor))}}xe(t){const i=this.vt,r=this.ds(t.Qt);for(const[,n]of r)i.disableVertexAttribArray(n),i.vertexAttribDivisor(n,0)}we(t,i){this.Je.length!==0&&this.vt.drawArraysInstanced(t,0,i,this.Je.length)}Gt(){this.ss&&this.vt.deleteBuffer(this.ss)}}class z{constructor(t,i,r,n){l(this,"vt");l(this,"ps");l(this,"gs");l(this,"_s");l(this,"vs",null);this.vt=t,this.ps=i,this.gs=r,this._s=n;const o=this.vt.createBuffer();if(!o)throw Error("Failed to create unit geometry buffer");this.vt.bindBuffer(this.vt.ARRAY_BUFFER,o),this.vt.bufferData(this.vt.ARRAY_BUFFER,this._s.As,this.vt.STATIC_DRAW),this.vt.bindBuffer(this.vt.ARRAY_BUFFER,null),this.vs=o}get type(){return this.gs}get unitGeometry(){return this._s}get unitBuffer(){return this.vs}get batch(){return this.ps}$e(){this.ps.clear()}ye(){return!this.ps.isEmpty}Gt(){this.ps.Gt(),this.vt.deleteBuffer(this.vs)}ws(t,i,r,n,o){const a=this.Cs(t,i,r,n,o.N||0,o.X||0,o.W||0);return{le:[t,i],Ee:[r,n],j:o.j||[0,0,0],Y:o.Y||[1,1,1,1],q:o.q||[0,0,0,1],L:o.L||[0,0],We:[o.D?1:0,o.V?1:0,o.K?1:0],N:a.radiansX,X:a.radiansY,W:a.radiansZ,Ve:[a.centerX,a.centerY]}}bs(t,i){const r=V(this.vt)||[0,0,this.vt.canvas.width,this.vt.canvas.height];return{nx:t/r[2]*2-1,ny:1-i/r[3]*2}}$s(t,i,r){const n=this.bs(i,r);t.Ve=[n.nx,n.ny]}Cs(t,i,r,n,o,a,h){const u=V(this.vt)||[0,0,this.vt.canvas.width,this.vt.canvas.height],f=u[2],g=u[3];return{centerX:(t+r/2)/f*2-1,centerY:1-(i+n/2)/g*2,radiansX:-o*Math.PI/180,radiansY:-a*Math.PI/180,radiansZ:-h*Math.PI/180,aspectRatio:f/g}}}const wt={As:new Float32Array([0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,1]),be:6,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class bt extends z{constructor(t,i){super(t,i,b.RECTANGLE,wt)}Fe(t,i){const r=this.ws(t.x,t.y,t.width,t.height,i);return this.ps.Fe(r)}}const Rt={As:new Float32Array([0,-.5,0,0,1,-.5,1,0,0,.5,0,1,0,.5,0,1,1,-.5,1,0,1,.5,1,1]),be:6,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Tt extends z{constructor(t,i){super(t,i,b.LINE,Rt)}Fe(t,i){const r=t.x2-t.x1,n=t.y2-t.y1,o=Math.hypot(r,n),a=t.thickness||i.I||1,h=t.x1+r/2,u=t.y1+n/2,f=h-o/2,g=u,d=this.ws(f,g,o,a,i);return this.$s(d,h,u),this.ps.Fe(d)}}const Ct={As:function(c=32){const t=[],i=2*Math.PI/c;for(let r=0;r<c;r++){const n=r*i,o=(r+1)%c*i,a=Math.cos(n),h=Math.sin(n),u=.5*(a+1),f=.5*(h+1),g=Math.cos(o),d=Math.sin(o),m=.5*(g+1),x=.5*(d+1);t.push(0,0,.5,.5,a,h,u,f,g,d,m,x)}return new Float32Array(t)}(32),be:96,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Ut extends z{constructor(t,i){super(t,i,b.ELLIPSE,Ct)}Fe(t,i){const r=this.ws(t.x,t.y,t.width,t.height,i);return this.$s(r,t.x,t.y),this.ps.Fe(r)}}let Ft={As:function(c){const t=[];for(let i=0;i<c;i++){const r=i/c,n=(i+1)/c;t.push(r,0,r,0,r,1,r,1,n,1,n,1)}return new Float32Array(t)}(32),be:96,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class St extends z{constructor(t,i){super(t,i,b.ARC,Ft)}Fe(t,i){const r=t.x-t.width/2,n=t.y-t.height/2,o=t.start*Math.PI/180,a=t.stop*Math.PI/180,h=this.ws(r,n,t.width,t.height,i);return this.$s(h,t.x,t.y),h.Ke=[o,a],this.ps.Fe(h)}}const Bt={As:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),be:3,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Pt extends z{constructor(t,i){super(t,i,b.TRIANGLE,Bt)}Fe(t,i){const r=Math.min(t.x1,t.x2,t.x3),n=Math.max(t.x1,t.x2,t.x3),o=Math.min(t.y1,t.y2,t.y3),a=n-r,h=Math.max(t.y1,t.y2,t.y3)-o,u=this.ws(r,o,a,h,i),f=r+.5*a,g=o+h*(1/3);return this.$s(u,f,g),this.ps.Fe(u)}}function at(c,t,i,r,n){const o=1-c,a=o*o,h=c*c;return a*o*t+3*a*c*i+3*o*h*r+h*c*n}const Lt={As:function(c=16){const t=[];for(let i=0;i<c;i++){const r=i/c,n=(i+1)/c;t.push(r,-.5,r,0),t.push(n,-.5,n,0),t.push(r,.5,r,1),t.push(r,.5,r,1),t.push(n,-.5,n,0),t.push(n,.5,n,1)}return new Float32Array(t)}(16),be:96,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Mt extends z{constructor(t,i){super(t,i,b.BEZIER_CURVE,Lt)}Fe(t,i){const r=i.I||1,n=at(.5,t.x1,t.cp1x,t.cp2x,t.x2),o=at(.5,t.y1,t.cp1y,t.cp2y,t.y2),a=this.ws(0,0,1,r,i);return this.$s(a,n,o),a.qe=[t.x1,t.y1],a.je=[t.cp1x,t.cp1y],a.Ye=[t.cp2x,t.cp2y],a.Ze=[t.x2,t.y2],this.ps.Fe(a)}}class Dt{constructor(t){l(this,"vt");l(this,"Ms",null);l(this,"Fs");l(this,"Rs",null);l(this,"zs",{});l(this,"Ps",null);l(this,"Ts",new Map);l(this,"Ss");l(this,"Es");l(this,"Bs");l(this,"O",[]);this.vt=t,this.Fs=new vt(t),this.Bs=new nt,this.Ss=new xt(t,this),this.Es=new yt,this.Ps=t.createBuffer(),Y(this.vt,[0,0,this.vt.canvas.width,this.vt.canvas.height])}Gs(t){let i=this.Ts.get(t);if(i)return i;const r=new Et(this.vt);return i=(0,{[b.RECTANGLE]:()=>new bt(this.vt,r),[b.LINE]:()=>new Tt(this.vt,r),[b.ELLIPSE]:()=>new Ut(this.vt,r),[b.ARC]:()=>new St(this.vt,r),[b.TRIANGLE]:()=>new Pt(this.vt,r),[b.BEZIER_CURVE]:()=>new Mt(this.vt,r)}[t])(),this.Ts.set(t,i),i}Ds(t){this.Ms!==t&&(this.Ms=t,t.Xt())}ae(t,i){return this.Fs.ae(t,i)}ie(){return this.Fs.ie()}Tt(){return this.Fs.Tt()}re(){return this.Fs.re()}ne(){return this.Fs.ne()}Ls(t){this.Rs=t,t&&(this.zs={})}Kt(t,i){this.zs[t]=i}ks(t){Object.assign(this.zs,t)}oe(t){return this.Fs.oe(t)}Os(t,i,r,n,o){const a=this.ie(),h={Ue:t.textures[0],Uf:t.textures[1],Ug:t.textures[2],Uh:t.textures[3],Ui:t.textures[4],Uj:[t.width,t.height]};this.Es.De(i,r,n,o,a,h,this.Bs)}Hs(t,i,r,n,o){const a=this.ne(),h=t.texture,u=t.flags,f=t.charRotationRG,g=[f[0],f[1]],d=t.colorUniforms??{charColorFixed:!1,Y:[1,1,1],cellColorFixed:!1,cellColor:[0,0,0],backgroundColor:[0,0,0,1]},m=t.characterListUniforms,x={Uk:h,Ul:!!u.invert,Um:!!u.flipX,Un:!!u.flipY,Uo:g,Up:!!d.charColorFixed,Uq:d.Y,Ur:!!d.cellColorFixed,Us:d.cellColor,Ut:d.backgroundColor,Uu:m.count,Uv:m.list};this.Es.De(i,r,n,o,a,x,this.Bs)}Is(t,i,r,n){var p;const o=this.vt,a=o.canvas.width,h=o.canvas.height,u=t/a*2-1,f=(t+r)/a*2-1,g=1-i/h*2,d=1-(i+n)/h*2,m=new Float32Array([u,d,f,d,u,g,f,d,f,g,u,g]);o.bindBuffer(o.ARRAY_BUFFER,this.Ps),o.bufferData(o.ARRAY_BUFFER,m,o.DYNAMIC_DRAW);const x=((p=this.Ms)==null?void 0:p.Qt)||o.getParameter(o.CURRENT_PROGRAM),A=x?o.getAttribLocation(x,"a_position"):-1;A!==-1&&(o.enableVertexAttribArray(A),o.vertexAttribPointer(A,2,o.FLOAT,!1,8,0)),o.drawArrays(o.TRIANGLES,0,6),A!==-1&&o.disableVertexAttribArray(A)}Ns(t,i,r,n){this.Rs?(this.Es.De(t,i,r,n,this.Rs,{...this.zs},this.Bs),this.Rs=null,this.zs={}):this.Es.Ge(t,i,r,n,this.Bs)}Xs(t,i,r,n){this.Es.Le(t,i,r,n,this.Bs.lineWeight,this.Bs)}Ws(t,i,r,n){this.Es.ke(t,i,r,n,this.Bs)}Vs(t,i,r,n,o,a){this.Es.He(t,i,r,n,o,a,this.Bs)}Ks(t,i,r,n,o,a,h,u){const f=this.Bs.lineWeight;this.Es.Ie(t,i,r,n,o,a,h,u,f,this.Bs)}js(t,i,r=1,n={}){return new j(this.vt,t,i,r,n,this,!0)}Ys(t,i,r,n,o,a){this.Es.Oe(t,i,r,n,o,a,this.Bs)}qs(t,i=t,r=t,n=255){this.state.ft(t,i,r,n),this.Ne(t/255,i/255,r/255,n/255)}Ne(t=0,i=0,r=0,n=0){this.vt.clearColor(t,i,r,n),this.vt.clear(this.vt.COLOR_BUFFER_BIT)}Zs(){this.vt.viewport(0,0,this.vt.canvas.width,this.vt.canvas.height),Y(this.vt,[0,0,this.vt.canvas.width,this.vt.canvas.height])}get context(){return this.vt}get state(){return this.Bs}Et(t){this.O.push(this.Bs),this.Bs=t}Bt(){const t=this.O.pop();t&&(this.Bs=t)}St(t){const i=t,r=V(this.vt)??this.vt.getParameter(this.vt.VIEWPORT),n={shader:i,gl:this.vt,viewport:r};this.Ds(i);const o=new Set;for(const a of this.Es)a.type===b.CUSTOM?o.add(b.RECTANGLE):o.add(a.type);for(const a of o)a!==b.CUSTOM&&this.Gs(a);this.Ss.ve(n,this.Es,this.Ts),this.Es.Ne()}Gt(){this.vt.deleteBuffer(this.Ps),this.Es.Ne();for(const t of this.Ts.values())t.Gt();this.Fs.Gt(),this.Ss.Gt()}}const T={readShort:(c,t)=>(T.t.uint16[0]=c[t]<<8|c[t+1],T.t.int16[0]),readUshort:(c,t)=>c[t]<<8|c[t+1],readUshorts(c,t,i){const r=[];for(let n=0;n<i;n++)r.push(T.readUshort(c,t+2*n));return r},readUint(c,t){const i=T.t.uint8;return i[3]=c[t],i[2]=c[t+1],i[1]=c[t+2],i[0]=c[t+3],T.t.uint32[0]},readASCII(c,t,i){let r="";for(let n=0;n<i;n++)r+=String.fromCharCode(c[t+n]);return r},writeUshort(c,t,i){c[t]=i>>>8&255,c[t+1]=255&i},writeUint(c,t,i){c[t]=i>>>24&255,c[t+1]=i>>>16&255,c[t+2]=i>>>8&255,c[t+3]=255&i},writeASCII(c,t,i){for(let r=0;r<i.length;r++)c[t+r]=255&i.charCodeAt(r)},t:(()=>{const c=new ArrayBuffer(8);return{uint8:new Uint8Array(c),int16:new Int16Array(c),uint16:new Uint16Array(c),uint32:new Uint32Array(c)}})()};function Z(c){return c+3&-4}function Q(c,t,i){const r=t+i;let n=0;const o=T.t;for(let a=t;a<r;a+=4)o.uint8[3]=c[a]||0,o.uint8[2]=c[a+1]||0,o.uint8[1]=c[a+2]||0,o.uint8[0]=c[a+3]||0,n=n+(o.uint32[0]>>>0)>>>0;return n>>>0}class _t{constructor(t){l(this,"b");l(this,"p",0);l(this,"bitbuf",0);l(this,"bitcnt",0);this.b=t}readBits(t){for(;this.bitcnt<t;){const r=this.b[this.p++]||0;this.bitbuf|=r<<this.bitcnt,this.bitcnt+=8}const i=this.bitbuf&(1<<t)-1;return this.bitbuf>>>=t,this.bitcnt-=t,i}alignToByte(){this.bitbuf=0,this.bitcnt=0}get offset(){return this.p}}function H(c){let t=32,i=0;for(const h of c)h&&(h<t&&(t=h),h>i&&(i=h));if(i===0)return{min:0,max:0,table:new Map};const r=new Uint32Array(i+1);for(const h of c)h&&r[h]++;const n=new Uint32Array(i+1);let o=0;r[0]=0;for(let h=1;h<=i;h++)o=o+r[h-1]<<1,n[h]=o;const a=new Map;for(let h=0;h<c.length;h++){const u=c[h];if(!u)continue;const f=n[u]++;let g=a.get(u);g||(g=[],a.set(u,g)),g[It(f,u)]=h}return{min:t,max:i,table:a}}function tt(c,t){let i=0;for(let r=1;r<=t.max;r++){i|=c.readBits(1)<<r-1;const n=t.table.get(r);if(n&&i<n.length){const o=n[i];if(o!==void 0)return o}}throw Error("Invalid Huffman code")}function It(c,t){let i=0;for(let r=0;r<t;r++)i=i<<1|1&c,c>>>=1;return i>>>0}function Ot(c){if(c.length<2)throw Error("ZLIB data too short");const t=c[0],i=c[1];if((15&t)!=8)throw Error("Unsupported ZLIB compression method");if(((t<<8)+i)%31!=0)throw Error("Bad ZLIB header check");let r=2;32&i&&(r+=4);const n=[];return function(o,a){const h=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],u=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],f=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],g=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];let d=0;for(;!d;){d=o.readBits(1);const m=o.readBits(2);if(m===0){o.alignToByte();const x=o.readBits(16);if((65535&(65535^x))!==o.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let A=0;A<x;A++)a.push(o.readBits(8))}else{if(m!==1&&m!==2)throw Error("Unsupported DEFLATE type");{let x,A;if(m===1){const p=Array(288).fill(0);for(let y=0;y<=143;y++)p[y]=8;for(let y=144;y<=255;y++)p[y]=9;for(let y=256;y<=279;y++)p[y]=7;for(let y=280;y<=287;y++)p[y]=8;x=H(p),A=H(Array(32).fill(5))}else{const p=o.readBits(5)+257,y=o.readBits(5)+1,v=o.readBits(4)+4,w=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],E=Array(19).fill(0);for(let P=0;P<v;P++)E[w[P]]=o.readBits(3);const B=H(E),F=[];for(;F.length<p+y;){const P=tt(o,B);if(P<=15)F.push(P);else if(P===16){const k=o.readBits(2)+3,G=F[F.length-1]||0;for(let mt=0;mt<k;mt++)F.push(G)}else if(P===17){const k=o.readBits(3)+3;for(let G=0;G<k;G++)F.push(0)}else{if(P!==18)throw Error("Invalid code length symbol");{const k=o.readBits(7)+11;for(let G=0;G<k;G++)F.push(0)}}}const S=F.slice(0,p),L=F.slice(p,p+y);x=H(S),A=H(L)}for(;;){const p=tt(o,x);if(p<256)a.push(p);else{if(p===256)break;if(p>256&&p<286){const y=p-257;let v=h[y];const w=u[y];w&&(v+=o.readBits(w));const E=tt(o,A);if(E>=30)throw Error("Invalid distance symbol");let B=f[E];const F=g[E];F&&(B+=o.readBits(F));const S=a.length-B;if(S<0)throw Error("Invalid distance");for(let L=0;L<v;L++)a.push(a[S+L]||0)}else if(p===286||p===287)throw Error("Reserved length symbol")}}}}}}(new _t(c.subarray(r)),n),new Uint8Array(n)}function Gt(c){const t=T,i=new Uint8Array(c);if(t.readASCII(i,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(i,4),n=t.readUshort(i,12),o=t.readUint(i,16),a=[];let h=44;for(let v=0;v<n;v++){const w=t.readASCII(i,h,4),E=t.readUint(i,h+4),B=t.readUint(i,h+8),F=t.readUint(i,h+12),S=t.readUint(i,h+16);a.push({tag:w,offset:E,compLength:B,origLength:F,checksum:S}),h+=20}for(const v of a){const w=new Uint8Array(i.buffer,v.offset,v.compLength);if(v.compLength===v.origLength)v.data=new Uint8Array(w);else if(v.data=Ot(w),v.data.length!==v.origLength)if(v.data.length<v.origLength){const E=new Uint8Array(v.origLength);E.set(v.data),v.data=E}else v.data=v.data.subarray(0,v.origLength)}const u=n;let f=1,g=0;for(;f<<1<=u;)f<<=1,g++;const d=16*f,m=16*u-d;let x=12+16*u;const A={};for(const v of a)A[v.tag]=x,x=Z(x+v.data.length);const p=new Uint8Array(Math.max(o||0,x));t.writeUint(p,0,r),t.writeUshort(p,4,u),t.writeUshort(p,6,d),t.writeUshort(p,8,g),t.writeUshort(p,10,m);let y=12;for(const v of a){t.writeASCII(p,y,v.tag),y+=4;let w=v.data;if(v.tag==="head"&&w.length>=12){const E=new Uint8Array(w);t.writeUint(E,8,0);const B=Q(E,0,Z(E.length));t.writeUint(p,y,B),y+=4}else{const E=Q(w,0,Z(w.length));t.writeUint(p,y,E),y+=4}t.writeUint(p,y,A[v.tag]),y+=4,t.writeUint(p,y,v.data.length),y+=4}for(const v of a){const w=A[v.tag];p.set(v.data,w)}if(a.find(v=>v.tag==="head")){const v=A.head,w=function(E,B){const F=T,S=B+8,L=[E[S],E[S+1],E[S+2],E[S+3]];F.writeUint(E,S,0);const P=2981146554-(Q(E,0,Z(E.length))>>>0)>>>0;return E[S]=L[0],E[S+1]=L[1],E[S+2]=L[2],E[S+3]=L[3],P>>>0}(p,v);t.writeUint(p,v+8,w)}return p.buffer}const Nt={parseTab(c,t,i){const r={tables:[],ids:{},off:t};c=new Uint8Array(c.buffer,t,i),t=0;const n=T,o=n.readUshort,a=o(c,t+=2);t+=2;const h=[];for(let u=0;u<a;u++){const f=o(c,t),g=o(c,t+=2);t+=2;const d=n.readUint(c,t);t+=4;const m=`p${f}e${g}`;let x=h.indexOf(d);if(x===-1){let A;x=r.tables.length,h.push(d);const p=o(c,d);A=p===4?this.parse4(c,d):p===12?this.parse12(c,d):{format:p},r.tables.push(A)}r.ids[m]=x}return r},parse4(c,t){const i=T,r=i.readUshort,n=i.readUshorts,o=t,a=r(c,t+=2);t+=2;const h=r(c,t+=2)>>>1,u={format:4,searchRange:r(c,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,u.entrySelector=r(c,t),t+=2,u.rangeShift=r(c,t),t+=2,u.endCount=n(c,t,h),t+=2*h,t+=2,u.startCount=n(c,t,h),t+=2*h;for(let f=0;f<h;f++)u.idDelta.push(i.readShort(c,t)),t+=2;return u.idRangeOffset=n(c,t,h),t+=2*h,u.glyphIdArray=n(c,t,o+a-t>>1),u},parse12(c,t){const i=T.readUint;i(c,t+=4),i(c,t+=4);const r=i(c,t+=4);t+=4;const n=new Uint32Array(3*r);for(let o=0;o<3*r;o+=3)n[o]=i(c,t+(o<<2)),n[o+1]=i(c,t+(o<<2)+4),n[o+2]=i(c,t+(o<<2)+8);return{format:12,groups:n}}},zt={parseTab(c,t,i){const r=T;t+=18;const n=r.readUshort(c,t);t+=2,t+=16;const o=r.readShort(c,t);t+=2;const a=r.readShort(c,t);t+=2;const h=r.readShort(c,t);t+=2;const u=r.readShort(c,t);return t+=2,t+=6,{unitsPerEm:n,xMin:o,yMin:a,xMax:h,yMax:u,indexToLocFormat:r.readShort(c,t)}}},Xt={parseTab(c,t,i){const r=T;t+=4;const n=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],o={};for(let a=0;a<n.length;a++){const h=n[a],u=h==="advanceWidthMax"||h==="numberOfHMetrics"?r.readUshort:r.readShort;o[h]=u(c,t+2*a)}return o}},Wt={parseTab(c,t,i,r){const n=T,o=[],a=[],h=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,g=0,d=0;for(;d<u;)f=n.readUshort(c,t+(d<<2)),g=n.readShort(c,t+(d<<2)+2),o.push(f),a.push(g),d++;for(;d<h;)o.push(f),a.push(g),d++;return{aWidth:o,lsBearing:a}}},ht={cmap:Nt,head:zt,hhea:Xt,maxp:{parseTab(c,t,i){const r=T;return r.readUint(c,t),t+=4,{numGlyphs:r.readUshort(c,t)}}},hmtx:Wt,loca:{parseTab(c,t,i,r){const n=T,o=[],a=r.head.indexToLocFormat,h=r.maxp.numGlyphs+1;if(a===0)for(let u=0;u<h;u++)o.push(n.readUshort(c,t+(u<<1))<<1);else if(a===1)for(let u=0;u<h;u++)o.push(n.readUint(c,t+(u<<2)));return o}},glyf:{parseTab(c,t,i,r){const n=[],o=r.maxp.numGlyphs;for(let a=0;a<o;a++)n.push(null);return n},Qs(c,t){const i=T,r=c.Js,n=c.loca;if(n[t]===n[t+1])return null;const o=M.findTable(r,"glyf",c.ti);if(!o)return null;let a=o[0]+n[t];const h={};if(h.noc=i.readShort(r,a),a+=2,h.xMin=i.readShort(r,a),a+=2,h.yMin=i.readShort(r,a),a+=2,h.xMax=i.readShort(r,a),a+=2,h.yMax=i.readShort(r,a),a+=2,h.xMin>=h.xMax||h.yMin>=h.yMax)return null;if(h.noc>0){h.endPts=[];for(let m=0;m<h.noc;m++)h.endPts.push(i.readUshort(r,a)),a+=2;const u=i.readUshort(r,a);if(a+=2,r.length-a<u)return null;a+=u;const f=h.endPts[h.noc-1]+1;h.flags=[];for(let m=0;m<f;m++){const x=r[a];if(a++,h.flags.push(x),8&x){const A=r[a];a++;for(let p=0;p<A;p++)h.flags.push(x),m++}}h.xs=[];for(let m=0;m<f;m++){const x=h.flags[m],A=!!(16&x);2&x?(h.xs.push(A?r[a]:-r[a]),a++):A?h.xs.push(0):(h.xs.push(i.readShort(r,a)),a+=2)}h.ys=[];for(let m=0;m<f;m++){const x=h.flags[m],A=!!(32&x);4&x?(h.ys.push(A?r[a]:-r[a]),a++):A?h.ys.push(0):(h.ys.push(i.readShort(r,a)),a+=2)}let g=0,d=0;for(let m=0;m<f;m++)g+=h.xs[m],d+=h.ys[m],h.xs[m]=g,h.ys[m]=d}else h.parts=[],h.endPts=[],h.flags=[],h.xs=[],h.ys=[];return h}}},M={parse(c){const t=new Uint8Array(c),i=T.readASCII(t,0,4);if(i==="wOFF")c=Gt(c);else if(i==="wOF2")throw Error("WOFF2 is not supported in this build (Brotli + WOFF2 transforms required)");return[((r,n,o,a)=>{const h=ht,u={Js:r,ei:n,ti:o};for(const f in h){const g=f,d=M.findTable(r,g,o);if(d){const[m,x]=d;let A=a[m];A==null&&(A=h[g].parseTab(r,m,x,u),a[m]=A),u[g]=A}}return u})(new Uint8Array(c),0,0,{})]},findTable(c,t,i){const r=T,n=r.readUshort(c,i+4);let o=i+12;for(let a=0;a<n;a++){const h=r.readASCII(c,o,4);r.readUint(c,o+4);const u=r.readUint(c,o+8),f=r.readUint(c,o+12);if(h===t)return[u,f];o+=16}return null},T:ht,B:T};class Ht{si(t){var r;const i=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(n=>{if(n.format===4){const o=this.ii(n);i.push(...o)}else if(n.format===12){const o=this.ri(n);i.push(...o)}}),[...new Set(i)]):[]}ni(t){return t.filter(i=>this.oi(i))}ii(t){const i=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return i;for(let r=0;r<t.startCount.length;r++){const n=t.startCount[r],o=t.endCount[r];if(n!==65535||o!==65535){for(let a=n;a<=o;a++)if(this.ai(t,a,r)>0)try{const h=String.fromCodePoint(a);i.push(h)}catch{}}}return i}ri(t){const i=[];if(!t.groups)return i;for(let r=0;r<t.groups.length;r+=3){const n=t.groups[r],o=t.groups[r+1],a=t.groups[r+2];for(let h=n;h<=o;h++)if(a+(h-n)>0)try{const u=String.fromCodePoint(h);i.push(u)}catch{}}return i}ai(t,i,r){if(t.idRangeOffset[r]===0)return i+t.idDelta[r]&65535;{const n=t.idRangeOffset[r]/2+(i-t.startCount[r])-(t.startCount.length-r);if(n>=0&&t.glyphIdArray&&n<t.glyphIdArray.length){const o=t.glyphIdArray[n];if(o!==0)return o+t.idDelta[r]&65535}}return 0}oi(t){const i=t.codePointAt(0)||0;return!(i>=0&&i<=31&&i!==9&&i!==10&&i!==13||i>=127&&i<=159)}}class et{constructor(){l(this,"hi",new Map);l(this,"ci",new Map)}li(t,i){const r=`${this.ui(t)}_${i}`;if(this.hi.has(r))return this.hi.get(r);const n=t.cmap;if(!n||!n.tables)return this.hi.set(r,0),0;let o=0;for(const a of n.tables)if(a.format===4?o=this.fi(i,a):a.format===12&&(o=this.di(i,a)),o>0)break;return this.hi.set(r,o),o}pi(t,i){const r=i.codePointAt(0);return r===void 0?0:this.li(t,r)}mi(t,i){const r=t.hmtx;return r&&r.aWidth&&r.aWidth.length!==0?i<r.aWidth.length?r.aWidth[i]:r.aWidth[r.aWidth.length-1]:0}gi(t,i){const r=i/t.head.unitsPerEm,n=t.hhea.ascender*r,o=t.hhea.descender*r,a=t.hhea.lineGap*r;return{ascender:n,descender:o,lineGap:a,lineHeight:n-o+a,unitsPerEm:t.head.unitsPerEm,scale:r}}_i(){this.hi.clear(),this.ci.clear()}ui(t){return`${t.ti}_${t.Js.length}`}fi(t,i){const r=i.endCount.length;let n=-1;for(let o=0;o<r;o++)if(t<=i.endCount[o]){n=o;break}if(n===-1||t<i.startCount[n])return 0;if(i.idRangeOffset[n]===0)return t+i.idDelta[n]&65535;{const o=i.idRangeOffset[n]/2+(t-i.startCount[n])-(r-n);if(o>=0&&o<i.glyphIdArray.length){const a=i.glyphIdArray[o];return a===0?0:a+i.idDelta[n]&65535}}return 0}di(t,i){const r=i.groups.length/3;for(let n=0;n<r;n++){const o=i.groups[3*n],a=i.groups[3*n+1],h=i.groups[3*n+2];if(t>=o&&t<=a)return h+(t-o)}return 0}}class kt{constructor(t){l(this,"yi");l(this,"Ai");l(this,"xt");l(this,"wi");this.xt=t,this.wi=new et,this.yi=document.createElement("canvas"),this.Ai=this.yi.getContext("2d",{willReadFrequently:!0,alpha:!1})}createTextureAtlas(t,i,r,n){const o=t.length,a=Math.ceil(Math.sqrt(o)),h=Math.ceil(o/a),u=i.width*a,f=i.height*h,g=typeof n=="object"?n:null;this.Ci(u,f),this.bi(t,i,a,r,g);const d=this.xt.js(u,f,1,{filter:"nearest"});return d.zt(this.yi),{framebuffer:d,columns:a,rows:h}}Ci(t,i){this.yi.width=t,this.yi.height=i,this.yi.style.width=t+"px",this.yi.style.height=t+"px",this.Ai.imageSmoothingEnabled=!1,this.yi.style.imageRendering="pixelated",this.Ai.fillStyle="black",this.Ai.fillRect(0,0,t,i),this.Ai.textBaseline="top",this.Ai.textAlign="left",this.Ai.fillStyle="white"}bi(t,i,r,n,o){const a=n/o.head.unitsPerEm;for(let h=0;h<t.length;h++){const u=h%r,f=Math.floor(h/r),g=t[h].character,d=this.xi(o,g);if(!d)continue;const m=g.codePointAt(0)||0,x=this.wi.li(o,m),A=this.$i(o,x)*a,p=u*i.width,y=f*i.height,v=p+.5*i.width,w=y+.5*i.height,E=Math.round(v-.5*i.width),B=Math.round(w-.5*n),F=E+.5*(i.width-A),S=B+o.hhea.ascender*a;this.Mi(d,F,S,a)}}xi(t,i){const r=i.codePointAt(0)||0,n=this.wi.li(t,r);if(n===0)return null;if(t.glyf&&t.glyf[n]!==null)return t.glyf[n];if(M&&M.T&&M.T.glyf){const o=M.T.glyf.Qs(t,n);return t.glyf&&o&&(t.glyf[n]=o),o}return null}$i(t,i){const r=t.hmtx;return r&&r.aWidth?i<r.aWidth.length?r.aWidth[i]:r.aWidth[r.aWidth.length-1]:0}Mi(t,i,r,n){if(!t||!t.xs||t.noc===0)return;const{xs:o,ys:a,endPts:h,flags:u}=t;if(!(o&&a&&h&&u))return;this.Ai.beginPath();let f=0;for(let g=0;g<h.length;g++){const d=h[g];if(!(d<f)){if(d>=f){const m=i+o[f]*n,x=r-a[f]*n;this.Ai.moveTo(m,x);let A=f+1;for(;A<=d;)if(1&u[A]){const p=i+o[A]*n,y=r-a[A]*n;this.Ai.lineTo(p,y),A++}else{const p=i+o[A]*n,y=r-a[A]*n;let v=A+1>d?f:A+1;if(1&u[v]){const w=i+o[v]*n,E=r-a[v]*n;this.Ai.quadraticCurveTo(p,y,w,E),A=v+1}else{const w=(p+(i+o[v]*n))/2,E=(y+(r-a[v]*n))/2;this.Ai.quadraticCurveTo(p,y,w,E),A=v}}this.Ai.closePath()}f=d+1}}this.Ai.fill()}}class Yt{constructor(){l(this,"Fi");this.Fi=new et}Ri(t,i,r){let n=0;const o=this.Fi.gi(r,i),a=o.lineHeight;for(const h of t){const u=this.Fi.pi(r,h);if(u===0)continue;const f=this.Fi.mi(r,u)*o.scale;n=Math.max(n,f)}return{width:Math.ceil(n),height:Math.ceil(a)}}_i(){this.Fi._i()}}class Vt{constructor(){l(this,"wi");this.wi=new et}createCharacterObjects(t,i){return t.map((r,n)=>{const o=r.codePointAt(0)||0,a=this.zi(n);let h=0;if(i.hmtx&&i.hmtx.aWidth){const u=this.wi.li(i,o);u>0&&i.hmtx.aWidth[u]!==void 0&&(h=i.hmtx.aWidth[u])}return{character:r,unicode:o,color:a,advanceWidth:h}})}zi(t){return[t%256/255,Math.floor(t/256)%256/255,Math.floor(t/65536)%256/255]}Pi(t,i){if(!W.v(typeof t=="string","Character must be a string.",{method:"getCharacterColor",providedValue:t}))return[0,0,0];const r=i.find(n=>n.character===t);return r?r.color:[0,0,0]}Ti(t,i){return W.v(typeof t=="string"&&t.length>0,"Characters must be a string with at least one character.",{method:"getCharacterColors",providedValue:t})?Array.from(t).map(r=>this.Pi(r,i)||[0,0,0]):[[0,0,0]]}}class ct{constructor(t,i=16){l(this,"Si");l(this,"Ei",[]);l(this,"Bi");l(this,"Gi",16);l(this,"Di",0);l(this,"Li",0);l(this,"ki",{width:0,height:0});l(this,"Oi");l(this,"Hi");l(this,"Ii");l(this,"Ni");l(this,"Xi");this.Gi=i,this.Hi=new Ht,this.Ii=new kt(t),this.Ni=new Yt,this.Xi=new Vt}async Wi(t){let i;if(t){const r=await fetch(t);if(!r.ok)throw new R(`Failed to load font file: ${r.status} ${r.statusText}`);i=await r.arrayBuffer()}else i=await(await fetch("data:font/woff;base64,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")).arrayBuffer();await this.Vi(i),this.Si=M.parse(i)[0],await this.Ki()}ji(t){if(t===void 0)return this.Gi;this.Gi=t,this.ki=this.Ni.Ri(this.Ei.map(r=>r.character),this.Gi,this.Si);const i=this.Ii.createTextureAtlas(this.Ei,this.ki,this.Gi,this.Si);this.Bi=i.framebuffer,this.Di=i.columns,this.Li=i.rows}async Yi(t){try{const i=await fetch(t);if(!i.ok)throw new R(`Failed to load font file: ${i.status} ${i.statusText}`);const r=await i.arrayBuffer();await this.Vi(r);const n=M.parse(r);if(!n||n.length===0)throw Error("Failed to parse font file");this.Si=n[0],await this.Ki()}catch(i){throw new R("Failed to load font: "+(i instanceof Error?i.message:"Unknown error"),i)}}async Vi(t){const i=Date.now();this.Oi=new FontFace("CustomFont_"+i,t),await this.Oi.load(),document.fonts.add(this.Oi)}async Ki(){const t=this.Hi.si(this.Si),i=this.Hi.ni(t);this.Ei=this.Xi.createCharacterObjects(i,this.Si),this.ki=this.Ni.Ri(i,this.Gi,this.Si);const r=this.Ii.createTextureAtlas(this.Ei,this.ki,this.Gi,this.Si);this.Bi=r.framebuffer,this.Di=r.columns,this.Li=r.rows}Pi(t){return this.Xi.Pi(t,this.Ei)}Ti(t){return this.Xi.Ti(t,this.Ei)}Gt(){this.Bi.Gt(),document.fonts.delete(this.Oi)}get fontFramebuffer(){return this.Bi}get characters(){return this.Ei}get textureColumns(){return this.Di}get textureRows(){return this.Li}get maxGlyphDimensions(){return this.ki}get fontSize(){return this.Gi}get font(){return this.Si}}class lt{constructor(t,i,r){l(this,"qi");l(this,"Zi");l(this,"dt");l(this,"gt");l(this,"Qi");l(this,"Ji");l(this,"tr");l(this,"er");l(this,"sr");this.tr=t,this.er=i,this.sr=r,this.ir()}ir(){this.qi=Math.floor(this.tr.width/this.er),this.Zi=Math.floor(this.tr.height/this.sr),this.dt=this.qi*this.er,this.gt=this.Zi*this.sr,this.Qi=Math.floor((this.tr.width-this.dt)/2),this.Ji=Math.floor((this.tr.height-this.gt)/2)}rr(t,i){this.er=t,this.sr=i,this.ir()}get cellWidth(){return this.er}get cellHeight(){return this.sr}get cols(){return this.qi}get rows(){return this.Zi}get width(){return this.dt}get height(){return this.gt}get offsetX(){return this.Qi}get offsetY(){return this.Ji}}class ut{constructor(t={}){l(this,"tr");l(this,"nr",null);l(this,"ar",!1);l(this,"hr");l(this,"cr");this.ar=t.overlay??!1,this.ar&&t.canvas?(this.nr=t.canvas,this.tr=this.lr(),this.cr=!0,this.ur()):t.canvas?(this.tr=t.canvas,this.cr=!1):(this.tr=this.dr(t.width,t.height),this.cr=!0),this.tr.style.imageRendering="pixelated"}dr(t,i){const r=document.createElement("canvas");return r.className="textmodeCanvas",r.style.imageRendering="pixelated",r.width=t||800,r.height=i||600,document.body.appendChild(r),r}lr(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const i=this.nr.getBoundingClientRect();let r=Math.round(i.width),n=Math.round(i.height);if(this.nr instanceof HTMLVideoElement){const h=this.nr;(r===0||n===0)&&h.videoWidth>0&&h.videoHeight>0&&(r=h.videoWidth,n=h.videoHeight)}t.width=r,t.height=n,t.style.position="absolute",t.style.pointerEvents="none";const o=window.getComputedStyle(this.nr);let a=parseInt(o.zIndex||"0",10);return isNaN(a)&&(a=0),t.style.zIndex=""+(a+1),t}ur(){var t;this.pr(),(t=this.nr.parentNode)==null||t.insertBefore(this.tr,this.nr.nextSibling),window.ResizeObserver&&(this.hr=new ResizeObserver(()=>{this.mr()}),this.hr.observe(this.nr)),window.addEventListener("resize",()=>{this.mr()})}pr(){if(!this.nr)return;const t=this.nr.getBoundingClientRect();let i=this.nr.offsetParent;if(i&&i!==document.body){const r=i.getBoundingClientRect();this.tr.style.top=t.top-r.top+"px",this.tr.style.left=t.left-r.left+"px"}else this.tr.style.top=t.top+window.scrollY+"px",this.tr.style.left=t.left+window.scrollX+"px"}mr(t,i){if(this.ar){const r=this.nr.getBoundingClientRect();let n=Math.round(r.width),o=Math.round(r.height);if(this.nr instanceof HTMLVideoElement){const a=this.nr;(n===0||o===0)&&a.videoWidth>0&&a.videoHeight>0&&(n=a.videoWidth,o=a.videoHeight)}this.tr.width=n,this.tr.height=o,this.pr()}else this.tr.width=t??this.tr.width,this.tr.height=i??this.tr.height}gr(){const t=this.tr.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1,stencil:!1,powerPreference:"high-performance"});if(!t)throw new R("`textmode.js` requires WebGL2 support.");return t}Gt(){this.hr&&this.hr.disconnect();const t=this.tr.getContext("webgl")||this.tr.getContext("webgl2");if(t){const i=t.getExtension("WEBGL_lose_context");i&&i.loseContext()}this.cr&&this.tr.parentNode&&this.tr.parentNode.removeChild(this.tr)}get canvas(){return this.tr}get targetCanvas(){return this.nr}get width(){return this.tr.width}get height(){return this.tr.height}}class X{constructor(t,i,r,n){l(this,"texture");l(this,"width");l(this,"height");l(this,"vt");l(this,"D",0);l(this,"V",0);l(this,"K",0);l(this,"L",[0,0]);l(this,"_r","sampled");l(this,"vr","fixed");l(this,"Y",[1,1,1]);l(this,"q",[0,0,0]);l(this,"yr",[0,0,0,1]);l(this,"Ar",[[.1,0,0]]);l(this,"wr");this.vt=t,this.texture=i,this.width=r,this.height=n}Gt(){this.vt.deleteTexture(this.texture)}Cr(t){return typeof t=="boolean"?t?1:0:(t==null?0:Number(t))>0?1:0}invert(t=!0){return this.D=this.Cr(t),this}flipX(t=!0){return this.V=this.Cr(t),this}flipY(t=!0){return this.K=this.Cr(t),this}charRotation(t){const i=255*t/360,r=Math.floor(i)/255,n=Math.round(i-Math.floor(i));return this.L=[r,n],this}get flags(){return{invert:this.D,flipX:this.V,flipY:this.K}}get charRotationRG(){return this.L}charColorMode(t){return this._r=t,this}cellColorMode(t){return this.vr=t,this}charColor(t,i,r){return this.Y=[(t??0)/255,(i??t??0)/255,(r??t??0)/255],this}cellColor(t,i,r){return this.q=[(t??0)/255,(i??t??0)/255,(r??t??0)/255],this}background(t,i,r,n){return this.yr=[(t??0)/255,(i??t??0)/255,(r??t??0)/255,(n??255)/255],this}charactersFromColors(t){const i=t.filter(r=>Array.isArray(r)).slice(0,64);return this.Ar=i,this}characters(t){const i=this.wr(t);return this.charactersFromColors(i),this}get characterListUniforms(){return{count:this.Ar.length,list:this.Ar}}get colorUniforms(){return{charColorFixed:this._r==="fixed",Y:this.Y,cellColorFixed:this.vr==="fixed",cellColor:this.q,backgroundColor:this.yr}}static fromSource(t,i,r){const n=t.context,o=n.createTexture();n.bindTexture(n.TEXTURE_2D,o),n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,1),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,i),n.bindTexture(n.TEXTURE_2D,null);const a=i.naturalWidth??i.width??i.videoWidth??0,h=i.naturalHeight??i.height??i.videoHeight??0,u=new X(n,o,a,h);return u.wr=r,u}}class jt{constructor(t=60){l(this,"br");l(this,"$r");l(this,"Mr",null);l(this,"Fr",0);l(this,"Rr",!0);l(this,"zr",0);l(this,"Pr",0);l(this,"Tr",[]);l(this,"Sr",10);l(this,"Er",0);this.br=t,this.$r=1e3/t}start(t){if(!this.Rr)return;this.Fr=performance.now();const i=r=>{if(!this.Rr)return void(this.Mr=null);const n=r-this.Fr;n>=this.$r&&(t(),this.Fr=r-n%this.$r),this.Rr&&(this.Mr=requestAnimationFrame(i))};this.Mr=requestAnimationFrame(i)}stop(){this.Mr&&(cancelAnimationFrame(this.Mr),this.Mr=null)}pause(){this.Rr&&(this.Rr=!1,this.stop())}resume(t){this.Rr||(this.Rr=!0,this.start(t))}frameRate(t,i){if(t===void 0)return this.zr;this.br=t,this.$r=1e3/t,this.Rr&&i&&(this.stop(),this.start(i))}measureFrameRate(){const t=performance.now();if(this.Pr>0){const i=t-this.Pr;this.Tr.push(i),this.Tr.length>this.Sr&&this.Tr.shift();const r=this.Tr.reduce((n,o)=>n+o,0)/this.Tr.length;this.zr=1e3/r}this.Pr=t}get isLooping(){return this.Rr}get frameRateLimit(){return this.br}get currentFrameRate(){return this.zr}get frameCount(){return this.Er}set frameCount(t){this.Er=t}incrementFrame(){this.Er++}resetFrameCount(){this.Er=0}}class Kt{constructor(){l(this,"Br",new Map);l(this,"Gr",null);l(this,"Dr",null);l(this,"Lr");l(this,"kr");l(this,"Or",!1);l(this,"Hr");l(this,"Ir");l(this,"Nr",{ArrowUp:"UP_ARROW",ArrowDown:"DOWN_ARROW",ArrowLeft:"LEFT_ARROW",ArrowRight:"RIGHT_ARROW",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",Enter:"ENTER",Return:"RETURN",Tab:"TAB",Escape:"ESCAPE",Backspace:"BACKSPACE",Delete:"DELETE",Insert:"INSERT",Home:"HOME",End:"END",PageUp:"PAGE_UP",PageDown:"PAGE_DOWN",Shift:"SHIFT",Control:"CONTROL",Alt:"ALT",Meta:"META"," ":"SPACE"})}Xr(){this.Or||(this.Lr=t=>{this.Wr(t)},this.kr=t=>{this.Vr(t)},window.addEventListener("keydown",this.Lr,{passive:!1}),window.addEventListener("keyup",this.kr,{passive:!1}),this.Or=!0)}Kr(){this.Or&&(window.removeEventListener("keydown",this.Lr),window.removeEventListener("keyup",this.kr),this.Or=!1,this.Br.clear(),this.Gr=null,this.Dr=null)}jr(t){this.Hr=t}Yr(t){this.Ir=t}qr(t){const i=this.Zr(t),r=this.Br.get(t)||this.Br.get(i);return(r==null?void 0:r.isPressed)||!1}Qr(){return this.Gr}Jr(){return this.Dr}tn(){const t=[];for(const[i,r]of this.Br)r.isPressed&&t.push(i);return t}en(){return{ctrl:this.qr("Control"),shift:this.qr("Shift"),alt:this.qr("Alt"),meta:this.qr("Meta")}}sn(){this.Br.clear(),this.Gr=null,this.Dr=null}Wr(t){const i=t.key,r=Date.now();this.Br.has(i)||this.Br.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.Br.get(i);if(!n.isPressed&&(n.isPressed=!0,n.lastPressTime=r,this.Gr=i,this.Hr)){const o={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.Hr(o)}}Vr(t){const i=t.key,r=Date.now();this.Br.has(i)||this.Br.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.Br.get(i);if(n.isPressed=!1,n.lastReleaseTime=r,this.Dr=i,this.Ir){const o={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.Ir(o)}}Zr(t){return this.Nr[t]||t.toLowerCase()}}class qt{constructor(t){l(this,"tr");l(this,"rn");l(this,"nn",{x:-1,y:-1});l(this,"an",{x:-1,y:-1});l(this,"hn",null);l(this,"cn");l(this,"ln");l(this,"un");l(this,"fn");l(this,"dn");l(this,"pn");l(this,"Or",!1);l(this,"mn");l(this,"gn");l(this,"_n");l(this,"vn");l(this,"yn");this.tr=t}Wi(t){this.rn=t,this.An()}Xr(){if(this.Or)return;const t=this.tr.canvas;this.cn=i=>{this.wn(i),this.Cn(i)},this.ln=()=>{this.an={...this.nn},this.nn.x=-1,this.nn.y=-1,this.hn=null},this.un=i=>{this.wn(i),this.bn(i)},this.fn=i=>{this.wn(i),this.xn(i)},this.dn=i=>{this.wn(i),this.$n(i)},this.pn=i=>{this.wn(i),this.Mn(i)},t.addEventListener("mousemove",this.cn,{passive:!0}),t.addEventListener("mouseleave",this.ln,{passive:!0}),t.addEventListener("mousedown",this.un,{passive:!0}),t.addEventListener("mouseup",this.fn,{passive:!0}),t.addEventListener("click",this.dn,{passive:!0}),t.addEventListener("wheel",this.pn,{passive:!1}),this.Or=!0}Kr(){if(!this.Or)return;const t=this.tr.canvas;t.removeEventListener("mousemove",this.cn),t.removeEventListener("mouseleave",this.ln),t.removeEventListener("mousedown",this.un),t.removeEventListener("mouseup",this.fn),t.removeEventListener("click",this.dn),t.removeEventListener("wheel",this.pn),this.Or=!1}An(){if(this.Or)try{if(this.hn){const t=new MouseEvent("mousemove",{clientX:this.hn.x,clientY:this.hn.y,bubbles:!1,cancelable:!1});this.wn(t)}else this.nn.x!==-1&&this.nn.y!==-1&&(this.nn.x>=this.rn.cols||this.nn.y>=this.rn.rows)&&(this.nn.x=-1,this.nn.y=-1)}catch{this.nn.x=-1,this.nn.y=-1}}Fn(t){this.mn=t}jr(t){this.gn=t}Yr(t){this._n=t}Rn(t){this.vn=t}zn(t){this.yn=t}Pn(){return{x:this.nn.x,y:this.nn.y}}Cn(t){if(this.vn){const i={position:{...this.nn},previousPosition:{...this.an},originalEvent:t};this.vn(i)}}bn(t){if(this.gn){const i={position:{...this.nn},previousPosition:{...this.an},button:t.button,originalEvent:t};this.gn(i)}}xn(t){if(this._n){const i={position:{...this.nn},previousPosition:{...this.an},button:t.button,originalEvent:t};this._n(i)}}$n(t){if(this.mn){const i={position:{...this.nn},previousPosition:{...this.an},button:t.button,originalEvent:t};this.mn(i)}}Mn(t){if(this.yn){const i={position:{...this.nn},previousPosition:{...this.an},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.yn(i)}}wn(t){const i=this.tr.canvas;this.an={...this.nn},this.hn={x:t.clientX,y:t.clientY};const r=i.getBoundingClientRect(),n=t.clientX-r.left,o=t.clientY-r.top,a=i.width/r.width,h=o*(i.height/r.height),u=n*a-this.rn.offsetX,f=h-this.rn.offsetY,g=Math.floor(u/this.rn.cellWidth),d=Math.floor(f/this.rn.cellHeight);g>=0&&g<this.rn.cols&&d>=0&&d<this.rn.rows?(this.nn.x=g,this.nn.y=d):(this.nn.x=-1,this.nn.y=-1)}}const Zt=c=>class extends c{rotate(t=0,i=0,r=0){this.xt.state.et(t),this.xt.state.st(i),this.xt.state.it(r)}rotateX(t){this.xt.state.et(t)}rotateY(t){this.xt.state.st(t)}rotateZ(t){this.xt.state.it(t)}push(){this.xt.state.H()}pop(){this.xt.state.Z()}rect(t,i,r=1,n=1){this.xt.Ns(t,i,r,n)}point(t,i){this.xt.Ns(t,i,1,1)}line(t,i,r,n){this.xt.Xs(t,i,r,n)}lineWeight(t){this.xt.state.tt(t)}background(t,i=t,r=t,n=255){this.xt.qs(t,i,r,n)}char(t){this.xt.state.rt(this.Si.Pi(t))}charColor(t,i,r){this.xt.state.nt(t,i,r)}cellColor(t,i,r){this.xt.state.ot(t,i,r)}flipX(t){this.xt.state.ht(t)}flipY(t){this.xt.state.ct(t)}charRotation(t){this.xt.state.ut(t)}invert(t){this.xt.state.lt(t)}clear(){this.xt.qs(0,0,0,0)}ellipse(t,i,r,n){this.xt.Ws(t,i,r/2,n/2)}triangle(t,i,r,n,o,a){this.xt.Vs(t,i,r,n,o,a)}bezierCurve(t,i,r,n,o,a,h,u){this.xt.Ks(t,i,r,n,o,a,h,u)}arc(t,i,r,n,o,a){this.xt.Ys(t,i,r,n,o,a)}shader(t){this.xt.Ls(t)}setUniform(t,i){this.xt.Kt(t,i)}setUniforms(t){this.xt.ks(t)}createFilterShader(t){return this.xt.oe(t)}createFramebuffer(t){return this.xt.js(t.width,t.height,5,{filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte"})}image(t,i,r,n,o){if(t.textures){const a=t;this.xt.Os(a,i,r,n??a.width,o??a.height)}else{const a=t;this.xt.Hs(a,i,r,n??a.width,o??a.height)}}async loadImage(t){if(typeof t!="string")return X.fromSource(this.xt,t,n=>this.Si.Ti(n));const i=t,r=await new Promise((n,o)=>{const a=new Image;a.crossOrigin="anonymous",a.onload=()=>n(a),a.onerror=h=>o(h),a.src=i});return X.fromSource(this.xt,r,n=>this.Si.Ti(n))}};class it{Tn(t){const i=t.Pt(0),r=t.Pt(1),n=t.Pt(2),o=t.Pt(3);return{characterPixels:i,primaryColorPixels:r,secondaryColorPixels:n,transformPixels:t.Pt(4),rotationPixels:o}}Sn(t,i){return t[i]+(t[i+1]<<8)}En(t,i){return{r:t[i],g:t[i+1],b:t[i+2],a:t[i+3]}}}class st{Bn(t,i){return new Blob([t],{type:i})}Gn(t,i,r){try{const n=this.Bn(t,r),o=URL.createObjectURL(n),a=document.createElement("a");a.href=o,a.download=i,a.style.display="none",a.rel="noopener",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(o)}catch(n){console.error("Failed to download file:",n)}}Dn(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}Ln(){const t=new Date;return{date:t.toISOString().split("T")[0],time:t.toTimeString().split(" ")[0].replace(/:/g,"-")}}kn(t){return t.replace(/[<>:"/\\|?*]/g,"_").replace(/\s+/g,"_").replace(/_{2,}/g,"_").replace(/^_+|_+$/g,"").substring(0,255)}On(){return"textmode-export-"+this.Dn()}}class $t extends it{Hn(t,i,r){const n=t[r]===255,o=t[r+1]===255,a=t[r+2]===255,h=i[r],u=i[r+1];return{isInverted:n,flipHorizontal:o,flipVertical:a,rotation:Math.round(360*(h+u/255)/255*100)/100}}In(t,i,r){return{x:t,y:i,cellX:t*r.cellWidth,cellY:i*r.cellHeight}}Nn(t,i){const r=[];let n=0;for(let o=0;o<i.rows;o++)for(let a=0;a<i.cols;a++){const h=4*n,u=this.Sn(t.characterPixels,h);let f=this.En(t.primaryColorPixels,h),g=this.En(t.secondaryColorPixels,h);const d=this.Hn(t.transformPixels,t.rotationPixels,h);if(d.isInverted){const x=f;f=g,g=x}const m=this.In(a,o,i);r.push({charIndex:u,primaryColor:f,secondaryColor:g,transform:d,position:m}),n++}return r}}class Jt{Xn(t,i){const r=t.cmap;for(const n of r.tables)if(n.format===4){const o=n;for(let a=0;a<o.startCount.length;a++)if(i>=o.startCount[a]&&i<=o.endCount[a]){if(o.idRangeOffset[a]===0)return i+o.idDelta[a]&65535;{const h=o.idRangeOffset[a]/2+(i-o.startCount[a])-(o.startCount.length-a);if(h>=0&&h<o.glyphIdArray.length){const u=o.glyphIdArray[h];if(u!==0)return u+o.idDelta[a]&65535}}}}else if(n.format===12){const o=n;for(let a=0;a<o.groups.length;a+=3){const h=o.groups[a],u=o.groups[a+1],f=o.groups[a+2];if(i>=h&&i<=u)return f+(i-h)}}return 0}Wn(t,i,r,n,o){const a=o/t.head.unitsPerEm;return{getBoundingBox:()=>({x1:r+i.xMin*a,y1:n+-i.yMax*a,x2:r+i.xMax*a,y2:n+-i.yMin*a}),toSVG:()=>this.Vn(i,r,n,a)}}Vn(t,i,r,n){if(!t||!t.xs)return"";const{xs:o,ys:a,endPts:h,flags:u}=t;if(!(o&&a&&h&&u))return"";let f="",g=0;for(let d=0;d<h.length;d++){const m=h[d];if(!(m<g)){if(m>=g){const x=i+o[g]*n,A=r-a[g]*n;f+=`M${x.toFixed(2)},${A.toFixed(2)}`;let p=g+1;for(;p<=m;)if(1&u[p]){const y=i+o[p]*n,v=r-a[p]*n;f+=`L${y.toFixed(2)},${v.toFixed(2)}`,p++}else{const y=i+o[p]*n,v=r-a[p]*n;let w=p+1>m?g:p+1;if(1&u[w]){const E=i+o[w]*n,B=r-a[w]*n;f+=`Q${y.toFixed(2)},${v.toFixed(2)} ${E.toFixed(2)},${B.toFixed(2)}`,p=w+1}else{const E=(y+(i+o[w]*n))/2,B=(v+(r-a[w]*n))/2;f+=`Q${y.toFixed(2)},${v.toFixed(2)} ${E.toFixed(2)},${B.toFixed(2)}`,p=w}}f+="Z"}g=m+1}}return f}Kn(t,i,r,n,o){const a=t.codePointAt(0)||0,h=this.Xn(i,a);let u=null;return i.glyf&&i.glyf[h]!==null?u=i.glyf[h]:(u=M.T.glyf.Qs(i,h),i.glyf[h]=u),this.Wn(i,u,r,n,o)}jn(t,i,r,n,o,a,h,u){const f=r+(o-u*(h/i.head.unitsPerEm))/2,g=n+(a+.7*h)/2;return this.Kn(t,i,f,g,h).toSVG()||null}}class Qt{constructor(){l(this,"Yn");this.Yn=new Jt}qn(t){const{width:i,height:r}=t;return`<?xml version="1.0" encoding="UTF-8"?><svg width="${i}" height="${r}" viewBox="0 0 ${i} ${r}" xmlns="http://www.w3.org/2000/svg"><title>textmode.js sketch</title>`}Zn(){return"</g></svg>"}Qn(t,i){if(!i.includeBackgroundRectangles)return"";const[r,n,o,a]=i.backgroundColor;return`<rect width="${t.width}" height="${t.height}" fill="rgba(${r},${n},${o},${a/255})"/>`}Jn(t,i){const{transform:r,position:n}=t;if(!r.flipHorizontal&&!r.flipVertical&&!r.rotation)return"";const o=n.cellX+i.cellWidth/2,a=n.cellY+i.cellHeight/2,h=[];if(r.flipHorizontal||r.flipVertical){const u=r.flipHorizontal?-1:1,f=r.flipVertical?-1:1;h.push(`translate(${o} ${a})scale(${u} ${f})translate(${-o} ${-a})`)}return r.rotation&&h.push(`rotate(${r.rotation} ${o} ${a})`),` transform="${h.join(" ")}"`}eo(t,i,r){if(!r.includeBackgroundRectangles||t.secondaryColor.a===0)return"";const{position:n}=t,{r:o,g:a,b:h,a:u}=t.secondaryColor,f=`rgba(${o},${a},${h},${u/255})`;return r.drawMode==="stroke"?`<rect x="${n.cellX}" y="${n.cellY}" width="${i.cellWidth}" height="${i.cellHeight}" stroke="${f}" fill="none" stroke-width="${r.strokeWidth}"/>`:`<rect x="${n.cellX}" y="${n.cellY}" width="${i.cellWidth}" height="${i.cellHeight}" fill="${f}"/>`}Kn(t,i,r,n){const o=r.characters[t.charIndex];if(!o)return"";const a=this.Yn.jn(o.character,r.font,t.position.cellX,t.position.cellY,i.cellWidth,i.cellHeight,r.fontSize,o.advanceWidth);if(!a)return"";const{r:h,g:u,b:f,a:g}=t.primaryColor,d=`rgba(${h},${u},${f},${g/255})`;return n.drawMode==="stroke"?`<path d="${a}" stroke="${d}" stroke-width="${n.strokeWidth}" fill="none"/>`:`<path d="${a}" fill="${d}"/>`}so(t,i,r,n){const o=[],a=this.eo(t,i,n);a&&o.push(a);const h=this.Kn(t,i,r,n);if(h){const u=this.Jn(t,i);o.push(u?`<g${u}>${h}</g>`:h)}return o.join("")}io(t,i,r,n){const o=[this.qn(i),this.Qn(i,n),'<g id="ascii-cells">'];for(const a of t)o.push(this.so(a,i,r,n));return o.push(this.Zn()),o.join("")}ro(t){return t.replace(/<path[^>]*d=""[^>]*\/>/g,"").replace(/\s+/g," ").replace(/> </g,"><")}}class te extends st{no(t){return this.Bn(t,"image/svg+xml;charset=utf-8")}oo(t,i){this.Gn(t,this.kn(i)+".svg","image/svg+xml;charset=utf-8")}ao(t,i){this.oo(t,i||this.On())}}class ft{constructor(){l(this,"ho");l(this,"co");l(this,"lo");this.ho=new $t,this.co=new Qt,this.lo=new te}uo(t){return{includeBackgroundRectangles:t.includeBackgroundRectangles??!0,drawMode:t.drawMode??"fill",strokeWidth:t.strokeWidth??1,backgroundColor:t.backgroundColor??[0,0,0,0],filename:t.filename||this.lo.On()}}fo(t,i={}){const r=this.ho.Nn(this.ho.Tn(t.pipeline),t.grid),n=this.co.io(r,t.grid,t.font,this.uo(i));return this.co.ro(n)}ao(t,i={}){this.lo.ao(this.fo(t,i),i.filename)}}class ee extends it{do(t,i,r,n=" "){var h;const o=[];let a=0;for(let u=0;u<i.rows;u++){const f=[];for(let g=0;g<i.cols;g++){const d=4*a,m=this.Sn(t.characterPixels,d),x=((h=r.characters[m])==null?void 0:h.character)||n;f.push(x),a++}o.push(f)}return o}}class ie{po(t,i){const r=[];for(const o of t){let a=o.join("");i.preserveTrailingSpaces||(a=a.replace(/\s+$/,"")),r.push(a)}const n=i.lineEnding==="crlf"?`\r
|
|
12
12
|
`:`
|
|
13
|
-
`;return
|
|
13
|
+
`;return r.join(n)}}class se extends st{mo(t,i){const r=this._o(i);this.Gn(t,r,"text/plain;charset=utf-8")}_o(t){let i=this.kn(t);return i===".txt"||i.length<=4?this.On():i}}class dt{constructor(){l(this,"ho");l(this,"co");l(this,"lo");this.ho=new ee,this.co=new ie,this.lo=new se}uo(t){return{preserveTrailingSpaces:t.preserveTrailingSpaces??!1,lineEnding:t.lineEnding??"lf",emptyCharacter:t.emptyCharacter??" ",filename:t.filename||this.lo.On()}}vo(t,i={}){const r=this.uo(i),n=this.ho.do(this.ho.Tn(t.pipeline),t.grid,t.font,r.emptyCharacter);return this.co.po(n,r)}mo(t,i={}){this.lo.mo(this.vo(t,i),i.filename)}}class re extends it{yo(t,i=1,r="transparent"){const n=t.canvas;if(i===1&&r==="transparent")return n;const o=document.createElement("canvas"),a=o.getContext("2d"),h=Math.round(n.width*i),u=Math.round(n.height*i);return o.width=h,o.height=u,r!=="transparent"&&(a.fillStyle=r,a.fillRect(0,0,h,u)),a.imageSmoothingEnabled=!1,a.drawImage(n,0,0,n.width,n.height,0,0,h,u),o}}class ne{Ao(t,i){const r=this.wo(i.format);return i.format==="png"?t.toDataURL(r):t.toDataURL(r,i.quality)}async Co(t,i){return new Promise((r,n)=>{const o=this.wo(i.format),a=h=>{h?r(h):n(Error(`Failed to generate ${i.format.toUpperCase()} blob`))};i.format==="png"?t.toBlob(a,o):t.toBlob(a,o,i.quality)})}wo(t){switch(t){case"png":return"image/png";case"jpg":return"image/jpeg";case"webp":return"image/webp";default:throw Error("Unsupported image format: "+t)}}}const oe={png:"image/png",jpg:"image/jpeg",webp:"image/webp"},gt={png:".png",jpg:".jpg",webp:".webp"};class ae extends st{bo(t,i,r){this.xo(t,this.kn(i)+gt[r])}xo(t,i){const r=URL.createObjectURL(t);try{const n=document.createElement("a");n.href=r,n.download=i,n.style.display="none",n.rel="noopener",document.body.appendChild(n),n.click(),document.body.removeChild(n)}finally{URL.revokeObjectURL(r)}}$o(t){return t in oe&&t in gt}}class he{constructor(){l(this,"ho");l(this,"co");l(this,"lo");this.ho=new re,this.co=new ne,this.lo=new ae}uo(t){return{format:t.format??"png",quality:t.quality??1,scale:t.scale??1,backgroundColor:t.backgroundColor??"transparent",filename:t.filename||this.lo.On()}}Mo(t){if(!this.lo.$o(t.format))throw Error(`Saving '${t.format}' files is not supported`);if(t.quality<0||t.quality>1)throw Error("Image quality must be between 0.0 and 1.0");if(t.scale<=0)throw Error("Scale factor must be greater than 0");t.format==="jpg"&&t.backgroundColor==="transparent"&&(t.backgroundColor="black")}async Co(t,i){if(i.scale===1&&i.backgroundColor==="transparent")return await this.co.Co(t.canvas,i);const r=this.ho.yo(t,i.scale,i.backgroundColor);return await this.co.Co(r,i)}async bo(t,i={}){const r=this.uo(i);this.Mo(r);const n=await this.Co(t,r);this.lo.bo(n,r.filename,r.format)}}const ce=c=>class extends c{Fo(){this.xt.St(this.Ro)}toString(t={}){return this.Fo(),new dt().vo({pipeline:this.zo,grid:this.rn,font:this.Si},t)}saveStrings(t={}){this.Fo(),new dt().mo({pipeline:this.zo,grid:this.rn,font:this.Si},t)}toSVG(t={}){return this.Fo(),new ft().fo({pipeline:this.zo,grid:this.rn,font:this.Si},t)}saveSVG(t={}){this.Fo(),new ft().ao({pipeline:this.zo,grid:this.rn,font:this.Si},t)}async saveCanvas(t={}){await new he().bo(this.tr,t)}},le=c=>class extends c{async loadFont(t){return this.Si.Yi(t).then(()=>{const i=this.Si.maxGlyphDimensions;this.rn.rr(i.width,i.height),this.zo.resize(this.rn.cols,this.rn.rows),this.xt.Zs(),this.Po.An()})}fontSize(t){if(!W.v(typeof t=="number"&&t>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:t})||this.Si.fontSize===t)return;this.Si.ji(t);const i=this.Si.maxGlyphDimensions;this.rn.rr(i.width,i.height),this.zo.resize(this.rn.cols,this.rn.rows),this.xt.Zs(),this.Po.An()}glyphColor(t){return this.Si.Pi(t)}glyphColors(t){return this.Si.Ti(t)}},ue=c=>class extends c{get frameCount(){return this.To.frameCount}set frameCount(t){this.To.frameCount=t}frameRate(t){return t===void 0?this.To.currentFrameRate:this.To.frameRate(t,()=>this.So())}noLoop(){this.To.pause()}loop(){this.To.resume(()=>this.So())}redraw(t=1){if(W.v(typeof t=="number"&&t>0&&Number.isInteger(t),"Redraw count must be a positive integer.",{method:"redraw",providedValue:t}))for(let i=0;i<t;i++)this.So()}isLooping(){return this.To.isLooping}},fe=c=>class extends c{constructor(...t){super(...t)}mouseClicked(t){this.Po.Fn(t)}mousePressed(t){this.Po.jr(t)}mouseReleased(t){this.Po.Yr(t)}mouseMoved(t){this.Po.Rn(t)}mouseScrolled(t){this.Po.zn(t)}get mouse(){return this.Po.Pn()}},de=c=>class extends c{constructor(...t){super(...t)}keyPressed(t){this.Eo.jr(t)}keyReleased(t){this.Eo.Yr(t)}isKeyPressed(t){return this.Eo.qr(t)}get lastKeyPressed(){return this.Eo.Qr()}get lastKeyReleased(){return this.Eo.Jr()}get pressedKeys(){return this.Eo.tn()}get modifierState(){return this.Eo.en()}};class ge{constructor(){l(this,"xt");l(this,"Si");l(this,"tr");l(this,"rn");l(this,"To");l(this,"Po");l(this,"Eo");l(this,"Ro");l(this,"zo");l(this,"Bo");l(this,"Go");l(this,"Do")}So(){}}class pt extends function(i,...r){return r.reduce((n,o)=>o(n),i)}(ge,Zt,ce,le,ue,fe,de){constructor(i={}){super();l(this,"Lo",!1);l(this,"ko",()=>{});l(this,"Oo",()=>{});l(this,"Ho",()=>{});l(this,"Io");l(this,"ar",!1);l(this,"No");this.ar=i.overlay??!1,this.tr=new ut(i),this.xt=new Dt(this.tr.gr()),this.Si=new ct(this.xt,i.fontSize??16),this.To=new jt(i.frameRate??60),this.Po=new qt(this.tr),this.Eo=new Kt,this.Ro=this.xt.Tt(),this.Bo=this.xt.re(),this.Xo(i)}async Xo(i){await this.Si.Wi(i.fontSource);const r=this.Si.maxGlyphDimensions;this.rn=new lt(this.tr.canvas,r.width,r.height),this.Po.Wi(this.rn),this.zo=this.xt.js(this.rn.cols,this.rn.rows,5),this.Go=this.xt.js(this.rn.width,this.rn.height,1),this.ar&&(this.No=X.fromSource(this.xt,this.tr.targetCanvas,n=>this.Si.Ti(n))),this.Do=this.xt.ae(ot,"precision mediump float;uniform sampler2D Ua;uniform vec2 Ub;uniform vec2 Uc;uniform vec2 Ud;void main(){vec2 A=gl_FragCoord.xy-Uc;vec2 B=A*(Ub/Ud);vec2 C=(floor(B)+0.5)/Ub;gl_FragColor=texture2D(Ua,C);}"),this.Wo(),this.ko(),this.To.start(()=>this.So())}Wo(){this.Io=()=>{this.ar&&this.resizeCanvas(this.tr.width,this.tr.height),this.Ho()},window.addEventListener("resize",this.Io),this.Po.Xr(),this.Eo.Xr(),window.addEventListener("blur",()=>{this.Eo.sn()})}So(){if(this.To.measureFrameRate(),this.To.incrementFrame(),this.Lo)return;if(this.ar){const r=this.xt.context;r.bindTexture(r.TEXTURE_2D,this.No.texture),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,this.tr.targetCanvas),r.bindTexture(r.TEXTURE_2D,null),this.zo.begin(),this.xt.Hs(this.No,0,0,this.rn.cols,this.rn.rows),this.xt.Ds(this.Ro),this.Oo(),this.xt.St(this.Ro),this.zo.end()}else this.zo.begin(),this.xt.Ds(this.Ro),this.Oo(),this.xt.St(this.Ro),this.zo.end();this.Go.begin(),this.xt.Ds(this.Bo),this.Bo.Vt({U0:this.Si.fontFramebuffer,U1:[this.Si.textureColumns,this.Si.textureRows],U2:this.zo.textures[0],U3:this.zo.textures[1],U4:this.zo.textures[2],U5:this.zo.textures[4],U6:this.zo.textures[3],U7:[this.rn.cols,this.rn.rows],U8:[this.Go.width,this.Go.height],U9:this.Go.width/this.Go.height}),this.xt.Is(0,0,this.tr.width,this.tr.height),this.Go.end();const i=this.xt.state.canvasBackgroundColor;this.xt.Ne(i[0],i[1],i[2],i[3]),this.xt.Ds(this.Do),this.Do.Vt({Ua:this.Go.textures[0],Ub:[this.Go.width,this.Go.height],Uc:[this.rn.offsetX,this.rn.offsetY],Ud:[this.rn.width,this.rn.height]}),this.xt.Is(this.rn.offsetX,this.rn.offsetY,this.rn.width,this.rn.height)}setup(i){this.ko=i}draw(i){this.Oo=i}windowResized(i){this.Ho=i}resizeCanvas(i,r){this.tr.mr(i,r),this.rn.ir(),this.zo.resize(this.rn.cols,this.rn.rows),this.Go.resize(this.rn.width,this.rn.height),this.xt.Zs(),this.Po.An(),this.So()}destroy(){this.Lo||(this.To.stop(),window.removeEventListener("resize",this.Io),this.Po.Kr(),this.Eo.Kr(),this.Si.Gt(),this.xt.Gt(),this.Go.Gt(),this.Do.Gt(),this.No&&this.No.Gt(),this.Lo=!0)}get grid(){return this.rn}get font(){return this.Si}get width(){return this.tr.width}get height(){return this.tr.height}get canvas(){return this.tr.canvas}get isDisposed(){return this.Lo}get overlay(){return this.No}}class ${constructor(){}static create(t={}){return new pt(t)}static setErrorLevel(t){W.A(t)}static get version(){return"0.2.1-beta.5"}}const pe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),me=$.create,ve=$.setErrorLevel,Ae=$.version;C.TextmodeCanvas=ut,C.TextmodeErrorLevel=_,C.TextmodeFont=ct,C.TextmodeFramebuffer=j,C.TextmodeGrid=lt,C.TextmodeImage=X,C.Textmodifier=pt,C.create=me,C.export=pe,C.setErrorLevel=ve,C.textmode=$,C.version=Ae,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})},typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):s((e=typeof globalThis<"u"?globalThis:e||self).textmode={});
|