textmode.js 0.1.9-beta.3 → 0.1.9-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +630 -621
- package/dist/textmode.esm.min.js +802 -793
- package/dist/textmode.umd.js +16 -15
- package/dist/textmode.umd.min.js +18 -17
- package/dist/types/rendering/webgl/Renderer.d.ts +6 -0
- package/dist/types/textmode/Textmodifier.d.ts +2 -0
- package/package.json +1 -1
package/dist/textmode.esm.js
CHANGED
|
@@ -34,12 +34,12 @@ class I extends Error {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
var eA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(eA || {});
|
|
37
|
-
const
|
|
37
|
+
const b = class b {
|
|
38
38
|
constructor() {
|
|
39
39
|
o(this, "h", { globalLevel: 3 });
|
|
40
40
|
}
|
|
41
41
|
static l() {
|
|
42
|
-
return
|
|
42
|
+
return b.o || (b.o = new b()), b.o;
|
|
43
43
|
}
|
|
44
44
|
D(A, t) {
|
|
45
45
|
const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", s = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
|
|
@@ -61,13 +61,13 @@ const v = class v {
|
|
|
61
61
|
this.h.globalLevel = A;
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
o(
|
|
65
|
-
let Y =
|
|
64
|
+
o(b, "o", null);
|
|
65
|
+
let Y = b;
|
|
66
66
|
const u = Y.l(), X = /* @__PURE__ */ new WeakMap();
|
|
67
|
-
function
|
|
67
|
+
function G(E, A) {
|
|
68
68
|
X.set(E, A);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function j(E) {
|
|
71
71
|
return X.get(E);
|
|
72
72
|
}
|
|
73
73
|
class K {
|
|
@@ -119,12 +119,12 @@ class K {
|
|
|
119
119
|
}
|
|
120
120
|
begin() {
|
|
121
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._),
|
|
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._), G(A, [0, 0, this.p, this._]);
|
|
123
123
|
}
|
|
124
124
|
end() {
|
|
125
125
|
if (!this.v) return;
|
|
126
126
|
const { P: A } = this;
|
|
127
|
-
A.bindFramebuffer(A.FRAMEBUFFER, this.v.framebuffer), A.viewport(...this.v.viewport),
|
|
127
|
+
A.bindFramebuffer(A.FRAMEBUFFER, this.v.framebuffer), A.viewport(...this.v.viewport), G(A, this.v.viewport), this.v = null;
|
|
128
128
|
}
|
|
129
129
|
loadPixels() {
|
|
130
130
|
const { P: A } = this;
|
|
@@ -174,9 +174,9 @@ class x {
|
|
|
174
174
|
o(this, "O");
|
|
175
175
|
o(this, "U", /* @__PURE__ */ new Map());
|
|
176
176
|
o(this, "k", /* @__PURE__ */ new Map());
|
|
177
|
-
o(this, "
|
|
178
|
-
o(this, "
|
|
179
|
-
this.P = A, this.O = this.H(t, e), this.
|
|
177
|
+
o(this, "R", 0);
|
|
178
|
+
o(this, "V");
|
|
179
|
+
this.P = A, this.O = this.H(t, e), this.V = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.L();
|
|
180
180
|
}
|
|
181
181
|
L() {
|
|
182
182
|
const A = this.P.getProgramParameter(this.O, this.P.ACTIVE_UNIFORMS);
|
|
@@ -234,7 +234,7 @@ class x {
|
|
|
234
234
|
} else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
|
|
235
235
|
}
|
|
236
236
|
N() {
|
|
237
|
-
return this.
|
|
237
|
+
return this.R >= this.V && console.warn(`Exceeded maximum texture units (${this.V}). Texture may not render correctly.`), this.R++;
|
|
238
238
|
}
|
|
239
239
|
j(A) {
|
|
240
240
|
const t = this.k.get(A);
|
|
@@ -247,7 +247,7 @@ class x {
|
|
|
247
247
|
this.P.deleteProgram(this.O);
|
|
248
248
|
}
|
|
249
249
|
W() {
|
|
250
|
-
this.
|
|
250
|
+
this.R = 0;
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
class Z {
|
|
@@ -273,7 +273,7 @@ class Z {
|
|
|
273
273
|
e.disableVertexAttribArray(A), e.disableVertexAttribArray(t);
|
|
274
274
|
}
|
|
275
275
|
sA(A, t) {
|
|
276
|
-
const e = this.P, s =
|
|
276
|
+
const e = this.P, s = j(e) || [0, 0, e.canvas.width, e.canvas.height];
|
|
277
277
|
return { nx: A / s[2] * 2 - 1, ny: 1 - t / s[3] * 2 };
|
|
278
278
|
}
|
|
279
279
|
rA(A, t, e, s) {
|
|
@@ -307,13 +307,13 @@ class rA extends Z {
|
|
|
307
307
|
QA(A, t, e, s, r) {
|
|
308
308
|
const i = e - A, B = s - t, Q = Math.hypot(i, B);
|
|
309
309
|
if (Q === 0) {
|
|
310
|
-
const g = r / 2,
|
|
311
|
-
this.rA(
|
|
310
|
+
const g = r / 2, h = this.sA(A - g, t - g), a = this.sA(A + g, t + g);
|
|
311
|
+
this.rA(h.nx, h.ny, a.nx, a.ny);
|
|
312
312
|
} else {
|
|
313
|
-
const g = -B / Q,
|
|
314
|
-
this.AA(),
|
|
315
|
-
const q = new Float32Array([y.nx, y.ny, 0, 0,
|
|
316
|
-
|
|
313
|
+
const g = -B / Q, h = i / Q, a = r / 2, C = A + g * a, c = t + h * a, l = A - g * a, d = t - h * a, D = e + g * a, P = s + h * a, p = e - g * a, m = s - h * a, y = this.sA(C, c), v = this.sA(l, d), _ = this.sA(D, P), H = this.sA(p, m), M = this.P;
|
|
314
|
+
this.AA(), M.bindBuffer(M.ARRAY_BUFFER, this.Z);
|
|
315
|
+
const q = new Float32Array([y.nx, y.ny, 0, 0, v.nx, v.ny, 0, 1, _.nx, _.ny, 1, 0, v.nx, v.ny, 0, 1, H.nx, H.ny, 1, 1, _.nx, _.ny, 1, 0]);
|
|
316
|
+
M.bufferData(M.ARRAY_BUFFER, q, M.DYNAMIC_DRAW);
|
|
317
317
|
}
|
|
318
318
|
const n = this.tA();
|
|
319
319
|
this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(n.positionLoc, n.texLoc);
|
|
@@ -324,8 +324,8 @@ class iA {
|
|
|
324
324
|
constructor(A) {
|
|
325
325
|
o(this, "P");
|
|
326
326
|
o(this, "EA");
|
|
327
|
-
o(this, "
|
|
328
|
-
o(this, "
|
|
327
|
+
o(this, "oA");
|
|
328
|
+
o(this, "gA", null);
|
|
329
329
|
o(this, "nA");
|
|
330
330
|
o(this, "aA");
|
|
331
331
|
o(this, "hA", [1, 1, 1, 1]);
|
|
@@ -335,10 +335,10 @@ class iA {
|
|
|
335
335
|
o(this, "CA", !0);
|
|
336
336
|
o(this, "uA", 0);
|
|
337
337
|
o(this, "PA", []);
|
|
338
|
-
this.P = A, this.EA = new x(this.P, R, "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"), this.
|
|
338
|
+
this.P = A, this.EA = new x(this.P, R, "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"), this.oA = new x(this.P, R, "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}"), this.nA = new sA(this.P), this.aA = new rA(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), G(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
|
|
339
339
|
}
|
|
340
340
|
IA(A) {
|
|
341
|
-
this.
|
|
341
|
+
this.gA !== A && (this.gA = A, A.K());
|
|
342
342
|
}
|
|
343
343
|
wA(A, t, e, s) {
|
|
344
344
|
if (this.lA = !0, t === void 0 && e === void 0 && s === void 0) {
|
|
@@ -381,70 +381,76 @@ class iA {
|
|
|
381
381
|
A ? (this.hA = A.fillColor, this.lA = A.fillMode, this.cA = A.strokeColor, this.DA = A.strokeWeight, this.CA = A.strokeMode, this.uA = A.rotation) : console.warn("pop() called without matching push()");
|
|
382
382
|
}
|
|
383
383
|
xA() {
|
|
384
|
-
this.
|
|
384
|
+
this.gA = null, this.PA = [], this.uA = 0;
|
|
385
385
|
}
|
|
386
|
-
yA(A
|
|
386
|
+
yA(A) {
|
|
387
|
+
const t = A.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").trim().match(/^#version\s+(\d+)\s+(es)?/i);
|
|
388
|
+
return t ? parseInt(t[1], 10) >= 300 : !1;
|
|
389
|
+
}
|
|
390
|
+
MA(A, t) {
|
|
387
391
|
return new x(this.P, A, t);
|
|
388
392
|
}
|
|
389
|
-
|
|
390
|
-
|
|
393
|
+
GA(A) {
|
|
394
|
+
const t = this.yA(A) ? `#version 300 es
|
|
395
|
+
in vec2 a_position;in vec2 a_texCoord;out 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);}` : R;
|
|
396
|
+
return new x(this.P, t, A);
|
|
391
397
|
}
|
|
392
|
-
|
|
393
|
-
this.
|
|
398
|
+
FA(A, t) {
|
|
399
|
+
this.gA.setUniform(A, t);
|
|
394
400
|
}
|
|
395
|
-
|
|
396
|
-
if (this.
|
|
397
|
-
const { centerX:
|
|
398
|
-
return this.
|
|
401
|
+
$A(A, t, e, s) {
|
|
402
|
+
if (this.gA !== null) {
|
|
403
|
+
const { centerX: h, centerY: a, radians: C, aspectRatio: c } = this.YA(A, t, e, s);
|
|
404
|
+
return this.FA("u_rotation", C), this.FA("u_center", [h, a]), this.FA("u_aspectRatio", c), this.nA.BA(A, t, e, s), void (this.gA = null);
|
|
399
405
|
}
|
|
400
|
-
const r = this.
|
|
406
|
+
const r = this.oA;
|
|
401
407
|
let i = 0, B = 0, Q = 0, n = 1;
|
|
402
|
-
const g = this
|
|
403
|
-
i = g.centerX, B = g.centerY, Q = g.radians, n = g.aspectRatio, this.lA && (this.IA(r), this.
|
|
408
|
+
const g = this.YA(A, t, e, s);
|
|
409
|
+
i = g.centerX, B = g.centerY, Q = g.radians, n = g.aspectRatio, this.lA && (this.IA(r), this.FA("u_color", this.hA), this.FA("u_rotation", Q), this.FA("u_center", [i, B]), this.FA("u_aspectRatio", n), this.nA.BA(A, t, e, s)), this.CA && this.DA > 0 && (this.IA(r), this.FA("u_color", this.cA), this.FA("u_rotation", Q), this.FA("u_center", [i, B]), this.FA("u_aspectRatio", n), this.nA.iA(A, t, e, s, this.DA)), this.gA = null;
|
|
404
410
|
}
|
|
405
|
-
|
|
406
|
-
if (this.
|
|
407
|
-
const l = (A + e) / 2, d = (t + s) / 2,
|
|
408
|
-
this.
|
|
411
|
+
TA(A, t, e, s) {
|
|
412
|
+
if (this.gA !== null) {
|
|
413
|
+
const l = (A + e) / 2, d = (t + s) / 2, D = Math.abs(e - A) || 1, P = Math.abs(s - t) || 1, { centerX: p, centerY: m, radians: y, aspectRatio: v } = this.YA(l - D / 2, d - P / 2, D, P);
|
|
414
|
+
this.FA("u_rotation", y), this.FA("u_center", [p, m]), this.FA("u_aspectRatio", v);
|
|
409
415
|
const _ = this.DA > 0 ? this.DA : 1;
|
|
410
|
-
return this.aA.QA(A, t, e, s, _), void (this.
|
|
416
|
+
return this.aA.QA(A, t, e, s, _), void (this.gA = null);
|
|
411
417
|
}
|
|
412
418
|
if (!this.CA || this.DA <= 0) return;
|
|
413
|
-
const r = this.
|
|
414
|
-
let
|
|
419
|
+
const r = this.oA, i = (A + e) / 2, B = (t + s) / 2, Q = Math.abs(e - A) || 1, n = Math.abs(s - t) || 1, g = this.uA !== 0;
|
|
420
|
+
let h = 0, a = 0, C = 0, c = 1;
|
|
415
421
|
if (g) {
|
|
416
|
-
const l = this
|
|
417
|
-
|
|
422
|
+
const l = this.YA(i - Q / 2, B - n / 2, Q, n);
|
|
423
|
+
h = l.centerX, a = l.centerY, C = l.radians, c = l.aspectRatio;
|
|
418
424
|
}
|
|
419
|
-
this.IA(r), this.
|
|
425
|
+
this.IA(r), this.FA("u_color", this.cA), g && (this.FA("u_rotation", C), this.FA("u_center", [h, a]), this.FA("u_aspectRatio", c)), this.aA.QA(A, t, e, s, this.DA);
|
|
420
426
|
}
|
|
421
|
-
|
|
422
|
-
const r =
|
|
427
|
+
YA(A, t, e, s) {
|
|
428
|
+
const r = j(this.P) || [0, 0, this.P.canvas.width, this.P.canvas.height], i = r[2], B = r[3], Q = i / B;
|
|
423
429
|
return { centerX: (A + e / 2) / i * 2 - 1, centerY: 1 - (t + s / 2) / B * 2, radians: this.uA * Math.PI / 180, aspectRatio: Q };
|
|
424
430
|
}
|
|
425
|
-
|
|
431
|
+
SA(A, t, e = {}) {
|
|
426
432
|
return new K(this.P, A, t, e);
|
|
427
433
|
}
|
|
428
|
-
|
|
429
|
-
this.
|
|
434
|
+
OA(A, t = A, e = A, s = 255) {
|
|
435
|
+
this.UA(A / 255, t / 255, e / 255, s / 255);
|
|
430
436
|
}
|
|
431
|
-
|
|
437
|
+
UA(A = 0, t = 0, e = 0, s = 0) {
|
|
432
438
|
this.P.clearColor(A, t, e, s), this.P.clear(this.P.COLOR_BUFFER_BIT);
|
|
433
439
|
}
|
|
434
|
-
|
|
435
|
-
this.P.viewport(0, 0, this.P.canvas.width, this.P.canvas.height),
|
|
440
|
+
kA() {
|
|
441
|
+
this.P.viewport(0, 0, this.P.canvas.width, this.P.canvas.height), G(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
|
|
436
442
|
}
|
|
437
443
|
get context() {
|
|
438
444
|
return this.P;
|
|
439
445
|
}
|
|
440
446
|
S() {
|
|
441
|
-
this.EA.S(), this.
|
|
447
|
+
this.EA.S(), this.oA.S(), this.nA.S(), this.aA.S();
|
|
442
448
|
}
|
|
443
|
-
|
|
449
|
+
RA(A, t, e, s, r) {
|
|
444
450
|
const i = this.P, B = s ?? A.width, Q = r ?? A.height;
|
|
445
|
-
this.IA(this.EA), this.
|
|
446
|
-
const n = this
|
|
447
|
-
this.
|
|
451
|
+
this.IA(this.EA), this.FA("u_texture", A.texture);
|
|
452
|
+
const n = this.YA(t, e, B, Q);
|
|
453
|
+
this.FA("u_rotation", n.radians), this.FA("u_center", [n.centerX, n.centerY]), this.FA("u_aspectRatio", n.aspectRatio), this.nA.BA(t, e, B, Q), i.bindTexture(i.TEXTURE_2D, null), this.gA = null;
|
|
448
454
|
}
|
|
449
455
|
}
|
|
450
456
|
const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int16[0]), readUshort: (E, A) => E[A] << 8 | E[A + 1], readUshorts(E, A, t) {
|
|
@@ -470,17 +476,17 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
470
476
|
for (let Q = 0; Q < i; Q++) {
|
|
471
477
|
const n = r(E, A), g = r(E, A += 2);
|
|
472
478
|
A += 2;
|
|
473
|
-
const
|
|
479
|
+
const h = s.readUint(E, A);
|
|
474
480
|
A += 4;
|
|
475
|
-
const
|
|
476
|
-
let
|
|
477
|
-
if (
|
|
481
|
+
const a = `p${n}e${g}`;
|
|
482
|
+
let C = B.indexOf(h);
|
|
483
|
+
if (C === -1) {
|
|
478
484
|
let c;
|
|
479
|
-
|
|
480
|
-
const l = r(E,
|
|
481
|
-
c = l === 4 ? this.parse4(E,
|
|
485
|
+
C = e.tables.length, B.push(h);
|
|
486
|
+
const l = r(E, h);
|
|
487
|
+
c = l === 4 ? this.parse4(E, h) : l === 12 ? this.parse12(E, h) : { format: l }, e.tables.push(c);
|
|
482
488
|
}
|
|
483
|
-
e.ids[
|
|
489
|
+
e.ids[a] != null && console.warn("Multiple tables for one platform+encoding: " + a), e.ids[a] = C;
|
|
484
490
|
}
|
|
485
491
|
return e;
|
|
486
492
|
}, parse4(E, A) {
|
|
@@ -523,11 +529,11 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
523
529
|
} }, QA = { parseTab(E, A, t, e) {
|
|
524
530
|
if (!e) throw Error("Font object required for hmtx parsing");
|
|
525
531
|
const s = f, r = [], i = [], B = e.maxp.numGlyphs, Q = e.hhea.numberOfHMetrics;
|
|
526
|
-
let n = 0, g = 0,
|
|
527
|
-
for (;
|
|
528
|
-
for (;
|
|
532
|
+
let n = 0, g = 0, h = 0;
|
|
533
|
+
for (; h < Q; ) n = s.readUshort(E, A + (h << 2)), g = s.readShort(E, A + (h << 2) + 2), r.push(n), i.push(g), h++;
|
|
534
|
+
for (; h < B; ) r.push(n), i.push(g), h++;
|
|
529
535
|
return { aWidth: r, lsBearing: i };
|
|
530
|
-
} },
|
|
536
|
+
} }, V = { cmap: BA, head: EA, hhea: oA, maxp: { parseTab(E, A, t) {
|
|
531
537
|
const e = f;
|
|
532
538
|
return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
|
|
533
539
|
} }, hmtx: QA, loca: { parseTab(E, A, t, e) {
|
|
@@ -542,51 +548,51 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
542
548
|
for (let i = 0; i < r; i++) s.push(null);
|
|
543
549
|
return s;
|
|
544
550
|
}, VA(E, A) {
|
|
545
|
-
const t = f, e = E.
|
|
551
|
+
const t = f, e = E.HA, s = E.loca;
|
|
546
552
|
if (s[A] === s[A + 1]) return null;
|
|
547
|
-
const r = w.findTable(e, "glyf", E.
|
|
553
|
+
const r = w.findTable(e, "glyf", E.zA);
|
|
548
554
|
if (!r) return null;
|
|
549
555
|
let i = r[0] + s[A];
|
|
550
556
|
const B = {};
|
|
551
557
|
if (B.noc = t.readShort(e, i), i += 2, B.xMin = t.readShort(e, i), i += 2, B.yMin = t.readShort(e, i), i += 2, B.xMax = t.readShort(e, i), i += 2, B.yMax = t.readShort(e, i), i += 2, B.xMin >= B.xMax || B.yMin >= B.yMax) return null;
|
|
552
558
|
if (B.noc > 0) {
|
|
553
559
|
B.endPts = [];
|
|
554
|
-
for (let
|
|
560
|
+
for (let a = 0; a < B.noc; a++) B.endPts.push(t.readUshort(e, i)), i += 2;
|
|
555
561
|
const Q = t.readUshort(e, i);
|
|
556
562
|
if (i += 2, e.length - i < Q) return null;
|
|
557
563
|
i += Q;
|
|
558
564
|
const n = B.endPts[B.noc - 1] + 1;
|
|
559
565
|
B.flags = [];
|
|
560
|
-
for (let
|
|
561
|
-
const
|
|
562
|
-
if (i++, B.flags.push(
|
|
566
|
+
for (let a = 0; a < n; a++) {
|
|
567
|
+
const C = e[i];
|
|
568
|
+
if (i++, B.flags.push(C), 8 & C) {
|
|
563
569
|
const c = e[i];
|
|
564
570
|
i++;
|
|
565
|
-
for (let l = 0; l < c; l++) B.flags.push(
|
|
571
|
+
for (let l = 0; l < c; l++) B.flags.push(C), a++;
|
|
566
572
|
}
|
|
567
573
|
}
|
|
568
574
|
B.xs = [];
|
|
569
|
-
for (let
|
|
570
|
-
const
|
|
571
|
-
2 &
|
|
575
|
+
for (let a = 0; a < n; a++) {
|
|
576
|
+
const C = B.flags[a], c = !!(16 & C);
|
|
577
|
+
2 & C ? (B.xs.push(c ? e[i] : -e[i]), i++) : c ? B.xs.push(0) : (B.xs.push(t.readShort(e, i)), i += 2);
|
|
572
578
|
}
|
|
573
579
|
B.ys = [];
|
|
574
|
-
for (let
|
|
575
|
-
const
|
|
576
|
-
4 &
|
|
580
|
+
for (let a = 0; a < n; a++) {
|
|
581
|
+
const C = B.flags[a], c = !!(32 & C);
|
|
582
|
+
4 & C ? (B.ys.push(c ? e[i] : -e[i]), i++) : c ? B.ys.push(0) : (B.ys.push(t.readShort(e, i)), i += 2);
|
|
577
583
|
}
|
|
578
|
-
let g = 0,
|
|
579
|
-
for (let
|
|
584
|
+
let g = 0, h = 0;
|
|
585
|
+
for (let a = 0; a < n; a++) g += B.xs[a], h += B.ys[a], B.xs[a] = g, B.ys[a] = h;
|
|
580
586
|
} else B.parts = [], B.endPts = [], B.flags = [], B.xs = [], B.ys = [];
|
|
581
587
|
return B;
|
|
582
588
|
} } }, w = { parse: (E) => [((A, t, e, s) => {
|
|
583
|
-
const r =
|
|
589
|
+
const r = V, i = { HA: A, LA: t, zA: e };
|
|
584
590
|
for (const B in r) {
|
|
585
591
|
const Q = B, n = w.findTable(A, Q, e);
|
|
586
592
|
if (n) {
|
|
587
|
-
const [g,
|
|
588
|
-
let
|
|
589
|
-
|
|
593
|
+
const [g, h] = n;
|
|
594
|
+
let a = s[g];
|
|
595
|
+
a == null && (a = r[Q].parseTab(A, g, h, i), s[g] = a), i[Q] = a;
|
|
590
596
|
}
|
|
591
597
|
}
|
|
592
598
|
return i;
|
|
@@ -601,52 +607,52 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
601
607
|
r += 16;
|
|
602
608
|
}
|
|
603
609
|
return null;
|
|
604
|
-
}, T:
|
|
610
|
+
}, T: V, B: f };
|
|
605
611
|
class U {
|
|
606
612
|
constructor() {
|
|
607
|
-
o(this, "LA", /* @__PURE__ */ new Map());
|
|
608
613
|
o(this, "JA", /* @__PURE__ */ new Map());
|
|
614
|
+
o(this, "KA", /* @__PURE__ */ new Map());
|
|
609
615
|
}
|
|
610
|
-
|
|
611
|
-
const t = this.
|
|
612
|
-
if (this.
|
|
616
|
+
WA(A) {
|
|
617
|
+
const t = this.jA(A);
|
|
618
|
+
if (this.KA.has(t)) return this.KA.get(t);
|
|
613
619
|
const e = A.cmap;
|
|
614
|
-
if (!e || !e.tables) return this.
|
|
620
|
+
if (!e || !e.tables) return this.KA.set(t, null), null;
|
|
615
621
|
const s = ["p3e1", "p3e10", "p0e3", "p0e4"];
|
|
616
622
|
for (const i of s) if (e.ids[i] !== void 0) {
|
|
617
623
|
const B = e.tables[e.ids[i]];
|
|
618
|
-
return this.
|
|
624
|
+
return this.KA.set(t, B), B;
|
|
619
625
|
}
|
|
620
626
|
const r = e.tables[0] || null;
|
|
621
|
-
return this.
|
|
627
|
+
return this.KA.set(t, r), r;
|
|
622
628
|
}
|
|
623
|
-
|
|
624
|
-
const e = `${this.
|
|
625
|
-
if (this.
|
|
626
|
-
const s = this.
|
|
627
|
-
if (!s) return this.
|
|
629
|
+
NA(A, t) {
|
|
630
|
+
const e = `${this.jA(A)}_${t}`;
|
|
631
|
+
if (this.JA.has(e)) return this.JA.get(e);
|
|
632
|
+
const s = this.WA(A);
|
|
633
|
+
if (!s) return this.JA.set(e, 0), 0;
|
|
628
634
|
let r = 0;
|
|
629
|
-
return s.format === 4 ? r = this.
|
|
635
|
+
return s.format === 4 ? r = this.ZA(t, s) : s.format === 12 && (r = this.XA(t, s)), this.JA.set(e, r), r;
|
|
630
636
|
}
|
|
631
|
-
|
|
637
|
+
qA(A, t) {
|
|
632
638
|
const e = t.codePointAt(0);
|
|
633
|
-
return e === void 0 ? 0 : this.
|
|
639
|
+
return e === void 0 ? 0 : this.NA(A, e);
|
|
634
640
|
}
|
|
635
|
-
|
|
641
|
+
At(A, t) {
|
|
636
642
|
const e = A.hmtx;
|
|
637
643
|
return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
638
644
|
}
|
|
639
|
-
|
|
645
|
+
tt(A, t) {
|
|
640
646
|
const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
|
|
641
647
|
return { ascender: s, descender: r, lineGap: i, lineHeight: s - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
|
|
642
648
|
}
|
|
643
|
-
|
|
644
|
-
this.
|
|
649
|
+
et() {
|
|
650
|
+
this.JA.clear(), this.KA.clear();
|
|
645
651
|
}
|
|
646
|
-
|
|
647
|
-
return `${A.
|
|
652
|
+
jA(A) {
|
|
653
|
+
return `${A.zA}_${A.HA.length}`;
|
|
648
654
|
}
|
|
649
|
-
|
|
655
|
+
ZA(A, t) {
|
|
650
656
|
const e = t.endCount.length;
|
|
651
657
|
let s = -1;
|
|
652
658
|
for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
|
|
@@ -664,7 +670,7 @@ class U {
|
|
|
664
670
|
}
|
|
665
671
|
return 0;
|
|
666
672
|
}
|
|
667
|
-
|
|
673
|
+
XA(A, t) {
|
|
668
674
|
const e = t.groups.length / 3;
|
|
669
675
|
for (let s = 0; s < e; s++) {
|
|
670
676
|
const r = t.groups[3 * s], i = t.groups[3 * s + 1], B = t.groups[3 * s + 2];
|
|
@@ -675,43 +681,43 @@ class U {
|
|
|
675
681
|
}
|
|
676
682
|
class nA {
|
|
677
683
|
constructor(A) {
|
|
678
|
-
o(this, "
|
|
679
|
-
this.
|
|
684
|
+
o(this, "st");
|
|
685
|
+
this.st = A;
|
|
680
686
|
}
|
|
681
|
-
|
|
687
|
+
rt(A) {
|
|
682
688
|
var e;
|
|
683
689
|
const t = [];
|
|
684
690
|
return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
|
|
685
691
|
if (s.format === 4) {
|
|
686
|
-
const r = this.
|
|
692
|
+
const r = this.Bt(s);
|
|
687
693
|
t.push(...r);
|
|
688
694
|
} else if (s.format === 12) {
|
|
689
|
-
const r = this.
|
|
695
|
+
const r = this.it(s);
|
|
690
696
|
t.push(...r);
|
|
691
697
|
}
|
|
692
698
|
}), [...new Set(t)]) : [];
|
|
693
699
|
}
|
|
694
|
-
it(A, t) {
|
|
695
|
-
return this.et.XA(A, t) > 0;
|
|
696
|
-
}
|
|
697
700
|
Qt(A, t) {
|
|
698
|
-
|
|
699
|
-
return !0;
|
|
701
|
+
return this.st.qA(A, t) > 0;
|
|
700
702
|
}
|
|
701
703
|
Et(A, t) {
|
|
702
|
-
|
|
704
|
+
for (const e of t) if (!this.Qt(A, e)) return !1;
|
|
705
|
+
return !0;
|
|
706
|
+
}
|
|
707
|
+
ot(A, t) {
|
|
708
|
+
return t.filter((e) => this.Qt(A, e));
|
|
703
709
|
}
|
|
704
710
|
gt(A) {
|
|
705
|
-
return A.filter((t) => this.
|
|
711
|
+
return A.filter((t) => this.nt(t));
|
|
706
712
|
}
|
|
707
|
-
|
|
713
|
+
Bt(A) {
|
|
708
714
|
const t = [];
|
|
709
715
|
if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
|
|
710
716
|
for (let e = 0; e < A.startCount.length; e++) {
|
|
711
717
|
const s = A.startCount[e], r = A.endCount[e];
|
|
712
718
|
if (s !== 65535 || r !== 65535) {
|
|
713
719
|
for (let i = s; i <= r; i++)
|
|
714
|
-
if (this.
|
|
720
|
+
if (this.ht(A, i, e) > 0) try {
|
|
715
721
|
const B = String.fromCodePoint(i);
|
|
716
722
|
t.push(B);
|
|
717
723
|
} catch {
|
|
@@ -720,7 +726,7 @@ class nA {
|
|
|
720
726
|
}
|
|
721
727
|
return t;
|
|
722
728
|
}
|
|
723
|
-
|
|
729
|
+
it(A) {
|
|
724
730
|
const t = [];
|
|
725
731
|
if (!A.groups) return t;
|
|
726
732
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
@@ -734,7 +740,7 @@ class nA {
|
|
|
734
740
|
}
|
|
735
741
|
return t;
|
|
736
742
|
}
|
|
737
|
-
|
|
743
|
+
ht(A, t, e) {
|
|
738
744
|
if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
|
|
739
745
|
{
|
|
740
746
|
const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
|
|
@@ -745,58 +751,58 @@ class nA {
|
|
|
745
751
|
}
|
|
746
752
|
return 0;
|
|
747
753
|
}
|
|
748
|
-
|
|
754
|
+
nt(A) {
|
|
749
755
|
const t = A.codePointAt(0) || 0;
|
|
750
756
|
return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
|
|
751
757
|
}
|
|
752
758
|
}
|
|
753
759
|
class gA {
|
|
754
760
|
constructor() {
|
|
755
|
-
o(this, "
|
|
761
|
+
o(this, "lt");
|
|
756
762
|
const A = new U();
|
|
757
|
-
this.
|
|
763
|
+
this.lt = new nA(A);
|
|
758
764
|
}
|
|
759
765
|
extractCharacters(A) {
|
|
760
|
-
return this.
|
|
766
|
+
return this.lt.rt(A);
|
|
761
767
|
}
|
|
762
768
|
filterProblematicCharacters(A) {
|
|
763
|
-
return this.
|
|
769
|
+
return this.lt.gt(A);
|
|
764
770
|
}
|
|
765
771
|
characterExists(A, t) {
|
|
766
|
-
return this.
|
|
772
|
+
return this.lt.Qt(A, t);
|
|
767
773
|
}
|
|
768
774
|
allCharactersExist(A, t) {
|
|
769
|
-
return this.
|
|
775
|
+
return this.lt.Et(A, t);
|
|
770
776
|
}
|
|
771
777
|
}
|
|
772
|
-
class
|
|
778
|
+
class aA {
|
|
773
779
|
constructor(A) {
|
|
774
|
-
o(this, "lt");
|
|
775
780
|
o(this, "ct");
|
|
776
781
|
o(this, "Dt");
|
|
777
782
|
o(this, "Ct");
|
|
778
|
-
|
|
783
|
+
o(this, "ut");
|
|
784
|
+
this.Ct = A, this.ut = new U(), this.ct = document.createElement("canvas"), this.Dt = this.ct.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
779
785
|
}
|
|
780
786
|
createTextureAtlas(A, t, e, s) {
|
|
781
787
|
const r = A.length, i = Math.ceil(Math.sqrt(r)), B = Math.ceil(r / i), Q = t.width * i, n = t.height * B, g = typeof s == "object" ? s : null;
|
|
782
|
-
this.
|
|
783
|
-
const
|
|
784
|
-
return
|
|
788
|
+
this.Pt(Q, n), this.It(A, t, i, e, g);
|
|
789
|
+
const h = this.Ct.SA(Q, n, { filter: "nearest" });
|
|
790
|
+
return h.update(this.ct), { framebuffer: h, columns: i, rows: B };
|
|
785
791
|
}
|
|
786
|
-
|
|
787
|
-
this.
|
|
792
|
+
Pt(A, t) {
|
|
793
|
+
this.ct.width = A, this.ct.height = t, this.ct.style.width = A + "px", this.ct.style.height = A + "px", this.Dt.imageSmoothingEnabled = !1, this.ct.style.imageRendering = "pixelated", this.Dt.fillStyle = "black", this.Dt.fillRect(0, 0, A, t), this.Dt.textBaseline = "top", this.Dt.textAlign = "left", this.Dt.fillStyle = "white";
|
|
788
794
|
}
|
|
789
|
-
|
|
795
|
+
It(A, t, e, s, r) {
|
|
790
796
|
const i = s / r.head.unitsPerEm;
|
|
791
797
|
for (let B = 0; B < A.length; B++) {
|
|
792
|
-
const Q = B % e, n = Math.floor(B / e), g = A[B].character,
|
|
793
|
-
if (!
|
|
794
|
-
const
|
|
795
|
-
this.
|
|
798
|
+
const Q = B % e, n = Math.floor(B / e), g = A[B].character, h = this.wt(r, g);
|
|
799
|
+
if (!h) continue;
|
|
800
|
+
const a = g.codePointAt(0) || 0, C = this.ut.NA(r, a), c = this.ft(r, C) * i, l = Q * t.width, d = n * t.height, D = l + 0.5 * t.width, P = d + 0.5 * t.height, p = Math.round(D - 0.5 * t.width), m = Math.round(P - 0.5 * s), y = p + 0.5 * (t.width - c), v = m + r.hhea.ascender * i;
|
|
801
|
+
this.dt(h, y, v, i);
|
|
796
802
|
}
|
|
797
803
|
}
|
|
798
|
-
|
|
799
|
-
const e = t.codePointAt(0) || 0, s = this.
|
|
804
|
+
wt(A, t) {
|
|
805
|
+
const e = t.codePointAt(0) || 0, s = this.ut.NA(A, e);
|
|
800
806
|
if (s === 0) return null;
|
|
801
807
|
if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
|
|
802
808
|
if (w && w.T && w.T.glyf && w.T.glyf.VA) {
|
|
@@ -805,90 +811,90 @@ class hA {
|
|
|
805
811
|
}
|
|
806
812
|
return null;
|
|
807
813
|
}
|
|
808
|
-
|
|
814
|
+
ft(A, t) {
|
|
809
815
|
const e = A.hmtx;
|
|
810
816
|
return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
811
817
|
}
|
|
812
|
-
|
|
818
|
+
dt(A, t, e, s) {
|
|
813
819
|
if (!A || !A.xs || A.noc === 0) return;
|
|
814
820
|
const { xs: r, ys: i, endPts: B, flags: Q } = A;
|
|
815
821
|
if (!(r && i && B && Q)) return;
|
|
816
|
-
this.
|
|
822
|
+
this.Dt.beginPath();
|
|
817
823
|
let n = 0;
|
|
818
824
|
for (let g = 0; g < B.length; g++) {
|
|
819
|
-
const
|
|
820
|
-
if (!(
|
|
821
|
-
if (
|
|
822
|
-
const
|
|
823
|
-
this.
|
|
825
|
+
const h = B[g];
|
|
826
|
+
if (!(h < n)) {
|
|
827
|
+
if (h >= n) {
|
|
828
|
+
const a = t + r[n] * s, C = e - i[n] * s;
|
|
829
|
+
this.Dt.moveTo(a, C);
|
|
824
830
|
let c = n + 1;
|
|
825
|
-
for (; c <=
|
|
831
|
+
for (; c <= h; )
|
|
826
832
|
if (1 & Q[c]) {
|
|
827
833
|
const l = t + r[c] * s, d = e - i[c] * s;
|
|
828
|
-
this.
|
|
834
|
+
this.Dt.lineTo(l, d), c++;
|
|
829
835
|
} else {
|
|
830
836
|
const l = t + r[c] * s, d = e - i[c] * s;
|
|
831
|
-
let
|
|
832
|
-
if (1 & Q[
|
|
833
|
-
const P = t + r[
|
|
834
|
-
this.
|
|
837
|
+
let D = c + 1 > h ? n : c + 1;
|
|
838
|
+
if (1 & Q[D]) {
|
|
839
|
+
const P = t + r[D] * s, p = e - i[D] * s;
|
|
840
|
+
this.Dt.quadraticCurveTo(l, d, P, p), c = D + 1;
|
|
835
841
|
} else {
|
|
836
|
-
const P = (l + (t + r[
|
|
837
|
-
this.
|
|
842
|
+
const P = (l + (t + r[D] * s)) / 2, p = (d + (e - i[D] * s)) / 2;
|
|
843
|
+
this.Dt.quadraticCurveTo(l, d, P, p), c = D;
|
|
838
844
|
}
|
|
839
845
|
}
|
|
840
|
-
this.
|
|
846
|
+
this.Dt.closePath();
|
|
841
847
|
}
|
|
842
|
-
n =
|
|
848
|
+
n = h + 1;
|
|
843
849
|
}
|
|
844
850
|
}
|
|
845
|
-
this.
|
|
851
|
+
this.Dt.fill();
|
|
846
852
|
}
|
|
847
853
|
}
|
|
848
|
-
class
|
|
854
|
+
class hA {
|
|
849
855
|
constructor() {
|
|
850
|
-
o(this, "
|
|
851
|
-
this.
|
|
856
|
+
o(this, "st");
|
|
857
|
+
this.st = new U();
|
|
852
858
|
}
|
|
853
859
|
calculateMaxGlyphDimensions(A, t, e) {
|
|
854
860
|
let s = 0;
|
|
855
|
-
const r = this.
|
|
861
|
+
const r = this.st.tt(e, t), i = r.lineHeight;
|
|
856
862
|
for (const B of A) {
|
|
857
|
-
const Q = this.
|
|
863
|
+
const Q = this.st.qA(e, B);
|
|
858
864
|
if (Q === 0) continue;
|
|
859
|
-
const n = this.
|
|
865
|
+
const n = this.st.At(e, Q) * r.scale;
|
|
860
866
|
s = Math.max(s, n);
|
|
861
867
|
}
|
|
862
868
|
return { width: Math.ceil(s), height: Math.ceil(i) };
|
|
863
869
|
}
|
|
864
870
|
getCharacterAdvanceWidth(A, t, e) {
|
|
865
|
-
const s = this.
|
|
866
|
-
return this.
|
|
871
|
+
const s = this.st.tt(e, t), r = this.st.qA(e, A);
|
|
872
|
+
return this.st.At(e, r) * s.scale;
|
|
867
873
|
}
|
|
868
874
|
getFontMetrics(A, t) {
|
|
869
|
-
return this.
|
|
875
|
+
return this.st.tt(t, A);
|
|
870
876
|
}
|
|
871
|
-
|
|
872
|
-
this.et
|
|
877
|
+
et() {
|
|
878
|
+
this.st.et();
|
|
873
879
|
}
|
|
874
880
|
}
|
|
875
881
|
class lA {
|
|
876
882
|
constructor() {
|
|
877
|
-
o(this, "
|
|
878
|
-
this.
|
|
883
|
+
o(this, "ut");
|
|
884
|
+
this.ut = new U();
|
|
879
885
|
}
|
|
880
886
|
createCharacterObjects(A, t) {
|
|
881
887
|
return A.map((e, s) => {
|
|
882
|
-
const r = e.codePointAt(0) || 0, i = this.
|
|
888
|
+
const r = e.codePointAt(0) || 0, i = this._t(s);
|
|
883
889
|
let B = 0;
|
|
884
890
|
if (t.hmtx && t.hmtx.aWidth) {
|
|
885
|
-
const Q = this.
|
|
891
|
+
const Q = this.ut.NA(t, r);
|
|
886
892
|
Q > 0 && t.hmtx.aWidth[Q] !== void 0 && (B = t.hmtx.aWidth[Q]);
|
|
887
893
|
}
|
|
888
894
|
return { character: e, unicode: r, color: i, advanceWidth: B };
|
|
889
895
|
});
|
|
890
896
|
}
|
|
891
|
-
|
|
897
|
+
_t(A) {
|
|
892
898
|
return [A % 256, Math.floor(A / 256) % 256, Math.floor(A / 65536) % 256];
|
|
893
899
|
}
|
|
894
900
|
getCharacterColor(A, t) {
|
|
@@ -902,22 +908,22 @@ class lA {
|
|
|
902
908
|
}
|
|
903
909
|
class cA {
|
|
904
910
|
constructor(A, t = 16) {
|
|
905
|
-
o(this, "
|
|
906
|
-
o(this, "
|
|
907
|
-
o(this, "
|
|
908
|
-
o(this, "
|
|
909
|
-
o(this, "yt", 0);
|
|
911
|
+
o(this, "vt");
|
|
912
|
+
o(this, "bt", []);
|
|
913
|
+
o(this, "xt");
|
|
914
|
+
o(this, "yt", 16);
|
|
910
915
|
o(this, "Mt", 0);
|
|
911
|
-
o(this, "Gt",
|
|
912
|
-
o(this, "Ft");
|
|
913
|
-
o(this, "$t"
|
|
914
|
-
o(this, "Yt");
|
|
916
|
+
o(this, "Gt", 0);
|
|
917
|
+
o(this, "Ft", { width: 0, height: 0 });
|
|
918
|
+
o(this, "$t");
|
|
919
|
+
o(this, "Yt", "UrsaFont");
|
|
915
920
|
o(this, "Tt");
|
|
916
921
|
o(this, "St");
|
|
917
922
|
o(this, "Ot");
|
|
918
|
-
|
|
923
|
+
o(this, "Ut");
|
|
924
|
+
this.yt = t, this.Tt = new gA(), this.St = new aA(A), this.Ot = new hA(), this.Ut = new lA();
|
|
919
925
|
}
|
|
920
|
-
async
|
|
926
|
+
async kt(A) {
|
|
921
927
|
let t;
|
|
922
928
|
if (A) {
|
|
923
929
|
const e = await fetch(A);
|
|
@@ -926,121 +932,121 @@ class cA {
|
|
|
926
932
|
} else
|
|
927
933
|
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
|
|
928
934
|
`)).arrayBuffer();
|
|
929
|
-
await this.
|
|
935
|
+
await this.Rt(t), this.vt = w.parse(t)[0], await this.Vt();
|
|
930
936
|
}
|
|
931
|
-
|
|
932
|
-
if (A === void 0) return this.
|
|
933
|
-
this.
|
|
934
|
-
const t = this.
|
|
935
|
-
this.
|
|
937
|
+
Ht(A) {
|
|
938
|
+
if (A === void 0) return this.yt;
|
|
939
|
+
this.yt = A, this.Ft = this.Ot.calculateMaxGlyphDimensions(this.bt.map((e) => e.character), this.yt, this.vt);
|
|
940
|
+
const t = this.St.createTextureAtlas(this.bt, this.Ft, this.yt, this.vt);
|
|
941
|
+
this.xt = t.framebuffer, this.Mt = t.columns, this.Gt = t.rows;
|
|
936
942
|
}
|
|
937
|
-
async
|
|
943
|
+
async zt(A) {
|
|
938
944
|
try {
|
|
939
945
|
const t = await fetch(A);
|
|
940
946
|
if (!t.ok) throw new I(`Failed to load font file: ${t.status} ${t.statusText}`);
|
|
941
947
|
const e = await t.arrayBuffer();
|
|
942
|
-
await this.
|
|
948
|
+
await this.Rt(e);
|
|
943
949
|
const s = w.parse(e);
|
|
944
950
|
if (!s || s.length === 0) throw Error("Failed to parse font file");
|
|
945
|
-
this.
|
|
951
|
+
this.vt = s[0], await this.Vt();
|
|
946
952
|
} catch (t) {
|
|
947
953
|
throw new I("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
|
|
948
954
|
}
|
|
949
955
|
}
|
|
950
|
-
async
|
|
956
|
+
async Rt(A) {
|
|
951
957
|
const t = Date.now();
|
|
952
|
-
this
|
|
958
|
+
this.Yt = this.Yt === "UrsaFont" ? "UrsaFont" : "CustomFont_" + t, this.$t = new FontFace(this.Yt, A), await this.$t.load(), document.fonts.add(this.$t);
|
|
953
959
|
}
|
|
954
960
|
async Vt() {
|
|
955
|
-
const A = this.
|
|
956
|
-
this.
|
|
957
|
-
const e = this.
|
|
958
|
-
this.
|
|
961
|
+
const A = this.Tt.extractCharacters(this.vt), t = this.Tt.filterProblematicCharacters(A);
|
|
962
|
+
this.bt = this.Ut.createCharacterObjects(t, this.vt), this.Ft = this.Ot.calculateMaxGlyphDimensions(t, this.yt, this.vt);
|
|
963
|
+
const e = this.St.createTextureAtlas(this.bt, this.Ft, this.yt, this.vt);
|
|
964
|
+
this.xt = e.framebuffer, this.Mt = e.columns, this.Gt = e.rows;
|
|
959
965
|
}
|
|
960
966
|
getCharacterColor(A) {
|
|
961
|
-
return this.
|
|
967
|
+
return this.Ut.getCharacterColor(A, this.bt);
|
|
962
968
|
}
|
|
963
969
|
getCharacterColors(A) {
|
|
964
|
-
return this.
|
|
970
|
+
return this.Ut.getCharacterColors(A, this.bt);
|
|
965
971
|
}
|
|
966
972
|
hasAllCharacters(A) {
|
|
967
973
|
if (typeof A != "string" || A.length === 0) return !1;
|
|
968
|
-
const t = new Set(this.
|
|
974
|
+
const t = new Set(this.bt.map((e) => e.character));
|
|
969
975
|
for (const e of A) if (!t.has(e)) return !1;
|
|
970
976
|
return !0;
|
|
971
977
|
}
|
|
972
978
|
S() {
|
|
973
|
-
this.
|
|
979
|
+
this.xt.S(), document.fonts.delete(this.$t);
|
|
974
980
|
}
|
|
975
981
|
get fontFramebuffer() {
|
|
976
|
-
return this.
|
|
982
|
+
return this.xt;
|
|
977
983
|
}
|
|
978
984
|
get characters() {
|
|
979
|
-
return this.
|
|
985
|
+
return this.bt;
|
|
980
986
|
}
|
|
981
987
|
get textureColumns() {
|
|
982
|
-
return this.
|
|
988
|
+
return this.Mt;
|
|
983
989
|
}
|
|
984
990
|
get textureRows() {
|
|
985
|
-
return this.
|
|
991
|
+
return this.Gt;
|
|
986
992
|
}
|
|
987
993
|
get maxGlyphDimensions() {
|
|
988
|
-
return this.
|
|
994
|
+
return this.Ft;
|
|
989
995
|
}
|
|
990
996
|
get fontSize() {
|
|
991
|
-
return this.
|
|
997
|
+
return this.yt;
|
|
992
998
|
}
|
|
993
999
|
get font() {
|
|
994
|
-
return this.
|
|
1000
|
+
return this.vt;
|
|
995
1001
|
}
|
|
996
1002
|
}
|
|
997
|
-
class
|
|
1003
|
+
class CA {
|
|
998
1004
|
constructor(A, t, e) {
|
|
999
|
-
o(this, "zt");
|
|
1000
1005
|
o(this, "Lt");
|
|
1006
|
+
o(this, "Jt");
|
|
1001
1007
|
o(this, "p");
|
|
1002
1008
|
o(this, "_");
|
|
1003
|
-
o(this, "Jt");
|
|
1004
1009
|
o(this, "Kt");
|
|
1005
|
-
o(this, "Wt"
|
|
1006
|
-
o(this, "jt");
|
|
1010
|
+
o(this, "Wt");
|
|
1011
|
+
o(this, "jt", !1);
|
|
1007
1012
|
o(this, "Nt");
|
|
1008
1013
|
o(this, "Zt");
|
|
1009
|
-
this
|
|
1014
|
+
o(this, "Xt");
|
|
1015
|
+
this.Nt = A, this.Zt = t, this.Xt = e, this.xA();
|
|
1010
1016
|
}
|
|
1011
1017
|
xA() {
|
|
1012
|
-
this.
|
|
1013
|
-
}
|
|
1014
|
-
Xt() {
|
|
1015
|
-
this.p = this.zt * this.Nt, this._ = this.Lt * this.Zt, this.Jt = Math.floor((this.jt.width - this.p) / 2), this.Kt = Math.floor((this.jt.height - this._) / 2);
|
|
1018
|
+
this.jt || (this.Lt = Math.floor(this.Nt.width / this.Zt), this.Jt = Math.floor(this.Nt.height / this.Xt)), this.qt();
|
|
1016
1019
|
}
|
|
1017
|
-
qt(
|
|
1018
|
-
this.
|
|
1020
|
+
qt() {
|
|
1021
|
+
this.p = this.Lt * this.Zt, this._ = this.Jt * this.Xt, this.Kt = Math.floor((this.Nt.width - this.p) / 2), this.Wt = Math.floor((this.Nt.height - this._) / 2);
|
|
1019
1022
|
}
|
|
1020
1023
|
Ae(A, t) {
|
|
1021
|
-
this.
|
|
1024
|
+
this.Zt = A, this.Xt = t, this.xA();
|
|
1022
1025
|
}
|
|
1023
|
-
te() {
|
|
1024
|
-
this.
|
|
1026
|
+
te(A, t) {
|
|
1027
|
+
this.jt = !0, this.Lt = A, this.Jt = t, this.qt();
|
|
1025
1028
|
}
|
|
1026
1029
|
ee() {
|
|
1027
|
-
this.
|
|
1030
|
+
this.jt = !1, this.xA();
|
|
1031
|
+
}
|
|
1032
|
+
se() {
|
|
1033
|
+
this.jt ? this.qt() : this.xA();
|
|
1028
1034
|
}
|
|
1029
|
-
|
|
1030
|
-
if (A === void 0) return this.
|
|
1031
|
-
this.
|
|
1035
|
+
re(A) {
|
|
1036
|
+
if (A === void 0) return this.jt;
|
|
1037
|
+
this.jt = A;
|
|
1032
1038
|
}
|
|
1033
1039
|
get cellWidth() {
|
|
1034
|
-
return this.
|
|
1040
|
+
return this.Zt;
|
|
1035
1041
|
}
|
|
1036
1042
|
get cellHeight() {
|
|
1037
|
-
return this.
|
|
1043
|
+
return this.Xt;
|
|
1038
1044
|
}
|
|
1039
1045
|
get cols() {
|
|
1040
|
-
return this.
|
|
1046
|
+
return this.Lt;
|
|
1041
1047
|
}
|
|
1042
1048
|
get rows() {
|
|
1043
|
-
return this.
|
|
1049
|
+
return this.Jt;
|
|
1044
1050
|
}
|
|
1045
1051
|
get width() {
|
|
1046
1052
|
return this.p;
|
|
@@ -1049,109 +1055,109 @@ class DA {
|
|
|
1049
1055
|
return this._;
|
|
1050
1056
|
}
|
|
1051
1057
|
get offsetX() {
|
|
1052
|
-
return this.
|
|
1058
|
+
return this.Kt;
|
|
1053
1059
|
}
|
|
1054
1060
|
get offsetY() {
|
|
1055
|
-
return this.
|
|
1061
|
+
return this.Wt;
|
|
1056
1062
|
}
|
|
1057
1063
|
}
|
|
1058
|
-
class
|
|
1064
|
+
class DA {
|
|
1059
1065
|
constructor(A, t = !1, e = {}) {
|
|
1060
|
-
o(this, "
|
|
1061
|
-
o(this, "re");
|
|
1066
|
+
o(this, "Nt");
|
|
1062
1067
|
o(this, "Be");
|
|
1063
1068
|
o(this, "ie");
|
|
1069
|
+
o(this, "Qe");
|
|
1064
1070
|
o(this, "onTransformChange");
|
|
1065
|
-
this.
|
|
1071
|
+
this.Be = A, this.ie = t, this.Nt = this.Ee(e.width, e.height), t && this.setupTransformObserver();
|
|
1066
1072
|
}
|
|
1067
|
-
|
|
1073
|
+
Ee(A, t) {
|
|
1068
1074
|
var s;
|
|
1069
1075
|
const e = document.createElement("canvas");
|
|
1070
|
-
if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.
|
|
1076
|
+
if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.ie) e.width = A || 800, e.height = t || 600, document.body.appendChild(e);
|
|
1071
1077
|
else {
|
|
1072
|
-
const r = this.
|
|
1078
|
+
const r = this.Be.getBoundingClientRect();
|
|
1073
1079
|
let i = Math.round(r.width), B = Math.round(r.height);
|
|
1074
|
-
if (this.
|
|
1075
|
-
const g = this.
|
|
1080
|
+
if (this.Be instanceof HTMLVideoElement) {
|
|
1081
|
+
const g = this.Be;
|
|
1076
1082
|
(i === 0 || B === 0) && g.videoWidth > 0 && g.videoHeight > 0 && (i = g.videoWidth, B = g.videoHeight);
|
|
1077
1083
|
}
|
|
1078
1084
|
e.width = i, e.height = B, e.style.position = "absolute", e.style.pointerEvents = "none";
|
|
1079
|
-
const Q = window.getComputedStyle(this.
|
|
1085
|
+
const Q = window.getComputedStyle(this.Be);
|
|
1080
1086
|
let n = parseInt(Q.zIndex || "0", 10);
|
|
1081
|
-
isNaN(n) && (n = 0), e.style.zIndex = "" + (n + 1), this.
|
|
1087
|
+
isNaN(n) && (n = 0), e.style.zIndex = "" + (n + 1), this.oe(e), (s = this.Be.parentNode) == null || s.insertBefore(e, this.Be.nextSibling);
|
|
1082
1088
|
}
|
|
1083
1089
|
return e;
|
|
1084
1090
|
}
|
|
1085
|
-
|
|
1086
|
-
const t = this.
|
|
1087
|
-
let e = this.
|
|
1091
|
+
oe(A) {
|
|
1092
|
+
const t = this.Be.getBoundingClientRect();
|
|
1093
|
+
let e = this.Be.offsetParent;
|
|
1088
1094
|
if (e && e !== document.body) {
|
|
1089
1095
|
const s = e.getBoundingClientRect();
|
|
1090
1096
|
A.style.top = t.top - s.top + "px", A.style.left = t.left - s.left + "px";
|
|
1091
1097
|
} else A.style.top = t.top + window.scrollY + "px", A.style.left = t.left + window.scrollX + "px";
|
|
1092
1098
|
}
|
|
1093
|
-
|
|
1094
|
-
if (this.
|
|
1099
|
+
se(A, t) {
|
|
1100
|
+
if (this.ie) this.Nt.width = A ?? this.Nt.width, this.Nt.height = t ?? this.Nt.height;
|
|
1095
1101
|
else {
|
|
1096
|
-
const e = this.
|
|
1102
|
+
const e = this.Be.getBoundingClientRect();
|
|
1097
1103
|
let s = Math.round(e.width), r = Math.round(e.height);
|
|
1098
|
-
if (this.
|
|
1099
|
-
const i = this.
|
|
1104
|
+
if (this.Be instanceof HTMLVideoElement) {
|
|
1105
|
+
const i = this.Be;
|
|
1100
1106
|
(s === 0 || r === 0) && i.videoWidth > 0 && i.videoHeight > 0 && (s = i.videoWidth, r = i.videoHeight);
|
|
1101
1107
|
}
|
|
1102
|
-
this.
|
|
1108
|
+
this.Nt.width = s, this.Nt.height = r, this.oe(this.Nt);
|
|
1103
1109
|
}
|
|
1104
1110
|
}
|
|
1105
1111
|
ge() {
|
|
1106
|
-
const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.
|
|
1112
|
+
const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.Nt.getContext("webgl2", A) || this.Nt.getContext("webgl", A);
|
|
1107
1113
|
if (!t) throw new I("WebGL context could not be created. Ensure your browser supports WebGL.");
|
|
1108
1114
|
return t;
|
|
1109
1115
|
}
|
|
1110
1116
|
setupTransformObserver() {
|
|
1111
|
-
this.
|
|
1117
|
+
this.Qe = new ResizeObserver((A) => {
|
|
1112
1118
|
for (const t of A) {
|
|
1113
1119
|
const e = t.contentRect;
|
|
1114
|
-
!this.onTransformChange || Math.round(e.width) === this.
|
|
1120
|
+
!this.onTransformChange || Math.round(e.width) === this.Nt.width && Math.round(e.height) === this.Nt.height || this.onTransformChange();
|
|
1115
1121
|
}
|
|
1116
|
-
}), this.
|
|
1122
|
+
}), this.Qe.observe(this.Nt);
|
|
1117
1123
|
}
|
|
1118
1124
|
S() {
|
|
1119
|
-
this.
|
|
1120
|
-
const A = this.
|
|
1125
|
+
this.Qe && this.Qe.disconnect();
|
|
1126
|
+
const A = this.Nt.getContext("webgl") || this.Nt.getContext("webgl2");
|
|
1121
1127
|
if (A) {
|
|
1122
1128
|
const t = A.getExtension("WEBGL_lose_context");
|
|
1123
1129
|
t && t.loseContext();
|
|
1124
1130
|
}
|
|
1125
|
-
this.
|
|
1131
|
+
this.Nt.parentNode && this.Nt.parentNode.removeChild(this.Nt);
|
|
1126
1132
|
}
|
|
1127
1133
|
get canvas() {
|
|
1128
|
-
return this.
|
|
1134
|
+
return this.Nt;
|
|
1129
1135
|
}
|
|
1130
1136
|
get width() {
|
|
1131
|
-
return this.
|
|
1137
|
+
return this.Nt.width;
|
|
1132
1138
|
}
|
|
1133
1139
|
get height() {
|
|
1134
|
-
return this.
|
|
1140
|
+
return this.Nt.height;
|
|
1135
1141
|
}
|
|
1136
1142
|
}
|
|
1137
|
-
class
|
|
1143
|
+
class F {
|
|
1138
1144
|
constructor(A, t, e, s = {}) {
|
|
1139
|
-
o(this, "
|
|
1140
|
-
o(this, "oe");
|
|
1145
|
+
o(this, "Ct");
|
|
1141
1146
|
o(this, "ne");
|
|
1142
1147
|
o(this, "ae");
|
|
1143
1148
|
o(this, "he");
|
|
1144
1149
|
o(this, "le");
|
|
1145
1150
|
o(this, "ce");
|
|
1146
1151
|
o(this, "De");
|
|
1152
|
+
o(this, "Ce");
|
|
1147
1153
|
o(this, "h");
|
|
1148
|
-
this.
|
|
1149
|
-
const r = this.
|
|
1150
|
-
this.
|
|
1154
|
+
this.Ct = A, this.ne = t, this.ae = e, this.h = s;
|
|
1155
|
+
const r = this.ae.cols, i = this.ae.rows;
|
|
1156
|
+
this.he = this.Ct.SA(r, i), this.le = this.Ct.SA(r, i), this.ce = this.Ct.SA(r, i), this.De = this.Ct.SA(r, i), this.Ce = this.Ct.SA(r, i);
|
|
1151
1157
|
}
|
|
1152
|
-
|
|
1153
|
-
const A = this.
|
|
1154
|
-
this.
|
|
1158
|
+
se() {
|
|
1159
|
+
const A = this.ae.cols, t = this.ae.rows;
|
|
1160
|
+
this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t), this.Ce.resize(A, t);
|
|
1155
1161
|
}
|
|
1156
1162
|
enabled(A) {
|
|
1157
1163
|
u.C(typeof A == "boolean" || typeof A == "number" && Number.isInteger(A), "Enabled must be a boolean value or an integer (0 for false, any other number for true).", { method: "enabled", providedValue: A }) && (this.h.enabled = !!A);
|
|
@@ -1163,22 +1169,22 @@ class M {
|
|
|
1163
1169
|
this.enabled(!1);
|
|
1164
1170
|
}
|
|
1165
1171
|
S() {
|
|
1166
|
-
this.
|
|
1172
|
+
this.he.S(), this.le.S(), this.ce.S(), this.De.S(), this.Ce.S();
|
|
1167
1173
|
}
|
|
1168
1174
|
get characterFramebuffer() {
|
|
1169
|
-
return this.
|
|
1175
|
+
return this.he;
|
|
1170
1176
|
}
|
|
1171
1177
|
get primaryColorFramebuffer() {
|
|
1172
|
-
return this.
|
|
1178
|
+
return this.le;
|
|
1173
1179
|
}
|
|
1174
1180
|
get secondaryColorFramebuffer() {
|
|
1175
|
-
return this.
|
|
1181
|
+
return this.ce;
|
|
1176
1182
|
}
|
|
1177
1183
|
get rotationFramebuffer() {
|
|
1178
|
-
return this.
|
|
1184
|
+
return this.De;
|
|
1179
1185
|
}
|
|
1180
1186
|
get transformFramebuffer() {
|
|
1181
|
-
return this.
|
|
1187
|
+
return this.Ce;
|
|
1182
1188
|
}
|
|
1183
1189
|
get options() {
|
|
1184
1190
|
return this.h;
|
|
@@ -1187,27 +1193,27 @@ class M {
|
|
|
1187
1193
|
class uA {
|
|
1188
1194
|
constructor(A, t) {
|
|
1189
1195
|
o(this, "I");
|
|
1190
|
-
o(this, "
|
|
1191
|
-
o(this, "
|
|
1192
|
-
this.
|
|
1193
|
-
const e = Math.max(this.
|
|
1194
|
-
this.I = this.
|
|
1196
|
+
o(this, "Ct");
|
|
1197
|
+
o(this, "ue");
|
|
1198
|
+
this.Ct = A, this.ue = t;
|
|
1199
|
+
const e = Math.max(this.ue.length, 1);
|
|
1200
|
+
this.I = this.Ct.SA(e, 1), this.Pe();
|
|
1195
1201
|
}
|
|
1196
|
-
|
|
1197
|
-
const A = this.
|
|
1202
|
+
Pe() {
|
|
1203
|
+
const A = this.ue.length;
|
|
1198
1204
|
this.I.width !== A && this.I.resize(A, 1);
|
|
1199
1205
|
const t = new Uint8Array(1 * A * 4);
|
|
1200
1206
|
for (let e = 0; e < A; e++) {
|
|
1201
|
-
const s = this.
|
|
1207
|
+
const s = this.ue[e], r = 4 * e;
|
|
1202
1208
|
t[r] = s[0], t[r + 1] = s[1], t[r + 2] = s[2], t[r + 3] = 255;
|
|
1203
1209
|
}
|
|
1204
1210
|
this.I.updatePixels(t, A, 1);
|
|
1205
1211
|
}
|
|
1206
1212
|
setColors(A) {
|
|
1207
|
-
this.
|
|
1213
|
+
this.ue = A, this.Pe();
|
|
1208
1214
|
}
|
|
1209
1215
|
get colors() {
|
|
1210
|
-
return this.
|
|
1216
|
+
return this.ue;
|
|
1211
1217
|
}
|
|
1212
1218
|
get framebuffer() {
|
|
1213
1219
|
return this.I;
|
|
@@ -1216,31 +1222,31 @@ class uA {
|
|
|
1216
1222
|
return this.I.texture;
|
|
1217
1223
|
}
|
|
1218
1224
|
}
|
|
1219
|
-
class O extends
|
|
1225
|
+
class O extends F {
|
|
1220
1226
|
constructor(t, e, s, r = {}) {
|
|
1221
1227
|
super(t, e, s, r);
|
|
1222
|
-
o(this, "
|
|
1223
|
-
this.
|
|
1228
|
+
o(this, "Ie");
|
|
1229
|
+
this.Ie = new uA(this.Ct, this.ne.getCharacterColors(" .:-=+*%@#"));
|
|
1224
1230
|
}
|
|
1225
1231
|
characters(t) {
|
|
1226
|
-
u.C(this.
|
|
1232
|
+
u.C(this.ne.hasAllCharacters(t), "One or more characters do not exist in the current font.", { method: "characters", providedValue: t }) && (this.h.characters = t, this.Ie.setColors(this.ne.getCharacterColors(t)));
|
|
1227
1233
|
}
|
|
1228
1234
|
characterColor(t, e, s, r = 255) {
|
|
1229
|
-
const i = this.
|
|
1235
|
+
const i = this.we(t, "characterColor", e, s, r);
|
|
1230
1236
|
i && (this.h.characterColor = i);
|
|
1231
1237
|
}
|
|
1232
1238
|
characterColorMode(t) {
|
|
1233
|
-
this.
|
|
1239
|
+
this.fe(t, "characterColorMode");
|
|
1234
1240
|
}
|
|
1235
1241
|
cellColor(t, e, s, r = 255) {
|
|
1236
|
-
const i = this.
|
|
1242
|
+
const i = this.we(t, "cellColor", e, s, r);
|
|
1237
1243
|
i && (this.h.cellColor = i);
|
|
1238
1244
|
}
|
|
1239
1245
|
cellColorMode(t) {
|
|
1240
|
-
this.
|
|
1246
|
+
this.fe(t, "cellColorMode");
|
|
1241
1247
|
}
|
|
1242
1248
|
invert(t) {
|
|
1243
|
-
this.
|
|
1249
|
+
this.de(t, "invert", "Invert");
|
|
1244
1250
|
}
|
|
1245
1251
|
rotation(t) {
|
|
1246
1252
|
if (!u.C(typeof t == "number", "Rotation angle must be a number.", { method: "rotation", providedValue: t })) return;
|
|
@@ -1249,27 +1255,27 @@ class O extends M {
|
|
|
1249
1255
|
this.h.rotation = [s, r, 0, 1];
|
|
1250
1256
|
}
|
|
1251
1257
|
flipHorizontally(t) {
|
|
1252
|
-
this.
|
|
1258
|
+
this.de(t, "flipHorizontally", "Flip horizontally");
|
|
1253
1259
|
}
|
|
1254
1260
|
flipVertically(t) {
|
|
1255
|
-
this.
|
|
1261
|
+
this.de(t, "flipVertically", "Flip vertically");
|
|
1256
1262
|
}
|
|
1257
|
-
|
|
1263
|
+
we(t, e, s, r, i = 255) {
|
|
1258
1264
|
let B, Q, n, g;
|
|
1259
1265
|
if (typeof t == "string") {
|
|
1260
|
-
const
|
|
1261
|
-
if (!
|
|
1262
|
-
[B, Q, n, g] =
|
|
1263
|
-
} else if (B = t, Q = s !== void 0 ? s : t, n = r !== void 0 ? r : t, g = i, !u.C([B, Q, n, g].every((
|
|
1266
|
+
const h = this.me(t);
|
|
1267
|
+
if (!h) return u.C(!1, "Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.", { method: e, providedValue: t }), null;
|
|
1268
|
+
[B, Q, n, g] = h;
|
|
1269
|
+
} else if (B = t, Q = s !== void 0 ? s : t, n = r !== void 0 ? r : t, g = i, !u.C([B, Q, n, g].every((h) => h >= 0 && h <= 255), e.charAt(0).toUpperCase() + e.slice(1) + " color values must be between 0 and 255", { method: e, providedValues: { r: B, g: Q, b: n, a: g } })) return null;
|
|
1264
1270
|
return [B / 255, Q / 255, n / 255, g / 255];
|
|
1265
1271
|
}
|
|
1266
|
-
|
|
1272
|
+
fe(t, e) {
|
|
1267
1273
|
u.C(["sampled", "fixed"].includes(t), "Invalid color mode. Must be 'sampled' or 'fixed'.", { method: e, providedValue: t }) && (this.h[e] = t);
|
|
1268
1274
|
}
|
|
1269
|
-
|
|
1275
|
+
de(t, e, s) {
|
|
1270
1276
|
u.C(typeof t == "boolean" || typeof t == "number" && Number.isInteger(t), s + " must be a boolean value or an integer (0 for false, any other number for true).", { method: e, providedValue: t }) && (this.h[e] = !!t);
|
|
1271
1277
|
}
|
|
1272
|
-
|
|
1278
|
+
me(t) {
|
|
1273
1279
|
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;
|
|
1274
1280
|
}
|
|
1275
1281
|
}
|
|
@@ -1315,240 +1321,240 @@ void main() {\r
|
|
|
1315
1321
|
class S extends O {
|
|
1316
1322
|
constructor(t, e, s) {
|
|
1317
1323
|
super(t, e, s, { ...PA });
|
|
1318
|
-
o(this, "me");
|
|
1319
1324
|
o(this, "pe");
|
|
1320
1325
|
o(this, "_e");
|
|
1321
1326
|
o(this, "ve");
|
|
1322
1327
|
o(this, "be");
|
|
1323
1328
|
o(this, "xe");
|
|
1324
|
-
|
|
1329
|
+
o(this, "ye");
|
|
1330
|
+
this.pe = new x(t.context, T, "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._e = new x(t.context, T, "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.be = new x(t.context, T, "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.xe = new x(t.context, T, "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.ve = new x(t.context, T, "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.ye = this.Ct.SA(this.ae.cols, this.ae.rows);
|
|
1325
1331
|
}
|
|
1326
|
-
|
|
1327
|
-
const e = this.
|
|
1328
|
-
this.
|
|
1332
|
+
Me(t) {
|
|
1333
|
+
const e = this.ae.cols, s = this.ae.rows;
|
|
1334
|
+
this.ye.begin(), this.Ct.UA(), this.Ct.IA(this.pe), this.Ct.FA("u_sketchTexture", t), this.Ct.FA("u_gridCellDimensions", [e, s]), this.Ct.FA("u_brightnessRange", this.h.brightnessRange), this.Ct.$A(0, 0, e, s), this.ye.end(), this.le.begin(), this.Ct.UA(), this.Ct.IA(this._e), this.Ct.FA("u_sampleTexture", this.ye), this.Ct.FA("u_fillColor", this.h.characterColor), this.Ct.FA("u_useFixedColor", this.h.characterColorMode === "fixed"), this.Ct.$A(0, 0, e, s), this.le.end(), this.ce.begin(), this.Ct.UA(), this.Ct.IA(this._e), this.Ct.FA("u_sampleTexture", this.ye), this.Ct.FA("u_fillColor", this.h.cellColor), this.Ct.FA("u_useFixedColor", this.h.cellColorMode === "fixed"), this.Ct.$A(0, 0, e, s), this.ce.end(), this.Ce.begin(), this.Ct.UA(), this.Ct.IA(this.be), this.Ct.FA("u_sampleTexture", this.ye), this.Ct.FA("u_invert", this.h.invert), this.Ct.FA("u_flipHorizontally", this.h.flipHorizontally), this.Ct.FA("u_flipVertically", this.h.flipVertically), this.Ct.$A(0, 0, e, s), this.Ce.end(), this.De.begin(), this.Ct.UA(), this.Ct.IA(this.xe), this.Ct.FA("u_sampleTexture", this.ye), this.Ct.FA("u_rotationColor", this.h.rotation), this.Ct.$A(0, 0, e, s), this.De.end(), this.he.begin(), this.Ct.UA(), this.Ct.IA(this.ve), this.Ct.FA("u_colorSampleFramebuffer", this.ye), this.Ct.FA("u_charPaletteTexture", this.Ie.texture), this.Ct.FA("u_charPaletteSize", [this.Ie.colors.length, 1]), this.Ct.FA("u_brightnessRange", this.h.brightnessRange), this.Ct.$A(0, 0, e, s), this.he.end();
|
|
1329
1335
|
}
|
|
1330
|
-
|
|
1331
|
-
super.
|
|
1336
|
+
se() {
|
|
1337
|
+
super.se(), this.ye.resize(this.ae.cols, this.ae.rows);
|
|
1332
1338
|
}
|
|
1333
1339
|
brightnessRange(t) {
|
|
1334
1340
|
u.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);
|
|
1335
1341
|
}
|
|
1336
1342
|
}
|
|
1337
|
-
const OA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: S, TextmodeConverter:
|
|
1343
|
+
const OA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: S, TextmodeConverter: F, TextmodeFeatureConverter: O }, Symbol.toStringTag, { value: "Module" }));
|
|
1338
1344
|
class dA {
|
|
1339
1345
|
constructor(A, t, e) {
|
|
1340
|
-
o(this, "
|
|
1341
|
-
o(this, "
|
|
1342
|
-
o(this, "
|
|
1343
|
-
o(this, "Me");
|
|
1346
|
+
o(this, "Ct");
|
|
1347
|
+
o(this, "vt");
|
|
1348
|
+
o(this, "ae");
|
|
1344
1349
|
o(this, "Ge");
|
|
1345
1350
|
o(this, "Fe");
|
|
1346
1351
|
o(this, "$e");
|
|
1347
1352
|
o(this, "Ye");
|
|
1348
|
-
o(this, "
|
|
1353
|
+
o(this, "Te");
|
|
1349
1354
|
o(this, "he");
|
|
1350
1355
|
o(this, "le");
|
|
1351
1356
|
o(this, "ce");
|
|
1352
1357
|
o(this, "De");
|
|
1353
|
-
this
|
|
1358
|
+
o(this, "Ce");
|
|
1359
|
+
this.Ct = A, this.vt = t, this.ae = e, this.Te = this.Ct.MA(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.Fe = new S(A, t, e), this.$e = new F(A, t, e), this.Ge = [this.Fe, this.$e], this.he = this.Ct.SA(e.cols, e.rows), this.le = this.Ct.SA(e.cols, e.rows), this.ce = this.Ct.SA(e.cols, e.rows), this.De = this.Ct.SA(e.cols, e.rows), this.Ce = this.Ct.SA(e.cols, e.rows), this.Ye = this.Ct.SA(this.ae.width, this.ae.height);
|
|
1354
1360
|
}
|
|
1355
|
-
|
|
1356
|
-
for (const e of this.
|
|
1361
|
+
Se(A) {
|
|
1362
|
+
for (const e of this.Ge) e.options.enabled && e instanceof O && e.Me(A);
|
|
1357
1363
|
const t = (e, s) => {
|
|
1358
|
-
e.begin(), this.
|
|
1359
|
-
for (const r of this.
|
|
1364
|
+
e.begin(), this.Ct.UA();
|
|
1365
|
+
for (const r of this.Ge) r.options.enabled && this.Ct.RA(s(r), 0, 0);
|
|
1360
1366
|
e.end();
|
|
1361
1367
|
};
|
|
1362
|
-
t(this.
|
|
1368
|
+
t(this.he, (e) => e.characterFramebuffer), t(this.le, (e) => e.primaryColorFramebuffer), t(this.ce, (e) => e.secondaryColorFramebuffer), t(this.De, (e) => e.rotationFramebuffer), t(this.Ce, (e) => e.transformFramebuffer), this.Ye.begin(), this.Ct.UA(), this.Ct.IA(this.Te), this.Ct.FA("u_characterTexture", this.vt.fontFramebuffer), this.Ct.FA("u_charsetDimensions", [this.vt.textureColumns, this.vt.textureRows]), this.Ct.FA("u_asciiCharacterTexture", this.he.texture), this.Ct.FA("u_primaryColorTexture", this.le.texture), this.Ct.FA("u_secondaryColorTexture", this.ce.texture), this.Ct.FA("u_transformTexture", this.Ce.texture), this.Ct.FA("u_rotationTexture", this.De.texture), this.Ct.FA("u_captureTexture", A.texture), this.Ct.FA("u_backgroundMode", !1), this.Ct.FA("u_captureDimensions", [A.width, A.height]), this.Ct.FA("u_gridCellDimensions", [this.ae.cols, this.ae.rows]), this.Ct.FA("u_gridPixelDimensions", [this.ae.width, this.ae.height]), this.Ct.$A(0, 0, this.Ye.width, this.Ye.height), this.Ye.end();
|
|
1363
1369
|
}
|
|
1364
1370
|
add(A) {
|
|
1365
1371
|
if (!u.C(A === "brightness" || A === "custom", 'Converter type must be either "brightness" or "custom".', { method: "add", providedValue: A })) return;
|
|
1366
1372
|
let t;
|
|
1367
|
-
return t = A === "brightness" ? new S(this.
|
|
1373
|
+
return t = A === "brightness" ? new S(this.Ct, this.vt, this.ae) : new F(this.Ct, this.vt, this.ae), this.Ge.push(t), t;
|
|
1368
1374
|
}
|
|
1369
1375
|
remove(A) {
|
|
1370
|
-
if (!u.C(A instanceof
|
|
1371
|
-
const t = this.
|
|
1372
|
-
u.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.
|
|
1376
|
+
if (!u.C(A instanceof F, "Parameter must be a TextmodeConverter instance.", { method: "remove", providedValue: A })) return;
|
|
1377
|
+
const t = this.Ge.indexOf(A);
|
|
1378
|
+
u.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.Ge.length }) && this.Ge.splice(t, 1);
|
|
1373
1379
|
}
|
|
1374
1380
|
swap(A, t) {
|
|
1375
1381
|
const e = (B, Q) => {
|
|
1376
|
-
if (typeof B == "number") return u.C(Number.isInteger(B) && B >= 0 && B < this.
|
|
1377
|
-
if (B instanceof
|
|
1378
|
-
const n = this.
|
|
1379
|
-
return u.C(n !== -1, Q + " converter instance not found in pipeline.", { method: "swap", providedValue: B, convertersCount: this.
|
|
1382
|
+
if (typeof B == "number") return u.C(Number.isInteger(B) && B >= 0 && B < this.Ge.length, Q + " index must be a valid integer within the converter array bounds.", { method: "swap", providedValue: B, convertersCount: this.Ge.length }) ? B : null;
|
|
1383
|
+
if (B instanceof F) {
|
|
1384
|
+
const n = this.Ge.indexOf(B);
|
|
1385
|
+
return u.C(n !== -1, Q + " converter instance not found in pipeline.", { method: "swap", providedValue: B, convertersCount: this.Ge.length }) ? n : null;
|
|
1380
1386
|
}
|
|
1381
1387
|
return u.C(!1, Q + " parameter must be either an integer index or a TextmodeConverter instance.", { method: "swap", providedValue: B }), null;
|
|
1382
1388
|
}, s = e(A, "First"), r = e(t, "Second");
|
|
1383
1389
|
if (s === null || r === null || !u.C(s !== r, "Cannot swap a converter with itself.", { method: "swap", firstIndex: s, secondIndex: r })) return;
|
|
1384
|
-
const i = this.
|
|
1385
|
-
this.
|
|
1390
|
+
const i = this.Ge[s];
|
|
1391
|
+
this.Ge[s] = this.Ge[r], this.Ge[r] = i;
|
|
1386
1392
|
}
|
|
1387
|
-
|
|
1388
|
-
this
|
|
1389
|
-
const A = this.
|
|
1390
|
-
this.
|
|
1391
|
-
for (const e of this.
|
|
1393
|
+
se() {
|
|
1394
|
+
this.Ye.resize(this.ae.width, this.ae.height);
|
|
1395
|
+
const A = this.ae.cols, t = this.ae.rows;
|
|
1396
|
+
this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t), this.Ce.resize(A, t);
|
|
1397
|
+
for (const e of this.Ge) e.se();
|
|
1392
1398
|
}
|
|
1393
1399
|
hasEnabledConverters() {
|
|
1394
|
-
return this.
|
|
1400
|
+
return this.Ge.some((A) => A.options.enabled);
|
|
1395
1401
|
}
|
|
1396
1402
|
disable() {
|
|
1397
|
-
for (const A of this.
|
|
1403
|
+
for (const A of this.Ge) A.disable();
|
|
1398
1404
|
}
|
|
1399
1405
|
enable() {
|
|
1400
|
-
for (const A of this.
|
|
1406
|
+
for (const A of this.Ge) A.enable();
|
|
1401
1407
|
}
|
|
1402
1408
|
S() {
|
|
1403
|
-
for (const A of this.
|
|
1404
|
-
this.
|
|
1409
|
+
for (const A of this.Ge) A.S();
|
|
1410
|
+
this.he.S(), this.le.S(), this.ce.S(), this.De.S(), this.Ce.S(), this.Ye.S(), this.Te.S();
|
|
1405
1411
|
}
|
|
1406
1412
|
get texture() {
|
|
1407
|
-
return this
|
|
1413
|
+
return this.Ye;
|
|
1408
1414
|
}
|
|
1409
1415
|
get characterFramebuffer() {
|
|
1410
|
-
return this.
|
|
1416
|
+
return this.he;
|
|
1411
1417
|
}
|
|
1412
1418
|
get primaryColorFramebuffer() {
|
|
1413
|
-
return this.
|
|
1419
|
+
return this.le;
|
|
1414
1420
|
}
|
|
1415
1421
|
get secondaryColorFramebuffer() {
|
|
1416
|
-
return this.
|
|
1422
|
+
return this.ce;
|
|
1417
1423
|
}
|
|
1418
1424
|
get rotationFramebuffer() {
|
|
1419
|
-
return this.
|
|
1425
|
+
return this.De;
|
|
1420
1426
|
}
|
|
1421
1427
|
get transformFramebuffer() {
|
|
1422
|
-
return this.
|
|
1428
|
+
return this.Ce;
|
|
1423
1429
|
}
|
|
1424
1430
|
get brightness() {
|
|
1425
|
-
return this.
|
|
1431
|
+
return this.Fe;
|
|
1426
1432
|
}
|
|
1427
1433
|
get custom() {
|
|
1428
|
-
return this
|
|
1434
|
+
return this.$e;
|
|
1429
1435
|
}
|
|
1430
1436
|
}
|
|
1431
1437
|
const IA = (E) => class extends E {
|
|
1432
1438
|
fill(A, t, e, s) {
|
|
1433
|
-
this.
|
|
1439
|
+
this.Ct.wA(A, t, e, s);
|
|
1434
1440
|
}
|
|
1435
1441
|
stroke(A, t, e, s) {
|
|
1436
|
-
this.
|
|
1442
|
+
this.Ct.fA(A, t, e, s);
|
|
1437
1443
|
}
|
|
1438
1444
|
strokeWeight(A) {
|
|
1439
|
-
this.
|
|
1445
|
+
this.Ct.dA(A);
|
|
1440
1446
|
}
|
|
1441
1447
|
noStroke() {
|
|
1442
|
-
this.
|
|
1448
|
+
this.Ct.mA();
|
|
1443
1449
|
}
|
|
1444
1450
|
noFill() {
|
|
1445
|
-
this.
|
|
1451
|
+
this.Ct.pA();
|
|
1446
1452
|
}
|
|
1447
1453
|
rotate(A) {
|
|
1448
|
-
this.
|
|
1454
|
+
this.Ct._A(A);
|
|
1449
1455
|
}
|
|
1450
1456
|
push() {
|
|
1451
|
-
this.
|
|
1457
|
+
this.Ct.vA();
|
|
1452
1458
|
}
|
|
1453
1459
|
pop() {
|
|
1454
|
-
this.
|
|
1460
|
+
this.Ct.bA();
|
|
1455
1461
|
}
|
|
1456
1462
|
rect(A, t, e = 1, s = 1) {
|
|
1457
|
-
this.
|
|
1463
|
+
this.Ct.$A(A, t, e, s);
|
|
1458
1464
|
}
|
|
1459
1465
|
line(A, t, e, s) {
|
|
1460
|
-
this.
|
|
1466
|
+
this.Ct.TA(A, t, e, s);
|
|
1461
1467
|
}
|
|
1462
1468
|
background(A, t = A, e = A, s = 255) {
|
|
1463
|
-
this.
|
|
1469
|
+
this.Ct.OA(A, t, e, s);
|
|
1464
1470
|
}
|
|
1465
1471
|
createShader(A, t) {
|
|
1466
|
-
return this.
|
|
1472
|
+
return this.Ct.MA(A, t);
|
|
1467
1473
|
}
|
|
1468
1474
|
createFilterShader(A) {
|
|
1469
|
-
return this.
|
|
1475
|
+
return this.Ct.GA(A);
|
|
1470
1476
|
}
|
|
1471
1477
|
shader(A) {
|
|
1472
|
-
this.
|
|
1478
|
+
this.Ct.IA(A);
|
|
1473
1479
|
}
|
|
1474
1480
|
setUniform(A, t) {
|
|
1475
|
-
this.
|
|
1481
|
+
this.Ct.FA(A, t);
|
|
1476
1482
|
}
|
|
1477
1483
|
image(A, t, e, s, r) {
|
|
1478
|
-
this.
|
|
1484
|
+
this.Ct.RA(A, t, e, s, r);
|
|
1479
1485
|
}
|
|
1480
1486
|
clear() {
|
|
1481
|
-
this.
|
|
1487
|
+
this.Ct.UA();
|
|
1482
1488
|
}
|
|
1483
1489
|
createFramebuffer(A, t, e = {}) {
|
|
1484
|
-
return this.
|
|
1490
|
+
return this.Ct.SA(A, t, e);
|
|
1485
1491
|
}
|
|
1486
1492
|
};
|
|
1487
|
-
class
|
|
1488
|
-
|
|
1493
|
+
class N {
|
|
1494
|
+
Oe(A) {
|
|
1489
1495
|
const t = A.characterFramebuffer, e = A.primaryColorFramebuffer, s = A.secondaryColorFramebuffer, r = A.transformFramebuffer, i = A.rotationFramebuffer;
|
|
1490
1496
|
return t == null || t.loadPixels(), e == null || e.loadPixels(), s == null || s.loadPixels(), r == null || r.loadPixels(), i == null || i.loadPixels(), { characterPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0), primaryColorPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0), secondaryColorPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0), transformPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0), rotationPixels: (i == null ? void 0 : i.pixels) || new Uint8Array(0) };
|
|
1491
1497
|
}
|
|
1492
|
-
|
|
1498
|
+
Ue(A, t) {
|
|
1493
1499
|
return A[t] + (A[t + 1] << 8);
|
|
1494
1500
|
}
|
|
1495
|
-
|
|
1501
|
+
ke(A, t) {
|
|
1496
1502
|
return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
|
|
1497
1503
|
}
|
|
1498
1504
|
}
|
|
1499
1505
|
class k {
|
|
1500
|
-
|
|
1506
|
+
Re(A, t) {
|
|
1501
1507
|
return new Blob([A], { type: t });
|
|
1502
1508
|
}
|
|
1503
1509
|
Ve(A, t, e) {
|
|
1504
1510
|
try {
|
|
1505
|
-
const s = this.
|
|
1511
|
+
const s = this.Re(A, e), r = URL.createObjectURL(s), i = document.createElement("a");
|
|
1506
1512
|
i.href = r, i.download = t, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r);
|
|
1507
1513
|
} catch (s) {
|
|
1508
1514
|
throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
|
|
1509
1515
|
}
|
|
1510
1516
|
}
|
|
1511
|
-
|
|
1517
|
+
He() {
|
|
1512
1518
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1513
1519
|
}
|
|
1514
|
-
|
|
1520
|
+
ze() {
|
|
1515
1521
|
const A = /* @__PURE__ */ new Date();
|
|
1516
1522
|
return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1517
1523
|
}
|
|
1518
|
-
|
|
1524
|
+
Le(A) {
|
|
1519
1525
|
return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1520
1526
|
}
|
|
1521
|
-
|
|
1522
|
-
return "'textmode-export'-" + this.
|
|
1527
|
+
Je() {
|
|
1528
|
+
return "'textmode-export'-" + this.He();
|
|
1523
1529
|
}
|
|
1524
1530
|
}
|
|
1525
|
-
class fA extends
|
|
1526
|
-
|
|
1531
|
+
class fA extends N {
|
|
1532
|
+
Ke(A, t, e) {
|
|
1527
1533
|
const s = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, B = t[e], Q = t[e + 1];
|
|
1528
1534
|
return { isInverted: s, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (B + Q / 255) / 255 * 100) / 100 };
|
|
1529
1535
|
}
|
|
1530
|
-
|
|
1536
|
+
We(A, t, e) {
|
|
1531
1537
|
return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
|
|
1532
1538
|
}
|
|
1533
|
-
|
|
1539
|
+
je(A, t) {
|
|
1534
1540
|
const e = [];
|
|
1535
1541
|
let s = 0;
|
|
1536
1542
|
for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
|
|
1537
|
-
const B = 4 * s, Q = this.
|
|
1538
|
-
let n = this.
|
|
1539
|
-
const
|
|
1540
|
-
if (
|
|
1541
|
-
const
|
|
1542
|
-
n = g, g =
|
|
1543
|
+
const B = 4 * s, Q = this.Ue(A.characterPixels, B);
|
|
1544
|
+
let n = this.ke(A.primaryColorPixels, B), g = this.ke(A.secondaryColorPixels, B);
|
|
1545
|
+
const h = this.Ke(A.transformPixels, A.rotationPixels, B);
|
|
1546
|
+
if (h.isInverted) {
|
|
1547
|
+
const C = n;
|
|
1548
|
+
n = g, g = C;
|
|
1543
1549
|
}
|
|
1544
|
-
const
|
|
1545
|
-
e.push({ charIndex: Q, primaryColor: n, secondaryColor: g, transform:
|
|
1550
|
+
const a = this.We(i, r, t);
|
|
1551
|
+
e.push({ charIndex: Q, primaryColor: n, secondaryColor: g, transform: h, position: a }), s++;
|
|
1546
1552
|
}
|
|
1547
1553
|
return e;
|
|
1548
1554
|
}
|
|
1549
1555
|
}
|
|
1550
1556
|
class wA {
|
|
1551
|
-
|
|
1557
|
+
Ne(A, t) {
|
|
1552
1558
|
const e = A.cmap;
|
|
1553
1559
|
for (const s of e.tables) if (s.format === 4) {
|
|
1554
1560
|
for (let r = 0; r < s.startCount.length; r++) if (t >= s.startCount[r] && t <= s.endCount[r]) {
|
|
@@ -1564,60 +1570,60 @@ class wA {
|
|
|
1564
1570
|
}
|
|
1565
1571
|
return 0;
|
|
1566
1572
|
}
|
|
1567
|
-
|
|
1573
|
+
Ze(A, t, e, s, r) {
|
|
1568
1574
|
const i = r / A.head.unitsPerEm;
|
|
1569
|
-
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.
|
|
1575
|
+
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.Xe(t, e, s, i) };
|
|
1570
1576
|
}
|
|
1571
|
-
|
|
1577
|
+
Xe(A, t, e, s) {
|
|
1572
1578
|
if (!A || !A.xs) return "";
|
|
1573
1579
|
const { xs: r, ys: i, endPts: B, flags: Q } = A;
|
|
1574
1580
|
if (!(r && i && B && Q)) return "";
|
|
1575
1581
|
let n = "", g = 0;
|
|
1576
|
-
for (let
|
|
1577
|
-
const
|
|
1578
|
-
if (!(
|
|
1579
|
-
if (
|
|
1580
|
-
const
|
|
1581
|
-
n += `M${
|
|
1582
|
+
for (let h = 0; h < B.length; h++) {
|
|
1583
|
+
const a = B[h];
|
|
1584
|
+
if (!(a < g)) {
|
|
1585
|
+
if (a >= g) {
|
|
1586
|
+
const C = t + r[g] * s, c = e - i[g] * s;
|
|
1587
|
+
n += `M${C.toFixed(2)},${c.toFixed(2)}`;
|
|
1582
1588
|
let l = g + 1;
|
|
1583
|
-
for (; l <=
|
|
1589
|
+
for (; l <= a; )
|
|
1584
1590
|
if (1 & Q[l]) {
|
|
1585
|
-
const d = t + r[l] * s,
|
|
1586
|
-
n += `L${d.toFixed(2)},${
|
|
1591
|
+
const d = t + r[l] * s, D = e - i[l] * s;
|
|
1592
|
+
n += `L${d.toFixed(2)},${D.toFixed(2)}`, l++;
|
|
1587
1593
|
} else {
|
|
1588
|
-
const d = t + r[l] * s,
|
|
1589
|
-
let P = l + 1 >
|
|
1594
|
+
const d = t + r[l] * s, D = e - i[l] * s;
|
|
1595
|
+
let P = l + 1 > a ? g : l + 1;
|
|
1590
1596
|
if (1 & Q[P]) {
|
|
1591
1597
|
const p = t + r[P] * s, m = e - i[P] * s;
|
|
1592
|
-
n += `Q${d.toFixed(2)},${
|
|
1598
|
+
n += `Q${d.toFixed(2)},${D.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P + 1;
|
|
1593
1599
|
} else {
|
|
1594
|
-
const p = (d + (t + r[P] * s)) / 2, m = (
|
|
1595
|
-
n += `Q${d.toFixed(2)},${
|
|
1600
|
+
const p = (d + (t + r[P] * s)) / 2, m = (D + (e - i[P] * s)) / 2;
|
|
1601
|
+
n += `Q${d.toFixed(2)},${D.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P;
|
|
1596
1602
|
}
|
|
1597
1603
|
}
|
|
1598
1604
|
n += "Z";
|
|
1599
1605
|
}
|
|
1600
|
-
g =
|
|
1606
|
+
g = a + 1;
|
|
1601
1607
|
}
|
|
1602
1608
|
}
|
|
1603
1609
|
return n;
|
|
1604
1610
|
}
|
|
1605
|
-
|
|
1606
|
-
const i = A.codePointAt(0) || 0, B = this.
|
|
1611
|
+
qe(A, t, e, s, r) {
|
|
1612
|
+
const i = A.codePointAt(0) || 0, B = this.Ne(t, i);
|
|
1607
1613
|
let Q = null;
|
|
1608
|
-
return t.glyf && t.glyf[B] !== null ? Q = t.glyf[B] : w && w.T && w.T.glyf && w.T.glyf.VA && (Q = w.T.glyf.VA(t, B), t.glyf && Q && (t.glyf[B] = Q)), this.
|
|
1614
|
+
return t.glyf && t.glyf[B] !== null ? Q = t.glyf[B] : w && w.T && w.T.glyf && w.T.glyf.VA && (Q = w.T.glyf.VA(t, B), t.glyf && Q && (t.glyf[B] = Q)), this.Ze(t, Q, e, s, r);
|
|
1609
1615
|
}
|
|
1610
|
-
|
|
1616
|
+
As(A, t, e, s, r, i, B, Q) {
|
|
1611
1617
|
const n = e + (r - Q * (B / t.head.unitsPerEm)) / 2, g = s + (i + 0.7 * B) / 2;
|
|
1612
|
-
return this.
|
|
1618
|
+
return this.qe(A, t, n, g, B).toSVG() || null;
|
|
1613
1619
|
}
|
|
1614
1620
|
}
|
|
1615
1621
|
class pA {
|
|
1616
1622
|
constructor() {
|
|
1617
|
-
o(this, "
|
|
1618
|
-
this.
|
|
1623
|
+
o(this, "ts");
|
|
1624
|
+
this.ts = new wA();
|
|
1619
1625
|
}
|
|
1620
|
-
|
|
1626
|
+
es(A) {
|
|
1621
1627
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
1622
1628
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
1623
1629
|
<svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
|
|
@@ -1625,21 +1631,21 @@ class pA {
|
|
|
1625
1631
|
<title>textmode art generated via textmode.js</title>
|
|
1626
1632
|
<desc>textmode art visualization generated by textmode.js library</desc>`;
|
|
1627
1633
|
}
|
|
1628
|
-
|
|
1634
|
+
ss() {
|
|
1629
1635
|
return `
|
|
1630
1636
|
</g>
|
|
1631
1637
|
</svg>`;
|
|
1632
1638
|
}
|
|
1633
|
-
|
|
1639
|
+
rs(A, t) {
|
|
1634
1640
|
if (!t.includeBackgroundRectangles) return "";
|
|
1635
1641
|
const e = t.backgroundColor, s = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
|
|
1636
1642
|
return `
|
|
1637
1643
|
<rect width="${A.width}" height="${A.height}" fill="${s}" />`;
|
|
1638
1644
|
}
|
|
1639
|
-
|
|
1645
|
+
Bs(A) {
|
|
1640
1646
|
return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
|
|
1641
1647
|
}
|
|
1642
|
-
|
|
1648
|
+
Qs(A, t) {
|
|
1643
1649
|
const { transform: e, position: s } = A, r = s.cellX + t.cellWidth / 2, i = s.cellY + t.cellHeight / 2, B = [];
|
|
1644
1650
|
if (e.flipHorizontal || e.flipVertical) {
|
|
1645
1651
|
const Q = e.flipHorizontal ? -1 : 1, n = e.flipVertical ? -1 : 1;
|
|
@@ -1647,91 +1653,91 @@ class pA {
|
|
|
1647
1653
|
}
|
|
1648
1654
|
return e.rotation && B.push(`rotate(${e.rotation} ${r} ${i})`), B.length ? ` transform="${B.join(" ")}"` : "";
|
|
1649
1655
|
}
|
|
1650
|
-
|
|
1656
|
+
Es(A, t, e) {
|
|
1651
1657
|
if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
|
|
1652
|
-
const { position: s } = A, r = this.
|
|
1658
|
+
const { position: s } = A, r = this.Bs(A.secondaryColor);
|
|
1653
1659
|
return e.drawMode === "stroke" ? `
|
|
1654
1660
|
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
|
|
1655
1661
|
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
|
|
1656
1662
|
}
|
|
1657
|
-
|
|
1663
|
+
qe(A, t, e, s) {
|
|
1658
1664
|
const r = e.characters[A.charIndex];
|
|
1659
1665
|
if (!r) return "";
|
|
1660
|
-
const i = this.As
|
|
1666
|
+
const i = this.ts.As(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
|
|
1661
1667
|
if (!i) return "";
|
|
1662
|
-
const B = this.
|
|
1668
|
+
const B = this.Bs(A.primaryColor);
|
|
1663
1669
|
return s.drawMode === "stroke" ? `
|
|
1664
1670
|
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${B}" stroke-width="${s.strokeWidth}" fill="none" />` : `
|
|
1665
1671
|
<path d="${i}" fill="${B}" />`;
|
|
1666
1672
|
}
|
|
1667
|
-
|
|
1673
|
+
gs(A, t, e, s) {
|
|
1668
1674
|
let r = "";
|
|
1669
|
-
r += this.
|
|
1670
|
-
const i = this.
|
|
1675
|
+
r += this.Es(A, t, s);
|
|
1676
|
+
const i = this.Qs(A, t), B = this.qe(A, t, e, s);
|
|
1671
1677
|
return B && (i ? (r += `
|
|
1672
1678
|
<g${i}>`, r += B, r += `
|
|
1673
1679
|
</g>`) : r += B), r;
|
|
1674
1680
|
}
|
|
1675
|
-
|
|
1676
|
-
let r = this.
|
|
1677
|
-
r += this.
|
|
1681
|
+
ns(A, t, e, s) {
|
|
1682
|
+
let r = this.es(t);
|
|
1683
|
+
r += this.rs(t, s), r += `
|
|
1678
1684
|
<g id="ascii-cells">`;
|
|
1679
|
-
for (const i of A) r += this.
|
|
1680
|
-
return r += this.
|
|
1685
|
+
for (const i of A) r += this.gs(i, t, e, s);
|
|
1686
|
+
return r += this.ss(), r;
|
|
1681
1687
|
}
|
|
1682
|
-
|
|
1688
|
+
hs(A) {
|
|
1683
1689
|
return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
|
|
1684
1690
|
`).replace(/[ \t]+$/gm, "");
|
|
1685
1691
|
}
|
|
1686
1692
|
}
|
|
1687
1693
|
class mA extends k {
|
|
1688
|
-
|
|
1689
|
-
return this.
|
|
1690
|
-
}
|
|
1691
|
-
ls(A, t) {
|
|
1692
|
-
this.Ve(A, this.ze(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1694
|
+
ls(A) {
|
|
1695
|
+
return this.Re(A, "image/svg+xml;charset=utf-8");
|
|
1693
1696
|
}
|
|
1694
1697
|
cs(A, t) {
|
|
1695
|
-
this.
|
|
1698
|
+
this.Ve(A, this.Le(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1699
|
+
}
|
|
1700
|
+
Ds(A, t) {
|
|
1701
|
+
this.cs(A, t || this.Je());
|
|
1696
1702
|
}
|
|
1697
1703
|
}
|
|
1698
1704
|
class $ {
|
|
1699
1705
|
constructor() {
|
|
1700
|
-
o(this, "Ds");
|
|
1701
1706
|
o(this, "Cs");
|
|
1702
1707
|
o(this, "us");
|
|
1703
|
-
|
|
1708
|
+
o(this, "Ps");
|
|
1709
|
+
this.Cs = new fA(), this.us = new pA(), this.Ps = new mA();
|
|
1704
1710
|
}
|
|
1705
|
-
|
|
1711
|
+
Is(A) {
|
|
1706
1712
|
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0] };
|
|
1707
1713
|
}
|
|
1708
|
-
|
|
1709
|
-
const e = this.
|
|
1710
|
-
return this.
|
|
1714
|
+
ws(A, t = {}) {
|
|
1715
|
+
const e = this.Is(t), s = this.Cs.Oe(A.pipeline), r = this.Cs.je(s, A.grid), i = this.us.ns(r, A.grid, A.font, e);
|
|
1716
|
+
return this.us.hs(i);
|
|
1711
1717
|
}
|
|
1712
|
-
|
|
1713
|
-
const e = this.
|
|
1714
|
-
this.
|
|
1718
|
+
Ds(A, t = {}) {
|
|
1719
|
+
const e = this.ws(A, t), s = t.filename || this.Ps.Je();
|
|
1720
|
+
this.Ps.Ds(e, s);
|
|
1715
1721
|
}
|
|
1716
1722
|
}
|
|
1717
|
-
class xA extends
|
|
1718
|
-
|
|
1723
|
+
class xA extends N {
|
|
1724
|
+
fs(A, t, e, s = " ") {
|
|
1719
1725
|
var B;
|
|
1720
1726
|
const r = [];
|
|
1721
1727
|
let i = 0;
|
|
1722
1728
|
for (let Q = 0; Q < t.rows; Q++) {
|
|
1723
1729
|
const n = [];
|
|
1724
1730
|
for (let g = 0; g < t.cols; g++) {
|
|
1725
|
-
const
|
|
1726
|
-
n.push(
|
|
1731
|
+
const h = 4 * i, a = this.Ue(A.characterPixels, h), C = ((B = e.characters[a]) == null ? void 0 : B.character) || s;
|
|
1732
|
+
n.push(C), i++;
|
|
1727
1733
|
}
|
|
1728
1734
|
r.push(n);
|
|
1729
1735
|
}
|
|
1730
1736
|
return r;
|
|
1731
1737
|
}
|
|
1732
1738
|
}
|
|
1733
|
-
class
|
|
1734
|
-
|
|
1739
|
+
class vA {
|
|
1740
|
+
ds(A, t) {
|
|
1735
1741
|
const e = [];
|
|
1736
1742
|
for (const r of A) {
|
|
1737
1743
|
let i = r.join("");
|
|
@@ -1743,37 +1749,37 @@ class bA {
|
|
|
1743
1749
|
return e.join(s);
|
|
1744
1750
|
}
|
|
1745
1751
|
}
|
|
1746
|
-
class
|
|
1747
|
-
|
|
1748
|
-
const e = this.
|
|
1752
|
+
class bA extends k {
|
|
1753
|
+
ps(A, t) {
|
|
1754
|
+
const e = this._s(t);
|
|
1749
1755
|
this.Ve(A, e, "text/plain;charset=utf-8");
|
|
1750
1756
|
}
|
|
1751
|
-
|
|
1752
|
-
let t = this.
|
|
1753
|
-
return t === ".txt" || t.length <= 4 ? this.
|
|
1757
|
+
_s(A) {
|
|
1758
|
+
let t = this.Le(A);
|
|
1759
|
+
return t === ".txt" || t.length <= 4 ? this.Je() : t;
|
|
1754
1760
|
}
|
|
1755
1761
|
}
|
|
1756
|
-
class
|
|
1762
|
+
class J {
|
|
1757
1763
|
constructor() {
|
|
1758
|
-
o(this, "Ds");
|
|
1759
1764
|
o(this, "Cs");
|
|
1760
1765
|
o(this, "us");
|
|
1761
|
-
|
|
1766
|
+
o(this, "Ps");
|
|
1767
|
+
this.Cs = new xA(), this.us = new vA(), this.Ps = new bA();
|
|
1762
1768
|
}
|
|
1763
|
-
|
|
1769
|
+
Is(A) {
|
|
1764
1770
|
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " " };
|
|
1765
1771
|
}
|
|
1766
|
-
|
|
1767
|
-
const e = this.
|
|
1768
|
-
return this.
|
|
1772
|
+
vs(A, t = {}) {
|
|
1773
|
+
const e = this.Is(t), s = this.Cs.Oe(A.pipeline), r = this.Cs.fs(s, A.grid, A.font, e.emptyCharacter);
|
|
1774
|
+
return this.us.ds(r, e);
|
|
1769
1775
|
}
|
|
1770
|
-
|
|
1771
|
-
const e = this.
|
|
1772
|
-
this.
|
|
1776
|
+
ps(A, t = {}) {
|
|
1777
|
+
const e = this.vs(A, t), s = t.filename || this.Ps.Je();
|
|
1778
|
+
this.Ps.ps(e, s);
|
|
1773
1779
|
}
|
|
1774
1780
|
}
|
|
1775
|
-
class yA extends
|
|
1776
|
-
|
|
1781
|
+
class yA extends N {
|
|
1782
|
+
bs(A, t = 1, e = "transparent") {
|
|
1777
1783
|
const s = A.canvas;
|
|
1778
1784
|
if (t === 1 && e === "transparent") return s;
|
|
1779
1785
|
const r = document.createElement("canvas"), i = r.getContext("2d"), B = Math.round(s.width * t), Q = Math.round(s.height * t);
|
|
@@ -1781,19 +1787,19 @@ class yA extends L {
|
|
|
1781
1787
|
}
|
|
1782
1788
|
}
|
|
1783
1789
|
class _A {
|
|
1784
|
-
|
|
1785
|
-
const e = this.
|
|
1790
|
+
Ms(A, t) {
|
|
1791
|
+
const e = this.Gs(t.format);
|
|
1786
1792
|
return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
|
|
1787
1793
|
}
|
|
1788
|
-
async
|
|
1794
|
+
async Fs(A, t) {
|
|
1789
1795
|
return new Promise((e, s) => {
|
|
1790
|
-
const r = this.
|
|
1796
|
+
const r = this.Gs(t.format), i = (B) => {
|
|
1791
1797
|
B ? e(B) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
|
|
1792
1798
|
};
|
|
1793
1799
|
t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
|
|
1794
1800
|
});
|
|
1795
1801
|
}
|
|
1796
|
-
|
|
1802
|
+
Gs(A) {
|
|
1797
1803
|
switch (A) {
|
|
1798
1804
|
case "png":
|
|
1799
1805
|
return "image/png";
|
|
@@ -1806,12 +1812,12 @@ class _A {
|
|
|
1806
1812
|
}
|
|
1807
1813
|
}
|
|
1808
1814
|
}
|
|
1809
|
-
const
|
|
1810
|
-
class
|
|
1811
|
-
|
|
1812
|
-
this
|
|
1815
|
+
const FA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, W = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
1816
|
+
class MA extends k {
|
|
1817
|
+
$s(A, t, e) {
|
|
1818
|
+
this.Ys(A, this.Le(t) + W[e]);
|
|
1813
1819
|
}
|
|
1814
|
-
|
|
1820
|
+
Ys(A, t) {
|
|
1815
1821
|
const e = URL.createObjectURL(A);
|
|
1816
1822
|
try {
|
|
1817
1823
|
const s = document.createElement("a");
|
|
@@ -1820,223 +1826,226 @@ class GA extends k {
|
|
|
1820
1826
|
URL.revokeObjectURL(e);
|
|
1821
1827
|
}
|
|
1822
1828
|
}
|
|
1823
|
-
|
|
1824
|
-
return A in
|
|
1829
|
+
Ts(A) {
|
|
1830
|
+
return A in FA && A in W;
|
|
1825
1831
|
}
|
|
1826
1832
|
}
|
|
1827
1833
|
class TA {
|
|
1828
1834
|
constructor() {
|
|
1829
|
-
o(this, "Ds");
|
|
1830
1835
|
o(this, "Cs");
|
|
1831
1836
|
o(this, "us");
|
|
1832
|
-
|
|
1837
|
+
o(this, "Ps");
|
|
1838
|
+
this.Cs = new yA(), this.us = new _A(), this.Ps = new MA();
|
|
1833
1839
|
}
|
|
1834
|
-
|
|
1840
|
+
Is(A) {
|
|
1835
1841
|
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent" };
|
|
1836
1842
|
}
|
|
1837
|
-
|
|
1838
|
-
if (console.log("Validating image export options:", A), !this.
|
|
1843
|
+
Ss(A) {
|
|
1844
|
+
if (console.log("Validating image export options:", A), !this.Ps.Ts(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
|
|
1839
1845
|
if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
1840
1846
|
if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
1841
1847
|
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");
|
|
1842
1848
|
}
|
|
1843
|
-
|
|
1844
|
-
const e = this.
|
|
1845
|
-
if (this.
|
|
1846
|
-
const s = this.
|
|
1847
|
-
return this.
|
|
1848
|
-
}
|
|
1849
|
-
async Gs(A, t = {}) {
|
|
1850
|
-
const e = this.Ps(t);
|
|
1851
|
-
if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.Cs.Gs(A.canvas, e);
|
|
1852
|
-
const s = this.Ds.vs(A, e.scale, e.backgroundColor);
|
|
1853
|
-
return await this.Cs.Gs(s, e);
|
|
1849
|
+
Os(A, t = {}) {
|
|
1850
|
+
const e = this.Is(t);
|
|
1851
|
+
if (this.Ss(e), e.scale === 1 && e.backgroundColor === "transparent") return this.us.Ms(A.canvas, e);
|
|
1852
|
+
const s = this.Cs.bs(A, e.scale, e.backgroundColor);
|
|
1853
|
+
return this.us.Ms(s, e);
|
|
1854
1854
|
}
|
|
1855
1855
|
async Fs(A, t = {}) {
|
|
1856
|
-
const e =
|
|
1857
|
-
this.us.Fs(
|
|
1856
|
+
const e = this.Is(t);
|
|
1857
|
+
if (this.Ss(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.us.Fs(A.canvas, e);
|
|
1858
|
+
const s = this.Cs.bs(A, e.scale, e.backgroundColor);
|
|
1859
|
+
return await this.us.Fs(s, e);
|
|
1860
|
+
}
|
|
1861
|
+
async $s(A, t = {}) {
|
|
1862
|
+
const e = await this.Fs(A, t), s = t.format ?? "png", r = t.filename || this.Ps.Je();
|
|
1863
|
+
this.Ps.$s(e, r, s);
|
|
1858
1864
|
}
|
|
1859
1865
|
}
|
|
1860
1866
|
const RA = (E) => class extends E {
|
|
1861
1867
|
toString(A = {}) {
|
|
1862
|
-
return new
|
|
1868
|
+
return new J().vs({ pipeline: this.Us, grid: this.ae, font: this.vt }, A);
|
|
1863
1869
|
}
|
|
1864
1870
|
saveStrings(A = {}) {
|
|
1865
|
-
new
|
|
1871
|
+
new J().ps({ pipeline: this.Us, grid: this.ae, font: this.vt }, A);
|
|
1866
1872
|
}
|
|
1867
1873
|
toSVG(A = {}) {
|
|
1868
|
-
return new $().
|
|
1874
|
+
return new $().ws(this, A);
|
|
1869
1875
|
}
|
|
1870
1876
|
saveSVG(A = {}) {
|
|
1871
|
-
new $().
|
|
1877
|
+
new $().Ds(this, A);
|
|
1872
1878
|
}
|
|
1873
1879
|
async saveCanvas(A, t = "png", e = {}) {
|
|
1874
|
-
await new TA()
|
|
1880
|
+
await new TA().$s(this.Nt, { ...e, filename: A, format: t });
|
|
1875
1881
|
}
|
|
1876
|
-
},
|
|
1882
|
+
}, GA = (E) => class extends E {
|
|
1877
1883
|
async loadFont(A) {
|
|
1878
|
-
return this.
|
|
1879
|
-
const t = this.
|
|
1880
|
-
this.
|
|
1884
|
+
return this.vt.zt(A).then(() => {
|
|
1885
|
+
const t = this.vt.maxGlyphDimensions;
|
|
1886
|
+
this.ae.Ae(t.width, t.height), this.Us.se();
|
|
1881
1887
|
});
|
|
1882
1888
|
}
|
|
1883
1889
|
fontSize(A) {
|
|
1884
|
-
if (!u.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.
|
|
1885
|
-
this.
|
|
1886
|
-
const t = this.
|
|
1887
|
-
this.
|
|
1890
|
+
if (!u.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.vt.fontSize === A) return;
|
|
1891
|
+
this.vt.Ht(A);
|
|
1892
|
+
const t = this.vt.maxGlyphDimensions;
|
|
1893
|
+
this.ae.Ae(t.width, t.height), this.Us.se(), this.Ct.kA();
|
|
1888
1894
|
}
|
|
1889
1895
|
}, UA = (E) => class extends E {
|
|
1890
1896
|
addConverter(A) {
|
|
1891
|
-
return this.
|
|
1897
|
+
return this.Us.add(A);
|
|
1892
1898
|
}
|
|
1893
1899
|
removeConverter(A) {
|
|
1894
|
-
this.
|
|
1900
|
+
this.Us.remove(A);
|
|
1895
1901
|
}
|
|
1896
1902
|
};
|
|
1897
1903
|
class YA {
|
|
1898
1904
|
constructor() {
|
|
1899
|
-
o(this, "
|
|
1900
|
-
o(this, "
|
|
1901
|
-
o(this, "
|
|
1902
|
-
o(this, "
|
|
1903
|
-
o(this, "
|
|
1905
|
+
o(this, "Ct");
|
|
1906
|
+
o(this, "vt");
|
|
1907
|
+
o(this, "Us");
|
|
1908
|
+
o(this, "Nt");
|
|
1909
|
+
o(this, "ae");
|
|
1904
1910
|
}
|
|
1905
1911
|
}
|
|
1906
1912
|
class z extends function(t, ...e) {
|
|
1907
1913
|
return e.reduce((s, r) => r(s), t);
|
|
1908
|
-
}(YA, IA, RA,
|
|
1914
|
+
}(YA, IA, RA, GA, UA) {
|
|
1909
1915
|
constructor(t = null, e = {}) {
|
|
1910
1916
|
super();
|
|
1911
|
-
o(this, "
|
|
1912
|
-
o(this, "Us");
|
|
1913
|
-
o(this, "ie");
|
|
1917
|
+
o(this, "Be");
|
|
1914
1918
|
o(this, "ks");
|
|
1919
|
+
o(this, "Qe");
|
|
1920
|
+
o(this, "Rs");
|
|
1915
1921
|
o(this, "Vs");
|
|
1916
|
-
o(this, "
|
|
1917
|
-
o(this, "
|
|
1918
|
-
o(this, "
|
|
1919
|
-
o(this, "
|
|
1920
|
-
o(this, "Js", 0);
|
|
1922
|
+
o(this, "Hs", null);
|
|
1923
|
+
o(this, "zs", 0);
|
|
1924
|
+
o(this, "Ls");
|
|
1925
|
+
o(this, "Js", !0);
|
|
1921
1926
|
o(this, "Ks", 0);
|
|
1922
1927
|
o(this, "Ws", 0);
|
|
1923
|
-
o(this, "js",
|
|
1924
|
-
o(this, "Ns",
|
|
1925
|
-
o(this, "Zs",
|
|
1928
|
+
o(this, "js", 0);
|
|
1929
|
+
o(this, "Ns", []);
|
|
1930
|
+
o(this, "Zs", 10);
|
|
1926
1931
|
o(this, "Xs", !1);
|
|
1927
|
-
o(this, "qs",
|
|
1928
|
-
});
|
|
1932
|
+
o(this, "qs", !1);
|
|
1929
1933
|
o(this, "Ar", () => {
|
|
1930
1934
|
});
|
|
1931
|
-
o(this, "tr")
|
|
1932
|
-
|
|
1935
|
+
o(this, "tr", () => {
|
|
1936
|
+
});
|
|
1937
|
+
o(this, "er");
|
|
1938
|
+
this.Be = t, this.qs = t === null, this.Rs = e.renderMode ?? "auto", this.Vs = e.frameRate ?? 60, this.Ls = 1e3 / this.Vs;
|
|
1933
1939
|
}
|
|
1934
1940
|
static async create(t = null, e = {}) {
|
|
1935
|
-
const s = new this(t, e), r = s.
|
|
1941
|
+
const s = new this(t, e), r = s.qs ? e : void 0;
|
|
1936
1942
|
let i, B;
|
|
1937
|
-
s.
|
|
1938
|
-
const Q = s.
|
|
1939
|
-
return s.
|
|
1943
|
+
s.Nt = new DA(s.Be, s.qs, r), s.Ct = new iA(s.Nt.ge()), s.qs ? (i = e.width || 800, B = e.height || 600) : (i = s.Nt.width || 800, B = s.Nt.height || 600), s.ks = s.Ct.SA(i, B), s.vt = new cA(s.Ct, e.fontSize ?? 16), await s.vt.kt(e.fontSource);
|
|
1944
|
+
const Q = s.vt.maxGlyphDimensions;
|
|
1945
|
+
return s.ae = new CA(s.Nt.canvas, Q.width, Q.height), s.Us = new dA(s.Ct, s.vt, s.ae), s.sr(), s.rr(), s;
|
|
1940
1946
|
}
|
|
1941
|
-
|
|
1942
|
-
this.
|
|
1943
|
-
this.
|
|
1944
|
-
}, window.addEventListener("resize", this.
|
|
1945
|
-
this.
|
|
1946
|
-
}), this.
|
|
1947
|
+
sr() {
|
|
1948
|
+
this.er = () => {
|
|
1949
|
+
this.qs ? this.tr() : this.Br();
|
|
1950
|
+
}, window.addEventListener("resize", this.er), window.ResizeObserver && this.Be && !this.qs && (this.Qe = new ResizeObserver(() => {
|
|
1951
|
+
this.Br();
|
|
1952
|
+
}), this.Qe.observe(this.Be));
|
|
1947
1953
|
}
|
|
1948
1954
|
render() {
|
|
1949
|
-
this.
|
|
1955
|
+
this.ir(), this.js++, this.Xs ? console.warn("Cannot render: Required resources have been disposed") : (this.qs ? (this.ks.begin(), this.Ar(), this.ks.end()) : this.ks.update(this.Be), this.Us.hasEnabledConverters() ? (this.Us.Se(this.ks), this.Ct.OA(0), this.Ct.RA(this.Us.texture, this.ae.offsetX, this.ae.offsetY, this.Us.texture.width, this.Us.texture.height)) : (this.Ct.UA(), this.Ct.RA(this.ks, this.ae.offsetX, this.ae.offsetY, this.ks.width, this.ks.height)));
|
|
1950
1956
|
}
|
|
1951
|
-
|
|
1952
|
-
this.
|
|
1957
|
+
Br() {
|
|
1958
|
+
this.Nt.se(), this.ks.resize(this.Nt.width, this.Nt.height), this.ae.se(), this.Us.se(), this.Ct.kA(), this.Rs !== "manual" && this.render();
|
|
1953
1959
|
}
|
|
1954
|
-
|
|
1955
|
-
if (this.
|
|
1956
|
-
this.
|
|
1960
|
+
rr() {
|
|
1961
|
+
if (this.Rs !== "auto" || !this.Js) return;
|
|
1962
|
+
this.zs = performance.now();
|
|
1957
1963
|
const t = (e) => {
|
|
1958
|
-
if (!this.
|
|
1959
|
-
const s = e - this.
|
|
1960
|
-
s >= this.
|
|
1964
|
+
if (!this.Js) return void (this.Hs = null);
|
|
1965
|
+
const s = e - this.zs;
|
|
1966
|
+
s >= this.Ls && (this.render(), this.zs = e - s % this.Ls), this.Js && (this.Hs = requestAnimationFrame(t));
|
|
1961
1967
|
};
|
|
1962
|
-
this.
|
|
1968
|
+
this.Hs = requestAnimationFrame(t);
|
|
1963
1969
|
}
|
|
1964
|
-
|
|
1970
|
+
ir() {
|
|
1965
1971
|
const t = performance.now();
|
|
1966
|
-
if (this.
|
|
1967
|
-
const e = t - this.
|
|
1968
|
-
this.
|
|
1969
|
-
const s = this.
|
|
1970
|
-
this.
|
|
1972
|
+
if (this.Ws > 0) {
|
|
1973
|
+
const e = t - this.Ws;
|
|
1974
|
+
this.Ns.push(e), this.Ns.length > this.Zs && this.Ns.shift();
|
|
1975
|
+
const s = this.Ns.reduce((r, i) => r + i, 0) / this.Ns.length;
|
|
1976
|
+
this.Ks = 1e3 / s;
|
|
1971
1977
|
}
|
|
1972
|
-
this.
|
|
1978
|
+
this.Ws = t;
|
|
1973
1979
|
}
|
|
1974
|
-
|
|
1975
|
-
this.
|
|
1980
|
+
Qr() {
|
|
1981
|
+
this.Hs && (cancelAnimationFrame(this.Hs), this.Hs = null);
|
|
1976
1982
|
}
|
|
1977
1983
|
renderMode(t) {
|
|
1978
|
-
this.
|
|
1984
|
+
this.Rs !== t && (this.Qr(), this.Rs = t, t === "auto" && this.Js && this.rr());
|
|
1979
1985
|
}
|
|
1980
1986
|
frameRate(t) {
|
|
1981
|
-
if (t === void 0) return this.
|
|
1982
|
-
this.Vs = t, this.
|
|
1987
|
+
if (t === void 0) return this.Ks;
|
|
1988
|
+
this.Vs = t, this.Ls = 1e3 / t, this.Rs === "auto" && this.Js && (this.Qr(), this.rr());
|
|
1983
1989
|
}
|
|
1984
1990
|
noLoop() {
|
|
1985
|
-
this.
|
|
1991
|
+
this.Js && (this.Js = !1, this.Hs && (cancelAnimationFrame(this.Hs), this.Hs = null));
|
|
1986
1992
|
}
|
|
1987
1993
|
loop() {
|
|
1988
|
-
this.
|
|
1994
|
+
this.Js || (this.Js = !0, this.Rs === "auto" && this.rr());
|
|
1989
1995
|
}
|
|
1990
1996
|
redraw(t = 1) {
|
|
1991
1997
|
if (u.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();
|
|
1992
1998
|
}
|
|
1993
1999
|
isLooping() {
|
|
1994
|
-
return this.
|
|
2000
|
+
return this.Rs === "auto" && this.Js;
|
|
1995
2001
|
}
|
|
1996
2002
|
draw(t) {
|
|
1997
|
-
this.
|
|
2003
|
+
this.Ar = t;
|
|
1998
2004
|
}
|
|
1999
2005
|
windowResized(t) {
|
|
2000
|
-
this.
|
|
2006
|
+
this.tr = t;
|
|
2001
2007
|
}
|
|
2002
2008
|
resizeCanvas(t, e) {
|
|
2003
|
-
this.
|
|
2009
|
+
this.qs && (this.Nt.se(t, e), this.ks.resize(this.Nt.width, this.Nt.height), this.ae.se(), this.Us.se(), this.Ct.kA(), this.Rs !== "manual" && this.render());
|
|
2004
2010
|
}
|
|
2005
2011
|
destroy() {
|
|
2006
|
-
this.
|
|
2012
|
+
this.Xs || (this.Qr(), window.removeEventListener("resize", this.er), this.Qe && this.Qe.disconnect(), this.Us.S(), this.vt.S(), this.ks.S(), this.Ct.S(), this.Xs = !0);
|
|
2007
2013
|
}
|
|
2008
2014
|
get grid() {
|
|
2009
|
-
return this.
|
|
2015
|
+
return this.ae;
|
|
2010
2016
|
}
|
|
2011
2017
|
get font() {
|
|
2012
|
-
return this.
|
|
2018
|
+
return this.vt;
|
|
2013
2019
|
}
|
|
2014
2020
|
get mode() {
|
|
2015
|
-
return this.
|
|
2021
|
+
return this.Rs;
|
|
2016
2022
|
}
|
|
2017
2023
|
get pipeline() {
|
|
2018
|
-
return this.
|
|
2024
|
+
return this.Us;
|
|
2019
2025
|
}
|
|
2020
2026
|
get frameCount() {
|
|
2021
|
-
return this.
|
|
2027
|
+
return this.js;
|
|
2028
|
+
}
|
|
2029
|
+
get renderer() {
|
|
2030
|
+
return this.Ct;
|
|
2022
2031
|
}
|
|
2023
2032
|
set frameCount(t) {
|
|
2024
|
-
this.
|
|
2033
|
+
this.js = t;
|
|
2025
2034
|
}
|
|
2026
2035
|
get width() {
|
|
2027
|
-
return this.
|
|
2036
|
+
return this.Nt.width;
|
|
2028
2037
|
}
|
|
2029
2038
|
get height() {
|
|
2030
|
-
return this.
|
|
2039
|
+
return this.Nt.height;
|
|
2031
2040
|
}
|
|
2032
2041
|
get canvas() {
|
|
2033
|
-
return this.
|
|
2042
|
+
return this.Nt;
|
|
2034
2043
|
}
|
|
2035
2044
|
get isDisposed() {
|
|
2036
|
-
return this.
|
|
2045
|
+
return this.Xs;
|
|
2037
2046
|
}
|
|
2038
2047
|
}
|
|
2039
|
-
class
|
|
2048
|
+
class L {
|
|
2040
2049
|
constructor() {
|
|
2041
2050
|
throw new I("Textmode is a static class and cannot be instantiated.");
|
|
2042
2051
|
}
|
|
@@ -2053,23 +2062,23 @@ class j {
|
|
|
2053
2062
|
u.u(A);
|
|
2054
2063
|
}
|
|
2055
2064
|
static get version() {
|
|
2056
|
-
return "0.1.9-beta.
|
|
2065
|
+
return "0.1.9-beta.5";
|
|
2057
2066
|
}
|
|
2058
2067
|
}
|
|
2059
|
-
const
|
|
2068
|
+
const NA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), kA = L.create, LA = L.setErrorLevel, HA = L.version;
|
|
2060
2069
|
export {
|
|
2061
|
-
|
|
2070
|
+
DA as TextmodeCanvas,
|
|
2062
2071
|
uA as TextmodeColorPalette,
|
|
2063
2072
|
dA as TextmodeConversionPipeline,
|
|
2064
2073
|
eA as TextmodeErrorLevel,
|
|
2065
2074
|
cA as TextmodeFont,
|
|
2066
|
-
|
|
2075
|
+
CA as TextmodeGrid,
|
|
2067
2076
|
z as Textmodifier,
|
|
2068
2077
|
OA as converters,
|
|
2069
2078
|
kA as create,
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2079
|
+
L as default,
|
|
2080
|
+
NA as export,
|
|
2081
|
+
LA as setErrorLevel,
|
|
2082
|
+
L as textmode,
|
|
2083
|
+
HA as version
|
|
2075
2084
|
};
|