@rohal12/twee-ts 1.11.0 → 1.12.0
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/bin/twee-ts.js +2827 -0
- package/dist/bin/twee-ts.js.map +1 -1
- package/dist/chunk-TYLUAJTM.js +4982 -0
- package/dist/chunk-TYLUAJTM.js.map +1 -0
- package/dist/index.cjs +2829 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +2828 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/rollup.js +1 -1
- package/dist/plugins/vite.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-KCLV5CYO.js +0 -2157
- package/dist/chunk-KCLV5CYO.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -69,6 +69,10 @@ function tiddlerEscape(s) {
|
|
|
69
69
|
if (s.length === 0) return s;
|
|
70
70
|
return s.replace(/\\/g, "\\s").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/\t/g, "\\t").replace(/\n/g, "\\n");
|
|
71
71
|
}
|
|
72
|
+
function tiddlerUnescape(s) {
|
|
73
|
+
if (s.length === 0) return s;
|
|
74
|
+
return s.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\s/g, "\\");
|
|
75
|
+
}
|
|
72
76
|
function tweeEscape(s) {
|
|
73
77
|
if (s.length === 0) return s;
|
|
74
78
|
return s.replace(/[\\[\]{}]/g, (ch) => "\\" + ch);
|
|
@@ -546,6 +550,8 @@ var KNOWN_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
|
546
550
|
"twee",
|
|
547
551
|
"tw2",
|
|
548
552
|
"twee2",
|
|
553
|
+
"htm",
|
|
554
|
+
"html",
|
|
549
555
|
"css",
|
|
550
556
|
"js",
|
|
551
557
|
"otf",
|
|
@@ -1328,6 +1334,2808 @@ function parseTwee(source, options = {}) {
|
|
|
1328
1334
|
return { passages, diagnostics };
|
|
1329
1335
|
}
|
|
1330
1336
|
|
|
1337
|
+
// node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode-codepoint.js
|
|
1338
|
+
var _a;
|
|
1339
|
+
var decodeMap = /* @__PURE__ */ new Map([
|
|
1340
|
+
[0, 65533],
|
|
1341
|
+
// C1 Unicode control character reference replacements
|
|
1342
|
+
[128, 8364],
|
|
1343
|
+
[130, 8218],
|
|
1344
|
+
[131, 402],
|
|
1345
|
+
[132, 8222],
|
|
1346
|
+
[133, 8230],
|
|
1347
|
+
[134, 8224],
|
|
1348
|
+
[135, 8225],
|
|
1349
|
+
[136, 710],
|
|
1350
|
+
[137, 8240],
|
|
1351
|
+
[138, 352],
|
|
1352
|
+
[139, 8249],
|
|
1353
|
+
[140, 338],
|
|
1354
|
+
[142, 381],
|
|
1355
|
+
[145, 8216],
|
|
1356
|
+
[146, 8217],
|
|
1357
|
+
[147, 8220],
|
|
1358
|
+
[148, 8221],
|
|
1359
|
+
[149, 8226],
|
|
1360
|
+
[150, 8211],
|
|
1361
|
+
[151, 8212],
|
|
1362
|
+
[152, 732],
|
|
1363
|
+
[153, 8482],
|
|
1364
|
+
[154, 353],
|
|
1365
|
+
[155, 8250],
|
|
1366
|
+
[156, 339],
|
|
1367
|
+
[158, 382],
|
|
1368
|
+
[159, 376]
|
|
1369
|
+
]);
|
|
1370
|
+
var fromCodePoint = (
|
|
1371
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
|
|
1372
|
+
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
|
|
1373
|
+
let output = "";
|
|
1374
|
+
if (codePoint > 65535) {
|
|
1375
|
+
codePoint -= 65536;
|
|
1376
|
+
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
1377
|
+
codePoint = 56320 | codePoint & 1023;
|
|
1378
|
+
}
|
|
1379
|
+
output += String.fromCharCode(codePoint);
|
|
1380
|
+
return output;
|
|
1381
|
+
})
|
|
1382
|
+
);
|
|
1383
|
+
function replaceCodePoint(codePoint) {
|
|
1384
|
+
var _a3;
|
|
1385
|
+
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
1386
|
+
return 65533;
|
|
1387
|
+
}
|
|
1388
|
+
return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
// node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/decode-shared.js
|
|
1392
|
+
function decodeBase64(input) {
|
|
1393
|
+
const binary = (
|
|
1394
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1395
|
+
typeof atob === "function" ? (
|
|
1396
|
+
// Browser (and Node >=16)
|
|
1397
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1398
|
+
atob(input)
|
|
1399
|
+
) : (
|
|
1400
|
+
// Older Node versions (<16)
|
|
1401
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1402
|
+
typeof Buffer.from === "function" ? (
|
|
1403
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1404
|
+
Buffer.from(input, "base64").toString("binary")
|
|
1405
|
+
) : (
|
|
1406
|
+
// eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
|
|
1407
|
+
new Buffer(input, "base64").toString("binary")
|
|
1408
|
+
)
|
|
1409
|
+
)
|
|
1410
|
+
);
|
|
1411
|
+
const evenLength = binary.length & ~1;
|
|
1412
|
+
const out = new Uint16Array(evenLength / 2);
|
|
1413
|
+
for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
|
|
1414
|
+
const lo = binary.charCodeAt(index);
|
|
1415
|
+
const hi = binary.charCodeAt(index + 1);
|
|
1416
|
+
out[outIndex++] = lo | hi << 8;
|
|
1417
|
+
}
|
|
1418
|
+
return out;
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
// node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js
|
|
1422
|
+
var htmlDecodeTree = /* @__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
|
|
1423
|
+
|
|
1424
|
+
// node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.js
|
|
1425
|
+
var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
|
|
1426
|
+
|
|
1427
|
+
// node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/bin-trie-flags.js
|
|
1428
|
+
var BinTrieFlags;
|
|
1429
|
+
(function(BinTrieFlags3) {
|
|
1430
|
+
BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
1431
|
+
BinTrieFlags3[BinTrieFlags3["FLAG13"] = 8192] = "FLAG13";
|
|
1432
|
+
BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
|
|
1433
|
+
BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
1434
|
+
})(BinTrieFlags || (BinTrieFlags = {}));
|
|
1435
|
+
|
|
1436
|
+
// node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode.js
|
|
1437
|
+
var CharCodes;
|
|
1438
|
+
(function(CharCodes4) {
|
|
1439
|
+
CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
|
|
1440
|
+
CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
|
|
1441
|
+
CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
|
|
1442
|
+
CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
|
|
1443
|
+
CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
|
|
1444
|
+
CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
|
|
1445
|
+
CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
|
|
1446
|
+
CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
|
|
1447
|
+
CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
|
|
1448
|
+
CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
|
|
1449
|
+
CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
|
|
1450
|
+
CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
|
|
1451
|
+
})(CharCodes || (CharCodes = {}));
|
|
1452
|
+
var TO_LOWER_BIT = 32;
|
|
1453
|
+
function isNumber(code) {
|
|
1454
|
+
return code >= CharCodes.ZERO && code <= CharCodes.NINE;
|
|
1455
|
+
}
|
|
1456
|
+
function isHexadecimalCharacter(code) {
|
|
1457
|
+
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
|
|
1458
|
+
}
|
|
1459
|
+
function isAsciiAlphaNumeric(code) {
|
|
1460
|
+
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
|
|
1461
|
+
}
|
|
1462
|
+
function isEntityInAttributeInvalidEnd(code) {
|
|
1463
|
+
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
1464
|
+
}
|
|
1465
|
+
var EntityDecoderState;
|
|
1466
|
+
(function(EntityDecoderState3) {
|
|
1467
|
+
EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
|
|
1468
|
+
EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
|
|
1469
|
+
EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
|
|
1470
|
+
EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
|
|
1471
|
+
EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
|
|
1472
|
+
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
1473
|
+
var DecodingMode;
|
|
1474
|
+
(function(DecodingMode3) {
|
|
1475
|
+
DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
|
|
1476
|
+
DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
|
|
1477
|
+
DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
|
|
1478
|
+
})(DecodingMode || (DecodingMode = {}));
|
|
1479
|
+
var EntityDecoder = class {
|
|
1480
|
+
constructor(decodeTree, emitCodePoint, errors) {
|
|
1481
|
+
this.decodeTree = decodeTree;
|
|
1482
|
+
this.emitCodePoint = emitCodePoint;
|
|
1483
|
+
this.errors = errors;
|
|
1484
|
+
this.state = EntityDecoderState.EntityStart;
|
|
1485
|
+
this.consumed = 1;
|
|
1486
|
+
this.result = 0;
|
|
1487
|
+
this.treeIndex = 0;
|
|
1488
|
+
this.excess = 1;
|
|
1489
|
+
this.decodeMode = DecodingMode.Strict;
|
|
1490
|
+
this.runConsumed = 0;
|
|
1491
|
+
}
|
|
1492
|
+
/** Resets the instance to make it reusable. */
|
|
1493
|
+
startEntity(decodeMode) {
|
|
1494
|
+
this.decodeMode = decodeMode;
|
|
1495
|
+
this.state = EntityDecoderState.EntityStart;
|
|
1496
|
+
this.result = 0;
|
|
1497
|
+
this.treeIndex = 0;
|
|
1498
|
+
this.excess = 1;
|
|
1499
|
+
this.consumed = 1;
|
|
1500
|
+
this.runConsumed = 0;
|
|
1501
|
+
}
|
|
1502
|
+
/**
|
|
1503
|
+
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
|
1504
|
+
* If the entity is incomplete, the decoder will return -1.
|
|
1505
|
+
*
|
|
1506
|
+
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
1507
|
+
* entity is incomplete, and resume when the next string is written.
|
|
1508
|
+
*
|
|
1509
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
1510
|
+
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
1511
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
1512
|
+
*/
|
|
1513
|
+
write(input, offset) {
|
|
1514
|
+
switch (this.state) {
|
|
1515
|
+
case EntityDecoderState.EntityStart: {
|
|
1516
|
+
if (input.charCodeAt(offset) === CharCodes.NUM) {
|
|
1517
|
+
this.state = EntityDecoderState.NumericStart;
|
|
1518
|
+
this.consumed += 1;
|
|
1519
|
+
return this.stateNumericStart(input, offset + 1);
|
|
1520
|
+
}
|
|
1521
|
+
this.state = EntityDecoderState.NamedEntity;
|
|
1522
|
+
return this.stateNamedEntity(input, offset);
|
|
1523
|
+
}
|
|
1524
|
+
case EntityDecoderState.NumericStart: {
|
|
1525
|
+
return this.stateNumericStart(input, offset);
|
|
1526
|
+
}
|
|
1527
|
+
case EntityDecoderState.NumericDecimal: {
|
|
1528
|
+
return this.stateNumericDecimal(input, offset);
|
|
1529
|
+
}
|
|
1530
|
+
case EntityDecoderState.NumericHex: {
|
|
1531
|
+
return this.stateNumericHex(input, offset);
|
|
1532
|
+
}
|
|
1533
|
+
case EntityDecoderState.NamedEntity: {
|
|
1534
|
+
return this.stateNamedEntity(input, offset);
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
/**
|
|
1539
|
+
* Switches between the numeric decimal and hexadecimal states.
|
|
1540
|
+
*
|
|
1541
|
+
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
1542
|
+
*
|
|
1543
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
1544
|
+
* @param offset The current offset.
|
|
1545
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
1546
|
+
*/
|
|
1547
|
+
stateNumericStart(input, offset) {
|
|
1548
|
+
if (offset >= input.length) {
|
|
1549
|
+
return -1;
|
|
1550
|
+
}
|
|
1551
|
+
if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
|
|
1552
|
+
this.state = EntityDecoderState.NumericHex;
|
|
1553
|
+
this.consumed += 1;
|
|
1554
|
+
return this.stateNumericHex(input, offset + 1);
|
|
1555
|
+
}
|
|
1556
|
+
this.state = EntityDecoderState.NumericDecimal;
|
|
1557
|
+
return this.stateNumericDecimal(input, offset);
|
|
1558
|
+
}
|
|
1559
|
+
/**
|
|
1560
|
+
* Parses a hexadecimal numeric entity.
|
|
1561
|
+
*
|
|
1562
|
+
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
1563
|
+
*
|
|
1564
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
1565
|
+
* @param offset The current offset.
|
|
1566
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
1567
|
+
*/
|
|
1568
|
+
stateNumericHex(input, offset) {
|
|
1569
|
+
while (offset < input.length) {
|
|
1570
|
+
const char = input.charCodeAt(offset);
|
|
1571
|
+
if (isNumber(char) || isHexadecimalCharacter(char)) {
|
|
1572
|
+
const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
|
|
1573
|
+
this.result = this.result * 16 + digit;
|
|
1574
|
+
this.consumed++;
|
|
1575
|
+
offset++;
|
|
1576
|
+
} else {
|
|
1577
|
+
return this.emitNumericEntity(char, 3);
|
|
1578
|
+
}
|
|
1579
|
+
}
|
|
1580
|
+
return -1;
|
|
1581
|
+
}
|
|
1582
|
+
/**
|
|
1583
|
+
* Parses a decimal numeric entity.
|
|
1584
|
+
*
|
|
1585
|
+
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
1586
|
+
*
|
|
1587
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
1588
|
+
* @param offset The current offset.
|
|
1589
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
1590
|
+
*/
|
|
1591
|
+
stateNumericDecimal(input, offset) {
|
|
1592
|
+
while (offset < input.length) {
|
|
1593
|
+
const char = input.charCodeAt(offset);
|
|
1594
|
+
if (isNumber(char)) {
|
|
1595
|
+
this.result = this.result * 10 + (char - CharCodes.ZERO);
|
|
1596
|
+
this.consumed++;
|
|
1597
|
+
offset++;
|
|
1598
|
+
} else {
|
|
1599
|
+
return this.emitNumericEntity(char, 2);
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
return -1;
|
|
1603
|
+
}
|
|
1604
|
+
/**
|
|
1605
|
+
* Validate and emit a numeric entity.
|
|
1606
|
+
*
|
|
1607
|
+
* Implements the logic from the `Hexademical character reference start
|
|
1608
|
+
* state` and `Numeric character reference end state` in the HTML spec.
|
|
1609
|
+
*
|
|
1610
|
+
* @param lastCp The last code point of the entity. Used to see if the
|
|
1611
|
+
* entity was terminated with a semicolon.
|
|
1612
|
+
* @param expectedLength The minimum number of characters that should be
|
|
1613
|
+
* consumed. Used to validate that at least one digit
|
|
1614
|
+
* was consumed.
|
|
1615
|
+
* @returns The number of characters that were consumed.
|
|
1616
|
+
*/
|
|
1617
|
+
emitNumericEntity(lastCp, expectedLength) {
|
|
1618
|
+
var _a3;
|
|
1619
|
+
if (this.consumed <= expectedLength) {
|
|
1620
|
+
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1621
|
+
return 0;
|
|
1622
|
+
}
|
|
1623
|
+
if (lastCp === CharCodes.SEMI) {
|
|
1624
|
+
this.consumed += 1;
|
|
1625
|
+
} else if (this.decodeMode === DecodingMode.Strict) {
|
|
1626
|
+
return 0;
|
|
1627
|
+
}
|
|
1628
|
+
this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
|
|
1629
|
+
if (this.errors) {
|
|
1630
|
+
if (lastCp !== CharCodes.SEMI) {
|
|
1631
|
+
this.errors.missingSemicolonAfterCharacterReference();
|
|
1632
|
+
}
|
|
1633
|
+
this.errors.validateNumericCharacterReference(this.result);
|
|
1634
|
+
}
|
|
1635
|
+
return this.consumed;
|
|
1636
|
+
}
|
|
1637
|
+
/**
|
|
1638
|
+
* Parses a named entity.
|
|
1639
|
+
*
|
|
1640
|
+
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
1641
|
+
*
|
|
1642
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
1643
|
+
* @param offset The current offset.
|
|
1644
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
1645
|
+
*/
|
|
1646
|
+
stateNamedEntity(input, offset) {
|
|
1647
|
+
const { decodeTree } = this;
|
|
1648
|
+
let current = decodeTree[this.treeIndex];
|
|
1649
|
+
let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1650
|
+
while (offset < input.length) {
|
|
1651
|
+
if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
|
|
1652
|
+
const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
|
|
1653
|
+
if (this.runConsumed === 0) {
|
|
1654
|
+
const firstChar = current & BinTrieFlags.JUMP_TABLE;
|
|
1655
|
+
if (input.charCodeAt(offset) !== firstChar) {
|
|
1656
|
+
return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
|
|
1657
|
+
}
|
|
1658
|
+
offset++;
|
|
1659
|
+
this.excess++;
|
|
1660
|
+
this.runConsumed++;
|
|
1661
|
+
}
|
|
1662
|
+
while (this.runConsumed < runLength) {
|
|
1663
|
+
if (offset >= input.length) {
|
|
1664
|
+
return -1;
|
|
1665
|
+
}
|
|
1666
|
+
const charIndexInPacked = this.runConsumed - 1;
|
|
1667
|
+
const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
|
|
1668
|
+
const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
|
|
1669
|
+
if (input.charCodeAt(offset) !== expectedChar) {
|
|
1670
|
+
this.runConsumed = 0;
|
|
1671
|
+
return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
|
|
1672
|
+
}
|
|
1673
|
+
offset++;
|
|
1674
|
+
this.excess++;
|
|
1675
|
+
this.runConsumed++;
|
|
1676
|
+
}
|
|
1677
|
+
this.runConsumed = 0;
|
|
1678
|
+
this.treeIndex += 1 + (runLength >> 1);
|
|
1679
|
+
current = decodeTree[this.treeIndex];
|
|
1680
|
+
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1681
|
+
}
|
|
1682
|
+
if (offset >= input.length)
|
|
1683
|
+
break;
|
|
1684
|
+
const char = input.charCodeAt(offset);
|
|
1685
|
+
if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
|
|
1686
|
+
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
1687
|
+
}
|
|
1688
|
+
this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
1689
|
+
if (this.treeIndex < 0) {
|
|
1690
|
+
return this.result === 0 || // If we are parsing an attribute
|
|
1691
|
+
this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
|
|
1692
|
+
(valueLength === 0 || // And there should be no invalid characters.
|
|
1693
|
+
isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
1694
|
+
}
|
|
1695
|
+
current = decodeTree[this.treeIndex];
|
|
1696
|
+
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1697
|
+
if (valueLength !== 0) {
|
|
1698
|
+
if (char === CharCodes.SEMI) {
|
|
1699
|
+
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
1700
|
+
}
|
|
1701
|
+
if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
|
|
1702
|
+
this.result = this.treeIndex;
|
|
1703
|
+
this.consumed += this.excess;
|
|
1704
|
+
this.excess = 0;
|
|
1705
|
+
}
|
|
1706
|
+
}
|
|
1707
|
+
offset++;
|
|
1708
|
+
this.excess++;
|
|
1709
|
+
}
|
|
1710
|
+
return -1;
|
|
1711
|
+
}
|
|
1712
|
+
/**
|
|
1713
|
+
* Emit a named entity that was not terminated with a semicolon.
|
|
1714
|
+
*
|
|
1715
|
+
* @returns The number of characters consumed.
|
|
1716
|
+
*/
|
|
1717
|
+
emitNotTerminatedNamedEntity() {
|
|
1718
|
+
var _a3;
|
|
1719
|
+
const { result, decodeTree } = this;
|
|
1720
|
+
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1721
|
+
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
1722
|
+
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
|
|
1723
|
+
return this.consumed;
|
|
1724
|
+
}
|
|
1725
|
+
/**
|
|
1726
|
+
* Emit a named entity.
|
|
1727
|
+
*
|
|
1728
|
+
* @param result The index of the entity in the decode tree.
|
|
1729
|
+
* @param valueLength The number of bytes in the entity.
|
|
1730
|
+
* @param consumed The number of characters consumed.
|
|
1731
|
+
*
|
|
1732
|
+
* @returns The number of characters consumed.
|
|
1733
|
+
*/
|
|
1734
|
+
emitNamedEntityData(result, valueLength, consumed) {
|
|
1735
|
+
const { decodeTree } = this;
|
|
1736
|
+
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
|
|
1737
|
+
if (valueLength === 3) {
|
|
1738
|
+
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
1739
|
+
}
|
|
1740
|
+
return consumed;
|
|
1741
|
+
}
|
|
1742
|
+
/**
|
|
1743
|
+
* Signal to the parser that the end of the input was reached.
|
|
1744
|
+
*
|
|
1745
|
+
* Remaining data will be emitted and relevant errors will be produced.
|
|
1746
|
+
*
|
|
1747
|
+
* @returns The number of characters consumed.
|
|
1748
|
+
*/
|
|
1749
|
+
end() {
|
|
1750
|
+
var _a3;
|
|
1751
|
+
switch (this.state) {
|
|
1752
|
+
case EntityDecoderState.NamedEntity: {
|
|
1753
|
+
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
1754
|
+
}
|
|
1755
|
+
// Otherwise, emit a numeric entity if we have one.
|
|
1756
|
+
case EntityDecoderState.NumericDecimal: {
|
|
1757
|
+
return this.emitNumericEntity(0, 2);
|
|
1758
|
+
}
|
|
1759
|
+
case EntityDecoderState.NumericHex: {
|
|
1760
|
+
return this.emitNumericEntity(0, 3);
|
|
1761
|
+
}
|
|
1762
|
+
case EntityDecoderState.NumericStart: {
|
|
1763
|
+
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1764
|
+
return 0;
|
|
1765
|
+
}
|
|
1766
|
+
case EntityDecoderState.EntityStart: {
|
|
1767
|
+
return 0;
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
};
|
|
1772
|
+
function determineBranch(decodeTree, current, nodeIndex, char) {
|
|
1773
|
+
const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
|
|
1774
|
+
const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
|
|
1775
|
+
if (branchCount === 0) {
|
|
1776
|
+
return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
|
|
1777
|
+
}
|
|
1778
|
+
if (jumpOffset) {
|
|
1779
|
+
const value = char - jumpOffset;
|
|
1780
|
+
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
|
|
1781
|
+
}
|
|
1782
|
+
const packedKeySlots = branchCount + 1 >> 1;
|
|
1783
|
+
let lo = 0;
|
|
1784
|
+
let hi = branchCount - 1;
|
|
1785
|
+
while (lo <= hi) {
|
|
1786
|
+
const mid = lo + hi >>> 1;
|
|
1787
|
+
const slot = mid >> 1;
|
|
1788
|
+
const packed = decodeTree[nodeIndex + slot];
|
|
1789
|
+
const midKey = packed >> (mid & 1) * 8 & 255;
|
|
1790
|
+
if (midKey < char) {
|
|
1791
|
+
lo = mid + 1;
|
|
1792
|
+
} else if (midKey > char) {
|
|
1793
|
+
hi = mid - 1;
|
|
1794
|
+
} else {
|
|
1795
|
+
return decodeTree[nodeIndex + packedKeySlots + mid];
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
return -1;
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
// node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Tokenizer.js
|
|
1802
|
+
var CharCodes2;
|
|
1803
|
+
(function(CharCodes4) {
|
|
1804
|
+
CharCodes4[CharCodes4["Tab"] = 9] = "Tab";
|
|
1805
|
+
CharCodes4[CharCodes4["NewLine"] = 10] = "NewLine";
|
|
1806
|
+
CharCodes4[CharCodes4["FormFeed"] = 12] = "FormFeed";
|
|
1807
|
+
CharCodes4[CharCodes4["CarriageReturn"] = 13] = "CarriageReturn";
|
|
1808
|
+
CharCodes4[CharCodes4["Space"] = 32] = "Space";
|
|
1809
|
+
CharCodes4[CharCodes4["ExclamationMark"] = 33] = "ExclamationMark";
|
|
1810
|
+
CharCodes4[CharCodes4["Number"] = 35] = "Number";
|
|
1811
|
+
CharCodes4[CharCodes4["Amp"] = 38] = "Amp";
|
|
1812
|
+
CharCodes4[CharCodes4["SingleQuote"] = 39] = "SingleQuote";
|
|
1813
|
+
CharCodes4[CharCodes4["DoubleQuote"] = 34] = "DoubleQuote";
|
|
1814
|
+
CharCodes4[CharCodes4["Dash"] = 45] = "Dash";
|
|
1815
|
+
CharCodes4[CharCodes4["Slash"] = 47] = "Slash";
|
|
1816
|
+
CharCodes4[CharCodes4["Zero"] = 48] = "Zero";
|
|
1817
|
+
CharCodes4[CharCodes4["Nine"] = 57] = "Nine";
|
|
1818
|
+
CharCodes4[CharCodes4["Semi"] = 59] = "Semi";
|
|
1819
|
+
CharCodes4[CharCodes4["Lt"] = 60] = "Lt";
|
|
1820
|
+
CharCodes4[CharCodes4["Eq"] = 61] = "Eq";
|
|
1821
|
+
CharCodes4[CharCodes4["Gt"] = 62] = "Gt";
|
|
1822
|
+
CharCodes4[CharCodes4["Questionmark"] = 63] = "Questionmark";
|
|
1823
|
+
CharCodes4[CharCodes4["UpperA"] = 65] = "UpperA";
|
|
1824
|
+
CharCodes4[CharCodes4["LowerA"] = 97] = "LowerA";
|
|
1825
|
+
CharCodes4[CharCodes4["UpperF"] = 70] = "UpperF";
|
|
1826
|
+
CharCodes4[CharCodes4["LowerF"] = 102] = "LowerF";
|
|
1827
|
+
CharCodes4[CharCodes4["UpperZ"] = 90] = "UpperZ";
|
|
1828
|
+
CharCodes4[CharCodes4["LowerZ"] = 122] = "LowerZ";
|
|
1829
|
+
CharCodes4[CharCodes4["LowerX"] = 120] = "LowerX";
|
|
1830
|
+
CharCodes4[CharCodes4["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
1831
|
+
})(CharCodes2 || (CharCodes2 = {}));
|
|
1832
|
+
var State;
|
|
1833
|
+
(function(State2) {
|
|
1834
|
+
State2[State2["Text"] = 1] = "Text";
|
|
1835
|
+
State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
|
|
1836
|
+
State2[State2["InTagName"] = 3] = "InTagName";
|
|
1837
|
+
State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
|
|
1838
|
+
State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
|
|
1839
|
+
State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
|
|
1840
|
+
State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
|
|
1841
|
+
State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
|
|
1842
|
+
State2[State2["InAttributeName"] = 9] = "InAttributeName";
|
|
1843
|
+
State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
|
|
1844
|
+
State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
|
|
1845
|
+
State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
|
|
1846
|
+
State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
|
|
1847
|
+
State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
|
|
1848
|
+
State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
|
|
1849
|
+
State2[State2["InDeclaration"] = 16] = "InDeclaration";
|
|
1850
|
+
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
1851
|
+
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
1852
|
+
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
1853
|
+
State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
|
|
1854
|
+
State2[State2["InCommentLike"] = 21] = "InCommentLike";
|
|
1855
|
+
State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
|
|
1856
|
+
State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
|
|
1857
|
+
State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
|
|
1858
|
+
State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
|
|
1859
|
+
State2[State2["InEntity"] = 26] = "InEntity";
|
|
1860
|
+
})(State || (State = {}));
|
|
1861
|
+
function isWhitespace(c) {
|
|
1862
|
+
return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
|
|
1863
|
+
}
|
|
1864
|
+
function isEndOfTagSection(c) {
|
|
1865
|
+
return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
|
|
1866
|
+
}
|
|
1867
|
+
function isASCIIAlpha(c) {
|
|
1868
|
+
return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
|
|
1869
|
+
}
|
|
1870
|
+
var QuoteType;
|
|
1871
|
+
(function(QuoteType2) {
|
|
1872
|
+
QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
|
|
1873
|
+
QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
|
|
1874
|
+
QuoteType2[QuoteType2["Single"] = 2] = "Single";
|
|
1875
|
+
QuoteType2[QuoteType2["Double"] = 3] = "Double";
|
|
1876
|
+
})(QuoteType || (QuoteType = {}));
|
|
1877
|
+
var Sequences = {
|
|
1878
|
+
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
1879
|
+
// CDATA[
|
|
1880
|
+
CdataEnd: new Uint8Array([93, 93, 62]),
|
|
1881
|
+
// ]]>
|
|
1882
|
+
CommentEnd: new Uint8Array([45, 45, 62]),
|
|
1883
|
+
// `-->`
|
|
1884
|
+
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
1885
|
+
// `</script`
|
|
1886
|
+
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
1887
|
+
// `</style`
|
|
1888
|
+
TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
|
|
1889
|
+
// `</title`
|
|
1890
|
+
TextareaEnd: new Uint8Array([
|
|
1891
|
+
60,
|
|
1892
|
+
47,
|
|
1893
|
+
116,
|
|
1894
|
+
101,
|
|
1895
|
+
120,
|
|
1896
|
+
116,
|
|
1897
|
+
97,
|
|
1898
|
+
114,
|
|
1899
|
+
101,
|
|
1900
|
+
97
|
|
1901
|
+
]),
|
|
1902
|
+
// `</textarea`
|
|
1903
|
+
XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
|
|
1904
|
+
// `</xmp`
|
|
1905
|
+
};
|
|
1906
|
+
var Tokenizer = class {
|
|
1907
|
+
constructor({ xmlMode = false, decodeEntities = true }, cbs) {
|
|
1908
|
+
this.cbs = cbs;
|
|
1909
|
+
this.state = State.Text;
|
|
1910
|
+
this.buffer = "";
|
|
1911
|
+
this.sectionStart = 0;
|
|
1912
|
+
this.index = 0;
|
|
1913
|
+
this.entityStart = 0;
|
|
1914
|
+
this.baseState = State.Text;
|
|
1915
|
+
this.isSpecial = false;
|
|
1916
|
+
this.running = true;
|
|
1917
|
+
this.offset = 0;
|
|
1918
|
+
this.currentSequence = void 0;
|
|
1919
|
+
this.sequenceIndex = 0;
|
|
1920
|
+
this.xmlMode = xmlMode;
|
|
1921
|
+
this.decodeEntities = decodeEntities;
|
|
1922
|
+
this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
|
|
1923
|
+
}
|
|
1924
|
+
reset() {
|
|
1925
|
+
this.state = State.Text;
|
|
1926
|
+
this.buffer = "";
|
|
1927
|
+
this.sectionStart = 0;
|
|
1928
|
+
this.index = 0;
|
|
1929
|
+
this.baseState = State.Text;
|
|
1930
|
+
this.currentSequence = void 0;
|
|
1931
|
+
this.running = true;
|
|
1932
|
+
this.offset = 0;
|
|
1933
|
+
}
|
|
1934
|
+
write(chunk) {
|
|
1935
|
+
this.offset += this.buffer.length;
|
|
1936
|
+
this.buffer = chunk;
|
|
1937
|
+
this.parse();
|
|
1938
|
+
}
|
|
1939
|
+
end() {
|
|
1940
|
+
if (this.running)
|
|
1941
|
+
this.finish();
|
|
1942
|
+
}
|
|
1943
|
+
pause() {
|
|
1944
|
+
this.running = false;
|
|
1945
|
+
}
|
|
1946
|
+
resume() {
|
|
1947
|
+
this.running = true;
|
|
1948
|
+
if (this.index < this.buffer.length + this.offset) {
|
|
1949
|
+
this.parse();
|
|
1950
|
+
}
|
|
1951
|
+
}
|
|
1952
|
+
stateText(c) {
|
|
1953
|
+
if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
|
|
1954
|
+
if (this.index > this.sectionStart) {
|
|
1955
|
+
this.cbs.ontext(this.sectionStart, this.index);
|
|
1956
|
+
}
|
|
1957
|
+
this.state = State.BeforeTagName;
|
|
1958
|
+
this.sectionStart = this.index;
|
|
1959
|
+
} else if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
1960
|
+
this.startEntity();
|
|
1961
|
+
}
|
|
1962
|
+
}
|
|
1963
|
+
stateSpecialStartSequence(c) {
|
|
1964
|
+
const isEnd = this.sequenceIndex === this.currentSequence.length;
|
|
1965
|
+
const isMatch = isEnd ? (
|
|
1966
|
+
// If we are at the end of the sequence, make sure the tag name has ended
|
|
1967
|
+
isEndOfTagSection(c)
|
|
1968
|
+
) : (
|
|
1969
|
+
// Otherwise, do a case-insensitive comparison
|
|
1970
|
+
(c | 32) === this.currentSequence[this.sequenceIndex]
|
|
1971
|
+
);
|
|
1972
|
+
if (!isMatch) {
|
|
1973
|
+
this.isSpecial = false;
|
|
1974
|
+
} else if (!isEnd) {
|
|
1975
|
+
this.sequenceIndex++;
|
|
1976
|
+
return;
|
|
1977
|
+
}
|
|
1978
|
+
this.sequenceIndex = 0;
|
|
1979
|
+
this.state = State.InTagName;
|
|
1980
|
+
this.stateInTagName(c);
|
|
1981
|
+
}
|
|
1982
|
+
/** Look for an end tag. For <title> tags, also decode entities. */
|
|
1983
|
+
stateInSpecialTag(c) {
|
|
1984
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
1985
|
+
if (c === CharCodes2.Gt || isWhitespace(c)) {
|
|
1986
|
+
const endOfText = this.index - this.currentSequence.length;
|
|
1987
|
+
if (this.sectionStart < endOfText) {
|
|
1988
|
+
const actualIndex = this.index;
|
|
1989
|
+
this.index = endOfText;
|
|
1990
|
+
this.cbs.ontext(this.sectionStart, endOfText);
|
|
1991
|
+
this.index = actualIndex;
|
|
1992
|
+
}
|
|
1993
|
+
this.isSpecial = false;
|
|
1994
|
+
this.sectionStart = endOfText + 2;
|
|
1995
|
+
this.stateInClosingTagName(c);
|
|
1996
|
+
return;
|
|
1997
|
+
}
|
|
1998
|
+
this.sequenceIndex = 0;
|
|
1999
|
+
}
|
|
2000
|
+
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2001
|
+
this.sequenceIndex += 1;
|
|
2002
|
+
} else if (this.sequenceIndex === 0) {
|
|
2003
|
+
if (this.currentSequence === Sequences.TitleEnd) {
|
|
2004
|
+
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2005
|
+
this.startEntity();
|
|
2006
|
+
}
|
|
2007
|
+
} else if (this.fastForwardTo(CharCodes2.Lt)) {
|
|
2008
|
+
this.sequenceIndex = 1;
|
|
2009
|
+
}
|
|
2010
|
+
} else {
|
|
2011
|
+
this.sequenceIndex = Number(c === CharCodes2.Lt);
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
stateCDATASequence(c) {
|
|
2015
|
+
if (c === Sequences.Cdata[this.sequenceIndex]) {
|
|
2016
|
+
if (++this.sequenceIndex === Sequences.Cdata.length) {
|
|
2017
|
+
this.state = State.InCommentLike;
|
|
2018
|
+
this.currentSequence = Sequences.CdataEnd;
|
|
2019
|
+
this.sequenceIndex = 0;
|
|
2020
|
+
this.sectionStart = this.index + 1;
|
|
2021
|
+
}
|
|
2022
|
+
} else {
|
|
2023
|
+
this.sequenceIndex = 0;
|
|
2024
|
+
this.state = State.InDeclaration;
|
|
2025
|
+
this.stateInDeclaration(c);
|
|
2026
|
+
}
|
|
2027
|
+
}
|
|
2028
|
+
/**
|
|
2029
|
+
* When we wait for one specific character, we can speed things up
|
|
2030
|
+
* by skipping through the buffer until we find it.
|
|
2031
|
+
*
|
|
2032
|
+
* @returns Whether the character was found.
|
|
2033
|
+
*/
|
|
2034
|
+
fastForwardTo(c) {
|
|
2035
|
+
while (++this.index < this.buffer.length + this.offset) {
|
|
2036
|
+
if (this.buffer.charCodeAt(this.index - this.offset) === c) {
|
|
2037
|
+
return true;
|
|
2038
|
+
}
|
|
2039
|
+
}
|
|
2040
|
+
this.index = this.buffer.length + this.offset - 1;
|
|
2041
|
+
return false;
|
|
2042
|
+
}
|
|
2043
|
+
/**
|
|
2044
|
+
* Comments and CDATA end with `-->` and `]]>`.
|
|
2045
|
+
*
|
|
2046
|
+
* Their common qualities are:
|
|
2047
|
+
* - Their end sequences have a distinct character they start with.
|
|
2048
|
+
* - That character is then repeated, so we have to check multiple repeats.
|
|
2049
|
+
* - All characters but the start character of the sequence can be skipped.
|
|
2050
|
+
*/
|
|
2051
|
+
stateInCommentLike(c) {
|
|
2052
|
+
if (c === this.currentSequence[this.sequenceIndex]) {
|
|
2053
|
+
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
2054
|
+
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2055
|
+
this.cbs.oncdata(this.sectionStart, this.index, 2);
|
|
2056
|
+
} else {
|
|
2057
|
+
this.cbs.oncomment(this.sectionStart, this.index, 2);
|
|
2058
|
+
}
|
|
2059
|
+
this.sequenceIndex = 0;
|
|
2060
|
+
this.sectionStart = this.index + 1;
|
|
2061
|
+
this.state = State.Text;
|
|
2062
|
+
}
|
|
2063
|
+
} else if (this.sequenceIndex === 0) {
|
|
2064
|
+
if (this.fastForwardTo(this.currentSequence[0])) {
|
|
2065
|
+
this.sequenceIndex = 1;
|
|
2066
|
+
}
|
|
2067
|
+
} else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
|
|
2068
|
+
this.sequenceIndex = 0;
|
|
2069
|
+
}
|
|
2070
|
+
}
|
|
2071
|
+
/**
|
|
2072
|
+
* HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
|
|
2073
|
+
*
|
|
2074
|
+
* XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
|
|
2075
|
+
* We allow anything that wouldn't end the tag.
|
|
2076
|
+
*/
|
|
2077
|
+
isTagStartChar(c) {
|
|
2078
|
+
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
|
|
2079
|
+
}
|
|
2080
|
+
startSpecial(sequence, offset) {
|
|
2081
|
+
this.isSpecial = true;
|
|
2082
|
+
this.currentSequence = sequence;
|
|
2083
|
+
this.sequenceIndex = offset;
|
|
2084
|
+
this.state = State.SpecialStartSequence;
|
|
2085
|
+
}
|
|
2086
|
+
stateBeforeTagName(c) {
|
|
2087
|
+
if (c === CharCodes2.ExclamationMark) {
|
|
2088
|
+
this.state = State.BeforeDeclaration;
|
|
2089
|
+
this.sectionStart = this.index + 1;
|
|
2090
|
+
} else if (c === CharCodes2.Questionmark) {
|
|
2091
|
+
this.state = State.InProcessingInstruction;
|
|
2092
|
+
this.sectionStart = this.index + 1;
|
|
2093
|
+
} else if (this.isTagStartChar(c)) {
|
|
2094
|
+
const lower = c | 32;
|
|
2095
|
+
this.sectionStart = this.index;
|
|
2096
|
+
if (this.xmlMode) {
|
|
2097
|
+
this.state = State.InTagName;
|
|
2098
|
+
} else if (lower === Sequences.ScriptEnd[2]) {
|
|
2099
|
+
this.state = State.BeforeSpecialS;
|
|
2100
|
+
} else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
|
|
2101
|
+
this.state = State.BeforeSpecialT;
|
|
2102
|
+
} else {
|
|
2103
|
+
this.state = State.InTagName;
|
|
2104
|
+
}
|
|
2105
|
+
} else if (c === CharCodes2.Slash) {
|
|
2106
|
+
this.state = State.BeforeClosingTagName;
|
|
2107
|
+
} else {
|
|
2108
|
+
this.state = State.Text;
|
|
2109
|
+
this.stateText(c);
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2112
|
+
stateInTagName(c) {
|
|
2113
|
+
if (isEndOfTagSection(c)) {
|
|
2114
|
+
this.cbs.onopentagname(this.sectionStart, this.index);
|
|
2115
|
+
this.sectionStart = -1;
|
|
2116
|
+
this.state = State.BeforeAttributeName;
|
|
2117
|
+
this.stateBeforeAttributeName(c);
|
|
2118
|
+
}
|
|
2119
|
+
}
|
|
2120
|
+
stateBeforeClosingTagName(c) {
|
|
2121
|
+
if (isWhitespace(c)) {
|
|
2122
|
+
} else if (c === CharCodes2.Gt) {
|
|
2123
|
+
this.state = State.Text;
|
|
2124
|
+
} else {
|
|
2125
|
+
this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
|
|
2126
|
+
this.sectionStart = this.index;
|
|
2127
|
+
}
|
|
2128
|
+
}
|
|
2129
|
+
stateInClosingTagName(c) {
|
|
2130
|
+
if (c === CharCodes2.Gt || isWhitespace(c)) {
|
|
2131
|
+
this.cbs.onclosetag(this.sectionStart, this.index);
|
|
2132
|
+
this.sectionStart = -1;
|
|
2133
|
+
this.state = State.AfterClosingTagName;
|
|
2134
|
+
this.stateAfterClosingTagName(c);
|
|
2135
|
+
}
|
|
2136
|
+
}
|
|
2137
|
+
stateAfterClosingTagName(c) {
|
|
2138
|
+
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
|
|
2139
|
+
this.state = State.Text;
|
|
2140
|
+
this.sectionStart = this.index + 1;
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
2143
|
+
stateBeforeAttributeName(c) {
|
|
2144
|
+
if (c === CharCodes2.Gt) {
|
|
2145
|
+
this.cbs.onopentagend(this.index);
|
|
2146
|
+
if (this.isSpecial) {
|
|
2147
|
+
this.state = State.InSpecialTag;
|
|
2148
|
+
this.sequenceIndex = 0;
|
|
2149
|
+
} else {
|
|
2150
|
+
this.state = State.Text;
|
|
2151
|
+
}
|
|
2152
|
+
this.sectionStart = this.index + 1;
|
|
2153
|
+
} else if (c === CharCodes2.Slash) {
|
|
2154
|
+
this.state = State.InSelfClosingTag;
|
|
2155
|
+
} else if (!isWhitespace(c)) {
|
|
2156
|
+
this.state = State.InAttributeName;
|
|
2157
|
+
this.sectionStart = this.index;
|
|
2158
|
+
}
|
|
2159
|
+
}
|
|
2160
|
+
stateInSelfClosingTag(c) {
|
|
2161
|
+
if (c === CharCodes2.Gt) {
|
|
2162
|
+
this.cbs.onselfclosingtag(this.index);
|
|
2163
|
+
this.state = State.Text;
|
|
2164
|
+
this.sectionStart = this.index + 1;
|
|
2165
|
+
this.isSpecial = false;
|
|
2166
|
+
} else if (!isWhitespace(c)) {
|
|
2167
|
+
this.state = State.BeforeAttributeName;
|
|
2168
|
+
this.stateBeforeAttributeName(c);
|
|
2169
|
+
}
|
|
2170
|
+
}
|
|
2171
|
+
stateInAttributeName(c) {
|
|
2172
|
+
if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
|
|
2173
|
+
this.cbs.onattribname(this.sectionStart, this.index);
|
|
2174
|
+
this.sectionStart = this.index;
|
|
2175
|
+
this.state = State.AfterAttributeName;
|
|
2176
|
+
this.stateAfterAttributeName(c);
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2179
|
+
stateAfterAttributeName(c) {
|
|
2180
|
+
if (c === CharCodes2.Eq) {
|
|
2181
|
+
this.state = State.BeforeAttributeValue;
|
|
2182
|
+
} else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
|
|
2183
|
+
this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
|
|
2184
|
+
this.sectionStart = -1;
|
|
2185
|
+
this.state = State.BeforeAttributeName;
|
|
2186
|
+
this.stateBeforeAttributeName(c);
|
|
2187
|
+
} else if (!isWhitespace(c)) {
|
|
2188
|
+
this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
|
|
2189
|
+
this.state = State.InAttributeName;
|
|
2190
|
+
this.sectionStart = this.index;
|
|
2191
|
+
}
|
|
2192
|
+
}
|
|
2193
|
+
stateBeforeAttributeValue(c) {
|
|
2194
|
+
if (c === CharCodes2.DoubleQuote) {
|
|
2195
|
+
this.state = State.InAttributeValueDq;
|
|
2196
|
+
this.sectionStart = this.index + 1;
|
|
2197
|
+
} else if (c === CharCodes2.SingleQuote) {
|
|
2198
|
+
this.state = State.InAttributeValueSq;
|
|
2199
|
+
this.sectionStart = this.index + 1;
|
|
2200
|
+
} else if (!isWhitespace(c)) {
|
|
2201
|
+
this.sectionStart = this.index;
|
|
2202
|
+
this.state = State.InAttributeValueNq;
|
|
2203
|
+
this.stateInAttributeValueNoQuotes(c);
|
|
2204
|
+
}
|
|
2205
|
+
}
|
|
2206
|
+
handleInAttributeValue(c, quote2) {
|
|
2207
|
+
if (c === quote2 || !this.decodeEntities && this.fastForwardTo(quote2)) {
|
|
2208
|
+
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
2209
|
+
this.sectionStart = -1;
|
|
2210
|
+
this.cbs.onattribend(quote2 === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
|
|
2211
|
+
this.state = State.BeforeAttributeName;
|
|
2212
|
+
} else if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2213
|
+
this.startEntity();
|
|
2214
|
+
}
|
|
2215
|
+
}
|
|
2216
|
+
stateInAttributeValueDoubleQuotes(c) {
|
|
2217
|
+
this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
|
|
2218
|
+
}
|
|
2219
|
+
stateInAttributeValueSingleQuotes(c) {
|
|
2220
|
+
this.handleInAttributeValue(c, CharCodes2.SingleQuote);
|
|
2221
|
+
}
|
|
2222
|
+
stateInAttributeValueNoQuotes(c) {
|
|
2223
|
+
if (isWhitespace(c) || c === CharCodes2.Gt) {
|
|
2224
|
+
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
2225
|
+
this.sectionStart = -1;
|
|
2226
|
+
this.cbs.onattribend(QuoteType.Unquoted, this.index);
|
|
2227
|
+
this.state = State.BeforeAttributeName;
|
|
2228
|
+
this.stateBeforeAttributeName(c);
|
|
2229
|
+
} else if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2230
|
+
this.startEntity();
|
|
2231
|
+
}
|
|
2232
|
+
}
|
|
2233
|
+
stateBeforeDeclaration(c) {
|
|
2234
|
+
if (c === CharCodes2.OpeningSquareBracket) {
|
|
2235
|
+
this.state = State.CDATASequence;
|
|
2236
|
+
this.sequenceIndex = 0;
|
|
2237
|
+
} else {
|
|
2238
|
+
this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
stateInDeclaration(c) {
|
|
2242
|
+
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
|
|
2243
|
+
this.cbs.ondeclaration(this.sectionStart, this.index);
|
|
2244
|
+
this.state = State.Text;
|
|
2245
|
+
this.sectionStart = this.index + 1;
|
|
2246
|
+
}
|
|
2247
|
+
}
|
|
2248
|
+
stateInProcessingInstruction(c) {
|
|
2249
|
+
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
|
|
2250
|
+
this.cbs.onprocessinginstruction(this.sectionStart, this.index);
|
|
2251
|
+
this.state = State.Text;
|
|
2252
|
+
this.sectionStart = this.index + 1;
|
|
2253
|
+
}
|
|
2254
|
+
}
|
|
2255
|
+
stateBeforeComment(c) {
|
|
2256
|
+
if (c === CharCodes2.Dash) {
|
|
2257
|
+
this.state = State.InCommentLike;
|
|
2258
|
+
this.currentSequence = Sequences.CommentEnd;
|
|
2259
|
+
this.sequenceIndex = 2;
|
|
2260
|
+
this.sectionStart = this.index + 1;
|
|
2261
|
+
} else {
|
|
2262
|
+
this.state = State.InDeclaration;
|
|
2263
|
+
}
|
|
2264
|
+
}
|
|
2265
|
+
stateInSpecialComment(c) {
|
|
2266
|
+
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
|
|
2267
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2268
|
+
this.state = State.Text;
|
|
2269
|
+
this.sectionStart = this.index + 1;
|
|
2270
|
+
}
|
|
2271
|
+
}
|
|
2272
|
+
stateBeforeSpecialS(c) {
|
|
2273
|
+
const lower = c | 32;
|
|
2274
|
+
if (lower === Sequences.ScriptEnd[3]) {
|
|
2275
|
+
this.startSpecial(Sequences.ScriptEnd, 4);
|
|
2276
|
+
} else if (lower === Sequences.StyleEnd[3]) {
|
|
2277
|
+
this.startSpecial(Sequences.StyleEnd, 4);
|
|
2278
|
+
} else {
|
|
2279
|
+
this.state = State.InTagName;
|
|
2280
|
+
this.stateInTagName(c);
|
|
2281
|
+
}
|
|
2282
|
+
}
|
|
2283
|
+
stateBeforeSpecialT(c) {
|
|
2284
|
+
const lower = c | 32;
|
|
2285
|
+
switch (lower) {
|
|
2286
|
+
case Sequences.TitleEnd[3]: {
|
|
2287
|
+
this.startSpecial(Sequences.TitleEnd, 4);
|
|
2288
|
+
break;
|
|
2289
|
+
}
|
|
2290
|
+
case Sequences.TextareaEnd[3]: {
|
|
2291
|
+
this.startSpecial(Sequences.TextareaEnd, 4);
|
|
2292
|
+
break;
|
|
2293
|
+
}
|
|
2294
|
+
case Sequences.XmpEnd[3]: {
|
|
2295
|
+
this.startSpecial(Sequences.XmpEnd, 4);
|
|
2296
|
+
break;
|
|
2297
|
+
}
|
|
2298
|
+
default: {
|
|
2299
|
+
this.state = State.InTagName;
|
|
2300
|
+
this.stateInTagName(c);
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
}
|
|
2304
|
+
startEntity() {
|
|
2305
|
+
this.baseState = this.state;
|
|
2306
|
+
this.state = State.InEntity;
|
|
2307
|
+
this.entityStart = this.index;
|
|
2308
|
+
this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
|
|
2309
|
+
}
|
|
2310
|
+
stateInEntity() {
|
|
2311
|
+
const indexInBuffer = this.index - this.offset;
|
|
2312
|
+
const length = this.entityDecoder.write(this.buffer, indexInBuffer);
|
|
2313
|
+
if (length >= 0) {
|
|
2314
|
+
this.state = this.baseState;
|
|
2315
|
+
if (length === 0) {
|
|
2316
|
+
this.index -= 1;
|
|
2317
|
+
}
|
|
2318
|
+
} else {
|
|
2319
|
+
if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
|
|
2320
|
+
this.state = this.baseState;
|
|
2321
|
+
this.index -= 1;
|
|
2322
|
+
return;
|
|
2323
|
+
}
|
|
2324
|
+
this.index = this.offset + this.buffer.length - 1;
|
|
2325
|
+
}
|
|
2326
|
+
}
|
|
2327
|
+
/**
|
|
2328
|
+
* Remove data that has already been consumed from the buffer.
|
|
2329
|
+
*/
|
|
2330
|
+
cleanup() {
|
|
2331
|
+
if (this.running && this.sectionStart !== this.index) {
|
|
2332
|
+
if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2333
|
+
this.cbs.ontext(this.sectionStart, this.index);
|
|
2334
|
+
this.sectionStart = this.index;
|
|
2335
|
+
} else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
|
|
2336
|
+
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
2337
|
+
this.sectionStart = this.index;
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
}
|
|
2341
|
+
shouldContinue() {
|
|
2342
|
+
return this.index < this.buffer.length + this.offset && this.running;
|
|
2343
|
+
}
|
|
2344
|
+
/**
|
|
2345
|
+
* Iterates through the buffer, calling the function corresponding to the current state.
|
|
2346
|
+
*
|
|
2347
|
+
* States that are more likely to be hit are higher up, as a performance improvement.
|
|
2348
|
+
*/
|
|
2349
|
+
parse() {
|
|
2350
|
+
while (this.shouldContinue()) {
|
|
2351
|
+
const c = this.buffer.charCodeAt(this.index - this.offset);
|
|
2352
|
+
switch (this.state) {
|
|
2353
|
+
case State.Text: {
|
|
2354
|
+
this.stateText(c);
|
|
2355
|
+
break;
|
|
2356
|
+
}
|
|
2357
|
+
case State.SpecialStartSequence: {
|
|
2358
|
+
this.stateSpecialStartSequence(c);
|
|
2359
|
+
break;
|
|
2360
|
+
}
|
|
2361
|
+
case State.InSpecialTag: {
|
|
2362
|
+
this.stateInSpecialTag(c);
|
|
2363
|
+
break;
|
|
2364
|
+
}
|
|
2365
|
+
case State.CDATASequence: {
|
|
2366
|
+
this.stateCDATASequence(c);
|
|
2367
|
+
break;
|
|
2368
|
+
}
|
|
2369
|
+
case State.InAttributeValueDq: {
|
|
2370
|
+
this.stateInAttributeValueDoubleQuotes(c);
|
|
2371
|
+
break;
|
|
2372
|
+
}
|
|
2373
|
+
case State.InAttributeName: {
|
|
2374
|
+
this.stateInAttributeName(c);
|
|
2375
|
+
break;
|
|
2376
|
+
}
|
|
2377
|
+
case State.InCommentLike: {
|
|
2378
|
+
this.stateInCommentLike(c);
|
|
2379
|
+
break;
|
|
2380
|
+
}
|
|
2381
|
+
case State.InSpecialComment: {
|
|
2382
|
+
this.stateInSpecialComment(c);
|
|
2383
|
+
break;
|
|
2384
|
+
}
|
|
2385
|
+
case State.BeforeAttributeName: {
|
|
2386
|
+
this.stateBeforeAttributeName(c);
|
|
2387
|
+
break;
|
|
2388
|
+
}
|
|
2389
|
+
case State.InTagName: {
|
|
2390
|
+
this.stateInTagName(c);
|
|
2391
|
+
break;
|
|
2392
|
+
}
|
|
2393
|
+
case State.InClosingTagName: {
|
|
2394
|
+
this.stateInClosingTagName(c);
|
|
2395
|
+
break;
|
|
2396
|
+
}
|
|
2397
|
+
case State.BeforeTagName: {
|
|
2398
|
+
this.stateBeforeTagName(c);
|
|
2399
|
+
break;
|
|
2400
|
+
}
|
|
2401
|
+
case State.AfterAttributeName: {
|
|
2402
|
+
this.stateAfterAttributeName(c);
|
|
2403
|
+
break;
|
|
2404
|
+
}
|
|
2405
|
+
case State.InAttributeValueSq: {
|
|
2406
|
+
this.stateInAttributeValueSingleQuotes(c);
|
|
2407
|
+
break;
|
|
2408
|
+
}
|
|
2409
|
+
case State.BeforeAttributeValue: {
|
|
2410
|
+
this.stateBeforeAttributeValue(c);
|
|
2411
|
+
break;
|
|
2412
|
+
}
|
|
2413
|
+
case State.BeforeClosingTagName: {
|
|
2414
|
+
this.stateBeforeClosingTagName(c);
|
|
2415
|
+
break;
|
|
2416
|
+
}
|
|
2417
|
+
case State.AfterClosingTagName: {
|
|
2418
|
+
this.stateAfterClosingTagName(c);
|
|
2419
|
+
break;
|
|
2420
|
+
}
|
|
2421
|
+
case State.BeforeSpecialS: {
|
|
2422
|
+
this.stateBeforeSpecialS(c);
|
|
2423
|
+
break;
|
|
2424
|
+
}
|
|
2425
|
+
case State.BeforeSpecialT: {
|
|
2426
|
+
this.stateBeforeSpecialT(c);
|
|
2427
|
+
break;
|
|
2428
|
+
}
|
|
2429
|
+
case State.InAttributeValueNq: {
|
|
2430
|
+
this.stateInAttributeValueNoQuotes(c);
|
|
2431
|
+
break;
|
|
2432
|
+
}
|
|
2433
|
+
case State.InSelfClosingTag: {
|
|
2434
|
+
this.stateInSelfClosingTag(c);
|
|
2435
|
+
break;
|
|
2436
|
+
}
|
|
2437
|
+
case State.InDeclaration: {
|
|
2438
|
+
this.stateInDeclaration(c);
|
|
2439
|
+
break;
|
|
2440
|
+
}
|
|
2441
|
+
case State.BeforeDeclaration: {
|
|
2442
|
+
this.stateBeforeDeclaration(c);
|
|
2443
|
+
break;
|
|
2444
|
+
}
|
|
2445
|
+
case State.BeforeComment: {
|
|
2446
|
+
this.stateBeforeComment(c);
|
|
2447
|
+
break;
|
|
2448
|
+
}
|
|
2449
|
+
case State.InProcessingInstruction: {
|
|
2450
|
+
this.stateInProcessingInstruction(c);
|
|
2451
|
+
break;
|
|
2452
|
+
}
|
|
2453
|
+
case State.InEntity: {
|
|
2454
|
+
this.stateInEntity();
|
|
2455
|
+
break;
|
|
2456
|
+
}
|
|
2457
|
+
}
|
|
2458
|
+
this.index++;
|
|
2459
|
+
}
|
|
2460
|
+
this.cleanup();
|
|
2461
|
+
}
|
|
2462
|
+
finish() {
|
|
2463
|
+
if (this.state === State.InEntity) {
|
|
2464
|
+
this.entityDecoder.end();
|
|
2465
|
+
this.state = this.baseState;
|
|
2466
|
+
}
|
|
2467
|
+
this.handleTrailingData();
|
|
2468
|
+
this.cbs.onend();
|
|
2469
|
+
}
|
|
2470
|
+
/** Handle any trailing data. */
|
|
2471
|
+
handleTrailingData() {
|
|
2472
|
+
const endIndex = this.buffer.length + this.offset;
|
|
2473
|
+
if (this.sectionStart >= endIndex) {
|
|
2474
|
+
return;
|
|
2475
|
+
}
|
|
2476
|
+
if (this.state === State.InCommentLike) {
|
|
2477
|
+
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2478
|
+
this.cbs.oncdata(this.sectionStart, endIndex, 0);
|
|
2479
|
+
} else {
|
|
2480
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2481
|
+
}
|
|
2482
|
+
} else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) {
|
|
2483
|
+
} else {
|
|
2484
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2485
|
+
}
|
|
2486
|
+
}
|
|
2487
|
+
emitCodePoint(cp, consumed) {
|
|
2488
|
+
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
2489
|
+
if (this.sectionStart < this.entityStart) {
|
|
2490
|
+
this.cbs.onattribdata(this.sectionStart, this.entityStart);
|
|
2491
|
+
}
|
|
2492
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2493
|
+
this.index = this.sectionStart - 1;
|
|
2494
|
+
this.cbs.onattribentity(cp);
|
|
2495
|
+
} else {
|
|
2496
|
+
if (this.sectionStart < this.entityStart) {
|
|
2497
|
+
this.cbs.ontext(this.sectionStart, this.entityStart);
|
|
2498
|
+
}
|
|
2499
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2500
|
+
this.index = this.sectionStart - 1;
|
|
2501
|
+
this.cbs.ontextentity(cp, this.sectionStart);
|
|
2502
|
+
}
|
|
2503
|
+
}
|
|
2504
|
+
};
|
|
2505
|
+
|
|
2506
|
+
// node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Parser.js
|
|
2507
|
+
var formTags = /* @__PURE__ */ new Set([
|
|
2508
|
+
"input",
|
|
2509
|
+
"option",
|
|
2510
|
+
"optgroup",
|
|
2511
|
+
"select",
|
|
2512
|
+
"button",
|
|
2513
|
+
"datalist",
|
|
2514
|
+
"textarea"
|
|
2515
|
+
]);
|
|
2516
|
+
var pTag = /* @__PURE__ */ new Set(["p"]);
|
|
2517
|
+
var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
|
|
2518
|
+
var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
|
|
2519
|
+
var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
|
|
2520
|
+
var openImpliesClose = /* @__PURE__ */ new Map([
|
|
2521
|
+
["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])],
|
|
2522
|
+
["th", /* @__PURE__ */ new Set(["th"])],
|
|
2523
|
+
["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
|
|
2524
|
+
["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
|
|
2525
|
+
["li", /* @__PURE__ */ new Set(["li"])],
|
|
2526
|
+
["p", pTag],
|
|
2527
|
+
["h1", pTag],
|
|
2528
|
+
["h2", pTag],
|
|
2529
|
+
["h3", pTag],
|
|
2530
|
+
["h4", pTag],
|
|
2531
|
+
["h5", pTag],
|
|
2532
|
+
["h6", pTag],
|
|
2533
|
+
["select", formTags],
|
|
2534
|
+
["input", formTags],
|
|
2535
|
+
["output", formTags],
|
|
2536
|
+
["button", formTags],
|
|
2537
|
+
["datalist", formTags],
|
|
2538
|
+
["textarea", formTags],
|
|
2539
|
+
["option", /* @__PURE__ */ new Set(["option"])],
|
|
2540
|
+
["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])],
|
|
2541
|
+
["dd", ddtTags],
|
|
2542
|
+
["dt", ddtTags],
|
|
2543
|
+
["address", pTag],
|
|
2544
|
+
["article", pTag],
|
|
2545
|
+
["aside", pTag],
|
|
2546
|
+
["blockquote", pTag],
|
|
2547
|
+
["details", pTag],
|
|
2548
|
+
["div", pTag],
|
|
2549
|
+
["dl", pTag],
|
|
2550
|
+
["fieldset", pTag],
|
|
2551
|
+
["figcaption", pTag],
|
|
2552
|
+
["figure", pTag],
|
|
2553
|
+
["footer", pTag],
|
|
2554
|
+
["form", pTag],
|
|
2555
|
+
["header", pTag],
|
|
2556
|
+
["hr", pTag],
|
|
2557
|
+
["main", pTag],
|
|
2558
|
+
["nav", pTag],
|
|
2559
|
+
["ol", pTag],
|
|
2560
|
+
["pre", pTag],
|
|
2561
|
+
["section", pTag],
|
|
2562
|
+
["table", pTag],
|
|
2563
|
+
["ul", pTag],
|
|
2564
|
+
["rt", rtpTags],
|
|
2565
|
+
["rp", rtpTags],
|
|
2566
|
+
["tbody", tableSectionTags],
|
|
2567
|
+
["tfoot", tableSectionTags]
|
|
2568
|
+
]);
|
|
2569
|
+
var voidElements = /* @__PURE__ */ new Set([
|
|
2570
|
+
"area",
|
|
2571
|
+
"base",
|
|
2572
|
+
"basefont",
|
|
2573
|
+
"br",
|
|
2574
|
+
"col",
|
|
2575
|
+
"command",
|
|
2576
|
+
"embed",
|
|
2577
|
+
"frame",
|
|
2578
|
+
"hr",
|
|
2579
|
+
"img",
|
|
2580
|
+
"input",
|
|
2581
|
+
"isindex",
|
|
2582
|
+
"keygen",
|
|
2583
|
+
"link",
|
|
2584
|
+
"meta",
|
|
2585
|
+
"param",
|
|
2586
|
+
"source",
|
|
2587
|
+
"track",
|
|
2588
|
+
"wbr"
|
|
2589
|
+
]);
|
|
2590
|
+
var foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
|
|
2591
|
+
var htmlIntegrationElements = /* @__PURE__ */ new Set([
|
|
2592
|
+
"mi",
|
|
2593
|
+
"mo",
|
|
2594
|
+
"mn",
|
|
2595
|
+
"ms",
|
|
2596
|
+
"mtext",
|
|
2597
|
+
"annotation-xml",
|
|
2598
|
+
"foreignobject",
|
|
2599
|
+
"desc",
|
|
2600
|
+
"title"
|
|
2601
|
+
]);
|
|
2602
|
+
var reNameEnd = /\s|\//;
|
|
2603
|
+
var Parser = class {
|
|
2604
|
+
constructor(cbs, options = {}) {
|
|
2605
|
+
var _a3, _b, _c, _d, _e, _f;
|
|
2606
|
+
this.options = options;
|
|
2607
|
+
this.startIndex = 0;
|
|
2608
|
+
this.endIndex = 0;
|
|
2609
|
+
this.openTagStart = 0;
|
|
2610
|
+
this.tagname = "";
|
|
2611
|
+
this.attribname = "";
|
|
2612
|
+
this.attribvalue = "";
|
|
2613
|
+
this.attribs = null;
|
|
2614
|
+
this.stack = [];
|
|
2615
|
+
this.buffers = [];
|
|
2616
|
+
this.bufferOffset = 0;
|
|
2617
|
+
this.writeIndex = 0;
|
|
2618
|
+
this.ended = false;
|
|
2619
|
+
this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
|
|
2620
|
+
this.htmlMode = !this.options.xmlMode;
|
|
2621
|
+
this.lowerCaseTagNames = (_a3 = options.lowerCaseTags) !== null && _a3 !== void 0 ? _a3 : this.htmlMode;
|
|
2622
|
+
this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
|
|
2623
|
+
this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
|
|
2624
|
+
this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
|
|
2625
|
+
this.foreignContext = [!this.htmlMode];
|
|
2626
|
+
(_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
|
|
2627
|
+
}
|
|
2628
|
+
// Tokenizer event handlers
|
|
2629
|
+
/** @internal */
|
|
2630
|
+
ontext(start, endIndex) {
|
|
2631
|
+
var _a3, _b;
|
|
2632
|
+
const data = this.getSlice(start, endIndex);
|
|
2633
|
+
this.endIndex = endIndex - 1;
|
|
2634
|
+
(_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, data);
|
|
2635
|
+
this.startIndex = endIndex;
|
|
2636
|
+
}
|
|
2637
|
+
/** @internal */
|
|
2638
|
+
ontextentity(cp, endIndex) {
|
|
2639
|
+
var _a3, _b;
|
|
2640
|
+
this.endIndex = endIndex - 1;
|
|
2641
|
+
(_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, fromCodePoint(cp));
|
|
2642
|
+
this.startIndex = endIndex;
|
|
2643
|
+
}
|
|
2644
|
+
/**
|
|
2645
|
+
* Checks if the current tag is a void element. Override this if you want
|
|
2646
|
+
* to specify your own additional void elements.
|
|
2647
|
+
*/
|
|
2648
|
+
isVoidElement(name) {
|
|
2649
|
+
return this.htmlMode && voidElements.has(name);
|
|
2650
|
+
}
|
|
2651
|
+
/** @internal */
|
|
2652
|
+
onopentagname(start, endIndex) {
|
|
2653
|
+
this.endIndex = endIndex;
|
|
2654
|
+
let name = this.getSlice(start, endIndex);
|
|
2655
|
+
if (this.lowerCaseTagNames) {
|
|
2656
|
+
name = name.toLowerCase();
|
|
2657
|
+
}
|
|
2658
|
+
this.emitOpenTag(name);
|
|
2659
|
+
}
|
|
2660
|
+
emitOpenTag(name) {
|
|
2661
|
+
var _a3, _b, _c, _d;
|
|
2662
|
+
this.openTagStart = this.startIndex;
|
|
2663
|
+
this.tagname = name;
|
|
2664
|
+
const impliesClose = this.htmlMode && openImpliesClose.get(name);
|
|
2665
|
+
if (impliesClose) {
|
|
2666
|
+
while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
|
|
2667
|
+
const element = this.stack.shift();
|
|
2668
|
+
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
if (!this.isVoidElement(name)) {
|
|
2672
|
+
this.stack.unshift(name);
|
|
2673
|
+
if (this.htmlMode) {
|
|
2674
|
+
if (foreignContextElements.has(name)) {
|
|
2675
|
+
this.foreignContext.unshift(true);
|
|
2676
|
+
} else if (htmlIntegrationElements.has(name)) {
|
|
2677
|
+
this.foreignContext.unshift(false);
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
(_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
|
|
2682
|
+
if (this.cbs.onopentag)
|
|
2683
|
+
this.attribs = {};
|
|
2684
|
+
}
|
|
2685
|
+
endOpenTag(isImplied) {
|
|
2686
|
+
var _a3, _b;
|
|
2687
|
+
this.startIndex = this.openTagStart;
|
|
2688
|
+
if (this.attribs) {
|
|
2689
|
+
(_b = (_a3 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a3, this.tagname, this.attribs, isImplied);
|
|
2690
|
+
this.attribs = null;
|
|
2691
|
+
}
|
|
2692
|
+
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
|
|
2693
|
+
this.cbs.onclosetag(this.tagname, true);
|
|
2694
|
+
}
|
|
2695
|
+
this.tagname = "";
|
|
2696
|
+
}
|
|
2697
|
+
/** @internal */
|
|
2698
|
+
onopentagend(endIndex) {
|
|
2699
|
+
this.endIndex = endIndex;
|
|
2700
|
+
this.endOpenTag(false);
|
|
2701
|
+
this.startIndex = endIndex + 1;
|
|
2702
|
+
}
|
|
2703
|
+
/** @internal */
|
|
2704
|
+
onclosetag(start, endIndex) {
|
|
2705
|
+
var _a3, _b, _c, _d, _e, _f, _g, _h;
|
|
2706
|
+
this.endIndex = endIndex;
|
|
2707
|
+
let name = this.getSlice(start, endIndex);
|
|
2708
|
+
if (this.lowerCaseTagNames) {
|
|
2709
|
+
name = name.toLowerCase();
|
|
2710
|
+
}
|
|
2711
|
+
if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
|
|
2712
|
+
this.foreignContext.shift();
|
|
2713
|
+
}
|
|
2714
|
+
if (!this.isVoidElement(name)) {
|
|
2715
|
+
const pos = this.stack.indexOf(name);
|
|
2716
|
+
if (pos !== -1) {
|
|
2717
|
+
for (let index = 0; index <= pos; index++) {
|
|
2718
|
+
const element = this.stack.shift();
|
|
2719
|
+
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
|
|
2720
|
+
}
|
|
2721
|
+
} else if (this.htmlMode && name === "p") {
|
|
2722
|
+
this.emitOpenTag("p");
|
|
2723
|
+
this.closeCurrentTag(true);
|
|
2724
|
+
}
|
|
2725
|
+
} else if (this.htmlMode && name === "br") {
|
|
2726
|
+
(_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
|
|
2727
|
+
(_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
|
|
2728
|
+
(_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
|
|
2729
|
+
}
|
|
2730
|
+
this.startIndex = endIndex + 1;
|
|
2731
|
+
}
|
|
2732
|
+
/** @internal */
|
|
2733
|
+
onselfclosingtag(endIndex) {
|
|
2734
|
+
this.endIndex = endIndex;
|
|
2735
|
+
if (this.recognizeSelfClosing || this.foreignContext[0]) {
|
|
2736
|
+
this.closeCurrentTag(false);
|
|
2737
|
+
this.startIndex = endIndex + 1;
|
|
2738
|
+
} else {
|
|
2739
|
+
this.onopentagend(endIndex);
|
|
2740
|
+
}
|
|
2741
|
+
}
|
|
2742
|
+
closeCurrentTag(isOpenImplied) {
|
|
2743
|
+
var _a3, _b;
|
|
2744
|
+
const name = this.tagname;
|
|
2745
|
+
this.endOpenTag(isOpenImplied);
|
|
2746
|
+
if (this.stack[0] === name) {
|
|
2747
|
+
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, name, !isOpenImplied);
|
|
2748
|
+
this.stack.shift();
|
|
2749
|
+
}
|
|
2750
|
+
}
|
|
2751
|
+
/** @internal */
|
|
2752
|
+
onattribname(start, endIndex) {
|
|
2753
|
+
this.startIndex = start;
|
|
2754
|
+
const name = this.getSlice(start, endIndex);
|
|
2755
|
+
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
|
|
2756
|
+
}
|
|
2757
|
+
/** @internal */
|
|
2758
|
+
onattribdata(start, endIndex) {
|
|
2759
|
+
this.attribvalue += this.getSlice(start, endIndex);
|
|
2760
|
+
}
|
|
2761
|
+
/** @internal */
|
|
2762
|
+
onattribentity(cp) {
|
|
2763
|
+
this.attribvalue += fromCodePoint(cp);
|
|
2764
|
+
}
|
|
2765
|
+
/** @internal */
|
|
2766
|
+
onattribend(quote2, endIndex) {
|
|
2767
|
+
var _a3, _b;
|
|
2768
|
+
this.endIndex = endIndex;
|
|
2769
|
+
(_b = (_a3 = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a3, this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
|
|
2770
|
+
if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
|
|
2771
|
+
this.attribs[this.attribname] = this.attribvalue;
|
|
2772
|
+
}
|
|
2773
|
+
this.attribvalue = "";
|
|
2774
|
+
}
|
|
2775
|
+
getInstructionName(value) {
|
|
2776
|
+
const index = value.search(reNameEnd);
|
|
2777
|
+
let name = index < 0 ? value : value.substr(0, index);
|
|
2778
|
+
if (this.lowerCaseTagNames) {
|
|
2779
|
+
name = name.toLowerCase();
|
|
2780
|
+
}
|
|
2781
|
+
return name;
|
|
2782
|
+
}
|
|
2783
|
+
/** @internal */
|
|
2784
|
+
ondeclaration(start, endIndex) {
|
|
2785
|
+
this.endIndex = endIndex;
|
|
2786
|
+
const value = this.getSlice(start, endIndex);
|
|
2787
|
+
if (this.cbs.onprocessinginstruction) {
|
|
2788
|
+
const name = this.getInstructionName(value);
|
|
2789
|
+
this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
|
|
2790
|
+
}
|
|
2791
|
+
this.startIndex = endIndex + 1;
|
|
2792
|
+
}
|
|
2793
|
+
/** @internal */
|
|
2794
|
+
onprocessinginstruction(start, endIndex) {
|
|
2795
|
+
this.endIndex = endIndex;
|
|
2796
|
+
const value = this.getSlice(start, endIndex);
|
|
2797
|
+
if (this.cbs.onprocessinginstruction) {
|
|
2798
|
+
const name = this.getInstructionName(value);
|
|
2799
|
+
this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
|
|
2800
|
+
}
|
|
2801
|
+
this.startIndex = endIndex + 1;
|
|
2802
|
+
}
|
|
2803
|
+
/** @internal */
|
|
2804
|
+
oncomment(start, endIndex, offset) {
|
|
2805
|
+
var _a3, _b, _c, _d;
|
|
2806
|
+
this.endIndex = endIndex;
|
|
2807
|
+
(_b = (_a3 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a3, this.getSlice(start, endIndex - offset));
|
|
2808
|
+
(_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
2809
|
+
this.startIndex = endIndex + 1;
|
|
2810
|
+
}
|
|
2811
|
+
/** @internal */
|
|
2812
|
+
oncdata(start, endIndex, offset) {
|
|
2813
|
+
var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
2814
|
+
this.endIndex = endIndex;
|
|
2815
|
+
const value = this.getSlice(start, endIndex - offset);
|
|
2816
|
+
if (!this.htmlMode || this.options.recognizeCDATA) {
|
|
2817
|
+
(_b = (_a3 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
2818
|
+
(_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
|
|
2819
|
+
(_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
|
|
2820
|
+
} else {
|
|
2821
|
+
(_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
|
|
2822
|
+
(_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
|
|
2823
|
+
}
|
|
2824
|
+
this.startIndex = endIndex + 1;
|
|
2825
|
+
}
|
|
2826
|
+
/** @internal */
|
|
2827
|
+
onend() {
|
|
2828
|
+
var _a3, _b;
|
|
2829
|
+
if (this.cbs.onclosetag) {
|
|
2830
|
+
this.endIndex = this.startIndex;
|
|
2831
|
+
for (let index = 0; index < this.stack.length; index++) {
|
|
2832
|
+
this.cbs.onclosetag(this.stack[index], true);
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
(_b = (_a3 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
2836
|
+
}
|
|
2837
|
+
/**
|
|
2838
|
+
* Resets the parser to a blank state, ready to parse a new HTML document
|
|
2839
|
+
*/
|
|
2840
|
+
reset() {
|
|
2841
|
+
var _a3, _b, _c, _d;
|
|
2842
|
+
(_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
2843
|
+
this.tokenizer.reset();
|
|
2844
|
+
this.tagname = "";
|
|
2845
|
+
this.attribname = "";
|
|
2846
|
+
this.attribs = null;
|
|
2847
|
+
this.stack.length = 0;
|
|
2848
|
+
this.startIndex = 0;
|
|
2849
|
+
this.endIndex = 0;
|
|
2850
|
+
(_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
|
|
2851
|
+
this.buffers.length = 0;
|
|
2852
|
+
this.foreignContext.length = 0;
|
|
2853
|
+
this.foreignContext.unshift(!this.htmlMode);
|
|
2854
|
+
this.bufferOffset = 0;
|
|
2855
|
+
this.writeIndex = 0;
|
|
2856
|
+
this.ended = false;
|
|
2857
|
+
}
|
|
2858
|
+
/**
|
|
2859
|
+
* Resets the parser, then parses a complete document and
|
|
2860
|
+
* pushes it to the handler.
|
|
2861
|
+
*
|
|
2862
|
+
* @param data Document to parse.
|
|
2863
|
+
*/
|
|
2864
|
+
parseComplete(data) {
|
|
2865
|
+
this.reset();
|
|
2866
|
+
this.end(data);
|
|
2867
|
+
}
|
|
2868
|
+
getSlice(start, end) {
|
|
2869
|
+
while (start - this.bufferOffset >= this.buffers[0].length) {
|
|
2870
|
+
this.shiftBuffer();
|
|
2871
|
+
}
|
|
2872
|
+
let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
|
|
2873
|
+
while (end - this.bufferOffset > this.buffers[0].length) {
|
|
2874
|
+
this.shiftBuffer();
|
|
2875
|
+
slice += this.buffers[0].slice(0, end - this.bufferOffset);
|
|
2876
|
+
}
|
|
2877
|
+
return slice;
|
|
2878
|
+
}
|
|
2879
|
+
shiftBuffer() {
|
|
2880
|
+
this.bufferOffset += this.buffers[0].length;
|
|
2881
|
+
this.writeIndex--;
|
|
2882
|
+
this.buffers.shift();
|
|
2883
|
+
}
|
|
2884
|
+
/**
|
|
2885
|
+
* Parses a chunk of data and calls the corresponding callbacks.
|
|
2886
|
+
*
|
|
2887
|
+
* @param chunk Chunk to parse.
|
|
2888
|
+
*/
|
|
2889
|
+
write(chunk) {
|
|
2890
|
+
var _a3, _b;
|
|
2891
|
+
if (this.ended) {
|
|
2892
|
+
(_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".write() after done!"));
|
|
2893
|
+
return;
|
|
2894
|
+
}
|
|
2895
|
+
this.buffers.push(chunk);
|
|
2896
|
+
if (this.tokenizer.running) {
|
|
2897
|
+
this.tokenizer.write(chunk);
|
|
2898
|
+
this.writeIndex++;
|
|
2899
|
+
}
|
|
2900
|
+
}
|
|
2901
|
+
/**
|
|
2902
|
+
* Parses the end of the buffer and clears the stack, calls onend.
|
|
2903
|
+
*
|
|
2904
|
+
* @param chunk Optional final chunk to parse.
|
|
2905
|
+
*/
|
|
2906
|
+
end(chunk) {
|
|
2907
|
+
var _a3, _b;
|
|
2908
|
+
if (this.ended) {
|
|
2909
|
+
(_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".end() after done!"));
|
|
2910
|
+
return;
|
|
2911
|
+
}
|
|
2912
|
+
if (chunk)
|
|
2913
|
+
this.write(chunk);
|
|
2914
|
+
this.ended = true;
|
|
2915
|
+
this.tokenizer.end();
|
|
2916
|
+
}
|
|
2917
|
+
/**
|
|
2918
|
+
* Pauses parsing. The parser won't emit events until `resume` is called.
|
|
2919
|
+
*/
|
|
2920
|
+
pause() {
|
|
2921
|
+
this.tokenizer.pause();
|
|
2922
|
+
}
|
|
2923
|
+
/**
|
|
2924
|
+
* Resumes parsing after `pause` was called.
|
|
2925
|
+
*/
|
|
2926
|
+
resume() {
|
|
2927
|
+
this.tokenizer.resume();
|
|
2928
|
+
while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
|
|
2929
|
+
this.tokenizer.write(this.buffers[this.writeIndex++]);
|
|
2930
|
+
}
|
|
2931
|
+
if (this.ended)
|
|
2932
|
+
this.tokenizer.end();
|
|
2933
|
+
}
|
|
2934
|
+
/**
|
|
2935
|
+
* Alias of `write`, for backwards compatibility.
|
|
2936
|
+
*
|
|
2937
|
+
* @param chunk Chunk to parse.
|
|
2938
|
+
* @deprecated
|
|
2939
|
+
*/
|
|
2940
|
+
parseChunk(chunk) {
|
|
2941
|
+
this.write(chunk);
|
|
2942
|
+
}
|
|
2943
|
+
/**
|
|
2944
|
+
* Alias of `end`, for backwards compatibility.
|
|
2945
|
+
*
|
|
2946
|
+
* @param chunk Optional final chunk to parse.
|
|
2947
|
+
* @deprecated
|
|
2948
|
+
*/
|
|
2949
|
+
done(chunk) {
|
|
2950
|
+
this.end(chunk);
|
|
2951
|
+
}
|
|
2952
|
+
};
|
|
2953
|
+
|
|
2954
|
+
// node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js
|
|
2955
|
+
var ElementType;
|
|
2956
|
+
(function(ElementType2) {
|
|
2957
|
+
ElementType2["Root"] = "root";
|
|
2958
|
+
ElementType2["Text"] = "text";
|
|
2959
|
+
ElementType2["Directive"] = "directive";
|
|
2960
|
+
ElementType2["Comment"] = "comment";
|
|
2961
|
+
ElementType2["Script"] = "script";
|
|
2962
|
+
ElementType2["Style"] = "style";
|
|
2963
|
+
ElementType2["Tag"] = "tag";
|
|
2964
|
+
ElementType2["CDATA"] = "cdata";
|
|
2965
|
+
ElementType2["Doctype"] = "doctype";
|
|
2966
|
+
})(ElementType || (ElementType = {}));
|
|
2967
|
+
function isTag(elem) {
|
|
2968
|
+
return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
|
|
2969
|
+
}
|
|
2970
|
+
var Root = ElementType.Root;
|
|
2971
|
+
var Text = ElementType.Text;
|
|
2972
|
+
var Directive = ElementType.Directive;
|
|
2973
|
+
var Comment = ElementType.Comment;
|
|
2974
|
+
var Script = ElementType.Script;
|
|
2975
|
+
var Style = ElementType.Style;
|
|
2976
|
+
var Tag = ElementType.Tag;
|
|
2977
|
+
var CDATA = ElementType.CDATA;
|
|
2978
|
+
var Doctype = ElementType.Doctype;
|
|
2979
|
+
|
|
2980
|
+
// node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js
|
|
2981
|
+
var Node = class {
|
|
2982
|
+
constructor() {
|
|
2983
|
+
this.parent = null;
|
|
2984
|
+
this.prev = null;
|
|
2985
|
+
this.next = null;
|
|
2986
|
+
this.startIndex = null;
|
|
2987
|
+
this.endIndex = null;
|
|
2988
|
+
}
|
|
2989
|
+
// Read-write aliases for properties
|
|
2990
|
+
/**
|
|
2991
|
+
* Same as {@link parent}.
|
|
2992
|
+
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
|
|
2993
|
+
*/
|
|
2994
|
+
get parentNode() {
|
|
2995
|
+
return this.parent;
|
|
2996
|
+
}
|
|
2997
|
+
set parentNode(parent) {
|
|
2998
|
+
this.parent = parent;
|
|
2999
|
+
}
|
|
3000
|
+
/**
|
|
3001
|
+
* Same as {@link prev}.
|
|
3002
|
+
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
|
|
3003
|
+
*/
|
|
3004
|
+
get previousSibling() {
|
|
3005
|
+
return this.prev;
|
|
3006
|
+
}
|
|
3007
|
+
set previousSibling(prev) {
|
|
3008
|
+
this.prev = prev;
|
|
3009
|
+
}
|
|
3010
|
+
/**
|
|
3011
|
+
* Same as {@link next}.
|
|
3012
|
+
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
|
|
3013
|
+
*/
|
|
3014
|
+
get nextSibling() {
|
|
3015
|
+
return this.next;
|
|
3016
|
+
}
|
|
3017
|
+
set nextSibling(next) {
|
|
3018
|
+
this.next = next;
|
|
3019
|
+
}
|
|
3020
|
+
/**
|
|
3021
|
+
* Clone this node, and optionally its children.
|
|
3022
|
+
*
|
|
3023
|
+
* @param recursive Clone child nodes as well.
|
|
3024
|
+
* @returns A clone of the node.
|
|
3025
|
+
*/
|
|
3026
|
+
cloneNode(recursive = false) {
|
|
3027
|
+
return cloneNode(this, recursive);
|
|
3028
|
+
}
|
|
3029
|
+
};
|
|
3030
|
+
var DataNode = class extends Node {
|
|
3031
|
+
/**
|
|
3032
|
+
* @param data The content of the data node
|
|
3033
|
+
*/
|
|
3034
|
+
constructor(data) {
|
|
3035
|
+
super();
|
|
3036
|
+
this.data = data;
|
|
3037
|
+
}
|
|
3038
|
+
/**
|
|
3039
|
+
* Same as {@link data}.
|
|
3040
|
+
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
|
|
3041
|
+
*/
|
|
3042
|
+
get nodeValue() {
|
|
3043
|
+
return this.data;
|
|
3044
|
+
}
|
|
3045
|
+
set nodeValue(data) {
|
|
3046
|
+
this.data = data;
|
|
3047
|
+
}
|
|
3048
|
+
};
|
|
3049
|
+
var Text2 = class extends DataNode {
|
|
3050
|
+
constructor() {
|
|
3051
|
+
super(...arguments);
|
|
3052
|
+
this.type = ElementType.Text;
|
|
3053
|
+
}
|
|
3054
|
+
get nodeType() {
|
|
3055
|
+
return 3;
|
|
3056
|
+
}
|
|
3057
|
+
};
|
|
3058
|
+
var Comment2 = class extends DataNode {
|
|
3059
|
+
constructor() {
|
|
3060
|
+
super(...arguments);
|
|
3061
|
+
this.type = ElementType.Comment;
|
|
3062
|
+
}
|
|
3063
|
+
get nodeType() {
|
|
3064
|
+
return 8;
|
|
3065
|
+
}
|
|
3066
|
+
};
|
|
3067
|
+
var ProcessingInstruction = class extends DataNode {
|
|
3068
|
+
constructor(name, data) {
|
|
3069
|
+
super(data);
|
|
3070
|
+
this.name = name;
|
|
3071
|
+
this.type = ElementType.Directive;
|
|
3072
|
+
}
|
|
3073
|
+
get nodeType() {
|
|
3074
|
+
return 1;
|
|
3075
|
+
}
|
|
3076
|
+
};
|
|
3077
|
+
var NodeWithChildren = class extends Node {
|
|
3078
|
+
/**
|
|
3079
|
+
* @param children Children of the node. Only certain node types can have children.
|
|
3080
|
+
*/
|
|
3081
|
+
constructor(children) {
|
|
3082
|
+
super();
|
|
3083
|
+
this.children = children;
|
|
3084
|
+
}
|
|
3085
|
+
// Aliases
|
|
3086
|
+
/** First child of the node. */
|
|
3087
|
+
get firstChild() {
|
|
3088
|
+
var _a3;
|
|
3089
|
+
return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
|
|
3090
|
+
}
|
|
3091
|
+
/** Last child of the node. */
|
|
3092
|
+
get lastChild() {
|
|
3093
|
+
return this.children.length > 0 ? this.children[this.children.length - 1] : null;
|
|
3094
|
+
}
|
|
3095
|
+
/**
|
|
3096
|
+
* Same as {@link children}.
|
|
3097
|
+
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
|
|
3098
|
+
*/
|
|
3099
|
+
get childNodes() {
|
|
3100
|
+
return this.children;
|
|
3101
|
+
}
|
|
3102
|
+
set childNodes(children) {
|
|
3103
|
+
this.children = children;
|
|
3104
|
+
}
|
|
3105
|
+
};
|
|
3106
|
+
var CDATA2 = class extends NodeWithChildren {
|
|
3107
|
+
constructor() {
|
|
3108
|
+
super(...arguments);
|
|
3109
|
+
this.type = ElementType.CDATA;
|
|
3110
|
+
}
|
|
3111
|
+
get nodeType() {
|
|
3112
|
+
return 4;
|
|
3113
|
+
}
|
|
3114
|
+
};
|
|
3115
|
+
var Document = class extends NodeWithChildren {
|
|
3116
|
+
constructor() {
|
|
3117
|
+
super(...arguments);
|
|
3118
|
+
this.type = ElementType.Root;
|
|
3119
|
+
}
|
|
3120
|
+
get nodeType() {
|
|
3121
|
+
return 9;
|
|
3122
|
+
}
|
|
3123
|
+
};
|
|
3124
|
+
var Element = class extends NodeWithChildren {
|
|
3125
|
+
/**
|
|
3126
|
+
* @param name Name of the tag, eg. `div`, `span`.
|
|
3127
|
+
* @param attribs Object mapping attribute names to attribute values.
|
|
3128
|
+
* @param children Children of the node.
|
|
3129
|
+
*/
|
|
3130
|
+
constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
|
|
3131
|
+
super(children);
|
|
3132
|
+
this.name = name;
|
|
3133
|
+
this.attribs = attribs;
|
|
3134
|
+
this.type = type;
|
|
3135
|
+
}
|
|
3136
|
+
get nodeType() {
|
|
3137
|
+
return 1;
|
|
3138
|
+
}
|
|
3139
|
+
// DOM Level 1 aliases
|
|
3140
|
+
/**
|
|
3141
|
+
* Same as {@link name}.
|
|
3142
|
+
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
|
|
3143
|
+
*/
|
|
3144
|
+
get tagName() {
|
|
3145
|
+
return this.name;
|
|
3146
|
+
}
|
|
3147
|
+
set tagName(name) {
|
|
3148
|
+
this.name = name;
|
|
3149
|
+
}
|
|
3150
|
+
get attributes() {
|
|
3151
|
+
return Object.keys(this.attribs).map((name) => {
|
|
3152
|
+
var _a3, _b;
|
|
3153
|
+
return {
|
|
3154
|
+
name,
|
|
3155
|
+
value: this.attribs[name],
|
|
3156
|
+
namespace: (_a3 = this["x-attribsNamespace"]) === null || _a3 === void 0 ? void 0 : _a3[name],
|
|
3157
|
+
prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
|
|
3158
|
+
};
|
|
3159
|
+
});
|
|
3160
|
+
}
|
|
3161
|
+
};
|
|
3162
|
+
function isTag2(node) {
|
|
3163
|
+
return isTag(node);
|
|
3164
|
+
}
|
|
3165
|
+
function isCDATA(node) {
|
|
3166
|
+
return node.type === ElementType.CDATA;
|
|
3167
|
+
}
|
|
3168
|
+
function isText(node) {
|
|
3169
|
+
return node.type === ElementType.Text;
|
|
3170
|
+
}
|
|
3171
|
+
function isComment(node) {
|
|
3172
|
+
return node.type === ElementType.Comment;
|
|
3173
|
+
}
|
|
3174
|
+
function isDirective(node) {
|
|
3175
|
+
return node.type === ElementType.Directive;
|
|
3176
|
+
}
|
|
3177
|
+
function isDocument(node) {
|
|
3178
|
+
return node.type === ElementType.Root;
|
|
3179
|
+
}
|
|
3180
|
+
function cloneNode(node, recursive = false) {
|
|
3181
|
+
let result;
|
|
3182
|
+
if (isText(node)) {
|
|
3183
|
+
result = new Text2(node.data);
|
|
3184
|
+
} else if (isComment(node)) {
|
|
3185
|
+
result = new Comment2(node.data);
|
|
3186
|
+
} else if (isTag2(node)) {
|
|
3187
|
+
const children = recursive ? cloneChildren(node.children) : [];
|
|
3188
|
+
const clone = new Element(node.name, { ...node.attribs }, children);
|
|
3189
|
+
children.forEach((child) => child.parent = clone);
|
|
3190
|
+
if (node.namespace != null) {
|
|
3191
|
+
clone.namespace = node.namespace;
|
|
3192
|
+
}
|
|
3193
|
+
if (node["x-attribsNamespace"]) {
|
|
3194
|
+
clone["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
|
|
3195
|
+
}
|
|
3196
|
+
if (node["x-attribsPrefix"]) {
|
|
3197
|
+
clone["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
|
|
3198
|
+
}
|
|
3199
|
+
result = clone;
|
|
3200
|
+
} else if (isCDATA(node)) {
|
|
3201
|
+
const children = recursive ? cloneChildren(node.children) : [];
|
|
3202
|
+
const clone = new CDATA2(children);
|
|
3203
|
+
children.forEach((child) => child.parent = clone);
|
|
3204
|
+
result = clone;
|
|
3205
|
+
} else if (isDocument(node)) {
|
|
3206
|
+
const children = recursive ? cloneChildren(node.children) : [];
|
|
3207
|
+
const clone = new Document(children);
|
|
3208
|
+
children.forEach((child) => child.parent = clone);
|
|
3209
|
+
if (node["x-mode"]) {
|
|
3210
|
+
clone["x-mode"] = node["x-mode"];
|
|
3211
|
+
}
|
|
3212
|
+
result = clone;
|
|
3213
|
+
} else if (isDirective(node)) {
|
|
3214
|
+
const instruction = new ProcessingInstruction(node.name, node.data);
|
|
3215
|
+
if (node["x-name"] != null) {
|
|
3216
|
+
instruction["x-name"] = node["x-name"];
|
|
3217
|
+
instruction["x-publicId"] = node["x-publicId"];
|
|
3218
|
+
instruction["x-systemId"] = node["x-systemId"];
|
|
3219
|
+
}
|
|
3220
|
+
result = instruction;
|
|
3221
|
+
} else {
|
|
3222
|
+
throw new Error(`Not implemented yet: ${node.type}`);
|
|
3223
|
+
}
|
|
3224
|
+
result.startIndex = node.startIndex;
|
|
3225
|
+
result.endIndex = node.endIndex;
|
|
3226
|
+
if (node.sourceCodeLocation != null) {
|
|
3227
|
+
result.sourceCodeLocation = node.sourceCodeLocation;
|
|
3228
|
+
}
|
|
3229
|
+
return result;
|
|
3230
|
+
}
|
|
3231
|
+
function cloneChildren(childs) {
|
|
3232
|
+
const children = childs.map((child) => cloneNode(child, true));
|
|
3233
|
+
for (let i = 1; i < children.length; i++) {
|
|
3234
|
+
children[i].prev = children[i - 1];
|
|
3235
|
+
children[i - 1].next = children[i];
|
|
3236
|
+
}
|
|
3237
|
+
return children;
|
|
3238
|
+
}
|
|
3239
|
+
|
|
3240
|
+
// node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js
|
|
3241
|
+
var defaultOpts = {
|
|
3242
|
+
withStartIndices: false,
|
|
3243
|
+
withEndIndices: false,
|
|
3244
|
+
xmlMode: false
|
|
3245
|
+
};
|
|
3246
|
+
var DomHandler = class {
|
|
3247
|
+
/**
|
|
3248
|
+
* @param callback Called once parsing has completed.
|
|
3249
|
+
* @param options Settings for the handler.
|
|
3250
|
+
* @param elementCB Callback whenever a tag is closed.
|
|
3251
|
+
*/
|
|
3252
|
+
constructor(callback, options, elementCB) {
|
|
3253
|
+
this.dom = [];
|
|
3254
|
+
this.root = new Document(this.dom);
|
|
3255
|
+
this.done = false;
|
|
3256
|
+
this.tagStack = [this.root];
|
|
3257
|
+
this.lastNode = null;
|
|
3258
|
+
this.parser = null;
|
|
3259
|
+
if (typeof options === "function") {
|
|
3260
|
+
elementCB = options;
|
|
3261
|
+
options = defaultOpts;
|
|
3262
|
+
}
|
|
3263
|
+
if (typeof callback === "object") {
|
|
3264
|
+
options = callback;
|
|
3265
|
+
callback = void 0;
|
|
3266
|
+
}
|
|
3267
|
+
this.callback = callback !== null && callback !== void 0 ? callback : null;
|
|
3268
|
+
this.options = options !== null && options !== void 0 ? options : defaultOpts;
|
|
3269
|
+
this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
|
|
3270
|
+
}
|
|
3271
|
+
onparserinit(parser) {
|
|
3272
|
+
this.parser = parser;
|
|
3273
|
+
}
|
|
3274
|
+
// Resets the handler back to starting state
|
|
3275
|
+
onreset() {
|
|
3276
|
+
this.dom = [];
|
|
3277
|
+
this.root = new Document(this.dom);
|
|
3278
|
+
this.done = false;
|
|
3279
|
+
this.tagStack = [this.root];
|
|
3280
|
+
this.lastNode = null;
|
|
3281
|
+
this.parser = null;
|
|
3282
|
+
}
|
|
3283
|
+
// Signals the handler that parsing is done
|
|
3284
|
+
onend() {
|
|
3285
|
+
if (this.done)
|
|
3286
|
+
return;
|
|
3287
|
+
this.done = true;
|
|
3288
|
+
this.parser = null;
|
|
3289
|
+
this.handleCallback(null);
|
|
3290
|
+
}
|
|
3291
|
+
onerror(error) {
|
|
3292
|
+
this.handleCallback(error);
|
|
3293
|
+
}
|
|
3294
|
+
onclosetag() {
|
|
3295
|
+
this.lastNode = null;
|
|
3296
|
+
const elem = this.tagStack.pop();
|
|
3297
|
+
if (this.options.withEndIndices) {
|
|
3298
|
+
elem.endIndex = this.parser.endIndex;
|
|
3299
|
+
}
|
|
3300
|
+
if (this.elementCB)
|
|
3301
|
+
this.elementCB(elem);
|
|
3302
|
+
}
|
|
3303
|
+
onopentag(name, attribs) {
|
|
3304
|
+
const type = this.options.xmlMode ? ElementType.Tag : void 0;
|
|
3305
|
+
const element = new Element(name, attribs, void 0, type);
|
|
3306
|
+
this.addNode(element);
|
|
3307
|
+
this.tagStack.push(element);
|
|
3308
|
+
}
|
|
3309
|
+
ontext(data) {
|
|
3310
|
+
const { lastNode } = this;
|
|
3311
|
+
if (lastNode && lastNode.type === ElementType.Text) {
|
|
3312
|
+
lastNode.data += data;
|
|
3313
|
+
if (this.options.withEndIndices) {
|
|
3314
|
+
lastNode.endIndex = this.parser.endIndex;
|
|
3315
|
+
}
|
|
3316
|
+
} else {
|
|
3317
|
+
const node = new Text2(data);
|
|
3318
|
+
this.addNode(node);
|
|
3319
|
+
this.lastNode = node;
|
|
3320
|
+
}
|
|
3321
|
+
}
|
|
3322
|
+
oncomment(data) {
|
|
3323
|
+
if (this.lastNode && this.lastNode.type === ElementType.Comment) {
|
|
3324
|
+
this.lastNode.data += data;
|
|
3325
|
+
return;
|
|
3326
|
+
}
|
|
3327
|
+
const node = new Comment2(data);
|
|
3328
|
+
this.addNode(node);
|
|
3329
|
+
this.lastNode = node;
|
|
3330
|
+
}
|
|
3331
|
+
oncommentend() {
|
|
3332
|
+
this.lastNode = null;
|
|
3333
|
+
}
|
|
3334
|
+
oncdatastart() {
|
|
3335
|
+
const text = new Text2("");
|
|
3336
|
+
const node = new CDATA2([text]);
|
|
3337
|
+
this.addNode(node);
|
|
3338
|
+
text.parent = node;
|
|
3339
|
+
this.lastNode = text;
|
|
3340
|
+
}
|
|
3341
|
+
oncdataend() {
|
|
3342
|
+
this.lastNode = null;
|
|
3343
|
+
}
|
|
3344
|
+
onprocessinginstruction(name, data) {
|
|
3345
|
+
const node = new ProcessingInstruction(name, data);
|
|
3346
|
+
this.addNode(node);
|
|
3347
|
+
}
|
|
3348
|
+
handleCallback(error) {
|
|
3349
|
+
if (typeof this.callback === "function") {
|
|
3350
|
+
this.callback(error, this.dom);
|
|
3351
|
+
} else if (error) {
|
|
3352
|
+
throw error;
|
|
3353
|
+
}
|
|
3354
|
+
}
|
|
3355
|
+
addNode(node) {
|
|
3356
|
+
const parent = this.tagStack[this.tagStack.length - 1];
|
|
3357
|
+
const previousSibling = parent.children[parent.children.length - 1];
|
|
3358
|
+
if (this.options.withStartIndices) {
|
|
3359
|
+
node.startIndex = this.parser.startIndex;
|
|
3360
|
+
}
|
|
3361
|
+
if (this.options.withEndIndices) {
|
|
3362
|
+
node.endIndex = this.parser.endIndex;
|
|
3363
|
+
}
|
|
3364
|
+
parent.children.push(node);
|
|
3365
|
+
if (previousSibling) {
|
|
3366
|
+
node.prev = previousSibling;
|
|
3367
|
+
previousSibling.next = node;
|
|
3368
|
+
}
|
|
3369
|
+
node.parent = parent;
|
|
3370
|
+
this.lastNode = null;
|
|
3371
|
+
}
|
|
3372
|
+
};
|
|
3373
|
+
|
|
3374
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
|
|
3375
|
+
var decode_data_html_default = new Uint16Array(
|
|
3376
|
+
// prettier-ignore
|
|
3377
|
+
'\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
|
|
3378
|
+
);
|
|
3379
|
+
|
|
3380
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
|
|
3381
|
+
var decode_data_xml_default = new Uint16Array(
|
|
3382
|
+
// prettier-ignore
|
|
3383
|
+
"\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
|
|
3384
|
+
);
|
|
3385
|
+
|
|
3386
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
|
|
3387
|
+
var _a2;
|
|
3388
|
+
var decodeMap2 = /* @__PURE__ */ new Map([
|
|
3389
|
+
[0, 65533],
|
|
3390
|
+
// C1 Unicode control character reference replacements
|
|
3391
|
+
[128, 8364],
|
|
3392
|
+
[130, 8218],
|
|
3393
|
+
[131, 402],
|
|
3394
|
+
[132, 8222],
|
|
3395
|
+
[133, 8230],
|
|
3396
|
+
[134, 8224],
|
|
3397
|
+
[135, 8225],
|
|
3398
|
+
[136, 710],
|
|
3399
|
+
[137, 8240],
|
|
3400
|
+
[138, 352],
|
|
3401
|
+
[139, 8249],
|
|
3402
|
+
[140, 338],
|
|
3403
|
+
[142, 381],
|
|
3404
|
+
[145, 8216],
|
|
3405
|
+
[146, 8217],
|
|
3406
|
+
[147, 8220],
|
|
3407
|
+
[148, 8221],
|
|
3408
|
+
[149, 8226],
|
|
3409
|
+
[150, 8211],
|
|
3410
|
+
[151, 8212],
|
|
3411
|
+
[152, 732],
|
|
3412
|
+
[153, 8482],
|
|
3413
|
+
[154, 353],
|
|
3414
|
+
[155, 8250],
|
|
3415
|
+
[156, 339],
|
|
3416
|
+
[158, 382],
|
|
3417
|
+
[159, 376]
|
|
3418
|
+
]);
|
|
3419
|
+
var fromCodePoint2 = (
|
|
3420
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
|
|
3421
|
+
(_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
|
|
3422
|
+
let output = "";
|
|
3423
|
+
if (codePoint > 65535) {
|
|
3424
|
+
codePoint -= 65536;
|
|
3425
|
+
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
3426
|
+
codePoint = 56320 | codePoint & 1023;
|
|
3427
|
+
}
|
|
3428
|
+
output += String.fromCharCode(codePoint);
|
|
3429
|
+
return output;
|
|
3430
|
+
}
|
|
3431
|
+
);
|
|
3432
|
+
function replaceCodePoint2(codePoint) {
|
|
3433
|
+
var _a3;
|
|
3434
|
+
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
3435
|
+
return 65533;
|
|
3436
|
+
}
|
|
3437
|
+
return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
|
|
3438
|
+
}
|
|
3439
|
+
|
|
3440
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
|
|
3441
|
+
var CharCodes3;
|
|
3442
|
+
(function(CharCodes4) {
|
|
3443
|
+
CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
|
|
3444
|
+
CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
|
|
3445
|
+
CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
|
|
3446
|
+
CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
|
|
3447
|
+
CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
|
|
3448
|
+
CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
|
|
3449
|
+
CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
|
|
3450
|
+
CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
|
|
3451
|
+
CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
|
|
3452
|
+
CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
|
|
3453
|
+
CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
|
|
3454
|
+
CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
|
|
3455
|
+
})(CharCodes3 || (CharCodes3 = {}));
|
|
3456
|
+
var TO_LOWER_BIT2 = 32;
|
|
3457
|
+
var BinTrieFlags2;
|
|
3458
|
+
(function(BinTrieFlags3) {
|
|
3459
|
+
BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
3460
|
+
BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
|
|
3461
|
+
BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
3462
|
+
})(BinTrieFlags2 || (BinTrieFlags2 = {}));
|
|
3463
|
+
function isNumber2(code) {
|
|
3464
|
+
return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
|
|
3465
|
+
}
|
|
3466
|
+
function isHexadecimalCharacter2(code) {
|
|
3467
|
+
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
|
|
3468
|
+
}
|
|
3469
|
+
function isAsciiAlphaNumeric2(code) {
|
|
3470
|
+
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
|
|
3471
|
+
}
|
|
3472
|
+
function isEntityInAttributeInvalidEnd2(code) {
|
|
3473
|
+
return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
|
|
3474
|
+
}
|
|
3475
|
+
var EntityDecoderState2;
|
|
3476
|
+
(function(EntityDecoderState3) {
|
|
3477
|
+
EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
|
|
3478
|
+
EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
|
|
3479
|
+
EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
|
|
3480
|
+
EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
|
|
3481
|
+
EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
|
|
3482
|
+
})(EntityDecoderState2 || (EntityDecoderState2 = {}));
|
|
3483
|
+
var DecodingMode2;
|
|
3484
|
+
(function(DecodingMode3) {
|
|
3485
|
+
DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
|
|
3486
|
+
DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
|
|
3487
|
+
DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
|
|
3488
|
+
})(DecodingMode2 || (DecodingMode2 = {}));
|
|
3489
|
+
var EntityDecoder2 = class {
|
|
3490
|
+
constructor(decodeTree, emitCodePoint, errors) {
|
|
3491
|
+
this.decodeTree = decodeTree;
|
|
3492
|
+
this.emitCodePoint = emitCodePoint;
|
|
3493
|
+
this.errors = errors;
|
|
3494
|
+
this.state = EntityDecoderState2.EntityStart;
|
|
3495
|
+
this.consumed = 1;
|
|
3496
|
+
this.result = 0;
|
|
3497
|
+
this.treeIndex = 0;
|
|
3498
|
+
this.excess = 1;
|
|
3499
|
+
this.decodeMode = DecodingMode2.Strict;
|
|
3500
|
+
}
|
|
3501
|
+
/** Resets the instance to make it reusable. */
|
|
3502
|
+
startEntity(decodeMode) {
|
|
3503
|
+
this.decodeMode = decodeMode;
|
|
3504
|
+
this.state = EntityDecoderState2.EntityStart;
|
|
3505
|
+
this.result = 0;
|
|
3506
|
+
this.treeIndex = 0;
|
|
3507
|
+
this.excess = 1;
|
|
3508
|
+
this.consumed = 1;
|
|
3509
|
+
}
|
|
3510
|
+
/**
|
|
3511
|
+
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
|
3512
|
+
* If the entity is incomplete, the decoder will return -1.
|
|
3513
|
+
*
|
|
3514
|
+
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
3515
|
+
* entity is incomplete, and resume when the next string is written.
|
|
3516
|
+
*
|
|
3517
|
+
* @param string The string containing the entity (or a continuation of the entity).
|
|
3518
|
+
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
3519
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3520
|
+
*/
|
|
3521
|
+
write(str, offset) {
|
|
3522
|
+
switch (this.state) {
|
|
3523
|
+
case EntityDecoderState2.EntityStart: {
|
|
3524
|
+
if (str.charCodeAt(offset) === CharCodes3.NUM) {
|
|
3525
|
+
this.state = EntityDecoderState2.NumericStart;
|
|
3526
|
+
this.consumed += 1;
|
|
3527
|
+
return this.stateNumericStart(str, offset + 1);
|
|
3528
|
+
}
|
|
3529
|
+
this.state = EntityDecoderState2.NamedEntity;
|
|
3530
|
+
return this.stateNamedEntity(str, offset);
|
|
3531
|
+
}
|
|
3532
|
+
case EntityDecoderState2.NumericStart: {
|
|
3533
|
+
return this.stateNumericStart(str, offset);
|
|
3534
|
+
}
|
|
3535
|
+
case EntityDecoderState2.NumericDecimal: {
|
|
3536
|
+
return this.stateNumericDecimal(str, offset);
|
|
3537
|
+
}
|
|
3538
|
+
case EntityDecoderState2.NumericHex: {
|
|
3539
|
+
return this.stateNumericHex(str, offset);
|
|
3540
|
+
}
|
|
3541
|
+
case EntityDecoderState2.NamedEntity: {
|
|
3542
|
+
return this.stateNamedEntity(str, offset);
|
|
3543
|
+
}
|
|
3544
|
+
}
|
|
3545
|
+
}
|
|
3546
|
+
/**
|
|
3547
|
+
* Switches between the numeric decimal and hexadecimal states.
|
|
3548
|
+
*
|
|
3549
|
+
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
3550
|
+
*
|
|
3551
|
+
* @param str The string containing the entity (or a continuation of the entity).
|
|
3552
|
+
* @param offset The current offset.
|
|
3553
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3554
|
+
*/
|
|
3555
|
+
stateNumericStart(str, offset) {
|
|
3556
|
+
if (offset >= str.length) {
|
|
3557
|
+
return -1;
|
|
3558
|
+
}
|
|
3559
|
+
if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
|
|
3560
|
+
this.state = EntityDecoderState2.NumericHex;
|
|
3561
|
+
this.consumed += 1;
|
|
3562
|
+
return this.stateNumericHex(str, offset + 1);
|
|
3563
|
+
}
|
|
3564
|
+
this.state = EntityDecoderState2.NumericDecimal;
|
|
3565
|
+
return this.stateNumericDecimal(str, offset);
|
|
3566
|
+
}
|
|
3567
|
+
addToNumericResult(str, start, end, base) {
|
|
3568
|
+
if (start !== end) {
|
|
3569
|
+
const digitCount = end - start;
|
|
3570
|
+
this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
|
|
3571
|
+
this.consumed += digitCount;
|
|
3572
|
+
}
|
|
3573
|
+
}
|
|
3574
|
+
/**
|
|
3575
|
+
* Parses a hexadecimal numeric entity.
|
|
3576
|
+
*
|
|
3577
|
+
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
3578
|
+
*
|
|
3579
|
+
* @param str The string containing the entity (or a continuation of the entity).
|
|
3580
|
+
* @param offset The current offset.
|
|
3581
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3582
|
+
*/
|
|
3583
|
+
stateNumericHex(str, offset) {
|
|
3584
|
+
const startIdx = offset;
|
|
3585
|
+
while (offset < str.length) {
|
|
3586
|
+
const char = str.charCodeAt(offset);
|
|
3587
|
+
if (isNumber2(char) || isHexadecimalCharacter2(char)) {
|
|
3588
|
+
offset += 1;
|
|
3589
|
+
} else {
|
|
3590
|
+
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3591
|
+
return this.emitNumericEntity(char, 3);
|
|
3592
|
+
}
|
|
3593
|
+
}
|
|
3594
|
+
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3595
|
+
return -1;
|
|
3596
|
+
}
|
|
3597
|
+
/**
|
|
3598
|
+
* Parses a decimal numeric entity.
|
|
3599
|
+
*
|
|
3600
|
+
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
3601
|
+
*
|
|
3602
|
+
* @param str The string containing the entity (or a continuation of the entity).
|
|
3603
|
+
* @param offset The current offset.
|
|
3604
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3605
|
+
*/
|
|
3606
|
+
stateNumericDecimal(str, offset) {
|
|
3607
|
+
const startIdx = offset;
|
|
3608
|
+
while (offset < str.length) {
|
|
3609
|
+
const char = str.charCodeAt(offset);
|
|
3610
|
+
if (isNumber2(char)) {
|
|
3611
|
+
offset += 1;
|
|
3612
|
+
} else {
|
|
3613
|
+
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3614
|
+
return this.emitNumericEntity(char, 2);
|
|
3615
|
+
}
|
|
3616
|
+
}
|
|
3617
|
+
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3618
|
+
return -1;
|
|
3619
|
+
}
|
|
3620
|
+
/**
|
|
3621
|
+
* Validate and emit a numeric entity.
|
|
3622
|
+
*
|
|
3623
|
+
* Implements the logic from the `Hexademical character reference start
|
|
3624
|
+
* state` and `Numeric character reference end state` in the HTML spec.
|
|
3625
|
+
*
|
|
3626
|
+
* @param lastCp The last code point of the entity. Used to see if the
|
|
3627
|
+
* entity was terminated with a semicolon.
|
|
3628
|
+
* @param expectedLength The minimum number of characters that should be
|
|
3629
|
+
* consumed. Used to validate that at least one digit
|
|
3630
|
+
* was consumed.
|
|
3631
|
+
* @returns The number of characters that were consumed.
|
|
3632
|
+
*/
|
|
3633
|
+
emitNumericEntity(lastCp, expectedLength) {
|
|
3634
|
+
var _a3;
|
|
3635
|
+
if (this.consumed <= expectedLength) {
|
|
3636
|
+
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3637
|
+
return 0;
|
|
3638
|
+
}
|
|
3639
|
+
if (lastCp === CharCodes3.SEMI) {
|
|
3640
|
+
this.consumed += 1;
|
|
3641
|
+
} else if (this.decodeMode === DecodingMode2.Strict) {
|
|
3642
|
+
return 0;
|
|
3643
|
+
}
|
|
3644
|
+
this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
|
|
3645
|
+
if (this.errors) {
|
|
3646
|
+
if (lastCp !== CharCodes3.SEMI) {
|
|
3647
|
+
this.errors.missingSemicolonAfterCharacterReference();
|
|
3648
|
+
}
|
|
3649
|
+
this.errors.validateNumericCharacterReference(this.result);
|
|
3650
|
+
}
|
|
3651
|
+
return this.consumed;
|
|
3652
|
+
}
|
|
3653
|
+
/**
|
|
3654
|
+
* Parses a named entity.
|
|
3655
|
+
*
|
|
3656
|
+
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
3657
|
+
*
|
|
3658
|
+
* @param str The string containing the entity (or a continuation of the entity).
|
|
3659
|
+
* @param offset The current offset.
|
|
3660
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3661
|
+
*/
|
|
3662
|
+
stateNamedEntity(str, offset) {
|
|
3663
|
+
const { decodeTree } = this;
|
|
3664
|
+
let current = decodeTree[this.treeIndex];
|
|
3665
|
+
let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3666
|
+
for (; offset < str.length; offset++, this.excess++) {
|
|
3667
|
+
const char = str.charCodeAt(offset);
|
|
3668
|
+
this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
3669
|
+
if (this.treeIndex < 0) {
|
|
3670
|
+
return this.result === 0 || // If we are parsing an attribute
|
|
3671
|
+
this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
|
|
3672
|
+
(valueLength === 0 || // And there should be no invalid characters.
|
|
3673
|
+
isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
3674
|
+
}
|
|
3675
|
+
current = decodeTree[this.treeIndex];
|
|
3676
|
+
valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3677
|
+
if (valueLength !== 0) {
|
|
3678
|
+
if (char === CharCodes3.SEMI) {
|
|
3679
|
+
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
3680
|
+
}
|
|
3681
|
+
if (this.decodeMode !== DecodingMode2.Strict) {
|
|
3682
|
+
this.result = this.treeIndex;
|
|
3683
|
+
this.consumed += this.excess;
|
|
3684
|
+
this.excess = 0;
|
|
3685
|
+
}
|
|
3686
|
+
}
|
|
3687
|
+
}
|
|
3688
|
+
return -1;
|
|
3689
|
+
}
|
|
3690
|
+
/**
|
|
3691
|
+
* Emit a named entity that was not terminated with a semicolon.
|
|
3692
|
+
*
|
|
3693
|
+
* @returns The number of characters consumed.
|
|
3694
|
+
*/
|
|
3695
|
+
emitNotTerminatedNamedEntity() {
|
|
3696
|
+
var _a3;
|
|
3697
|
+
const { result, decodeTree } = this;
|
|
3698
|
+
const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3699
|
+
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
3700
|
+
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
|
|
3701
|
+
return this.consumed;
|
|
3702
|
+
}
|
|
3703
|
+
/**
|
|
3704
|
+
* Emit a named entity.
|
|
3705
|
+
*
|
|
3706
|
+
* @param result The index of the entity in the decode tree.
|
|
3707
|
+
* @param valueLength The number of bytes in the entity.
|
|
3708
|
+
* @param consumed The number of characters consumed.
|
|
3709
|
+
*
|
|
3710
|
+
* @returns The number of characters consumed.
|
|
3711
|
+
*/
|
|
3712
|
+
emitNamedEntityData(result, valueLength, consumed) {
|
|
3713
|
+
const { decodeTree } = this;
|
|
3714
|
+
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
|
|
3715
|
+
if (valueLength === 3) {
|
|
3716
|
+
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
3717
|
+
}
|
|
3718
|
+
return consumed;
|
|
3719
|
+
}
|
|
3720
|
+
/**
|
|
3721
|
+
* Signal to the parser that the end of the input was reached.
|
|
3722
|
+
*
|
|
3723
|
+
* Remaining data will be emitted and relevant errors will be produced.
|
|
3724
|
+
*
|
|
3725
|
+
* @returns The number of characters consumed.
|
|
3726
|
+
*/
|
|
3727
|
+
end() {
|
|
3728
|
+
var _a3;
|
|
3729
|
+
switch (this.state) {
|
|
3730
|
+
case EntityDecoderState2.NamedEntity: {
|
|
3731
|
+
return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
3732
|
+
}
|
|
3733
|
+
// Otherwise, emit a numeric entity if we have one.
|
|
3734
|
+
case EntityDecoderState2.NumericDecimal: {
|
|
3735
|
+
return this.emitNumericEntity(0, 2);
|
|
3736
|
+
}
|
|
3737
|
+
case EntityDecoderState2.NumericHex: {
|
|
3738
|
+
return this.emitNumericEntity(0, 3);
|
|
3739
|
+
}
|
|
3740
|
+
case EntityDecoderState2.NumericStart: {
|
|
3741
|
+
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3742
|
+
return 0;
|
|
3743
|
+
}
|
|
3744
|
+
case EntityDecoderState2.EntityStart: {
|
|
3745
|
+
return 0;
|
|
3746
|
+
}
|
|
3747
|
+
}
|
|
3748
|
+
}
|
|
3749
|
+
};
|
|
3750
|
+
function getDecoder(decodeTree) {
|
|
3751
|
+
let ret = "";
|
|
3752
|
+
const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
|
|
3753
|
+
return function decodeWithTrie(str, decodeMode) {
|
|
3754
|
+
let lastIndex = 0;
|
|
3755
|
+
let offset = 0;
|
|
3756
|
+
while ((offset = str.indexOf("&", offset)) >= 0) {
|
|
3757
|
+
ret += str.slice(lastIndex, offset);
|
|
3758
|
+
decoder.startEntity(decodeMode);
|
|
3759
|
+
const len = decoder.write(
|
|
3760
|
+
str,
|
|
3761
|
+
// Skip the "&"
|
|
3762
|
+
offset + 1
|
|
3763
|
+
);
|
|
3764
|
+
if (len < 0) {
|
|
3765
|
+
lastIndex = offset + decoder.end();
|
|
3766
|
+
break;
|
|
3767
|
+
}
|
|
3768
|
+
lastIndex = offset + len;
|
|
3769
|
+
offset = len === 0 ? lastIndex + 1 : lastIndex;
|
|
3770
|
+
}
|
|
3771
|
+
const result = ret + str.slice(lastIndex);
|
|
3772
|
+
ret = "";
|
|
3773
|
+
return result;
|
|
3774
|
+
};
|
|
3775
|
+
}
|
|
3776
|
+
function determineBranch2(decodeTree, current, nodeIdx, char) {
|
|
3777
|
+
const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
|
|
3778
|
+
const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
|
|
3779
|
+
if (branchCount === 0) {
|
|
3780
|
+
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
|
|
3781
|
+
}
|
|
3782
|
+
if (jumpOffset) {
|
|
3783
|
+
const value = char - jumpOffset;
|
|
3784
|
+
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
|
|
3785
|
+
}
|
|
3786
|
+
let lo = nodeIdx;
|
|
3787
|
+
let hi = lo + branchCount - 1;
|
|
3788
|
+
while (lo <= hi) {
|
|
3789
|
+
const mid = lo + hi >>> 1;
|
|
3790
|
+
const midVal = decodeTree[mid];
|
|
3791
|
+
if (midVal < char) {
|
|
3792
|
+
lo = mid + 1;
|
|
3793
|
+
} else if (midVal > char) {
|
|
3794
|
+
hi = mid - 1;
|
|
3795
|
+
} else {
|
|
3796
|
+
return decodeTree[mid + branchCount];
|
|
3797
|
+
}
|
|
3798
|
+
}
|
|
3799
|
+
return -1;
|
|
3800
|
+
}
|
|
3801
|
+
var htmlDecoder = getDecoder(decode_data_html_default);
|
|
3802
|
+
var xmlDecoder = getDecoder(decode_data_xml_default);
|
|
3803
|
+
|
|
3804
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
|
|
3805
|
+
function restoreDiff(arr) {
|
|
3806
|
+
for (let i = 1; i < arr.length; i++) {
|
|
3807
|
+
arr[i][0] += arr[i - 1][0] + 1;
|
|
3808
|
+
}
|
|
3809
|
+
return arr;
|
|
3810
|
+
}
|
|
3811
|
+
var encode_html_default = new Map(/* @__PURE__ */ restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]]));
|
|
3812
|
+
|
|
3813
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
|
|
3814
|
+
var xmlCodeMap = /* @__PURE__ */ new Map([
|
|
3815
|
+
[34, """],
|
|
3816
|
+
[38, "&"],
|
|
3817
|
+
[39, "'"],
|
|
3818
|
+
[60, "<"],
|
|
3819
|
+
[62, ">"]
|
|
3820
|
+
]);
|
|
3821
|
+
var getCodePoint = (
|
|
3822
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
3823
|
+
String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
|
|
3824
|
+
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
3825
|
+
(c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
|
|
3826
|
+
)
|
|
3827
|
+
);
|
|
3828
|
+
function getEscaper(regex, map) {
|
|
3829
|
+
return function escape2(data) {
|
|
3830
|
+
let match;
|
|
3831
|
+
let lastIdx = 0;
|
|
3832
|
+
let result = "";
|
|
3833
|
+
while (match = regex.exec(data)) {
|
|
3834
|
+
if (lastIdx !== match.index) {
|
|
3835
|
+
result += data.substring(lastIdx, match.index);
|
|
3836
|
+
}
|
|
3837
|
+
result += map.get(match[0].charCodeAt(0));
|
|
3838
|
+
lastIdx = match.index + 1;
|
|
3839
|
+
}
|
|
3840
|
+
return result + data.substring(lastIdx);
|
|
3841
|
+
};
|
|
3842
|
+
}
|
|
3843
|
+
var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
3844
|
+
var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3845
|
+
[34, """],
|
|
3846
|
+
[38, "&"],
|
|
3847
|
+
[160, " "]
|
|
3848
|
+
]));
|
|
3849
|
+
var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3850
|
+
[38, "&"],
|
|
3851
|
+
[60, "<"],
|
|
3852
|
+
[62, ">"],
|
|
3853
|
+
[160, " "]
|
|
3854
|
+
]));
|
|
3855
|
+
|
|
3856
|
+
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
|
|
3857
|
+
var EntityLevel;
|
|
3858
|
+
(function(EntityLevel2) {
|
|
3859
|
+
EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
|
|
3860
|
+
EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
|
|
3861
|
+
})(EntityLevel || (EntityLevel = {}));
|
|
3862
|
+
var EncodingMode;
|
|
3863
|
+
(function(EncodingMode2) {
|
|
3864
|
+
EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
|
|
3865
|
+
EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
|
|
3866
|
+
EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
|
|
3867
|
+
EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
|
|
3868
|
+
EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
|
|
3869
|
+
})(EncodingMode || (EncodingMode = {}));
|
|
3870
|
+
|
|
3871
|
+
// node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
|
|
3872
|
+
var elementNames = new Map([
|
|
3873
|
+
"altGlyph",
|
|
3874
|
+
"altGlyphDef",
|
|
3875
|
+
"altGlyphItem",
|
|
3876
|
+
"animateColor",
|
|
3877
|
+
"animateMotion",
|
|
3878
|
+
"animateTransform",
|
|
3879
|
+
"clipPath",
|
|
3880
|
+
"feBlend",
|
|
3881
|
+
"feColorMatrix",
|
|
3882
|
+
"feComponentTransfer",
|
|
3883
|
+
"feComposite",
|
|
3884
|
+
"feConvolveMatrix",
|
|
3885
|
+
"feDiffuseLighting",
|
|
3886
|
+
"feDisplacementMap",
|
|
3887
|
+
"feDistantLight",
|
|
3888
|
+
"feDropShadow",
|
|
3889
|
+
"feFlood",
|
|
3890
|
+
"feFuncA",
|
|
3891
|
+
"feFuncB",
|
|
3892
|
+
"feFuncG",
|
|
3893
|
+
"feFuncR",
|
|
3894
|
+
"feGaussianBlur",
|
|
3895
|
+
"feImage",
|
|
3896
|
+
"feMerge",
|
|
3897
|
+
"feMergeNode",
|
|
3898
|
+
"feMorphology",
|
|
3899
|
+
"feOffset",
|
|
3900
|
+
"fePointLight",
|
|
3901
|
+
"feSpecularLighting",
|
|
3902
|
+
"feSpotLight",
|
|
3903
|
+
"feTile",
|
|
3904
|
+
"feTurbulence",
|
|
3905
|
+
"foreignObject",
|
|
3906
|
+
"glyphRef",
|
|
3907
|
+
"linearGradient",
|
|
3908
|
+
"radialGradient",
|
|
3909
|
+
"textPath"
|
|
3910
|
+
].map((val) => [val.toLowerCase(), val]));
|
|
3911
|
+
var attributeNames = new Map([
|
|
3912
|
+
"definitionURL",
|
|
3913
|
+
"attributeName",
|
|
3914
|
+
"attributeType",
|
|
3915
|
+
"baseFrequency",
|
|
3916
|
+
"baseProfile",
|
|
3917
|
+
"calcMode",
|
|
3918
|
+
"clipPathUnits",
|
|
3919
|
+
"diffuseConstant",
|
|
3920
|
+
"edgeMode",
|
|
3921
|
+
"filterUnits",
|
|
3922
|
+
"glyphRef",
|
|
3923
|
+
"gradientTransform",
|
|
3924
|
+
"gradientUnits",
|
|
3925
|
+
"kernelMatrix",
|
|
3926
|
+
"kernelUnitLength",
|
|
3927
|
+
"keyPoints",
|
|
3928
|
+
"keySplines",
|
|
3929
|
+
"keyTimes",
|
|
3930
|
+
"lengthAdjust",
|
|
3931
|
+
"limitingConeAngle",
|
|
3932
|
+
"markerHeight",
|
|
3933
|
+
"markerUnits",
|
|
3934
|
+
"markerWidth",
|
|
3935
|
+
"maskContentUnits",
|
|
3936
|
+
"maskUnits",
|
|
3937
|
+
"numOctaves",
|
|
3938
|
+
"pathLength",
|
|
3939
|
+
"patternContentUnits",
|
|
3940
|
+
"patternTransform",
|
|
3941
|
+
"patternUnits",
|
|
3942
|
+
"pointsAtX",
|
|
3943
|
+
"pointsAtY",
|
|
3944
|
+
"pointsAtZ",
|
|
3945
|
+
"preserveAlpha",
|
|
3946
|
+
"preserveAspectRatio",
|
|
3947
|
+
"primitiveUnits",
|
|
3948
|
+
"refX",
|
|
3949
|
+
"refY",
|
|
3950
|
+
"repeatCount",
|
|
3951
|
+
"repeatDur",
|
|
3952
|
+
"requiredExtensions",
|
|
3953
|
+
"requiredFeatures",
|
|
3954
|
+
"specularConstant",
|
|
3955
|
+
"specularExponent",
|
|
3956
|
+
"spreadMethod",
|
|
3957
|
+
"startOffset",
|
|
3958
|
+
"stdDeviation",
|
|
3959
|
+
"stitchTiles",
|
|
3960
|
+
"surfaceScale",
|
|
3961
|
+
"systemLanguage",
|
|
3962
|
+
"tableValues",
|
|
3963
|
+
"targetX",
|
|
3964
|
+
"targetY",
|
|
3965
|
+
"textLength",
|
|
3966
|
+
"viewBox",
|
|
3967
|
+
"viewTarget",
|
|
3968
|
+
"xChannelSelector",
|
|
3969
|
+
"yChannelSelector",
|
|
3970
|
+
"zoomAndPan"
|
|
3971
|
+
].map((val) => [val.toLowerCase(), val]));
|
|
3972
|
+
|
|
3973
|
+
// node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
|
|
3974
|
+
var DocumentPosition;
|
|
3975
|
+
(function(DocumentPosition2) {
|
|
3976
|
+
DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
|
|
3977
|
+
DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
|
|
3978
|
+
DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
|
|
3979
|
+
DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
|
|
3980
|
+
DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
|
|
3981
|
+
})(DocumentPosition || (DocumentPosition = {}));
|
|
3982
|
+
|
|
3983
|
+
// node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
|
|
3984
|
+
function parseDocument(data, options) {
|
|
3985
|
+
const handler = new DomHandler(void 0, options);
|
|
3986
|
+
new Parser(handler, options).end(data);
|
|
3987
|
+
return handler.root;
|
|
3988
|
+
}
|
|
3989
|
+
|
|
3990
|
+
// src/html-parser.ts
|
|
3991
|
+
function decompileHTML(html) {
|
|
3992
|
+
const diagnostics = [];
|
|
3993
|
+
const story = createStory();
|
|
3994
|
+
const doc = parseDocument(html);
|
|
3995
|
+
const twine2Data = findElement(doc, "tw-storydata");
|
|
3996
|
+
if (twine2Data) {
|
|
3997
|
+
decompileTwine2(twine2Data, story, diagnostics);
|
|
3998
|
+
return { story, diagnostics };
|
|
3999
|
+
}
|
|
4000
|
+
const twine1Data = findElementByIdPattern(doc, /^store(?:-a|A)rea$/);
|
|
4001
|
+
if (twine1Data) {
|
|
4002
|
+
decompileTwine1(twine1Data, story, diagnostics);
|
|
4003
|
+
return { story, diagnostics };
|
|
4004
|
+
}
|
|
4005
|
+
diagnostics.push({ level: "error", message: "Malformed HTML source; story data not found." });
|
|
4006
|
+
return { story, diagnostics };
|
|
4007
|
+
}
|
|
4008
|
+
function decompileTwine2(storyData, story, diagnostics) {
|
|
4009
|
+
let startnode = 0;
|
|
4010
|
+
const attrs = storyData.attribs ?? {};
|
|
4011
|
+
if (attrs["name"]) story.name = attrs["name"];
|
|
4012
|
+
if (attrs["startnode"]) {
|
|
4013
|
+
const parsed = parseInt(attrs["startnode"], 10);
|
|
4014
|
+
if (Number.isNaN(parsed)) {
|
|
4015
|
+
diagnostics.push({
|
|
4016
|
+
level: "warning",
|
|
4017
|
+
message: `Cannot parse "tw-storydata" content attribute "startnode" as an integer; value "${attrs["startnode"]}".`
|
|
4018
|
+
});
|
|
4019
|
+
} else {
|
|
4020
|
+
startnode = parsed;
|
|
4021
|
+
}
|
|
4022
|
+
}
|
|
4023
|
+
if (attrs["ifid"]) story.ifid = attrs["ifid"].toUpperCase();
|
|
4024
|
+
if (attrs["zoom"]) {
|
|
4025
|
+
const parsed = parseFloat(attrs["zoom"]);
|
|
4026
|
+
if (Number.isNaN(parsed)) {
|
|
4027
|
+
diagnostics.push({
|
|
4028
|
+
level: "warning",
|
|
4029
|
+
message: `Cannot parse "tw-storydata" content attribute "zoom" as a float; value "${attrs["zoom"]}".`
|
|
4030
|
+
});
|
|
4031
|
+
} else {
|
|
4032
|
+
story.twine2.zoom = parsed;
|
|
4033
|
+
}
|
|
4034
|
+
}
|
|
4035
|
+
if (attrs["format"]) story.twine2.format = attrs["format"];
|
|
4036
|
+
if (attrs["format-version"]) story.twine2.formatVersion = attrs["format-version"];
|
|
4037
|
+
if (attrs["options"]) {
|
|
4038
|
+
for (const opt of attrs["options"].split(/\s+/).filter((s) => s.length > 0)) {
|
|
4039
|
+
story.twine2.options.set(opt, true);
|
|
4040
|
+
}
|
|
4041
|
+
}
|
|
4042
|
+
for (const node of storyData.children ?? []) {
|
|
4043
|
+
if (node.type !== "tag" && node.type !== "style" && node.type !== "script") continue;
|
|
4044
|
+
switch (node.name) {
|
|
4045
|
+
case "style":
|
|
4046
|
+
case "script": {
|
|
4047
|
+
const text = getTextContent(node).trim();
|
|
4048
|
+
if (text.length === 0) continue;
|
|
4049
|
+
const name = node.name === "style" ? "Story Stylesheet" : "Story JavaScript";
|
|
4050
|
+
const tags = node.name === "style" ? ["stylesheet"] : ["script"];
|
|
4051
|
+
storyAdd(story, { name, tags, text }, diagnostics);
|
|
4052
|
+
break;
|
|
4053
|
+
}
|
|
4054
|
+
case "tw-tag": {
|
|
4055
|
+
const tagAttrs = node.attribs ?? {};
|
|
4056
|
+
const tagName = tagAttrs["name"] ?? "";
|
|
4057
|
+
const tagColor = tagAttrs["color"] ?? "";
|
|
4058
|
+
if (tagName) story.twine2.tagColors.set(tagName, tagColor);
|
|
4059
|
+
break;
|
|
4060
|
+
}
|
|
4061
|
+
case "tw-passagedata": {
|
|
4062
|
+
let pid = 0;
|
|
4063
|
+
const pAttrs = node.attribs ?? {};
|
|
4064
|
+
const name = pAttrs["name"] ?? "";
|
|
4065
|
+
const tags = pAttrs["tags"] ? pAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
|
|
4066
|
+
const metadata = {};
|
|
4067
|
+
if (pAttrs["pid"]) {
|
|
4068
|
+
const parsed = parseInt(pAttrs["pid"], 10);
|
|
4069
|
+
if (Number.isNaN(parsed)) {
|
|
4070
|
+
diagnostics.push({
|
|
4071
|
+
level: "warning",
|
|
4072
|
+
message: `Cannot parse "tw-passagedata" content attribute "pid" as an integer; value "${pAttrs["pid"]}".`
|
|
4073
|
+
});
|
|
4074
|
+
} else {
|
|
4075
|
+
pid = parsed;
|
|
4076
|
+
}
|
|
4077
|
+
}
|
|
4078
|
+
if (pAttrs["position"]) metadata.position = pAttrs["position"];
|
|
4079
|
+
if (pAttrs["size"]) metadata.size = pAttrs["size"];
|
|
4080
|
+
if (pid === startnode && pid !== 0) {
|
|
4081
|
+
story.twine2.start = name;
|
|
4082
|
+
}
|
|
4083
|
+
const text = getTextContent(node).trim();
|
|
4084
|
+
const passage = { name, tags, text };
|
|
4085
|
+
if (metadata.position || metadata.size) {
|
|
4086
|
+
passage.metadata = metadata;
|
|
4087
|
+
}
|
|
4088
|
+
storyAdd(story, passage, diagnostics);
|
|
4089
|
+
break;
|
|
4090
|
+
}
|
|
4091
|
+
}
|
|
4092
|
+
}
|
|
4093
|
+
storyPrepend(story, { name: "StoryData", tags: [], text: marshalStoryData(story) }, diagnostics);
|
|
4094
|
+
}
|
|
4095
|
+
function decompileTwine1(storeArea, story, diagnostics) {
|
|
4096
|
+
for (const node of storeArea.children ?? []) {
|
|
4097
|
+
if (node.type !== "tag" || node.name !== "div") continue;
|
|
4098
|
+
const nodeAttrs = node.attribs ?? {};
|
|
4099
|
+
if (!("tiddler" in nodeAttrs)) continue;
|
|
4100
|
+
const name = nodeAttrs["tiddler"] ?? "";
|
|
4101
|
+
const tags = nodeAttrs["tags"] ? nodeAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
|
|
4102
|
+
const metadata = {};
|
|
4103
|
+
if (nodeAttrs["twine-position"]) metadata.position = nodeAttrs["twine-position"];
|
|
4104
|
+
const rawContent = getTextContent(node);
|
|
4105
|
+
const text = tiddlerUnescape(rawContent).trim();
|
|
4106
|
+
const passage = { name, tags, text };
|
|
4107
|
+
if (metadata.position) {
|
|
4108
|
+
passage.metadata = metadata;
|
|
4109
|
+
}
|
|
4110
|
+
storyAdd(story, passage, diagnostics);
|
|
4111
|
+
}
|
|
4112
|
+
}
|
|
4113
|
+
function findElement(node, tagName) {
|
|
4114
|
+
if (node.type === "tag" && node.name === tagName) return node;
|
|
4115
|
+
for (const child of node.children ?? []) {
|
|
4116
|
+
const found = findElement(child, tagName);
|
|
4117
|
+
if (found) return found;
|
|
4118
|
+
}
|
|
4119
|
+
return void 0;
|
|
4120
|
+
}
|
|
4121
|
+
function findElementByIdPattern(node, idPattern) {
|
|
4122
|
+
if (node.type === "tag" && node.attribs?.["id"] && idPattern.test(node.attribs["id"])) return node;
|
|
4123
|
+
for (const child of node.children ?? []) {
|
|
4124
|
+
const found = findElementByIdPattern(child, idPattern);
|
|
4125
|
+
if (found) return found;
|
|
4126
|
+
}
|
|
4127
|
+
return void 0;
|
|
4128
|
+
}
|
|
4129
|
+
function getTextContent(el) {
|
|
4130
|
+
let text = "";
|
|
4131
|
+
for (const child of el.children ?? []) {
|
|
4132
|
+
if (child.type === "text" && child.data) {
|
|
4133
|
+
text += child.data;
|
|
4134
|
+
}
|
|
4135
|
+
}
|
|
4136
|
+
return text;
|
|
4137
|
+
}
|
|
4138
|
+
|
|
1331
4139
|
// src/loader.ts
|
|
1332
4140
|
function loadSources(story, filenames, opts, diagnostics, processedFiles) {
|
|
1333
4141
|
for (const filename of filenames) {
|
|
@@ -1346,6 +4154,10 @@ function loadSources(story, filenames, opts, diagnostics, processedFiles) {
|
|
|
1346
4154
|
case "twee2":
|
|
1347
4155
|
loadTwee(story, filename, { ...opts, twee2Compat: true }, diagnostics);
|
|
1348
4156
|
break;
|
|
4157
|
+
case "htm":
|
|
4158
|
+
case "html":
|
|
4159
|
+
loadHTML(story, filename, diagnostics);
|
|
4160
|
+
break;
|
|
1349
4161
|
case "css":
|
|
1350
4162
|
loadTagged(story, "stylesheet", filename, diagnostics);
|
|
1351
4163
|
break;
|
|
@@ -1468,6 +4280,11 @@ function parseFontFile(filename) {
|
|
|
1468
4280
|
diagnostics: []
|
|
1469
4281
|
};
|
|
1470
4282
|
}
|
|
4283
|
+
function parseHTMLFile(filename) {
|
|
4284
|
+
const source = readUTF8(filename);
|
|
4285
|
+
const result = decompileHTML(source);
|
|
4286
|
+
return { passages: result.story.passages, diagnostics: [...result.diagnostics] };
|
|
4287
|
+
}
|
|
1471
4288
|
function parseFile(filename, opts) {
|
|
1472
4289
|
const ext = normalizedFileExt(filename);
|
|
1473
4290
|
switch (ext) {
|
|
@@ -1477,6 +4294,9 @@ function parseFile(filename, opts) {
|
|
|
1477
4294
|
case "tw2":
|
|
1478
4295
|
case "twee2":
|
|
1479
4296
|
return parseTweeFile(filename, { ...opts, twee2Compat: true });
|
|
4297
|
+
case "htm":
|
|
4298
|
+
case "html":
|
|
4299
|
+
return parseHTMLFile(filename);
|
|
1480
4300
|
case "css":
|
|
1481
4301
|
return parseTaggedFile("stylesheet", filename);
|
|
1482
4302
|
case "js":
|
|
@@ -1516,6 +4336,13 @@ function parseFile(filename, opts) {
|
|
|
1516
4336
|
return void 0;
|
|
1517
4337
|
}
|
|
1518
4338
|
}
|
|
4339
|
+
function loadHTML(story, filename, diagnostics) {
|
|
4340
|
+
const result = parseHTMLFile(filename);
|
|
4341
|
+
diagnostics.push(...result.diagnostics);
|
|
4342
|
+
for (const p of result.passages) {
|
|
4343
|
+
storyAdd(story, p, diagnostics);
|
|
4344
|
+
}
|
|
4345
|
+
}
|
|
1519
4346
|
function loadTwee(story, filename, opts, diagnostics) {
|
|
1520
4347
|
const result = parseTweeFile(filename, opts);
|
|
1521
4348
|
diagnostics.push(...result.diagnostics);
|
|
@@ -2654,6 +5481,7 @@ export {
|
|
|
2654
5481
|
compile,
|
|
2655
5482
|
compileIncremental,
|
|
2656
5483
|
compileToFile,
|
|
5484
|
+
decompileHTML,
|
|
2657
5485
|
discoverCachedFormats,
|
|
2658
5486
|
discoverFormats,
|
|
2659
5487
|
fetchAndCacheFormat,
|