@rohal12/twee-ts 1.13.1 → 1.14.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 +851 -1083
- package/dist/bin/twee-ts.js.map +1 -1
- package/dist/{chunk-EQAUFATA.js → chunk-Z2CNKPVJ.js} +853 -1085
- package/dist/chunk-Z2CNKPVJ.js.map +1 -0
- package/dist/index.cjs +851 -1083
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +851 -1083
- package/dist/index.js.map +1 -1
- package/dist/plugins/rollup.js +1 -1
- package/dist/plugins/vite.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-EQAUFATA.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1375,8 +1375,7 @@ function parseTwee(source, options = {}) {
|
|
|
1375
1375
|
return { passages, diagnostics };
|
|
1376
1376
|
}
|
|
1377
1377
|
|
|
1378
|
-
// node_modules/.pnpm/entities@
|
|
1379
|
-
var _a;
|
|
1378
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js
|
|
1380
1379
|
var decodeMap = /* @__PURE__ */ new Map([
|
|
1381
1380
|
[0, 65533],
|
|
1382
1381
|
// C1 Unicode control character reference replacements
|
|
@@ -1408,47 +1407,16 @@ var decodeMap = /* @__PURE__ */ new Map([
|
|
|
1408
1407
|
[158, 382],
|
|
1409
1408
|
[159, 376]
|
|
1410
1409
|
]);
|
|
1411
|
-
var fromCodePoint = (
|
|
1412
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
|
|
1413
|
-
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
|
|
1414
|
-
let output = "";
|
|
1415
|
-
if (codePoint > 65535) {
|
|
1416
|
-
codePoint -= 65536;
|
|
1417
|
-
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
1418
|
-
codePoint = 56320 | codePoint & 1023;
|
|
1419
|
-
}
|
|
1420
|
-
output += String.fromCharCode(codePoint);
|
|
1421
|
-
return output;
|
|
1422
|
-
})
|
|
1423
|
-
);
|
|
1424
1410
|
function replaceCodePoint(codePoint) {
|
|
1425
|
-
var _a3;
|
|
1426
1411
|
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
1427
1412
|
return 65533;
|
|
1428
1413
|
}
|
|
1429
|
-
return
|
|
1414
|
+
return decodeMap.get(codePoint) ?? codePoint;
|
|
1430
1415
|
}
|
|
1431
1416
|
|
|
1432
|
-
// node_modules/.pnpm/entities@
|
|
1417
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js
|
|
1433
1418
|
function decodeBase64(input) {
|
|
1434
|
-
const binary = (
|
|
1435
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1436
|
-
typeof atob === "function" ? (
|
|
1437
|
-
// Browser (and Node >=16)
|
|
1438
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1439
|
-
atob(input)
|
|
1440
|
-
) : (
|
|
1441
|
-
// Older Node versions (<16)
|
|
1442
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1443
|
-
typeof Buffer.from === "function" ? (
|
|
1444
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1445
|
-
Buffer.from(input, "base64").toString("binary")
|
|
1446
|
-
) : (
|
|
1447
|
-
// eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
|
|
1448
|
-
new Buffer(input, "base64").toString("binary")
|
|
1449
|
-
)
|
|
1450
|
-
)
|
|
1451
|
-
);
|
|
1419
|
+
const binary = atob(input);
|
|
1452
1420
|
const evenLength = binary.length & ~1;
|
|
1453
1421
|
const out = new Uint16Array(evenLength / 2);
|
|
1454
1422
|
for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
|
|
@@ -1459,36 +1427,36 @@ function decodeBase64(input) {
|
|
|
1459
1427
|
return out;
|
|
1460
1428
|
}
|
|
1461
1429
|
|
|
1462
|
-
// node_modules/.pnpm/entities@
|
|
1430
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js
|
|
1463
1431
|
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");
|
|
1464
1432
|
|
|
1465
|
-
// node_modules/.pnpm/entities@
|
|
1433
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-xml.js
|
|
1466
1434
|
var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
|
|
1467
1435
|
|
|
1468
|
-
// node_modules/.pnpm/entities@
|
|
1436
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js
|
|
1469
1437
|
var BinTrieFlags;
|
|
1470
|
-
(function(
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1438
|
+
(function(BinTrieFlags2) {
|
|
1439
|
+
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
1440
|
+
BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
|
|
1441
|
+
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
|
|
1442
|
+
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
1475
1443
|
})(BinTrieFlags || (BinTrieFlags = {}));
|
|
1476
1444
|
|
|
1477
|
-
// node_modules/.pnpm/entities@
|
|
1445
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js
|
|
1478
1446
|
var CharCodes;
|
|
1479
|
-
(function(
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1447
|
+
(function(CharCodes3) {
|
|
1448
|
+
CharCodes3[CharCodes3["NUM"] = 35] = "NUM";
|
|
1449
|
+
CharCodes3[CharCodes3["SEMI"] = 59] = "SEMI";
|
|
1450
|
+
CharCodes3[CharCodes3["EQUALS"] = 61] = "EQUALS";
|
|
1451
|
+
CharCodes3[CharCodes3["ZERO"] = 48] = "ZERO";
|
|
1452
|
+
CharCodes3[CharCodes3["NINE"] = 57] = "NINE";
|
|
1453
|
+
CharCodes3[CharCodes3["LOWER_A"] = 97] = "LOWER_A";
|
|
1454
|
+
CharCodes3[CharCodes3["LOWER_F"] = 102] = "LOWER_F";
|
|
1455
|
+
CharCodes3[CharCodes3["LOWER_X"] = 120] = "LOWER_X";
|
|
1456
|
+
CharCodes3[CharCodes3["LOWER_Z"] = 122] = "LOWER_Z";
|
|
1457
|
+
CharCodes3[CharCodes3["UPPER_A"] = 65] = "UPPER_A";
|
|
1458
|
+
CharCodes3[CharCodes3["UPPER_F"] = 70] = "UPPER_F";
|
|
1459
|
+
CharCodes3[CharCodes3["UPPER_Z"] = 90] = "UPPER_Z";
|
|
1492
1460
|
})(CharCodes || (CharCodes = {}));
|
|
1493
1461
|
var TO_LOWER_BIT = 32;
|
|
1494
1462
|
function isNumber(code) {
|
|
@@ -1504,33 +1472,51 @@ function isEntityInAttributeInvalidEnd(code) {
|
|
|
1504
1472
|
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
1505
1473
|
}
|
|
1506
1474
|
var EntityDecoderState;
|
|
1507
|
-
(function(
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1475
|
+
(function(EntityDecoderState2) {
|
|
1476
|
+
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
|
1477
|
+
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
|
1478
|
+
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
|
1479
|
+
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
|
1480
|
+
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
|
1513
1481
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
1514
1482
|
var DecodingMode;
|
|
1515
|
-
(function(
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1483
|
+
(function(DecodingMode2) {
|
|
1484
|
+
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
|
1485
|
+
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
|
1486
|
+
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
|
1519
1487
|
})(DecodingMode || (DecodingMode = {}));
|
|
1520
1488
|
var EntityDecoder = class {
|
|
1489
|
+
decodeTree;
|
|
1490
|
+
emitCodePoint;
|
|
1491
|
+
errors;
|
|
1521
1492
|
constructor(decodeTree, emitCodePoint, errors) {
|
|
1522
1493
|
this.decodeTree = decodeTree;
|
|
1523
1494
|
this.emitCodePoint = emitCodePoint;
|
|
1524
1495
|
this.errors = errors;
|
|
1525
|
-
this.state = EntityDecoderState.EntityStart;
|
|
1526
|
-
this.consumed = 1;
|
|
1527
|
-
this.result = 0;
|
|
1528
|
-
this.treeIndex = 0;
|
|
1529
|
-
this.excess = 1;
|
|
1530
|
-
this.decodeMode = DecodingMode.Strict;
|
|
1531
|
-
this.runConsumed = 0;
|
|
1532
1496
|
}
|
|
1533
|
-
/**
|
|
1497
|
+
/** The current state of the decoder. */
|
|
1498
|
+
state = EntityDecoderState.EntityStart;
|
|
1499
|
+
/** Characters that were consumed while parsing an entity. */
|
|
1500
|
+
consumed = 1;
|
|
1501
|
+
/**
|
|
1502
|
+
* The result of the entity.
|
|
1503
|
+
*
|
|
1504
|
+
* Either the result index of a numeric entity, or the codepoint of a
|
|
1505
|
+
* numeric entity.
|
|
1506
|
+
*/
|
|
1507
|
+
result = 0;
|
|
1508
|
+
/** The current index in the decode tree. */
|
|
1509
|
+
treeIndex = 0;
|
|
1510
|
+
/** The number of characters that were consumed in excess. */
|
|
1511
|
+
excess = 1;
|
|
1512
|
+
/** The mode in which the decoder is operating. */
|
|
1513
|
+
decodeMode = DecodingMode.Strict;
|
|
1514
|
+
/** The number of characters that have been consumed in the current run. */
|
|
1515
|
+
runConsumed = 0;
|
|
1516
|
+
/**
|
|
1517
|
+
* Resets the instance to make it reusable.
|
|
1518
|
+
* @param decodeMode Entity decoding mode to use.
|
|
1519
|
+
*/
|
|
1534
1520
|
startEntity(decodeMode) {
|
|
1535
1521
|
this.decodeMode = decodeMode;
|
|
1536
1522
|
this.state = EntityDecoderState.EntityStart;
|
|
@@ -1546,7 +1532,6 @@ var EntityDecoder = class {
|
|
|
1546
1532
|
*
|
|
1547
1533
|
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
1548
1534
|
* entity is incomplete, and resume when the next string is written.
|
|
1549
|
-
*
|
|
1550
1535
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1551
1536
|
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
1552
1537
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1580,7 +1565,6 @@ var EntityDecoder = class {
|
|
|
1580
1565
|
* Switches between the numeric decimal and hexadecimal states.
|
|
1581
1566
|
*
|
|
1582
1567
|
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
1583
|
-
*
|
|
1584
1568
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1585
1569
|
* @param offset The current offset.
|
|
1586
1570
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1601,7 +1585,6 @@ var EntityDecoder = class {
|
|
|
1601
1585
|
* Parses a hexadecimal numeric entity.
|
|
1602
1586
|
*
|
|
1603
1587
|
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
1604
|
-
*
|
|
1605
1588
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1606
1589
|
* @param offset The current offset.
|
|
1607
1590
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1624,7 +1607,6 @@ var EntityDecoder = class {
|
|
|
1624
1607
|
* Parses a decimal numeric entity.
|
|
1625
1608
|
*
|
|
1626
1609
|
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
1627
|
-
*
|
|
1628
1610
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1629
1611
|
* @param offset The current offset.
|
|
1630
1612
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1647,7 +1629,6 @@ var EntityDecoder = class {
|
|
|
1647
1629
|
*
|
|
1648
1630
|
* Implements the logic from the `Hexademical character reference start
|
|
1649
1631
|
* state` and `Numeric character reference end state` in the HTML spec.
|
|
1650
|
-
*
|
|
1651
1632
|
* @param lastCp The last code point of the entity. Used to see if the
|
|
1652
1633
|
* entity was terminated with a semicolon.
|
|
1653
1634
|
* @param expectedLength The minimum number of characters that should be
|
|
@@ -1656,9 +1637,8 @@ var EntityDecoder = class {
|
|
|
1656
1637
|
* @returns The number of characters that were consumed.
|
|
1657
1638
|
*/
|
|
1658
1639
|
emitNumericEntity(lastCp, expectedLength) {
|
|
1659
|
-
var _a3;
|
|
1660
1640
|
if (this.consumed <= expectedLength) {
|
|
1661
|
-
|
|
1641
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1662
1642
|
return 0;
|
|
1663
1643
|
}
|
|
1664
1644
|
if (lastCp === CharCodes.SEMI) {
|
|
@@ -1679,7 +1659,6 @@ var EntityDecoder = class {
|
|
|
1679
1659
|
* Parses a named entity.
|
|
1680
1660
|
*
|
|
1681
1661
|
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
1682
|
-
*
|
|
1683
1662
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1684
1663
|
* @param offset The current offset.
|
|
1685
1664
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1752,24 +1731,20 @@ var EntityDecoder = class {
|
|
|
1752
1731
|
}
|
|
1753
1732
|
/**
|
|
1754
1733
|
* Emit a named entity that was not terminated with a semicolon.
|
|
1755
|
-
*
|
|
1756
1734
|
* @returns The number of characters consumed.
|
|
1757
1735
|
*/
|
|
1758
1736
|
emitNotTerminatedNamedEntity() {
|
|
1759
|
-
var _a3;
|
|
1760
1737
|
const { result, decodeTree } = this;
|
|
1761
1738
|
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1762
1739
|
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
1763
|
-
|
|
1740
|
+
this.errors?.missingSemicolonAfterCharacterReference();
|
|
1764
1741
|
return this.consumed;
|
|
1765
1742
|
}
|
|
1766
1743
|
/**
|
|
1767
1744
|
* Emit a named entity.
|
|
1768
|
-
*
|
|
1769
1745
|
* @param result The index of the entity in the decode tree.
|
|
1770
1746
|
* @param valueLength The number of bytes in the entity.
|
|
1771
1747
|
* @param consumed The number of characters consumed.
|
|
1772
|
-
*
|
|
1773
1748
|
* @returns The number of characters consumed.
|
|
1774
1749
|
*/
|
|
1775
1750
|
emitNamedEntityData(result, valueLength, consumed) {
|
|
@@ -1784,11 +1759,9 @@ var EntityDecoder = class {
|
|
|
1784
1759
|
* Signal to the parser that the end of the input was reached.
|
|
1785
1760
|
*
|
|
1786
1761
|
* Remaining data will be emitted and relevant errors will be produced.
|
|
1787
|
-
*
|
|
1788
1762
|
* @returns The number of characters consumed.
|
|
1789
1763
|
*/
|
|
1790
1764
|
end() {
|
|
1791
|
-
var _a3;
|
|
1792
1765
|
switch (this.state) {
|
|
1793
1766
|
case EntityDecoderState.NamedEntity: {
|
|
1794
1767
|
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
@@ -1801,7 +1774,7 @@ var EntityDecoder = class {
|
|
|
1801
1774
|
return this.emitNumericEntity(0, 3);
|
|
1802
1775
|
}
|
|
1803
1776
|
case EntityDecoderState.NumericStart: {
|
|
1804
|
-
|
|
1777
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1805
1778
|
return 0;
|
|
1806
1779
|
}
|
|
1807
1780
|
case EntityDecoderState.EntityStart: {
|
|
@@ -1839,36 +1812,36 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
|
|
|
1839
1812
|
return -1;
|
|
1840
1813
|
}
|
|
1841
1814
|
|
|
1842
|
-
// node_modules/.pnpm/htmlparser2@
|
|
1815
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Tokenizer.js
|
|
1843
1816
|
var CharCodes2;
|
|
1844
|
-
(function(
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1817
|
+
(function(CharCodes3) {
|
|
1818
|
+
CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
|
|
1819
|
+
CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
|
|
1820
|
+
CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
|
|
1821
|
+
CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
|
|
1822
|
+
CharCodes3[CharCodes3["Space"] = 32] = "Space";
|
|
1823
|
+
CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
|
|
1824
|
+
CharCodes3[CharCodes3["Number"] = 35] = "Number";
|
|
1825
|
+
CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
|
|
1826
|
+
CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
|
|
1827
|
+
CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
|
|
1828
|
+
CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
|
|
1829
|
+
CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
|
|
1830
|
+
CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
|
|
1831
|
+
CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
|
|
1832
|
+
CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
|
|
1833
|
+
CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
|
|
1834
|
+
CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
|
|
1835
|
+
CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
|
|
1836
|
+
CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
|
|
1837
|
+
CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
|
|
1838
|
+
CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
|
|
1839
|
+
CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
|
|
1840
|
+
CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
|
|
1841
|
+
CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
|
|
1842
|
+
CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
|
|
1843
|
+
CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
|
|
1844
|
+
CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
1872
1845
|
})(CharCodes2 || (CharCodes2 = {}));
|
|
1873
1846
|
var State;
|
|
1874
1847
|
(function(State2) {
|
|
@@ -1891,12 +1864,12 @@ var State;
|
|
|
1891
1864
|
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
1892
1865
|
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
1893
1866
|
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
1894
|
-
State2[State2["
|
|
1895
|
-
State2[State2["
|
|
1896
|
-
State2[State2["
|
|
1897
|
-
State2[State2["
|
|
1898
|
-
State2[State2["
|
|
1899
|
-
State2[State2["
|
|
1867
|
+
State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
|
|
1868
|
+
State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
|
|
1869
|
+
State2[State2["InCommentLike"] = 22] = "InCommentLike";
|
|
1870
|
+
State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
|
|
1871
|
+
State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
|
|
1872
|
+
State2[State2["InPlainText"] = 25] = "InPlainText";
|
|
1900
1873
|
State2[State2["InEntity"] = 26] = "InEntity";
|
|
1901
1874
|
})(State || (State = {}));
|
|
1902
1875
|
function isWhitespace(c) {
|
|
@@ -1916,12 +1889,56 @@ var QuoteType;
|
|
|
1916
1889
|
QuoteType2[QuoteType2["Double"] = 3] = "Double";
|
|
1917
1890
|
})(QuoteType || (QuoteType = {}));
|
|
1918
1891
|
var Sequences = {
|
|
1892
|
+
Empty: new Uint8Array(0),
|
|
1919
1893
|
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
1920
1894
|
// CDATA[
|
|
1921
1895
|
CdataEnd: new Uint8Array([93, 93, 62]),
|
|
1922
1896
|
// ]]>
|
|
1923
|
-
CommentEnd: new Uint8Array([45, 45, 62]),
|
|
1924
|
-
//
|
|
1897
|
+
CommentEnd: new Uint8Array([45, 45, 33, 62]),
|
|
1898
|
+
// `--!>`
|
|
1899
|
+
Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
|
|
1900
|
+
// `doctype`
|
|
1901
|
+
IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
|
|
1902
|
+
// `</iframe`
|
|
1903
|
+
NoembedEnd: new Uint8Array([
|
|
1904
|
+
60,
|
|
1905
|
+
47,
|
|
1906
|
+
110,
|
|
1907
|
+
111,
|
|
1908
|
+
101,
|
|
1909
|
+
109,
|
|
1910
|
+
98,
|
|
1911
|
+
101,
|
|
1912
|
+
100
|
|
1913
|
+
]),
|
|
1914
|
+
// `</noembed`
|
|
1915
|
+
NoframesEnd: new Uint8Array([
|
|
1916
|
+
60,
|
|
1917
|
+
47,
|
|
1918
|
+
110,
|
|
1919
|
+
111,
|
|
1920
|
+
102,
|
|
1921
|
+
114,
|
|
1922
|
+
97,
|
|
1923
|
+
109,
|
|
1924
|
+
101,
|
|
1925
|
+
115
|
|
1926
|
+
]),
|
|
1927
|
+
// `</noframes`
|
|
1928
|
+
Plaintext: new Uint8Array([
|
|
1929
|
+
60,
|
|
1930
|
+
47,
|
|
1931
|
+
112,
|
|
1932
|
+
108,
|
|
1933
|
+
97,
|
|
1934
|
+
105,
|
|
1935
|
+
110,
|
|
1936
|
+
116,
|
|
1937
|
+
101,
|
|
1938
|
+
120,
|
|
1939
|
+
116
|
|
1940
|
+
]),
|
|
1941
|
+
// `</plaintext`
|
|
1925
1942
|
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
1926
1943
|
// `</script`
|
|
1927
1944
|
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
@@ -1944,22 +1961,43 @@ var Sequences = {
|
|
|
1944
1961
|
XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
|
|
1945
1962
|
// `</xmp`
|
|
1946
1963
|
};
|
|
1964
|
+
var specialStartSequences = /* @__PURE__ */ new Map([
|
|
1965
|
+
[Sequences.IframeEnd[2], Sequences.IframeEnd],
|
|
1966
|
+
[Sequences.NoembedEnd[2], Sequences.NoembedEnd],
|
|
1967
|
+
[Sequences.Plaintext[2], Sequences.Plaintext],
|
|
1968
|
+
[Sequences.ScriptEnd[2], Sequences.ScriptEnd],
|
|
1969
|
+
[Sequences.TitleEnd[2], Sequences.TitleEnd],
|
|
1970
|
+
[Sequences.XmpEnd[2], Sequences.XmpEnd]
|
|
1971
|
+
]);
|
|
1947
1972
|
var Tokenizer = class {
|
|
1948
|
-
|
|
1973
|
+
cbs;
|
|
1974
|
+
/** The current state the tokenizer is in. */
|
|
1975
|
+
state = State.Text;
|
|
1976
|
+
/** The read buffer. */
|
|
1977
|
+
buffer = "";
|
|
1978
|
+
/** The beginning of the section that is currently being read. */
|
|
1979
|
+
sectionStart = 0;
|
|
1980
|
+
/** The index within the buffer that we are currently looking at. */
|
|
1981
|
+
index = 0;
|
|
1982
|
+
/** The start of the last entity. */
|
|
1983
|
+
entityStart = 0;
|
|
1984
|
+
/** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
|
|
1985
|
+
baseState = State.Text;
|
|
1986
|
+
/** For special parsing behavior inside of script and style tags. */
|
|
1987
|
+
isSpecial = false;
|
|
1988
|
+
/** Indicates whether the tokenizer has been paused. */
|
|
1989
|
+
running = true;
|
|
1990
|
+
/** The offset of the current buffer. */
|
|
1991
|
+
offset = 0;
|
|
1992
|
+
xmlMode;
|
|
1993
|
+
decodeEntities;
|
|
1994
|
+
recognizeSelfClosing;
|
|
1995
|
+
entityDecoder;
|
|
1996
|
+
constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
|
|
1949
1997
|
this.cbs = cbs;
|
|
1950
|
-
this.state = State.Text;
|
|
1951
|
-
this.buffer = "";
|
|
1952
|
-
this.sectionStart = 0;
|
|
1953
|
-
this.index = 0;
|
|
1954
|
-
this.entityStart = 0;
|
|
1955
|
-
this.baseState = State.Text;
|
|
1956
|
-
this.isSpecial = false;
|
|
1957
|
-
this.running = true;
|
|
1958
|
-
this.offset = 0;
|
|
1959
|
-
this.currentSequence = void 0;
|
|
1960
|
-
this.sequenceIndex = 0;
|
|
1961
1998
|
this.xmlMode = xmlMode;
|
|
1962
1999
|
this.decodeEntities = decodeEntities;
|
|
2000
|
+
this.recognizeSelfClosing = recognizeSelfClosing;
|
|
1963
2001
|
this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
|
|
1964
2002
|
}
|
|
1965
2003
|
reset() {
|
|
@@ -1968,7 +2006,9 @@ var Tokenizer = class {
|
|
|
1968
2006
|
this.sectionStart = 0;
|
|
1969
2007
|
this.index = 0;
|
|
1970
2008
|
this.baseState = State.Text;
|
|
1971
|
-
this.
|
|
2009
|
+
this.isSpecial = false;
|
|
2010
|
+
this.currentSequence = Sequences.Empty;
|
|
2011
|
+
this.sequenceIndex = 0;
|
|
1972
2012
|
this.running = true;
|
|
1973
2013
|
this.offset = 0;
|
|
1974
2014
|
}
|
|
@@ -2001,56 +2041,63 @@ var Tokenizer = class {
|
|
|
2001
2041
|
this.startEntity();
|
|
2002
2042
|
}
|
|
2003
2043
|
}
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
this.
|
|
2015
|
-
} else if (!isEnd) {
|
|
2016
|
-
this.sequenceIndex++;
|
|
2017
|
-
return;
|
|
2044
|
+
currentSequence = Sequences.Empty;
|
|
2045
|
+
sequenceIndex = 0;
|
|
2046
|
+
enterTagBody() {
|
|
2047
|
+
if (this.currentSequence === Sequences.Plaintext) {
|
|
2048
|
+
this.currentSequence = Sequences.Empty;
|
|
2049
|
+
this.state = State.InPlainText;
|
|
2050
|
+
} else if (this.isSpecial) {
|
|
2051
|
+
this.state = State.InSpecialTag;
|
|
2052
|
+
this.sequenceIndex = 0;
|
|
2053
|
+
} else {
|
|
2054
|
+
this.state = State.Text;
|
|
2018
2055
|
}
|
|
2019
|
-
this.sequenceIndex = 0;
|
|
2020
|
-
this.state = State.InTagName;
|
|
2021
|
-
this.stateInTagName(c);
|
|
2022
2056
|
}
|
|
2023
|
-
/**
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2057
|
+
/**
|
|
2058
|
+
* Match the opening tag name against an HTML text-only tag sequence.
|
|
2059
|
+
*
|
|
2060
|
+
* Some tags share an initial prefix (`script`/`style`, `title`/`textarea`,
|
|
2061
|
+
* `noembed`/`noframes`), so we may switch to an alternate sequence at the
|
|
2062
|
+
* first distinguishing byte. On a successful full match we fall back to
|
|
2063
|
+
* the normal tag-name state; a later `>` will enter raw-text, RCDATA, or
|
|
2064
|
+
* plaintext mode based on `currentSequence` / `isSpecial`.
|
|
2065
|
+
* @param c Current character code point.
|
|
2066
|
+
*/
|
|
2067
|
+
stateSpecialStartSequence(c) {
|
|
2068
|
+
const lower = c | 32;
|
|
2069
|
+
if (this.sequenceIndex < this.currentSequence.length) {
|
|
2070
|
+
if (lower === this.currentSequence[this.sequenceIndex]) {
|
|
2071
|
+
this.sequenceIndex++;
|
|
2037
2072
|
return;
|
|
2038
2073
|
}
|
|
2039
|
-
this.sequenceIndex
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
if (this.currentSequence === Sequences.TitleEnd) {
|
|
2045
|
-
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2046
|
-
this.startEntity();
|
|
2074
|
+
if (this.sequenceIndex === 3) {
|
|
2075
|
+
if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
|
|
2076
|
+
this.currentSequence = Sequences.StyleEnd;
|
|
2077
|
+
this.sequenceIndex = 4;
|
|
2078
|
+
return;
|
|
2047
2079
|
}
|
|
2048
|
-
|
|
2049
|
-
|
|
2080
|
+
if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
|
|
2081
|
+
this.currentSequence = Sequences.TextareaEnd;
|
|
2082
|
+
this.sequenceIndex = 4;
|
|
2083
|
+
return;
|
|
2084
|
+
}
|
|
2085
|
+
} else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
|
|
2086
|
+
this.currentSequence = Sequences.NoframesEnd;
|
|
2087
|
+
this.sequenceIndex = 5;
|
|
2088
|
+
return;
|
|
2050
2089
|
}
|
|
2051
|
-
} else {
|
|
2052
|
-
this.sequenceIndex =
|
|
2090
|
+
} else if (isEndOfTagSection(c)) {
|
|
2091
|
+
this.sequenceIndex = 0;
|
|
2092
|
+
this.state = State.InTagName;
|
|
2093
|
+
this.stateInTagName(c);
|
|
2094
|
+
return;
|
|
2053
2095
|
}
|
|
2096
|
+
this.isSpecial = false;
|
|
2097
|
+
this.currentSequence = Sequences.Empty;
|
|
2098
|
+
this.sequenceIndex = 0;
|
|
2099
|
+
this.state = State.InTagName;
|
|
2100
|
+
this.stateInTagName(c);
|
|
2054
2101
|
}
|
|
2055
2102
|
stateCDATASequence(c) {
|
|
2056
2103
|
if (c === Sequences.Cdata[this.sequenceIndex]) {
|
|
@@ -2062,14 +2109,19 @@ var Tokenizer = class {
|
|
|
2062
2109
|
}
|
|
2063
2110
|
} else {
|
|
2064
2111
|
this.sequenceIndex = 0;
|
|
2065
|
-
this.
|
|
2066
|
-
|
|
2112
|
+
if (this.xmlMode) {
|
|
2113
|
+
this.state = State.InDeclaration;
|
|
2114
|
+
this.stateInDeclaration(c);
|
|
2115
|
+
} else {
|
|
2116
|
+
this.state = State.InSpecialComment;
|
|
2117
|
+
this.stateInSpecialComment(c);
|
|
2118
|
+
}
|
|
2067
2119
|
}
|
|
2068
2120
|
}
|
|
2069
2121
|
/**
|
|
2070
2122
|
* When we wait for one specific character, we can speed things up
|
|
2071
2123
|
* by skipping through the buffer until we find it.
|
|
2072
|
-
*
|
|
2124
|
+
* @param c Current character code point.
|
|
2073
2125
|
* @returns Whether the character was found.
|
|
2074
2126
|
*/
|
|
2075
2127
|
fastForwardTo(c) {
|
|
@@ -2081,6 +2133,16 @@ var Tokenizer = class {
|
|
|
2081
2133
|
this.index = this.buffer.length + this.offset - 1;
|
|
2082
2134
|
return false;
|
|
2083
2135
|
}
|
|
2136
|
+
/**
|
|
2137
|
+
* Emit a comment token and return to the text state.
|
|
2138
|
+
* @param offset Number of characters in the end sequence that have already been matched.
|
|
2139
|
+
*/
|
|
2140
|
+
emitComment(offset) {
|
|
2141
|
+
this.cbs.oncomment(this.sectionStart, this.index, offset);
|
|
2142
|
+
this.sequenceIndex = 0;
|
|
2143
|
+
this.sectionStart = this.index + 1;
|
|
2144
|
+
this.state = State.Text;
|
|
2145
|
+
}
|
|
2084
2146
|
/**
|
|
2085
2147
|
* Comments and CDATA end with `-->` and `]]>`.
|
|
2086
2148
|
*
|
|
@@ -2088,14 +2150,26 @@ var Tokenizer = class {
|
|
|
2088
2150
|
* - Their end sequences have a distinct character they start with.
|
|
2089
2151
|
* - That character is then repeated, so we have to check multiple repeats.
|
|
2090
2152
|
* - All characters but the start character of the sequence can be skipped.
|
|
2153
|
+
* @param c Current character code point.
|
|
2091
2154
|
*/
|
|
2092
2155
|
stateInCommentLike(c) {
|
|
2093
|
-
if (
|
|
2156
|
+
if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && /*
|
|
2157
|
+
* We're still at the very start of the comment: the only
|
|
2158
|
+
* characters consumed since `<!--` are the dashes that
|
|
2159
|
+
* advanced sequenceIndex (0 for `<!-->`, 1 for `<!--->`).
|
|
2160
|
+
*/
|
|
2161
|
+
this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
|
|
2162
|
+
this.emitComment(this.sequenceIndex);
|
|
2163
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
|
|
2164
|
+
this.emitComment(2);
|
|
2165
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
|
|
2166
|
+
this.sequenceIndex = Number(c === CharCodes2.Dash);
|
|
2167
|
+
} else if (c === this.currentSequence[this.sequenceIndex]) {
|
|
2094
2168
|
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
2095
2169
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2096
2170
|
this.cbs.oncdata(this.sectionStart, this.index, 2);
|
|
2097
2171
|
} else {
|
|
2098
|
-
this.cbs.oncomment(this.sectionStart, this.index,
|
|
2172
|
+
this.cbs.oncomment(this.sectionStart, this.index, 3);
|
|
2099
2173
|
}
|
|
2100
2174
|
this.sequenceIndex = 0;
|
|
2101
2175
|
this.sectionStart = this.index + 1;
|
|
@@ -2114,34 +2188,72 @@ var Tokenizer = class {
|
|
|
2114
2188
|
*
|
|
2115
2189
|
* XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
|
|
2116
2190
|
* We allow anything that wouldn't end the tag.
|
|
2191
|
+
* @param c Current character code point.
|
|
2117
2192
|
*/
|
|
2118
2193
|
isTagStartChar(c) {
|
|
2119
2194
|
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
|
|
2120
2195
|
}
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2196
|
+
/**
|
|
2197
|
+
* Scan raw-text / RCDATA content for the matching end tag.
|
|
2198
|
+
*
|
|
2199
|
+
* For RCDATA tags (`<title>`, `<textarea>`) entities are decoded inline.
|
|
2200
|
+
* For raw-text tags (`<script>`, `<style>`, etc.) we fast-forward to `<`.
|
|
2201
|
+
* @param c Current character code point.
|
|
2202
|
+
*/
|
|
2203
|
+
stateInSpecialTag(c) {
|
|
2204
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2205
|
+
if (isEndOfTagSection(c)) {
|
|
2206
|
+
const endOfText = this.index - this.currentSequence.length;
|
|
2207
|
+
if (this.sectionStart < endOfText) {
|
|
2208
|
+
const actualIndex = this.index;
|
|
2209
|
+
this.index = endOfText;
|
|
2210
|
+
this.cbs.ontext(this.sectionStart, endOfText);
|
|
2211
|
+
this.index = actualIndex;
|
|
2212
|
+
}
|
|
2213
|
+
this.isSpecial = false;
|
|
2214
|
+
this.sectionStart = endOfText + 2;
|
|
2215
|
+
this.stateInClosingTagName(c);
|
|
2216
|
+
return;
|
|
2217
|
+
}
|
|
2218
|
+
this.sequenceIndex = 0;
|
|
2219
|
+
}
|
|
2220
|
+
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2221
|
+
this.sequenceIndex += 1;
|
|
2222
|
+
} else if (this.sequenceIndex === 0) {
|
|
2223
|
+
if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
|
|
2224
|
+
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2225
|
+
this.startEntity();
|
|
2226
|
+
}
|
|
2227
|
+
} else if (this.fastForwardTo(CharCodes2.Lt)) {
|
|
2228
|
+
this.sequenceIndex = 1;
|
|
2229
|
+
}
|
|
2230
|
+
} else {
|
|
2231
|
+
this.sequenceIndex = Number(c === CharCodes2.Lt);
|
|
2232
|
+
}
|
|
2126
2233
|
}
|
|
2127
2234
|
stateBeforeTagName(c) {
|
|
2128
2235
|
if (c === CharCodes2.ExclamationMark) {
|
|
2129
2236
|
this.state = State.BeforeDeclaration;
|
|
2130
2237
|
this.sectionStart = this.index + 1;
|
|
2131
2238
|
} else if (c === CharCodes2.Questionmark) {
|
|
2132
|
-
this.
|
|
2133
|
-
|
|
2239
|
+
if (this.xmlMode) {
|
|
2240
|
+
this.state = State.InProcessingInstruction;
|
|
2241
|
+
this.sequenceIndex = 0;
|
|
2242
|
+
this.sectionStart = this.index + 1;
|
|
2243
|
+
} else {
|
|
2244
|
+
this.state = State.InSpecialComment;
|
|
2245
|
+
this.sectionStart = this.index;
|
|
2246
|
+
}
|
|
2134
2247
|
} else if (this.isTagStartChar(c)) {
|
|
2135
|
-
const lower = c | 32;
|
|
2136
2248
|
this.sectionStart = this.index;
|
|
2137
|
-
|
|
2249
|
+
const special = this.xmlMode || this.cbs.isInForeignContext?.() ? void 0 : specialStartSequences.get(c | 32);
|
|
2250
|
+
if (special === void 0) {
|
|
2138
2251
|
this.state = State.InTagName;
|
|
2139
|
-
} else if (lower === Sequences.ScriptEnd[2]) {
|
|
2140
|
-
this.state = State.BeforeSpecialS;
|
|
2141
|
-
} else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
|
|
2142
|
-
this.state = State.BeforeSpecialT;
|
|
2143
2252
|
} else {
|
|
2144
|
-
this.
|
|
2253
|
+
this.isSpecial = true;
|
|
2254
|
+
this.currentSequence = special;
|
|
2255
|
+
this.sequenceIndex = 3;
|
|
2256
|
+
this.state = State.SpecialStartSequence;
|
|
2145
2257
|
}
|
|
2146
2258
|
} else if (c === CharCodes2.Slash) {
|
|
2147
2259
|
this.state = State.BeforeClosingTagName;
|
|
@@ -2160,15 +2272,23 @@ var Tokenizer = class {
|
|
|
2160
2272
|
}
|
|
2161
2273
|
stateBeforeClosingTagName(c) {
|
|
2162
2274
|
if (isWhitespace(c)) {
|
|
2275
|
+
if (this.xmlMode) {
|
|
2276
|
+
} else {
|
|
2277
|
+
this.state = State.InSpecialComment;
|
|
2278
|
+
this.sectionStart = this.index;
|
|
2279
|
+
}
|
|
2163
2280
|
} else if (c === CharCodes2.Gt) {
|
|
2164
2281
|
this.state = State.Text;
|
|
2282
|
+
if (!this.xmlMode) {
|
|
2283
|
+
this.sectionStart = this.index + 1;
|
|
2284
|
+
}
|
|
2165
2285
|
} else {
|
|
2166
2286
|
this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
|
|
2167
2287
|
this.sectionStart = this.index;
|
|
2168
2288
|
}
|
|
2169
2289
|
}
|
|
2170
2290
|
stateInClosingTagName(c) {
|
|
2171
|
-
if (
|
|
2291
|
+
if (isEndOfTagSection(c)) {
|
|
2172
2292
|
this.cbs.onclosetag(this.sectionStart, this.index);
|
|
2173
2293
|
this.sectionStart = -1;
|
|
2174
2294
|
this.state = State.AfterClosingTagName;
|
|
@@ -2184,12 +2304,7 @@ var Tokenizer = class {
|
|
|
2184
2304
|
stateBeforeAttributeName(c) {
|
|
2185
2305
|
if (c === CharCodes2.Gt) {
|
|
2186
2306
|
this.cbs.onopentagend(this.index);
|
|
2187
|
-
|
|
2188
|
-
this.state = State.InSpecialTag;
|
|
2189
|
-
this.sequenceIndex = 0;
|
|
2190
|
-
} else {
|
|
2191
|
-
this.state = State.Text;
|
|
2192
|
-
}
|
|
2307
|
+
this.enterTagBody();
|
|
2193
2308
|
this.sectionStart = this.index + 1;
|
|
2194
2309
|
} else if (c === CharCodes2.Slash) {
|
|
2195
2310
|
this.state = State.InSelfClosingTag;
|
|
@@ -2198,12 +2313,26 @@ var Tokenizer = class {
|
|
|
2198
2313
|
this.sectionStart = this.index;
|
|
2199
2314
|
}
|
|
2200
2315
|
}
|
|
2316
|
+
/**
|
|
2317
|
+
* Handle `/` before `>` in an opening tag.
|
|
2318
|
+
*
|
|
2319
|
+
* In HTML mode, text-only tags ignore the self-closing flag and still enter
|
|
2320
|
+
* their raw-text/RCDATA/plaintext state unless self-closing tags are being
|
|
2321
|
+
* recognized. In XML mode, or for ordinary tags, the tokenizer returns to
|
|
2322
|
+
* regular text parsing after emitting the self-closing callback.
|
|
2323
|
+
* @param c Current character code point.
|
|
2324
|
+
*/
|
|
2201
2325
|
stateInSelfClosingTag(c) {
|
|
2202
2326
|
if (c === CharCodes2.Gt) {
|
|
2203
2327
|
this.cbs.onselfclosingtag(this.index);
|
|
2204
|
-
this.state = State.Text;
|
|
2205
2328
|
this.sectionStart = this.index + 1;
|
|
2329
|
+
if (!this.recognizeSelfClosing) {
|
|
2330
|
+
this.enterTagBody();
|
|
2331
|
+
return;
|
|
2332
|
+
}
|
|
2333
|
+
this.state = State.Text;
|
|
2206
2334
|
this.isSpecial = false;
|
|
2335
|
+
this.currentSequence = Sequences.Empty;
|
|
2207
2336
|
} else if (!isWhitespace(c)) {
|
|
2208
2337
|
this.state = State.BeforeAttributeName;
|
|
2209
2338
|
this.stateBeforeAttributeName(c);
|
|
@@ -2271,12 +2400,54 @@ var Tokenizer = class {
|
|
|
2271
2400
|
this.startEntity();
|
|
2272
2401
|
}
|
|
2273
2402
|
}
|
|
2403
|
+
/**
|
|
2404
|
+
* Distinguish between CDATA, declarations, HTML comments, and HTML bogus
|
|
2405
|
+
* comments after `<!`.
|
|
2406
|
+
*
|
|
2407
|
+
* In HTML mode, only real comments and doctypes stay on declaration paths;
|
|
2408
|
+
* everything else becomes a bogus comment terminated by the next `>`.
|
|
2409
|
+
* @param c Current character code point.
|
|
2410
|
+
*/
|
|
2274
2411
|
stateBeforeDeclaration(c) {
|
|
2275
2412
|
if (c === CharCodes2.OpeningSquareBracket) {
|
|
2276
2413
|
this.state = State.CDATASequence;
|
|
2277
2414
|
this.sequenceIndex = 0;
|
|
2278
|
-
} else {
|
|
2415
|
+
} else if (this.xmlMode) {
|
|
2279
2416
|
this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
|
|
2417
|
+
} else if ((c | 32) === Sequences.Doctype[0]) {
|
|
2418
|
+
this.state = State.DeclarationSequence;
|
|
2419
|
+
this.currentSequence = Sequences.Doctype;
|
|
2420
|
+
this.sequenceIndex = 1;
|
|
2421
|
+
} else if (c === CharCodes2.Gt) {
|
|
2422
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2423
|
+
this.state = State.Text;
|
|
2424
|
+
this.sectionStart = this.index + 1;
|
|
2425
|
+
} else if (c === CharCodes2.Dash) {
|
|
2426
|
+
this.state = State.BeforeComment;
|
|
2427
|
+
} else {
|
|
2428
|
+
this.state = State.InSpecialComment;
|
|
2429
|
+
}
|
|
2430
|
+
}
|
|
2431
|
+
/**
|
|
2432
|
+
* Continue matching `doctype` after `<!d`.
|
|
2433
|
+
*
|
|
2434
|
+
* A full `doctype` match stays on the declaration path; any other name falls
|
|
2435
|
+
* back to an HTML bogus comment, which matches browser behavior for
|
|
2436
|
+
* non-doctype `<!...>` constructs.
|
|
2437
|
+
* @param c Current character code point.
|
|
2438
|
+
*/
|
|
2439
|
+
stateDeclarationSequence(c) {
|
|
2440
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2441
|
+
this.state = State.InDeclaration;
|
|
2442
|
+
this.stateInDeclaration(c);
|
|
2443
|
+
} else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2444
|
+
this.sequenceIndex += 1;
|
|
2445
|
+
} else if (c === CharCodes2.Gt) {
|
|
2446
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2447
|
+
this.state = State.Text;
|
|
2448
|
+
this.sectionStart = this.index + 1;
|
|
2449
|
+
} else {
|
|
2450
|
+
this.state = State.InSpecialComment;
|
|
2280
2451
|
}
|
|
2281
2452
|
}
|
|
2282
2453
|
stateInDeclaration(c) {
|
|
@@ -2286,21 +2457,39 @@ var Tokenizer = class {
|
|
|
2286
2457
|
this.sectionStart = this.index + 1;
|
|
2287
2458
|
}
|
|
2288
2459
|
}
|
|
2460
|
+
/**
|
|
2461
|
+
* XML processing instructions (`<?...?>`).
|
|
2462
|
+
*
|
|
2463
|
+
* In HTML mode `<?` is routed to `InSpecialComment` instead, so this
|
|
2464
|
+
* state is only reachable in XML mode.
|
|
2465
|
+
* @param c Current character code point.
|
|
2466
|
+
*/
|
|
2289
2467
|
stateInProcessingInstruction(c) {
|
|
2290
|
-
if (c === CharCodes2.
|
|
2291
|
-
this.
|
|
2468
|
+
if (c === CharCodes2.Questionmark) {
|
|
2469
|
+
this.sequenceIndex = 1;
|
|
2470
|
+
} else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
|
|
2471
|
+
this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
|
|
2472
|
+
this.sequenceIndex = 0;
|
|
2292
2473
|
this.state = State.Text;
|
|
2293
2474
|
this.sectionStart = this.index + 1;
|
|
2475
|
+
} else {
|
|
2476
|
+
this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
|
|
2294
2477
|
}
|
|
2295
2478
|
}
|
|
2296
2479
|
stateBeforeComment(c) {
|
|
2297
2480
|
if (c === CharCodes2.Dash) {
|
|
2298
2481
|
this.state = State.InCommentLike;
|
|
2299
2482
|
this.currentSequence = Sequences.CommentEnd;
|
|
2300
|
-
this.sequenceIndex =
|
|
2483
|
+
this.sequenceIndex = 0;
|
|
2301
2484
|
this.sectionStart = this.index + 1;
|
|
2302
|
-
} else {
|
|
2485
|
+
} else if (this.xmlMode) {
|
|
2303
2486
|
this.state = State.InDeclaration;
|
|
2487
|
+
} else if (c === CharCodes2.Gt) {
|
|
2488
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2489
|
+
this.state = State.Text;
|
|
2490
|
+
this.sectionStart = this.index + 1;
|
|
2491
|
+
} else {
|
|
2492
|
+
this.state = State.InSpecialComment;
|
|
2304
2493
|
}
|
|
2305
2494
|
}
|
|
2306
2495
|
stateInSpecialComment(c) {
|
|
@@ -2310,38 +2499,6 @@ var Tokenizer = class {
|
|
|
2310
2499
|
this.sectionStart = this.index + 1;
|
|
2311
2500
|
}
|
|
2312
2501
|
}
|
|
2313
|
-
stateBeforeSpecialS(c) {
|
|
2314
|
-
const lower = c | 32;
|
|
2315
|
-
if (lower === Sequences.ScriptEnd[3]) {
|
|
2316
|
-
this.startSpecial(Sequences.ScriptEnd, 4);
|
|
2317
|
-
} else if (lower === Sequences.StyleEnd[3]) {
|
|
2318
|
-
this.startSpecial(Sequences.StyleEnd, 4);
|
|
2319
|
-
} else {
|
|
2320
|
-
this.state = State.InTagName;
|
|
2321
|
-
this.stateInTagName(c);
|
|
2322
|
-
}
|
|
2323
|
-
}
|
|
2324
|
-
stateBeforeSpecialT(c) {
|
|
2325
|
-
const lower = c | 32;
|
|
2326
|
-
switch (lower) {
|
|
2327
|
-
case Sequences.TitleEnd[3]: {
|
|
2328
|
-
this.startSpecial(Sequences.TitleEnd, 4);
|
|
2329
|
-
break;
|
|
2330
|
-
}
|
|
2331
|
-
case Sequences.TextareaEnd[3]: {
|
|
2332
|
-
this.startSpecial(Sequences.TextareaEnd, 4);
|
|
2333
|
-
break;
|
|
2334
|
-
}
|
|
2335
|
-
case Sequences.XmpEnd[3]: {
|
|
2336
|
-
this.startSpecial(Sequences.XmpEnd, 4);
|
|
2337
|
-
break;
|
|
2338
|
-
}
|
|
2339
|
-
default: {
|
|
2340
|
-
this.state = State.InTagName;
|
|
2341
|
-
this.stateInTagName(c);
|
|
2342
|
-
}
|
|
2343
|
-
}
|
|
2344
|
-
}
|
|
2345
2502
|
startEntity() {
|
|
2346
2503
|
this.baseState = this.state;
|
|
2347
2504
|
this.state = State.InEntity;
|
|
@@ -2370,7 +2527,7 @@ var Tokenizer = class {
|
|
|
2370
2527
|
*/
|
|
2371
2528
|
cleanup() {
|
|
2372
2529
|
if (this.running && this.sectionStart !== this.index) {
|
|
2373
|
-
if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2530
|
+
if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2374
2531
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
2375
2532
|
this.sectionStart = this.index;
|
|
2376
2533
|
} else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
|
|
@@ -2395,6 +2552,10 @@ var Tokenizer = class {
|
|
|
2395
2552
|
this.stateText(c);
|
|
2396
2553
|
break;
|
|
2397
2554
|
}
|
|
2555
|
+
case State.InPlainText: {
|
|
2556
|
+
this.index = this.buffer.length + this.offset - 1;
|
|
2557
|
+
break;
|
|
2558
|
+
}
|
|
2398
2559
|
case State.SpecialStartSequence: {
|
|
2399
2560
|
this.stateSpecialStartSequence(c);
|
|
2400
2561
|
break;
|
|
@@ -2407,6 +2568,10 @@ var Tokenizer = class {
|
|
|
2407
2568
|
this.stateCDATASequence(c);
|
|
2408
2569
|
break;
|
|
2409
2570
|
}
|
|
2571
|
+
case State.DeclarationSequence: {
|
|
2572
|
+
this.stateDeclarationSequence(c);
|
|
2573
|
+
break;
|
|
2574
|
+
}
|
|
2410
2575
|
case State.InAttributeValueDq: {
|
|
2411
2576
|
this.stateInAttributeValueDoubleQuotes(c);
|
|
2412
2577
|
break;
|
|
@@ -2459,14 +2624,6 @@ var Tokenizer = class {
|
|
|
2459
2624
|
this.stateAfterClosingTagName(c);
|
|
2460
2625
|
break;
|
|
2461
2626
|
}
|
|
2462
|
-
case State.BeforeSpecialS: {
|
|
2463
|
-
this.stateBeforeSpecialS(c);
|
|
2464
|
-
break;
|
|
2465
|
-
}
|
|
2466
|
-
case State.BeforeSpecialT: {
|
|
2467
|
-
this.stateBeforeSpecialT(c);
|
|
2468
|
-
break;
|
|
2469
|
-
}
|
|
2470
2627
|
case State.InAttributeValueNq: {
|
|
2471
2628
|
this.stateInAttributeValueNoQuotes(c);
|
|
2472
2629
|
break;
|
|
@@ -2508,43 +2665,110 @@ var Tokenizer = class {
|
|
|
2508
2665
|
this.handleTrailingData();
|
|
2509
2666
|
this.cbs.onend();
|
|
2510
2667
|
}
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
if (this.sectionStart >= endIndex) {
|
|
2515
|
-
return;
|
|
2668
|
+
handleTrailingCommentLikeData(endIndex) {
|
|
2669
|
+
if (this.state !== State.InCommentLike) {
|
|
2670
|
+
return false;
|
|
2516
2671
|
}
|
|
2517
|
-
if (this.
|
|
2518
|
-
if (this.
|
|
2519
|
-
|
|
2672
|
+
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2673
|
+
if (this.xmlMode) {
|
|
2674
|
+
if (this.sectionStart < endIndex) {
|
|
2675
|
+
this.cbs.oncdata(this.sectionStart, endIndex, 0);
|
|
2676
|
+
}
|
|
2520
2677
|
} else {
|
|
2521
|
-
this.
|
|
2678
|
+
const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
|
|
2679
|
+
this.cbs.oncomment(cdataStart, endIndex, 0);
|
|
2522
2680
|
}
|
|
2523
|
-
} 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) {
|
|
2524
2681
|
} else {
|
|
2525
|
-
this.
|
|
2682
|
+
const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
|
|
2683
|
+
this.cbs.oncomment(this.sectionStart, endIndex, offset);
|
|
2526
2684
|
}
|
|
2685
|
+
return true;
|
|
2527
2686
|
}
|
|
2528
|
-
|
|
2529
|
-
if (this.
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2687
|
+
handleTrailingMarkupDeclaration(endIndex) {
|
|
2688
|
+
if (this.xmlMode) {
|
|
2689
|
+
switch (this.state) {
|
|
2690
|
+
case State.InSpecialComment:
|
|
2691
|
+
case State.BeforeComment:
|
|
2692
|
+
case State.CDATASequence:
|
|
2693
|
+
case State.DeclarationSequence:
|
|
2694
|
+
case State.InDeclaration: {
|
|
2695
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2696
|
+
return true;
|
|
2697
|
+
}
|
|
2698
|
+
default: {
|
|
2699
|
+
return false;
|
|
2700
|
+
}
|
|
2701
|
+
}
|
|
2702
|
+
}
|
|
2703
|
+
switch (this.state) {
|
|
2704
|
+
case State.BeforeDeclaration:
|
|
2705
|
+
case State.InSpecialComment:
|
|
2706
|
+
case State.BeforeComment:
|
|
2707
|
+
case State.CDATASequence: {
|
|
2708
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2709
|
+
return true;
|
|
2710
|
+
}
|
|
2711
|
+
case State.DeclarationSequence: {
|
|
2712
|
+
if (this.sequenceIndex !== Sequences.Doctype.length) {
|
|
2713
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2714
|
+
}
|
|
2715
|
+
return true;
|
|
2716
|
+
}
|
|
2717
|
+
case State.InDeclaration: {
|
|
2718
|
+
return true;
|
|
2719
|
+
}
|
|
2720
|
+
default: {
|
|
2721
|
+
return false;
|
|
2722
|
+
}
|
|
2723
|
+
}
|
|
2724
|
+
}
|
|
2725
|
+
/** Handle any trailing data. */
|
|
2726
|
+
handleTrailingData() {
|
|
2727
|
+
const endIndex = this.buffer.length + this.offset;
|
|
2728
|
+
if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
|
|
2729
|
+
return;
|
|
2730
|
+
}
|
|
2731
|
+
if (this.sectionStart >= endIndex) {
|
|
2732
|
+
return;
|
|
2733
|
+
}
|
|
2734
|
+
switch (this.state) {
|
|
2735
|
+
case State.InTagName:
|
|
2736
|
+
case State.BeforeAttributeName:
|
|
2737
|
+
case State.BeforeAttributeValue:
|
|
2738
|
+
case State.AfterAttributeName:
|
|
2739
|
+
case State.InAttributeName:
|
|
2740
|
+
case State.InAttributeValueSq:
|
|
2741
|
+
case State.InAttributeValueDq:
|
|
2742
|
+
case State.InAttributeValueNq:
|
|
2743
|
+
case State.InClosingTagName: {
|
|
2744
|
+
break;
|
|
2745
|
+
}
|
|
2746
|
+
default: {
|
|
2747
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2539
2748
|
}
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2749
|
+
}
|
|
2750
|
+
}
|
|
2751
|
+
emitCodePoint(cp, consumed) {
|
|
2752
|
+
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
2753
|
+
if (this.sectionStart < this.entityStart) {
|
|
2754
|
+
this.cbs.onattribdata(this.sectionStart, this.entityStart);
|
|
2755
|
+
}
|
|
2756
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2757
|
+
this.index = this.sectionStart - 1;
|
|
2758
|
+
this.cbs.onattribentity(cp);
|
|
2759
|
+
} else {
|
|
2760
|
+
if (this.sectionStart < this.entityStart) {
|
|
2761
|
+
this.cbs.ontext(this.sectionStart, this.entityStart);
|
|
2762
|
+
}
|
|
2763
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2764
|
+
this.index = this.sectionStart - 1;
|
|
2765
|
+
this.cbs.ontextentity(cp, this.sectionStart);
|
|
2543
2766
|
}
|
|
2544
2767
|
}
|
|
2545
2768
|
};
|
|
2546
2769
|
|
|
2547
|
-
// node_modules/.pnpm/htmlparser2@
|
|
2770
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Parser.js
|
|
2771
|
+
var { fromCodePoint } = String;
|
|
2548
2772
|
var formTags = /* @__PURE__ */ new Set([
|
|
2549
2773
|
"input",
|
|
2550
2774
|
"option",
|
|
@@ -2555,6 +2779,7 @@ var formTags = /* @__PURE__ */ new Set([
|
|
|
2555
2779
|
"textarea"
|
|
2556
2780
|
]);
|
|
2557
2781
|
var pTag = /* @__PURE__ */ new Set(["p"]);
|
|
2782
|
+
var headingTags = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6", "p"]);
|
|
2558
2783
|
var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
|
|
2559
2784
|
var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
|
|
2560
2785
|
var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
|
|
@@ -2563,14 +2788,15 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2563
2788
|
["th", /* @__PURE__ */ new Set(["th"])],
|
|
2564
2789
|
["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
|
|
2565
2790
|
["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
|
|
2791
|
+
["a", /* @__PURE__ */ new Set(["a"])],
|
|
2566
2792
|
["li", /* @__PURE__ */ new Set(["li"])],
|
|
2567
2793
|
["p", pTag],
|
|
2568
|
-
["h1",
|
|
2569
|
-
["h2",
|
|
2570
|
-
["h3",
|
|
2571
|
-
["h4",
|
|
2572
|
-
["h5",
|
|
2573
|
-
["h6",
|
|
2794
|
+
["h1", headingTags],
|
|
2795
|
+
["h2", headingTags],
|
|
2796
|
+
["h3", headingTags],
|
|
2797
|
+
["h4", headingTags],
|
|
2798
|
+
["h5", headingTags],
|
|
2799
|
+
["h6", headingTags],
|
|
2574
2800
|
["select", formTags],
|
|
2575
2801
|
["input", formTags],
|
|
2576
2802
|
["output", formTags],
|
|
@@ -2607,6 +2833,7 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2607
2833
|
["tbody", tableSectionTags],
|
|
2608
2834
|
["tfoot", tableSectionTags]
|
|
2609
2835
|
]);
|
|
2836
|
+
var DOCUMENT_TYPE = "doctype";
|
|
2610
2837
|
var voidElements = /* @__PURE__ */ new Set([
|
|
2611
2838
|
"area",
|
|
2612
2839
|
"base",
|
|
@@ -2636,98 +2863,201 @@ var htmlIntegrationElements = /* @__PURE__ */ new Set([
|
|
|
2636
2863
|
"ms",
|
|
2637
2864
|
"mtext",
|
|
2638
2865
|
"annotation-xml",
|
|
2639
|
-
"
|
|
2866
|
+
"foreignObject",
|
|
2640
2867
|
"desc",
|
|
2641
2868
|
"title"
|
|
2642
2869
|
]);
|
|
2870
|
+
var svgTagNameAdjustments = /* @__PURE__ */ new Map([
|
|
2871
|
+
["altglyph", "altGlyph"],
|
|
2872
|
+
["altglyphdef", "altGlyphDef"],
|
|
2873
|
+
["altglyphitem", "altGlyphItem"],
|
|
2874
|
+
["animatecolor", "animateColor"],
|
|
2875
|
+
["animatemotion", "animateMotion"],
|
|
2876
|
+
["animatetransform", "animateTransform"],
|
|
2877
|
+
["clippath", "clipPath"],
|
|
2878
|
+
["feblend", "feBlend"],
|
|
2879
|
+
["fecolormatrix", "feColorMatrix"],
|
|
2880
|
+
["fecomponenttransfer", "feComponentTransfer"],
|
|
2881
|
+
["fecomposite", "feComposite"],
|
|
2882
|
+
["feconvolvematrix", "feConvolveMatrix"],
|
|
2883
|
+
["fediffuselighting", "feDiffuseLighting"],
|
|
2884
|
+
["fedisplacementmap", "feDisplacementMap"],
|
|
2885
|
+
["fedistantlight", "feDistantLight"],
|
|
2886
|
+
["fedropshadow", "feDropShadow"],
|
|
2887
|
+
["feflood", "feFlood"],
|
|
2888
|
+
["fefunca", "feFuncA"],
|
|
2889
|
+
["fefuncb", "feFuncB"],
|
|
2890
|
+
["fefuncg", "feFuncG"],
|
|
2891
|
+
["fefuncr", "feFuncR"],
|
|
2892
|
+
["fegaussianblur", "feGaussianBlur"],
|
|
2893
|
+
["feimage", "feImage"],
|
|
2894
|
+
["femerge", "feMerge"],
|
|
2895
|
+
["femergenode", "feMergeNode"],
|
|
2896
|
+
["femorphology", "feMorphology"],
|
|
2897
|
+
["feoffset", "feOffset"],
|
|
2898
|
+
["fepointlight", "fePointLight"],
|
|
2899
|
+
["fespecularlighting", "feSpecularLighting"],
|
|
2900
|
+
["fespotlight", "feSpotLight"],
|
|
2901
|
+
["fetile", "feTile"],
|
|
2902
|
+
["feturbulence", "feTurbulence"],
|
|
2903
|
+
["foreignobject", "foreignObject"],
|
|
2904
|
+
["glyphref", "glyphRef"],
|
|
2905
|
+
["lineargradient", "linearGradient"],
|
|
2906
|
+
["radialgradient", "radialGradient"],
|
|
2907
|
+
["textpath", "textPath"]
|
|
2908
|
+
]);
|
|
2909
|
+
var ForeignContext;
|
|
2910
|
+
(function(ForeignContext2) {
|
|
2911
|
+
ForeignContext2[ForeignContext2["None"] = 0] = "None";
|
|
2912
|
+
ForeignContext2[ForeignContext2["Svg"] = 1] = "Svg";
|
|
2913
|
+
ForeignContext2[ForeignContext2["MathML"] = 2] = "MathML";
|
|
2914
|
+
})(ForeignContext || (ForeignContext = {}));
|
|
2643
2915
|
var reNameEnd = /\s|\//;
|
|
2644
2916
|
var Parser = class {
|
|
2917
|
+
options;
|
|
2918
|
+
/** The start index of the last event. */
|
|
2919
|
+
startIndex = 0;
|
|
2920
|
+
/** The end index of the last event. */
|
|
2921
|
+
endIndex = 0;
|
|
2922
|
+
/**
|
|
2923
|
+
* Store the start index of the current open tag,
|
|
2924
|
+
* so we can update the start index for attributes.
|
|
2925
|
+
*/
|
|
2926
|
+
openTagStart = 0;
|
|
2927
|
+
tagname = "";
|
|
2928
|
+
attribname = "";
|
|
2929
|
+
attribvalue = "";
|
|
2930
|
+
attribs = null;
|
|
2931
|
+
stack = [];
|
|
2932
|
+
foreignContext;
|
|
2933
|
+
cbs;
|
|
2934
|
+
lowerCaseTagNames;
|
|
2935
|
+
lowerCaseAttributeNames;
|
|
2936
|
+
recognizeSelfClosing;
|
|
2937
|
+
/** We are parsing HTML. Inverse of the `xmlMode` option. */
|
|
2938
|
+
htmlMode;
|
|
2939
|
+
tokenizer;
|
|
2940
|
+
buffers = [];
|
|
2941
|
+
bufferOffset = 0;
|
|
2942
|
+
/** The index of the last written buffer. Used when resuming after a `pause()`. */
|
|
2943
|
+
writeIndex = 0;
|
|
2944
|
+
/** Indicates whether the parser has finished running / `.end` has been called. */
|
|
2945
|
+
ended = false;
|
|
2645
2946
|
constructor(cbs, options = {}) {
|
|
2646
|
-
var _a3, _b, _c, _d, _e, _f;
|
|
2647
2947
|
this.options = options;
|
|
2648
|
-
this.
|
|
2649
|
-
this.endIndex = 0;
|
|
2650
|
-
this.openTagStart = 0;
|
|
2651
|
-
this.tagname = "";
|
|
2652
|
-
this.attribname = "";
|
|
2653
|
-
this.attribvalue = "";
|
|
2654
|
-
this.attribs = null;
|
|
2655
|
-
this.stack = [];
|
|
2656
|
-
this.buffers = [];
|
|
2657
|
-
this.bufferOffset = 0;
|
|
2658
|
-
this.writeIndex = 0;
|
|
2659
|
-
this.ended = false;
|
|
2660
|
-
this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
|
|
2948
|
+
this.cbs = cbs ?? {};
|
|
2661
2949
|
this.htmlMode = !this.options.xmlMode;
|
|
2662
|
-
this.lowerCaseTagNames =
|
|
2663
|
-
this.lowerCaseAttributeNames =
|
|
2664
|
-
this.recognizeSelfClosing =
|
|
2665
|
-
this.tokenizer = new (
|
|
2666
|
-
this.foreignContext = [
|
|
2667
|
-
|
|
2950
|
+
this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;
|
|
2951
|
+
this.lowerCaseAttributeNames = options.lowerCaseAttributeNames ?? this.htmlMode;
|
|
2952
|
+
this.recognizeSelfClosing = options.recognizeSelfClosing ?? !this.htmlMode;
|
|
2953
|
+
this.tokenizer = new (options.Tokenizer ?? Tokenizer)(this.options, this);
|
|
2954
|
+
this.foreignContext = [ForeignContext.None];
|
|
2955
|
+
this.cbs.onparserinit?.(this);
|
|
2668
2956
|
}
|
|
2669
2957
|
// Tokenizer event handlers
|
|
2670
|
-
/**
|
|
2958
|
+
/**
|
|
2959
|
+
* @param start Start index for the current parser event.
|
|
2960
|
+
* @param endIndex End index for the current parser event.
|
|
2961
|
+
* @internal
|
|
2962
|
+
*/
|
|
2671
2963
|
ontext(start, endIndex) {
|
|
2672
|
-
var _a3, _b;
|
|
2673
2964
|
const data = this.getSlice(start, endIndex);
|
|
2674
2965
|
this.endIndex = endIndex - 1;
|
|
2675
|
-
|
|
2966
|
+
this.cbs.ontext?.(data);
|
|
2676
2967
|
this.startIndex = endIndex;
|
|
2677
2968
|
}
|
|
2678
|
-
/**
|
|
2969
|
+
/**
|
|
2970
|
+
* @param cp Current Unicode code point.
|
|
2971
|
+
* @param endIndex End index for the current parser event.
|
|
2972
|
+
* @internal
|
|
2973
|
+
*/
|
|
2679
2974
|
ontextentity(cp, endIndex) {
|
|
2680
|
-
var _a3, _b;
|
|
2681
2975
|
this.endIndex = endIndex - 1;
|
|
2682
|
-
|
|
2976
|
+
this.cbs.ontext?.(fromCodePoint(cp));
|
|
2683
2977
|
this.startIndex = endIndex;
|
|
2684
2978
|
}
|
|
2979
|
+
/** @internal */
|
|
2980
|
+
isInForeignContext() {
|
|
2981
|
+
return this.foreignContext[0] !== ForeignContext.None;
|
|
2982
|
+
}
|
|
2685
2983
|
/**
|
|
2686
2984
|
* Checks if the current tag is a void element. Override this if you want
|
|
2687
2985
|
* to specify your own additional void elements.
|
|
2986
|
+
* @param name Name of the pseudo selector.
|
|
2688
2987
|
*/
|
|
2689
2988
|
isVoidElement(name) {
|
|
2690
2989
|
return this.htmlMode && voidElements.has(name);
|
|
2691
2990
|
}
|
|
2692
|
-
/**
|
|
2991
|
+
/**
|
|
2992
|
+
* Read a tag name from the buffer.
|
|
2993
|
+
*
|
|
2994
|
+
* When `lowerCaseTagNames` is enabled (the default in HTML mode), the name
|
|
2995
|
+
* is lowercased and may be adjusted for SVG casing or the `image` → `img`
|
|
2996
|
+
* alias.
|
|
2997
|
+
* @param start Start index of the tag name in the buffer.
|
|
2998
|
+
* @param endIndex End index of the tag name in the buffer.
|
|
2999
|
+
*/
|
|
3000
|
+
readTagName(start, endIndex) {
|
|
3001
|
+
const name = this.lowerCaseTagNames ? this.getSlice(start, endIndex).toLowerCase() : this.getSlice(start, endIndex);
|
|
3002
|
+
if (!(this.lowerCaseTagNames && this.htmlMode)) {
|
|
3003
|
+
return name;
|
|
3004
|
+
}
|
|
3005
|
+
if (this.foreignContext[0] === ForeignContext.Svg) {
|
|
3006
|
+
return svgTagNameAdjustments.get(name) ?? name;
|
|
3007
|
+
}
|
|
3008
|
+
if (this.foreignContext.length > 1) {
|
|
3009
|
+
const adjusted = svgTagNameAdjustments.get(name);
|
|
3010
|
+
if (adjusted !== void 0 && this.stack.includes(adjusted)) {
|
|
3011
|
+
return adjusted;
|
|
3012
|
+
}
|
|
3013
|
+
}
|
|
3014
|
+
if (!this.isInForeignContext()) {
|
|
3015
|
+
return name === "image" ? "img" : name;
|
|
3016
|
+
}
|
|
3017
|
+
return name;
|
|
3018
|
+
}
|
|
3019
|
+
/**
|
|
3020
|
+
* @param start Start index for the current parser event.
|
|
3021
|
+
* @param endIndex End index for the current parser event.
|
|
3022
|
+
* @internal
|
|
3023
|
+
*/
|
|
2693
3024
|
onopentagname(start, endIndex) {
|
|
2694
3025
|
this.endIndex = endIndex;
|
|
2695
|
-
|
|
2696
|
-
if (this.lowerCaseTagNames) {
|
|
2697
|
-
name = name.toLowerCase();
|
|
2698
|
-
}
|
|
2699
|
-
this.emitOpenTag(name);
|
|
3026
|
+
this.emitOpenTag(this.readTagName(start, endIndex));
|
|
2700
3027
|
}
|
|
2701
3028
|
emitOpenTag(name) {
|
|
2702
|
-
var _a3, _b, _c, _d;
|
|
2703
3029
|
this.openTagStart = this.startIndex;
|
|
2704
3030
|
this.tagname = name;
|
|
3031
|
+
if (this.htmlMode && name === "form" && this.stack.includes("form")) {
|
|
3032
|
+
this.tagname = "";
|
|
3033
|
+
return;
|
|
3034
|
+
}
|
|
2705
3035
|
const impliesClose = this.htmlMode && openImpliesClose.get(name);
|
|
2706
3036
|
if (impliesClose) {
|
|
2707
3037
|
while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
|
|
2708
|
-
|
|
2709
|
-
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
|
|
3038
|
+
this.popElement(true);
|
|
2710
3039
|
}
|
|
2711
3040
|
}
|
|
2712
3041
|
if (!this.isVoidElement(name)) {
|
|
2713
3042
|
this.stack.unshift(name);
|
|
2714
3043
|
if (this.htmlMode) {
|
|
2715
|
-
if (
|
|
2716
|
-
this.foreignContext.unshift(
|
|
3044
|
+
if (name === "svg") {
|
|
3045
|
+
this.foreignContext.unshift(ForeignContext.Svg);
|
|
3046
|
+
} else if (name === "math") {
|
|
3047
|
+
this.foreignContext.unshift(ForeignContext.MathML);
|
|
2717
3048
|
} else if (htmlIntegrationElements.has(name)) {
|
|
2718
|
-
this.foreignContext.unshift(
|
|
3049
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2719
3050
|
}
|
|
2720
3051
|
}
|
|
2721
3052
|
}
|
|
2722
|
-
|
|
3053
|
+
this.cbs.onopentagname?.(name);
|
|
2723
3054
|
if (this.cbs.onopentag)
|
|
2724
3055
|
this.attribs = {};
|
|
2725
3056
|
}
|
|
2726
3057
|
endOpenTag(isImplied) {
|
|
2727
|
-
var _a3, _b;
|
|
2728
3058
|
this.startIndex = this.openTagStart;
|
|
2729
3059
|
if (this.attribs) {
|
|
2730
|
-
|
|
3060
|
+
this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);
|
|
2731
3061
|
this.attribs = null;
|
|
2732
3062
|
}
|
|
2733
3063
|
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
|
|
@@ -2735,80 +3065,107 @@ var Parser = class {
|
|
|
2735
3065
|
}
|
|
2736
3066
|
this.tagname = "";
|
|
2737
3067
|
}
|
|
2738
|
-
/**
|
|
3068
|
+
/**
|
|
3069
|
+
* @param endIndex End index for the current parser event.
|
|
3070
|
+
* @internal
|
|
3071
|
+
*/
|
|
2739
3072
|
onopentagend(endIndex) {
|
|
2740
3073
|
this.endIndex = endIndex;
|
|
2741
3074
|
this.endOpenTag(false);
|
|
2742
3075
|
this.startIndex = endIndex + 1;
|
|
2743
3076
|
}
|
|
2744
|
-
/**
|
|
3077
|
+
/**
|
|
3078
|
+
* @param start Start index for the current parser event.
|
|
3079
|
+
* @param endIndex End index for the current parser event.
|
|
3080
|
+
* @internal
|
|
3081
|
+
*/
|
|
2745
3082
|
onclosetag(start, endIndex) {
|
|
2746
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h;
|
|
2747
3083
|
this.endIndex = endIndex;
|
|
2748
|
-
|
|
2749
|
-
if (this.lowerCaseTagNames) {
|
|
2750
|
-
name = name.toLowerCase();
|
|
2751
|
-
}
|
|
2752
|
-
if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
|
|
2753
|
-
this.foreignContext.shift();
|
|
2754
|
-
}
|
|
3084
|
+
const name = this.readTagName(start, endIndex);
|
|
2755
3085
|
if (!this.isVoidElement(name)) {
|
|
2756
3086
|
const pos = this.stack.indexOf(name);
|
|
2757
3087
|
if (pos !== -1) {
|
|
2758
|
-
for (let index = 0; index
|
|
2759
|
-
|
|
2760
|
-
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
|
|
3088
|
+
for (let index = 0; index < pos; index++) {
|
|
3089
|
+
this.popElement(true);
|
|
2761
3090
|
}
|
|
3091
|
+
this.popElement(false);
|
|
2762
3092
|
} else if (this.htmlMode && name === "p") {
|
|
2763
3093
|
this.emitOpenTag("p");
|
|
2764
3094
|
this.closeCurrentTag(true);
|
|
2765
3095
|
}
|
|
2766
3096
|
} else if (this.htmlMode && name === "br") {
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
3097
|
+
this.cbs.onopentagname?.("br");
|
|
3098
|
+
this.cbs.onopentag?.("br", {}, true);
|
|
3099
|
+
this.cbs.onclosetag?.("br", false);
|
|
2770
3100
|
}
|
|
2771
3101
|
this.startIndex = endIndex + 1;
|
|
2772
3102
|
}
|
|
2773
|
-
/**
|
|
3103
|
+
/**
|
|
3104
|
+
* @param endIndex End index for the current parser event.
|
|
3105
|
+
* @internal
|
|
3106
|
+
*/
|
|
2774
3107
|
onselfclosingtag(endIndex) {
|
|
2775
3108
|
this.endIndex = endIndex;
|
|
2776
|
-
if (this.recognizeSelfClosing || this.
|
|
3109
|
+
if (this.recognizeSelfClosing || this.isInForeignContext()) {
|
|
2777
3110
|
this.closeCurrentTag(false);
|
|
2778
3111
|
this.startIndex = endIndex + 1;
|
|
2779
3112
|
} else {
|
|
2780
3113
|
this.onopentagend(endIndex);
|
|
2781
3114
|
}
|
|
2782
3115
|
}
|
|
3116
|
+
/**
|
|
3117
|
+
* Pop the top element off the stack, emit a close event, and maintain
|
|
3118
|
+
* the foreign context stack.
|
|
3119
|
+
* @param implied Whether this close is implied (not from an explicit end tag).
|
|
3120
|
+
*/
|
|
3121
|
+
popElement(implied) {
|
|
3122
|
+
const element = this.stack.shift();
|
|
3123
|
+
if (this.htmlMode && (foreignContextElements.has(element) || htmlIntegrationElements.has(element))) {
|
|
3124
|
+
this.foreignContext.shift();
|
|
3125
|
+
}
|
|
3126
|
+
this.cbs.onclosetag?.(element, implied);
|
|
3127
|
+
}
|
|
2783
3128
|
closeCurrentTag(isOpenImplied) {
|
|
2784
|
-
var _a3, _b;
|
|
2785
3129
|
const name = this.tagname;
|
|
2786
3130
|
this.endOpenTag(isOpenImplied);
|
|
2787
3131
|
if (this.stack[0] === name) {
|
|
2788
|
-
|
|
2789
|
-
this.stack.shift();
|
|
3132
|
+
this.popElement(!isOpenImplied);
|
|
2790
3133
|
}
|
|
2791
3134
|
}
|
|
2792
|
-
/**
|
|
3135
|
+
/**
|
|
3136
|
+
* @param start Start index for the current parser event.
|
|
3137
|
+
* @param endIndex End index for the current parser event.
|
|
3138
|
+
* @internal
|
|
3139
|
+
*/
|
|
2793
3140
|
onattribname(start, endIndex) {
|
|
2794
3141
|
this.startIndex = start;
|
|
2795
3142
|
const name = this.getSlice(start, endIndex);
|
|
2796
3143
|
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
|
|
2797
3144
|
}
|
|
2798
|
-
/**
|
|
3145
|
+
/**
|
|
3146
|
+
* @param start Start index for the current parser event.
|
|
3147
|
+
* @param endIndex End index for the current parser event.
|
|
3148
|
+
* @internal
|
|
3149
|
+
*/
|
|
2799
3150
|
onattribdata(start, endIndex) {
|
|
2800
3151
|
this.attribvalue += this.getSlice(start, endIndex);
|
|
2801
3152
|
}
|
|
2802
|
-
/**
|
|
3153
|
+
/**
|
|
3154
|
+
* @param cp Current Unicode code point.
|
|
3155
|
+
* @internal
|
|
3156
|
+
*/
|
|
2803
3157
|
onattribentity(cp) {
|
|
2804
3158
|
this.attribvalue += fromCodePoint(cp);
|
|
2805
3159
|
}
|
|
2806
|
-
/**
|
|
3160
|
+
/**
|
|
3161
|
+
* @param quote Quote type used for the current attribute.
|
|
3162
|
+
* @param endIndex End index for the current parser event.
|
|
3163
|
+
* @internal
|
|
3164
|
+
*/
|
|
2807
3165
|
onattribend(quote2, endIndex) {
|
|
2808
|
-
var _a3, _b;
|
|
2809
3166
|
this.endIndex = endIndex;
|
|
2810
|
-
|
|
2811
|
-
if (this.attribs && !Object.
|
|
3167
|
+
this.cbs.onattribute?.(this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
|
|
3168
|
+
if (this.attribs && !Object.hasOwn(this.attribs, this.attribname)) {
|
|
2812
3169
|
this.attribs[this.attribname] = this.attribvalue;
|
|
2813
3170
|
}
|
|
2814
3171
|
this.attribvalue = "";
|
|
@@ -2821,17 +3178,25 @@ var Parser = class {
|
|
|
2821
3178
|
}
|
|
2822
3179
|
return name;
|
|
2823
3180
|
}
|
|
2824
|
-
/**
|
|
3181
|
+
/**
|
|
3182
|
+
* @param start Start index for the current parser event.
|
|
3183
|
+
* @param endIndex End index for the current parser event.
|
|
3184
|
+
* @internal
|
|
3185
|
+
*/
|
|
2825
3186
|
ondeclaration(start, endIndex) {
|
|
2826
3187
|
this.endIndex = endIndex;
|
|
2827
3188
|
const value = this.getSlice(start, endIndex);
|
|
2828
3189
|
if (this.cbs.onprocessinginstruction) {
|
|
2829
|
-
const name = this.getInstructionName(value);
|
|
3190
|
+
const name = this.htmlMode ? this.lowerCaseTagNames ? DOCUMENT_TYPE : value.slice(0, DOCUMENT_TYPE.length) : this.getInstructionName(value);
|
|
2830
3191
|
this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
|
|
2831
3192
|
}
|
|
2832
3193
|
this.startIndex = endIndex + 1;
|
|
2833
3194
|
}
|
|
2834
|
-
/**
|
|
3195
|
+
/**
|
|
3196
|
+
* @param start Start index for the current parser event.
|
|
3197
|
+
* @param endIndex End index for the current parser event.
|
|
3198
|
+
* @internal
|
|
3199
|
+
*/
|
|
2835
3200
|
onprocessinginstruction(start, endIndex) {
|
|
2836
3201
|
this.endIndex = endIndex;
|
|
2837
3202
|
const value = this.getSlice(start, endIndex);
|
|
@@ -2841,57 +3206,66 @@ var Parser = class {
|
|
|
2841
3206
|
}
|
|
2842
3207
|
this.startIndex = endIndex + 1;
|
|
2843
3208
|
}
|
|
2844
|
-
/**
|
|
3209
|
+
/**
|
|
3210
|
+
* @param start Start index for the current parser event.
|
|
3211
|
+
* @param endIndex End index for the current parser event.
|
|
3212
|
+
* @param offset Offset applied when computing parser indices.
|
|
3213
|
+
* @internal
|
|
3214
|
+
*/
|
|
2845
3215
|
oncomment(start, endIndex, offset) {
|
|
2846
|
-
var _a3, _b, _c, _d;
|
|
2847
3216
|
this.endIndex = endIndex;
|
|
2848
|
-
|
|
2849
|
-
|
|
3217
|
+
this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));
|
|
3218
|
+
this.cbs.oncommentend?.();
|
|
2850
3219
|
this.startIndex = endIndex + 1;
|
|
2851
3220
|
}
|
|
2852
|
-
/**
|
|
3221
|
+
/**
|
|
3222
|
+
* @param start Start index for the current parser event.
|
|
3223
|
+
* @param endIndex End index for the current parser event.
|
|
3224
|
+
* @param offset Offset applied when computing parser indices.
|
|
3225
|
+
* @internal
|
|
3226
|
+
*/
|
|
2853
3227
|
oncdata(start, endIndex, offset) {
|
|
2854
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
2855
3228
|
this.endIndex = endIndex;
|
|
2856
3229
|
const value = this.getSlice(start, endIndex - offset);
|
|
2857
3230
|
if (!this.htmlMode || this.options.recognizeCDATA) {
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
3231
|
+
this.cbs.oncdatastart?.();
|
|
3232
|
+
this.cbs.ontext?.(value);
|
|
3233
|
+
this.cbs.oncdataend?.();
|
|
3234
|
+
} else if (this.isInForeignContext()) {
|
|
3235
|
+
this.cbs.ontext?.(value);
|
|
2861
3236
|
} else {
|
|
2862
|
-
|
|
2863
|
-
|
|
3237
|
+
this.cbs.oncomment?.(`[CDATA[${value}]]`);
|
|
3238
|
+
this.cbs.oncommentend?.();
|
|
2864
3239
|
}
|
|
2865
3240
|
this.startIndex = endIndex + 1;
|
|
2866
3241
|
}
|
|
2867
3242
|
/** @internal */
|
|
2868
3243
|
onend() {
|
|
2869
|
-
var _a3, _b;
|
|
2870
3244
|
if (this.cbs.onclosetag) {
|
|
2871
3245
|
this.endIndex = this.startIndex;
|
|
2872
3246
|
for (let index = 0; index < this.stack.length; index++) {
|
|
2873
3247
|
this.cbs.onclosetag(this.stack[index], true);
|
|
2874
3248
|
}
|
|
2875
3249
|
}
|
|
2876
|
-
|
|
3250
|
+
this.cbs.onend?.();
|
|
2877
3251
|
}
|
|
2878
3252
|
/**
|
|
2879
3253
|
* Resets the parser to a blank state, ready to parse a new HTML document
|
|
2880
3254
|
*/
|
|
2881
3255
|
reset() {
|
|
2882
|
-
|
|
2883
|
-
(_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
3256
|
+
this.cbs.onreset?.();
|
|
2884
3257
|
this.tokenizer.reset();
|
|
2885
3258
|
this.tagname = "";
|
|
2886
3259
|
this.attribname = "";
|
|
3260
|
+
this.attribvalue = "";
|
|
2887
3261
|
this.attribs = null;
|
|
2888
3262
|
this.stack.length = 0;
|
|
2889
3263
|
this.startIndex = 0;
|
|
2890
3264
|
this.endIndex = 0;
|
|
2891
|
-
|
|
3265
|
+
this.cbs.onparserinit?.(this);
|
|
2892
3266
|
this.buffers.length = 0;
|
|
2893
3267
|
this.foreignContext.length = 0;
|
|
2894
|
-
this.foreignContext.unshift(
|
|
3268
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2895
3269
|
this.bufferOffset = 0;
|
|
2896
3270
|
this.writeIndex = 0;
|
|
2897
3271
|
this.ended = false;
|
|
@@ -2899,7 +3273,6 @@ var Parser = class {
|
|
|
2899
3273
|
/**
|
|
2900
3274
|
* Resets the parser, then parses a complete document and
|
|
2901
3275
|
* pushes it to the handler.
|
|
2902
|
-
*
|
|
2903
3276
|
* @param data Document to parse.
|
|
2904
3277
|
*/
|
|
2905
3278
|
parseComplete(data) {
|
|
@@ -2907,6 +3280,9 @@ var Parser = class {
|
|
|
2907
3280
|
this.end(data);
|
|
2908
3281
|
}
|
|
2909
3282
|
getSlice(start, end) {
|
|
3283
|
+
if (start === end) {
|
|
3284
|
+
return "";
|
|
3285
|
+
}
|
|
2910
3286
|
while (start - this.bufferOffset >= this.buffers[0].length) {
|
|
2911
3287
|
this.shiftBuffer();
|
|
2912
3288
|
}
|
|
@@ -2924,13 +3300,11 @@ var Parser = class {
|
|
|
2924
3300
|
}
|
|
2925
3301
|
/**
|
|
2926
3302
|
* Parses a chunk of data and calls the corresponding callbacks.
|
|
2927
|
-
*
|
|
2928
3303
|
* @param chunk Chunk to parse.
|
|
2929
3304
|
*/
|
|
2930
3305
|
write(chunk) {
|
|
2931
|
-
var _a3, _b;
|
|
2932
3306
|
if (this.ended) {
|
|
2933
|
-
|
|
3307
|
+
this.cbs.onerror?.(new Error(".write() after done!"));
|
|
2934
3308
|
return;
|
|
2935
3309
|
}
|
|
2936
3310
|
this.buffers.push(chunk);
|
|
@@ -2941,13 +3315,11 @@ var Parser = class {
|
|
|
2941
3315
|
}
|
|
2942
3316
|
/**
|
|
2943
3317
|
* Parses the end of the buffer and clears the stack, calls onend.
|
|
2944
|
-
*
|
|
2945
3318
|
* @param chunk Optional final chunk to parse.
|
|
2946
3319
|
*/
|
|
2947
3320
|
end(chunk) {
|
|
2948
|
-
var _a3, _b;
|
|
2949
3321
|
if (this.ended) {
|
|
2950
|
-
|
|
3322
|
+
this.cbs.onerror?.(new Error(".end() after done!"));
|
|
2951
3323
|
return;
|
|
2952
3324
|
}
|
|
2953
3325
|
if (chunk)
|
|
@@ -2972,27 +3344,9 @@ var Parser = class {
|
|
|
2972
3344
|
if (this.ended)
|
|
2973
3345
|
this.tokenizer.end();
|
|
2974
3346
|
}
|
|
2975
|
-
/**
|
|
2976
|
-
* Alias of `write`, for backwards compatibility.
|
|
2977
|
-
*
|
|
2978
|
-
* @param chunk Chunk to parse.
|
|
2979
|
-
* @deprecated
|
|
2980
|
-
*/
|
|
2981
|
-
parseChunk(chunk) {
|
|
2982
|
-
this.write(chunk);
|
|
2983
|
-
}
|
|
2984
|
-
/**
|
|
2985
|
-
* Alias of `end`, for backwards compatibility.
|
|
2986
|
-
*
|
|
2987
|
-
* @param chunk Optional final chunk to parse.
|
|
2988
|
-
* @deprecated
|
|
2989
|
-
*/
|
|
2990
|
-
done(chunk) {
|
|
2991
|
-
this.end(chunk);
|
|
2992
|
-
}
|
|
2993
3347
|
};
|
|
2994
3348
|
|
|
2995
|
-
// node_modules/.pnpm/domelementtype@
|
|
3349
|
+
// node_modules/.pnpm/domelementtype@3.0.0/node_modules/domelementtype/dist/index.js
|
|
2996
3350
|
var ElementType;
|
|
2997
3351
|
(function(ElementType2) {
|
|
2998
3352
|
ElementType2["Root"] = "root";
|
|
@@ -3005,8 +3359,8 @@ var ElementType;
|
|
|
3005
3359
|
ElementType2["CDATA"] = "cdata";
|
|
3006
3360
|
ElementType2["Doctype"] = "doctype";
|
|
3007
3361
|
})(ElementType || (ElementType = {}));
|
|
3008
|
-
function isTag(
|
|
3009
|
-
return
|
|
3362
|
+
function isTag(element) {
|
|
3363
|
+
return element.type === ElementType.Tag || element.type === ElementType.Script || element.type === ElementType.Style;
|
|
3010
3364
|
}
|
|
3011
3365
|
var Root = ElementType.Root;
|
|
3012
3366
|
var Text = ElementType.Text;
|
|
@@ -3018,15 +3372,18 @@ var Tag = ElementType.Tag;
|
|
|
3018
3372
|
var CDATA = ElementType.CDATA;
|
|
3019
3373
|
var Doctype = ElementType.Doctype;
|
|
3020
3374
|
|
|
3021
|
-
// node_modules/.pnpm/domhandler@
|
|
3375
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/node.js
|
|
3022
3376
|
var Node = class {
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3377
|
+
/** Parent of the node */
|
|
3378
|
+
parent = null;
|
|
3379
|
+
/** Previous sibling */
|
|
3380
|
+
prev = null;
|
|
3381
|
+
/** Next sibling */
|
|
3382
|
+
next = null;
|
|
3383
|
+
/** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
|
|
3384
|
+
startIndex = null;
|
|
3385
|
+
/** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
|
|
3386
|
+
endIndex = null;
|
|
3030
3387
|
// Read-write aliases for properties
|
|
3031
3388
|
/**
|
|
3032
3389
|
* Same as {@link parent}.
|
|
@@ -3045,8 +3402,8 @@ var Node = class {
|
|
|
3045
3402
|
get previousSibling() {
|
|
3046
3403
|
return this.prev;
|
|
3047
3404
|
}
|
|
3048
|
-
set previousSibling(
|
|
3049
|
-
this.prev =
|
|
3405
|
+
set previousSibling(previous) {
|
|
3406
|
+
this.prev = previous;
|
|
3050
3407
|
}
|
|
3051
3408
|
/**
|
|
3052
3409
|
* Same as {@link next}.
|
|
@@ -3060,7 +3417,6 @@ var Node = class {
|
|
|
3060
3417
|
}
|
|
3061
3418
|
/**
|
|
3062
3419
|
* Clone this node, and optionally its children.
|
|
3063
|
-
*
|
|
3064
3420
|
* @param recursive Clone child nodes as well.
|
|
3065
3421
|
* @returns A clone of the node.
|
|
3066
3422
|
*/
|
|
@@ -3069,6 +3425,7 @@ var Node = class {
|
|
|
3069
3425
|
}
|
|
3070
3426
|
};
|
|
3071
3427
|
var DataNode = class extends Node {
|
|
3428
|
+
data;
|
|
3072
3429
|
/**
|
|
3073
3430
|
* @param data The content of the data node
|
|
3074
3431
|
*/
|
|
@@ -3088,34 +3445,36 @@ var DataNode = class extends Node {
|
|
|
3088
3445
|
}
|
|
3089
3446
|
};
|
|
3090
3447
|
var Text2 = class extends DataNode {
|
|
3091
|
-
|
|
3092
|
-
super(...arguments);
|
|
3093
|
-
this.type = ElementType.Text;
|
|
3094
|
-
}
|
|
3448
|
+
type = ElementType.Text;
|
|
3095
3449
|
get nodeType() {
|
|
3096
3450
|
return 3;
|
|
3097
3451
|
}
|
|
3098
3452
|
};
|
|
3099
3453
|
var Comment2 = class extends DataNode {
|
|
3100
|
-
|
|
3101
|
-
super(...arguments);
|
|
3102
|
-
this.type = ElementType.Comment;
|
|
3103
|
-
}
|
|
3454
|
+
type = ElementType.Comment;
|
|
3104
3455
|
get nodeType() {
|
|
3105
3456
|
return 8;
|
|
3106
3457
|
}
|
|
3107
3458
|
};
|
|
3108
3459
|
var ProcessingInstruction = class extends DataNode {
|
|
3460
|
+
type = ElementType.Directive;
|
|
3461
|
+
name;
|
|
3109
3462
|
constructor(name, data) {
|
|
3110
3463
|
super(data);
|
|
3111
3464
|
this.name = name;
|
|
3112
|
-
this.type = ElementType.Directive;
|
|
3113
3465
|
}
|
|
3114
3466
|
get nodeType() {
|
|
3115
3467
|
return 1;
|
|
3116
3468
|
}
|
|
3469
|
+
/** If this is a doctype, the document type name (parse5 only). */
|
|
3470
|
+
"x-name";
|
|
3471
|
+
/** If this is a doctype, the document type public identifier (parse5 only). */
|
|
3472
|
+
"x-publicId";
|
|
3473
|
+
/** If this is a doctype, the document type system identifier (parse5 only). */
|
|
3474
|
+
"x-systemId";
|
|
3117
3475
|
};
|
|
3118
3476
|
var NodeWithChildren = class extends Node {
|
|
3477
|
+
children;
|
|
3119
3478
|
/**
|
|
3120
3479
|
* @param children Children of the node. Only certain node types can have children.
|
|
3121
3480
|
*/
|
|
@@ -3126,8 +3485,7 @@ var NodeWithChildren = class extends Node {
|
|
|
3126
3485
|
// Aliases
|
|
3127
3486
|
/** First child of the node. */
|
|
3128
3487
|
get firstChild() {
|
|
3129
|
-
|
|
3130
|
-
return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
|
|
3488
|
+
return this.children[0] ?? null;
|
|
3131
3489
|
}
|
|
3132
3490
|
/** Last child of the node. */
|
|
3133
3491
|
get lastChild() {
|
|
@@ -3145,28 +3503,26 @@ var NodeWithChildren = class extends Node {
|
|
|
3145
3503
|
}
|
|
3146
3504
|
};
|
|
3147
3505
|
var CDATA2 = class extends NodeWithChildren {
|
|
3148
|
-
|
|
3149
|
-
super(...arguments);
|
|
3150
|
-
this.type = ElementType.CDATA;
|
|
3151
|
-
}
|
|
3506
|
+
type = ElementType.CDATA;
|
|
3152
3507
|
get nodeType() {
|
|
3153
3508
|
return 4;
|
|
3154
3509
|
}
|
|
3155
3510
|
};
|
|
3156
3511
|
var Document = class extends NodeWithChildren {
|
|
3157
|
-
|
|
3158
|
-
super(...arguments);
|
|
3159
|
-
this.type = ElementType.Root;
|
|
3160
|
-
}
|
|
3512
|
+
type = ElementType.Root;
|
|
3161
3513
|
get nodeType() {
|
|
3162
3514
|
return 9;
|
|
3163
3515
|
}
|
|
3164
3516
|
};
|
|
3165
3517
|
var Element = class extends NodeWithChildren {
|
|
3518
|
+
name;
|
|
3519
|
+
attribs;
|
|
3520
|
+
type;
|
|
3166
3521
|
/**
|
|
3167
3522
|
* @param name Name of the tag, eg. `div`, `span`.
|
|
3168
3523
|
* @param attribs Object mapping attribute names to attribute values.
|
|
3169
3524
|
* @param children Children of the node.
|
|
3525
|
+
* @param type Node type used for the new node instance.
|
|
3170
3526
|
*/
|
|
3171
3527
|
constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
|
|
3172
3528
|
super(children);
|
|
@@ -3189,16 +3545,19 @@ var Element = class extends NodeWithChildren {
|
|
|
3189
3545
|
this.name = name;
|
|
3190
3546
|
}
|
|
3191
3547
|
get attributes() {
|
|
3192
|
-
return Object.keys(this.attribs).map((name) => {
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3548
|
+
return Object.keys(this.attribs).map((name) => ({
|
|
3549
|
+
name,
|
|
3550
|
+
value: this.attribs[name],
|
|
3551
|
+
namespace: this["x-attribsNamespace"]?.[name],
|
|
3552
|
+
prefix: this["x-attribsPrefix"]?.[name]
|
|
3553
|
+
}));
|
|
3554
|
+
}
|
|
3555
|
+
/** Element namespace (parse5 only). */
|
|
3556
|
+
namespace;
|
|
3557
|
+
/** Element attribute namespaces (parse5 only). */
|
|
3558
|
+
"x-attribsNamespace";
|
|
3559
|
+
/** Element attribute namespace-related prefixes (parse5 only). */
|
|
3560
|
+
"x-attribsPrefix";
|
|
3202
3561
|
};
|
|
3203
3562
|
function isTag2(node) {
|
|
3204
3563
|
return isTag(node);
|
|
@@ -3227,7 +3586,9 @@ function cloneNode(node, recursive = false) {
|
|
|
3227
3586
|
} else if (isTag2(node)) {
|
|
3228
3587
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3229
3588
|
const clone = new Element(node.name, { ...node.attribs }, children);
|
|
3230
|
-
|
|
3589
|
+
for (const child of children) {
|
|
3590
|
+
child.parent = clone;
|
|
3591
|
+
}
|
|
3231
3592
|
if (node.namespace != null) {
|
|
3232
3593
|
clone.namespace = node.namespace;
|
|
3233
3594
|
}
|
|
@@ -3241,12 +3602,16 @@ function cloneNode(node, recursive = false) {
|
|
|
3241
3602
|
} else if (isCDATA(node)) {
|
|
3242
3603
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3243
3604
|
const clone = new CDATA2(children);
|
|
3244
|
-
|
|
3605
|
+
for (const child of children) {
|
|
3606
|
+
child.parent = clone;
|
|
3607
|
+
}
|
|
3245
3608
|
result = clone;
|
|
3246
3609
|
} else if (isDocument(node)) {
|
|
3247
3610
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3248
3611
|
const clone = new Document(children);
|
|
3249
|
-
|
|
3612
|
+
for (const child of children) {
|
|
3613
|
+
child.parent = clone;
|
|
3614
|
+
}
|
|
3250
3615
|
if (node["x-mode"]) {
|
|
3251
3616
|
clone["x-mode"] = node["x-mode"];
|
|
3252
3617
|
}
|
|
@@ -3271,43 +3636,55 @@ function cloneNode(node, recursive = false) {
|
|
|
3271
3636
|
}
|
|
3272
3637
|
function cloneChildren(childs) {
|
|
3273
3638
|
const children = childs.map((child) => cloneNode(child, true));
|
|
3274
|
-
for (let
|
|
3275
|
-
children[
|
|
3276
|
-
children[
|
|
3639
|
+
for (let index = 1; index < children.length; index++) {
|
|
3640
|
+
children[index].prev = children[index - 1];
|
|
3641
|
+
children[index - 1].next = children[index];
|
|
3277
3642
|
}
|
|
3278
3643
|
return children;
|
|
3279
3644
|
}
|
|
3280
3645
|
|
|
3281
|
-
// node_modules/.pnpm/domhandler@
|
|
3282
|
-
var
|
|
3646
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/index.js
|
|
3647
|
+
var defaultOptions = {
|
|
3283
3648
|
withStartIndices: false,
|
|
3284
3649
|
withEndIndices: false,
|
|
3285
3650
|
xmlMode: false
|
|
3286
3651
|
};
|
|
3287
3652
|
var DomHandler = class {
|
|
3653
|
+
/** The elements of the DOM */
|
|
3654
|
+
dom = [];
|
|
3655
|
+
/** The root element for the DOM */
|
|
3656
|
+
root = new Document(this.dom);
|
|
3657
|
+
/** Called once parsing has completed. */
|
|
3658
|
+
callback;
|
|
3659
|
+
/** Settings for the handler. */
|
|
3660
|
+
options;
|
|
3661
|
+
/** Callback whenever a tag is closed. */
|
|
3662
|
+
elementCB;
|
|
3663
|
+
/** Indicated whether parsing has been completed. */
|
|
3664
|
+
done = false;
|
|
3665
|
+
/** Stack of open tags. */
|
|
3666
|
+
tagStack = [this.root];
|
|
3667
|
+
/** A data node that is still being written to. */
|
|
3668
|
+
lastNode = null;
|
|
3669
|
+
/** Reference to the parser instance. Used for location information. */
|
|
3670
|
+
parser = null;
|
|
3288
3671
|
/**
|
|
3289
3672
|
* @param callback Called once parsing has completed.
|
|
3290
3673
|
* @param options Settings for the handler.
|
|
3291
3674
|
* @param elementCB Callback whenever a tag is closed.
|
|
3292
3675
|
*/
|
|
3293
3676
|
constructor(callback, options, elementCB) {
|
|
3294
|
-
this.dom = [];
|
|
3295
|
-
this.root = new Document(this.dom);
|
|
3296
|
-
this.done = false;
|
|
3297
|
-
this.tagStack = [this.root];
|
|
3298
|
-
this.lastNode = null;
|
|
3299
|
-
this.parser = null;
|
|
3300
3677
|
if (typeof options === "function") {
|
|
3301
3678
|
elementCB = options;
|
|
3302
|
-
options =
|
|
3679
|
+
options = defaultOptions;
|
|
3303
3680
|
}
|
|
3304
3681
|
if (typeof callback === "object") {
|
|
3305
3682
|
options = callback;
|
|
3306
3683
|
callback = void 0;
|
|
3307
3684
|
}
|
|
3308
|
-
this.callback = callback
|
|
3309
|
-
this.options = options
|
|
3310
|
-
this.elementCB = elementCB
|
|
3685
|
+
this.callback = callback ?? null;
|
|
3686
|
+
this.options = options ?? defaultOptions;
|
|
3687
|
+
this.elementCB = elementCB ?? null;
|
|
3311
3688
|
}
|
|
3312
3689
|
onparserinit(parser) {
|
|
3313
3690
|
this.parser = parser;
|
|
@@ -3334,12 +3711,12 @@ var DomHandler = class {
|
|
|
3334
3711
|
}
|
|
3335
3712
|
onclosetag() {
|
|
3336
3713
|
this.lastNode = null;
|
|
3337
|
-
const
|
|
3338
|
-
if (this.options.withEndIndices) {
|
|
3339
|
-
|
|
3714
|
+
const element = this.tagStack.pop();
|
|
3715
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3716
|
+
element.endIndex = this.parser.endIndex;
|
|
3340
3717
|
}
|
|
3341
3718
|
if (this.elementCB)
|
|
3342
|
-
this.elementCB(
|
|
3719
|
+
this.elementCB(element);
|
|
3343
3720
|
}
|
|
3344
3721
|
onopentag(name, attribs) {
|
|
3345
3722
|
const type = this.options.xmlMode ? ElementType.Tag : void 0;
|
|
@@ -3351,7 +3728,7 @@ var DomHandler = class {
|
|
|
3351
3728
|
const { lastNode } = this;
|
|
3352
3729
|
if (lastNode && lastNode.type === ElementType.Text) {
|
|
3353
3730
|
lastNode.data += data;
|
|
3354
|
-
if (this.options.withEndIndices) {
|
|
3731
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3355
3732
|
lastNode.endIndex = this.parser.endIndex;
|
|
3356
3733
|
}
|
|
3357
3734
|
} else {
|
|
@@ -3396,10 +3773,10 @@ var DomHandler = class {
|
|
|
3396
3773
|
addNode(node) {
|
|
3397
3774
|
const parent = this.tagStack[this.tagStack.length - 1];
|
|
3398
3775
|
const previousSibling = parent.children[parent.children.length - 1];
|
|
3399
|
-
if (this.options.withStartIndices) {
|
|
3776
|
+
if (this.options.withStartIndices && this.parser) {
|
|
3400
3777
|
node.startIndex = this.parser.startIndex;
|
|
3401
3778
|
}
|
|
3402
|
-
if (this.options.withEndIndices) {
|
|
3779
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3403
3780
|
node.endIndex = this.parser.endIndex;
|
|
3404
3781
|
}
|
|
3405
3782
|
parent.children.push(node);
|
|
@@ -3412,616 +3789,7 @@ var DomHandler = class {
|
|
|
3412
3789
|
}
|
|
3413
3790
|
};
|
|
3414
3791
|
|
|
3415
|
-
// node_modules/.pnpm/
|
|
3416
|
-
var decode_data_html_default = new Uint16Array(
|
|
3417
|
-
// prettier-ignore
|
|
3418
|
-
'\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))
|
|
3419
|
-
);
|
|
3420
|
-
|
|
3421
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
|
|
3422
|
-
var decode_data_xml_default = new Uint16Array(
|
|
3423
|
-
// prettier-ignore
|
|
3424
|
-
"\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
|
|
3425
|
-
);
|
|
3426
|
-
|
|
3427
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
|
|
3428
|
-
var _a2;
|
|
3429
|
-
var decodeMap2 = /* @__PURE__ */ new Map([
|
|
3430
|
-
[0, 65533],
|
|
3431
|
-
// C1 Unicode control character reference replacements
|
|
3432
|
-
[128, 8364],
|
|
3433
|
-
[130, 8218],
|
|
3434
|
-
[131, 402],
|
|
3435
|
-
[132, 8222],
|
|
3436
|
-
[133, 8230],
|
|
3437
|
-
[134, 8224],
|
|
3438
|
-
[135, 8225],
|
|
3439
|
-
[136, 710],
|
|
3440
|
-
[137, 8240],
|
|
3441
|
-
[138, 352],
|
|
3442
|
-
[139, 8249],
|
|
3443
|
-
[140, 338],
|
|
3444
|
-
[142, 381],
|
|
3445
|
-
[145, 8216],
|
|
3446
|
-
[146, 8217],
|
|
3447
|
-
[147, 8220],
|
|
3448
|
-
[148, 8221],
|
|
3449
|
-
[149, 8226],
|
|
3450
|
-
[150, 8211],
|
|
3451
|
-
[151, 8212],
|
|
3452
|
-
[152, 732],
|
|
3453
|
-
[153, 8482],
|
|
3454
|
-
[154, 353],
|
|
3455
|
-
[155, 8250],
|
|
3456
|
-
[156, 339],
|
|
3457
|
-
[158, 382],
|
|
3458
|
-
[159, 376]
|
|
3459
|
-
]);
|
|
3460
|
-
var fromCodePoint2 = (
|
|
3461
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
|
|
3462
|
-
(_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
|
|
3463
|
-
let output = "";
|
|
3464
|
-
if (codePoint > 65535) {
|
|
3465
|
-
codePoint -= 65536;
|
|
3466
|
-
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
3467
|
-
codePoint = 56320 | codePoint & 1023;
|
|
3468
|
-
}
|
|
3469
|
-
output += String.fromCharCode(codePoint);
|
|
3470
|
-
return output;
|
|
3471
|
-
}
|
|
3472
|
-
);
|
|
3473
|
-
function replaceCodePoint2(codePoint) {
|
|
3474
|
-
var _a3;
|
|
3475
|
-
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
3476
|
-
return 65533;
|
|
3477
|
-
}
|
|
3478
|
-
return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
|
|
3479
|
-
}
|
|
3480
|
-
|
|
3481
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
|
|
3482
|
-
var CharCodes3;
|
|
3483
|
-
(function(CharCodes4) {
|
|
3484
|
-
CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
|
|
3485
|
-
CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
|
|
3486
|
-
CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
|
|
3487
|
-
CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
|
|
3488
|
-
CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
|
|
3489
|
-
CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
|
|
3490
|
-
CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
|
|
3491
|
-
CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
|
|
3492
|
-
CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
|
|
3493
|
-
CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
|
|
3494
|
-
CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
|
|
3495
|
-
CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
|
|
3496
|
-
})(CharCodes3 || (CharCodes3 = {}));
|
|
3497
|
-
var TO_LOWER_BIT2 = 32;
|
|
3498
|
-
var BinTrieFlags2;
|
|
3499
|
-
(function(BinTrieFlags3) {
|
|
3500
|
-
BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
3501
|
-
BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
|
|
3502
|
-
BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
3503
|
-
})(BinTrieFlags2 || (BinTrieFlags2 = {}));
|
|
3504
|
-
function isNumber2(code) {
|
|
3505
|
-
return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
|
|
3506
|
-
}
|
|
3507
|
-
function isHexadecimalCharacter2(code) {
|
|
3508
|
-
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
|
|
3509
|
-
}
|
|
3510
|
-
function isAsciiAlphaNumeric2(code) {
|
|
3511
|
-
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
|
|
3512
|
-
}
|
|
3513
|
-
function isEntityInAttributeInvalidEnd2(code) {
|
|
3514
|
-
return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
|
|
3515
|
-
}
|
|
3516
|
-
var EntityDecoderState2;
|
|
3517
|
-
(function(EntityDecoderState3) {
|
|
3518
|
-
EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
|
|
3519
|
-
EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
|
|
3520
|
-
EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
|
|
3521
|
-
EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
|
|
3522
|
-
EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
|
|
3523
|
-
})(EntityDecoderState2 || (EntityDecoderState2 = {}));
|
|
3524
|
-
var DecodingMode2;
|
|
3525
|
-
(function(DecodingMode3) {
|
|
3526
|
-
DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
|
|
3527
|
-
DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
|
|
3528
|
-
DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
|
|
3529
|
-
})(DecodingMode2 || (DecodingMode2 = {}));
|
|
3530
|
-
var EntityDecoder2 = class {
|
|
3531
|
-
constructor(decodeTree, emitCodePoint, errors) {
|
|
3532
|
-
this.decodeTree = decodeTree;
|
|
3533
|
-
this.emitCodePoint = emitCodePoint;
|
|
3534
|
-
this.errors = errors;
|
|
3535
|
-
this.state = EntityDecoderState2.EntityStart;
|
|
3536
|
-
this.consumed = 1;
|
|
3537
|
-
this.result = 0;
|
|
3538
|
-
this.treeIndex = 0;
|
|
3539
|
-
this.excess = 1;
|
|
3540
|
-
this.decodeMode = DecodingMode2.Strict;
|
|
3541
|
-
}
|
|
3542
|
-
/** Resets the instance to make it reusable. */
|
|
3543
|
-
startEntity(decodeMode) {
|
|
3544
|
-
this.decodeMode = decodeMode;
|
|
3545
|
-
this.state = EntityDecoderState2.EntityStart;
|
|
3546
|
-
this.result = 0;
|
|
3547
|
-
this.treeIndex = 0;
|
|
3548
|
-
this.excess = 1;
|
|
3549
|
-
this.consumed = 1;
|
|
3550
|
-
}
|
|
3551
|
-
/**
|
|
3552
|
-
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
|
3553
|
-
* If the entity is incomplete, the decoder will return -1.
|
|
3554
|
-
*
|
|
3555
|
-
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
3556
|
-
* entity is incomplete, and resume when the next string is written.
|
|
3557
|
-
*
|
|
3558
|
-
* @param string The string containing the entity (or a continuation of the entity).
|
|
3559
|
-
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
3560
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3561
|
-
*/
|
|
3562
|
-
write(str, offset) {
|
|
3563
|
-
switch (this.state) {
|
|
3564
|
-
case EntityDecoderState2.EntityStart: {
|
|
3565
|
-
if (str.charCodeAt(offset) === CharCodes3.NUM) {
|
|
3566
|
-
this.state = EntityDecoderState2.NumericStart;
|
|
3567
|
-
this.consumed += 1;
|
|
3568
|
-
return this.stateNumericStart(str, offset + 1);
|
|
3569
|
-
}
|
|
3570
|
-
this.state = EntityDecoderState2.NamedEntity;
|
|
3571
|
-
return this.stateNamedEntity(str, offset);
|
|
3572
|
-
}
|
|
3573
|
-
case EntityDecoderState2.NumericStart: {
|
|
3574
|
-
return this.stateNumericStart(str, offset);
|
|
3575
|
-
}
|
|
3576
|
-
case EntityDecoderState2.NumericDecimal: {
|
|
3577
|
-
return this.stateNumericDecimal(str, offset);
|
|
3578
|
-
}
|
|
3579
|
-
case EntityDecoderState2.NumericHex: {
|
|
3580
|
-
return this.stateNumericHex(str, offset);
|
|
3581
|
-
}
|
|
3582
|
-
case EntityDecoderState2.NamedEntity: {
|
|
3583
|
-
return this.stateNamedEntity(str, offset);
|
|
3584
|
-
}
|
|
3585
|
-
}
|
|
3586
|
-
}
|
|
3587
|
-
/**
|
|
3588
|
-
* Switches between the numeric decimal and hexadecimal states.
|
|
3589
|
-
*
|
|
3590
|
-
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
3591
|
-
*
|
|
3592
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3593
|
-
* @param offset The current offset.
|
|
3594
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3595
|
-
*/
|
|
3596
|
-
stateNumericStart(str, offset) {
|
|
3597
|
-
if (offset >= str.length) {
|
|
3598
|
-
return -1;
|
|
3599
|
-
}
|
|
3600
|
-
if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
|
|
3601
|
-
this.state = EntityDecoderState2.NumericHex;
|
|
3602
|
-
this.consumed += 1;
|
|
3603
|
-
return this.stateNumericHex(str, offset + 1);
|
|
3604
|
-
}
|
|
3605
|
-
this.state = EntityDecoderState2.NumericDecimal;
|
|
3606
|
-
return this.stateNumericDecimal(str, offset);
|
|
3607
|
-
}
|
|
3608
|
-
addToNumericResult(str, start, end, base) {
|
|
3609
|
-
if (start !== end) {
|
|
3610
|
-
const digitCount = end - start;
|
|
3611
|
-
this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
|
|
3612
|
-
this.consumed += digitCount;
|
|
3613
|
-
}
|
|
3614
|
-
}
|
|
3615
|
-
/**
|
|
3616
|
-
* Parses a hexadecimal numeric entity.
|
|
3617
|
-
*
|
|
3618
|
-
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
3619
|
-
*
|
|
3620
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3621
|
-
* @param offset The current offset.
|
|
3622
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3623
|
-
*/
|
|
3624
|
-
stateNumericHex(str, offset) {
|
|
3625
|
-
const startIdx = offset;
|
|
3626
|
-
while (offset < str.length) {
|
|
3627
|
-
const char = str.charCodeAt(offset);
|
|
3628
|
-
if (isNumber2(char) || isHexadecimalCharacter2(char)) {
|
|
3629
|
-
offset += 1;
|
|
3630
|
-
} else {
|
|
3631
|
-
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3632
|
-
return this.emitNumericEntity(char, 3);
|
|
3633
|
-
}
|
|
3634
|
-
}
|
|
3635
|
-
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3636
|
-
return -1;
|
|
3637
|
-
}
|
|
3638
|
-
/**
|
|
3639
|
-
* Parses a decimal numeric entity.
|
|
3640
|
-
*
|
|
3641
|
-
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
3642
|
-
*
|
|
3643
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3644
|
-
* @param offset The current offset.
|
|
3645
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3646
|
-
*/
|
|
3647
|
-
stateNumericDecimal(str, offset) {
|
|
3648
|
-
const startIdx = offset;
|
|
3649
|
-
while (offset < str.length) {
|
|
3650
|
-
const char = str.charCodeAt(offset);
|
|
3651
|
-
if (isNumber2(char)) {
|
|
3652
|
-
offset += 1;
|
|
3653
|
-
} else {
|
|
3654
|
-
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3655
|
-
return this.emitNumericEntity(char, 2);
|
|
3656
|
-
}
|
|
3657
|
-
}
|
|
3658
|
-
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3659
|
-
return -1;
|
|
3660
|
-
}
|
|
3661
|
-
/**
|
|
3662
|
-
* Validate and emit a numeric entity.
|
|
3663
|
-
*
|
|
3664
|
-
* Implements the logic from the `Hexademical character reference start
|
|
3665
|
-
* state` and `Numeric character reference end state` in the HTML spec.
|
|
3666
|
-
*
|
|
3667
|
-
* @param lastCp The last code point of the entity. Used to see if the
|
|
3668
|
-
* entity was terminated with a semicolon.
|
|
3669
|
-
* @param expectedLength The minimum number of characters that should be
|
|
3670
|
-
* consumed. Used to validate that at least one digit
|
|
3671
|
-
* was consumed.
|
|
3672
|
-
* @returns The number of characters that were consumed.
|
|
3673
|
-
*/
|
|
3674
|
-
emitNumericEntity(lastCp, expectedLength) {
|
|
3675
|
-
var _a3;
|
|
3676
|
-
if (this.consumed <= expectedLength) {
|
|
3677
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3678
|
-
return 0;
|
|
3679
|
-
}
|
|
3680
|
-
if (lastCp === CharCodes3.SEMI) {
|
|
3681
|
-
this.consumed += 1;
|
|
3682
|
-
} else if (this.decodeMode === DecodingMode2.Strict) {
|
|
3683
|
-
return 0;
|
|
3684
|
-
}
|
|
3685
|
-
this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
|
|
3686
|
-
if (this.errors) {
|
|
3687
|
-
if (lastCp !== CharCodes3.SEMI) {
|
|
3688
|
-
this.errors.missingSemicolonAfterCharacterReference();
|
|
3689
|
-
}
|
|
3690
|
-
this.errors.validateNumericCharacterReference(this.result);
|
|
3691
|
-
}
|
|
3692
|
-
return this.consumed;
|
|
3693
|
-
}
|
|
3694
|
-
/**
|
|
3695
|
-
* Parses a named entity.
|
|
3696
|
-
*
|
|
3697
|
-
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
3698
|
-
*
|
|
3699
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3700
|
-
* @param offset The current offset.
|
|
3701
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3702
|
-
*/
|
|
3703
|
-
stateNamedEntity(str, offset) {
|
|
3704
|
-
const { decodeTree } = this;
|
|
3705
|
-
let current = decodeTree[this.treeIndex];
|
|
3706
|
-
let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3707
|
-
for (; offset < str.length; offset++, this.excess++) {
|
|
3708
|
-
const char = str.charCodeAt(offset);
|
|
3709
|
-
this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
3710
|
-
if (this.treeIndex < 0) {
|
|
3711
|
-
return this.result === 0 || // If we are parsing an attribute
|
|
3712
|
-
this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
|
|
3713
|
-
(valueLength === 0 || // And there should be no invalid characters.
|
|
3714
|
-
isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
3715
|
-
}
|
|
3716
|
-
current = decodeTree[this.treeIndex];
|
|
3717
|
-
valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3718
|
-
if (valueLength !== 0) {
|
|
3719
|
-
if (char === CharCodes3.SEMI) {
|
|
3720
|
-
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
3721
|
-
}
|
|
3722
|
-
if (this.decodeMode !== DecodingMode2.Strict) {
|
|
3723
|
-
this.result = this.treeIndex;
|
|
3724
|
-
this.consumed += this.excess;
|
|
3725
|
-
this.excess = 0;
|
|
3726
|
-
}
|
|
3727
|
-
}
|
|
3728
|
-
}
|
|
3729
|
-
return -1;
|
|
3730
|
-
}
|
|
3731
|
-
/**
|
|
3732
|
-
* Emit a named entity that was not terminated with a semicolon.
|
|
3733
|
-
*
|
|
3734
|
-
* @returns The number of characters consumed.
|
|
3735
|
-
*/
|
|
3736
|
-
emitNotTerminatedNamedEntity() {
|
|
3737
|
-
var _a3;
|
|
3738
|
-
const { result, decodeTree } = this;
|
|
3739
|
-
const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3740
|
-
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
3741
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
|
|
3742
|
-
return this.consumed;
|
|
3743
|
-
}
|
|
3744
|
-
/**
|
|
3745
|
-
* Emit a named entity.
|
|
3746
|
-
*
|
|
3747
|
-
* @param result The index of the entity in the decode tree.
|
|
3748
|
-
* @param valueLength The number of bytes in the entity.
|
|
3749
|
-
* @param consumed The number of characters consumed.
|
|
3750
|
-
*
|
|
3751
|
-
* @returns The number of characters consumed.
|
|
3752
|
-
*/
|
|
3753
|
-
emitNamedEntityData(result, valueLength, consumed) {
|
|
3754
|
-
const { decodeTree } = this;
|
|
3755
|
-
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
|
|
3756
|
-
if (valueLength === 3) {
|
|
3757
|
-
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
3758
|
-
}
|
|
3759
|
-
return consumed;
|
|
3760
|
-
}
|
|
3761
|
-
/**
|
|
3762
|
-
* Signal to the parser that the end of the input was reached.
|
|
3763
|
-
*
|
|
3764
|
-
* Remaining data will be emitted and relevant errors will be produced.
|
|
3765
|
-
*
|
|
3766
|
-
* @returns The number of characters consumed.
|
|
3767
|
-
*/
|
|
3768
|
-
end() {
|
|
3769
|
-
var _a3;
|
|
3770
|
-
switch (this.state) {
|
|
3771
|
-
case EntityDecoderState2.NamedEntity: {
|
|
3772
|
-
return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
3773
|
-
}
|
|
3774
|
-
// Otherwise, emit a numeric entity if we have one.
|
|
3775
|
-
case EntityDecoderState2.NumericDecimal: {
|
|
3776
|
-
return this.emitNumericEntity(0, 2);
|
|
3777
|
-
}
|
|
3778
|
-
case EntityDecoderState2.NumericHex: {
|
|
3779
|
-
return this.emitNumericEntity(0, 3);
|
|
3780
|
-
}
|
|
3781
|
-
case EntityDecoderState2.NumericStart: {
|
|
3782
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3783
|
-
return 0;
|
|
3784
|
-
}
|
|
3785
|
-
case EntityDecoderState2.EntityStart: {
|
|
3786
|
-
return 0;
|
|
3787
|
-
}
|
|
3788
|
-
}
|
|
3789
|
-
}
|
|
3790
|
-
};
|
|
3791
|
-
function getDecoder(decodeTree) {
|
|
3792
|
-
let ret = "";
|
|
3793
|
-
const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
|
|
3794
|
-
return function decodeWithTrie(str, decodeMode) {
|
|
3795
|
-
let lastIndex = 0;
|
|
3796
|
-
let offset = 0;
|
|
3797
|
-
while ((offset = str.indexOf("&", offset)) >= 0) {
|
|
3798
|
-
ret += str.slice(lastIndex, offset);
|
|
3799
|
-
decoder.startEntity(decodeMode);
|
|
3800
|
-
const len = decoder.write(
|
|
3801
|
-
str,
|
|
3802
|
-
// Skip the "&"
|
|
3803
|
-
offset + 1
|
|
3804
|
-
);
|
|
3805
|
-
if (len < 0) {
|
|
3806
|
-
lastIndex = offset + decoder.end();
|
|
3807
|
-
break;
|
|
3808
|
-
}
|
|
3809
|
-
lastIndex = offset + len;
|
|
3810
|
-
offset = len === 0 ? lastIndex + 1 : lastIndex;
|
|
3811
|
-
}
|
|
3812
|
-
const result = ret + str.slice(lastIndex);
|
|
3813
|
-
ret = "";
|
|
3814
|
-
return result;
|
|
3815
|
-
};
|
|
3816
|
-
}
|
|
3817
|
-
function determineBranch2(decodeTree, current, nodeIdx, char) {
|
|
3818
|
-
const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
|
|
3819
|
-
const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
|
|
3820
|
-
if (branchCount === 0) {
|
|
3821
|
-
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
|
|
3822
|
-
}
|
|
3823
|
-
if (jumpOffset) {
|
|
3824
|
-
const value = char - jumpOffset;
|
|
3825
|
-
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
|
|
3826
|
-
}
|
|
3827
|
-
let lo = nodeIdx;
|
|
3828
|
-
let hi = lo + branchCount - 1;
|
|
3829
|
-
while (lo <= hi) {
|
|
3830
|
-
const mid = lo + hi >>> 1;
|
|
3831
|
-
const midVal = decodeTree[mid];
|
|
3832
|
-
if (midVal < char) {
|
|
3833
|
-
lo = mid + 1;
|
|
3834
|
-
} else if (midVal > char) {
|
|
3835
|
-
hi = mid - 1;
|
|
3836
|
-
} else {
|
|
3837
|
-
return decodeTree[mid + branchCount];
|
|
3838
|
-
}
|
|
3839
|
-
}
|
|
3840
|
-
return -1;
|
|
3841
|
-
}
|
|
3842
|
-
var htmlDecoder = getDecoder(decode_data_html_default);
|
|
3843
|
-
var xmlDecoder = getDecoder(decode_data_xml_default);
|
|
3844
|
-
|
|
3845
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
|
|
3846
|
-
function restoreDiff(arr) {
|
|
3847
|
-
for (let i = 1; i < arr.length; i++) {
|
|
3848
|
-
arr[i][0] += arr[i - 1][0] + 1;
|
|
3849
|
-
}
|
|
3850
|
-
return arr;
|
|
3851
|
-
}
|
|
3852
|
-
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"]]));
|
|
3853
|
-
|
|
3854
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
|
|
3855
|
-
var xmlCodeMap = /* @__PURE__ */ new Map([
|
|
3856
|
-
[34, """],
|
|
3857
|
-
[38, "&"],
|
|
3858
|
-
[39, "'"],
|
|
3859
|
-
[60, "<"],
|
|
3860
|
-
[62, ">"]
|
|
3861
|
-
]);
|
|
3862
|
-
var getCodePoint = (
|
|
3863
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
3864
|
-
String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
|
|
3865
|
-
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
3866
|
-
(c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
|
|
3867
|
-
)
|
|
3868
|
-
);
|
|
3869
|
-
function getEscaper(regex, map) {
|
|
3870
|
-
return function escape2(data) {
|
|
3871
|
-
let match;
|
|
3872
|
-
let lastIdx = 0;
|
|
3873
|
-
let result = "";
|
|
3874
|
-
while (match = regex.exec(data)) {
|
|
3875
|
-
if (lastIdx !== match.index) {
|
|
3876
|
-
result += data.substring(lastIdx, match.index);
|
|
3877
|
-
}
|
|
3878
|
-
result += map.get(match[0].charCodeAt(0));
|
|
3879
|
-
lastIdx = match.index + 1;
|
|
3880
|
-
}
|
|
3881
|
-
return result + data.substring(lastIdx);
|
|
3882
|
-
};
|
|
3883
|
-
}
|
|
3884
|
-
var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
3885
|
-
var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3886
|
-
[34, """],
|
|
3887
|
-
[38, "&"],
|
|
3888
|
-
[160, " "]
|
|
3889
|
-
]));
|
|
3890
|
-
var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3891
|
-
[38, "&"],
|
|
3892
|
-
[60, "<"],
|
|
3893
|
-
[62, ">"],
|
|
3894
|
-
[160, " "]
|
|
3895
|
-
]));
|
|
3896
|
-
|
|
3897
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
|
|
3898
|
-
var EntityLevel;
|
|
3899
|
-
(function(EntityLevel2) {
|
|
3900
|
-
EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
|
|
3901
|
-
EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
|
|
3902
|
-
})(EntityLevel || (EntityLevel = {}));
|
|
3903
|
-
var EncodingMode;
|
|
3904
|
-
(function(EncodingMode2) {
|
|
3905
|
-
EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
|
|
3906
|
-
EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
|
|
3907
|
-
EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
|
|
3908
|
-
EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
|
|
3909
|
-
EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
|
|
3910
|
-
})(EncodingMode || (EncodingMode = {}));
|
|
3911
|
-
|
|
3912
|
-
// node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
|
|
3913
|
-
var elementNames = new Map([
|
|
3914
|
-
"altGlyph",
|
|
3915
|
-
"altGlyphDef",
|
|
3916
|
-
"altGlyphItem",
|
|
3917
|
-
"animateColor",
|
|
3918
|
-
"animateMotion",
|
|
3919
|
-
"animateTransform",
|
|
3920
|
-
"clipPath",
|
|
3921
|
-
"feBlend",
|
|
3922
|
-
"feColorMatrix",
|
|
3923
|
-
"feComponentTransfer",
|
|
3924
|
-
"feComposite",
|
|
3925
|
-
"feConvolveMatrix",
|
|
3926
|
-
"feDiffuseLighting",
|
|
3927
|
-
"feDisplacementMap",
|
|
3928
|
-
"feDistantLight",
|
|
3929
|
-
"feDropShadow",
|
|
3930
|
-
"feFlood",
|
|
3931
|
-
"feFuncA",
|
|
3932
|
-
"feFuncB",
|
|
3933
|
-
"feFuncG",
|
|
3934
|
-
"feFuncR",
|
|
3935
|
-
"feGaussianBlur",
|
|
3936
|
-
"feImage",
|
|
3937
|
-
"feMerge",
|
|
3938
|
-
"feMergeNode",
|
|
3939
|
-
"feMorphology",
|
|
3940
|
-
"feOffset",
|
|
3941
|
-
"fePointLight",
|
|
3942
|
-
"feSpecularLighting",
|
|
3943
|
-
"feSpotLight",
|
|
3944
|
-
"feTile",
|
|
3945
|
-
"feTurbulence",
|
|
3946
|
-
"foreignObject",
|
|
3947
|
-
"glyphRef",
|
|
3948
|
-
"linearGradient",
|
|
3949
|
-
"radialGradient",
|
|
3950
|
-
"textPath"
|
|
3951
|
-
].map((val) => [val.toLowerCase(), val]));
|
|
3952
|
-
var attributeNames = new Map([
|
|
3953
|
-
"definitionURL",
|
|
3954
|
-
"attributeName",
|
|
3955
|
-
"attributeType",
|
|
3956
|
-
"baseFrequency",
|
|
3957
|
-
"baseProfile",
|
|
3958
|
-
"calcMode",
|
|
3959
|
-
"clipPathUnits",
|
|
3960
|
-
"diffuseConstant",
|
|
3961
|
-
"edgeMode",
|
|
3962
|
-
"filterUnits",
|
|
3963
|
-
"glyphRef",
|
|
3964
|
-
"gradientTransform",
|
|
3965
|
-
"gradientUnits",
|
|
3966
|
-
"kernelMatrix",
|
|
3967
|
-
"kernelUnitLength",
|
|
3968
|
-
"keyPoints",
|
|
3969
|
-
"keySplines",
|
|
3970
|
-
"keyTimes",
|
|
3971
|
-
"lengthAdjust",
|
|
3972
|
-
"limitingConeAngle",
|
|
3973
|
-
"markerHeight",
|
|
3974
|
-
"markerUnits",
|
|
3975
|
-
"markerWidth",
|
|
3976
|
-
"maskContentUnits",
|
|
3977
|
-
"maskUnits",
|
|
3978
|
-
"numOctaves",
|
|
3979
|
-
"pathLength",
|
|
3980
|
-
"patternContentUnits",
|
|
3981
|
-
"patternTransform",
|
|
3982
|
-
"patternUnits",
|
|
3983
|
-
"pointsAtX",
|
|
3984
|
-
"pointsAtY",
|
|
3985
|
-
"pointsAtZ",
|
|
3986
|
-
"preserveAlpha",
|
|
3987
|
-
"preserveAspectRatio",
|
|
3988
|
-
"primitiveUnits",
|
|
3989
|
-
"refX",
|
|
3990
|
-
"refY",
|
|
3991
|
-
"repeatCount",
|
|
3992
|
-
"repeatDur",
|
|
3993
|
-
"requiredExtensions",
|
|
3994
|
-
"requiredFeatures",
|
|
3995
|
-
"specularConstant",
|
|
3996
|
-
"specularExponent",
|
|
3997
|
-
"spreadMethod",
|
|
3998
|
-
"startOffset",
|
|
3999
|
-
"stdDeviation",
|
|
4000
|
-
"stitchTiles",
|
|
4001
|
-
"surfaceScale",
|
|
4002
|
-
"systemLanguage",
|
|
4003
|
-
"tableValues",
|
|
4004
|
-
"targetX",
|
|
4005
|
-
"targetY",
|
|
4006
|
-
"textLength",
|
|
4007
|
-
"viewBox",
|
|
4008
|
-
"viewTarget",
|
|
4009
|
-
"xChannelSelector",
|
|
4010
|
-
"yChannelSelector",
|
|
4011
|
-
"zoomAndPan"
|
|
4012
|
-
].map((val) => [val.toLowerCase(), val]));
|
|
4013
|
-
|
|
4014
|
-
// node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
|
|
4015
|
-
var DocumentPosition;
|
|
4016
|
-
(function(DocumentPosition2) {
|
|
4017
|
-
DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
|
|
4018
|
-
DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
|
|
4019
|
-
DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
|
|
4020
|
-
DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
|
|
4021
|
-
DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
|
|
4022
|
-
})(DocumentPosition || (DocumentPosition = {}));
|
|
4023
|
-
|
|
4024
|
-
// node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
|
|
3792
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/index.js
|
|
4025
3793
|
function parseDocument(data, options) {
|
|
4026
3794
|
const handler = new DomHandler(void 0, options);
|
|
4027
3795
|
new Parser(handler, options).end(data);
|