| 1 | // π€ markdown-it v14.3.0 (MIT, github.com/markdown-it/markdown-it) β vendored |
| 2 | // single-file ESM bundle: the ONE Markdown parser on web. The feed renders |
| 3 | // through it (markdown.js), and the WYSIWYG composer parses through the same |
| 4 | // configuration (prosemirror-markdown), so what you compose and what the feed |
| 5 | // shows can never disagree. Regenerate on any machine with node: |
| 6 | // |
| 7 | // mkdir /tmp/mdit && cd /tmp/mdit && npm init -y |
| 8 | // npm install markdown-it@14.3.0 esbuild |
| 9 | // printf 'export { default } from "markdown-it";\n' > entry.mjs |
| 10 | // npx esbuild entry.mjs --bundle --format=esm --legal-comments=inline \ |
| 11 | // --outfile=markdown-it.js |
| 12 | // |
| 13 | // then re-add this header. Unminified on purpose (CLAUDE.md: human-manageable; |
| 14 | // a version bump diffs reviewably). Bundled deps: entities (BSD-2-Clause), |
| 15 | // linkify-it, mdurl, punycode.js, uc.micro (MIT). linkify-it is constructed but |
| 16 | // unused β messages autolink through format.js tokenizeText (curated TLDs). |
| 17 | var __defProp = Object.defineProperty; |
| 18 | var __export = (target, all) => { |
| 19 | for (var name in all) |
| 20 | __defProp(target, name, { get: all[name], enumerable: true }); |
| 21 | }; |
| 22 | |
| 23 | // node_modules/markdown-it/lib/common/utils.mjs |
| 24 | var utils_exports = {}; |
| 25 | __export(utils_exports, { |
| 26 | arrayReplaceAt: () => arrayReplaceAt, |
| 27 | asciiTrim: () => asciiTrim, |
| 28 | assign: () => assign, |
| 29 | escapeHtml: () => escapeHtml, |
| 30 | escapeRE: () => escapeRE, |
| 31 | fromCodePoint: () => fromCodePoint2, |
| 32 | has: () => has, |
| 33 | isMdAsciiPunct: () => isMdAsciiPunct, |
| 34 | isPunctChar: () => isPunctChar, |
| 35 | isPunctCharCode: () => isPunctCharCode, |
| 36 | isSpace: () => isSpace, |
| 37 | isString: () => isString, |
| 38 | isValidEntityCode: () => isValidEntityCode, |
| 39 | isWhiteSpace: () => isWhiteSpace, |
| 40 | lib: () => lib, |
| 41 | normalizeReference: () => normalizeReference, |
| 42 | unescapeAll: () => unescapeAll, |
| 43 | unescapeMd: () => unescapeMd |
| 44 | }); |
| 45 | |
| 46 | // node_modules/mdurl/index.mjs |
| 47 | var mdurl_exports = {}; |
| 48 | __export(mdurl_exports, { |
| 49 | decode: () => decode_default, |
| 50 | encode: () => encode_default, |
| 51 | format: () => format, |
| 52 | parse: () => parse_default |
| 53 | }); |
| 54 | |
| 55 | // node_modules/mdurl/lib/decode.mjs |
| 56 | var decodeCache = {}; |
| 57 | function getDecodeCache(exclude) { |
| 58 | let cache = decodeCache[exclude]; |
| 59 | if (cache) { |
| 60 | return cache; |
| 61 | } |
| 62 | cache = decodeCache[exclude] = []; |
| 63 | for (let i = 0; i < 128; i++) { |
| 64 | const ch = String.fromCharCode(i); |
| 65 | cache.push(ch); |
| 66 | } |
| 67 | for (let i = 0; i < exclude.length; i++) { |
| 68 | const ch = exclude.charCodeAt(i); |
| 69 | cache[ch] = "%" + ("0" + ch.toString(16).toUpperCase()).slice(-2); |
| 70 | } |
| 71 | return cache; |
| 72 | } |
| 73 | function decode(string, exclude) { |
| 74 | if (typeof exclude !== "string") { |
| 75 | exclude = decode.defaultChars; |
| 76 | } |
| 77 | const cache = getDecodeCache(exclude); |
| 78 | return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) { |
| 79 | let result = ""; |
| 80 | for (let i = 0, l = seq.length; i < l; i += 3) { |
| 81 | const b1 = parseInt(seq.slice(i + 1, i + 3), 16); |
| 82 | if (b1 < 128) { |
| 83 | result += cache[b1]; |
| 84 | continue; |
| 85 | } |
| 86 | if ((b1 & 224) === 192 && i + 3 < l) { |
| 87 | const b2 = parseInt(seq.slice(i + 4, i + 6), 16); |
| 88 | if ((b2 & 192) === 128) { |
| 89 | const chr = b1 << 6 & 1984 | b2 & 63; |
| 90 | if (chr < 128) { |
| 91 | result += "\uFFFD\uFFFD"; |
| 92 | } else { |
| 93 | result += String.fromCharCode(chr); |
| 94 | } |
| 95 | i += 3; |
| 96 | continue; |
| 97 | } |
| 98 | } |
| 99 | if ((b1 & 240) === 224 && i + 6 < l) { |
| 100 | const b2 = parseInt(seq.slice(i + 4, i + 6), 16); |
| 101 | const b3 = parseInt(seq.slice(i + 7, i + 9), 16); |
| 102 | if ((b2 & 192) === 128 && (b3 & 192) === 128) { |
| 103 | const chr = b1 << 12 & 61440 | b2 << 6 & 4032 | b3 & 63; |
| 104 | if (chr < 2048 || chr >= 55296 && chr <= 57343) { |
| 105 | result += "\uFFFD\uFFFD\uFFFD"; |
| 106 | } else { |
| 107 | result += String.fromCharCode(chr); |
| 108 | } |
| 109 | i += 6; |
| 110 | continue; |
| 111 | } |
| 112 | } |
| 113 | if ((b1 & 248) === 240 && i + 9 < l) { |
| 114 | const b2 = parseInt(seq.slice(i + 4, i + 6), 16); |
| 115 | const b3 = parseInt(seq.slice(i + 7, i + 9), 16); |
| 116 | const b4 = parseInt(seq.slice(i + 10, i + 12), 16); |
| 117 | if ((b2 & 192) === 128 && (b3 & 192) === 128 && (b4 & 192) === 128) { |
| 118 | let chr = b1 << 18 & 1835008 | b2 << 12 & 258048 | b3 << 6 & 4032 | b4 & 63; |
| 119 | if (chr < 65536 || chr > 1114111) { |
| 120 | result += "\uFFFD\uFFFD\uFFFD\uFFFD"; |
| 121 | } else { |
| 122 | chr -= 65536; |
| 123 | result += String.fromCharCode(55296 + (chr >> 10), 56320 + (chr & 1023)); |
| 124 | } |
| 125 | i += 9; |
| 126 | continue; |
| 127 | } |
| 128 | } |
| 129 | result += "\uFFFD"; |
| 130 | } |
| 131 | return result; |
| 132 | }); |
| 133 | } |
| 134 | decode.defaultChars = ";/?:@&=+$,#"; |
| 135 | decode.componentChars = ""; |
| 136 | var decode_default = decode; |
| 137 | |
| 138 | // node_modules/mdurl/lib/encode.mjs |
| 139 | var encodeCache = {}; |
| 140 | function getEncodeCache(exclude) { |
| 141 | let cache = encodeCache[exclude]; |
| 142 | if (cache) { |
| 143 | return cache; |
| 144 | } |
| 145 | cache = encodeCache[exclude] = []; |
| 146 | for (let i = 0; i < 128; i++) { |
| 147 | const ch = String.fromCharCode(i); |
| 148 | if (/^[0-9a-z]$/i.test(ch)) { |
| 149 | cache.push(ch); |
| 150 | } else { |
| 151 | cache.push("%" + ("0" + i.toString(16).toUpperCase()).slice(-2)); |
| 152 | } |
| 153 | } |
| 154 | for (let i = 0; i < exclude.length; i++) { |
| 155 | cache[exclude.charCodeAt(i)] = exclude[i]; |
| 156 | } |
| 157 | return cache; |
| 158 | } |
| 159 | function encode(string, exclude, keepEscaped) { |
| 160 | if (typeof exclude !== "string") { |
| 161 | keepEscaped = exclude; |
| 162 | exclude = encode.defaultChars; |
| 163 | } |
| 164 | if (typeof keepEscaped === "undefined") { |
| 165 | keepEscaped = true; |
| 166 | } |
| 167 | const cache = getEncodeCache(exclude); |
| 168 | let result = ""; |
| 169 | for (let i = 0, l = string.length; i < l; i++) { |
| 170 | const code2 = string.charCodeAt(i); |
| 171 | if (keepEscaped && code2 === 37 && i + 2 < l) { |
| 172 | if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { |
| 173 | result += string.slice(i, i + 3); |
| 174 | i += 2; |
| 175 | continue; |
| 176 | } |
| 177 | } |
| 178 | if (code2 < 128) { |
| 179 | result += cache[code2]; |
| 180 | continue; |
| 181 | } |
| 182 | if (code2 >= 55296 && code2 <= 57343) { |
| 183 | if (code2 >= 55296 && code2 <= 56319 && i + 1 < l) { |
| 184 | const nextCode = string.charCodeAt(i + 1); |
| 185 | if (nextCode >= 56320 && nextCode <= 57343) { |
| 186 | result += encodeURIComponent(string[i] + string[i + 1]); |
| 187 | i++; |
| 188 | continue; |
| 189 | } |
| 190 | } |
| 191 | result += "%EF%BF%BD"; |
| 192 | continue; |
| 193 | } |
| 194 | result += encodeURIComponent(string[i]); |
| 195 | } |
| 196 | return result; |
| 197 | } |
| 198 | encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; |
| 199 | encode.componentChars = "-_.!~*'()"; |
| 200 | var encode_default = encode; |
| 201 | |
| 202 | // node_modules/mdurl/lib/format.mjs |
| 203 | function format(url) { |
| 204 | let result = ""; |
| 205 | result += url.protocol || ""; |
| 206 | result += url.slashes ? "//" : ""; |
| 207 | result += url.auth ? url.auth + "@" : ""; |
| 208 | if (url.hostname && url.hostname.indexOf(":") !== -1) { |
| 209 | result += "[" + url.hostname + "]"; |
| 210 | } else { |
| 211 | result += url.hostname || ""; |
| 212 | } |
| 213 | result += url.port ? ":" + url.port : ""; |
| 214 | result += url.pathname || ""; |
| 215 | result += url.search || ""; |
| 216 | result += url.hash || ""; |
| 217 | return result; |
| 218 | } |
| 219 | |
| 220 | // node_modules/mdurl/lib/parse.mjs |
| 221 | function Url() { |
| 222 | this.protocol = null; |
| 223 | this.slashes = null; |
| 224 | this.auth = null; |
| 225 | this.port = null; |
| 226 | this.hostname = null; |
| 227 | this.hash = null; |
| 228 | this.search = null; |
| 229 | this.pathname = null; |
| 230 | } |
| 231 | var protocolPattern = /^([a-z0-9.+-]+:)/i; |
| 232 | var portPattern = /:[0-9]*$/; |
| 233 | var simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/; |
| 234 | var delims = ["<", ">", '"', "`", " ", "\r", "\n", " "]; |
| 235 | var unwise = ["{", "}", "|", "\\", "^", "`"].concat(delims); |
| 236 | var autoEscape = ["'"].concat(unwise); |
| 237 | var nonHostChars = ["%", "/", "?", ";", "#"].concat(autoEscape); |
| 238 | var hostEndingChars = ["/", "?", "#"]; |
| 239 | var hostnameMaxLen = 255; |
| 240 | var hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/; |
| 241 | var hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/; |
| 242 | var hostlessProtocol = { |
| 243 | javascript: true, |
| 244 | "javascript:": true |
| 245 | }; |
| 246 | var slashedProtocol = { |
| 247 | http: true, |
| 248 | https: true, |
| 249 | ftp: true, |
| 250 | gopher: true, |
| 251 | file: true, |
| 252 | "http:": true, |
| 253 | "https:": true, |
| 254 | "ftp:": true, |
| 255 | "gopher:": true, |
| 256 | "file:": true |
| 257 | }; |
| 258 | function urlParse(url, slashesDenoteHost) { |
| 259 | if (url && url instanceof Url) return url; |
| 260 | const u = new Url(); |
| 261 | u.parse(url, slashesDenoteHost); |
| 262 | return u; |
| 263 | } |
| 264 | Url.prototype.parse = function(url, slashesDenoteHost) { |
| 265 | let lowerProto, hec, slashes; |
| 266 | let rest = url; |
| 267 | rest = rest.trim(); |
| 268 | if (!slashesDenoteHost && url.split("#").length === 1) { |
| 269 | const simplePath = simplePathPattern.exec(rest); |
| 270 | if (simplePath) { |
| 271 | this.pathname = simplePath[1]; |
| 272 | if (simplePath[2]) { |
| 273 | this.search = simplePath[2]; |
| 274 | } |
| 275 | return this; |
| 276 | } |
| 277 | } |
| 278 | let proto = protocolPattern.exec(rest); |
| 279 | if (proto) { |
| 280 | proto = proto[0]; |
| 281 | lowerProto = proto.toLowerCase(); |
| 282 | this.protocol = proto; |
| 283 | rest = rest.substr(proto.length); |
| 284 | } |
| 285 | if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { |
| 286 | slashes = rest.substr(0, 2) === "//"; |
| 287 | if (slashes && !(proto && hostlessProtocol[proto])) { |
| 288 | rest = rest.substr(2); |
| 289 | this.slashes = true; |
| 290 | } |
| 291 | } |
| 292 | if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) { |
| 293 | let hostEnd = -1; |
| 294 | for (let i = 0; i < hostEndingChars.length; i++) { |
| 295 | hec = rest.indexOf(hostEndingChars[i]); |
| 296 | if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { |
| 297 | hostEnd = hec; |
| 298 | } |
| 299 | } |
| 300 | let auth, atSign; |
| 301 | if (hostEnd === -1) { |
| 302 | atSign = rest.lastIndexOf("@"); |
| 303 | } else { |
| 304 | atSign = rest.lastIndexOf("@", hostEnd); |
| 305 | } |
| 306 | if (atSign !== -1) { |
| 307 | auth = rest.slice(0, atSign); |
| 308 | rest = rest.slice(atSign + 1); |
| 309 | this.auth = auth; |
| 310 | } |
| 311 | hostEnd = -1; |
| 312 | for (let i = 0; i < nonHostChars.length; i++) { |
| 313 | hec = rest.indexOf(nonHostChars[i]); |
| 314 | if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { |
| 315 | hostEnd = hec; |
| 316 | } |
| 317 | } |
| 318 | if (hostEnd === -1) { |
| 319 | hostEnd = rest.length; |
| 320 | } |
| 321 | if (rest[hostEnd - 1] === ":") { |
| 322 | hostEnd--; |
| 323 | } |
| 324 | const host = rest.slice(0, hostEnd); |
| 325 | rest = rest.slice(hostEnd); |
| 326 | this.parseHost(host); |
| 327 | this.hostname = this.hostname || ""; |
| 328 | const ipv6Hostname = this.hostname[0] === "[" && this.hostname[this.hostname.length - 1] === "]"; |
| 329 | if (!ipv6Hostname) { |
| 330 | const hostparts = this.hostname.split(/\./); |
| 331 | for (let i = 0, l = hostparts.length; i < l; i++) { |
| 332 | const part = hostparts[i]; |
| 333 | if (!part) { |
| 334 | continue; |
| 335 | } |
| 336 | if (!part.match(hostnamePartPattern)) { |
| 337 | let newpart = ""; |
| 338 | for (let j = 0, k = part.length; j < k; j++) { |
| 339 | if (part.charCodeAt(j) > 127) { |
| 340 | newpart += "x"; |
| 341 | } else { |
| 342 | newpart += part[j]; |
| 343 | } |
| 344 | } |
| 345 | if (!newpart.match(hostnamePartPattern)) { |
| 346 | const validParts = hostparts.slice(0, i); |
| 347 | const notHost = hostparts.slice(i + 1); |
| 348 | const bit = part.match(hostnamePartStart); |
| 349 | if (bit) { |
| 350 | validParts.push(bit[1]); |
| 351 | notHost.unshift(bit[2]); |
| 352 | } |
| 353 | if (notHost.length) { |
| 354 | rest = notHost.join(".") + rest; |
| 355 | } |
| 356 | this.hostname = validParts.join("."); |
| 357 | break; |
| 358 | } |
| 359 | } |
| 360 | } |
| 361 | } |
| 362 | if (this.hostname.length > hostnameMaxLen) { |
| 363 | this.hostname = ""; |
| 364 | } |
| 365 | if (ipv6Hostname) { |
| 366 | this.hostname = this.hostname.substr(1, this.hostname.length - 2); |
| 367 | } |
| 368 | } |
| 369 | const hash = rest.indexOf("#"); |
| 370 | if (hash !== -1) { |
| 371 | this.hash = rest.substr(hash); |
| 372 | rest = rest.slice(0, hash); |
| 373 | } |
| 374 | const qm = rest.indexOf("?"); |
| 375 | if (qm !== -1) { |
| 376 | this.search = rest.substr(qm); |
| 377 | rest = rest.slice(0, qm); |
| 378 | } |
| 379 | if (rest) { |
| 380 | this.pathname = rest; |
| 381 | } |
| 382 | if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { |
| 383 | this.pathname = ""; |
| 384 | } |
| 385 | return this; |
| 386 | }; |
| 387 | Url.prototype.parseHost = function(host) { |
| 388 | let port = portPattern.exec(host); |
| 389 | if (port) { |
| 390 | port = port[0]; |
| 391 | if (port !== ":") { |
| 392 | this.port = port.substr(1); |
| 393 | } |
| 394 | host = host.substr(0, host.length - port.length); |
| 395 | } |
| 396 | if (host) { |
| 397 | this.hostname = host; |
| 398 | } |
| 399 | }; |
| 400 | var parse_default = urlParse; |
| 401 | |
| 402 | // node_modules/uc.micro/index.mjs |
| 403 | var uc_exports = {}; |
| 404 | __export(uc_exports, { |
| 405 | Any: () => regex_default, |
| 406 | Cc: () => regex_default2, |
| 407 | Cf: () => regex_default3, |
| 408 | P: () => regex_default4, |
| 409 | S: () => regex_default5, |
| 410 | Z: () => regex_default6 |
| 411 | }); |
| 412 | |
| 413 | // node_modules/uc.micro/properties/Any/regex.mjs |
| 414 | var regex_default = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; |
| 415 | |
| 416 | // node_modules/uc.micro/categories/Cc/regex.mjs |
| 417 | var regex_default2 = /[\0-\x1F\x7F-\x9F]/; |
| 418 | |
| 419 | // node_modules/uc.micro/categories/Cf/regex.mjs |
| 420 | var regex_default3 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/; |
| 421 | |
| 422 | // node_modules/uc.micro/categories/P/regex.mjs |
| 423 | var regex_default4 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/; |
| 424 | |
| 425 | // node_modules/uc.micro/categories/S/regex.mjs |
| 426 | var regex_default5 = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/; |
| 427 | |
| 428 | // node_modules/uc.micro/categories/Z/regex.mjs |
| 429 | var regex_default6 = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/; |
| 430 | |
| 431 | // node_modules/entities/lib/esm/generated/decode-data-html.js |
| 432 | var decode_data_html_default = new Uint16Array( |
| 433 | // prettier-ignore |
| 434 | '\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)) |
| 435 | ); |
| 436 | |
| 437 | // node_modules/entities/lib/esm/generated/decode-data-xml.js |
| 438 | var decode_data_xml_default = new Uint16Array( |
| 439 | // prettier-ignore |
| 440 | "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0)) |
| 441 | ); |
| 442 | |
| 443 | // node_modules/entities/lib/esm/decode_codepoint.js |
| 444 | var _a; |
| 445 | var decodeMap = /* @__PURE__ */ new Map([ |
| 446 | [0, 65533], |
| 447 | // C1 Unicode control character reference replacements |
| 448 | [128, 8364], |
| 449 | [130, 8218], |
| 450 | [131, 402], |
| 451 | [132, 8222], |
| 452 | [133, 8230], |
| 453 | [134, 8224], |
| 454 | [135, 8225], |
| 455 | [136, 710], |
| 456 | [137, 8240], |
| 457 | [138, 352], |
| 458 | [139, 8249], |
| 459 | [140, 338], |
| 460 | [142, 381], |
| 461 | [145, 8216], |
| 462 | [146, 8217], |
| 463 | [147, 8220], |
| 464 | [148, 8221], |
| 465 | [149, 8226], |
| 466 | [150, 8211], |
| 467 | [151, 8212], |
| 468 | [152, 732], |
| 469 | [153, 8482], |
| 470 | [154, 353], |
| 471 | [155, 8250], |
| 472 | [156, 339], |
| 473 | [158, 382], |
| 474 | [159, 376] |
| 475 | ]); |
| 476 | var fromCodePoint = ( |
| 477 | // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins |
| 478 | (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) { |
| 479 | let output = ""; |
| 480 | if (codePoint > 65535) { |
| 481 | codePoint -= 65536; |
| 482 | output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296); |
| 483 | codePoint = 56320 | codePoint & 1023; |
| 484 | } |
| 485 | output += String.fromCharCode(codePoint); |
| 486 | return output; |
| 487 | } |
| 488 | ); |
| 489 | function replaceCodePoint(codePoint) { |
| 490 | var _a2; |
| 491 | if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) { |
| 492 | return 65533; |
| 493 | } |
| 494 | return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint; |
| 495 | } |
| 496 | |
| 497 | // node_modules/entities/lib/esm/decode.js |
| 498 | var CharCodes; |
| 499 | (function(CharCodes2) { |
| 500 | CharCodes2[CharCodes2["NUM"] = 35] = "NUM"; |
| 501 | CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI"; |
| 502 | CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS"; |
| 503 | CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO"; |
| 504 | CharCodes2[CharCodes2["NINE"] = 57] = "NINE"; |
| 505 | CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A"; |
| 506 | CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F"; |
| 507 | CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X"; |
| 508 | CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z"; |
| 509 | CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A"; |
| 510 | CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F"; |
| 511 | CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z"; |
| 512 | })(CharCodes || (CharCodes = {})); |
| 513 | var TO_LOWER_BIT = 32; |
| 514 | var BinTrieFlags; |
| 515 | (function(BinTrieFlags2) { |
| 516 | BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; |
| 517 | BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; |
| 518 | BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE"; |
| 519 | })(BinTrieFlags || (BinTrieFlags = {})); |
| 520 | function isNumber(code2) { |
| 521 | return code2 >= CharCodes.ZERO && code2 <= CharCodes.NINE; |
| 522 | } |
| 523 | function isHexadecimalCharacter(code2) { |
| 524 | return code2 >= CharCodes.UPPER_A && code2 <= CharCodes.UPPER_F || code2 >= CharCodes.LOWER_A && code2 <= CharCodes.LOWER_F; |
| 525 | } |
| 526 | function isAsciiAlphaNumeric(code2) { |
| 527 | return code2 >= CharCodes.UPPER_A && code2 <= CharCodes.UPPER_Z || code2 >= CharCodes.LOWER_A && code2 <= CharCodes.LOWER_Z || isNumber(code2); |
| 528 | } |
| 529 | function isEntityInAttributeInvalidEnd(code2) { |
| 530 | return code2 === CharCodes.EQUALS || isAsciiAlphaNumeric(code2); |
| 531 | } |
| 532 | var EntityDecoderState; |
| 533 | (function(EntityDecoderState2) { |
| 534 | EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart"; |
| 535 | EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart"; |
| 536 | EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal"; |
| 537 | EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex"; |
| 538 | EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity"; |
| 539 | })(EntityDecoderState || (EntityDecoderState = {})); |
| 540 | var DecodingMode; |
| 541 | (function(DecodingMode2) { |
| 542 | DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy"; |
| 543 | DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict"; |
| 544 | DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute"; |
| 545 | })(DecodingMode || (DecodingMode = {})); |
| 546 | var EntityDecoder = class { |
| 547 | constructor(decodeTree, emitCodePoint, errors2) { |
| 548 | this.decodeTree = decodeTree; |
| 549 | this.emitCodePoint = emitCodePoint; |
| 550 | this.errors = errors2; |
| 551 | this.state = EntityDecoderState.EntityStart; |
| 552 | this.consumed = 1; |
| 553 | this.result = 0; |
| 554 | this.treeIndex = 0; |
| 555 | this.excess = 1; |
| 556 | this.decodeMode = DecodingMode.Strict; |
| 557 | } |
| 558 | /** Resets the instance to make it reusable. */ |
| 559 | startEntity(decodeMode) { |
| 560 | this.decodeMode = decodeMode; |
| 561 | this.state = EntityDecoderState.EntityStart; |
| 562 | this.result = 0; |
| 563 | this.treeIndex = 0; |
| 564 | this.excess = 1; |
| 565 | this.consumed = 1; |
| 566 | } |
| 567 | /** |
| 568 | * Write an entity to the decoder. This can be called multiple times with partial entities. |
| 569 | * If the entity is incomplete, the decoder will return -1. |
| 570 | * |
| 571 | * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the |
| 572 | * entity is incomplete, and resume when the next string is written. |
| 573 | * |
| 574 | * @param string The string containing the entity (or a continuation of the entity). |
| 575 | * @param offset The offset at which the entity begins. Should be 0 if this is not the first call. |
| 576 | * @returns The number of characters that were consumed, or -1 if the entity is incomplete. |
| 577 | */ |
| 578 | write(str, offset) { |
| 579 | switch (this.state) { |
| 580 | case EntityDecoderState.EntityStart: { |
| 581 | if (str.charCodeAt(offset) === CharCodes.NUM) { |
| 582 | this.state = EntityDecoderState.NumericStart; |
| 583 | this.consumed += 1; |
| 584 | return this.stateNumericStart(str, offset + 1); |
| 585 | } |
| 586 | this.state = EntityDecoderState.NamedEntity; |
| 587 | return this.stateNamedEntity(str, offset); |
| 588 | } |
| 589 | case EntityDecoderState.NumericStart: { |
| 590 | return this.stateNumericStart(str, offset); |
| 591 | } |
| 592 | case EntityDecoderState.NumericDecimal: { |
| 593 | return this.stateNumericDecimal(str, offset); |
| 594 | } |
| 595 | case EntityDecoderState.NumericHex: { |
| 596 | return this.stateNumericHex(str, offset); |
| 597 | } |
| 598 | case EntityDecoderState.NamedEntity: { |
| 599 | return this.stateNamedEntity(str, offset); |
| 600 | } |
| 601 | } |
| 602 | } |
| 603 | /** |
| 604 | * Switches between the numeric decimal and hexadecimal states. |
| 605 | * |
| 606 | * Equivalent to the `Numeric character reference state` in the HTML spec. |
| 607 | * |
| 608 | * @param str The string containing the entity (or a continuation of the entity). |
| 609 | * @param offset The current offset. |
| 610 | * @returns The number of characters that were consumed, or -1 if the entity is incomplete. |
| 611 | */ |
| 612 | stateNumericStart(str, offset) { |
| 613 | if (offset >= str.length) { |
| 614 | return -1; |
| 615 | } |
| 616 | if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) { |
| 617 | this.state = EntityDecoderState.NumericHex; |
| 618 | this.consumed += 1; |
| 619 | return this.stateNumericHex(str, offset + 1); |
| 620 | } |
| 621 | this.state = EntityDecoderState.NumericDecimal; |
| 622 | return this.stateNumericDecimal(str, offset); |
| 623 | } |
| 624 | addToNumericResult(str, start, end, base2) { |
| 625 | if (start !== end) { |
| 626 | const digitCount = end - start; |
| 627 | this.result = this.result * Math.pow(base2, digitCount) + parseInt(str.substr(start, digitCount), base2); |
| 628 | this.consumed += digitCount; |
| 629 | } |
| 630 | } |
| 631 | /** |
| 632 | * Parses a hexadecimal numeric entity. |
| 633 | * |
| 634 | * Equivalent to the `Hexademical character reference state` in the HTML spec. |
| 635 | * |
| 636 | * @param str The string containing the entity (or a continuation of the entity). |
| 637 | * @param offset The current offset. |
| 638 | * @returns The number of characters that were consumed, or -1 if the entity is incomplete. |
| 639 | */ |
| 640 | stateNumericHex(str, offset) { |
| 641 | const startIdx = offset; |
| 642 | while (offset < str.length) { |
| 643 | const char = str.charCodeAt(offset); |
| 644 | if (isNumber(char) || isHexadecimalCharacter(char)) { |
| 645 | offset += 1; |
| 646 | } else { |
| 647 | this.addToNumericResult(str, startIdx, offset, 16); |
| 648 | return this.emitNumericEntity(char, 3); |
| 649 | } |
| 650 | } |
| 651 | this.addToNumericResult(str, startIdx, offset, 16); |
| 652 | return -1; |
| 653 | } |
| 654 | /** |
| 655 | * Parses a decimal numeric entity. |
| 656 | * |
| 657 | * Equivalent to the `Decimal character reference state` in the HTML spec. |
| 658 | * |
| 659 | * @param str The string containing the entity (or a continuation of the entity). |
| 660 | * @param offset The current offset. |
| 661 | * @returns The number of characters that were consumed, or -1 if the entity is incomplete. |
| 662 | */ |
| 663 | stateNumericDecimal(str, offset) { |
| 664 | const startIdx = offset; |
| 665 | while (offset < str.length) { |
| 666 | const char = str.charCodeAt(offset); |
| 667 | if (isNumber(char)) { |
| 668 | offset += 1; |
| 669 | } else { |
| 670 | this.addToNumericResult(str, startIdx, offset, 10); |
| 671 | return this.emitNumericEntity(char, 2); |
| 672 | } |
| 673 | } |
| 674 | this.addToNumericResult(str, startIdx, offset, 10); |
| 675 | return -1; |
| 676 | } |
| 677 | /** |
| 678 | * Validate and emit a numeric entity. |
| 679 | * |
| 680 | * Implements the logic from the `Hexademical character reference start |
| 681 | * state` and `Numeric character reference end state` in the HTML spec. |
| 682 | * |
| 683 | * @param lastCp The last code point of the entity. Used to see if the |
| 684 | * entity was terminated with a semicolon. |
| 685 | * @param expectedLength The minimum number of characters that should be |
| 686 | * consumed. Used to validate that at least one digit |
| 687 | * was consumed. |
| 688 | * @returns The number of characters that were consumed. |
| 689 | */ |
| 690 | emitNumericEntity(lastCp, expectedLength) { |
| 691 | var _a2; |
| 692 | if (this.consumed <= expectedLength) { |
| 693 | (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed); |
| 694 | return 0; |
| 695 | } |
| 696 | if (lastCp === CharCodes.SEMI) { |
| 697 | this.consumed += 1; |
| 698 | } else if (this.decodeMode === DecodingMode.Strict) { |
| 699 | return 0; |
| 700 | } |
| 701 | this.emitCodePoint(replaceCodePoint(this.result), this.consumed); |
| 702 | if (this.errors) { |
| 703 | if (lastCp !== CharCodes.SEMI) { |
| 704 | this.errors.missingSemicolonAfterCharacterReference(); |
| 705 | } |
| 706 | this.errors.validateNumericCharacterReference(this.result); |
| 707 | } |
| 708 | return this.consumed; |
| 709 | } |
| 710 | /** |
| 711 | * Parses a named entity. |
| 712 | * |
| 713 | * Equivalent to the `Named character reference state` in the HTML spec. |
| 714 | * |
| 715 | * @param str The string containing the entity (or a continuation of the entity). |
| 716 | * @param offset The current offset. |
| 717 | * @returns The number of characters that were consumed, or -1 if the entity is incomplete. |
| 718 | */ |
| 719 | stateNamedEntity(str, offset) { |
| 720 | const { decodeTree } = this; |
| 721 | let current = decodeTree[this.treeIndex]; |
| 722 | let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; |
| 723 | for (; offset < str.length; offset++, this.excess++) { |
| 724 | const char = str.charCodeAt(offset); |
| 725 | this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char); |
| 726 | if (this.treeIndex < 0) { |
| 727 | return this.result === 0 || // If we are parsing an attribute |
| 728 | this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity, |
| 729 | (valueLength === 0 || // And there should be no invalid characters. |
| 730 | isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity(); |
| 731 | } |
| 732 | current = decodeTree[this.treeIndex]; |
| 733 | valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; |
| 734 | if (valueLength !== 0) { |
| 735 | if (char === CharCodes.SEMI) { |
| 736 | return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess); |
| 737 | } |
| 738 | if (this.decodeMode !== DecodingMode.Strict) { |
| 739 | this.result = this.treeIndex; |
| 740 | this.consumed += this.excess; |
| 741 | this.excess = 0; |
| 742 | } |
| 743 | } |
| 744 | } |
| 745 | return -1; |
| 746 | } |
| 747 | /** |
| 748 | * Emit a named entity that was not terminated with a semicolon. |
| 749 | * |
| 750 | * @returns The number of characters consumed. |
| 751 | */ |
| 752 | emitNotTerminatedNamedEntity() { |
| 753 | var _a2; |
| 754 | const { result, decodeTree } = this; |
| 755 | const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14; |
| 756 | this.emitNamedEntityData(result, valueLength, this.consumed); |
| 757 | (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference(); |
| 758 | return this.consumed; |
| 759 | } |
| 760 | /** |
| 761 | * Emit a named entity. |
| 762 | * |
| 763 | * @param result The index of the entity in the decode tree. |
| 764 | * @param valueLength The number of bytes in the entity. |
| 765 | * @param consumed The number of characters consumed. |
| 766 | * |
| 767 | * @returns The number of characters consumed. |
| 768 | */ |
| 769 | emitNamedEntityData(result, valueLength, consumed) { |
| 770 | const { decodeTree } = this; |
| 771 | this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed); |
| 772 | if (valueLength === 3) { |
| 773 | this.emitCodePoint(decodeTree[result + 2], consumed); |
| 774 | } |
| 775 | return consumed; |
| 776 | } |
| 777 | /** |
| 778 | * Signal to the parser that the end of the input was reached. |
| 779 | * |
| 780 | * Remaining data will be emitted and relevant errors will be produced. |
| 781 | * |
| 782 | * @returns The number of characters consumed. |
| 783 | */ |
| 784 | end() { |
| 785 | var _a2; |
| 786 | switch (this.state) { |
| 787 | case EntityDecoderState.NamedEntity: { |
| 788 | return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0; |
| 789 | } |
| 790 | // Otherwise, emit a numeric entity if we have one. |
| 791 | case EntityDecoderState.NumericDecimal: { |
| 792 | return this.emitNumericEntity(0, 2); |
| 793 | } |
| 794 | case EntityDecoderState.NumericHex: { |
| 795 | return this.emitNumericEntity(0, 3); |
| 796 | } |
| 797 | case EntityDecoderState.NumericStart: { |
| 798 | (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed); |
| 799 | return 0; |
| 800 | } |
| 801 | case EntityDecoderState.EntityStart: { |
| 802 | return 0; |
| 803 | } |
| 804 | } |
| 805 | } |
| 806 | }; |
| 807 | function getDecoder(decodeTree) { |
| 808 | let ret = ""; |
| 809 | const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint(str)); |
| 810 | return function decodeWithTrie(str, decodeMode) { |
| 811 | let lastIndex = 0; |
| 812 | let offset = 0; |
| 813 | while ((offset = str.indexOf("&", offset)) >= 0) { |
| 814 | ret += str.slice(lastIndex, offset); |
| 815 | decoder.startEntity(decodeMode); |
| 816 | const len = decoder.write( |
| 817 | str, |
| 818 | // Skip the "&" |
| 819 | offset + 1 |
| 820 | ); |
| 821 | if (len < 0) { |
| 822 | lastIndex = offset + decoder.end(); |
| 823 | break; |
| 824 | } |
| 825 | lastIndex = offset + len; |
| 826 | offset = len === 0 ? lastIndex + 1 : lastIndex; |
| 827 | } |
| 828 | const result = ret + str.slice(lastIndex); |
| 829 | ret = ""; |
| 830 | return result; |
| 831 | }; |
| 832 | } |
| 833 | function determineBranch(decodeTree, current, nodeIdx, char) { |
| 834 | const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; |
| 835 | const jumpOffset = current & BinTrieFlags.JUMP_TABLE; |
| 836 | if (branchCount === 0) { |
| 837 | return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; |
| 838 | } |
| 839 | if (jumpOffset) { |
| 840 | const value = char - jumpOffset; |
| 841 | return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1; |
| 842 | } |
| 843 | let lo = nodeIdx; |
| 844 | let hi = lo + branchCount - 1; |
| 845 | while (lo <= hi) { |
| 846 | const mid = lo + hi >>> 1; |
| 847 | const midVal = decodeTree[mid]; |
| 848 | if (midVal < char) { |
| 849 | lo = mid + 1; |
| 850 | } else if (midVal > char) { |
| 851 | hi = mid - 1; |
| 852 | } else { |
| 853 | return decodeTree[mid + branchCount]; |
| 854 | } |
| 855 | } |
| 856 | return -1; |
| 857 | } |
| 858 | var htmlDecoder = getDecoder(decode_data_html_default); |
| 859 | var xmlDecoder = getDecoder(decode_data_xml_default); |
| 860 | function decodeHTML(str, mode = DecodingMode.Legacy) { |
| 861 | return htmlDecoder(str, mode); |
| 862 | } |
| 863 | function decodeHTMLStrict(str) { |
| 864 | return htmlDecoder(str, DecodingMode.Strict); |
| 865 | } |
| 866 | |
| 867 | // node_modules/entities/lib/esm/generated/encode-html.js |
| 868 | function restoreDiff(arr) { |
| 869 | for (let i = 1; i < arr.length; i++) { |
| 870 | arr[i][0] += arr[i - 1][0] + 1; |
| 871 | } |
| 872 | return arr; |
| 873 | } |
| 874 | 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"]])); |
| 875 | |
| 876 | // node_modules/entities/lib/esm/escape.js |
| 877 | var xmlCodeMap = /* @__PURE__ */ new Map([ |
| 878 | [34, """], |
| 879 | [38, "&"], |
| 880 | [39, "'"], |
| 881 | [60, "<"], |
| 882 | [62, ">"] |
| 883 | ]); |
| 884 | var getCodePoint = ( |
| 885 | // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition |
| 886 | String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : ( |
| 887 | // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae |
| 888 | (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index) |
| 889 | ) |
| 890 | ); |
| 891 | function getEscaper(regex, map2) { |
| 892 | return function escape3(data) { |
| 893 | let match2; |
| 894 | let lastIdx = 0; |
| 895 | let result = ""; |
| 896 | while (match2 = regex.exec(data)) { |
| 897 | if (lastIdx !== match2.index) { |
| 898 | result += data.substring(lastIdx, match2.index); |
| 899 | } |
| 900 | result += map2.get(match2[0].charCodeAt(0)); |
| 901 | lastIdx = match2.index + 1; |
| 902 | } |
| 903 | return result + data.substring(lastIdx); |
| 904 | }; |
| 905 | } |
| 906 | var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); |
| 907 | var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([ |
| 908 | [34, """], |
| 909 | [38, "&"], |
| 910 | [160, " "] |
| 911 | ])); |
| 912 | var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([ |
| 913 | [38, "&"], |
| 914 | [60, "<"], |
| 915 | [62, ">"], |
| 916 | [160, " "] |
| 917 | ])); |
| 918 | |
| 919 | // node_modules/entities/lib/esm/index.js |
| 920 | var EntityLevel; |
| 921 | (function(EntityLevel2) { |
| 922 | EntityLevel2[EntityLevel2["XML"] = 0] = "XML"; |
| 923 | EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML"; |
| 924 | })(EntityLevel || (EntityLevel = {})); |
| 925 | var EncodingMode; |
| 926 | (function(EncodingMode2) { |
| 927 | EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8"; |
| 928 | EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII"; |
| 929 | EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive"; |
| 930 | EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute"; |
| 931 | EncodingMode2[EncodingMode2["Text"] = 4] = "Text"; |
| 932 | })(EncodingMode || (EncodingMode = {})); |
| 933 | |
| 934 | // node_modules/markdown-it/lib/common/utils.mjs |
| 935 | function _class(obj) { |
| 936 | return Object.prototype.toString.call(obj); |
| 937 | } |
| 938 | function isString(obj) { |
| 939 | return _class(obj) === "[object String]"; |
| 940 | } |
| 941 | var _hasOwnProperty = Object.prototype.hasOwnProperty; |
| 942 | function has(object, key) { |
| 943 | return _hasOwnProperty.call(object, key); |
| 944 | } |
| 945 | function assign(obj) { |
| 946 | const sources = Array.prototype.slice.call(arguments, 1); |
| 947 | sources.forEach(function(source) { |
| 948 | if (!source) { |
| 949 | return; |
| 950 | } |
| 951 | if (typeof source !== "object") { |
| 952 | throw new TypeError(source + "must be object"); |
| 953 | } |
| 954 | Object.keys(source).forEach(function(key) { |
| 955 | obj[key] = source[key]; |
| 956 | }); |
| 957 | }); |
| 958 | return obj; |
| 959 | } |
| 960 | function arrayReplaceAt(src, pos, newElements) { |
| 961 | return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1)); |
| 962 | } |
| 963 | function isValidEntityCode(c) { |
| 964 | if (c >= 55296 && c <= 57343) { |
| 965 | return false; |
| 966 | } |
| 967 | if (c >= 64976 && c <= 65007) { |
| 968 | return false; |
| 969 | } |
| 970 | if ((c & 65535) === 65535 || (c & 65535) === 65534) { |
| 971 | return false; |
| 972 | } |
| 973 | if (c >= 0 && c <= 8) { |
| 974 | return false; |
| 975 | } |
| 976 | if (c === 11) { |
| 977 | return false; |
| 978 | } |
| 979 | if (c >= 14 && c <= 31) { |
| 980 | return false; |
| 981 | } |
| 982 | if (c >= 127 && c <= 159) { |
| 983 | return false; |
| 984 | } |
| 985 | if (c > 1114111) { |
| 986 | return false; |
| 987 | } |
| 988 | return true; |
| 989 | } |
| 990 | function fromCodePoint2(c) { |
| 991 | if (c > 65535) { |
| 992 | c -= 65536; |
| 993 | const surrogate1 = 55296 + (c >> 10); |
| 994 | const surrogate2 = 56320 + (c & 1023); |
| 995 | return String.fromCharCode(surrogate1, surrogate2); |
| 996 | } |
| 997 | return String.fromCharCode(c); |
| 998 | } |
| 999 | var UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g; |
| 1000 | var ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi; |
| 1001 | var UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + "|" + ENTITY_RE.source, "gi"); |
| 1002 | var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i; |
| 1003 | function replaceEntityPattern(match2, name) { |
| 1004 | if (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) { |
| 1005 | const code2 = name[1].toLowerCase() === "x" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10); |
| 1006 | if (isValidEntityCode(code2)) { |
| 1007 | return fromCodePoint2(code2); |
| 1008 | } |
| 1009 | return match2; |
| 1010 | } |
| 1011 | const decoded = decodeHTML(match2); |
| 1012 | if (decoded !== match2) { |
| 1013 | return decoded; |
| 1014 | } |
| 1015 | return match2; |
| 1016 | } |
| 1017 | function unescapeMd(str) { |
| 1018 | if (str.indexOf("\\") < 0) { |
| 1019 | return str; |
| 1020 | } |
| 1021 | return str.replace(UNESCAPE_MD_RE, "$1"); |
| 1022 | } |
| 1023 | function unescapeAll(str) { |
| 1024 | if (str.indexOf("\\") < 0 && str.indexOf("&") < 0) { |
| 1025 | return str; |
| 1026 | } |
| 1027 | return str.replace(UNESCAPE_ALL_RE, function(match2, escaped, entity2) { |
| 1028 | if (escaped) { |
| 1029 | return escaped; |
| 1030 | } |
| 1031 | return replaceEntityPattern(match2, entity2); |
| 1032 | }); |
| 1033 | } |
| 1034 | var HTML_ESCAPE_TEST_RE = /[&<>"]/; |
| 1035 | var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g; |
| 1036 | var HTML_REPLACEMENTS = { |
| 1037 | "&": "&", |
| 1038 | "<": "<", |
| 1039 | ">": ">", |
| 1040 | '"': """ |
| 1041 | }; |
| 1042 | function replaceUnsafeChar(ch) { |
| 1043 | return HTML_REPLACEMENTS[ch]; |
| 1044 | } |
| 1045 | function escapeHtml(str) { |
| 1046 | if (HTML_ESCAPE_TEST_RE.test(str)) { |
| 1047 | return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar); |
| 1048 | } |
| 1049 | return str; |
| 1050 | } |
| 1051 | var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g; |
| 1052 | function escapeRE(str) { |
| 1053 | return str.replace(REGEXP_ESCAPE_RE, "\\$&"); |
| 1054 | } |
| 1055 | function isSpace(code2) { |
| 1056 | switch (code2) { |
| 1057 | case 9: |
| 1058 | case 32: |
| 1059 | return true; |
| 1060 | } |
| 1061 | return false; |
| 1062 | } |
| 1063 | function isWhiteSpace(code2) { |
| 1064 | if (code2 >= 8192 && code2 <= 8202) { |
| 1065 | return true; |
| 1066 | } |
| 1067 | switch (code2) { |
| 1068 | case 9: |
| 1069 | // \t |
| 1070 | case 10: |
| 1071 | // \n |
| 1072 | case 11: |
| 1073 | // \v |
| 1074 | case 12: |
| 1075 | // \f |
| 1076 | case 13: |
| 1077 | // \r |
| 1078 | case 32: |
| 1079 | case 160: |
| 1080 | case 5760: |
| 1081 | case 8239: |
| 1082 | case 8287: |
| 1083 | case 12288: |
| 1084 | return true; |
| 1085 | } |
| 1086 | return false; |
| 1087 | } |
| 1088 | function isPunctChar(ch) { |
| 1089 | return regex_default4.test(ch) || regex_default5.test(ch); |
| 1090 | } |
| 1091 | function isPunctCharCode(code2) { |
| 1092 | return isPunctChar(fromCodePoint2(code2)); |
| 1093 | } |
| 1094 | function isMdAsciiPunct(ch) { |
| 1095 | switch (ch) { |
| 1096 | case 33: |
| 1097 | case 34: |
| 1098 | case 35: |
| 1099 | case 36: |
| 1100 | case 37: |
| 1101 | case 38: |
| 1102 | case 39: |
| 1103 | case 40: |
| 1104 | case 41: |
| 1105 | case 42: |
| 1106 | case 43: |
| 1107 | case 44: |
| 1108 | case 45: |
| 1109 | case 46: |
| 1110 | case 47: |
| 1111 | case 58: |
| 1112 | case 59: |
| 1113 | case 60: |
| 1114 | case 61: |
| 1115 | case 62: |
| 1116 | case 63: |
| 1117 | case 64: |
| 1118 | case 91: |
| 1119 | case 92: |
| 1120 | case 93: |
| 1121 | case 94: |
| 1122 | case 95: |
| 1123 | case 96: |
| 1124 | case 123: |
| 1125 | case 124: |
| 1126 | case 125: |
| 1127 | case 126: |
| 1128 | return true; |
| 1129 | default: |
| 1130 | return false; |
| 1131 | } |
| 1132 | } |
| 1133 | function normalizeReference(str) { |
| 1134 | str = str.trim().replace(/\s+/g, " "); |
| 1135 | if ("\u1E9E".toLowerCase() === "\u1E7E") { |
| 1136 | str = str.replace(/αΊ/g, "\xDF"); |
| 1137 | } |
| 1138 | return str.toLowerCase().toUpperCase(); |
| 1139 | } |
| 1140 | function isAsciiTrimmable(c) { |
| 1141 | return c === 32 || c === 9 || c === 10 || c === 13; |
| 1142 | } |
| 1143 | function asciiTrim(str) { |
| 1144 | let start = 0; |
| 1145 | for (; start < str.length; start++) { |
| 1146 | if (!isAsciiTrimmable(str.charCodeAt(start))) { |
| 1147 | break; |
| 1148 | } |
| 1149 | } |
| 1150 | let end = str.length - 1; |
| 1151 | for (; end >= start; end--) { |
| 1152 | if (!isAsciiTrimmable(str.charCodeAt(end))) { |
| 1153 | break; |
| 1154 | } |
| 1155 | } |
| 1156 | return str.slice(start, end + 1); |
| 1157 | } |
| 1158 | var lib = { mdurl: mdurl_exports, ucmicro: uc_exports }; |
| 1159 | |
| 1160 | // node_modules/markdown-it/lib/helpers/index.mjs |
| 1161 | var helpers_exports = {}; |
| 1162 | __export(helpers_exports, { |
| 1163 | parseLinkDestination: () => parseLinkDestination, |
| 1164 | parseLinkLabel: () => parseLinkLabel, |
| 1165 | parseLinkTitle: () => parseLinkTitle |
| 1166 | }); |
| 1167 | |
| 1168 | // node_modules/markdown-it/lib/helpers/parse_link_label.mjs |
| 1169 | function parseLinkLabel(state, start, disableNested) { |
| 1170 | let level, found, marker, prevPos; |
| 1171 | const max = state.posMax; |
| 1172 | const oldPos = state.pos; |
| 1173 | state.pos = start + 1; |
| 1174 | level = 1; |
| 1175 | while (state.pos < max) { |
| 1176 | marker = state.src.charCodeAt(state.pos); |
| 1177 | if (marker === 93) { |
| 1178 | level--; |
| 1179 | if (level === 0) { |
| 1180 | found = true; |
| 1181 | break; |
| 1182 | } |
| 1183 | } |
| 1184 | prevPos = state.pos; |
| 1185 | state.md.inline.skipToken(state); |
| 1186 | if (marker === 91) { |
| 1187 | if (prevPos === state.pos - 1) { |
| 1188 | level++; |
| 1189 | } else if (disableNested) { |
| 1190 | state.pos = oldPos; |
| 1191 | return -1; |
| 1192 | } |
| 1193 | } |
| 1194 | } |
| 1195 | let labelEnd = -1; |
| 1196 | if (found) { |
| 1197 | labelEnd = state.pos; |
| 1198 | } |
| 1199 | state.pos = oldPos; |
| 1200 | return labelEnd; |
| 1201 | } |
| 1202 | |
| 1203 | // node_modules/markdown-it/lib/helpers/parse_link_destination.mjs |
| 1204 | function parseLinkDestination(str, start, max) { |
| 1205 | let code2; |
| 1206 | let pos = start; |
| 1207 | const result = { |
| 1208 | ok: false, |
| 1209 | pos: 0, |
| 1210 | str: "" |
| 1211 | }; |
| 1212 | if (str.charCodeAt(pos) === 60) { |
| 1213 | pos++; |
| 1214 | while (pos < max) { |
| 1215 | code2 = str.charCodeAt(pos); |
| 1216 | if (code2 === 10) { |
| 1217 | return result; |
| 1218 | } |
| 1219 | if (code2 === 60) { |
| 1220 | return result; |
| 1221 | } |
| 1222 | if (code2 === 62) { |
| 1223 | result.pos = pos + 1; |
| 1224 | result.str = unescapeAll(str.slice(start + 1, pos)); |
| 1225 | result.ok = true; |
| 1226 | return result; |
| 1227 | } |
| 1228 | if (code2 === 92 && pos + 1 < max) { |
| 1229 | pos += 2; |
| 1230 | continue; |
| 1231 | } |
| 1232 | pos++; |
| 1233 | } |
| 1234 | return result; |
| 1235 | } |
| 1236 | let level = 0; |
| 1237 | while (pos < max) { |
| 1238 | code2 = str.charCodeAt(pos); |
| 1239 | if (code2 === 32) { |
| 1240 | break; |
| 1241 | } |
| 1242 | if (code2 < 32 || code2 === 127) { |
| 1243 | break; |
| 1244 | } |
| 1245 | if (code2 === 92 && pos + 1 < max) { |
| 1246 | if (str.charCodeAt(pos + 1) === 32) { |
| 1247 | break; |
| 1248 | } |
| 1249 | pos += 2; |
| 1250 | continue; |
| 1251 | } |
| 1252 | if (code2 === 40) { |
| 1253 | level++; |
| 1254 | if (level > 32) { |
| 1255 | return result; |
| 1256 | } |
| 1257 | } |
| 1258 | if (code2 === 41) { |
| 1259 | if (level === 0) { |
| 1260 | break; |
| 1261 | } |
| 1262 | level--; |
| 1263 | } |
| 1264 | pos++; |
| 1265 | } |
| 1266 | if (start === pos) { |
| 1267 | return result; |
| 1268 | } |
| 1269 | if (level !== 0) { |
| 1270 | return result; |
| 1271 | } |
| 1272 | result.str = unescapeAll(str.slice(start, pos)); |
| 1273 | result.pos = pos; |
| 1274 | result.ok = true; |
| 1275 | return result; |
| 1276 | } |
| 1277 | |
| 1278 | // node_modules/markdown-it/lib/helpers/parse_link_title.mjs |
| 1279 | function parseLinkTitle(str, start, max, prev_state) { |
| 1280 | let code2; |
| 1281 | let pos = start; |
| 1282 | const state = { |
| 1283 | // if `true`, this is a valid link title |
| 1284 | ok: false, |
| 1285 | // if `true`, this link can be continued on the next line |
| 1286 | can_continue: false, |
| 1287 | // if `ok`, it's the position of the first character after the closing marker |
| 1288 | pos: 0, |
| 1289 | // if `ok`, it's the unescaped title |
| 1290 | str: "", |
| 1291 | // expected closing marker character code |
| 1292 | marker: 0 |
| 1293 | }; |
| 1294 | if (prev_state) { |
| 1295 | state.str = prev_state.str; |
| 1296 | state.marker = prev_state.marker; |
| 1297 | } else { |
| 1298 | if (pos >= max) { |
| 1299 | return state; |
| 1300 | } |
| 1301 | let marker = str.charCodeAt(pos); |
| 1302 | if (marker !== 34 && marker !== 39 && marker !== 40) { |
| 1303 | return state; |
| 1304 | } |
| 1305 | start++; |
| 1306 | pos++; |
| 1307 | if (marker === 40) { |
| 1308 | marker = 41; |
| 1309 | } |
| 1310 | state.marker = marker; |
| 1311 | } |
| 1312 | while (pos < max) { |
| 1313 | code2 = str.charCodeAt(pos); |
| 1314 | if (code2 === state.marker) { |
| 1315 | state.pos = pos + 1; |
| 1316 | state.str += unescapeAll(str.slice(start, pos)); |
| 1317 | state.ok = true; |
| 1318 | return state; |
| 1319 | } else if (code2 === 40 && state.marker === 41) { |
| 1320 | return state; |
| 1321 | } else if (code2 === 92 && pos + 1 < max) { |
| 1322 | pos++; |
| 1323 | } |
| 1324 | pos++; |
| 1325 | } |
| 1326 | state.can_continue = true; |
| 1327 | state.str += unescapeAll(str.slice(start, pos)); |
| 1328 | return state; |
| 1329 | } |
| 1330 | |
| 1331 | // node_modules/markdown-it/lib/renderer.mjs |
| 1332 | var default_rules = {}; |
| 1333 | default_rules.code_inline = function(tokens, idx, options, env, slf) { |
| 1334 | const token = tokens[idx]; |
| 1335 | return "<code" + slf.renderAttrs(token) + ">" + escapeHtml(token.content) + "</code>"; |
| 1336 | }; |
| 1337 | default_rules.code_block = function(tokens, idx, options, env, slf) { |
| 1338 | const token = tokens[idx]; |
| 1339 | return "<pre" + slf.renderAttrs(token) + "><code>" + escapeHtml(tokens[idx].content) + "</code></pre>\n"; |
| 1340 | }; |
| 1341 | default_rules.fence = function(tokens, idx, options, env, slf) { |
| 1342 | const token = tokens[idx]; |
| 1343 | const info = token.info ? unescapeAll(token.info).trim() : ""; |
| 1344 | let langName = ""; |
| 1345 | let langAttrs = ""; |
| 1346 | if (info) { |
| 1347 | const arr = info.split(/(\s+)/g); |
| 1348 | langName = arr[0]; |
| 1349 | langAttrs = arr.slice(2).join(""); |
| 1350 | } |
| 1351 | let highlighted; |
| 1352 | if (options.highlight) { |
| 1353 | highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content); |
| 1354 | } else { |
| 1355 | highlighted = escapeHtml(token.content); |
| 1356 | } |
| 1357 | if (highlighted.indexOf("<pre") === 0) { |
| 1358 | return highlighted + "\n"; |
| 1359 | } |
| 1360 | if (info) { |
| 1361 | const i = token.attrIndex("class"); |
| 1362 | const tmpAttrs = token.attrs ? token.attrs.slice() : []; |
| 1363 | if (i < 0) { |
| 1364 | tmpAttrs.push(["class", options.langPrefix + langName]); |
| 1365 | } else { |
| 1366 | tmpAttrs[i] = tmpAttrs[i].slice(); |
| 1367 | tmpAttrs[i][1] += " " + options.langPrefix + langName; |
| 1368 | } |
| 1369 | const tmpToken = { |
| 1370 | attrs: tmpAttrs |
| 1371 | }; |
| 1372 | return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre> |
| 1373 | `; |
| 1374 | } |
| 1375 | return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre> |
| 1376 | `; |
| 1377 | }; |
| 1378 | default_rules.image = function(tokens, idx, options, env, slf) { |
| 1379 | const token = tokens[idx]; |
| 1380 | token.attrs[token.attrIndex("alt")][1] = slf.renderInlineAsText(token.children, options, env); |
| 1381 | return slf.renderToken(tokens, idx, options); |
| 1382 | }; |
| 1383 | default_rules.hardbreak = function(tokens, idx, options) { |
| 1384 | return options.xhtmlOut ? "<br />\n" : "<br>\n"; |
| 1385 | }; |
| 1386 | default_rules.softbreak = function(tokens, idx, options) { |
| 1387 | return options.breaks ? options.xhtmlOut ? "<br />\n" : "<br>\n" : "\n"; |
| 1388 | }; |
| 1389 | default_rules.text = function(tokens, idx) { |
| 1390 | return escapeHtml(tokens[idx].content); |
| 1391 | }; |
| 1392 | default_rules.html_block = function(tokens, idx) { |
| 1393 | return tokens[idx].content; |
| 1394 | }; |
| 1395 | default_rules.html_inline = function(tokens, idx) { |
| 1396 | return tokens[idx].content; |
| 1397 | }; |
| 1398 | function Renderer() { |
| 1399 | this.rules = assign({}, default_rules); |
| 1400 | } |
| 1401 | Renderer.prototype.renderAttrs = function renderAttrs(token) { |
| 1402 | let i, l, result; |
| 1403 | if (!token.attrs) { |
| 1404 | return ""; |
| 1405 | } |
| 1406 | result = ""; |
| 1407 | for (i = 0, l = token.attrs.length; i < l; i++) { |
| 1408 | result += " " + escapeHtml(token.attrs[i][0]) + '="' + escapeHtml(token.attrs[i][1]) + '"'; |
| 1409 | } |
| 1410 | return result; |
| 1411 | }; |
| 1412 | Renderer.prototype.renderToken = function renderToken(tokens, idx, options) { |
| 1413 | const token = tokens[idx]; |
| 1414 | let result = ""; |
| 1415 | if (token.hidden) { |
| 1416 | return ""; |
| 1417 | } |
| 1418 | if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) { |
| 1419 | result += "\n"; |
| 1420 | } |
| 1421 | result += (token.nesting === -1 ? "</" : "<") + token.tag; |
| 1422 | result += this.renderAttrs(token); |
| 1423 | if (token.nesting === 0 && options.xhtmlOut) { |
| 1424 | result += " /"; |
| 1425 | } |
| 1426 | let needLf = false; |
| 1427 | if (token.block) { |
| 1428 | needLf = true; |
| 1429 | if (token.nesting === 1) { |
| 1430 | if (idx + 1 < tokens.length) { |
| 1431 | const nextToken = tokens[idx + 1]; |
| 1432 | if (nextToken.type === "inline" || nextToken.hidden) { |
| 1433 | needLf = false; |
| 1434 | } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) { |
| 1435 | needLf = false; |
| 1436 | } |
| 1437 | } |
| 1438 | } |
| 1439 | } |
| 1440 | result += needLf ? ">\n" : ">"; |
| 1441 | return result; |
| 1442 | }; |
| 1443 | Renderer.prototype.renderInline = function(tokens, options, env) { |
| 1444 | let result = ""; |
| 1445 | const rules = this.rules; |
| 1446 | for (let i = 0, len = tokens.length; i < len; i++) { |
| 1447 | const type = tokens[i].type; |
| 1448 | if (typeof rules[type] !== "undefined") { |
| 1449 | result += rules[type](tokens, i, options, env, this); |
| 1450 | } else { |
| 1451 | result += this.renderToken(tokens, i, options); |
| 1452 | } |
| 1453 | } |
| 1454 | return result; |
| 1455 | }; |
| 1456 | Renderer.prototype.renderInlineAsText = function(tokens, options, env) { |
| 1457 | let result = ""; |
| 1458 | for (let i = 0, len = tokens.length; i < len; i++) { |
| 1459 | switch (tokens[i].type) { |
| 1460 | case "text": |
| 1461 | result += tokens[i].content; |
| 1462 | break; |
| 1463 | case "image": |
| 1464 | result += this.renderInlineAsText(tokens[i].children, options, env); |
| 1465 | break; |
| 1466 | case "html_inline": |
| 1467 | case "html_block": |
| 1468 | result += tokens[i].content; |
| 1469 | break; |
| 1470 | case "softbreak": |
| 1471 | case "hardbreak": |
| 1472 | result += "\n"; |
| 1473 | break; |
| 1474 | default: |
| 1475 | } |
| 1476 | } |
| 1477 | return result; |
| 1478 | }; |
| 1479 | Renderer.prototype.render = function(tokens, options, env) { |
| 1480 | let result = ""; |
| 1481 | const rules = this.rules; |
| 1482 | for (let i = 0, len = tokens.length; i < len; i++) { |
| 1483 | const type = tokens[i].type; |
| 1484 | if (type === "inline") { |
| 1485 | result += this.renderInline(tokens[i].children, options, env); |
| 1486 | } else if (typeof rules[type] !== "undefined") { |
| 1487 | result += rules[type](tokens, i, options, env, this); |
| 1488 | } else { |
| 1489 | result += this.renderToken(tokens, i, options, env); |
| 1490 | } |
| 1491 | } |
| 1492 | return result; |
| 1493 | }; |
| 1494 | var renderer_default = Renderer; |
| 1495 | |
| 1496 | // node_modules/markdown-it/lib/ruler.mjs |
| 1497 | function Ruler() { |
| 1498 | this.__rules__ = []; |
| 1499 | this.__cache__ = null; |
| 1500 | } |
| 1501 | Ruler.prototype.__find__ = function(name) { |
| 1502 | for (let i = 0; i < this.__rules__.length; i++) { |
| 1503 | if (this.__rules__[i].name === name) { |
| 1504 | return i; |
| 1505 | } |
| 1506 | } |
| 1507 | return -1; |
| 1508 | }; |
| 1509 | Ruler.prototype.__compile__ = function() { |
| 1510 | const self = this; |
| 1511 | const chains = [""]; |
| 1512 | self.__rules__.forEach(function(rule) { |
| 1513 | if (!rule.enabled) { |
| 1514 | return; |
| 1515 | } |
| 1516 | rule.alt.forEach(function(altName) { |
| 1517 | if (chains.indexOf(altName) < 0) { |
| 1518 | chains.push(altName); |
| 1519 | } |
| 1520 | }); |
| 1521 | }); |
| 1522 | self.__cache__ = {}; |
| 1523 | chains.forEach(function(chain) { |
| 1524 | self.__cache__[chain] = []; |
| 1525 | self.__rules__.forEach(function(rule) { |
| 1526 | if (!rule.enabled) { |
| 1527 | return; |
| 1528 | } |
| 1529 | if (chain && rule.alt.indexOf(chain) < 0) { |
| 1530 | return; |
| 1531 | } |
| 1532 | self.__cache__[chain].push(rule.fn); |
| 1533 | }); |
| 1534 | }); |
| 1535 | }; |
| 1536 | Ruler.prototype.at = function(name, fn, options) { |
| 1537 | const index = this.__find__(name); |
| 1538 | const opt = options || {}; |
| 1539 | if (index === -1) { |
| 1540 | throw new Error("Parser rule not found: " + name); |
| 1541 | } |
| 1542 | this.__rules__[index].fn = fn; |
| 1543 | this.__rules__[index].alt = opt.alt || []; |
| 1544 | this.__cache__ = null; |
| 1545 | }; |
| 1546 | Ruler.prototype.before = function(beforeName, ruleName, fn, options) { |
| 1547 | const index = this.__find__(beforeName); |
| 1548 | const opt = options || {}; |
| 1549 | if (index === -1) { |
| 1550 | throw new Error("Parser rule not found: " + beforeName); |
| 1551 | } |
| 1552 | this.__rules__.splice(index, 0, { |
| 1553 | name: ruleName, |
| 1554 | enabled: true, |
| 1555 | fn, |
| 1556 | alt: opt.alt || [] |
| 1557 | }); |
| 1558 | this.__cache__ = null; |
| 1559 | }; |
| 1560 | Ruler.prototype.after = function(afterName, ruleName, fn, options) { |
| 1561 | const index = this.__find__(afterName); |
| 1562 | const opt = options || {}; |
| 1563 | if (index === -1) { |
| 1564 | throw new Error("Parser rule not found: " + afterName); |
| 1565 | } |
| 1566 | this.__rules__.splice(index + 1, 0, { |
| 1567 | name: ruleName, |
| 1568 | enabled: true, |
| 1569 | fn, |
| 1570 | alt: opt.alt || [] |
| 1571 | }); |
| 1572 | this.__cache__ = null; |
| 1573 | }; |
| 1574 | Ruler.prototype.push = function(ruleName, fn, options) { |
| 1575 | const opt = options || {}; |
| 1576 | this.__rules__.push({ |
| 1577 | name: ruleName, |
| 1578 | enabled: true, |
| 1579 | fn, |
| 1580 | alt: opt.alt || [] |
| 1581 | }); |
| 1582 | this.__cache__ = null; |
| 1583 | }; |
| 1584 | Ruler.prototype.enable = function(list2, ignoreInvalid) { |
| 1585 | if (!Array.isArray(list2)) { |
| 1586 | list2 = [list2]; |
| 1587 | } |
| 1588 | const result = []; |
| 1589 | list2.forEach(function(name) { |
| 1590 | const idx = this.__find__(name); |
| 1591 | if (idx < 0) { |
| 1592 | if (ignoreInvalid) { |
| 1593 | return; |
| 1594 | } |
| 1595 | throw new Error("Rules manager: invalid rule name " + name); |
| 1596 | } |
| 1597 | this.__rules__[idx].enabled = true; |
| 1598 | result.push(name); |
| 1599 | }, this); |
| 1600 | this.__cache__ = null; |
| 1601 | return result; |
| 1602 | }; |
| 1603 | Ruler.prototype.enableOnly = function(list2, ignoreInvalid) { |
| 1604 | if (!Array.isArray(list2)) { |
| 1605 | list2 = [list2]; |
| 1606 | } |
| 1607 | this.__rules__.forEach(function(rule) { |
| 1608 | rule.enabled = false; |
| 1609 | }); |
| 1610 | this.enable(list2, ignoreInvalid); |
| 1611 | }; |
| 1612 | Ruler.prototype.disable = function(list2, ignoreInvalid) { |
| 1613 | if (!Array.isArray(list2)) { |
| 1614 | list2 = [list2]; |
| 1615 | } |
| 1616 | const result = []; |
| 1617 | list2.forEach(function(name) { |
| 1618 | const idx = this.__find__(name); |
| 1619 | if (idx < 0) { |
| 1620 | if (ignoreInvalid) { |
| 1621 | return; |
| 1622 | } |
| 1623 | throw new Error("Rules manager: invalid rule name " + name); |
| 1624 | } |
| 1625 | this.__rules__[idx].enabled = false; |
| 1626 | result.push(name); |
| 1627 | }, this); |
| 1628 | this.__cache__ = null; |
| 1629 | return result; |
| 1630 | }; |
| 1631 | Ruler.prototype.getRules = function(chainName) { |
| 1632 | if (this.__cache__ === null) { |
| 1633 | this.__compile__(); |
| 1634 | } |
| 1635 | return this.__cache__[chainName] || []; |
| 1636 | }; |
| 1637 | var ruler_default = Ruler; |
| 1638 | |
| 1639 | // node_modules/markdown-it/lib/token.mjs |
| 1640 | function Token(type, tag, nesting) { |
| 1641 | this.type = type; |
| 1642 | this.tag = tag; |
| 1643 | this.attrs = null; |
| 1644 | this.map = null; |
| 1645 | this.nesting = nesting; |
| 1646 | this.level = 0; |
| 1647 | this.children = null; |
| 1648 | this.content = ""; |
| 1649 | this.markup = ""; |
| 1650 | this.info = ""; |
| 1651 | this.meta = null; |
| 1652 | this.block = false; |
| 1653 | this.hidden = false; |
| 1654 | } |
| 1655 | Token.prototype.attrIndex = function attrIndex(name) { |
| 1656 | if (!this.attrs) { |
| 1657 | return -1; |
| 1658 | } |
| 1659 | const attrs = this.attrs; |
| 1660 | for (let i = 0, len = attrs.length; i < len; i++) { |
| 1661 | if (attrs[i][0] === name) { |
| 1662 | return i; |
| 1663 | } |
| 1664 | } |
| 1665 | return -1; |
| 1666 | }; |
| 1667 | Token.prototype.attrPush = function attrPush(attrData) { |
| 1668 | if (this.attrs) { |
| 1669 | this.attrs.push(attrData); |
| 1670 | } else { |
| 1671 | this.attrs = [attrData]; |
| 1672 | } |
| 1673 | }; |
| 1674 | Token.prototype.attrSet = function attrSet(name, value) { |
| 1675 | const idx = this.attrIndex(name); |
| 1676 | const attrData = [name, value]; |
| 1677 | if (idx < 0) { |
| 1678 | this.attrPush(attrData); |
| 1679 | } else { |
| 1680 | this.attrs[idx] = attrData; |
| 1681 | } |
| 1682 | }; |
| 1683 | Token.prototype.attrGet = function attrGet(name) { |
| 1684 | const idx = this.attrIndex(name); |
| 1685 | let value = null; |
| 1686 | if (idx >= 0) { |
| 1687 | value = this.attrs[idx][1]; |
| 1688 | } |
| 1689 | return value; |
| 1690 | }; |
| 1691 | Token.prototype.attrJoin = function attrJoin(name, value) { |
| 1692 | const idx = this.attrIndex(name); |
| 1693 | if (idx < 0) { |
| 1694 | this.attrPush([name, value]); |
| 1695 | } else { |
| 1696 | this.attrs[idx][1] = this.attrs[idx][1] + " " + value; |
| 1697 | } |
| 1698 | }; |
| 1699 | var token_default = Token; |
| 1700 | |
| 1701 | // node_modules/markdown-it/lib/rules_core/state_core.mjs |
| 1702 | function StateCore(src, md, env) { |
| 1703 | this.src = src; |
| 1704 | this.env = env; |
| 1705 | this.tokens = []; |
| 1706 | this.inlineMode = false; |
| 1707 | this.md = md; |
| 1708 | } |
| 1709 | StateCore.prototype.Token = token_default; |
| 1710 | var state_core_default = StateCore; |
| 1711 | |
| 1712 | // node_modules/markdown-it/lib/rules_core/normalize.mjs |
| 1713 | var NEWLINES_RE = /\r\n?|\n/g; |
| 1714 | var NULL_RE = /\0/g; |
| 1715 | function normalize(state) { |
| 1716 | let str; |
| 1717 | str = state.src.replace(NEWLINES_RE, "\n"); |
| 1718 | str = str.replace(NULL_RE, "\uFFFD"); |
| 1719 | state.src = str; |
| 1720 | } |
| 1721 | |
| 1722 | // node_modules/markdown-it/lib/rules_core/block.mjs |
| 1723 | function block(state) { |
| 1724 | let token; |
| 1725 | if (state.inlineMode) { |
| 1726 | token = new state.Token("inline", "", 0); |
| 1727 | token.content = state.src; |
| 1728 | token.map = [0, 1]; |
| 1729 | token.children = []; |
| 1730 | state.tokens.push(token); |
| 1731 | } else { |
| 1732 | state.md.block.parse(state.src, state.md, state.env, state.tokens); |
| 1733 | } |
| 1734 | } |
| 1735 | |
| 1736 | // node_modules/markdown-it/lib/rules_core/inline.mjs |
| 1737 | function inline(state) { |
| 1738 | const tokens = state.tokens; |
| 1739 | for (let i = 0, l = tokens.length; i < l; i++) { |
| 1740 | const tok = tokens[i]; |
| 1741 | if (tok.type === "inline") { |
| 1742 | state.md.inline.parse(tok.content, state.md, state.env, tok.children); |
| 1743 | } |
| 1744 | } |
| 1745 | } |
| 1746 | |
| 1747 | // node_modules/markdown-it/lib/rules_core/linkify.mjs |
| 1748 | function isLinkOpen(str) { |
| 1749 | return /^<a[>\s]/i.test(str); |
| 1750 | } |
| 1751 | function isLinkClose(str) { |
| 1752 | return /^<\/a\s*>/i.test(str); |
| 1753 | } |
| 1754 | function linkify(state) { |
| 1755 | const blockTokens = state.tokens; |
| 1756 | if (!state.md.options.linkify) { |
| 1757 | return; |
| 1758 | } |
| 1759 | for (let j = 0, l = blockTokens.length; j < l; j++) { |
| 1760 | if (blockTokens[j].type !== "inline" || !state.md.linkify.pretest(blockTokens[j].content)) { |
| 1761 | continue; |
| 1762 | } |
| 1763 | let tokens = blockTokens[j].children; |
| 1764 | let htmlLinkLevel = 0; |
| 1765 | for (let i = tokens.length - 1; i >= 0; i--) { |
| 1766 | const currentToken = tokens[i]; |
| 1767 | if (currentToken.type === "link_close") { |
| 1768 | i--; |
| 1769 | while (tokens[i].level !== currentToken.level && tokens[i].type !== "link_open") { |
| 1770 | i--; |
| 1771 | } |
| 1772 | continue; |
| 1773 | } |
| 1774 | if (currentToken.type === "html_inline") { |
| 1775 | if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) { |
| 1776 | htmlLinkLevel--; |
| 1777 | } |
| 1778 | if (isLinkClose(currentToken.content)) { |
| 1779 | htmlLinkLevel++; |
| 1780 | } |
| 1781 | } |
| 1782 | if (htmlLinkLevel > 0) { |
| 1783 | continue; |
| 1784 | } |
| 1785 | if (currentToken.type === "text" && state.md.linkify.test(currentToken.content)) { |
| 1786 | const text2 = currentToken.content; |
| 1787 | let links = state.md.linkify.match(text2); |
| 1788 | const nodes = []; |
| 1789 | let level = currentToken.level; |
| 1790 | let lastPos = 0; |
| 1791 | if (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === "text_special") { |
| 1792 | links = links.slice(1); |
| 1793 | } |
| 1794 | for (let ln = 0; ln < links.length; ln++) { |
| 1795 | const url = links[ln].url; |
| 1796 | const fullUrl = state.md.normalizeLink(url); |
| 1797 | if (!state.md.validateLink(fullUrl)) { |
| 1798 | continue; |
| 1799 | } |
| 1800 | let urlText = links[ln].text; |
| 1801 | if (!links[ln].schema) { |
| 1802 | urlText = state.md.normalizeLinkText("http://" + urlText).replace(/^http:\/\//, ""); |
| 1803 | } else if (links[ln].schema === "mailto:" && !/^mailto:/i.test(urlText)) { |
| 1804 | urlText = state.md.normalizeLinkText("mailto:" + urlText).replace(/^mailto:/, ""); |
| 1805 | } else { |
| 1806 | urlText = state.md.normalizeLinkText(urlText); |
| 1807 | } |
| 1808 | const pos = links[ln].index; |
| 1809 | if (pos > lastPos) { |
| 1810 | const token = new state.Token("text", "", 0); |
| 1811 | token.content = text2.slice(lastPos, pos); |
| 1812 | token.level = level; |
| 1813 | nodes.push(token); |
| 1814 | } |
| 1815 | const token_o = new state.Token("link_open", "a", 1); |
| 1816 | token_o.attrs = [["href", fullUrl]]; |
| 1817 | token_o.level = level++; |
| 1818 | token_o.markup = "linkify"; |
| 1819 | token_o.info = "auto"; |
| 1820 | nodes.push(token_o); |
| 1821 | const token_t = new state.Token("text", "", 0); |
| 1822 | token_t.content = urlText; |
| 1823 | token_t.level = level; |
| 1824 | nodes.push(token_t); |
| 1825 | const token_c = new state.Token("link_close", "a", -1); |
| 1826 | token_c.level = --level; |
| 1827 | token_c.markup = "linkify"; |
| 1828 | token_c.info = "auto"; |
| 1829 | nodes.push(token_c); |
| 1830 | lastPos = links[ln].lastIndex; |
| 1831 | } |
| 1832 | if (lastPos < text2.length) { |
| 1833 | const token = new state.Token("text", "", 0); |
| 1834 | token.content = text2.slice(lastPos); |
| 1835 | token.level = level; |
| 1836 | nodes.push(token); |
| 1837 | } |
| 1838 | blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes); |
| 1839 | } |
| 1840 | } |
| 1841 | } |
| 1842 | } |
| 1843 | |
| 1844 | // node_modules/markdown-it/lib/rules_core/replacements.mjs |
| 1845 | var RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/; |
| 1846 | var SCOPED_ABBR_TEST_RE = /\((c|tm|r)\)/i; |
| 1847 | var SCOPED_ABBR_RE = /\((c|tm|r)\)/ig; |
| 1848 | var SCOPED_ABBR = { |
| 1849 | c: "\xA9", |
| 1850 | r: "\xAE", |
| 1851 | tm: "\u2122" |
| 1852 | }; |
| 1853 | function replaceFn(match2, name) { |
| 1854 | return SCOPED_ABBR[name.toLowerCase()]; |
| 1855 | } |
| 1856 | function replace_scoped(inlineTokens) { |
| 1857 | let inside_autolink = 0; |
| 1858 | for (let i = inlineTokens.length - 1; i >= 0; i--) { |
| 1859 | const token = inlineTokens[i]; |
| 1860 | if (token.type === "text" && !inside_autolink) { |
| 1861 | token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn); |
| 1862 | } |
| 1863 | if (token.type === "link_open" && token.info === "auto") { |
| 1864 | inside_autolink--; |
| 1865 | } |
| 1866 | if (token.type === "link_close" && token.info === "auto") { |
| 1867 | inside_autolink++; |
| 1868 | } |
| 1869 | } |
| 1870 | } |
| 1871 | function replace_rare(inlineTokens) { |
| 1872 | let inside_autolink = 0; |
| 1873 | for (let i = inlineTokens.length - 1; i >= 0; i--) { |
| 1874 | const token = inlineTokens[i]; |
| 1875 | if (token.type === "text" && !inside_autolink) { |
| 1876 | if (RARE_RE.test(token.content)) { |
| 1877 | token.content = token.content.replace(/\+-/g, "\xB1").replace(/\.{2,}/g, "\u2026").replace(/([?!])β¦/g, "$1..").replace(/([?!]){4,}/g, "$1$1$1").replace(/,{2,}/g, ",").replace(/(^|[^-])---(?=[^-]|$)/mg, "$1\u2014").replace(/(^|\s)--(?=\s|$)/mg, "$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg, "$1\u2013"); |
| 1878 | } |
| 1879 | } |
| 1880 | if (token.type === "link_open" && token.info === "auto") { |
| 1881 | inside_autolink--; |
| 1882 | } |
| 1883 | if (token.type === "link_close" && token.info === "auto") { |
| 1884 | inside_autolink++; |
| 1885 | } |
| 1886 | } |
| 1887 | } |
| 1888 | function replace(state) { |
| 1889 | let blkIdx; |
| 1890 | if (!state.md.options.typographer) { |
| 1891 | return; |
| 1892 | } |
| 1893 | for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { |
| 1894 | if (state.tokens[blkIdx].type !== "inline") { |
| 1895 | continue; |
| 1896 | } |
| 1897 | if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) { |
| 1898 | replace_scoped(state.tokens[blkIdx].children); |
| 1899 | } |
| 1900 | if (RARE_RE.test(state.tokens[blkIdx].content)) { |
| 1901 | replace_rare(state.tokens[blkIdx].children); |
| 1902 | } |
| 1903 | } |
| 1904 | } |
| 1905 | |
| 1906 | // node_modules/markdown-it/lib/rules_core/smartquotes.mjs |
| 1907 | var QUOTE_TEST_RE = /['"]/; |
| 1908 | var QUOTE_RE = /['"]/g; |
| 1909 | var APOSTROPHE = "\u2019"; |
| 1910 | function addReplacement(replacements, tokenIdx, pos, ch) { |
| 1911 | if (!replacements[tokenIdx]) { |
| 1912 | replacements[tokenIdx] = []; |
| 1913 | } |
| 1914 | replacements[tokenIdx].push({ pos, ch }); |
| 1915 | } |
| 1916 | function applyReplacements(str, replacements) { |
| 1917 | let result = ""; |
| 1918 | let lastPos = 0; |
| 1919 | replacements.sort((a, b) => a.pos - b.pos); |
| 1920 | for (let i = 0; i < replacements.length; i++) { |
| 1921 | const replacement = replacements[i]; |
| 1922 | result += str.slice(lastPos, replacement.pos) + replacement.ch; |
| 1923 | lastPos = replacement.pos + 1; |
| 1924 | } |
| 1925 | return result + str.slice(lastPos); |
| 1926 | } |
| 1927 | function process_inlines(tokens, state) { |
| 1928 | let j; |
| 1929 | const stack = []; |
| 1930 | const replacements = {}; |
| 1931 | for (let i = 0; i < tokens.length; i++) { |
| 1932 | const token = tokens[i]; |
| 1933 | const thisLevel = tokens[i].level; |
| 1934 | for (j = stack.length - 1; j >= 0; j--) { |
| 1935 | if (stack[j].level <= thisLevel) { |
| 1936 | break; |
| 1937 | } |
| 1938 | } |
| 1939 | stack.length = j + 1; |
| 1940 | if (token.type !== "text") { |
| 1941 | continue; |
| 1942 | } |
| 1943 | const text2 = token.content; |
| 1944 | let pos = 0; |
| 1945 | const max = text2.length; |
| 1946 | OUTER: |
| 1947 | while (pos < max) { |
| 1948 | QUOTE_RE.lastIndex = pos; |
| 1949 | const t = QUOTE_RE.exec(text2); |
| 1950 | if (!t) { |
| 1951 | break; |
| 1952 | } |
| 1953 | let canOpen = true; |
| 1954 | let canClose = true; |
| 1955 | pos = t.index + 1; |
| 1956 | const isSingle = t[0] === "'"; |
| 1957 | let lastChar = 32; |
| 1958 | if (t.index - 1 >= 0) { |
| 1959 | lastChar = text2.charCodeAt(t.index - 1); |
| 1960 | } else { |
| 1961 | for (j = i - 1; j >= 0; j--) { |
| 1962 | if (tokens[j].type === "softbreak" || tokens[j].type === "hardbreak") break; |
| 1963 | if (!tokens[j].content) continue; |
| 1964 | lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1); |
| 1965 | break; |
| 1966 | } |
| 1967 | } |
| 1968 | let nextChar = 32; |
| 1969 | if (pos < max) { |
| 1970 | nextChar = text2.charCodeAt(pos); |
| 1971 | } else { |
| 1972 | for (j = i + 1; j < tokens.length; j++) { |
| 1973 | if (tokens[j].type === "softbreak" || tokens[j].type === "hardbreak") break; |
| 1974 | if (!tokens[j].content) continue; |
| 1975 | nextChar = tokens[j].content.charCodeAt(0); |
| 1976 | break; |
| 1977 | } |
| 1978 | } |
| 1979 | const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar); |
| 1980 | const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar); |
| 1981 | const isLastWhiteSpace = isWhiteSpace(lastChar); |
| 1982 | const isNextWhiteSpace = isWhiteSpace(nextChar); |
| 1983 | if (isNextWhiteSpace) { |
| 1984 | canOpen = false; |
| 1985 | } else if (isNextPunctChar) { |
| 1986 | if (!(isLastWhiteSpace || isLastPunctChar)) { |
| 1987 | canOpen = false; |
| 1988 | } |
| 1989 | } |
| 1990 | if (isLastWhiteSpace) { |
| 1991 | canClose = false; |
| 1992 | } else if (isLastPunctChar) { |
| 1993 | if (!(isNextWhiteSpace || isNextPunctChar)) { |
| 1994 | canClose = false; |
| 1995 | } |
| 1996 | } |
| 1997 | if (nextChar === 34 && t[0] === '"') { |
| 1998 | if (lastChar >= 48 && lastChar <= 57) { |
| 1999 | canClose = canOpen = false; |
| 2000 | } |
| 2001 | } |
| 2002 | if (canOpen && canClose) { |
| 2003 | canOpen = isLastPunctChar; |
| 2004 | canClose = isNextPunctChar; |
| 2005 | } |
| 2006 | if (!canOpen && !canClose) { |
| 2007 | if (isSingle) { |
| 2008 | addReplacement(replacements, i, t.index, APOSTROPHE); |
| 2009 | } |
| 2010 | continue; |
| 2011 | } |
| 2012 | if (canClose) { |
| 2013 | for (j = stack.length - 1; j >= 0; j--) { |
| 2014 | let item = stack[j]; |
| 2015 | if (stack[j].level < thisLevel) { |
| 2016 | break; |
| 2017 | } |
| 2018 | if (item.single === isSingle && stack[j].level === thisLevel) { |
| 2019 | item = stack[j]; |
| 2020 | let openQuote; |
| 2021 | let closeQuote; |
| 2022 | if (isSingle) { |
| 2023 | openQuote = state.md.options.quotes[2]; |
| 2024 | closeQuote = state.md.options.quotes[3]; |
| 2025 | } else { |
| 2026 | openQuote = state.md.options.quotes[0]; |
| 2027 | closeQuote = state.md.options.quotes[1]; |
| 2028 | } |
| 2029 | addReplacement(replacements, i, t.index, closeQuote); |
| 2030 | addReplacement(replacements, item.token, item.pos, openQuote); |
| 2031 | stack.length = j; |
| 2032 | continue OUTER; |
| 2033 | } |
| 2034 | } |
| 2035 | } |
| 2036 | if (canOpen) { |
| 2037 | stack.push({ |
| 2038 | token: i, |
| 2039 | pos: t.index, |
| 2040 | single: isSingle, |
| 2041 | level: thisLevel |
| 2042 | }); |
| 2043 | } else if (canClose && isSingle) { |
| 2044 | addReplacement(replacements, i, t.index, APOSTROPHE); |
| 2045 | } |
| 2046 | } |
| 2047 | } |
| 2048 | Object.keys(replacements).forEach(function(tokenIdx) { |
| 2049 | tokens[tokenIdx].content = applyReplacements(tokens[tokenIdx].content, replacements[tokenIdx]); |
| 2050 | }); |
| 2051 | } |
| 2052 | function smartquotes(state) { |
| 2053 | if (!state.md.options.typographer) { |
| 2054 | return; |
| 2055 | } |
| 2056 | for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { |
| 2057 | if (state.tokens[blkIdx].type !== "inline" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) { |
| 2058 | continue; |
| 2059 | } |
| 2060 | process_inlines(state.tokens[blkIdx].children, state); |
| 2061 | } |
| 2062 | } |
| 2063 | |
| 2064 | // node_modules/markdown-it/lib/rules_core/text_join.mjs |
| 2065 | function text_join(state) { |
| 2066 | let curr, last; |
| 2067 | const blockTokens = state.tokens; |
| 2068 | const l = blockTokens.length; |
| 2069 | for (let j = 0; j < l; j++) { |
| 2070 | if (blockTokens[j].type !== "inline") continue; |
| 2071 | const tokens = blockTokens[j].children; |
| 2072 | const max = tokens.length; |
| 2073 | for (curr = 0; curr < max; curr++) { |
| 2074 | if (tokens[curr].type === "text_special") { |
| 2075 | tokens[curr].type = "text"; |
| 2076 | } |
| 2077 | } |
| 2078 | for (curr = last = 0; curr < max; curr++) { |
| 2079 | if (tokens[curr].type === "text" && curr + 1 < max && tokens[curr + 1].type === "text") { |
| 2080 | tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; |
| 2081 | } else { |
| 2082 | if (curr !== last) { |
| 2083 | tokens[last] = tokens[curr]; |
| 2084 | } |
| 2085 | last++; |
| 2086 | } |
| 2087 | } |
| 2088 | if (curr !== last) { |
| 2089 | tokens.length = last; |
| 2090 | } |
| 2091 | } |
| 2092 | } |
| 2093 | |
| 2094 | // node_modules/markdown-it/lib/parser_core.mjs |
| 2095 | var _rules = [ |
| 2096 | ["normalize", normalize], |
| 2097 | ["block", block], |
| 2098 | ["inline", inline], |
| 2099 | ["linkify", linkify], |
| 2100 | ["replacements", replace], |
| 2101 | ["smartquotes", smartquotes], |
| 2102 | // `text_join` finds `text_special` tokens (for escape sequences) |
| 2103 | // and joins them with the rest of the text |
| 2104 | ["text_join", text_join] |
| 2105 | ]; |
| 2106 | function Core() { |
| 2107 | this.ruler = new ruler_default(); |
| 2108 | for (let i = 0; i < _rules.length; i++) { |
| 2109 | this.ruler.push(_rules[i][0], _rules[i][1]); |
| 2110 | } |
| 2111 | } |
| 2112 | Core.prototype.process = function(state) { |
| 2113 | const rules = this.ruler.getRules(""); |
| 2114 | for (let i = 0, l = rules.length; i < l; i++) { |
| 2115 | rules[i](state); |
| 2116 | } |
| 2117 | }; |
| 2118 | Core.prototype.State = state_core_default; |
| 2119 | var parser_core_default = Core; |
| 2120 | |
| 2121 | // node_modules/markdown-it/lib/rules_block/state_block.mjs |
| 2122 | function StateBlock(src, md, env, tokens) { |
| 2123 | this.src = src; |
| 2124 | this.md = md; |
| 2125 | this.env = env; |
| 2126 | this.tokens = tokens; |
| 2127 | this.bMarks = []; |
| 2128 | this.eMarks = []; |
| 2129 | this.tShift = []; |
| 2130 | this.sCount = []; |
| 2131 | this.bsCount = []; |
| 2132 | this.blkIndent = 0; |
| 2133 | this.line = 0; |
| 2134 | this.lineMax = 0; |
| 2135 | this.tight = false; |
| 2136 | this.ddIndent = -1; |
| 2137 | this.listIndent = -1; |
| 2138 | this.parentType = "root"; |
| 2139 | this.level = 0; |
| 2140 | const s = this.src; |
| 2141 | for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) { |
| 2142 | const ch = s.charCodeAt(pos); |
| 2143 | if (!indent_found) { |
| 2144 | if (isSpace(ch)) { |
| 2145 | indent++; |
| 2146 | if (ch === 9) { |
| 2147 | offset += 4 - offset % 4; |
| 2148 | } else { |
| 2149 | offset++; |
| 2150 | } |
| 2151 | continue; |
| 2152 | } else { |
| 2153 | indent_found = true; |
| 2154 | } |
| 2155 | } |
| 2156 | if (ch === 10 || pos === len - 1) { |
| 2157 | if (ch !== 10) { |
| 2158 | pos++; |
| 2159 | } |
| 2160 | this.bMarks.push(start); |
| 2161 | this.eMarks.push(pos); |
| 2162 | this.tShift.push(indent); |
| 2163 | this.sCount.push(offset); |
| 2164 | this.bsCount.push(0); |
| 2165 | indent_found = false; |
| 2166 | indent = 0; |
| 2167 | offset = 0; |
| 2168 | start = pos + 1; |
| 2169 | } |
| 2170 | } |
| 2171 | this.bMarks.push(s.length); |
| 2172 | this.eMarks.push(s.length); |
| 2173 | this.tShift.push(0); |
| 2174 | this.sCount.push(0); |
| 2175 | this.bsCount.push(0); |
| 2176 | this.lineMax = this.bMarks.length - 1; |
| 2177 | } |
| 2178 | StateBlock.prototype.push = function(type, tag, nesting) { |
| 2179 | const token = new token_default(type, tag, nesting); |
| 2180 | token.block = true; |
| 2181 | if (nesting < 0) this.level--; |
| 2182 | token.level = this.level; |
| 2183 | if (nesting > 0) this.level++; |
| 2184 | this.tokens.push(token); |
| 2185 | return token; |
| 2186 | }; |
| 2187 | StateBlock.prototype.isEmpty = function isEmpty(line) { |
| 2188 | return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]; |
| 2189 | }; |
| 2190 | StateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) { |
| 2191 | for (let max = this.lineMax; from < max; from++) { |
| 2192 | if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) { |
| 2193 | break; |
| 2194 | } |
| 2195 | } |
| 2196 | return from; |
| 2197 | }; |
| 2198 | StateBlock.prototype.skipSpaces = function skipSpaces(pos) { |
| 2199 | for (let max = this.src.length; pos < max; pos++) { |
| 2200 | const ch = this.src.charCodeAt(pos); |
| 2201 | if (!isSpace(ch)) { |
| 2202 | break; |
| 2203 | } |
| 2204 | } |
| 2205 | return pos; |
| 2206 | }; |
| 2207 | StateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) { |
| 2208 | if (pos <= min) { |
| 2209 | return pos; |
| 2210 | } |
| 2211 | while (pos > min) { |
| 2212 | if (!isSpace(this.src.charCodeAt(--pos))) { |
| 2213 | return pos + 1; |
| 2214 | } |
| 2215 | } |
| 2216 | return pos; |
| 2217 | }; |
| 2218 | StateBlock.prototype.skipChars = function skipChars(pos, code2) { |
| 2219 | for (let max = this.src.length; pos < max; pos++) { |
| 2220 | if (this.src.charCodeAt(pos) !== code2) { |
| 2221 | break; |
| 2222 | } |
| 2223 | } |
| 2224 | return pos; |
| 2225 | }; |
| 2226 | StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code2, min) { |
| 2227 | if (pos <= min) { |
| 2228 | return pos; |
| 2229 | } |
| 2230 | while (pos > min) { |
| 2231 | if (code2 !== this.src.charCodeAt(--pos)) { |
| 2232 | return pos + 1; |
| 2233 | } |
| 2234 | } |
| 2235 | return pos; |
| 2236 | }; |
| 2237 | StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) { |
| 2238 | if (begin >= end) { |
| 2239 | return ""; |
| 2240 | } |
| 2241 | const queue = new Array(end - begin); |
| 2242 | for (let i = 0, line = begin; line < end; line++, i++) { |
| 2243 | let lineIndent = 0; |
| 2244 | const lineStart = this.bMarks[line]; |
| 2245 | let first = lineStart; |
| 2246 | let last; |
| 2247 | if (line + 1 < end || keepLastLF) { |
| 2248 | last = this.eMarks[line] + 1; |
| 2249 | } else { |
| 2250 | last = this.eMarks[line]; |
| 2251 | } |
| 2252 | while (first < last && lineIndent < indent) { |
| 2253 | const ch = this.src.charCodeAt(first); |
| 2254 | if (isSpace(ch)) { |
| 2255 | if (ch === 9) { |
| 2256 | lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4; |
| 2257 | } else { |
| 2258 | lineIndent++; |
| 2259 | } |
| 2260 | } else if (first - lineStart < this.tShift[line]) { |
| 2261 | lineIndent++; |
| 2262 | } else { |
| 2263 | break; |
| 2264 | } |
| 2265 | first++; |
| 2266 | } |
| 2267 | if (lineIndent > indent) { |
| 2268 | queue[i] = new Array(lineIndent - indent + 1).join(" ") + this.src.slice(first, last); |
| 2269 | } else { |
| 2270 | queue[i] = this.src.slice(first, last); |
| 2271 | } |
| 2272 | } |
| 2273 | return queue.join(""); |
| 2274 | }; |
| 2275 | StateBlock.prototype.Token = token_default; |
| 2276 | var state_block_default = StateBlock; |
| 2277 | |
| 2278 | // node_modules/markdown-it/lib/rules_block/table.mjs |
| 2279 | var MAX_AUTOCOMPLETED_CELLS = 65536; |
| 2280 | function getLine(state, line) { |
| 2281 | const pos = state.bMarks[line] + state.tShift[line]; |
| 2282 | const max = state.eMarks[line]; |
| 2283 | return state.src.slice(pos, max); |
| 2284 | } |
| 2285 | function escapedSplit(str) { |
| 2286 | const result = []; |
| 2287 | const max = str.length; |
| 2288 | let pos = 0; |
| 2289 | let ch = str.charCodeAt(pos); |
| 2290 | let isEscaped = false; |
| 2291 | let lastPos = 0; |
| 2292 | let current = ""; |
| 2293 | while (pos < max) { |
| 2294 | if (ch === 124) { |
| 2295 | if (!isEscaped) { |
| 2296 | result.push(current + str.substring(lastPos, pos)); |
| 2297 | current = ""; |
| 2298 | lastPos = pos + 1; |
| 2299 | } else { |
| 2300 | current += str.substring(lastPos, pos - 1); |
| 2301 | lastPos = pos; |
| 2302 | } |
| 2303 | } |
| 2304 | isEscaped = ch === 92; |
| 2305 | pos++; |
| 2306 | ch = str.charCodeAt(pos); |
| 2307 | } |
| 2308 | result.push(current + str.substring(lastPos)); |
| 2309 | return result; |
| 2310 | } |
| 2311 | function table(state, startLine, endLine, silent) { |
| 2312 | if (startLine + 2 > endLine) { |
| 2313 | return false; |
| 2314 | } |
| 2315 | let nextLine = startLine + 1; |
| 2316 | if (state.sCount[nextLine] < state.blkIndent) { |
| 2317 | return false; |
| 2318 | } |
| 2319 | if (state.sCount[nextLine] - state.blkIndent >= 4) { |
| 2320 | return false; |
| 2321 | } |
| 2322 | let pos = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 2323 | if (pos >= state.eMarks[nextLine]) { |
| 2324 | return false; |
| 2325 | } |
| 2326 | const firstCh = state.src.charCodeAt(pos++); |
| 2327 | if (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) { |
| 2328 | return false; |
| 2329 | } |
| 2330 | if (pos >= state.eMarks[nextLine]) { |
| 2331 | return false; |
| 2332 | } |
| 2333 | const secondCh = state.src.charCodeAt(pos++); |
| 2334 | if (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace(secondCh)) { |
| 2335 | return false; |
| 2336 | } |
| 2337 | if (firstCh === 45 && isSpace(secondCh)) { |
| 2338 | return false; |
| 2339 | } |
| 2340 | while (pos < state.eMarks[nextLine]) { |
| 2341 | const ch = state.src.charCodeAt(pos); |
| 2342 | if (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace(ch)) { |
| 2343 | return false; |
| 2344 | } |
| 2345 | pos++; |
| 2346 | } |
| 2347 | let lineText = getLine(state, startLine + 1); |
| 2348 | let columns = lineText.split("|"); |
| 2349 | const aligns = []; |
| 2350 | for (let i = 0; i < columns.length; i++) { |
| 2351 | const t = columns[i].trim(); |
| 2352 | if (!t) { |
| 2353 | if (i === 0 || i === columns.length - 1) { |
| 2354 | continue; |
| 2355 | } else { |
| 2356 | return false; |
| 2357 | } |
| 2358 | } |
| 2359 | if (!/^:?-+:?$/.test(t)) { |
| 2360 | return false; |
| 2361 | } |
| 2362 | if (t.charCodeAt(t.length - 1) === 58) { |
| 2363 | aligns.push(t.charCodeAt(0) === 58 ? "center" : "right"); |
| 2364 | } else if (t.charCodeAt(0) === 58) { |
| 2365 | aligns.push("left"); |
| 2366 | } else { |
| 2367 | aligns.push(""); |
| 2368 | } |
| 2369 | } |
| 2370 | lineText = getLine(state, startLine).trim(); |
| 2371 | if (lineText.indexOf("|") === -1) { |
| 2372 | return false; |
| 2373 | } |
| 2374 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 2375 | return false; |
| 2376 | } |
| 2377 | columns = escapedSplit(lineText); |
| 2378 | if (columns.length && columns[0] === "") columns.shift(); |
| 2379 | if (columns.length && columns[columns.length - 1] === "") columns.pop(); |
| 2380 | const columnCount = columns.length; |
| 2381 | if (columnCount === 0 || columnCount !== aligns.length) { |
| 2382 | return false; |
| 2383 | } |
| 2384 | if (silent) { |
| 2385 | return true; |
| 2386 | } |
| 2387 | const oldParentType = state.parentType; |
| 2388 | state.parentType = "table"; |
| 2389 | const terminatorRules = state.md.block.ruler.getRules("blockquote"); |
| 2390 | const token_to = state.push("table_open", "table", 1); |
| 2391 | const tableLines = [startLine, 0]; |
| 2392 | token_to.map = tableLines; |
| 2393 | const token_tho = state.push("thead_open", "thead", 1); |
| 2394 | token_tho.map = [startLine, startLine + 1]; |
| 2395 | const token_htro = state.push("tr_open", "tr", 1); |
| 2396 | token_htro.map = [startLine, startLine + 1]; |
| 2397 | for (let i = 0; i < columns.length; i++) { |
| 2398 | const token_ho = state.push("th_open", "th", 1); |
| 2399 | if (aligns[i]) { |
| 2400 | token_ho.attrs = [["style", "text-align:" + aligns[i]]]; |
| 2401 | } |
| 2402 | const token_il = state.push("inline", "", 0); |
| 2403 | token_il.content = columns[i].trim(); |
| 2404 | token_il.children = []; |
| 2405 | state.push("th_close", "th", -1); |
| 2406 | } |
| 2407 | state.push("tr_close", "tr", -1); |
| 2408 | state.push("thead_close", "thead", -1); |
| 2409 | let tbodyLines; |
| 2410 | let autocompletedCells = 0; |
| 2411 | for (nextLine = startLine + 2; nextLine < endLine; nextLine++) { |
| 2412 | if (state.sCount[nextLine] < state.blkIndent) { |
| 2413 | break; |
| 2414 | } |
| 2415 | let terminate = false; |
| 2416 | for (let i = 0, l = terminatorRules.length; i < l; i++) { |
| 2417 | if (terminatorRules[i](state, nextLine, endLine, true)) { |
| 2418 | terminate = true; |
| 2419 | break; |
| 2420 | } |
| 2421 | } |
| 2422 | if (terminate) { |
| 2423 | break; |
| 2424 | } |
| 2425 | lineText = getLine(state, nextLine).trim(); |
| 2426 | if (!lineText) { |
| 2427 | break; |
| 2428 | } |
| 2429 | if (state.sCount[nextLine] - state.blkIndent >= 4) { |
| 2430 | break; |
| 2431 | } |
| 2432 | columns = escapedSplit(lineText); |
| 2433 | if (columns.length && columns[0] === "") columns.shift(); |
| 2434 | if (columns.length && columns[columns.length - 1] === "") columns.pop(); |
| 2435 | autocompletedCells += columnCount - columns.length; |
| 2436 | if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { |
| 2437 | break; |
| 2438 | } |
| 2439 | if (nextLine === startLine + 2) { |
| 2440 | const token_tbo = state.push("tbody_open", "tbody", 1); |
| 2441 | token_tbo.map = tbodyLines = [startLine + 2, 0]; |
| 2442 | } |
| 2443 | const token_tro = state.push("tr_open", "tr", 1); |
| 2444 | token_tro.map = [nextLine, nextLine + 1]; |
| 2445 | for (let i = 0; i < columnCount; i++) { |
| 2446 | const token_tdo = state.push("td_open", "td", 1); |
| 2447 | if (aligns[i]) { |
| 2448 | token_tdo.attrs = [["style", "text-align:" + aligns[i]]]; |
| 2449 | } |
| 2450 | const token_il = state.push("inline", "", 0); |
| 2451 | token_il.content = columns[i] ? columns[i].trim() : ""; |
| 2452 | token_il.children = []; |
| 2453 | state.push("td_close", "td", -1); |
| 2454 | } |
| 2455 | state.push("tr_close", "tr", -1); |
| 2456 | } |
| 2457 | if (tbodyLines) { |
| 2458 | state.push("tbody_close", "tbody", -1); |
| 2459 | tbodyLines[1] = nextLine; |
| 2460 | } |
| 2461 | state.push("table_close", "table", -1); |
| 2462 | tableLines[1] = nextLine; |
| 2463 | state.parentType = oldParentType; |
| 2464 | state.line = nextLine; |
| 2465 | return true; |
| 2466 | } |
| 2467 | |
| 2468 | // node_modules/markdown-it/lib/rules_block/code.mjs |
| 2469 | function code(state, startLine, endLine) { |
| 2470 | if (state.sCount[startLine] - state.blkIndent < 4) { |
| 2471 | return false; |
| 2472 | } |
| 2473 | let nextLine = startLine + 1; |
| 2474 | let last = nextLine; |
| 2475 | while (nextLine < endLine) { |
| 2476 | if (state.isEmpty(nextLine)) { |
| 2477 | nextLine++; |
| 2478 | continue; |
| 2479 | } |
| 2480 | if (state.sCount[nextLine] - state.blkIndent >= 4) { |
| 2481 | nextLine++; |
| 2482 | last = nextLine; |
| 2483 | continue; |
| 2484 | } |
| 2485 | break; |
| 2486 | } |
| 2487 | state.line = last; |
| 2488 | const token = state.push("code_block", "code", 0); |
| 2489 | token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + "\n"; |
| 2490 | token.map = [startLine, state.line]; |
| 2491 | return true; |
| 2492 | } |
| 2493 | |
| 2494 | // node_modules/markdown-it/lib/rules_block/fence.mjs |
| 2495 | function fence(state, startLine, endLine, silent) { |
| 2496 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 2497 | let max = state.eMarks[startLine]; |
| 2498 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 2499 | return false; |
| 2500 | } |
| 2501 | if (pos + 3 > max) { |
| 2502 | return false; |
| 2503 | } |
| 2504 | const marker = state.src.charCodeAt(pos); |
| 2505 | if (marker !== 126 && marker !== 96) { |
| 2506 | return false; |
| 2507 | } |
| 2508 | let mem = pos; |
| 2509 | pos = state.skipChars(pos, marker); |
| 2510 | let len = pos - mem; |
| 2511 | if (len < 3) { |
| 2512 | return false; |
| 2513 | } |
| 2514 | const markup = state.src.slice(mem, pos); |
| 2515 | const params = state.src.slice(pos, max); |
| 2516 | if (marker === 96) { |
| 2517 | if (params.indexOf(String.fromCharCode(marker)) >= 0) { |
| 2518 | return false; |
| 2519 | } |
| 2520 | } |
| 2521 | if (silent) { |
| 2522 | return true; |
| 2523 | } |
| 2524 | let nextLine = startLine; |
| 2525 | let haveEndMarker = false; |
| 2526 | for (; ; ) { |
| 2527 | nextLine++; |
| 2528 | if (nextLine >= endLine) { |
| 2529 | break; |
| 2530 | } |
| 2531 | pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 2532 | max = state.eMarks[nextLine]; |
| 2533 | if (pos < max && state.sCount[nextLine] < state.blkIndent) { |
| 2534 | break; |
| 2535 | } |
| 2536 | if (state.src.charCodeAt(pos) !== marker) { |
| 2537 | continue; |
| 2538 | } |
| 2539 | if (state.sCount[nextLine] - state.blkIndent >= 4) { |
| 2540 | continue; |
| 2541 | } |
| 2542 | pos = state.skipChars(pos, marker); |
| 2543 | if (pos - mem < len) { |
| 2544 | continue; |
| 2545 | } |
| 2546 | pos = state.skipSpaces(pos); |
| 2547 | if (pos < max) { |
| 2548 | continue; |
| 2549 | } |
| 2550 | haveEndMarker = true; |
| 2551 | break; |
| 2552 | } |
| 2553 | len = state.sCount[startLine]; |
| 2554 | state.line = nextLine + (haveEndMarker ? 1 : 0); |
| 2555 | const token = state.push("fence", "code", 0); |
| 2556 | token.info = params; |
| 2557 | token.content = state.getLines(startLine + 1, nextLine, len, true); |
| 2558 | token.markup = markup; |
| 2559 | token.map = [startLine, state.line]; |
| 2560 | return true; |
| 2561 | } |
| 2562 | |
| 2563 | // node_modules/markdown-it/lib/rules_block/blockquote.mjs |
| 2564 | function blockquote(state, startLine, endLine, silent) { |
| 2565 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 2566 | let max = state.eMarks[startLine]; |
| 2567 | const oldLineMax = state.lineMax; |
| 2568 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 2569 | return false; |
| 2570 | } |
| 2571 | if (state.src.charCodeAt(pos) !== 62) { |
| 2572 | return false; |
| 2573 | } |
| 2574 | if (silent) { |
| 2575 | return true; |
| 2576 | } |
| 2577 | const oldBMarks = []; |
| 2578 | const oldBSCount = []; |
| 2579 | const oldSCount = []; |
| 2580 | const oldTShift = []; |
| 2581 | const terminatorRules = state.md.block.ruler.getRules("blockquote"); |
| 2582 | const oldParentType = state.parentType; |
| 2583 | state.parentType = "blockquote"; |
| 2584 | let lastLineEmpty = false; |
| 2585 | let nextLine; |
| 2586 | for (nextLine = startLine; nextLine < endLine; nextLine++) { |
| 2587 | const isOutdented = state.sCount[nextLine] < state.blkIndent; |
| 2588 | pos = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 2589 | max = state.eMarks[nextLine]; |
| 2590 | if (pos >= max) { |
| 2591 | break; |
| 2592 | } |
| 2593 | if (state.src.charCodeAt(pos++) === 62 && !isOutdented) { |
| 2594 | let initial = state.sCount[nextLine] + 1; |
| 2595 | let spaceAfterMarker; |
| 2596 | let adjustTab; |
| 2597 | if (state.src.charCodeAt(pos) === 32) { |
| 2598 | pos++; |
| 2599 | initial++; |
| 2600 | adjustTab = false; |
| 2601 | spaceAfterMarker = true; |
| 2602 | } else if (state.src.charCodeAt(pos) === 9) { |
| 2603 | spaceAfterMarker = true; |
| 2604 | if ((state.bsCount[nextLine] + initial) % 4 === 3) { |
| 2605 | pos++; |
| 2606 | initial++; |
| 2607 | adjustTab = false; |
| 2608 | } else { |
| 2609 | adjustTab = true; |
| 2610 | } |
| 2611 | } else { |
| 2612 | spaceAfterMarker = false; |
| 2613 | } |
| 2614 | let offset = initial; |
| 2615 | oldBMarks.push(state.bMarks[nextLine]); |
| 2616 | state.bMarks[nextLine] = pos; |
| 2617 | while (pos < max) { |
| 2618 | const ch = state.src.charCodeAt(pos); |
| 2619 | if (isSpace(ch)) { |
| 2620 | if (ch === 9) { |
| 2621 | offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4; |
| 2622 | } else { |
| 2623 | offset++; |
| 2624 | } |
| 2625 | } else { |
| 2626 | break; |
| 2627 | } |
| 2628 | pos++; |
| 2629 | } |
| 2630 | lastLineEmpty = pos >= max; |
| 2631 | oldBSCount.push(state.bsCount[nextLine]); |
| 2632 | state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0); |
| 2633 | oldSCount.push(state.sCount[nextLine]); |
| 2634 | state.sCount[nextLine] = offset - initial; |
| 2635 | oldTShift.push(state.tShift[nextLine]); |
| 2636 | state.tShift[nextLine] = pos - state.bMarks[nextLine]; |
| 2637 | continue; |
| 2638 | } |
| 2639 | if (lastLineEmpty) { |
| 2640 | break; |
| 2641 | } |
| 2642 | let terminate = false; |
| 2643 | for (let i = 0, l = terminatorRules.length; i < l; i++) { |
| 2644 | if (terminatorRules[i](state, nextLine, endLine, true)) { |
| 2645 | terminate = true; |
| 2646 | break; |
| 2647 | } |
| 2648 | } |
| 2649 | if (terminate) { |
| 2650 | state.lineMax = nextLine; |
| 2651 | if (state.blkIndent !== 0) { |
| 2652 | oldBMarks.push(state.bMarks[nextLine]); |
| 2653 | oldBSCount.push(state.bsCount[nextLine]); |
| 2654 | oldTShift.push(state.tShift[nextLine]); |
| 2655 | oldSCount.push(state.sCount[nextLine]); |
| 2656 | state.sCount[nextLine] -= state.blkIndent; |
| 2657 | } |
| 2658 | break; |
| 2659 | } |
| 2660 | oldBMarks.push(state.bMarks[nextLine]); |
| 2661 | oldBSCount.push(state.bsCount[nextLine]); |
| 2662 | oldTShift.push(state.tShift[nextLine]); |
| 2663 | oldSCount.push(state.sCount[nextLine]); |
| 2664 | state.sCount[nextLine] = -1; |
| 2665 | } |
| 2666 | const oldIndent = state.blkIndent; |
| 2667 | state.blkIndent = 0; |
| 2668 | const token_o = state.push("blockquote_open", "blockquote", 1); |
| 2669 | token_o.markup = ">"; |
| 2670 | const lines = [startLine, 0]; |
| 2671 | token_o.map = lines; |
| 2672 | state.md.block.tokenize(state, startLine, nextLine); |
| 2673 | const token_c = state.push("blockquote_close", "blockquote", -1); |
| 2674 | token_c.markup = ">"; |
| 2675 | state.lineMax = oldLineMax; |
| 2676 | state.parentType = oldParentType; |
| 2677 | lines[1] = state.line; |
| 2678 | for (let i = 0; i < oldTShift.length; i++) { |
| 2679 | state.bMarks[i + startLine] = oldBMarks[i]; |
| 2680 | state.tShift[i + startLine] = oldTShift[i]; |
| 2681 | state.sCount[i + startLine] = oldSCount[i]; |
| 2682 | state.bsCount[i + startLine] = oldBSCount[i]; |
| 2683 | } |
| 2684 | state.blkIndent = oldIndent; |
| 2685 | return true; |
| 2686 | } |
| 2687 | |
| 2688 | // node_modules/markdown-it/lib/rules_block/hr.mjs |
| 2689 | function hr(state, startLine, endLine, silent) { |
| 2690 | const max = state.eMarks[startLine]; |
| 2691 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 2692 | return false; |
| 2693 | } |
| 2694 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 2695 | const marker = state.src.charCodeAt(pos++); |
| 2696 | if (marker !== 42 && marker !== 45 && marker !== 95) { |
| 2697 | return false; |
| 2698 | } |
| 2699 | let cnt = 1; |
| 2700 | while (pos < max) { |
| 2701 | const ch = state.src.charCodeAt(pos++); |
| 2702 | if (ch !== marker && !isSpace(ch)) { |
| 2703 | return false; |
| 2704 | } |
| 2705 | if (ch === marker) { |
| 2706 | cnt++; |
| 2707 | } |
| 2708 | } |
| 2709 | if (cnt < 3) { |
| 2710 | return false; |
| 2711 | } |
| 2712 | if (silent) { |
| 2713 | return true; |
| 2714 | } |
| 2715 | state.line = startLine + 1; |
| 2716 | const token = state.push("hr", "hr", 0); |
| 2717 | token.map = [startLine, state.line]; |
| 2718 | token.markup = Array(cnt + 1).join(String.fromCharCode(marker)); |
| 2719 | return true; |
| 2720 | } |
| 2721 | |
| 2722 | // node_modules/markdown-it/lib/rules_block/list.mjs |
| 2723 | function skipBulletListMarker(state, startLine) { |
| 2724 | const max = state.eMarks[startLine]; |
| 2725 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 2726 | const marker = state.src.charCodeAt(pos++); |
| 2727 | if (marker !== 42 && marker !== 45 && marker !== 43) { |
| 2728 | return -1; |
| 2729 | } |
| 2730 | if (pos < max) { |
| 2731 | const ch = state.src.charCodeAt(pos); |
| 2732 | if (!isSpace(ch)) { |
| 2733 | return -1; |
| 2734 | } |
| 2735 | } |
| 2736 | return pos; |
| 2737 | } |
| 2738 | function skipOrderedListMarker(state, startLine) { |
| 2739 | const start = state.bMarks[startLine] + state.tShift[startLine]; |
| 2740 | const max = state.eMarks[startLine]; |
| 2741 | let pos = start; |
| 2742 | if (pos + 1 >= max) { |
| 2743 | return -1; |
| 2744 | } |
| 2745 | let ch = state.src.charCodeAt(pos++); |
| 2746 | if (ch < 48 || ch > 57) { |
| 2747 | return -1; |
| 2748 | } |
| 2749 | for (; ; ) { |
| 2750 | if (pos >= max) { |
| 2751 | return -1; |
| 2752 | } |
| 2753 | ch = state.src.charCodeAt(pos++); |
| 2754 | if (ch >= 48 && ch <= 57) { |
| 2755 | if (pos - start >= 10) { |
| 2756 | return -1; |
| 2757 | } |
| 2758 | continue; |
| 2759 | } |
| 2760 | if (ch === 41 || ch === 46) { |
| 2761 | break; |
| 2762 | } |
| 2763 | return -1; |
| 2764 | } |
| 2765 | if (pos < max) { |
| 2766 | ch = state.src.charCodeAt(pos); |
| 2767 | if (!isSpace(ch)) { |
| 2768 | return -1; |
| 2769 | } |
| 2770 | } |
| 2771 | return pos; |
| 2772 | } |
| 2773 | function markTightParagraphs(state, idx) { |
| 2774 | const level = state.level + 2; |
| 2775 | for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) { |
| 2776 | if (state.tokens[i].level === level && state.tokens[i].type === "paragraph_open") { |
| 2777 | state.tokens[i + 2].hidden = true; |
| 2778 | state.tokens[i].hidden = true; |
| 2779 | i += 2; |
| 2780 | } |
| 2781 | } |
| 2782 | } |
| 2783 | function list(state, startLine, endLine, silent) { |
| 2784 | let max, pos, start, token; |
| 2785 | let nextLine = startLine; |
| 2786 | let tight = true; |
| 2787 | if (state.sCount[nextLine] - state.blkIndent >= 4) { |
| 2788 | return false; |
| 2789 | } |
| 2790 | if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) { |
| 2791 | return false; |
| 2792 | } |
| 2793 | let isTerminatingParagraph = false; |
| 2794 | if (silent && state.parentType === "paragraph") { |
| 2795 | if (state.sCount[nextLine] >= state.blkIndent) { |
| 2796 | isTerminatingParagraph = true; |
| 2797 | } |
| 2798 | } |
| 2799 | let isOrdered; |
| 2800 | let markerValue; |
| 2801 | let posAfterMarker; |
| 2802 | if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) { |
| 2803 | isOrdered = true; |
| 2804 | start = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 2805 | markerValue = Number(state.src.slice(start, posAfterMarker - 1)); |
| 2806 | if (isTerminatingParagraph && markerValue !== 1) return false; |
| 2807 | } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) { |
| 2808 | isOrdered = false; |
| 2809 | } else { |
| 2810 | return false; |
| 2811 | } |
| 2812 | if (isTerminatingParagraph) { |
| 2813 | if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false; |
| 2814 | } |
| 2815 | if (silent) { |
| 2816 | return true; |
| 2817 | } |
| 2818 | const markerCharCode = state.src.charCodeAt(posAfterMarker - 1); |
| 2819 | const listTokIdx = state.tokens.length; |
| 2820 | if (isOrdered) { |
| 2821 | token = state.push("ordered_list_open", "ol", 1); |
| 2822 | if (markerValue !== 1) { |
| 2823 | token.attrs = [["start", markerValue]]; |
| 2824 | } |
| 2825 | } else { |
| 2826 | token = state.push("bullet_list_open", "ul", 1); |
| 2827 | } |
| 2828 | const listLines = [nextLine, 0]; |
| 2829 | token.map = listLines; |
| 2830 | token.markup = String.fromCharCode(markerCharCode); |
| 2831 | let prevEmptyEnd = false; |
| 2832 | const terminatorRules = state.md.block.ruler.getRules("list"); |
| 2833 | const oldParentType = state.parentType; |
| 2834 | state.parentType = "list"; |
| 2835 | while (nextLine < endLine) { |
| 2836 | pos = posAfterMarker; |
| 2837 | max = state.eMarks[nextLine]; |
| 2838 | const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]); |
| 2839 | let offset = initial; |
| 2840 | while (pos < max) { |
| 2841 | const ch = state.src.charCodeAt(pos); |
| 2842 | if (ch === 9) { |
| 2843 | offset += 4 - (offset + state.bsCount[nextLine]) % 4; |
| 2844 | } else if (ch === 32) { |
| 2845 | offset++; |
| 2846 | } else { |
| 2847 | break; |
| 2848 | } |
| 2849 | pos++; |
| 2850 | } |
| 2851 | const contentStart = pos; |
| 2852 | let indentAfterMarker; |
| 2853 | if (contentStart >= max) { |
| 2854 | indentAfterMarker = 1; |
| 2855 | } else { |
| 2856 | indentAfterMarker = offset - initial; |
| 2857 | } |
| 2858 | if (indentAfterMarker > 4) { |
| 2859 | indentAfterMarker = 1; |
| 2860 | } |
| 2861 | const indent = initial + indentAfterMarker; |
| 2862 | token = state.push("list_item_open", "li", 1); |
| 2863 | token.markup = String.fromCharCode(markerCharCode); |
| 2864 | const itemLines = [nextLine, 0]; |
| 2865 | token.map = itemLines; |
| 2866 | if (isOrdered) { |
| 2867 | token.info = state.src.slice(start, posAfterMarker - 1); |
| 2868 | } |
| 2869 | const oldTight = state.tight; |
| 2870 | const oldTShift = state.tShift[nextLine]; |
| 2871 | const oldSCount = state.sCount[nextLine]; |
| 2872 | const oldListIndent = state.listIndent; |
| 2873 | state.listIndent = state.blkIndent; |
| 2874 | state.blkIndent = indent; |
| 2875 | state.tight = true; |
| 2876 | state.tShift[nextLine] = contentStart - state.bMarks[nextLine]; |
| 2877 | state.sCount[nextLine] = offset; |
| 2878 | if (contentStart >= max && state.isEmpty(nextLine + 1)) { |
| 2879 | state.line = Math.min(state.line + 2, endLine); |
| 2880 | } else { |
| 2881 | state.md.block.tokenize(state, nextLine, endLine, true); |
| 2882 | } |
| 2883 | if (!state.tight || prevEmptyEnd) { |
| 2884 | tight = false; |
| 2885 | } |
| 2886 | prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1); |
| 2887 | state.blkIndent = state.listIndent; |
| 2888 | state.listIndent = oldListIndent; |
| 2889 | state.tShift[nextLine] = oldTShift; |
| 2890 | state.sCount[nextLine] = oldSCount; |
| 2891 | state.tight = oldTight; |
| 2892 | token = state.push("list_item_close", "li", -1); |
| 2893 | token.markup = String.fromCharCode(markerCharCode); |
| 2894 | nextLine = state.line; |
| 2895 | itemLines[1] = nextLine; |
| 2896 | if (nextLine >= endLine) { |
| 2897 | break; |
| 2898 | } |
| 2899 | if (state.sCount[nextLine] < state.blkIndent) { |
| 2900 | break; |
| 2901 | } |
| 2902 | if (state.sCount[nextLine] - state.blkIndent >= 4) { |
| 2903 | break; |
| 2904 | } |
| 2905 | let terminate = false; |
| 2906 | for (let i = 0, l = terminatorRules.length; i < l; i++) { |
| 2907 | if (terminatorRules[i](state, nextLine, endLine, true)) { |
| 2908 | terminate = true; |
| 2909 | break; |
| 2910 | } |
| 2911 | } |
| 2912 | if (terminate) { |
| 2913 | break; |
| 2914 | } |
| 2915 | if (isOrdered) { |
| 2916 | posAfterMarker = skipOrderedListMarker(state, nextLine); |
| 2917 | if (posAfterMarker < 0) { |
| 2918 | break; |
| 2919 | } |
| 2920 | start = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 2921 | } else { |
| 2922 | posAfterMarker = skipBulletListMarker(state, nextLine); |
| 2923 | if (posAfterMarker < 0) { |
| 2924 | break; |
| 2925 | } |
| 2926 | } |
| 2927 | if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { |
| 2928 | break; |
| 2929 | } |
| 2930 | } |
| 2931 | if (isOrdered) { |
| 2932 | token = state.push("ordered_list_close", "ol", -1); |
| 2933 | } else { |
| 2934 | token = state.push("bullet_list_close", "ul", -1); |
| 2935 | } |
| 2936 | token.markup = String.fromCharCode(markerCharCode); |
| 2937 | listLines[1] = nextLine; |
| 2938 | state.line = nextLine; |
| 2939 | state.parentType = oldParentType; |
| 2940 | if (tight) { |
| 2941 | markTightParagraphs(state, listTokIdx); |
| 2942 | } |
| 2943 | return true; |
| 2944 | } |
| 2945 | |
| 2946 | // node_modules/markdown-it/lib/rules_block/reference.mjs |
| 2947 | function reference(state, startLine, _endLine, silent) { |
| 2948 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 2949 | let max = state.eMarks[startLine]; |
| 2950 | let nextLine = startLine + 1; |
| 2951 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 2952 | return false; |
| 2953 | } |
| 2954 | if (state.src.charCodeAt(pos) !== 91) { |
| 2955 | return false; |
| 2956 | } |
| 2957 | function getNextLine(nextLine2) { |
| 2958 | const endLine = state.lineMax; |
| 2959 | if (nextLine2 >= endLine || state.isEmpty(nextLine2)) { |
| 2960 | return null; |
| 2961 | } |
| 2962 | let isContinuation = false; |
| 2963 | if (state.sCount[nextLine2] - state.blkIndent > 3) { |
| 2964 | isContinuation = true; |
| 2965 | } |
| 2966 | if (state.sCount[nextLine2] < 0) { |
| 2967 | isContinuation = true; |
| 2968 | } |
| 2969 | if (!isContinuation) { |
| 2970 | const terminatorRules = state.md.block.ruler.getRules("reference"); |
| 2971 | const oldParentType = state.parentType; |
| 2972 | state.parentType = "reference"; |
| 2973 | let terminate = false; |
| 2974 | for (let i = 0, l = terminatorRules.length; i < l; i++) { |
| 2975 | if (terminatorRules[i](state, nextLine2, endLine, true)) { |
| 2976 | terminate = true; |
| 2977 | break; |
| 2978 | } |
| 2979 | } |
| 2980 | state.parentType = oldParentType; |
| 2981 | if (terminate) { |
| 2982 | return null; |
| 2983 | } |
| 2984 | } |
| 2985 | const pos2 = state.bMarks[nextLine2] + state.tShift[nextLine2]; |
| 2986 | const max2 = state.eMarks[nextLine2]; |
| 2987 | return state.src.slice(pos2, max2 + 1); |
| 2988 | } |
| 2989 | let str = state.src.slice(pos, max + 1); |
| 2990 | max = str.length; |
| 2991 | let labelEnd = -1; |
| 2992 | for (pos = 1; pos < max; pos++) { |
| 2993 | const ch = str.charCodeAt(pos); |
| 2994 | if (ch === 91) { |
| 2995 | return false; |
| 2996 | } else if (ch === 93) { |
| 2997 | labelEnd = pos; |
| 2998 | break; |
| 2999 | } else if (ch === 10) { |
| 3000 | const lineContent = getNextLine(nextLine); |
| 3001 | if (lineContent !== null) { |
| 3002 | str += lineContent; |
| 3003 | max = str.length; |
| 3004 | nextLine++; |
| 3005 | } |
| 3006 | } else if (ch === 92) { |
| 3007 | pos++; |
| 3008 | if (pos < max && str.charCodeAt(pos) === 10) { |
| 3009 | const lineContent = getNextLine(nextLine); |
| 3010 | if (lineContent !== null) { |
| 3011 | str += lineContent; |
| 3012 | max = str.length; |
| 3013 | nextLine++; |
| 3014 | } |
| 3015 | } |
| 3016 | } |
| 3017 | } |
| 3018 | if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) { |
| 3019 | return false; |
| 3020 | } |
| 3021 | for (pos = labelEnd + 2; pos < max; pos++) { |
| 3022 | const ch = str.charCodeAt(pos); |
| 3023 | if (ch === 10) { |
| 3024 | const lineContent = getNextLine(nextLine); |
| 3025 | if (lineContent !== null) { |
| 3026 | str += lineContent; |
| 3027 | max = str.length; |
| 3028 | nextLine++; |
| 3029 | } |
| 3030 | } else if (isSpace(ch)) { |
| 3031 | } else { |
| 3032 | break; |
| 3033 | } |
| 3034 | } |
| 3035 | const destRes = state.md.helpers.parseLinkDestination(str, pos, max); |
| 3036 | if (!destRes.ok) { |
| 3037 | return false; |
| 3038 | } |
| 3039 | const href = state.md.normalizeLink(destRes.str); |
| 3040 | if (!state.md.validateLink(href)) { |
| 3041 | return false; |
| 3042 | } |
| 3043 | pos = destRes.pos; |
| 3044 | const destEndPos = pos; |
| 3045 | const destEndLineNo = nextLine; |
| 3046 | const start = pos; |
| 3047 | for (; pos < max; pos++) { |
| 3048 | const ch = str.charCodeAt(pos); |
| 3049 | if (ch === 10) { |
| 3050 | const lineContent = getNextLine(nextLine); |
| 3051 | if (lineContent !== null) { |
| 3052 | str += lineContent; |
| 3053 | max = str.length; |
| 3054 | nextLine++; |
| 3055 | } |
| 3056 | } else if (isSpace(ch)) { |
| 3057 | } else { |
| 3058 | break; |
| 3059 | } |
| 3060 | } |
| 3061 | let titleRes = state.md.helpers.parseLinkTitle(str, pos, max); |
| 3062 | while (titleRes.can_continue) { |
| 3063 | const lineContent = getNextLine(nextLine); |
| 3064 | if (lineContent === null) break; |
| 3065 | str += lineContent; |
| 3066 | pos = max; |
| 3067 | max = str.length; |
| 3068 | nextLine++; |
| 3069 | titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes); |
| 3070 | } |
| 3071 | let title; |
| 3072 | if (pos < max && start !== pos && titleRes.ok) { |
| 3073 | title = titleRes.str; |
| 3074 | pos = titleRes.pos; |
| 3075 | } else { |
| 3076 | title = ""; |
| 3077 | pos = destEndPos; |
| 3078 | nextLine = destEndLineNo; |
| 3079 | } |
| 3080 | while (pos < max) { |
| 3081 | const ch = str.charCodeAt(pos); |
| 3082 | if (!isSpace(ch)) { |
| 3083 | break; |
| 3084 | } |
| 3085 | pos++; |
| 3086 | } |
| 3087 | if (pos < max && str.charCodeAt(pos) !== 10) { |
| 3088 | if (title) { |
| 3089 | title = ""; |
| 3090 | pos = destEndPos; |
| 3091 | nextLine = destEndLineNo; |
| 3092 | while (pos < max) { |
| 3093 | const ch = str.charCodeAt(pos); |
| 3094 | if (!isSpace(ch)) { |
| 3095 | break; |
| 3096 | } |
| 3097 | pos++; |
| 3098 | } |
| 3099 | } |
| 3100 | } |
| 3101 | if (pos < max && str.charCodeAt(pos) !== 10) { |
| 3102 | return false; |
| 3103 | } |
| 3104 | const label = normalizeReference(str.slice(1, labelEnd)); |
| 3105 | if (!label) { |
| 3106 | return false; |
| 3107 | } |
| 3108 | if (silent) { |
| 3109 | return true; |
| 3110 | } |
| 3111 | if (typeof state.env.references === "undefined") { |
| 3112 | state.env.references = {}; |
| 3113 | } |
| 3114 | if (typeof state.env.references[label] === "undefined") { |
| 3115 | state.env.references[label] = { title, href }; |
| 3116 | } |
| 3117 | state.line = nextLine; |
| 3118 | return true; |
| 3119 | } |
| 3120 | |
| 3121 | // node_modules/markdown-it/lib/common/html_blocks.mjs |
| 3122 | var html_blocks_default = [ |
| 3123 | "address", |
| 3124 | "article", |
| 3125 | "aside", |
| 3126 | "base", |
| 3127 | "basefont", |
| 3128 | "blockquote", |
| 3129 | "body", |
| 3130 | "caption", |
| 3131 | "center", |
| 3132 | "col", |
| 3133 | "colgroup", |
| 3134 | "dd", |
| 3135 | "details", |
| 3136 | "dialog", |
| 3137 | "dir", |
| 3138 | "div", |
| 3139 | "dl", |
| 3140 | "dt", |
| 3141 | "fieldset", |
| 3142 | "figcaption", |
| 3143 | "figure", |
| 3144 | "footer", |
| 3145 | "form", |
| 3146 | "frame", |
| 3147 | "frameset", |
| 3148 | "h1", |
| 3149 | "h2", |
| 3150 | "h3", |
| 3151 | "h4", |
| 3152 | "h5", |
| 3153 | "h6", |
| 3154 | "head", |
| 3155 | "header", |
| 3156 | "hr", |
| 3157 | "html", |
| 3158 | "iframe", |
| 3159 | "legend", |
| 3160 | "li", |
| 3161 | "link", |
| 3162 | "main", |
| 3163 | "menu", |
| 3164 | "menuitem", |
| 3165 | "nav", |
| 3166 | "noframes", |
| 3167 | "ol", |
| 3168 | "optgroup", |
| 3169 | "option", |
| 3170 | "p", |
| 3171 | "param", |
| 3172 | "search", |
| 3173 | "section", |
| 3174 | "summary", |
| 3175 | "table", |
| 3176 | "tbody", |
| 3177 | "td", |
| 3178 | "tfoot", |
| 3179 | "th", |
| 3180 | "thead", |
| 3181 | "title", |
| 3182 | "tr", |
| 3183 | "track", |
| 3184 | "ul" |
| 3185 | ]; |
| 3186 | |
| 3187 | // node_modules/markdown-it/lib/common/html_re.mjs |
| 3188 | var attr_name = "[a-zA-Z_:][a-zA-Z0-9:._-]*"; |
| 3189 | var unquoted = "[^\"'=<>`\\x00-\\x20]+"; |
| 3190 | var single_quoted = "'[^']*'"; |
| 3191 | var double_quoted = '"[^"]*"'; |
| 3192 | var attr_value = "(?:" + unquoted + "|" + single_quoted + "|" + double_quoted + ")"; |
| 3193 | var attribute = "(?:\\s+" + attr_name + "(?:\\s*=\\s*" + attr_value + ")?)"; |
| 3194 | var open_tag = "<[A-Za-z][A-Za-z0-9\\-]*" + attribute + "*\\s*\\/?>"; |
| 3195 | var close_tag = "<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>"; |
| 3196 | var comment = "<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->"; |
| 3197 | var processing = "<[?][\\s\\S]*?[?]>"; |
| 3198 | var declaration = "<![A-Za-z][^>]*>"; |
| 3199 | var cdata = "<!\\[CDATA\\[[\\s\\S]*?\\]\\]>"; |
| 3200 | var HTML_TAG_RE = new RegExp("^(?:" + open_tag + "|" + close_tag + "|" + comment + "|" + processing + "|" + declaration + "|" + cdata + ")"); |
| 3201 | var HTML_OPEN_CLOSE_TAG_RE = new RegExp("^(?:" + open_tag + "|" + close_tag + ")"); |
| 3202 | |
| 3203 | // node_modules/markdown-it/lib/rules_block/html_block.mjs |
| 3204 | var HTML_SEQUENCES = [ |
| 3205 | [/^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, true], |
| 3206 | [/^<!--/, /-->/, true], |
| 3207 | [/^<\?/, /\?>/, true], |
| 3208 | [/^<![A-Z]/, />/, true], |
| 3209 | [/^<!\[CDATA\[/, /\]\]>/, true], |
| 3210 | [new RegExp("^</?(" + html_blocks_default.join("|") + ")(?=(\\s|/?>|$))", "i"), /^$/, true], |
| 3211 | [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + "\\s*$"), /^$/, false] |
| 3212 | ]; |
| 3213 | function html_block(state, startLine, endLine, silent) { |
| 3214 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 3215 | let max = state.eMarks[startLine]; |
| 3216 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 3217 | return false; |
| 3218 | } |
| 3219 | if (!state.md.options.html) { |
| 3220 | return false; |
| 3221 | } |
| 3222 | if (state.src.charCodeAt(pos) !== 60) { |
| 3223 | return false; |
| 3224 | } |
| 3225 | let lineText = state.src.slice(pos, max); |
| 3226 | let i = 0; |
| 3227 | for (; i < HTML_SEQUENCES.length; i++) { |
| 3228 | if (HTML_SEQUENCES[i][0].test(lineText)) { |
| 3229 | break; |
| 3230 | } |
| 3231 | } |
| 3232 | if (i === HTML_SEQUENCES.length) { |
| 3233 | return false; |
| 3234 | } |
| 3235 | if (silent) { |
| 3236 | return HTML_SEQUENCES[i][2]; |
| 3237 | } |
| 3238 | let nextLine = startLine + 1; |
| 3239 | const endsOnBlankLine = HTML_SEQUENCES[i][1].test(""); |
| 3240 | if (!HTML_SEQUENCES[i][1].test(lineText)) { |
| 3241 | for (; nextLine < endLine; nextLine++) { |
| 3242 | if (state.sCount[nextLine] < state.blkIndent) { |
| 3243 | if (endsOnBlankLine || !state.isEmpty(nextLine)) { |
| 3244 | break; |
| 3245 | } |
| 3246 | } |
| 3247 | pos = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 3248 | max = state.eMarks[nextLine]; |
| 3249 | lineText = state.src.slice(pos, max); |
| 3250 | if (HTML_SEQUENCES[i][1].test(lineText)) { |
| 3251 | if (lineText.length !== 0) { |
| 3252 | nextLine++; |
| 3253 | } |
| 3254 | break; |
| 3255 | } |
| 3256 | } |
| 3257 | } |
| 3258 | state.line = nextLine; |
| 3259 | const token = state.push("html_block", "", 0); |
| 3260 | token.map = [startLine, nextLine]; |
| 3261 | token.content = state.getLines(startLine, nextLine, state.blkIndent, true); |
| 3262 | return true; |
| 3263 | } |
| 3264 | |
| 3265 | // node_modules/markdown-it/lib/rules_block/heading.mjs |
| 3266 | function heading(state, startLine, endLine, silent) { |
| 3267 | let pos = state.bMarks[startLine] + state.tShift[startLine]; |
| 3268 | let max = state.eMarks[startLine]; |
| 3269 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 3270 | return false; |
| 3271 | } |
| 3272 | let ch = state.src.charCodeAt(pos); |
| 3273 | if (ch !== 35 || pos >= max) { |
| 3274 | return false; |
| 3275 | } |
| 3276 | let level = 1; |
| 3277 | ch = state.src.charCodeAt(++pos); |
| 3278 | while (ch === 35 && pos < max && level <= 6) { |
| 3279 | level++; |
| 3280 | ch = state.src.charCodeAt(++pos); |
| 3281 | } |
| 3282 | if (level > 6 || pos < max && !isSpace(ch)) { |
| 3283 | return false; |
| 3284 | } |
| 3285 | if (silent) { |
| 3286 | return true; |
| 3287 | } |
| 3288 | max = state.skipSpacesBack(max, pos); |
| 3289 | const tmp = state.skipCharsBack(max, 35, pos); |
| 3290 | if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) { |
| 3291 | max = tmp; |
| 3292 | } |
| 3293 | state.line = startLine + 1; |
| 3294 | const token_o = state.push("heading_open", "h" + String(level), 1); |
| 3295 | token_o.markup = "########".slice(0, level); |
| 3296 | token_o.map = [startLine, state.line]; |
| 3297 | const token_i = state.push("inline", "", 0); |
| 3298 | token_i.content = asciiTrim(state.src.slice(pos, max)); |
| 3299 | token_i.map = [startLine, state.line]; |
| 3300 | token_i.children = []; |
| 3301 | const token_c = state.push("heading_close", "h" + String(level), -1); |
| 3302 | token_c.markup = "########".slice(0, level); |
| 3303 | return true; |
| 3304 | } |
| 3305 | |
| 3306 | // node_modules/markdown-it/lib/rules_block/lheading.mjs |
| 3307 | function lheading(state, startLine, endLine) { |
| 3308 | const terminatorRules = state.md.block.ruler.getRules("paragraph"); |
| 3309 | if (state.sCount[startLine] - state.blkIndent >= 4) { |
| 3310 | return false; |
| 3311 | } |
| 3312 | const oldParentType = state.parentType; |
| 3313 | state.parentType = "paragraph"; |
| 3314 | let level = 0; |
| 3315 | let marker; |
| 3316 | let nextLine = startLine + 1; |
| 3317 | for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { |
| 3318 | if (state.sCount[nextLine] - state.blkIndent > 3) { |
| 3319 | continue; |
| 3320 | } |
| 3321 | if (state.sCount[nextLine] >= state.blkIndent) { |
| 3322 | let pos = state.bMarks[nextLine] + state.tShift[nextLine]; |
| 3323 | const max = state.eMarks[nextLine]; |
| 3324 | if (pos < max) { |
| 3325 | marker = state.src.charCodeAt(pos); |
| 3326 | if (marker === 45 || marker === 61) { |
| 3327 | pos = state.skipChars(pos, marker); |
| 3328 | pos = state.skipSpaces(pos); |
| 3329 | if (pos >= max) { |
| 3330 | level = marker === 61 ? 1 : 2; |
| 3331 | break; |
| 3332 | } |
| 3333 | } |
| 3334 | } |
| 3335 | } |
| 3336 | if (state.sCount[nextLine] < 0) { |
| 3337 | continue; |
| 3338 | } |
| 3339 | let terminate = false; |
| 3340 | for (let i = 0, l = terminatorRules.length; i < l; i++) { |
| 3341 | if (terminatorRules[i](state, nextLine, endLine, true)) { |
| 3342 | terminate = true; |
| 3343 | break; |
| 3344 | } |
| 3345 | } |
| 3346 | if (terminate) { |
| 3347 | break; |
| 3348 | } |
| 3349 | } |
| 3350 | if (!level) { |
| 3351 | state.parentType = oldParentType; |
| 3352 | return false; |
| 3353 | } |
| 3354 | const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false)); |
| 3355 | state.line = nextLine + 1; |
| 3356 | const token_o = state.push("heading_open", "h" + String(level), 1); |
| 3357 | token_o.markup = String.fromCharCode(marker); |
| 3358 | token_o.map = [startLine, state.line]; |
| 3359 | const token_i = state.push("inline", "", 0); |
| 3360 | token_i.content = content; |
| 3361 | token_i.map = [startLine, state.line - 1]; |
| 3362 | token_i.children = []; |
| 3363 | const token_c = state.push("heading_close", "h" + String(level), -1); |
| 3364 | token_c.markup = String.fromCharCode(marker); |
| 3365 | state.parentType = oldParentType; |
| 3366 | return true; |
| 3367 | } |
| 3368 | |
| 3369 | // node_modules/markdown-it/lib/rules_block/paragraph.mjs |
| 3370 | function paragraph(state, startLine, endLine) { |
| 3371 | const terminatorRules = state.md.block.ruler.getRules("paragraph"); |
| 3372 | const oldParentType = state.parentType; |
| 3373 | let nextLine = startLine + 1; |
| 3374 | state.parentType = "paragraph"; |
| 3375 | for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { |
| 3376 | if (state.sCount[nextLine] - state.blkIndent > 3) { |
| 3377 | continue; |
| 3378 | } |
| 3379 | if (state.sCount[nextLine] < 0) { |
| 3380 | continue; |
| 3381 | } |
| 3382 | let terminate = false; |
| 3383 | for (let i = 0, l = terminatorRules.length; i < l; i++) { |
| 3384 | if (terminatorRules[i](state, nextLine, endLine, true)) { |
| 3385 | terminate = true; |
| 3386 | break; |
| 3387 | } |
| 3388 | } |
| 3389 | if (terminate) { |
| 3390 | break; |
| 3391 | } |
| 3392 | } |
| 3393 | const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false)); |
| 3394 | state.line = nextLine; |
| 3395 | const token_o = state.push("paragraph_open", "p", 1); |
| 3396 | token_o.map = [startLine, state.line]; |
| 3397 | const token_i = state.push("inline", "", 0); |
| 3398 | token_i.content = content; |
| 3399 | token_i.map = [startLine, state.line]; |
| 3400 | token_i.children = []; |
| 3401 | state.push("paragraph_close", "p", -1); |
| 3402 | state.parentType = oldParentType; |
| 3403 | return true; |
| 3404 | } |
| 3405 | |
| 3406 | // node_modules/markdown-it/lib/parser_block.mjs |
| 3407 | var _rules2 = [ |
| 3408 | // First 2 params - rule name & source. Secondary array - list of rules, |
| 3409 | // which can be terminated by this one. |
| 3410 | ["table", table, ["paragraph", "reference"]], |
| 3411 | ["code", code], |
| 3412 | ["fence", fence, ["paragraph", "reference", "blockquote", "list"]], |
| 3413 | ["blockquote", blockquote, ["paragraph", "reference", "blockquote", "list"]], |
| 3414 | ["hr", hr, ["paragraph", "reference", "blockquote", "list"]], |
| 3415 | ["list", list, ["paragraph", "reference", "blockquote"]], |
| 3416 | ["reference", reference], |
| 3417 | ["html_block", html_block, ["paragraph", "reference", "blockquote"]], |
| 3418 | ["heading", heading, ["paragraph", "reference", "blockquote"]], |
| 3419 | ["lheading", lheading], |
| 3420 | ["paragraph", paragraph] |
| 3421 | ]; |
| 3422 | function ParserBlock() { |
| 3423 | this.ruler = new ruler_default(); |
| 3424 | for (let i = 0; i < _rules2.length; i++) { |
| 3425 | this.ruler.push(_rules2[i][0], _rules2[i][1], { alt: (_rules2[i][2] || []).slice() }); |
| 3426 | } |
| 3427 | } |
| 3428 | ParserBlock.prototype.tokenize = function(state, startLine, endLine) { |
| 3429 | const rules = this.ruler.getRules(""); |
| 3430 | const len = rules.length; |
| 3431 | const maxNesting = state.md.options.maxNesting; |
| 3432 | let line = startLine; |
| 3433 | let hasEmptyLines = false; |
| 3434 | while (line < endLine) { |
| 3435 | state.line = line = state.skipEmptyLines(line); |
| 3436 | if (line >= endLine) { |
| 3437 | break; |
| 3438 | } |
| 3439 | if (state.sCount[line] < state.blkIndent) { |
| 3440 | break; |
| 3441 | } |
| 3442 | if (state.level >= maxNesting) { |
| 3443 | state.line = endLine; |
| 3444 | break; |
| 3445 | } |
| 3446 | const prevLine = state.line; |
| 3447 | let ok = false; |
| 3448 | for (let i = 0; i < len; i++) { |
| 3449 | ok = rules[i](state, line, endLine, false); |
| 3450 | if (ok) { |
| 3451 | if (prevLine >= state.line) { |
| 3452 | throw new Error("block rule didn't increment state.line"); |
| 3453 | } |
| 3454 | break; |
| 3455 | } |
| 3456 | } |
| 3457 | if (!ok) throw new Error("none of the block rules matched"); |
| 3458 | state.tight = !hasEmptyLines; |
| 3459 | if (state.isEmpty(state.line - 1)) { |
| 3460 | hasEmptyLines = true; |
| 3461 | } |
| 3462 | line = state.line; |
| 3463 | if (line < endLine && state.isEmpty(line)) { |
| 3464 | hasEmptyLines = true; |
| 3465 | line++; |
| 3466 | state.line = line; |
| 3467 | } |
| 3468 | } |
| 3469 | }; |
| 3470 | ParserBlock.prototype.parse = function(src, md, env, outTokens) { |
| 3471 | if (!src) { |
| 3472 | return; |
| 3473 | } |
| 3474 | const state = new this.State(src, md, env, outTokens); |
| 3475 | this.tokenize(state, state.line, state.lineMax); |
| 3476 | }; |
| 3477 | ParserBlock.prototype.State = state_block_default; |
| 3478 | var parser_block_default = ParserBlock; |
| 3479 | |
| 3480 | // node_modules/markdown-it/lib/rules_inline/state_inline.mjs |
| 3481 | function StateInline(src, md, env, outTokens) { |
| 3482 | this.src = src; |
| 3483 | this.env = env; |
| 3484 | this.md = md; |
| 3485 | this.tokens = outTokens; |
| 3486 | this.tokens_meta = Array(outTokens.length); |
| 3487 | this.pos = 0; |
| 3488 | this.posMax = this.src.length; |
| 3489 | this.level = 0; |
| 3490 | this.pending = ""; |
| 3491 | this.pendingLevel = 0; |
| 3492 | this.cache = {}; |
| 3493 | this.delimiters = []; |
| 3494 | this._prev_delimiters = []; |
| 3495 | this.backticks = {}; |
| 3496 | this.backticksScanned = false; |
| 3497 | this.linkLevel = 0; |
| 3498 | } |
| 3499 | StateInline.prototype.pushPending = function() { |
| 3500 | const token = new token_default("text", "", 0); |
| 3501 | token.content = this.pending; |
| 3502 | token.level = this.pendingLevel; |
| 3503 | this.tokens.push(token); |
| 3504 | this.pending = ""; |
| 3505 | return token; |
| 3506 | }; |
| 3507 | StateInline.prototype.push = function(type, tag, nesting) { |
| 3508 | if (this.pending) { |
| 3509 | this.pushPending(); |
| 3510 | } |
| 3511 | const token = new token_default(type, tag, nesting); |
| 3512 | let token_meta = null; |
| 3513 | if (nesting < 0) { |
| 3514 | this.level--; |
| 3515 | this.delimiters = this._prev_delimiters.pop(); |
| 3516 | } |
| 3517 | token.level = this.level; |
| 3518 | if (nesting > 0) { |
| 3519 | this.level++; |
| 3520 | this._prev_delimiters.push(this.delimiters); |
| 3521 | this.delimiters = []; |
| 3522 | token_meta = { delimiters: this.delimiters }; |
| 3523 | } |
| 3524 | this.pendingLevel = this.level; |
| 3525 | this.tokens.push(token); |
| 3526 | this.tokens_meta.push(token_meta); |
| 3527 | return token; |
| 3528 | }; |
| 3529 | StateInline.prototype.scanDelims = function(start, canSplitWord) { |
| 3530 | const max = this.posMax; |
| 3531 | const marker = this.src.charCodeAt(start); |
| 3532 | let lastChar; |
| 3533 | if (start === 0) { |
| 3534 | lastChar = 32; |
| 3535 | } else if (start === 1) { |
| 3536 | lastChar = this.src.charCodeAt(0); |
| 3537 | if ((lastChar & 63488) === 55296) { |
| 3538 | lastChar = 65533; |
| 3539 | } |
| 3540 | } else { |
| 3541 | lastChar = this.src.charCodeAt(start - 1); |
| 3542 | if ((lastChar & 64512) === 56320) { |
| 3543 | const highSurr = this.src.charCodeAt(start - 2); |
| 3544 | lastChar = (highSurr & 64512) === 55296 ? 65536 + (highSurr - 55296 << 10) + (lastChar - 56320) : 65533; |
| 3545 | } else if ((lastChar & 64512) === 55296) { |
| 3546 | lastChar = 65533; |
| 3547 | } |
| 3548 | } |
| 3549 | let pos = start; |
| 3550 | while (pos < max && this.src.charCodeAt(pos) === marker) { |
| 3551 | pos++; |
| 3552 | } |
| 3553 | const count = pos - start; |
| 3554 | let nextChar = pos < max ? this.src.charCodeAt(pos) : 32; |
| 3555 | if ((nextChar & 64512) === 55296) { |
| 3556 | const lowSurr = this.src.charCodeAt(pos + 1); |
| 3557 | nextChar = (lowSurr & 64512) === 56320 ? 65536 + (nextChar - 55296 << 10) + (lowSurr - 56320) : 65533; |
| 3558 | } else if ((nextChar & 64512) === 56320) { |
| 3559 | nextChar = 65533; |
| 3560 | } |
| 3561 | const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar); |
| 3562 | const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar); |
| 3563 | const isLastWhiteSpace = isWhiteSpace(lastChar); |
| 3564 | const isNextWhiteSpace = isWhiteSpace(nextChar); |
| 3565 | const left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar); |
| 3566 | const right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar); |
| 3567 | const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar); |
| 3568 | const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar); |
| 3569 | return { can_open, can_close, length: count }; |
| 3570 | }; |
| 3571 | StateInline.prototype.Token = token_default; |
| 3572 | var state_inline_default = StateInline; |
| 3573 | |
| 3574 | // node_modules/markdown-it/lib/rules_inline/text.mjs |
| 3575 | function isTerminatorChar(ch) { |
| 3576 | switch (ch) { |
| 3577 | case 10: |
| 3578 | case 33: |
| 3579 | case 35: |
| 3580 | case 36: |
| 3581 | case 37: |
| 3582 | case 38: |
| 3583 | case 42: |
| 3584 | case 43: |
| 3585 | case 45: |
| 3586 | case 58: |
| 3587 | case 60: |
| 3588 | case 61: |
| 3589 | case 62: |
| 3590 | case 64: |
| 3591 | case 91: |
| 3592 | case 92: |
| 3593 | case 93: |
| 3594 | case 94: |
| 3595 | case 95: |
| 3596 | case 96: |
| 3597 | case 123: |
| 3598 | case 125: |
| 3599 | case 126: |
| 3600 | return true; |
| 3601 | default: |
| 3602 | return false; |
| 3603 | } |
| 3604 | } |
| 3605 | function text(state, silent) { |
| 3606 | let pos = state.pos; |
| 3607 | while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) { |
| 3608 | pos++; |
| 3609 | } |
| 3610 | if (pos === state.pos) { |
| 3611 | return false; |
| 3612 | } |
| 3613 | if (!silent) { |
| 3614 | state.pending += state.src.slice(state.pos, pos); |
| 3615 | } |
| 3616 | state.pos = pos; |
| 3617 | return true; |
| 3618 | } |
| 3619 | |
| 3620 | // node_modules/markdown-it/lib/rules_inline/linkify.mjs |
| 3621 | var SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i; |
| 3622 | function linkify2(state, silent) { |
| 3623 | if (!state.md.options.linkify) return false; |
| 3624 | if (state.linkLevel > 0) return false; |
| 3625 | const pos = state.pos; |
| 3626 | const max = state.posMax; |
| 3627 | if (pos + 3 > max) return false; |
| 3628 | if (state.src.charCodeAt(pos) !== 58) return false; |
| 3629 | if (state.src.charCodeAt(pos + 1) !== 47) return false; |
| 3630 | if (state.src.charCodeAt(pos + 2) !== 47) return false; |
| 3631 | const match2 = state.pending.match(SCHEME_RE); |
| 3632 | if (!match2) return false; |
| 3633 | const proto = match2[1]; |
| 3634 | const link2 = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length)); |
| 3635 | if (!link2) return false; |
| 3636 | let url = link2.url; |
| 3637 | if (url.length <= proto.length) return false; |
| 3638 | let urlEnd = url.length; |
| 3639 | while (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 42) { |
| 3640 | urlEnd--; |
| 3641 | } |
| 3642 | if (urlEnd !== url.length) { |
| 3643 | url = url.slice(0, urlEnd); |
| 3644 | } |
| 3645 | const fullUrl = state.md.normalizeLink(url); |
| 3646 | if (!state.md.validateLink(fullUrl)) return false; |
| 3647 | if (!silent) { |
| 3648 | state.pending = state.pending.slice(0, -proto.length); |
| 3649 | const token_o = state.push("link_open", "a", 1); |
| 3650 | token_o.attrs = [["href", fullUrl]]; |
| 3651 | token_o.markup = "linkify"; |
| 3652 | token_o.info = "auto"; |
| 3653 | const token_t = state.push("text", "", 0); |
| 3654 | token_t.content = state.md.normalizeLinkText(url); |
| 3655 | const token_c = state.push("link_close", "a", -1); |
| 3656 | token_c.markup = "linkify"; |
| 3657 | token_c.info = "auto"; |
| 3658 | } |
| 3659 | state.pos += url.length - proto.length; |
| 3660 | return true; |
| 3661 | } |
| 3662 | |
| 3663 | // node_modules/markdown-it/lib/rules_inline/newline.mjs |
| 3664 | function newline(state, silent) { |
| 3665 | let pos = state.pos; |
| 3666 | if (state.src.charCodeAt(pos) !== 10) { |
| 3667 | return false; |
| 3668 | } |
| 3669 | const pmax = state.pending.length - 1; |
| 3670 | const max = state.posMax; |
| 3671 | if (!silent) { |
| 3672 | if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) { |
| 3673 | if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) { |
| 3674 | let ws = pmax - 1; |
| 3675 | while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--; |
| 3676 | state.pending = state.pending.slice(0, ws); |
| 3677 | state.push("hardbreak", "br", 0); |
| 3678 | } else { |
| 3679 | state.pending = state.pending.slice(0, -1); |
| 3680 | state.push("softbreak", "br", 0); |
| 3681 | } |
| 3682 | } else { |
| 3683 | state.push("softbreak", "br", 0); |
| 3684 | } |
| 3685 | } |
| 3686 | pos++; |
| 3687 | while (pos < max && isSpace(state.src.charCodeAt(pos))) { |
| 3688 | pos++; |
| 3689 | } |
| 3690 | state.pos = pos; |
| 3691 | return true; |
| 3692 | } |
| 3693 | |
| 3694 | // node_modules/markdown-it/lib/rules_inline/escape.mjs |
| 3695 | var ESCAPED = []; |
| 3696 | for (let i = 0; i < 256; i++) { |
| 3697 | ESCAPED.push(0); |
| 3698 | } |
| 3699 | "\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(ch) { |
| 3700 | ESCAPED[ch.charCodeAt(0)] = 1; |
| 3701 | }); |
| 3702 | function escape2(state, silent) { |
| 3703 | let pos = state.pos; |
| 3704 | const max = state.posMax; |
| 3705 | if (state.src.charCodeAt(pos) !== 92) return false; |
| 3706 | pos++; |
| 3707 | if (pos >= max) return false; |
| 3708 | let ch1 = state.src.charCodeAt(pos); |
| 3709 | if (ch1 === 10) { |
| 3710 | if (!silent) { |
| 3711 | state.push("hardbreak", "br", 0); |
| 3712 | } |
| 3713 | pos++; |
| 3714 | while (pos < max) { |
| 3715 | ch1 = state.src.charCodeAt(pos); |
| 3716 | if (!isSpace(ch1)) break; |
| 3717 | pos++; |
| 3718 | } |
| 3719 | state.pos = pos; |
| 3720 | return true; |
| 3721 | } |
| 3722 | if (ch1 === 32) { |
| 3723 | if (!silent) { |
| 3724 | const token = state.push("text_special", "", 0); |
| 3725 | token.content = "\\"; |
| 3726 | token.markup = "\\"; |
| 3727 | token.info = "escape"; |
| 3728 | } |
| 3729 | state.pos = pos; |
| 3730 | return true; |
| 3731 | } |
| 3732 | let escapedStr = state.src[pos]; |
| 3733 | if (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) { |
| 3734 | const ch2 = state.src.charCodeAt(pos + 1); |
| 3735 | if (ch2 >= 56320 && ch2 <= 57343) { |
| 3736 | escapedStr += state.src[pos + 1]; |
| 3737 | pos++; |
| 3738 | } |
| 3739 | } |
| 3740 | const origStr = "\\" + escapedStr; |
| 3741 | if (!silent) { |
| 3742 | const token = state.push("text_special", "", 0); |
| 3743 | if (ch1 < 256 && ESCAPED[ch1] !== 0) { |
| 3744 | token.content = escapedStr; |
| 3745 | } else { |
| 3746 | token.content = origStr; |
| 3747 | } |
| 3748 | token.markup = origStr; |
| 3749 | token.info = "escape"; |
| 3750 | } |
| 3751 | state.pos = pos + 1; |
| 3752 | return true; |
| 3753 | } |
| 3754 | |
| 3755 | // node_modules/markdown-it/lib/rules_inline/backticks.mjs |
| 3756 | function backtick(state, silent) { |
| 3757 | let pos = state.pos; |
| 3758 | const ch = state.src.charCodeAt(pos); |
| 3759 | if (ch !== 96) { |
| 3760 | return false; |
| 3761 | } |
| 3762 | const start = pos; |
| 3763 | pos++; |
| 3764 | const max = state.posMax; |
| 3765 | while (pos < max && state.src.charCodeAt(pos) === 96) { |
| 3766 | pos++; |
| 3767 | } |
| 3768 | const marker = state.src.slice(start, pos); |
| 3769 | const openerLength = marker.length; |
| 3770 | if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) { |
| 3771 | if (!silent) state.pending += marker; |
| 3772 | state.pos += openerLength; |
| 3773 | return true; |
| 3774 | } |
| 3775 | let matchEnd = pos; |
| 3776 | let matchStart; |
| 3777 | while ((matchStart = state.src.indexOf("`", matchEnd)) !== -1) { |
| 3778 | matchEnd = matchStart + 1; |
| 3779 | while (matchEnd < max && state.src.charCodeAt(matchEnd) === 96) { |
| 3780 | matchEnd++; |
| 3781 | } |
| 3782 | const closerLength = matchEnd - matchStart; |
| 3783 | if (closerLength === openerLength) { |
| 3784 | if (!silent) { |
| 3785 | const token = state.push("code_inline", "code", 0); |
| 3786 | token.markup = marker; |
| 3787 | token.content = state.src.slice(pos, matchStart).replace(/\n/g, " ").replace(/^ (.+) $/, "$1"); |
| 3788 | } |
| 3789 | state.pos = matchEnd; |
| 3790 | return true; |
| 3791 | } |
| 3792 | state.backticks[closerLength] = matchStart; |
| 3793 | } |
| 3794 | state.backticksScanned = true; |
| 3795 | if (!silent) state.pending += marker; |
| 3796 | state.pos += openerLength; |
| 3797 | return true; |
| 3798 | } |
| 3799 | |
| 3800 | // node_modules/markdown-it/lib/rules_inline/strikethrough.mjs |
| 3801 | function strikethrough_tokenize(state, silent) { |
| 3802 | const start = state.pos; |
| 3803 | const marker = state.src.charCodeAt(start); |
| 3804 | if (silent) { |
| 3805 | return false; |
| 3806 | } |
| 3807 | if (marker !== 126) { |
| 3808 | return false; |
| 3809 | } |
| 3810 | const scanned = state.scanDelims(state.pos, true); |
| 3811 | let len = scanned.length; |
| 3812 | const ch = String.fromCharCode(marker); |
| 3813 | if (len < 2) { |
| 3814 | return false; |
| 3815 | } |
| 3816 | let token; |
| 3817 | if (len % 2) { |
| 3818 | token = state.push("text", "", 0); |
| 3819 | token.content = ch; |
| 3820 | len--; |
| 3821 | } |
| 3822 | for (let i = 0; i < len; i += 2) { |
| 3823 | token = state.push("text", "", 0); |
| 3824 | token.content = ch + ch; |
| 3825 | state.delimiters.push({ |
| 3826 | marker, |
| 3827 | length: 0, |
| 3828 | // disable "rule of 3" length checks meant for emphasis |
| 3829 | token: state.tokens.length - 1, |
| 3830 | end: -1, |
| 3831 | open: scanned.can_open, |
| 3832 | close: scanned.can_close |
| 3833 | }); |
| 3834 | } |
| 3835 | state.pos += scanned.length; |
| 3836 | return true; |
| 3837 | } |
| 3838 | function postProcess(state, delimiters) { |
| 3839 | let token; |
| 3840 | const loneMarkers = []; |
| 3841 | const max = delimiters.length; |
| 3842 | for (let i = 0; i < max; i++) { |
| 3843 | const startDelim = delimiters[i]; |
| 3844 | if (startDelim.marker !== 126) { |
| 3845 | continue; |
| 3846 | } |
| 3847 | if (startDelim.end === -1) { |
| 3848 | continue; |
| 3849 | } |
| 3850 | const endDelim = delimiters[startDelim.end]; |
| 3851 | token = state.tokens[startDelim.token]; |
| 3852 | token.type = "s_open"; |
| 3853 | token.tag = "s"; |
| 3854 | token.nesting = 1; |
| 3855 | token.markup = "~~"; |
| 3856 | token.content = ""; |
| 3857 | token = state.tokens[endDelim.token]; |
| 3858 | token.type = "s_close"; |
| 3859 | token.tag = "s"; |
| 3860 | token.nesting = -1; |
| 3861 | token.markup = "~~"; |
| 3862 | token.content = ""; |
| 3863 | if (state.tokens[endDelim.token - 1].type === "text" && state.tokens[endDelim.token - 1].content === "~") { |
| 3864 | loneMarkers.push(endDelim.token - 1); |
| 3865 | } |
| 3866 | } |
| 3867 | while (loneMarkers.length) { |
| 3868 | const i = loneMarkers.pop(); |
| 3869 | let j = i + 1; |
| 3870 | while (j < state.tokens.length && state.tokens[j].type === "s_close") { |
| 3871 | j++; |
| 3872 | } |
| 3873 | j--; |
| 3874 | if (i !== j) { |
| 3875 | token = state.tokens[j]; |
| 3876 | state.tokens[j] = state.tokens[i]; |
| 3877 | state.tokens[i] = token; |
| 3878 | } |
| 3879 | } |
| 3880 | } |
| 3881 | function strikethrough_postProcess(state) { |
| 3882 | const tokens_meta = state.tokens_meta; |
| 3883 | const max = state.tokens_meta.length; |
| 3884 | postProcess(state, state.delimiters); |
| 3885 | for (let curr = 0; curr < max; curr++) { |
| 3886 | if (tokens_meta[curr] && tokens_meta[curr].delimiters) { |
| 3887 | postProcess(state, tokens_meta[curr].delimiters); |
| 3888 | } |
| 3889 | } |
| 3890 | } |
| 3891 | var strikethrough_default = { |
| 3892 | tokenize: strikethrough_tokenize, |
| 3893 | postProcess: strikethrough_postProcess |
| 3894 | }; |
| 3895 | |
| 3896 | // node_modules/markdown-it/lib/rules_inline/emphasis.mjs |
| 3897 | function emphasis_tokenize(state, silent) { |
| 3898 | const start = state.pos; |
| 3899 | const marker = state.src.charCodeAt(start); |
| 3900 | if (silent) { |
| 3901 | return false; |
| 3902 | } |
| 3903 | if (marker !== 95 && marker !== 42) { |
| 3904 | return false; |
| 3905 | } |
| 3906 | const scanned = state.scanDelims(state.pos, marker === 42); |
| 3907 | for (let i = 0; i < scanned.length; i++) { |
| 3908 | const token = state.push("text", "", 0); |
| 3909 | token.content = String.fromCharCode(marker); |
| 3910 | state.delimiters.push({ |
| 3911 | // Char code of the starting marker (number). |
| 3912 | // |
| 3913 | marker, |
| 3914 | // Total length of these series of delimiters. |
| 3915 | // |
| 3916 | length: scanned.length, |
| 3917 | // A position of the token this delimiter corresponds to. |
| 3918 | // |
| 3919 | token: state.tokens.length - 1, |
| 3920 | // If this delimiter is matched as a valid opener, `end` will be |
| 3921 | // equal to its position, otherwise it's `-1`. |
| 3922 | // |
| 3923 | end: -1, |
| 3924 | // Boolean flags that determine if this delimiter could open or close |
| 3925 | // an emphasis. |
| 3926 | // |
| 3927 | open: scanned.can_open, |
| 3928 | close: scanned.can_close |
| 3929 | }); |
| 3930 | } |
| 3931 | state.pos += scanned.length; |
| 3932 | return true; |
| 3933 | } |
| 3934 | function postProcess2(state, delimiters) { |
| 3935 | const max = delimiters.length; |
| 3936 | for (let i = max - 1; i >= 0; i--) { |
| 3937 | const startDelim = delimiters[i]; |
| 3938 | if (startDelim.marker !== 95 && startDelim.marker !== 42) { |
| 3939 | continue; |
| 3940 | } |
| 3941 | if (startDelim.end === -1) { |
| 3942 | continue; |
| 3943 | } |
| 3944 | const endDelim = delimiters[startDelim.end]; |
| 3945 | const isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && // check that first two markers match and adjacent |
| 3946 | delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && // check that last two markers are adjacent (we can safely assume they match) |
| 3947 | delimiters[startDelim.end + 1].token === endDelim.token + 1; |
| 3948 | const ch = String.fromCharCode(startDelim.marker); |
| 3949 | const token_o = state.tokens[startDelim.token]; |
| 3950 | token_o.type = isStrong ? "strong_open" : "em_open"; |
| 3951 | token_o.tag = isStrong ? "strong" : "em"; |
| 3952 | token_o.nesting = 1; |
| 3953 | token_o.markup = isStrong ? ch + ch : ch; |
| 3954 | token_o.content = ""; |
| 3955 | const token_c = state.tokens[endDelim.token]; |
| 3956 | token_c.type = isStrong ? "strong_close" : "em_close"; |
| 3957 | token_c.tag = isStrong ? "strong" : "em"; |
| 3958 | token_c.nesting = -1; |
| 3959 | token_c.markup = isStrong ? ch + ch : ch; |
| 3960 | token_c.content = ""; |
| 3961 | if (isStrong) { |
| 3962 | state.tokens[delimiters[i - 1].token].content = ""; |
| 3963 | state.tokens[delimiters[startDelim.end + 1].token].content = ""; |
| 3964 | i--; |
| 3965 | } |
| 3966 | } |
| 3967 | } |
| 3968 | function emphasis_post_process(state) { |
| 3969 | const tokens_meta = state.tokens_meta; |
| 3970 | const max = state.tokens_meta.length; |
| 3971 | postProcess2(state, state.delimiters); |
| 3972 | for (let curr = 0; curr < max; curr++) { |
| 3973 | if (tokens_meta[curr] && tokens_meta[curr].delimiters) { |
| 3974 | postProcess2(state, tokens_meta[curr].delimiters); |
| 3975 | } |
| 3976 | } |
| 3977 | } |
| 3978 | var emphasis_default = { |
| 3979 | tokenize: emphasis_tokenize, |
| 3980 | postProcess: emphasis_post_process |
| 3981 | }; |
| 3982 | |
| 3983 | // node_modules/markdown-it/lib/rules_inline/link.mjs |
| 3984 | function link(state, silent) { |
| 3985 | let code2, label, res, ref; |
| 3986 | let href = ""; |
| 3987 | let title = ""; |
| 3988 | let start = state.pos; |
| 3989 | let parseReference = true; |
| 3990 | if (state.src.charCodeAt(state.pos) !== 91) { |
| 3991 | return false; |
| 3992 | } |
| 3993 | const oldPos = state.pos; |
| 3994 | const max = state.posMax; |
| 3995 | const labelStart = state.pos + 1; |
| 3996 | const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true); |
| 3997 | if (labelEnd < 0) { |
| 3998 | return false; |
| 3999 | } |
| 4000 | let pos = labelEnd + 1; |
| 4001 | if (pos < max && state.src.charCodeAt(pos) === 40) { |
| 4002 | parseReference = false; |
| 4003 | pos++; |
| 4004 | for (; pos < max; pos++) { |
| 4005 | code2 = state.src.charCodeAt(pos); |
| 4006 | if (!isSpace(code2) && code2 !== 10) { |
| 4007 | break; |
| 4008 | } |
| 4009 | } |
| 4010 | if (pos >= max) { |
| 4011 | return false; |
| 4012 | } |
| 4013 | start = pos; |
| 4014 | res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax); |
| 4015 | if (res.ok) { |
| 4016 | href = state.md.normalizeLink(res.str); |
| 4017 | if (state.md.validateLink(href)) { |
| 4018 | pos = res.pos; |
| 4019 | } else { |
| 4020 | href = ""; |
| 4021 | } |
| 4022 | start = pos; |
| 4023 | for (; pos < max; pos++) { |
| 4024 | code2 = state.src.charCodeAt(pos); |
| 4025 | if (!isSpace(code2) && code2 !== 10) { |
| 4026 | break; |
| 4027 | } |
| 4028 | } |
| 4029 | res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax); |
| 4030 | if (pos < max && start !== pos && res.ok) { |
| 4031 | title = res.str; |
| 4032 | pos = res.pos; |
| 4033 | for (; pos < max; pos++) { |
| 4034 | code2 = state.src.charCodeAt(pos); |
| 4035 | if (!isSpace(code2) && code2 !== 10) { |
| 4036 | break; |
| 4037 | } |
| 4038 | } |
| 4039 | } |
| 4040 | } |
| 4041 | if (pos >= max || state.src.charCodeAt(pos) !== 41) { |
| 4042 | parseReference = true; |
| 4043 | } |
| 4044 | pos++; |
| 4045 | } |
| 4046 | if (parseReference) { |
| 4047 | if (typeof state.env.references === "undefined") { |
| 4048 | return false; |
| 4049 | } |
| 4050 | if (pos < max && state.src.charCodeAt(pos) === 91) { |
| 4051 | start = pos + 1; |
| 4052 | pos = state.md.helpers.parseLinkLabel(state, pos); |
| 4053 | if (pos >= 0) { |
| 4054 | label = state.src.slice(start, pos++); |
| 4055 | } else { |
| 4056 | pos = labelEnd + 1; |
| 4057 | } |
| 4058 | } else { |
| 4059 | pos = labelEnd + 1; |
| 4060 | } |
| 4061 | if (!label) { |
| 4062 | label = state.src.slice(labelStart, labelEnd); |
| 4063 | } |
| 4064 | ref = state.env.references[normalizeReference(label)]; |
| 4065 | if (!ref) { |
| 4066 | state.pos = oldPos; |
| 4067 | return false; |
| 4068 | } |
| 4069 | href = ref.href; |
| 4070 | title = ref.title; |
| 4071 | } |
| 4072 | if (!silent) { |
| 4073 | state.pos = labelStart; |
| 4074 | state.posMax = labelEnd; |
| 4075 | const token_o = state.push("link_open", "a", 1); |
| 4076 | const attrs = [["href", href]]; |
| 4077 | token_o.attrs = attrs; |
| 4078 | if (title) { |
| 4079 | attrs.push(["title", title]); |
| 4080 | } |
| 4081 | state.linkLevel++; |
| 4082 | state.md.inline.tokenize(state); |
| 4083 | state.linkLevel--; |
| 4084 | state.push("link_close", "a", -1); |
| 4085 | } |
| 4086 | state.pos = pos; |
| 4087 | state.posMax = max; |
| 4088 | return true; |
| 4089 | } |
| 4090 | |
| 4091 | // node_modules/markdown-it/lib/rules_inline/image.mjs |
| 4092 | function image(state, silent) { |
| 4093 | let code2, content, label, pos, ref, res, title, start; |
| 4094 | let href = ""; |
| 4095 | const oldPos = state.pos; |
| 4096 | const max = state.posMax; |
| 4097 | if (state.src.charCodeAt(state.pos) !== 33) { |
| 4098 | return false; |
| 4099 | } |
| 4100 | if (state.src.charCodeAt(state.pos + 1) !== 91) { |
| 4101 | return false; |
| 4102 | } |
| 4103 | const labelStart = state.pos + 2; |
| 4104 | const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false); |
| 4105 | if (labelEnd < 0) { |
| 4106 | return false; |
| 4107 | } |
| 4108 | pos = labelEnd + 1; |
| 4109 | if (pos < max && state.src.charCodeAt(pos) === 40) { |
| 4110 | pos++; |
| 4111 | for (; pos < max; pos++) { |
| 4112 | code2 = state.src.charCodeAt(pos); |
| 4113 | if (!isSpace(code2) && code2 !== 10) { |
| 4114 | break; |
| 4115 | } |
| 4116 | } |
| 4117 | if (pos >= max) { |
| 4118 | return false; |
| 4119 | } |
| 4120 | start = pos; |
| 4121 | res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax); |
| 4122 | if (res.ok) { |
| 4123 | href = state.md.normalizeLink(res.str); |
| 4124 | if (state.md.validateLink(href)) { |
| 4125 | pos = res.pos; |
| 4126 | } else { |
| 4127 | href = ""; |
| 4128 | } |
| 4129 | } |
| 4130 | start = pos; |
| 4131 | for (; pos < max; pos++) { |
| 4132 | code2 = state.src.charCodeAt(pos); |
| 4133 | if (!isSpace(code2) && code2 !== 10) { |
| 4134 | break; |
| 4135 | } |
| 4136 | } |
| 4137 | res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax); |
| 4138 | if (pos < max && start !== pos && res.ok) { |
| 4139 | title = res.str; |
| 4140 | pos = res.pos; |
| 4141 | for (; pos < max; pos++) { |
| 4142 | code2 = state.src.charCodeAt(pos); |
| 4143 | if (!isSpace(code2) && code2 !== 10) { |
| 4144 | break; |
| 4145 | } |
| 4146 | } |
| 4147 | } else { |
| 4148 | title = ""; |
| 4149 | } |
| 4150 | if (pos >= max || state.src.charCodeAt(pos) !== 41) { |
| 4151 | state.pos = oldPos; |
| 4152 | return false; |
| 4153 | } |
| 4154 | pos++; |
| 4155 | } else { |
| 4156 | if (typeof state.env.references === "undefined") { |
| 4157 | return false; |
| 4158 | } |
| 4159 | if (pos < max && state.src.charCodeAt(pos) === 91) { |
| 4160 | start = pos + 1; |
| 4161 | pos = state.md.helpers.parseLinkLabel(state, pos); |
| 4162 | if (pos >= 0) { |
| 4163 | label = state.src.slice(start, pos++); |
| 4164 | } else { |
| 4165 | pos = labelEnd + 1; |
| 4166 | } |
| 4167 | } else { |
| 4168 | pos = labelEnd + 1; |
| 4169 | } |
| 4170 | if (!label) { |
| 4171 | label = state.src.slice(labelStart, labelEnd); |
| 4172 | } |
| 4173 | ref = state.env.references[normalizeReference(label)]; |
| 4174 | if (!ref) { |
| 4175 | state.pos = oldPos; |
| 4176 | return false; |
| 4177 | } |
| 4178 | href = ref.href; |
| 4179 | title = ref.title; |
| 4180 | } |
| 4181 | if (!silent) { |
| 4182 | content = state.src.slice(labelStart, labelEnd); |
| 4183 | const tokens = []; |
| 4184 | state.md.inline.parse( |
| 4185 | content, |
| 4186 | state.md, |
| 4187 | state.env, |
| 4188 | tokens |
| 4189 | ); |
| 4190 | const token = state.push("image", "img", 0); |
| 4191 | const attrs = [["src", href], ["alt", ""]]; |
| 4192 | token.attrs = attrs; |
| 4193 | token.children = tokens; |
| 4194 | token.content = content; |
| 4195 | if (title) { |
| 4196 | attrs.push(["title", title]); |
| 4197 | } |
| 4198 | } |
| 4199 | state.pos = pos; |
| 4200 | state.posMax = max; |
| 4201 | return true; |
| 4202 | } |
| 4203 | |
| 4204 | // node_modules/markdown-it/lib/rules_inline/autolink.mjs |
| 4205 | var EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/; |
| 4206 | var AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/; |
| 4207 | function autolink(state, silent) { |
| 4208 | let pos = state.pos; |
| 4209 | if (state.src.charCodeAt(pos) !== 60) { |
| 4210 | return false; |
| 4211 | } |
| 4212 | const start = state.pos; |
| 4213 | const max = state.posMax; |
| 4214 | for (; ; ) { |
| 4215 | if (++pos >= max) return false; |
| 4216 | const ch = state.src.charCodeAt(pos); |
| 4217 | if (ch === 60) return false; |
| 4218 | if (ch === 62) break; |
| 4219 | } |
| 4220 | const url = state.src.slice(start + 1, pos); |
| 4221 | if (AUTOLINK_RE.test(url)) { |
| 4222 | const fullUrl = state.md.normalizeLink(url); |
| 4223 | if (!state.md.validateLink(fullUrl)) { |
| 4224 | return false; |
| 4225 | } |
| 4226 | if (!silent) { |
| 4227 | const token_o = state.push("link_open", "a", 1); |
| 4228 | token_o.attrs = [["href", fullUrl]]; |
| 4229 | token_o.markup = "autolink"; |
| 4230 | token_o.info = "auto"; |
| 4231 | const token_t = state.push("text", "", 0); |
| 4232 | token_t.content = state.md.normalizeLinkText(url); |
| 4233 | const token_c = state.push("link_close", "a", -1); |
| 4234 | token_c.markup = "autolink"; |
| 4235 | token_c.info = "auto"; |
| 4236 | } |
| 4237 | state.pos += url.length + 2; |
| 4238 | return true; |
| 4239 | } |
| 4240 | if (EMAIL_RE.test(url)) { |
| 4241 | const fullUrl = state.md.normalizeLink("mailto:" + url); |
| 4242 | if (!state.md.validateLink(fullUrl)) { |
| 4243 | return false; |
| 4244 | } |
| 4245 | if (!silent) { |
| 4246 | const token_o = state.push("link_open", "a", 1); |
| 4247 | token_o.attrs = [["href", fullUrl]]; |
| 4248 | token_o.markup = "autolink"; |
| 4249 | token_o.info = "auto"; |
| 4250 | const token_t = state.push("text", "", 0); |
| 4251 | token_t.content = state.md.normalizeLinkText(url); |
| 4252 | const token_c = state.push("link_close", "a", -1); |
| 4253 | token_c.markup = "autolink"; |
| 4254 | token_c.info = "auto"; |
| 4255 | } |
| 4256 | state.pos += url.length + 2; |
| 4257 | return true; |
| 4258 | } |
| 4259 | return false; |
| 4260 | } |
| 4261 | |
| 4262 | // node_modules/markdown-it/lib/rules_inline/html_inline.mjs |
| 4263 | function isLinkOpen2(str) { |
| 4264 | return /^<a[>\s]/i.test(str); |
| 4265 | } |
| 4266 | function isLinkClose2(str) { |
| 4267 | return /^<\/a\s*>/i.test(str); |
| 4268 | } |
| 4269 | function isLetter(ch) { |
| 4270 | const lc = ch | 32; |
| 4271 | return lc >= 97 && lc <= 122; |
| 4272 | } |
| 4273 | function html_inline(state, silent) { |
| 4274 | if (!state.md.options.html) { |
| 4275 | return false; |
| 4276 | } |
| 4277 | const max = state.posMax; |
| 4278 | const pos = state.pos; |
| 4279 | if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) { |
| 4280 | return false; |
| 4281 | } |
| 4282 | const ch = state.src.charCodeAt(pos + 1); |
| 4283 | if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) { |
| 4284 | return false; |
| 4285 | } |
| 4286 | const match2 = state.src.slice(pos).match(HTML_TAG_RE); |
| 4287 | if (!match2) { |
| 4288 | return false; |
| 4289 | } |
| 4290 | if (!silent) { |
| 4291 | const token = state.push("html_inline", "", 0); |
| 4292 | token.content = match2[0]; |
| 4293 | if (isLinkOpen2(token.content)) state.linkLevel++; |
| 4294 | if (isLinkClose2(token.content)) state.linkLevel--; |
| 4295 | } |
| 4296 | state.pos += match2[0].length; |
| 4297 | return true; |
| 4298 | } |
| 4299 | |
| 4300 | // node_modules/markdown-it/lib/rules_inline/entity.mjs |
| 4301 | var DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i; |
| 4302 | var NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i; |
| 4303 | function entity(state, silent) { |
| 4304 | const pos = state.pos; |
| 4305 | const max = state.posMax; |
| 4306 | if (state.src.charCodeAt(pos) !== 38) return false; |
| 4307 | if (pos + 1 >= max) return false; |
| 4308 | const ch = state.src.charCodeAt(pos + 1); |
| 4309 | if (ch === 35) { |
| 4310 | const match2 = state.src.slice(pos).match(DIGITAL_RE); |
| 4311 | if (match2) { |
| 4312 | if (!silent) { |
| 4313 | const code2 = match2[1][0].toLowerCase() === "x" ? parseInt(match2[1].slice(1), 16) : parseInt(match2[1], 10); |
| 4314 | const token = state.push("text_special", "", 0); |
| 4315 | token.content = isValidEntityCode(code2) ? fromCodePoint2(code2) : fromCodePoint2(65533); |
| 4316 | token.markup = match2[0]; |
| 4317 | token.info = "entity"; |
| 4318 | } |
| 4319 | state.pos += match2[0].length; |
| 4320 | return true; |
| 4321 | } |
| 4322 | } else { |
| 4323 | const match2 = state.src.slice(pos).match(NAMED_RE); |
| 4324 | if (match2) { |
| 4325 | const decoded = decodeHTMLStrict(match2[0]); |
| 4326 | if (decoded !== match2[0]) { |
| 4327 | if (!silent) { |
| 4328 | const token = state.push("text_special", "", 0); |
| 4329 | token.content = decoded; |
| 4330 | token.markup = match2[0]; |
| 4331 | token.info = "entity"; |
| 4332 | } |
| 4333 | state.pos += match2[0].length; |
| 4334 | return true; |
| 4335 | } |
| 4336 | } |
| 4337 | } |
| 4338 | return false; |
| 4339 | } |
| 4340 | |
| 4341 | // node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs |
| 4342 | function processDelimiters(delimiters) { |
| 4343 | const openersBottom = {}; |
| 4344 | const max = delimiters.length; |
| 4345 | if (!max) return; |
| 4346 | let headerIdx = 0; |
| 4347 | let lastTokenIdx = -2; |
| 4348 | const jumps = []; |
| 4349 | for (let closerIdx = 0; closerIdx < max; closerIdx++) { |
| 4350 | const closer = delimiters[closerIdx]; |
| 4351 | jumps.push(0); |
| 4352 | if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) { |
| 4353 | headerIdx = closerIdx; |
| 4354 | } |
| 4355 | lastTokenIdx = closer.token; |
| 4356 | closer.length = closer.length || 0; |
| 4357 | if (!closer.close) continue; |
| 4358 | if (!openersBottom.hasOwnProperty(closer.marker)) { |
| 4359 | openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]; |
| 4360 | } |
| 4361 | const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3]; |
| 4362 | let openerIdx = headerIdx - jumps[headerIdx] - 1; |
| 4363 | let newMinOpenerIdx = openerIdx; |
| 4364 | for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) { |
| 4365 | const opener = delimiters[openerIdx]; |
| 4366 | if (opener.marker !== closer.marker) continue; |
| 4367 | if (opener.open && opener.end < 0) { |
| 4368 | let isOddMatch = false; |
| 4369 | if (opener.close || closer.open) { |
| 4370 | if ((opener.length + closer.length) % 3 === 0) { |
| 4371 | if (opener.length % 3 !== 0 || closer.length % 3 !== 0) { |
| 4372 | isOddMatch = true; |
| 4373 | } |
| 4374 | } |
| 4375 | } |
| 4376 | if (!isOddMatch) { |
| 4377 | const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0; |
| 4378 | jumps[closerIdx] = closerIdx - openerIdx + lastJump; |
| 4379 | jumps[openerIdx] = lastJump; |
| 4380 | closer.open = false; |
| 4381 | opener.end = closerIdx; |
| 4382 | opener.close = false; |
| 4383 | newMinOpenerIdx = -1; |
| 4384 | lastTokenIdx = -2; |
| 4385 | break; |
| 4386 | } |
| 4387 | } |
| 4388 | } |
| 4389 | if (newMinOpenerIdx !== -1) { |
| 4390 | openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx; |
| 4391 | } |
| 4392 | } |
| 4393 | } |
| 4394 | function link_pairs(state) { |
| 4395 | const tokens_meta = state.tokens_meta; |
| 4396 | const max = state.tokens_meta.length; |
| 4397 | processDelimiters(state.delimiters); |
| 4398 | for (let curr = 0; curr < max; curr++) { |
| 4399 | if (tokens_meta[curr] && tokens_meta[curr].delimiters) { |
| 4400 | processDelimiters(tokens_meta[curr].delimiters); |
| 4401 | } |
| 4402 | } |
| 4403 | } |
| 4404 | |
| 4405 | // node_modules/markdown-it/lib/rules_inline/fragments_join.mjs |
| 4406 | function fragments_join(state) { |
| 4407 | let curr, last; |
| 4408 | let level = 0; |
| 4409 | const tokens = state.tokens; |
| 4410 | const max = state.tokens.length; |
| 4411 | for (curr = last = 0; curr < max; curr++) { |
| 4412 | if (tokens[curr].nesting < 0) level--; |
| 4413 | tokens[curr].level = level; |
| 4414 | if (tokens[curr].nesting > 0) level++; |
| 4415 | if (tokens[curr].type === "text" && curr + 1 < max && tokens[curr + 1].type === "text") { |
| 4416 | tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; |
| 4417 | } else { |
| 4418 | if (curr !== last) { |
| 4419 | tokens[last] = tokens[curr]; |
| 4420 | } |
| 4421 | last++; |
| 4422 | } |
| 4423 | } |
| 4424 | if (curr !== last) { |
| 4425 | tokens.length = last; |
| 4426 | } |
| 4427 | } |
| 4428 | |
| 4429 | // node_modules/markdown-it/lib/parser_inline.mjs |
| 4430 | var _rules3 = [ |
| 4431 | ["text", text], |
| 4432 | ["linkify", linkify2], |
| 4433 | ["newline", newline], |
| 4434 | ["escape", escape2], |
| 4435 | ["backticks", backtick], |
| 4436 | ["strikethrough", strikethrough_default.tokenize], |
| 4437 | ["emphasis", emphasis_default.tokenize], |
| 4438 | ["link", link], |
| 4439 | ["image", image], |
| 4440 | ["autolink", autolink], |
| 4441 | ["html_inline", html_inline], |
| 4442 | ["entity", entity] |
| 4443 | ]; |
| 4444 | var _rules22 = [ |
| 4445 | ["balance_pairs", link_pairs], |
| 4446 | ["strikethrough", strikethrough_default.postProcess], |
| 4447 | ["emphasis", emphasis_default.postProcess], |
| 4448 | // rules for pairs separate '**' into its own text tokens, which may be left unused, |
| 4449 | // rule below merges unused segments back with the rest of the text |
| 4450 | ["fragments_join", fragments_join] |
| 4451 | ]; |
| 4452 | function ParserInline() { |
| 4453 | this.ruler = new ruler_default(); |
| 4454 | for (let i = 0; i < _rules3.length; i++) { |
| 4455 | this.ruler.push(_rules3[i][0], _rules3[i][1]); |
| 4456 | } |
| 4457 | this.ruler2 = new ruler_default(); |
| 4458 | for (let i = 0; i < _rules22.length; i++) { |
| 4459 | this.ruler2.push(_rules22[i][0], _rules22[i][1]); |
| 4460 | } |
| 4461 | } |
| 4462 | ParserInline.prototype.skipToken = function(state) { |
| 4463 | const pos = state.pos; |
| 4464 | const rules = this.ruler.getRules(""); |
| 4465 | const len = rules.length; |
| 4466 | const maxNesting = state.md.options.maxNesting; |
| 4467 | const cache = state.cache; |
| 4468 | if (typeof cache[pos] !== "undefined") { |
| 4469 | state.pos = cache[pos]; |
| 4470 | return; |
| 4471 | } |
| 4472 | let ok = false; |
| 4473 | if (state.level < maxNesting) { |
| 4474 | for (let i = 0; i < len; i++) { |
| 4475 | state.level++; |
| 4476 | ok = rules[i](state, true); |
| 4477 | state.level--; |
| 4478 | if (ok) { |
| 4479 | if (pos >= state.pos) { |
| 4480 | throw new Error("inline rule didn't increment state.pos"); |
| 4481 | } |
| 4482 | break; |
| 4483 | } |
| 4484 | } |
| 4485 | } else { |
| 4486 | state.pos = state.posMax; |
| 4487 | } |
| 4488 | if (!ok) { |
| 4489 | state.pos++; |
| 4490 | } |
| 4491 | cache[pos] = state.pos; |
| 4492 | }; |
| 4493 | ParserInline.prototype.tokenize = function(state) { |
| 4494 | const rules = this.ruler.getRules(""); |
| 4495 | const len = rules.length; |
| 4496 | const end = state.posMax; |
| 4497 | const maxNesting = state.md.options.maxNesting; |
| 4498 | while (state.pos < end) { |
| 4499 | const prevPos = state.pos; |
| 4500 | let ok = false; |
| 4501 | if (state.level < maxNesting) { |
| 4502 | for (let i = 0; i < len; i++) { |
| 4503 | ok = rules[i](state, false); |
| 4504 | if (ok) { |
| 4505 | if (prevPos >= state.pos) { |
| 4506 | throw new Error("inline rule didn't increment state.pos"); |
| 4507 | } |
| 4508 | break; |
| 4509 | } |
| 4510 | } |
| 4511 | } |
| 4512 | if (ok) { |
| 4513 | if (state.pos >= end) { |
| 4514 | break; |
| 4515 | } |
| 4516 | continue; |
| 4517 | } |
| 4518 | state.pending += state.src[state.pos++]; |
| 4519 | } |
| 4520 | if (state.pending) { |
| 4521 | state.pushPending(); |
| 4522 | } |
| 4523 | }; |
| 4524 | ParserInline.prototype.parse = function(str, md, env, outTokens) { |
| 4525 | const state = new this.State(str, md, env, outTokens); |
| 4526 | this.tokenize(state); |
| 4527 | const rules = this.ruler2.getRules(""); |
| 4528 | const len = rules.length; |
| 4529 | for (let i = 0; i < len; i++) { |
| 4530 | rules[i](state); |
| 4531 | } |
| 4532 | }; |
| 4533 | ParserInline.prototype.State = state_inline_default; |
| 4534 | var parser_inline_default = ParserInline; |
| 4535 | |
| 4536 | // node_modules/linkify-it/lib/re.mjs |
| 4537 | function re_default(opts) { |
| 4538 | const re = {}; |
| 4539 | opts = opts || {}; |
| 4540 | re.src_Any = regex_default.source; |
| 4541 | re.src_Cc = regex_default2.source; |
| 4542 | re.src_Z = regex_default6.source; |
| 4543 | re.src_P = regex_default4.source; |
| 4544 | re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join("|"); |
| 4545 | re.src_ZCc = [re.src_Z, re.src_Cc].join("|"); |
| 4546 | const text_separators = "[><\uFF5C]"; |
| 4547 | re.src_pseudo_letter = `(?:(?!${text_separators}|${re.src_ZPCc})${re.src_Any})`; |
| 4548 | re.src_ip4 = "(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; |
| 4549 | re.src_auth = `(?:(?:(?!${re.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`; |
| 4550 | re.src_port = "(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?"; |
| 4551 | re.src_host_terminator = `(?=$|${text_separators}|${re.src_ZPCc})(?!${opts["---"] ? "-(?!--)|" : "-|"}_|:\\d|\\.-|\\.(?!$|${re.src_ZPCc}))`; |
| 4552 | re.src_path = `(?:[/?#](?:(?!${re.src_ZCc}|${text_separators}|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!${re.src_ZCc}|\\]).)*\\]|\\((?:(?!${re.src_ZCc}|[)]).)*\\)|\\{(?:(?!${re.src_ZCc}|[}]).)*\\}|\\"(?:(?!${re.src_ZCc}|["]).)+\\"|\\'(?:(?!${re.src_ZCc}|[']).)+\\'|\\'(?=${re.src_pseudo_letter}|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!${re.src_ZCc}|[.]|$)|` + (opts["---"] ? "\\-(?!--(?:[^-]|$))(?:-*)|" : "\\-+|") + // allow `,,,` in paths |
| 4553 | `,(?!${re.src_ZCc}|$)|;(?!${re.src_ZCc}|$)|\\!+(?!${re.src_ZCc}|[!]|$)|\\?(?!${re.src_ZCc}|[?]|$))+|\\/)?`; |
| 4554 | re.src_email_name = '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]{0,63}'; |
| 4555 | re.src_xn = "xn--[a-z0-9\\-]{1,59}"; |
| 4556 | re.src_domain_root = // Allow letters & digits (http://test1) |
| 4557 | "(?:" + re.src_xn + `|${re.src_pseudo_letter}{1,63})`; |
| 4558 | re.src_domain = "(?:" + re.src_xn + `|(?:${re.src_pseudo_letter})|(?:${re.src_pseudo_letter}(?:-|${re.src_pseudo_letter}){0,61}${re.src_pseudo_letter}))`; |
| 4559 | re.src_host = `(?:(?:(?:(?:${re.src_domain})\\.)*${re.src_domain}))`; |
| 4560 | re.tpl_host_fuzzy = "(?:" + re.src_ip4 + `|(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%)))`; |
| 4561 | re.tpl_host_no_ip_fuzzy = `(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))`; |
| 4562 | re.src_host_strict = re.src_host + re.src_host_terminator; |
| 4563 | re.tpl_host_fuzzy_strict = re.tpl_host_fuzzy + re.src_host_terminator; |
| 4564 | re.src_host_port_strict = re.src_host + re.src_port + re.src_host_terminator; |
| 4565 | re.tpl_host_port_fuzzy_strict = re.tpl_host_fuzzy + re.src_port + re.src_host_terminator; |
| 4566 | re.tpl_host_port_no_ip_fuzzy_strict = re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator; |
| 4567 | re.tpl_host_fuzzy_test = `localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${re.src_ZPCc}|>|$))`; |
| 4568 | re.tpl_email_fuzzy = `(^|${text_separators}|"|\\(|${re.src_ZCc})(${re.src_email_name}@${re.tpl_host_fuzzy_strict})`; |
| 4569 | re.tpl_link_fuzzy = // Fuzzy link can't be prepended with .:/\- and non punctuation. |
| 4570 | // but can start with > (markdown blockquote) |
| 4571 | `(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uFF5C]|${re.src_ZPCc}))((?![$+<=>^\`|\uFF5C])${re.tpl_host_port_fuzzy_strict}${re.src_path})`; |
| 4572 | re.tpl_link_no_ip_fuzzy = // Fuzzy link can't be prepended with .:/\- and non punctuation. |
| 4573 | // but can start with > (markdown blockquote) |
| 4574 | `(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uFF5C]|${re.src_ZPCc}))((?![$+<=>^\`|\uFF5C])${re.tpl_host_port_no_ip_fuzzy_strict}${re.src_path})`; |
| 4575 | return re; |
| 4576 | } |
| 4577 | |
| 4578 | // node_modules/linkify-it/index.mjs |
| 4579 | function assign2(obj) { |
| 4580 | const sources = Array.prototype.slice.call(arguments, 1); |
| 4581 | sources.forEach(function(source) { |
| 4582 | if (!source) { |
| 4583 | return; |
| 4584 | } |
| 4585 | Object.keys(source).forEach(function(key) { |
| 4586 | obj[key] = source[key]; |
| 4587 | }); |
| 4588 | }); |
| 4589 | return obj; |
| 4590 | } |
| 4591 | function _class2(obj) { |
| 4592 | return Object.prototype.toString.call(obj); |
| 4593 | } |
| 4594 | function isString2(obj) { |
| 4595 | return _class2(obj) === "[object String]"; |
| 4596 | } |
| 4597 | function isObject(obj) { |
| 4598 | return _class2(obj) === "[object Object]"; |
| 4599 | } |
| 4600 | function isRegExp(obj) { |
| 4601 | return _class2(obj) === "[object RegExp]"; |
| 4602 | } |
| 4603 | function isFunction(obj) { |
| 4604 | return _class2(obj) === "[object Function]"; |
| 4605 | } |
| 4606 | function escapeRE2(str) { |
| 4607 | return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&"); |
| 4608 | } |
| 4609 | var defaultOptions = { |
| 4610 | fuzzyLink: true, |
| 4611 | fuzzyEmail: true, |
| 4612 | fuzzyIP: false |
| 4613 | }; |
| 4614 | function isOptionsObj(obj) { |
| 4615 | return Object.keys(obj || {}).reduce(function(acc, k) { |
| 4616 | return acc || defaultOptions.hasOwnProperty(k); |
| 4617 | }, false); |
| 4618 | } |
| 4619 | var defaultSchemas = { |
| 4620 | "http:": { |
| 4621 | validate: function(text2, pos, self) { |
| 4622 | const tail = text2.slice(pos); |
| 4623 | if (!self.re.http) { |
| 4624 | self.re.http = new RegExp( |
| 4625 | `^\\/\\/${self.re.src_auth}${self.re.src_host_port_strict}${self.re.src_path}`, |
| 4626 | "i" |
| 4627 | ); |
| 4628 | } |
| 4629 | if (self.re.http.test(tail)) { |
| 4630 | return tail.match(self.re.http)[0].length; |
| 4631 | } |
| 4632 | return 0; |
| 4633 | } |
| 4634 | }, |
| 4635 | "https:": "http:", |
| 4636 | "ftp:": "http:", |
| 4637 | "//": { |
| 4638 | validate: function(text2, pos, self) { |
| 4639 | const tail = text2.slice(pos); |
| 4640 | if (!self.re.no_http) { |
| 4641 | self.re.no_http = new RegExp( |
| 4642 | "^" + self.re.src_auth + // Don't allow single-level domains, because of false positives like '//test' |
| 4643 | // with code comments |
| 4644 | `(?:localhost|(?:(?:${self.re.src_domain})\\.)+${self.re.src_domain_root})` + self.re.src_port + self.re.src_host_terminator + self.re.src_path, |
| 4645 | "i" |
| 4646 | ); |
| 4647 | } |
| 4648 | if (self.re.no_http.test(tail)) { |
| 4649 | if (pos >= 3 && text2[pos - 3] === ":") { |
| 4650 | return 0; |
| 4651 | } |
| 4652 | if (pos >= 3 && text2[pos - 3] === "/") { |
| 4653 | return 0; |
| 4654 | } |
| 4655 | return tail.match(self.re.no_http)[0].length; |
| 4656 | } |
| 4657 | return 0; |
| 4658 | } |
| 4659 | }, |
| 4660 | "mailto:": { |
| 4661 | validate: function(text2, pos, self) { |
| 4662 | const tail = text2.slice(pos); |
| 4663 | if (!self.re.mailto) { |
| 4664 | self.re.mailto = new RegExp( |
| 4665 | `^${self.re.src_email_name}@${self.re.src_host_strict}`, |
| 4666 | "i" |
| 4667 | ); |
| 4668 | } |
| 4669 | if (self.re.mailto.test(tail)) { |
| 4670 | return tail.match(self.re.mailto)[0].length; |
| 4671 | } |
| 4672 | return 0; |
| 4673 | } |
| 4674 | } |
| 4675 | }; |
| 4676 | var tlds_2ch_src_re = "a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"; |
| 4677 | var tlds_default = "biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|"); |
| 4678 | function createValidator(re) { |
| 4679 | return function(text2, pos) { |
| 4680 | const tail = text2.slice(pos); |
| 4681 | if (re.test(tail)) { |
| 4682 | return tail.match(re)[0].length; |
| 4683 | } |
| 4684 | return 0; |
| 4685 | }; |
| 4686 | } |
| 4687 | function createNormalizer() { |
| 4688 | return function(match2, self) { |
| 4689 | self.normalize(match2); |
| 4690 | }; |
| 4691 | } |
| 4692 | function compile(self) { |
| 4693 | const re = self.re = re_default(self.__opts__); |
| 4694 | const tlds2 = self.__tlds__.slice(); |
| 4695 | self.onCompile(); |
| 4696 | if (!self.__tlds_replaced__) { |
| 4697 | tlds2.push(tlds_2ch_src_re); |
| 4698 | } |
| 4699 | tlds2.push(re.src_xn); |
| 4700 | re.src_tlds = tlds2.join("|"); |
| 4701 | function untpl(tpl) { |
| 4702 | return tpl.replace("%TLDS%", re.src_tlds); |
| 4703 | } |
| 4704 | re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), "i"); |
| 4705 | re.email_fuzzy_global = RegExp(untpl(re.tpl_email_fuzzy), "ig"); |
| 4706 | re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), "i"); |
| 4707 | re.link_fuzzy_global = RegExp(untpl(re.tpl_link_fuzzy), "ig"); |
| 4708 | re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), "i"); |
| 4709 | re.link_no_ip_fuzzy_global = RegExp(untpl(re.tpl_link_no_ip_fuzzy), "ig"); |
| 4710 | re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), "i"); |
| 4711 | const aliases = []; |
| 4712 | self.__compiled__ = {}; |
| 4713 | function schemaError(name, val) { |
| 4714 | throw new Error(`(LinkifyIt) Invalid schema "${name}": ${val}`); |
| 4715 | } |
| 4716 | Object.keys(self.__schemas__).forEach(function(name) { |
| 4717 | const val = self.__schemas__[name]; |
| 4718 | if (val === null) { |
| 4719 | return; |
| 4720 | } |
| 4721 | const compiled = { validate: null, link: null }; |
| 4722 | self.__compiled__[name] = compiled; |
| 4723 | if (isObject(val)) { |
| 4724 | if (isRegExp(val.validate)) { |
| 4725 | compiled.validate = createValidator(val.validate); |
| 4726 | } else if (isFunction(val.validate)) { |
| 4727 | compiled.validate = val.validate; |
| 4728 | } else { |
| 4729 | schemaError(name, val); |
| 4730 | } |
| 4731 | if (isFunction(val.normalize)) { |
| 4732 | compiled.normalize = val.normalize; |
| 4733 | } else if (!val.normalize) { |
| 4734 | compiled.normalize = createNormalizer(); |
| 4735 | } else { |
| 4736 | schemaError(name, val); |
| 4737 | } |
| 4738 | return; |
| 4739 | } |
| 4740 | if (isString2(val)) { |
| 4741 | aliases.push(name); |
| 4742 | return; |
| 4743 | } |
| 4744 | schemaError(name, val); |
| 4745 | }); |
| 4746 | aliases.forEach(function(alias) { |
| 4747 | if (!self.__compiled__[self.__schemas__[alias]]) { |
| 4748 | return; |
| 4749 | } |
| 4750 | self.__compiled__[alias].validate = self.__compiled__[self.__schemas__[alias]].validate; |
| 4751 | self.__compiled__[alias].normalize = self.__compiled__[self.__schemas__[alias]].normalize; |
| 4752 | }); |
| 4753 | self.__compiled__[""] = { validate: null, normalize: createNormalizer() }; |
| 4754 | const slist = Object.keys(self.__compiled__).filter(function(name) { |
| 4755 | return name.length > 0 && self.__compiled__[name]; |
| 4756 | }).map(escapeRE2).join("|"); |
| 4757 | self.re.schema_test = RegExp(`(^|(?!_)(?:[><\uFF5C]|${re.src_ZPCc}))(${slist})`, "i"); |
| 4758 | self.re.schema_search = RegExp(`(^|(?!_)(?:[><\uFF5C]|${re.src_ZPCc}))(${slist})`, "ig"); |
| 4759 | self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, "i"); |
| 4760 | self.re.pretest = RegExp( |
| 4761 | `(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`, |
| 4762 | "i" |
| 4763 | ); |
| 4764 | } |
| 4765 | function Match(text2, schema, index, lastIndex) { |
| 4766 | const raw = text2.slice(index, lastIndex); |
| 4767 | this.schema = schema.toLowerCase(); |
| 4768 | this.index = index; |
| 4769 | this.lastIndex = lastIndex; |
| 4770 | this.raw = raw; |
| 4771 | this.text = raw; |
| 4772 | this.url = raw; |
| 4773 | } |
| 4774 | function LinkifyIt(schemas, options) { |
| 4775 | if (!(this instanceof LinkifyIt)) { |
| 4776 | return new LinkifyIt(schemas, options); |
| 4777 | } |
| 4778 | if (!options) { |
| 4779 | if (isOptionsObj(schemas)) { |
| 4780 | options = schemas; |
| 4781 | schemas = {}; |
| 4782 | } |
| 4783 | } |
| 4784 | this.__opts__ = assign2({}, defaultOptions, options); |
| 4785 | this.__schemas__ = assign2({}, defaultSchemas, schemas); |
| 4786 | this.__compiled__ = {}; |
| 4787 | this.__tlds__ = tlds_default; |
| 4788 | this.__tlds_replaced__ = false; |
| 4789 | this.re = {}; |
| 4790 | compile(this); |
| 4791 | } |
| 4792 | LinkifyIt.prototype.add = function add(schema, definition) { |
| 4793 | this.__schemas__[schema] = definition; |
| 4794 | compile(this); |
| 4795 | return this; |
| 4796 | }; |
| 4797 | LinkifyIt.prototype.set = function set(options) { |
| 4798 | this.__opts__ = assign2(this.__opts__, options); |
| 4799 | return this; |
| 4800 | }; |
| 4801 | LinkifyIt.prototype.test = function test(text2) { |
| 4802 | if (!text2.length) { |
| 4803 | return false; |
| 4804 | } |
| 4805 | let m, re; |
| 4806 | if (this.re.schema_test.test(text2)) { |
| 4807 | re = this.re.schema_search; |
| 4808 | re.lastIndex = 0; |
| 4809 | while ((m = re.exec(text2)) !== null) { |
| 4810 | if (this.testSchemaAt(text2, m[2], re.lastIndex)) { |
| 4811 | return true; |
| 4812 | } |
| 4813 | } |
| 4814 | } |
| 4815 | if (this.__opts__.fuzzyLink && this.__compiled__["http:"]) { |
| 4816 | if (text2.search(this.re.host_fuzzy_test) >= 0) { |
| 4817 | if (text2.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) { |
| 4818 | return true; |
| 4819 | } |
| 4820 | } |
| 4821 | } |
| 4822 | if (this.__opts__.fuzzyEmail && this.__compiled__["mailto:"]) { |
| 4823 | if (text2.indexOf("@") >= 0) { |
| 4824 | if (text2.match(this.re.email_fuzzy) !== null) { |
| 4825 | return true; |
| 4826 | } |
| 4827 | } |
| 4828 | } |
| 4829 | return false; |
| 4830 | }; |
| 4831 | LinkifyIt.prototype.pretest = function pretest(text2) { |
| 4832 | return this.re.pretest.test(text2); |
| 4833 | }; |
| 4834 | LinkifyIt.prototype.testSchemaAt = function testSchemaAt(text2, schema, pos) { |
| 4835 | if (!this.__compiled__[schema.toLowerCase()]) { |
| 4836 | return 0; |
| 4837 | } |
| 4838 | return this.__compiled__[schema.toLowerCase()].validate(text2, pos, this); |
| 4839 | }; |
| 4840 | LinkifyIt.prototype.match = function match(text2) { |
| 4841 | const result = []; |
| 4842 | const type_schemed = []; |
| 4843 | const type_fuzzy_link = []; |
| 4844 | const type_fuzzy_email = []; |
| 4845 | let m, len, re; |
| 4846 | function choose(a, b) { |
| 4847 | if (!a) { |
| 4848 | return b; |
| 4849 | } |
| 4850 | if (!b) { |
| 4851 | return a; |
| 4852 | } |
| 4853 | if (a.index !== b.index) { |
| 4854 | return a.index < b.index ? a : b; |
| 4855 | } |
| 4856 | return a.lastIndex >= b.lastIndex ? a : b; |
| 4857 | } |
| 4858 | if (!text2.length) { |
| 4859 | return null; |
| 4860 | } |
| 4861 | if (this.re.schema_test.test(text2)) { |
| 4862 | re = this.re.schema_search; |
| 4863 | re.lastIndex = 0; |
| 4864 | while ((m = re.exec(text2)) !== null) { |
| 4865 | len = this.testSchemaAt(text2, m[2], re.lastIndex); |
| 4866 | if (len) { |
| 4867 | type_schemed.push({ |
| 4868 | schema: m[2], |
| 4869 | index: m.index + m[1].length, |
| 4870 | lastIndex: m.index + m[0].length + len |
| 4871 | }); |
| 4872 | } |
| 4873 | } |
| 4874 | } |
| 4875 | if (this.__opts__.fuzzyLink && this.__compiled__["http:"]) { |
| 4876 | re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global; |
| 4877 | re.lastIndex = 0; |
| 4878 | while ((m = re.exec(text2)) !== null) { |
| 4879 | type_fuzzy_link.push({ |
| 4880 | schema: "", |
| 4881 | index: m.index + m[1].length, |
| 4882 | lastIndex: m.index + m[0].length |
| 4883 | }); |
| 4884 | } |
| 4885 | } |
| 4886 | if (this.__opts__.fuzzyEmail && this.__compiled__["mailto:"]) { |
| 4887 | re = this.re.email_fuzzy_global; |
| 4888 | re.lastIndex = 0; |
| 4889 | while ((m = re.exec(text2)) !== null) { |
| 4890 | type_fuzzy_email.push({ |
| 4891 | schema: "mailto:", |
| 4892 | index: m.index + m[1].length, |
| 4893 | lastIndex: m.index + m[0].length |
| 4894 | }); |
| 4895 | } |
| 4896 | } |
| 4897 | const indexes = [0, 0, 0]; |
| 4898 | let lastIndex = 0; |
| 4899 | for (; ; ) { |
| 4900 | const candidates = [ |
| 4901 | type_schemed[indexes[0]], |
| 4902 | type_fuzzy_email[indexes[1]], |
| 4903 | type_fuzzy_link[indexes[2]] |
| 4904 | ]; |
| 4905 | const candidate = choose(choose(candidates[0], candidates[1]), candidates[2]); |
| 4906 | if (!candidate) { |
| 4907 | break; |
| 4908 | } |
| 4909 | if (candidate === candidates[0]) { |
| 4910 | indexes[0]++; |
| 4911 | } else if (candidate === candidates[1]) { |
| 4912 | indexes[1]++; |
| 4913 | } else { |
| 4914 | indexes[2]++; |
| 4915 | } |
| 4916 | if (candidate.index < lastIndex) { |
| 4917 | continue; |
| 4918 | } |
| 4919 | const match2 = new Match(text2, candidate.schema, candidate.index, candidate.lastIndex); |
| 4920 | this.__compiled__[match2.schema].normalize(match2, this); |
| 4921 | result.push(match2); |
| 4922 | lastIndex = candidate.lastIndex; |
| 4923 | } |
| 4924 | if (result.length) { |
| 4925 | return result; |
| 4926 | } |
| 4927 | return null; |
| 4928 | }; |
| 4929 | LinkifyIt.prototype.matchAtStart = function matchAtStart(text2) { |
| 4930 | if (!text2.length) return null; |
| 4931 | const m = this.re.schema_at_start.exec(text2); |
| 4932 | if (!m) return null; |
| 4933 | const len = this.testSchemaAt(text2, m[2], m[0].length); |
| 4934 | if (!len) return null; |
| 4935 | const match2 = new Match(text2, m[2], m.index + m[1].length, m.index + m[0].length + len); |
| 4936 | this.__compiled__[match2.schema].normalize(match2, this); |
| 4937 | return match2; |
| 4938 | }; |
| 4939 | LinkifyIt.prototype.tlds = function tlds(list2, keepOld) { |
| 4940 | list2 = Array.isArray(list2) ? list2 : [list2]; |
| 4941 | if (!keepOld) { |
| 4942 | this.__tlds__ = list2.slice(); |
| 4943 | this.__tlds_replaced__ = true; |
| 4944 | compile(this); |
| 4945 | return this; |
| 4946 | } |
| 4947 | this.__tlds__ = this.__tlds__.concat(list2).sort().filter(function(el, idx, arr) { |
| 4948 | return el !== arr[idx - 1]; |
| 4949 | }).reverse(); |
| 4950 | compile(this); |
| 4951 | return this; |
| 4952 | }; |
| 4953 | LinkifyIt.prototype.normalize = function normalize2(match2) { |
| 4954 | if (!match2.schema) { |
| 4955 | match2.url = `http://${match2.url}`; |
| 4956 | } |
| 4957 | if (match2.schema === "mailto:" && !/^mailto:/i.test(match2.url)) { |
| 4958 | match2.url = `mailto:${match2.url}`; |
| 4959 | } |
| 4960 | }; |
| 4961 | LinkifyIt.prototype.onCompile = function onCompile() { |
| 4962 | }; |
| 4963 | var linkify_it_default = LinkifyIt; |
| 4964 | |
| 4965 | // node_modules/punycode.js/punycode.es6.js |
| 4966 | var maxInt = 2147483647; |
| 4967 | var base = 36; |
| 4968 | var tMin = 1; |
| 4969 | var tMax = 26; |
| 4970 | var skew = 38; |
| 4971 | var damp = 700; |
| 4972 | var initialBias = 72; |
| 4973 | var initialN = 128; |
| 4974 | var delimiter = "-"; |
| 4975 | var regexPunycode = /^xn--/; |
| 4976 | var regexNonASCII = /[^\0-\x7F]/; |
| 4977 | var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; |
| 4978 | var errors = { |
| 4979 | "overflow": "Overflow: input needs wider integers to process", |
| 4980 | "not-basic": "Illegal input >= 0x80 (not a basic code point)", |
| 4981 | "invalid-input": "Invalid input" |
| 4982 | }; |
| 4983 | var baseMinusTMin = base - tMin; |
| 4984 | var floor = Math.floor; |
| 4985 | var stringFromCharCode = String.fromCharCode; |
| 4986 | function error(type) { |
| 4987 | throw new RangeError(errors[type]); |
| 4988 | } |
| 4989 | function map(array, callback) { |
| 4990 | const result = []; |
| 4991 | let length = array.length; |
| 4992 | while (length--) { |
| 4993 | result[length] = callback(array[length]); |
| 4994 | } |
| 4995 | return result; |
| 4996 | } |
| 4997 | function mapDomain(domain, callback) { |
| 4998 | const parts = domain.split("@"); |
| 4999 | let result = ""; |
| 5000 | if (parts.length > 1) { |
| 5001 | result = parts[0] + "@"; |
| 5002 | domain = parts[1]; |
| 5003 | } |
| 5004 | domain = domain.replace(regexSeparators, "."); |
| 5005 | const labels = domain.split("."); |
| 5006 | const encoded = map(labels, callback).join("."); |
| 5007 | return result + encoded; |
| 5008 | } |
| 5009 | function ucs2decode(string) { |
| 5010 | const output = []; |
| 5011 | let counter = 0; |
| 5012 | const length = string.length; |
| 5013 | while (counter < length) { |
| 5014 | const value = string.charCodeAt(counter++); |
| 5015 | if (value >= 55296 && value <= 56319 && counter < length) { |
| 5016 | const extra = string.charCodeAt(counter++); |
| 5017 | if ((extra & 64512) == 56320) { |
| 5018 | output.push(((value & 1023) << 10) + (extra & 1023) + 65536); |
| 5019 | } else { |
| 5020 | output.push(value); |
| 5021 | counter--; |
| 5022 | } |
| 5023 | } else { |
| 5024 | output.push(value); |
| 5025 | } |
| 5026 | } |
| 5027 | return output; |
| 5028 | } |
| 5029 | var ucs2encode = (codePoints) => String.fromCodePoint(...codePoints); |
| 5030 | var basicToDigit = function(codePoint) { |
| 5031 | if (codePoint >= 48 && codePoint < 58) { |
| 5032 | return 26 + (codePoint - 48); |
| 5033 | } |
| 5034 | if (codePoint >= 65 && codePoint < 91) { |
| 5035 | return codePoint - 65; |
| 5036 | } |
| 5037 | if (codePoint >= 97 && codePoint < 123) { |
| 5038 | return codePoint - 97; |
| 5039 | } |
| 5040 | return base; |
| 5041 | }; |
| 5042 | var digitToBasic = function(digit, flag) { |
| 5043 | return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); |
| 5044 | }; |
| 5045 | var adapt = function(delta, numPoints, firstTime) { |
| 5046 | let k = 0; |
| 5047 | delta = firstTime ? floor(delta / damp) : delta >> 1; |
| 5048 | delta += floor(delta / numPoints); |
| 5049 | for (; delta > baseMinusTMin * tMax >> 1; k += base) { |
| 5050 | delta = floor(delta / baseMinusTMin); |
| 5051 | } |
| 5052 | return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); |
| 5053 | }; |
| 5054 | var decode2 = function(input) { |
| 5055 | const output = []; |
| 5056 | const inputLength = input.length; |
| 5057 | let i = 0; |
| 5058 | let n = initialN; |
| 5059 | let bias = initialBias; |
| 5060 | let basic = input.lastIndexOf(delimiter); |
| 5061 | if (basic < 0) { |
| 5062 | basic = 0; |
| 5063 | } |
| 5064 | for (let j = 0; j < basic; ++j) { |
| 5065 | if (input.charCodeAt(j) >= 128) { |
| 5066 | error("not-basic"); |
| 5067 | } |
| 5068 | output.push(input.charCodeAt(j)); |
| 5069 | } |
| 5070 | for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; ) { |
| 5071 | const oldi = i; |
| 5072 | for (let w = 1, k = base; ; k += base) { |
| 5073 | if (index >= inputLength) { |
| 5074 | error("invalid-input"); |
| 5075 | } |
| 5076 | const digit = basicToDigit(input.charCodeAt(index++)); |
| 5077 | if (digit >= base) { |
| 5078 | error("invalid-input"); |
| 5079 | } |
| 5080 | if (digit > floor((maxInt - i) / w)) { |
| 5081 | error("overflow"); |
| 5082 | } |
| 5083 | i += digit * w; |
| 5084 | const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; |
| 5085 | if (digit < t) { |
| 5086 | break; |
| 5087 | } |
| 5088 | const baseMinusT = base - t; |
| 5089 | if (w > floor(maxInt / baseMinusT)) { |
| 5090 | error("overflow"); |
| 5091 | } |
| 5092 | w *= baseMinusT; |
| 5093 | } |
| 5094 | const out = output.length + 1; |
| 5095 | bias = adapt(i - oldi, out, oldi == 0); |
| 5096 | if (floor(i / out) > maxInt - n) { |
| 5097 | error("overflow"); |
| 5098 | } |
| 5099 | n += floor(i / out); |
| 5100 | i %= out; |
| 5101 | output.splice(i++, 0, n); |
| 5102 | } |
| 5103 | return String.fromCodePoint(...output); |
| 5104 | }; |
| 5105 | var encode2 = function(input) { |
| 5106 | const output = []; |
| 5107 | input = ucs2decode(input); |
| 5108 | const inputLength = input.length; |
| 5109 | let n = initialN; |
| 5110 | let delta = 0; |
| 5111 | let bias = initialBias; |
| 5112 | for (const currentValue of input) { |
| 5113 | if (currentValue < 128) { |
| 5114 | output.push(stringFromCharCode(currentValue)); |
| 5115 | } |
| 5116 | } |
| 5117 | const basicLength = output.length; |
| 5118 | let handledCPCount = basicLength; |
| 5119 | if (basicLength) { |
| 5120 | output.push(delimiter); |
| 5121 | } |
| 5122 | while (handledCPCount < inputLength) { |
| 5123 | let m = maxInt; |
| 5124 | for (const currentValue of input) { |
| 5125 | if (currentValue >= n && currentValue < m) { |
| 5126 | m = currentValue; |
| 5127 | } |
| 5128 | } |
| 5129 | const handledCPCountPlusOne = handledCPCount + 1; |
| 5130 | if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { |
| 5131 | error("overflow"); |
| 5132 | } |
| 5133 | delta += (m - n) * handledCPCountPlusOne; |
| 5134 | n = m; |
| 5135 | for (const currentValue of input) { |
| 5136 | if (currentValue < n && ++delta > maxInt) { |
| 5137 | error("overflow"); |
| 5138 | } |
| 5139 | if (currentValue === n) { |
| 5140 | let q = delta; |
| 5141 | for (let k = base; ; k += base) { |
| 5142 | const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; |
| 5143 | if (q < t) { |
| 5144 | break; |
| 5145 | } |
| 5146 | const qMinusT = q - t; |
| 5147 | const baseMinusT = base - t; |
| 5148 | output.push( |
| 5149 | stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) |
| 5150 | ); |
| 5151 | q = floor(qMinusT / baseMinusT); |
| 5152 | } |
| 5153 | output.push(stringFromCharCode(digitToBasic(q, 0))); |
| 5154 | bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); |
| 5155 | delta = 0; |
| 5156 | ++handledCPCount; |
| 5157 | } |
| 5158 | } |
| 5159 | ++delta; |
| 5160 | ++n; |
| 5161 | } |
| 5162 | return output.join(""); |
| 5163 | }; |
| 5164 | var toUnicode = function(input) { |
| 5165 | return mapDomain(input, function(string) { |
| 5166 | return regexPunycode.test(string) ? decode2(string.slice(4).toLowerCase()) : string; |
| 5167 | }); |
| 5168 | }; |
| 5169 | var toASCII = function(input) { |
| 5170 | return mapDomain(input, function(string) { |
| 5171 | return regexNonASCII.test(string) ? "xn--" + encode2(string) : string; |
| 5172 | }); |
| 5173 | }; |
| 5174 | var punycode = { |
| 5175 | /** |
| 5176 | * A string representing the current Punycode.js version number. |
| 5177 | * @memberOf punycode |
| 5178 | * @type String |
| 5179 | */ |
| 5180 | "version": "2.3.1", |
| 5181 | /** |
| 5182 | * An object of methods to convert from JavaScript's internal character |
| 5183 | * representation (UCS-2) to Unicode code points, and back. |
| 5184 | * @see <https://mathiasbynens.be/notes/javascript-encoding> |
| 5185 | * @memberOf punycode |
| 5186 | * @type Object |
| 5187 | */ |
| 5188 | "ucs2": { |
| 5189 | "decode": ucs2decode, |
| 5190 | "encode": ucs2encode |
| 5191 | }, |
| 5192 | "decode": decode2, |
| 5193 | "encode": encode2, |
| 5194 | "toASCII": toASCII, |
| 5195 | "toUnicode": toUnicode |
| 5196 | }; |
| 5197 | var punycode_es6_default = punycode; |
| 5198 | |
| 5199 | // node_modules/markdown-it/lib/presets/default.mjs |
| 5200 | var default_default = { |
| 5201 | options: { |
| 5202 | // Enable HTML tags in source |
| 5203 | html: false, |
| 5204 | // Use '/' to close single tags (<br />) |
| 5205 | xhtmlOut: false, |
| 5206 | // Convert '\n' in paragraphs into <br> |
| 5207 | breaks: false, |
| 5208 | // CSS language prefix for fenced blocks |
| 5209 | langPrefix: "language-", |
| 5210 | // autoconvert URL-like texts to links |
| 5211 | linkify: false, |
| 5212 | // Enable some language-neutral replacements + quotes beautification |
| 5213 | typographer: false, |
| 5214 | // Double + single quotes replacement pairs, when typographer enabled, |
| 5215 | // and smartquotes on. Could be either a String or an Array. |
| 5216 | // |
| 5217 | // For example, you can use '«»ββ' for Russian, 'ββββ' for German, |
| 5218 | // and ['Β«\xA0', '\xA0Β»', 'βΉ\xA0', '\xA0βΊ'] for French (including nbsp). |
| 5219 | quotes: "\u201C\u201D\u2018\u2019", |
| 5220 | /* ββββ */ |
| 5221 | // Highlighter function. Should return escaped HTML, |
| 5222 | // or '' if the source string is not changed and should be escaped externaly. |
| 5223 | // If result starts with <pre... internal wrapper is skipped. |
| 5224 | // |
| 5225 | // function (/*str, lang*/) { return ''; } |
| 5226 | // |
| 5227 | highlight: null, |
| 5228 | // Internal protection, recursion limit |
| 5229 | maxNesting: 100 |
| 5230 | }, |
| 5231 | components: { |
| 5232 | core: {}, |
| 5233 | block: {}, |
| 5234 | inline: {} |
| 5235 | } |
| 5236 | }; |
| 5237 | |
| 5238 | // node_modules/markdown-it/lib/presets/zero.mjs |
| 5239 | var zero_default = { |
| 5240 | options: { |
| 5241 | // Enable HTML tags in source |
| 5242 | html: false, |
| 5243 | // Use '/' to close single tags (<br />) |
| 5244 | xhtmlOut: false, |
| 5245 | // Convert '\n' in paragraphs into <br> |
| 5246 | breaks: false, |
| 5247 | // CSS language prefix for fenced blocks |
| 5248 | langPrefix: "language-", |
| 5249 | // autoconvert URL-like texts to links |
| 5250 | linkify: false, |
| 5251 | // Enable some language-neutral replacements + quotes beautification |
| 5252 | typographer: false, |
| 5253 | // Double + single quotes replacement pairs, when typographer enabled, |
| 5254 | // and smartquotes on. Could be either a String or an Array. |
| 5255 | // |
| 5256 | // For example, you can use '«»ββ' for Russian, 'ββββ' for German, |
| 5257 | // and ['Β«\xA0', '\xA0Β»', 'βΉ\xA0', '\xA0βΊ'] for French (including nbsp). |
| 5258 | quotes: "\u201C\u201D\u2018\u2019", |
| 5259 | /* ββββ */ |
| 5260 | // Highlighter function. Should return escaped HTML, |
| 5261 | // or '' if the source string is not changed and should be escaped externaly. |
| 5262 | // If result starts with <pre... internal wrapper is skipped. |
| 5263 | // |
| 5264 | // function (/*str, lang*/) { return ''; } |
| 5265 | // |
| 5266 | highlight: null, |
| 5267 | // Internal protection, recursion limit |
| 5268 | maxNesting: 20 |
| 5269 | }, |
| 5270 | components: { |
| 5271 | core: { |
| 5272 | rules: [ |
| 5273 | "normalize", |
| 5274 | "block", |
| 5275 | "inline", |
| 5276 | "text_join" |
| 5277 | ] |
| 5278 | }, |
| 5279 | block: { |
| 5280 | rules: [ |
| 5281 | "paragraph" |
| 5282 | ] |
| 5283 | }, |
| 5284 | inline: { |
| 5285 | rules: [ |
| 5286 | "text" |
| 5287 | ], |
| 5288 | rules2: [ |
| 5289 | "balance_pairs", |
| 5290 | "fragments_join" |
| 5291 | ] |
| 5292 | } |
| 5293 | } |
| 5294 | }; |
| 5295 | |
| 5296 | // node_modules/markdown-it/lib/presets/commonmark.mjs |
| 5297 | var commonmark_default = { |
| 5298 | options: { |
| 5299 | // Enable HTML tags in source |
| 5300 | html: true, |
| 5301 | // Use '/' to close single tags (<br />) |
| 5302 | xhtmlOut: true, |
| 5303 | // Convert '\n' in paragraphs into <br> |
| 5304 | breaks: false, |
| 5305 | // CSS language prefix for fenced blocks |
| 5306 | langPrefix: "language-", |
| 5307 | // autoconvert URL-like texts to links |
| 5308 | linkify: false, |
| 5309 | // Enable some language-neutral replacements + quotes beautification |
| 5310 | typographer: false, |
| 5311 | // Double + single quotes replacement pairs, when typographer enabled, |
| 5312 | // and smartquotes on. Could be either a String or an Array. |
| 5313 | // |
| 5314 | // For example, you can use '«»ββ' for Russian, 'ββββ' for German, |
| 5315 | // and ['Β«\xA0', '\xA0Β»', 'βΉ\xA0', '\xA0βΊ'] for French (including nbsp). |
| 5316 | quotes: "\u201C\u201D\u2018\u2019", |
| 5317 | /* ββββ */ |
| 5318 | // Highlighter function. Should return escaped HTML, |
| 5319 | // or '' if the source string is not changed and should be escaped externaly. |
| 5320 | // If result starts with <pre... internal wrapper is skipped. |
| 5321 | // |
| 5322 | // function (/*str, lang*/) { return ''; } |
| 5323 | // |
| 5324 | highlight: null, |
| 5325 | // Internal protection, recursion limit |
| 5326 | maxNesting: 20 |
| 5327 | }, |
| 5328 | components: { |
| 5329 | core: { |
| 5330 | rules: [ |
| 5331 | "normalize", |
| 5332 | "block", |
| 5333 | "inline", |
| 5334 | "text_join" |
| 5335 | ] |
| 5336 | }, |
| 5337 | block: { |
| 5338 | rules: [ |
| 5339 | "blockquote", |
| 5340 | "code", |
| 5341 | "fence", |
| 5342 | "heading", |
| 5343 | "hr", |
| 5344 | "html_block", |
| 5345 | "lheading", |
| 5346 | "list", |
| 5347 | "reference", |
| 5348 | "paragraph" |
| 5349 | ] |
| 5350 | }, |
| 5351 | inline: { |
| 5352 | rules: [ |
| 5353 | "autolink", |
| 5354 | "backticks", |
| 5355 | "emphasis", |
| 5356 | "entity", |
| 5357 | "escape", |
| 5358 | "html_inline", |
| 5359 | "image", |
| 5360 | "link", |
| 5361 | "newline", |
| 5362 | "text" |
| 5363 | ], |
| 5364 | rules2: [ |
| 5365 | "balance_pairs", |
| 5366 | "emphasis", |
| 5367 | "fragments_join" |
| 5368 | ] |
| 5369 | } |
| 5370 | } |
| 5371 | }; |
| 5372 | |
| 5373 | // node_modules/markdown-it/lib/index.mjs |
| 5374 | var config = { |
| 5375 | default: default_default, |
| 5376 | zero: zero_default, |
| 5377 | commonmark: commonmark_default |
| 5378 | }; |
| 5379 | var BAD_PROTO_RE = /^(vbscript|javascript|file|data):/; |
| 5380 | var GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/; |
| 5381 | function validateLink(url) { |
| 5382 | const str = url.trim().toLowerCase(); |
| 5383 | return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true; |
| 5384 | } |
| 5385 | var RECODE_HOSTNAME_FOR = ["http:", "https:", "mailto:"]; |
| 5386 | function normalizeLink(url) { |
| 5387 | const parsed = parse_default(url, true); |
| 5388 | if (parsed.hostname) { |
| 5389 | if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) { |
| 5390 | try { |
| 5391 | parsed.hostname = punycode_es6_default.toASCII(parsed.hostname); |
| 5392 | } catch (er) { |
| 5393 | } |
| 5394 | } |
| 5395 | } |
| 5396 | return encode_default(format(parsed)); |
| 5397 | } |
| 5398 | function normalizeLinkText(url) { |
| 5399 | const parsed = parse_default(url, true); |
| 5400 | if (parsed.hostname) { |
| 5401 | if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) { |
| 5402 | try { |
| 5403 | parsed.hostname = punycode_es6_default.toUnicode(parsed.hostname); |
| 5404 | } catch (er) { |
| 5405 | } |
| 5406 | } |
| 5407 | } |
| 5408 | return decode_default(format(parsed), decode_default.defaultChars + "%"); |
| 5409 | } |
| 5410 | function MarkdownIt(presetName, options) { |
| 5411 | if (!(this instanceof MarkdownIt)) { |
| 5412 | return new MarkdownIt(presetName, options); |
| 5413 | } |
| 5414 | if (!options) { |
| 5415 | if (!isString(presetName)) { |
| 5416 | options = presetName || {}; |
| 5417 | presetName = "default"; |
| 5418 | } |
| 5419 | } |
| 5420 | this.inline = new parser_inline_default(); |
| 5421 | this.block = new parser_block_default(); |
| 5422 | this.core = new parser_core_default(); |
| 5423 | this.renderer = new renderer_default(); |
| 5424 | this.linkify = new linkify_it_default(); |
| 5425 | this.validateLink = validateLink; |
| 5426 | this.normalizeLink = normalizeLink; |
| 5427 | this.normalizeLinkText = normalizeLinkText; |
| 5428 | this.utils = utils_exports; |
| 5429 | this.helpers = assign({}, helpers_exports); |
| 5430 | this.options = {}; |
| 5431 | this.configure(presetName); |
| 5432 | if (options) { |
| 5433 | this.set(options); |
| 5434 | } |
| 5435 | } |
| 5436 | MarkdownIt.prototype.set = function(options) { |
| 5437 | assign(this.options, options); |
| 5438 | return this; |
| 5439 | }; |
| 5440 | MarkdownIt.prototype.configure = function(presets) { |
| 5441 | const self = this; |
| 5442 | if (isString(presets)) { |
| 5443 | const presetName = presets; |
| 5444 | presets = config[presetName]; |
| 5445 | if (!presets) { |
| 5446 | throw new Error('Wrong `markdown-it` preset "' + presetName + '", check name'); |
| 5447 | } |
| 5448 | } |
| 5449 | if (!presets) { |
| 5450 | throw new Error("Wrong `markdown-it` preset, can't be empty"); |
| 5451 | } |
| 5452 | if (presets.options) { |
| 5453 | self.set(presets.options); |
| 5454 | } |
| 5455 | if (presets.components) { |
| 5456 | Object.keys(presets.components).forEach(function(name) { |
| 5457 | if (presets.components[name].rules) { |
| 5458 | self[name].ruler.enableOnly(presets.components[name].rules); |
| 5459 | } |
| 5460 | if (presets.components[name].rules2) { |
| 5461 | self[name].ruler2.enableOnly(presets.components[name].rules2); |
| 5462 | } |
| 5463 | }); |
| 5464 | } |
| 5465 | return this; |
| 5466 | }; |
| 5467 | MarkdownIt.prototype.enable = function(list2, ignoreInvalid) { |
| 5468 | let result = []; |
| 5469 | if (!Array.isArray(list2)) { |
| 5470 | list2 = [list2]; |
| 5471 | } |
| 5472 | ["core", "block", "inline"].forEach(function(chain) { |
| 5473 | result = result.concat(this[chain].ruler.enable(list2, true)); |
| 5474 | }, this); |
| 5475 | result = result.concat(this.inline.ruler2.enable(list2, true)); |
| 5476 | const missed = list2.filter(function(name) { |
| 5477 | return result.indexOf(name) < 0; |
| 5478 | }); |
| 5479 | if (missed.length && !ignoreInvalid) { |
| 5480 | throw new Error("MarkdownIt. Failed to enable unknown rule(s): " + missed); |
| 5481 | } |
| 5482 | return this; |
| 5483 | }; |
| 5484 | MarkdownIt.prototype.disable = function(list2, ignoreInvalid) { |
| 5485 | let result = []; |
| 5486 | if (!Array.isArray(list2)) { |
| 5487 | list2 = [list2]; |
| 5488 | } |
| 5489 | ["core", "block", "inline"].forEach(function(chain) { |
| 5490 | result = result.concat(this[chain].ruler.disable(list2, true)); |
| 5491 | }, this); |
| 5492 | result = result.concat(this.inline.ruler2.disable(list2, true)); |
| 5493 | const missed = list2.filter(function(name) { |
| 5494 | return result.indexOf(name) < 0; |
| 5495 | }); |
| 5496 | if (missed.length && !ignoreInvalid) { |
| 5497 | throw new Error("MarkdownIt. Failed to disable unknown rule(s): " + missed); |
| 5498 | } |
| 5499 | return this; |
| 5500 | }; |
| 5501 | MarkdownIt.prototype.use = function(plugin) { |
| 5502 | const args = [this].concat(Array.prototype.slice.call(arguments, 1)); |
| 5503 | plugin.apply(plugin, args); |
| 5504 | return this; |
| 5505 | }; |
| 5506 | MarkdownIt.prototype.parse = function(src, env) { |
| 5507 | if (typeof src !== "string") { |
| 5508 | throw new Error("Input data should be a String"); |
| 5509 | } |
| 5510 | const state = new this.core.State(src, this, env); |
| 5511 | this.core.process(state); |
| 5512 | return state.tokens; |
| 5513 | }; |
| 5514 | MarkdownIt.prototype.render = function(src, env) { |
| 5515 | env = env || {}; |
| 5516 | return this.renderer.render(this.parse(src, env), this.options, env); |
| 5517 | }; |
| 5518 | MarkdownIt.prototype.parseInline = function(src, env) { |
| 5519 | const state = new this.core.State(src, this, env); |
| 5520 | state.inlineMode = true; |
| 5521 | this.core.process(state); |
| 5522 | return state.tokens; |
| 5523 | }; |
| 5524 | MarkdownIt.prototype.renderInline = function(src, env) { |
| 5525 | env = env || {}; |
| 5526 | return this.renderer.render(this.parseInline(src, env), this.options, env); |
| 5527 | }; |
| 5528 | var lib_default = MarkdownIt; |
| 5529 | export { |
| 5530 | lib_default as default |
| 5531 | }; |
| 5532 | |