textmode.js 0.1.6-beta.5 → 0.1.6-beta.7

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.
Files changed (48) hide show
  1. package/dist/textmode.esm.js +1871 -0
  2. package/dist/textmode.esm.min.js +1870 -0
  3. package/dist/textmode.umd.js +64 -0
  4. package/dist/textmode.umd.min.js +63 -0
  5. package/dist/types/ColorPalette.d.ts +1 -5
  6. package/dist/types/Textmode.d.ts +0 -10
  7. package/dist/types/errors/Error.d.ts +3 -5
  8. package/dist/types/errors/ErrorHandler.d.ts +3 -3
  9. package/dist/types/export/base/DataExtractor.d.ts +3 -3
  10. package/dist/types/export/base/FileHandler.d.ts +6 -6
  11. package/dist/types/export/image/ImageContentGenerator.d.ts +3 -3
  12. package/dist/types/export/image/ImageDataExtractor.d.ts +2 -2
  13. package/dist/types/export/image/ImageExporter.d.ts +9 -9
  14. package/dist/types/export/image/ImageFileHandler.d.ts +3 -21
  15. package/dist/types/export/svg/SVGContentGenerator.d.ts +12 -12
  16. package/dist/types/export/svg/SVGDataExtractor.d.ts +4 -4
  17. package/dist/types/export/svg/SVGExporter.d.ts +6 -6
  18. package/dist/types/export/svg/SVGFileHandler.d.ts +3 -3
  19. package/dist/types/export/svg/SVGPathGenerator.d.ts +5 -11
  20. package/dist/types/export/txt/TXTContentGenerator.d.ts +1 -1
  21. package/dist/types/export/txt/TXTDataExtractor.d.ts +2 -2
  22. package/dist/types/export/txt/TXTExporter.d.ts +6 -6
  23. package/dist/types/export/txt/TXTFileHandler.d.ts +2 -2
  24. package/dist/types/index.d.ts +0 -1
  25. package/dist/types/rendering/webgl/Framebuffer.d.ts +8 -8
  26. package/dist/types/rendering/webgl/Renderer.d.ts +35 -35
  27. package/dist/types/rendering/webgl/Shader.d.ts +14 -14
  28. package/dist/types/rendering/webgl/geometries/BaseGeometry.d.ts +10 -10
  29. package/dist/types/rendering/webgl/geometries/Line.d.ts +1 -1
  30. package/dist/types/rendering/webgl/geometries/Rectangle.d.ts +2 -2
  31. package/dist/types/textmode/Canvas.d.ts +9 -18
  32. package/dist/types/textmode/ConversionPipeline.d.ts +31 -20
  33. package/dist/types/textmode/Grid.d.ts +7 -12
  34. package/dist/types/textmode/Textmodifier.d.ts +18 -40
  35. package/dist/types/textmode/converters/BrightnessConverter.d.ts +8 -8
  36. package/dist/types/textmode/converters/Converter.d.ts +5 -5
  37. package/dist/types/textmode/converters/FeatureConverter.d.ts +27 -3
  38. package/dist/types/textmode/font/TextmodeFont.d.ts +8 -8
  39. package/dist/types/textmode/mixins/ConversionMixin.d.ts +63 -0
  40. package/dist/types/textmode/mixins/ExportMixin.d.ts +112 -1
  41. package/dist/types/textmode/mixins/FontMixin.d.ts +1 -1
  42. package/dist/types/textmode/mixins/RenderingMixin.d.ts +304 -1
  43. package/dist/types/textmode/mixins/{MixinBase.d.ts → TextmodifierMixin.d.ts} +4 -4
  44. package/dist/types/textmode/mixins/index.d.ts +2 -1
  45. package/package.json +16 -2
  46. package/dist/textmode.js +0 -26
  47. package/dist/textmode.min.js +0 -25
  48. package/dist/types/types/index.d.ts +0 -4
