textmode.js 0.2.0-beta.1 → 0.2.0-beta.3
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 +1237 -1147
- package/dist/textmode.esm.min.js +1344 -1254
- package/dist/textmode.umd.js +20 -19
- package/dist/textmode.umd.min.js +20 -19
- package/dist/types/export/svg/SVGExporter.d.ts +5 -5
- package/dist/types/export/svg/types.d.ts +9 -0
- package/dist/types/rendering/webgl/DrawQueue.d.ts +2 -0
- package/dist/types/rendering/webgl/InstanceData.d.ts +6 -4
- package/dist/types/rendering/webgl/RenderPipeline.d.ts +7 -0
- package/dist/types/rendering/webgl/RenderState.d.ts +16 -13
- package/dist/types/rendering/webgl/Renderer.d.ts +18 -1
- package/dist/types/rendering/webgl/Shader.d.ts +4 -0
- package/dist/types/rendering/webgl/ShaderManager.d.ts +1 -0
- package/dist/types/rendering/webgl/geometries/BaseGeometry.d.ts +4 -2
- package/dist/types/rendering/webgl/geometries/NoiseGrid.d.ts +1 -0
- package/dist/types/rendering/webgl/types/DrawCommand.d.ts +10 -1
- package/dist/types/rendering/webgl/types/RenderTypes.d.ts +2 -0
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +218 -6
- package/dist/types/textmode/mixins/ShaderMixin.d.ts +1 -0
- package/package.json +1 -1
package/dist/textmode.esm.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
class
|
|
1
|
+
var Z = Object.defineProperty;
|
|
2
|
+
var K = (E, A, t) => A in E ? Z(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
|
|
3
|
+
var o = (E, A, t) => K(E, typeof A != "symbol" ? A + "" : A, t);
|
|
4
|
+
class m extends Error {
|
|
5
5
|
constructor(A, t = {}) {
|
|
6
|
-
super(
|
|
6
|
+
super(m.A(A, t)), this.name = "TextmodeError";
|
|
7
7
|
}
|
|
8
8
|
static A(A, t) {
|
|
9
9
|
let e = A;
|
|
@@ -11,9 +11,9 @@ class f extends Error {
|
|
|
11
11
|
e += `
|
|
12
12
|
|
|
13
13
|
📋 Context:`;
|
|
14
|
-
for (const [
|
|
14
|
+
for (const [s, r] of Object.entries(t))
|
|
15
15
|
e += `
|
|
16
|
-
- ${
|
|
16
|
+
- ${s}: ${m.i(r)}`;
|
|
17
17
|
}
|
|
18
18
|
return e += `
|
|
19
19
|
|
|
@@ -25,208 +25,212 @@ class f extends Error {
|
|
|
25
25
|
if (A === void 0) return "undefined";
|
|
26
26
|
if (typeof A == "string") return `"${A}"`;
|
|
27
27
|
if (typeof A == "number" || typeof A == "boolean") return A + "";
|
|
28
|
-
if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) =>
|
|
28
|
+
if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => m.i(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => m.i(t)).join(", ")}, ... +${A.length - 3} more]`;
|
|
29
29
|
if (typeof A == "object") {
|
|
30
30
|
const t = Object.keys(A);
|
|
31
|
-
return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${
|
|
31
|
+
return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${m.i(A[e])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((e) => `${e}: ${m.i(A[e])}`).join(", ")}, ... +${t.length - 2} more }`;
|
|
32
32
|
}
|
|
33
33
|
return A + "";
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
var
|
|
37
|
-
const
|
|
36
|
+
var q = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(q || {});
|
|
37
|
+
const v = class v {
|
|
38
38
|
constructor() {
|
|
39
|
-
|
|
39
|
+
o(this, "C", { globalLevel: 3 });
|
|
40
40
|
}
|
|
41
|
-
static
|
|
42
|
-
return
|
|
41
|
+
static D() {
|
|
42
|
+
return v.o || (v.o = new v()), v.o;
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",
|
|
46
|
-
switch (this.
|
|
44
|
+
l(A, t) {
|
|
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;";
|
|
46
|
+
switch (this.C.globalLevel) {
|
|
47
47
|
case 0:
|
|
48
48
|
return !1;
|
|
49
49
|
case 1:
|
|
50
|
-
return console.group(e,
|
|
50
|
+
return console.group(e, s), console.warn(m.A(A, t)), console.groupEnd(), !1;
|
|
51
51
|
case 2:
|
|
52
|
-
return console.group(e,
|
|
52
|
+
return console.group(e, s), console.error(m.A(A, t)), console.groupEnd(), !1;
|
|
53
53
|
default:
|
|
54
|
-
throw new
|
|
54
|
+
throw new m(A, t);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
return !!A || (this.
|
|
57
|
+
P(A, t, e) {
|
|
58
|
+
return !!A || (this.l(t, e), !1);
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
this.
|
|
60
|
+
u(A) {
|
|
61
|
+
this.C.globalLevel = A;
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
|
|
65
|
-
let
|
|
66
|
-
const
|
|
67
|
-
function
|
|
68
|
-
|
|
64
|
+
o(v, "o", null);
|
|
65
|
+
let F = v;
|
|
66
|
+
const _ = F.D(), V = /* @__PURE__ */ new WeakMap();
|
|
67
|
+
function G(E, A) {
|
|
68
|
+
V.set(E, A);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
71
|
-
return
|
|
70
|
+
function R(E) {
|
|
71
|
+
return V.get(E);
|
|
72
72
|
}
|
|
73
|
-
class
|
|
74
|
-
constructor(A, t, e = t,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this.I = t, this.
|
|
86
|
-
const i = A.getParameter(A.MAX_DRAW_BUFFERS),
|
|
87
|
-
this
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const A = this.m, t = this.
|
|
91
|
-
for (let r = 0; r < this
|
|
73
|
+
class U {
|
|
74
|
+
constructor(A, t, e = t, s = 1, r = {}) {
|
|
75
|
+
o(this, "I");
|
|
76
|
+
o(this, "p");
|
|
77
|
+
o(this, "C");
|
|
78
|
+
o(this, "_", null);
|
|
79
|
+
o(this, "m");
|
|
80
|
+
o(this, "v");
|
|
81
|
+
o(this, "G", []);
|
|
82
|
+
o(this, "$");
|
|
83
|
+
o(this, "M", null);
|
|
84
|
+
o(this, "Y", []);
|
|
85
|
+
this.I = t, this.p = e, this.C = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...r }, this.m = A, this.$ = Math.min(Math.max(1, s), 8);
|
|
86
|
+
const i = A.getParameter(A.MAX_DRAW_BUFFERS), B = A.getParameter(A.MAX_COLOR_ATTACHMENTS);
|
|
87
|
+
this.$ = Math.min(this.$, i, B), this.v = A.createFramebuffer(), this.R(), this.S(), this.Y = Array(this.$).fill(null);
|
|
88
|
+
}
|
|
89
|
+
R() {
|
|
90
|
+
const A = this.m, t = this.C.filter === "linear" ? A.LINEAR : A.NEAREST, e = this.C.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE, s = this.C.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
|
|
91
|
+
for (let r = 0; r < this.$; r++) {
|
|
92
92
|
const i = A.createTexture();
|
|
93
|
-
A.bindTexture(A.TEXTURE_2D, i), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, e), A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.I, this.
|
|
93
|
+
A.bindTexture(A.TEXTURE_2D, i), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, e), A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.I, this.p, 0, A.RGBA, s, null), this.G.push(i);
|
|
94
94
|
}
|
|
95
95
|
A.bindTexture(A.TEXTURE_2D, null);
|
|
96
96
|
}
|
|
97
|
-
|
|
97
|
+
S() {
|
|
98
98
|
const A = this.m;
|
|
99
|
-
if (A.bindFramebuffer(A.FRAMEBUFFER, this.
|
|
99
|
+
if (A.bindFramebuffer(A.FRAMEBUFFER, this.v), this.$ === 1) A.framebufferTexture2D(A.FRAMEBUFFER, A.COLOR_ATTACHMENT0, A.TEXTURE_2D, this.G[0], 0);
|
|
100
100
|
else {
|
|
101
101
|
const e = [];
|
|
102
|
-
for (let
|
|
103
|
-
const r = A.COLOR_ATTACHMENT0 +
|
|
104
|
-
A.framebufferTexture2D(A.FRAMEBUFFER, r, A.TEXTURE_2D, this.
|
|
102
|
+
for (let s = 0; s < this.$; s++) {
|
|
103
|
+
const r = A.COLOR_ATTACHMENT0 + s;
|
|
104
|
+
A.framebufferTexture2D(A.FRAMEBUFFER, r, A.TEXTURE_2D, this.G[s], 0), e.push(r);
|
|
105
105
|
}
|
|
106
106
|
A.drawBuffers(e);
|
|
107
107
|
}
|
|
108
108
|
const t = A.checkFramebufferStatus(A.FRAMEBUFFER);
|
|
109
109
|
t !== A.FRAMEBUFFER_COMPLETE && console.error("GLFramebuffer is not complete:", t), A.bindFramebuffer(A.FRAMEBUFFER, null);
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
F(A) {
|
|
112
112
|
const t = this.m;
|
|
113
|
-
t.bindTexture(t.TEXTURE_2D, this.
|
|
113
|
+
t.bindTexture(t.TEXTURE_2D, this.G[0]), t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, 1), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, A), t.bindTexture(t.TEXTURE_2D, null);
|
|
114
114
|
}
|
|
115
|
-
|
|
116
|
-
this.I = A, this.
|
|
117
|
-
const e = this.m,
|
|
118
|
-
for (const r of this.
|
|
115
|
+
O(A, t) {
|
|
116
|
+
this.I = A, this.p = t, this._ = null, this.Y = Array(this.$).fill(null);
|
|
117
|
+
const e = this.m, s = this.C.type === "float" ? e.FLOAT : e.UNSIGNED_BYTE;
|
|
118
|
+
for (const r of this.G) e.bindTexture(e.TEXTURE_2D, r), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, this.I, this.p, 0, e.RGBA, s, null);
|
|
119
119
|
e.bindTexture(e.TEXTURE_2D, null);
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
U(A) {
|
|
122
122
|
const t = this.m;
|
|
123
|
-
if (A < 0 || A >= this
|
|
124
|
-
const e = this.
|
|
123
|
+
if (A < 0 || A >= this.$) throw Error(`GLFramebuffer: attachment index ${A} out of range (count=${this.$})`);
|
|
124
|
+
const e = this.Y[A];
|
|
125
125
|
if (e) return e;
|
|
126
|
-
const
|
|
127
|
-
t.bindFramebuffer(t.READ_FRAMEBUFFER, this.
|
|
128
|
-
const
|
|
129
|
-
for (let
|
|
130
|
-
const a = (r - 1 -
|
|
131
|
-
|
|
126
|
+
const s = this.I, r = this.p, i = new Uint8Array(s * r * 4), B = t.getParameter(t.READ_FRAMEBUFFER_BINDING);
|
|
127
|
+
t.bindFramebuffer(t.READ_FRAMEBUFFER, this.v), t.readBuffer(t.COLOR_ATTACHMENT0 + A), t.readPixels(0, 0, s, r, t.RGBA, t.UNSIGNED_BYTE, i), t.bindFramebuffer(t.READ_FRAMEBUFFER, B);
|
|
128
|
+
const n = 4 * s, Q = new Uint8Array(i.length);
|
|
129
|
+
for (let h = 0; h < r; h++) {
|
|
130
|
+
const a = (r - 1 - h) * n, g = h * n;
|
|
131
|
+
Q.set(i.subarray(a, a + n), g);
|
|
132
132
|
}
|
|
133
|
-
return this.
|
|
133
|
+
return this.Y[A] = Q, Q;
|
|
134
134
|
}
|
|
135
135
|
L() {
|
|
136
|
-
for (let A = 0; A < this
|
|
136
|
+
for (let A = 0; A < this.$; A++) this.U(A);
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
k() {
|
|
139
139
|
const A = this.m;
|
|
140
|
-
this
|
|
141
|
-
for (let t = 0; t < this
|
|
142
|
-
A.viewport(0, 0, this.I, this.
|
|
140
|
+
this.M = { framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING), viewport: A.getParameter(A.VIEWPORT) }, A.bindFramebuffer(A.FRAMEBUFFER, this.v), this.Y = Array(this.$).fill(null);
|
|
141
|
+
for (let t = 0; t < this.$; t++) A.clearBufferfv(A.COLOR, t, new Float32Array([0, 0, 0, 0]));
|
|
142
|
+
A.viewport(0, 0, this.I, this.p), G(A, [0, 0, this.I, this.p]);
|
|
143
143
|
}
|
|
144
|
-
|
|
145
|
-
if (!this
|
|
144
|
+
H() {
|
|
145
|
+
if (!this.M) return;
|
|
146
146
|
const A = this.m;
|
|
147
|
-
A.bindFramebuffer(A.FRAMEBUFFER, this
|
|
147
|
+
A.bindFramebuffer(A.FRAMEBUFFER, this.M.framebuffer), A.viewport(...this.M.viewport), G(A, this.M.viewport), this.M = null;
|
|
148
148
|
}
|
|
149
149
|
W() {
|
|
150
150
|
const A = this.m;
|
|
151
|
-
this.
|
|
152
|
-
for (const t of this.
|
|
153
|
-
this.
|
|
151
|
+
this.v && A.deleteFramebuffer(this.v);
|
|
152
|
+
for (const t of this.G) A.deleteTexture(t);
|
|
153
|
+
this.G = [], this.Y = [];
|
|
154
154
|
}
|
|
155
155
|
get width() {
|
|
156
156
|
return this.I;
|
|
157
157
|
}
|
|
158
158
|
get height() {
|
|
159
|
-
return this.
|
|
159
|
+
return this.p;
|
|
160
160
|
}
|
|
161
161
|
get pixels() {
|
|
162
|
-
return this.
|
|
162
|
+
return this._;
|
|
163
163
|
}
|
|
164
164
|
get options() {
|
|
165
|
-
return { ...this.
|
|
165
|
+
return { ...this.C };
|
|
166
166
|
}
|
|
167
167
|
get framebuffer() {
|
|
168
|
-
return this.
|
|
168
|
+
return this.v;
|
|
169
169
|
}
|
|
170
170
|
get texture() {
|
|
171
|
-
return this.
|
|
171
|
+
return this.G[0];
|
|
172
172
|
}
|
|
173
173
|
get textures() {
|
|
174
|
-
return [...this.
|
|
174
|
+
return [...this.G];
|
|
175
175
|
}
|
|
176
176
|
get attachmentCount() {
|
|
177
|
-
return this
|
|
177
|
+
return this.$;
|
|
178
178
|
}
|
|
179
179
|
getAttachmentPixels(A) {
|
|
180
|
-
return this.
|
|
180
|
+
return this.Y[A] ?? null;
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
-
class
|
|
183
|
+
class z {
|
|
184
184
|
constructor(A, t, e) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
this.m = A, this.
|
|
185
|
+
o(this, "m");
|
|
186
|
+
o(this, "J");
|
|
187
|
+
o(this, "V", /* @__PURE__ */ new Map());
|
|
188
|
+
o(this, "K", /* @__PURE__ */ new Map());
|
|
189
|
+
o(this, "Z", 0);
|
|
190
|
+
o(this, "j");
|
|
191
|
+
this.m = A, this.J = this.X(t, e), this.j = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.N();
|
|
192
192
|
}
|
|
193
193
|
N() {
|
|
194
|
-
const A = this.m.getProgramParameter(this.
|
|
194
|
+
const A = this.m.getProgramParameter(this.J, this.m.ACTIVE_UNIFORMS);
|
|
195
195
|
for (let t = 0; t < A; t++) {
|
|
196
|
-
const e = this.m.getActiveUniform(this.
|
|
196
|
+
const e = this.m.getActiveUniform(this.J, t);
|
|
197
197
|
if (e) {
|
|
198
|
-
const
|
|
199
|
-
|
|
198
|
+
const s = this.m.getUniformLocation(this.J, e.name);
|
|
199
|
+
s && (this.V.set(e.name, s), this.K.set(e.name, e.type));
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
|
-
|
|
204
|
-
const e = this.
|
|
205
|
-
if (this.m.attachShader(r, e), this.m.attachShader(r,
|
|
203
|
+
X(A, t) {
|
|
204
|
+
const e = this.q(this.m.VERTEX_SHADER, A), s = this.q(this.m.FRAGMENT_SHADER, t), r = this.m.createProgram();
|
|
205
|
+
if (this.m.attachShader(r, e), this.m.attachShader(r, s), this.m.linkProgram(r), !this.m.getProgramParameter(r, this.m.LINK_STATUS)) {
|
|
206
206
|
const i = this.m.getProgramInfoLog(r);
|
|
207
207
|
throw Error("Shader program link error: " + i);
|
|
208
208
|
}
|
|
209
|
-
return this.m.deleteShader(e), this.m.deleteShader(
|
|
209
|
+
return this.m.deleteShader(e), this.m.deleteShader(s), r;
|
|
210
210
|
}
|
|
211
|
-
|
|
211
|
+
q(A, t) {
|
|
212
212
|
const e = this.m.createShader(A);
|
|
213
213
|
if (this.m.shaderSource(e, t), this.m.compileShader(e), !this.m.getShaderParameter(e, this.m.COMPILE_STATUS)) {
|
|
214
|
-
const
|
|
215
|
-
throw this.m.deleteShader(e), Error("Shader compilation error: " +
|
|
214
|
+
const s = this.m.getShaderInfoLog(e);
|
|
215
|
+
throw this.m.deleteShader(e), Error("Shader compilation error: " + s);
|
|
216
216
|
}
|
|
217
217
|
return e;
|
|
218
218
|
}
|
|
219
|
-
q() {
|
|
220
|
-
this.m.useProgram(this.H), this.AA();
|
|
221
|
-
}
|
|
222
219
|
AA() {
|
|
223
|
-
this.
|
|
220
|
+
this.m.useProgram(this.J), this.tA();
|
|
221
|
+
}
|
|
222
|
+
tA() {
|
|
223
|
+
this.Z = 0;
|
|
224
224
|
}
|
|
225
|
-
|
|
226
|
-
for (const [t, e] of Object.entries(A)) this.
|
|
225
|
+
eA(A) {
|
|
226
|
+
for (const [t, e] of Object.entries(A)) this.BA(t, e);
|
|
227
227
|
}
|
|
228
|
-
|
|
229
|
-
|
|
228
|
+
sA(A) {
|
|
229
|
+
return this.V.has(A);
|
|
230
|
+
}
|
|
231
|
+
BA(A, t) {
|
|
232
|
+
if (this.m.getParameter(this.m.CURRENT_PROGRAM) !== this.J) return void console.warn(`Attempting to set uniform '${A}' on shader that is not currently bound`);
|
|
233
|
+
const e = this.V.get(A);
|
|
230
234
|
if (e) if (typeof t == "number") this.m.uniform1f(e, t);
|
|
231
235
|
else if (typeof t == "boolean") this.m.uniform1i(e, t ? 1 : 0);
|
|
232
236
|
else if (Array.isArray(t)) switch (t.length) {
|
|
@@ -243,182 +247,227 @@ class Z {
|
|
|
243
247
|
console.warn(`Unsupported array length ${t.length} for uniform '${A}'`);
|
|
244
248
|
}
|
|
245
249
|
else if (t instanceof WebGLTexture) {
|
|
246
|
-
const
|
|
247
|
-
this.m.uniform1i(e,
|
|
248
|
-
} else if (t instanceof
|
|
249
|
-
const
|
|
250
|
-
this.m.uniform1i(e,
|
|
250
|
+
const s = this.iA();
|
|
251
|
+
this.m.uniform1i(e, s), this.m.activeTexture(this.m.TEXTURE0 + s), this.m.bindTexture(this.m.TEXTURE_2D, t);
|
|
252
|
+
} else if (t instanceof U) {
|
|
253
|
+
const s = this.iA();
|
|
254
|
+
this.m.uniform1i(e, s), this.m.activeTexture(this.m.TEXTURE0 + s), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
|
|
251
255
|
} else if (typeof t == "object" && "texture" in t) {
|
|
252
|
-
const
|
|
253
|
-
this.m.uniform1i(e,
|
|
256
|
+
const s = this.iA();
|
|
257
|
+
this.m.uniform1i(e, s), this.m.activeTexture(this.m.TEXTURE0 + s), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
|
|
254
258
|
} else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
|
|
255
259
|
}
|
|
256
|
-
|
|
257
|
-
return this.
|
|
260
|
+
iA() {
|
|
261
|
+
return this.Z >= this.j && console.warn(`Exceeded maximum texture units (${this.j}). Texture may not render correctly.`), this.Z++;
|
|
258
262
|
}
|
|
259
263
|
get QA() {
|
|
260
|
-
return this.
|
|
264
|
+
return this.J;
|
|
261
265
|
}
|
|
262
266
|
W() {
|
|
263
|
-
this.m.deleteProgram(this.
|
|
267
|
+
this.m.deleteProgram(this.J);
|
|
264
268
|
}
|
|
265
269
|
}
|
|
266
|
-
class
|
|
270
|
+
class AA {
|
|
267
271
|
constructor() {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
this.
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
|
|
272
|
+
o(this, "rA", 1);
|
|
273
|
+
o(this, "EA", 0);
|
|
274
|
+
o(this, "nA", 0);
|
|
275
|
+
o(this, "oA", 0);
|
|
276
|
+
o(this, "gA", [0, 0, 0]);
|
|
277
|
+
o(this, "aA", [1, 1, 1, 1]);
|
|
278
|
+
o(this, "hA", [0, 0, 0, 1]);
|
|
279
|
+
o(this, "cA", !1);
|
|
280
|
+
o(this, "CA", !1);
|
|
281
|
+
o(this, "DA", !1);
|
|
282
|
+
o(this, "lA", [0, 0]);
|
|
283
|
+
o(this, "PA", [0, 0, 0, 1]);
|
|
284
|
+
o(this, "uA", []);
|
|
285
|
+
}
|
|
286
|
+
IA() {
|
|
287
|
+
this.uA.push({ lineWeight: this.rA, rotationX: this.EA, rotationY: this.nA, rotationZ: this.oA, charRotation: [...this.lA], flipHorizontally: this.cA, flipVertically: this.CA, invert: this.DA, character: [...this.gA], charColor: [...this.aA], cellColor: [...this.hA] });
|
|
288
|
+
}
|
|
289
|
+
wA() {
|
|
290
|
+
const A = this.uA.pop();
|
|
291
|
+
A ? (this.rA = A.lineWeight, this.EA = A.rotationX, this.nA = A.rotationY, this.oA = A.rotationZ, this.lA = A.charRotation, this.cA = A.flipHorizontally, this.CA = A.flipVertically, this.DA = A.invert, this.gA = A.character, this.aA = A.charColor, this.hA = A.cellColor) : console.warn("pop() called without matching push()");
|
|
292
|
+
}
|
|
293
|
+
fA() {
|
|
294
|
+
this.uA = [], this.EA = 0, this.nA = 0, this.oA = 0;
|
|
295
|
+
}
|
|
296
|
+
dA(A) {
|
|
297
|
+
A.lineWeight = this.rA, A.rotationX = this.EA, A.rotationY = this.nA, A.rotationZ = this.oA, A.character[0] = this.gA[0], A.character[1] = this.gA[1], A.character[2] = this.gA[2], A.charColor[0] = this.aA[0], A.charColor[1] = this.aA[1], A.charColor[2] = this.aA[2], A.charColor[3] = this.aA[3], A.bgColor[0] = this.hA[0], A.bgColor[1] = this.hA[1], A.bgColor[2] = this.hA[2], A.bgColor[3] = this.hA[3], A.flipHorizontally = this.cA, A.flipVertically = this.CA, A.invert = this.DA, A.charRotation[0] = this.lA[0], A.charRotation[1] = this.lA[1];
|
|
291
298
|
}
|
|
292
299
|
get lineWeight() {
|
|
293
|
-
return this.sA;
|
|
294
|
-
}
|
|
295
|
-
get rotation() {
|
|
296
|
-
return this.EA;
|
|
297
|
-
}
|
|
298
|
-
get character() {
|
|
299
|
-
return this.iA;
|
|
300
|
-
}
|
|
301
|
-
get charColor() {
|
|
302
300
|
return this.rA;
|
|
303
301
|
}
|
|
304
|
-
get
|
|
305
|
-
return this.
|
|
306
|
-
}
|
|
307
|
-
get flipHorizontally() {
|
|
308
|
-
return this.gA;
|
|
302
|
+
get canvasBackgroundColor() {
|
|
303
|
+
return this.PA;
|
|
309
304
|
}
|
|
310
|
-
|
|
311
|
-
|
|
305
|
+
pA(A) {
|
|
306
|
+
this.rA = Math.abs(A);
|
|
312
307
|
}
|
|
313
|
-
|
|
314
|
-
|
|
308
|
+
_A(A) {
|
|
309
|
+
this.EA = A;
|
|
315
310
|
}
|
|
316
|
-
|
|
317
|
-
|
|
311
|
+
mA(A) {
|
|
312
|
+
this.nA = A;
|
|
318
313
|
}
|
|
319
|
-
|
|
320
|
-
this.
|
|
314
|
+
vA(A) {
|
|
315
|
+
this.oA = A;
|
|
321
316
|
}
|
|
322
|
-
|
|
323
|
-
this.
|
|
317
|
+
xA(A) {
|
|
318
|
+
this.gA = A;
|
|
324
319
|
}
|
|
325
|
-
|
|
326
|
-
this.
|
|
320
|
+
yA(A, t, e, s = 255) {
|
|
321
|
+
this.aA = [A / 255, t / 255, e / 255, s / 255];
|
|
327
322
|
}
|
|
328
|
-
|
|
329
|
-
this.
|
|
323
|
+
bA(A, t, e, s = 255) {
|
|
324
|
+
this.hA = [A / 255, t / 255, e / 255, s / 255];
|
|
330
325
|
}
|
|
331
|
-
|
|
332
|
-
this.
|
|
326
|
+
GA(A) {
|
|
327
|
+
this.cA = A;
|
|
333
328
|
}
|
|
334
|
-
|
|
335
|
-
this.
|
|
329
|
+
$A(A) {
|
|
330
|
+
this.CA = A;
|
|
336
331
|
}
|
|
337
|
-
|
|
338
|
-
this.
|
|
332
|
+
MA(A) {
|
|
333
|
+
this.DA = A;
|
|
339
334
|
}
|
|
340
|
-
|
|
341
|
-
|
|
335
|
+
YA(A) {
|
|
336
|
+
const t = 255 * A / 360, e = Math.floor(t) / 255, s = Math.round(t - Math.floor(t));
|
|
337
|
+
this.lA = [e, s];
|
|
342
338
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
this.hA = [e, B];
|
|
339
|
+
zA(A, t, e, s) {
|
|
340
|
+
this.PA = [A / 255, t / 255, e / 255, s / 255];
|
|
346
341
|
}
|
|
347
342
|
}
|
|
348
|
-
var
|
|
349
|
-
|
|
343
|
+
var O = `#version 300 es
|
|
344
|
+
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 rotateX(float a){float s=sin(a),c=cos(a);return mat3(1,0,0,0,c,-s,0,s,c);}mat3 rotateY(float a){float s=sin(a),c=cos(a);return mat3(c,0,s,0,1,0,-s,0,c);}mat3 rotateZ(float a){float s=sin(a),c=cos(a);return mat3(c,-s,0,s,c,0,0,0,1);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return u2*u*p0+3.*u2*t*p1+3.*u*t2*p2+t2*t*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return-3.*u2*p0+3.*u2*p1-6.*u*t*p1+6.*u*t*p2-3.*t2*p2+3.*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezier=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool isArc=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(isBezier){float t=a_position.x;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tLen=length(tangent);tangent=tLen>0.?tangent/tLen:vec2(1,0);worldPosition=curvePoint+vec2(-tangent.y,tangent.x)*a_position.y*a_instanceSize.y;}else if(isArc){float s=a_instanceArcAngles.x,e=a_instanceArcAngles.y;s=mod(s,6.28318530718);if(s<0.)s+=6.28318530718;e=mod(e,6.28318530718);if(e<0.)e+=6.28318530718;float d=s-e;if(d<=0.)d+=6.28318530718;float angle=s-a_position.x*d;vec2 local=vec2(cos(angle),sin(angle))*a_position.y;worldPosition=local*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{worldPosition=a_position*a_instanceSize+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.-1.;ndc.y=-ndc.y;if(length(a_instanceGlobalRotation)>0.){vec3 pos3D=vec3(ndc-a_instanceRotationCenter,0);pos3D.x*=u_aspectRatio;if(a_instanceGlobalRotation.x!=0.)pos3D=rotateX(-a_instanceGlobalRotation.x)*pos3D;if(a_instanceGlobalRotation.y!=0.)pos3D=rotateY(-a_instanceGlobalRotation.y)*pos3D;if(a_instanceGlobalRotation.z!=0.)pos3D=rotateZ(-a_instanceGlobalRotation.z)*pos3D;pos3D.x/=u_aspectRatio;ndc=pos3D.xy+a_instanceRotationCenter;}gl_Position=vec4(ndc,0,1);}`, D = ((E) => (E.RECTANGLE = "rectangle", E.LINE = "line", E.ELLIPSE = "ellipse", E.ARC = "arc", E.TRIANGLE = "triangle", E.BEZIER_CURVE = "bezier_curve", E.CUSTOM = "custom", E))(D || {});
|
|
345
|
+
class tA {
|
|
350
346
|
constructor(A) {
|
|
351
|
-
|
|
352
|
-
|
|
347
|
+
o(this, "m");
|
|
348
|
+
o(this, "RA", /* @__PURE__ */ new Map());
|
|
353
349
|
this.m = A;
|
|
354
350
|
}
|
|
355
|
-
|
|
351
|
+
TA(A, t, e, s) {
|
|
356
352
|
const r = this.m;
|
|
357
|
-
let i = this.
|
|
358
|
-
i || (i = /* @__PURE__ */ new Map(), this.
|
|
359
|
-
let
|
|
360
|
-
if (!
|
|
361
|
-
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
const
|
|
365
|
-
|
|
353
|
+
let i = this.RA.get(A);
|
|
354
|
+
i || (i = /* @__PURE__ */ new Map(), this.RA.set(A, i));
|
|
355
|
+
let B = i.get(t) || null;
|
|
356
|
+
if (!B) {
|
|
357
|
+
B = r.createVertexArray(), i.set(t, B), r.bindVertexArray(B), r.bindBuffer(r.ARRAY_BUFFER, s);
|
|
358
|
+
const n = r.getAttribLocation(A, "a_position");
|
|
359
|
+
n !== -1 && (r.enableVertexAttribArray(n), r.vertexAttribPointer(n, e.attributes.position.size, r.FLOAT, !1, e.stride, e.attributes.position.offset), r.vertexAttribDivisor(n, 0));
|
|
360
|
+
const Q = r.getAttribLocation(A, "a_texCoord");
|
|
361
|
+
Q !== -1 && (r.enableVertexAttribArray(Q), r.vertexAttribPointer(Q, e.attributes.texCoord.size, r.FLOAT, !1, e.stride, e.attributes.texCoord.offset), r.vertexAttribDivisor(Q, 0));
|
|
366
362
|
}
|
|
367
|
-
r.bindVertexArray(
|
|
363
|
+
r.bindVertexArray(B);
|
|
368
364
|
}
|
|
369
|
-
|
|
365
|
+
SA() {
|
|
370
366
|
this.m.bindVertexArray(null);
|
|
371
367
|
}
|
|
372
368
|
W() {
|
|
373
369
|
const A = this.m;
|
|
374
|
-
for (const [, t] of this.
|
|
375
|
-
this.
|
|
370
|
+
for (const [, t] of this.RA) for (const [, e] of t) e && A.deleteVertexArray(e);
|
|
371
|
+
this.RA.clear();
|
|
376
372
|
}
|
|
377
373
|
}
|
|
378
|
-
class
|
|
374
|
+
class eA {
|
|
379
375
|
constructor(A) {
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
this
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
376
|
+
o(this, "FA");
|
|
377
|
+
o(this, "m");
|
|
378
|
+
o(this, "OA", null);
|
|
379
|
+
o(this, "UA", null);
|
|
380
|
+
o(this, "LA", null);
|
|
381
|
+
this.m = A, this.FA = new tA(A);
|
|
382
|
+
}
|
|
383
|
+
kA(A, t, e) {
|
|
384
|
+
const { shader: s } = A, r = R(this.m) || this.m.getParameter(this.m.VIEWPORT), i = { u_aspectRatio: r[2] / r[3], u_viewportSize: [r[2], r[3]] }, B = {};
|
|
385
|
+
for (const [a, g] of Object.entries(i)) s.sA(a) && (B[a] = g);
|
|
386
|
+
Object.keys(B).length > 0 && s.eA(B);
|
|
387
|
+
const n = (a) => {
|
|
388
|
+
if (!a || !a.HA()) return;
|
|
389
|
+
const g = a.unitGeometry, l = a.unitBuffer;
|
|
390
390
|
try {
|
|
391
|
-
this.
|
|
391
|
+
this.FA.TA(s.QA, a.type + "", g, l), a.batch.WA(s), a.batch.JA(g.primitiveType, g.vertexCount);
|
|
392
392
|
} finally {
|
|
393
|
-
|
|
393
|
+
a.batch.VA(s), this.FA.SA(), a.KA();
|
|
394
394
|
}
|
|
395
395
|
};
|
|
396
|
-
let
|
|
397
|
-
for (const
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
396
|
+
let Q = null, h = null;
|
|
397
|
+
for (const a of t) {
|
|
398
|
+
if (a.type === D.CUSTOM) {
|
|
399
|
+
h && (n(h), Q = null, h = null), this.ZA(A, a.params, a.state, e.get(D.RECTANGLE) || null);
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
Q !== null && a.type !== Q && (n(h), Q = null, h = null);
|
|
403
|
+
let g = h;
|
|
404
|
+
g && a.type === Q || (g = e.get(a.type) || null, h = g, Q = a.type), g && g.jA(a.params, a.state);
|
|
405
|
+
}
|
|
406
|
+
n(h);
|
|
407
|
+
}
|
|
408
|
+
ZA(A, t, e, s) {
|
|
409
|
+
if (!s) return;
|
|
410
|
+
const { x: r, y: i, width: B, height: n, shader: Q, uniforms: h } = t, a = this.m;
|
|
411
|
+
Q.AA(), s.KA();
|
|
412
|
+
const g = this.XA(Math.max(1, Math.floor(B)), Math.max(1, Math.floor(n)));
|
|
413
|
+
g.k(), Q.AA(), h && Object.keys(h).length && Q.eA(h);
|
|
414
|
+
{
|
|
415
|
+
const u = R(a) || a.getParameter(a.VIEWPORT);
|
|
416
|
+
Q.sA("u_aspectRatio") && Q.BA("u_aspectRatio", u[2] / u[3]), Q.sA("u_viewportSize") && Q.BA("u_viewportSize", [u[2], u[3]]);
|
|
417
|
+
}
|
|
418
|
+
const l = { ...e, rotationX: 0, rotationY: 0, rotationZ: 0 };
|
|
419
|
+
if (s.jA({ x: 0, y: 0, width: g.width, height: g.height }, l), s.HA()) {
|
|
420
|
+
const u = s.unitGeometry, M = s.unitBuffer;
|
|
421
|
+
try {
|
|
422
|
+
this.FA.TA(Q.QA, s.type + "", u, M), s.batch.WA(Q), s.batch.JA(u.primitiveType, u.vertexCount);
|
|
423
|
+
} finally {
|
|
424
|
+
s.batch.VA(Q), this.FA.SA(), s.KA();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
g.H();
|
|
428
|
+
const c = this.NA();
|
|
429
|
+
c.AA(), c.eA({ u_src0: g.textures[0], u_src1: g.textures[1], u_src2: g.textures[2], u_src3: g.textures[3], u_src4: g.textures[4], u_srcSize: [g.width, g.height] });
|
|
430
|
+
const C = R(a) || a.getParameter(a.VIEWPORT);
|
|
431
|
+
c.sA("u_aspectRatio") && c.BA("u_aspectRatio", C[2] / C[3]), c.sA("u_viewportSize") && c.BA("u_viewportSize", [C[2], C[3]]);
|
|
432
|
+
const d = Math.floor(r), I = Math.floor(i), w = Math.max(1, Math.floor(B)), p = Math.max(1, Math.floor(n));
|
|
433
|
+
if (s.jA({ x: d, y: I, width: w, height: p }, e), s.HA()) {
|
|
434
|
+
const u = s.unitGeometry, M = s.unitBuffer;
|
|
435
|
+
try {
|
|
436
|
+
this.FA.TA(c.QA, s.type + "", u, M), s.batch.WA(c), s.batch.JA(u.primitiveType, u.vertexCount);
|
|
437
|
+
} finally {
|
|
438
|
+
s.batch.VA(c), this.FA.SA(), s.KA();
|
|
439
|
+
}
|
|
401
440
|
}
|
|
402
|
-
|
|
441
|
+
A.shader.AA();
|
|
442
|
+
}
|
|
443
|
+
NA() {
|
|
444
|
+
return this.OA || (this.OA = new z(this.m, O, `#version 300 es
|
|
445
|
+
precision highp float;in vec2 v_uv;uniform sampler2D u_src0;uniform sampler2D u_src1;uniform sampler2D u_src2;uniform sampler2D u_src3;uniform sampler2D u_src4;uniform vec2 u_srcSize;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 uvTex=v_uv*u_srcSize;vec2 uvQ=(floor(uvTex)+0.5f)/u_srcSize;o_character=texture(u_src0,uvQ);o_primaryColor=texture(u_src1,uvQ);o_secondaryColor=texture(u_src2,uvQ);o_rotation=texture(u_src3,uvQ);o_transform=texture(u_src4,uvQ);}`)), this.OA;
|
|
446
|
+
}
|
|
447
|
+
XA(A, t) {
|
|
448
|
+
return this.UA && this.LA && this.LA.w === A && this.LA.h === t || (this.UA && this.UA.W(), this.UA = new U(this.m, A, t, 5), this.LA = { w: A, h: t }), this.UA;
|
|
403
449
|
}
|
|
404
450
|
}
|
|
405
|
-
class
|
|
451
|
+
class sA {
|
|
406
452
|
constructor() {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
if (this.
|
|
413
|
-
const e = { id: this.
|
|
414
|
-
this.
|
|
453
|
+
o(this, "qA", []);
|
|
454
|
+
o(this, "At", 1);
|
|
455
|
+
o(this, "tt", 0);
|
|
456
|
+
}
|
|
457
|
+
et(A) {
|
|
458
|
+
if (this.tt >= this.qA.length) {
|
|
459
|
+
const e = { id: this.At++, type: A, params: {}, state: { lineWeight: 1, rotationX: 0, rotationY: 0, rotationZ: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
|
|
460
|
+
this.qA.push(e);
|
|
415
461
|
}
|
|
416
|
-
const t = this.
|
|
417
|
-
switch (t.id = this.
|
|
462
|
+
const t = this.qA[this.tt];
|
|
463
|
+
switch (t.id = this.At++, t.type = A, A) {
|
|
418
464
|
case D.RECTANGLE:
|
|
419
465
|
case D.ELLIPSE:
|
|
420
466
|
t.params && "width" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0 });
|
|
421
467
|
break;
|
|
468
|
+
case D.CUSTOM:
|
|
469
|
+
t.params && "shader" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0, shader: void 0, uniforms: {} });
|
|
470
|
+
break;
|
|
422
471
|
case D.ARC:
|
|
423
472
|
t.params && "start" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0, start: 0, stop: 0 });
|
|
424
473
|
break;
|
|
@@ -434,1240 +483,1279 @@ class eA {
|
|
|
434
483
|
default:
|
|
435
484
|
t.params || (t.params = {});
|
|
436
485
|
}
|
|
437
|
-
return this.
|
|
486
|
+
return this.tt++, t;
|
|
438
487
|
}
|
|
439
|
-
|
|
440
|
-
const i = this.
|
|
441
|
-
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height =
|
|
488
|
+
Bt(A, t, e, s, r) {
|
|
489
|
+
const i = this.et(D.RECTANGLE);
|
|
490
|
+
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = s, r.dA(i.state), i.id;
|
|
442
491
|
}
|
|
443
|
-
|
|
444
|
-
const
|
|
445
|
-
return
|
|
492
|
+
st(A, t, e, s, r, i, B) {
|
|
493
|
+
const n = this.et(D.CUSTOM);
|
|
494
|
+
return n.params.x = A, n.params.y = t, n.params.width = e, n.params.height = s, n.params.shader = r, n.params.uniforms = i, B.dA(n.state), n.id;
|
|
446
495
|
}
|
|
447
|
-
|
|
448
|
-
const
|
|
449
|
-
return
|
|
496
|
+
it(A, t, e, s, r, i) {
|
|
497
|
+
const B = this.et(D.LINE);
|
|
498
|
+
return B.params.x1 = A, B.params.y1 = t, B.params.x2 = e, B.params.y2 = s, B.params.thickness = r, i.dA(B.state), B.id;
|
|
450
499
|
}
|
|
451
|
-
|
|
452
|
-
const
|
|
453
|
-
return
|
|
500
|
+
Qt(A, t, e, s, r) {
|
|
501
|
+
const i = this.et(D.ELLIPSE);
|
|
502
|
+
return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = s, r.dA(i.state), i.id;
|
|
454
503
|
}
|
|
455
|
-
|
|
456
|
-
const
|
|
457
|
-
return
|
|
504
|
+
rt(A, t, e, s, r, i, B) {
|
|
505
|
+
const n = this.et(D.ARC);
|
|
506
|
+
return n.params.x = A, n.params.y = t, n.params.width = e, n.params.height = s, n.params.start = r, n.params.stop = i, B.dA(n.state), n.id;
|
|
458
507
|
}
|
|
459
|
-
|
|
460
|
-
const
|
|
461
|
-
return
|
|
508
|
+
Et(A, t, e, s, r, i, B) {
|
|
509
|
+
const n = this.et(D.TRIANGLE);
|
|
510
|
+
return n.params.x1 = A, n.params.y1 = t, n.params.x2 = e, n.params.y2 = s, n.params.x3 = r, n.params.y3 = i, B.dA(n.state), n.id;
|
|
511
|
+
}
|
|
512
|
+
nt(A, t, e, s, r, i, B, n, Q, h) {
|
|
513
|
+
const a = this.et(D.BEZIER_CURVE);
|
|
514
|
+
return a.params.x1 = A, a.params.y1 = t, a.params.cp1x = e, a.params.cp1y = s, a.params.cp2x = r, a.params.cp2y = i, a.params.x2 = B, a.params.y2 = n, a.params.thickness = Q, h.dA(a.state), a.id;
|
|
462
515
|
}
|
|
463
516
|
get length() {
|
|
464
|
-
return this.
|
|
517
|
+
return this.tt;
|
|
465
518
|
}
|
|
466
519
|
get isEmpty() {
|
|
467
|
-
return this.
|
|
520
|
+
return this.tt === 0;
|
|
468
521
|
}
|
|
469
|
-
|
|
470
|
-
this.
|
|
522
|
+
ot() {
|
|
523
|
+
this.tt = 0;
|
|
471
524
|
}
|
|
472
525
|
[Symbol.iterator]() {
|
|
473
526
|
let A = 0;
|
|
474
|
-
const t = this.
|
|
527
|
+
const t = this.tt, e = this.qA;
|
|
475
528
|
return { next: () => A < t ? { value: e[A++], done: !1 } : { value: void 0, done: !0 } };
|
|
476
529
|
}
|
|
477
530
|
}
|
|
478
531
|
const x = class x {
|
|
479
|
-
static
|
|
480
|
-
var i,
|
|
481
|
-
const
|
|
532
|
+
static gt(A, t, e = 0) {
|
|
533
|
+
var i, B, n, Q, h, a, g, l, c, C;
|
|
534
|
+
const s = t || new Float32Array(x.FLOATS_PER_INSTANCE);
|
|
482
535
|
let r = e;
|
|
483
|
-
return
|
|
536
|
+
return s[r++] = A.position[0], s[r++] = A.position[1], s[r++] = A.size[0], s[r++] = A.size[1], s[r++] = A.character[0], s[r++] = A.character[1], s[r++] = A.character[2], s[r++] = A.primaryColor[0], s[r++] = A.primaryColor[1], s[r++] = A.primaryColor[2], s[r++] = A.primaryColor[3], s[r++] = A.secondaryColor[0], s[r++] = A.secondaryColor[1], s[r++] = A.secondaryColor[2], s[r++] = A.secondaryColor[3], s[r++] = A.rotation[0], s[r++] = A.rotation[1], s[r++] = A.transform[0], s[r++] = A.transform[1], s[r++] = A.transform[2], s[r++] = A.globalRotationX, s[r++] = A.globalRotationY, s[r++] = A.globalRotationZ, s[r++] = A.rotationCenter[0], s[r++] = A.rotationCenter[1], s[r++] = ((i = A.arcAngles) == null ? void 0 : i[0]) || 0, s[r++] = ((B = A.arcAngles) == null ? void 0 : B[1]) || 0, s[r++] = ((n = A.bezierControlPoint1) == null ? void 0 : n[0]) || 0, s[r++] = ((Q = A.bezierControlPoint1) == null ? void 0 : Q[1]) || 0, s[r++] = ((h = A.bezierControlPoint2) == null ? void 0 : h[0]) || 0, s[r++] = ((a = A.bezierControlPoint2) == null ? void 0 : a[1]) || 0, s[r++] = ((g = A.bezierStartPoint) == null ? void 0 : g[0]) || 0, s[r++] = ((l = A.bezierStartPoint) == null ? void 0 : l[1]) || 0, s[r++] = ((c = A.bezierEndPoint) == null ? void 0 : c[0]) || 0, s[r++] = ((C = A.bezierEndPoint) == null ? void 0 : C[1]) || 0, s;
|
|
484
537
|
}
|
|
485
|
-
static
|
|
538
|
+
static ht(A) {
|
|
486
539
|
const t = A.length * x.FLOATS_PER_INSTANCE, e = new Float32Array(t);
|
|
487
|
-
for (let
|
|
488
|
-
const r =
|
|
489
|
-
x.
|
|
540
|
+
for (let s = 0; s < A.length; s++) {
|
|
541
|
+
const r = s * x.FLOATS_PER_INSTANCE;
|
|
542
|
+
x.gt(A[s], e, r);
|
|
490
543
|
}
|
|
491
544
|
return e;
|
|
492
545
|
}
|
|
493
546
|
};
|
|
494
|
-
|
|
495
|
-
let
|
|
547
|
+
o(x, "BYTES_PER_INSTANCE", 140), o(x, "FLOATS_PER_INSTANCE", 35);
|
|
548
|
+
let b = x;
|
|
496
549
|
const P = class P {
|
|
497
550
|
};
|
|
498
|
-
|
|
499
|
-
let
|
|
500
|
-
class
|
|
551
|
+
o(P, "STRIDE", b.BYTES_PER_INSTANCE), o(P, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 92, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 124, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 132, divisor: 1 } });
|
|
552
|
+
let Y = P;
|
|
553
|
+
class rA {
|
|
501
554
|
constructor(A, t = 1e3, e = 1.5) {
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
this.m = A, this.
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
const t = this.
|
|
515
|
-
return this.
|
|
555
|
+
o(this, "m");
|
|
556
|
+
o(this, "ct", []);
|
|
557
|
+
o(this, "Ct");
|
|
558
|
+
o(this, "Dt");
|
|
559
|
+
o(this, "lt", null);
|
|
560
|
+
o(this, "Pt", !0);
|
|
561
|
+
o(this, "ut", 0);
|
|
562
|
+
o(this, "It", /* @__PURE__ */ new Map());
|
|
563
|
+
o(this, "wt", null);
|
|
564
|
+
this.m = A, this.Ct = t, this.Dt = e, this.ft();
|
|
565
|
+
}
|
|
566
|
+
jA(A) {
|
|
567
|
+
const t = this.ct.length;
|
|
568
|
+
return this.ct.push(A), this.Pt = !0, t;
|
|
516
569
|
}
|
|
517
570
|
get count() {
|
|
518
|
-
return this.
|
|
571
|
+
return this.ct.length;
|
|
519
572
|
}
|
|
520
573
|
get isEmpty() {
|
|
521
|
-
return this.
|
|
574
|
+
return this.ct.length === 0;
|
|
522
575
|
}
|
|
523
576
|
clear() {
|
|
524
|
-
this.
|
|
577
|
+
this.ct.length = 0, this.Pt = !0;
|
|
525
578
|
}
|
|
526
|
-
|
|
527
|
-
if (A <= this.
|
|
528
|
-
const t = Math.ceil(A * this.
|
|
529
|
-
this.
|
|
579
|
+
dt(A) {
|
|
580
|
+
if (A <= this.Ct) return;
|
|
581
|
+
const t = Math.ceil(A * this.Dt);
|
|
582
|
+
this.Ct = t, this.ft();
|
|
530
583
|
}
|
|
531
|
-
|
|
584
|
+
ft() {
|
|
532
585
|
const A = this.m;
|
|
533
|
-
|
|
534
|
-
const t = this.
|
|
535
|
-
A.bindBuffer(A.ARRAY_BUFFER, this.
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
if (!this.
|
|
539
|
-
const A = this.m, t = this.
|
|
540
|
-
this.
|
|
541
|
-
const e =
|
|
542
|
-
A.bindBuffer(A.ARRAY_BUFFER, this.
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
let t = this.
|
|
586
|
+
this.lt && A.deleteBuffer(this.lt), this.lt = A.createBuffer();
|
|
587
|
+
const t = this.Ct * b.BYTES_PER_INSTANCE;
|
|
588
|
+
A.bindBuffer(A.ARRAY_BUFFER, this.lt), A.bufferData(A.ARRAY_BUFFER, t, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Pt = !0, this.ut = 0;
|
|
589
|
+
}
|
|
590
|
+
_t() {
|
|
591
|
+
if (!this.Pt || this.ct.length === 0) return;
|
|
592
|
+
const A = this.m, t = this.ct.length;
|
|
593
|
+
this.dt(t), (!this.wt || this.wt.length < t * b.FLOATS_PER_INSTANCE) && (this.wt = new Float32Array(t * b.FLOATS_PER_INSTANCE));
|
|
594
|
+
const e = b.ht(this.ct);
|
|
595
|
+
A.bindBuffer(A.ARRAY_BUFFER, this.lt), t <= this.ut ? A.bufferSubData(A.ARRAY_BUFFER, 0, e) : A.bufferData(A.ARRAY_BUFFER, e, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Pt = !1, this.ut = t;
|
|
596
|
+
}
|
|
597
|
+
vt(A) {
|
|
598
|
+
let t = this.It.get(A);
|
|
546
599
|
if (!t) {
|
|
547
600
|
t = /* @__PURE__ */ new Map();
|
|
548
601
|
const e = this.m;
|
|
549
|
-
for (const
|
|
550
|
-
const r = e.getAttribLocation(A,
|
|
551
|
-
r !== -1 && t.set(
|
|
602
|
+
for (const s in Y.ATTRIBUTES) {
|
|
603
|
+
const r = e.getAttribLocation(A, s);
|
|
604
|
+
r !== -1 && t.set(s, r);
|
|
552
605
|
}
|
|
553
|
-
this.
|
|
606
|
+
this.It.set(A, t);
|
|
554
607
|
}
|
|
555
608
|
return t;
|
|
556
609
|
}
|
|
557
|
-
|
|
558
|
-
if (!this.
|
|
610
|
+
WA(A) {
|
|
611
|
+
if (!this.lt || this.ct.length === 0) return;
|
|
559
612
|
const t = this.m, e = A.QA;
|
|
560
|
-
|
|
561
|
-
this.
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
s && (t.enableVertexAttribArray(i), t.vertexAttribPointer(i, s.size, s.type, s.normalized, s.stride, s.offset), t.vertexAttribDivisor(i, s.divisor));
|
|
613
|
+
this._t();
|
|
614
|
+
const s = this.vt(e);
|
|
615
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.lt);
|
|
616
|
+
for (const [r, i] of s) {
|
|
617
|
+
const B = Y.ATTRIBUTES[r];
|
|
618
|
+
B && (t.enableVertexAttribArray(i), t.vertexAttribPointer(i, B.size, B.type, B.normalized, B.stride, B.offset), t.vertexAttribDivisor(i, B.divisor));
|
|
567
619
|
}
|
|
568
620
|
}
|
|
569
|
-
|
|
570
|
-
const t = this.m, e = this.
|
|
571
|
-
for (const [,
|
|
621
|
+
VA(A) {
|
|
622
|
+
const t = this.m, e = this.vt(A.QA);
|
|
623
|
+
for (const [, s] of e) t.disableVertexAttribArray(s), t.vertexAttribDivisor(s, 0);
|
|
572
624
|
}
|
|
573
|
-
|
|
574
|
-
this.
|
|
625
|
+
JA(A, t) {
|
|
626
|
+
this.ct.length !== 0 && this.m.drawArraysInstanced(A, 0, t, this.ct.length);
|
|
575
627
|
}
|
|
576
628
|
W() {
|
|
577
629
|
const A = this.m;
|
|
578
|
-
this.
|
|
630
|
+
this.lt && (A.deleteBuffer(this.lt), this.lt = null), this.ct.length = 0, this.It.clear(), this.wt = null;
|
|
579
631
|
}
|
|
580
632
|
}
|
|
581
|
-
class
|
|
582
|
-
constructor(A, t, e,
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
this.m = A, this.
|
|
633
|
+
class T {
|
|
634
|
+
constructor(A, t, e, s) {
|
|
635
|
+
o(this, "m");
|
|
636
|
+
o(this, "xt");
|
|
637
|
+
o(this, "yt");
|
|
638
|
+
o(this, "bt");
|
|
639
|
+
o(this, "Gt", null);
|
|
640
|
+
this.m = A, this.xt = t, this.yt = e, this.bt = s;
|
|
589
641
|
const r = this.m.createBuffer();
|
|
590
642
|
if (!r) throw Error("Failed to create unit geometry buffer");
|
|
591
|
-
this.m.bindBuffer(this.m.ARRAY_BUFFER, r), this.m.bufferData(this.m.ARRAY_BUFFER, this.
|
|
643
|
+
this.m.bindBuffer(this.m.ARRAY_BUFFER, r), this.m.bufferData(this.m.ARRAY_BUFFER, this.bt.vertices, this.m.STATIC_DRAW), this.m.bindBuffer(this.m.ARRAY_BUFFER, null), this.Gt = r;
|
|
592
644
|
}
|
|
593
645
|
get type() {
|
|
594
|
-
return this.
|
|
646
|
+
return this.yt;
|
|
595
647
|
}
|
|
596
648
|
get unitGeometry() {
|
|
597
|
-
return this.
|
|
649
|
+
return this.bt;
|
|
598
650
|
}
|
|
599
651
|
get unitBuffer() {
|
|
600
|
-
return this.
|
|
652
|
+
return this.Gt;
|
|
601
653
|
}
|
|
602
654
|
get batch() {
|
|
603
|
-
return this.
|
|
655
|
+
return this.xt;
|
|
604
656
|
}
|
|
605
|
-
|
|
606
|
-
this.
|
|
657
|
+
KA() {
|
|
658
|
+
this.xt.clear();
|
|
607
659
|
}
|
|
608
|
-
|
|
609
|
-
return !this.
|
|
660
|
+
HA() {
|
|
661
|
+
return !this.xt.isEmpty;
|
|
610
662
|
}
|
|
611
663
|
W() {
|
|
612
|
-
this.
|
|
664
|
+
this.xt.W(), this.Gt && (this.m.deleteBuffer(this.Gt), this.Gt = null);
|
|
613
665
|
}
|
|
614
|
-
|
|
615
|
-
const i = this.
|
|
616
|
-
return { position: [A, t], size: [e,
|
|
666
|
+
$t(A, t, e, s, r) {
|
|
667
|
+
const i = this.Mt(A, t, e, s, r.rotationX || 0, r.rotationY || 0, r.rotationZ || 0);
|
|
668
|
+
return { position: [A, t], size: [e, s], character: r.character || [0, 0, 0], primaryColor: r.charColor || [1, 1, 1, 1], secondaryColor: r.bgColor || [0, 0, 0, 1], rotation: r.charRotation || [0, 0], transform: [r.invert ? 1 : 0, r.flipHorizontally ? 1 : 0, r.flipVertically ? 1 : 0], globalRotationX: i.radiansX, globalRotationY: i.radiansY, globalRotationZ: i.radiansZ, rotationCenter: [i.centerX, i.centerY] };
|
|
617
669
|
}
|
|
618
|
-
|
|
619
|
-
const e =
|
|
670
|
+
Yt(A, t) {
|
|
671
|
+
const e = R(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height];
|
|
620
672
|
return { nx: A / e[2] * 2 - 1, ny: 1 - t / e[3] * 2 };
|
|
621
673
|
}
|
|
622
|
-
|
|
623
|
-
const
|
|
624
|
-
A.rotationCenter = [
|
|
674
|
+
zt(A, t, e) {
|
|
675
|
+
const s = this.Yt(t, e);
|
|
676
|
+
A.rotationCenter = [s.nx, s.ny];
|
|
625
677
|
}
|
|
626
|
-
|
|
627
|
-
const
|
|
628
|
-
return { centerX: (A + e / 2) /
|
|
678
|
+
Mt(A, t, e, s, r, i, B) {
|
|
679
|
+
const n = R(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height], Q = n[2], h = n[3];
|
|
680
|
+
return { centerX: (A + e / 2) / Q * 2 - 1, centerY: 1 - (t + s / 2) / h * 2, radiansX: -r * Math.PI / 180, radiansY: -i * Math.PI / 180, radiansZ: -B * Math.PI / 180, aspectRatio: Q / h };
|
|
629
681
|
}
|
|
630
682
|
}
|
|
631
|
-
const
|
|
632
|
-
class
|
|
683
|
+
const iA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
684
|
+
class BA extends T {
|
|
633
685
|
constructor(A, t) {
|
|
634
|
-
super(A, t, D.RECTANGLE,
|
|
686
|
+
super(A, t, D.RECTANGLE, iA);
|
|
635
687
|
}
|
|
636
|
-
|
|
637
|
-
const e = this
|
|
638
|
-
return this.
|
|
688
|
+
jA(A, t) {
|
|
689
|
+
const e = this.$t(A.x, A.y, A.width, A.height, t);
|
|
690
|
+
return this.xt.jA(e);
|
|
639
691
|
}
|
|
640
692
|
}
|
|
641
|
-
const
|
|
642
|
-
class
|
|
693
|
+
const EA = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
694
|
+
class nA extends T {
|
|
643
695
|
constructor(A, t) {
|
|
644
|
-
super(A, t, D.LINE,
|
|
696
|
+
super(A, t, D.LINE, EA);
|
|
645
697
|
}
|
|
646
|
-
|
|
647
|
-
const e = A.x2 - A.x1,
|
|
648
|
-
return this.
|
|
698
|
+
jA(A, t) {
|
|
699
|
+
const e = A.x2 - A.x1, s = A.y2 - A.y1, r = Math.hypot(e, s), i = Math.atan2(s, e), B = A.thickness || t.lineWeight || 1, n = A.x1 + e / 2, Q = A.y1 + s / 2, h = n - r / 2, a = Q, g = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotationX: t.rotationX || 0, rotationY: t.rotationY || 0, rotationZ: (t.rotationZ || 0) + 180 * i / Math.PI, lineWeight: B }, l = this.$t(h, a, r, B, g);
|
|
700
|
+
return this.zt(l, n, Q), this.xt.jA(l);
|
|
649
701
|
}
|
|
650
702
|
}
|
|
651
|
-
const
|
|
703
|
+
const oA = { vertices: function(E = 32) {
|
|
652
704
|
const A = [], t = 2 * Math.PI / E;
|
|
653
705
|
for (let e = 0; e < E; e++) {
|
|
654
|
-
const
|
|
655
|
-
A.push(0, 0, 0.5, 0.5, i,
|
|
706
|
+
const s = e * t, r = (e + 1) % E * t, i = Math.cos(s), B = Math.sin(s), n = 0.5 * (i + 1), Q = 0.5 * (B + 1), h = Math.cos(r), a = Math.sin(r), g = 0.5 * (h + 1), l = 0.5 * (a + 1);
|
|
707
|
+
A.push(0, 0, 0.5, 0.5, i, B, n, Q, h, a, g, l);
|
|
656
708
|
}
|
|
657
709
|
return new Float32Array(A);
|
|
658
710
|
}(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
659
|
-
class
|
|
711
|
+
class QA extends T {
|
|
660
712
|
constructor(A, t) {
|
|
661
|
-
super(A, t, D.ELLIPSE,
|
|
713
|
+
super(A, t, D.ELLIPSE, oA);
|
|
662
714
|
}
|
|
663
|
-
|
|
664
|
-
const e = this
|
|
665
|
-
return this.
|
|
715
|
+
jA(A, t) {
|
|
716
|
+
const e = this.$t(A.x, A.y, A.width, A.height, t);
|
|
717
|
+
return this.zt(e, A.x, A.y), this.xt.jA(e);
|
|
666
718
|
}
|
|
667
719
|
}
|
|
668
|
-
let
|
|
720
|
+
let aA = { vertices: function(E) {
|
|
669
721
|
const A = [];
|
|
670
722
|
for (let t = 0; t < E; t++) {
|
|
671
|
-
const e = t / E,
|
|
672
|
-
A.push(e, 0, e, 0, e, 1, e, 1,
|
|
723
|
+
const e = t / E, s = (t + 1) / E;
|
|
724
|
+
A.push(e, 0, e, 0, e, 1, e, 1, s, 1, s, 1);
|
|
673
725
|
}
|
|
674
726
|
return new Float32Array(A);
|
|
675
727
|
}(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
676
|
-
class gA extends
|
|
728
|
+
class gA extends T {
|
|
677
729
|
constructor(A, t) {
|
|
678
|
-
super(A, t, D.ARC,
|
|
730
|
+
super(A, t, D.ARC, aA);
|
|
679
731
|
}
|
|
680
|
-
|
|
681
|
-
const e = A.x - A.width / 2,
|
|
682
|
-
return this.
|
|
732
|
+
jA(A, t) {
|
|
733
|
+
const e = A.x - A.width / 2, s = A.y - A.height / 2, r = A.start * Math.PI / 180, i = A.stop * Math.PI / 180, B = this.$t(e, s, A.width, A.height, t);
|
|
734
|
+
return this.zt(B, A.x, A.y), B.arcAngles = [r, i], this.xt.jA(B);
|
|
683
735
|
}
|
|
684
736
|
}
|
|
685
|
-
const
|
|
686
|
-
class
|
|
737
|
+
const hA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
738
|
+
class cA extends T {
|
|
687
739
|
constructor(A, t) {
|
|
688
|
-
super(A, t, D.TRIANGLE,
|
|
740
|
+
super(A, t, D.TRIANGLE, hA);
|
|
689
741
|
}
|
|
690
|
-
|
|
691
|
-
const e = Math.min(A.x1, A.x2, A.x3),
|
|
692
|
-
return this.
|
|
742
|
+
jA(A, t) {
|
|
743
|
+
const e = Math.min(A.x1, A.x2, A.x3), s = Math.max(A.x1, A.x2, A.x3), r = Math.min(A.y1, A.y2, A.y3), i = s - e, B = Math.max(A.y1, A.y2, A.y3) - r, n = this.$t(e, r, i, B, t), Q = e + 0.5 * i, h = r + B * (1 / 3);
|
|
744
|
+
return this.zt(n, Q, h), this.xt.jA(n);
|
|
693
745
|
}
|
|
694
746
|
}
|
|
695
|
-
function
|
|
696
|
-
const r = 1 - E, i = r * r,
|
|
697
|
-
return i * r * A + 3 * i * E * t + 3 * r *
|
|
747
|
+
function k(E, A, t, e, s) {
|
|
748
|
+
const r = 1 - E, i = r * r, B = E * E;
|
|
749
|
+
return i * r * A + 3 * i * E * t + 3 * r * B * e + B * E * s;
|
|
698
750
|
}
|
|
699
|
-
const
|
|
751
|
+
const lA = { vertices: function(E = 16) {
|
|
700
752
|
const A = [];
|
|
701
753
|
for (let t = 0; t < E; t++) {
|
|
702
|
-
const e = t / E,
|
|
703
|
-
A.push(e, -0.5, e, 0), A.push(
|
|
754
|
+
const e = t / E, s = (t + 1) / E;
|
|
755
|
+
A.push(e, -0.5, e, 0), A.push(s, -0.5, s, 0), A.push(e, 0.5, e, 1), A.push(e, 0.5, e, 1), A.push(s, -0.5, s, 0), A.push(s, 0.5, s, 1);
|
|
704
756
|
}
|
|
705
757
|
return new Float32Array(A);
|
|
706
758
|
}(16), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
707
|
-
class
|
|
759
|
+
class CA extends T {
|
|
708
760
|
constructor(A, t) {
|
|
709
|
-
super(A, t, D.BEZIER_CURVE,
|
|
761
|
+
super(A, t, D.BEZIER_CURVE, lA);
|
|
710
762
|
}
|
|
711
|
-
|
|
712
|
-
const e = t.lineWeight || 1,
|
|
713
|
-
return this.
|
|
763
|
+
jA(A, t) {
|
|
764
|
+
const e = t.lineWeight || 1, s = k(0.5, A.x1, A.cp1x, A.cp2x, A.x2), r = k(0.5, A.y1, A.cp1y, A.cp2y, A.y2), i = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotationX: t.rotationX || 0, rotationY: t.rotationY || 0, rotationZ: t.rotationZ || 0, lineWeight: e }, B = this.$t(0, 0, 1, e, i);
|
|
765
|
+
return this.zt(B, s, r), B.bezierStartPoint = [A.x1, A.y1], B.bezierControlPoint1 = [A.cp1x, A.cp1y], B.bezierControlPoint2 = [A.cp2x, A.cp2y], B.bezierEndPoint = [A.x2, A.y2], this.xt.jA(B);
|
|
714
766
|
}
|
|
715
767
|
}
|
|
716
|
-
class
|
|
768
|
+
class DA {
|
|
717
769
|
constructor(A) {
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
770
|
+
o(this, "m");
|
|
771
|
+
o(this, "Rt", null);
|
|
772
|
+
o(this, "Tt", null);
|
|
773
|
+
o(this, "St", {});
|
|
774
|
+
o(this, "Ft", null);
|
|
775
|
+
o(this, "Ot", /* @__PURE__ */ new Map());
|
|
776
|
+
o(this, "Ut");
|
|
777
|
+
o(this, "Lt");
|
|
778
|
+
o(this, "kt");
|
|
779
|
+
this.m = A, this.kt = new AA(), this.Ut = new eA(A), this.Lt = new sA(), this.Ft = A.createBuffer(), G(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
|
|
780
|
+
}
|
|
781
|
+
Ht(A) {
|
|
782
|
+
let t = this.Ot.get(A);
|
|
730
783
|
if (t) return t;
|
|
731
|
-
const e = new
|
|
732
|
-
return t = (0, { [D.RECTANGLE]: () => new
|
|
784
|
+
const e = new rA(this.m);
|
|
785
|
+
return t = (0, { [D.RECTANGLE]: () => new BA(this.m, e), [D.LINE]: () => new nA(this.m, e), [D.ELLIPSE]: () => new QA(this.m, e), [D.ARC]: () => new gA(this.m, e), [D.TRIANGLE]: () => new cA(this.m, e), [D.BEZIER_CURVE]: () => new CA(this.m, e) }[A])(), this.Ot.set(A, t), t;
|
|
733
786
|
}
|
|
734
|
-
|
|
735
|
-
this.
|
|
787
|
+
Wt(A) {
|
|
788
|
+
this.Rt !== A && (this.Rt = A, A.AA());
|
|
736
789
|
}
|
|
737
|
-
|
|
738
|
-
return new
|
|
790
|
+
Jt(A, t) {
|
|
791
|
+
return new z(this.m, A, t);
|
|
739
792
|
}
|
|
740
|
-
|
|
793
|
+
Vt(A) {
|
|
794
|
+
this.Tt = A, A && (this.St = {});
|
|
795
|
+
}
|
|
796
|
+
Kt(A, t) {
|
|
797
|
+
this.St[A] = t;
|
|
798
|
+
}
|
|
799
|
+
Zt(A) {
|
|
800
|
+
Object.assign(this.St, A);
|
|
801
|
+
}
|
|
802
|
+
jt(A) {
|
|
803
|
+
return new z(this.m, O, A);
|
|
804
|
+
}
|
|
805
|
+
Xt(A, t, e, s) {
|
|
741
806
|
var C;
|
|
742
|
-
const r = this.m, i = r.canvas.width,
|
|
743
|
-
r.bindBuffer(r.ARRAY_BUFFER, this.
|
|
744
|
-
const l = ((C = this.
|
|
807
|
+
const r = this.m, i = r.canvas.width, B = r.canvas.height, n = A / i * 2 - 1, Q = (A + e) / i * 2 - 1, h = 1 - t / B * 2, a = 1 - (t + s) / B * 2, g = new Float32Array([n, a, Q, a, n, h, Q, a, Q, h, n, h]);
|
|
808
|
+
r.bindBuffer(r.ARRAY_BUFFER, this.Ft), r.bufferData(r.ARRAY_BUFFER, g, r.DYNAMIC_DRAW);
|
|
809
|
+
const l = ((C = this.Rt) == null ? void 0 : C.QA) || r.getParameter(r.CURRENT_PROGRAM), c = l ? r.getAttribLocation(l, "a_position") : -1;
|
|
745
810
|
c !== -1 && (r.enableVertexAttribArray(c), r.vertexAttribPointer(c, 2, r.FLOAT, !1, 8, 0)), r.drawArrays(r.TRIANGLES, 0, 6), c !== -1 && r.disableVertexAttribArray(c);
|
|
746
811
|
}
|
|
747
|
-
|
|
748
|
-
this.
|
|
812
|
+
Nt(A, t, e, s) {
|
|
813
|
+
this.Tt ? (this.Lt.st(A, t, e, s, this.Tt, { ...this.St }, this.kt), this.Tt = null, this.St = {}) : this.Lt.Bt(A, t, e, s, this.kt);
|
|
749
814
|
}
|
|
750
|
-
|
|
751
|
-
this.
|
|
815
|
+
qt(A, t, e, s) {
|
|
816
|
+
this.Lt.it(A, t, e, s, this.kt.lineWeight, this.kt);
|
|
752
817
|
}
|
|
753
|
-
|
|
754
|
-
this.
|
|
818
|
+
Ae(A, t, e, s) {
|
|
819
|
+
this.Lt.Qt(A, t, e, s, this.kt);
|
|
755
820
|
}
|
|
756
|
-
|
|
757
|
-
this.
|
|
821
|
+
te(A, t, e, s, r, i) {
|
|
822
|
+
this.Lt.Et(A, t, e, s, r, i, this.kt);
|
|
758
823
|
}
|
|
759
|
-
|
|
760
|
-
const
|
|
761
|
-
this.
|
|
824
|
+
ee(A, t, e, s, r, i, B, n) {
|
|
825
|
+
const Q = this.kt.lineWeight;
|
|
826
|
+
this.Lt.nt(A, t, e, s, r, i, B, n, Q, this.kt);
|
|
762
827
|
}
|
|
763
|
-
|
|
764
|
-
return new
|
|
828
|
+
Be(A, t, e = 1, s = {}) {
|
|
829
|
+
return new U(this.m, A, t, e, s);
|
|
765
830
|
}
|
|
766
|
-
|
|
767
|
-
this.
|
|
831
|
+
se(A, t, e, s, r, i) {
|
|
832
|
+
this.Lt.rt(A, t, e, s, r, i, this.kt);
|
|
768
833
|
}
|
|
769
|
-
|
|
770
|
-
this.
|
|
834
|
+
ie(A, t = A, e = A, s = 255) {
|
|
835
|
+
this.state.zA(A, t, e, s), this.ot(A / 255, t / 255, e / 255, s / 255);
|
|
771
836
|
}
|
|
772
|
-
|
|
773
|
-
this.m.clearColor(A, t, e,
|
|
837
|
+
ot(A = 0, t = 0, e = 0, s = 0) {
|
|
838
|
+
this.m.clearColor(A, t, e, s), this.m.clear(this.m.COLOR_BUFFER_BIT);
|
|
774
839
|
}
|
|
775
|
-
|
|
776
|
-
this.m.viewport(0, 0, this.m.canvas.width, this.m.canvas.height),
|
|
840
|
+
Qe() {
|
|
841
|
+
this.m.viewport(0, 0, this.m.canvas.width, this.m.canvas.height), G(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
|
|
777
842
|
}
|
|
778
843
|
get context() {
|
|
779
844
|
return this.m;
|
|
780
845
|
}
|
|
781
846
|
get state() {
|
|
782
|
-
return this.
|
|
847
|
+
return this.kt;
|
|
783
848
|
}
|
|
784
|
-
|
|
785
|
-
const t =
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
849
|
+
re(A) {
|
|
850
|
+
const t = A, e = R(this.m) ?? this.m.getParameter(this.m.VIEWPORT), s = { shader: t, gl: this.m, viewport: e };
|
|
851
|
+
this.Wt(t);
|
|
852
|
+
const r = /* @__PURE__ */ new Set();
|
|
853
|
+
for (const i of this.Lt) i.type === D.CUSTOM ? r.add(D.RECTANGLE) : r.add(i.type);
|
|
854
|
+
for (const i of r) i !== D.CUSTOM && this.Ht(i);
|
|
855
|
+
this.Ut.kA(s, this.Lt, this.Ot), this.Lt.ot();
|
|
789
856
|
}
|
|
790
857
|
W() {
|
|
791
|
-
this.m.deleteBuffer(this.
|
|
792
|
-
for (const A of this.
|
|
858
|
+
this.m.deleteBuffer(this.Ft), this.Lt.ot();
|
|
859
|
+
for (const A of this.Ot.values()) A.W();
|
|
793
860
|
}
|
|
794
861
|
}
|
|
795
|
-
const
|
|
862
|
+
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) {
|
|
796
863
|
const e = [];
|
|
797
|
-
for (let
|
|
864
|
+
for (let s = 0; s < t; s++) e.push(f.readUshort(E, A + 2 * s));
|
|
798
865
|
return e;
|
|
799
866
|
}, readUint(E, A) {
|
|
800
|
-
const t =
|
|
801
|
-
return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3],
|
|
867
|
+
const t = f.t.uint8;
|
|
868
|
+
return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], f.t.uint32[0];
|
|
802
869
|
}, readASCII(E, A, t) {
|
|
803
870
|
let e = "";
|
|
804
|
-
for (let
|
|
871
|
+
for (let s = 0; s < t; s++) e += String.fromCharCode(E[A + s]);
|
|
805
872
|
return e;
|
|
806
873
|
}, t: (() => {
|
|
807
874
|
const E = new ArrayBuffer(8);
|
|
808
875
|
return { uint8: new Uint8Array(E), int16: new Int16Array(E), uint16: new Uint16Array(E), uint32: new Uint32Array(E) };
|
|
809
|
-
})() },
|
|
876
|
+
})() }, uA = { parseTab(E, A, t) {
|
|
810
877
|
const e = { tables: [], ids: {}, off: A };
|
|
811
878
|
E = new Uint8Array(E.buffer, A, t), A = 0;
|
|
812
|
-
const
|
|
879
|
+
const s = f, r = s.readUshort, i = r(E, A += 2);
|
|
813
880
|
A += 2;
|
|
814
|
-
const
|
|
815
|
-
for (let
|
|
816
|
-
const
|
|
881
|
+
const B = [];
|
|
882
|
+
for (let n = 0; n < i; n++) {
|
|
883
|
+
const Q = r(E, A), h = r(E, A += 2);
|
|
817
884
|
A += 2;
|
|
818
|
-
const a =
|
|
885
|
+
const a = s.readUint(E, A);
|
|
819
886
|
A += 4;
|
|
820
|
-
const
|
|
821
|
-
let l =
|
|
887
|
+
const g = `p${Q}e${h}`;
|
|
888
|
+
let l = B.indexOf(a);
|
|
822
889
|
if (l === -1) {
|
|
823
890
|
let c;
|
|
824
|
-
l = e.tables.length,
|
|
891
|
+
l = e.tables.length, B.push(a);
|
|
825
892
|
const C = r(E, a);
|
|
826
893
|
c = C === 4 ? this.parse4(E, a) : C === 12 ? this.parse12(E, a) : { format: C }, e.tables.push(c);
|
|
827
894
|
}
|
|
828
|
-
e.ids[
|
|
895
|
+
e.ids[g] != null && console.warn("Multiple tables for one platform+encoding: " + g), e.ids[g] = l;
|
|
829
896
|
}
|
|
830
897
|
return e;
|
|
831
898
|
}, parse4(E, A) {
|
|
832
|
-
const t =
|
|
899
|
+
const t = f, e = t.readUshort, s = t.readUshorts, r = A, i = e(E, A += 2);
|
|
833
900
|
A += 2;
|
|
834
|
-
const
|
|
835
|
-
A += 2,
|
|
836
|
-
for (let
|
|
837
|
-
return
|
|
901
|
+
const B = e(E, A += 2) >>> 1, n = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
|
|
902
|
+
A += 2, n.entrySelector = e(E, A), A += 2, n.rangeShift = e(E, A), A += 2, n.endCount = s(E, A, B), A += 2 * B, A += 2, n.startCount = s(E, A, B), A += 2 * B;
|
|
903
|
+
for (let Q = 0; Q < B; Q++) n.idDelta.push(t.readShort(E, A)), A += 2;
|
|
904
|
+
return n.idRangeOffset = s(E, A, B), A += 2 * B, n.glyphIdArray = s(E, A, r + i - A >> 1), n;
|
|
838
905
|
}, parse12(E, A) {
|
|
839
|
-
const t =
|
|
906
|
+
const t = f.readUint;
|
|
840
907
|
t(E, A += 4), t(E, A += 4);
|
|
841
908
|
const e = t(E, A += 4);
|
|
842
909
|
A += 4;
|
|
843
|
-
const
|
|
844
|
-
for (let r = 0; r < 3 * e; r += 3)
|
|
845
|
-
return { format: 12, groups:
|
|
910
|
+
const s = new Uint32Array(3 * e);
|
|
911
|
+
for (let r = 0; r < 3 * e; r += 3) s[r] = t(E, A + (r << 2)), s[r + 1] = t(E, A + (r << 2) + 4), s[r + 2] = t(E, A + (r << 2) + 8);
|
|
912
|
+
return { format: 12, groups: s };
|
|
846
913
|
} }, PA = { parseTab(E, A, t) {
|
|
847
|
-
const e =
|
|
914
|
+
const e = f;
|
|
848
915
|
A += 18;
|
|
849
|
-
const
|
|
916
|
+
const s = e.readUshort(E, A);
|
|
850
917
|
A += 2, A += 16;
|
|
851
918
|
const r = e.readShort(E, A);
|
|
852
919
|
A += 2;
|
|
853
920
|
const i = e.readShort(E, A);
|
|
854
921
|
A += 2;
|
|
855
|
-
const
|
|
922
|
+
const B = e.readShort(E, A);
|
|
856
923
|
A += 2;
|
|
857
|
-
const
|
|
858
|
-
return A += 2, A += 6, { unitsPerEm:
|
|
859
|
-
} },
|
|
860
|
-
const e =
|
|
924
|
+
const n = e.readShort(E, A);
|
|
925
|
+
return A += 2, A += 6, { unitsPerEm: s, xMin: r, yMin: i, xMax: B, yMax: n, indexToLocFormat: e.readShort(E, A) };
|
|
926
|
+
} }, IA = { parseTab(E, A, t) {
|
|
927
|
+
const e = f;
|
|
861
928
|
A += 4;
|
|
862
|
-
const
|
|
863
|
-
for (let i = 0; i <
|
|
864
|
-
const
|
|
865
|
-
r[
|
|
929
|
+
const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], r = {};
|
|
930
|
+
for (let i = 0; i < s.length; i++) {
|
|
931
|
+
const B = s[i], n = B === "advanceWidthMax" || B === "numberOfHMetrics" ? e.readUshort : e.readShort;
|
|
932
|
+
r[B] = n(E, A + 2 * i);
|
|
866
933
|
}
|
|
867
934
|
return r;
|
|
868
|
-
} },
|
|
869
|
-
const
|
|
870
|
-
let
|
|
871
|
-
for (; a <
|
|
872
|
-
for (; a <
|
|
935
|
+
} }, fA = { parseTab(E, A, t, e) {
|
|
936
|
+
const s = f, r = [], i = [], B = e.maxp.numGlyphs, n = e.hhea.numberOfHMetrics;
|
|
937
|
+
let Q = 0, h = 0, a = 0;
|
|
938
|
+
for (; a < n; ) Q = s.readUshort(E, A + (a << 2)), h = s.readShort(E, A + (a << 2) + 2), r.push(Q), i.push(h), a++;
|
|
939
|
+
for (; a < B; ) r.push(Q), i.push(h), a++;
|
|
873
940
|
return { aWidth: r, lsBearing: i };
|
|
874
|
-
} },
|
|
875
|
-
const e =
|
|
941
|
+
} }, N = { cmap: uA, head: PA, hhea: IA, maxp: { parseTab(E, A, t) {
|
|
942
|
+
const e = f;
|
|
876
943
|
return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
|
|
877
|
-
} }, hmtx:
|
|
878
|
-
const
|
|
879
|
-
if (i === 0) for (let
|
|
880
|
-
else if (i === 1) for (let
|
|
944
|
+
} }, hmtx: fA, loca: { parseTab(E, A, t, e) {
|
|
945
|
+
const s = f, r = [], i = e.head.indexToLocFormat, B = e.maxp.numGlyphs + 1;
|
|
946
|
+
if (i === 0) for (let n = 0; n < B; n++) r.push(s.readUshort(E, A + (n << 1)) << 1);
|
|
947
|
+
else if (i === 1) for (let n = 0; n < B; n++) r.push(s.readUint(E, A + (n << 2)));
|
|
881
948
|
return r;
|
|
882
949
|
} }, glyf: { parseTab(E, A, t, e) {
|
|
883
|
-
const
|
|
884
|
-
for (let i = 0; i < r; i++)
|
|
885
|
-
return
|
|
886
|
-
},
|
|
887
|
-
const t =
|
|
888
|
-
if (
|
|
889
|
-
const r =
|
|
950
|
+
const s = [], r = e.maxp.numGlyphs;
|
|
951
|
+
for (let i = 0; i < r; i++) s.push(null);
|
|
952
|
+
return s;
|
|
953
|
+
}, Ee(E, A) {
|
|
954
|
+
const t = f, e = E.ne, s = E.loca;
|
|
955
|
+
if (s[A] === s[A + 1]) return null;
|
|
956
|
+
const r = y.findTable(e, "glyf", E.oe);
|
|
890
957
|
if (!r) return null;
|
|
891
|
-
let i = r[0] +
|
|
892
|
-
const
|
|
893
|
-
if (
|
|
894
|
-
if (
|
|
895
|
-
|
|
896
|
-
for (let
|
|
897
|
-
const
|
|
898
|
-
if (i += 2, e.length - i <
|
|
899
|
-
i +=
|
|
900
|
-
const
|
|
901
|
-
|
|
902
|
-
for (let
|
|
958
|
+
let i = r[0] + s[A];
|
|
959
|
+
const B = {};
|
|
960
|
+
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;
|
|
961
|
+
if (B.noc > 0) {
|
|
962
|
+
B.endPts = [];
|
|
963
|
+
for (let g = 0; g < B.noc; g++) B.endPts.push(t.readUshort(e, i)), i += 2;
|
|
964
|
+
const n = t.readUshort(e, i);
|
|
965
|
+
if (i += 2, e.length - i < n) return null;
|
|
966
|
+
i += n;
|
|
967
|
+
const Q = B.endPts[B.noc - 1] + 1;
|
|
968
|
+
B.flags = [];
|
|
969
|
+
for (let g = 0; g < Q; g++) {
|
|
903
970
|
const l = e[i];
|
|
904
|
-
if (i++,
|
|
971
|
+
if (i++, B.flags.push(l), 8 & l) {
|
|
905
972
|
const c = e[i];
|
|
906
973
|
i++;
|
|
907
|
-
for (let C = 0; C < c; C++)
|
|
974
|
+
for (let C = 0; C < c; C++) B.flags.push(l), g++;
|
|
908
975
|
}
|
|
909
976
|
}
|
|
910
|
-
|
|
911
|
-
for (let
|
|
912
|
-
const l =
|
|
913
|
-
2 & l ? (
|
|
977
|
+
B.xs = [];
|
|
978
|
+
for (let g = 0; g < Q; g++) {
|
|
979
|
+
const l = B.flags[g], c = !!(16 & l);
|
|
980
|
+
2 & l ? (B.xs.push(c ? e[i] : -e[i]), i++) : c ? B.xs.push(0) : (B.xs.push(t.readShort(e, i)), i += 2);
|
|
914
981
|
}
|
|
915
|
-
|
|
916
|
-
for (let
|
|
917
|
-
const l =
|
|
918
|
-
4 & l ? (
|
|
982
|
+
B.ys = [];
|
|
983
|
+
for (let g = 0; g < Q; g++) {
|
|
984
|
+
const l = B.flags[g], c = !!(32 & l);
|
|
985
|
+
4 & l ? (B.ys.push(c ? e[i] : -e[i]), i++) : c ? B.ys.push(0) : (B.ys.push(t.readShort(e, i)), i += 2);
|
|
919
986
|
}
|
|
920
|
-
let
|
|
921
|
-
for (let
|
|
922
|
-
} else
|
|
923
|
-
return
|
|
924
|
-
} } },
|
|
925
|
-
const r =
|
|
926
|
-
for (const
|
|
927
|
-
const
|
|
928
|
-
if (
|
|
929
|
-
const [
|
|
930
|
-
let
|
|
931
|
-
|
|
987
|
+
let h = 0, a = 0;
|
|
988
|
+
for (let g = 0; g < Q; g++) h += B.xs[g], a += B.ys[g], B.xs[g] = h, B.ys[g] = a;
|
|
989
|
+
} else B.parts = [], B.endPts = [], B.flags = [], B.xs = [], B.ys = [];
|
|
990
|
+
return B;
|
|
991
|
+
} } }, y = { parse: (E) => [((A, t, e, s) => {
|
|
992
|
+
const r = N, i = { ne: A, ge: t, oe: e };
|
|
993
|
+
for (const B in r) {
|
|
994
|
+
const n = B, Q = y.findTable(A, n, e);
|
|
995
|
+
if (Q) {
|
|
996
|
+
const [h, a] = Q;
|
|
997
|
+
let g = s[h];
|
|
998
|
+
g == null && (g = r[n].parseTab(A, h, a, i), s[h] = g), i[n] = g;
|
|
932
999
|
}
|
|
933
1000
|
}
|
|
934
1001
|
return i;
|
|
935
1002
|
})(new Uint8Array(E), 0, 0, {})], findTable(E, A, t) {
|
|
936
|
-
const e =
|
|
1003
|
+
const e = f, s = e.readUshort(E, t + 4);
|
|
937
1004
|
let r = t + 12;
|
|
938
|
-
for (let i = 0; i <
|
|
939
|
-
const
|
|
1005
|
+
for (let i = 0; i < s; i++) {
|
|
1006
|
+
const B = e.readASCII(E, r, 4);
|
|
940
1007
|
e.readUint(E, r + 4);
|
|
941
|
-
const
|
|
942
|
-
if (
|
|
1008
|
+
const n = e.readUint(E, r + 8), Q = e.readUint(E, r + 12);
|
|
1009
|
+
if (B === A) return [n, Q];
|
|
943
1010
|
r += 16;
|
|
944
1011
|
}
|
|
945
1012
|
return null;
|
|
946
|
-
}, T:
|
|
947
|
-
class
|
|
1013
|
+
}, T: N, B: f };
|
|
1014
|
+
class S {
|
|
948
1015
|
constructor() {
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
const e = `${this.
|
|
954
|
-
if (this.
|
|
955
|
-
const
|
|
956
|
-
if (!
|
|
1016
|
+
o(this, "ae", /* @__PURE__ */ new Map());
|
|
1017
|
+
o(this, "he", /* @__PURE__ */ new Map());
|
|
1018
|
+
}
|
|
1019
|
+
ce(A, t) {
|
|
1020
|
+
const e = `${this.Ce(A)}_${t}`;
|
|
1021
|
+
if (this.ae.has(e)) return this.ae.get(e);
|
|
1022
|
+
const s = A.cmap;
|
|
1023
|
+
if (!s || !s.tables) return this.ae.set(e, 0), 0;
|
|
957
1024
|
let r = 0;
|
|
958
|
-
for (const i of
|
|
959
|
-
return this.
|
|
1025
|
+
for (const i of s.tables) if (i.format === 4 ? r = this.De(t, i) : i.format === 12 && (r = this.le(t, i)), r > 0) break;
|
|
1026
|
+
return this.ae.set(e, r), r;
|
|
960
1027
|
}
|
|
961
|
-
|
|
1028
|
+
Pe(A, t) {
|
|
962
1029
|
const e = t.codePointAt(0);
|
|
963
|
-
return e === void 0 ? 0 : this.
|
|
1030
|
+
return e === void 0 ? 0 : this.ce(A, e);
|
|
964
1031
|
}
|
|
965
|
-
|
|
1032
|
+
ue(A, t) {
|
|
966
1033
|
const e = A.hmtx;
|
|
967
1034
|
return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
968
1035
|
}
|
|
969
|
-
|
|
970
|
-
const e = t / A.head.unitsPerEm,
|
|
971
|
-
return { ascender:
|
|
1036
|
+
Ie(A, t) {
|
|
1037
|
+
const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
|
|
1038
|
+
return { ascender: s, descender: r, lineGap: i, lineHeight: s - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
|
|
972
1039
|
}
|
|
973
|
-
|
|
974
|
-
this.
|
|
1040
|
+
we() {
|
|
1041
|
+
this.ae.clear(), this.he.clear();
|
|
975
1042
|
}
|
|
976
|
-
|
|
977
|
-
return `${A.
|
|
1043
|
+
Ce(A) {
|
|
1044
|
+
return `${A.oe}_${A.ne.length}`;
|
|
978
1045
|
}
|
|
979
|
-
|
|
1046
|
+
De(A, t) {
|
|
980
1047
|
const e = t.endCount.length;
|
|
981
|
-
let
|
|
1048
|
+
let s = -1;
|
|
982
1049
|
for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
|
|
983
|
-
|
|
1050
|
+
s = r;
|
|
984
1051
|
break;
|
|
985
1052
|
}
|
|
986
|
-
if (
|
|
987
|
-
if (t.idRangeOffset[
|
|
1053
|
+
if (s === -1 || A < t.startCount[s]) return 0;
|
|
1054
|
+
if (t.idRangeOffset[s] === 0) return A + t.idDelta[s] & 65535;
|
|
988
1055
|
{
|
|
989
|
-
const r = t.idRangeOffset[
|
|
1056
|
+
const r = t.idRangeOffset[s] / 2 + (A - t.startCount[s]) - (e - s);
|
|
990
1057
|
if (r >= 0 && r < t.glyphIdArray.length) {
|
|
991
1058
|
const i = t.glyphIdArray[r];
|
|
992
|
-
return i === 0 ? 0 : i + t.idDelta[
|
|
1059
|
+
return i === 0 ? 0 : i + t.idDelta[s] & 65535;
|
|
993
1060
|
}
|
|
994
1061
|
}
|
|
995
1062
|
return 0;
|
|
996
1063
|
}
|
|
997
|
-
|
|
1064
|
+
le(A, t) {
|
|
998
1065
|
const e = t.groups.length / 3;
|
|
999
|
-
for (let
|
|
1000
|
-
const r = t.groups[3 *
|
|
1001
|
-
if (A >= r && A <= i) return
|
|
1066
|
+
for (let s = 0; s < e; s++) {
|
|
1067
|
+
const r = t.groups[3 * s], i = t.groups[3 * s + 1], B = t.groups[3 * s + 2];
|
|
1068
|
+
if (A >= r && A <= i) return B + (A - r);
|
|
1002
1069
|
}
|
|
1003
1070
|
return 0;
|
|
1004
1071
|
}
|
|
1005
1072
|
}
|
|
1006
|
-
class
|
|
1073
|
+
class dA {
|
|
1007
1074
|
constructor(A) {
|
|
1008
|
-
|
|
1009
|
-
this.
|
|
1075
|
+
o(this, "fe");
|
|
1076
|
+
this.fe = A;
|
|
1010
1077
|
}
|
|
1011
|
-
|
|
1078
|
+
de(A) {
|
|
1012
1079
|
var e;
|
|
1013
1080
|
const t = [];
|
|
1014
|
-
return (e = A.cmap) != null && e.tables ? (A.cmap.tables.forEach((
|
|
1015
|
-
if (
|
|
1016
|
-
const r = this.
|
|
1081
|
+
return (e = A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
|
|
1082
|
+
if (s.format === 4) {
|
|
1083
|
+
const r = this.pe(s);
|
|
1017
1084
|
t.push(...r);
|
|
1018
|
-
} else if (
|
|
1019
|
-
const r = this.
|
|
1085
|
+
} else if (s.format === 12) {
|
|
1086
|
+
const r = this._e(s);
|
|
1020
1087
|
t.push(...r);
|
|
1021
1088
|
}
|
|
1022
1089
|
}), [...new Set(t)]) : [];
|
|
1023
1090
|
}
|
|
1024
|
-
|
|
1025
|
-
return this.
|
|
1091
|
+
me(A, t) {
|
|
1092
|
+
return this.fe.Pe(A, t) > 0;
|
|
1026
1093
|
}
|
|
1027
|
-
|
|
1028
|
-
for (const e of t) if (!this.
|
|
1094
|
+
ve(A, t) {
|
|
1095
|
+
for (const e of t) if (!this.me(A, e)) return !1;
|
|
1029
1096
|
return !0;
|
|
1030
1097
|
}
|
|
1031
|
-
|
|
1032
|
-
return t.filter((e) => this.
|
|
1098
|
+
xe(A, t) {
|
|
1099
|
+
return t.filter((e) => this.me(A, e));
|
|
1033
1100
|
}
|
|
1034
|
-
|
|
1035
|
-
return A.filter((t) => this.
|
|
1101
|
+
ye(A) {
|
|
1102
|
+
return A.filter((t) => this.be(t));
|
|
1036
1103
|
}
|
|
1037
|
-
|
|
1104
|
+
pe(A) {
|
|
1038
1105
|
const t = [];
|
|
1039
1106
|
if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
|
|
1040
1107
|
for (let e = 0; e < A.startCount.length; e++) {
|
|
1041
|
-
const
|
|
1042
|
-
if (
|
|
1043
|
-
for (let i =
|
|
1044
|
-
if (this.
|
|
1045
|
-
const
|
|
1046
|
-
t.push(
|
|
1108
|
+
const s = A.startCount[e], r = A.endCount[e];
|
|
1109
|
+
if (s !== 65535 || r !== 65535) {
|
|
1110
|
+
for (let i = s; i <= r; i++)
|
|
1111
|
+
if (this.Ge(A, i, e) > 0) try {
|
|
1112
|
+
const B = String.fromCodePoint(i);
|
|
1113
|
+
t.push(B);
|
|
1047
1114
|
} catch {
|
|
1048
1115
|
}
|
|
1049
1116
|
}
|
|
1050
1117
|
}
|
|
1051
1118
|
return t;
|
|
1052
1119
|
}
|
|
1053
|
-
|
|
1120
|
+
_e(A) {
|
|
1054
1121
|
const t = [];
|
|
1055
1122
|
if (!A.groups) return t;
|
|
1056
1123
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
1057
|
-
const
|
|
1058
|
-
for (let
|
|
1059
|
-
if (i + (
|
|
1060
|
-
const
|
|
1061
|
-
t.push(
|
|
1124
|
+
const s = A.groups[e], r = A.groups[e + 1], i = A.groups[e + 2];
|
|
1125
|
+
for (let B = s; B <= r; B++)
|
|
1126
|
+
if (i + (B - s) > 0) try {
|
|
1127
|
+
const n = String.fromCodePoint(B);
|
|
1128
|
+
t.push(n);
|
|
1062
1129
|
} catch {
|
|
1063
1130
|
}
|
|
1064
1131
|
}
|
|
1065
1132
|
return t;
|
|
1066
1133
|
}
|
|
1067
|
-
|
|
1134
|
+
Ge(A, t, e) {
|
|
1068
1135
|
if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
|
|
1069
1136
|
{
|
|
1070
|
-
const
|
|
1071
|
-
if (
|
|
1072
|
-
const r = A.glyphIdArray[
|
|
1137
|
+
const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
|
|
1138
|
+
if (s >= 0 && A.glyphIdArray && s < A.glyphIdArray.length) {
|
|
1139
|
+
const r = A.glyphIdArray[s];
|
|
1073
1140
|
if (r !== 0) return r + A.idDelta[e] & 65535;
|
|
1074
1141
|
}
|
|
1075
1142
|
}
|
|
1076
1143
|
return 0;
|
|
1077
1144
|
}
|
|
1078
|
-
|
|
1145
|
+
be(A) {
|
|
1079
1146
|
const t = A.codePointAt(0) || 0;
|
|
1080
1147
|
return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
|
|
1081
1148
|
}
|
|
1082
1149
|
}
|
|
1083
|
-
class
|
|
1150
|
+
class wA {
|
|
1084
1151
|
constructor() {
|
|
1085
|
-
|
|
1086
|
-
const A = new
|
|
1087
|
-
this
|
|
1152
|
+
o(this, "$e");
|
|
1153
|
+
const A = new S();
|
|
1154
|
+
this.$e = new dA(A);
|
|
1088
1155
|
}
|
|
1089
1156
|
extractCharacters(A) {
|
|
1090
|
-
return this.
|
|
1157
|
+
return this.$e.de(A);
|
|
1091
1158
|
}
|
|
1092
1159
|
filterProblematicCharacters(A) {
|
|
1093
|
-
return this.
|
|
1160
|
+
return this.$e.ye(A);
|
|
1094
1161
|
}
|
|
1095
1162
|
characterExists(A, t) {
|
|
1096
|
-
return this.
|
|
1163
|
+
return this.$e.me(A, t);
|
|
1097
1164
|
}
|
|
1098
1165
|
allCharactersExist(A, t) {
|
|
1099
|
-
return this.
|
|
1166
|
+
return this.$e.ve(A, t);
|
|
1100
1167
|
}
|
|
1101
1168
|
}
|
|
1102
|
-
class
|
|
1169
|
+
class mA {
|
|
1103
1170
|
constructor(A) {
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
this.
|
|
1109
|
-
}
|
|
1110
|
-
createTextureAtlas(A, t, e,
|
|
1111
|
-
const r = A.length, i = Math.ceil(Math.sqrt(r)),
|
|
1112
|
-
this.
|
|
1113
|
-
const a = this.
|
|
1114
|
-
return a.
|
|
1115
|
-
}
|
|
1116
|
-
|
|
1117
|
-
this.
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
const i =
|
|
1121
|
-
for (let
|
|
1122
|
-
const
|
|
1171
|
+
o(this, "Me");
|
|
1172
|
+
o(this, "Ye");
|
|
1173
|
+
o(this, "ze");
|
|
1174
|
+
o(this, "Re");
|
|
1175
|
+
this.ze = A, this.Re = new S(), this.Me = document.createElement("canvas"), this.Ye = this.Me.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
1176
|
+
}
|
|
1177
|
+
createTextureAtlas(A, t, e, s) {
|
|
1178
|
+
const r = A.length, i = Math.ceil(Math.sqrt(r)), B = Math.ceil(r / i), n = t.width * i, Q = t.height * B, h = typeof s == "object" ? s : null;
|
|
1179
|
+
this.Te(n, Q), this.Se(A, t, i, e, h);
|
|
1180
|
+
const a = this.ze.Be(n, Q, 1, { filter: "nearest" });
|
|
1181
|
+
return a.F(this.Me), { framebuffer: a, columns: i, rows: B };
|
|
1182
|
+
}
|
|
1183
|
+
Te(A, t) {
|
|
1184
|
+
this.Me.width = A, this.Me.height = t, this.Me.style.width = A + "px", this.Me.style.height = A + "px", this.Ye.imageSmoothingEnabled = !1, this.Me.style.imageRendering = "pixelated", this.Ye.fillStyle = "black", this.Ye.fillRect(0, 0, A, t), this.Ye.textBaseline = "top", this.Ye.textAlign = "left", this.Ye.fillStyle = "white";
|
|
1185
|
+
}
|
|
1186
|
+
Se(A, t, e, s, r) {
|
|
1187
|
+
const i = s / r.head.unitsPerEm;
|
|
1188
|
+
for (let B = 0; B < A.length; B++) {
|
|
1189
|
+
const n = B % e, Q = Math.floor(B / e), h = A[B].character, a = this.Fe(r, h);
|
|
1123
1190
|
if (!a) continue;
|
|
1124
|
-
const
|
|
1125
|
-
this.
|
|
1191
|
+
const g = h.codePointAt(0) || 0, l = this.Re.ce(r, g), c = this.Oe(r, l) * i, C = n * t.width, d = Q * t.height, I = C + 0.5 * t.width, w = d + 0.5 * t.height, p = Math.round(I - 0.5 * t.width), u = Math.round(w - 0.5 * s), M = p + 0.5 * (t.width - c), j = u + r.hhea.ascender * i;
|
|
1192
|
+
this.Ue(a, M, j, i);
|
|
1126
1193
|
}
|
|
1127
1194
|
}
|
|
1128
|
-
|
|
1129
|
-
const e = t.codePointAt(0) || 0,
|
|
1130
|
-
if (
|
|
1131
|
-
if (A.glyf && A.glyf[
|
|
1132
|
-
if (
|
|
1133
|
-
const r =
|
|
1134
|
-
return A.glyf && r && (A.glyf[
|
|
1195
|
+
Fe(A, t) {
|
|
1196
|
+
const e = t.codePointAt(0) || 0, s = this.Re.ce(A, e);
|
|
1197
|
+
if (s === 0) return null;
|
|
1198
|
+
if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
|
|
1199
|
+
if (y && y.T && y.T.glyf) {
|
|
1200
|
+
const r = y.T.glyf.Ee(A, s);
|
|
1201
|
+
return A.glyf && r && (A.glyf[s] = r), r;
|
|
1135
1202
|
}
|
|
1136
1203
|
return null;
|
|
1137
1204
|
}
|
|
1138
|
-
|
|
1205
|
+
Oe(A, t) {
|
|
1139
1206
|
const e = A.hmtx;
|
|
1140
1207
|
return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
1141
1208
|
}
|
|
1142
|
-
|
|
1209
|
+
Ue(A, t, e, s) {
|
|
1143
1210
|
if (!A || !A.xs || A.noc === 0) return;
|
|
1144
|
-
const { xs: r, ys: i, endPts:
|
|
1145
|
-
if (!(r && i &&
|
|
1146
|
-
this.
|
|
1147
|
-
let
|
|
1148
|
-
for (let
|
|
1149
|
-
const a =
|
|
1150
|
-
if (!(a <
|
|
1151
|
-
if (a >=
|
|
1152
|
-
const
|
|
1153
|
-
this.
|
|
1154
|
-
let c =
|
|
1211
|
+
const { xs: r, ys: i, endPts: B, flags: n } = A;
|
|
1212
|
+
if (!(r && i && B && n)) return;
|
|
1213
|
+
this.Ye.beginPath();
|
|
1214
|
+
let Q = 0;
|
|
1215
|
+
for (let h = 0; h < B.length; h++) {
|
|
1216
|
+
const a = B[h];
|
|
1217
|
+
if (!(a < Q)) {
|
|
1218
|
+
if (a >= Q) {
|
|
1219
|
+
const g = t + r[Q] * s, l = e - i[Q] * s;
|
|
1220
|
+
this.Ye.moveTo(g, l);
|
|
1221
|
+
let c = Q + 1;
|
|
1155
1222
|
for (; c <= a; )
|
|
1156
|
-
if (1 &
|
|
1157
|
-
const C = t + r[c] *
|
|
1158
|
-
this.
|
|
1223
|
+
if (1 & n[c]) {
|
|
1224
|
+
const C = t + r[c] * s, d = e - i[c] * s;
|
|
1225
|
+
this.Ye.lineTo(C, d), c++;
|
|
1159
1226
|
} else {
|
|
1160
|
-
const C = t + r[c] *
|
|
1161
|
-
let I = c + 1 > a ?
|
|
1162
|
-
if (1 &
|
|
1163
|
-
const w = t + r[I] *
|
|
1164
|
-
this.
|
|
1227
|
+
const C = t + r[c] * s, d = e - i[c] * s;
|
|
1228
|
+
let I = c + 1 > a ? Q : c + 1;
|
|
1229
|
+
if (1 & n[I]) {
|
|
1230
|
+
const w = t + r[I] * s, p = e - i[I] * s;
|
|
1231
|
+
this.Ye.quadraticCurveTo(C, d, w, p), c = I + 1;
|
|
1165
1232
|
} else {
|
|
1166
|
-
const w = (C + (t + r[I] *
|
|
1167
|
-
this.
|
|
1233
|
+
const w = (C + (t + r[I] * s)) / 2, p = (d + (e - i[I] * s)) / 2;
|
|
1234
|
+
this.Ye.quadraticCurveTo(C, d, w, p), c = I;
|
|
1168
1235
|
}
|
|
1169
1236
|
}
|
|
1170
|
-
this.
|
|
1237
|
+
this.Ye.closePath();
|
|
1171
1238
|
}
|
|
1172
|
-
|
|
1239
|
+
Q = a + 1;
|
|
1173
1240
|
}
|
|
1174
1241
|
}
|
|
1175
|
-
this.
|
|
1242
|
+
this.Ye.fill();
|
|
1176
1243
|
}
|
|
1177
1244
|
}
|
|
1178
|
-
class
|
|
1245
|
+
class pA {
|
|
1179
1246
|
constructor() {
|
|
1180
|
-
|
|
1181
|
-
this.
|
|
1247
|
+
o(this, "fe");
|
|
1248
|
+
this.fe = new S();
|
|
1182
1249
|
}
|
|
1183
1250
|
calculateMaxGlyphDimensions(A, t, e) {
|
|
1184
|
-
let
|
|
1185
|
-
const r = this.
|
|
1186
|
-
for (const
|
|
1187
|
-
const
|
|
1188
|
-
if (
|
|
1189
|
-
const
|
|
1190
|
-
|
|
1251
|
+
let s = 0;
|
|
1252
|
+
const r = this.fe.Ie(e, t), i = r.lineHeight;
|
|
1253
|
+
for (const B of A) {
|
|
1254
|
+
const n = this.fe.Pe(e, B);
|
|
1255
|
+
if (n === 0) continue;
|
|
1256
|
+
const Q = this.fe.ue(e, n) * r.scale;
|
|
1257
|
+
s = Math.max(s, Q);
|
|
1191
1258
|
}
|
|
1192
|
-
return { width: Math.ceil(
|
|
1259
|
+
return { width: Math.ceil(s), height: Math.ceil(i) };
|
|
1193
1260
|
}
|
|
1194
1261
|
getCharacterAdvanceWidth(A, t, e) {
|
|
1195
|
-
const
|
|
1196
|
-
return this.
|
|
1262
|
+
const s = this.fe.Ie(e, t), r = this.fe.Pe(e, A);
|
|
1263
|
+
return this.fe.ue(e, r) * s.scale;
|
|
1197
1264
|
}
|
|
1198
1265
|
getFontMetrics(A, t) {
|
|
1199
|
-
return this.
|
|
1266
|
+
return this.fe.Ie(t, A);
|
|
1200
1267
|
}
|
|
1201
|
-
|
|
1202
|
-
this.
|
|
1268
|
+
we() {
|
|
1269
|
+
this.fe.we();
|
|
1203
1270
|
}
|
|
1204
1271
|
}
|
|
1205
|
-
class
|
|
1272
|
+
class yA {
|
|
1206
1273
|
constructor() {
|
|
1207
|
-
|
|
1208
|
-
this.
|
|
1274
|
+
o(this, "Re");
|
|
1275
|
+
this.Re = new S();
|
|
1209
1276
|
}
|
|
1210
1277
|
createCharacterObjects(A, t) {
|
|
1211
|
-
return A.map((e,
|
|
1212
|
-
const r = e.codePointAt(0) || 0, i = this.
|
|
1213
|
-
let
|
|
1278
|
+
return A.map((e, s) => {
|
|
1279
|
+
const r = e.codePointAt(0) || 0, i = this.Le(s);
|
|
1280
|
+
let B = 0;
|
|
1214
1281
|
if (t.hmtx && t.hmtx.aWidth) {
|
|
1215
|
-
const
|
|
1216
|
-
|
|
1282
|
+
const n = this.Re.ce(t, r);
|
|
1283
|
+
n > 0 && t.hmtx.aWidth[n] !== void 0 && (B = t.hmtx.aWidth[n]);
|
|
1217
1284
|
}
|
|
1218
|
-
return { character: e, unicode: r, color: i, advanceWidth:
|
|
1285
|
+
return { character: e, unicode: r, color: i, advanceWidth: B };
|
|
1219
1286
|
});
|
|
1220
1287
|
}
|
|
1221
|
-
|
|
1288
|
+
Le(A) {
|
|
1222
1289
|
return [A % 256 / 255, Math.floor(A / 256) % 256 / 255, Math.floor(A / 65536) % 256 / 255];
|
|
1223
1290
|
}
|
|
1224
|
-
|
|
1225
|
-
if (!
|
|
1226
|
-
const e = t.find((
|
|
1291
|
+
ke(A, t) {
|
|
1292
|
+
if (!_.P(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
|
|
1293
|
+
const e = t.find((s) => s.character === A);
|
|
1227
1294
|
return e ? e.color : [0, 0, 0];
|
|
1228
1295
|
}
|
|
1229
|
-
|
|
1230
|
-
return
|
|
1296
|
+
He(A, t) {
|
|
1297
|
+
return _.P(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? Array.from(A).map((e) => this.ke(e, t) || [0, 0, 0]) : [[0, 0, 0]];
|
|
1231
1298
|
}
|
|
1232
1299
|
}
|
|
1233
1300
|
class xA {
|
|
1234
1301
|
constructor(A, t = 16) {
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
this.
|
|
1248
|
-
}
|
|
1249
|
-
async
|
|
1302
|
+
o(this, "We");
|
|
1303
|
+
o(this, "Je", []);
|
|
1304
|
+
o(this, "Ve");
|
|
1305
|
+
o(this, "Ke", 16);
|
|
1306
|
+
o(this, "Ze", 0);
|
|
1307
|
+
o(this, "je", 0);
|
|
1308
|
+
o(this, "Xe", { width: 0, height: 0 });
|
|
1309
|
+
o(this, "Ne");
|
|
1310
|
+
o(this, "qe");
|
|
1311
|
+
o(this, "AB");
|
|
1312
|
+
o(this, "tB");
|
|
1313
|
+
o(this, "eB");
|
|
1314
|
+
this.Ke = t, this.qe = new wA(), this.AB = new mA(A), this.tB = new pA(), this.eB = new yA();
|
|
1315
|
+
}
|
|
1316
|
+
async BB(A) {
|
|
1250
1317
|
let t;
|
|
1251
1318
|
if (A) {
|
|
1252
1319
|
const e = await fetch(A);
|
|
1253
|
-
if (!e.ok) throw new
|
|
1320
|
+
if (!e.ok) throw new m(`Failed to load font file: ${e.status} ${e.statusText}`);
|
|
1254
1321
|
t = await e.arrayBuffer();
|
|
1255
1322
|
} else
|
|
1256
1323
|
t = await (await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAABAAAgAQAAIAEAACABAAAAAQAAIAEAAAABAAAAAQAAIAEAAGABAAAAAQAAAAEAAAABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAEABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAACAAQAAIAEAAAABAAAAAQAAAAEAACABAABAAQAAQAEAAEABAABAAQAAIAEAACABAAAAAQAAAAEAAAABAABAAQAAAAEAACABAAAAAQAAAAEAAIABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAYAEAAAABAAAAAQAAQAEAACABAAAAAQAAAAEAAAABAAAgAQAAIAEAACABAAAgAQAAIAEAAAABAABAAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAAAAAIAAAADAAAAFAADAAEAAASaAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAABwAAABIAAAAegAAALwAAADuAAAA9wAAARQAAAExAAABWgAAAW0AAAF7AAABhAAAAY0AAAGvAAAB0gAAAecAAAIOAAACNQAAAk8AAAJsAAACjgAAAqYAAALOAAAC5gAAAvQAAAMHAAADLgAAAzwAAANjAAADhQAAA6UAAAPCAAAD4AAAA/0AAAQaAAAEPAAABEwAAARrAAAEfgAABJEAAASpAAAE0AAABNsAAAT4AAAFFQAABS0AAAVDAAAFZQAABYcAAAWuAAAFvAAABc8AAAXnAAAGBAAABisAAAZDAAAGZQAABnMAAAaVAAAGowAABsUAAAbOAAAG3gAABvYAAAcMAAAHKQAABz8AAAdaAAAHbQAAB4oAAAedAAAHqwAAB8MAAAfgAAAH7gAACAsAAAgjAAAIOwAACFEAAAhsAAAIfAAACJkAAAi2AAAIzgAACOYAAAkDAAAJKgAACUIAAAlfAAAJfAAACYUAAAmiAAAJugAACdcAAAngAAAKBwAACi4AAApgAAAKeQAACokAAAq4AAAKwQAACs8AAArYAAAK8QAACw4AAAshAAALSAAAC1gAAAt1AAALjQAAC5sAAAu0AAALzQAAC9YAAAvhAAAL6gAAC/4AAAwRAAAMJAAADDQAAAxHAAAMUgAADGoAAAyCAAAMlwAADKUAAAy/AAAM0gAADN0AAAz8AAANDwAADSkAAA0yAAANTAAADVUAAA1jAAANfAAADYcAAA2VAAANqQAADcIAAA3mAAAN7wAADg4AAA4XAAAOQQAADloAAA5qAAAOcwAADoYAAA6PAAAOogAADrIAAA7FAAAPCwAADxsAAA8uAAAPRwAAD1AAAA+HAAAPoAAAD6kAAA/CAAAP3wAAD/wAABAZAAAQNgAAEE4AABBfAAAQlQAAEJ4AABCxAAAQugAAEOEAABEnAAARUwAAEWYAABF+AAARlgAAEbgAABJrAAASfgAAEpEAABKpAAASwQAAEswAABLcAAATCAAAExMAABMrAAATQwAAE1sAABNzAAATmgAAE8YAABPeAAAT5wAAE/AAABQSAAAUKgAAFEIAABRaAAAUYwAAFGwAABSOAAAUngAAFLsAABTYAAAU/wAAFSEAABVNAAAVZQAAFX0AABWVAAAVngAAFacAABXTAAAWBAAAFg0AABYvAAAWOgAAFkUAABZxAAAWhAAAFpIAABagAAAWrgAAFrwAABbVAAAW7QAAFxkAABd0AAAXzwAAF/wAABgUAAAYJQAAGC4AABhBAAAYXgAAGHEAABiYAAAYvAAAGOAAABkYAAAZPwAAGWYAABmNAAAZtAAAGdYAABn9AAAaEAAAGi0AAIBgACAAoAEAAADAAcAAAEBAQEBAQEBAYABAAAA/wAAAAEAAAD/AAQAAAD+AAAA/4AAAP8AAAAAAgEAAoADgAQAAAMABwAAAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8ABAAAAP6AAAABgAAA/oAAAAACAIAAgAQAA4AAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAABAAAAAIAAAP+AAAAAgAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAA/4AAAACAAQAAAACAAAADgAAA/4AAAACAAAD/gAAA/4AAAP8AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAABAAAAAIAAAP+A/wAAAAEAAAMAgACABAAEAAAbAB8AIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAABAAAAAIAAAP+AAAD/AAAA/4AAAP8AAAABAAAA/wAAAP+AAAAAgAAAAQD/gAAAAIAAAACAAAAAgAAABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAABQCAAIAEAAOAAAUAHQAjACkALwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAA/4AAAP+AAgABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACA/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
|
|
1257
1324
|
`)).arrayBuffer();
|
|
1258
|
-
await this.
|
|
1325
|
+
await this.sB(t), this.We = y.parse(t)[0], await this.iB();
|
|
1259
1326
|
}
|
|
1260
|
-
|
|
1261
|
-
if (A === void 0) return this.
|
|
1262
|
-
this.
|
|
1263
|
-
const t = this.
|
|
1264
|
-
this.
|
|
1327
|
+
QB(A) {
|
|
1328
|
+
if (A === void 0) return this.Ke;
|
|
1329
|
+
this.Ke = A, this.Xe = this.tB.calculateMaxGlyphDimensions(this.Je.map((e) => e.character), this.Ke, this.We);
|
|
1330
|
+
const t = this.AB.createTextureAtlas(this.Je, this.Xe, this.Ke, this.We);
|
|
1331
|
+
this.Ve = t.framebuffer, this.Ze = t.columns, this.je = t.rows;
|
|
1265
1332
|
}
|
|
1266
|
-
async
|
|
1333
|
+
async rB(A) {
|
|
1267
1334
|
try {
|
|
1268
1335
|
const t = await fetch(A);
|
|
1269
|
-
if (!t.ok) throw new
|
|
1336
|
+
if (!t.ok) throw new m(`Failed to load font file: ${t.status} ${t.statusText}`);
|
|
1270
1337
|
const e = await t.arrayBuffer();
|
|
1271
|
-
await this.
|
|
1272
|
-
const
|
|
1273
|
-
if (!
|
|
1274
|
-
this.
|
|
1338
|
+
await this.sB(e);
|
|
1339
|
+
const s = y.parse(e);
|
|
1340
|
+
if (!s || s.length === 0) throw Error("Failed to parse font file");
|
|
1341
|
+
this.We = s[0], await this.iB();
|
|
1275
1342
|
} catch (t) {
|
|
1276
|
-
throw new
|
|
1343
|
+
throw new m("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
|
|
1277
1344
|
}
|
|
1278
1345
|
}
|
|
1279
|
-
async
|
|
1346
|
+
async sB(A) {
|
|
1280
1347
|
const t = Date.now();
|
|
1281
|
-
this
|
|
1348
|
+
this.Ne = new FontFace("CustomFont_" + t, A), await this.Ne.load(), document.fonts.add(this.Ne);
|
|
1282
1349
|
}
|
|
1283
|
-
async
|
|
1284
|
-
const A = this.
|
|
1285
|
-
this.
|
|
1286
|
-
const e = this.
|
|
1287
|
-
this.
|
|
1350
|
+
async iB() {
|
|
1351
|
+
const A = this.qe.extractCharacters(this.We), t = this.qe.filterProblematicCharacters(A);
|
|
1352
|
+
this.Je = this.eB.createCharacterObjects(t, this.We), this.Xe = this.tB.calculateMaxGlyphDimensions(t, this.Ke, this.We);
|
|
1353
|
+
const e = this.AB.createTextureAtlas(this.Je, this.Xe, this.Ke, this.We);
|
|
1354
|
+
this.Ve = e.framebuffer, this.Ze = e.columns, this.je = e.rows;
|
|
1288
1355
|
}
|
|
1289
|
-
|
|
1290
|
-
return this.
|
|
1356
|
+
ke(A) {
|
|
1357
|
+
return this.eB.ke(A, this.Je);
|
|
1291
1358
|
}
|
|
1292
|
-
|
|
1293
|
-
return this.
|
|
1359
|
+
He(A) {
|
|
1360
|
+
return this.eB.He(A, this.Je);
|
|
1294
1361
|
}
|
|
1295
1362
|
W() {
|
|
1296
|
-
this.
|
|
1363
|
+
this.Ve.W(), document.fonts.delete(this.Ne);
|
|
1297
1364
|
}
|
|
1298
1365
|
get fontFramebuffer() {
|
|
1299
|
-
return this.
|
|
1366
|
+
return this.Ve;
|
|
1300
1367
|
}
|
|
1301
1368
|
get characters() {
|
|
1302
|
-
return this.
|
|
1369
|
+
return this.Je;
|
|
1303
1370
|
}
|
|
1304
1371
|
get textureColumns() {
|
|
1305
|
-
return this.
|
|
1372
|
+
return this.Ze;
|
|
1306
1373
|
}
|
|
1307
1374
|
get textureRows() {
|
|
1308
|
-
return this.
|
|
1375
|
+
return this.je;
|
|
1309
1376
|
}
|
|
1310
1377
|
get maxGlyphDimensions() {
|
|
1311
|
-
return this.
|
|
1378
|
+
return this.Xe;
|
|
1312
1379
|
}
|
|
1313
1380
|
get fontSize() {
|
|
1314
|
-
return this.
|
|
1381
|
+
return this.Ke;
|
|
1315
1382
|
}
|
|
1316
1383
|
get font() {
|
|
1317
|
-
return this.
|
|
1384
|
+
return this.We;
|
|
1318
1385
|
}
|
|
1319
1386
|
}
|
|
1320
|
-
class
|
|
1387
|
+
class vA {
|
|
1321
1388
|
constructor(A, t, e) {
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
this.
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
|
-
this.
|
|
1335
|
-
}
|
|
1336
|
-
|
|
1337
|
-
this.
|
|
1389
|
+
o(this, "EB");
|
|
1390
|
+
o(this, "nB");
|
|
1391
|
+
o(this, "I");
|
|
1392
|
+
o(this, "p");
|
|
1393
|
+
o(this, "oB");
|
|
1394
|
+
o(this, "gB");
|
|
1395
|
+
o(this, "aB");
|
|
1396
|
+
o(this, "hB");
|
|
1397
|
+
o(this, "cB");
|
|
1398
|
+
this.aB = A, this.hB = t, this.cB = e, this.fA();
|
|
1399
|
+
}
|
|
1400
|
+
fA() {
|
|
1401
|
+
this.EB = Math.floor(this.aB.width / this.hB), this.nB = Math.floor(this.aB.height / this.cB), this.I = this.EB * this.hB, this.p = this.nB * this.cB, this.oB = Math.floor((this.aB.width - this.I) / 2), this.gB = Math.floor((this.aB.height - this.p) / 2);
|
|
1402
|
+
}
|
|
1403
|
+
CB(A, t) {
|
|
1404
|
+
this.hB = A, this.cB = t, this.fA();
|
|
1338
1405
|
}
|
|
1339
1406
|
get cellWidth() {
|
|
1340
|
-
return this.
|
|
1407
|
+
return this.hB;
|
|
1341
1408
|
}
|
|
1342
1409
|
get cellHeight() {
|
|
1343
|
-
return this.
|
|
1410
|
+
return this.cB;
|
|
1344
1411
|
}
|
|
1345
1412
|
get cols() {
|
|
1346
|
-
return this.
|
|
1413
|
+
return this.EB;
|
|
1347
1414
|
}
|
|
1348
1415
|
get rows() {
|
|
1349
|
-
return this.
|
|
1416
|
+
return this.nB;
|
|
1350
1417
|
}
|
|
1351
1418
|
get width() {
|
|
1352
1419
|
return this.I;
|
|
1353
1420
|
}
|
|
1354
1421
|
get height() {
|
|
1355
|
-
return this.
|
|
1422
|
+
return this.p;
|
|
1356
1423
|
}
|
|
1357
1424
|
get offsetX() {
|
|
1358
|
-
return this.
|
|
1425
|
+
return this.oB;
|
|
1359
1426
|
}
|
|
1360
1427
|
get offsetY() {
|
|
1361
|
-
return this.
|
|
1428
|
+
return this.gB;
|
|
1362
1429
|
}
|
|
1363
1430
|
}
|
|
1364
|
-
class
|
|
1431
|
+
class bA {
|
|
1365
1432
|
constructor(A = {}) {
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
A.canvas ? (this.
|
|
1433
|
+
o(this, "aB");
|
|
1434
|
+
o(this, "DB");
|
|
1435
|
+
o(this, "lB");
|
|
1436
|
+
A.canvas ? (this.aB = A.canvas, this.lB = !1) : (this.aB = this.PB(A.width, A.height), this.lB = !0), this.aB.style.imageRendering = "pixelated";
|
|
1370
1437
|
}
|
|
1371
|
-
|
|
1438
|
+
PB(A, t) {
|
|
1372
1439
|
const e = document.createElement("canvas");
|
|
1373
1440
|
return e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", e.width = A || 800, e.height = t || 600, document.body.appendChild(e), e;
|
|
1374
1441
|
}
|
|
1375
|
-
|
|
1376
|
-
this.
|
|
1442
|
+
O(A, t) {
|
|
1443
|
+
this.aB.width = A ?? this.aB.width, this.aB.height = t ?? this.aB.height;
|
|
1377
1444
|
}
|
|
1378
|
-
|
|
1379
|
-
const A = this.
|
|
1380
|
-
if (!A) throw new
|
|
1445
|
+
uB() {
|
|
1446
|
+
const A = this.aB.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
|
|
1447
|
+
if (!A) throw new m("`textmode.js` requires WebGL2 support.");
|
|
1381
1448
|
return A;
|
|
1382
1449
|
}
|
|
1383
1450
|
W() {
|
|
1384
|
-
this.
|
|
1385
|
-
const A = this.
|
|
1451
|
+
this.DB && this.DB.disconnect();
|
|
1452
|
+
const A = this.aB.getContext("webgl") || this.aB.getContext("webgl2");
|
|
1386
1453
|
if (A) {
|
|
1387
1454
|
const t = A.getExtension("WEBGL_lose_context");
|
|
1388
1455
|
t && t.loseContext();
|
|
1389
1456
|
}
|
|
1390
|
-
this.
|
|
1457
|
+
this.lB && this.aB.parentNode && this.aB.parentNode.removeChild(this.aB);
|
|
1391
1458
|
}
|
|
1392
1459
|
get canvas() {
|
|
1393
|
-
return this.
|
|
1460
|
+
return this.aB;
|
|
1394
1461
|
}
|
|
1395
1462
|
get width() {
|
|
1396
|
-
return this.
|
|
1463
|
+
return this.aB.width;
|
|
1397
1464
|
}
|
|
1398
1465
|
get height() {
|
|
1399
|
-
return this.
|
|
1466
|
+
return this.aB.height;
|
|
1400
1467
|
}
|
|
1401
1468
|
}
|
|
1402
|
-
class
|
|
1469
|
+
class RA {
|
|
1403
1470
|
constructor(A = 60) {
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
this.
|
|
1471
|
+
o(this, "IB");
|
|
1472
|
+
o(this, "wB");
|
|
1473
|
+
o(this, "fB", null);
|
|
1474
|
+
o(this, "dB", 0);
|
|
1475
|
+
o(this, "pB", !0);
|
|
1476
|
+
o(this, "_B", 0);
|
|
1477
|
+
o(this, "mB", 0);
|
|
1478
|
+
o(this, "vB", []);
|
|
1479
|
+
o(this, "xB", 10);
|
|
1480
|
+
o(this, "yB", 0);
|
|
1481
|
+
this.IB = A, this.wB = 1e3 / A;
|
|
1415
1482
|
}
|
|
1416
1483
|
start(A) {
|
|
1417
|
-
if (!this.
|
|
1418
|
-
this.
|
|
1484
|
+
if (!this.pB) return;
|
|
1485
|
+
this.dB = performance.now();
|
|
1419
1486
|
const t = (e) => {
|
|
1420
|
-
if (!this.
|
|
1421
|
-
const
|
|
1422
|
-
|
|
1487
|
+
if (!this.pB) return void (this.fB = null);
|
|
1488
|
+
const s = e - this.dB;
|
|
1489
|
+
s >= this.wB && (A(), this.dB = e - s % this.wB), this.pB && (this.fB = requestAnimationFrame(t));
|
|
1423
1490
|
};
|
|
1424
|
-
this.
|
|
1491
|
+
this.fB = requestAnimationFrame(t);
|
|
1425
1492
|
}
|
|
1426
1493
|
stop() {
|
|
1427
|
-
this.
|
|
1494
|
+
this.fB && (cancelAnimationFrame(this.fB), this.fB = null);
|
|
1428
1495
|
}
|
|
1429
1496
|
pause() {
|
|
1430
|
-
this.
|
|
1497
|
+
this.pB && (this.pB = !1, this.stop());
|
|
1431
1498
|
}
|
|
1432
1499
|
resume(A) {
|
|
1433
|
-
this.
|
|
1500
|
+
this.pB || (this.pB = !0, this.start(A));
|
|
1434
1501
|
}
|
|
1435
1502
|
frameRate(A, t) {
|
|
1436
|
-
if (A === void 0) return this.
|
|
1437
|
-
this.
|
|
1503
|
+
if (A === void 0) return this._B;
|
|
1504
|
+
this.IB = A, this.wB = 1e3 / A, this.pB && t && (this.stop(), this.start(t));
|
|
1438
1505
|
}
|
|
1439
1506
|
measureFrameRate() {
|
|
1440
1507
|
const A = performance.now();
|
|
1441
|
-
if (this.
|
|
1442
|
-
const t = A - this.
|
|
1443
|
-
this.
|
|
1444
|
-
const e = this.
|
|
1445
|
-
this.
|
|
1508
|
+
if (this.mB > 0) {
|
|
1509
|
+
const t = A - this.mB;
|
|
1510
|
+
this.vB.push(t), this.vB.length > this.xB && this.vB.shift();
|
|
1511
|
+
const e = this.vB.reduce((s, r) => s + r, 0) / this.vB.length;
|
|
1512
|
+
this._B = 1e3 / e;
|
|
1446
1513
|
}
|
|
1447
|
-
this.
|
|
1514
|
+
this.mB = A;
|
|
1448
1515
|
}
|
|
1449
1516
|
get isLooping() {
|
|
1450
|
-
return this.
|
|
1517
|
+
return this.pB;
|
|
1451
1518
|
}
|
|
1452
1519
|
get frameRateLimit() {
|
|
1453
|
-
return this.
|
|
1520
|
+
return this.IB;
|
|
1454
1521
|
}
|
|
1455
1522
|
get currentFrameRate() {
|
|
1456
|
-
return this.
|
|
1523
|
+
return this._B;
|
|
1457
1524
|
}
|
|
1458
1525
|
get frameCount() {
|
|
1459
|
-
return this.
|
|
1526
|
+
return this.yB;
|
|
1460
1527
|
}
|
|
1461
1528
|
set frameCount(A) {
|
|
1462
|
-
this.
|
|
1529
|
+
this.yB = A;
|
|
1463
1530
|
}
|
|
1464
1531
|
incrementFrame() {
|
|
1465
|
-
this.
|
|
1532
|
+
this.yB++;
|
|
1466
1533
|
}
|
|
1467
1534
|
resetFrameCount() {
|
|
1468
|
-
this.
|
|
1535
|
+
this.yB = 0;
|
|
1469
1536
|
}
|
|
1470
1537
|
}
|
|
1471
|
-
const
|
|
1472
|
-
rotate(A) {
|
|
1473
|
-
this.
|
|
1538
|
+
const TA = (E) => class extends E {
|
|
1539
|
+
rotate(A = 0, t = 0, e = 0) {
|
|
1540
|
+
this.ze.state._A(A), this.ze.state.mA(t), this.ze.state.vA(e);
|
|
1541
|
+
}
|
|
1542
|
+
rotateX(A) {
|
|
1543
|
+
this.ze.state._A(A);
|
|
1544
|
+
}
|
|
1545
|
+
rotateY(A) {
|
|
1546
|
+
this.ze.state.mA(A);
|
|
1547
|
+
}
|
|
1548
|
+
rotateZ(A) {
|
|
1549
|
+
this.ze.state.vA(A);
|
|
1474
1550
|
}
|
|
1475
1551
|
push() {
|
|
1476
|
-
this.
|
|
1552
|
+
this.ze.state.IA();
|
|
1477
1553
|
}
|
|
1478
1554
|
pop() {
|
|
1479
|
-
this.
|
|
1555
|
+
this.ze.state.wA();
|
|
1480
1556
|
}
|
|
1481
|
-
rect(A, t, e = 1,
|
|
1482
|
-
this.
|
|
1557
|
+
rect(A, t, e = 1, s = 1) {
|
|
1558
|
+
this.ze.Nt(A, t, e, s);
|
|
1483
1559
|
}
|
|
1484
|
-
line(A, t, e,
|
|
1485
|
-
this.
|
|
1560
|
+
line(A, t, e, s) {
|
|
1561
|
+
this.ze.qt(A, t, e, s);
|
|
1486
1562
|
}
|
|
1487
1563
|
lineWeight(A) {
|
|
1488
|
-
this.
|
|
1564
|
+
this.ze.state.pA(A);
|
|
1489
1565
|
}
|
|
1490
|
-
background(A, t = A, e = A,
|
|
1491
|
-
this.
|
|
1566
|
+
background(A, t = A, e = A, s = 255) {
|
|
1567
|
+
this.ze.ie(A, t, e, s);
|
|
1492
1568
|
}
|
|
1493
1569
|
char(A) {
|
|
1494
|
-
this.
|
|
1570
|
+
this.ze.state.xA(this.We.ke(A));
|
|
1495
1571
|
}
|
|
1496
|
-
charColor(A, t, e
|
|
1497
|
-
this.
|
|
1572
|
+
charColor(A, t, e) {
|
|
1573
|
+
this.ze.state.yA(A, t, e);
|
|
1498
1574
|
}
|
|
1499
|
-
cellColor(A, t, e
|
|
1500
|
-
this.
|
|
1575
|
+
cellColor(A, t, e) {
|
|
1576
|
+
this.ze.state.bA(A, t, e);
|
|
1501
1577
|
}
|
|
1502
1578
|
flipHorizontally(A) {
|
|
1503
|
-
this.
|
|
1579
|
+
this.ze.state.GA(A);
|
|
1504
1580
|
}
|
|
1505
1581
|
flipVertically(A) {
|
|
1506
|
-
this.
|
|
1582
|
+
this.ze.state.$A(A);
|
|
1507
1583
|
}
|
|
1508
1584
|
charRotation(A) {
|
|
1509
|
-
this.
|
|
1585
|
+
this.ze.state.YA(A);
|
|
1510
1586
|
}
|
|
1511
1587
|
invert(A) {
|
|
1512
|
-
this.
|
|
1588
|
+
this.ze.state.MA(A);
|
|
1513
1589
|
}
|
|
1514
1590
|
clear() {
|
|
1515
|
-
this.
|
|
1591
|
+
this.ze.ie(0, 0, 0, 0);
|
|
1592
|
+
}
|
|
1593
|
+
ellipse(A, t, e, s) {
|
|
1594
|
+
this.ze.Ae(A, t, e / 2, s / 2);
|
|
1516
1595
|
}
|
|
1517
|
-
|
|
1518
|
-
this.
|
|
1596
|
+
triangle(A, t, e, s, r, i) {
|
|
1597
|
+
this.ze.te(A, t, e, s, r, i);
|
|
1519
1598
|
}
|
|
1520
|
-
|
|
1521
|
-
this.
|
|
1599
|
+
bezierCurve(A, t, e, s, r, i, B, n) {
|
|
1600
|
+
this.ze.ee(A, t, e, s, r, i, B, n);
|
|
1522
1601
|
}
|
|
1523
|
-
|
|
1524
|
-
this.
|
|
1602
|
+
arc(A, t, e, s, r, i) {
|
|
1603
|
+
this.ze.se(A, t, e, s, r, i);
|
|
1525
1604
|
}
|
|
1526
|
-
|
|
1527
|
-
this.
|
|
1605
|
+
shader(A) {
|
|
1606
|
+
this.ze.Vt(A);
|
|
1607
|
+
}
|
|
1608
|
+
setUniform(A, t) {
|
|
1609
|
+
this.ze.Kt(A, t);
|
|
1610
|
+
}
|
|
1611
|
+
setUniforms(A) {
|
|
1612
|
+
this.ze.Zt(A);
|
|
1613
|
+
}
|
|
1614
|
+
createFilterShader(A) {
|
|
1615
|
+
return this.ze.jt(A);
|
|
1528
1616
|
}
|
|
1529
1617
|
};
|
|
1530
|
-
class
|
|
1531
|
-
|
|
1532
|
-
const t = A.
|
|
1533
|
-
return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels:
|
|
1618
|
+
class L {
|
|
1619
|
+
bB(A) {
|
|
1620
|
+
const t = A.U(0), e = A.U(1), s = A.U(2), r = A.U(3);
|
|
1621
|
+
return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels: s, transformPixels: A.U(4), rotationPixels: r };
|
|
1534
1622
|
}
|
|
1535
|
-
|
|
1623
|
+
GB(A, t) {
|
|
1536
1624
|
return A[t] + (A[t + 1] << 8);
|
|
1537
1625
|
}
|
|
1538
|
-
|
|
1626
|
+
$B(A, t) {
|
|
1539
1627
|
return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
|
|
1540
1628
|
}
|
|
1541
1629
|
}
|
|
1542
|
-
class
|
|
1543
|
-
|
|
1630
|
+
class W {
|
|
1631
|
+
MB(A, t) {
|
|
1544
1632
|
return new Blob([A], { type: t });
|
|
1545
1633
|
}
|
|
1546
|
-
|
|
1634
|
+
YB(A, t, e) {
|
|
1547
1635
|
try {
|
|
1548
|
-
const
|
|
1636
|
+
const s = this.MB(A, e), r = URL.createObjectURL(s), i = document.createElement("a");
|
|
1549
1637
|
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);
|
|
1550
|
-
} catch (
|
|
1551
|
-
throw console.error("Failed to download file:",
|
|
1638
|
+
} catch (s) {
|
|
1639
|
+
throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
|
|
1552
1640
|
}
|
|
1553
1641
|
}
|
|
1554
|
-
|
|
1642
|
+
zB() {
|
|
1555
1643
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1556
1644
|
}
|
|
1557
|
-
|
|
1645
|
+
RB() {
|
|
1558
1646
|
const A = /* @__PURE__ */ new Date();
|
|
1559
1647
|
return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1560
1648
|
}
|
|
1561
|
-
|
|
1649
|
+
TB(A) {
|
|
1562
1650
|
return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1563
1651
|
}
|
|
1564
|
-
|
|
1565
|
-
return "
|
|
1652
|
+
SB() {
|
|
1653
|
+
return "textmode-export-" + this.zB();
|
|
1566
1654
|
}
|
|
1567
1655
|
}
|
|
1568
|
-
class
|
|
1569
|
-
|
|
1570
|
-
const
|
|
1571
|
-
return { isInverted:
|
|
1656
|
+
class MA extends L {
|
|
1657
|
+
FB(A, t, e) {
|
|
1658
|
+
const s = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, B = t[e], n = t[e + 1];
|
|
1659
|
+
return { isInverted: s, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (B + n / 255) / 255 * 100) / 100 };
|
|
1572
1660
|
}
|
|
1573
|
-
|
|
1661
|
+
OB(A, t, e) {
|
|
1574
1662
|
return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
|
|
1575
1663
|
}
|
|
1576
|
-
|
|
1664
|
+
UB(A, t) {
|
|
1577
1665
|
const e = [];
|
|
1578
|
-
let
|
|
1666
|
+
let s = 0;
|
|
1579
1667
|
for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
|
|
1580
|
-
const
|
|
1581
|
-
let
|
|
1582
|
-
const a = this.
|
|
1668
|
+
const B = 4 * s, n = this.GB(A.characterPixels, B);
|
|
1669
|
+
let Q = this.$B(A.primaryColorPixels, B), h = this.$B(A.secondaryColorPixels, B);
|
|
1670
|
+
const a = this.FB(A.transformPixels, A.rotationPixels, B);
|
|
1583
1671
|
if (a.isInverted) {
|
|
1584
|
-
const l =
|
|
1585
|
-
|
|
1672
|
+
const l = Q;
|
|
1673
|
+
Q = h, h = l;
|
|
1586
1674
|
}
|
|
1587
|
-
const
|
|
1588
|
-
e.push({ charIndex:
|
|
1675
|
+
const g = this.OB(i, r, t);
|
|
1676
|
+
e.push({ charIndex: n, primaryColor: Q, secondaryColor: h, transform: a, position: g }), s++;
|
|
1589
1677
|
}
|
|
1590
1678
|
return e;
|
|
1591
1679
|
}
|
|
1592
1680
|
}
|
|
1593
1681
|
class _A {
|
|
1594
|
-
|
|
1682
|
+
LB(A, t) {
|
|
1595
1683
|
const e = A.cmap;
|
|
1596
|
-
for (const
|
|
1597
|
-
const r =
|
|
1684
|
+
for (const s of e.tables) if (s.format === 4) {
|
|
1685
|
+
const r = s;
|
|
1598
1686
|
for (let i = 0; i < r.startCount.length; i++) if (t >= r.startCount[i] && t <= r.endCount[i]) {
|
|
1599
1687
|
if (r.idRangeOffset[i] === 0) return t + r.idDelta[i] & 65535;
|
|
1600
1688
|
{
|
|
1601
|
-
const
|
|
1602
|
-
if (
|
|
1603
|
-
const
|
|
1604
|
-
if (
|
|
1689
|
+
const B = r.idRangeOffset[i] / 2 + (t - r.startCount[i]) - (r.startCount.length - i);
|
|
1690
|
+
if (B >= 0 && B < r.glyphIdArray.length) {
|
|
1691
|
+
const n = r.glyphIdArray[B];
|
|
1692
|
+
if (n !== 0) return n + r.idDelta[i] & 65535;
|
|
1605
1693
|
}
|
|
1606
1694
|
}
|
|
1607
1695
|
}
|
|
1608
|
-
} else if (
|
|
1609
|
-
const r =
|
|
1696
|
+
} else if (s.format === 12) {
|
|
1697
|
+
const r = s;
|
|
1610
1698
|
for (let i = 0; i < r.groups.length; i += 3) {
|
|
1611
|
-
const
|
|
1612
|
-
if (t >=
|
|
1699
|
+
const B = r.groups[i], n = r.groups[i + 1], Q = r.groups[i + 2];
|
|
1700
|
+
if (t >= B && t <= n) return Q + (t - B);
|
|
1613
1701
|
}
|
|
1614
1702
|
}
|
|
1615
1703
|
return 0;
|
|
1616
1704
|
}
|
|
1617
|
-
|
|
1705
|
+
kB(A, t, e, s, r) {
|
|
1618
1706
|
const i = r / A.head.unitsPerEm;
|
|
1619
|
-
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1:
|
|
1707
|
+
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.HB(t, e, s, i) };
|
|
1620
1708
|
}
|
|
1621
|
-
|
|
1709
|
+
HB(A, t, e, s) {
|
|
1622
1710
|
if (!A || !A.xs) return "";
|
|
1623
|
-
const { xs: r, ys: i, endPts:
|
|
1624
|
-
if (!(r && i &&
|
|
1625
|
-
let
|
|
1626
|
-
for (let a = 0; a <
|
|
1627
|
-
const
|
|
1628
|
-
if (!(
|
|
1629
|
-
if (
|
|
1630
|
-
const l = t + r[
|
|
1631
|
-
|
|
1632
|
-
let C =
|
|
1633
|
-
for (; C <=
|
|
1634
|
-
if (1 &
|
|
1635
|
-
const d = t + r[C] *
|
|
1636
|
-
|
|
1711
|
+
const { xs: r, ys: i, endPts: B, flags: n } = A;
|
|
1712
|
+
if (!(r && i && B && n)) return "";
|
|
1713
|
+
let Q = "", h = 0;
|
|
1714
|
+
for (let a = 0; a < B.length; a++) {
|
|
1715
|
+
const g = B[a];
|
|
1716
|
+
if (!(g < h)) {
|
|
1717
|
+
if (g >= h) {
|
|
1718
|
+
const l = t + r[h] * s, c = e - i[h] * s;
|
|
1719
|
+
Q += `M${l.toFixed(2)},${c.toFixed(2)}`;
|
|
1720
|
+
let C = h + 1;
|
|
1721
|
+
for (; C <= g; )
|
|
1722
|
+
if (1 & n[C]) {
|
|
1723
|
+
const d = t + r[C] * s, I = e - i[C] * s;
|
|
1724
|
+
Q += `L${d.toFixed(2)},${I.toFixed(2)}`, C++;
|
|
1637
1725
|
} else {
|
|
1638
|
-
const d = t + r[C] *
|
|
1639
|
-
let w = C + 1 >
|
|
1640
|
-
if (1 &
|
|
1641
|
-
const
|
|
1642
|
-
|
|
1726
|
+
const d = t + r[C] * s, I = e - i[C] * s;
|
|
1727
|
+
let w = C + 1 > g ? h : C + 1;
|
|
1728
|
+
if (1 & n[w]) {
|
|
1729
|
+
const p = t + r[w] * s, u = e - i[w] * s;
|
|
1730
|
+
Q += `Q${d.toFixed(2)},${I.toFixed(2)} ${p.toFixed(2)},${u.toFixed(2)}`, C = w + 1;
|
|
1643
1731
|
} else {
|
|
1644
|
-
const
|
|
1645
|
-
|
|
1732
|
+
const p = (d + (t + r[w] * s)) / 2, u = (I + (e - i[w] * s)) / 2;
|
|
1733
|
+
Q += `Q${d.toFixed(2)},${I.toFixed(2)} ${p.toFixed(2)},${u.toFixed(2)}`, C = w;
|
|
1646
1734
|
}
|
|
1647
1735
|
}
|
|
1648
|
-
|
|
1736
|
+
Q += "Z";
|
|
1649
1737
|
}
|
|
1650
|
-
|
|
1738
|
+
h = g + 1;
|
|
1651
1739
|
}
|
|
1652
1740
|
}
|
|
1653
|
-
return
|
|
1741
|
+
return Q;
|
|
1654
1742
|
}
|
|
1655
|
-
|
|
1656
|
-
const i = A.codePointAt(0) || 0,
|
|
1657
|
-
let
|
|
1658
|
-
return t.glyf && t.glyf[
|
|
1743
|
+
WB(A, t, e, s, r) {
|
|
1744
|
+
const i = A.codePointAt(0) || 0, B = this.LB(t, i);
|
|
1745
|
+
let n = null;
|
|
1746
|
+
return t.glyf && t.glyf[B] !== null ? n = t.glyf[B] : (n = y.T.glyf.Ee(t, B), t.glyf[B] = n), this.kB(t, n, e, s, r);
|
|
1659
1747
|
}
|
|
1660
|
-
|
|
1661
|
-
const
|
|
1662
|
-
return this.
|
|
1748
|
+
JB(A, t, e, s, r, i, B, n) {
|
|
1749
|
+
const Q = e + (r - n * (B / t.head.unitsPerEm)) / 2, h = s + (i + 0.7 * B) / 2;
|
|
1750
|
+
return this.WB(A, t, Q, h, B).toSVG() || null;
|
|
1663
1751
|
}
|
|
1664
1752
|
}
|
|
1665
1753
|
class GA {
|
|
1666
1754
|
constructor() {
|
|
1667
|
-
|
|
1668
|
-
this.
|
|
1755
|
+
o(this, "VB");
|
|
1756
|
+
this.VB = new _A();
|
|
1669
1757
|
}
|
|
1670
|
-
|
|
1758
|
+
KB(A) {
|
|
1671
1759
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
1672
1760
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
1673
1761
|
<svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
|
|
@@ -1675,173 +1763,173 @@ class GA {
|
|
|
1675
1763
|
<title>textmode art generated via textmode.js</title>
|
|
1676
1764
|
<desc>textmode art visualization generated by textmode.js library</desc>`;
|
|
1677
1765
|
}
|
|
1678
|
-
|
|
1766
|
+
ZB() {
|
|
1679
1767
|
return `
|
|
1680
1768
|
</g>
|
|
1681
1769
|
</svg>`;
|
|
1682
1770
|
}
|
|
1683
|
-
|
|
1771
|
+
jB(A, t) {
|
|
1684
1772
|
if (!t.includeBackgroundRectangles) return "";
|
|
1685
|
-
const e = t.backgroundColor,
|
|
1773
|
+
const e = t.backgroundColor, s = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
|
|
1686
1774
|
return `
|
|
1687
|
-
<rect width="${A.width}" height="${A.height}" fill="${
|
|
1775
|
+
<rect width="${A.width}" height="${A.height}" fill="${s}" />`;
|
|
1688
1776
|
}
|
|
1689
|
-
|
|
1777
|
+
XB(A) {
|
|
1690
1778
|
return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
|
|
1691
1779
|
}
|
|
1692
|
-
|
|
1693
|
-
const { transform: e, position:
|
|
1780
|
+
NB(A, t) {
|
|
1781
|
+
const { transform: e, position: s } = A, r = s.cellX + t.cellWidth / 2, i = s.cellY + t.cellHeight / 2, B = [];
|
|
1694
1782
|
if (e.flipHorizontal || e.flipVertical) {
|
|
1695
|
-
const
|
|
1696
|
-
|
|
1783
|
+
const n = e.flipHorizontal ? -1 : 1, Q = e.flipVertical ? -1 : 1;
|
|
1784
|
+
B.push(`translate(${r} ${i})`), B.push(`scale(${n} ${Q})`), B.push(`translate(${-r} ${-i})`);
|
|
1697
1785
|
}
|
|
1698
|
-
return e.rotation &&
|
|
1786
|
+
return e.rotation && B.push(`rotate(${e.rotation} ${r} ${i})`), B.length ? ` transform="${B.join(" ")}"` : "";
|
|
1699
1787
|
}
|
|
1700
|
-
|
|
1788
|
+
qB(A, t, e) {
|
|
1701
1789
|
if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
|
|
1702
|
-
const { position:
|
|
1790
|
+
const { position: s } = A, r = this.XB(A.secondaryColor);
|
|
1703
1791
|
return e.drawMode === "stroke" ? `
|
|
1704
|
-
<rect x="${
|
|
1705
|
-
<rect x="${
|
|
1792
|
+
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
|
|
1793
|
+
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
|
|
1706
1794
|
}
|
|
1707
|
-
|
|
1795
|
+
WB(A, t, e, s) {
|
|
1708
1796
|
const r = e.characters[A.charIndex];
|
|
1709
1797
|
if (!r) return "";
|
|
1710
|
-
const i = this.
|
|
1798
|
+
const i = this.VB.JB(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
|
|
1711
1799
|
if (!i) return "";
|
|
1712
|
-
const
|
|
1713
|
-
return
|
|
1714
|
-
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${
|
|
1715
|
-
<path d="${i}" fill="${
|
|
1800
|
+
const B = this.XB(A.primaryColor);
|
|
1801
|
+
return s.drawMode === "stroke" ? `
|
|
1802
|
+
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${B}" stroke-width="${s.strokeWidth}" fill="none" />` : `
|
|
1803
|
+
<path d="${i}" fill="${B}" />`;
|
|
1716
1804
|
}
|
|
1717
|
-
|
|
1805
|
+
As(A, t, e, s) {
|
|
1718
1806
|
let r = "";
|
|
1719
|
-
r += this.
|
|
1720
|
-
const i = this
|
|
1721
|
-
return
|
|
1722
|
-
<g${i}>`, r +=
|
|
1723
|
-
</g>`) : r +=
|
|
1724
|
-
}
|
|
1725
|
-
|
|
1726
|
-
let r = this.
|
|
1727
|
-
r += this.
|
|
1807
|
+
r += this.qB(A, t, s);
|
|
1808
|
+
const i = this.NB(A, t), B = this.WB(A, t, e, s);
|
|
1809
|
+
return B && (i ? (r += `
|
|
1810
|
+
<g${i}>`, r += B, r += `
|
|
1811
|
+
</g>`) : r += B), r;
|
|
1812
|
+
}
|
|
1813
|
+
ts(A, t, e, s) {
|
|
1814
|
+
let r = this.KB(t);
|
|
1815
|
+
r += this.jB(t, s), r += `
|
|
1728
1816
|
<g id="ascii-cells">`;
|
|
1729
|
-
for (const i of A) r += this.
|
|
1730
|
-
return r += this.
|
|
1817
|
+
for (const i of A) r += this.As(i, t, e, s);
|
|
1818
|
+
return r += this.ZB(), r;
|
|
1731
1819
|
}
|
|
1732
|
-
|
|
1820
|
+
es(A) {
|
|
1733
1821
|
return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
|
|
1734
1822
|
`).replace(/[ \t]+$/gm, "");
|
|
1735
1823
|
}
|
|
1736
1824
|
}
|
|
1737
|
-
class
|
|
1738
|
-
|
|
1739
|
-
return this.
|
|
1825
|
+
class YA extends W {
|
|
1826
|
+
Bs(A) {
|
|
1827
|
+
return this.MB(A, "image/svg+xml;charset=utf-8");
|
|
1740
1828
|
}
|
|
1741
|
-
|
|
1742
|
-
this.
|
|
1829
|
+
ss(A, t) {
|
|
1830
|
+
this.YB(A, this.TB(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1743
1831
|
}
|
|
1744
|
-
|
|
1745
|
-
this.
|
|
1832
|
+
Qs(A, t) {
|
|
1833
|
+
this.ss(A, t || this.SB());
|
|
1746
1834
|
}
|
|
1747
1835
|
}
|
|
1748
|
-
class
|
|
1836
|
+
class H {
|
|
1749
1837
|
constructor() {
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
this.
|
|
1838
|
+
o(this, "rs");
|
|
1839
|
+
o(this, "Es");
|
|
1840
|
+
o(this, "ns");
|
|
1841
|
+
this.rs = new MA(), this.Es = new GA(), this.ns = new YA();
|
|
1754
1842
|
}
|
|
1755
|
-
|
|
1756
|
-
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.
|
|
1843
|
+
gs(A) {
|
|
1844
|
+
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.ns.SB() };
|
|
1757
1845
|
}
|
|
1758
|
-
|
|
1759
|
-
const e = this.
|
|
1760
|
-
return this.
|
|
1846
|
+
hs(A, t = {}) {
|
|
1847
|
+
const e = this.rs.UB(this.rs.bB(A.pipeline), A.grid), s = this.Es.ts(e, A.grid, A.font, this.gs(t));
|
|
1848
|
+
return this.Es.es(s);
|
|
1761
1849
|
}
|
|
1762
|
-
|
|
1763
|
-
this.
|
|
1850
|
+
Qs(A, t = {}) {
|
|
1851
|
+
this.ns.Qs(this.hs(A, t), t.filename);
|
|
1764
1852
|
}
|
|
1765
1853
|
}
|
|
1766
|
-
class
|
|
1767
|
-
|
|
1768
|
-
var
|
|
1854
|
+
class SA extends L {
|
|
1855
|
+
cs(A, t, e, s = " ") {
|
|
1856
|
+
var B;
|
|
1769
1857
|
const r = [];
|
|
1770
1858
|
let i = 0;
|
|
1771
|
-
for (let
|
|
1772
|
-
const
|
|
1773
|
-
for (let
|
|
1774
|
-
const a = 4 * i,
|
|
1775
|
-
|
|
1859
|
+
for (let n = 0; n < t.rows; n++) {
|
|
1860
|
+
const Q = [];
|
|
1861
|
+
for (let h = 0; h < t.cols; h++) {
|
|
1862
|
+
const a = 4 * i, g = this.GB(A.characterPixels, a), l = ((B = e.characters[g]) == null ? void 0 : B.character) || s;
|
|
1863
|
+
Q.push(l), i++;
|
|
1776
1864
|
}
|
|
1777
|
-
r.push(
|
|
1865
|
+
r.push(Q);
|
|
1778
1866
|
}
|
|
1779
1867
|
return r;
|
|
1780
1868
|
}
|
|
1781
1869
|
}
|
|
1782
|
-
class
|
|
1783
|
-
|
|
1870
|
+
class FA {
|
|
1871
|
+
Cs(A, t) {
|
|
1784
1872
|
const e = [];
|
|
1785
1873
|
for (const r of A) {
|
|
1786
1874
|
let i = r.join("");
|
|
1787
1875
|
t.preserveTrailingSpaces || (i = i.replace(/\s+$/, "")), e.push(i);
|
|
1788
1876
|
}
|
|
1789
|
-
const
|
|
1877
|
+
const s = t.lineEnding === "crlf" ? `\r
|
|
1790
1878
|
` : `
|
|
1791
1879
|
`;
|
|
1792
|
-
return e.join(
|
|
1880
|
+
return e.join(s);
|
|
1793
1881
|
}
|
|
1794
1882
|
}
|
|
1795
|
-
class
|
|
1796
|
-
|
|
1797
|
-
const e = this.
|
|
1798
|
-
this.
|
|
1883
|
+
class zA extends W {
|
|
1884
|
+
Ds(A, t) {
|
|
1885
|
+
const e = this.ls(t);
|
|
1886
|
+
this.YB(A, e, "text/plain;charset=utf-8");
|
|
1799
1887
|
}
|
|
1800
|
-
|
|
1801
|
-
let t = this.
|
|
1802
|
-
return t === ".txt" || t.length <= 4 ? this.
|
|
1888
|
+
ls(A) {
|
|
1889
|
+
let t = this.TB(A);
|
|
1890
|
+
return t === ".txt" || t.length <= 4 ? this.SB() : t;
|
|
1803
1891
|
}
|
|
1804
1892
|
}
|
|
1805
|
-
class
|
|
1893
|
+
class J {
|
|
1806
1894
|
constructor() {
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
this.
|
|
1895
|
+
o(this, "rs");
|
|
1896
|
+
o(this, "Es");
|
|
1897
|
+
o(this, "ns");
|
|
1898
|
+
this.rs = new SA(), this.Es = new FA(), this.ns = new zA();
|
|
1811
1899
|
}
|
|
1812
|
-
|
|
1813
|
-
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.
|
|
1900
|
+
gs(A) {
|
|
1901
|
+
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.ns.SB() };
|
|
1814
1902
|
}
|
|
1815
|
-
|
|
1816
|
-
const e = this.
|
|
1817
|
-
return this.
|
|
1903
|
+
Ps(A, t = {}) {
|
|
1904
|
+
const e = this.gs(t), s = this.rs.cs(this.rs.bB(A.pipeline), A.grid, A.font, e.emptyCharacter);
|
|
1905
|
+
return this.Es.Cs(s, e);
|
|
1818
1906
|
}
|
|
1819
|
-
|
|
1820
|
-
this.
|
|
1907
|
+
Ds(A, t = {}) {
|
|
1908
|
+
this.ns.Ds(this.Ps(A, t), t.filename);
|
|
1821
1909
|
}
|
|
1822
1910
|
}
|
|
1823
|
-
class
|
|
1824
|
-
|
|
1825
|
-
const
|
|
1826
|
-
if (t === 1 && e === "transparent") return
|
|
1827
|
-
const r = document.createElement("canvas"), i = r.getContext("2d"),
|
|
1828
|
-
return r.width =
|
|
1911
|
+
class UA extends L {
|
|
1912
|
+
us(A, t = 1, e = "transparent") {
|
|
1913
|
+
const s = A.canvas;
|
|
1914
|
+
if (t === 1 && e === "transparent") return s;
|
|
1915
|
+
const r = document.createElement("canvas"), i = r.getContext("2d"), B = Math.round(s.width * t), n = Math.round(s.height * t);
|
|
1916
|
+
return r.width = B, r.height = n, e !== "transparent" && (i.fillStyle = e, i.fillRect(0, 0, B, n)), i.imageSmoothingEnabled = !1, i.drawImage(s, 0, 0, s.width, s.height, 0, 0, B, n), r;
|
|
1829
1917
|
}
|
|
1830
1918
|
}
|
|
1831
1919
|
class OA {
|
|
1832
|
-
|
|
1833
|
-
const e = this.
|
|
1920
|
+
Is(A, t) {
|
|
1921
|
+
const e = this.ws(t.format);
|
|
1834
1922
|
return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
|
|
1835
1923
|
}
|
|
1836
|
-
async
|
|
1837
|
-
return new Promise((e,
|
|
1838
|
-
const r = this.
|
|
1839
|
-
|
|
1924
|
+
async fs(A, t) {
|
|
1925
|
+
return new Promise((e, s) => {
|
|
1926
|
+
const r = this.ws(t.format), i = (B) => {
|
|
1927
|
+
B ? e(B) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
|
|
1840
1928
|
};
|
|
1841
1929
|
t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
|
|
1842
1930
|
});
|
|
1843
1931
|
}
|
|
1844
|
-
|
|
1932
|
+
ws(A) {
|
|
1845
1933
|
switch (A) {
|
|
1846
1934
|
case "png":
|
|
1847
1935
|
return "image/png";
|
|
@@ -1854,208 +1942,210 @@ class OA {
|
|
|
1854
1942
|
}
|
|
1855
1943
|
}
|
|
1856
1944
|
}
|
|
1857
|
-
const LA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" },
|
|
1858
|
-
class
|
|
1859
|
-
|
|
1860
|
-
this.
|
|
1945
|
+
const LA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, X = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
1946
|
+
class WA extends W {
|
|
1947
|
+
ds(A, t, e) {
|
|
1948
|
+
this.ps(A, this.TB(t) + X[e]);
|
|
1861
1949
|
}
|
|
1862
|
-
|
|
1950
|
+
ps(A, t) {
|
|
1863
1951
|
const e = URL.createObjectURL(A);
|
|
1864
1952
|
try {
|
|
1865
|
-
const
|
|
1866
|
-
|
|
1953
|
+
const s = document.createElement("a");
|
|
1954
|
+
s.href = e, s.download = t, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s);
|
|
1867
1955
|
} finally {
|
|
1868
1956
|
URL.revokeObjectURL(e);
|
|
1869
1957
|
}
|
|
1870
1958
|
}
|
|
1871
|
-
|
|
1872
|
-
return A in LA && A in
|
|
1959
|
+
_s(A) {
|
|
1960
|
+
return A in LA && A in X;
|
|
1873
1961
|
}
|
|
1874
1962
|
}
|
|
1875
|
-
class
|
|
1963
|
+
class $A {
|
|
1876
1964
|
constructor() {
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
this.
|
|
1965
|
+
o(this, "rs");
|
|
1966
|
+
o(this, "Es");
|
|
1967
|
+
o(this, "ns");
|
|
1968
|
+
this.rs = new UA(), this.Es = new OA(), this.ns = new WA();
|
|
1881
1969
|
}
|
|
1882
|
-
|
|
1883
|
-
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.
|
|
1970
|
+
gs(A) {
|
|
1971
|
+
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.ns.SB() };
|
|
1884
1972
|
}
|
|
1885
|
-
|
|
1886
|
-
if (!this.
|
|
1973
|
+
vs(A) {
|
|
1974
|
+
if (!this.ns._s(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
|
|
1887
1975
|
if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
1888
1976
|
if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
1889
1977
|
A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
|
|
1890
1978
|
}
|
|
1891
|
-
async
|
|
1892
|
-
if (t.scale === 1 && t.backgroundColor === "transparent") return await this.
|
|
1893
|
-
const e = this.
|
|
1894
|
-
return await this.
|
|
1979
|
+
async fs(A, t) {
|
|
1980
|
+
if (t.scale === 1 && t.backgroundColor === "transparent") return await this.Es.fs(A.canvas, t);
|
|
1981
|
+
const e = this.rs.us(A, t.scale, t.backgroundColor);
|
|
1982
|
+
return await this.Es.fs(e, t);
|
|
1895
1983
|
}
|
|
1896
|
-
async
|
|
1897
|
-
const e = this.
|
|
1898
|
-
this.
|
|
1899
|
-
const
|
|
1900
|
-
this.
|
|
1984
|
+
async ds(A, t = {}) {
|
|
1985
|
+
const e = this.gs(t);
|
|
1986
|
+
this.vs(e);
|
|
1987
|
+
const s = await this.fs(A, e);
|
|
1988
|
+
this.ns.ds(s, e.filename, e.format);
|
|
1901
1989
|
}
|
|
1902
1990
|
}
|
|
1903
|
-
const
|
|
1904
|
-
|
|
1905
|
-
this.
|
|
1991
|
+
const kA = (E) => class extends E {
|
|
1992
|
+
bs() {
|
|
1993
|
+
this.ze.re(this.Gs);
|
|
1906
1994
|
}
|
|
1907
1995
|
toString(A = {}) {
|
|
1908
|
-
return this.
|
|
1996
|
+
return this.bs(), new J().Ps({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
|
|
1909
1997
|
}
|
|
1910
1998
|
saveStrings(A = {}) {
|
|
1911
|
-
this.
|
|
1999
|
+
this.bs(), new J().Ds({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
|
|
1912
2000
|
}
|
|
1913
2001
|
toSVG(A = {}) {
|
|
1914
|
-
return this.
|
|
2002
|
+
return this.bs(), new H().hs({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
|
|
1915
2003
|
}
|
|
1916
2004
|
saveSVG(A = {}) {
|
|
1917
|
-
this.
|
|
2005
|
+
this.bs(), new H().Qs({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
|
|
1918
2006
|
}
|
|
1919
2007
|
async saveCanvas(A = {}) {
|
|
1920
|
-
await new
|
|
2008
|
+
await new $A().ds(this.aB, A);
|
|
1921
2009
|
}
|
|
1922
|
-
},
|
|
2010
|
+
}, NA = (E) => class extends E {
|
|
1923
2011
|
async loadFont(A) {
|
|
1924
|
-
return this.
|
|
1925
|
-
const t = this.
|
|
1926
|
-
this.
|
|
2012
|
+
return this.We.rB(A).then(() => {
|
|
2013
|
+
const t = this.We.maxGlyphDimensions;
|
|
2014
|
+
this.Ms.CB(t.width, t.height), this.$s.O(this.Ms.cols, this.Ms.rows), this.ze.Qe();
|
|
1927
2015
|
});
|
|
1928
2016
|
}
|
|
1929
2017
|
fontSize(A) {
|
|
1930
|
-
if (!
|
|
1931
|
-
this.
|
|
1932
|
-
const t = this.
|
|
1933
|
-
this.
|
|
2018
|
+
if (!_.P(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.We.fontSize === A) return;
|
|
2019
|
+
this.We.QB(A);
|
|
2020
|
+
const t = this.We.maxGlyphDimensions;
|
|
2021
|
+
this.Ms.CB(t.width, t.height), this.$s.O(this.Ms.cols, this.Ms.rows), this.ze.Qe();
|
|
1934
2022
|
}
|
|
1935
|
-
},
|
|
2023
|
+
}, HA = (E) => class extends E {
|
|
1936
2024
|
get frameCount() {
|
|
1937
|
-
return this.
|
|
2025
|
+
return this.Ys.frameCount;
|
|
1938
2026
|
}
|
|
1939
2027
|
set frameCount(A) {
|
|
1940
|
-
this.
|
|
2028
|
+
this.Ys.frameCount = A;
|
|
1941
2029
|
}
|
|
1942
2030
|
frameRate(A) {
|
|
1943
|
-
return A === void 0 ? this.
|
|
2031
|
+
return A === void 0 ? this.Ys.currentFrameRate : this.Ys.frameRate(A, () => this.zs());
|
|
1944
2032
|
}
|
|
1945
2033
|
noLoop() {
|
|
1946
|
-
this.
|
|
2034
|
+
this.Ys.pause();
|
|
1947
2035
|
}
|
|
1948
2036
|
loop() {
|
|
1949
|
-
this.
|
|
2037
|
+
this.Ys.resume(() => this.zs());
|
|
1950
2038
|
}
|
|
1951
2039
|
redraw(A = 1) {
|
|
1952
|
-
if (
|
|
2040
|
+
if (_.P(typeof A == "number" && A > 0 && Number.isInteger(A), "Redraw count must be a positive integer.", { method: "redraw", providedValue: A })) for (let t = 0; t < A; t++) this.zs();
|
|
1953
2041
|
}
|
|
1954
2042
|
isLooping() {
|
|
1955
|
-
return this.
|
|
2043
|
+
return this.Ys.isLooping;
|
|
1956
2044
|
}
|
|
1957
2045
|
};
|
|
1958
|
-
class
|
|
2046
|
+
class JA {
|
|
1959
2047
|
constructor() {
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
2048
|
+
o(this, "ze");
|
|
2049
|
+
o(this, "We");
|
|
2050
|
+
o(this, "aB");
|
|
2051
|
+
o(this, "Ms");
|
|
2052
|
+
o(this, "Ys");
|
|
2053
|
+
o(this, "Gs");
|
|
2054
|
+
o(this, "$s");
|
|
2055
|
+
o(this, "Rs");
|
|
1968
2056
|
}
|
|
1969
|
-
|
|
2057
|
+
zs() {
|
|
1970
2058
|
}
|
|
1971
2059
|
}
|
|
1972
|
-
class
|
|
1973
|
-
return e.reduce((
|
|
1974
|
-
}(
|
|
2060
|
+
class XA extends function(t, ...e) {
|
|
2061
|
+
return e.reduce((s, r) => r(s), t);
|
|
2062
|
+
}(JA, TA, kA, NA, HA) {
|
|
1975
2063
|
constructor(t = {}) {
|
|
1976
2064
|
super();
|
|
1977
|
-
|
|
1978
|
-
|
|
2065
|
+
o(this, "Ts", !1);
|
|
2066
|
+
o(this, "Ss", () => {
|
|
1979
2067
|
});
|
|
1980
|
-
|
|
2068
|
+
o(this, "Fs", () => {
|
|
1981
2069
|
});
|
|
1982
|
-
|
|
1983
|
-
this.
|
|
1984
|
-
in vec2
|
|
1985
|
-
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.gQ = this.Ce.bt("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "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 vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;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_gridOffsetPixels)/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);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);}");
|
|
2070
|
+
o(this, "Os");
|
|
2071
|
+
this.aB = new bA(t), this.ze = new DA(this.aB.uB()), this.We = new xA(this.ze, t.fontSize ?? 16), this.Ys = new RA(t.frameRate ?? 60), this.Gs = this.ze.Jt(O, `#version 300 es
|
|
2072
|
+
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.Rs = this.ze.Jt("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "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 vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;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_gridOffsetPixels)/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);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);}");
|
|
1986
2073
|
}
|
|
1987
2074
|
static async create(t = {}) {
|
|
1988
2075
|
const e = new this(t);
|
|
1989
|
-
await e.
|
|
1990
|
-
const
|
|
1991
|
-
return e.
|
|
2076
|
+
await e.We.BB(t.fontSource);
|
|
2077
|
+
const s = e.We.maxGlyphDimensions;
|
|
2078
|
+
return e.Ms = new vA(e.aB.canvas, s.width, s.height), e.$s = e.ze.Be(e.Ms.cols, e.Ms.rows, 5), e.Us(), e.Ys.start(() => e.zs()), e;
|
|
1992
2079
|
}
|
|
1993
|
-
|
|
1994
|
-
this.
|
|
1995
|
-
this.
|
|
1996
|
-
}, window.addEventListener("resize", this.
|
|
2080
|
+
Us() {
|
|
2081
|
+
this.Os = () => {
|
|
2082
|
+
this.Fs();
|
|
2083
|
+
}, window.addEventListener("resize", this.Os);
|
|
1997
2084
|
}
|
|
1998
|
-
|
|
1999
|
-
this.
|
|
2085
|
+
zs() {
|
|
2086
|
+
if (this.Ys.measureFrameRate(), this.Ys.incrementFrame(), this.Ts) return;
|
|
2087
|
+
this.$s.k(), this.ze.Wt(this.Gs), this.Ss(), this.ze.re(this.Gs), this.$s.H();
|
|
2088
|
+
const t = this.ze.state.canvasBackgroundColor;
|
|
2089
|
+
this.ze.ot(t[0], t[1], t[2], t[3]), this.ze.Wt(this.Rs), this.Rs.eA({ u_characterTexture: this.We.fontFramebuffer, u_charsetDimensions: [this.We.textureColumns, this.We.textureRows], u_asciiCharacterTexture: this.$s.textures[0], u_primaryColorTexture: this.$s.textures[1], u_secondaryColorTexture: this.$s.textures[2], u_transformTexture: this.$s.textures[4], u_rotationTexture: this.$s.textures[3], u_gridCellDimensions: [this.Ms.cols, this.Ms.rows], u_gridPixelDimensions: [this.Ms.width, this.Ms.height], u_gridOffsetPixels: [this.Ms.offsetX, this.Ms.offsetY], u_aspectRatio: this.Ms.width / this.Ms.height }), this.ze.Xt(this.Ms.offsetX, this.Ms.offsetY, this.Ms.width, this.Ms.height);
|
|
2000
2090
|
}
|
|
2001
2091
|
draw(t) {
|
|
2002
|
-
this.
|
|
2092
|
+
this.Ss = t;
|
|
2003
2093
|
}
|
|
2004
2094
|
windowResized(t) {
|
|
2005
|
-
this.
|
|
2095
|
+
this.Fs = t;
|
|
2006
2096
|
}
|
|
2007
2097
|
resizeCanvas(t, e) {
|
|
2008
|
-
this.
|
|
2098
|
+
this.aB.O(t, e), this.Ms.fA(), this.$s.O(this.Ms.cols, this.Ms.rows), this.ze.Qe(), this.zs();
|
|
2009
2099
|
}
|
|
2010
2100
|
destroy() {
|
|
2011
|
-
this.
|
|
2101
|
+
this.Ts || (this.Ys.stop(), window.removeEventListener("resize", this.Os), this.We.W(), this.ze.W(), this.Ts = !0);
|
|
2012
2102
|
}
|
|
2013
2103
|
get grid() {
|
|
2014
|
-
return this.
|
|
2104
|
+
return this.Ms;
|
|
2015
2105
|
}
|
|
2016
2106
|
get font() {
|
|
2017
|
-
return this.
|
|
2107
|
+
return this.We;
|
|
2018
2108
|
}
|
|
2019
2109
|
get width() {
|
|
2020
|
-
return this.
|
|
2110
|
+
return this.aB.width;
|
|
2021
2111
|
}
|
|
2022
2112
|
get height() {
|
|
2023
|
-
return this.
|
|
2113
|
+
return this.aB.height;
|
|
2024
2114
|
}
|
|
2025
2115
|
get canvas() {
|
|
2026
|
-
return this.
|
|
2116
|
+
return this.aB.canvas;
|
|
2027
2117
|
}
|
|
2028
2118
|
get isDisposed() {
|
|
2029
|
-
return this.
|
|
2119
|
+
return this.Ts;
|
|
2030
2120
|
}
|
|
2031
2121
|
get drawFramebuffer() {
|
|
2032
|
-
return this
|
|
2122
|
+
return this.$s;
|
|
2033
2123
|
}
|
|
2034
2124
|
}
|
|
2035
|
-
class
|
|
2125
|
+
class $ {
|
|
2036
2126
|
constructor() {
|
|
2037
|
-
throw new
|
|
2127
|
+
throw new m("Textmode is a static class and cannot be instantiated.");
|
|
2038
2128
|
}
|
|
2039
2129
|
static async create(A) {
|
|
2040
|
-
return
|
|
2130
|
+
return XA.create(A);
|
|
2041
2131
|
}
|
|
2042
2132
|
static setErrorLevel(A) {
|
|
2043
|
-
|
|
2133
|
+
_.u(A);
|
|
2044
2134
|
}
|
|
2045
2135
|
static get version() {
|
|
2046
|
-
return "0.2.0-beta.
|
|
2136
|
+
return "0.2.0-beta.3";
|
|
2047
2137
|
}
|
|
2048
2138
|
}
|
|
2049
|
-
const
|
|
2139
|
+
const jA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), ZA = $.create, KA = $.setErrorLevel, qA = $.version;
|
|
2050
2140
|
export {
|
|
2051
|
-
|
|
2052
|
-
|
|
2141
|
+
bA as TextmodeCanvas,
|
|
2142
|
+
q as TextmodeErrorLevel,
|
|
2053
2143
|
xA as TextmodeFont,
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2144
|
+
vA as TextmodeGrid,
|
|
2145
|
+
XA as Textmodifier,
|
|
2146
|
+
ZA as create,
|
|
2147
|
+
jA as export,
|
|
2058
2148
|
KA as setErrorLevel,
|
|
2059
|
-
|
|
2060
|
-
|
|
2149
|
+
$ as textmode,
|
|
2150
|
+
qA as version
|
|
2061
2151
|
};
|