@weasel-js/pdf 1.15.0 → 1.15.1
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/index.js +116 -58
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -917,6 +917,7 @@ function toUnicodeCMap(glyphs) {
|
|
|
917
917
|
}
|
|
918
918
|
|
|
919
919
|
// src/textSegment.ts
|
|
920
|
+
var WHITESPACE = /^\s+$/;
|
|
920
921
|
var FILL = 0;
|
|
921
922
|
var STROKE = 1;
|
|
922
923
|
var FILL_STROKE = 2;
|
|
@@ -960,43 +961,52 @@ function textObject(ctx, seg, mode, dx, dy) {
|
|
|
960
961
|
parts = [];
|
|
961
962
|
hex = "";
|
|
962
963
|
};
|
|
964
|
+
const emit = (code, to, y) => {
|
|
965
|
+
const at = num(-y);
|
|
966
|
+
if (at !== rise) {
|
|
967
|
+
flush();
|
|
968
|
+
out.op("Ts", rise = at);
|
|
969
|
+
}
|
|
970
|
+
if (anchor && WHITESPACE.test(seg.font.readsAs(code) ?? "")) {
|
|
971
|
+
flush();
|
|
972
|
+
const step = num(to - line);
|
|
973
|
+
out.op("Td", step, 0);
|
|
974
|
+
pen = line += Number(step);
|
|
975
|
+
anchor = false;
|
|
976
|
+
}
|
|
977
|
+
const adjust = num((pen - to) * 1e3);
|
|
978
|
+
if (adjust !== "0") {
|
|
979
|
+
if (hex) parts.push(`<${hex}>`);
|
|
980
|
+
hex = "";
|
|
981
|
+
parts.push(adjust);
|
|
982
|
+
pen -= Number(adjust) / 1e3;
|
|
983
|
+
}
|
|
984
|
+
hex += code.toString(16).toUpperCase().padStart(4, "0");
|
|
985
|
+
pen += seg.font.widthOf(code) / 1e3;
|
|
986
|
+
anchor ||= seg.font.readsAs(code) === "" && seg.font.widthOf(code) !== 0;
|
|
987
|
+
};
|
|
988
|
+
const span = (text2, glyphs) => {
|
|
989
|
+
flush();
|
|
990
|
+
out.op("BDC", "/Span", `<</ActualText <${text2 ? `FEFF${utf16Hex(text2)}` : ""}>>>`);
|
|
991
|
+
for (const p of glyphs) emit(p.code, p.to, p.y);
|
|
992
|
+
flush();
|
|
993
|
+
out.op("EMC");
|
|
994
|
+
};
|
|
995
|
+
const silent = [];
|
|
963
996
|
for (const { g, glyphs, actual } of seg.glyphs) {
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
if (at !== rise) {
|
|
972
|
-
flush();
|
|
973
|
-
out.op("Ts", rise = at);
|
|
974
|
-
}
|
|
975
|
-
const to = (g.x - first.x) / s + x;
|
|
976
|
-
if (anchor) {
|
|
977
|
-
flush();
|
|
978
|
-
const step = num(to - line);
|
|
979
|
-
out.op("Td", step, 0);
|
|
980
|
-
pen = line += Number(step);
|
|
981
|
-
anchor = false;
|
|
982
|
-
}
|
|
983
|
-
const adjust = num((pen - to) * 1e3);
|
|
984
|
-
if (adjust !== "0") {
|
|
985
|
-
if (hex) parts.push(`<${hex}>`);
|
|
986
|
-
hex = "";
|
|
987
|
-
parts.push(adjust);
|
|
988
|
-
pen -= Number(adjust) / 1e3;
|
|
989
|
-
}
|
|
990
|
-
hex += gid.toString(16).toUpperCase().padStart(4, "0");
|
|
991
|
-
pen += seg.font.widthOf(gid) / 1e3;
|
|
992
|
-
anchor ||= seg.font.readsAs(gid) === void 0 && seg.font.widthOf(gid) !== 0;
|
|
993
|
-
}
|
|
994
|
-
if (span.text !== void 0) {
|
|
995
|
-
flush();
|
|
996
|
-
out.op("EMC");
|
|
997
|
+
const placed = glyphs.map(({ code, x, y }) => ({ code, to: (g.x - first.x) / s + x, y }));
|
|
998
|
+
if (actual === void 0) {
|
|
999
|
+
for (const p of placed) emit(p.code, p.to, p.y);
|
|
1000
|
+
} else if (g.shaped?.rtl) {
|
|
1001
|
+
for (const p of placed) {
|
|
1002
|
+
if (seg.font.readsAs(p.code) === "") silent.push(p);
|
|
1003
|
+
else emit(p.code, p.to, p.y);
|
|
997
1004
|
}
|
|
1005
|
+
} else {
|
|
1006
|
+
for (const { text: text2, glyphs: some } of spansOf(placed, actual)) span(text2, some);
|
|
998
1007
|
}
|
|
999
1008
|
}
|
|
1009
|
+
if (silent.length > 0) span("", silent);
|
|
1000
1010
|
flush();
|
|
1001
1011
|
if (rise !== "0") out.op("Ts", 0);
|
|
1002
1012
|
out.op("ET");
|
|
@@ -1065,7 +1075,6 @@ async function writeSegment(ctx, seg, cmd, dx, dy, state) {
|
|
|
1065
1075
|
out.op("Q");
|
|
1066
1076
|
}
|
|
1067
1077
|
function spansOf(glyphs, actual) {
|
|
1068
|
-
if (actual === void 0) return [{ glyphs }];
|
|
1069
1078
|
const on = glyphs.filter((p) => p.y === 0);
|
|
1070
1079
|
if (on.length === 0 || on.length === glyphs.length) return [{ text: actual, glyphs }];
|
|
1071
1080
|
return [{ text: actual, glyphs: on }, { text: "", glyphs: glyphs.filter((p) => p.y !== 0) }];
|
|
@@ -1081,12 +1090,27 @@ function joins(seg, g, line) {
|
|
|
1081
1090
|
}
|
|
1082
1091
|
function segmentGlyph(font, g) {
|
|
1083
1092
|
if (!g.shaped) {
|
|
1084
|
-
const
|
|
1085
|
-
return
|
|
1093
|
+
const code = font.use(g.cp);
|
|
1094
|
+
return code === null ? null : { g, glyphs: [{ code, x: 0, y: 0 }] };
|
|
1086
1095
|
}
|
|
1087
1096
|
const { glyphs, text: text2 } = g.shaped;
|
|
1088
|
-
|
|
1089
|
-
|
|
1097
|
+
const placed = [];
|
|
1098
|
+
const claim = widest(font, glyphs);
|
|
1099
|
+
for (const [i, { gid, x, y, advance }] of glyphs.entries()) {
|
|
1100
|
+
const reads = i === claim ? text2 : "";
|
|
1101
|
+
const code = font.useGlyph(gid, reads, advance === 0 ? markWidth(reads, x) : void 0);
|
|
1102
|
+
if (code === null) return null;
|
|
1103
|
+
placed.push({ code, x, y });
|
|
1104
|
+
}
|
|
1105
|
+
return placed.length === 1 ? { g, glyphs: placed } : { g, glyphs: placed, actual: text2 };
|
|
1106
|
+
}
|
|
1107
|
+
function markWidth(reads, x) {
|
|
1108
|
+
return reads === "" ? 0 : Math.max(0, Math.round(-x * 1e3));
|
|
1109
|
+
}
|
|
1110
|
+
function widest(font, glyphs) {
|
|
1111
|
+
let best = 0;
|
|
1112
|
+
for (let i = 1; i < glyphs.length; i++) if (font.glyphWidth(glyphs[i].gid) > font.glyphWidth(glyphs[best].gid)) best = i;
|
|
1113
|
+
return best;
|
|
1090
1114
|
}
|
|
1091
1115
|
async function writeText2(ctx, cmd, state) {
|
|
1092
1116
|
const style = resolveTextStyle(cmd.style);
|
|
@@ -1109,7 +1133,7 @@ async function writeText2(ctx, cmd, state) {
|
|
|
1109
1133
|
if (!fillHasInk(run.fill) && !strokeHasInk(run.stroke)) continue;
|
|
1110
1134
|
const space = isSpace(g.cp);
|
|
1111
1135
|
if (!space && BLANK.test(String.fromCodePoint(g.cp))) continue;
|
|
1112
|
-
if (!space && (g.glyph?.color || g.resolved.source !== "outline" && g.glyph === null)) {
|
|
1136
|
+
if (!space && (g.glyph?.color || g.resolved.source !== "outline" && g.glyph === null && !g.shaped)) {
|
|
1113
1137
|
skipGlyph(ctx, g, "has no glyph to draw");
|
|
1114
1138
|
continue;
|
|
1115
1139
|
}
|
|
@@ -1339,6 +1363,9 @@ function writeSfnt(tables) {
|
|
|
1339
1363
|
v.setUint32(headAt + 8, 2981146554 - checksum(out) >>> 0);
|
|
1340
1364
|
return out;
|
|
1341
1365
|
}
|
|
1366
|
+
function glyphCount(sfnt) {
|
|
1367
|
+
return viewOf(readTables(sfnt).get("maxp")).getUint16(4);
|
|
1368
|
+
}
|
|
1342
1369
|
function subsetTrueType(sfnt, used) {
|
|
1343
1370
|
const t = readTables(sfnt);
|
|
1344
1371
|
const numGlyphs = viewOf(t.get("maxp")).getUint16(4);
|
|
@@ -1390,6 +1417,7 @@ function subsetTrueType(sfnt, used) {
|
|
|
1390
1417
|
|
|
1391
1418
|
// src/fonts/embedFont.ts
|
|
1392
1419
|
var encoder = new TextEncoder();
|
|
1420
|
+
var MAX_CODE = 65535;
|
|
1393
1421
|
var NOTHING = "\u2060";
|
|
1394
1422
|
function baseFontName(e, family, weight, style) {
|
|
1395
1423
|
const safe = (s) => s.replace(/[^A-Za-z0-9._-]/g, "");
|
|
@@ -1408,15 +1436,22 @@ var Face = class {
|
|
|
1408
1436
|
this.emb = emb;
|
|
1409
1437
|
this.baseFont = baseFont;
|
|
1410
1438
|
this.subset = subset;
|
|
1439
|
+
this.spare = glyphCount(emb.sfnt);
|
|
1411
1440
|
}
|
|
1412
1441
|
objects;
|
|
1413
1442
|
emb;
|
|
1414
1443
|
baseFont;
|
|
1415
1444
|
subset;
|
|
1416
|
-
/** Every glyph drawn, for
|
|
1445
|
+
/** Every glyph drawn, for the subset. */
|
|
1417
1446
|
used = /* @__PURE__ */ new Set();
|
|
1418
|
-
/**
|
|
1419
|
-
|
|
1447
|
+
/** Code to the glyph it draws, the text it reads back as, and the width it moves the pen, when
|
|
1448
|
+
* not the glyph's own. */
|
|
1449
|
+
codes = /* @__PURE__ */ new Map();
|
|
1450
|
+
/** `gid|width|text` to its code. */
|
|
1451
|
+
codeOf = /* @__PURE__ */ new Map();
|
|
1452
|
+
/** The code the next reading of an already-coded glyph takes: past every glyph id, so a
|
|
1453
|
+
* glyph's first reading can keep its own id as its code. */
|
|
1454
|
+
spare;
|
|
1420
1455
|
fontRef;
|
|
1421
1456
|
written = false;
|
|
1422
1457
|
get ref() {
|
|
@@ -1425,29 +1460,52 @@ var Face = class {
|
|
|
1425
1460
|
}
|
|
1426
1461
|
use(cp) {
|
|
1427
1462
|
const gid = this.emb.glyphIndexOf(cp);
|
|
1428
|
-
return gid
|
|
1429
|
-
}
|
|
1430
|
-
useGlyph(gid, text2) {
|
|
1431
|
-
if (gid === 0) return
|
|
1463
|
+
return gid === null ? null : this.useGlyph(gid, String.fromCodePoint(cp));
|
|
1464
|
+
}
|
|
1465
|
+
useGlyph(gid, text2, width) {
|
|
1466
|
+
if (gid === 0) return null;
|
|
1467
|
+
if (width === this.glyphWidth(gid)) width = void 0;
|
|
1468
|
+
const key = `${gid}|${width ?? ""}|${text2}`;
|
|
1469
|
+
let code = this.codeOf.get(key);
|
|
1470
|
+
if (code === void 0) {
|
|
1471
|
+
code = !this.codes.has(gid) ? gid : this.spare <= MAX_CODE ? this.spare++ : gid;
|
|
1472
|
+
if (!this.codes.has(code)) this.codes.set(code, { gid, text: text2, width });
|
|
1473
|
+
this.codeOf.set(key, code);
|
|
1474
|
+
}
|
|
1432
1475
|
this.used.add(gid);
|
|
1433
|
-
if (text2 !== void 0 && !this.unicode.has(gid)) this.unicode.set(gid, text2);
|
|
1434
1476
|
this.fontRef ??= this.objects.alloc();
|
|
1435
|
-
return
|
|
1477
|
+
return code;
|
|
1436
1478
|
}
|
|
1437
|
-
readsAs(
|
|
1438
|
-
return this.
|
|
1479
|
+
readsAs(code) {
|
|
1480
|
+
return this.codes.get(code)?.text;
|
|
1439
1481
|
}
|
|
1440
|
-
/** What `/ToUnicode` maps each
|
|
1441
|
-
*
|
|
1442
|
-
*
|
|
1482
|
+
/** What `/ToUnicode` maps each code to. One that reads as nothing maps to a word joiner:
|
|
1483
|
+
* invisible, and skipped by readers (pdf.js) that otherwise take an unmapped code for a
|
|
1484
|
+
* code point. */
|
|
1443
1485
|
readings() {
|
|
1444
|
-
const out = new Map(
|
|
1445
|
-
for (const
|
|
1486
|
+
const out = /* @__PURE__ */ new Map();
|
|
1487
|
+
for (const [code, { text: text2 }] of this.codes) out.set(code, text2 || NOTHING);
|
|
1446
1488
|
return out;
|
|
1447
1489
|
}
|
|
1448
|
-
widthOf(
|
|
1490
|
+
widthOf(code) {
|
|
1491
|
+
const coded = this.codes.get(code);
|
|
1492
|
+
return coded?.width ?? this.glyphWidth(coded?.gid ?? code);
|
|
1493
|
+
}
|
|
1494
|
+
glyphWidth(gid) {
|
|
1449
1495
|
return Math.round(this.emb.advanceOfGlyph(gid) * 1e3 / this.emb.unitsPerEm);
|
|
1450
1496
|
}
|
|
1497
|
+
/** `/Identity` while every code is its own glyph id, else a stream mapping each code to its glyph. */
|
|
1498
|
+
cidToGid() {
|
|
1499
|
+
let top = -1;
|
|
1500
|
+
for (const [code, { gid }] of this.codes) if (code !== gid) top = Math.max(top, code);
|
|
1501
|
+
if (top < 0) return name("Identity");
|
|
1502
|
+
const map = new Uint8Array((top + 1) * 2);
|
|
1503
|
+
const view = new DataView(map.buffer);
|
|
1504
|
+
for (const [code, { gid }] of this.codes) if (code <= top) view.setUint16(code * 2, gid);
|
|
1505
|
+
const ref = this.objects.alloc();
|
|
1506
|
+
this.objects.streamDeflated(ref, {}, map);
|
|
1507
|
+
return ref;
|
|
1508
|
+
}
|
|
1451
1509
|
write() {
|
|
1452
1510
|
if (this.written || !this.fontRef) return;
|
|
1453
1511
|
this.written = true;
|
|
@@ -1475,14 +1533,14 @@ var Face = class {
|
|
|
1475
1533
|
FontFile2: file
|
|
1476
1534
|
});
|
|
1477
1535
|
const widths = [];
|
|
1478
|
-
for (const
|
|
1536
|
+
for (const code of [...this.codes.keys()].sort((a, b) => a - b)) widths.push(code, [this.widthOf(code)]);
|
|
1479
1537
|
objects.set(cid, {
|
|
1480
1538
|
Type: name("Font"),
|
|
1481
1539
|
Subtype: name("CIDFontType2"),
|
|
1482
1540
|
BaseFont: name(fontName),
|
|
1483
1541
|
CIDSystemInfo: { Registry: text("Adobe"), Ordering: text("Identity"), Supplement: 0 },
|
|
1484
1542
|
FontDescriptor: descriptor,
|
|
1485
|
-
CIDToGIDMap:
|
|
1543
|
+
CIDToGIDMap: this.cidToGid(),
|
|
1486
1544
|
W: widths
|
|
1487
1545
|
});
|
|
1488
1546
|
objects.set(this.fontRef, {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/fonts/fontSource.ts","../src/latin1.ts","../src/num.ts","../src/content.ts","../src/deflate.ts","../src/color.ts","../src/objects.ts","../src/shading.ts","../src/images.ts","../src/pathOps.ts","../src/resources.ts","../src/groupOps.ts","../src/strokeOps.ts","../src/textOutlines.ts","../src/fonts/toUnicode.ts","../src/textSegment.ts","../src/textOps.ts","../src/drawCommands.ts","../src/fonts/subset.ts","../src/fonts/embedFont.ts","../src/writePdf.ts"],"names":["deflate","mat3","text","JOINS","dashLength","fillHasInk","strokeHasInk","isSolidPaint","writeText","isGradientPaint"],"mappings":";;;;;;;;AAUO,IAAM,kBAAA,GAAoC;AAAA,EAC/C,SAAA,EAAW,aAAA;AAAA,EACX,OAAA,EAAS;AACX;;;ACZO,SAAS,YAAY,CAAA,EAAuB;AACjD,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,EAAG,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,CAAC,CAAC,CAAA;AAClD;;;ACFO,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAC,CAAA;AAGrC,SAAS,IAAI,CAAA,EAAmB;AACrC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,QAAS,IAAI,eAAA,CAAgB,CAAA,oCAAA,EAAuC,CAAC,CAAA,CAAE,CAAA;AAE7F,EAAA,IAAI,IAAA,CAAK,IAAI,CAAC,CAAA,IAAK,MAAM,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,EAAS;AACnD,EAAA,MAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE,CAAA;AAC3C,EAAA,OAAO,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,EAAA,GAAK,GAAA,GAAM,CAAA;AACxC;;;ACNO,IAAM,gBAAN,MAAoB;AAAA,EACR,QAAkB,EAAC;AAAA;AAAA,EAGpC,EAAA,CAAG,aAAqB,QAAA,EAAqC;AAC3D,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAO,OAAO,CAAA,KAAM,QAAA,GAAW,GAAA,CAAI,CAAC,CAAA,GAAI,CAAE,CAAA;AACrE,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,GAAK,QAAQ,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,MAAA;AAAA,EACpB;AAAA;AAAA,EAGA,SAAS,EAAA,EAAkB;AACzB,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAAA,EACtB;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,YAAY,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AAAA,EACjD;AACF,CAAA;;;AC1BA,eAAsB,QAAQ,IAAA,EAAuC;AACnE,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,CAAC,IAAgB,CAAC,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,CAAY,IAAI,iBAAA,CAAkB,SAAS,CAAC,CAAA;AACjG,EAAA,OAAO,IAAI,WAAW,MAAM,IAAI,SAAS,MAAM,CAAA,CAAE,aAAa,CAAA;AAChE;ACGO,SAAS,SAAA,CAAU,MAAiD,CAAA,EAAmC;AAC5G,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA;AACrB,EAAA,OAAO,CAAA,GAAI,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC1D;AAGO,SAAS,aAAA,CAAc,OAAiC,KAAA,EAAuD;AACpH,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,CAAC,GAAG,KAAK,CAAA,GAAI,IAAA;AACxC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,CAAC,GAAG,KAAK,CAAA;AAC5B,EAAA,OAAO,mBAAmB,KAAA,EAAO,KAAA,EAAO,IAAI,KAAA,CAAc,EAAE,CAAC,CAAA;AAC/D;AAGO,SAAS,QAAA,CAAS,OAA2D,KAAA,EAAwB;AAC1G,EAAA,OAAO,SAAA,CAAU,OAAO,KAAA,KAAU,QAAA,GAAW,WAAW,KAAK,CAAA,GAAI,KAAA,EAAO,KAAA,CAAM,WAAW,CAAA;AAC3F;AAGO,SAAS,UAAA,CAAW,OAAmB,KAAA,EAAoE;AAChH,EAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA;AAChD,EAAA,OAAO,EAAE,GAAA,EAAK,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,IAAK,KAAA,CAAM,OAAA,IAAW,CAAA,CAAA,GAAK,MAAM,KAAA,EAAM;AACzE;AAGO,SAAS,UAAA,CAAW,MAAyB,KAAA,EAAqC;AACvF,EAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAa,OAAO,IAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,IAAI,iBAAA,CAAkB,IAAA,CAAK,MAAM,CAAA;AAC7C,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC3C,IAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,SAAA;AAAA,MACnB,CAAC,IAAA,CAAK,CAAC,IAAI,GAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA,GAAI,KAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,GAAI,CAAC,IAAI,GAAG,CAAA;AAAA,MACvE,KAAA,CAAM;AAAA,KACR;AACA,IAAA,GAAA,CAAI,CAAC,IAAI,CAAA,GAAI,GAAA;AACb,IAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA;AACjB,IAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA;AACjB,IAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA;AAAA,EACnB;AACA,EAAA,OAAO,GAAA;AACT;;;AC1CO,IAAM,UAAN,MAAc;AAAA,EACnB,YAAqB,KAAA,EAAe;AAAf,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAgB;AAAA,EAAhB,KAAA;AACvB,CAAA;AACO,IAAM,SAAN,MAAa;AAAA,EAClB,YAAqB,EAAA,EAAY;AAAZ,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AAAA,EAAa;AAAA,EAAb,EAAA;AACvB,CAAA;AACO,IAAM,UAAN,MAAc;AAAA,EACnB,YAAqB,KAAA,EAAe;AAAf,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAgB;AAAA,EAAhB,KAAA;AACvB,CAAA;AACO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAqB,KAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAoB;AAAA,EAApB,KAAA;AACvB,CAAA;AAiBO,SAAS,KAAK,CAAA,EAAoB;AACvC,EAAA,OAAO,IAAI,QAAQ,CAAC,CAAA;AACtB;AAEO,SAAS,KAAK,CAAA,EAAoB;AACvC,EAAA,OAAO,IAAI,QAAQ,CAAC,CAAA;AACtB;AAMA,IAAM,IAAA,GAAO,CAAC,CAAA,KAAc,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAExE,SAAS,UAAU,CAAA,EAAmB;AACpC,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,KAAA,MAAW,KAAK,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG;AAC3C,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,YAAA,CAAa,CAAC,CAAA;AAChC,IAAA,GAAA,IAAO,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,GAAA,IAAO,aAAA,CAAc,QAAA,CAAS,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,GAAK,EAAA;AAAA,EAC3E;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAU,CAAA,EAAmB;AACpC,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,IAAI,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAC,CAAA,CAAA,CAAA;AACrE,EAAA,IAAI,GAAA,GAAM,OAAA;AACV,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAE,MAAA,EAAQ,CAAA,EAAA,SAAY,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,CAAE,SAAS,EAAE,CAAA,CAAE,aAAY,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACpG,EAAA,OAAO,GAAG,GAAG,CAAA,CAAA,CAAA;AACf;AAEA,SAAS,MAAM,CAAA,EAAqB;AAClC,EAAA,IAAI,CAAA,KAAM,MAAM,OAAO,MAAA;AACvB,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,IAAI,CAAC,CAAA;AACvC,EAAA,IAAI,OAAO,CAAA,KAAM,SAAA,EAAW,OAAO,IAAI,MAAA,GAAS,OAAA;AAChD,EAAA,IAAI,CAAA,YAAa,OAAA,EAAS,OAAO,SAAA,CAAU,EAAE,KAAK,CAAA;AAClD,EAAA,IAAI,CAAA,YAAa,MAAA,EAAQ,OAAO,CAAA,EAAG,EAAE,EAAE,CAAA,IAAA,CAAA;AACvC,EAAA,IAAI,CAAA,YAAa,OAAA,EAAS,OAAO,SAAA,CAAU,EAAE,KAAK,CAAA;AAClD,EAAA,IAAI,CAAA,YAAa,QAAA,EAAU,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,KAAA,EAAO,IAAI,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA,CAAA;AACxE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAK,CAAA,CAA0B,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAChF,EAAA,OAAO,UAAU,CAAY,CAAA;AAC/B;AAGO,SAAS,UAAU,CAAA,EAAoB;AAC5C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,CAAC,GAAG,IAAI,CAAA,KAAM,QAAW,KAAA,CAAM,IAAA,CAAK,GAAG,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AACrG,EAAA,OAAO,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,CAAA;AAC7B;AAIO,IAAM,aAAN,MAAiB;AAAA,EACL,SAAqC,EAAC;AAAA,EACtC,UAA8D,EAAC;AAAA,EAEhF,KAAA,GAAgB;AACd,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,MAAS,CAAA;AAC1B,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EACtC;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAuB;AACtC,IAAA,IAAA,CAAK,MAAA,CAAO,IAAI,EAAA,GAAK,CAAC,IAAI,WAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EAC/C;AAAA;AAAA,EAGA,MAAA,CAAO,GAAA,EAAa,IAAA,EAAe,IAAA,EAAwB;AACzD,IAAA,MAAM,IAAA,GAAO,WAAA,CAAO,CAAA,EAAG,SAAA,CAAU,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAC;AAAA;AAAA,CAAY,CAAA;AAC9E,IAAA,MAAM,IAAA,GAAO,YAAO,aAAa,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,GAAS,KAAK,MAAM,CAAA;AAClE,IAAA,GAAA,CAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AACf,IAAA,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AACzB,IAAA,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,MAAA,GAAS,KAAK,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,EAAA,GAAK,CAAC,CAAA,GAAI,GAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,cAAA,CAAe,GAAA,EAAa,IAAA,EAAe,IAAA,EAAwB;AAEjE,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,IAAA,EAAM,MAAM,CAAA;AAAA,EACvC;AAAA;AAAA,EAGA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA;AAAA,EAGA,UAAU,EAAA,EAAkB;AAC1B,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,EAAE,CAAC,CAAA;AACzD,IAAA,KAAA,IAAS,KAAK,EAAA,GAAK,CAAA,EAAG,MAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,EAAA,EAAA,EAAM;AACpD,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,EAAA,GAAK,CAAC,KAAK,CAAC,OAAA,CAAQ,GAAA,CAAI,EAAE,GAAG,IAAA,CAAK,GAAA,CAAI,IAAI,MAAA,CAAO,EAAE,GAAG,IAAI,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,QAAA,EAAmBA,QAAAA,EAAkC;AAChE,IAAA,KAAA,MAAW,EAAE,KAAK,IAAA,EAAM,IAAA,MAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG;AACxD,MAAA,IAAI,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,aAAa,CAAA,EAAE,EAAG,MAAMA,QAAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,WACvF,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,IAAI,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,SAAA,CAAU,MAAc,IAAA,EAA2B;AACjD,IAAA,MAAM,SAAuB,EAAC;AAC9B,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAkB;AAC9B,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACb,MAAA,MAAA,IAAU,CAAA,CAAE,MAAA;AAAA,IACd,CAAA;AACA,IAAA,IAAA,CAAK,UAAA,CAAW,EAAA,CAAG,GAAG,WAAA,CAAO,aAAa,CAAA,EAAG,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,EAAI,CAAC,CAAA;AAC1E,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAA,KAAM;AAC/B,MAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,CAAA,GAAI,CAAC,CAAA,4BAAA,CAA8B,CAAA;AAC7E,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,IAAA,CAAK,WAAA,CAAO,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,CAAU,CAAC,CAAA;AAC/B,MAAA,IAAA,CAAK,IAAI,CAAA;AACT,MAAA,IAAA,CAAK,WAAA,CAAO,YAAY,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAA;AACb,IAAA,IAAI,KAAA,GAAQ,CAAA;AAAA,EAAA,EAAW,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAC;AAAA;AAAA,CAAA;AAC7C,IAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,KAAA,IAAS,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,EAAE,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,CAAA;AAClF,IAAA,IAAA,CAAK,WAAA,CAAO,GAAG,KAAK,CAAA;AAAA,EAAY,OAAO;AAAA;AAAA,EAAgB,IAAI;AAAA;AAAA,CAAW,CAAC,CAAA;AACvE,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,MAAM,CAAA;AACjC,IAAA,IAAI,EAAA,GAAK,CAAA;AACT,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,GAAA,CAAI,GAAA,CAAI,GAAG,EAAE,CAAA;AACb,MAAA,EAAA,IAAM,CAAA,CAAE,MAAA;AAAA,IACV;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;ACrIA,IAAM,aAAA,GAAgB,EAAA;AACtB,IAAM,YAAA,GAAe,GAAA;AAMd,SAAS,YAAA,CAAa,GAAA,EAAc,KAAA,EAAqB,KAAA,EAAkB,IAAA,EAAiC;AACjH,EAAA,IAAI,CAAC,eAAA,CAAgB,KAAK,CAAA,EAAG,OAAO,IAAA;AACpC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,OAAA,IAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS,OAAO,IAAA;AACjC,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAClC,EAAA,IAAI,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,EAAO,GAAG,CAAA;AACtC,EAAA,IAAI,SAAS,UAAA,EAAY,QAAA,GAAW,CAAC,EAAE,EAAA,EAAI,GAAG,EAAA,EAAI,CAAA,EAAG,IAAI,QAAA,CAAS,CAAC,EAAE,EAAA,EAAI,EAAA,EAAI,SAAS,CAAC,CAAA,CAAE,IAAI,CAAA;AAE7F,EAAA,IAAI,KAAA,GAAA,CAAS,KAAA,CAAM,OAAA,IAAW,CAAA,IAAK,KAAA,CAAM,KAAA;AACzC,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,CAAC,CAAA,CAAE,GAAG,CAAC,CAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,CAAC,MAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,KAAM,EAAA,IAAM,CAAA,CAAE,EAAA,CAAG,CAAC,MAAM,EAAE,CAAA;AACtE,EAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,EAAA,IAAI,SAAS,KAAA,IAAS,EAAA;AAAA,OACjB;AACH,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,EAAK,QAAA,EAAU,aAAa,QAAA,EAAU,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAA;AAC5F,IAAA,QAAA,GAAW,IAAI,SAAA,CAAU,QAAA,CAAS,eAAe,GAAA,EAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,MAAM,KAAA,GAAQ,aAAa,GAAA,EAAK,QAAA,EAAU,aAAa,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;AACxG,EAAA,OAAO,EAAE,OAAA,EAAS,GAAA,CAAI,SAAA,CAAU,QAAQ,KAAK,CAAA,EAAG,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,UAAA,CAAW,OAAO,CAAA,GAAI,OAAO,OAAA,EAAQ;AAChH;AAGO,SAAS,YAAA,CAAa,GAAA,EAAc,KAAA,EAAsC,KAAA,EAAiC;AAChH,EAAA,IAAI,KAAA,CAAM,KAAA,KAAU,OAAA,EAAS,OAAO,KAAK,QAAA,EAAS;AAClD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAC5C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,OAAO,KAAA,CAAM,KAAA,KAAU,OAAA,IAAW,GAAA,CAAI,IAAA,GAAO,KAAK,QAAA,CAAS,QAAA,EAAU,GAAA,CAAI,IAAI,CAAA,GAAI,QAAA;AACnF;AAEA,SAAS,WAAW,CAAA,EAAoB;AACtC,EAAA,OAAO,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,IAAK,EAAE,CAAC,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,KAAM,KAAK,CAAA,CAAE,CAAC,MAAM,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA;AACxF;AAGA,SAAS,QAAA,CAAS,MAAY,OAAA,EAAsB;AAClD,EAAA,MAAM,CAAA,GAAI,aAAa,IAAI,CAAA;AAC3B,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,KAAK,KAAA,CAAM,OAAA,EAAS,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IAC5B,IAAA,CAAK,MAAM,OAAA,EAAS,CAAA,CAAE,IAAI,CAAA,CAAE,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,IACtC,IAAA,CAAK,MAAM,OAAA,EAAS,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,GAAI,EAAE,MAAM,CAAA;AAAA,IACvC,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAE,KAAA,EAAO,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,MAAM;AAAA,GACnD;AACA,EAAA,MAAM,KAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA;AAClC,EAAA,MAAM,KAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA;AAClC,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,CAAA,EAAE;AAC9G;AAEA,SAAS,OAAA,CAAQ,OAAiB,KAAA,EAA0B;AAC1D,EAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,KAAA,CAAM,KAAK,CAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,IAAe,KAAA;AACnC,EAAA,IAAI,SAAS,MAAA,KAAW,CAAA,SAAU,CAAC,EAAE,QAAQ,CAAA,EAAG,IAAA,EAAM,QAAA,CAAS,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,KAAK,GAAG,CAAA;AACrF,EAAA,IAAI,UAAU,KAAA,EAAO,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,IAAA,EAAM,QAAA,CAAS,EAAE,IAAA,EAAM,KAAK,GAAE,CAAE,CAAA;AACrG,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,eAAc,EAAG,CAAC,GAAG,CAAA,KAAM;AACrD,IAAA,MAAM,CAAA,GAAI,KAAK,aAAA,GAAgB,CAAA,CAAA;AAC/B,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,QAAA,CAAS,mBAAA,CAAoB,QAAA,EAAU,CAAA,EAAG,KAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACrF,CAAC,CAAA;AACH;AAEA,IAAM,IAAA,GAAO,CAAC,CAAA,EAAS,CAAA,EAAS,MAAoB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,CAAC,CAAA,GAAI,KAAK,CAAC,CAAA;AAGtF,SAAS,aAAa,KAAA,EAA0B;AAC9C,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG,GAAA,CAAI,KAAK,EAAE,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAG,EAAA,EAAI,MAAM,MAAA,EAAQ,EAAA,EAAI,MAAM,IAAA,EAAM,EAAA,EAAI,KAAA,CAAM,IAAA,EAAM,CAAA;AAClH,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACzC,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AACrB,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,CAAA,CAAE,QAAQ,EAAA,EAAI,CAAA,CAAE,MAAA,EAAQ,EAAA,EAAI,CAAA,CAAE,IAAA,EAAM,EAAA,EAAI,CAAA,CAAE,MAAM,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG,GAAA,CAAI,KAAK,EAAE,EAAA,EAAI,IAAA,CAAK,MAAA,EAAQ,EAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAG,EAAA,EAAI,KAAK,IAAA,EAAM,EAAA,EAAI,IAAA,CAAK,IAAA,EAAM,CAAA;AAC7G,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC3B,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC3B,IAAA,IAAI,MAAM,EAAA,EAAI;AACd,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,EAAA,GAAK,CAAA,CAAE,EAAA;AACtB,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAA,CAAK,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAA,CAAK,EAAA,GAAK,CAAA,CAAE,EAAA,IAAM,IAAI,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAA,CAAK,EAAA,GAAK,CAAA,CAAE,EAAA,IAAM,IAAI,CAAA,EAAG,CAAA;AAAA,EACzG;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,GAAI,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA;AAChD,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAA,CAAa,UAAqB,QAAA,EAA0C;AACnF,EAAA,MAAM,SAAS,QAAA,CAAS,GAAA;AAAA,IACtB,CAAC,OAAgB,EAAE,YAAA,EAAc,GAAG,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,QAAA,CAAS,CAAA,CAAE,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAAA,GACnG;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,OAAO,CAAC,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAA;AAAA,IACd,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACb,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAAA,IAC7C,QAAQ,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAC,CAAA,EAAG,CAAC,CAAC;AAAA,GACvC;AACF;AAIA,SAAS,UAAA,CAAW,OAAiB,GAAA,EAAoB;AACvD,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAM,IAAI,CAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACpC,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAA;AAErB,IAAA,MAAM,aAAa,IAAA,CAAK,CAAA,KAAM,GAAG,CAAA,IAAK,IAAA,CAAK,MAAM,EAAA,CAAG,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,aAAa,CAAC,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,GAAI,CAAA,EAAG,KAAK,CAAC,CAAA,GAAI,CAAC,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,CAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA;AAC9F,IAAA,OAAO,EAAE,IAAA,EAAM,EAAE,WAAA,EAAa,CAAA,EAAG,QAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAO,EAAG,UAAA,EAAW;AAAA,EAChF;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM,GAAI,iBAAiB,KAAK,CAAA;AACxD,EAAA,IAAI,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACpC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAC/B,IAAA,OAAO,EAAE,MAAM,EAAE,WAAA,EAAa,GAAG,MAAA,EAAQ,CAAC,OAAO,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,CAAO,GAAG,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA,EAAG,MAAA,EAAQ,QAAO,EAAE;AAAA,EAC5G;AACA,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,IACjB,GAAG,CAAC,GAAA,CAAI,EAAA,EAAI,GAAA,CAAI,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,GAAA,CAAI,EAAA,EAAI,GAAA,CAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAC;AAAA,GACxG;AACA,EAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,KAAA,EAAO,KAAA,GAAQ,OAAO,CAAC,CAAA;AAClD;AAOA,SAAS,SAAA,CAAU,MAAA,EAAkC,KAAA,EAAe,CAAA,EAAqB;AACvF,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AACtB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,YAAA,GAAe,IAAI,EAAE,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACrC,EAAA,MAAM,QAAQ,CAAC,CAAA,EAAW,OAAe,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,EAAA,KAAO,IAAI,CAAA,CAAE,CAAC,IAAI,UAAU,CAAA;AAC7G,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,EAAW,CAAA,EAAW,CAAA,KAAc;AAClD,IAAA,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AACnB,IAAA,IAAA,CAAK,UAAU,EAAA,GAAK,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACnC,IAAA,IAAA,CAAK,UAAU,EAAA,GAAK,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACnC,IAAA,IAAA,CAAK,UAAU,EAAA,GAAK,CAAA,EAAG,KAAK,KAAA,CAAM,CAAA,GAAI,KAAM,CAAC,CAAA;AAC7C,IAAA,EAAA,IAAM,EAAA;AAAA,EACR,CAAA;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc;AACzB,IAAA,MAAM,CAAA,GAAI,KAAA,GAAS,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA,GAAK,YAAA;AACtC,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,IAAI,YAAY,CAAA;AAAA,EACjF,CAAA;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,EAAc,CAAA,EAAA,EAAK;AACrC,IAAA,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,CAAO,CAAA,EAAA,CAAI,CAAA,GAAI,OAAO,YAAY,CAAA;AACnD,IAAA,GAAA,CAAI,CAAC,CAAA;AACL,IAAA,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,EACX;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,WAAA,EAAa,CAAA;AAAA,MACb,iBAAA,EAAmB,EAAA;AAAA,MACnB,gBAAA,EAAkB,EAAA;AAAA,MAClB,WAAA,EAAa,CAAA;AAAA,MACb,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,CAAA,EAAG,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAC;AAAA,KAC/C;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAA,CAAa,GAAA,EAAc,CAAA,EAAa,EAAA,EAAa,UAAA,EAA4B;AACxF,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAM;AAC9B,EAAA,MAAM,IAAA,GAAiC,EAAE,GAAG,CAAA,CAAE,IAAA,EAAM,YAAY,IAAA,CAAK,UAAU,CAAA,EAAG,QAAA,EAAU,EAAA,EAAG;AAC/F,EAAA,IAAI,CAAA,CAAE,MAAM,GAAA,CAAI,OAAA,CAAQ,eAAe,GAAA,EAAK,IAAA,EAAM,EAAE,IAAI,CAAA;AAAA,OACnD,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAC9B,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,cAAA,CAAe,GAAA,EAAc,IAAA,EAAc,GAAA,EAAkB;AACpE,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAM;AAC9B,EAAA,MAAM,IAAA,GAAO,YAAY,WAAW,CAAA;AACpC,EAAA,GAAA,CAAI,OAAA,CAAQ,cAAA;AAAA,IACV,GAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,MACpB,OAAA,EAAS,KAAK,MAAM,CAAA;AAAA,MACpB,IAAA,EAAM,CAAC,GAAA,CAAI,EAAA,EAAI,IAAI,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,GAAA,CAAI,EAAE,CAAA;AAAA,MACrC,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,cAAc,GAAG,EAAA,EAAI,IAAA,CAAK,YAAY,CAAA,EAAG,GAAG,IAAA,EAAK;AAAA,MACvF,WAAW,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,MAAK;AAAE,KACtC;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,GAAA;AACT;;;AC9MA,IAAM,GAAA,uBAAU,OAAA,EAAwB;AACxC,IAAM,QAAA,uBAAe,OAAA,EAAqC;AAC1D,IAAI,MAAA,GAAS,CAAA;AAEb,SAAS,OAAO,KAAA,EAAyC;AACvD,EAAA,MAAM,CAAA,GAAI,cAAA,IAAkB,KAAA,GAAQ,KAAA,CAAM,eAAe,KAAA,CAAM,KAAA;AAC/D,EAAA,MAAM,CAAA,GAAI,eAAA,IAAmB,KAAA,GAAQ,KAAA,CAAM,gBAAgB,KAAA,CAAM,MAAA;AACjE,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA,EAAE;AAChC;AAEA,SAAS,kBAAkB,KAAA,EAA6B;AACtD,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,OAAO,KAAK,CAAA;AAC7B,EAAA,MAAM,MAAM,IAAI,eAAA,CAAgB,GAAG,CAAC,CAAA,CAAE,WAAW,IAAI,CAAA;AACrD,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,8CAA8C,CAAA;AACxE,EAAA,GAAA,CAAI,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA;AACzB,EAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,GAAA,CAAI,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,EAAE,IAAA,EAAK;AACxE;AAGA,SAAS,KAAK,GAAA,EAAmC;AAC/C,EAAA,IAAI,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA;AAChC,EAAA,IAAI,CAAC,GAAG,QAAA,CAAS,GAAA,CAAI,IAAI,OAAA,EAAU,CAAA,mBAAI,IAAI,GAAA,EAAM,CAAA;AACjD,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,KAAK,KAAA,EAAuB;AACnC,EAAA,IAAI,EAAA,GAAK,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AACtB,EAAA,IAAI,OAAO,MAAA,EAAW,GAAA,CAAI,IAAI,KAAA,EAAQ,EAAA,GAAK,EAAE,MAAO,CAAA;AACpD,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,WAAA,CAAY,GAAA,EAAc,IAAA,EAAe,IAAA,EAA0B;AAC1E,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAM;AAC9B,EAAA,GAAA,CAAI,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,EAAE,MAAM,IAAA,CAAK,SAAS,CAAA,EAAG,OAAA,EAAS,KAAK,OAAO,CAAA,EAAG,GAAG,IAAA,IAAQ,IAAI,CAAA;AAChG,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,YAAA,CACd,GAAA,EACA,KAAA,EACA,KAAA,GAAmB,EAAE,SAAA,EAAWC,IAAAA,CAAK,QAAA,EAAS,EAAG,OAAO,CAAA,EAAG,WAAA,EAAa,IAAA,EAAK,EAC7E,WAAqB,QAAA,EACN;AACf,EAAA,MAAM,cAAc,QAAA,KAAa,SAAA;AACjC,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,IAAA,CAAK,GAAG,KAAK,EAAE,CAAA,CAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACzB,EAAA,IAAI,KAAK,OAAO,GAAA;AAEhB,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAA,CAAO,GAAA,CAAI,IAAA,CAAK,UAAA,IAAc,iBAAA,EAAmB,KAAK,CAAA;AAAA,EACxD,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,CAAK,KAAK,yBAAyB,CAAA;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,aAAA,CAAc,GAAA,EAAK,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA,IAAK,WAAW,CAAA;AACzF,EAAA,KAAA,CAAM,GAAA,CAAI,KAAK,GAAG,CAAA;AAClB,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,aAAA,CAAc,GAAA,EAAc,GAAA,EAAmB,WAAA,EAA8B;AACpF,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,GAAA,CAAI,MAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAA,GAAI,CAAC,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,CAAC,CAAA;AAC9B,EAAA,IAAI,WAAA,GAAc,KAAA;AAClB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACvB,IAAA,GAAA,CAAI,IAAI,CAAA,GAAI,CAAC,IAAI,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC,CAAA;AAC/B,IAAA,GAAA,CAAI,IAAI,CAAA,GAAI,CAAC,IAAI,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC,CAAA;AAC/B,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,IAAI,CAAC,CAAA;AACzB,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA,EAAK,WAAA,GAAc,IAAA;AAAA,EACpC;AACA,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,MAA4B;AAAA,IACxC,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,UAAA,EAAY,KAAK,KAAK,CAAA;AAAA,IACtB,gBAAA,EAAkB,CAAA;AAAA,IAClB,WAAA,EAAa;AAAA,GACf,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,cAAc,WAAA,CAAY,GAAA,EAAK,KAAK,YAAY,CAAA,EAAG,KAAK,CAAA,GAAI,MAAA;AACzE,EAAA,OAAO,WAAA,CAAY,GAAA,EAAK,EAAE,GAAG,IAAA,CAAK,WAAW,CAAA,EAAG,KAAA,EAAO,IAAA,EAAK,EAAG,GAAG,CAAA;AACpE;AAGO,SAAS,WAAA,CAAY,GAAA,EAAc,GAAA,EAAmB,IAAA,EAAY,OAAA,EAAuB;AAC9F,EAAA,KAAA,CAAM,GAAA,EAAK,cAAc,GAAA,EAAK,GAAA,EAAK,IAAI,CAAA,EAAG,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,MAAA,EAAQ;AAAA,IAC/D,GAAG,IAAA,CAAK,CAAA;AAAA,IACR,GAAG,IAAA,CAAK,CAAA;AAAA,IACR,GAAG,IAAA,CAAK,KAAA;AAAA,IACR,GAAG,IAAA,CAAK,MAAA;AAAA,IACR;AAAA,GACD,CAAA;AACH;AAcA,SAAS,KAAA,CAAM,GAAA,EAAc,GAAA,EAAa,EAAA,EAAY,IAAY,CAAA,EAAgB;AAChF,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,IAAU,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAG;AACnD,EAAA,IAAI,EAAE,GAAA,CAAI,CAAA,GAAI,CAAA,IAAK,GAAA,CAAI,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,CAAA,KAAM,CAAA,CAAA,EAAI;AACzD,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAEhB,EAAA,MAAM,CAAA,GAAK,EAAA,GAAK,CAAA,CAAE,CAAA,GAAK,GAAA,CAAI,CAAA;AAC3B,EAAA,MAAM,CAAA,GAAK,EAAA,GAAK,CAAA,CAAE,CAAA,GAAK,GAAA,CAAI,CAAA;AAC3B,EAAA,MAAM,OAAO,CAAA,CAAE,CAAA,GAAK,IAAI,CAAA,GAAI,CAAA,CAAE,IAAK,GAAA,CAAI,CAAA;AACvC,EAAA,MAAM,MAAM,CAAA,CAAE,CAAA,GAAK,IAAI,CAAA,GAAI,CAAA,CAAE,IAAK,GAAA,CAAI,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,EAAE,CAAA,GAAI,CAAA,CAAE,IAAK,GAAA,CAAI,CAAA,GAAI,CAAA,CAAE,CAAA,GAAK,GAAA,CAAI,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,EAAE,CAAA,GAAI,CAAA,CAAE,IAAK,GAAA,CAAI,CAAA,GAAI,CAAA,CAAE,CAAA,GAAK,GAAA,CAAI,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA,GAAI,CAAA;AACzB,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,KAAA,GAAQ,IAAA;AAC5B,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA;AACzB,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,MAAA,GAAS,IAAI,GAAA,GAAM,CAAA;AAEvC,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,IAAI,CAAA,CAAE,OAAA,GAAU,CAAA,EAAG,GAAA,CAAI,GAAG,IAAA,EAAM,CAAA,CAAA,EAAI,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,CAAA;AACnF,EAAA,IAAI,EAAE,MAAA,EAAQ,GAAA,CAAI,GAAG,IAAA,EAAM,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,GAAG,GAAG,CAAA,CAAE,GAAG,GAAG,CAAA;AAC7D,EAAA,GAAA,CAAI,GAAG,IAAA,EAAM,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAC7B,EAAA,GAAA,CAAI,EAAA,CAAG,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAE,CAAA;AAC7C,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAEO,SAAS,UAAA,CAAW,GAAA,EAAc,GAAA,EAA4C,KAAA,EAAwB;AAC3G,EAAA,MAAM,EAAE,GAAG,EAAA,EAAI,CAAA,EAAG,IAAG,GAAI,MAAA,CAAO,IAAI,KAAK,CAAA;AACzC,EAAA,MAAM,MAAM,YAAA,CAAa,GAAA,EAAK,IAAI,KAAA,EAAO,KAAA,EAAO,IAAI,QAAQ,CAAA;AAC5D,EAAA,IAAI,CAAC,GAAA,EAAK;AACV,EAAA,IAAI,GAAA,CAAI,SAAS,OAAA,EAAS;AACxB,IAAA,KAAA,CAAM,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,EAAE,GAAG,GAAA,EAAK,OAAA,EAAA,CAAU,GAAA,CAAI,OAAA,IAAW,CAAA,IAAK,KAAA,CAAM,OAAO,CAAA;AAC7E,IAAA;AAAA,EACF;AACA,EAAA,MAAM,IAAI,GAAA,CAAI,OAAA;AACd,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,iBAAiB,CAAA,CAAE,MAAA,EAAQ,KAAK,aAAA,EAAe;AACjE,IAAA,MAAM,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,OAAO,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,IAAI,aAAa,CAAA;AACjF,IAAA,KAAA,CAAM,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI;AAAA,MACtB,CAAA,EAAG,EAAA;AAAA,MACH,CAAA,EAAG,EAAA;AAAA,MACH,CAAA,EAAG,EAAA;AAAA,MACH,CAAA,EAAG,EAAA;AAAA,MACH,MAAA,EAAQ,EAAE,CAAA,EAAG,EAAA,GAAK,IAAI,EAAA,GAAK,EAAA,GAAK,EAAA,EAAI,CAAA,EAAG,EAAA,GAAK,CAAA,GAAI,KAAK,EAAA,GAAK,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAG,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAE;AAAA,MAC/F,OAAO,EAAA,GAAK,CAAA;AAAA,MACZ,OAAO,EAAA,GAAK,CAAA;AAAA,MACZ,OAAA,EAAS,UAAU,KAAA,CAAM;AAAA,KAC1B,CAAA;AAAA,EACH;AACF;AAMO,SAAS,cAAA,CAAe,GAAA,EAAc,KAAA,EAAoB,KAAA,EAAiC;AAChG,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAA,CAAI,KAAA,CAAM,QAAQ,EAAE,CAAA;AAClD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,KAAA,CAAM,SAAA,IAAa,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACnD,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA,IAAU,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AACvC,EAAA,MAAM,SAAA,GAAYA,IAAAA,CAAK,UAAA,CAAW,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AACxD,EAAA,IAAI,CAACA,IAAAA,CAAK,MAAA,CAAO,SAAS,GAAG,OAAO,IAAA;AAEpC,EAAA,MAAM,IAAIA,IAAAA,CAAK,QAAA,CAASA,KAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAGA,IAAAA,CAAK,QAAA,CAAS,YAAA,CAAa,KAAK,KAAA,CAAM,SAAS,GAAG,OAAO,CAAC,GAAG,SAAS,CAAA;AAC3H,EAAA,MAAM,MAAA,GAASA,IAAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAE9B,EAAA,MAAM,MAAM,CAAA,QAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,EAAE,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,IAAI,KAAA,CAAM,WAAA,EAAa,IAAA,CAAK,GAAG,KAAK,EAAE,CAAA,CAAA;AACjG,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,EAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACvB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,MAAA,CAAO,MAAM,MAAM,CAAA;AACpC,IAAA,MAAM,QAAQ,YAAA,CAAa,GAAA,EAAK,KAAA,CAAM,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAC7D,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,GAAA,GAAM,GAAA,CAAI,QAAQ,KAAA,EAAM;AACxB,IAAA,GAAA,CAAI,OAAA,CAAQ,cAAA;AAAA,MACV,GAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,QACpB,WAAA,EAAa,CAAA;AAAA,QACb,SAAA,EAAW,CAAA;AAAA,QACX,UAAA,EAAY,CAAA;AAAA,QACZ,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,QACjB,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,WAAW,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,OAAM;AAAE,OACvC;AAAA,MACA,YAAY,CAAA,EAAG,CAAC,CAAA,MAAA,EAAS,CAAC,MAAM,CAAC,CAAA;AAAA;AAAA,CAAgB;AAAA,KACnD;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAA;AAClC;AC3MO,SAAS,OAAA,CAAQ,GAAA,EAAoB,IAAA,EAAY,KAAA,EAA+B;AACrF,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,GAAA,CAAI,EAAA,CAAG,MAAM,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AACpD,IAAA;AAAA,EACF;AACA,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,eAAe,IAAI,CAAA;AAChD,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,IAAI,GAAA;AACJ,EAAA,cAAA,CAAe,QAAA,EAAU,QAAQ,CAAC,GAAA,EAAK,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,KAAA,KAAU;AAC/D,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,KAAA,IAAS,CAAC,GAAA,EAAK;AACnC,MAAA,GAAA,GAAM,EAAE,GAAA,EAAK,EAAC,EAAG,QAAQ,KAAA,EAAM;AAC/B,MAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,CAAC,GAAA,EAAK,CAAC,MAAA,CAAO,EAAE,CAAA,EAAG,MAAA,CAAO,EAAA,GAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAChD,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,GAAA,EAAK,CAAC,EAAA,EAAI,EAAE,CAAC,CAAC,CAAA;AAAA,IAC9B;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,CAAC,GAAA,EAAK,CAAC,MAAA,CAAO,EAAE,GAAG,MAAA,CAAO,EAAA,GAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,SAAA,IAC3D,GAAA,KAAQ,QAAQ,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,GAAA,EAAK,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,OAAO,EAAA,GAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,SAAA,IACvF,QAAQ,MAAA,EAAQ;AACvB,MAAA,MAAM,CAAC,IAAI,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,OAAO,EAAE,CAAA,EAAG,OAAO,EAAA,GAAK,CAAC,GAAG,MAAA,CAAO,EAAA,GAAK,CAAC,CAAA,EAAG,MAAA,CAAO,EAAA,GAAK,CAAC,CAAC,CAAA;AAClF,MAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,CAAC,GAAA,EAAK,CAAC,EAAA,GAAA,CAAO,EAAA,GAAK,EAAA,IAAM,CAAA,GAAK,CAAA,EAAG,EAAA,GAAA,CAAO,EAAA,GAAK,EAAA,IAAM,CAAA,GAAK,CAAA,EAAG,CAAA,GAAA,CAAM,EAAA,GAAK,CAAA,IAAK,CAAA,GAAK,CAAA,EAAG,CAAA,GAAA,CAAM,EAAA,GAAK,CAAA,IAAK,CAAA,GAAK,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAAA,IAChI,CAAA,MAAA,IAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,GAAA,CAAI,IAAI,IAAA,CAAK,CAAC,GAAA,EAAK,EAAE,CAAC,CAAA;AACtB,MAAA,GAAA,CAAI,MAAA,GAAS,IAAA;AACb,MAAA,GAAA,GAAM,MAAA;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AACD,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,KAAA,KAAU,QAAA,IAAY,CAAC,CAAA,CAAE,MAAA,EAAQ;AACrC,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,IAAI,CAAA,IAAK,CAAA,CAAE,KAAK,GAAA,CAAI,EAAA,CAAG,EAAA,EAAI,GAAG,IAAI,CAAA;AAAA,EACpD;AACF;AAGO,SAAS,WAAA,CAAY,KAAoB,IAAA,EAAqB;AACnE,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,kBAAkB,IAAI,CAAA;AAChE,EAAA,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,SAAA,GAAY,KAAA,GAAQ,QAAQ,CAAA;AAC/C,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,IAAA,CAAK,QAAA,KAAa,SAAA;AACtD;;;AC1DO,IAAM,gBAAN,MAAoB;AAAA,EACR,OAAA,uBAAc,GAAA,EAAoB;AAAA,EAClC,KAAA,uBAAY,GAAA,EAAoB;AAAA,EAChC,IAAA,GAAO;AAAA,IACtB,OAAA,sBAAa,GAAA,EAAoB;AAAA,IACjC,OAAA,sBAAa,GAAA,EAAoB;AAAA,IACjC,IAAA,sBAAU,GAAA,EAAoB;AAAA,IAC9B,OAAA,sBAAa,GAAA;AAAoB,GACnC;AAAA,EAEA,SAAA,CAAU,WAAmB,WAAA,EAA6B;AAExD,IAAA,GAAA,CAAI,SAAS,CAAA;AACb,IAAA,GAAA,CAAI,WAAW,CAAA;AACf,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AACvC,IAAA,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC5B,IAAA,IAAI,MAAM,MAAA,EAAW;AACnB,MAAA,CAAA,GAAI,KAAK,UAAA,EAAW;AACpB,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAAA,IACzB;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,KAAA,EAAuB;AAC9B,IAAA,IAAI,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,EAAE,CAAA;AAC/B,IAAA,IAAI,MAAM,MAAA,EAAW;AACnB,MAAA,CAAA,GAAI,KAAK,UAAA,EAAW;AACpB,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,CAAC,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,UAAA,GAAqB;AAC3B,IAAA,OAAO,KAAK,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAAA,EACrD;AAAA,EAEA,QAAQ,GAAA,EAAqB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,IAAA,EAAM,GAAG,CAAA;AAAA,EACxC;AAAA,EACA,QAAQ,GAAA,EAAqB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,IAAA,EAAM,GAAG,CAAA;AAAA,EACxC;AAAA,EACA,KAAK,GAAA,EAAqB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,EACpC;AAAA,EACA,QAAQ,GAAA,EAAqB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,GAAA,EAAK,GAAG,CAAA;AAAA,EACvC;AAAA,EAEQ,KAAA,CAAM,IAAA,EAAmC,MAAA,EAAgB,GAAA,EAAqB;AACpF,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACxB,IAAA,IAAI,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AACpB,IAAA,IAAI,MAAM,MAAA,EAAW;AACnB,MAAA,CAAA,GAAI,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,CAAE,OAAO,CAAC,CAAA,CAAA;AAC1B,MAAA,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,CAAC,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAgB;AACd,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,IAAA,CAAK,MAAM,IAAA,EAAM;AACxC,MAAA,MAAM,IAA6B,EAAC;AACpC,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,CAAC,CAAA,IAAK,KAAK,OAAA,EAAS;AACnC,QAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,IAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAC1C,QAAA,CAAA,CAAE,CAAC,IAAI,EAAE,IAAA,EAAM,KAAK,WAAW,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA,MAC3C;AACA,MAAA,KAAA,MAAW,CAAC,EAAA,EAAI,CAAC,CAAA,IAAK,KAAK,KAAA,EAAO;AAChC,QAAA,CAAA,CAAE,CAAC,IAAI,EAAE,IAAA,EAAM,KAAK,WAAW,CAAA,EAAG,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA,EAAG,CAAA,EAAG,KAAK,YAAY,CAAA,EAAG,GAAG,IAAI,MAAA,CAAO,EAAE,CAAA,EAAE,EAAE;AAAA,MAC5G;AACA,MAAA,GAAA,CAAI,SAAA,GAAY,CAAA;AAAA,IAClB;AACA,IAAA,KAAA,MAAW,CAAC,MAAM,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,CAAC,EAAE,IAAA,EAAM;AACb,MAAA,MAAM,IAA4B,EAAC;AACnC,MAAA,KAAA,MAAW,CAAC,EAAA,EAAI,CAAC,CAAA,IAAK,CAAA,IAAK,CAAC,CAAA,GAAI,IAAI,MAAA,CAAO,EAAE,CAAA;AAC7C,MAAA,GAAA,CAAI,IAAI,CAAA,GAAI,CAAA;AAAA,IACd;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;;;AChEA,IAAM,YAAA,GAAe,CAAA;AAGrB,SAAS,OAAA,CAAQ,KAAc,IAAA,EAAmD;AAChF,EAAA,GAAA,CAAI,GAAA,CAAI,GAAG,WAAA,CAAY,GAAA,CAAI,KAAK,IAAI,CAAA,GAAI,OAAO,GAAG,CAAA;AAClD,EAAA,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,CAAA;AAChB;AAEA,SAAS,cAAc,EAAA,EAAwD;AAC7E,EAAA,OAAO,OAAO,OAAO,QAAA,GAAW,EAAA,GAAK,GAAG,EAAA,CAAG,MAAM,CAAA,CAAA,EAAI,EAAA,CAAG,WAAW,CAAA,CAAA;AACrE;AAQA,eAAe,UAAA,CACb,KACA,QAAA,EACA,GAAA,EACA,OACA,MAAA,EACA,QAAA,GAAW,MAAA,EACX,KAAA,GAAQ,KAAA,EACO;AACf,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,SAAA;AACtB,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,IAAA,CAAK,KAAK,QAAQ,CAAA;AACpC,EAAA,IAAI,GAAA,CAAI,KAAA,IAAS,CAAA,IAAK,GAAA,CAAI,UAAU,CAAA,EAAG;AACvC,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI;AACF,IAAA,EAAA,GAAK,MAAM,IAAA,CAAK,QAAA,EAAU,GAAA,EAAK,YAAA,EAAc,IAAI,IAAI,CAAA;AAAA,EACvD,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,IAAA,CAAK,GAAA,EAAK,CAAA,EAAG,MAAM,CAAA,gBAAA,EAAmB,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACjG;AACA,EAAA,IAAI,EAAA,CAAG,IAAA,CAAK,MAAA,KAAW,EAAA,CAAG,KAAA,GAAQ,EAAA,CAAG,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA,CAAK,GAAA,EAAK,CAAA,EAAG,MAAM,CAAA,sCAAA,CAAwC,CAAA;AACnH,EAAA,MAAM,OAAA,GAAUA,IAAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,GAAA,CAAI,GAAG,IAAA,EAAM,GAAGA,IAAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AACtC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACpB,IAAA,GAAA,CAAI,EAAA,CAAG,MAAM,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,MAAM,CAAA;AAChD,IAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AAAA,EACZ;AACA,EAAA,WAAA,CAAY,GAAA,EAAK,EAAE,GAAG,EAAA,EAAI,IAAA,EAAM,UAAA,CAAW,EAAA,CAAG,IAAA,EAAM,KAAK,CAAA,EAAE,EAAG,GAAA,EAAK,MAAM,KAAK,CAAA;AAC9E,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAGO,SAAS,WAAA,CAAY,GAAA,EAAc,GAAA,EAAwB,KAAA,EAAiC;AACjG,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,MAAA;AAC3B,EAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,GAAA,CAAI,OAAO,IAAA,CAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA;AAC/C,EAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,GAAA,CAAI,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA;AAChD,EAAA,OAAO,WAAW,GAAA,EAAK,CAAC,GAAG,CAAA,EAAG,EAAE,GAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAO,KAAK,EAAA,EAAI,MAAA,EAAQ,KAAK,EAAA,EAAG,EAAG,OAAO,QAAQ,CAAA;AAClG;AAGO,SAAS,UAAA,CAAW,GAAA,EAAc,GAAA,EAAsB,KAAA,EAAkB,IAAA,EAA6B;AAC5G,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,IAAA,EAAM,OAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM;AAAA,GAC7D;AACA,EAAA,MAAM,GAAA,GAAM,eAAe,CAAC,OAAO,GAAGA,IAAAA,CAAK,QAAA,IAAY,GAAG,CAAA;AAC1D,EAAA,OAAO,UAAA,CAAW,GAAA,EAAK,CAAC,OAAO,CAAA,EAAG,GAAA,EAAK,KAAA,EAAO,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA,EAAI,CAAA,WAAA,EAAc,IAAI,CAAA,eAAA,CAAiB,CAAA;AACzG;AAGA,SAAS,WAAA,CAAY,KAAuB,KAAA,EAAoC;AAC9E,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,SAAA,GAAYA,IAAAA,CAAK,QAAA,CAAS,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG,GAAA,CAAI,SAAS,IAAI,KAAA,CAAM,SAAA;AACtG,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,QAAA,EAAU,IAAI,QAAA,EAAS;AACxG;AAGA,eAAe,WAAA,CAAY,GAAA,EAAc,GAAA,EAAuB,KAAA,EAAkB,MAAA,EAA+B;AAC/G,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,EAAK,KAAK,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,eAAe,CAAC,OAAO,GAAGA,IAAAA,CAAK,QAAA,EAAS,EAAG,GAAA,EAAK,YAAY,CAAA;AACxE,EAAA,MAAM,OAAA,GAAqB;AAAA,IACzB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,GAAA,CAAI,KAAA,IAAS,CAAA,CAAA;AAAA,IACnC,WAAA,EAAa,aAAA,CAAc,KAAA,CAAM,WAAA,EAAa,IAAI,WAAW;AAAA,GAC/D;AACA,EAAA,MAAM,WAAW,GAAA,EAAK,CAAC,OAAO,CAAA,EAAG,GAAA,EAAK,SAAS,MAAM,CAAA;AACvD;AAOA,SAAS,cAAA,CAAe,GAAA,EAAc,GAAA,EAAuB,KAAA,EAAiC;AAC5F,EAAA,MAAM,YAAY,GAAA,CAAI,SAAA;AACtB,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,SAAS,CAAA,GACjC,cAAA,CAAe,CAAC,WAAA,CAAY,GAAA,EAAK,KAAK,CAAC,CAAA,EAAGA,IAAAA,CAAK,QAAA,EAAS,EAAG,GAAA,EAAK,YAAY,CAAA,GAC5E,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAO;AACvD,EAAA,MAAM,MAAA,GAAS,CAAA,UAAA,EAAa,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AACpD,EAAA,MAAM,MAAA,GAAoB,EAAE,SAAA,EAAW,KAAA,CAAM,WAAW,KAAA,EAAO,CAAA,EAAG,aAAa,IAAA,EAAK;AACpF,EAAA,OAAO,UAAA,CAAW,GAAA,EAAK,WAAA,CAAY,GAAA,CAAI,KAAK,GAAG,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAClF;AAMA,eAAe,aAAA,CAAc,GAAA,EAAc,GAAA,EAAuB,KAAA,EAAkB,KAAA,EAAiC;AACnH,EAAA,IAAI,IAAI,WAAA,GAAc,EAAE,CAAA,EAAG,IAAA,CAAK,KAAK,8CAA8C,CAAA;AACnF,EAAA,MAAM,IAAA,GAAO,SAAS,GAAG,CAAA;AACzB,EAAA,MAAM,MAAA,GAASA,KAAK,QAAA,CAAS,IAAA,EAAM,aAAa,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AACrE,EAAA,MAAM,QAAA,GAAWA,IAAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AACnC,EAAA,IAAI,CAAC,QAAA,EAAU;AACf,EAAA,MAAM,GAAA,GAAe,EAAE,GAAG,GAAA,EAAK,GAAA,EAAK,IAAI,aAAA,EAAc,EAAG,SAAA,EAAW,IAAI,aAAA,EAAc,EAAE;AACxF,EAAA,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAGA,KAAK,QAAA,CAASA,IAAAA,CAAK,QAAA,CAAS,IAAA,EAAM,aAAa,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAC,CAAC,CAAA;AAC1F,EAAA,IAAI,GAAA,CAAI,IAAA,EAAM,OAAA,CAAQ,GAAA,EAAK,IAAI,IAAI,CAAA;AACnC,EAAA,MAAM,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,QAAA,EAAU,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,CAAA,EAAE,EAAG,GAAG,CAAA;AAElE,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAM;AAC/B,EAAA,GAAA,CAAI,OAAA,CAAQ,cAAA;AAAA,IACV,IAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,MACpB,OAAA,EAAS,KAAK,MAAM,CAAA;AAAA,MACpB,MAAM,CAAC,CAAA,EAAG,GAAG,GAAA,CAAI,KAAA,EAAO,IAAI,MAAM,CAAA;AAAA,MAClC,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,cAAc,CAAA,EAAG,CAAA,EAAG,IAAA,EAAK;AAAA,MAC/D,SAAA,EAAW,GAAA,CAAI,SAAA,CAAU,IAAA;AAAK,KAChC;AAAA,IACA,GAAA,CAAI,IAAI,KAAA;AAAM,GAChB;AACA,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,GAAA,CAAI,GAAG,IAAA,EAAM,GAAGA,IAAAA,CAAK,QAAA,CAAS,QAAQ,CAAC,CAAA;AACvC,EAAA,IAAI,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,GAAA,CAAI,GAAG,IAAA,EAAM,CAAA,CAAA,EAAI,GAAA,CAAI,SAAA,CAAU,UAAU,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AACzF,EAAA,GAAA,CAAI,EAAA,CAAG,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAE,CAAA;AAC9C,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAEA,eAAsB,UAAA,CAAW,GAAA,EAAc,GAAA,EAAuB,KAAA,EAAiC;AACrG,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,CAAK,SAAA,KAAc,MAAA;AACtC,EAAA,IAAI,GAAA,CAAI,SAAA,IAAa,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,EAAG;AAClD,IAAA,IAAI,MAAA,EAAQ,OAAO,cAAA,CAAe,GAAA,EAAK,KAAK,KAAK,CAAA;AACjD,IAAA,IAAA,CAAK,KAAK,CAAA,UAAA,EAAa,aAAA,CAAc,GAAA,CAAI,SAAS,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAAA,EAC5E;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAQ,OAAO,YAAY,GAAA,EAAK,GAAA,EAAK,OAAO,SAAS,CAAA;AAEtE,EAAA,IAAI,GAAA,CAAI,OAAA,IAAW,MAAA,IAAU,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,WAAW,CAAA;AACzG,EAAA,MAAM,IAAI,GAAA,CAAI,SAAA;AACd,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,SAAA,EAAW,CAAA,GAAIA,IAAAA,CAAK,QAAA,CAAS,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG,CAAC,CAAA,GAAI,KAAA,CAAM,SAAA;AAAA,IAC5E,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,GAAA,CAAI,KAAA,IAAS,CAAA,CAAA;AAAA,IACnC,WAAA,EAAa,aAAA,CAAc,KAAA,CAAM,WAAA,EAAa,IAAI,WAAW;AAAA,GAC/D;AACA,EAAA,IAAI,IAAI,OAAA,EAAS,OAAO,cAAc,GAAA,EAAK,GAAA,EAAK,OAAO,KAAK,CAAA;AAC5D,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,IAAI,CAAA,MAAO,EAAA,CAAG,IAAA,EAAM,GAAGA,IAAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA;AACvC,EAAA,IAAI,GAAA,CAAI,IAAA,EAAM,OAAA,CAAQ,GAAA,EAAK,IAAI,IAAI,CAAA;AACnC,EAAA,MAAM,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,QAAA,EAAU,OAAO,GAAG,CAAA;AACjD,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AC9KA,IAAM,OAAO,EAAE,IAAA,EAAM,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAC5C,IAAM,QAAQ,EAAE,KAAA,EAAO,GAAG,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAE;AAGtC,SAAS,QAAA,CAAS,QAAuB,KAAA,EAAwB;AACtE,EAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACtD,EAAA,IAAI,OAAO,YAAA,IAAgB,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,cAAc,OAAO,KAAA;AACrE,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,YAAA,CAAa,QAAkB,KAAK,CAAA;AAC3D,EAAA,OAAO,KAAA,KAAU,KAAK,GAAA,KAAQ,CAAA;AAChC;AAOO,SAAS,cAAA,CAAe,GAAA,EAAc,MAAA,EAAuB,KAAA,EAAe,MAAA,EAAuB;AACxG,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,EAAA,CAAG,KAAK,KAAK,CAAA;AACjB,EAAA,GAAA,CAAI,GAAG,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAA,IAAO,MAAM,CAAC,CAAA;AACtC,EAAA,GAAA,CAAI,GAAG,GAAA,EAAK,KAAA,CAAM,MAAA,CAAO,IAAA,IAAQ,OAAO,CAAC,CAAA;AACzC,EAAA,GAAA,CAAI,EAAA,CAAG,GAAA,EAAK,MAAA,CAAO,UAAA,IAAc,CAAC,CAAA;AAElC,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC5C,EAAA,IAAI,IAAA,KAAS,cAAc,MAAM,IAAI,gBAAgB,CAAA,kCAAA,EAAqC,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AACvG,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,KAAK,CAAC,CAAA;AACrE;AAGO,SAAS,aAAA,CACd,IAAA,EACA,GAAA,EACA,KAAA,EACoE;AACpE,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,oBAAA,CAAqB,KAAA,CAAM,WAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,GAAA,EAAI,EAAG,EAAE,QAAA,EAAU,OAAO,CAAA;AAC9G,EAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAO,GAAA,CAAI,MAAA,CAAO,KAAA,KAAU,QAAA,GAAW,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,EAAE;AAClG;AAEA,SAAS,WAAA,CAAY,GAAA,EAAc,IAAA,EAAY,MAAA,EAAuB,OAAkB,KAAA,EAAqB;AAC3G,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,YAAA,CAAa,KAAK,CAAA,EAAG;AACpC,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,UAAA,CAAW,OAAO,KAAK,CAAA;AAC9C,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,GAAA,CAAI,EAAA,CAAG,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,SAAA,CAAU,KAAA,EAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AACxD,EAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAG,GAAG,CAAA;AACnB,EAAA,cAAA,CAAe,GAAA,EAAK,QAAQ,KAAA,EAAO,MAAA,CAAO,OAAO,UAAA,CAAW,IAAI,IAAI,MAAS,CAAA;AAC7E,EAAA,OAAA,CAAQ,GAAA,EAAK,MAAM,KAAK,CAAA;AACxB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAQA,eAAsB,WAAA,CAAY,GAAA,EAAc,IAAA,EAAY,SAAA,EAA0B,KAAA,EAAiC;AACrH,EAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AACtB,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,aAAA,CAAc,IAAA,EAAM,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,CAAU,KAAA,IAAyB,KAAK,CAAA;AAC7G,EAAA,IAAI,EAAE,QAAQ,CAAA,CAAA,EAAI;AAClB,EAAA,IAAI,KAAA,GACF,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,SAAA,GAC7C,kBAAA,CAAmB,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAS,IACjD,EAAC;AACP,EAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,KAAK,CAAA,IAAK,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,WAAA,CAAY,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAK,CAAA;AAAA,OACjG;AACH,IAAA,IAAI,MAAA,CAAO,YAAA,EAAc,IAAA,CAAK,GAAA,EAAK,oDAAoD,CAAA;AACvF,IAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA,CAAE,IAAA,EAAM,KAAA,KAAU,MAAA,CAAO,KAAK,CAAA;AACtE,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,MAAgB,CAAA;AACnD,IAAA,MAAM,cAAc,GAAA,EAAK,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,EAAE,OAAO,MAAA,CAAO,KAAA,EAAM,EAAG,GAAG,KAAK,CAAA;AAAA,EAClG;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ,MAAM,aAAA,CAAc,GAAA,EAAK,OAAO,KAAK,CAAA;AACzD;AC5EO,SAAS,QAAQ,EAAA,EAAqB;AAC3C,EAAA,OAAO,EAAA,KAAO,MAAQ,EAAA,KAAO,GAAA;AAC/B;AAEO,SAAS,eAAe,EAAA,EAAoB;AACjD,EAAA,OAAO,CAAA,EAAA,EAAK,EAAA,CAAG,QAAA,CAAS,EAAE,CAAA,CAAE,aAAY,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAC5D;AAEO,SAAS,SAAA,CAAU,GAAA,EAAc,CAAA,EAAgB,GAAA,EAAmB;AACzE,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM,GAAI,EAAE,QAAA,CAAS,QAAA;AAC7C,EAAA,GAAA,CAAI,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,SAAS,MAAA,EAAQ,CAAA,EAAG,eAAe,CAAA,CAAE,EAAE,CAAC,CAAA,IAAA,EAAO,MAAM,IAAI,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAC9G;AAGO,SAAS,aAAA,CAAc,GAAA,EAAc,CAAA,EAAgB,EAAA,EAAY,EAAA,EAAyB;AAC/F,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM,GAAI,EAAE,QAAA,CAAS,QAAA;AAC7C,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI;AAEF,IAAA,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,CAAO,CAAA,GAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,EAAE,EAAE,CAAA;AAAA,EAChF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,KAAM,MAAM,OAAO,IAAA;AACvB,EAAA,OAAO,cAAA,CAAe,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AACpC;AAGO,SAAS,eACd,GAAA,EACA,CAAA,EACA,KACA,EAAA,EACA,EAAA,EACA,QAA0B,KAAA,EACF;AACxB,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,EAAK,CAAA,EAAG,IAAI,EAAE,CAAA;AACzC,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,GAAG,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAuB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAClD,EAAA,IAAI,KAAA,KAAU,YAAY,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG,GAAA,CAAI,OAAO,GAAA,CAAI,IAAA;AAC/D,EAAA,IAAI,aAAa,GAAA,CAAI,MAAM,CAAA,EAAG,GAAA,CAAI,SAAS,GAAA,CAAI,MAAA;AAC/C,EAAA,OAAO,GAAA;AACT;;;AClDA,IAAM,aAAA,GAAgB,GAAA;AAEtB,IAAM,IAAA,GAAO,CAAC,CAAA,KAAc,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAGjE,SAAS,SAASC,KAAAA,EAAsB;AAC7C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,KAAAA,CAAK,MAAA,EAAQ,CAAA,EAAA,EAAK,GAAA,IAAO,IAAA,CAAKA,KAAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA;AACpE,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,cAAc,MAAA,EAA6C;AACzE,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAM,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,sCAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,0EAAA;AAAA,IACA,mCAAA;AAAA,IACA,iBAAA;AAAA,IACA,uBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,KAAK,aAAA,EAAe;AACtD,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAI,aAAa,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,YAAA,CAAc,CAAA;AACxC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAKA,KAAI,CAAA,IAAK,OAAO,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAC,CAAA,GAAA,EAAM,QAAA,CAASA,KAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAChF,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,EACxB;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,+CAAA,EAAiD,KAAA,EAAO,KAAK,CAAA;AACnF,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;ACKA,IAAM,IAAA,GAAO,CAAA;AACb,IAAM,MAAA,GAAS,CAAA;AACf,IAAM,WAAA,GAAc,CAAA;AACpB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,IAAA,GAAO,CAAA;AACb,IAAMC,MAAAA,GAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAE;AAEnC,IAAM,gBAAA,GAAmB,CAAA;AAMzB,SAAS,MAAA,CAAO,GAAA,EAAkB,EAAA,EAAY,EAAA,EAAkB;AAC9D,EAAA,MAAM,EAAE,QAAA,EAAU,CAAA,EAAG,SAAA,EAAW,MAAA,EAAQ,CAAA,EAAG,OAAA,EAAQ,GAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,CAAA;AACrE,EAAA,IAAI,MAAA,EAAQ;AAEV,IAAA,MAAM,CAAA,GAAI,UAAU,GAAA,GAAM,CAAA;AAC1B,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAA,GAAI,KAAK,CAAA,EAAG,CAAA,EAAG,SAAA,GAAY,EAAA,GAAK,GAAG,KAAA,EAAO,CAAA,GAAI,CAAA,EAAG,MAAA,EAAQ,IAAI,CAAA,EAAE;AAAA,EAC3F;AACA,EAAA,IAAI,EAAA,GAAK,QAAA;AACT,EAAA,IAAI,EAAA,GAAK,CAAA,QAAA;AACT,EAAA,KAAA,MAAW,EAAE,CAAA,EAAE,IAAK,GAAA,CAAI,MAAA,EAAQ;AAC9B,IAAA,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,CAAC,CAAA;AACrB,IAAA,EAAA,GAAK,KAAK,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAE,OAAO,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAG,EAAA,GAAK,EAAA,GAAK,GAAG,CAAA,EAAG,SAAA,GAAY,KAAK,GAAA,GAAM,CAAA,EAAG,OAAO,EAAA,GAAK,EAAA,GAAK,IAAI,CAAA,EAAG,MAAA,EAAQ,MAAM,CAAA,EAAE;AAC9G;AAQA,SAAS,UAAA,CAAW,GAAA,EAAc,GAAA,EAAkB,IAAA,EAAc,IAAY,EAAA,EAAkB;AAC9F,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,CAAA;AAC5B,EAAA,MAAM,IAAI,KAAA,CAAM,QAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,SAAA,CAAU,SAAS,IAAA,CAAK,GAAA,CAAI,wBAAwB,CAAA,GAAI,CAAA;AACrF,EAAA,GAAA,CAAI,GAAG,IAAI,CAAA;AACX,EAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,CAAA,CAAA,EAAI,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA;AACtD,EAAA,IAAI,IAAA,KAAS,IAAA,EAAM,GAAA,CAAI,EAAA,CAAG,MAAM,IAAI,CAAA;AAGpC,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,SAAA,CAAU,MAAM,MAAM,CAAA;AACzC,EAAA,GAAA,CAAI,GAAG,IAAA,EAAM,GAAA,GAAM,GAAG,GAAA,GAAM,CAAA,EAAG,KAAK,GAAA,GAAM,KAAA,GAAQ,MAAM,CAAA,IAAK,GAAA,GAAM,QAAQ,GAAA,CAAA,EAAM,KAAA,CAAM,IAAI,EAAA,EAAI,KAAA,CAAM,YAAY,EAAE,CAAA;AACnH,EAAA,IAAI,QAAkB,EAAC;AACvB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,GAAA,GAAM,CAAA;AAEV,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,IAAA,GAAO,GAAA;AACX,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,IAAI,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AAC9B,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AACzD,IAAA,KAAA,GAAQ,EAAC;AACT,IAAA,GAAA,GAAM,EAAA;AAAA,EACR,CAAA;AACA,EAAA,KAAA,MAAW,EAAE,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAO,IAAK,IAAI,MAAA,EAAQ;AAC9C,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA,EAAG;AAC1C,MAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,QAAA,KAAA,EAAM;AACN,QAAA,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,OAAA,EAAS,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAA,GAAO,CAAA,IAAA,EAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,GAAA,CAAK,CAAA;AAAA,MAC7F;AACA,MAAA,KAAA,MAAW,EAAE,GAAA,EAAK,CAAA,EAAG,CAAA,EAAE,IAAK,KAAK,MAAA,EAAQ;AAEvC,QAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AACjB,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,KAAA,EAAM;AACN,UAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAO,IAAA,GAAO,EAAG,CAAA;AAAA,QAC1B;AACA,QAAA,MAAM,EAAA,GAAA,CAAM,CAAA,CAAE,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA,GAAI,CAAA;AACjC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,KAAA,EAAM;AACN,UAAA,MAAM,IAAA,GAAO,GAAA,CAAI,EAAA,GAAK,IAAI,CAAA;AAC1B,UAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA;AACpB,UAAA,GAAA,GAAM,IAAA,IAAQ,OAAO,IAAI,CAAA;AACzB,UAAA,MAAA,GAAS,KAAA;AAAA,QACX;AACA,QAAA,MAAM,MAAA,GAAS,GAAA,CAAA,CAAK,GAAA,GAAM,EAAA,IAAM,GAAI,CAAA;AACpC,QAAA,IAAI,WAAW,GAAA,EAAK;AAClB,UAAA,IAAI,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AAC9B,UAAA,GAAA,GAAM,EAAA;AACN,UAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,UAAA,GAAA,IAAO,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA;AAAA,QAC1B;AACA,QAAA,GAAA,IAAO,GAAA,CAAI,SAAS,EAAE,CAAA,CAAE,aAAY,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACrD,QAAA,GAAA,IAAO,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA;AAG/B,QAAA,MAAA,KAAW,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,KAAM,UAAa,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,KAAM,CAAA;AAAA,MAC9E;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,QAAA,KAAA,EAAM;AACN,QAAA,GAAA,CAAI,GAAG,KAAK,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,EAAM;AAEN,EAAA,IAAI,IAAA,KAAS,GAAA,EAAK,GAAA,CAAI,EAAA,CAAG,MAAM,CAAC,CAAA;AAChC,EAAA,GAAA,CAAI,GAAG,IAAI,CAAA;AACb;AAMA,SAAS,cAAA,CAAe,GAAA,EAAc,GAAA,EAAkB,EAAA,EAAY,EAAA,EAAoB;AACtF,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,EAAE,CAAA,EAAE,IAAK,GAAA,CAAI,MAAA,EAAQ;AAC9B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,GAAI,OAAO,aAAA,CAAc,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AACnE,IAAA,IAAI,SAAS,MAAA,GAAS,IAAA,CAAK,IAAI,MAAA,EAAQC,UAAAA,CAAW,OAAO,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,MAAA;AACT;AAGA,eAAe,cACb,GAAA,EACA,GAAA,EACA,KACA,EAAA,EACA,EAAA,EACA,OACA,KAAA,EACe;AACf,EAAA,KAAA,MAAW,EAAE,CAAA,EAAE,IAAK,GAAA,CAAI,MAAA,EAAQ;AAC9B,IAAA,IAAI,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,EAAG;AACnB,IAAA,MAAM,UAAU,cAAA,CAAe,GAAA,EAAK,GAAG,GAAA,EAAK,EAAA,EAAI,IAAI,KAAK,CAAA;AACzD,IAAA,IAAI,SAAS,MAAM,aAAA,CAAc,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;AAAA,SACjD,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,sCAAsC,CAAA;AAAA,EAC/D;AACF;AAGA,eAAe,iBAAiB,GAAA,EAAc,GAAA,EAAkB,GAAA,EAAsB,EAAA,EAAY,IAAY,KAAA,EAAkB;AAC9H,EAAA,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,CAAA;AACd,EAAA,UAAA,CAAW,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW,EAAA,EAAI,EAAE,CAAA;AACtC,EAAA,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,CAAA;AACd,EAAA,MAAM,cAAc,GAAA,EAAK,GAAA,EAAK,KAAK,EAAA,EAAI,EAAA,EAAI,OAAO,KAAK,CAAA;AACzD;AAGA,eAAsB,aACpB,GAAA,EACA,GAAA,EACA,GAAA,EACA,EAAA,EACA,IACA,KAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAOC,UAAAA,CAAW,GAAA,CAAI,IAAI,CAAA,GAAK,GAAA,CAAI,KAAM,KAAA,GAAyB,MAAA;AACxE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AAC9B,EAAA,MAAM,YAAYC,YAAAA,CAAa,GAAA,CAAI,MAAM,CAAA,GAAK,IAAI,MAAA,GAAqD,MAAA;AACvG,EAAA,MAAM,MAAA,GAAS,SAAA,IAAa,aAAA,CAAc,GAAA,EAAK,WAAW,KAAK,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,MAAA,IAAU,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,IAAKC,YAAAA,CAAa,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AACxG,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,IAAQA,YAAAA,CAAa,IAAI,CAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,KAAA,CAAM,QAAQ,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,QAAQA,YAAAA,CAAa,IAAI,IAAI,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA,GAAI,MAAA;AAEzE,EAAA,MAAM,aAAa,IAAA,IAAQ,CAAC,MAAA,IAAU,SAAA,IAAa,UAAW,KAAA,IAAS,CAAA;AACvE,EAAA,IAAK,MAAA,IAAU,CAAC,YAAA,IAAkB,IAAA,IAAQ,CAAC,UAAA,EAAa,OAAO,gBAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,IAAI,KAAK,CAAA;AAE5G,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,IAAA,UAAA,CAAW,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI,EAAE,CAAA;AACjC,IAAA,MAAM,aAAA,CAAc,GAAA,EAAK,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAK,EAAG,GAAG,KAAK,CAAA;AACpF,IAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AAEV,IAAA,IAAI,MAAA,QAAc,aAAA,CAAc,GAAA,EAAK,KAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,KAAA,EAAO,QAAQ,CAAA;AACtE,IAAA;AAAA,EACF;AACA,EAAA,MAAM,cAAc,YAAA,GAAe,UAAA,CAAW,OAAO,MAAA,CAAO,KAAA,EAAqB,KAAK,CAAA,GAAI,MAAA;AAC1F,EAAA,MAAM,UAAA,GAAa,SAAA;AACnB,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,EAAa;AACjC,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,GAAA,CAAI,GAAG,IAAA,EAAM,CAAA,CAAA,EAAI,GAAA,CAAI,SAAA,CAAU,UAAU,UAAA,GAAa,SAAA,CAAU,KAAA,GAAQ,CAAA,EAAG,aAAa,KAAA,IAAS,SAAA,EAAW,KAAA,IAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AACzH,EAAA,IAAI,YAAY,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAG,UAAU,GAAG,CAAA;AAC7C,EAAA,IAAI,UAAU,WAAA,EAAa;AACzB,IAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAG,WAAA,CAAY,GAAG,CAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,IAAA,GAAO,eAAe,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA,GAAI,MAAA;AACvE,IAAA,cAAA,CAAe,GAAA,EAAK,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,EACzD,CAAA,MAAA,IAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAG,SAAA,CAAU,GAAG,CAAA;AAE7B,IAAA,GAAA,CAAI,GAAG,GAAA,EAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,MAAM,QAAQ,CAAA;AAC5C,IAAA,GAAA,CAAI,EAAA,CAAG,GAAA,EAAKJ,MAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAC5B,IAAA,GAAA,CAAI,EAAA,CAAG,KAAK,gBAAgB,CAAA;AAAA,EAC9B;AACA,EAAA,UAAA,CAAW,GAAA,EAAK,KAAK,UAAA,GAAc,WAAA,IAAe,OAAO,WAAA,GAAc,IAAA,GAAQ,MAAA,EAAQ,EAAA,EAAI,EAAE,CAAA;AAC7F,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAUA,SAAS,OAAA,CAAQ,QAA2B,MAAA,EAA4E;AACtH,EAAA,IAAI,WAAW,MAAA,EAAW,OAAO,CAAC,EAAE,QAAQ,CAAA;AAC5C,EAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAC,CAAA;AACzC,EAAA,IAAI,EAAA,CAAG,MAAA,KAAW,CAAA,IAAK,EAAA,CAAG,MAAA,KAAW,MAAA,CAAO,MAAA,EAAQ,OAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,CAAA;AACpF,EAAA,OAAO,CAAC,EAAE,IAAA,EAAM,QAAQ,MAAA,EAAQ,EAAA,IAAM,EAAE,IAAA,EAAM,IAAI,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,EAAE,CAAA,KAAM,CAAC,GAAG,CAAA;AAC7F;;;ACzOA,IAAM,KAAA,GAAQ,yCAAA;AAId,SAAS,KAAA,CAAM,GAAA,EAA8B,CAAA,EAAgB,IAAA,EAAkC;AAC7F,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,SAAS,IAAA,IAAQ,CAAA,CAAE,QAAQ,OAAO,KAAA;AAClD,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,CAAA;AACxB,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,CAAC,CAAA,CAAE,QAAA,EAAU,EAAE,QAAQ,CAAA;AACxC,EAAA,OACE,CAAA,CAAE,QAAQ,CAAA,CAAE,GAAA,IACZ,EAAE,QAAA,KAAa,CAAA,CAAE,YACjB,CAAA,CAAE,SAAA,KAAc,EAAE,SAAA,IAClB,EAAA,CAAG,WAAW,EAAA,CAAG,MAAA,IACjB,GAAG,QAAA,CAAS,MAAA,KAAW,GAAG,QAAA,CAAS,MAAA,IACnC,GAAG,QAAA,CAAS,MAAA,KAAW,GAAG,QAAA,CAAS,MAAA,IACnC,GAAG,QAAA,CAAS,KAAA,KAAU,GAAG,QAAA,CAAS,KAAA,IAClC,GAAG,SAAA,CAAU,IAAA,KAAS,GAAG,SAAA,CAAU,IAAA,IACnC,GAAG,SAAA,CAAU,MAAA,KAAW,GAAG,SAAA,CAAU,MAAA;AAEzC;AAOA,SAAS,YAAA,CAAa,MAAoB,CAAA,EAAqC;AAC7E,EAAA,IAAI,CAAC,EAAE,MAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACzB,IAAA,OAAO,GAAA,KAAQ,IAAA,GAAO,IAAA,GAAO,EAAE,GAAG,MAAA,EAAQ,CAAC,EAAE,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAAA,EAClE;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAAD,KAAAA,KAAS,CAAA,CAAE,MAAA;AAG3B,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,EAAE,KAAK,CAAA,IAAK,OAAO,OAAA,EAAQ,MAAO,CAAC,IAAA,CAAK,SAAS,GAAA,EAAK,CAAA,KAAM,IAAIA,KAAAA,GAAO,MAAS,GAAG,OAAO,IAAA;AACzG,EAAA,OAAO,OAAO,MAAA,KAAW,CAAA,IAAK,KAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,GAAG,MAAMA,KAAAA,GAAO,EAAE,GAAG,MAAA,EAAO,GAAI,EAAE,CAAA,EAAG,MAAA,EAAQ,QAAQA,KAAAA,EAAK;AACjH;AAOA,eAAsBM,UAAAA,CAAU,GAAA,EAAc,GAAA,EAAsB,KAAA,EAAiC;AACnG,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,GAAA,CAAI,IAAA,EAAM;AAAA,IACtC,QAAA,EAAU,IAAI,QAAA,IAAY,QAAA;AAAA,IAC1B,YAAY,GAAA,CAAI,KAAA;AAAA,IAChB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,KAAA,CAAM,KAAA;AAAA,IAC1B,SAAA,EAAW,GAAA,CAAI,SAAA,IAAa,KAAA,CAAM,SAAA;AAAA,IAClC,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,SAAS,GAAA,CAAI;AAAA,GACd,CAAA;AACD,EAAA,MAAM,KAAK,GAAA,CAAI,CAAA;AACf,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,GAAI,mBAAA,CAAoB,GAAA,CAAI,eAAe,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAExF,EAAA,MAAM,QAA2C,EAAC;AAClD,EAAA,IAAI,GAAA;AACJ,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,GAAG,KAAK,IAAA,CAAK,KAAA,CAAM,SAAQ,EAAG;AAC9C,IAAA,KAAA,MAAW,CAAA,IAAK,IAAI,MAAA,EAAQ;AAC1B,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,GAAG,CAAA;AAC1B,MAAA,IAAI,CAACH,WAAW,GAAA,CAAI,IAAI,KAAK,CAACC,YAAAA,CAAa,GAAA,CAAI,MAAM,CAAA,EAAG;AACxD,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA;AAC1B,MAAA,IAAI,CAAC,SAAS,KAAA,CAAM,IAAA,CAAK,OAAO,aAAA,CAAc,CAAA,CAAE,EAAE,CAAC,CAAA,EAAG;AAEtD,MAAA,IAAI,CAAC,KAAA,KAAU,CAAA,CAAE,KAAA,EAAO,KAAA,IAAU,CAAA,CAAE,QAAA,CAAS,MAAA,KAAW,SAAA,IAAa,CAAA,CAAE,KAAA,KAAU,IAAA,CAAA,EAAQ;AACvF,QAAA,SAAA,CAAU,GAAA,EAAK,GAAG,sBAAsB,CAAA;AACxC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,CAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AACnC,MAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAO,SAAA,EAAU,GAAI,EAAE,QAAA,CAAS,QAAA;AACxD,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAM,IAAA,CAAK,MAAA,EAAQ,QAAQ,SAAS,CAAA;AAC3D,MAAA,MAAM,KAAA,GAAQ,IAAA,IAAQ,YAAA,CAAa,IAAA,EAAM,CAAC,CAAA;AAC1C,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,IAAI,CAAC,KAAA,CAAM,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAM,GAAA,GAAM,EAAE,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,IAAK,CAAA;AACvE,QAAA,GAAA,CAAI,MAAA,CAAO,KAAK,KAAK,CAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,EAAO;AACX,MAAA,MAAM,UAAU,cAAA,CAAe,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,IAAI,EAAE,CAAA;AAClD,MAAA,IAAI,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AAAA,WAC1B,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,sBAAsB,CAAA;AAAA,IAC/C;AAAA,EACF;AAGA,EAAA,IAAI,IAAA;AACJ,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,MAAM,aAAA,CAAc,GAAA,EAAK,CAAC,IAAI,GAAG,KAAK,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA,CAAE,GAAG,CAAA,CAAE,IAAA;AAC5C,IAAA,GAAA,CAAI,KAAA,CAAM,IAAI,IAAI,CAAA;AAClB,IAAA,MAAM,IAAA,GAAO,IAAA,IAAQ,IAAA,CAAK,WAAA,EAAY,KAAM,IAAI,IAAA,CAAK,IAAA,EAAM,WAAA,EAAY,GAAI,IAAA,GAAO,MAAA;AAClF,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,IAAI,IAAA,EAAM,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA;AAC1B,MAAA,IAAI,IAAA,EAAM,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,OAAA,EAAS,SAAA,CAAU,EAAE,IAAA,EAAM,IAAA,CAAQ,IAAI,CAAA,EAAG,CAAC,CAAA;AACvE,MAAA,IAAA,GAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,aAAa,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,EAClD;AACA,EAAA,IAAI,IAAA,EAAM,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA;AAE1B,EAAA,MAAM,EAAE,aAAY,GAAI,eAAA,CAAgB,MAAM,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAC1D,EAAA,MAAM,KAAA,GAA2B,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACvD,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAG,CAAA,CAAE,EAAA,GAAK,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,EAAA,EAAI,KAAA,EAAO,EAAE,EAAA,GAAK,CAAA,CAAE,IAAI,MAAA,EAAQ,CAAA,CAAE,EAAA,GAAK,CAAA,CAAE,EAAA,EAAG;AAAA,IAC1F,MAAM,CAAA,CAAE;AAAA,GACV,CAAE,CAAA;AACF,EAAA,MAAM,aAAA,CAAc,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AACvC;;;ACjFO,SAAS,YAAY,KAAA,EAA4C;AACtE,EAAA,IAAI,OAAsB,EAAC;AAC3B,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC1C,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM,GAAI,MAAM,CAAC,CAAA;AACnC,IAAA,MAAM,OAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA,EAAG,GAAI,IAAA,CAAK,SAAS,IAAA,GAAO,CAAC,IAAA,CAAK,EAAE,CAAE,CAAE,CAAA;AACzE,IAAA,IAAA,GAAO,KAAA,GAAQ,CAAC,EAAE,GAAG,OAAO,QAAA,EAAU,IAAA,EAAM,CAAA,GAAI,IAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,IAAA,CAAK,KAAc,MAAA,EAAsB;AACvD,EAAA,GAAA,CAAI,QAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,QAAQ,CAAA;AAC9C;AAGO,SAAS,SAAS,GAAA,EAAiC;AACxD,EAAA,OAAOL,IAAAA,CAAK,UAAA,CAAW,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,EAAA,EAAI,CAAA,EAAG,GAAA,CAAI,MAAM,CAAC,CAAA;AACrD;AAEA,SAAS,QAAA,CAAS,GAAA,EAAc,IAAA,EAAc,MAAA,EAAsB;AAClE,EAAA,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,SAAA,CAAU,IAAA,EAAM,MAAM,CAAC,CAAA,CAAE,CAAA;AAC9D;AAEA,SAAS,eAAA,CAAgB,GAAA,EAAc,GAAA,EAAsB,KAAA,EAAkB,KAAA,EAA2B;AACxG,EAAA,MAAM,KAAK,YAAA,CAAa,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,IAAI,IAAI,CAAA;AACnD,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,GAAA,CAAI,GAAG,WAAA,CAAY,GAAA,EAAK,IAAI,IAAI,CAAA,GAAI,OAAO,GAAG,CAAA;AAC9C,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,IAAI,EAAA,CAAG,QAAQ,CAAA,EAAG,QAAA,CAAS,KAAK,EAAA,CAAG,KAAA,EAAO,GAAG,KAAK,CAAA;AAClD,EAAA,IAAI,EAAA,CAAG,MAAA,EAAQ,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAGA,IAAAA,CAAK,QAAA,CAAS,EAAA,CAAG,MAAM,CAAC,CAAA;AACvD,EAAA,IAAI,EAAA,CAAG,UAAU,GAAA,CAAI,EAAA,CAAG,MAAM,CAAA,CAAA,EAAI,EAAA,CAAG,QAAQ,CAAA,CAAE,CAAA;AAC/C,EAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,CAAA,CAAA,EAAI,EAAA,CAAG,OAAO,CAAA,CAAE,CAAA;AAC7B,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAEA,SAAS,gBAAA,CAAiB,GAAA,EAAc,GAAA,EAAsB,KAAA,EAAkB,KAAA,EAA0B;AACxG,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAChD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA,CAAK,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,gBAAA,CAAkB,CAAA;AAC5E,EAAA,MAAM,KAAA,GAAA,CAAS,KAAA,CAAM,OAAA,IAAW,CAAA,IAAK,KAAA,CAAM,KAAA;AAC3C,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,QAAA,CAAS,GAAA,EAAK,OAAO,KAAK,CAAA;AAC1B,EAAA,GAAA,CAAI,EAAA,CAAG,MAAM,UAAU,CAAA;AACvB,EAAA,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAC3B,EAAA,GAAA,CAAI,GAAG,WAAA,CAAY,GAAA,EAAK,IAAI,IAAI,CAAA,GAAI,OAAO,GAAG,CAAA;AAC9C,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAEA,eAAe,SAAA,CAAU,GAAA,EAAc,GAAA,EAAsB,KAAA,EAAiC;AAC5F,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,EAAM,KAAA;AACxB,EAAA,IAAI,CAAC,KAAA,EAAO;AACZ,EAAA,IAAIQ,eAAAA,CAAgB,KAAK,CAAA,EAAG,OAAO,gBAAgB,GAAA,EAAK,GAAA,EAAK,OAAO,KAAK,CAAA;AACzE,EAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW,OAAO,iBAAiB,GAAA,EAAK,GAAA,EAAK,OAAO,KAAK,CAAA;AAE5E,EAAA,IAAI,CAACF,YAAAA,CAAa,KAAK,CAAA,EAAG,OAAO,WAAW,GAAA,EAAK,GAAA,EAAK,KAAA,EAAQ,KAAA,CAA2B,IAAI,CAAA;AAC7F,EAAA,IAAI,GAAA,CAAI,YAAA,EAAc,MAAA,EAAQ,IAAA,CAAK,KAAK,kDAAkD,CAAA;AAC1F,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,UAAA,CAAW,OAAO,KAAK,CAAA;AAC9C,EAAA,MAAM,EAAE,KAAI,GAAI,GAAA;AAChB,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACV,EAAA,QAAA,CAAS,GAAA,EAAK,OAAO,KAAK,CAAA;AAC1B,EAAA,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAG,GAAG,CAAA;AACnB,EAAA,GAAA,CAAI,GAAG,WAAA,CAAY,GAAA,EAAK,IAAI,IAAI,CAAA,GAAI,OAAO,GAAG,CAAA;AAC9C,EAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AACZ;AAEA,eAAe,SAAA,CAAU,GAAA,EAAc,GAAA,EAAsB,KAAA,EAAiC;AAC5F,EAAA,MAAM,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AAC/B,EAAA,IAAI,GAAA,CAAI,QAAQ,MAAM,WAAA,CAAY,KAAK,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA;AACpE;AAEA,eAAe,YAAA,CAAa,GAAA,EAAc,GAAA,EAAkB,KAAA,EAAiC;AAC3F,EAAA,IAAI,IAAI,IAAA,KAAS,MAAA,QAAc,SAAA,CAAU,GAAA,EAAK,KAAK,KAAK,CAAA;AAAA,OAAA,IAC/C,IAAI,IAAA,KAAS,OAAA,QAAe,UAAA,CAAW,GAAA,EAAK,KAAK,KAAK,CAAA;AAAA,OAAA,IACtD,GAAA,CAAI,SAAS,OAAA,IAAW,GAAA,CAAI,SAAS,SAAA,EAAW,UAAA,CAAW,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AAAA,OAAA,IAC1E,IAAI,IAAA,KAAS,MAAA,QAAcC,UAAAA,CAAU,GAAA,EAAK,KAAK,KAAK,CAAA;AAAA,OACxD,MAAM,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AACxC;AAMA,eAAsB,aAAA,CACpB,GAAA,EAAc,IAAA,EAA8B,KAAA,EAAkB,KAAA,EAC/C;AACf,EAAA,MAAM,IAAA,GAAkB,EAAE,IAAA,EAAM,EAAA,EAAI,GAAG,KAAA,EAAM;AAC7C,EAAA,GAAA,CAAI,KAAA,CAAM,KAAK,IAAI,CAAA;AACnB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,EAAA,GAAK,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,EAAA,EAAA,EAAM,MAAM,QAAA,CAAS,GAAA,EAAK,IAAA,CAAK,IAAA,CAAK,EAAE,GAAI,KAAK,CAAA;AAAA,EACpF,CAAA,SAAE;AACA,IAAA,GAAA,CAAI,MAAM,GAAA,EAAI;AAAA,EAChB;AACF;AAEA,eAAe,QAAA,CAAS,GAAA,EAAc,GAAA,EAAkB,KAAA,EAAiC;AACvF,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,IAAA,EAAK;AAC1B,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAK;AAChC,EAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAQ,MAAA;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,YAAA,CAAa,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AAAA,EACpC,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,EAAE,GAAA,YAAe,eAAA,CAAA,EAAkB,MAAM,GAAA;AAC7C,IAAA,GAAA,CAAI,GAAA,CAAI,SAAS,IAAI,CAAA;AACrB,IAAA,GAAA,CAAI,OAAA,CAAQ,UAAU,MAAM,CAAA;AAC5B,IAAA,GAAA,CAAI,QAAQ,MAAA,GAAS,KAAA;AACrB,IAAA,IAAA,CAAK,GAAA,EAAK,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,4BAAA,CAA8B,CAAA;AAAA,EACrD;AACF;;;ACrJA,IAAM,IAAA,GAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AACpF,IAAM,WAAW,CAAC,MAAA,EAAQ,QAAQ,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAGhE,IAAM,qBAAA,GAAwB,CAAA;AAC9B,IAAM,eAAA,GAAkB,CAAA;AACxB,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,wBAAA,GAA2B,EAAA;AACjC,IAAM,oBAAA,GAAuB,GAAA;AAI7B,SAAS,WAAW,IAAA,EAA2B;AAC7C,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,IAAI,CAAA;AAC9B,EAAA,MAAM,GAAA,uBAAkB,GAAA,EAAI;AAC5B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,SAAA,CAAU,CAAC,GAAG,CAAA,EAAA,EAAK;AAC1C,IAAA,MAAM,EAAA,GAAK,KAAK,CAAA,GAAI,EAAA;AACpB,IAAA,MAAM,GAAA,GAAM,OAAO,YAAA,CAAa,GAAG,IAAI,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,CAAC,CAAC,CAAA;AAC9D,IAAA,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,IAAI,UAAA,CAAW,MAAM,IAAA,CAAK,SAAA,CAAU,EAAA,GAAK,CAAC,GAAG,IAAA,CAAK,SAAA,CAAU,EAAA,GAAK,EAAE,CAAC,CAAC,CAAA;AAAA,EACpF;AACA,EAAA,KAAA,MAAW,GAAA,IAAO,QAAA,EAAU,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,GAAG,CAAA,OAAA,CAAS,CAAA;AAC3G,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,MAAA,GAAS,CAAC,CAAA,KAAkB,IAAI,QAAA,CAAS,EAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAU,CAAA;AAGnF,SAAS,WAAA,CAAY,GAAW,SAAA,EAAuC;AACrE,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,CAAE,GAAA,CAAI,MAAM,CAAE,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,GAAA,CAAI,MAAM,CAAE,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,KAAM,CAAA;AACrD,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAAe,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAClF,EAAA,OAAO,MAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,SAAA,IAAa,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;AACvE;AAGA,SAAS,aAAa,KAAA,EAA6B;AACjD,EAAA,IAAI,KAAA,CAAM,UAAA,GAAa,EAAA,EAAI,OAAO,EAAC;AACnC,EAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,EAAA,IAAI,EAAE,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA,SAAU,EAAC;AAChC,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAI,EAAA,GAAK,EAAA;AACT,EAAA,WAAS;AACP,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,SAAA,CAAU,EAAE,CAAA;AAC5B,IAAA,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,SAAA,CAAU,EAAA,GAAK,CAAC,CAAC,CAAA;AAC5B,IAAA,EAAA,IAAM,CAAA,IAAK,KAAA,GAAQ,qBAAA,GAAwB,CAAA,GAAI,CAAA,CAAA;AAC/C,IAAA,IAAI,KAAA,GAAQ,iBAAiB,EAAA,IAAM,CAAA;AAAA,SAAA,IAC1B,KAAA,GAAQ,0BAA0B,EAAA,IAAM,CAAA;AAAA,SAAA,IACxC,KAAA,GAAQ,sBAAsB,EAAA,IAAM,CAAA;AAC7C,IAAA,IAAI,EAAE,KAAA,GAAQ,eAAA,CAAA,EAAkB,OAAO,GAAA;AAAA,EACzC;AACF;AAGA,SAAS,OAAA,CAAQ,IAAA,EAAwB,IAAA,EAAkB,MAAA,EAAyC;AAClG,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAG,GAAG,IAAI,CAAA;AACzB,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,EAAI;AACtB,IAAA,IAAI,IAAA,CAAK,IAAI,GAAG,CAAA,IAAK,MAAM,CAAA,IAAK,GAAA,IAAO,OAAO,MAAA,EAAQ;AACtD,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,OAAO,GAAG,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,YAAA,CAAa,IAAA,CAAK,SAAS,KAAA,EAAO,GAAG,CAAC,CAAC,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,SAAS,CAAA,EAAuB;AACvC,EAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,UAAA,EAAY,CAAA,IAAK,CAAA,EAAG,GAAA,GAAO,GAAA,GAAM,CAAA,CAAE,SAAA,CAAU,CAAC,CAAA,KAAO,CAAA;AAC3E,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,IAAA,GAAO,CAAC,CAAA,KAAe,CAAA,GAAI,IAAK,EAAC;AAGvC,SAAS,UAAU,MAAA,EAA4B;AAC7C,EAAA,MAAM,OAAO,CAAC,GAAG,OAAO,IAAA,EAAM,EAAE,IAAA,EAAK;AACrC,EAAA,MAAM,QAAA,GAAW,EAAA,GAAK,IAAA,CAAK,MAAA,GAAS,EAAA;AACpC,EAAA,IAAI,KAAA,GAAQ,QAAA;AACZ,EAAA,KAAA,MAAW,GAAA,IAAO,MAAM,KAAA,IAAS,IAAA,CAAK,OAAO,GAAA,CAAI,GAAG,EAAG,UAAU,CAAA;AACjE,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAK,CAAA;AAChC,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,CAAA,CAAE,SAAA,CAAU,GAAG,KAAU,CAAA;AACzB,EAAA,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA,CAAM,KAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA;AACvD,EAAA,MAAM,WAAA,GAAc,KAAK,aAAA,GAAgB,EAAA;AACzC,EAAA,CAAA,CAAE,SAAA,CAAU,GAAG,WAAW,CAAA;AAC1B,EAAA,CAAA,CAAE,SAAA,CAAU,GAAG,aAAa,CAAA;AAC5B,EAAA,CAAA,CAAE,SAAA,CAAU,EAAA,EAAI,IAAA,CAAK,MAAA,GAAS,KAAK,WAAW,CAAA;AAC9C,EAAA,IAAI,MAAA,GAAS,QAAA;AACb,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AACvB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,KAAK,CAAA,GAAI,EAAA;AACrB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,GAAA,CAAI,GAAA,GAAM,CAAC,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC3D,IAAA,GAAA,CAAI,GAAA,CAAI,MAAM,MAAM,CAAA;AACpB,IAAA,CAAA,CAAE,SAAA,CAAU,GAAA,GAAM,CAAA,EAAG,QAAA,CAAS,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,UAAU,CAAC,CAAC,CAAC,CAAA;AACnF,IAAA,CAAA,CAAE,SAAA,CAAU,GAAA,GAAM,CAAA,EAAG,MAAM,CAAA;AAC3B,IAAA,CAAA,CAAE,SAAA,CAAU,GAAA,GAAM,EAAA,EAAI,IAAA,CAAK,UAAU,CAAA;AACrC,IAAA,IAAI,GAAA,KAAQ,QAAQ,MAAA,GAAS,MAAA;AAC7B,IAAA,MAAA,IAAU,IAAA,CAAK,KAAK,UAAU,CAAA;AAAA,EAChC,CAAC,CAAA;AACD,EAAA,CAAA,CAAE,UAAU,MAAA,GAAS,CAAA,EAAI,aAAa,QAAA,CAAS,GAAG,MAAO,CAAC,CAAA;AAC1D,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,cAAA,CAAe,MAAmB,IAAA,EAAoC;AACpF,EAAA,MAAM,CAAA,GAAI,WAAW,IAAI,CAAA;AACzB,EAAA,MAAM,SAAA,GAAY,OAAO,CAAA,CAAE,GAAA,CAAI,MAAM,CAAE,CAAA,CAAE,UAAU,CAAC,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACzB,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAA,EAAG,SAAS,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA,GAAI,CAAA;AAElC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,CAAG,CAAC,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,CAAG,CAAC,CAAC,CAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,SAAS,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAA,CAAY,KAAA,GAAQ,KAAK,CAAC,CAAA;AAC9C,EAAA,MAAM,IAAA,GAAO,OAAO,OAAO,CAAA;AAC3B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,KAAA,EAAO,GAAA,EAAA,EAAO;AACpC,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,GAAM,CAAA,EAAG,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACpB,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,OAAO,GAAG,CAAA;AAC/B,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,GAAG,GAAG,MAAM,CAAA;AAC7C,IAAA,MAAA,IAAU,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EAC5B;AACA,EAAA,IAAA,CAAK,SAAA,CAAU,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAA;AAGhC,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,MAAM,EAAG,KAAA,EAAM;AAClC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,CAAA,CAAE,GAAA,CAAI,MAAM,CAAE,CAAA;AACpC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAI,CAAA,CAAE,UAAU,EAAE,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAA;AACrC,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,KAAA,EAAO,GAAA,EAAA,EAAO;AACpC,IAAA,MAAM,OAAA,GAAU,OAAO,SAAA,CAAU,IAAA,CAAK,IAAI,GAAA,EAAK,WAAA,GAAc,CAAC,CAAA,GAAI,CAAC,CAAA;AACnE,IAAA,MAAM,GAAA,GAAM,GAAA,GAAM,WAAA,GAAc,MAAA,CAAO,SAAS,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,GAAI,OAAO,QAAA,CAAS,WAAA,GAAc,CAAA,GAAA,CAAK,GAAA,GAAM,eAAe,CAAC,CAAA;AACxH,IAAA,MAAA,CAAO,IAAI,CAAA,CAAE,SAAA,CAAU,GAAA,GAAM,GAAG,OAAO,CAAA;AACvC,IAAA,MAAA,CAAO,IAAI,CAAA,CAAE,QAAA,CAAS,GAAA,GAAM,CAAA,GAAI,GAAG,GAAG,CAAA;AAAA,EACxC;AACA,EAAA,MAAA,CAAO,IAAI,CAAA,CAAE,SAAA,CAAU,EAAA,EAAI,KAAK,CAAA;AAEhC,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,MAAM,EAAG,KAAA,EAAM;AAClC,EAAA,MAAA,CAAO,IAAI,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AAC3B,EAAA,MAAA,CAAO,IAAI,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,CAAC,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,MAAM,EAAG,KAAA,EAAM;AAClC,EAAA,MAAA,CAAO,IAAI,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AAE/B,EAAA,MAAM,GAAA,uBAAkB,GAAA,CAAI;AAAA,IAC1B,CAAC,QAAQ,OAAO,CAAA;AAAA,IAAG,CAAC,QAAQ,IAAI,CAAA;AAAA,IAAG,CAAC,QAAQ,IAAI,CAAA;AAAA,IAAG,CAAC,QAAQ,IAAI,CAAA;AAAA,IAAG,CAAC,QAAQ,OAAO,CAAA;AAAA,IAAG,CAAC,QAAQ,IAAI;AAAA,GACpG,CAAA;AACD,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,IAAK,CAAA,CAAE,GAAA,CAAI,GAAG,GAAG,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAE,CAAA;AACjF,EAAA,OAAO,UAAU,GAAG,CAAA;AACtB;;;AChJA,IAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAGhC,IAAM,OAAA,GAAU,QAAA;AAEhB,SAAS,YAAA,CAAa,CAAA,EAAkB,MAAA,EAAgB,MAAA,EAAgB,KAAA,EAA0B;AAChG,EAAA,MAAM,OAAO,CAAC,CAAA,KAAc,CAAA,CAAE,OAAA,CAAQ,oBAAoB,EAAE,CAAA;AAC5D,EAAA,OAAO,IAAA,CAAK,CAAA,CAAE,cAAc,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AACtE;AAGA,SAAS,UAAU,IAAA,EAAgC;AACjD,EAAA,IAAI,CAAA,GAAI,UAAA;AACR,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,GAAG,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA,GAAI,GAAA,EAAK,QAAU,CAAA,KAAM,CAAA;AAC1F,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,EAAE,GAAG,GAAA,IAAO,MAAA,CAAO,YAAA,CAAa,EAAA,GAAM,IAAI,EAAG,CAAA;AAC5F,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,OAAN,MAAmC;AAAA,EAQjC,WAAA,CACmB,OAAA,EACA,GAAA,EACA,QAAA,EACA,MAAA,EACjB;AAJiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAChB;AAAA,EAJgB,OAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAVV,IAAA,uBAAW,GAAA,EAAY;AAAA;AAAA,EAEvB,OAAA,uBAAc,GAAA,EAAoB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EASlB,IAAI,GAAA,GAAc;AAChB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,8CAA8C,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,EAAA,EAA2B;AAC7B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,EAAE,CAAA;AACpC,IAAA,OAAO,GAAA,KAAQ,IAAA,IAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,OAAO,aAAA,CAAc,EAAE,CAAC,CAAA,GAAI,GAAA,GAAM,IAAA;AAAA,EAC9E;AAAA,EAEA,QAAA,CAAS,KAAaN,KAAAA,EAAwB;AAC5C,IAAA,IAAI,GAAA,KAAQ,GAAG,OAAO,KAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,IAAI,GAAG,CAAA;AACjB,IAAA,IAAIA,KAAAA,KAAS,MAAA,IAAa,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAKA,KAAI,CAAA;AAC5E,IAAA,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAM;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,GAAA,EAAiC;AACvC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKQ,QAAA,GAAgC;AACtC,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AAChC,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AACpE,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,QAAQ,GAAA,EAAqB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAO,IAAA,CAAK,GAAA,CAAI,cAAA,CAAe,GAAG,CAAA,GAAI,GAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAAA,EAC/E;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,OAAA,EAAS;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,MAAM,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI,IAAA;AACzB,IAAA,MAAM,CAAA,GAAI,MAAO,GAAA,CAAI,UAAA;AACrB,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,EAAM;AAC3B,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,EAAM;AACjC,IAAA,MAAM,GAAA,GAAM,QAAQ,KAAA,EAAM;AAC1B,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,EAAM;AAChC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAI,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAC3F,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,CAAA,GAAK,IAAA,CAAK,QAAA;AACjF,IAAA,OAAA,CAAQ,eAAe,IAAA,EAAM,EAAE,SAAS,OAAA,CAAQ,UAAA,IAAc,OAAO,CAAA;AACrE,IAAA,OAAA,CAAQ,cAAA,CAAe,SAAA,EAAW,EAAC,EAAG,OAAA,CAAQ,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,QAAA,EAAU,CAAC,CAAC,CAAA;AACpF,IAAA,OAAA,CAAQ,IAAI,UAAA,EAAY;AAAA,MACtB,IAAA,EAAM,KAAK,gBAAgB,CAAA;AAAA,MAC3B,QAAA,EAAU,KAAK,QAAQ,CAAA;AAAA,MACvB,KAAA,EAAO,CAAA;AAAA,MACP,UAAU,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,MAAO,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,GAAI,KAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAE,CAAA;AAAA,MAC/E,aAAa,GAAA,CAAI,WAAA;AAAA,MACjB,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,MACjC,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,MACnC,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA,MACvC,KAAA,EAAO,EAAA;AAAA;AAAA,MACP,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,MAAM,SAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,GAAA,IAAO,CAAC,GAAG,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA,SAAU,IAAA,CAAK,GAAA,EAAK,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAC,CAAA;AAC5F,IAAA,OAAA,CAAQ,IAAI,GAAA,EAAK;AAAA,MACf,IAAA,EAAM,KAAK,MAAM,CAAA;AAAA,MACjB,OAAA,EAAS,KAAK,cAAc,CAAA;AAAA,MAC5B,QAAA,EAAU,KAAK,QAAQ,CAAA;AAAA,MACvB,aAAA,EAAe,EAAE,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA,EAAG,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA,EAAG,UAAA,EAAY,CAAA,EAAE;AAAA,MACpF,cAAA,EAAgB,UAAA;AAAA,MAChB,WAAA,EAAa,KAAK,UAAU,CAAA;AAAA,MAC5B,CAAA,EAAG;AAAA,KACJ,CAAA;AACD,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAA,EAAS;AAAA,MACxB,IAAA,EAAM,KAAK,MAAM,CAAA;AAAA,MACjB,OAAA,EAAS,KAAK,OAAO,CAAA;AAAA,MACrB,QAAA,EAAU,KAAK,QAAQ,CAAA;AAAA,MACvB,QAAA,EAAU,KAAK,YAAY,CAAA;AAAA,MAC3B,eAAA,EAAiB,CAAC,GAAG,CAAA;AAAA,MACrB,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AACF,CAAA;AAGO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,WAAA,CACmB,OAAA,EACA,MAAA,EAEA,MAAA,GAAS,IAAA,EAC1B;AAJiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAChB;AAAA,EAJgB,OAAA;AAAA,EACA,MAAA;AAAA,EAEA,MAAA;AAAA,EANF,KAAA,uBAAY,GAAA,EAAkC;AAAA;AAAA,EAU/D,IAAA,CAAK,MAAA,EAAgB,MAAA,EAAgB,KAAA,EAAgD;AACnF,IAAA,MAAM,MAAM,IAAA,CAAK,SAAA,CAAU,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAC,CAAA;AAClD,IAAA,IAAI,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,CAAA,EAAG;AACN,MAAA,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,MAAc,IAAA,CAAK,MAAA,EAAgB,MAAA,EAAgB,KAAA,EAAwC;AACzF,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,IACzD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,OAAO,GAAA,CAAI,QAAA,KAAa,cAAc,CAAC,GAAA,CAAI,YAAY,OAAO,IAAA;AACnE,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,GAAA,EAAK,YAAA,CAAa,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EAC1F;AAAA;AAAA,EAGA,MAAM,MAAA,GAAwB;AAC5B,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,KAAA,CAAM,MAAA,IAAU,CAAC,MAAM,IAAI,KAAA,EAAM;AAAA,EACxD;AACF,CAAA;;;AC9GO,SAAS,QAAA,CAAS,OAA2B,IAAA,EAA2C;AAC7F,EAAA,OAAO,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,OAAW,CAAA;AAC9C;AAGA,eAAsB,YAAA,CACpB,KAAA,EACA,IAAA,EACAF,QAAAA,EACoB;AACpB,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,yCAAyC,CAAA;AACjF,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,EAAW;AAC/B,EAAA,MAAM,OAAA,GAAU,QAAQ,KAAA,EAAM;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,EAAM;AAC3B,EAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,EAAM;AAC3B,EAAA,MAAM,UAAqB,EAAC;AAC5B,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,OAAA,EAAS,KAAK,KAAA,EAAO,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC/E,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAwB;AAE1C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,OAAA,GAAU,QAAQ,KAAA,EAAM;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,EAAM;AACjC,IAAA,MAAM,GAAA,GAAe;AAAA,MACnB,OAAA;AAAA,MACA,SAAA,EAAW,IAAI,aAAA,EAAc;AAAA,MAC7B,GAAA,EAAK,IAAI,aAAA,EAAc;AAAA,MACvB,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAO,EAAC;AAAA,MACR;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,GAAA,CAAI,GAAG,IAAA,EAAM,GAAGC,KAAK,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACjD,IAAA,MAAM,aAAA,CAAc,GAAA,EAAK,IAAA,CAAK,QAAA,EAAU,EAAE,SAAA,EAAWA,IAAAA,CAAK,QAAA,EAAS,EAAG,KAAA,EAAO,CAAA,EAAG,WAAA,EAAa,MAAM,CAAA;AACnG,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,KAAA,EAAM;AAC1B,IAAA,OAAA,CAAQ,cAAA,CAAe,UAAA,EAAY,EAAC,EAAG,GAAG,CAAA;AAC1C,IAAA,OAAA,CAAQ,IAAI,OAAA,EAAS;AAAA,MACnB,IAAA,EAAM,KAAK,MAAM,CAAA;AAAA,MACjB,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,CAAC,CAAA,EAAG,GAAG,IAAA,CAAK,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,MACxC,QAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,GAAA,CAAI,SAAA,CAAU,IAAA;AAAK,KAC/B,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EACnB;AAEA,EAAA,MAAM,CAAC,MAAM,CAAA,GAAI,MAAM,IAAA,KAAS,CAAA,GAAI,QAAQ,EAAC;AAC7C,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,MAAA;AAC1B,EAAA,OAAA,CAAQ,IAAI,OAAA,EAAS,EAAE,IAAA,EAAM,IAAA,CAAK,SAAS,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,SAAS,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,IAAI,GAAG,CAAA;AAC9G,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,MAAA,EAAQ,CAAA;AACzE,EAAA,OAAA,CAAQ,IAAI,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,KAAA,KAAU,SAAY,MAAA,GAAY,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;AAC9G,EAAA,MAAM,MAAM,MAAA,EAAO;AACnB,EAAA,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,QAAA,KAAa,OAAOD,QAAO,CAAA;AACrD,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,UAAU,OAAA,EAAS,IAAI,GAAG,OAAA,EAAQ;AAC5D","file":"index.js","sourcesContent":["import { type FaceEmbedding, type FontStyle, fontEmbedding, glyphOutline } from '@weasel-js/font';\n\n/** Where the writer gets the font faces it embeds and the glyph outlines it falls back to; `registryFontSource` reads the font registry. */\nexport interface PdfFontSource {\n embedding(family: string, weight: number, style: FontStyle): Promise<FaceEmbedding | null>;\n /** Em-space SVG path data, as glyphOutline answers it. */\n outline(family: string, weight: number, style: FontStyle, cp: number): string | null;\n}\n\n/** The faces registered with `@weasel-js/font`. */\nexport const registryFontSource: PdfFontSource = {\n embedding: fontEmbedding,\n outline: glyphOutline,\n};\n","/** Each char code as one byte: PDF syntax is ASCII, and binary strings here hold one byte per code. */\nexport function latin1Bytes(s: string): Uint8Array {\n return Uint8Array.from(s, (c) => c.charCodeAt(0));\n}\n\n/** The inverse of `latin1Bytes`. */\nexport function latin1(b: Uint8Array): string {\n let s = '';\n for (let i = 0; i < b.length; i++) s += String.fromCharCode(b[i] as number);\n return s;\n}\n","/** What `num` throws for NaN or an infinity; `writeCommands` drops the command that wrote one. */\nexport class NonFiniteNumber extends Error {}\n\n/** A PDF number: at most four decimals, never an exponent. */\nexport function num(n: number): string {\n if (!Number.isFinite(n)) throw new NonFiniteNumber(`pdf: cannot write non-finite number ${n}`);\n // toFixed falls back to exponent form from 1e21.\n if (Math.abs(n) >= 1e21) return BigInt(n).toString();\n const s = n.toFixed(4).replace(/\\.?0+$/, '');\n return s === '-0' || s === '' ? '0' : s;\n}\n","import { latin1Bytes } from './latin1';\nimport { num } from './num';\n\n/** A page's content stream, built one operator per line. */\nexport class ContentStream {\n private readonly lines: string[] = [];\n\n /** Numbers are written with `num`; strings go in as given, so a name operand is `'/GS1'`. */\n op(operator: string, ...operands: (number | string)[]): this {\n const args = operands.map((o) => (typeof o === 'number' ? num(o) : o));\n this.lines.push(args.length ? `${args.join(' ')} ${operator}` : operator);\n return this;\n }\n\n /** Where the stream ends now, for `rollback`. */\n mark(): number {\n return this.lines.length;\n }\n\n /** Drops every operator written since `mark` answered `at`. */\n rollback(at: number): void {\n this.lines.length = at;\n }\n\n bytes(): Uint8Array {\n return latin1Bytes(`${this.lines.join('\\n')}\\n`);\n }\n}\n","/** Zlib-wrapped deflate, as a PDF `FlateDecode` stream wants it. */\nexport async function deflate(data: Uint8Array): Promise<Uint8Array> {\n const stream = new Blob([data as BlobPart]).stream().pipeThrough(new CompressionStream('deflate'));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n","import { parseColor, type SolidPaint } from '@weasel-js/paint';\nimport { applyColorMatrix, composeColorMatrix } from '@weasel-js/renderer';\nimport type { DrawState } from './drawCommands';\n\nexport type Rgba = [number, number, number, number];\n\n/** A row-major 4x5 matrix on straight rgba in 0..1, clamped; null is identity. Group alpha is not part of it. */\nexport function foldColor(rgba: readonly [number, number, number, number], m: readonly number[] | null): Rgba {\n const [r, g, b, a] = rgba;\n return m ? applyColorMatrix(m, r, g, b, a) : [r, g, b, a];\n}\n\n/** `inner` applied first, then `outer`: the order the renderer's group stack composes them in. */\nexport function composeMatrix(outer: readonly number[] | null, inner: readonly number[] | undefined): number[] | null {\n if (!inner) return outer ? [...outer] : null;\n if (!outer) return [...inner];\n return composeColorMatrix(outer, inner, new Array<number>(20));\n}\n\n/** Every color the writer emits comes through here, so a color matrix has one place to apply. */\nexport function colorFor(color: string | readonly [number, number, number, number], state: DrawState): Rgba {\n return foldColor(typeof color === 'string' ? parseColor(color) : color, state.colorMatrix);\n}\n\n/** A solid paint's color under `state`, and the alpha it paints at: its own, its opacity's and the group's. */\nexport function solidColor(paint: SolidPaint, state: DrawState): { rgb: [number, number, number]; alpha: number } {\n const [r, g, b, a] = colorFor(paint.color, state);\n return { rgb: [r, g, b], alpha: a * (paint.opacity ?? 1) * state.alpha };\n}\n\n/** Every image pixel comes through here, so a color matrix has one place to apply. Straight RGBA in, straight RGBA out. */\nexport function foldPixels(data: Uint8ClampedArray, state: DrawState): Uint8ClampedArray {\n if (!state.colorMatrix) return data;\n const out = new Uint8ClampedArray(data.length);\n for (let i = 0; i + 3 < data.length; i += 4) {\n const [r, g, b, a] = foldColor(\n [data[i] / 255, data[i + 1] / 255, data[i + 2] / 255, data[i + 3] / 255],\n state.colorMatrix,\n );\n out[i] = r * 255;\n out[i + 1] = g * 255;\n out[i + 2] = b * 255;\n out[i + 3] = a * 255;\n }\n return out;\n}\n","import { latin1Bytes as latin1 } from './latin1';\nimport { num } from './num';\n\nexport class PdfName {\n constructor(readonly value: string) {}\n}\nexport class PdfRef {\n constructor(readonly id: number) {}\n}\nexport class PdfText {\n constructor(readonly value: string) {}\n}\nexport class PdfBytes {\n constructor(readonly value: Uint8Array) {}\n}\n\nexport type PdfValue =\n | number\n | boolean\n | null\n | PdfName\n | PdfRef\n | PdfText\n | PdfBytes\n | readonly PdfValue[]\n | PdfDict;\nexport interface PdfDict {\n readonly [key: string]: PdfValue | undefined;\n}\n\n/** Serializes as `/n`, escaping delimiters and anything outside printable ASCII as `#xx`. */\nexport function name(n: string): PdfName {\n return new PdfName(n);\n}\n/** Serializes as `(…)` when ASCII-safe, else as UTF-16BE hex with a byte-order mark. */\nexport function text(s: string): PdfText {\n return new PdfText(s);\n}\n/** Serializes as `<hex>`. */\nexport function bytes(b: Uint8Array): PdfBytes {\n return new PdfBytes(b);\n}\n\nconst hex2 = (b: number) => b.toString(16).toUpperCase().padStart(2, '0');\n\nfunction writeName(n: string): string {\n let out = '/';\n for (const b of new TextEncoder().encode(n)) {\n const ch = String.fromCharCode(b);\n out += b < 33 || b > 126 || '#()<>[]{}/%'.includes(ch) ? `#${hex2(b)}` : ch;\n }\n return out;\n}\n\nfunction writeText(s: string): string {\n if (/^[\\x20-\\x7e]*$/.test(s)) return `(${s.replace(/[\\\\()]/g, '\\\\$&')})`;\n let out = '<FEFF';\n for (let i = 0; i < s.length; i++) out += s.charCodeAt(i).toString(16).toUpperCase().padStart(4, '0');\n return `${out}>`;\n}\n\nfunction write(v: PdfValue): string {\n if (v === null) return 'null';\n if (typeof v === 'number') return num(v);\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n if (v instanceof PdfName) return writeName(v.value);\n if (v instanceof PdfRef) return `${v.id} 0 R`;\n if (v instanceof PdfText) return writeText(v.value);\n if (v instanceof PdfBytes) return `<${Array.from(v.value, hex2).join('')}>`;\n if (Array.isArray(v)) return `[${(v as readonly PdfValue[]).map(write).join(' ')}]`;\n return writeDict(v as PdfDict);\n}\n\n/** `d` as PDF syntax, for a dictionary written inline in a content stream. */\nexport function writeDict(d: PdfDict): string {\n const parts: string[] = [];\n for (const [k, v] of Object.entries(d)) if (v !== undefined) parts.push(`${writeName(k)} ${write(v)}`);\n return `<<${parts.join(' ')}>>`;\n}\n\nexport type Deflater = (data: Uint8Array) => Promise<Uint8Array>;\n\nexport class PdfObjects {\n private readonly bodies: (Uint8Array | undefined)[] = [];\n private readonly pending: { ref: PdfRef; dict: PdfDict; data: Uint8Array }[] = [];\n\n alloc(): PdfRef {\n this.bodies.push(undefined);\n return new PdfRef(this.bodies.length);\n }\n\n set(ref: PdfRef, value: PdfValue): void {\n this.bodies[ref.id - 1] = latin1(write(value));\n }\n\n /** Writes `/Length` itself; the caller passes the already-encoded bytes. */\n stream(ref: PdfRef, dict: PdfDict, data: Uint8Array): void {\n const head = latin1(`${writeDict({ ...dict, Length: data.length })}\\nstream\\n`);\n const tail = latin1('\\nendstream');\n const out = new Uint8Array(head.length + data.length + tail.length);\n out.set(head, 0);\n out.set(data, head.length);\n out.set(tail, head.length + data.length);\n this.bodies[ref.id - 1] = out;\n }\n\n /** Like `stream`, but takes the raw bytes: `settle` compresses them (or not) before `serialize`. */\n streamDeflated(ref: PdfRef, dict: PdfDict, data: Uint8Array): void {\n // Written now so a bad number throws inside the command that made the stream.\n writeDict(dict);\n this.pending.push({ ref, dict, data });\n }\n\n /** How many objects are allocated, for `nullUnset`. */\n mark(): number {\n return this.bodies.length;\n }\n\n /** Sets every object allocated since `mark` answered `at` and not yet written to `null`, so a dropped command leaves no hole. */\n nullUnset(at: number): void {\n const waiting = new Set(this.pending.map((p) => p.ref.id));\n for (let id = at + 1; id <= this.bodies.length; id++) {\n if (!this.bodies[id - 1] && !waiting.has(id)) this.set(new PdfRef(id), null);\n }\n }\n\n /** Writes every `streamDeflated` stream, FlateDecode-compressed when `compress` is set. */\n async settle(compress: boolean, deflate: Deflater): Promise<void> {\n for (const { ref, dict, data } of this.pending.splice(0)) {\n if (compress) this.stream(ref, { ...dict, Filter: name('FlateDecode') }, await deflate(data));\n else this.stream(ref, dict, data);\n }\n }\n\n serialize(root: PdfRef, info?: PdfRef): Uint8Array {\n const chunks: Uint8Array[] = [];\n let offset = 0;\n const push = (c: Uint8Array) => {\n chunks.push(c);\n offset += c.length;\n };\n push(Uint8Array.of(...latin1('%PDF-1.7\\n%'), 0xe2, 0xe3, 0xcf, 0xd3, 0x0a));\n const offsets: number[] = [];\n this.bodies.forEach((body, i) => {\n if (!body) throw new Error(`pdf: object ${i + 1} was allocated but never set`);\n offsets.push(offset);\n push(latin1(`${i + 1} 0 obj\\n`));\n push(body);\n push(latin1('\\nendobj\\n'));\n });\n const xref = offset;\n let table = `xref\\n0 ${this.bodies.length + 1}\\n0000000000 65535 f \\n`;\n for (const o of offsets) table += `${String(o).padStart(10, '0')} 00000 n \\n`;\n const trailer = writeDict({ Size: this.bodies.length + 1, Root: root, Info: info });\n push(latin1(`${table}trailer\\n${trailer}\\nstartxref\\n${xref}\\n%%EOF\\n`));\n const out = new Uint8Array(offset);\n let at = 0;\n for (const c of chunks) {\n out.set(c, at);\n at += c.length;\n }\n return out;\n }\n}\n","import { boundsOfPath, type GlMat3, mat3, type Path } from '@weasel-js/geom';\nimport {\n type CommandPaint,\n type CommandPaintUnits,\n gradientGeometry,\n isGradientPaint,\n resolveGradientStops,\n sampleResolvedStops,\n} from '@weasel-js/paint';\nimport { colorFor, type Rgba } from './color';\nimport type { DrawState, PageCtx } from './drawCommands';\nimport { latin1Bytes } from './latin1';\nimport { name, type PdfDict, type PdfRef, type PdfValue } from './objects';\n\ntype Gradient = Extract<CommandPaint, { kind: 'linear-gradient' | 'radial-gradient' | 'conic-gradient' }>;\ntype Box = { x0: number; y0: number; x1: number; y1: number };\ntype Stop = { offset: number; rgba: Rgba };\ntype Segment = { lo: number; hi: number; c0: Rgba; c1: Rgba };\n\n/** What a gradient fill needs in the content stream once its clip is set. */\nexport interface PaintShading {\n shading: string;\n softMask: string | null;\n /** The fill's constant alpha: opacity, group alpha and any alpha every stop shares. */\n alpha: number;\n /** Paint space to the current frame, or `null` when the two are the same. */\n matrix: GlMat3 | null;\n}\n\n/** A non-rgb `interpolate` is sampled into this many stops, which PDF then blends in RGB. */\nconst SAMPLED_STOPS = 64;\nconst CONIC_WEDGES = 360;\n\n/**\n * `paint` as a shading resource for a fill of `path`. `null` for a paint that is not a\n * gradient, and for one whose space has no inverse, which paints nothing.\n */\nexport function paintShading(ctx: PageCtx, paint: CommandPaint, state: DrawState, path: Path): PaintShading | null {\n if (!isGradientPaint(paint)) return null;\n const toFrame = paintToFrame(ctx, paint, state);\n const toPaint = toFrame && mat3.invert(toFrame);\n if (!toFrame || !toPaint) return null;\n const box = paintBox(path, toPaint);\n let segments = rampSegments(stopsOf(paint, state));\n const geometry = geometryOf(paint, box);\n if (geometry.degenerate) segments = [{ lo: 0, hi: 1, c0: segments[0].c0, c1: segments[0].c0 }];\n\n let alpha = (paint.opacity ?? 1) * state.alpha;\n const a0 = segments[0].c0[3];\n const uniform = segments.every((s) => s.c0[3] === a0 && s.c1[3] === a0);\n let softMask: string | null = null;\n if (uniform) alpha *= a0;\n else {\n const mask = writeShading(ctx, geometry, rampFunction(segments, (c) => [c[3]]), 'DeviceGray');\n softMask = ctx.resources.softMask(writeMaskGroup(ctx, mask, box));\n }\n const color = writeShading(ctx, geometry, rampFunction(segments, (c) => [c[0], c[1], c[2]]), 'DeviceRGB');\n return { shading: ctx.resources.shading(color), softMask, alpha, matrix: isIdentity(toFrame) ? null : toFrame };\n}\n\n/** Paint space to the current frame, resolving `units` as the renderer's `gradientSpaceInverse` does. */\nexport function paintToFrame(ctx: PageCtx, paint: { units?: CommandPaintUnits }, state: DrawState): GlMat3 | null {\n if (paint.units === 'local') return mat3.identity();\n const fromPage = mat3.invert(state.transform);\n if (!fromPage) return null;\n return paint.units === 'world' && ctx.view ? mat3.multiply(fromPage, ctx.view) : fromPage;\n}\n\nfunction isIdentity(m: GlMat3): boolean {\n return m[0] === 1 && m[1] === 0 && m[3] === 0 && m[4] === 1 && m[6] === 0 && m[7] === 0;\n}\n\n/** The path's bounds in paint space, grown a unit so nothing on the edge is left out. */\nfunction paintBox(path: Path, toPaint: GlMat3): Box {\n const b = boundsOfPath(path);\n const corners = [\n mat3.apply(toPaint, b.x, b.y),\n mat3.apply(toPaint, b.x + b.width, b.y),\n mat3.apply(toPaint, b.x, b.y + b.height),\n mat3.apply(toPaint, b.x + b.width, b.y + b.height),\n ];\n const xs = corners.map((c) => c[0]);\n const ys = corners.map((c) => c[1]);\n return { x0: Math.min(...xs) - 1, y0: Math.min(...ys) - 1, x1: Math.max(...xs) + 1, y1: Math.max(...ys) + 1 };\n}\n\nfunction stopsOf(paint: Gradient, state: DrawState): Stop[] {\n const resolved = resolveGradientStops(paint.stops);\n const space = paint.interpolate ?? 'rgb';\n if (resolved.length === 0) return [{ offset: 0, rgba: colorFor([0, 0, 0, 0], state) }];\n if (space === 'rgb') return resolved.map((s) => ({ offset: s.offset, rgba: colorFor(s.rgba, state) }));\n return Array.from({ length: SAMPLED_STOPS }, (_, i) => {\n const t = i / (SAMPLED_STOPS - 1);\n return { offset: t, rgba: colorFor(sampleResolvedStops(resolved, t, space), state) };\n });\n}\n\nconst lerp = (a: Rgba, b: Rgba, f: number): Rgba => a.map((v, i) => v + (b[i] - v) * f) as Rgba;\n\n/** The ramp over 0..1 as linear pieces, flat past either end stop, with no piece of zero width. */\nfunction rampSegments(stops: Stop[]): Segment[] {\n const first = stops[0];\n const last = stops[stops.length - 1];\n const raw: Segment[] = [];\n if (first.offset > 0) raw.push({ lo: Math.min(0, first.offset), hi: first.offset, c0: first.rgba, c1: first.rgba });\n for (let i = 0; i < stops.length - 1; i++) {\n const a = stops[i];\n const b = stops[i + 1];\n raw.push({ lo: a.offset, hi: b.offset, c0: a.rgba, c1: b.rgba });\n }\n if (last.offset < 1) raw.push({ lo: last.offset, hi: Math.max(1, last.offset), c0: last.rgba, c1: last.rgba });\n const out: Segment[] = [];\n for (const s of raw) {\n const lo = Math.max(s.lo, 0);\n const hi = Math.min(s.hi, 1);\n if (hi <= lo) continue;\n const span = s.hi - s.lo;\n out.push({ lo, hi, c0: lerp(s.c0, s.c1, (lo - s.lo) / span), c1: lerp(s.c0, s.c1, (hi - s.lo) / span) });\n }\n // Every stop sits outside 0..1 on one side, so one color covers the whole ramp.\n if (out.length === 0) {\n const c = first.offset >= 1 ? first.rgba : last.rgba;\n out.push({ lo: 0, hi: 1, c0: c, c1: c });\n }\n return out;\n}\n\nfunction rampFunction(segments: Segment[], channels: (c: Rgba) => number[]): PdfDict {\n const pieces = segments.map(\n (s): PdfDict => ({ FunctionType: 2, Domain: [0, 1], C0: channels(s.c0), C1: channels(s.c1), N: 1 }),\n );\n if (pieces.length === 1) return pieces[0];\n return {\n FunctionType: 3,\n Domain: [0, 1],\n Functions: pieces,\n Bounds: segments.slice(0, -1).map((s) => s.hi),\n Encode: segments.flatMap(() => [0, 1]),\n };\n}\n\ntype Geometry = { dict: PdfDict; data?: Uint8Array; degenerate?: boolean };\n\nfunction geometryOf(paint: Gradient, box: Box): Geometry {\n const extend = [true, true];\n if (paint.kind === 'linear-gradient') {\n const { from, to } = paint;\n // A zero-length segment paints the ramp's start everywhere, as the renderer does.\n const degenerate = from.x === to.x && from.y === to.y;\n const coords = degenerate ? [from.x, from.y, from.x + 1, from.y] : [from.x, from.y, to.x, to.y];\n return { dict: { ShadingType: 2, Coords: coords, Extend: extend }, degenerate };\n }\n const { center, radius, angle } = gradientGeometry(paint);\n if (paint.kind === 'radial-gradient') {\n const r = Math.max(radius, 1e-4);\n return { dict: { ShadingType: 3, Coords: [center.x, center.y, 0, center.x, center.y, r], Extend: extend } };\n }\n const reach = Math.max(\n ...[box.x0, box.x1].flatMap((x) => [box.y0, box.y1].map((y) => Math.hypot(x - center.x, y - center.y))),\n );\n return conicMesh(center, angle, reach * 1.01 + 1);\n}\n\n/**\n * Wedges about the center, each carrying its slice of the ramp as the function's input; the\n * center vertex takes the slice's midpoint, so a wedge strays at most half a slice from the\n * `atan` the renderer takes.\n */\nfunction conicMesh(center: { x: number; y: number }, angle: number, r: number): Geometry {\n const x0 = center.x - r;\n const y0 = center.y - r;\n const data = new Uint8Array(CONIC_WEDGES * 3 * 11);\n const view = new DataView(data.buffer);\n const coord = (v: number, lo: number) => Math.round(Math.min(1, Math.max(0, (v - lo) / (2 * r))) * 0xffffffff);\n let at = 0;\n const vertex = (x: number, y: number, t: number) => {\n view.setUint8(at, 0);\n view.setUint32(at + 1, coord(x, x0));\n view.setUint32(at + 5, coord(y, y0));\n view.setUint16(at + 9, Math.round(t * 0xffff));\n at += 11;\n };\n const rim = (i: number) => {\n const a = angle + (2 * Math.PI * i) / CONIC_WEDGES;\n vertex(center.x + r * Math.cos(a), center.y + r * Math.sin(a), i / CONIC_WEDGES);\n };\n for (let i = 0; i < CONIC_WEDGES; i++) {\n vertex(center.x, center.y, (i + 0.5) / CONIC_WEDGES);\n rim(i);\n rim(i + 1);\n }\n return {\n dict: {\n ShadingType: 4,\n BitsPerCoordinate: 32,\n BitsPerComponent: 16,\n BitsPerFlag: 8,\n Decode: [x0, x0 + 2 * r, y0, y0 + 2 * r, 0, 1],\n },\n data,\n };\n}\n\nfunction writeShading(ctx: PageCtx, g: Geometry, fn: PdfDict, colorSpace: string): PdfRef {\n const ref = ctx.objects.alloc();\n const dict: Record<string, PdfValue> = { ...g.dict, ColorSpace: name(colorSpace), Function: fn };\n if (g.data) ctx.objects.streamDeflated(ref, dict, g.data);\n else ctx.objects.set(ref, dict);\n return ref;\n}\n\n/** A luminosity group painting the gray alpha shading, for an ExtGState's `/SMask`. */\nfunction writeMaskGroup(ctx: PageCtx, mask: PdfRef, box: Box): PdfRef {\n const ref = ctx.objects.alloc();\n const body = latin1Bytes('/Sh1 sh\\n');\n ctx.objects.streamDeflated(\n ref,\n {\n Type: name('XObject'),\n Subtype: name('Form'),\n BBox: [box.x0, box.y0, box.x1, box.y1],\n Group: { Type: name('Group'), S: name('Transparency'), CS: name('DeviceGray'), I: true },\n Resources: { Shading: { Sh1: mask } },\n },\n body,\n );\n return ref;\n}\n","import { mat3 } from '@weasel-js/geom';\nimport type { CommandPaint } from '@weasel-js/paint';\nimport {\n type ImageDrawCommand,\n SPRITE_STRIDE,\n type SpritesDrawCommand,\n textureRegistry,\n} from '@weasel-js/renderer';\nimport { foldPixels } from './color';\nimport { type DrawState, type PageCtx, pageFlip, skip } from './drawCommands';\nimport { latin1Bytes } from './latin1';\nimport { name, type PdfDict, type PdfRef } from './objects';\nimport { paintToFrame } from './shading';\nimport type { RasterPixels, Rect } from './writePdf';\n\n/** A texture paint as a draw command carries it, its units already resolved. */\nexport type TextureFill = Extract<CommandPaint, { kind: 'texture' }>;\n\ntype Source = ImageBitmap | HTMLImageElement;\ntype Sampling = 'linear' | 'nearest' | undefined;\n\nconst ids = new WeakMap<object, number>();\nconst embedded = new WeakMap<object, Map<string, PdfRef>>();\nlet nextId = 0;\n\nfunction sizeOf(image: Source): { w: number; h: number } {\n const w = 'naturalWidth' in image ? image.naturalWidth : image.width;\n const h = 'naturalHeight' in image ? image.naturalHeight : image.height;\n return { w: w || 1, h: h || 1 };\n}\n\nfunction defaultReadPixels(image: Source): RasterPixels {\n const { w, h } = sizeOf(image);\n const ctx = new OffscreenCanvas(w, h).getContext('2d');\n if (!ctx) throw new Error('pdf: no 2D context to read image pixels with');\n ctx.drawImage(image, 0, 0);\n return { width: w, height: h, data: ctx.getImageData(0, 0, w, h).data };\n}\n\n/** A memo for this document: one entry per key, however many pages ask. */\nfunction memo(ctx: PageCtx): Map<string, PdfRef> {\n let m = embedded.get(ctx.objects);\n if (!m) embedded.set(ctx.objects, (m = new Map()));\n return m;\n}\n\nfunction idOf(image: Source): number {\n let id = ids.get(image);\n if (id === undefined) ids.set(image, (id = ++nextId));\n return id;\n}\n\nfunction imageObject(ctx: PageCtx, dict: PdfDict, data: Uint8Array): PdfRef {\n const ref = ctx.objects.alloc();\n ctx.objects.streamDeflated(ref, { Type: name('XObject'), Subtype: name('Image'), ...dict }, data);\n return ref;\n}\n\n/**\n * The image as an XObject, with its alpha as an SMask when any pixel is translucent.\n * Memoized per image, sampling and color matrix across the whole document.\n */\nexport function imageXObject(\n ctx: PageCtx,\n image: Source,\n state: DrawState = { transform: mat3.identity(), alpha: 1, colorMatrix: null },\n sampling: Sampling = 'linear',\n): PdfRef | null {\n const interpolate = sampling !== 'nearest';\n const key = `${idOf(image)} ${interpolate} ${state.colorMatrix?.join(',') ?? ''}`;\n const cache = memo(ctx);\n const hit = cache.get(key);\n if (hit) return hit;\n\n let raw: RasterPixels;\n try {\n raw = (ctx.opts.readPixels ?? defaultReadPixels)(image);\n } catch {\n skip(ctx, 'image could not be read');\n return null;\n }\n const ref = pixelsXObject(ctx, { ...raw, data: foldPixels(raw.data, state) }, interpolate);\n cache.set(key, ref);\n return ref;\n}\n\n/** Straight top-down RGBA as an image XObject, with its alpha as an SMask when any pixel is translucent. */\nfunction pixelsXObject(ctx: PageCtx, raw: RasterPixels, interpolate: boolean): PdfRef {\n const rgba = raw.data;\n const n = raw.width * raw.height;\n const rgb = new Uint8Array(n * 3);\n const alpha = new Uint8Array(n);\n let translucent = false;\n for (let i = 0; i < n; i++) {\n rgb[i * 3] = rgba[i * 4];\n rgb[i * 3 + 1] = rgba[i * 4 + 1];\n rgb[i * 3 + 2] = rgba[i * 4 + 2];\n alpha[i] = rgba[i * 4 + 3];\n if (alpha[i] < 255) translucent = true;\n }\n const dims = (space: string): PdfDict => ({\n Width: raw.width,\n Height: raw.height,\n ColorSpace: name(space),\n BitsPerComponent: 8,\n Interpolate: interpolate,\n });\n const mask = translucent ? imageObject(ctx, dims('DeviceGray'), alpha) : undefined;\n return imageObject(ctx, { ...dims('DeviceRGB'), SMask: mask }, rgb);\n}\n\n/** Draws rasterized pixels over `rect`, given in the page's y-down frame. */\nexport function writeRaster(ctx: PageCtx, raw: RasterPixels, rect: Rect, opacity: number): void {\n place(ctx, pixelsXObject(ctx, raw, true), raw.width, raw.height, {\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n opacity,\n });\n}\n\ninterface Place {\n x: number;\n y: number;\n w: number;\n h: number;\n source?: { x: number; y: number; w: number; h: number };\n flipX?: boolean;\n flipY?: boolean;\n opacity: number;\n}\n\n/** Draws one placement of `ref`, whose bitmap is `iw` by `ih` pixels, upright in the page's y-down frame. */\nfunction place(ctx: PageCtx, ref: PdfRef, iw: number, ih: number, p: Place): void {\n const src = p.source ?? { x: 0, y: 0, w: iw, h: ih };\n if (!(src.w > 0 && src.h > 0 && p.w !== 0 && p.h !== 0)) return;\n const { out } = ctx;\n // Where the whole bitmap lands so that `src` fills the rect.\n const W = (iw * p.w) / src.w;\n const H = (ih * p.h) / src.h;\n const left = p.x - (src.x * p.w) / src.w;\n const top = p.y - (src.y * p.h) / src.h;\n const right = p.x + p.w + (src.x * p.w) / src.w;\n const bottom = p.y + p.h + (src.y * p.h) / src.h;\n const a = p.flipX ? -W : W;\n const e = p.flipX ? right : left;\n const d = p.flipY ? H : -H;\n const f = p.flipY ? bottom - H : top + H;\n\n out.op('q');\n if (p.opacity < 1) out.op('gs', `/${ctx.resources.extGState(p.opacity, p.opacity)}`);\n if (p.source) out.op('re', p.x, p.y, p.w, p.h).op('W').op('n');\n out.op('cm', a, 0, 0, d, e, f);\n out.op('Do', `/${ctx.resources.xobject(ref)}`);\n out.op('Q');\n}\n\nexport function writeImage(ctx: PageCtx, cmd: ImageDrawCommand | SpritesDrawCommand, state: DrawState): void {\n const { w: iw, h: ih } = sizeOf(cmd.image);\n const ref = imageXObject(ctx, cmd.image, state, cmd.sampling);\n if (!ref) return;\n if (cmd.kind === 'image') {\n place(ctx, ref, iw, ih, { ...cmd, opacity: (cmd.opacity ?? 1) * state.alpha });\n return;\n }\n const s = cmd.sprites;\n for (let i = 0; i + SPRITE_STRIDE <= s.length; i += SPRITE_STRIDE) {\n const [dx, dy, dw, dh, sx, sy, sw, sh, opacity] = s.subarray(i, i + SPRITE_STRIDE);\n place(ctx, ref, iw, ih, {\n x: dx,\n y: dy,\n w: dw,\n h: dh,\n source: { x: sw < 0 ? sx + sw : sx, y: sh < 0 ? sy + sh : sy, w: Math.abs(sw), h: Math.abs(sh) },\n flipX: sw < 0,\n flipY: sh < 0,\n opacity: opacity * state.alpha,\n });\n }\n}\n\n/**\n * The tiling pattern a texture paint names, as a resource name for `scn`; `null` when the\n * texture is not registered or its placement has no inverse, which paints nothing.\n */\nexport function texturePattern(ctx: PageCtx, paint: TextureFill, state: DrawState): string | null {\n const entry = textureRegistry.get(paint.texture.id);\n if (!entry) return null;\n const toFrame = paintToFrame(ctx, paint, state);\n if (!toFrame) return null;\n const [a, b, c, d] = paint.transform ?? [1, 0, 0, 1];\n const o = paint.origin ?? { x: 0, y: 0 };\n const placement = mat3.fromAffine([a, b, c, d, o.x, o.y]);\n if (!mat3.invert(placement)) return null;\n // A pattern's matrix maps to the page's own space, below the flip that opens the content stream.\n const m = mat3.multiply(mat3.multiply(pageFlip(ctx), mat3.multiply(Float64Array.from(state.transform), toFrame)), placement);\n const matrix = mat3.toAffine(m);\n\n const key = `pattern ${paint.texture.id} ${matrix.join(',')} ${state.colorMatrix?.join(',') ?? ''}`;\n const cache = memo(ctx);\n let ref = cache.get(key);\n if (!ref) {\n const { w, h } = sizeOf(entry.source);\n const image = imageXObject(ctx, entry.source, state, 'linear');\n if (!image) return null;\n ref = ctx.objects.alloc();\n ctx.objects.streamDeflated(\n ref,\n {\n Type: name('Pattern'),\n PatternType: 1,\n PaintType: 1,\n TilingType: 1,\n BBox: [0, 0, w, h],\n XStep: w,\n YStep: h,\n Matrix: matrix,\n Resources: { XObject: { Im1: image } },\n },\n latin1Bytes(`${w} 0 0 -${h} 0 ${h} cm\\n/Im1 Do\\n`),\n );\n cache.set(key, ref);\n }\n return ctx.resources.pattern(ref);\n}\n","import {\n fillsOpenSubpaths,\n forEachSegment,\n PATH_C,\n PATH_L,\n PATH_M,\n PATH_Q,\n PATH_Z,\n type Path,\n resolveCorners,\n} from '@weasel-js/geom';\nimport type { ContentStream } from './content';\n\ninterface Contour {\n ops: [string, number[]][];\n closed: boolean;\n}\n\n/**\n * Writes a path's construction operators. `'closed'` leaves out contours with no `Z`,\n * for a fill that does not close open ones.\n */\nexport function pathOps(out: ContentStream, path: Path, which: 'all' | 'closed'): void {\n if (path.kind === 'rect') {\n out.op('re', path.x, path.y, path.width, path.height);\n return;\n }\n const { commands, coords } = resolveCorners(path);\n const contours: Contour[] = [];\n let cur: Contour | undefined;\n forEachSegment(commands, coords, (cmd, ci, px, py, _i, opens) => {\n if (cmd === PATH_M || opens || !cur) {\n cur = { ops: [], closed: false };\n contours.push(cur);\n if (cmd === PATH_M) {\n cur.ops.push(['m', [coords[ci], coords[ci + 1]]]);\n return;\n }\n cur.ops.push(['m', [px, py]]);\n }\n if (cmd === PATH_L) cur.ops.push(['l', [coords[ci], coords[ci + 1]]]);\n else if (cmd === PATH_C) cur.ops.push(['c', Array.from({ length: 6 }, (_, k) => coords[ci + k])]);\n else if (cmd === PATH_Q) {\n const [qx, qy, x, y] = [coords[ci], coords[ci + 1], coords[ci + 2], coords[ci + 3]];\n cur.ops.push(['c', [px + ((qx - px) * 2) / 3, py + ((qy - py) * 2) / 3, x + ((qx - x) * 2) / 3, y + ((qy - y) * 2) / 3, x, y]]);\n } else if (cmd === PATH_Z) {\n cur.ops.push(['h', []]);\n cur.closed = true;\n cur = undefined;\n }\n });\n for (const c of contours) {\n if (which === 'closed' && !c.closed) continue;\n for (const [op, args] of c.ops) out.op(op, ...args);\n }\n}\n\n/** Writes the region a fill of `path` covers, which a clip covers too, and answers whether it is even-odd. */\nexport function fillPathOps(out: ContentStream, path: Path): boolean {\n const closeOpen = path.kind === 'rect' || fillsOpenSubpaths(path);\n pathOps(out, path, closeOpen ? 'all' : 'closed');\n return path.kind === 'polygon' && path.fillRule === 'evenodd';\n}\n","import { num } from './num';\nimport { name, type PdfDict, PdfRef } from './objects';\n\n/** Hands out resource names (`GS1`, `Sh1`, …) for one page and writes them as its `/Resources`. */\nexport class PageResources {\n private readonly gstates = new Map<string, string>();\n private readonly masks = new Map<number, string>();\n private readonly refs = {\n Shading: new Map<number, string>(),\n XObject: new Map<number, string>(),\n Font: new Map<number, string>(),\n Pattern: new Map<number, string>(),\n };\n\n extGState(fillAlpha: number, strokeAlpha: number): string {\n // Checked now: the dict is written after the page, outside the command that asked for it.\n num(fillAlpha);\n num(strokeAlpha);\n const key = `${fillAlpha} ${strokeAlpha}`;\n let n = this.gstates.get(key);\n if (n === undefined) {\n n = this.nextGState();\n this.gstates.set(key, n);\n }\n return n;\n }\n\n /** An ExtGState whose `/SMask` is the luminosity of the transparency group `group`. */\n softMask(group: PdfRef): string {\n let n = this.masks.get(group.id);\n if (n === undefined) {\n n = this.nextGState();\n this.masks.set(group.id, n);\n }\n return n;\n }\n\n private nextGState(): string {\n return `GS${this.gstates.size + this.masks.size + 1}`;\n }\n\n shading(ref: PdfRef): string {\n return this.named('Shading', 'Sh', ref);\n }\n xobject(ref: PdfRef): string {\n return this.named('XObject', 'Im', ref);\n }\n font(ref: PdfRef): string {\n return this.named('Font', 'F', ref);\n }\n pattern(ref: PdfRef): string {\n return this.named('Pattern', 'P', ref);\n }\n\n private named(kind: keyof PageResources['refs'], prefix: string, ref: PdfRef): string {\n const m = this.refs[kind];\n let n = m.get(ref.id);\n if (n === undefined) {\n n = `${prefix}${m.size + 1}`;\n m.set(ref.id, n);\n }\n return n;\n }\n\n dict(): PdfDict {\n const out: Record<string, PdfDict> = {};\n if (this.gstates.size || this.masks.size) {\n const g: Record<string, PdfDict> = {};\n for (const [key, n] of this.gstates) {\n const [ca, CA] = key.split(' ').map(Number);\n g[n] = { Type: name('ExtGState'), ca, CA };\n }\n for (const [id, n] of this.masks) {\n g[n] = { Type: name('ExtGState'), SMask: { Type: name('Mask'), S: name('Luminosity'), G: new PdfRef(id) } };\n }\n out.ExtGState = g;\n }\n for (const [kind, m] of Object.entries(this.refs)) {\n if (!m.size) continue;\n const d: Record<string, PdfRef> = {};\n for (const [id, n] of m) d[n] = new PdfRef(id);\n out[kind] = d;\n }\n return out;\n }\n}\n","import { mat3 } from '@weasel-js/geom';\nimport {\n commandsBounds,\n type DrawCommand,\n type GroupDrawCommand,\n isOwnComposite,\n leavesUncovered,\n type PathDrawCommand,\n readsBackdrop,\n type ShaderDrawCommand,\n} from '@weasel-js/renderer';\nimport { composeMatrix, foldPixels } from './color';\nimport { ContentStream } from './content';\nimport { type DrawState, type PageCtx, pageFlip, pageThrough, skip, writeCommands } from './drawCommands';\nimport { writeRaster } from './images';\nimport { name } from './objects';\nimport { fillPathOps } from './pathOps';\nimport { PageResources } from './resources';\nimport type { RasterPixels, Rect } from './writePdf';\n\n/** Rasters are made at twice the page's point scale. */\nconst RASTER_SCALE = 2;\n\n/** The renderer clips through the fill mesh, so a clip covers what a fill of its path would. */\nfunction setClip(ctx: PageCtx, clip: NonNullable<GroupDrawCommand['clip']>): void {\n ctx.out.op(fillPathOps(ctx.out, clip) ? 'W*' : 'W');\n ctx.out.op('n');\n}\n\nfunction compositeName(op: NonNullable<GroupDrawCommand['composite']>): string {\n return typeof op === 'string' ? op : `${op.source}/${op.destination}`;\n}\n\n/**\n * Hands `commands` (already in the page's frame) to the raster hook and draws what comes back over `box`.\n * The pixels are folded through `state`'s color matrix and drawn at its alpha. `unhooked` is the skip\n * reported when there is no hook. `paper` paints the box white first, for a raster that replaces\n * what was drawn there rather than joining it.\n */\nasync function drawRaster(\n ctx: PageCtx,\n commands: readonly DrawCommand[],\n box: Rect,\n state: DrawState,\n reason: string,\n unhooked = reason,\n paper = false,\n): Promise<void> {\n const hook = ctx.opts.rasterize;\n if (!hook) return skip(ctx, unhooked);\n if (box.width <= 0 || box.height <= 0) return;\n let px: RasterPixels;\n try {\n px = await hook(commands, box, RASTER_SCALE, ctx.view);\n } catch (err) {\n return skip(ctx, `${reason} raster failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n if (px.data.length !== px.width * px.height * 4) return skip(ctx, `${reason} raster has the wrong number of pixels`);\n const inverse = mat3.invert(state.transform);\n if (!inverse) return;\n const { out } = ctx;\n out.op('q');\n out.op('cm', ...mat3.toAffine(inverse));\n if (paper) {\n out.op('rg', 1, 1, 1);\n out.op('re', box.x, box.y, box.width, box.height);\n out.op('f');\n }\n writeRaster(ctx, { ...px, data: foldPixels(px.data, state) }, box, state.alpha);\n out.op('Q');\n}\n\n/** A shader command's bounds are screen space, which is the page's frame here. */\nexport function writeShader(ctx: PageCtx, cmd: ShaderDrawCommand, state: DrawState): Promise<void> {\n const { x, y, w, h } = cmd.bounds;\n const x0 = Math.max(0, Math.floor(x));\n const y0 = Math.max(0, Math.floor(y));\n const x1 = Math.min(ctx.width, Math.ceil(x + w));\n const y1 = Math.min(ctx.height, Math.ceil(y + h));\n return drawRaster(ctx, [cmd], { x: x0, y: y0, width: x1 - x0, height: y1 - y0 }, state, 'shader');\n}\n\n/** A fill in a paint kind only the renderer can draw, rasterized on its own in the page's frame. */\nexport function rasterFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, kind: string): Promise<void> {\n const wrapper: GroupDrawCommand = {\n kind: 'group',\n transform: state.transform,\n children: [{ kind: 'path', path: cmd.path, fill: cmd.fill }],\n };\n const box = commandsBounds([wrapper], mat3.identity(), ctx);\n return drawRaster(ctx, [wrapper], box, state, `paint kind ${kind}`, `paint kind ${kind} needs a raster`);\n}\n\n/** `cmd`'s drawing, without its alpha, color matrix or composite, moved into the page's frame. */\nfunction inPageFrame(cmd: GroupDrawCommand, state: DrawState): GroupDrawCommand {\n const full = cmd.transform ? mat3.multiply(Float64Array.from(state.transform), cmd.transform) : state.transform;\n return { kind: 'group', transform: full, clip: cmd.clip, effects: cmd.effects, children: cmd.children };\n}\n\n/** The group's own frame is dropped from the state: its alpha and color matrix apply to the finished raster. */\nasync function rasterGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState, reason: string): Promise<void> {\n const wrapper = inPageFrame(cmd, state);\n const box = commandsBounds([wrapper], mat3.identity(), ctx, RASTER_SCALE);\n const grouped: DrawState = {\n transform: state.transform,\n alpha: state.alpha * (cmd.alpha ?? 1),\n colorMatrix: composeMatrix(state.colorMatrix, cmd.colorMatrix),\n };\n await drawRaster(ctx, [wrapper], box, grouped, reason);\n}\n\n/**\n * A composite PDF has no operator for, drawn by the renderer onto the page beneath it and placed over\n * what it changes: the group's bounds, or the whole page for an operator that clears what the group\n * leaves empty. The page so far is under every enclosing group, so the raster is placed as it comes.\n */\nfunction compositeGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState): Promise<void> {\n const composite = cmd.composite!;\n const box = leavesUncovered(composite)\n ? commandsBounds([inPageFrame(cmd, state)], mat3.identity(), ctx, RASTER_SCALE)\n : { x: 0, y: 0, width: ctx.width, height: ctx.height };\n const reason = `composite ${compositeName(composite)}`;\n const placed: DrawState = { transform: state.transform, alpha: 1, colorMatrix: null };\n return drawRaster(ctx, pageThrough(ctx.trail), box, placed, reason, reason, true);\n}\n\n/**\n * The children in a form of their own, so a group's alpha lands on the finished surface. The form is\n * drawn from the page's default space, which is what a tiling pattern's matrix inside it is relative to.\n */\nasync function isolatedGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState, inner: DrawState): Promise<void> {\n if (cmd.colorMatrix?.[19]) skip(ctx, 'group color matrix alpha offset is not drawn');\n const flip = pageFlip(ctx);\n const toPage = mat3.multiply(flip, Float64Array.from(state.transform));\n const fromPage = mat3.invert(toPage);\n if (!fromPage) return;\n const sub: PageCtx = { ...ctx, out: new ContentStream(), resources: new PageResources() };\n sub.out.op('cm', ...mat3.toAffine(mat3.multiply(flip, Float64Array.from(inner.transform))));\n if (cmd.clip) setClip(sub, cmd.clip);\n await writeCommands(sub, cmd.children, { ...inner, alpha: 1 }, cmd);\n\n const form = ctx.objects.alloc();\n ctx.objects.streamDeflated(\n form,\n {\n Type: name('XObject'),\n Subtype: name('Form'),\n BBox: [0, 0, ctx.width, ctx.height],\n Group: { Type: name('Group'), S: name('Transparency'), I: true },\n Resources: sub.resources.dict(),\n },\n sub.out.bytes(),\n );\n const { out } = ctx;\n out.op('q');\n out.op('cm', ...mat3.toAffine(fromPage));\n if (inner.alpha < 1) out.op('gs', `/${ctx.resources.extGState(inner.alpha, inner.alpha)}`);\n out.op('Do', `/${ctx.resources.xobject(form)}`);\n out.op('Q');\n}\n\nexport async function writeGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState): Promise<void> {\n const hooked = ctx.opts.rasterize !== undefined;\n if (cmd.composite && isOwnComposite(cmd.composite)) {\n if (hooked) return compositeGroup(ctx, cmd, state);\n skip(ctx, `composite ${compositeName(cmd.composite)} drawn as source-over`);\n }\n if (cmd.effects?.length) return rasterGroup(ctx, cmd, state, 'effects');\n // A form has no paper to put a raster on, so the whole isolated surface is drawn by the renderer.\n if (cmd.isolate && hooked && readsBackdrop(cmd.children)) return rasterGroup(ctx, cmd, state, 'composite');\n const m = cmd.transform;\n const inner: DrawState = {\n transform: m ? mat3.multiply(Float64Array.from(state.transform), m) : state.transform,\n alpha: state.alpha * (cmd.alpha ?? 1),\n colorMatrix: composeMatrix(state.colorMatrix, cmd.colorMatrix),\n };\n if (cmd.isolate) return isolatedGroup(ctx, cmd, state, inner);\n const { out } = ctx;\n out.op('q');\n if (m) out.op('cm', ...mat3.toAffine(m));\n if (cmd.clip) setClip(ctx, cmd.clip);\n await writeCommands(ctx, cmd.children, inner, cmd);\n out.op('Q');\n}\n","import type { Path } from '@weasel-js/geom';\nimport { type CommandPaint, type CommandStroke, dashPattern, isSolidPaint, type Stroke } from '@weasel-js/paint';\nimport { markerDrawCommands, resolveStrokeLengths } from '@weasel-js/renderer';\nimport { dashLength, strokeInsets, strokeToPath } from '@weasel-js/stroke';\nimport { solidColor } from './color';\nimport { type DrawState, type PageCtx, skip, writeCommands } from './drawCommands';\nimport { NonFiniteNumber, num } from './num';\nimport { pathOps } from './pathOps';\n\nconst CAPS = { butt: 0, round: 1, square: 2 } as const;\nconst JOINS = { miter: 0, round: 1, bevel: 2 } as const;\n\n/** Whether PDF's own stroke operator draws this stroke as the renderer would. */\nexport function isNative(stroke: CommandStroke, width: number): boolean {\n if (stroke.align && stroke.align !== 'center') return false;\n if (stroke.vertexWidths || stroke.nib || stroke.vertexColors) return false;\n const { start, end } = strokeInsets(stroke as Stroke, width);\n return start === 0 && end === 0;\n}\n\n/**\n * The line style operators for a native stroke; the caller sets its color.\n * `length` is the stroked path's, from `dashLength`, so a dash too fine for\n * it goes solid here as it does in the renderer.\n */\nexport function strokeStyleOps(ctx: PageCtx, stroke: CommandStroke, width: number, length?: number): void {\n const { out } = ctx;\n out.op('w', width);\n out.op('J', CAPS[stroke.cap ?? 'butt']);\n out.op('j', JOINS[stroke.join ?? 'miter']);\n out.op('M', stroke.miterLimit ?? 4);\n // PDF draws nothing for an all-zero dash and rejects a negative one; the renderer strokes both solid.\n const dash = dashPattern(stroke.dash, length);\n if (dash === 'non-finite') throw new NonFiniteNumber(`pdf: cannot write non-finite dash ${stroke.dash}`);\n if (dash !== 'solid') out.op('d', `[${dash.map(num).join(' ')}]`, 0);\n}\n\n/** `raw` with its `{ px }` lengths resolved at the exact scale of `state`, and its width as a number. */\nexport function resolveStroke(\n path: Path,\n raw: CommandStroke & { paint: CommandPaint },\n state: DrawState,\n): { stroke: CommandStroke & { paint: CommandPaint }; width: number } {\n const { cmd } = resolveStrokeLengths(state.transform, { kind: 'path', path, stroke: raw }, { quantize: false });\n return { stroke: cmd.stroke, width: typeof cmd.stroke.width === 'number' ? cmd.stroke.width : 1 };\n}\n\nfunction writeNative(ctx: PageCtx, path: Path, stroke: CommandStroke, state: DrawState, width: number): void {\n const paint = stroke.paint;\n if (!paint || !isSolidPaint(paint)) return;\n const { rgb, alpha } = solidColor(paint, state);\n const { out } = ctx;\n out.op('q');\n out.op('gs', `/${ctx.resources.extGState(alpha, alpha)}`);\n out.op('RG', ...rgb);\n strokeStyleOps(ctx, stroke, width, stroke.dash ? dashLength(path) : undefined);\n pathOps(out, path, 'all');\n out.op('S');\n out.op('Q');\n}\n\n/**\n * Strokes `path`: natively where PDF draws it as the renderer does, otherwise by\n * filling the stroke's outline, which also carries gradient paints. Marker heads\n * follow as their own commands; heads with their own paint are drawn over the\n * line-colored copy that `strokeToPath` already unioned into the outline.\n */\nexport async function writeStroke(ctx: PageCtx, path: Path, rawStroke: CommandStroke, state: DrawState): Promise<void> {\n if (!rawStroke.paint) return;\n const { stroke, width } = resolveStroke(path, { ...rawStroke, paint: rawStroke.paint as CommandPaint }, state);\n if (!(width > 0)) return;\n let heads =\n stroke.markerStart || stroke.markerMid || stroke.markerEnd\n ? markerDrawCommands(path, stroke, width, undefined)\n : [];\n if (isNative(stroke, width) && isSolidPaint(stroke.paint)) writeNative(ctx, path, stroke, state, width);\n else {\n if (stroke.vertexColors) skip(ctx, 'stroke vertexColors approximated by a single paint');\n heads = heads.filter((h) => h.stroke || h.fill?.paint !== stroke.paint);\n const outline = strokeToPath(path, stroke as Stroke);\n await writeCommands(ctx, [{ kind: 'path', path: outline, fill: { paint: stroke.paint } }], state);\n }\n if (heads.length) await writeCommands(ctx, heads, state);\n}\n","import type { Path } from '@weasel-js/geom';\nimport { type CommandFill, type CommandStroke, fillHasInk, strokeHasInk } from '@weasel-js/paint';\nimport type { PathDrawCommand, TextDrawCommand } from '@weasel-js/renderer';\nimport { glyphOutlineAt, type PlacedGlyph } from '@weasel-js/text';\nimport type { PageCtx } from './drawCommands';\n\n/** Word breaks a reader copies and searches by: written as glyphs where the face has one, and never ink. */\nexport function isSpace(cp: number): boolean {\n return cp === 0x20 || cp === 0xa0;\n}\n\nexport function codepointLabel(cp: number): string {\n return `U+${cp.toString(16).toUpperCase().padStart(4, '0')}`;\n}\n\nexport function skipGlyph(ctx: PageCtx, g: PlacedGlyph, why: string): void {\n const { family, weight, style } = g.resolved.resolved;\n ctx.skipped.push({ kind: 'glyph', detail: `${codepointLabel(g.cp)} in ${family} ${weight} ${style} ${why}` });\n}\n\n/** The glyph's outline where the renderer's outline tier places it, faked bold and oblique as it fakes them. */\nexport function placedOutline(ctx: PageCtx, g: PlacedGlyph, dx: number, dy: number): Path | null {\n const { family, weight, style } = g.resolved.resolved;\n let d: string | null;\n try {\n // A shaped code point draws its cluster's glyphs, not the one its code point maps to.\n d = g.shaped ? g.shaped.d : ctx.opts.fonts.outline(family, weight, style, g.cp);\n } catch {\n return null;\n }\n if (d === null) return null;\n return glyphOutlineAt(d, g, dx, dy);\n}\n\n/** The glyph as a path command painted as its run paints it (or only stroked), or null when the source has no outline for it. */\nexport function outlineCommand(\n ctx: PageCtx,\n g: PlacedGlyph,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n paint: 'all' | 'stroke' = 'all',\n): PathDrawCommand | null {\n const path = placedOutline(ctx, g, dx, dy);\n if (!path) return null;\n const run = cmd.runs[g.run];\n const out: PathDrawCommand = { kind: 'path', path };\n if (paint !== 'stroke' && fillHasInk(run.fill)) out.fill = run.fill as CommandFill;\n if (strokeHasInk(run.stroke)) out.stroke = run.stroke as CommandStroke;\n return out;\n}\n","const MAX_PER_BLOCK = 100;\n\nconst hex4 = (n: number) => n.toString(16).toUpperCase().padStart(4, '0');\n\n/** `text` as UTF-16BE hex digits, astral code points as surrogate pairs. */\nexport function utf16Hex(text: string): string {\n let out = '';\n for (let i = 0; i < text.length; i++) out += hex4(text.charCodeAt(i));\n return out;\n}\n\n/** A ToUnicode CMap for a two-byte identity-encoded font: glyph id to the text it was drawn for. */\nexport function toUnicodeCMap(glyphs: ReadonlyMap<number, string>): string {\n const entries = [...glyphs].sort((a, b) => a[0] - b[0]);\n const lines = [\n '/CIDInit /ProcSet findresource begin',\n '12 dict begin',\n 'begincmap',\n '/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def',\n '/CMapName /Adobe-Identity-UCS def',\n '/CMapType 2 def',\n '1 begincodespacerange',\n '<0000> <FFFF>',\n 'endcodespacerange',\n ];\n for (let i = 0; i < entries.length; i += MAX_PER_BLOCK) {\n const block = entries.slice(i, i + MAX_PER_BLOCK);\n lines.push(`${block.length} beginbfchar`);\n for (const [gid, text] of block) lines.push(`<${hex4(gid)}> <${utf16Hex(text)}>`);\n lines.push('endbfchar');\n }\n lines.push('endcmap', 'CMapName currentdict /CMap defineresource pop', 'end', 'end');\n return lines.join('\\n');\n}\n","import type { Path } from '@weasel-js/geom';\nimport {\n type CommandPaint,\n type CommandStroke,\n fillHasInk,\n isSolidPaint,\n type SolidPaint,\n strokeHasInk,\n} from '@weasel-js/paint';\nimport type { TextDrawCommand } from '@weasel-js/renderer';\nimport { dashLength } from '@weasel-js/stroke';\nimport { glyphTurn, type PlacedGlyph, SYNTHETIC_ITALIC_RADIANS, syntheticBoldOffset } from '@weasel-js/text';\nimport { solidColor } from './color';\nimport { utf16Hex } from './fonts/toUnicode';\nimport { type DrawState, type PageCtx, writeCommands } from './drawCommands';\nimport type { EmbeddedFont } from './fonts/embedFont';\nimport { num } from './num';\nimport { isNative, resolveStroke, strokeStyleOps } from './strokeOps';\nimport { isSpace, outlineCommand, placedOutline, skipGlyph } from './textOutlines';\n\n/** What one placed code point draws in a text object. */\nexport interface SegmentGlyph {\n g: PlacedGlyph;\n /** Each glyph and where it sits, in ems from the code point's pen, y down: one at the pen\n * unless a shaper set its cluster. */\n glyphs: readonly { gid: number; x: number; y: number }[];\n /** Text a reader takes the glyphs for, in place of what `/ToUnicode` maps them to; set when\n * that mapping cannot give back the code point's cluster. */\n actual?: string;\n}\n\n/** Glyphs one text object draws: one line, run, face, size and baseline. */\nexport interface TextSegment {\n font: EmbeddedFont;\n line: number;\n glyphs: SegmentGlyph[];\n}\n\nconst FILL = 0;\nconst STROKE = 1;\nconst FILL_STROKE = 2;\nconst INVISIBLE = 3;\nconst CLIP = 7;\nconst JOINS = { miter: 0, round: 1 } as const;\n/** `growRegion`'s default, which synthetic bold grows with; both limits are miter length over half-width. */\nconst BOLD_MITER_LIMIT = 4;\n\n/**\n * A rect over every glyph's ink, for the shading and soft mask a gradient fill needs bounds for.\n * An em past each slot on every side covers any glyph the face draws, oblique ones included.\n */\nfunction inkBox(seg: TextSegment, dx: number, dy: number): Path {\n const { fontSize: s, baselineY, rotate, x, advance } = seg.glyphs[0].g;\n if (rotate) {\n // A turned glyph is alone in its segment; this reaches past its ink at any angle.\n const r = advance + 1.5 * s;\n return { kind: 'rect', x: x + dx - r, y: baselineY + dy - r, width: 2 * r, height: 2 * r };\n }\n let x0 = Infinity;\n let x1 = -Infinity;\n for (const { g } of seg.glyphs) {\n x0 = Math.min(x0, g.x);\n x1 = Math.max(x1, g.x + g.advance);\n }\n return { kind: 'rect', x: x0 + dx - s, y: baselineY + dy - 1.5 * s, width: x1 - x0 + 2 * s, height: 2.5 * s };\n}\n\n/**\n * `BT … ET` for the segment: its glyphs at their laid-out x, the gap between what the font\n * advances and what the layout stepped written as a TJ adjustment. A glyph a shaper set off the\n * baseline is raised with `Ts`, and a cluster `/ToUnicode` cannot give back is marked with its\n * text as `/ActualText` (`spansOf`).\n */\nfunction textObject(ctx: PageCtx, seg: TextSegment, mode: number, dx: number, dy: number): void {\n const { out } = ctx;\n const first = seg.glyphs[0].g;\n const s = first.fontSize;\n const shear = first.resolved.synthetic.italic ? Math.tan(SYNTHETIC_ITALIC_RADIANS) : 0;\n out.op('BT');\n out.op('Tf', `/${ctx.resources.font(seg.font.ref)}`, 1);\n if (mode !== FILL) out.op('Tr', mode);\n // Glyph space is y up and the frame is y down, so d is negative; c leans the tops toward +x.\n // A turned glyph then turns about its pen.\n const [cos, sin] = glyphTurn(first.rotate);\n out.op('Tm', cos * s, sin * s, s * (cos * shear + sin), s * (sin * shear - cos), first.x + dx, first.baselineY + dy);\n let parts: string[] = [];\n let hex = '';\n let pen = 0;\n /** Where the last `Td` put the line, in ems from the segment's start. */\n let line = 0;\n let anchor = false;\n let rise = '0';\n const flush = () => {\n if (hex) parts.push(`<${hex}>`);\n if (parts.length > 0) out.op('TJ', `[${parts.join(' ')}]`);\n parts = [];\n hex = '';\n };\n for (const { g, glyphs, actual } of seg.glyphs) {\n for (const span of spansOf(glyphs, actual)) {\n if (span.text !== undefined) {\n flush();\n out.op('BDC', '/Span', `<</ActualText <${span.text ? `FEFF${utf16Hex(span.text)}` : ''}>>>`);\n }\n for (const { gid, x, y } of span.glyphs) {\n // Text space is y up, so a glyph the shaper moved down is a negative rise.\n const at = num(-y);\n if (at !== rise) {\n flush();\n out.op('Ts', (rise = at));\n }\n const to = (g.x - first.x) / s + x;\n if (anchor) {\n flush();\n const step = num(to - line);\n out.op('Td', step, 0);\n pen = line += Number(step);\n anchor = false;\n }\n const adjust = num((pen - to) * 1000);\n if (adjust !== '0') {\n if (hex) parts.push(`<${hex}>`);\n hex = '';\n parts.push(adjust);\n pen -= Number(adjust) / 1000;\n }\n hex += gid.toString(16).toUpperCase().padStart(4, '0');\n pen += seg.font.widthOf(gid) / 1000;\n // pdf.js drops a glyph that reads as nothing without moving its own pen past it, so the\n // glyph after one is placed afresh rather than from that pen.\n anchor ||= seg.font.readsAs(gid) === undefined && seg.font.widthOf(gid) !== 0;\n }\n if (span.text !== undefined) {\n flush();\n out.op('EMC');\n }\n }\n }\n flush();\n // Ts outlives ET, as all of the text state does.\n if (rise !== '0') out.op('Ts', 0);\n out.op('ET');\n}\n\n/**\n * The longest glyph outline in the segment, for `dashPattern`'s cap. The renderer strokes each\n * glyph on its own, so this goes solid when its longest glyph would.\n */\nfunction longestOutline(ctx: PageCtx, seg: TextSegment, dx: number, dy: number): number {\n let length = 0;\n for (const { g } of seg.glyphs) {\n const outline = isSpace(g.cp) ? null : placedOutline(ctx, g, dx, dy);\n if (outline) length = Math.max(length, dashLength(outline));\n }\n return length;\n}\n\n/** Paints the segment's glyphs from their outlines: all of the run's paint, or only its stroke. */\nasync function paintOutlines(\n ctx: PageCtx,\n seg: TextSegment,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n state: DrawState,\n paint: 'all' | 'stroke',\n): Promise<void> {\n for (const { g } of seg.glyphs) {\n if (isSpace(g.cp)) continue;\n const outline = outlineCommand(ctx, g, cmd, dx, dy, paint);\n if (outline) await writeCommands(ctx, [outline], state);\n else skipGlyph(ctx, g, 'has no outline to paint its ink with');\n }\n}\n\n/** Selectable text that paints nothing, under ink drawn from the glyphs' outlines. */\nasync function writeOutlinedInk(ctx: PageCtx, seg: TextSegment, cmd: TextDrawCommand, dx: number, dy: number, state: DrawState) {\n ctx.out.op('q');\n textObject(ctx, seg, INVISIBLE, dx, dy);\n ctx.out.op('Q');\n await paintOutlines(ctx, seg, cmd, dx, dy, state, 'all');\n}\n\n/** Writes one segment as text, painted the way its run paints it. */\nexport async function writeSegment(\n ctx: PageCtx,\n seg: TextSegment,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n state: DrawState,\n): Promise<void> {\n const first = seg.glyphs[0].g;\n const run = cmd.runs[first.run];\n const fill = fillHasInk(run.fill) ? (run.fill!.paint as CommandPaint) : undefined;\n const box = inkBox(seg, dx, dy);\n const rawStroke = strokeHasInk(run.stroke) ? (run.stroke as CommandStroke & { paint: CommandPaint }) : undefined;\n const stroke = rawStroke && resolveStroke(box, rawStroke, state);\n const nativeStroke = stroke && isNative(stroke.stroke, stroke.width) && isSolidPaint(stroke.stroke.paint);\n const solidFill = !fill || isSolidPaint(fill);\n const bold = syntheticBoldOffset(first.resolved);\n const fillColor = fill && isSolidPaint(fill) ? solidColor(fill, state) : undefined;\n // A text object paints a fill-and-stroke glyph twice, which only matches a grown outline when opaque.\n const boldInText = bold && !stroke && solidFill && fillColor!.alpha >= 1;\n if ((stroke && !nativeStroke) || (bold && !boldInText)) return writeOutlinedInk(ctx, seg, cmd, dx, dy, state);\n\n const { out } = ctx;\n if (!solidFill) {\n out.op('q');\n textObject(ctx, seg, CLIP, dx, dy);\n await writeCommands(ctx, [{ kind: 'path', path: box, fill: { paint: fill } }], state);\n out.op('Q');\n // A second text object would be extracted as a second copy of the text.\n if (stroke) await paintOutlines(ctx, seg, cmd, dx, dy, state, 'stroke');\n return;\n }\n const strokeColor = nativeStroke ? solidColor(stroke.stroke.paint as SolidPaint, state) : undefined;\n const paintsFill = fillColor;\n if (!paintsFill && !strokeColor) return;\n out.op('q');\n out.op('gs', `/${ctx.resources.extGState(paintsFill ? fillColor.alpha : 1, strokeColor?.alpha ?? fillColor?.alpha ?? 1)}`);\n if (paintsFill) out.op('rg', ...fillColor.rgb);\n if (stroke && strokeColor) {\n out.op('RG', ...strokeColor.rgb);\n const length = stroke.stroke.dash ? longestOutline(ctx, seg, dx, dy) : undefined;\n strokeStyleOps(ctx, stroke.stroke, stroke.width, length);\n } else if (bold && fillColor) {\n out.op('RG', ...fillColor.rgb);\n // The growth is per side and a stroke straddles the outline, so the line is twice it.\n out.op('w', 2 * bold.growth * first.fontSize);\n out.op('j', JOINS[bold.join]);\n out.op('M', BOLD_MITER_LIMIT);\n }\n textObject(ctx, seg, paintsFill ? (strokeColor || bold ? FILL_STROKE : FILL) : STROKE, dx, dy);\n out.op('Q');\n}\n\ntype Placed = SegmentGlyph['glyphs'][number];\n\n/**\n * A code point's glyphs in the spans its text is marked with. A cluster marked with its text\n * keeps it on its glyphs on the baseline, and its glyphs off the baseline are marked with no\n * text after them: an extractor sets a span's text from its first glyph's start to its last\n * one's end, and a raised mark at either end moves the text off its line.\n */\nfunction spansOf(glyphs: readonly Placed[], actual: string | undefined): { text?: string; glyphs: readonly Placed[] }[] {\n if (actual === undefined) return [{ glyphs }];\n const on = glyphs.filter((p) => p.y === 0);\n if (on.length === 0 || on.length === glyphs.length) return [{ text: actual, glyphs }];\n return [{ text: actual, glyphs: on }, { text: '', glyphs: glyphs.filter((p) => p.y !== 0) }];\n}\n","import type { CommandFill } from '@weasel-js/paint';\nimport { fillHasInk, strokeHasInk } from '@weasel-js/paint';\nimport type { PathDrawCommand, TextDrawCommand } from '@weasel-js/renderer';\nimport {\n cachedLayoutRuns,\n cachedPaintRuns,\n type PlacedGlyph,\n resolveTextStyle,\n verticalAlignOffset,\n} from '@weasel-js/text';\nimport { type DrawState, type PageCtx, writeCommands } from './drawCommands';\nimport { isSpace, outlineCommand, skipGlyph } from './textOutlines';\nimport { text as pdfText, writeDict } from './objects';\nimport type { EmbeddedFont } from './fonts/embedFont';\nimport { type SegmentGlyph, type TextSegment, writeSegment } from './textSegment';\n\n/** Code points that hold a slot and never ink: they advance and are left out silently. */\nconst BLANK = /^[\\s\\p{Default_Ignorable_Code_Point}]$/u;\n\n/** Whether `g` can join `seg`: one text object holds one line, run, face, size and baseline. A\n * turned glyph turns about its own pen, so it is a text object of its own. */\nfunction joins(seg: TextSegment | undefined, g: PlacedGlyph, line: number): seg is TextSegment {\n if (!seg || seg.line !== line || g.rotate) return false;\n const a = seg.glyphs[0].g;\n const [ra, rg] = [a.resolved, g.resolved];\n return (\n a.run === g.run &&\n a.fontSize === g.fontSize &&\n a.baselineY === g.baselineY &&\n ra.source === rg.source &&\n ra.resolved.family === rg.resolved.family &&\n ra.resolved.weight === rg.resolved.weight &&\n ra.resolved.style === rg.resolved.style &&\n ra.synthetic.bold === rg.synthetic.bold &&\n ra.synthetic.italic === rg.synthetic.italic\n );\n}\n\n/**\n * What `g` draws in `font`, or null when the face has no glyph for it. A shaped code point\n * draws its cluster's glyphs, and carries the cluster's text as `actual` wherever `/ToUnicode`\n * would read them back as anything else: more than one glyph, or a glyph first drawn for other text.\n */\nfunction segmentGlyph(font: EmbeddedFont, g: PlacedGlyph): SegmentGlyph | null {\n if (!g.shaped) {\n const gid = font.use(g.cp);\n return gid === null ? null : { g, glyphs: [{ gid, x: 0, y: 0 }] };\n }\n const { glyphs, text } = g.shaped;\n // Only the first glyph claims the text, so a reader ignoring /ActualText reads a cluster once,\n // not once a glyph. Shapers draw a mark or pre-base matra first, ahead of a base other clusters share.\n for (const [i, { gid }] of glyphs.entries()) if (!font.useGlyph(gid, i === 0 ? text : undefined)) return null;\n return glyphs.length === 1 && font.readsAs(glyphs[0].gid) === text ? { g, glyphs } : { g, glyphs, actual: text };\n}\n\n/**\n * Writes a text command as PDF text in its embedded faces, laid out exactly as `drawText`\n * lays it out. A glyph whose face cannot embed is drawn as its outline; one nothing can draw\n * is reported and left out, and the glyphs after it keep their laid-out positions.\n */\nexport async function writeText(ctx: PageCtx, cmd: TextDrawCommand, state: DrawState): Promise<void> {\n const style = resolveTextStyle(cmd.style);\n const laid = cachedLayoutRuns(cmd.runs, {\n maxWidth: cmd.maxWidth ?? Infinity,\n alignWidth: cmd.width,\n lineHeight: style.lineHeight,\n align: cmd.align ?? style.align,\n direction: cmd.direction ?? style.direction,\n tabSize: style.tabSize,\n justify: cmd.justify,\n });\n const dx = cmd.x;\n const dy = cmd.y + verticalAlignOffset(cmd.verticalAlign, cmd.height, laid.bounds.height);\n\n const items: (TextSegment | PathDrawCommand)[] = [];\n let seg: TextSegment | undefined;\n for (const [line, box] of laid.lines.entries()) {\n for (const g of box.glyphs) {\n const run = cmd.runs[g.run];\n if (!fillHasInk(run.fill) && !strokeHasInk(run.stroke)) continue;\n const space = isSpace(g.cp);\n if (!space && BLANK.test(String.fromCodePoint(g.cp))) continue;\n // A slot the layout left empty has no width, so drawing into it would land on its neighbor.\n if (!space && (g.glyph?.color || (g.resolved.source !== 'outline' && g.glyph === null))) {\n skipGlyph(ctx, g, 'has no glyph to draw');\n continue;\n }\n // A code point inside a cluster another one draws: the opening one carries its text.\n if (g.shaped?.glyphs.length === 0) continue;\n const { family, weight, style: fontStyle } = g.resolved.resolved;\n const font = await ctx.fonts.face(family, weight, fontStyle);\n const drawn = font && segmentGlyph(font, g);\n if (font && drawn) {\n if (!joins(seg, g, line)) items.push((seg = { font, line, glyphs: [] }));\n seg.glyphs.push(drawn);\n continue;\n }\n if (space) continue;\n const outline = outlineCommand(ctx, g, cmd, dx, dy);\n if (outline) items.push(outline);\n else skipGlyph(ctx, g, 'has no glyph to draw');\n }\n }\n\n // Consecutive text in one language other than the document's is one span marked with it.\n let open: string | undefined;\n for (const item of items) {\n if ('kind' in item) {\n await writeCommands(ctx, [item], state);\n continue;\n }\n const lang = cmd.runs[item.glyphs[0].g.run].lang;\n ctx.langs.add(lang);\n const mark = lang && lang.toLowerCase() !== ctx.opts.lang?.toLowerCase() ? lang : undefined;\n if (mark !== open) {\n if (open) ctx.out.op('EMC');\n if (mark) ctx.out.op('BDC', '/Span', writeDict({ Lang: pdfText(mark) }));\n open = mark;\n }\n await writeSegment(ctx, item, cmd, dx, dy, state);\n }\n if (open) ctx.out.op('EMC');\n\n const { decorations } = cachedPaintRuns(laid, cmd.runs, {});\n const rules: PathDrawCommand[] = decorations.map((d) => ({\n kind: 'path',\n path: { kind: 'rect', x: d.x0 + dx, y: d.y0 + dy, width: d.x1 - d.x0, height: d.y1 - d.y0 },\n fill: d.fill as CommandFill,\n }));\n await writeCommands(ctx, rules, state);\n}\n","import { type GlMat3, mat3 } from '@weasel-js/geom';\nimport { type CommandPaint, isGradientPaint, isSolidPaint } from '@weasel-js/paint';\nimport type { DrawCommand, GroupDrawCommand, PathDrawCommand } from '@weasel-js/renderer';\nimport { solidColor } from './color';\nimport type { ContentStream } from './content';\nimport type { DocumentFonts } from './fonts/embedFont';\nimport { rasterFill, writeGroup, writeShader } from './groupOps';\nimport { type TextureFill, texturePattern, writeImage } from './images';\nimport type { PdfObjects } from './objects';\nimport { NonFiniteNumber } from './num';\nimport { fillPathOps } from './pathOps';\nimport type { PageResources } from './resources';\nimport { paintShading } from './shading';\nimport { writeStroke } from './strokeOps';\nimport { writeText } from './textOps';\nimport type { PdfSkip, WritePdfOptions } from './writePdf';\n\nexport interface DrawState {\n transform: GlMat3;\n alpha: number;\n colorMatrix: number[] | null;\n}\n\nexport interface PageCtx {\n objects: PdfObjects;\n resources: PageResources;\n out: ContentStream;\n opts: WritePdfOptions;\n fonts: DocumentFonts;\n skipped: PdfSkip[];\n view: GlMat3 | undefined;\n /** The page's width in points. */\n width: number;\n /** The page's height in points, which a pattern's matrix needs to undo the page flip. */\n height: number;\n /** The lists being written, outermost first, each with the index reached in it. */\n trail: TrailStep[];\n /** The language of each run the document writes as text, across every page; undefined for a run with none. */\n langs: Set<string | undefined>;\n}\n\n/** One list on the way down to the command being written; `group` holds it, except for the page's own. */\nexport interface TrailStep {\n cmds: readonly DrawCommand[];\n at: number;\n group?: GroupDrawCommand;\n}\n\n/** The page cut off after the command being written: everything before it, inside the groups it sits in. */\nexport function pageThrough(trail: readonly TrailStep[]): DrawCommand[] {\n let tail: DrawCommand[] = [];\n for (let i = trail.length - 1; i >= 0; i--) {\n const { cmds, at, group } = trail[i]!;\n const list = [...cmds.slice(0, at), ...(tail.length ? tail : [cmds[at]!])];\n tail = group ? [{ ...group, children: list }] : list;\n }\n return tail;\n}\n\nexport function skip(ctx: PageCtx, detail: string): void {\n ctx.skipped.push({ kind: 'command', detail });\n}\n\n/** The page's default space from its y-down frame, origin top left: the matrix every content stream opens with. */\nexport function pageFlip(ctx: { height: number }): GlMat3 {\n return mat3.fromAffine([1, 0, 0, -1, 0, ctx.height]);\n}\n\nfunction setAlpha(ctx: PageCtx, fill: number, stroke: number): void {\n ctx.out.op('gs', `/${ctx.resources.extGState(fill, stroke)}`);\n}\n\nfunction writeShadedFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, paint: CommandPaint): void {\n const sh = paintShading(ctx, paint, state, cmd.path);\n if (!sh) return;\n const { out } = ctx;\n out.op('q');\n out.op(fillPathOps(out, cmd.path) ? 'W*' : 'W');\n out.op('n');\n if (sh.alpha < 1) setAlpha(ctx, sh.alpha, sh.alpha);\n if (sh.matrix) out.op('cm', ...mat3.toAffine(sh.matrix));\n if (sh.softMask) out.op('gs', `/${sh.softMask}`);\n out.op('sh', `/${sh.shading}`);\n out.op('Q');\n}\n\nfunction writeTextureFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, paint: TextureFill): void {\n const pattern = texturePattern(ctx, paint, state);\n if (!pattern) return skip(ctx, `texture ${paint.texture.id} cannot be drawn`);\n const alpha = (paint.opacity ?? 1) * state.alpha;\n const { out } = ctx;\n out.op('q');\n setAlpha(ctx, alpha, alpha);\n out.op('cs', '/Pattern');\n out.op('scn', `/${pattern}`);\n out.op(fillPathOps(out, cmd.path) ? 'f*' : 'f');\n out.op('Q');\n}\n\nasync function writeFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState): Promise<void> {\n const paint = cmd.fill?.paint;\n if (!paint) return;\n if (isGradientPaint(paint)) return writeShadedFill(ctx, cmd, state, paint);\n if (paint.kind === 'texture') return writeTextureFill(ctx, cmd, state, paint);\n // A registered paint kind, which the paint union does not name.\n if (!isSolidPaint(paint)) return rasterFill(ctx, cmd, state, (paint as { kind: string }).kind);\n if (cmd.vertexColors?.length) skip(ctx, 'fill vertexColors approximated by the solid fill');\n const { rgb, alpha } = solidColor(paint, state);\n const { out } = ctx;\n out.op('q');\n setAlpha(ctx, alpha, alpha);\n out.op('rg', ...rgb);\n out.op(fillPathOps(out, cmd.path) ? 'f*' : 'f');\n out.op('Q');\n}\n\nasync function writePath(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState): Promise<void> {\n await writeFill(ctx, cmd, state);\n if (cmd.stroke) await writeStroke(ctx, cmd.path, cmd.stroke, state);\n}\n\nasync function writeCommand(ctx: PageCtx, cmd: DrawCommand, state: DrawState): Promise<void> {\n if (cmd.kind === 'path') await writePath(ctx, cmd, state);\n else if (cmd.kind === 'group') await writeGroup(ctx, cmd, state);\n else if (cmd.kind === 'image' || cmd.kind === 'sprites') writeImage(ctx, cmd, state);\n else if (cmd.kind === 'text') await writeText(ctx, cmd, state);\n else await writeShader(ctx, cmd, state);\n}\n\n/**\n * Writes each command; one holding a number PDF cannot write is dropped whole and reported. `group` is\n * the group `cmds` are the children of.\n */\nexport async function writeCommands(\n ctx: PageCtx, cmds: readonly DrawCommand[], state: DrawState, group?: GroupDrawCommand,\n): Promise<void> {\n const step: TrailStep = { cmds, at: 0, group };\n ctx.trail.push(step);\n try {\n for (; step.at < cmds.length; step.at++) await writeOne(ctx, cmds[step.at]!, state);\n } finally {\n ctx.trail.pop();\n }\n}\n\nasync function writeOne(ctx: PageCtx, cmd: DrawCommand, state: DrawState): Promise<void> {\n const line = ctx.out.mark();\n const object = ctx.objects.mark();\n const skips = ctx.skipped.length;\n try {\n await writeCommand(ctx, cmd, state);\n } catch (err) {\n if (!(err instanceof NonFiniteNumber)) throw err;\n ctx.out.rollback(line);\n ctx.objects.nullUnset(object);\n ctx.skipped.length = skips;\n skip(ctx, `${cmd.kind} has a non-finite coordinate`);\n }\n}\n","/**\n * A TrueType font program cut down to the glyphs one document draws.\n *\n * Glyph ids do not move: an unused glyph keeps its slot with an empty outline, so `/CIDToGIDMap\n * /Identity`, `/W` and `/ToUnicode` stay keyed by the face's own ids. The tables kept are the ones\n * ISO 32000 lists for an embedded TrueType program (9.9); `cmap`, `name`, `post` and the layout\n * tables are dropped, since a CID-keyed font is addressed by glyph id alone.\n */\n\nconst KEPT = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\nconst REQUIRED = ['glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp'];\n\n// Composite glyph component flags (OpenType `glyf`).\nconst ARG_1_AND_2_ARE_WORDS = 0x0001;\nconst WE_HAVE_A_SCALE = 0x0008;\nconst MORE_COMPONENTS = 0x0020;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\nconst WE_HAVE_A_TWO_BY_TWO = 0x0080;\n\ntype Tables = Map<string, Uint8Array>;\n\nfunction readTables(sfnt: ArrayBuffer): Tables {\n const view = new DataView(sfnt);\n const out: Tables = new Map();\n for (let i = 0; i < view.getUint16(4); i++) {\n const at = 12 + i * 16;\n const tag = String.fromCharCode(...new Uint8Array(sfnt, at, 4));\n out.set(tag, new Uint8Array(sfnt, view.getUint32(at + 8), view.getUint32(at + 12)));\n }\n for (const tag of REQUIRED) if (!out.has(tag)) throw new Error(`pdf: a TrueType face has no \"${tag}\" table`);\n return out;\n}\n\nconst viewOf = (b: Uint8Array) => new DataView(b.buffer, b.byteOffset, b.byteLength);\n\n/** Each glyph's byte range in `glyf`. */\nfunction glyphRanges(t: Tables, numGlyphs: number): [number, number][] {\n const loca = viewOf(t.get('loca')!);\n const long = viewOf(t.get('head')!).getInt16(50) === 1;\n const at = (i: number) => (long ? loca.getUint32(i * 4) : loca.getUint16(i * 2) * 2);\n return Array.from({ length: numGlyphs }, (_, i) => [at(i), at(i + 1)]);\n}\n\n/** The glyph ids a composite glyph's components name; empty for a simple glyph. */\nfunction componentsOf(glyph: Uint8Array): number[] {\n if (glyph.byteLength < 10) return [];\n const v = viewOf(glyph);\n if (v.getInt16(0) >= 0) return [];\n const out: number[] = [];\n let at = 10;\n for (;;) {\n const flags = v.getUint16(at);\n out.push(v.getUint16(at + 2));\n at += 4 + (flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n if (flags & WE_HAVE_A_SCALE) at += 2;\n else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) at += 4;\n else if (flags & WE_HAVE_A_TWO_BY_TWO) at += 8;\n if (!(flags & MORE_COMPONENTS)) return out;\n }\n}\n\n/** `used`, `.notdef` and every component they reach, inside the face's glyph count. */\nfunction closure(used: Iterable<number>, glyf: Uint8Array, ranges: [number, number][]): Set<number> {\n const keep = new Set<number>();\n const queue = [0, ...used];\n while (queue.length > 0) {\n const gid = queue.pop()!;\n if (keep.has(gid) || gid < 0 || gid >= ranges.length) continue;\n keep.add(gid);\n const [start, end] = ranges[gid]!;\n queue.push(...componentsOf(glyf.subarray(start, end)));\n }\n return keep;\n}\n\nfunction checksum(b: Uint8Array): number {\n const v = viewOf(b);\n let sum = 0;\n for (let i = 0; i < b.byteLength; i += 4) sum = (sum + v.getUint32(i)) >>> 0;\n return sum;\n}\n\nconst pad4 = (n: number) => (n + 3) & ~3;\n\n/** Writes the tables as an sfnt, with each checksum and `head.checkSumAdjustment` filled in. */\nfunction writeSfnt(tables: Tables): Uint8Array {\n const tags = [...tables.keys()].sort();\n const dirBytes = 12 + tags.length * 16;\n let total = dirBytes;\n for (const tag of tags) total += pad4(tables.get(tag)!.byteLength);\n const out = new Uint8Array(total);\n const v = viewOf(out);\n v.setUint32(0, 0x00010000);\n v.setUint16(4, tags.length);\n const entrySelector = Math.floor(Math.log2(tags.length));\n const searchRange = 2 ** entrySelector * 16;\n v.setUint16(6, searchRange);\n v.setUint16(8, entrySelector);\n v.setUint16(10, tags.length * 16 - searchRange);\n let cursor = dirBytes;\n let headAt = 0;\n tags.forEach((tag, i) => {\n const data = tables.get(tag)!;\n const rec = 12 + i * 16;\n for (let c = 0; c < 4; c++) out[rec + c] = tag.charCodeAt(c);\n out.set(data, cursor);\n v.setUint32(rec + 4, checksum(out.subarray(cursor, cursor + pad4(data.byteLength))));\n v.setUint32(rec + 8, cursor);\n v.setUint32(rec + 12, data.byteLength);\n if (tag === 'head') headAt = cursor;\n cursor += pad4(data.byteLength);\n });\n v.setUint32(headAt + 8, (0xb1b0afba - checksum(out)) >>> 0);\n return out;\n}\n\n/**\n * `sfnt`, a TrueType (`glyf`) face, holding only the outlines of `used`, `.notdef`, and the\n * components those glyphs are built from. Ids past the face's last glyph are ignored.\n */\nexport function subsetTrueType(sfnt: ArrayBuffer, used: Iterable<number>): Uint8Array {\n const t = readTables(sfnt);\n const numGlyphs = viewOf(t.get('maxp')!).getUint16(4);\n const glyf = t.get('glyf')!;\n const ranges = glyphRanges(t, numGlyphs);\n const keep = closure(used, glyf, ranges);\n const count = Math.max(...keep) + 1;\n\n let glyfBytes = 0;\n for (const gid of keep) glyfBytes += pad4(ranges[gid]![1] - ranges[gid]![0]);\n const newGlyf = new Uint8Array(glyfBytes);\n const newLoca = new Uint8Array((count + 1) * 4);\n const loca = viewOf(newLoca);\n let cursor = 0;\n for (let gid = 0; gid < count; gid++) {\n loca.setUint32(gid * 4, cursor);\n if (!keep.has(gid)) continue;\n const [start, end] = ranges[gid]!;\n newGlyf.set(glyf.subarray(start, end), cursor);\n cursor += pad4(end - start);\n }\n loca.setUint32(count * 4, cursor);\n\n // Every glyph gets a full metric, so `numberOfHMetrics` is the glyph count.\n const hhea = t.get('hhea')!.slice();\n const hmtxIn = viewOf(t.get('hmtx')!);\n const longMetrics = viewOf(hhea).getUint16(34);\n const hmtx = new Uint8Array(count * 4);\n for (let gid = 0; gid < count; gid++) {\n const advance = hmtxIn.getUint16(Math.min(gid, longMetrics - 1) * 4);\n const lsb = gid < longMetrics ? hmtxIn.getInt16(gid * 4 + 2) : hmtxIn.getInt16(longMetrics * 4 + (gid - longMetrics) * 2);\n viewOf(hmtx).setUint16(gid * 4, advance);\n viewOf(hmtx).setInt16(gid * 4 + 2, lsb);\n }\n viewOf(hhea).setUint16(34, count);\n\n const head = t.get('head')!.slice();\n viewOf(head).setUint32(8, 0);\n viewOf(head).setInt16(50, 1);\n const maxp = t.get('maxp')!.slice();\n viewOf(maxp).setUint16(4, count);\n\n const out: Tables = new Map([\n ['glyf', newGlyf], ['head', head], ['hhea', hhea], ['hmtx', hmtx], ['loca', newLoca], ['maxp', maxp],\n ]);\n for (const tag of KEPT) if (!out.has(tag) && t.has(tag)) out.set(tag, t.get(tag)!);\n return writeSfnt(out);\n}\n","import type { FaceEmbedding, FontStyle } from '@weasel-js/font';\nimport { name, type PdfObjects, type PdfRef, text } from '../objects';\nimport type { PdfFontSource } from './fontSource';\nimport { subsetTrueType } from './subset';\nimport { toUnicodeCMap } from './toUnicode';\n\nexport interface EmbeddedFont {\n /** The font object; throws until `use` has returned a glyph, so a page names only faces it draws with. */\n readonly ref: PdfRef;\n /** The glyph id for `cp`, recorded for `/W` and `/ToUnicode`; `null` when the face has no glyph for it. */\n use(cp: number): number | null;\n /**\n * Records glyph `gid`, which a shaper chose, for `/W`, and for `/ToUnicode` as standing for\n * `text` unless an earlier use claimed it; without `text` it stands for nothing new. False\n * for `.notdef`.\n */\n useGlyph(gid: number, text?: string): boolean;\n /** The text `/ToUnicode` reads glyph `gid` back as, so far. */\n readsAs(gid: number): string | undefined;\n /** A glyph's advance in 1000/em units. */\n widthOf(gid: number): number;\n}\n\nconst encoder = new TextEncoder();\n\n/** U+2060 WORD JOINER: format character, no width, no break. */\nconst NOTHING = '\\u2060';\n\nfunction baseFontName(e: FaceEmbedding, family: string, weight: number, style: FontStyle): string {\n const safe = (s: string) => s.replace(/[^A-Za-z0-9._-]/g, '');\n return safe(e.postScriptName) || safe(`${family}-${weight}-${style}`);\n}\n\n/** Six capitals naming a subset, as ISO 32000 9.6.4 asks; the same glyphs always get the same tag. */\nfunction subsetTag(gids: Iterable<number>): string {\n let h = 0x811c9dc5;\n for (const gid of [...gids].sort((a, b) => a - b)) h = Math.imul(h ^ gid, 0x01000193) >>> 0;\n let tag = '';\n for (let i = 0; i < 6; i++, h = Math.floor(h / 26)) tag += String.fromCharCode(65 + (h % 26));\n return tag;\n}\n\nclass Face implements EmbeddedFont {\n /** Every glyph drawn, for `/W` and the subset. */\n readonly used = new Set<number>();\n /** Glyph id to the first text it was drawn for. */\n readonly unicode = new Map<number, string>();\n private fontRef: PdfRef | undefined;\n private written = false;\n\n constructor(\n private readonly objects: PdfObjects,\n private readonly emb: FaceEmbedding,\n private readonly baseFont: string,\n private readonly subset: boolean,\n ) {}\n\n get ref(): PdfRef {\n if (!this.fontRef) throw new Error('pdf: font ref read before any glyph was used');\n return this.fontRef;\n }\n\n use(cp: number): number | null {\n const gid = this.emb.glyphIndexOf(cp);\n return gid !== null && this.useGlyph(gid, String.fromCodePoint(cp)) ? gid : null;\n }\n\n useGlyph(gid: number, text?: string): boolean {\n if (gid === 0) return false;\n this.used.add(gid);\n if (text !== undefined && !this.unicode.has(gid)) this.unicode.set(gid, text);\n this.fontRef ??= this.objects.alloc();\n return true;\n }\n\n readsAs(gid: number): string | undefined {\n return this.unicode.get(gid);\n }\n\n /** What `/ToUnicode` maps each glyph to. A glyph standing for no text of its own (a cluster's\n * second glyph, always under `/ActualText`) reads as a word joiner: invisible, and skipped by\n * readers that ignore `/ActualText` (pdf.js), which otherwise take its glyph id for a code point. */\n private readings(): Map<number, string> {\n const out = new Map(this.unicode);\n for (const gid of this.used) if (!out.has(gid)) out.set(gid, NOTHING);\n return out;\n }\n\n widthOf(gid: number): number {\n return Math.round((this.emb.advanceOfGlyph(gid) * 1000) / this.emb.unitsPerEm);\n }\n\n write(): void {\n if (this.written || !this.fontRef) return;\n this.written = true;\n const { objects, emb } = this;\n const k = 1000 / emb.unitsPerEm;\n const file = objects.alloc();\n const descriptor = objects.alloc();\n const cid = objects.alloc();\n const toUnicode = objects.alloc();\n const program = this.subset ? subsetTrueType(emb.sfnt, this.used) : new Uint8Array(emb.sfnt);\n const fontName = this.subset ? `${subsetTag(this.used)}+${this.baseFont}` : this.baseFont;\n objects.streamDeflated(file, { Length1: program.byteLength }, program);\n objects.streamDeflated(toUnicode, {}, encoder.encode(toUnicodeCMap(this.readings())));\n objects.set(descriptor, {\n Type: name('FontDescriptor'),\n FontName: name(fontName),\n Flags: 4,\n FontBBox: emb.bbox.map((v, i) => (i < 2 ? Math.floor(v * k) : Math.ceil(v * k))),\n ItalicAngle: emb.italicAngle,\n Ascent: Math.round(emb.ascent * k),\n Descent: Math.round(emb.descent * k),\n CapHeight: Math.round(emb.capHeight * k),\n StemV: 80, // required by the spec, advisory for TrueType\n FontFile2: file,\n });\n const widths: (number | number[])[] = [];\n for (const gid of [...this.used].sort((a, b) => a - b)) widths.push(gid, [this.widthOf(gid)]);\n objects.set(cid, {\n Type: name('Font'),\n Subtype: name('CIDFontType2'),\n BaseFont: name(fontName),\n CIDSystemInfo: { Registry: text('Adobe'), Ordering: text('Identity'), Supplement: 0 },\n FontDescriptor: descriptor,\n CIDToGIDMap: name('Identity'),\n W: widths,\n });\n objects.set(this.fontRef, {\n Type: name('Font'),\n Subtype: name('Type0'),\n BaseFont: name(fontName),\n Encoding: name('Identity-H'),\n DescendantFonts: [cid],\n ToUnicode: toUnicode,\n });\n }\n}\n\n/** One document's embedded fonts: each face is written once, its program, `/W` and `/ToUnicode` covering the glyphs used. */\nexport class DocumentFonts {\n private readonly faces = new Map<string, Promise<Face | null>>();\n\n constructor(\n private readonly objects: PdfObjects,\n private readonly source: PdfFontSource,\n /** False embeds each face whole. */\n private readonly subset = true,\n ) {}\n\n /** The embedded font for a face, or null to draw its glyphs as outlines. */\n face(family: string, weight: number, style: FontStyle): Promise<EmbeddedFont | null> {\n const key = JSON.stringify([family, weight, style]);\n let p = this.faces.get(key);\n if (!p) {\n p = this.load(family, weight, style);\n this.faces.set(key, p);\n }\n return p;\n }\n\n private async load(family: string, weight: number, style: FontStyle): Promise<Face | null> {\n let emb: FaceEmbedding | null;\n try {\n emb = await this.source.embedding(family, weight, style);\n } catch {\n return null;\n }\n if (!emb || emb.outlines !== 'truetype' || !emb.embeddable) return null;\n return new Face(this.objects, emb, baseFontName(emb, family, weight, style), this.subset);\n }\n\n /** Writes every face's objects; call before `PdfObjects.settle`. */\n async finish(): Promise<void> {\n for (const p of this.faces.values()) (await p)?.write();\n }\n}\n","import { type GlMat3, mat3 } from '@weasel-js/geom';\nimport type { DrawCommand } from '@weasel-js/renderer';\nimport { ContentStream } from './content';\nimport { deflate as zlibDeflate } from './deflate';\nimport { type PageCtx, pageFlip, writeCommands } from './drawCommands';\nimport { DocumentFonts } from './fonts/embedFont';\nimport type { PdfFontSource } from './fonts/fontSource';\nimport { type Deflater, name, PdfObjects, type PdfRef, text } from './objects';\nimport { PageResources } from './resources';\n\n/** An axis-aligned rectangle in page units. */\nexport type Rect = { x: number; y: number; width: number; height: number };\n\n/** One page of the document: its size in points and the draw commands painted onto it. */\nexport interface PdfPage {\n width: number;\n height: number;\n commands: readonly DrawCommand[];\n view?: GlMat3;\n}\n\n/** A decoded bitmap handed back by the host, for images and paints the PDF cannot express directly. */\nexport interface RasterPixels {\n width: number;\n height: number;\n /** Straight RGBA, top-down. */\n data: Uint8ClampedArray;\n}\n\n/** Settings and host callbacks for `writePdf`; only `fonts` is required. */\nexport interface WritePdfOptions {\n fonts: PdfFontSource;\n /** Default true: each face carries only the glyphs the document draws. False embeds each face whole. */\n subsetFonts?: boolean;\n title?: string;\n /**\n * The document's language, a BCP 47 tag, written as the catalog's `/Lang`. Text in another\n * language is marked with its own. Left out, it is the language every run of text shares,\n * and the document has none when they do not share one.\n */\n lang?: string;\n /** Default true; unit tests pass false because jsdom realms lack `CompressionStream`. */\n compress?: boolean;\n readPixels?: (image: ImageBitmap | HTMLImageElement) => RasterPixels;\n /**\n * Draws `commands`, which are in the page's frame, in order onto a clear raster of `rect` at `scale`\n * pixels per point. `view` is the page's `PdfPage.view`: what a `world`-unit paint in `commands`\n * resolves through. For a group with its own `composite`, `commands` are the page up to and including\n * that group, so the raster is the group composited onto what it was drawn over.\n */\n rasterize?: (commands: readonly DrawCommand[], rect: Rect, scale: number, view: GlMat3 | undefined) => Promise<RasterPixels>;\n}\n\n/** A glyph or command the writer left out of the file, with the reason. */\nexport interface PdfSkip {\n kind: 'glyph' | 'command';\n detail: string;\n}\n\n/** The finished file and everything the writer had to leave out of it. */\nexport interface PdfResult {\n bytes: Uint8Array;\n skipped: readonly PdfSkip[];\n}\n\n/** One PDF page per entry of `pages`, which must hold at least one. */\nexport function writePdf(pages: readonly PdfPage[], opts: WritePdfOptions): Promise<PdfResult> {\n return writePdfWith(pages, opts, zlibDeflate);\n}\n\n/** `writePdf` with its compressor supplied; tests use it where `CompressionStream` is missing. Not re-exported by the package. */\nexport async function writePdfWith(\n pages: readonly PdfPage[],\n opts: WritePdfOptions,\n deflate: Deflater,\n): Promise<PdfResult> {\n if (pages.length === 0) throw new Error('pdf: a document needs at least one page');\n const objects = new PdfObjects();\n const catalog = objects.alloc();\n const tree = objects.alloc();\n const info = objects.alloc();\n const skipped: PdfSkip[] = [];\n const kids: PdfRef[] = [];\n const fonts = new DocumentFonts(objects, opts.fonts, opts.subsetFonts !== false);\n const langs = new Set<string | undefined>();\n\n for (const page of pages) {\n const pageRef = objects.alloc();\n const contentRef = objects.alloc();\n const ctx: PageCtx = {\n objects,\n resources: new PageResources(),\n out: new ContentStream(),\n opts,\n fonts,\n skipped,\n view: page.view,\n width: page.width,\n height: page.height,\n trail: [],\n langs,\n };\n // Page units are points, origin top left, y down.\n ctx.out.op('cm', ...mat3.toAffine(pageFlip(page)));\n await writeCommands(ctx, page.commands, { transform: mat3.identity(), alpha: 1, colorMatrix: null });\n const raw = ctx.out.bytes();\n objects.streamDeflated(contentRef, {}, raw);\n objects.set(pageRef, {\n Type: name('Page'),\n Parent: tree,\n MediaBox: [0, 0, page.width, page.height],\n Contents: contentRef,\n Resources: ctx.resources.dict(),\n });\n kids.push(pageRef);\n }\n\n const [shared] = langs.size === 1 ? langs : [];\n const lang = opts.lang ?? shared;\n objects.set(catalog, { Type: name('Catalog'), Pages: tree, Lang: lang === undefined ? undefined : text(lang) });\n objects.set(tree, { Type: name('Pages'), Kids: kids, Count: kids.length });\n objects.set(info, { Producer: text('weasel'), Title: opts.title === undefined ? undefined : text(opts.title) });\n await fonts.finish();\n await objects.settle(opts.compress !== false, deflate);\n return { bytes: objects.serialize(catalog, info), skipped };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/fonts/fontSource.ts","../src/latin1.ts","../src/num.ts","../src/content.ts","../src/deflate.ts","../src/color.ts","../src/objects.ts","../src/shading.ts","../src/images.ts","../src/pathOps.ts","../src/resources.ts","../src/groupOps.ts","../src/strokeOps.ts","../src/textOutlines.ts","../src/fonts/toUnicode.ts","../src/textSegment.ts","../src/textOps.ts","../src/drawCommands.ts","../src/fonts/subset.ts","../src/fonts/embedFont.ts","../src/writePdf.ts"],"names":["deflate","mat3","text","JOINS","dashLength","fillHasInk","strokeHasInk","isSolidPaint","writeText","isGradientPaint"],"mappings":"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","file":"index.js","sourcesContent":["import { type FaceEmbedding, type FontStyle, fontEmbedding, glyphOutline } from '@weasel-js/font';\n\n/** Where the writer gets the font faces it embeds and the glyph outlines it falls back to; `registryFontSource` reads the font registry. */\nexport interface PdfFontSource {\n embedding(family: string, weight: number, style: FontStyle): Promise<FaceEmbedding | null>;\n /** Em-space SVG path data, as glyphOutline answers it. */\n outline(family: string, weight: number, style: FontStyle, cp: number): string | null;\n}\n\n/** The faces registered with `@weasel-js/font`. */\nexport const registryFontSource: PdfFontSource = {\n embedding: fontEmbedding,\n outline: glyphOutline,\n};\n","/** Each char code as one byte: PDF syntax is ASCII, and binary strings here hold one byte per code. */\nexport function latin1Bytes(s: string): Uint8Array {\n return Uint8Array.from(s, (c) => c.charCodeAt(0));\n}\n\n/** The inverse of `latin1Bytes`. */\nexport function latin1(b: Uint8Array): string {\n let s = '';\n for (let i = 0; i < b.length; i++) s += String.fromCharCode(b[i] as number);\n return s;\n}\n","/** What `num` throws for NaN or an infinity; `writeCommands` drops the command that wrote one. */\nexport class NonFiniteNumber extends Error {}\n\n/** A PDF number: at most four decimals, never an exponent. */\nexport function num(n: number): string {\n if (!Number.isFinite(n)) throw new NonFiniteNumber(`pdf: cannot write non-finite number ${n}`);\n // toFixed falls back to exponent form from 1e21.\n if (Math.abs(n) >= 1e21) return BigInt(n).toString();\n const s = n.toFixed(4).replace(/\\.?0+$/, '');\n return s === '-0' || s === '' ? '0' : s;\n}\n","import { latin1Bytes } from './latin1';\nimport { num } from './num';\n\n/** A page's content stream, built one operator per line. */\nexport class ContentStream {\n private readonly lines: string[] = [];\n\n /** Numbers are written with `num`; strings go in as given, so a name operand is `'/GS1'`. */\n op(operator: string, ...operands: (number | string)[]): this {\n const args = operands.map((o) => (typeof o === 'number' ? num(o) : o));\n this.lines.push(args.length ? `${args.join(' ')} ${operator}` : operator);\n return this;\n }\n\n /** Where the stream ends now, for `rollback`. */\n mark(): number {\n return this.lines.length;\n }\n\n /** Drops every operator written since `mark` answered `at`. */\n rollback(at: number): void {\n this.lines.length = at;\n }\n\n bytes(): Uint8Array {\n return latin1Bytes(`${this.lines.join('\\n')}\\n`);\n }\n}\n","/** Zlib-wrapped deflate, as a PDF `FlateDecode` stream wants it. */\nexport async function deflate(data: Uint8Array): Promise<Uint8Array> {\n const stream = new Blob([data as BlobPart]).stream().pipeThrough(new CompressionStream('deflate'));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n","import { parseColor, type SolidPaint } from '@weasel-js/paint';\nimport { applyColorMatrix, composeColorMatrix } from '@weasel-js/renderer';\nimport type { DrawState } from './drawCommands';\n\nexport type Rgba = [number, number, number, number];\n\n/** A row-major 4x5 matrix on straight rgba in 0..1, clamped; null is identity. Group alpha is not part of it. */\nexport function foldColor(rgba: readonly [number, number, number, number], m: readonly number[] | null): Rgba {\n const [r, g, b, a] = rgba;\n return m ? applyColorMatrix(m, r, g, b, a) : [r, g, b, a];\n}\n\n/** `inner` applied first, then `outer`: the order the renderer's group stack composes them in. */\nexport function composeMatrix(outer: readonly number[] | null, inner: readonly number[] | undefined): number[] | null {\n if (!inner) return outer ? [...outer] : null;\n if (!outer) return [...inner];\n return composeColorMatrix(outer, inner, new Array<number>(20));\n}\n\n/** Every color the writer emits comes through here, so a color matrix has one place to apply. */\nexport function colorFor(color: string | readonly [number, number, number, number], state: DrawState): Rgba {\n return foldColor(typeof color === 'string' ? parseColor(color) : color, state.colorMatrix);\n}\n\n/** A solid paint's color under `state`, and the alpha it paints at: its own, its opacity's and the group's. */\nexport function solidColor(paint: SolidPaint, state: DrawState): { rgb: [number, number, number]; alpha: number } {\n const [r, g, b, a] = colorFor(paint.color, state);\n return { rgb: [r, g, b], alpha: a * (paint.opacity ?? 1) * state.alpha };\n}\n\n/** Every image pixel comes through here, so a color matrix has one place to apply. Straight RGBA in, straight RGBA out. */\nexport function foldPixels(data: Uint8ClampedArray, state: DrawState): Uint8ClampedArray {\n if (!state.colorMatrix) return data;\n const out = new Uint8ClampedArray(data.length);\n for (let i = 0; i + 3 < data.length; i += 4) {\n const [r, g, b, a] = foldColor(\n [data[i] / 255, data[i + 1] / 255, data[i + 2] / 255, data[i + 3] / 255],\n state.colorMatrix,\n );\n out[i] = r * 255;\n out[i + 1] = g * 255;\n out[i + 2] = b * 255;\n out[i + 3] = a * 255;\n }\n return out;\n}\n","import { latin1Bytes as latin1 } from './latin1';\nimport { num } from './num';\n\nexport class PdfName {\n constructor(readonly value: string) {}\n}\nexport class PdfRef {\n constructor(readonly id: number) {}\n}\nexport class PdfText {\n constructor(readonly value: string) {}\n}\nexport class PdfBytes {\n constructor(readonly value: Uint8Array) {}\n}\n\nexport type PdfValue =\n | number\n | boolean\n | null\n | PdfName\n | PdfRef\n | PdfText\n | PdfBytes\n | readonly PdfValue[]\n | PdfDict;\nexport interface PdfDict {\n readonly [key: string]: PdfValue | undefined;\n}\n\n/** Serializes as `/n`, escaping delimiters and anything outside printable ASCII as `#xx`. */\nexport function name(n: string): PdfName {\n return new PdfName(n);\n}\n/** Serializes as `(…)` when ASCII-safe, else as UTF-16BE hex with a byte-order mark. */\nexport function text(s: string): PdfText {\n return new PdfText(s);\n}\n/** Serializes as `<hex>`. */\nexport function bytes(b: Uint8Array): PdfBytes {\n return new PdfBytes(b);\n}\n\nconst hex2 = (b: number) => b.toString(16).toUpperCase().padStart(2, '0');\n\nfunction writeName(n: string): string {\n let out = '/';\n for (const b of new TextEncoder().encode(n)) {\n const ch = String.fromCharCode(b);\n out += b < 33 || b > 126 || '#()<>[]{}/%'.includes(ch) ? `#${hex2(b)}` : ch;\n }\n return out;\n}\n\nfunction writeText(s: string): string {\n if (/^[\\x20-\\x7e]*$/.test(s)) return `(${s.replace(/[\\\\()]/g, '\\\\$&')})`;\n let out = '<FEFF';\n for (let i = 0; i < s.length; i++) out += s.charCodeAt(i).toString(16).toUpperCase().padStart(4, '0');\n return `${out}>`;\n}\n\nfunction write(v: PdfValue): string {\n if (v === null) return 'null';\n if (typeof v === 'number') return num(v);\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n if (v instanceof PdfName) return writeName(v.value);\n if (v instanceof PdfRef) return `${v.id} 0 R`;\n if (v instanceof PdfText) return writeText(v.value);\n if (v instanceof PdfBytes) return `<${Array.from(v.value, hex2).join('')}>`;\n if (Array.isArray(v)) return `[${(v as readonly PdfValue[]).map(write).join(' ')}]`;\n return writeDict(v as PdfDict);\n}\n\n/** `d` as PDF syntax, for a dictionary written inline in a content stream. */\nexport function writeDict(d: PdfDict): string {\n const parts: string[] = [];\n for (const [k, v] of Object.entries(d)) if (v !== undefined) parts.push(`${writeName(k)} ${write(v)}`);\n return `<<${parts.join(' ')}>>`;\n}\n\nexport type Deflater = (data: Uint8Array) => Promise<Uint8Array>;\n\nexport class PdfObjects {\n private readonly bodies: (Uint8Array | undefined)[] = [];\n private readonly pending: { ref: PdfRef; dict: PdfDict; data: Uint8Array }[] = [];\n\n alloc(): PdfRef {\n this.bodies.push(undefined);\n return new PdfRef(this.bodies.length);\n }\n\n set(ref: PdfRef, value: PdfValue): void {\n this.bodies[ref.id - 1] = latin1(write(value));\n }\n\n /** Writes `/Length` itself; the caller passes the already-encoded bytes. */\n stream(ref: PdfRef, dict: PdfDict, data: Uint8Array): void {\n const head = latin1(`${writeDict({ ...dict, Length: data.length })}\\nstream\\n`);\n const tail = latin1('\\nendstream');\n const out = new Uint8Array(head.length + data.length + tail.length);\n out.set(head, 0);\n out.set(data, head.length);\n out.set(tail, head.length + data.length);\n this.bodies[ref.id - 1] = out;\n }\n\n /** Like `stream`, but takes the raw bytes: `settle` compresses them (or not) before `serialize`. */\n streamDeflated(ref: PdfRef, dict: PdfDict, data: Uint8Array): void {\n // Written now so a bad number throws inside the command that made the stream.\n writeDict(dict);\n this.pending.push({ ref, dict, data });\n }\n\n /** How many objects are allocated, for `nullUnset`. */\n mark(): number {\n return this.bodies.length;\n }\n\n /** Sets every object allocated since `mark` answered `at` and not yet written to `null`, so a dropped command leaves no hole. */\n nullUnset(at: number): void {\n const waiting = new Set(this.pending.map((p) => p.ref.id));\n for (let id = at + 1; id <= this.bodies.length; id++) {\n if (!this.bodies[id - 1] && !waiting.has(id)) this.set(new PdfRef(id), null);\n }\n }\n\n /** Writes every `streamDeflated` stream, FlateDecode-compressed when `compress` is set. */\n async settle(compress: boolean, deflate: Deflater): Promise<void> {\n for (const { ref, dict, data } of this.pending.splice(0)) {\n if (compress) this.stream(ref, { ...dict, Filter: name('FlateDecode') }, await deflate(data));\n else this.stream(ref, dict, data);\n }\n }\n\n serialize(root: PdfRef, info?: PdfRef): Uint8Array {\n const chunks: Uint8Array[] = [];\n let offset = 0;\n const push = (c: Uint8Array) => {\n chunks.push(c);\n offset += c.length;\n };\n push(Uint8Array.of(...latin1('%PDF-1.7\\n%'), 0xe2, 0xe3, 0xcf, 0xd3, 0x0a));\n const offsets: number[] = [];\n this.bodies.forEach((body, i) => {\n if (!body) throw new Error(`pdf: object ${i + 1} was allocated but never set`);\n offsets.push(offset);\n push(latin1(`${i + 1} 0 obj\\n`));\n push(body);\n push(latin1('\\nendobj\\n'));\n });\n const xref = offset;\n let table = `xref\\n0 ${this.bodies.length + 1}\\n0000000000 65535 f \\n`;\n for (const o of offsets) table += `${String(o).padStart(10, '0')} 00000 n \\n`;\n const trailer = writeDict({ Size: this.bodies.length + 1, Root: root, Info: info });\n push(latin1(`${table}trailer\\n${trailer}\\nstartxref\\n${xref}\\n%%EOF\\n`));\n const out = new Uint8Array(offset);\n let at = 0;\n for (const c of chunks) {\n out.set(c, at);\n at += c.length;\n }\n return out;\n }\n}\n","import { boundsOfPath, type GlMat3, mat3, type Path } from '@weasel-js/geom';\nimport {\n type CommandPaint,\n type CommandPaintUnits,\n gradientGeometry,\n isGradientPaint,\n resolveGradientStops,\n sampleResolvedStops,\n} from '@weasel-js/paint';\nimport { colorFor, type Rgba } from './color';\nimport type { DrawState, PageCtx } from './drawCommands';\nimport { latin1Bytes } from './latin1';\nimport { name, type PdfDict, type PdfRef, type PdfValue } from './objects';\n\ntype Gradient = Extract<CommandPaint, { kind: 'linear-gradient' | 'radial-gradient' | 'conic-gradient' }>;\ntype Box = { x0: number; y0: number; x1: number; y1: number };\ntype Stop = { offset: number; rgba: Rgba };\ntype Segment = { lo: number; hi: number; c0: Rgba; c1: Rgba };\n\n/** What a gradient fill needs in the content stream once its clip is set. */\nexport interface PaintShading {\n shading: string;\n softMask: string | null;\n /** The fill's constant alpha: opacity, group alpha and any alpha every stop shares. */\n alpha: number;\n /** Paint space to the current frame, or `null` when the two are the same. */\n matrix: GlMat3 | null;\n}\n\n/** A non-rgb `interpolate` is sampled into this many stops, which PDF then blends in RGB. */\nconst SAMPLED_STOPS = 64;\nconst CONIC_WEDGES = 360;\n\n/**\n * `paint` as a shading resource for a fill of `path`. `null` for a paint that is not a\n * gradient, and for one whose space has no inverse, which paints nothing.\n */\nexport function paintShading(ctx: PageCtx, paint: CommandPaint, state: DrawState, path: Path): PaintShading | null {\n if (!isGradientPaint(paint)) return null;\n const toFrame = paintToFrame(ctx, paint, state);\n const toPaint = toFrame && mat3.invert(toFrame);\n if (!toFrame || !toPaint) return null;\n const box = paintBox(path, toPaint);\n let segments = rampSegments(stopsOf(paint, state));\n const geometry = geometryOf(paint, box);\n if (geometry.degenerate) segments = [{ lo: 0, hi: 1, c0: segments[0].c0, c1: segments[0].c0 }];\n\n let alpha = (paint.opacity ?? 1) * state.alpha;\n const a0 = segments[0].c0[3];\n const uniform = segments.every((s) => s.c0[3] === a0 && s.c1[3] === a0);\n let softMask: string | null = null;\n if (uniform) alpha *= a0;\n else {\n const mask = writeShading(ctx, geometry, rampFunction(segments, (c) => [c[3]]), 'DeviceGray');\n softMask = ctx.resources.softMask(writeMaskGroup(ctx, mask, box));\n }\n const color = writeShading(ctx, geometry, rampFunction(segments, (c) => [c[0], c[1], c[2]]), 'DeviceRGB');\n return { shading: ctx.resources.shading(color), softMask, alpha, matrix: isIdentity(toFrame) ? null : toFrame };\n}\n\n/** Paint space to the current frame, resolving `units` as the renderer's `gradientSpaceInverse` does. */\nexport function paintToFrame(ctx: PageCtx, paint: { units?: CommandPaintUnits }, state: DrawState): GlMat3 | null {\n if (paint.units === 'local') return mat3.identity();\n const fromPage = mat3.invert(state.transform);\n if (!fromPage) return null;\n return paint.units === 'world' && ctx.view ? mat3.multiply(fromPage, ctx.view) : fromPage;\n}\n\nfunction isIdentity(m: GlMat3): boolean {\n return m[0] === 1 && m[1] === 0 && m[3] === 0 && m[4] === 1 && m[6] === 0 && m[7] === 0;\n}\n\n/** The path's bounds in paint space, grown a unit so nothing on the edge is left out. */\nfunction paintBox(path: Path, toPaint: GlMat3): Box {\n const b = boundsOfPath(path);\n const corners = [\n mat3.apply(toPaint, b.x, b.y),\n mat3.apply(toPaint, b.x + b.width, b.y),\n mat3.apply(toPaint, b.x, b.y + b.height),\n mat3.apply(toPaint, b.x + b.width, b.y + b.height),\n ];\n const xs = corners.map((c) => c[0]);\n const ys = corners.map((c) => c[1]);\n return { x0: Math.min(...xs) - 1, y0: Math.min(...ys) - 1, x1: Math.max(...xs) + 1, y1: Math.max(...ys) + 1 };\n}\n\nfunction stopsOf(paint: Gradient, state: DrawState): Stop[] {\n const resolved = resolveGradientStops(paint.stops);\n const space = paint.interpolate ?? 'rgb';\n if (resolved.length === 0) return [{ offset: 0, rgba: colorFor([0, 0, 0, 0], state) }];\n if (space === 'rgb') return resolved.map((s) => ({ offset: s.offset, rgba: colorFor(s.rgba, state) }));\n return Array.from({ length: SAMPLED_STOPS }, (_, i) => {\n const t = i / (SAMPLED_STOPS - 1);\n return { offset: t, rgba: colorFor(sampleResolvedStops(resolved, t, space), state) };\n });\n}\n\nconst lerp = (a: Rgba, b: Rgba, f: number): Rgba => a.map((v, i) => v + (b[i] - v) * f) as Rgba;\n\n/** The ramp over 0..1 as linear pieces, flat past either end stop, with no piece of zero width. */\nfunction rampSegments(stops: Stop[]): Segment[] {\n const first = stops[0];\n const last = stops[stops.length - 1];\n const raw: Segment[] = [];\n if (first.offset > 0) raw.push({ lo: Math.min(0, first.offset), hi: first.offset, c0: first.rgba, c1: first.rgba });\n for (let i = 0; i < stops.length - 1; i++) {\n const a = stops[i];\n const b = stops[i + 1];\n raw.push({ lo: a.offset, hi: b.offset, c0: a.rgba, c1: b.rgba });\n }\n if (last.offset < 1) raw.push({ lo: last.offset, hi: Math.max(1, last.offset), c0: last.rgba, c1: last.rgba });\n const out: Segment[] = [];\n for (const s of raw) {\n const lo = Math.max(s.lo, 0);\n const hi = Math.min(s.hi, 1);\n if (hi <= lo) continue;\n const span = s.hi - s.lo;\n out.push({ lo, hi, c0: lerp(s.c0, s.c1, (lo - s.lo) / span), c1: lerp(s.c0, s.c1, (hi - s.lo) / span) });\n }\n // Every stop sits outside 0..1 on one side, so one color covers the whole ramp.\n if (out.length === 0) {\n const c = first.offset >= 1 ? first.rgba : last.rgba;\n out.push({ lo: 0, hi: 1, c0: c, c1: c });\n }\n return out;\n}\n\nfunction rampFunction(segments: Segment[], channels: (c: Rgba) => number[]): PdfDict {\n const pieces = segments.map(\n (s): PdfDict => ({ FunctionType: 2, Domain: [0, 1], C0: channels(s.c0), C1: channels(s.c1), N: 1 }),\n );\n if (pieces.length === 1) return pieces[0];\n return {\n FunctionType: 3,\n Domain: [0, 1],\n Functions: pieces,\n Bounds: segments.slice(0, -1).map((s) => s.hi),\n Encode: segments.flatMap(() => [0, 1]),\n };\n}\n\ntype Geometry = { dict: PdfDict; data?: Uint8Array; degenerate?: boolean };\n\nfunction geometryOf(paint: Gradient, box: Box): Geometry {\n const extend = [true, true];\n if (paint.kind === 'linear-gradient') {\n const { from, to } = paint;\n // A zero-length segment paints the ramp's start everywhere, as the renderer does.\n const degenerate = from.x === to.x && from.y === to.y;\n const coords = degenerate ? [from.x, from.y, from.x + 1, from.y] : [from.x, from.y, to.x, to.y];\n return { dict: { ShadingType: 2, Coords: coords, Extend: extend }, degenerate };\n }\n const { center, radius, angle } = gradientGeometry(paint);\n if (paint.kind === 'radial-gradient') {\n const r = Math.max(radius, 1e-4);\n return { dict: { ShadingType: 3, Coords: [center.x, center.y, 0, center.x, center.y, r], Extend: extend } };\n }\n const reach = Math.max(\n ...[box.x0, box.x1].flatMap((x) => [box.y0, box.y1].map((y) => Math.hypot(x - center.x, y - center.y))),\n );\n return conicMesh(center, angle, reach * 1.01 + 1);\n}\n\n/**\n * Wedges about the center, each carrying its slice of the ramp as the function's input; the\n * center vertex takes the slice's midpoint, so a wedge strays at most half a slice from the\n * `atan` the renderer takes.\n */\nfunction conicMesh(center: { x: number; y: number }, angle: number, r: number): Geometry {\n const x0 = center.x - r;\n const y0 = center.y - r;\n const data = new Uint8Array(CONIC_WEDGES * 3 * 11);\n const view = new DataView(data.buffer);\n const coord = (v: number, lo: number) => Math.round(Math.min(1, Math.max(0, (v - lo) / (2 * r))) * 0xffffffff);\n let at = 0;\n const vertex = (x: number, y: number, t: number) => {\n view.setUint8(at, 0);\n view.setUint32(at + 1, coord(x, x0));\n view.setUint32(at + 5, coord(y, y0));\n view.setUint16(at + 9, Math.round(t * 0xffff));\n at += 11;\n };\n const rim = (i: number) => {\n const a = angle + (2 * Math.PI * i) / CONIC_WEDGES;\n vertex(center.x + r * Math.cos(a), center.y + r * Math.sin(a), i / CONIC_WEDGES);\n };\n for (let i = 0; i < CONIC_WEDGES; i++) {\n vertex(center.x, center.y, (i + 0.5) / CONIC_WEDGES);\n rim(i);\n rim(i + 1);\n }\n return {\n dict: {\n ShadingType: 4,\n BitsPerCoordinate: 32,\n BitsPerComponent: 16,\n BitsPerFlag: 8,\n Decode: [x0, x0 + 2 * r, y0, y0 + 2 * r, 0, 1],\n },\n data,\n };\n}\n\nfunction writeShading(ctx: PageCtx, g: Geometry, fn: PdfDict, colorSpace: string): PdfRef {\n const ref = ctx.objects.alloc();\n const dict: Record<string, PdfValue> = { ...g.dict, ColorSpace: name(colorSpace), Function: fn };\n if (g.data) ctx.objects.streamDeflated(ref, dict, g.data);\n else ctx.objects.set(ref, dict);\n return ref;\n}\n\n/** A luminosity group painting the gray alpha shading, for an ExtGState's `/SMask`. */\nfunction writeMaskGroup(ctx: PageCtx, mask: PdfRef, box: Box): PdfRef {\n const ref = ctx.objects.alloc();\n const body = latin1Bytes('/Sh1 sh\\n');\n ctx.objects.streamDeflated(\n ref,\n {\n Type: name('XObject'),\n Subtype: name('Form'),\n BBox: [box.x0, box.y0, box.x1, box.y1],\n Group: { Type: name('Group'), S: name('Transparency'), CS: name('DeviceGray'), I: true },\n Resources: { Shading: { Sh1: mask } },\n },\n body,\n );\n return ref;\n}\n","import { mat3 } from '@weasel-js/geom';\nimport type { CommandPaint } from '@weasel-js/paint';\nimport {\n type ImageDrawCommand,\n SPRITE_STRIDE,\n type SpritesDrawCommand,\n textureRegistry,\n} from '@weasel-js/renderer';\nimport { foldPixels } from './color';\nimport { type DrawState, type PageCtx, pageFlip, skip } from './drawCommands';\nimport { latin1Bytes } from './latin1';\nimport { name, type PdfDict, type PdfRef } from './objects';\nimport { paintToFrame } from './shading';\nimport type { RasterPixels, Rect } from './writePdf';\n\n/** A texture paint as a draw command carries it, its units already resolved. */\nexport type TextureFill = Extract<CommandPaint, { kind: 'texture' }>;\n\ntype Source = ImageBitmap | HTMLImageElement;\ntype Sampling = 'linear' | 'nearest' | undefined;\n\nconst ids = new WeakMap<object, number>();\nconst embedded = new WeakMap<object, Map<string, PdfRef>>();\nlet nextId = 0;\n\nfunction sizeOf(image: Source): { w: number; h: number } {\n const w = 'naturalWidth' in image ? image.naturalWidth : image.width;\n const h = 'naturalHeight' in image ? image.naturalHeight : image.height;\n return { w: w || 1, h: h || 1 };\n}\n\nfunction defaultReadPixels(image: Source): RasterPixels {\n const { w, h } = sizeOf(image);\n const ctx = new OffscreenCanvas(w, h).getContext('2d');\n if (!ctx) throw new Error('pdf: no 2D context to read image pixels with');\n ctx.drawImage(image, 0, 0);\n return { width: w, height: h, data: ctx.getImageData(0, 0, w, h).data };\n}\n\n/** A memo for this document: one entry per key, however many pages ask. */\nfunction memo(ctx: PageCtx): Map<string, PdfRef> {\n let m = embedded.get(ctx.objects);\n if (!m) embedded.set(ctx.objects, (m = new Map()));\n return m;\n}\n\nfunction idOf(image: Source): number {\n let id = ids.get(image);\n if (id === undefined) ids.set(image, (id = ++nextId));\n return id;\n}\n\nfunction imageObject(ctx: PageCtx, dict: PdfDict, data: Uint8Array): PdfRef {\n const ref = ctx.objects.alloc();\n ctx.objects.streamDeflated(ref, { Type: name('XObject'), Subtype: name('Image'), ...dict }, data);\n return ref;\n}\n\n/**\n * The image as an XObject, with its alpha as an SMask when any pixel is translucent.\n * Memoized per image, sampling and color matrix across the whole document.\n */\nexport function imageXObject(\n ctx: PageCtx,\n image: Source,\n state: DrawState = { transform: mat3.identity(), alpha: 1, colorMatrix: null },\n sampling: Sampling = 'linear',\n): PdfRef | null {\n const interpolate = sampling !== 'nearest';\n const key = `${idOf(image)} ${interpolate} ${state.colorMatrix?.join(',') ?? ''}`;\n const cache = memo(ctx);\n const hit = cache.get(key);\n if (hit) return hit;\n\n let raw: RasterPixels;\n try {\n raw = (ctx.opts.readPixels ?? defaultReadPixels)(image);\n } catch {\n skip(ctx, 'image could not be read');\n return null;\n }\n const ref = pixelsXObject(ctx, { ...raw, data: foldPixels(raw.data, state) }, interpolate);\n cache.set(key, ref);\n return ref;\n}\n\n/** Straight top-down RGBA as an image XObject, with its alpha as an SMask when any pixel is translucent. */\nfunction pixelsXObject(ctx: PageCtx, raw: RasterPixels, interpolate: boolean): PdfRef {\n const rgba = raw.data;\n const n = raw.width * raw.height;\n const rgb = new Uint8Array(n * 3);\n const alpha = new Uint8Array(n);\n let translucent = false;\n for (let i = 0; i < n; i++) {\n rgb[i * 3] = rgba[i * 4];\n rgb[i * 3 + 1] = rgba[i * 4 + 1];\n rgb[i * 3 + 2] = rgba[i * 4 + 2];\n alpha[i] = rgba[i * 4 + 3];\n if (alpha[i] < 255) translucent = true;\n }\n const dims = (space: string): PdfDict => ({\n Width: raw.width,\n Height: raw.height,\n ColorSpace: name(space),\n BitsPerComponent: 8,\n Interpolate: interpolate,\n });\n const mask = translucent ? imageObject(ctx, dims('DeviceGray'), alpha) : undefined;\n return imageObject(ctx, { ...dims('DeviceRGB'), SMask: mask }, rgb);\n}\n\n/** Draws rasterized pixels over `rect`, given in the page's y-down frame. */\nexport function writeRaster(ctx: PageCtx, raw: RasterPixels, rect: Rect, opacity: number): void {\n place(ctx, pixelsXObject(ctx, raw, true), raw.width, raw.height, {\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n opacity,\n });\n}\n\ninterface Place {\n x: number;\n y: number;\n w: number;\n h: number;\n source?: { x: number; y: number; w: number; h: number };\n flipX?: boolean;\n flipY?: boolean;\n opacity: number;\n}\n\n/** Draws one placement of `ref`, whose bitmap is `iw` by `ih` pixels, upright in the page's y-down frame. */\nfunction place(ctx: PageCtx, ref: PdfRef, iw: number, ih: number, p: Place): void {\n const src = p.source ?? { x: 0, y: 0, w: iw, h: ih };\n if (!(src.w > 0 && src.h > 0 && p.w !== 0 && p.h !== 0)) return;\n const { out } = ctx;\n // Where the whole bitmap lands so that `src` fills the rect.\n const W = (iw * p.w) / src.w;\n const H = (ih * p.h) / src.h;\n const left = p.x - (src.x * p.w) / src.w;\n const top = p.y - (src.y * p.h) / src.h;\n const right = p.x + p.w + (src.x * p.w) / src.w;\n const bottom = p.y + p.h + (src.y * p.h) / src.h;\n const a = p.flipX ? -W : W;\n const e = p.flipX ? right : left;\n const d = p.flipY ? H : -H;\n const f = p.flipY ? bottom - H : top + H;\n\n out.op('q');\n if (p.opacity < 1) out.op('gs', `/${ctx.resources.extGState(p.opacity, p.opacity)}`);\n if (p.source) out.op('re', p.x, p.y, p.w, p.h).op('W').op('n');\n out.op('cm', a, 0, 0, d, e, f);\n out.op('Do', `/${ctx.resources.xobject(ref)}`);\n out.op('Q');\n}\n\nexport function writeImage(ctx: PageCtx, cmd: ImageDrawCommand | SpritesDrawCommand, state: DrawState): void {\n const { w: iw, h: ih } = sizeOf(cmd.image);\n const ref = imageXObject(ctx, cmd.image, state, cmd.sampling);\n if (!ref) return;\n if (cmd.kind === 'image') {\n place(ctx, ref, iw, ih, { ...cmd, opacity: (cmd.opacity ?? 1) * state.alpha });\n return;\n }\n const s = cmd.sprites;\n for (let i = 0; i + SPRITE_STRIDE <= s.length; i += SPRITE_STRIDE) {\n const [dx, dy, dw, dh, sx, sy, sw, sh, opacity] = s.subarray(i, i + SPRITE_STRIDE);\n place(ctx, ref, iw, ih, {\n x: dx,\n y: dy,\n w: dw,\n h: dh,\n source: { x: sw < 0 ? sx + sw : sx, y: sh < 0 ? sy + sh : sy, w: Math.abs(sw), h: Math.abs(sh) },\n flipX: sw < 0,\n flipY: sh < 0,\n opacity: opacity * state.alpha,\n });\n }\n}\n\n/**\n * The tiling pattern a texture paint names, as a resource name for `scn`; `null` when the\n * texture is not registered or its placement has no inverse, which paints nothing.\n */\nexport function texturePattern(ctx: PageCtx, paint: TextureFill, state: DrawState): string | null {\n const entry = textureRegistry.get(paint.texture.id);\n if (!entry) return null;\n const toFrame = paintToFrame(ctx, paint, state);\n if (!toFrame) return null;\n const [a, b, c, d] = paint.transform ?? [1, 0, 0, 1];\n const o = paint.origin ?? { x: 0, y: 0 };\n const placement = mat3.fromAffine([a, b, c, d, o.x, o.y]);\n if (!mat3.invert(placement)) return null;\n // A pattern's matrix maps to the page's own space, below the flip that opens the content stream.\n const m = mat3.multiply(mat3.multiply(pageFlip(ctx), mat3.multiply(Float64Array.from(state.transform), toFrame)), placement);\n const matrix = mat3.toAffine(m);\n\n const key = `pattern ${paint.texture.id} ${matrix.join(',')} ${state.colorMatrix?.join(',') ?? ''}`;\n const cache = memo(ctx);\n let ref = cache.get(key);\n if (!ref) {\n const { w, h } = sizeOf(entry.source);\n const image = imageXObject(ctx, entry.source, state, 'linear');\n if (!image) return null;\n ref = ctx.objects.alloc();\n ctx.objects.streamDeflated(\n ref,\n {\n Type: name('Pattern'),\n PatternType: 1,\n PaintType: 1,\n TilingType: 1,\n BBox: [0, 0, w, h],\n XStep: w,\n YStep: h,\n Matrix: matrix,\n Resources: { XObject: { Im1: image } },\n },\n latin1Bytes(`${w} 0 0 -${h} 0 ${h} cm\\n/Im1 Do\\n`),\n );\n cache.set(key, ref);\n }\n return ctx.resources.pattern(ref);\n}\n","import {\n fillsOpenSubpaths,\n forEachSegment,\n PATH_C,\n PATH_L,\n PATH_M,\n PATH_Q,\n PATH_Z,\n type Path,\n resolveCorners,\n} from '@weasel-js/geom';\nimport type { ContentStream } from './content';\n\ninterface Contour {\n ops: [string, number[]][];\n closed: boolean;\n}\n\n/**\n * Writes a path's construction operators. `'closed'` leaves out contours with no `Z`,\n * for a fill that does not close open ones.\n */\nexport function pathOps(out: ContentStream, path: Path, which: 'all' | 'closed'): void {\n if (path.kind === 'rect') {\n out.op('re', path.x, path.y, path.width, path.height);\n return;\n }\n const { commands, coords } = resolveCorners(path);\n const contours: Contour[] = [];\n let cur: Contour | undefined;\n forEachSegment(commands, coords, (cmd, ci, px, py, _i, opens) => {\n if (cmd === PATH_M || opens || !cur) {\n cur = { ops: [], closed: false };\n contours.push(cur);\n if (cmd === PATH_M) {\n cur.ops.push(['m', [coords[ci], coords[ci + 1]]]);\n return;\n }\n cur.ops.push(['m', [px, py]]);\n }\n if (cmd === PATH_L) cur.ops.push(['l', [coords[ci], coords[ci + 1]]]);\n else if (cmd === PATH_C) cur.ops.push(['c', Array.from({ length: 6 }, (_, k) => coords[ci + k])]);\n else if (cmd === PATH_Q) {\n const [qx, qy, x, y] = [coords[ci], coords[ci + 1], coords[ci + 2], coords[ci + 3]];\n cur.ops.push(['c', [px + ((qx - px) * 2) / 3, py + ((qy - py) * 2) / 3, x + ((qx - x) * 2) / 3, y + ((qy - y) * 2) / 3, x, y]]);\n } else if (cmd === PATH_Z) {\n cur.ops.push(['h', []]);\n cur.closed = true;\n cur = undefined;\n }\n });\n for (const c of contours) {\n if (which === 'closed' && !c.closed) continue;\n for (const [op, args] of c.ops) out.op(op, ...args);\n }\n}\n\n/** Writes the region a fill of `path` covers, which a clip covers too, and answers whether it is even-odd. */\nexport function fillPathOps(out: ContentStream, path: Path): boolean {\n const closeOpen = path.kind === 'rect' || fillsOpenSubpaths(path);\n pathOps(out, path, closeOpen ? 'all' : 'closed');\n return path.kind === 'polygon' && path.fillRule === 'evenodd';\n}\n","import { num } from './num';\nimport { name, type PdfDict, PdfRef } from './objects';\n\n/** Hands out resource names (`GS1`, `Sh1`, …) for one page and writes them as its `/Resources`. */\nexport class PageResources {\n private readonly gstates = new Map<string, string>();\n private readonly masks = new Map<number, string>();\n private readonly refs = {\n Shading: new Map<number, string>(),\n XObject: new Map<number, string>(),\n Font: new Map<number, string>(),\n Pattern: new Map<number, string>(),\n };\n\n extGState(fillAlpha: number, strokeAlpha: number): string {\n // Checked now: the dict is written after the page, outside the command that asked for it.\n num(fillAlpha);\n num(strokeAlpha);\n const key = `${fillAlpha} ${strokeAlpha}`;\n let n = this.gstates.get(key);\n if (n === undefined) {\n n = this.nextGState();\n this.gstates.set(key, n);\n }\n return n;\n }\n\n /** An ExtGState whose `/SMask` is the luminosity of the transparency group `group`. */\n softMask(group: PdfRef): string {\n let n = this.masks.get(group.id);\n if (n === undefined) {\n n = this.nextGState();\n this.masks.set(group.id, n);\n }\n return n;\n }\n\n private nextGState(): string {\n return `GS${this.gstates.size + this.masks.size + 1}`;\n }\n\n shading(ref: PdfRef): string {\n return this.named('Shading', 'Sh', ref);\n }\n xobject(ref: PdfRef): string {\n return this.named('XObject', 'Im', ref);\n }\n font(ref: PdfRef): string {\n return this.named('Font', 'F', ref);\n }\n pattern(ref: PdfRef): string {\n return this.named('Pattern', 'P', ref);\n }\n\n private named(kind: keyof PageResources['refs'], prefix: string, ref: PdfRef): string {\n const m = this.refs[kind];\n let n = m.get(ref.id);\n if (n === undefined) {\n n = `${prefix}${m.size + 1}`;\n m.set(ref.id, n);\n }\n return n;\n }\n\n dict(): PdfDict {\n const out: Record<string, PdfDict> = {};\n if (this.gstates.size || this.masks.size) {\n const g: Record<string, PdfDict> = {};\n for (const [key, n] of this.gstates) {\n const [ca, CA] = key.split(' ').map(Number);\n g[n] = { Type: name('ExtGState'), ca, CA };\n }\n for (const [id, n] of this.masks) {\n g[n] = { Type: name('ExtGState'), SMask: { Type: name('Mask'), S: name('Luminosity'), G: new PdfRef(id) } };\n }\n out.ExtGState = g;\n }\n for (const [kind, m] of Object.entries(this.refs)) {\n if (!m.size) continue;\n const d: Record<string, PdfRef> = {};\n for (const [id, n] of m) d[n] = new PdfRef(id);\n out[kind] = d;\n }\n return out;\n }\n}\n","import { mat3 } from '@weasel-js/geom';\nimport {\n commandsBounds,\n type DrawCommand,\n type GroupDrawCommand,\n isOwnComposite,\n leavesUncovered,\n type PathDrawCommand,\n readsBackdrop,\n type ShaderDrawCommand,\n} from '@weasel-js/renderer';\nimport { composeMatrix, foldPixels } from './color';\nimport { ContentStream } from './content';\nimport { type DrawState, type PageCtx, pageFlip, pageThrough, skip, writeCommands } from './drawCommands';\nimport { writeRaster } from './images';\nimport { name } from './objects';\nimport { fillPathOps } from './pathOps';\nimport { PageResources } from './resources';\nimport type { RasterPixels, Rect } from './writePdf';\n\n/** Rasters are made at twice the page's point scale. */\nconst RASTER_SCALE = 2;\n\n/** The renderer clips through the fill mesh, so a clip covers what a fill of its path would. */\nfunction setClip(ctx: PageCtx, clip: NonNullable<GroupDrawCommand['clip']>): void {\n ctx.out.op(fillPathOps(ctx.out, clip) ? 'W*' : 'W');\n ctx.out.op('n');\n}\n\nfunction compositeName(op: NonNullable<GroupDrawCommand['composite']>): string {\n return typeof op === 'string' ? op : `${op.source}/${op.destination}`;\n}\n\n/**\n * Hands `commands` (already in the page's frame) to the raster hook and draws what comes back over `box`.\n * The pixels are folded through `state`'s color matrix and drawn at its alpha. `unhooked` is the skip\n * reported when there is no hook. `paper` paints the box white first, for a raster that replaces\n * what was drawn there rather than joining it.\n */\nasync function drawRaster(\n ctx: PageCtx,\n commands: readonly DrawCommand[],\n box: Rect,\n state: DrawState,\n reason: string,\n unhooked = reason,\n paper = false,\n): Promise<void> {\n const hook = ctx.opts.rasterize;\n if (!hook) return skip(ctx, unhooked);\n if (box.width <= 0 || box.height <= 0) return;\n let px: RasterPixels;\n try {\n px = await hook(commands, box, RASTER_SCALE, ctx.view);\n } catch (err) {\n return skip(ctx, `${reason} raster failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n if (px.data.length !== px.width * px.height * 4) return skip(ctx, `${reason} raster has the wrong number of pixels`);\n const inverse = mat3.invert(state.transform);\n if (!inverse) return;\n const { out } = ctx;\n out.op('q');\n out.op('cm', ...mat3.toAffine(inverse));\n if (paper) {\n out.op('rg', 1, 1, 1);\n out.op('re', box.x, box.y, box.width, box.height);\n out.op('f');\n }\n writeRaster(ctx, { ...px, data: foldPixels(px.data, state) }, box, state.alpha);\n out.op('Q');\n}\n\n/** A shader command's bounds are screen space, which is the page's frame here. */\nexport function writeShader(ctx: PageCtx, cmd: ShaderDrawCommand, state: DrawState): Promise<void> {\n const { x, y, w, h } = cmd.bounds;\n const x0 = Math.max(0, Math.floor(x));\n const y0 = Math.max(0, Math.floor(y));\n const x1 = Math.min(ctx.width, Math.ceil(x + w));\n const y1 = Math.min(ctx.height, Math.ceil(y + h));\n return drawRaster(ctx, [cmd], { x: x0, y: y0, width: x1 - x0, height: y1 - y0 }, state, 'shader');\n}\n\n/** A fill in a paint kind only the renderer can draw, rasterized on its own in the page's frame. */\nexport function rasterFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, kind: string): Promise<void> {\n const wrapper: GroupDrawCommand = {\n kind: 'group',\n transform: state.transform,\n children: [{ kind: 'path', path: cmd.path, fill: cmd.fill }],\n };\n const box = commandsBounds([wrapper], mat3.identity(), ctx);\n return drawRaster(ctx, [wrapper], box, state, `paint kind ${kind}`, `paint kind ${kind} needs a raster`);\n}\n\n/** `cmd`'s drawing, without its alpha, color matrix or composite, moved into the page's frame. */\nfunction inPageFrame(cmd: GroupDrawCommand, state: DrawState): GroupDrawCommand {\n const full = cmd.transform ? mat3.multiply(Float64Array.from(state.transform), cmd.transform) : state.transform;\n return { kind: 'group', transform: full, clip: cmd.clip, effects: cmd.effects, children: cmd.children };\n}\n\n/** The group's own frame is dropped from the state: its alpha and color matrix apply to the finished raster. */\nasync function rasterGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState, reason: string): Promise<void> {\n const wrapper = inPageFrame(cmd, state);\n const box = commandsBounds([wrapper], mat3.identity(), ctx, RASTER_SCALE);\n const grouped: DrawState = {\n transform: state.transform,\n alpha: state.alpha * (cmd.alpha ?? 1),\n colorMatrix: composeMatrix(state.colorMatrix, cmd.colorMatrix),\n };\n await drawRaster(ctx, [wrapper], box, grouped, reason);\n}\n\n/**\n * A composite PDF has no operator for, drawn by the renderer onto the page beneath it and placed over\n * what it changes: the group's bounds, or the whole page for an operator that clears what the group\n * leaves empty. The page so far is under every enclosing group, so the raster is placed as it comes.\n */\nfunction compositeGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState): Promise<void> {\n const composite = cmd.composite!;\n const box = leavesUncovered(composite)\n ? commandsBounds([inPageFrame(cmd, state)], mat3.identity(), ctx, RASTER_SCALE)\n : { x: 0, y: 0, width: ctx.width, height: ctx.height };\n const reason = `composite ${compositeName(composite)}`;\n const placed: DrawState = { transform: state.transform, alpha: 1, colorMatrix: null };\n return drawRaster(ctx, pageThrough(ctx.trail), box, placed, reason, reason, true);\n}\n\n/**\n * The children in a form of their own, so a group's alpha lands on the finished surface. The form is\n * drawn from the page's default space, which is what a tiling pattern's matrix inside it is relative to.\n */\nasync function isolatedGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState, inner: DrawState): Promise<void> {\n if (cmd.colorMatrix?.[19]) skip(ctx, 'group color matrix alpha offset is not drawn');\n const flip = pageFlip(ctx);\n const toPage = mat3.multiply(flip, Float64Array.from(state.transform));\n const fromPage = mat3.invert(toPage);\n if (!fromPage) return;\n const sub: PageCtx = { ...ctx, out: new ContentStream(), resources: new PageResources() };\n sub.out.op('cm', ...mat3.toAffine(mat3.multiply(flip, Float64Array.from(inner.transform))));\n if (cmd.clip) setClip(sub, cmd.clip);\n await writeCommands(sub, cmd.children, { ...inner, alpha: 1 }, cmd);\n\n const form = ctx.objects.alloc();\n ctx.objects.streamDeflated(\n form,\n {\n Type: name('XObject'),\n Subtype: name('Form'),\n BBox: [0, 0, ctx.width, ctx.height],\n Group: { Type: name('Group'), S: name('Transparency'), I: true },\n Resources: sub.resources.dict(),\n },\n sub.out.bytes(),\n );\n const { out } = ctx;\n out.op('q');\n out.op('cm', ...mat3.toAffine(fromPage));\n if (inner.alpha < 1) out.op('gs', `/${ctx.resources.extGState(inner.alpha, inner.alpha)}`);\n out.op('Do', `/${ctx.resources.xobject(form)}`);\n out.op('Q');\n}\n\nexport async function writeGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState): Promise<void> {\n const hooked = ctx.opts.rasterize !== undefined;\n if (cmd.composite && isOwnComposite(cmd.composite)) {\n if (hooked) return compositeGroup(ctx, cmd, state);\n skip(ctx, `composite ${compositeName(cmd.composite)} drawn as source-over`);\n }\n if (cmd.effects?.length) return rasterGroup(ctx, cmd, state, 'effects');\n // A form has no paper to put a raster on, so the whole isolated surface is drawn by the renderer.\n if (cmd.isolate && hooked && readsBackdrop(cmd.children)) return rasterGroup(ctx, cmd, state, 'composite');\n const m = cmd.transform;\n const inner: DrawState = {\n transform: m ? mat3.multiply(Float64Array.from(state.transform), m) : state.transform,\n alpha: state.alpha * (cmd.alpha ?? 1),\n colorMatrix: composeMatrix(state.colorMatrix, cmd.colorMatrix),\n };\n if (cmd.isolate) return isolatedGroup(ctx, cmd, state, inner);\n const { out } = ctx;\n out.op('q');\n if (m) out.op('cm', ...mat3.toAffine(m));\n if (cmd.clip) setClip(ctx, cmd.clip);\n await writeCommands(ctx, cmd.children, inner, cmd);\n out.op('Q');\n}\n","import type { Path } from '@weasel-js/geom';\nimport { type CommandPaint, type CommandStroke, dashPattern, isSolidPaint, type Stroke } from '@weasel-js/paint';\nimport { markerDrawCommands, resolveStrokeLengths } from '@weasel-js/renderer';\nimport { dashLength, strokeInsets, strokeToPath } from '@weasel-js/stroke';\nimport { solidColor } from './color';\nimport { type DrawState, type PageCtx, skip, writeCommands } from './drawCommands';\nimport { NonFiniteNumber, num } from './num';\nimport { pathOps } from './pathOps';\n\nconst CAPS = { butt: 0, round: 1, square: 2 } as const;\nconst JOINS = { miter: 0, round: 1, bevel: 2 } as const;\n\n/** Whether PDF's own stroke operator draws this stroke as the renderer would. */\nexport function isNative(stroke: CommandStroke, width: number): boolean {\n if (stroke.align && stroke.align !== 'center') return false;\n if (stroke.vertexWidths || stroke.nib || stroke.vertexColors) return false;\n const { start, end } = strokeInsets(stroke as Stroke, width);\n return start === 0 && end === 0;\n}\n\n/**\n * The line style operators for a native stroke; the caller sets its color.\n * `length` is the stroked path's, from `dashLength`, so a dash too fine for\n * it goes solid here as it does in the renderer.\n */\nexport function strokeStyleOps(ctx: PageCtx, stroke: CommandStroke, width: number, length?: number): void {\n const { out } = ctx;\n out.op('w', width);\n out.op('J', CAPS[stroke.cap ?? 'butt']);\n out.op('j', JOINS[stroke.join ?? 'miter']);\n out.op('M', stroke.miterLimit ?? 4);\n // PDF draws nothing for an all-zero dash and rejects a negative one; the renderer strokes both solid.\n const dash = dashPattern(stroke.dash, length);\n if (dash === 'non-finite') throw new NonFiniteNumber(`pdf: cannot write non-finite dash ${stroke.dash}`);\n if (dash !== 'solid') out.op('d', `[${dash.map(num).join(' ')}]`, 0);\n}\n\n/** `raw` with its `{ px }` lengths resolved at the exact scale of `state`, and its width as a number. */\nexport function resolveStroke(\n path: Path,\n raw: CommandStroke & { paint: CommandPaint },\n state: DrawState,\n): { stroke: CommandStroke & { paint: CommandPaint }; width: number } {\n const { cmd } = resolveStrokeLengths(state.transform, { kind: 'path', path, stroke: raw }, { quantize: false });\n return { stroke: cmd.stroke, width: typeof cmd.stroke.width === 'number' ? cmd.stroke.width : 1 };\n}\n\nfunction writeNative(ctx: PageCtx, path: Path, stroke: CommandStroke, state: DrawState, width: number): void {\n const paint = stroke.paint;\n if (!paint || !isSolidPaint(paint)) return;\n const { rgb, alpha } = solidColor(paint, state);\n const { out } = ctx;\n out.op('q');\n out.op('gs', `/${ctx.resources.extGState(alpha, alpha)}`);\n out.op('RG', ...rgb);\n strokeStyleOps(ctx, stroke, width, stroke.dash ? dashLength(path) : undefined);\n pathOps(out, path, 'all');\n out.op('S');\n out.op('Q');\n}\n\n/**\n * Strokes `path`: natively where PDF draws it as the renderer does, otherwise by\n * filling the stroke's outline, which also carries gradient paints. Marker heads\n * follow as their own commands; heads with their own paint are drawn over the\n * line-colored copy that `strokeToPath` already unioned into the outline.\n */\nexport async function writeStroke(ctx: PageCtx, path: Path, rawStroke: CommandStroke, state: DrawState): Promise<void> {\n if (!rawStroke.paint) return;\n const { stroke, width } = resolveStroke(path, { ...rawStroke, paint: rawStroke.paint as CommandPaint }, state);\n if (!(width > 0)) return;\n let heads =\n stroke.markerStart || stroke.markerMid || stroke.markerEnd\n ? markerDrawCommands(path, stroke, width, undefined)\n : [];\n if (isNative(stroke, width) && isSolidPaint(stroke.paint)) writeNative(ctx, path, stroke, state, width);\n else {\n if (stroke.vertexColors) skip(ctx, 'stroke vertexColors approximated by a single paint');\n heads = heads.filter((h) => h.stroke || h.fill?.paint !== stroke.paint);\n const outline = strokeToPath(path, stroke as Stroke);\n await writeCommands(ctx, [{ kind: 'path', path: outline, fill: { paint: stroke.paint } }], state);\n }\n if (heads.length) await writeCommands(ctx, heads, state);\n}\n","import type { Path } from '@weasel-js/geom';\nimport { type CommandFill, type CommandStroke, fillHasInk, strokeHasInk } from '@weasel-js/paint';\nimport type { PathDrawCommand, TextDrawCommand } from '@weasel-js/renderer';\nimport { glyphOutlineAt, type PlacedGlyph } from '@weasel-js/text';\nimport type { PageCtx } from './drawCommands';\n\n/** Word breaks a reader copies and searches by: written as glyphs where the face has one, and never ink. */\nexport function isSpace(cp: number): boolean {\n return cp === 0x20 || cp === 0xa0;\n}\n\nexport function codepointLabel(cp: number): string {\n return `U+${cp.toString(16).toUpperCase().padStart(4, '0')}`;\n}\n\nexport function skipGlyph(ctx: PageCtx, g: PlacedGlyph, why: string): void {\n const { family, weight, style } = g.resolved.resolved;\n ctx.skipped.push({ kind: 'glyph', detail: `${codepointLabel(g.cp)} in ${family} ${weight} ${style} ${why}` });\n}\n\n/** The glyph's outline where the renderer's outline tier places it, faked bold and oblique as it fakes them. */\nexport function placedOutline(ctx: PageCtx, g: PlacedGlyph, dx: number, dy: number): Path | null {\n const { family, weight, style } = g.resolved.resolved;\n let d: string | null;\n try {\n // A shaped code point draws its cluster's glyphs, not the one its code point maps to.\n d = g.shaped ? g.shaped.d : ctx.opts.fonts.outline(family, weight, style, g.cp);\n } catch {\n return null;\n }\n if (d === null) return null;\n return glyphOutlineAt(d, g, dx, dy);\n}\n\n/** The glyph as a path command painted as its run paints it (or only stroked), or null when the source has no outline for it. */\nexport function outlineCommand(\n ctx: PageCtx,\n g: PlacedGlyph,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n paint: 'all' | 'stroke' = 'all',\n): PathDrawCommand | null {\n const path = placedOutline(ctx, g, dx, dy);\n if (!path) return null;\n const run = cmd.runs[g.run];\n const out: PathDrawCommand = { kind: 'path', path };\n if (paint !== 'stroke' && fillHasInk(run.fill)) out.fill = run.fill as CommandFill;\n if (strokeHasInk(run.stroke)) out.stroke = run.stroke as CommandStroke;\n return out;\n}\n","const MAX_PER_BLOCK = 100;\n\nconst hex4 = (n: number) => n.toString(16).toUpperCase().padStart(4, '0');\n\n/** `text` as UTF-16BE hex digits, astral code points as surrogate pairs. */\nexport function utf16Hex(text: string): string {\n let out = '';\n for (let i = 0; i < text.length; i++) out += hex4(text.charCodeAt(i));\n return out;\n}\n\n/** A ToUnicode CMap for a two-byte identity-encoded font: glyph id to the text it was drawn for. */\nexport function toUnicodeCMap(glyphs: ReadonlyMap<number, string>): string {\n const entries = [...glyphs].sort((a, b) => a[0] - b[0]);\n const lines = [\n '/CIDInit /ProcSet findresource begin',\n '12 dict begin',\n 'begincmap',\n '/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def',\n '/CMapName /Adobe-Identity-UCS def',\n '/CMapType 2 def',\n '1 begincodespacerange',\n '<0000> <FFFF>',\n 'endcodespacerange',\n ];\n for (let i = 0; i < entries.length; i += MAX_PER_BLOCK) {\n const block = entries.slice(i, i + MAX_PER_BLOCK);\n lines.push(`${block.length} beginbfchar`);\n for (const [gid, text] of block) lines.push(`<${hex4(gid)}> <${utf16Hex(text)}>`);\n lines.push('endbfchar');\n }\n lines.push('endcmap', 'CMapName currentdict /CMap defineresource pop', 'end', 'end');\n return lines.join('\\n');\n}\n","import type { Path } from '@weasel-js/geom';\nimport {\n type CommandPaint,\n type CommandStroke,\n fillHasInk,\n isSolidPaint,\n type SolidPaint,\n strokeHasInk,\n} from '@weasel-js/paint';\nimport type { TextDrawCommand } from '@weasel-js/renderer';\nimport { dashLength } from '@weasel-js/stroke';\nimport { glyphTurn, type PlacedGlyph, SYNTHETIC_ITALIC_RADIANS, syntheticBoldOffset } from '@weasel-js/text';\nimport { solidColor } from './color';\nimport { utf16Hex } from './fonts/toUnicode';\nimport { type DrawState, type PageCtx, writeCommands } from './drawCommands';\nimport type { EmbeddedFont } from './fonts/embedFont';\nimport { num } from './num';\nimport { isNative, resolveStroke, strokeStyleOps } from './strokeOps';\nimport { isSpace, outlineCommand, placedOutline, skipGlyph } from './textOutlines';\n\n/** What one placed code point draws in a text object. */\nexport interface SegmentGlyph {\n g: PlacedGlyph;\n /** Each glyph's code in the segment's font and where it sits, in ems from the code point's\n * pen, y down: one at the pen unless a shaper set its cluster. */\n glyphs: readonly { code: number; x: number; y: number }[];\n /** Text a reader takes the glyphs for, in place of what `/ToUnicode` maps them to; set when\n * that mapping cannot give back the code point's cluster. */\n actual?: string;\n}\n\n/** Glyphs one text object draws: one line, run, face, size and baseline. */\nexport interface TextSegment {\n font: EmbeddedFont;\n line: number;\n glyphs: SegmentGlyph[];\n}\n\nconst WHITESPACE = /^\\s+$/;\nconst FILL = 0;\nconst STROKE = 1;\nconst FILL_STROKE = 2;\nconst INVISIBLE = 3;\nconst CLIP = 7;\nconst JOINS = { miter: 0, round: 1 } as const;\n/** `growRegion`'s default, which synthetic bold grows with; both limits are miter length over half-width. */\nconst BOLD_MITER_LIMIT = 4;\n\n/**\n * A rect over every glyph's ink, for the shading and soft mask a gradient fill needs bounds for.\n * An em past each slot on every side covers any glyph the face draws, oblique ones included.\n */\nfunction inkBox(seg: TextSegment, dx: number, dy: number): Path {\n const { fontSize: s, baselineY, rotate, x, advance } = seg.glyphs[0].g;\n if (rotate) {\n // A turned glyph is alone in its segment; this reaches past its ink at any angle.\n const r = advance + 1.5 * s;\n return { kind: 'rect', x: x + dx - r, y: baselineY + dy - r, width: 2 * r, height: 2 * r };\n }\n let x0 = Infinity;\n let x1 = -Infinity;\n for (const { g } of seg.glyphs) {\n x0 = Math.min(x0, g.x);\n x1 = Math.max(x1, g.x + g.advance);\n }\n return { kind: 'rect', x: x0 + dx - s, y: baselineY + dy - 1.5 * s, width: x1 - x0 + 2 * s, height: 2.5 * s };\n}\n\n/**\n * `BT … ET` for the segment: its glyphs at their laid-out x, the gap between what the font\n * advances and what the layout stepped written as a TJ adjustment. A glyph a shaper set off the\n * baseline is raised with `Ts`. A left-to-right cluster of several glyphs is marked with its text\n * as `/ActualText` (`spansOf`). A right-to-left one is not, since pdf.js ends a piece of text at\n * every marked span and orders right-to-left text within a piece: its glyphs that read as nothing\n * are drawn last, together, in one span that reads as nothing.\n */\nfunction textObject(ctx: PageCtx, seg: TextSegment, mode: number, dx: number, dy: number): void {\n const { out } = ctx;\n const first = seg.glyphs[0].g;\n const s = first.fontSize;\n const shear = first.resolved.synthetic.italic ? Math.tan(SYNTHETIC_ITALIC_RADIANS) : 0;\n out.op('BT');\n out.op('Tf', `/${ctx.resources.font(seg.font.ref)}`, 1);\n if (mode !== FILL) out.op('Tr', mode);\n // Glyph space is y up and the frame is y down, so d is negative; c leans the tops toward +x.\n // A turned glyph then turns about its pen.\n const [cos, sin] = glyphTurn(first.rotate);\n out.op('Tm', cos * s, sin * s, s * (cos * shear + sin), s * (sin * shear - cos), first.x + dx, first.baselineY + dy);\n let parts: string[] = [];\n let hex = '';\n let pen = 0;\n /** Where the last `Td` put the line, in ems from the segment's start. */\n let line = 0;\n let anchor = false;\n let rise = '0';\n const flush = () => {\n if (hex) parts.push(`<${hex}>`);\n if (parts.length > 0) out.op('TJ', `[${parts.join(' ')}]`);\n parts = [];\n hex = '';\n };\n const emit = (code: number, to: number, y: number) => {\n // Text space is y up, so a glyph the shaper moved down is a negative rise.\n const at = num(-y);\n if (at !== rise) {\n flush();\n out.op('Ts', (rise = at));\n }\n if (anchor && WHITESPACE.test(seg.font.readsAs(code) ?? '')) {\n flush();\n const step = num(to - line);\n out.op('Td', step, 0);\n pen = line += Number(step);\n anchor = false;\n }\n const adjust = num((pen - to) * 1000);\n if (adjust !== '0') {\n if (hex) parts.push(`<${hex}>`);\n hex = '';\n parts.push(adjust);\n pen -= Number(adjust) / 1000;\n }\n hex += code.toString(16).toUpperCase().padStart(4, '0');\n pen += seg.font.widthOf(code) / 1000;\n // pdf.js moves past no glyph that reads as nothing, and reads a gap after one as a\n // space, so its pen is put back at the next space, where a gap is read as nothing new.\n anchor ||= seg.font.readsAs(code) === '' && seg.font.widthOf(code) !== 0;\n };\n const span = (text: string, glyphs: readonly { code: number; to: number; y: number }[]) => {\n flush();\n out.op('BDC', '/Span', `<</ActualText <${text ? `FEFF${utf16Hex(text)}` : ''}>>>`);\n for (const p of glyphs) emit(p.code, p.to, p.y);\n flush();\n out.op('EMC');\n };\n /** Right-to-left glyphs that read as nothing, drawn after the rest. */\n const silent: { code: number; to: number; y: number }[] = [];\n for (const { g, glyphs, actual } of seg.glyphs) {\n const placed = glyphs.map(({ code, x, y }) => ({ code, to: (g.x - first.x) / s + x, y }));\n if (actual === undefined) {\n for (const p of placed) emit(p.code, p.to, p.y);\n } else if (g.shaped?.rtl) {\n for (const p of placed) {\n if (seg.font.readsAs(p.code) === '') silent.push(p);\n else emit(p.code, p.to, p.y);\n }\n } else {\n for (const { text, glyphs: some } of spansOf(placed, actual)) span(text, some);\n }\n }\n if (silent.length > 0) span('', silent);\n flush();\n // Ts outlives ET, as all of the text state does.\n if (rise !== '0') out.op('Ts', 0);\n out.op('ET');\n}\n\n/**\n * The longest glyph outline in the segment, for `dashPattern`'s cap. The renderer strokes each\n * glyph on its own, so this goes solid when its longest glyph would.\n */\nfunction longestOutline(ctx: PageCtx, seg: TextSegment, dx: number, dy: number): number {\n let length = 0;\n for (const { g } of seg.glyphs) {\n const outline = isSpace(g.cp) ? null : placedOutline(ctx, g, dx, dy);\n if (outline) length = Math.max(length, dashLength(outline));\n }\n return length;\n}\n\n/** Paints the segment's glyphs from their outlines: all of the run's paint, or only its stroke. */\nasync function paintOutlines(\n ctx: PageCtx,\n seg: TextSegment,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n state: DrawState,\n paint: 'all' | 'stroke',\n): Promise<void> {\n for (const { g } of seg.glyphs) {\n if (isSpace(g.cp)) continue;\n const outline = outlineCommand(ctx, g, cmd, dx, dy, paint);\n if (outline) await writeCommands(ctx, [outline], state);\n else skipGlyph(ctx, g, 'has no outline to paint its ink with');\n }\n}\n\n/** Selectable text that paints nothing, under ink drawn from the glyphs' outlines. */\nasync function writeOutlinedInk(ctx: PageCtx, seg: TextSegment, cmd: TextDrawCommand, dx: number, dy: number, state: DrawState) {\n ctx.out.op('q');\n textObject(ctx, seg, INVISIBLE, dx, dy);\n ctx.out.op('Q');\n await paintOutlines(ctx, seg, cmd, dx, dy, state, 'all');\n}\n\n/** Writes one segment as text, painted the way its run paints it. */\nexport async function writeSegment(\n ctx: PageCtx,\n seg: TextSegment,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n state: DrawState,\n): Promise<void> {\n const first = seg.glyphs[0].g;\n const run = cmd.runs[first.run];\n const fill = fillHasInk(run.fill) ? (run.fill!.paint as CommandPaint) : undefined;\n const box = inkBox(seg, dx, dy);\n const rawStroke = strokeHasInk(run.stroke) ? (run.stroke as CommandStroke & { paint: CommandPaint }) : undefined;\n const stroke = rawStroke && resolveStroke(box, rawStroke, state);\n const nativeStroke = stroke && isNative(stroke.stroke, stroke.width) && isSolidPaint(stroke.stroke.paint);\n const solidFill = !fill || isSolidPaint(fill);\n const bold = syntheticBoldOffset(first.resolved);\n const fillColor = fill && isSolidPaint(fill) ? solidColor(fill, state) : undefined;\n // A text object paints a fill-and-stroke glyph twice, which only matches a grown outline when opaque.\n const boldInText = bold && !stroke && solidFill && fillColor!.alpha >= 1;\n if ((stroke && !nativeStroke) || (bold && !boldInText)) return writeOutlinedInk(ctx, seg, cmd, dx, dy, state);\n\n const { out } = ctx;\n if (!solidFill) {\n out.op('q');\n textObject(ctx, seg, CLIP, dx, dy);\n await writeCommands(ctx, [{ kind: 'path', path: box, fill: { paint: fill } }], state);\n out.op('Q');\n // A second text object would be extracted as a second copy of the text.\n if (stroke) await paintOutlines(ctx, seg, cmd, dx, dy, state, 'stroke');\n return;\n }\n const strokeColor = nativeStroke ? solidColor(stroke.stroke.paint as SolidPaint, state) : undefined;\n const paintsFill = fillColor;\n if (!paintsFill && !strokeColor) return;\n out.op('q');\n out.op('gs', `/${ctx.resources.extGState(paintsFill ? fillColor.alpha : 1, strokeColor?.alpha ?? fillColor?.alpha ?? 1)}`);\n if (paintsFill) out.op('rg', ...fillColor.rgb);\n if (stroke && strokeColor) {\n out.op('RG', ...strokeColor.rgb);\n const length = stroke.stroke.dash ? longestOutline(ctx, seg, dx, dy) : undefined;\n strokeStyleOps(ctx, stroke.stroke, stroke.width, length);\n } else if (bold && fillColor) {\n out.op('RG', ...fillColor.rgb);\n // The growth is per side and a stroke straddles the outline, so the line is twice it.\n out.op('w', 2 * bold.growth * first.fontSize);\n out.op('j', JOINS[bold.join]);\n out.op('M', BOLD_MITER_LIMIT);\n }\n textObject(ctx, seg, paintsFill ? (strokeColor || bold ? FILL_STROKE : FILL) : STROKE, dx, dy);\n out.op('Q');\n}\n\ntype Placed = { code: number; to: number; y: number };\n\n/**\n * A left-to-right cluster's glyphs in the spans its text is marked with. A cluster keeps its text\n * on its glyphs on the baseline, and its glyphs off the baseline are marked with no text after\n * them: an extractor sets a span's text from its first glyph's start to its last one's end, and\n * a raised mark at either end moves the text off its line.\n */\nfunction spansOf(glyphs: readonly Placed[], actual: string): { text: string; glyphs: readonly Placed[] }[] {\n const on = glyphs.filter((p) => p.y === 0);\n if (on.length === 0 || on.length === glyphs.length) return [{ text: actual, glyphs }];\n return [{ text: actual, glyphs: on }, { text: '', glyphs: glyphs.filter((p) => p.y !== 0) }];\n}\n","import type { CommandFill } from '@weasel-js/paint';\nimport { fillHasInk, strokeHasInk } from '@weasel-js/paint';\nimport type { PathDrawCommand, TextDrawCommand } from '@weasel-js/renderer';\nimport {\n cachedLayoutRuns,\n cachedPaintRuns,\n type PlacedGlyph,\n resolveTextStyle,\n verticalAlignOffset,\n} from '@weasel-js/text';\nimport { type DrawState, type PageCtx, writeCommands } from './drawCommands';\nimport { isSpace, outlineCommand, skipGlyph } from './textOutlines';\nimport { text as pdfText, writeDict } from './objects';\nimport type { EmbeddedFont } from './fonts/embedFont';\nimport { type SegmentGlyph, type TextSegment, writeSegment } from './textSegment';\n\n/** Code points that hold a slot and never ink: they advance and are left out silently. */\nconst BLANK = /^[\\s\\p{Default_Ignorable_Code_Point}]$/u;\n\n/** Whether `g` can join `seg`: one text object holds one line, run, face, size and baseline. A\n * turned glyph turns about its own pen, so it is a text object of its own. */\nfunction joins(seg: TextSegment | undefined, g: PlacedGlyph, line: number): seg is TextSegment {\n if (!seg || seg.line !== line || g.rotate) return false;\n const a = seg.glyphs[0].g;\n const [ra, rg] = [a.resolved, g.resolved];\n return (\n a.run === g.run &&\n a.fontSize === g.fontSize &&\n a.baselineY === g.baselineY &&\n ra.source === rg.source &&\n ra.resolved.family === rg.resolved.family &&\n ra.resolved.weight === rg.resolved.weight &&\n ra.resolved.style === rg.resolved.style &&\n ra.synthetic.bold === rg.synthetic.bold &&\n ra.synthetic.italic === rg.synthetic.italic\n );\n}\n\n/**\n * What `g` draws in `font`, or null when the face has no glyph for it. A shaped code point\n * draws its cluster's glyphs, one reading back as the cluster's text and the rest as nothing;\n * a cluster of more than one glyph carries its text as `actual` too.\n */\nfunction segmentGlyph(font: EmbeddedFont, g: PlacedGlyph): SegmentGlyph | null {\n if (!g.shaped) {\n const code = font.use(g.cp);\n return code === null ? null : { g, glyphs: [{ code, x: 0, y: 0 }] };\n }\n const { glyphs, text } = g.shaped;\n const placed: SegmentGlyph['glyphs'][number][] = [];\n const claim = widest(font, glyphs);\n for (const [i, { gid, x, y, advance }] of glyphs.entries()) {\n const reads = i === claim ? text : '';\n const code = font.useGlyph(gid, reads, advance === 0 ? markWidth(reads, x) : undefined);\n if (code === null) return null;\n placed.push({ code, x, y });\n }\n return placed.length === 1 ? { g, glyphs: placed } : { g, glyphs: placed, actual: text };\n}\n\n/**\n * How far a glyph the shaper gave no advance moves the pen, in 1000/em: nowhere when it reads\n * as nothing, and otherwise to its cluster's pen when it sits before it, so a reader that boxes\n * each character by its advance (poppler) finds no gap between a mark and the base after it.\n */\nfunction markWidth(reads: string, x: number): number {\n return reads === '' ? 0 : Math.max(0, Math.round(-x * 1000));\n}\n\n/**\n * The glyph a cluster's text goes on: its widest, the first of those as wide. A reader that\n * ignores `/ActualText` (pdf.js) moves past no glyph that reads as nothing, so the text belongs\n * on the base, and the marks and matras around it read as nothing.\n */\nfunction widest(font: EmbeddedFont, glyphs: readonly { gid: number }[]): number {\n let best = 0;\n for (let i = 1; i < glyphs.length; i++) if (font.glyphWidth(glyphs[i].gid) > font.glyphWidth(glyphs[best].gid)) best = i;\n return best;\n}\n\n/**\n * Writes a text command as PDF text in its embedded faces, laid out exactly as `drawText`\n * lays it out. A glyph whose face cannot embed is drawn as its outline; one nothing can draw\n * is reported and left out, and the glyphs after it keep their laid-out positions.\n */\nexport async function writeText(ctx: PageCtx, cmd: TextDrawCommand, state: DrawState): Promise<void> {\n const style = resolveTextStyle(cmd.style);\n const laid = cachedLayoutRuns(cmd.runs, {\n maxWidth: cmd.maxWidth ?? Infinity,\n alignWidth: cmd.width,\n lineHeight: style.lineHeight,\n align: cmd.align ?? style.align,\n direction: cmd.direction ?? style.direction,\n tabSize: style.tabSize,\n justify: cmd.justify,\n });\n const dx = cmd.x;\n const dy = cmd.y + verticalAlignOffset(cmd.verticalAlign, cmd.height, laid.bounds.height);\n\n const items: (TextSegment | PathDrawCommand)[] = [];\n let seg: TextSegment | undefined;\n for (const [line, box] of laid.lines.entries()) {\n for (const g of box.glyphs) {\n const run = cmd.runs[g.run];\n if (!fillHasInk(run.fill) && !strokeHasInk(run.stroke)) continue;\n const space = isSpace(g.cp);\n if (!space && BLANK.test(String.fromCodePoint(g.cp))) continue;\n // A slot the layout left empty has no width, so drawing into it would land on its neighbor.\n if (!space && (g.glyph?.color || (g.resolved.source !== 'outline' && g.glyph === null && !g.shaped))) {\n skipGlyph(ctx, g, 'has no glyph to draw');\n continue;\n }\n // A code point inside a cluster another one draws: the opening one carries its text.\n if (g.shaped?.glyphs.length === 0) continue;\n const { family, weight, style: fontStyle } = g.resolved.resolved;\n const font = await ctx.fonts.face(family, weight, fontStyle);\n const drawn = font && segmentGlyph(font, g);\n if (font && drawn) {\n if (!joins(seg, g, line)) items.push((seg = { font, line, glyphs: [] }));\n seg.glyphs.push(drawn);\n continue;\n }\n if (space) continue;\n const outline = outlineCommand(ctx, g, cmd, dx, dy);\n if (outline) items.push(outline);\n else skipGlyph(ctx, g, 'has no glyph to draw');\n }\n }\n\n // Consecutive text in one language other than the document's is one span marked with it.\n let open: string | undefined;\n for (const item of items) {\n if ('kind' in item) {\n await writeCommands(ctx, [item], state);\n continue;\n }\n const lang = cmd.runs[item.glyphs[0].g.run].lang;\n ctx.langs.add(lang);\n const mark = lang && lang.toLowerCase() !== ctx.opts.lang?.toLowerCase() ? lang : undefined;\n if (mark !== open) {\n if (open) ctx.out.op('EMC');\n if (mark) ctx.out.op('BDC', '/Span', writeDict({ Lang: pdfText(mark) }));\n open = mark;\n }\n await writeSegment(ctx, item, cmd, dx, dy, state);\n }\n if (open) ctx.out.op('EMC');\n\n const { decorations } = cachedPaintRuns(laid, cmd.runs, {});\n const rules: PathDrawCommand[] = decorations.map((d) => ({\n kind: 'path',\n path: { kind: 'rect', x: d.x0 + dx, y: d.y0 + dy, width: d.x1 - d.x0, height: d.y1 - d.y0 },\n fill: d.fill as CommandFill,\n }));\n await writeCommands(ctx, rules, state);\n}\n","import { type GlMat3, mat3 } from '@weasel-js/geom';\nimport { type CommandPaint, isGradientPaint, isSolidPaint } from '@weasel-js/paint';\nimport type { DrawCommand, GroupDrawCommand, PathDrawCommand } from '@weasel-js/renderer';\nimport { solidColor } from './color';\nimport type { ContentStream } from './content';\nimport type { DocumentFonts } from './fonts/embedFont';\nimport { rasterFill, writeGroup, writeShader } from './groupOps';\nimport { type TextureFill, texturePattern, writeImage } from './images';\nimport type { PdfObjects } from './objects';\nimport { NonFiniteNumber } from './num';\nimport { fillPathOps } from './pathOps';\nimport type { PageResources } from './resources';\nimport { paintShading } from './shading';\nimport { writeStroke } from './strokeOps';\nimport { writeText } from './textOps';\nimport type { PdfSkip, WritePdfOptions } from './writePdf';\n\nexport interface DrawState {\n transform: GlMat3;\n alpha: number;\n colorMatrix: number[] | null;\n}\n\nexport interface PageCtx {\n objects: PdfObjects;\n resources: PageResources;\n out: ContentStream;\n opts: WritePdfOptions;\n fonts: DocumentFonts;\n skipped: PdfSkip[];\n view: GlMat3 | undefined;\n /** The page's width in points. */\n width: number;\n /** The page's height in points, which a pattern's matrix needs to undo the page flip. */\n height: number;\n /** The lists being written, outermost first, each with the index reached in it. */\n trail: TrailStep[];\n /** The language of each run the document writes as text, across every page; undefined for a run with none. */\n langs: Set<string | undefined>;\n}\n\n/** One list on the way down to the command being written; `group` holds it, except for the page's own. */\nexport interface TrailStep {\n cmds: readonly DrawCommand[];\n at: number;\n group?: GroupDrawCommand;\n}\n\n/** The page cut off after the command being written: everything before it, inside the groups it sits in. */\nexport function pageThrough(trail: readonly TrailStep[]): DrawCommand[] {\n let tail: DrawCommand[] = [];\n for (let i = trail.length - 1; i >= 0; i--) {\n const { cmds, at, group } = trail[i]!;\n const list = [...cmds.slice(0, at), ...(tail.length ? tail : [cmds[at]!])];\n tail = group ? [{ ...group, children: list }] : list;\n }\n return tail;\n}\n\nexport function skip(ctx: PageCtx, detail: string): void {\n ctx.skipped.push({ kind: 'command', detail });\n}\n\n/** The page's default space from its y-down frame, origin top left: the matrix every content stream opens with. */\nexport function pageFlip(ctx: { height: number }): GlMat3 {\n return mat3.fromAffine([1, 0, 0, -1, 0, ctx.height]);\n}\n\nfunction setAlpha(ctx: PageCtx, fill: number, stroke: number): void {\n ctx.out.op('gs', `/${ctx.resources.extGState(fill, stroke)}`);\n}\n\nfunction writeShadedFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, paint: CommandPaint): void {\n const sh = paintShading(ctx, paint, state, cmd.path);\n if (!sh) return;\n const { out } = ctx;\n out.op('q');\n out.op(fillPathOps(out, cmd.path) ? 'W*' : 'W');\n out.op('n');\n if (sh.alpha < 1) setAlpha(ctx, sh.alpha, sh.alpha);\n if (sh.matrix) out.op('cm', ...mat3.toAffine(sh.matrix));\n if (sh.softMask) out.op('gs', `/${sh.softMask}`);\n out.op('sh', `/${sh.shading}`);\n out.op('Q');\n}\n\nfunction writeTextureFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, paint: TextureFill): void {\n const pattern = texturePattern(ctx, paint, state);\n if (!pattern) return skip(ctx, `texture ${paint.texture.id} cannot be drawn`);\n const alpha = (paint.opacity ?? 1) * state.alpha;\n const { out } = ctx;\n out.op('q');\n setAlpha(ctx, alpha, alpha);\n out.op('cs', '/Pattern');\n out.op('scn', `/${pattern}`);\n out.op(fillPathOps(out, cmd.path) ? 'f*' : 'f');\n out.op('Q');\n}\n\nasync function writeFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState): Promise<void> {\n const paint = cmd.fill?.paint;\n if (!paint) return;\n if (isGradientPaint(paint)) return writeShadedFill(ctx, cmd, state, paint);\n if (paint.kind === 'texture') return writeTextureFill(ctx, cmd, state, paint);\n // A registered paint kind, which the paint union does not name.\n if (!isSolidPaint(paint)) return rasterFill(ctx, cmd, state, (paint as { kind: string }).kind);\n if (cmd.vertexColors?.length) skip(ctx, 'fill vertexColors approximated by the solid fill');\n const { rgb, alpha } = solidColor(paint, state);\n const { out } = ctx;\n out.op('q');\n setAlpha(ctx, alpha, alpha);\n out.op('rg', ...rgb);\n out.op(fillPathOps(out, cmd.path) ? 'f*' : 'f');\n out.op('Q');\n}\n\nasync function writePath(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState): Promise<void> {\n await writeFill(ctx, cmd, state);\n if (cmd.stroke) await writeStroke(ctx, cmd.path, cmd.stroke, state);\n}\n\nasync function writeCommand(ctx: PageCtx, cmd: DrawCommand, state: DrawState): Promise<void> {\n if (cmd.kind === 'path') await writePath(ctx, cmd, state);\n else if (cmd.kind === 'group') await writeGroup(ctx, cmd, state);\n else if (cmd.kind === 'image' || cmd.kind === 'sprites') writeImage(ctx, cmd, state);\n else if (cmd.kind === 'text') await writeText(ctx, cmd, state);\n else await writeShader(ctx, cmd, state);\n}\n\n/**\n * Writes each command; one holding a number PDF cannot write is dropped whole and reported. `group` is\n * the group `cmds` are the children of.\n */\nexport async function writeCommands(\n ctx: PageCtx, cmds: readonly DrawCommand[], state: DrawState, group?: GroupDrawCommand,\n): Promise<void> {\n const step: TrailStep = { cmds, at: 0, group };\n ctx.trail.push(step);\n try {\n for (; step.at < cmds.length; step.at++) await writeOne(ctx, cmds[step.at]!, state);\n } finally {\n ctx.trail.pop();\n }\n}\n\nasync function writeOne(ctx: PageCtx, cmd: DrawCommand, state: DrawState): Promise<void> {\n const line = ctx.out.mark();\n const object = ctx.objects.mark();\n const skips = ctx.skipped.length;\n try {\n await writeCommand(ctx, cmd, state);\n } catch (err) {\n if (!(err instanceof NonFiniteNumber)) throw err;\n ctx.out.rollback(line);\n ctx.objects.nullUnset(object);\n ctx.skipped.length = skips;\n skip(ctx, `${cmd.kind} has a non-finite coordinate`);\n }\n}\n","/**\n * A TrueType font program cut down to the glyphs one document draws.\n *\n * Glyph ids do not move: an unused glyph keeps its slot with an empty outline, so `/CIDToGIDMap\n * /Identity`, `/W` and `/ToUnicode` stay keyed by the face's own ids. The tables kept are the ones\n * ISO 32000 lists for an embedded TrueType program (9.9); `cmap`, `name`, `post` and the layout\n * tables are dropped, since a CID-keyed font is addressed by glyph id alone.\n */\n\nconst KEPT = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\nconst REQUIRED = ['glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp'];\n\n// Composite glyph component flags (OpenType `glyf`).\nconst ARG_1_AND_2_ARE_WORDS = 0x0001;\nconst WE_HAVE_A_SCALE = 0x0008;\nconst MORE_COMPONENTS = 0x0020;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\nconst WE_HAVE_A_TWO_BY_TWO = 0x0080;\n\ntype Tables = Map<string, Uint8Array>;\n\nfunction readTables(sfnt: ArrayBuffer): Tables {\n const view = new DataView(sfnt);\n const out: Tables = new Map();\n for (let i = 0; i < view.getUint16(4); i++) {\n const at = 12 + i * 16;\n const tag = String.fromCharCode(...new Uint8Array(sfnt, at, 4));\n out.set(tag, new Uint8Array(sfnt, view.getUint32(at + 8), view.getUint32(at + 12)));\n }\n for (const tag of REQUIRED) if (!out.has(tag)) throw new Error(`pdf: a TrueType face has no \"${tag}\" table`);\n return out;\n}\n\nconst viewOf = (b: Uint8Array) => new DataView(b.buffer, b.byteOffset, b.byteLength);\n\n/** Each glyph's byte range in `glyf`. */\nfunction glyphRanges(t: Tables, numGlyphs: number): [number, number][] {\n const loca = viewOf(t.get('loca')!);\n const long = viewOf(t.get('head')!).getInt16(50) === 1;\n const at = (i: number) => (long ? loca.getUint32(i * 4) : loca.getUint16(i * 2) * 2);\n return Array.from({ length: numGlyphs }, (_, i) => [at(i), at(i + 1)]);\n}\n\n/** The glyph ids a composite glyph's components name; empty for a simple glyph. */\nfunction componentsOf(glyph: Uint8Array): number[] {\n if (glyph.byteLength < 10) return [];\n const v = viewOf(glyph);\n if (v.getInt16(0) >= 0) return [];\n const out: number[] = [];\n let at = 10;\n for (;;) {\n const flags = v.getUint16(at);\n out.push(v.getUint16(at + 2));\n at += 4 + (flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n if (flags & WE_HAVE_A_SCALE) at += 2;\n else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) at += 4;\n else if (flags & WE_HAVE_A_TWO_BY_TWO) at += 8;\n if (!(flags & MORE_COMPONENTS)) return out;\n }\n}\n\n/** `used`, `.notdef` and every component they reach, inside the face's glyph count. */\nfunction closure(used: Iterable<number>, glyf: Uint8Array, ranges: [number, number][]): Set<number> {\n const keep = new Set<number>();\n const queue = [0, ...used];\n while (queue.length > 0) {\n const gid = queue.pop()!;\n if (keep.has(gid) || gid < 0 || gid >= ranges.length) continue;\n keep.add(gid);\n const [start, end] = ranges[gid]!;\n queue.push(...componentsOf(glyf.subarray(start, end)));\n }\n return keep;\n}\n\nfunction checksum(b: Uint8Array): number {\n const v = viewOf(b);\n let sum = 0;\n for (let i = 0; i < b.byteLength; i += 4) sum = (sum + v.getUint32(i)) >>> 0;\n return sum;\n}\n\nconst pad4 = (n: number) => (n + 3) & ~3;\n\n/** Writes the tables as an sfnt, with each checksum and `head.checkSumAdjustment` filled in. */\nfunction writeSfnt(tables: Tables): Uint8Array {\n const tags = [...tables.keys()].sort();\n const dirBytes = 12 + tags.length * 16;\n let total = dirBytes;\n for (const tag of tags) total += pad4(tables.get(tag)!.byteLength);\n const out = new Uint8Array(total);\n const v = viewOf(out);\n v.setUint32(0, 0x00010000);\n v.setUint16(4, tags.length);\n const entrySelector = Math.floor(Math.log2(tags.length));\n const searchRange = 2 ** entrySelector * 16;\n v.setUint16(6, searchRange);\n v.setUint16(8, entrySelector);\n v.setUint16(10, tags.length * 16 - searchRange);\n let cursor = dirBytes;\n let headAt = 0;\n tags.forEach((tag, i) => {\n const data = tables.get(tag)!;\n const rec = 12 + i * 16;\n for (let c = 0; c < 4; c++) out[rec + c] = tag.charCodeAt(c);\n out.set(data, cursor);\n v.setUint32(rec + 4, checksum(out.subarray(cursor, cursor + pad4(data.byteLength))));\n v.setUint32(rec + 8, cursor);\n v.setUint32(rec + 12, data.byteLength);\n if (tag === 'head') headAt = cursor;\n cursor += pad4(data.byteLength);\n });\n v.setUint32(headAt + 8, (0xb1b0afba - checksum(out)) >>> 0);\n return out;\n}\n\n/** How many glyphs `sfnt` has. */\nexport function glyphCount(sfnt: ArrayBuffer): number {\n return viewOf(readTables(sfnt).get('maxp')!).getUint16(4);\n}\n\n/**\n * `sfnt`, a TrueType (`glyf`) face, holding only the outlines of `used`, `.notdef`, and the\n * components those glyphs are built from. Ids past the face's last glyph are ignored.\n */\nexport function subsetTrueType(sfnt: ArrayBuffer, used: Iterable<number>): Uint8Array {\n const t = readTables(sfnt);\n const numGlyphs = viewOf(t.get('maxp')!).getUint16(4);\n const glyf = t.get('glyf')!;\n const ranges = glyphRanges(t, numGlyphs);\n const keep = closure(used, glyf, ranges);\n const count = Math.max(...keep) + 1;\n\n let glyfBytes = 0;\n for (const gid of keep) glyfBytes += pad4(ranges[gid]![1] - ranges[gid]![0]);\n const newGlyf = new Uint8Array(glyfBytes);\n const newLoca = new Uint8Array((count + 1) * 4);\n const loca = viewOf(newLoca);\n let cursor = 0;\n for (let gid = 0; gid < count; gid++) {\n loca.setUint32(gid * 4, cursor);\n if (!keep.has(gid)) continue;\n const [start, end] = ranges[gid]!;\n newGlyf.set(glyf.subarray(start, end), cursor);\n cursor += pad4(end - start);\n }\n loca.setUint32(count * 4, cursor);\n\n // Every glyph gets a full metric, so `numberOfHMetrics` is the glyph count.\n const hhea = t.get('hhea')!.slice();\n const hmtxIn = viewOf(t.get('hmtx')!);\n const longMetrics = viewOf(hhea).getUint16(34);\n const hmtx = new Uint8Array(count * 4);\n for (let gid = 0; gid < count; gid++) {\n const advance = hmtxIn.getUint16(Math.min(gid, longMetrics - 1) * 4);\n const lsb = gid < longMetrics ? hmtxIn.getInt16(gid * 4 + 2) : hmtxIn.getInt16(longMetrics * 4 + (gid - longMetrics) * 2);\n viewOf(hmtx).setUint16(gid * 4, advance);\n viewOf(hmtx).setInt16(gid * 4 + 2, lsb);\n }\n viewOf(hhea).setUint16(34, count);\n\n const head = t.get('head')!.slice();\n viewOf(head).setUint32(8, 0);\n viewOf(head).setInt16(50, 1);\n const maxp = t.get('maxp')!.slice();\n viewOf(maxp).setUint16(4, count);\n\n const out: Tables = new Map([\n ['glyf', newGlyf], ['head', head], ['hhea', hhea], ['hmtx', hmtx], ['loca', newLoca], ['maxp', maxp],\n ]);\n for (const tag of KEPT) if (!out.has(tag) && t.has(tag)) out.set(tag, t.get(tag)!);\n return writeSfnt(out);\n}\n","import type { FaceEmbedding, FontStyle } from '@weasel-js/font';\nimport { name, type PdfName, type PdfObjects, type PdfRef, text } from '../objects';\nimport type { PdfFontSource } from './fontSource';\nimport { glyphCount, subsetTrueType } from './subset';\nimport { toUnicodeCMap } from './toUnicode';\n\nexport interface EmbeddedFont {\n /** The font object; throws until `use` has returned a glyph, so a page names only faces it draws with. */\n readonly ref: PdfRef;\n /** The code that draws `cp`'s glyph and reads back as `cp`, recorded for `/W` and `/ToUnicode`;\n * `null` when the face has no glyph for it. */\n use(cp: number): number | null;\n /**\n * The code that draws glyph `gid`, which a shaper chose, and reads back as `text`: `''` for a\n * glyph that stands for no text of its own. With `width`, in 1000/em, the code moves the pen\n * that far rather than the glyph's own advance. Each reading and width of a glyph takes a\n * code of its own, mapped to it. Null for `.notdef`.\n */\n useGlyph(gid: number, text: string, width?: number): number | null;\n /** The text `/ToUnicode` reads code `code` back as: `''` for one that reads as nothing. */\n readsAs(code: number): string | undefined;\n /** A code's advance in 1000/em units. */\n widthOf(code: number): number;\n /** A glyph's advance in 1000/em units. */\n glyphWidth(gid: number): number;\n}\n\nconst encoder = new TextEncoder();\n\n/** The highest two-byte code. */\nconst MAX_CODE = 0xffff;\n\n/** U+2060 WORD JOINER: format character, no width, no break. */\nconst NOTHING = '\\u2060';\n\nfunction baseFontName(e: FaceEmbedding, family: string, weight: number, style: FontStyle): string {\n const safe = (s: string) => s.replace(/[^A-Za-z0-9._-]/g, '');\n return safe(e.postScriptName) || safe(`${family}-${weight}-${style}`);\n}\n\n/** Six capitals naming a subset, as ISO 32000 9.6.4 asks; the same glyphs always get the same tag. */\nfunction subsetTag(gids: Iterable<number>): string {\n let h = 0x811c9dc5;\n for (const gid of [...gids].sort((a, b) => a - b)) h = Math.imul(h ^ gid, 0x01000193) >>> 0;\n let tag = '';\n for (let i = 0; i < 6; i++, h = Math.floor(h / 26)) tag += String.fromCharCode(65 + (h % 26));\n return tag;\n}\n\nclass Face implements EmbeddedFont {\n /** Every glyph drawn, for the subset. */\n readonly used = new Set<number>();\n /** Code to the glyph it draws, the text it reads back as, and the width it moves the pen, when\n * not the glyph's own. */\n private readonly codes = new Map<number, { gid: number; text: string; width: number | undefined }>();\n /** `gid|width|text` to its code. */\n private readonly codeOf = new Map<string, number>();\n /** The code the next reading of an already-coded glyph takes: past every glyph id, so a\n * glyph's first reading can keep its own id as its code. */\n private spare: number;\n private fontRef: PdfRef | undefined;\n private written = false;\n\n constructor(\n private readonly objects: PdfObjects,\n private readonly emb: FaceEmbedding,\n private readonly baseFont: string,\n private readonly subset: boolean,\n ) {\n this.spare = glyphCount(emb.sfnt);\n }\n\n get ref(): PdfRef {\n if (!this.fontRef) throw new Error('pdf: font ref read before any glyph was used');\n return this.fontRef;\n }\n\n use(cp: number): number | null {\n const gid = this.emb.glyphIndexOf(cp);\n return gid === null ? null : this.useGlyph(gid, String.fromCodePoint(cp));\n }\n\n useGlyph(gid: number, text: string, width?: number): number | null {\n if (gid === 0) return null;\n if (width === this.glyphWidth(gid)) width = undefined;\n const key = `${gid}|${width ?? ''}|${text}`;\n let code = this.codeOf.get(key);\n if (code === undefined) {\n code = !this.codes.has(gid) ? gid : this.spare <= MAX_CODE ? this.spare++ : gid;\n if (!this.codes.has(code)) this.codes.set(code, { gid, text, width });\n this.codeOf.set(key, code);\n }\n this.used.add(gid);\n this.fontRef ??= this.objects.alloc();\n return code;\n }\n\n readsAs(code: number): string | undefined {\n return this.codes.get(code)?.text;\n }\n\n /** What `/ToUnicode` maps each code to. One that reads as nothing maps to a word joiner:\n * invisible, and skipped by readers (pdf.js) that otherwise take an unmapped code for a\n * code point. */\n private readings(): Map<number, string> {\n const out = new Map<number, string>();\n for (const [code, { text }] of this.codes) out.set(code, text || NOTHING);\n return out;\n }\n\n widthOf(code: number): number {\n const coded = this.codes.get(code);\n return coded?.width ?? this.glyphWidth(coded?.gid ?? code);\n }\n\n glyphWidth(gid: number): number {\n return Math.round((this.emb.advanceOfGlyph(gid) * 1000) / this.emb.unitsPerEm);\n }\n\n /** `/Identity` while every code is its own glyph id, else a stream mapping each code to its glyph. */\n private cidToGid(): PdfRef | PdfName {\n let top = -1;\n for (const [code, { gid }] of this.codes) if (code !== gid) top = Math.max(top, code);\n if (top < 0) return name('Identity');\n const map = new Uint8Array((top + 1) * 2);\n const view = new DataView(map.buffer);\n for (const [code, { gid }] of this.codes) if (code <= top) view.setUint16(code * 2, gid);\n const ref = this.objects.alloc();\n this.objects.streamDeflated(ref, {}, map);\n return ref;\n }\n\n write(): void {\n if (this.written || !this.fontRef) return;\n this.written = true;\n const { objects, emb } = this;\n const k = 1000 / emb.unitsPerEm;\n const file = objects.alloc();\n const descriptor = objects.alloc();\n const cid = objects.alloc();\n const toUnicode = objects.alloc();\n const program = this.subset ? subsetTrueType(emb.sfnt, this.used) : new Uint8Array(emb.sfnt);\n const fontName = this.subset ? `${subsetTag(this.used)}+${this.baseFont}` : this.baseFont;\n objects.streamDeflated(file, { Length1: program.byteLength }, program);\n objects.streamDeflated(toUnicode, {}, encoder.encode(toUnicodeCMap(this.readings())));\n objects.set(descriptor, {\n Type: name('FontDescriptor'),\n FontName: name(fontName),\n Flags: 4,\n FontBBox: emb.bbox.map((v, i) => (i < 2 ? Math.floor(v * k) : Math.ceil(v * k))),\n ItalicAngle: emb.italicAngle,\n Ascent: Math.round(emb.ascent * k),\n Descent: Math.round(emb.descent * k),\n CapHeight: Math.round(emb.capHeight * k),\n StemV: 80, // required by the spec, advisory for TrueType\n FontFile2: file,\n });\n const widths: (number | number[])[] = [];\n for (const code of [...this.codes.keys()].sort((a, b) => a - b)) widths.push(code, [this.widthOf(code)]);\n objects.set(cid, {\n Type: name('Font'),\n Subtype: name('CIDFontType2'),\n BaseFont: name(fontName),\n CIDSystemInfo: { Registry: text('Adobe'), Ordering: text('Identity'), Supplement: 0 },\n FontDescriptor: descriptor,\n CIDToGIDMap: this.cidToGid(),\n W: widths,\n });\n objects.set(this.fontRef, {\n Type: name('Font'),\n Subtype: name('Type0'),\n BaseFont: name(fontName),\n Encoding: name('Identity-H'),\n DescendantFonts: [cid],\n ToUnicode: toUnicode,\n });\n }\n}\n\n/** One document's embedded fonts: each face is written once, its program, `/W` and `/ToUnicode` covering the glyphs used. */\nexport class DocumentFonts {\n private readonly faces = new Map<string, Promise<Face | null>>();\n\n constructor(\n private readonly objects: PdfObjects,\n private readonly source: PdfFontSource,\n /** False embeds each face whole. */\n private readonly subset = true,\n ) {}\n\n /** The embedded font for a face, or null to draw its glyphs as outlines. */\n face(family: string, weight: number, style: FontStyle): Promise<EmbeddedFont | null> {\n const key = JSON.stringify([family, weight, style]);\n let p = this.faces.get(key);\n if (!p) {\n p = this.load(family, weight, style);\n this.faces.set(key, p);\n }\n return p;\n }\n\n private async load(family: string, weight: number, style: FontStyle): Promise<Face | null> {\n let emb: FaceEmbedding | null;\n try {\n emb = await this.source.embedding(family, weight, style);\n } catch {\n return null;\n }\n if (!emb || emb.outlines !== 'truetype' || !emb.embeddable) return null;\n return new Face(this.objects, emb, baseFontName(emb, family, weight, style), this.subset);\n }\n\n /** Writes every face's objects; call before `PdfObjects.settle`. */\n async finish(): Promise<void> {\n for (const p of this.faces.values()) (await p)?.write();\n }\n}\n","import { type GlMat3, mat3 } from '@weasel-js/geom';\nimport type { DrawCommand } from '@weasel-js/renderer';\nimport { ContentStream } from './content';\nimport { deflate as zlibDeflate } from './deflate';\nimport { type PageCtx, pageFlip, writeCommands } from './drawCommands';\nimport { DocumentFonts } from './fonts/embedFont';\nimport type { PdfFontSource } from './fonts/fontSource';\nimport { type Deflater, name, PdfObjects, type PdfRef, text } from './objects';\nimport { PageResources } from './resources';\n\n/** An axis-aligned rectangle in page units. */\nexport type Rect = { x: number; y: number; width: number; height: number };\n\n/** One page of the document: its size in points and the draw commands painted onto it. */\nexport interface PdfPage {\n width: number;\n height: number;\n commands: readonly DrawCommand[];\n view?: GlMat3;\n}\n\n/** A decoded bitmap handed back by the host, for images and paints the PDF cannot express directly. */\nexport interface RasterPixels {\n width: number;\n height: number;\n /** Straight RGBA, top-down. */\n data: Uint8ClampedArray;\n}\n\n/** Settings and host callbacks for `writePdf`; only `fonts` is required. */\nexport interface WritePdfOptions {\n fonts: PdfFontSource;\n /** Default true: each face carries only the glyphs the document draws. False embeds each face whole. */\n subsetFonts?: boolean;\n title?: string;\n /**\n * The document's language, a BCP 47 tag, written as the catalog's `/Lang`. Text in another\n * language is marked with its own. Left out, it is the language every run of text shares,\n * and the document has none when they do not share one.\n */\n lang?: string;\n /** Default true; unit tests pass false because jsdom realms lack `CompressionStream`. */\n compress?: boolean;\n readPixels?: (image: ImageBitmap | HTMLImageElement) => RasterPixels;\n /**\n * Draws `commands`, which are in the page's frame, in order onto a clear raster of `rect` at `scale`\n * pixels per point. `view` is the page's `PdfPage.view`: what a `world`-unit paint in `commands`\n * resolves through. For a group with its own `composite`, `commands` are the page up to and including\n * that group, so the raster is the group composited onto what it was drawn over.\n */\n rasterize?: (commands: readonly DrawCommand[], rect: Rect, scale: number, view: GlMat3 | undefined) => Promise<RasterPixels>;\n}\n\n/** A glyph or command the writer left out of the file, with the reason. */\nexport interface PdfSkip {\n kind: 'glyph' | 'command';\n detail: string;\n}\n\n/** The finished file and everything the writer had to leave out of it. */\nexport interface PdfResult {\n bytes: Uint8Array;\n skipped: readonly PdfSkip[];\n}\n\n/** One PDF page per entry of `pages`, which must hold at least one. */\nexport function writePdf(pages: readonly PdfPage[], opts: WritePdfOptions): Promise<PdfResult> {\n return writePdfWith(pages, opts, zlibDeflate);\n}\n\n/** `writePdf` with its compressor supplied; tests use it where `CompressionStream` is missing. Not re-exported by the package. */\nexport async function writePdfWith(\n pages: readonly PdfPage[],\n opts: WritePdfOptions,\n deflate: Deflater,\n): Promise<PdfResult> {\n if (pages.length === 0) throw new Error('pdf: a document needs at least one page');\n const objects = new PdfObjects();\n const catalog = objects.alloc();\n const tree = objects.alloc();\n const info = objects.alloc();\n const skipped: PdfSkip[] = [];\n const kids: PdfRef[] = [];\n const fonts = new DocumentFonts(objects, opts.fonts, opts.subsetFonts !== false);\n const langs = new Set<string | undefined>();\n\n for (const page of pages) {\n const pageRef = objects.alloc();\n const contentRef = objects.alloc();\n const ctx: PageCtx = {\n objects,\n resources: new PageResources(),\n out: new ContentStream(),\n opts,\n fonts,\n skipped,\n view: page.view,\n width: page.width,\n height: page.height,\n trail: [],\n langs,\n };\n // Page units are points, origin top left, y down.\n ctx.out.op('cm', ...mat3.toAffine(pageFlip(page)));\n await writeCommands(ctx, page.commands, { transform: mat3.identity(), alpha: 1, colorMatrix: null });\n const raw = ctx.out.bytes();\n objects.streamDeflated(contentRef, {}, raw);\n objects.set(pageRef, {\n Type: name('Page'),\n Parent: tree,\n MediaBox: [0, 0, page.width, page.height],\n Contents: contentRef,\n Resources: ctx.resources.dict(),\n });\n kids.push(pageRef);\n }\n\n const [shared] = langs.size === 1 ? langs : [];\n const lang = opts.lang ?? shared;\n objects.set(catalog, { Type: name('Catalog'), Pages: tree, Lang: lang === undefined ? undefined : text(lang) });\n objects.set(tree, { Type: name('Pages'), Kids: kids, Count: kids.length });\n objects.set(info, { Producer: text('weasel'), Title: opts.title === undefined ? undefined : text(opts.title) });\n await fonts.finish();\n await objects.settle(opts.compress !== false, deflate);\n return { bytes: objects.serialize(catalog, info), skipped };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weasel-js/pdf",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.1",
|
|
4
4
|
"description": "PDF documents from weasel draw commands: vector paths, shadings, images, and embedded fonts with selectable text. No scene graph, no React.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
"build": "tsup"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@weasel-js/font": "1.15.
|
|
24
|
-
"@weasel-js/geom": "1.15.
|
|
25
|
-
"@weasel-js/paint": "1.15.
|
|
26
|
-
"@weasel-js/renderer": "1.15.
|
|
27
|
-
"@weasel-js/stroke": "1.15.
|
|
28
|
-
"@weasel-js/text": "1.15.
|
|
23
|
+
"@weasel-js/font": "1.15.1",
|
|
24
|
+
"@weasel-js/geom": "1.15.1",
|
|
25
|
+
"@weasel-js/paint": "1.15.1",
|
|
26
|
+
"@weasel-js/renderer": "1.15.1",
|
|
27
|
+
"@weasel-js/stroke": "1.15.1",
|
|
28
|
+
"@weasel-js/text": "1.15.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@weasel-js/text-shaping": "1.15.
|
|
31
|
+
"@weasel-js/text-shaping": "1.15.1"
|
|
32
32
|
},
|
|
33
33
|
"author": "orochi235",
|
|
34
34
|
"homepage": "https://orochi235.github.io/weasel/",
|