@@ -0,0 +1,1871 @@
1
+ var Z = Object.defineProperty;
2
+ var q = (E, A, t) => A in E ? Z(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
3
+ var Q = (E, A, t) => q(E, typeof A != "symbol" ? A + "" : A, t);
4
+ class I extends Error {
5
+ constructor(A, t = {}) {
6
+ super(I.A(A, t)), this.name = "TextmodeError";
7
+ }
8
+ static A(A, t) {
9
+ let e = A;
10
+ if (t && Object.keys(t).length > 0) {
11
+ e += `
12
+
13
+ 📋 Context:`;
14
+ for (const [r, B] of Object.entries(t))
15
+ e += `
16
+ - ${r}: ${I.i(B)}`;
17
+ }
18
+ return e += `
19
+
20
+ `, e += "↓".repeat(24) + `
21
+ `, e;
22
+ }
23
+ static i(A) {
24
+ if (A === null) return "null";
25
+ if (A === void 0) return "undefined";
26
+ if (typeof A == "string") return `"${A}"`;
27
+ if (typeof A == "number" || typeof A == "boolean") return A + "";
28
+ if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => I.i(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => I.i(t)).join(", ")}, ... +${A.length - 3} more]`;
29
+ if (typeof A == "object") {
30
+ const t = Object.keys(A);
31
+ return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${I.i(A[e])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((e) => `${e}: ${I.i(A[e])}`).join(", ")}, ... +${t.length - 2} more }`;
32
+ }
33
+ return A + "";
34
+ }
35
+ }
36
+ var AA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(AA || {});
37
+ const x = class x {
38
+ constructor() {
39
+ Q(this, "h", { globalLevel: 3 });
40
+ }
41
+ static D() {
42
+ return x.o || (x.o = new x()), x.o;
43
+ }
44
+ l(A, t) {
45
+ const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", r = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
46
+ switch (this.h.globalLevel) {
47
+ case 0:
48
+ return !1;
49
+ case 1:
50
+ return console.group(e, r), console.warn(I.A(A, t)), console.groupEnd(), !1;
51
+ case 2:
52
+ return console.group(e, r), console.error(I.A(A, t)), console.groupEnd(), !1;
53
+ default:
54
+ throw new I(A, t);
55
+ }
56
+ }
57
+ C(A, t, e) {
58
+ return !!A || (this.l(t, e), !1);
59
+ }
60
+ u(A) {
61
+ this.h.globalLevel = A;
62
+ }
63
+ };
64
+ Q(x, "o", null);
65
+ let U = x;
66
+ const P = U.D(), N = /* @__PURE__ */ new WeakMap();
67
+ function F(E, A) {
68
+ N.set(E, A);
69
+ }
70
+ function V(E) {
71
+ return N.get(E);
72
+ }
73
+ class K {
74
+ constructor(A, t, e = t, r = {}) {
75
+ Q(this, "P");
76
+ Q(this, "I");
77
+ Q(this, "m");
78
+ Q(this, "p");
79
+ Q(this, "_");
80
+ Q(this, "h");
81
+ Q(this, "v", null);
82
+ Q(this, "M", null);
83
+ this.P = A, this.p = t, this._ = e, this.h = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...r }, this.m = this.G(), this.I = A.createFramebuffer(), this.F();
84
+ }
85
+ Y(A) {
86
+ const { P: t } = this, e = t.getParameter(t.FRAMEBUFFER_BINDING);
87
+ t.bindFramebuffer(t.FRAMEBUFFER, this.I);
88
+ try {
89
+ return A();
90
+ } finally {
91
+ t.bindFramebuffer(t.FRAMEBUFFER, e);
92
+ }
93
+ }
94
+ G() {
95
+ const { P: A } = this, t = A.createTexture();
96
+ A.bindTexture(A.TEXTURE_2D, t);
97
+ const e = this.h.filter === "linear" ? A.LINEAR : A.NEAREST, r = this.h.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE;
98
+ return A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, r), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, r), this.$(), t;
99
+ }
100
+ $() {
101
+ const { P: A } = this, t = this.h.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
102
+ A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.p, this._, 0, A.RGBA, t, null);
103
+ }
104
+ F() {
105
+ const { P: A } = this;
106
+ A.bindFramebuffer(A.FRAMEBUFFER, this.I), A.framebufferTexture2D(A.FRAMEBUFFER, A.COLOR_ATTACHMENT0, A.TEXTURE_2D, this.m, 0), A.bindFramebuffer(A.FRAMEBUFFER, null);
107
+ }
108
+ update(A) {
109
+ const { P: t } = this;
110
+ t.bindTexture(t.TEXTURE_2D, this.m), t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, 1), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, A), t.bindTexture(t.TEXTURE_2D, null);
111
+ }
112
+ updatePixels(A, t, e) {
113
+ const { P: r } = this;
114
+ r.bindTexture(r.TEXTURE_2D, this.m), r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, t, e, 0, r.RGBA, r.UNSIGNED_BYTE, A), r.bindTexture(r.TEXTURE_2D, null);
115
+ }
116
+ resize(A, t) {
117
+ const { P: e } = this;
118
+ this.p = A, this._ = t, this.M = null, e.bindTexture(e.TEXTURE_2D, this.m), this.$(), e.bindTexture(e.TEXTURE_2D, null);
119
+ }
120
+ begin() {
121
+ const { P: A } = this;
122
+ this.v = { framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING), viewport: A.getParameter(A.VIEWPORT) }, A.bindFramebuffer(A.FRAMEBUFFER, this.I), A.viewport(0, 0, this.p, this._), F(A, [0, 0, this.p, this._]);
123
+ }
124
+ end() {
125
+ if (!this.v) return;
126
+ const { P: A } = this;
127
+ A.bindFramebuffer(A.FRAMEBUFFER, this.v.framebuffer), A.viewport(...this.v.viewport), F(A, this.v.viewport), this.v = null;
128
+ }
129
+ loadPixels() {
130
+ const { P: A } = this;
131
+ this.M || (this.M = new Uint8Array(this.p * this._ * 4)), this.Y(() => {
132
+ A.readPixels(0, 0, this.p, this._, A.RGBA, A.UNSIGNED_BYTE, this.M);
133
+ });
134
+ }
135
+ get(A, t, e, r) {
136
+ const { P: B } = this;
137
+ if (A === void 0 && t === void 0) {
138
+ const s = new Uint8Array(this.p * this._ * 4);
139
+ return this.Y(() => (B.readPixels(0, 0, this.p, this._, B.RGBA, B.UNSIGNED_BYTE, s), s));
140
+ }
141
+ if (e === void 0 && r === void 0) {
142
+ (A < 0 || t < 0 || A >= this.p || t >= this._) && (console.warn("The x and y values passed to Framebuffer.get are outside of its range and will be clamped."), A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)));
143
+ const s = new Uint8Array(4);
144
+ return this.Y(() => (B.readPixels(A, t, 1, 1, B.RGBA, B.UNSIGNED_BYTE, s), [s[0], s[1], s[2], s[3]]));
145
+ }
146
+ {
147
+ A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)), e = Math.max(1, Math.min(e, this.p - A)), r = Math.max(1, Math.min(r, this._ - t));
148
+ const s = new Uint8Array(e * r * 4);
149
+ return this.Y(() => (B.readPixels(A, t, e, r, B.RGBA, B.UNSIGNED_BYTE, s), s));
150
+ }
151
+ }
152
+ S() {
153
+ this.I && this.P.deleteFramebuffer(this.I), this.m && this.P.deleteTexture(this.m);
154
+ }
155
+ get framebuffer() {
156
+ return this.I;
157
+ }
158
+ get texture() {
159
+ return this.m;
160
+ }
161
+ get width() {
162
+ return this.p;
163
+ }
164
+ get height() {
165
+ return this._;
166
+ }
167
+ get pixels() {
168
+ return this.M;
169
+ }
170
+ }
171
+ class w {
172
+ constructor(A, t, e) {
173
+ Q(this, "P");
174
+ Q(this, "O");
175
+ Q(this, "U", /* @__PURE__ */ new Map());
176
+ Q(this, "k", /* @__PURE__ */ new Map());
177
+ Q(this, "V", 0);
178
+ Q(this, "R");
179
+ this.P = A, this.O = this.H(t, e), this.R = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.J();
180
+ }
181
+ J() {
182
+ const A = this.P.getProgramParameter(this.O, this.P.ACTIVE_UNIFORMS);
183
+ for (let t = 0; t < A; t++) {
184
+ const e = this.P.getActiveUniform(this.O, t);
185
+ if (e) {
186
+ const r = this.P.getUniformLocation(this.O, e.name);
187
+ r && (this.U.set(e.name, r), this.k.set(e.name, e.type));
188
+ }
189
+ }
190
+ }
191
+ H(A, t) {
192
+ const e = this.L(this.P.VERTEX_SHADER, A), r = this.L(this.P.FRAGMENT_SHADER, t), B = this.P.createProgram();
193
+ if (this.P.attachShader(B, e), this.P.attachShader(B, r), this.P.linkProgram(B), !this.P.getProgramParameter(B, this.P.LINK_STATUS)) {
194
+ const s = this.P.getProgramInfoLog(B);
195
+ throw Error("Shader program link error: " + s);
196
+ }
197
+ return this.P.deleteShader(e), this.P.deleteShader(r), B;
198
+ }
199
+ L(A, t) {
200
+ const e = this.P.createShader(A);
201
+ if (this.P.shaderSource(e, t), this.P.compileShader(e), !this.P.getShaderParameter(e, this.P.COMPILE_STATUS)) {
202
+ const r = this.P.getShaderInfoLog(e);
203
+ throw this.P.deleteShader(e), Error("Shader compilation error: " + r);
204
+ }
205
+ return e;
206
+ }
207
+ K() {
208
+ this.P.useProgram(this.O), this.W();
209
+ }
210
+ setUniform(A, t) {
211
+ const e = this.U.get(A);
212
+ if (e) if (typeof t == "number")
213
+ this.j(A) ? this.P.uniform1i(e, Math.floor(t)) : this.P.uniform1f(e, t);
214
+ else if (typeof t == "boolean") this.P.uniform1i(e, t ? 1 : 0);
215
+ else if (Array.isArray(t)) switch (t.length) {
216
+ case 2:
217
+ this.P.uniform2f(e, t[0], t[1]);
218
+ break;
219
+ case 3:
220
+ this.P.uniform3f(e, t[0], t[1], t[2]);
221
+ break;
222
+ case 4:
223
+ this.P.uniform4f(e, t[0], t[1], t[2], t[3]);
224
+ break;
225
+ default:
226
+ console.warn(`Unsupported array length ${t.length} for uniform '${A}'`);
227
+ }
228
+ else if (t instanceof WebGLTexture) {
229
+ const r = this.Z();
230
+ this.P.uniform1i(e, r), this.P.activeTexture(this.P.TEXTURE0 + r), this.P.bindTexture(this.P.TEXTURE_2D, t);
231
+ } else if (t instanceof K) {
232
+ const r = this.Z();
233
+ this.P.uniform1i(e, r), this.P.activeTexture(this.P.TEXTURE0 + r), this.P.bindTexture(this.P.TEXTURE_2D, t.texture);
234
+ } else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
235
+ }
236
+ Z() {
237
+ return this.V >= this.R && console.warn(`Exceeded maximum texture units (${this.R}). Texture may not render correctly.`), this.V++;
238
+ }
239
+ j(A) {
240
+ const t = this.k.get(A);
241
+ return !!t && (t === this.P.INT || t === this.P.INT_VEC2 || t === this.P.INT_VEC3 || t === this.P.INT_VEC4 || t === this.P.SAMPLER_2D || t === this.P.SAMPLER_CUBE);
242
+ }
243
+ get glProgram() {
244
+ return this.O;
245
+ }
246
+ S() {
247
+ this.P.deleteProgram(this.O);
248
+ }
249
+ W() {
250
+ this.V = 0;
251
+ }
252
+ }
253
+ class X {
254
+ constructor(A) {
255
+ Q(this, "P");
256
+ Q(this, "N", null);
257
+ Q(this, "X", 16);
258
+ Q(this, "q", /* @__PURE__ */ new Map());
259
+ this.P = A;
260
+ }
261
+ AA() {
262
+ if (this.N) return;
263
+ const A = this.P;
264
+ this.N = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.N);
265
+ }
266
+ tA() {
267
+ const A = this.P, t = A.getParameter(A.CURRENT_PROGRAM);
268
+ let e = this.q.get(t);
269
+ return e || (e = { a_position: A.getAttribLocation(t, "a_position"), a_texCoord: A.getAttribLocation(t, "a_texCoord") }, this.q.set(t, e)), A.enableVertexAttribArray(e.a_position), A.vertexAttribPointer(e.a_position, 2, A.FLOAT, !1, this.X, 0), A.enableVertexAttribArray(e.a_texCoord), A.vertexAttribPointer(e.a_texCoord, 2, A.FLOAT, !1, this.X, 8), { positionLoc: e.a_position, texLoc: e.a_texCoord };
270
+ }
271
+ eA(A, t) {
272
+ const e = this.P;
273
+ e.disableVertexAttribArray(A), e.disableVertexAttribArray(t);
274
+ }
275
+ BA(A, t) {
276
+ const e = this.P, r = V(e) || [0, 0, e.canvas.width, e.canvas.height];
277
+ return { nx: A / r[2] * 2 - 1, ny: 1 - t / r[3] * 2 };
278
+ }
279
+ QA(A, t, e, r) {
280
+ const B = this.P;
281
+ this.AA(), B.bindBuffer(B.ARRAY_BUFFER, this.N);
282
+ const s = new Float32Array([A, r, 0, 0, e, r, 1, 0, A, t, 0, 1, A, t, 0, 1, e, r, 1, 0, e, t, 1, 1]);
283
+ B.bufferData(B.ARRAY_BUFFER, s, B.DYNAMIC_DRAW);
284
+ }
285
+ S() {
286
+ this.N && this.P.deleteBuffer(this.N);
287
+ }
288
+ }
289
+ class tA extends X {
290
+ constructor(A) {
291
+ super(A);
292
+ }
293
+ sA(A, t, e, r) {
294
+ const B = this.BA(A, t), s = this.BA(A + e, t + r);
295
+ this.QA(B.nx, B.ny, s.nx, s.ny);
296
+ const i = this.tA();
297
+ this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(i.positionLoc, i.texLoc);
298
+ }
299
+ rA(A, t, e, r, B) {
300
+ this.sA(A, t, e, B), this.sA(A + e - B, t, B, r), this.sA(A, t + r - B, e, B), this.sA(A, t, B, r);
301
+ }
302
+ }
303
+ class eA extends X {
304
+ constructor(A) {
305
+ super(A);
306
+ }
307
+ iA(A, t, e, r, B) {
308
+ const s = e - A, i = r - t, o = Math.hypot(s, i);
309
+ if (o === 0) {
310
+ const n = B / 2, a = this.BA(A - n, t - n), h = this.BA(A + n, t + n);
311
+ this.QA(a.nx, a.ny, h.nx, h.ny);
312
+ } else {
313
+ const n = -i / o, a = s / o, h = B / 2, C = A + n * h, D = t + a * h, c = A - n * h, u = t - a * h, f = e + n * h, d = r + a * h, m = e - n * h, p = r - a * h, M = this.BA(C, D), v = this.BA(c, u), b = this.BA(f, d), z = this.BA(m, p), y = this.P;
314
+ this.AA(), y.bindBuffer(y.ARRAY_BUFFER, this.N);
315
+ const j = new Float32Array([M.nx, M.ny, 0, 0, v.nx, v.ny, 0, 1, b.nx, b.ny, 1, 0, v.nx, v.ny, 0, 1, z.nx, z.ny, 1, 1, b.nx, b.ny, 1, 0]);
316
+ y.bufferData(y.ARRAY_BUFFER, j, y.DYNAMIC_DRAW);
317
+ }
318
+ const g = this.tA();
319
+ this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(g.positionLoc, g.texLoc);
320
+ }
321
+ }
322
+ var R = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;uniform float u_rotation;uniform vec2 u_center;uniform float u_aspectRatio;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){v_uv=a_texCoord;vec2 pos=a_position;pos-=u_center;pos.x*=u_aspectRatio;pos=rotate2D(-u_rotation)*pos;pos.x/=u_aspectRatio;pos+=u_center;gl_Position=vec4(pos,0.0,1.0);}";
323
+ class rA {
324
+ constructor(A) {
325
+ Q(this, "P");
326
+ Q(this, "EA");
327
+ Q(this, "gA");
328
+ Q(this, "oA", null);
329
+ Q(this, "nA");
330
+ Q(this, "aA");
331
+ Q(this, "hA", [1, 1, 1, 1]);
332
+ Q(this, "DA", !0);
333
+ Q(this, "lA", [0, 0, 0, 1]);
334
+ Q(this, "CA", 1);
335
+ Q(this, "cA", !0);
336
+ Q(this, "uA", 0);
337
+ Q(this, "PA", []);
338
+ this.P = A, this.EA = new w(this.P, R, "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"), this.gA = new w(this.P, R, "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}"), this.nA = new tA(this.P), this.aA = new eA(this.P), this.P.enable(this.P.BLEND), this.P.blendEquation(this.P.FUNC_ADD), this.P.blendFunc(this.P.ONE, this.P.ONE_MINUS_SRC_ALPHA), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
339
+ }
340
+ IA(A) {
341
+ this.oA !== A && (this.oA = A, A.K());
342
+ }
343
+ wA(A, t, e, r) {
344
+ if (this.DA = !0, t === void 0 && e === void 0 && r === void 0) {
345
+ const B = A / 255;
346
+ this.hA = [B, B, B, 1];
347
+ } else if (e !== void 0 && r === void 0) this.hA = [A / 255, t / 255, e / 255, 1];
348
+ else {
349
+ if (e === void 0 || r === void 0) throw Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");
350
+ this.hA = [A / 255, t / 255, e / 255, r / 255];
351
+ }
352
+ }
353
+ fA(A, t, e, r) {
354
+ if (this.cA = !0, t === void 0 && e === void 0 && r === void 0) {
355
+ const B = A / 255;
356
+ this.lA = [B, B, B, 1];
357
+ } else if (e !== void 0 && r === void 0) this.lA = [A / 255, t / 255, e / 255, 1];
358
+ else {
359
+ if (e === void 0 || r === void 0) throw Error("Invalid stroke parameters. Use stroke(gray), stroke(r,g,b), or stroke(r,g,b,a)");
360
+ this.lA = [A / 255, t / 255, e / 255, r / 255];
361
+ }
362
+ }
363
+ dA(A) {
364
+ if (A < 0) throw Error("Stroke weight must be non-negative");
365
+ this.CA = A;
366
+ }
367
+ mA() {
368
+ this.cA = !1;
369
+ }
370
+ pA() {
371
+ this.DA = !1;
372
+ }
373
+ _A(A) {
374
+ this.uA = A;
375
+ }
376
+ vA() {
377
+ this.PA.push({ fillColor: [...this.hA], fillMode: this.DA, strokeColor: [...this.lA], strokeWeight: this.CA, strokeMode: this.cA, rotation: this.uA });
378
+ }
379
+ bA() {
380
+ const A = this.PA.pop();
381
+ A ? (this.hA = A.fillColor, this.DA = A.fillMode, this.lA = A.strokeColor, this.CA = A.strokeWeight, this.cA = A.strokeMode, this.uA = A.rotation) : console.warn("pop() called without matching push()");
382
+ }
383
+ xA() {
384
+ this.oA = null, this.PA = [], this.uA = 0;
385
+ }
386
+ yA(A, t) {
387
+ return new w(this.P, A, t);
388
+ }
389
+ MA(A) {
390
+ return new w(this.P, R, A);
391
+ }
392
+ GA(A, t) {
393
+ this.oA.setUniform(A, t);
394
+ }
395
+ FA(A, t, e, r) {
396
+ if (this.oA !== null) {
397
+ const { centerX: a, centerY: h, radians: C, aspectRatio: D } = this.YA(A, t, e, r);
398
+ return this.GA("u_rotation", C), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", D), this.nA.sA(A, t, e, r), void (this.oA = null);
399
+ }
400
+ const B = this.gA;
401
+ let s = 0, i = 0, o = 0, g = 1;
402
+ const n = this.YA(A, t, e, r);
403
+ s = n.centerX, i = n.centerY, o = n.radians, g = n.aspectRatio, this.DA && (this.IA(B), this.GA("u_color", this.hA), this.GA("u_rotation", o), this.GA("u_center", [s, i]), this.GA("u_aspectRatio", g), this.nA.sA(A, t, e, r)), this.cA && this.CA > 0 && (this.IA(B), this.GA("u_color", this.lA), this.GA("u_rotation", o), this.GA("u_center", [s, i]), this.GA("u_aspectRatio", g), this.nA.rA(A, t, e, r, this.CA)), this.oA = null;
404
+ }
405
+ $A(A, t, e, r) {
406
+ if (this.oA !== null) {
407
+ const c = (A + e) / 2, u = (t + r) / 2, f = Math.abs(e - A) || 1, d = Math.abs(r - t) || 1, { centerX: m, centerY: p, radians: M, aspectRatio: v } = this.YA(c - f / 2, u - d / 2, f, d);
408
+ this.GA("u_rotation", M), this.GA("u_center", [m, p]), this.GA("u_aspectRatio", v);
409
+ const b = this.CA > 0 ? this.CA : 1;
410
+ return this.aA.iA(A, t, e, r, b), void (this.oA = null);
411
+ }
412
+ if (!this.cA || this.CA <= 0) return;
413
+ const B = this.gA, s = (A + e) / 2, i = (t + r) / 2, o = Math.abs(e - A) || 1, g = Math.abs(r - t) || 1, n = this.uA !== 0;
414
+ let a = 0, h = 0, C = 0, D = 1;
415
+ if (n) {
416
+ const c = this.YA(s - o / 2, i - g / 2, o, g);
417
+ a = c.centerX, h = c.centerY, C = c.radians, D = c.aspectRatio;
418
+ }
419
+ this.IA(B), this.GA("u_color", this.lA), n && (this.GA("u_rotation", C), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", D)), this.aA.iA(A, t, e, r, this.CA);
420
+ }
421
+ YA(A, t, e, r) {
422
+ const B = V(this.P) || [0, 0, this.P.canvas.width, this.P.canvas.height], s = B[2], i = B[3], o = s / i;
423
+ return { centerX: (A + e / 2) / s * 2 - 1, centerY: 1 - (t + r / 2) / i * 2, radians: this.uA * Math.PI / 180, aspectRatio: o };
424
+ }
425
+ TA(A, t, e = {}) {
426
+ return new K(this.P, A, t, e);
427
+ }
428
+ SA(A, t = A, e = A, r = 255) {
429
+ this.OA(A / 255, t / 255, e / 255, r / 255);
430
+ }
431
+ OA(A = 0, t = 0, e = 0, r = 0) {
432
+ this.P.clearColor(A, t, e, r), this.P.clear(this.P.COLOR_BUFFER_BIT);
433
+ }
434
+ UA() {
435
+ this.P.viewport(0, 0, this.P.canvas.width, this.P.canvas.height), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
436
+ }
437
+ get context() {
438
+ return this.P;
439
+ }
440
+ S() {
441
+ this.EA.S(), this.gA.S(), this.nA.S(), this.aA.S();
442
+ }
443
+ kA(A, t, e, r, B) {
444
+ const s = this.P, i = r ?? A.width, o = B ?? A.height;
445
+ this.IA(this.EA), this.GA("u_texture", A.texture);
446
+ const g = this.YA(t, e, i, o);
447
+ this.GA("u_rotation", g.radians), this.GA("u_center", [g.centerX, g.centerY]), this.GA("u_aspectRatio", g.aspectRatio), this.nA.sA(t, e, i, o), s.bindTexture(s.TEXTURE_2D, null), this.oA = null;
448
+ }
449
+ }
450
+ var _, l = {};
451
+ l.parse = function(E) {
452
+ var A = function(t, e, r, B) {
453
+ var s = l.T, i = { cmap: s.cmap, head: s.head, hhea: s.hhea, maxp: s.maxp, hmtx: s.hmtx, loca: s.loca, glyf: s.glyf }, o = { _data: t, _index: e, _offset: r };
454
+ for (var g in i) {
455
+ var n = l.findTable(t, g, r);
456
+ if (n) {
457
+ var a = n[0], h = B[a];
458
+ h == null && (h = i[g].parseTab(t, a, n[1], o)), o[g] = B[a] = h;
459
+ }
460
+ }
461
+ return o;
462
+ }(new Uint8Array(E), 0, 0, {});
463
+ return [A];
464
+ }, l.findTable = function(E, A, t) {
465
+ for (var e = l.B, r = e.readUshort(E, t + 4), B = t + 12, s = 0; s < r; s++) {
466
+ var i = e.readASCII(E, B, 4);
467
+ e.readUint(E, B + 4);
468
+ var o = e.readUint(E, B + 8), g = e.readUint(E, B + 12);
469
+ if (i == A) return [o, g];
470
+ B += 16;
471
+ }
472
+ return null;
473
+ }, l.T = {}, l.B = { readShort: function(E, A) {
474
+ return l.B.t.uint16[0] = E[A] << 8 | E[A + 1], l.B.t.int16[0];
475
+ }, readUshort: function(E, A) {
476
+ return E[A] << 8 | E[A + 1];
477
+ }, readUshorts: function(E, A, t) {
478
+ for (var e = [], r = 0; r < t; r++) e.push(l.B.readUshort(E, A + 2 * r));
479
+ return e;
480
+ }, readUint: function(E, A) {
481
+ var t = l.B.t.uint8;
482
+ return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], l.B.t.uint32[0];
483
+ }, readASCII: function(E, A, t) {
484
+ for (var e = "", r = 0; r < t; r++) e += String.fromCharCode(E[A + r]);
485
+ return e;
486
+ }, t: (_ = new ArrayBuffer(8), { uint8: new Uint8Array(_), int16: new Int16Array(_), uint16: new Uint16Array(_), uint32: new Uint32Array(_) }) }, l.T.cmap = { parseTab: function(E, A, t) {
487
+ var e = { tables: [], ids: {}, off: A };
488
+ E = new Uint8Array(E.buffer, A, t), A = 0;
489
+ var r = l.B, B = r.readUshort, s = l.T.cmap;
490
+ B(E, A);
491
+ var i = B(E, A += 2);
492
+ A += 2;
493
+ for (var o = [], g = 0; g < i; g++) {
494
+ var n = B(E, A), a = B(E, A += 2);
495
+ A += 2;
496
+ var h = r.readUint(E, A);
497
+ A += 4;
498
+ var C = "p" + n + "e" + a, D = o.indexOf(h);
499
+ if (D == -1) {
500
+ D = e.tables.length;
501
+ var c = {};
502
+ o.push(h);
503
+ var u = c.format = B(E, h);
504
+ u == 4 ? c = s.parse4(E, h, c) : u == 12 && (c = s.parse12(E, h, c)), e.tables.push(c);
505
+ }
506
+ e.ids[C] != null && console.log("multiple tables for one platform+encoding: " + C), e.ids[C] = D;
507
+ }
508
+ return e;
509
+ }, parse4: function(E, A, t) {
510
+ var e = l.B, r = e.readUshort, B = e.readUshorts, s = A, i = r(E, A += 2);
511
+ r(E, A += 2);
512
+ var o = r(E, A += 2);
513
+ A += 2;
514
+ var g = o >>> 1;
515
+ t.searchRange = r(E, A), A += 2, t.entrySelector = r(E, A), A += 2, t.rangeShift = r(E, A), A += 2, t.endCount = B(E, A, g), A += 2 * g, A += 2, t.startCount = B(E, A, g), A += 2 * g, t.idDelta = [];
516
+ for (var n = 0; n < g; n++) t.idDelta.push(e.readShort(E, A)), A += 2;
517
+ return t.idRangeOffset = B(E, A, g), A += 2 * g, t.glyphIdArray = B(E, A, s + i - A >> 1), t;
518
+ }, parse12: function(E, A, t) {
519
+ var e = l.B.readUint;
520
+ e(E, A += 4), e(E, A += 4);
521
+ var r = 3 * e(E, A += 4);
522
+ A += 4;
523
+ for (var B = t.groups = new Uint32Array(r), s = 0; s < r; s += 3) B[s] = e(E, A + (s << 2)), B[s + 1] = e(E, A + (s << 2) + 4), B[s + 2] = e(E, A + (s << 2) + 8);
524
+ return t;
525
+ } }, l.T.head = { parseTab: function(E, A, t) {
526
+ var e = l.B, r = {};
527
+ return A += 18, r.unitsPerEm = e.readUshort(E, A), A += 2, A += 16, r.xMin = e.readShort(E, A), A += 2, r.yMin = e.readShort(E, A), A += 2, r.xMax = e.readShort(E, A), A += 2, r.yMax = e.readShort(E, A), A += 2, A += 6, r.indexToLocFormat = e.readShort(E, A), r;
528
+ } }, l.T.hhea = { parseTab: function(E, A, t) {
529
+ var e = l.B, r = {};
530
+ A += 4;
531
+ for (var B = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], s = 0; s < B.length; s++) {
532
+ var i = B[s], o = i == "advanceWidthMax" || i == "numberOfHMetrics" ? e.readUshort : e.readShort;
533
+ r[i] = o(E, A + 2 * s);
534
+ }
535
+ return r;
536
+ } }, l.T.hmtx = { parseTab: function(E, A, t, e) {
537
+ for (var r = l.B, B = [], s = [], i = e.maxp.numGlyphs, o = e.hhea.numberOfHMetrics, g = 0, n = 0, a = 0; a < o; ) g = r.readUshort(E, A + (a << 2)), n = r.readShort(E, A + (a << 2) + 2), B.push(g), s.push(n), a++;
538
+ for (; a < i; ) B.push(g), s.push(n), a++;
539
+ return { aWidth: B, lsBearing: s };
540
+ } }, l.T.maxp = { parseTab: function(E, A, t) {
541
+ var e = l.B, r = e.readUshort, B = {};
542
+ return e.readUint(E, A), A += 4, B.numGlyphs = r(E, A), A += 2, B;
543
+ } }, l.T.loca = { parseTab: function(E, A, t, e) {
544
+ var r = l.B, B = [], s = e.head.indexToLocFormat, i = e.maxp.numGlyphs + 1;
545
+ if (s == 0) for (var o = 0; o < i; o++) B.push(r.readUshort(E, A + (o << 1)) << 1);
546
+ if (s == 1) for (o = 0; o < i; o++) B.push(r.readUint(E, A + (o << 2)));
547
+ return B;
548
+ } }, l.T.glyf = { parseTab: function(E, A, t, e) {
549
+ for (var r = [], B = e.maxp.numGlyphs, s = 0; s < B; s++) r.push(null);
550
+ return r;
551
+ }, VA: function(E, A) {
552
+ var t = l.B, e = E._data, r = E.loca;
553
+ if (r[A] == r[A + 1]) return null;
554
+ var B = l.findTable(e, "glyf", E._offset)[0] + r[A], s = {};
555
+ if (s.noc = t.readShort(e, B), B += 2, s.xMin = t.readShort(e, B), B += 2, s.yMin = t.readShort(e, B), B += 2, s.xMax = t.readShort(e, B), B += 2, s.yMax = t.readShort(e, B), B += 2, s.xMin >= s.xMax || s.yMin >= s.yMax) return null;
556
+ if (s.noc > 0) {
557
+ s.endPts = [];
558
+ for (var i = 0; i < s.noc; i++) s.endPts.push(t.readUshort(e, B)), B += 2;
559
+ var o = t.readUshort(e, B);
560
+ if (B += 2, e.length - B < o) return null;
561
+ B += o;
562
+ var g = s.endPts[s.noc - 1] + 1;
563
+ for (s.flags = [], i = 0; i < g; i++) {
564
+ var n = e[B];
565
+ if (B++, s.flags.push(n), 8 & n) {
566
+ var a = e[B];
567
+ B++;
568
+ for (var h = 0; h < a; h++) s.flags.push(n), i++;
569
+ }
570
+ }
571
+ for (s.xs = [], i = 0; i < g; i++) {
572
+ var C = !!(2 & s.flags[i]), D = !!(16 & s.flags[i]);
573
+ C ? (s.xs.push(D ? e[B] : -e[B]), B++) : D ? s.xs.push(0) : (s.xs.push(t.readShort(e, B)), B += 2);
574
+ }
575
+ for (s.ys = [], i = 0; i < g; i++)
576
+ C = !!(4 & s.flags[i]), D = !!(32 & s.flags[i]), C ? (s.ys.push(D ? e[B] : -e[B]), B++) : D ? s.ys.push(0) : (s.ys.push(t.readShort(e, B)), B += 2);
577
+ var c = 0, u = 0;
578
+ for (i = 0; i < g; i++) c += s.xs[i], u += s.ys[i], s.xs[i] = c, s.ys[i] = u;
579
+ } else s.parts = [];
580
+ return s;
581
+ } }, typeof module < "u" && module.exports ? module.exports = l : typeof window < "u" && (window.Typr = l);
582
+ class BA {
583
+ extractCharacters(A) {
584
+ var e;
585
+ const t = [];
586
+ return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((r) => {
587
+ if (r.format === 4) {
588
+ const B = this.RA(r);
589
+ t.push(...B);
590
+ } else if (r.format === 12) {
591
+ const B = this.HA(r);
592
+ t.push(...B);
593
+ }
594
+ }), [...new Set(t)]) : [];
595
+ }
596
+ RA(A) {
597
+ const t = [];
598
+ if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
599
+ for (let e = 0; e < A.startCount.length; e++) {
600
+ const r = A.startCount[e], B = A.endCount[e];
601
+ if (r !== 65535 || B !== 65535) {
602
+ for (let s = r; s <= B; s++)
603
+ if (this.zA(A, s, e) > 0) {
604
+ const i = String.fromCodePoint(s);
605
+ t.push(i);
606
+ }
607
+ }
608
+ }
609
+ return t;
610
+ }
611
+ HA(A) {
612
+ const t = [];
613
+ if (!A.groups) return t;
614
+ for (let e = 0; e < A.groups.length; e += 3) {
615
+ const r = A.groups[e], B = A.groups[e + 1], s = A.groups[e + 2];
616
+ for (let i = r; i <= B; i++)
617
+ if (s + (i - r) > 0) {
618
+ const o = String.fromCodePoint(i);
619
+ t.push(o);
620
+ }
621
+ }
622
+ return t;
623
+ }
624
+ zA(A, t, e) {
625
+ if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
626
+ {
627
+ const r = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
628
+ if (r >= 0 && A.glyphIdArray && r < A.glyphIdArray.length) {
629
+ const B = A.glyphIdArray[r];
630
+ if (B !== 0) return B + A.idDelta[e] & 65535;
631
+ }
632
+ }
633
+ return 0;
634
+ }
635
+ filterProblematicCharacters(A) {
636
+ return A.filter((t) => this.JA(t));
637
+ }
638
+ JA(A) {
639
+ const t = A.codePointAt(0) || 0;
640
+ return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
641
+ }
642
+ }
643
+ class sA {
644
+ constructor(A) {
645
+ Q(this, "LA");
646
+ Q(this, "KA");
647
+ Q(this, "WA");
648
+ this.WA = A, this.LA = document.createElement("canvas"), this.KA = this.LA.getContext("2d", { willReadFrequently: !0, alpha: !1 });
649
+ }
650
+ createTextureAtlas(A, t, e, r) {
651
+ const B = A.length, s = Math.ceil(Math.sqrt(B)), i = Math.ceil(B / s), o = t.width * s, g = t.height * i;
652
+ this.jA(o, g, e, r), this.ZA(A, t, s, e), this.NA();
653
+ const n = this.WA.TA(o, g, { filter: "nearest" });
654
+ return n.update(this.LA), { framebuffer: n, columns: s, rows: i };
655
+ }
656
+ jA(A, t, e, r) {
657
+ this.LA.width = A, this.LA.height = t, this.LA.style.width = A + "px", this.LA.style.height = A + "px", this.KA.imageSmoothingEnabled = !1, this.LA.style.imageRendering = "pixelated", this.KA.fillStyle = "black", this.KA.fillRect(0, 0, A, t), this.KA.font = `${e}px ${r}`, this.KA.textBaseline = "top", this.KA.textAlign = "left", this.KA.fillStyle = "white";
658
+ }
659
+ ZA(A, t, e, r) {
660
+ for (let B = 0; B < A.length; B++) {
661
+ const s = B % e, i = Math.floor(B / e), o = s * t.width + 0.5 * t.width, g = i * t.height + 0.5 * t.height, n = Math.round(o - 0.5 * t.width), a = Math.round(g - 0.5 * r);
662
+ this.KA.fillText(A[B].character, n, a);
663
+ }
664
+ }
665
+ NA(A = 128) {
666
+ const t = this.KA.getImageData(0, 0, this.LA.width, this.LA.height), e = t.data;
667
+ for (let r = 0; r < e.length; r += 4) {
668
+ const B = 0.299 * e[r] + 0.587 * e[r + 1] + 0.114 * e[r + 2] > A + 32 ? 255 : 0;
669
+ e[r] = B, e[r + 1] = B, e[r + 2] = B;
670
+ }
671
+ this.KA.putImageData(t, 0, 0);
672
+ }
673
+ }
674
+ class iA {
675
+ constructor() {
676
+ Q(this, "XA");
677
+ Q(this, "qA");
678
+ this.XA = document.createElement("canvas"), this.qA = this.XA.getContext("2d");
679
+ }
680
+ calculateMaxGlyphDimensions(A, t, e) {
681
+ this.qA.font = `${t}px ${e}`;
682
+ let r = 0, B = 0;
683
+ for (const s of A) {
684
+ const i = this.qA.measureText(s);
685
+ r = Math.max(r, i.width), B = Math.max(B, i.actualBoundingBoxAscent + i.actualBoundingBoxDescent);
686
+ }
687
+ return { width: r, height: B };
688
+ }
689
+ }
690
+ class EA {
691
+ createCharacterObjects(A, t) {
692
+ return A.map((e, r) => {
693
+ const B = e.codePointAt(0) || 0, s = this.At(r);
694
+ let i = 0;
695
+ if (t.hmtx && t.hmtx.aWidth) {
696
+ const o = this.tt(t, B);
697
+ o > 0 && t.hmtx.aWidth[o] !== void 0 && (i = t.hmtx.aWidth[o]);
698
+ }
699
+ return { character: e, unicode: B, color: s, advanceWidth: i };
700
+ });
701
+ }
702
+ tt(A, t) {
703
+ const e = A.cmap;
704
+ if (!e || !e.tables) return 0;
705
+ for (const r of e.tables) if (r.format === 4) {
706
+ for (let B = 0; B < r.startCount.length; B++) if (t >= r.startCount[B] && t <= r.endCount[B]) {
707
+ if (r.idRangeOffset[B] === 0) return t + r.idDelta[B] & 65535;
708
+ {
709
+ const s = r.idRangeOffset[B] / 2 + (t - r.startCount[B]) - (r.startCount.length - B);
710
+ if (s >= 0 && s < r.glyphIdArray.length) {
711
+ const i = r.glyphIdArray[s];
712
+ if (i !== 0) return i + r.idDelta[B] & 65535;
713
+ }
714
+ }
715
+ }
716
+ }
717
+ return 0;
718
+ }
719
+ At(A) {
720
+ return [A % 256, Math.floor(A / 256) % 256, Math.floor(A / 65536) % 256];
721
+ }
722
+ getCharacterColor(A, t) {
723
+ if (!P.C(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
724
+ const e = t.find((r) => r.character === A);
725
+ return e ? e.color : [0, 0, 0];
726
+ }
727
+ getCharacterColors(A, t) {
728
+ return P.C(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? A.split("").map((e) => this.getCharacterColor(e, t) || [0, 0, 0]) : [[0, 0, 0]];
729
+ }
730
+ }
731
+ class QA {
732
+ constructor(A, t = 16) {
733
+ Q(this, "et");
734
+ Q(this, "Bt", []);
735
+ Q(this, "Qt");
736
+ Q(this, "st", 16);
737
+ Q(this, "rt", 0);
738
+ Q(this, "it", 0);
739
+ Q(this, "Et", { width: 0, height: 0 });
740
+ Q(this, "gt");
741
+ Q(this, "ot", "UrsaFont");
742
+ Q(this, "nt");
743
+ Q(this, "ht");
744
+ Q(this, "Dt");
745
+ Q(this, "lt");
746
+ this.st = t, this.nt = new BA(), this.ht = new sA(A), this.Dt = new iA(), this.lt = new EA();
747
+ }
748
+ async Ct(A) {
749
+ let t;
750
+ if (A) {
751
+ const e = await fetch(A);
752
+ if (!e.ok) throw new I(`Failed to load font file: ${e.status} ${e.statusText}`);
753
+ t = await e.arrayBuffer();
754
+ } else
755
+ t = 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
756
+ `)).arrayBuffer();
757
+ await this.ct(t), this.et = l.parse(t)[0], await this.ut();
758
+ }
759
+ Pt(A) {
760
+ if (A === void 0) return this.st;
761
+ this.st = A, this.Et = this.Dt.calculateMaxGlyphDimensions(this.Bt.map((e) => e.character), this.st, this.ot);
762
+ const t = this.ht.createTextureAtlas(this.Bt, this.Et, this.st, this.ot);
763
+ this.Qt = t.framebuffer, this.rt = t.columns, this.it = t.rows;
764
+ }
765
+ async It(A) {
766
+ try {
767
+ const t = await fetch(A);
768
+ if (!t.ok) throw new I(`Failed to load font file: ${t.status} ${t.statusText}`);
769
+ const e = await t.arrayBuffer();
770
+ await this.ct(e);
771
+ const r = l.parse(e);
772
+ if (!r || r.length === 0) throw Error("Failed to parse font file");
773
+ this.et = r[0], await this.ut();
774
+ } catch (t) {
775
+ throw new I("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
776
+ }
777
+ }
778
+ async ct(A) {
779
+ const t = Date.now();
780
+ this.ot = this.ot === "UrsaFont" ? "UrsaFont" : "CustomFont_" + t, this.gt = new FontFace(this.ot, A), await this.gt.load(), document.fonts.add(this.gt);
781
+ }
782
+ async ut() {
783
+ const A = this.nt.extractCharacters(this.et), t = this.nt.filterProblematicCharacters(A);
784
+ this.Bt = this.lt.createCharacterObjects(t, this.et), this.Et = this.Dt.calculateMaxGlyphDimensions(t, this.st, this.ot);
785
+ const e = this.ht.createTextureAtlas(this.Bt, this.Et, this.st, this.ot);
786
+ this.Qt = e.framebuffer, this.rt = e.columns, this.it = e.rows;
787
+ }
788
+ getCharacterColor(A) {
789
+ return this.lt.getCharacterColor(A, this.Bt);
790
+ }
791
+ getCharacterColors(A) {
792
+ return this.lt.getCharacterColors(A, this.Bt);
793
+ }
794
+ hasAllCharacters(A) {
795
+ if (typeof A != "string" || A.length === 0) return !1;
796
+ const t = new Set(this.Bt.map((e) => e.character));
797
+ for (const e of A) if (!t.has(e)) return !1;
798
+ return !0;
799
+ }
800
+ S() {
801
+ this.Qt.S(), document.fonts.delete(this.gt);
802
+ }
803
+ get fontFramebuffer() {
804
+ return this.Qt;
805
+ }
806
+ get characters() {
807
+ return this.Bt;
808
+ }
809
+ get textureColumns() {
810
+ return this.rt;
811
+ }
812
+ get textureRows() {
813
+ return this.it;
814
+ }
815
+ get maxGlyphDimensions() {
816
+ return this.Et;
817
+ }
818
+ get fontSize() {
819
+ return this.st;
820
+ }
821
+ get font() {
822
+ return this.et;
823
+ }
824
+ }
825
+ class oA {
826
+ constructor(A, t, e) {
827
+ Q(this, "wt");
828
+ Q(this, "ft");
829
+ Q(this, "p");
830
+ Q(this, "_");
831
+ Q(this, "dt");
832
+ Q(this, "_t");
833
+ Q(this, "vt", !1);
834
+ Q(this, "bt");
835
+ Q(this, "xt");
836
+ Q(this, "yt");
837
+ this.bt = A, this.xt = t, this.yt = e, this.xA();
838
+ }
839
+ xA() {
840
+ this.vt || (this.wt = Math.floor(this.bt.width / this.xt), this.ft = Math.floor(this.bt.height / this.yt)), this.Mt();
841
+ }
842
+ Mt() {
843
+ this.p = this.wt * this.xt, this._ = this.ft * this.yt, this.dt = Math.floor((this.bt.width - this.p) / 2), this._t = Math.floor((this.bt.height - this._) / 2);
844
+ }
845
+ Gt(A, t) {
846
+ this.xt = A, this.yt = t, this.xA();
847
+ }
848
+ Ft(A, t) {
849
+ this.vt = !0, this.wt = A, this.ft = t, this.Mt();
850
+ }
851
+ Yt() {
852
+ this.vt = !1, this.xA();
853
+ }
854
+ $t() {
855
+ this.vt ? this.Mt() : this.xA();
856
+ }
857
+ Tt(A) {
858
+ if (A === void 0) return this.vt;
859
+ this.vt = A;
860
+ }
861
+ get cellWidth() {
862
+ return this.xt;
863
+ }
864
+ get cellHeight() {
865
+ return this.yt;
866
+ }
867
+ get cols() {
868
+ return this.wt;
869
+ }
870
+ get rows() {
871
+ return this.ft;
872
+ }
873
+ get width() {
874
+ return this.p;
875
+ }
876
+ get height() {
877
+ return this._;
878
+ }
879
+ get offsetX() {
880
+ return this.dt;
881
+ }
882
+ get offsetY() {
883
+ return this._t;
884
+ }
885
+ }
886
+ class gA {
887
+ constructor(A, t = !1, e = {}) {
888
+ Q(this, "bt");
889
+ Q(this, "St");
890
+ Q(this, "Ot");
891
+ Q(this, "Ut");
892
+ Q(this, "onTransformChange");
893
+ this.St = A, this.Ot = t, this.bt = this.kt(e.width, e.height), t && this.setupTransformObserver();
894
+ }
895
+ kt(A, t) {
896
+ var r;
897
+ const e = document.createElement("canvas");
898
+ if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.Ot) e.width = A || 800, e.height = t || 600, document.body.appendChild(e);
899
+ else {
900
+ const B = this.St.getBoundingClientRect();
901
+ let s = Math.round(B.width), i = Math.round(B.height);
902
+ if (this.St instanceof HTMLVideoElement) {
903
+ const n = this.St;
904
+ (s === 0 || i === 0) && n.videoWidth > 0 && n.videoHeight > 0 && (s = n.videoWidth, i = n.videoHeight);
905
+ }
906
+ e.width = s, e.height = i, e.style.position = "absolute", e.style.pointerEvents = "none";
907
+ const o = window.getComputedStyle(this.St);
908
+ let g = parseInt(o.zIndex || "0", 10);
909
+ isNaN(g) && (g = 0), e.style.zIndex = "" + (g + 1), this.Vt(e), (r = this.St.parentNode) == null || r.insertBefore(e, this.St.nextSibling);
910
+ }
911
+ return e;
912
+ }
913
+ Vt(A) {
914
+ const t = this.St.getBoundingClientRect();
915
+ let e = this.St.offsetParent;
916
+ if (e && e !== document.body) {
917
+ const r = e.getBoundingClientRect();
918
+ A.style.top = t.top - r.top + "px", A.style.left = t.left - r.left + "px";
919
+ } else A.style.top = t.top + window.scrollY + "px", A.style.left = t.left + window.scrollX + "px";
920
+ }
921
+ $t(A, t) {
922
+ if (this.Ot) this.bt.width = A ?? this.bt.width, this.bt.height = t ?? this.bt.height;
923
+ else {
924
+ const e = this.St.getBoundingClientRect();
925
+ let r = Math.round(e.width), B = Math.round(e.height);
926
+ if (this.St instanceof HTMLVideoElement) {
927
+ const s = this.St;
928
+ (r === 0 || B === 0) && s.videoWidth > 0 && s.videoHeight > 0 && (r = s.videoWidth, B = s.videoHeight);
929
+ }
930
+ this.bt.width = r, this.bt.height = B, this.Vt(this.bt);
931
+ }
932
+ }
933
+ Rt() {
934
+ const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.bt.getContext("webgl2", A) || this.bt.getContext("webgl", A);
935
+ if (!t) throw new I("WebGL context could not be created. Ensure your browser supports WebGL.");
936
+ return t;
937
+ }
938
+ setupTransformObserver() {
939
+ this.Ut = new ResizeObserver((A) => {
940
+ for (const t of A) {
941
+ const e = t.contentRect;
942
+ !this.onTransformChange || Math.round(e.width) === this.bt.width && Math.round(e.height) === this.bt.height || this.onTransformChange();
943
+ }
944
+ }), this.Ut.observe(this.bt);
945
+ }
946
+ S() {
947
+ this.Ut && this.Ut.disconnect();
948
+ const A = this.bt.getContext("webgl") || this.bt.getContext("webgl2");
949
+ if (A) {
950
+ const t = A.getExtension("WEBGL_lose_context");
951
+ t && t.loseContext();
952
+ }
953
+ this.bt.parentNode && this.bt.parentNode.removeChild(this.bt);
954
+ }
955
+ get canvas() {
956
+ return this.bt;
957
+ }
958
+ get width() {
959
+ return this.bt.width;
960
+ }
961
+ get height() {
962
+ return this.bt.height;
963
+ }
964
+ }
965
+ class T {
966
+ constructor(A, t, e, r = {}) {
967
+ Q(this, "WA");
968
+ Q(this, "Ht");
969
+ Q(this, "zt");
970
+ Q(this, "Jt");
971
+ Q(this, "Lt");
972
+ Q(this, "Kt");
973
+ Q(this, "Wt");
974
+ Q(this, "jt");
975
+ Q(this, "h");
976
+ this.WA = A, this.Ht = t, this.zt = e, this.h = r;
977
+ const B = this.zt.cols, s = this.zt.rows;
978
+ this.Jt = this.WA.TA(B, s), this.Lt = this.WA.TA(B, s), this.Kt = this.WA.TA(B, s), this.Wt = this.WA.TA(B, s), this.jt = this.WA.TA(B, s);
979
+ }
980
+ $t() {
981
+ const A = this.zt.cols, t = this.zt.rows;
982
+ this.Jt.resize(A, t), this.Lt.resize(A, t), this.Kt.resize(A, t), this.Wt.resize(A, t), this.jt.resize(A, t);
983
+ }
984
+ enabled(A) {
985
+ this.h.enabled = A;
986
+ }
987
+ enable() {
988
+ this.enabled(!0);
989
+ }
990
+ disable() {
991
+ this.enabled(!1);
992
+ }
993
+ S() {
994
+ this.Jt.S(), this.Lt.S(), this.Kt.S(), this.Wt.S(), this.jt.S();
995
+ }
996
+ get characterFramebuffer() {
997
+ return this.Jt;
998
+ }
999
+ get primaryColorFramebuffer() {
1000
+ return this.Lt;
1001
+ }
1002
+ get secondaryColorFramebuffer() {
1003
+ return this.Kt;
1004
+ }
1005
+ get rotationFramebuffer() {
1006
+ return this.Wt;
1007
+ }
1008
+ get transformFramebuffer() {
1009
+ return this.jt;
1010
+ }
1011
+ get options() {
1012
+ return this.h;
1013
+ }
1014
+ }
1015
+ class nA {
1016
+ constructor(A, t) {
1017
+ Q(this, "I");
1018
+ Q(this, "WA");
1019
+ Q(this, "Zt");
1020
+ this.WA = A, this.Zt = t;
1021
+ const e = Math.max(this.Zt.length, 1);
1022
+ this.I = this.WA.TA(e, 1), this.Nt();
1023
+ }
1024
+ Nt() {
1025
+ const A = this.Zt.length;
1026
+ this.I.width !== A && this.I.resize(A, 1);
1027
+ const t = new Uint8Array(1 * A * 4);
1028
+ for (let e = 0; e < A; e++) {
1029
+ const r = this.Zt[e], B = 4 * e;
1030
+ t[B] = r[0], t[B + 1] = r[1], t[B + 2] = r[2], t[B + 3] = 255;
1031
+ }
1032
+ this.I.updatePixels(t, A, 1);
1033
+ }
1034
+ setColors(A) {
1035
+ this.Zt = A, this.Nt();
1036
+ }
1037
+ get colors() {
1038
+ return this.Zt;
1039
+ }
1040
+ get framebuffer() {
1041
+ return this.I;
1042
+ }
1043
+ get texture() {
1044
+ return this.I.texture;
1045
+ }
1046
+ }
1047
+ class S extends T {
1048
+ constructor(t, e, r, B = {}) {
1049
+ super(t, e, r, B);
1050
+ Q(this, "Xt");
1051
+ this.Xt = new nA(this.WA, this.Ht.getCharacterColors(" .:-=+*%@#"));
1052
+ }
1053
+ characters(t) {
1054
+ P.C(this.Ht.hasAllCharacters(t), "One or more characters do not exist in the current font.", { method: "characters", providedValue: t }) && (this.h.characters = t, this.Xt.setColors(this.Ht.getCharacterColors(t)));
1055
+ }
1056
+ characterColor(t, e, r, B = 255) {
1057
+ const s = this.qt(t, "characterColor", e, r, B);
1058
+ s && (this.h.characterColor = s);
1059
+ }
1060
+ characterColorMode(t) {
1061
+ this.Ae(t, "characterColorMode");
1062
+ }
1063
+ cellColor(t, e, r, B = 255) {
1064
+ const s = this.qt(t, "cellColor", e, r, B);
1065
+ s && (this.h.cellColor = s);
1066
+ }
1067
+ cellColorMode(t) {
1068
+ this.Ae(t, "cellColorMode");
1069
+ }
1070
+ invert(t) {
1071
+ this.te(t, "invert", "Invert");
1072
+ }
1073
+ rotation(t) {
1074
+ if (!P.C(typeof t == "number", "Rotation angle must be a number.", { method: "rotation", providedValue: t })) return;
1075
+ (t %= 360) < 0 && (t += 360);
1076
+ const e = 255 * t / 360, r = Math.floor(e) / 255, B = Math.round(e - r);
1077
+ this.h.rotation = [r, B, 0, 1];
1078
+ }
1079
+ flipHorizontally(t) {
1080
+ this.te(t, "flipHorizontally", "Flip horizontally");
1081
+ }
1082
+ flipVertically(t) {
1083
+ this.te(t, "flipVertically", "Flip vertically");
1084
+ }
1085
+ qt(t, e, r, B, s = 255) {
1086
+ let i, o, g, n;
1087
+ if (typeof t == "string") {
1088
+ const a = this.ee(t);
1089
+ if (!a) return P.C(!1, "Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.", { method: e, providedValue: t }), null;
1090
+ [i, o, g, n] = a;
1091
+ } else if (i = t, o = r !== void 0 ? r : t, g = B !== void 0 ? B : t, n = s, !P.C([i, o, g, n].every((a) => a >= 0 && a <= 255), e.charAt(0).toUpperCase() + e.slice(1) + " color values must be between 0 and 255", { method: e, providedValues: { r: i, g: o, b: g, a: n } })) return null;
1092
+ return [i / 255, o / 255, g / 255, n / 255];
1093
+ }
1094
+ Ae(t, e) {
1095
+ P.C(["sampled", "fixed"].includes(t), "Invalid color mode. Must be 'sampled' or 'fixed'.", { method: e, providedValue: t }) && (this.h[e] = t);
1096
+ }
1097
+ te(t, e, r) {
1098
+ P.C(typeof t == "boolean" || typeof t == "number" && Number.isInteger(t), r + " must be a boolean value or an integer (0 for false, any other number for true).", { method: e, providedValue: t }) && (this.h[e] = !!t);
1099
+ }
1100
+ ee(t) {
1101
+ return t = t.replace(/^#/, ""), /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(t) ? (t.length === 3 && (t = t.split("").map((e) => e + e).join("")), [parseInt(t.slice(0, 2), 16), parseInt(t.slice(2, 4), 16), parseInt(t.slice(4, 6), 16), 255]) : null;
1102
+ }
1103
+ }
1104
+ const G = `attribute vec2 a_position;\r
1105
+ attribute vec2 a_texCoord;\r
1106
+ varying vec2 v_uv;\r
1107
+ \r
1108
+ uniform float u_rotation; // rotation angle in radians\r
1109
+ uniform vec2 u_center; // rotation center in normalized coordinates\r
1110
+ uniform float u_aspectRatio; // canvas width / canvas height\r
1111
+ \r
1112
+ mat2 rotate2D(float angle) {\r
1113
+ float s = sin(angle);\r
1114
+ float c = cos(angle);\r
1115
+ return mat2(c, -s, s, c);\r
1116
+ }\r
1117
+ \r
1118
+ void main() {\r
1119
+ v_uv = a_texCoord;\r
1120
+ \r
1121
+ // Use the position directly (it's already in normalized device coordinates)\r
1122
+ vec2 pos = a_position;\r
1123
+ \r
1124
+ // Translate to origin for rotation\r
1125
+ pos -= u_center;\r
1126
+ \r
1127
+ // Correct for aspect ratio: scale X coordinate to make space square\r
1128
+ pos.x *= u_aspectRatio;\r
1129
+ \r
1130
+ // Rotate in corrected space\r
1131
+ // Negate rotation to make positive values rotate clockwise (like p5.js)\r
1132
+ pos = rotate2D(-u_rotation) * pos;\r
1133
+ \r
1134
+ // Restore aspect ratio: scale X coordinate back\r
1135
+ pos.x /= u_aspectRatio;\r
1136
+ \r
1137
+ // Translate back from origin\r
1138
+ pos += u_center;\r
1139
+ \r
1140
+ gl_Position = vec4(pos, 0.0, 1.0);\r
1141
+ }\r
1142
+ `, aA = { enabled: !0, characters: " .:-=+*%@#", characterColor: [1, 1, 1, 1], characterColorMode: "sampled", cellColor: [0, 0, 0, 1], cellColorMode: "fixed", invert: !1, rotation: [0, 0, 0, 255], flipHorizontally: !1, flipVertically: !1, brightnessRange: [0, 255] };
1143
+ class W extends S {
1144
+ constructor(t, e, r) {
1145
+ super(t, e, r, { ...aA });
1146
+ Q(this, "Be");
1147
+ Q(this, "Qe");
1148
+ Q(this, "se");
1149
+ Q(this, "re");
1150
+ Q(this, "ie");
1151
+ Q(this, "Ee");
1152
+ this.Be = new w(t.context, G, "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"), this.Qe = new w(t.context, G, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"), this.re = new w(t.context, G, "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"), this.ie = new w(t.context, G, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"), this.se = new w(t.context, G, "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"), this.Ee = this.WA.TA(this.zt.cols, this.zt.rows);
1153
+ }
1154
+ ge(t) {
1155
+ const e = this.zt.cols, r = this.zt.rows;
1156
+ this.Ee.begin(), this.WA.OA(), this.WA.IA(this.Be), this.WA.GA("u_sketchTexture", t), this.WA.GA("u_gridCellDimensions", [e, r]), this.WA.GA("u_brightnessRange", this.h.brightnessRange), this.WA.FA(0, 0, e, r), this.Ee.end(), this.Lt.begin(), this.WA.OA(), this.WA.IA(this.Qe), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_fillColor", this.h.characterColor), this.WA.GA("u_useFixedColor", this.h.characterColorMode === "fixed"), this.WA.FA(0, 0, e, r), this.Lt.end(), this.Kt.begin(), this.WA.OA(), this.WA.IA(this.Qe), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_fillColor", this.h.cellColor), this.WA.GA("u_useFixedColor", this.h.cellColorMode === "fixed"), this.WA.FA(0, 0, e, r), this.Kt.end(), this.jt.begin(), this.WA.OA(), this.WA.IA(this.re), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_invert", this.h.invert), this.WA.GA("u_flipHorizontally", this.h.flipHorizontally), this.WA.GA("u_flipVertically", this.h.flipVertically), this.WA.FA(0, 0, e, r), this.jt.end(), this.Wt.begin(), this.WA.OA(), this.WA.IA(this.ie), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_rotationColor", this.h.rotation), this.WA.FA(0, 0, e, r), this.Wt.end(), this.Jt.begin(), this.WA.OA(), this.WA.IA(this.se), this.WA.GA("u_colorSampleFramebuffer", this.Ee), this.WA.GA("u_charPaletteTexture", this.Xt.texture), this.WA.GA("u_charPaletteSize", [this.Xt.colors.length, 1]), this.WA.GA("u_brightnessRange", this.h.brightnessRange), this.WA.FA(0, 0, e, r), this.Jt.end();
1157
+ }
1158
+ $t() {
1159
+ super.$t(), this.Ee.resize(this.zt.cols, this.zt.rows);
1160
+ }
1161
+ brightnessRange(t) {
1162
+ P.C(Array.isArray(t) && t.length === 2 && t.every((e) => typeof e == "number" && e >= 0 && e <= 255), "Brightness range must be an array of two numbers between 0 and 255.", { method: "brightnessRange", providedValue: t }) && (this.h.brightnessRange = t);
1163
+ }
1164
+ }
1165
+ const TA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: W, TextmodeConverter: T, TextmodeFeatureConverter: S }, Symbol.toStringTag, { value: "Module" }));
1166
+ class hA {
1167
+ constructor(A, t, e) {
1168
+ Q(this, "WA");
1169
+ Q(this, "et");
1170
+ Q(this, "zt");
1171
+ Q(this, "oe");
1172
+ Q(this, "ne");
1173
+ Q(this, "ae");
1174
+ Q(this, "he");
1175
+ Q(this, "De");
1176
+ Q(this, "Jt");
1177
+ Q(this, "Lt");
1178
+ Q(this, "Kt");
1179
+ Q(this, "Wt");
1180
+ Q(this, "jt");
1181
+ this.WA = A, this.et = t, this.zt = e, this.De = this.WA.yA(R, "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=gl_FragCoord.xy/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}"), this.ne = new W(A, t, e), this.ae = new T(A, t, e), this.oe = [this.ne, this.ae], this.Jt = this.WA.TA(e.cols, e.rows), this.Lt = this.WA.TA(e.cols, e.rows), this.Kt = this.WA.TA(e.cols, e.rows), this.Wt = this.WA.TA(e.cols, e.rows), this.jt = this.WA.TA(e.cols, e.rows), this.he = this.WA.TA(this.zt.width, this.zt.height);
1182
+ }
1183
+ le(A) {
1184
+ for (const e of this.oe) e.options.enabled && e instanceof S && e.ge(A);
1185
+ const t = (e, r) => {
1186
+ e.begin(), this.WA.OA();
1187
+ for (const B of this.oe) B.options.enabled && this.WA.kA(r(B), 0, 0);
1188
+ e.end();
1189
+ };
1190
+ t(this.Jt, (e) => e.characterFramebuffer), t(this.Lt, (e) => e.primaryColorFramebuffer), t(this.Kt, (e) => e.secondaryColorFramebuffer), t(this.Wt, (e) => e.rotationFramebuffer), t(this.jt, (e) => e.transformFramebuffer), this.he.begin(), this.WA.OA(), this.WA.IA(this.De), this.WA.GA("u_characterTexture", this.et.fontFramebuffer), this.WA.GA("u_charsetDimensions", [this.et.textureColumns, this.et.textureRows]), this.WA.GA("u_asciiCharacterTexture", this.Jt.texture), this.WA.GA("u_primaryColorTexture", this.Lt.texture), this.WA.GA("u_secondaryColorTexture", this.Kt.texture), this.WA.GA("u_transformTexture", this.jt.texture), this.WA.GA("u_rotationTexture", this.Wt.texture), this.WA.GA("u_captureTexture", A.texture), this.WA.GA("u_backgroundMode", !1), this.WA.GA("u_captureDimensions", [A.width, A.height]), this.WA.GA("u_gridCellDimensions", [this.zt.cols, this.zt.rows]), this.WA.GA("u_gridPixelDimensions", [this.zt.width, this.zt.height]), this.WA.FA(0, 0, this.he.width, this.he.height), this.he.end();
1191
+ }
1192
+ add(A) {
1193
+ if (!P.C(A === "brightness" || A === "custom", 'Converter type must be either "brightness" or "custom".', { method: "add", providedValue: A })) return;
1194
+ let t;
1195
+ return t = A === "brightness" ? new W(this.WA, this.et, this.zt) : new T(this.WA, this.et, this.zt), this.oe.push(t), t;
1196
+ }
1197
+ remove(A) {
1198
+ if (!P.C(A instanceof T, "Parameter must be a TextmodeConverter instance.", { method: "remove", providedValue: A })) return;
1199
+ const t = this.oe.indexOf(A);
1200
+ P.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.oe.length }) && this.oe.splice(t, 1);
1201
+ }
1202
+ $t() {
1203
+ this.he.resize(this.zt.width, this.zt.height);
1204
+ const A = this.zt.cols, t = this.zt.rows;
1205
+ this.Jt.resize(A, t), this.Lt.resize(A, t), this.Kt.resize(A, t), this.Wt.resize(A, t), this.jt.resize(A, t);
1206
+ for (const e of this.oe) e.$t();
1207
+ }
1208
+ hasEnabledConverters() {
1209
+ return this.oe.some((A) => A.options.enabled);
1210
+ }
1211
+ disable() {
1212
+ for (const A of this.oe) A.disable();
1213
+ }
1214
+ enable() {
1215
+ for (const A of this.oe) A.enable();
1216
+ }
1217
+ S() {
1218
+ for (const A of this.oe) A.S();
1219
+ this.Jt.S(), this.Lt.S(), this.Kt.S(), this.Wt.S(), this.jt.S(), this.he.S(), this.De.S();
1220
+ }
1221
+ get texture() {
1222
+ return this.he;
1223
+ }
1224
+ get characterFramebuffer() {
1225
+ return this.Jt;
1226
+ }
1227
+ get primaryColorFramebuffer() {
1228
+ return this.Lt;
1229
+ }
1230
+ get secondaryColorFramebuffer() {
1231
+ return this.Kt;
1232
+ }
1233
+ get rotationFramebuffer() {
1234
+ return this.Wt;
1235
+ }
1236
+ get transformFramebuffer() {
1237
+ return this.jt;
1238
+ }
1239
+ get brightness() {
1240
+ return this.ne;
1241
+ }
1242
+ get custom() {
1243
+ return this.ae;
1244
+ }
1245
+ }
1246
+ const lA = (E) => class extends E {
1247
+ fill(A, t, e, r) {
1248
+ this.WA.wA(A, t, e, r);
1249
+ }
1250
+ stroke(A, t, e, r) {
1251
+ this.WA.fA(A, t, e, r);
1252
+ }
1253
+ strokeWeight(A) {
1254
+ this.WA.dA(A);
1255
+ }
1256
+ noStroke() {
1257
+ this.WA.mA();
1258
+ }
1259
+ noFill() {
1260
+ this.WA.pA();
1261
+ }
1262
+ rotate(A) {
1263
+ this.WA._A(A);
1264
+ }
1265
+ push() {
1266
+ this.WA.vA();
1267
+ }
1268
+ pop() {
1269
+ this.WA.bA();
1270
+ }
1271
+ rect(A, t, e = 1, r = 1) {
1272
+ this.WA.FA(A, t, e, r);
1273
+ }
1274
+ line(A, t, e, r) {
1275
+ this.WA.$A(A, t, e, r);
1276
+ }
1277
+ background(A, t = A, e = A, r = 255) {
1278
+ this.WA.SA(A, t, e, r);
1279
+ }
1280
+ createShader(A, t) {
1281
+ return this.WA.yA(A, t);
1282
+ }
1283
+ createFilterShader(A) {
1284
+ return this.WA.MA(A);
1285
+ }
1286
+ shader(A) {
1287
+ this.WA.IA(A);
1288
+ }
1289
+ setUniform(A, t) {
1290
+ this.WA.GA(A, t);
1291
+ }
1292
+ };
1293
+ class Y {
1294
+ Ce(A) {
1295
+ const t = A.get("brightness"), e = t == null ? void 0 : t.characterFramebuffer, r = t == null ? void 0 : t.primaryColorFramebuffer, B = t == null ? void 0 : t.secondaryColorFramebuffer, s = t == null ? void 0 : t.transformFramebuffer, i = t == null ? void 0 : t.rotationFramebuffer;
1296
+ return e == null || e.loadPixels(), r == null || r.loadPixels(), B == null || B.loadPixels(), s == null || s.loadPixels(), i == null || i.loadPixels(), { characterPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0), primaryColorPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0), secondaryColorPixels: (B == null ? void 0 : B.pixels) || new Uint8Array(0), transformPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0), rotationPixels: (i == null ? void 0 : i.pixels) || new Uint8Array(0) };
1297
+ }
1298
+ ce(A, t) {
1299
+ return A[t] + (A[t + 1] << 8);
1300
+ }
1301
+ ue(A, t) {
1302
+ return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
1303
+ }
1304
+ }
1305
+ class O {
1306
+ Pe(A, t) {
1307
+ return new Blob([A], { type: t });
1308
+ }
1309
+ Ie(A, t, e) {
1310
+ try {
1311
+ const r = this.Pe(A, e), B = URL.createObjectURL(r), s = document.createElement("a");
1312
+ s.href = B, s.download = t, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(B);
1313
+ } catch (r) {
1314
+ throw console.error("Failed to download file:", r), Error("File download failed: " + (r instanceof Error ? r.message : "Unknown error"));
1315
+ }
1316
+ }
1317
+ we() {
1318
+ return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
1319
+ }
1320
+ fe() {
1321
+ const A = /* @__PURE__ */ new Date();
1322
+ return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
1323
+ }
1324
+ de(A) {
1325
+ return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
1326
+ }
1327
+ me() {
1328
+ return "'textmode-export'-" + this.we();
1329
+ }
1330
+ }
1331
+ class cA extends Y {
1332
+ pe(A, t, e) {
1333
+ const r = A[e] === 255, B = A[e + 1] === 255, s = A[e + 2] === 255, i = t[e], o = t[e + 1];
1334
+ return { isInverted: r, flipHorizontal: B, flipVertical: s, rotation: Math.round(360 * (i + o / 255) / 255 * 100) / 100 };
1335
+ }
1336
+ _e(A, t, e) {
1337
+ return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
1338
+ }
1339
+ ve(A, t) {
1340
+ const e = [];
1341
+ let r = 0;
1342
+ for (let B = 0; B < t.rows; B++) for (let s = 0; s < t.cols; s++) {
1343
+ const i = 4 * r, o = this.ce(A.characterPixels, i);
1344
+ let g = this.ue(A.primaryColorPixels, i), n = this.ue(A.secondaryColorPixels, i);
1345
+ const a = this.pe(A.transformPixels, A.rotationPixels, i);
1346
+ if (a.isInverted) {
1347
+ const C = g;
1348
+ g = n, n = C;
1349
+ }
1350
+ const h = this._e(s, B, t);
1351
+ e.push({ charIndex: o, primaryColor: g, secondaryColor: n, transform: a, position: h }), r++;
1352
+ }
1353
+ return e;
1354
+ }
1355
+ }
1356
+ class CA {
1357
+ tt(A, t) {
1358
+ const e = A.cmap;
1359
+ for (const r of e.tables) if (r.format === 4) {
1360
+ for (let B = 0; B < r.startCount.length; B++) if (t >= r.startCount[B] && t <= r.endCount[B]) {
1361
+ if (r.idRangeOffset[B] === 0) return t + r.idDelta[B] & 65535;
1362
+ {
1363
+ const s = r.idRangeOffset[B] / 2 + (t - r.startCount[B]) - (r.startCount.length - B);
1364
+ if (s >= 0 && s < r.glyphIdArray.length) {
1365
+ const i = r.glyphIdArray[s];
1366
+ if (i !== 0) return i + r.idDelta[B] & 65535;
1367
+ }
1368
+ }
1369
+ }
1370
+ }
1371
+ return 0;
1372
+ }
1373
+ be(A, t, e, r, B) {
1374
+ const s = B / A.head.unitsPerEm;
1375
+ return { getBoundingBox: () => ({ x1: e + t.xMin * s, y1: r + -t.yMax * s, x2: e + t.xMax * s, y2: r + -t.yMin * s }), toSVG: () => this.xe(t, e, r, s) };
1376
+ }
1377
+ xe(A, t, e, r) {
1378
+ if (!A || !A.xs) return "";
1379
+ const { xs: B, ys: s, endPts: i, flags: o } = A;
1380
+ if (!(B && s && i && o)) return "";
1381
+ let g = "", n = 0;
1382
+ for (let a = 0; a < i.length; a++) {
1383
+ const h = i[a];
1384
+ if (!(h < n)) {
1385
+ if (h >= n) {
1386
+ const C = t + B[n] * r, D = e - s[n] * r;
1387
+ g += `M${C.toFixed(2)},${D.toFixed(2)}`;
1388
+ let c = n + 1;
1389
+ for (; c <= h; )
1390
+ if (1 & o[c]) {
1391
+ const u = t + B[c] * r, f = e - s[c] * r;
1392
+ g += `L${u.toFixed(2)},${f.toFixed(2)}`, c++;
1393
+ } else {
1394
+ const u = t + B[c] * r, f = e - s[c] * r;
1395
+ let d = c + 1 > h ? n : c + 1;
1396
+ if (1 & o[d]) {
1397
+ const m = t + B[d] * r, p = e - s[d] * r;
1398
+ g += `Q${u.toFixed(2)},${f.toFixed(2)} ${m.toFixed(2)},${p.toFixed(2)}`, c = d + 1;
1399
+ } else {
1400
+ const m = (u + (t + B[d] * r)) / 2, p = (f + (e - s[d] * r)) / 2;
1401
+ g += `Q${u.toFixed(2)},${f.toFixed(2)} ${m.toFixed(2)},${p.toFixed(2)}`, c = d;
1402
+ }
1403
+ }
1404
+ g += "Z";
1405
+ }
1406
+ n = h + 1;
1407
+ }
1408
+ }
1409
+ return g;
1410
+ }
1411
+ ye(A, t, e, r, B) {
1412
+ const s = A.codePointAt(0) || 0, i = this.tt(t, s);
1413
+ let o = null;
1414
+ return t.glyf && t.glyf[i] !== null ? o = t.glyf[i] : l && l.T && l.T.glyf && l.T.glyf.VA && (o = l.T.glyf.VA(t, i), t.glyf && o && (t.glyf[i] = o)), this.be(t, o, e, r, B);
1415
+ }
1416
+ Me(A, t, e, r, B, s, i, o) {
1417
+ const g = e + (B - o * (i / t.head.unitsPerEm)) / 2, n = r + (s + 0.7 * i) / 2;
1418
+ return this.ye(A, t, g, n, i).toSVG() || null;
1419
+ }
1420
+ }
1421
+ class DA {
1422
+ constructor() {
1423
+ Q(this, "Ge");
1424
+ this.Ge = new CA();
1425
+ }
1426
+ Fe(A) {
1427
+ return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1428
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
1429
+ <svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
1430
+ xmlns="http://www.w3.org/2000/svg" version="1.1">
1431
+ <title>textmode art generated via textmode.js</title>
1432
+ <desc>textmode art visualization generated by textmode.js library</desc>`;
1433
+ }
1434
+ Ye() {
1435
+ return `
1436
+ </g>
1437
+ </svg>`;
1438
+ }
1439
+ $e(A, t) {
1440
+ if (!t.includeBackgroundRectangles) return "";
1441
+ const e = t.backgroundColor, r = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
1442
+ return `
1443
+ <rect width="${A.width}" height="${A.height}" fill="${r}" />`;
1444
+ }
1445
+ Te(A) {
1446
+ return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
1447
+ }
1448
+ Se(A, t) {
1449
+ const { transform: e, position: r } = A, B = r.cellX + t.cellWidth / 2, s = r.cellY + t.cellHeight / 2, i = [];
1450
+ if (e.flipHorizontal || e.flipVertical) {
1451
+ const o = e.flipHorizontal ? -1 : 1, g = e.flipVertical ? -1 : 1;
1452
+ i.push(`translate(${B} ${s})`), i.push(`scale(${o} ${g})`), i.push(`translate(${-B} ${-s})`);
1453
+ }
1454
+ return e.rotation && i.push(`rotate(${e.rotation} ${B} ${s})`), i.length ? ` transform="${i.join(" ")}"` : "";
1455
+ }
1456
+ Oe(A, t, e) {
1457
+ if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
1458
+ const { position: r } = A, B = this.Te(A.secondaryColor);
1459
+ return e.drawMode === "stroke" ? `
1460
+ <rect x="${r.cellX}" y="${r.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${B}" fill="none" stroke-width="${e.strokeWidth}" />` : `
1461
+ <rect x="${r.cellX}" y="${r.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${B}" />`;
1462
+ }
1463
+ ye(A, t, e, r) {
1464
+ const B = e.characters[A.charIndex];
1465
+ if (!B) return "";
1466
+ const s = this.Ge.Me(B.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, B.advanceWidth);
1467
+ if (!s) return "";
1468
+ const i = this.Te(A.primaryColor);
1469
+ return r.drawMode === "stroke" ? `
1470
+ <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${s}" stroke="${i}" stroke-width="${r.strokeWidth}" fill="none" />` : `
1471
+ <path d="${s}" fill="${i}" />`;
1472
+ }
1473
+ Ue(A, t, e, r) {
1474
+ let B = "";
1475
+ B += this.Oe(A, t, r);
1476
+ const s = this.Se(A, t), i = this.ye(A, t, e, r);
1477
+ return i && (s ? (B += `
1478
+ <g${s}>`, B += i, B += `
1479
+ </g>`) : B += i), B;
1480
+ }
1481
+ ke(A, t, e, r) {
1482
+ let B = this.Fe(t);
1483
+ B += this.$e(t, r), B += `
1484
+ <g id="ascii-cells">`;
1485
+ for (const s of A) B += this.Ue(s, t, e, r);
1486
+ return B += this.Ye(), B;
1487
+ }
1488
+ Ve(A) {
1489
+ return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
1490
+ `).replace(/[ \t]+$/gm, "");
1491
+ }
1492
+ }
1493
+ class uA extends O {
1494
+ Re(A) {
1495
+ return this.Pe(A, "image/svg+xml;charset=utf-8");
1496
+ }
1497
+ He(A, t) {
1498
+ this.Ie(A, this.de(t) + ".svg", "image/svg+xml;charset=utf-8");
1499
+ }
1500
+ ze(A, t) {
1501
+ this.He(A, t || this.me());
1502
+ }
1503
+ }
1504
+ class k {
1505
+ constructor() {
1506
+ Q(this, "Je");
1507
+ Q(this, "Le");
1508
+ Q(this, "Ke");
1509
+ this.Je = new cA(), this.Le = new DA(), this.Ke = new uA();
1510
+ }
1511
+ We(A) {
1512
+ return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0] };
1513
+ }
1514
+ je(A, t = {}) {
1515
+ const e = this.We(t), r = this.Je.Ce(A.pipeline), B = this.Je.ve(r, A.grid), s = this.Le.ke(B, A.grid, A.font, e);
1516
+ return this.Le.Ve(s);
1517
+ }
1518
+ ze(A, t = {}) {
1519
+ const e = this.je(A, t), r = t.filename || this.Ke.me();
1520
+ this.Ke.ze(e, r);
1521
+ }
1522
+ }
1523
+ class PA extends Y {
1524
+ Ze(A, t, e, r = " ") {
1525
+ var i;
1526
+ const B = [];
1527
+ let s = 0;
1528
+ for (let o = 0; o < t.rows; o++) {
1529
+ const g = [];
1530
+ for (let n = 0; n < t.cols; n++) {
1531
+ const a = 4 * s, h = this.ce(A.characterPixels, a), C = ((i = e.characters[h]) == null ? void 0 : i.character) || r;
1532
+ g.push(C), s++;
1533
+ }
1534
+ B.push(g);
1535
+ }
1536
+ return B;
1537
+ }
1538
+ }
1539
+ class IA {
1540
+ Ne(A, t) {
1541
+ const e = [];
1542
+ for (const B of A) {
1543
+ let s = B.join("");
1544
+ t.preserveTrailingSpaces || (s = s.replace(/\s+$/, "")), e.push(s);
1545
+ }
1546
+ const r = t.lineEnding === "crlf" ? `\r
1547
+ ` : `
1548
+ `;
1549
+ return e.join(r);
1550
+ }
1551
+ }
1552
+ class dA extends O {
1553
+ Xe(A, t) {
1554
+ const e = this.qe(t);
1555
+ this.Ie(A, e, "text/plain;charset=utf-8");
1556
+ }
1557
+ qe(A) {
1558
+ let t = this.de(A);
1559
+ return t === ".txt" || t.length <= 4 ? this.me() : t;
1560
+ }
1561
+ }
1562
+ class H {
1563
+ constructor() {
1564
+ Q(this, "Je");
1565
+ Q(this, "Le");
1566
+ Q(this, "Ke");
1567
+ this.Je = new PA(), this.Le = new IA(), this.Ke = new dA();
1568
+ }
1569
+ We(A) {
1570
+ return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " " };
1571
+ }
1572
+ AB(A, t = {}) {
1573
+ const e = this.We(t), r = this.Je.Ce(A.pipeline), B = this.Je.Ze(r, A.grid, A.font, e.emptyCharacter);
1574
+ return this.Le.Ne(B, e);
1575
+ }
1576
+ Xe(A, t = {}) {
1577
+ const e = this.AB(A, t), r = t.filename || this.Ke.me();
1578
+ this.Ke.Xe(e, r);
1579
+ }
1580
+ }
1581
+ class fA extends Y {
1582
+ tB(A, t = 1, e = "transparent") {
1583
+ const r = A.canvas;
1584
+ if (t === 1 && e === "transparent") return r;
1585
+ const B = document.createElement("canvas"), s = B.getContext("2d"), i = Math.round(r.width * t), o = Math.round(r.height * t);
1586
+ return B.width = i, B.height = o, e !== "transparent" && (s.fillStyle = e, s.fillRect(0, 0, i, o)), s.imageSmoothingEnabled = !1, s.drawImage(r, 0, 0, r.width, r.height, 0, 0, i, o), B;
1587
+ }
1588
+ }
1589
+ class wA {
1590
+ eB(A, t) {
1591
+ const e = this.BB(t.format);
1592
+ return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
1593
+ }
1594
+ async QB(A, t) {
1595
+ return new Promise((e, r) => {
1596
+ const B = this.BB(t.format), s = (i) => {
1597
+ i ? e(i) : r(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
1598
+ };
1599
+ t.format === "png" ? A.toBlob(s, B) : A.toBlob(s, B, t.quality);
1600
+ });
1601
+ }
1602
+ BB(A) {
1603
+ switch (A) {
1604
+ case "png":
1605
+ return "image/png";
1606
+ case "jpg":
1607
+ return "image/jpeg";
1608
+ case "webp":
1609
+ return "image/webp";
1610
+ default:
1611
+ throw Error("Unsupported image format: " + A);
1612
+ }
1613
+ }
1614
+ }
1615
+ const mA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, $ = { png: ".png", jpg: ".jpg", webp: ".webp" };
1616
+ class pA extends O {
1617
+ sB(A, t, e) {
1618
+ this.rB(A, this.de(t) + $[e]);
1619
+ }
1620
+ rB(A, t) {
1621
+ const e = URL.createObjectURL(A);
1622
+ try {
1623
+ const r = document.createElement("a");
1624
+ r.href = e, r.download = t, r.style.display = "none", r.rel = "noopener", document.body.appendChild(r), r.click(), document.body.removeChild(r);
1625
+ } finally {
1626
+ URL.revokeObjectURL(e);
1627
+ }
1628
+ }
1629
+ iB(A) {
1630
+ return A in mA && A in $;
1631
+ }
1632
+ }
1633
+ class xA {
1634
+ constructor() {
1635
+ Q(this, "Je");
1636
+ Q(this, "Le");
1637
+ Q(this, "Ke");
1638
+ this.Je = new fA(), this.Le = new wA(), this.Ke = new pA();
1639
+ }
1640
+ We(A) {
1641
+ return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent" };
1642
+ }
1643
+ EB(A) {
1644
+ if (console.log("Validating image export options:", A), !this.Ke.iB(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
1645
+ if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
1646
+ if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
1647
+ A.scale > 10 && console.warn("Large scale factors may result in very large files and slow performance"), A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
1648
+ }
1649
+ gB(A, t = {}) {
1650
+ const e = this.We(t);
1651
+ if (this.EB(e), e.scale === 1 && e.backgroundColor === "transparent") return this.Le.eB(A.canvas, e);
1652
+ const r = this.Je.tB(A, e.scale, e.backgroundColor);
1653
+ return this.Le.eB(r, e);
1654
+ }
1655
+ async QB(A, t = {}) {
1656
+ const e = this.We(t);
1657
+ if (this.EB(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.Le.QB(A.canvas, e);
1658
+ const r = this.Je.tB(A, e.scale, e.backgroundColor);
1659
+ return await this.Le.QB(r, e);
1660
+ }
1661
+ async sB(A, t = {}) {
1662
+ const e = await this.QB(A, t), r = t.format ?? "png", B = t.filename || this.Ke.me();
1663
+ this.Ke.sB(e, B, r);
1664
+ }
1665
+ }
1666
+ const vA = (E) => class extends E {
1667
+ toString(A = {}) {
1668
+ return new H().AB(this, A);
1669
+ }
1670
+ saveStrings(A = {}) {
1671
+ new H().Xe(this, A);
1672
+ }
1673
+ toSVG(A = {}) {
1674
+ return new k().je(this, A);
1675
+ }
1676
+ saveSVG(A = {}) {
1677
+ new k().ze(this, A);
1678
+ }
1679
+ async saveCanvas(A, t = "png", e = {}) {
1680
+ await new xA().sB(this.textmodeCanvas, { ...e, filename: A, format: t });
1681
+ }
1682
+ }, bA = (E) => class extends E {
1683
+ async loadFont(A) {
1684
+ return this.et.It(A).then(() => {
1685
+ const t = this.et.maxGlyphDimensions;
1686
+ this.zt.Gt(t.width, t.height), this.oB.$t();
1687
+ });
1688
+ }
1689
+ fontSize(A) {
1690
+ if (!P.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.et.fontSize === A) return;
1691
+ this.et.Pt(A);
1692
+ const t = this.et.maxGlyphDimensions;
1693
+ this.zt.Gt(t.width, t.height), this.oB.$t(), this.WA.UA();
1694
+ }
1695
+ }, yA = (E) => class extends E {
1696
+ addConverter(A) {
1697
+ return this.oB.add(A);
1698
+ }
1699
+ removeConverter(A) {
1700
+ this.oB.remove(A);
1701
+ }
1702
+ };
1703
+ class _A {
1704
+ constructor() {
1705
+ Q(this, "WA");
1706
+ Q(this, "et");
1707
+ Q(this, "oB");
1708
+ Q(this, "textmodeCanvas");
1709
+ Q(this, "zt");
1710
+ }
1711
+ }
1712
+ class J extends function(t, ...e) {
1713
+ return e.reduce((r, B) => B(r), t);
1714
+ }(_A, lA, vA, bA, yA) {
1715
+ constructor(t = null, e = {}) {
1716
+ super();
1717
+ Q(this, "St");
1718
+ Q(this, "nB");
1719
+ Q(this, "Ut");
1720
+ Q(this, "aB");
1721
+ Q(this, "hB");
1722
+ Q(this, "DB", null);
1723
+ Q(this, "lB", 0);
1724
+ Q(this, "CB");
1725
+ Q(this, "cB", !0);
1726
+ Q(this, "uB", 0);
1727
+ Q(this, "PB", 0);
1728
+ Q(this, "IB", 0);
1729
+ Q(this, "wB", []);
1730
+ Q(this, "fB", 10);
1731
+ Q(this, "dB", !1);
1732
+ Q(this, "mB", !1);
1733
+ Q(this, "pB", () => {
1734
+ });
1735
+ Q(this, "_B", () => {
1736
+ });
1737
+ Q(this, "vB");
1738
+ this.St = t, this.mB = t === null, this.aB = e.renderMode ?? "auto", this.hB = e.frameRate ?? 60, this.CB = 1e3 / this.hB;
1739
+ }
1740
+ static async create(t = null, e = {}) {
1741
+ const r = new this(t, e), B = r.mB ? e : void 0;
1742
+ let s, i;
1743
+ r.textmodeCanvas = new gA(r.captureSource, r.mB, B), r.WA = new rA(r.textmodeCanvas.Rt()), r.mB ? (s = e.width || 800, i = e.height || 600) : (s = r.textmodeCanvas.width || 800, i = r.textmodeCanvas.height || 600), r.nB = r.WA.TA(s, i), r.et = new QA(r.WA, e.fontSize ?? 16), await r.et.Ct(e.fontSource);
1744
+ const o = r.et.maxGlyphDimensions;
1745
+ return r.zt = new oA(r.textmodeCanvas.canvas, o.width, o.height), r.oB = new hA(r.WA, r.et, r.zt), r.bB(), r.xB(), r;
1746
+ }
1747
+ bB() {
1748
+ this.vB = () => {
1749
+ this.mB ? this._B() : this.yB();
1750
+ }, window.addEventListener("resize", this.vB), window.ResizeObserver && this.St && !this.mB && (this.Ut = new ResizeObserver(() => {
1751
+ this.yB();
1752
+ }), this.Ut.observe(this.St));
1753
+ }
1754
+ render() {
1755
+ this.MB(), this.IB++, this.dB ? console.warn("Cannot render: Required resources have been disposed") : (this.mB ? (this.nB.begin(), this.pB(), this.nB.end()) : this.nB.update(this.St), this.oB.hasEnabledConverters() ? (this.oB.le(this.nB), this.WA.SA(0), this.WA.kA(this.oB.texture, this.zt.offsetX, this.zt.offsetY, this.oB.texture.width, this.oB.texture.height)) : (this.WA.OA(), this.WA.kA(this.nB, this.zt.offsetX, this.zt.offsetY, this.nB.width, this.nB.height)));
1756
+ }
1757
+ yB() {
1758
+ this.textmodeCanvas.$t(), this.nB.resize(this.textmodeCanvas.width, this.textmodeCanvas.height), this.zt.$t(), this.oB.$t(), this.WA.UA(), this.aB !== "manual" && this.render();
1759
+ }
1760
+ xB() {
1761
+ if (this.aB !== "auto" || !this.cB) return;
1762
+ this.lB = performance.now();
1763
+ const t = (e) => {
1764
+ if (!this.cB) return void (this.DB = null);
1765
+ const r = e - this.lB;
1766
+ r >= this.CB && (this.render(), this.lB = e - r % this.CB), this.cB && (this.DB = requestAnimationFrame(t));
1767
+ };
1768
+ this.DB = requestAnimationFrame(t);
1769
+ }
1770
+ MB() {
1771
+ const t = performance.now();
1772
+ if (this.PB > 0) {
1773
+ const e = t - this.PB;
1774
+ this.wB.push(e), this.wB.length > this.fB && this.wB.shift();
1775
+ const r = this.wB.reduce((B, s) => B + s, 0) / this.wB.length;
1776
+ this.uB = 1e3 / r;
1777
+ }
1778
+ this.PB = t;
1779
+ }
1780
+ GB() {
1781
+ this.DB && (cancelAnimationFrame(this.DB), this.DB = null);
1782
+ }
1783
+ renderMode(t) {
1784
+ this.aB !== t && (this.GB(), this.aB = t, t === "auto" && this.cB && this.xB());
1785
+ }
1786
+ frameRate(t) {
1787
+ if (t === void 0) return this.uB;
1788
+ this.hB = t, this.CB = 1e3 / t, this.aB === "auto" && this.cB && (this.GB(), this.xB());
1789
+ }
1790
+ noLoop() {
1791
+ this.cB && (this.cB = !1, this.DB && (cancelAnimationFrame(this.DB), this.DB = null));
1792
+ }
1793
+ loop() {
1794
+ this.cB || (this.cB = !0, this.aB === "auto" && this.xB());
1795
+ }
1796
+ redraw(t = 1) {
1797
+ if (P.C(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.render();
1798
+ }
1799
+ isLooping() {
1800
+ return this.aB === "auto" && this.cB;
1801
+ }
1802
+ draw(t) {
1803
+ this.pB = t;
1804
+ }
1805
+ windowResized(t) {
1806
+ this._B = t;
1807
+ }
1808
+ resizeCanvas(t, e) {
1809
+ this.textmodeCanvas.$t(t, e), this.nB.resize(this.textmodeCanvas.width, this.textmodeCanvas.height), this.zt.$t(), this.oB.$t(), this.WA.UA(), this.aB !== "manual" && this.render();
1810
+ }
1811
+ destroy() {
1812
+ this.dB || (this.GB(), window.removeEventListener("resize", this.vB), this.Ut && this.Ut.disconnect(), this.oB.S(), this.et.S(), this.nB.S(), this.WA.S(), this.dB = !0);
1813
+ }
1814
+ get grid() {
1815
+ return this.zt;
1816
+ }
1817
+ get font() {
1818
+ return this.et;
1819
+ }
1820
+ get mode() {
1821
+ return this.aB;
1822
+ }
1823
+ get pipeline() {
1824
+ return this.oB;
1825
+ }
1826
+ get frameCount() {
1827
+ return this.IB;
1828
+ }
1829
+ set frameCount(t) {
1830
+ this.IB = t;
1831
+ }
1832
+ get width() {
1833
+ return this.textmodeCanvas.width;
1834
+ }
1835
+ get height() {
1836
+ return this.textmodeCanvas.height;
1837
+ }
1838
+ get isDisposed() {
1839
+ return this.dB;
1840
+ }
1841
+ }
1842
+ class L {
1843
+ static async create(A, t = {}) {
1844
+ if (A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement) return J.create(A, t);
1845
+ {
1846
+ const e = A || {};
1847
+ return J.create(null, e);
1848
+ }
1849
+ }
1850
+ static setErrorLevel(A) {
1851
+ P.u(A);
1852
+ }
1853
+ static get version() {
1854
+ return "0.1.6-beta.7";
1855
+ }
1856
+ }
1857
+ const MA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), RA = L.create, FA = L.setErrorLevel, UA = L.version;
1858
+ export {
1859
+ gA as TextmodeCanvas,
1860
+ hA as TextmodeConversionPipeline,
1861
+ AA as TextmodeErrorLevel,
1862
+ QA as TextmodeFont,
1863
+ oA as TextmodeGrid,
1864
+ J as Textmodifier,
1865
+ TA as converters,
1866
+ RA as create,
1867
+ MA as export,
1868
+ FA as setErrorLevel,
1869
+ L as textmode,
1870
+ UA as version
1871
+ };