{"version":3,"file":"scramjet.mjs","sources":["webpack://scramjet-root/./packages/core/src/index.ts","webpack://scramjet-root/./node_modules/.pnpm/set-cookie-parser@2.7.1/node_modules/set-cookie-parser/lib/set-cookie.js","webpack://scramjet-root/./packages/core/src/client|sync|/^\\.\\/.*$/","webpack://scramjet-root/./packages/core/src/client/client.ts","webpack://scramjet-root/./packages/core/src/client/dom/attr.ts","webpack://scramjet-root/./packages/core/src/client/dom/beacon.ts","webpack://scramjet-root/./packages/core/src/client/dom/cookie.ts","webpack://scramjet-root/./packages/core/src/client/dom/css.ts","webpack://scramjet-root/./packages/core/src/client/dom/document.ts","webpack://scramjet-root/./packages/core/src/client/dom/element.ts","webpack://scramjet-root/./packages/core/src/client/dom/fontface.ts","webpack://scramjet-root/./packages/core/src/client/dom/fragments.ts","webpack://scramjet-root/./packages/core/src/client/dom/history.ts","webpack://scramjet-root/./packages/core/src/client/dom/open.ts","webpack://scramjet-root/./packages/core/src/client/dom/origin.ts","webpack://scramjet-root/./packages/core/src/client/dom/performance.ts","webpack://scramjet-root/./packages/core/src/client/dom/protocol.ts","webpack://scramjet-root/./packages/core/src/client/dom/storage.ts","webpack://scramjet-root/./packages/core/src/client/entry.ts","webpack://scramjet-root/./packages/core/src/client/events.ts","webpack://scramjet-root/./packages/core/src/client/helpers.ts","webpack://scramjet-root/./packages/core/src/client/location.ts","webpack://scramjet-root/./packages/core/src/client/shared/antiantidebugger.ts","webpack://scramjet-root/./packages/core/src/client/shared/blob.ts","webpack://scramjet-root/./packages/core/src/client/shared/caches.ts","webpack://scramjet-root/./packages/core/src/client/shared/chrome.ts","webpack://scramjet-root/./packages/core/src/client/shared/err.ts","webpack://scramjet-root/./packages/core/src/client/shared/error.ts","webpack://scramjet-root/./packages/core/src/client/shared/eval.ts","webpack://scramjet-root/./packages/core/src/client/shared/event.ts","webpack://scramjet-root/./packages/core/src/client/shared/function.ts","webpack://scramjet-root/./packages/core/src/client/shared/import.ts","webpack://scramjet-root/./packages/core/src/client/shared/indexeddb.ts","webpack://scramjet-root/./packages/core/src/client/shared/opfs.ts","webpack://scramjet-root/./packages/core/src/client/shared/postmessage.ts","webpack://scramjet-root/./packages/core/src/client/shared/realm.ts","webpack://scramjet-root/./packages/core/src/client/shared/requests/eventsource.ts","webpack://scramjet-root/./packages/core/src/client/shared/requests/fetch.ts","webpack://scramjet-root/./packages/core/src/client/shared/requests/websocket.ts","webpack://scramjet-root/./packages/core/src/client/shared/requests/xmlhttprequest.ts","webpack://scramjet-root/./packages/core/src/client/shared/settimeout.ts","webpack://scramjet-root/./packages/core/src/client/shared/sourcemaps.ts","webpack://scramjet-root/./packages/core/src/client/shared/worker.ts","webpack://scramjet-root/./packages/core/src/client/shared/wrap.ts","webpack://scramjet-root/./packages/core/src/client/singletonbox.ts","webpack://scramjet-root/./packages/core/src/client/worker/importScripts.ts","webpack://scramjet-root/./packages/core/src/fetch/index.ts","webpack://scramjet-root/./packages/core/src/log.ts","webpack://scramjet-root/./packages/core/src/shared/cookie.ts","webpack://scramjet-root/./packages/core/src/shared/headers.ts","webpack://scramjet-root/./packages/core/src/shared/htmlRules.ts","webpack://scramjet-root/./packages/core/src/shared/index.ts","webpack://scramjet-root/./packages/core/src/shared/rewriters/css.ts","webpack://scramjet-root/./packages/core/src/shared/rewriters/html.ts","webpack://scramjet-root/./packages/core/src/shared/rewriters/js.ts","webpack://scramjet-root/./packages/core/src/shared/rewriters/url.ts","webpack://scramjet-root/./packages/core/src/shared/rewriters/wasm.ts","webpack://scramjet-root/./packages/core/src/shared/rewriters/worker.ts","webpack://scramjet-root/./packages/core/src/symbols.ts","webpack://scramjet-root/./node_modules/.pnpm/@mercuryworkshop+proxy-transports@1.0.2/node_modules/@mercuryworkshop/proxy-transports/dist/index.mjs","webpack://scramjet-root/./node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js","webpack://scramjet-root/./node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/index.js","webpack://scramjet-root/./node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js","webpack://scramjet-root/./node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js","webpack://scramjet-root/./node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js","webpack://scramjet-root/./node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js","webpack://scramjet-root/./node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js","webpack://scramjet-root/./node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js","webpack://scramjet-root/./node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js","webpack://scramjet-root/./node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js","webpack://scramjet-root/./node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js","webpack://scramjet-root/./node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js","webpack://scramjet-root/./node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode-codepoint.js","webpack://scramjet-root/./node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode.js","webpack://scramjet-root/./node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js","webpack://scramjet-root/./node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.js","webpack://scramjet-root/./node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/Parser.js","webpack://scramjet-root/./node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/Tokenizer.js","webpack://scramjet-root/./packages/core/rewriter/wasm/out/snippets/wasm-4b0f351a8e6eeb46/inline0.js","webpack://scramjet-root/./packages/core/rewriter/wasm/out/wasm.js","webpack://scramjet-root/webpack/runtime/compat_get_default_export","webpack://scramjet-root/webpack/runtime/define_property_getters","webpack://scramjet-root/webpack/runtime/has_own_property","webpack://scramjet-root/webpack/runtime/make_namespace_object"],"sourcesContent":["// NOTE: this is the entrypoint for scramjet.bundle.js\n// as such it exports everything in scramjet\n// the entry point for scramjet.all.js (what most sites wil use) is entry.ts\n\nimport { setWasm } from \"@rewriters/wasm\";\nimport \"./global.d\";\nimport { ScramjetConfig } from \"./types\";\nexport * from \"./client\";\nexport * from \"./shared\";\nexport * from \"./symbols\";\nexport * from \"./types\";\nexport * from \"./fetch\";\n\ndeclare const REWRITERWASM: string | undefined;\n\nexport const defaultConfig: ScramjetConfig = {\n\tglobals: {\n\t\twrapfn: \"$scramjet$wrap\",\n\t\twrappropertybase: \"$scramjet__\",\n\t\twrappropertyfn: \"$scramjet$prop\",\n\t\tcleanrestfn: \"$scramjet$clean\",\n\t\timportfn: \"$scramjet$import\",\n\t\trewritefn: \"$scramjet$rewrite\",\n\t\tmetafn: \"$scramjet$meta\",\n\t\twrappostmessagefn: \"$scramjet$wrappostmessage\",\n\t\tpushsourcemapfn: \"$scramjet$pushsourcemap\",\n\t\ttrysetfn: \"$scramjet$tryset\",\n\t\ttemplocid: \"$scramjet$temploc\",\n\t\ttempunusedid: \"$scramjet$tempunused\",\n\t},\n\tflags: {\n\t\tsyncxhr: false,\n\t\tstrictRewrites: true,\n\t\trewriterLogs: false,\n\t\tcaptureErrors: true,\n\t\tcleanErrors: false,\n\t\tscramitize: false,\n\t\tsourcemaps: true,\n\t\tdestructureRewrites: false,\n\t\tallowInvalidJs: false,\n\t\tdebugTrampolines: false,\n\t\tallowFailedIntercepts: false,\n\t\tencapsulateWorkers: true,\n\t},\n\tsiteFlags: {},\n\tmaskedfiles: [],\n};\n\nexport const defaultConfigDev: ScramjetConfig = {\n\t...defaultConfig,\n\tflags: {\n\t\t...defaultConfig.flags,\n\t\trewriterLogs: true,\n\t\tcleanErrors: false,\n\t\tdebugTrampolines: true,\n\t},\n};\n\n// bundled build will have the wasm binary inlined as a base64 string\nif (REWRITERWASM) {\n\tsetWasm(Uint8Array.from(atob(REWRITERWASM), (c) => c.charCodeAt(0)));\n}\n","\"use strict\";\n\nvar defaultParseOptions = {\n  decodeValues: true,\n  map: false,\n  silent: false,\n};\n\nfunction isNonEmptyString(str) {\n  return typeof str === \"string\" && !!str.trim();\n}\n\nfunction parseString(setCookieValue, options) {\n  var parts = setCookieValue.split(\";\").filter(isNonEmptyString);\n\n  var nameValuePairStr = parts.shift();\n  var parsed = parseNameValuePair(nameValuePairStr);\n  var name = parsed.name;\n  var value = parsed.value;\n\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  try {\n    value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value\n  } catch (e) {\n    console.error(\n      \"set-cookie-parser encountered an error while decoding a cookie with value '\" +\n        value +\n        \"'. Set options.decodeValues to false to disable this feature.\",\n      e\n    );\n  }\n\n  var cookie = {\n    name: name,\n    value: value,\n  };\n\n  parts.forEach(function (part) {\n    var sides = part.split(\"=\");\n    var key = sides.shift().trimLeft().toLowerCase();\n    var value = sides.join(\"=\");\n    if (key === \"expires\") {\n      cookie.expires = new Date(value);\n    } else if (key === \"max-age\") {\n      cookie.maxAge = parseInt(value, 10);\n    } else if (key === \"secure\") {\n      cookie.secure = true;\n    } else if (key === \"httponly\") {\n      cookie.httpOnly = true;\n    } else if (key === \"samesite\") {\n      cookie.sameSite = value;\n    } else if (key === \"partitioned\") {\n      cookie.partitioned = true;\n    } else {\n      cookie[key] = value;\n    }\n  });\n\n  return cookie;\n}\n\nfunction parseNameValuePair(nameValuePairStr) {\n  // Parses name-value-pair according to rfc6265bis draft\n\n  var name = \"\";\n  var value = \"\";\n  var nameValueArr = nameValuePairStr.split(\"=\");\n  if (nameValueArr.length > 1) {\n    name = nameValueArr.shift();\n    value = nameValueArr.join(\"=\"); // everything after the first =, joined by a \"=\" if there was more than one part\n  } else {\n    value = nameValuePairStr;\n  }\n\n  return { name: name, value: value };\n}\n\nfunction parse(input, options) {\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (!input) {\n    if (!options.map) {\n      return [];\n    } else {\n      return {};\n    }\n  }\n\n  if (input.headers) {\n    if (typeof input.headers.getSetCookie === \"function\") {\n      // for fetch responses - they combine headers of the same type in the headers array,\n      // but getSetCookie returns an uncombined array\n      input = input.headers.getSetCookie();\n    } else if (input.headers[\"set-cookie\"]) {\n      // fast-path for node.js (which automatically normalizes header names to lower-case\n      input = input.headers[\"set-cookie\"];\n    } else {\n      // slow-path for other environments - see #25\n      var sch =\n        input.headers[\n          Object.keys(input.headers).find(function (key) {\n            return key.toLowerCase() === \"set-cookie\";\n          })\n        ];\n      // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36\n      if (!sch && input.headers.cookie && !options.silent) {\n        console.warn(\n          \"Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.\"\n        );\n      }\n      input = sch;\n    }\n  }\n  if (!Array.isArray(input)) {\n    input = [input];\n  }\n\n  if (!options.map) {\n    return input.filter(isNonEmptyString).map(function (str) {\n      return parseString(str, options);\n    });\n  } else {\n    var cookies = {};\n    return input.filter(isNonEmptyString).reduce(function (cookies, str) {\n      var cookie = parseString(str, options);\n      cookies[cookie.name] = cookie;\n      return cookies;\n    }, cookies);\n  }\n}\n\n/*\n  Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n  that are within a single set-cookie field-value, such as in the Expires portion.\n\n  This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n  Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n  React Native's fetch does this for *every* header, including set-cookie.\n\n  Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n  Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nfunction splitCookiesString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString;\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n\n  var cookiesStrings = [];\n  var pos = 0;\n  var start;\n  var ch;\n  var lastComma;\n  var nextStart;\n  var cookiesSeparatorFound;\n\n  function skipWhitespace() {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  }\n\n  function notSpecialChar() {\n    ch = cookiesString.charAt(pos);\n\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  }\n\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        // ',' is a cookie separator if we have later first '=', not ';' or ','\n        lastComma = pos;\n        pos += 1;\n\n        skipWhitespace();\n        nextStart = pos;\n\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n\n        // currently special character\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          // we found cookies separator\n          cookiesSeparatorFound = true;\n          // pos is inside the next cookie, so back up and return it.\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.substring(start, lastComma));\n          start = pos;\n        } else {\n          // in param ',' or param separator ';',\n          // we continue from that comma\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n    }\n  }\n\n  return cookiesStrings;\n}\n\nmodule.exports = parse;\nmodule.exports.parse = parse;\nmodule.exports.parseString = parseString;\nmodule.exports.splitCookiesString = splitCookiesString;\n","var map = {\n  \"./\": \"6418\",\n  \"./client\": \"6039\",\n  \"./client.ts\": \"6039\",\n  \"./dom/attr\": \"8806\",\n  \"./dom/attr.ts\": \"8806\",\n  \"./dom/beacon\": \"7265\",\n  \"./dom/beacon.ts\": \"7265\",\n  \"./dom/cookie\": \"8227\",\n  \"./dom/cookie.ts\": \"8227\",\n  \"./dom/css\": \"8114\",\n  \"./dom/css.ts\": \"8114\",\n  \"./dom/document\": \"6820\",\n  \"./dom/document.ts\": \"6820\",\n  \"./dom/element\": \"1733\",\n  \"./dom/element.ts\": \"1733\",\n  \"./dom/fontface\": \"737\",\n  \"./dom/fontface.ts\": \"737\",\n  \"./dom/fragments\": \"2452\",\n  \"./dom/fragments.ts\": \"2452\",\n  \"./dom/history\": \"4397\",\n  \"./dom/history.ts\": \"4397\",\n  \"./dom/open\": \"5421\",\n  \"./dom/open.ts\": \"5421\",\n  \"./dom/origin\": \"8703\",\n  \"./dom/origin.ts\": \"8703\",\n  \"./dom/performance\": \"7539\",\n  \"./dom/performance.ts\": \"7539\",\n  \"./dom/protocol\": \"8345\",\n  \"./dom/protocol.ts\": \"8345\",\n  \"./dom/storage\": \"5724\",\n  \"./dom/storage.ts\": \"5724\",\n  \"./entry\": \"7530\",\n  \"./entry.ts\": \"7530\",\n  \"./events\": \"2037\",\n  \"./events.ts\": \"2037\",\n  \"./helpers\": \"1171\",\n  \"./helpers.ts\": \"1171\",\n  \"./index\": \"6418\",\n  \"./index.ts\": \"6418\",\n  \"./location\": \"4239\",\n  \"./location.ts\": \"4239\",\n  \"./shared/antiantidebugger\": \"2115\",\n  \"./shared/antiantidebugger.ts\": \"2115\",\n  \"./shared/blob\": \"6495\",\n  \"./shared/blob.ts\": \"6495\",\n  \"./shared/caches\": \"735\",\n  \"./shared/caches.ts\": \"735\",\n  \"./shared/chrome\": \"7198\",\n  \"./shared/chrome.ts\": \"7198\",\n  \"./shared/err\": \"5241\",\n  \"./shared/err.ts\": \"5241\",\n  \"./shared/error\": \"6380\",\n  \"./shared/error.ts\": \"6380\",\n  \"./shared/eval\": \"2490\",\n  \"./shared/eval.ts\": \"2490\",\n  \"./shared/event\": \"1762\",\n  \"./shared/event.ts\": \"1762\",\n  \"./shared/function\": \"2284\",\n  \"./shared/function.ts\": \"2284\",\n  \"./shared/import\": \"8201\",\n  \"./shared/import.ts\": \"8201\",\n  \"./shared/indexeddb\": \"7309\",\n  \"./shared/indexeddb.ts\": \"7309\",\n  \"./shared/opfs\": \"1544\",\n  \"./shared/opfs.ts\": \"1544\",\n  \"./shared/postmessage\": \"6771\",\n  \"./shared/postmessage.ts\": \"6771\",\n  \"./shared/realm\": \"6237\",\n  \"./shared/realm.ts\": \"6237\",\n  \"./shared/requests/eventsource\": \"7396\",\n  \"./shared/requests/eventsource.ts\": \"7396\",\n  \"./shared/requests/fetch\": \"7705\",\n  \"./shared/requests/fetch.ts\": \"7705\",\n  \"./shared/requests/websocket\": \"3342\",\n  \"./shared/requests/websocket.ts\": \"3342\",\n  \"./shared/requests/xmlhttprequest\": \"5639\",\n  \"./shared/requests/xmlhttprequest.ts\": \"5639\",\n  \"./shared/settimeout\": \"4355\",\n  \"./shared/settimeout.ts\": \"4355\",\n  \"./shared/sourcemaps\": \"6666\",\n  \"./shared/sourcemaps.ts\": \"6666\",\n  \"./shared/worker\": \"4034\",\n  \"./shared/worker.ts\": \"4034\",\n  \"./shared/wrap\": \"3680\",\n  \"./shared/wrap.ts\": \"3680\",\n  \"./singletonbox\": \"4470\",\n  \"./singletonbox.ts\": \"4470\",\n  \"./worker/importScripts\": \"6722\",\n  \"./worker/importScripts.ts\": \"6722\"\n};\n\n\nfunction __rspack_context(req) {\n  var id = __rspack_context_resolve(req);\n  return __webpack_require__(id);\n}\nfunction __rspack_context_resolve(req) {\n  if(!__webpack_require__.o(map, req)) {\n    var e = new Error(\"Cannot find module '\" + req + \"'\");\n    e.code = 'MODULE_NOT_FOUND';\n    throw e;\n  }\n  return map[req];\n}\n__rspack_context.keys = function webpackContextKeys() {\n  return Object.keys(map);\n};\n__rspack_context.resolve = __rspack_context_resolve;\nmodule.exports = __rspack_context;\n__rspack_context.id = 8770;\n","type ScramjetFrame = any;\nimport {\n\tBareCompatibleClient,\n\tProxyTransport,\n} from \"@mercuryworkshop/proxy-transports\";\nimport { SCRAMJETCLIENT, SCRAMJETFRAME } from \"@/symbols\";\nimport { getOwnPropertyDescriptorHandler } from \"@client/helpers\";\nimport { createLocationProxy } from \"@client/location\";\nimport { createWrapFn } from \"@client/shared/wrap\";\nimport { NavigateEvent } from \"@client/events\";\nimport { rewriteUrl, unrewriteUrl, type URLMeta } from \"@rewriters/url\";\nimport { flagEnabled, ScramjetContext, ScramjetInterface } from \"@/shared\";\nimport { CookieJar } from \"@/shared/cookie\";\nimport { iswindow } from \"./entry\";\nimport { SingletonBox } from \"./singletonbox\";\nimport { ScramjetConfig } from \"@/types\";\n\nexport type ScramjetClientInit = {\n\tcontext: ScramjetContext;\n\ttransport: ProxyTransport;\n\tsendSetCookie: (url: URL, cookie: string) => Promise<void>;\n\tshouldPassthroughWebsocket?: (url: string | URL) => boolean;\n\tshouldBlockMessageEvent?: (ev: MessageEvent) => boolean;\n\thookSubcontext: (self: Self, frame?: HTMLIFrameElement) => ScramjetClient;\n};\n\ntype NativeStore = {\n\tstore: Record<string, any>;\n\tcall: (target: string, that: any, ...args) => any;\n\tconstruct: (target: string, ...args) => any;\n};\ntype DescriptorStore = {\n\tstore: Record<string, PropertyDescriptor>;\n\tget: (target: string, that: any) => any;\n\tset: (target: string, that: any, value: any) => void;\n};\n//eslint-disable-next-line\nexport type AnyFunction = Function;\n\nexport type ScramjetModule = {\n\tenabled: (client: ScramjetClient) => boolean | undefined;\n\tdisabled: (\n\t\tclient: ScramjetClient,\n\t\tself: typeof globalThis\n\t) => void | undefined;\n\torder: number | undefined;\n\tdefault: (client: ScramjetClient, self: typeof globalThis) => void;\n};\n\nexport type ProxyCtx = {\n\tfn: AnyFunction;\n\tthis: any;\n\targs: any[];\n\tnewTarget: AnyFunction;\n\treturn: (r: any) => void;\n\tcall: () => any;\n};\nexport type Proxy = {\n\tconstruct?(ctx: ProxyCtx): any;\n\tapply?(ctx: ProxyCtx): any;\n};\n\nexport type TrapCtx<T> = {\n\tthis: any;\n\tget: () => T;\n\tset: (v: T) => void;\n};\nexport type Trap<T> = {\n\twritable?: boolean;\n\tvalue?: any;\n\tenumerable?: boolean;\n\tconfigurable?: boolean;\n\tget?: (ctx: TrapCtx<T>) => T;\n\tset?: (ctx: TrapCtx<T>, v: T) => void;\n};\n\nfunction findBox(global: Window, seen: Window[]): SingletonBox | null {\n\tif (seen.includes(global)) return null;\n\tseen.push(global);\n\n\ttry {\n\t\tif ((SCRAMJETCLIENT in global) as any) {\n\t\t\treturn global[SCRAMJETCLIENT].box;\n\t\t}\n\t} catch {}\n\n\ttry {\n\t\tconst b = findBox(global.parent, seen);\n\t\tif (b) return b;\n\t} catch {}\n\n\ttry {\n\t\tconst b = findBox(global.top, seen);\n\t\tif (b) return b;\n\t} catch {}\n\n\ttry {\n\t\tif (global.opener) {\n\t\t\tconst b = findBox(global.opener, seen);\n\t\t\tif (b) return b;\n\t\t}\n\t} catch {}\n\n\tfor (let i = 0; i < global.length; i++) {\n\t\ttry {\n\t\t\tconst b = findBox(global[i], seen);\n\t\t\tif (b) return b;\n\t\t} catch {}\n\t}\n}\n\nexport class ScramjetClient {\n\tlocationProxy: any;\n\tserviceWorker: ServiceWorkerContainer;\n\tbare: BareCompatibleClient;\n\n\tnatives: NativeStore;\n\tdescriptors: DescriptorStore;\n\twrapfn: (i: any, ...args: any) => any;\n\n\teventcallbacks: Map<\n\t\tany,\n\t\t[\n\t\t\t{\n\t\t\t\tevent: string;\n\t\t\t\toriginalCallback: AnyFunction;\n\t\t\t\tproxiedCallback: AnyFunction;\n\t\t\t},\n\t\t]\n\t> = new Map();\n\n\tmeta: URLMeta;\n\n\tbox: SingletonBox;\n\n\tcontext: ScramjetContext;\n\n\tconstructor(\n\t\tpublic global: typeof globalThis,\n\t\tpublic init: ScramjetClientInit\n\t) {\n\t\tif (SCRAMJETCLIENT in global) {\n\t\t\tconsole.error(\n\t\t\t\t\"attempted to initialize a scramjet client, but one is already loaded - this is very bad\"\n\t\t\t);\n\t\t\tthrow new Error();\n\t\t}\n\n\t\tif (iswindow) {\n\t\t\tconst b = findBox(global as unknown as Window, []);\n\t\t\tif (b) {\n\t\t\t\tthis.box = b;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.box) {\n\t\t\tthis.box = new SingletonBox(this);\n\t\t}\n\n\t\tthis.box.registerClient(this, global as Self);\n\n\t\tthis.context = init.context;\n\t\tthis.bare = new BareCompatibleClient(init.transport);\n\n\t\tthis.serviceWorker = this.global.navigator.serviceWorker;\n\n\t\tif (iswindow) {\n\t\t\tglobal.document[SCRAMJETCLIENT] = this;\n\t\t}\n\n\t\tthis.wrapfn = createWrapFn(this, global);\n\t\tthis.natives = {\n\t\t\tstore: new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget: (target, prop: string) => {\n\t\t\t\t\t\tif (prop in target) {\n\t\t\t\t\t\t\treturn target[prop];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst split = prop.split(\".\");\n\t\t\t\t\t\tconst realProp = split.pop();\n\t\t\t\t\t\tconst realTarget = split.reduce((a, b) => a?.[b], this.global);\n\n\t\t\t\t\t\tif (!realTarget) return;\n\n\t\t\t\t\t\tconst original = Reflect.get(realTarget, realProp);\n\t\t\t\t\t\ttarget[prop] = original;\n\n\t\t\t\t\t\treturn target[prop];\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t),\n\t\t\tconstruct(target: string, ...args) {\n\t\t\t\tconst original = this.store[target];\n\t\t\t\tif (!original) return null;\n\n\t\t\t\treturn new original(...args);\n\t\t\t},\n\t\t\tcall(target: string, that: any, ...args) {\n\t\t\t\tconst original = this.store[target];\n\t\t\t\tif (!original) return null;\n\n\t\t\t\treturn original.call(that, ...args);\n\t\t\t},\n\t\t};\n\t\tthis.descriptors = {\n\t\t\tstore: new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget: (target, prop: string) => {\n\t\t\t\t\t\tif (prop in target) {\n\t\t\t\t\t\t\treturn target[prop];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst split = prop.split(\".\");\n\t\t\t\t\t\tconst realProp = split.pop();\n\t\t\t\t\t\tconst realTarget = split.reduce((a, b) => a?.[b], this.global);\n\n\t\t\t\t\t\tif (!realTarget) return;\n\n\t\t\t\t\t\tconst original = client.natives.call(\n\t\t\t\t\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\trealTarget,\n\t\t\t\t\t\t\trealProp\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttarget[prop] = original;\n\n\t\t\t\t\t\treturn target[prop];\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t),\n\t\t\tget(target: string, that: any) {\n\t\t\t\tconst original = this.store[target];\n\t\t\t\tif (!original) return null;\n\n\t\t\t\treturn original.get.call(that);\n\t\t\t},\n\t\t\tset(target: string, that: any, value: any) {\n\t\t\t\tconst original = this.store[target];\n\t\t\t\tif (!original) return null;\n\n\t\t\t\toriginal.set.call(that, value);\n\t\t\t},\n\t\t};\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\tconst client = this;\n\t\tthis.meta = {\n\t\t\tget origin() {\n\t\t\t\treturn client.url;\n\t\t\t},\n\t\t\tget base() {\n\t\t\t\tif (iswindow) {\n\t\t\t\t\tconst base = client.natives.call(\n\t\t\t\t\t\t\"Document.prototype.querySelector\",\n\t\t\t\t\t\tclient.global.document,\n\t\t\t\t\t\t\"base\"\n\t\t\t\t\t);\n\t\t\t\t\tif (base) {\n\t\t\t\t\t\tlet url = base.getAttribute(\"href\");\n\t\t\t\t\t\tif (!url) return client.url;\n\t\t\t\t\t\tconst frag = url.indexOf(\"#\");\n\t\t\t\t\t\turl = url.substring(0, frag === -1 ? undefined : frag);\n\t\t\t\t\t\tif (!url) return client.url;\n\n\t\t\t\t\t\treturn new URL(url, client.url.origin);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn client.url;\n\t\t\t},\n\t\t\tget topFrameName() {\n\t\t\t\tif (!iswindow)\n\t\t\t\t\tthrow new Error(\"topFrameName was called from a worker?\");\n\n\t\t\t\tlet currentWin = client.global;\n\n\t\t\t\ttry {\n\t\t\t\t\tif (currentWin.parent.window == currentWin.window) {\n\t\t\t\t\t\t// we're top level & we don't have a frame name\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// accessing parent was blocked by CORS, we're in a frame but the parent is cross origin\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\t// find the topmost frame that's controlled by scramjet, stopping before the real top frame\n\t\t\t\t\twhile (currentWin.parent.window !== currentWin.window) {\n\t\t\t\t\t\tif (!currentWin.parent.window[SCRAMJETCLIENT]) break;\n\t\t\t\t\t\tcurrentWin = currentWin.parent.window;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// doesn't matter if it throws here just means we found the topmost one\n\t\t\t\t}\n\n\t\t\t\tconst curclient = currentWin[SCRAMJETCLIENT];\n\t\t\t\tconst frame = curclient.descriptors.get(\n\t\t\t\t\t\"window.frameElement\",\n\t\t\t\t\tcurrentWin\n\t\t\t\t);\n\t\t\t\tif (!frame) {\n\t\t\t\t\t// we're inside an iframe, but the top frame is scramjet-controlled and top level, so we can't get a top frame name\n\t\t\t\t\t// or we're cross-origin and frameElement doesn't exist. that's a TODO because this won't work\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (!frame.name) {\n\t\t\t\t\t// the top frame is scramjet-controlled, but it has no name. this is user error\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\"YOU NEED TO USE `new ScramjetFrame()`! DIRECT IFRAMES WILL NOT WORK\"\n\t\t\t\t\t);\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn frame.name;\n\t\t\t},\n\t\t\tget parentFrameName() {\n\t\t\t\tif (!iswindow)\n\t\t\t\t\tthrow new Error(\"parentFrameName was called from a worker?\");\n\n\t\t\t\ttry {\n\t\t\t\t\tif (client.global.parent.window == client.global.window) {\n\t\t\t\t\t\t// we're top level & we don't have a frame name\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// accessing parent was blocked by CORS, we're in a frame but the parent is cross origin\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst parentWin = client.global.parent.window;\n\t\t\t\tif (parentWin[SCRAMJETCLIENT]) {\n\t\t\t\t\t// we're inside an iframe, and the parent is scramjet-controlled\n\t\t\t\t\tconst parentClient = parentWin[SCRAMJETCLIENT];\n\t\t\t\t\tconst frame = parentClient.descriptors.get(\n\t\t\t\t\t\t\"window.frameElement\",\n\t\t\t\t\t\tparentWin\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!frame) {\n\t\t\t\t\t\t// parent is scramjet controlled and top-level. there is no parent frame name\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!frame.name) {\n\t\t\t\t\t\t// the parent frame is scramjet-controlled, but it has no name. this is user error\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"YOU NEED TO USE `new ScramjetFrame()`! DIRECT IFRAMES WILL NOT WORK\"\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn frame.name;\n\t\t\t\t} else {\n\t\t\t\t\t// we're inside an iframe, and the parent is not scramjet-controlled\n\t\t\t\t\t// return our own frame name\n\t\t\t\t\tconst frame = client.descriptors.get(\n\t\t\t\t\t\t\"window.frameElement\",\n\t\t\t\t\t\tclient.global\n\t\t\t\t\t);\n\t\t\t\t\tif (!frame.name) {\n\t\t\t\t\t\t// the parent frame is not scramjet-controlled, so we can't get a parent frame name\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"YOU NEED TO USE `new ScramjetFrame()`! DIRECT IFRAMES WILL NOT WORK\"\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn frame.name;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis.locationProxy = createLocationProxy(this, global);\n\n\t\tglobal[SCRAMJETCLIENT] = this;\n\t}\n\n\tget frame(): ScramjetFrame | null {\n\t\tif (!iswindow) return null;\n\t\tconst frame = this.descriptors.get(\"window.frameElement\", this.global);\n\n\t\tif (!frame) return null; // we're top level\n\t\tconst sframe = frame[SCRAMJETFRAME];\n\n\t\tif (!sframe) {\n\t\t\t// we're in a subframe, recurse upward until we find one\n\t\t\tlet currentwin = this.global.window;\n\t\t\twhile (currentwin.parent !== currentwin) {\n\t\t\t\tlet currentclient = currentwin[SCRAMJETCLIENT];\n\t\t\t\tlet currentFrame = currentclient.descriptors.get(\n\t\t\t\t\t\"window.frameElement\",\n\t\t\t\t\tcurrentwin\n\t\t\t\t);\n\t\t\t\tif (!currentFrame) return null; // ??\n\t\t\t\tif (currentFrame && currentFrame[SCRAMJETFRAME]) {\n\t\t\t\t\treturn currentFrame[SCRAMJETFRAME];\n\t\t\t\t}\n\t\t\t\tcurrentwin = currentwin.parent.window;\n\t\t\t}\n\t\t}\n\n\t\treturn sframe;\n\t}\n\tget isSubframe(): boolean {\n\t\tif (!iswindow) return false;\n\t\tconst frame = this.descriptors.get(\"window.frameElement\", this.global);\n\n\t\tif (!frame) return false; // we're top level\n\t\tconst sframe = frame[SCRAMJETFRAME];\n\t\tif (!sframe) return true;\n\n\t\treturn false;\n\t}\n\n\thook() {\n\t\tconst context = import.meta.webpackContext(\".\", {\n\t\t\trecursive: true,\n\t\t});\n\n\t\tconst modules: ScramjetModule[] = [];\n\n\t\tfor (const key of context.keys()) {\n\t\t\tconst module = context(key) as ScramjetModule;\n\t\t\tif (!key.endsWith(\".ts\")) continue;\n\t\t\tif (\n\t\t\t\t(key.startsWith(\"./dom/\") && \"window\" in this.global) ||\n\t\t\t\t(key.startsWith(\"./worker/\") && \"WorkerGlobalScope\" in this.global) ||\n\t\t\t\tkey.startsWith(\"./shared/\")\n\t\t\t) {\n\t\t\t\tmodules.push(module);\n\t\t\t}\n\t\t}\n\n\t\tmodules.sort((a, b) => {\n\t\t\tconst aorder = a.order || 0;\n\t\t\tconst border = b.order || 0;\n\n\t\t\treturn aorder - border;\n\t\t});\n\n\t\tfor (const module of modules) {\n\t\t\tif (!module.enabled || module.enabled(this))\n\t\t\t\tmodule.default(this, this.global);\n\t\t\telse if (module.disabled) module.disabled(this, this.global);\n\t\t}\n\t}\n\n\tget url(): URL {\n\t\treturn new URL(this.unrewriteUrl(this.global.location.href));\n\t}\n\n\tset url(url: URL | string) {\n\t\tif (url instanceof URL) url = url.toString();\n\n\t\tconst ev = new NavigateEvent(url);\n\t\tif (this.frame) {\n\t\t\tthis.frame.dispatchEvent(ev);\n\t\t}\n\t\tif (ev.defaultPrevented) return;\n\n\t\tthis.global.location.href = this.rewriteUrl(ev.url);\n\t}\n\n\t// below are the utilities for proxying and trapping dom APIs\n\t// you don't have to understand this it just makes the rest easier\n\t// i'll document it eventually\n\n\tProxy(name: string | string[], handler: Proxy) {\n\t\tif (Array.isArray(name)) {\n\t\t\tfor (const n of name) {\n\t\t\t\tthis.Proxy(n, handler);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst split = name.split(\".\");\n\t\tconst prop = split.pop();\n\t\tconst target = split.reduce((a, b) => a?.[b], this.global);\n\t\tif (!target) return;\n\n\t\tif (!(name in this.natives.store)) {\n\t\t\tconst original = Reflect.get(target, prop);\n\t\t\tthis.natives.store[name] = original;\n\t\t}\n\n\t\tthis.RawProxy(target, prop, handler, name);\n\t}\n\tRawProxy(target: any, prop: string, handler: Proxy, debugname?: string) {\n\t\tif (!target) return;\n\t\tif (!prop) return;\n\t\tif (!Reflect.has(target, prop)) return;\n\n\t\tconst value = Reflect.get(target, prop);\n\t\tconst originalDescriptor = Object.getOwnPropertyDescriptor(target, prop);\n\t\tdelete target[prop];\n\n\t\tconst h: ProxyHandler<any> = {};\n\n\t\tlet applyFn: typeof Reflect.apply;\n\t\tlet constructFn: typeof Reflect.construct;\n\t\tif (this.flagEnabled(\"debugTrampolines\")) {\n\t\t\tlet fnName: string;\n\t\t\tif (debugname) {\n\t\t\t\tfnName = debugname;\n\t\t\t} else if (typeof value === \"function\" && value.name) {\n\t\t\t\tfnName = `Function ${value.name} -> ${prop}`;\n\t\t\t} else if (typeof value === \"object\" && value.constructor) {\n\t\t\t\tfnName = `Object ${value.constructor.name} -> ${prop}`;\n\t\t\t} else {\n\t\t\t\tfnName = `${typeof value} -> ${prop}`;\n\t\t\t}\n\t\t\tlet windowName = this.descriptors.get(\"window.name\", this.global);\n\t\t\tif (!windowName) windowName = \"<unnamed window>\";\n\t\t\tlet location = this.url.href;\n\n\t\t\t// sanitize newlines just in case somehow\n\t\t\tlocation = location.replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\");\n\t\t\twindowName = windowName.replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\");\n\t\t\tfnName = fnName.replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\");\n\t\t\tlet sourceURL = debugname ? `${debugname}.sj` : `rawproxy.sj`;\n\n\t\t\tlet { construct, apply } = this.natives.call(\n\t\t\t\t\"Function\",\n\t\t\t\tnull,\n\t\t\t\t`\"use strict\";\n\n// SCRAMJET FUNCTION INTERCEPT\n// target: ${fnName}\n// frame: ${windowName}\n// location: ${location}\n\nfunction apply(fn, that, args) {\n\treturn Reflect.apply(fn, that, args);\n}\n\nfunction construct(fn, args, newTarget) {\n\treturn Reflect.construct(fn, args, newTarget);\n}\n\nreturn { apply, construct };\n\n//# sourceURL=${sourceURL}`\n\t\t\t)();\n\n\t\t\tapplyFn = apply;\n\t\t\tconstructFn = construct;\n\t\t} else {\n\t\t\tapplyFn = Reflect.apply;\n\t\t\tconstructFn = Reflect.construct;\n\t\t}\n\n\t\tif (handler.construct) {\n\t\t\th.construct = function (\n\t\t\t\tconstructor: any,\n\t\t\t\targs: any[],\n\t\t\t\tnewTarget: AnyFunction\n\t\t\t) {\n\t\t\t\tlet returnValue: any = undefined;\n\t\t\t\tlet earlyreturn = false;\n\n\t\t\t\tconst ctx: ProxyCtx = {\n\t\t\t\t\tfn: constructor,\n\t\t\t\t\tthis: null,\n\t\t\t\t\targs,\n\t\t\t\t\tnewTarget: newTarget,\n\t\t\t\t\treturn: (r: any) => {\n\t\t\t\t\t\tearlyreturn = true;\n\t\t\t\t\t\treturnValue = r;\n\t\t\t\t\t},\n\t\t\t\t\tcall: () => {\n\t\t\t\t\t\tearlyreturn = true;\n\t\t\t\t\t\treturnValue = constructFn(ctx.fn, ctx.args, ctx.newTarget);\n\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\thandler.construct(ctx);\n\n\t\t\t\tif (earlyreturn) {\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\n\t\t\t\treturn constructFn(ctx.fn, ctx.args, ctx.newTarget);\n\t\t\t};\n\t\t}\n\n\t\tif (handler.apply) {\n\t\t\th.apply = (fn: any, that: any, args: any[]) => {\n\t\t\t\tlet returnValue: any = undefined;\n\t\t\t\tlet earlyreturn = false;\n\n\t\t\t\tconst ctx: ProxyCtx = {\n\t\t\t\t\tfn,\n\t\t\t\t\tthis: that,\n\t\t\t\t\targs,\n\t\t\t\t\tnewTarget: null,\n\t\t\t\t\treturn: (r: any) => {\n\t\t\t\t\t\tearlyreturn = true;\n\t\t\t\t\t\treturnValue = r;\n\t\t\t\t\t},\n\t\t\t\t\tcall: () => {\n\t\t\t\t\t\tearlyreturn = true;\n\t\t\t\t\t\treturnValue = applyFn(ctx.fn, ctx.this, ctx.args);\n\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tconst pst = Error.prepareStackTrace;\n\n\t\t\t\tlet client = this;\n\t\t\t\tError.prepareStackTrace = function (err, s) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ts[0].getFileName() &&\n\t\t\t\t\t\t!s[0].getFileName().startsWith(client.context.prefix.href)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { stack: err.stack };\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\thandler.apply(ctx);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\t\tif ((err.stack as any) instanceof Object) {\n\t\t\t\t\t\t\t//@ts-expect-error i'm not going to explain this\n\t\t\t\t\t\t\terr.stack = err.stack.stack;\n\t\t\t\t\t\t\tconsole.error(\"ERROR FROM SCRAMJET INTERNALS\", err);\n\t\t\t\t\t\t\tif (!this.flagEnabled(\"allowFailedIntercepts\")) {\n\t\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tError.prepareStackTrace = pst;\n\n\t\t\t\tif (earlyreturn) {\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\n\t\t\t\treturn applyFn(ctx.fn, ctx.this, ctx.args);\n\t\t\t};\n\t\t}\n\n\t\th.getOwnPropertyDescriptor = getOwnPropertyDescriptorHandler;\n\t\t// Preserve original property descriptor (enumerable, configurable, etc.)\n\t\tObject.defineProperty(target, prop, {\n\t\t\tvalue: new Proxy(value, h),\n\t\t\twritable: originalDescriptor?.writable ?? true,\n\t\t\tenumerable: originalDescriptor?.enumerable ?? false,\n\t\t\tconfigurable: originalDescriptor?.configurable ?? true,\n\t\t});\n\t}\n\tTrap<T>(name: string | string[], descriptor: Trap<T>): PropertyDescriptor {\n\t\tif (Array.isArray(name)) {\n\t\t\tfor (const n of name) {\n\t\t\t\tthis.Trap(n, descriptor);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst split = name.split(\".\");\n\t\tconst prop = split.pop();\n\t\tconst target = split.reduce((a, b) => a?.[b], this.global);\n\t\tif (!target) return;\n\n\t\tconst original = this.natives.call(\n\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\tnull,\n\t\t\ttarget,\n\t\t\tprop\n\t\t);\n\t\tthis.descriptors.store[name] = original;\n\n\t\treturn this.RawTrap(target, prop, descriptor);\n\t}\n\tRawTrap<T>(\n\t\ttarget: any,\n\t\tprop: string,\n\t\tdescriptor: Trap<T>\n\t): PropertyDescriptor {\n\t\tif (!target) return;\n\t\tif (!prop) return;\n\t\tif (!Reflect.has(target, prop)) return;\n\n\t\tconst oldDescriptor = this.natives.call(\n\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\tnull,\n\t\t\ttarget,\n\t\t\tprop\n\t\t);\n\n\t\tconst ctx: TrapCtx<T> = {\n\t\t\tthis: null,\n\t\t\tget: function () {\n\t\t\t\treturn oldDescriptor && oldDescriptor.get.call(this.this);\n\t\t\t},\n\t\t\tset: function (v: T) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\t\toldDescriptor && oldDescriptor.set.call(this.this, v);\n\t\t\t},\n\t\t};\n\n\t\tdelete target[prop];\n\n\t\tconst desc: PropertyDescriptor = {};\n\n\t\tif (descriptor.get) {\n\t\t\tdesc.get = function () {\n\t\t\t\tctx.this = this;\n\n\t\t\t\treturn descriptor.get(ctx);\n\t\t\t};\n\t\t} else if (oldDescriptor?.get) {\n\t\t\tdesc.get = oldDescriptor.get;\n\t\t}\n\n\t\tif (descriptor.set) {\n\t\t\tdesc.set = function (v: T) {\n\t\t\t\tctx.this = this;\n\n\t\t\t\tdescriptor.set(ctx, v);\n\t\t\t};\n\t\t} else if (oldDescriptor?.set) {\n\t\t\tdesc.set = oldDescriptor.set;\n\t\t}\n\n\t\tif (descriptor.enumerable) desc.enumerable = descriptor.enumerable;\n\t\telse if (oldDescriptor?.enumerable)\n\t\t\tdesc.enumerable = oldDescriptor.enumerable;\n\t\tif (descriptor.configurable) desc.configurable = descriptor.configurable;\n\t\telse if (oldDescriptor?.configurable)\n\t\t\tdesc.configurable = oldDescriptor.configurable;\n\n\t\tObject.defineProperty(target, prop, desc);\n\n\t\treturn oldDescriptor;\n\t}\n\n\trewriteUrl(url: string | URL): string {\n\t\treturn rewriteUrl(url, this.context, this.meta);\n\t}\n\n\tunrewriteUrl(url: string | URL): string {\n\t\treturn unrewriteUrl(url, this.context);\n\t}\n\n\tflagEnabled(flag: keyof ScramjetConfig[\"flags\"]): boolean {\n\t\treturn flagEnabled(flag, this.context, this.url);\n\t}\n\n\tget config(): ScramjetConfig {\n\t\treturn this.context.config;\n\t}\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: typeof window) {\n\tclient.Trap(\"Element.prototype.attributes\", {\n\t\tget(ctx) {\n\t\t\tconst map = ctx.get() as NamedNodeMap;\n\t\t\tconst proxy = new Proxy(map, {\n\t\t\t\tget(target, prop, _receiver) {\n\t\t\t\t\tconst value = Reflect.get(target, prop);\n\n\t\t\t\t\tif (prop === \"length\") {\n\t\t\t\t\t\treturn Object.keys(proxy).length;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (prop === \"getNamedItem\") {\n\t\t\t\t\t\treturn (name: string) => proxy[name];\n\t\t\t\t\t}\n\t\t\t\t\tif (prop === \"getNamedItemNS\") {\n\t\t\t\t\t\treturn (namespace: string, name: string) =>\n\t\t\t\t\t\t\tproxy[`${namespace}:${name}`];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (prop in NamedNodeMap.prototype && typeof value === \"function\") {\n\t\t\t\t\t\treturn new Proxy(value, {\n\t\t\t\t\t\t\tapply(target, that, args) {\n\t\t\t\t\t\t\t\tif (that === proxy) {\n\t\t\t\t\t\t\t\t\treturn Reflect.apply(target, map, args);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn Reflect.apply(target, that, args);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(typeof prop === \"string\" || typeof prop === \"number\") &&\n\t\t\t\t\t\t!isNaN(Number(prop))\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst position = Object.keys(proxy)[prop];\n\n\t\t\t\t\t\treturn map[position];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.has(target, prop)) return undefined;\n\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\townKeys(target) {\n\t\t\t\t\tconst keys = Reflect.ownKeys(target);\n\n\t\t\t\t\treturn keys.filter((key) => this.has(target, key));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\tif (typeof prop === \"symbol\") return Reflect.has(target, prop);\n\t\t\t\t\tif (prop.startsWith(\"scramjet-attr-\")) return false;\n\t\t\t\t\tif (map[prop]?.name?.startsWith(\"scramjet-attr-\")) return false;\n\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn proxy;\n\t\t},\n\t});\n\n\tclient.Trap([\"Attr.prototype.value\", \"Attr.prototype.nodeValue\"], {\n\t\tget(ctx) {\n\t\t\tif (ctx.this?.ownerElement) {\n\t\t\t\treturn ctx.this.ownerElement.getAttribute(ctx.this.name);\n\t\t\t}\n\n\t\t\treturn ctx.get();\n\t\t},\n\t\tset(ctx, value) {\n\t\t\tif (ctx.this?.ownerElement) {\n\t\t\t\treturn ctx.this.ownerElement.setAttribute(ctx.this.name, value);\n\t\t\t}\n\n\t\t\treturn ctx.set(value);\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Proxy(\"Navigator.prototype.sendBeacon\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: typeof window) {\n\tclient.Trap(\"Document.prototype.cookie\", {\n\t\tget() {\n\t\t\treturn client.context.cookieJar.getCookies(client.url, true);\n\t\t},\n\t\tset(ctx, value: string) {\n\t\t\tclient.context.cookieJar.setCookies([value], client.url);\n\t\t\tclient.init.sendSetCookie(client.url, value);\n\t\t},\n\t});\n\n\t// @ts-ignore\n\tdelete self.cookieStore;\n}\n","import { rewriteCss, unrewriteCss } from \"@rewriters/css\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"CSSStyleDeclaration.prototype.setProperty\", {\n\t\tapply(ctx) {\n\t\t\tif (!ctx.args[1]) return;\n\t\t\tctx.args[1] = rewriteCss(ctx.args[1], client.context, client.meta);\n\t\t},\n\t});\n\n\tclient.Proxy(\"CSSStyleDeclaration.prototype.getPropertyValue\", {\n\t\tapply(ctx) {\n\t\t\tconst v = ctx.call();\n\t\t\tif (!v) return v;\n\t\t\tctx.return(unrewriteCss(v));\n\t\t},\n\t});\n\n\tclient.Trap(\"CSSStyleDeclaration.prototype.cssText\", {\n\t\tset(ctx, value: string) {\n\t\t\tctx.set(rewriteCss(value, client.context, client.meta));\n\t\t},\n\t\tget(ctx) {\n\t\t\treturn unrewriteCss(ctx.get());\n\t\t},\n\t});\n\n\tclient.Proxy(\"CSSStyleSheet.prototype.insertRule\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = rewriteCss(ctx.args[0], client.context, client.meta);\n\t\t},\n\t});\n\n\tclient.Proxy(\"CSSStyleSheet.prototype.replace\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = rewriteCss(ctx.args[0], client.context, client.meta);\n\t\t},\n\t});\n\n\tclient.Proxy(\"CSSStyleSheet.prototype.replaceSync\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = rewriteCss(ctx.args[0], client.context, client.meta);\n\t\t},\n\t});\n\n\tclient.Trap(\"CSSRule.prototype.cssText\", {\n\t\tset(ctx, value: string) {\n\t\t\tctx.set(rewriteCss(value, client.context, client.meta));\n\t\t},\n\t\tget(ctx) {\n\t\t\treturn unrewriteCss(ctx.get());\n\t\t},\n\t});\n\n\tclient.Proxy(\"CSSStyleValue.parse\", {\n\t\tapply(ctx) {\n\t\t\tif (!ctx.args[1]) return;\n\t\t\tctx.args[1] = rewriteCss(ctx.args[1], client.context, client.meta);\n\t\t},\n\t});\n\n\tclient.Trap(\"HTMLElement.prototype.style\", {\n\t\tget(ctx) {\n\t\t\t// unfortunate and dumb hack. we have to trap every property of this\n\t\t\t// since the prototype chain is fucked\n\n\t\t\tconst style = ctx.get() as CSSStyleDeclaration;\n\n\t\t\treturn new Proxy(style, {\n\t\t\t\tget(target, prop) {\n\t\t\t\t\tconst value = Reflect.get(target, prop);\n\n\t\t\t\t\tif (typeof value === \"function\") {\n\t\t\t\t\t\treturn new Proxy(value, {\n\t\t\t\t\t\t\tapply(target, that, args) {\n\t\t\t\t\t\t\t\treturn Reflect.apply(target, style, args);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (prop in CSSStyleDeclaration.prototype) return value;\n\t\t\t\t\tif (!value) return value;\n\n\t\t\t\t\treturn unrewriteCss(value);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tif (prop == \"cssText\" || value == \"\" || typeof value !== \"string\") {\n\t\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Reflect.set(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tprop,\n\t\t\t\t\t\trewriteCss(value, client.context, client.meta)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tset(ctx, value: string) {\n\t\t\t// this will actually run the trap for cssText. don't rewrite it here\n\t\t\tctx.set(value);\n\t\t},\n\t});\n}\n","import { rewriteHtml } from \"@rewriters/html\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tconst tostring = String;\n\tclient.Proxy(\n\t\t[\"Document.prototype.querySelector\", \"Document.prototype.querySelectorAll\"],\n\t\t{\n\t\t\tapply(ctx) {\n\t\t\t\tctx.args[0] = tostring(ctx.args[0]).replace(\n\t\t\t\t\t/((?:^|\\s)\\b\\w+\\[(?:src|href|data-href))[\\^]?(=['\"]?(?:https?[:])?\\/\\/)/,\n\t\t\t\t\t\"$1*$2\"\n\t\t\t\t);\n\t\t\t},\n\t\t}\n\t);\n\n\tclient.Proxy(\"Document.prototype.write\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0])\n\t\t\t\ttry {\n\t\t\t\t\tctx.args[0] = rewriteHtml(\n\t\t\t\t\t\tctx.args[0],\n\t\t\t\t\t\tclient.context,\n\t\t\t\t\t\tclient.meta,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t} catch {}\n\t\t},\n\t});\n\n\tclient.Trap(\"Document.prototype.referrer\", {\n\t\tget() {\n\t\t\treturn client.url.toString();\n\t\t},\n\t});\n\n\tclient.Proxy(\"Document.prototype.writeln\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0])\n\t\t\t\ttry {\n\t\t\t\t\tctx.args[0] = rewriteHtml(\n\t\t\t\t\t\tctx.args[0],\n\t\t\t\t\t\tclient.context,\n\t\t\t\t\t\tclient.meta,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t} catch {}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Document.prototype.parseHTMLUnsafe\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0])\n\t\t\t\ttry {\n\t\t\t\t\tctx.args[0] = rewriteHtml(\n\t\t\t\t\t\tctx.args[0],\n\t\t\t\t\t\tclient.context,\n\t\t\t\t\t\tclient.meta,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t} catch {}\n\t\t},\n\t});\n}\n","import { htmlRules } from \"@/shared/htmlRules\";\nimport { rewriteCss, unrewriteCss } from \"@rewriters/css\";\nimport { rewriteHtml, unrewriteHtml } from \"@rewriters/html\";\nimport { rewriteJs } from \"@rewriters/js\";\nimport { rewriteUrl, unrewriteUrl } from \"@rewriters/url\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\nimport { ScramjetClient } from \"@client/index\";\n\nconst encoder = new TextEncoder();\nfunction bytesToBase64(bytes: Uint8Array) {\n\tconst binString = Array.from(bytes, (byte) =>\n\t\tString.fromCodePoint(byte)\n\t).join(\"\");\n\n\treturn btoa(binString);\n}\nexport default function (client: ScramjetClient, self: typeof window) {\n\tconst attrObject = {\n\t\tnonce: [self.HTMLElement],\n\t\tintegrity: [self.HTMLScriptElement, self.HTMLLinkElement],\n\t\tcsp: [self.HTMLIFrameElement],\n\t\tcredentialless: [self.HTMLIFrameElement],\n\t\tsrc: [\n\t\t\tself.HTMLImageElement,\n\t\t\tself.HTMLMediaElement,\n\t\t\tself.HTMLIFrameElement,\n\t\t\tself.HTMLFrameElement,\n\t\t\tself.HTMLEmbedElement,\n\t\t\tself.HTMLScriptElement,\n\t\t\tself.HTMLSourceElement,\n\t\t],\n\t\thref: [self.HTMLAnchorElement, self.HTMLLinkElement],\n\t\tdata: [self.HTMLObjectElement],\n\t\taction: [self.HTMLFormElement],\n\t\tformaction: [self.HTMLButtonElement, self.HTMLInputElement],\n\t\tsrcdoc: [self.HTMLIFrameElement],\n\t\tposter: [self.HTMLVideoElement],\n\t\timagesrcset: [self.HTMLLinkElement],\n\t};\n\n\tconst urlinterfaces = [\n\t\tself.HTMLAnchorElement.prototype,\n\t\tself.HTMLAreaElement.prototype,\n\t];\n\tconst originalhrefs = [\n\t\tclient.natives.call(\n\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\tnull,\n\t\t\tself.HTMLAnchorElement.prototype,\n\t\t\t\"href\"\n\t\t),\n\t\tclient.natives.call(\n\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\tnull,\n\t\t\tself.HTMLAreaElement.prototype,\n\t\t\t\"href\"\n\t\t),\n\t];\n\n\tconst attrs = Object.keys(attrObject);\n\n\tfor (const attr of attrs) {\n\t\tfor (const element of attrObject[attr]) {\n\t\t\tconst descriptor = client.natives.call(\n\t\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\t\tnull,\n\t\t\t\telement.prototype,\n\t\t\t\tattr\n\t\t\t);\n\t\t\tObject.defineProperty(element.prototype, attr, {\n\t\t\t\tget() {\n\t\t\t\t\tif ([\"src\", \"data\", \"href\", \"action\", \"formaction\"].includes(attr)) {\n\t\t\t\t\t\treturn unrewriteUrl(descriptor.get.call(this), client.context);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn descriptor.get.call(this);\n\t\t\t\t},\n\n\t\t\t\tset(value) {\n\t\t\t\t\treturn this.setAttribute(attr, value);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\t// note that href is not here\n\tconst urlprops = [\n\t\t\"protocol\",\n\t\t\"hash\",\n\t\t\"host\",\n\t\t\"hostname\",\n\t\t\"origin\",\n\t\t\"pathname\",\n\t\t\"port\",\n\t\t\"search\",\n\t];\n\tfor (const prop of urlprops) {\n\t\tfor (const i in urlinterfaces) {\n\t\t\tconst target = urlinterfaces[i];\n\t\t\tconst desc = originalhrefs[i];\n\t\t\tclient.RawTrap(target, prop, {\n\t\t\t\tget(ctx) {\n\t\t\t\t\tconst href = desc.get.call(ctx.this);\n\t\t\t\t\tif (!href) return href;\n\n\t\t\t\t\tconst url = new URL(unrewriteUrl(href, client.context));\n\n\t\t\t\t\treturn url[prop];\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tclient.Trap(\"Node.prototype.baseURI\", {\n\t\tget(ctx) {\n\t\t\tconst node = ctx.this as Node;\n\t\t\tlet base = node.ownerDocument?.querySelector(\"base\");\n\t\t\tif (node instanceof Document) base = node.querySelector(\"base\");\n\n\t\t\tif (base) {\n\t\t\t\treturn new URL(base.href, client.url.origin).href;\n\t\t\t}\n\n\t\t\treturn client.url.origin;\n\t\t},\n\t\tset(ctx, v) {\n\t\t\treturn false;\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.getAttribute\", {\n\t\tapply(ctx) {\n\t\t\tconst [name] = ctx.args;\n\n\t\t\tif (name.startsWith(\"scramjet-attr\")) {\n\t\t\t\treturn ctx.return(null);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tclient.natives.call(\n\t\t\t\t\t\"Element.prototype.hasAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\t`scramjet-attr-${name}`\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst attrib = ctx.fn.call(ctx.this, `scramjet-attr-${name}`);\n\t\t\t\tif (attrib === null) return ctx.return(\"\");\n\n\t\t\t\treturn ctx.return(attrib);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.getAttributeNames\", {\n\t\tapply(ctx) {\n\t\t\tconst attrNames = ctx.call() as string[];\n\t\t\tconst cleaned = attrNames.filter(\n\t\t\t\t(attr) => !attr.startsWith(\"scramjet-attr\")\n\t\t\t);\n\n\t\t\tctx.return(cleaned);\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.getAttributeNode\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0].startsWith(\"scramjet-attr\")) return ctx.return(null);\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.hasAttribute\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0].startsWith(\"scramjet-attr\")) return ctx.return(false);\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.setAttribute\", {\n\t\tapply(ctx) {\n\t\t\tconst [name, value] = ctx.args;\n\n\t\t\tconst ruleList = htmlRules.find((rule) => {\n\t\t\t\tconst r = rule[name.toLowerCase()];\n\t\t\t\tif (!r) return false;\n\t\t\t\tif (r === \"*\") return true;\n\t\t\t\tif (typeof r === \"function\") return false; // this can't happen but ts\n\n\t\t\t\treturn r.includes(ctx.this.tagName.toLowerCase());\n\t\t\t});\n\n\t\t\tif (ruleList) {\n\t\t\t\tconst ret = ruleList.fn(value, client.context, client.meta);\n\t\t\t\tif (ret == null) {\n\t\t\t\t\tclient.natives.call(\n\t\t\t\t\t\t\"Element.prototype.removeAttribute\",\n\t\t\t\t\t\tctx.this,\n\t\t\t\t\t\tname\n\t\t\t\t\t);\n\t\t\t\t\tctx.return(undefined);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.args[1] = ret;\n\t\t\t\tctx.fn.call(ctx.this, `scramjet-attr-${ctx.args[0]}`, value);\n\t\t\t}\n\t\t},\n\t});\n\n\t// i actually need to do something with this\n\tclient.Proxy(\"Element.prototype.setAttributeNode\", {\n\t\tapply(_ctx) {},\n\t});\n\n\tclient.Proxy(\"Element.prototype.setAttributeNS\", {\n\t\tapply(ctx) {\n\t\t\tconst [_namespace, name, value] = ctx.args;\n\n\t\t\tconst ruleList = htmlRules.find((rule) => {\n\t\t\t\tconst r = rule[name.toLowerCase()];\n\t\t\t\tif (!r) return false;\n\t\t\t\tif (r === \"*\") return true;\n\t\t\t\tif (typeof r === \"function\") return false; // this can't happen but ts\n\n\t\t\t\treturn r.includes(ctx.this.tagName.toLowerCase());\n\t\t\t});\n\n\t\t\tif (ruleList) {\n\t\t\t\tctx.args[2] = ruleList.fn(value, client.context, client.meta);\n\t\t\t\tclient.natives.call(\n\t\t\t\t\t\"Element.prototype.setAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\t`scramjet-attr-${ctx.args[1]}`,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n\n\t// this is separate from the regular href handlers because it returns an SVGAnimatedString\n\tclient.Trap(\"SVGAnimatedString.prototype.baseVal\", {\n\t\tget(ctx) {\n\t\t\tconst href = ctx.get() as string;\n\t\t\tif (!href) return href;\n\n\t\t\treturn unrewriteUrl(href, client.context);\n\t\t},\n\t\tset(ctx, val: string) {\n\t\t\tctx.set(client.rewriteUrl(val));\n\t\t},\n\t});\n\tclient.Trap(\"SVGAnimatedString.prototype.animVal\", {\n\t\tget(ctx) {\n\t\t\tconst href = ctx.get() as string;\n\t\t\tif (!href) return href;\n\n\t\t\treturn unrewriteUrl(href, client.context);\n\t\t},\n\t\t// it has no setter\n\t});\n\n\tclient.Proxy(\"Element.prototype.removeAttribute\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0].startsWith(\"scramjet-attr\")) return ctx.return(undefined);\n\t\t\tif (\n\t\t\t\tclient.natives.call(\n\t\t\t\t\t\"Element.prototype.hasAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\tctx.args[0]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tctx.fn.call(ctx.this, `scramjet-attr-${ctx.args[0]}`);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.toggleAttribute\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0].startsWith(\"scramjet-attr\")) return ctx.return(false);\n\t\t\tif (\n\t\t\t\tclient.natives.call(\n\t\t\t\t\t\"Element.prototype.hasAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\tctx.args[0]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tctx.fn.call(ctx.this, `scramjet-attr-${ctx.args[0]}`);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Trap(\"Element.prototype.innerHTML\", {\n\t\tset(ctx, value: string) {\n\t\t\tlet newval;\n\t\t\tif (\n\t\t\t\tctx.this instanceof self.HTMLScriptElement &&\n\t\t\t\t/(application|text)\\/javascript|module|undefined/.test(ctx.this.type)\n\t\t\t) {\n\t\t\t\tnewval = rewriteJs(\n\t\t\t\t\tvalue,\n\t\t\t\t\t\"(anonymous script element)\",\n\t\t\t\t\tclient.context,\n\t\t\t\t\tclient.meta\n\t\t\t\t);\n\t\t\t\tclient.natives.call(\n\t\t\t\t\t\"Element.prototype.setAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\t\"scramjet-attr-script-source-src\",\n\t\t\t\t\tbytesToBase64(encoder.encode(newval))\n\t\t\t\t);\n\t\t\t} else if (ctx.this instanceof self.HTMLStyleElement) {\n\t\t\t\tnewval = rewriteCss(value, client.context, client.meta);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tnewval = rewriteHtml(value, client.context, client.meta);\n\t\t\t\t} catch {\n\t\t\t\t\tnewval = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tctx.set(newval);\n\t\t},\n\t\tget(ctx) {\n\t\t\tif (ctx.this instanceof self.HTMLScriptElement) {\n\t\t\t\tconst scriptSource = client.natives.call(\n\t\t\t\t\t\"Element.prototype.getAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\t\"scramjet-attr-script-source-src\"\n\t\t\t\t);\n\n\t\t\t\tif (scriptSource) {\n\t\t\t\t\treturn atob(scriptSource);\n\t\t\t\t}\n\n\t\t\t\treturn ctx.get();\n\t\t\t}\n\t\t\tif (ctx.this instanceof self.HTMLStyleElement) {\n\t\t\t\treturn ctx.get();\n\t\t\t}\n\n\t\t\treturn unrewriteHtml(ctx.get());\n\t\t},\n\t});\n\n\tclient.Trap(\"Node.prototype.textContent\", {\n\t\tset(ctx, value: string) {\n\t\t\t// TODO: box the instanceofs\n\t\t\tif (\n\t\t\t\tctx.this instanceof self.HTMLScriptElement &&\n\t\t\t\t/(application|text)\\/javascript|module|undefined/.test(ctx.this.type)\n\t\t\t) {\n\t\t\t\tconst newval: string = rewriteJs(\n\t\t\t\t\tvalue,\n\t\t\t\t\t\"(anonymous script element)\",\n\t\t\t\t\tclient.context,\n\t\t\t\t\tclient.meta\n\t\t\t\t) as string;\n\t\t\t\tclient.natives.call(\n\t\t\t\t\t\"Element.prototype.setAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\t\"scramjet-attr-script-source-src\",\n\t\t\t\t\tbytesToBase64(encoder.encode(newval))\n\t\t\t\t);\n\n\t\t\t\treturn ctx.set(newval);\n\t\t\t} else if (ctx.this instanceof self.HTMLStyleElement) {\n\t\t\t\treturn ctx.set(rewriteCss(value, client.context, client.meta));\n\t\t\t} else {\n\t\t\t\treturn ctx.set(value);\n\t\t\t}\n\t\t},\n\t\tget(ctx) {\n\t\t\tif (ctx.this instanceof self.HTMLScriptElement) {\n\t\t\t\tconst scriptSource = client.natives.call(\n\t\t\t\t\t\"Element.prototype.getAttribute\",\n\t\t\t\t\tctx.this,\n\t\t\t\t\t\"scramjet-attr-script-source-src\"\n\t\t\t\t);\n\n\t\t\t\tif (scriptSource) {\n\t\t\t\t\treturn atob(scriptSource);\n\t\t\t\t}\n\n\t\t\t\treturn ctx.get();\n\t\t\t}\n\t\t\tif (ctx.this instanceof self.HTMLStyleElement) {\n\t\t\t\treturn unrewriteCss(ctx.get() as string);\n\t\t\t}\n\n\t\t\treturn ctx.get();\n\t\t},\n\t});\n\n\tclient.Trap(\"Element.prototype.outerHTML\", {\n\t\tset(ctx, value: string) {\n\t\t\tctx.set(rewriteHtml(value, client.context, client.meta));\n\t\t},\n\t\tget(ctx) {\n\t\t\treturn unrewriteHtml(ctx.get());\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.setHTMLUnsafe\", {\n\t\tapply(ctx) {\n\t\t\ttry {\n\t\t\t\tctx.args[0] = rewriteHtml(\n\t\t\t\t\tctx.args[0],\n\t\t\t\t\tclient.context,\n\t\t\t\t\tclient.meta,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t} catch {}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.getHTML\", {\n\t\tapply(ctx) {\n\t\t\tctx.return(unrewriteHtml(ctx.call()));\n\t\t},\n\t});\n\n\tclient.Proxy(\"Element.prototype.insertAdjacentHTML\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[1])\n\t\t\t\ttry {\n\t\t\t\t\tctx.args[1] = rewriteHtml(\n\t\t\t\t\t\tctx.args[1],\n\t\t\t\t\t\tclient.context,\n\t\t\t\t\t\tclient.meta,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t} catch {}\n\t\t},\n\t});\n\n\t// TODO: this needs to be done for all insert methods\n\t// client.Proxy([\"Element.prototype.appendChild\", \"Element.prototype.append\"], {\n\t// \tapply(ctx) {\n\t// \t\tif (ctx.this instanceof self.HTMLStyleElement) {\n\t// \t\t\tfor (const node of ctx.args) {\n\t// \t\t\t\tif (node instanceof self.Text) {\n\t// \t\t\t\t\tnode.data = rewriteCss(\n\t// \t\t\t\t\t\tctx.args[0].data,\n\t// \t\t\t\t\t\tclient.context,\n\t// \t\t\t\t\t\tclient.meta\n\t// \t\t\t\t\t);\n\t// \t\t\t\t}\n\t// \t\t\t}\n\t// \t\t} else if (ctx.this instanceof self.HTMLScriptElement) {\n\t// \t\t\tfor (const node of ctx.args) {\n\t// \t\t\t\tif (node instanceof self.Text) {\n\t// \t\t\t\t\tconst newval: string = rewriteJs(\n\t// \t\t\t\t\t\tnode.data,\n\t// \t\t\t\t\t\t\"(anonymous script element)\",\n\t// \t\t\t\t\t\tclient.context,\n\t// \t\t\t\t\t\tclient.meta\n\t// \t\t\t\t\t) as string;\n\t// \t\t\t\t\tclient.natives.call(\n\t// \t\t\t\t\t\t\"Element.prototype.setAttribute\",\n\t// \t\t\t\t\t\tctx.this,\n\t// \t\t\t\t\t\t\"scramjet-attr-script-source-src\",\n\t// \t\t\t\t\t\tbytesToBase64(encoder.encode(newval))\n\t// \t\t\t\t\t);\n\t// \t\t\t\t\tnode.data = newval;\n\t// \t\t\t\t}\n\t// \t\t\t}\n\t// \t\t}\n\t// \t},\n\t// });\n\n\tclient.Proxy(\"Audio\", {\n\t\tconstruct(ctx) {\n\t\t\tif (ctx.args[0]) ctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t},\n\t});\n\tclient.Proxy(\"Text.prototype.appendData\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.this.parentElement?.tagName === \"STYLE\") {\n\t\t\t\tctx.args[0] = rewriteCss(ctx.args[0], client.context, client.meta);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Text.prototype.insertData\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.this.parentElement?.tagName === \"STYLE\") {\n\t\t\t\tctx.args[1] = rewriteCss(ctx.args[1], client.context, client.meta);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Text.prototype.replaceData\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.this.parentElement?.tagName === \"STYLE\") {\n\t\t\t\tctx.args[2] = rewriteCss(ctx.args[2], client.context, client.meta);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Trap(\"Text.prototype.wholeText\", {\n\t\tget(ctx) {\n\t\t\tif (ctx.this.parentElement?.tagName === \"STYLE\") {\n\t\t\t\treturn unrewriteCss(ctx.get() as string);\n\t\t\t}\n\n\t\t\treturn ctx.get();\n\t\t},\n\t\tset(ctx, v) {\n\t\t\tif (ctx.this.parentElement?.tagName === \"STYLE\") {\n\t\t\t\treturn ctx.set(rewriteCss(v as string, client.context, client.meta));\n\t\t\t}\n\n\t\t\treturn ctx.set(v);\n\t\t},\n\t});\n\n\tclient.Trap(\n\t\t[\n\t\t\t\"HTMLIFrameElement.prototype.contentWindow\",\n\t\t\t\"HTMLFrameElement.prototype.contentWindow\",\n\t\t\t\"HTMLObjectElement.prototype.contentWindow\",\n\t\t\t\"HTMLEmbedElement.prototype.contentWindow\",\n\t\t],\n\t\t{\n\t\t\tget(ctx) {\n\t\t\t\tif (client.meta.base.origin === \"https://accounts.google.com\") {\n\t\t\t\t\t// botguard bullshittery\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst realwin = ctx.get() as Window;\n\t\t\t\tif (!realwin) return realwin;\n\n\t\t\t\ttry {\n\t\t\t\t\tif (!(SCRAMJETCLIENT in realwin)) {\n\t\t\t\t\t\t// hook the iframe before the client can start to steal globals out of it\n\t\t\t\t\t\tclient.init.hookSubcontext(realwin, ctx.this);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// cross-origin iframe, can't do anything here\n\t\t\t\t\treturn realwin;\n\t\t\t\t}\n\n\t\t\t\treturn realwin;\n\t\t\t},\n\t\t}\n\t);\n\n\tclient.Trap(\n\t\t[\n\t\t\t\"HTMLIFrameElement.prototype.contentDocument\",\n\t\t\t\"HTMLFrameElement.prototype.contentDocument\",\n\t\t\t\"HTMLObjectElement.prototype.contentDocument\",\n\t\t\t\"HTMLEmbedElement.prototype.contentDocument\",\n\t\t],\n\t\t{\n\t\t\tget(ctx) {\n\t\t\t\tconst realwin = client.descriptors.get(\n\t\t\t\t\t`${ctx.this.constructor.name}.prototype.contentWindow`,\n\t\t\t\t\tctx.this\n\t\t\t\t);\n\t\t\t\tif (!realwin) return realwin;\n\n\t\t\t\tif (!(SCRAMJETCLIENT in realwin)) {\n\t\t\t\t\tclient.init.hookSubcontext(realwin, ctx.this);\n\t\t\t\t}\n\n\t\t\t\treturn realwin.document;\n\t\t\t},\n\t\t}\n\t);\n\n\tclient.Proxy(\n\t\t[\n\t\t\t\"HTMLIFrameElement.prototype.getSVGDocument\",\n\t\t\t\"HTMLObjectElement.prototype.getSVGDocument\",\n\t\t\t\"HTMLEmbedElement.prototype.getSVGDocument\",\n\t\t],\n\t\t{\n\t\t\tapply(ctx) {\n\t\t\t\tconst doc = ctx.call();\n\t\t\t\tif (doc) {\n\t\t\t\t\t// we trap the contentDocument, this is really the scramjet version\n\t\t\t\t\treturn ctx.return(ctx.this.contentDocument);\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t);\n\n\tclient.Proxy(\"DOMParser.prototype.parseFromString\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[1] === \"text/html\") {\n\t\t\t\ttry {\n\t\t\t\t\tctx.args[0] = rewriteHtml(\n\t\t\t\t\t\tctx.args[0],\n\t\t\t\t\t\tclient.context,\n\t\t\t\t\t\tclient.meta,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t},\n\t});\n}\n","import { rewriteCss } from \"@rewriters/css\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Proxy(\"FontFace\", {\n\t\tconstruct(ctx) {\n\t\t\tctx.args[1] = rewriteCss(ctx.args[1], client.context, client.meta);\n\t\t},\n\t});\n}\n","import { rewriteHtml } from \"@rewriters/html\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Proxy(\"Range.prototype.createContextualFragment\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = rewriteHtml(ctx.args[0], client.context, client.meta);\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\nimport { UrlChangeEvent } from \"@client/events\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Proxy(\n\t\t[\"History.prototype.pushState\", \"History.prototype.replaceState\"],\n\t\t{\n\t\t\tapply(ctx) {\n\t\t\t\tif (ctx.args[2] || ctx.args[2] === \"\")\n\t\t\t\t\tctx.args[2] = client.rewriteUrl(ctx.args[2]);\n\t\t\t\tctx.call();\n\t\t\t\tconst {\n\t\t\t\t\tconstructor: { constructor: Function },\n\t\t\t\t} = ctx.this;\n\t\t\t\tconst callerGlobalThisProxied: Self = Function(\"return globalThis\")();\n\t\t\t\tconst callerClient = callerGlobalThisProxied[SCRAMJETCLIENT];\n\n\t\t\t\tif (callerGlobalThisProxied.name === client.meta.topFrameName) {\n\t\t\t\t\tconst ev = new UrlChangeEvent(callerClient.url.href);\n\t\t\t\t\tclient.frame?.dispatchEvent(ev);\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t);\n}\n","import { ScramjetClient } from \"@client/index\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\nimport { rewriteUrl } from \"@rewriters/url\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"window.open\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0])\n\t\t\t\tctx.args[0] = rewriteUrl(ctx.args[0], client.context, client.meta);\n\n\t\t\tif (ctx.args[1] === \"_top\" || ctx.args[1] === \"_unfencedTop\")\n\t\t\t\tctx.args[1] = client.meta.topFrameName;\n\t\t\tif (ctx.args[1] === \"_parent\") ctx.args[1] = client.meta.parentFrameName;\n\n\t\t\tconst realwin = ctx.call();\n\n\t\t\tif (!realwin) return ctx.return(realwin);\n\n\t\t\tif (!(SCRAMJETCLIENT in realwin)) {\n\t\t\t\t// i don't believe it's possible for a just-opened window to already have scramjet loaded but just in case\n\t\t\t\tclient.init.hookSubcontext(realwin);\n\t\t\t}\n\n\t\t\treturn realwin;\n\t\t},\n\t});\n\n\tclient.Trap(\"window.frameElement\", {\n\t\tget(ctx) {\n\t\t\tconst f = ctx.get() as HTMLIFrameElement | null;\n\t\t\tif (!f) return f;\n\n\t\t\tconst win = f.ownerDocument.defaultView;\n\t\t\tif (win[SCRAMJETCLIENT]) {\n\t\t\t\t// then this is a subframe in a scramjet context, and it's safe to pass back the real iframe\n\t\t\t\treturn f;\n\t\t\t} else {\n\t\t\t\t// no, the top frame is outside the sandbox\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Trap(\"origin\", {\n\t\tget() {\n\t\t\t// this isn't right!!\n\t\t\treturn client.url.origin;\n\t\t},\n\t\tset() {\n\t\t\treturn false;\n\t\t},\n\t});\n\n\tclient.Trap(\"Document.prototype.URL\", {\n\t\tget() {\n\t\t\treturn client.url.href;\n\t\t},\n\t\tset() {\n\t\t\treturn false;\n\t\t},\n\t});\n\n\tclient.Trap(\"Document.prototype.documentURI\", {\n\t\tget() {\n\t\t\treturn client.url.href;\n\t\t},\n\t\tset() {\n\t\t\treturn false;\n\t\t},\n\t});\n\n\tclient.Trap(\"Document.prototype.domain\", {\n\t\tget() {\n\t\t\treturn client.url.hostname;\n\t\t},\n\t\tset() {\n\t\t\treturn false;\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Trap(\"PerformanceEntry.prototype.name\", {\n\t\tget(ctx) {\n\t\t\t// name is going to be a url typically\n\t\t\tconst name = ctx.get() as string;\n\n\t\t\tif (name && name.startsWith(client.context.prefix.href)) {\n\t\t\t\treturn client.unrewriteUrl(name);\n\t\t\t}\n\n\t\t\treturn name;\n\t\t},\n\t});\n\n\tconst filterEntries = (entries: PerformanceEntry[]) => {\n\t\treturn entries.filter((entry) => {\n\t\t\tfor (const file of client.config.maskedfiles) {\n\t\t\t\tif (entry.name.endsWith(file)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t};\n\n\tclient.Proxy(\n\t\t[\n\t\t\t\"Performance.prototype.getEntries\",\n\t\t\t\"Performance.prototype.getEntriesByType\",\n\t\t\t\"Performance.prototype.getEntriesByName\",\n\t\t\t\"PerformanceObserverEntryList.prototype.getEntries\",\n\t\t\t\"PerformanceObserverEntryList.prototype.getEntriesByType\",\n\t\t\t\"PerformanceObserverEntryList.prototype.getEntriesByName\",\n\t\t],\n\t\t{\n\t\t\tapply(ctx) {\n\t\t\t\tconst entries = ctx.call() as PerformanceEntry[];\n\n\t\t\t\treturn ctx.return(filterEntries(entries));\n\t\t\t},\n\t\t}\n\t);\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: Self) {\n\tclient.Proxy(\"Navigator.prototype.registerProtocolHandler\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[1] = client.rewriteUrl(ctx.args[1]);\n\t\t},\n\t});\n\tclient.Proxy(\"Navigator.prototype.unregisterProtocolHandler\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[1] = client.rewriteUrl(ctx.args[1]);\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: typeof window) {\n\tconst handler: ProxyHandler<Storage> = {\n\t\tget(target, prop) {\n\t\t\tswitch (prop) {\n\t\t\t\tcase \"getItem\":\n\t\t\t\t\treturn (key: string) => {\n\t\t\t\t\t\treturn target.getItem(client.url.host + \"@\" + key);\n\t\t\t\t\t};\n\n\t\t\t\tcase \"setItem\":\n\t\t\t\t\treturn (key: string, value: string) => {\n\t\t\t\t\t\treturn target.setItem(client.url.host + \"@\" + key, value);\n\t\t\t\t\t};\n\n\t\t\t\tcase \"removeItem\":\n\t\t\t\t\treturn (key: string) => {\n\t\t\t\t\t\treturn target.removeItem(client.url.host + \"@\" + key);\n\t\t\t\t\t};\n\n\t\t\t\tcase \"clear\":\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tfor (const key in Object.keys(target)) {\n\t\t\t\t\t\t\tif (key.startsWith(client.url.host)) {\n\t\t\t\t\t\t\t\ttarget.removeItem(key);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\tcase \"key\":\n\t\t\t\t\treturn (index: number) => {\n\t\t\t\t\t\tconst keys = Object.keys(target).filter((key) =>\n\t\t\t\t\t\t\tkey.startsWith(client.url.host)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn target.getItem(keys[index]);\n\t\t\t\t\t};\n\n\t\t\t\tcase \"length\":\n\t\t\t\t\treturn Object.keys(target).filter((key) =>\n\t\t\t\t\t\tkey.startsWith(client.url.host)\n\t\t\t\t\t).length;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (prop in Object.prototype || typeof prop === \"symbol\") {\n\t\t\t\t\t\treturn Reflect.get(target, prop);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn target.getItem(client.url.host + \"@\" + (prop as string));\n\t\t\t}\n\t\t},\n\n\t\tset(target, prop, value) {\n\t\t\ttarget.setItem(client.url.host + \"@\" + (prop as string), value);\n\n\t\t\treturn true;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\treturn target.getItem(client.url.host + \"@\" + (prop as string)) !== null;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\treturn Reflect.ownKeys(target)\n\t\t\t\t.filter((f) => typeof f === \"string\" && f.startsWith(client.url.host))\n\t\t\t\t.map((f) =>\n\t\t\t\t\ttypeof f === \"string\" ? f.substring(client.url.host.length + 1) : f\n\t\t\t\t);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, property) {\n\t\t\t// TODO: probably not right\n\t\t\tif (\n\t\t\t\ttarget.getItem(client.url.host + \"@\" + (property as string)) === null\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tvalue: target.getItem(client.url.host + \"@\" + (property as string)),\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t};\n\t\t},\n\n\t\tdefineProperty(target, property, attributes) {\n\t\t\ttarget.setItem(\n\t\t\t\tclient.url.host + \"@\" + (property as string),\n\t\t\t\tattributes.value\n\t\t\t);\n\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst realLocalStorage = self.localStorage;\n\n\tconst localStorageProxy = new Proxy(self.localStorage, handler);\n\tconst sessionStorageProxy = new Proxy(self.sessionStorage, handler);\n\n\tdelete self.localStorage;\n\tdelete self.sessionStorage;\n\n\tself.localStorage = localStorageProxy;\n\tself.sessionStorage = sessionStorageProxy;\n}\n","// entrypoint for scramjet.client.js\n\nimport { ScramjetContext, ScramjetInterface } from \"@/shared/index\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\nimport { ScramjetClient } from \"@client/index\";\nimport { ScramjetContextEvent, UrlChangeEvent } from \"@client/events\";\nimport { ScramjetConfig } from \"@/types\";\n\nexport const iswindow = \"window\" in globalThis && window instanceof Window;\nexport const isworker = \"WorkerGlobalScope\" in globalThis;\nexport const issw = \"ServiceWorkerGlobalScope\" in globalThis;\nexport const isdedicated = \"DedicatedWorkerGlobalScope\" in globalThis;\nexport const isshared = \"SharedWorkerGlobalScope\" in globalThis;\n","import { ScramjetClient } from \"@client/index\";\n\n/**\n * Union type for all Scramjet proxified navigation events.\n */\nexport type ScramjetEvent =\n\t| NavigateEvent\n\t| UrlChangeEvent\n\t| ScramjetContextEvent;\n\n/**\n * Type map for all Scramjet navigation events with their corresponding event types.\n */\nexport type ScramjetEvents = {\n\tnavigate: NavigateEvent;\n\turlchange: UrlChangeEvent;\n\tcontextInit: ScramjetContextEvent;\n};\n\n/**\n * Navigation event class fired when Scramjet frame navigates to a new proxified URL.\n */\nexport class NavigateEvent extends Event {\n\ttype = \"navigate\";\n\tconstructor(public url: string) {\n\t\tsuper(\"navigate\");\n\t}\n}\n\n/**\n * URL change event class fired when the proxified URL changes in a Scramjet frame.\n */\nexport class UrlChangeEvent extends Event {\n\ttype = \"urlchange\";\n\tconstructor(public url: string) {\n\t\tsuper(\"urlchange\");\n\t}\n}\n\n/**\n * Event class fired when Scramjet initializes in a frame.\n */\nexport class ScramjetContextEvent extends Event {\n\ttype = \"contextInit\";\n\tconstructor(\n\t\tpublic window: Self,\n\t\tpublic client: ScramjetClient\n\t) {\n\t\tsuper(\"contextInit\");\n\t}\n}\n","export function getOwnPropertyDescriptorHandler(target, prop) {\n\tconst realDescriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\treturn realDescriptor;\n}\n","import { ScramjetClient } from \"@client/index\";\nimport { UrlChangeEvent } from \"@client/events\";\nimport { iswindow } from \"@client/entry\";\n\nexport function createLocationProxy(\n\tclient: ScramjetClient,\n\tself: typeof globalThis\n) {\n\tconst Location = iswindow ? self.Location : self.WorkerLocation;\n\t// location cannot be Proxy()d\n\tconst fakeLocation: any = {};\n\tObject.setPrototypeOf(fakeLocation, Location.prototype);\n\tfakeLocation.constructor = Location;\n\n\t// for some reason it's on the object for Location and on the prototype for WorkerLocation??\n\tconst descriptorSource = iswindow ? self.location : Location.prototype;\n\tconst urlprops = [\n\t\t\"protocol\",\n\t\t\"hash\",\n\t\t\"host\",\n\t\t\"hostname\",\n\t\t\"href\",\n\t\t\"origin\",\n\t\t\"pathname\",\n\t\t\"port\",\n\t\t\"search\",\n\t];\n\tfor (const prop of urlprops) {\n\t\tconst native = client.natives.call(\n\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\tnull,\n\t\t\tdescriptorSource,\n\t\t\tprop\n\t\t);\n\t\tif (!native) continue;\n\n\t\tconst desc: Partial<PropertyDescriptor> = {\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t};\n\t\tif (native.get) {\n\t\t\tdesc.get = new Proxy(native.get, {\n\t\t\t\tapply() {\n\t\t\t\t\treturn client.url[prop];\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tif (native.set) {\n\t\t\tdesc.set = new Proxy(native.set, {\n\t\t\t\tapply(target, that, args) {\n\t\t\t\t\tif (prop === \"href\") {\n\t\t\t\t\t\t// special case\n\t\t\t\t\t\tclient.url = args[0];\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (prop === \"hash\") {\n\t\t\t\t\t\tself.location.hash = args[0];\n\t\t\t\t\t\tconst ev = new UrlChangeEvent(client.url.href);\n\t\t\t\t\t\tif (!client.isSubframe) client.frame?.dispatchEvent(ev);\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst url = new URL(client.url.href);\n\t\t\t\t\turl[prop] = args[0];\n\t\t\t\t\tclient.url = url;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tObject.defineProperty(fakeLocation, prop, desc);\n\t}\n\n\t// functions\n\tfakeLocation.toString = new Proxy(self.location.toString, {\n\t\tapply() {\n\t\t\treturn client.url.href;\n\t\t},\n\t});\n\n\tif (self.location.valueOf)\n\t\tfakeLocation.valueOf = new Proxy(self.location.valueOf, {\n\t\t\tapply() {\n\t\t\t\treturn fakeLocation;\n\t\t\t},\n\t\t});\n\tif (self.location.assign)\n\t\tfakeLocation.assign = new Proxy(self.location.assign, {\n\t\t\tapply(target, that, args) {\n\t\t\t\targs[0] = client.rewriteUrl(args[0]);\n\t\t\t\tReflect.apply(target, self.location, args);\n\n\t\t\t\tconst urlchangeev = new UrlChangeEvent(client.url.href);\n\t\t\t\tif (!client.isSubframe) client.frame?.dispatchEvent(urlchangeev);\n\t\t\t},\n\t\t});\n\tif (self.location.reload)\n\t\tfakeLocation.reload = new Proxy(self.location.reload, {\n\t\t\tapply(target, that, args) {\n\t\t\t\tReflect.apply(target, self.location, args);\n\t\t\t},\n\t\t});\n\tif (self.location.replace)\n\t\tfakeLocation.replace = new Proxy(self.location.replace, {\n\t\t\tapply(target, that, args) {\n\t\t\t\targs[0] = client.rewriteUrl(args[0]);\n\t\t\t\tReflect.apply(target, self.location, args);\n\n\t\t\t\tconst urlchangeev = new UrlChangeEvent(client.url.href);\n\t\t\t\tif (!client.isSubframe) client.frame?.dispatchEvent(urlchangeev);\n\t\t\t},\n\t\t});\n\n\t// TODO: ancestorOrigins\n\n\treturn fakeLocation;\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"console.clear\", {\n\t\tapply(ctx) {\n\t\t\t// fuck you\n\t\t\tctx.return(undefined);\n\t\t},\n\t});\n\n\tconst log = console.log;\n\tclient.Trap(\"console.log\", {\n\t\tset(_ctx, _v) {\n\t\t\t// is there a legitimate reason to let sites do this?\n\t\t},\n\t\tget(_ctx) {\n\t\t\treturn log;\n\t\t},\n\t});\n}\n","import { rewriteBlob, unrewriteBlob } from \"@rewriters/url\";\nimport { ScramjetClient } from \"@client/index\";\nexport default function (client: ScramjetClient) {\n\t// hide the origin from object urls from the page\n\tclient.Proxy(\"URL.createObjectURL\", {\n\t\tapply(ctx) {\n\t\t\tconst url: string = ctx.call();\n\t\t\tif (url.startsWith(\"blob:\")) {\n\t\t\t\tctx.return(rewriteBlob(url, client.context, client.meta));\n\t\t\t} else {\n\t\t\t\tctx.return(url);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"URL.revokeObjectURL\", {\n\t\tapply(ctx) {\n\t\t\tsetTimeout(() => {\n\t\t\t\t// scramjet rewrites blob urls to pass through the service worker first\n\t\t\t\t// this is neccesary if rewrites need to be applied to the blob\n\t\t\t\t// the issue is that if you call revokeObjectURL immediately after using the blob\n\t\t\t\t// the service worker will not have had time to download the blob\n\t\t\t\t// for some reason this is not an issue natively\n\t\t\t\t// simple delay is enough\n\t\t\t\t// TODO: find a way to make this not necessary\n\t\t\t\tctx.args[0] = unrewriteBlob(ctx.args[0], client.context, client.meta);\n\t\t\t\tctx.call();\n\t\t\t}, 1000);\n\t\t\tctx.return(undefined);\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tclient.Proxy(\"CacheStorage.prototype.open\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = `${client.url.origin}@${ctx.args[0]}`;\n\t\t},\n\t});\n\n\tclient.Proxy(\"CacheStorage.prototype.has\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = `${client.url.origin}@${ctx.args[0]}`;\n\t\t},\n\t});\n\n\tclient.Proxy(\"CacheStorage.prototype.match\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"CacheStorage.prototype.delete\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = `${client.url.origin}@${ctx.args[0]}`;\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.add\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.addAll\", {\n\t\tapply(ctx) {\n\t\t\tfor (let i = 0; i < ctx.args[0].length; i++) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof ctx.args[0][i] === \"string\" ||\n\t\t\t\t\tctx.args[0][i] instanceof URL\n\t\t\t\t) {\n\t\t\t\t\tctx.args[0][i] = client.rewriteUrl(ctx.args[0][i]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.put\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.match\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.matchAll\", {\n\t\tapply(ctx) {\n\t\t\tif (\n\t\t\t\t(ctx.args[0] && typeof ctx.args[0] === \"string\") ||\n\t\t\t\t(ctx.args[0] && ctx.args[0] instanceof URL)\n\t\t\t) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.keys\", {\n\t\tapply(ctx) {\n\t\t\tif (\n\t\t\t\t(ctx.args[0] && typeof ctx.args[0] === \"string\") ||\n\t\t\t\t(ctx.args[0] && ctx.args[0] instanceof URL)\n\t\t\t) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Cache.prototype.delete\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n}\n","// delete all chrome specific apis, or apis that are not supported by any browser other than chrome\n// these are not worth emulating and typically cause issues\n\nimport { iswindow } from \"@client/entry\";\nimport { ScramjetClient } from \"@client/index\";\n\n// type self as any here, most of these are not defined in the types\nexport default function (client: ScramjetClient, self: any) {\n\tconst del = (name: string) => {\n\t\tconst split = name.split(\".\");\n\t\tconst prop = split.pop();\n\t\tconst target = split.reduce((a, b) => a?.[b], self);\n\t\tif (!target) return;\n\t\tif (prop && prop in target) {\n\t\t\tdelete target[prop];\n\t\t} else {\n\t\t}\n\t};\n\n\t// obviously\n\t// del(\"chrome\");\n\n\t// ShapeDetector https://developer.chrome.com/docs/capabilities/shape-detection\n\tdel(\"BarcodeDetector\");\n\tdel(\"FaceDetector\");\n\tdel(\"TextDetector\");\n\n\t// background synchronization api\n\tif (iswindow) {\n\t\tdel(\"ServiceWorkerRegistration.prototype.sync\");\n\t}\n\n\t// trustedtypes\n\tdel(\"TrustedHTML\");\n\tdel(\"TrustedScript\");\n\tdel(\"TrustedScriptURL\");\n\tdel(\"TrustedTypePolicy\");\n\tdel(\"TrustedTypePolicyFactory\");\n\tself.__defineGetter__(\"trustedTypes\", () => undefined);\n\n\t// whatever this is\n\tdel(\"Navigator.prototype.joinAdInterestGroup\");\n\n\tif (!iswindow) return;\n\t// DOM specific ones below here\n\n\tReflect.deleteProperty(Navigator.prototype, \"serviceWorker\");\n\tdel(\"MediaDevices.prototype.setCaptureHandleConfig\");\n\n\t// web bluetooth api\n\tdel(\"Navigator.prototype.bluetooth\");\n\tdel(\"Bluetooth\");\n\tdel(\"BluetoothDevice\");\n\tdel(\"BluetoothRemoteGATTServer\");\n\tdel(\"BluetoothRemoteGATTCharacteristic\");\n\tdel(\"BluetoothRemoteGATTDescriptor\");\n\tdel(\"BluetoothUUID\");\n\n\t// contact picker api\n\tdel(\"Navigator.prototype.contacts\");\n\tdel(\"ContactAddress\");\n\tdel(\"ContactManager\");\n\n\t// Idle Detection API\n\tdel(\"IdleDetector\");\n\n\t// Presentation API\n\tdel(\"Navigator.prototype.presentation\");\n\tdel(\"Presentation\");\n\tdel(\"PresentationConnection\");\n\tdel(\"PresentationReceiver\");\n\tdel(\"PresentationRequest\");\n\tdel(\"PresentationAvailability\");\n\tdel(\"PresentationConnectionAvailableEvent\");\n\tdel(\"PresentationConnectionCloseEvent\");\n\tdel(\"PresentationConnectionList\");\n\n\t// Window Controls Overlay API\n\tdel(\"WindowControlsOverlay\");\n\tdel(\"WindowControlsOverlayGeometryChangeEvent\");\n\tdel(\"Navigator.prototype.windowControlsOverlay\");\n\n\t// WebHID API\n\tdel(\"Navigator.prototype.hid\");\n\tdel(\"HID\");\n\tdel(\"HIDDevice\");\n\tdel(\"HIDConnectionEvent\");\n\tdel(\"HIDInputReportEvent\");\n\n\t// Navigation API (not chrome only but it's really annoying to implement)\n\tdel(\"navigation\");\n\tdel(\"NavigateEvent\");\n\tdel(\"NavigationActivation\");\n\tdel(\"NavigationCurrentEntryChangeEvent\");\n\tdel(\"NavigationDestination\");\n\tdel(\"NavigationHistoryEntry\");\n\tdel(\"NavigationTransition\");\n}\n","import { flagEnabled } from \"@/shared\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport const enabled = (client: ScramjetClient) =>\n\tclient.flagEnabled(\"captureErrors\");\nexport function argdbg(arg, recurse = []) {\n\tswitch (typeof arg) {\n\t\tcase \"string\":\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif (\n\t\t\t\targ &&\n\t\t\t\targ[Symbol.iterator] &&\n\t\t\t\ttypeof arg[Symbol.iterator] === \"function\"\n\t\t\t)\n\t\t\t\tfor (const prop in arg) {\n\t\t\t\t\t// make sure it's not a getter\n\t\t\t\t\tconst desc = Object.getOwnPropertyDescriptor(arg, prop);\n\t\t\t\t\tif (desc && desc.get) continue;\n\n\t\t\t\t\tconst ar = arg[prop];\n\t\t\t\t\tif (recurse.includes(ar)) continue;\n\t\t\t\t\trecurse.push(ar);\n\t\t\t\t\targdbg(ar, recurse);\n\t\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nexport default function (client: ScramjetClient, self: typeof globalThis) {\n\tconst warn = console.warn;\n\tself.$scramerr = function scramerr(e) {\n\t\twarn(\"CAUGHT ERROR\", e);\n\t};\n\n\tself.$scramdbg = function scramdbg(args, t) {\n\t\tif (args && typeof args === \"object\" && args.length > 0) argdbg(args);\n\t\targdbg(t);\n\n\t\treturn t;\n\t};\n\n\tclient.Proxy(\"Promise.prototype.catch\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0])\n\t\t\t\tctx.args[0] = new Proxy(ctx.args[0], {\n\t\t\t\t\tapply(target, that, args) {\n\t\t\t\t\t\t// console.warn(\"CAUGHT PROMISE REJECTION\", args);\n\t\t\t\t\t\tReflect.apply(target, that, args);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t},\n\t});\n}\n","import { unrewriteUrl } from \"@rewriters/url\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport const enabled = (client: ScramjetClient) =>\n\tclient.flagEnabled(\"cleanErrors\");\n\nexport default function (client: ScramjetClient, _self: Self) {\n\t// v8 only. all we need to do is clean the scramjet urls from stack traces\n\tconst closure = (error, stack) => {\n\t\tlet newstack = error.stack;\n\n\t\tfor (let i = 0; i < stack.length; i++) {\n\t\t\tconst url = stack[i].getFileName();\n\n\t\t\ttry {\n\t\t\t\tif (client.config.maskedfiles.some((f) => url.endsWith(f))) {\n\t\t\t\t\t// strip stack frames including scramjet handlers from the trace\n\t\t\t\t\tconst lines = newstack.split(\"\\n\");\n\t\t\t\t\tconst line = lines.find((l) => l.includes(url));\n\t\t\t\t\tlines.splice(line, 1);\n\t\t\t\t\tnewstack = lines.join(\"\\n\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\ttry {\n\t\t\t\tnewstack = newstack.replaceAll(url, unrewriteUrl(url, client.context));\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn newstack;\n\t};\n\tclient.Trap(\"Error.prepareStackTrace\", {\n\t\tget(_ctx) {\n\t\t\t// this is a funny js quirk. the getter is ran every time you type something in console\n\t\t\treturn closure;\n\t\t},\n\t\tset(_value) {\n\t\t\t// just ignore it if a site tries setting their own. not much we can really do\n\t\t},\n\t});\n}\n","import { rewriteJs } from \"@rewriters/js\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: Self) {\n\t// used for proxying *direct eval*\n\t// eval(\"...\") -> eval($scramjet$rewrite(\"...\"))\n\tObject.defineProperty(self, client.config.globals.rewritefn, {\n\t\tvalue: function (js: any) {\n\t\t\tif (typeof js !== \"string\") return js;\n\n\t\t\tconst rewritten = rewriteJs(\n\t\t\t\tjs,\n\t\t\t\t\"(direct eval proxy)\",\n\t\t\t\tclient.context,\n\t\t\t\tclient.meta\n\t\t\t);\n\n\t\t\treturn rewritten;\n\t\t},\n\t\twritable: false,\n\t\tconfigurable: false,\n\t});\n}\n\nexport function indirectEval(this: ScramjetClient, strict: boolean, js: any) {\n\t// > If the argument of eval() is not a string, eval() returns the argument unchanged\n\tif (typeof js !== \"string\") return js;\n\n\tlet indirection: typeof eval;\n\tif (this.url.hostname === \"accounts.google.com\") {\n\t\tconsole.log(\"USING STRICT EVAL - BOTGUARD\");\n\t\tindirection = new Function(`\n\t\t\t\"use strict\";\n\t\t\treturn eval;\n\t\t`) as typeof eval;\n\t} else {\n\t\tindirection = this.global.eval;\n\t}\n\n\treturn indirection(\n\t\trewriteJs(js, \"(indirect eval proxy)\", this.context, this.meta) as string\n\t);\n}\n","import { iswindow } from \"@client/entry\";\nimport { unrewriteUrl } from \"@rewriters/url\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\nimport { ScramjetClient } from \"@client/index\";\nimport { getOwnPropertyDescriptorHandler } from \"@client/helpers\";\n\nconst realOnEvent = Symbol.for(\"scramjet original onevent function\");\n\nexport default function (client: ScramjetClient, self: Self) {\n\tconst handlers = {\n\t\tmessage: {\n\t\t\t_init() {\n\t\t\t\tif (client.init.shouldBlockMessageEvent?.(this)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tports() {\n\t\t\t\t// don't know why i have to do this?\n\t\t\t\treturn this.ports;\n\t\t\t},\n\t\t\tsource() {\n\t\t\t\tif (this.source === null) return null;\n\n\t\t\t\t// const scram: ScramjetClient = this.source[SCRAMJETCLIENT];\n\n\t\t\t\t// if (scram) return scram.globalProxy;\n\n\t\t\t\treturn this.source;\n\t\t\t},\n\t\t\torigin() {\n\t\t\t\tif (typeof this.data === \"object\" && \"$scramjet$origin\" in this.data)\n\t\t\t\t\treturn this.data.$scramjet$origin;\n\n\t\t\t\treturn client.url.origin;\n\t\t\t},\n\t\t\tdata() {\n\t\t\t\tif (typeof this.data === \"object\" && \"$scramjet$data\" in this.data)\n\t\t\t\t\treturn this.data.$scramjet$data;\n\n\t\t\t\treturn this.data;\n\t\t\t},\n\t\t},\n\t\thashchange: {\n\t\t\toldURL() {\n\t\t\t\treturn client.unrewriteUrl(this.oldURL);\n\t\t\t},\n\t\t\tnewURL() {\n\t\t\t\treturn client.unrewriteUrl(this.newURL);\n\t\t\t},\n\t\t},\n\t\tstorage: {\n\t\t\t_init() {\n\t\t\t\treturn this.key.startsWith(client.url.host + \"@\");\n\t\t\t},\n\t\t\tkey() {\n\t\t\t\treturn this.key.substring(this.key.indexOf(\"@\") + 1);\n\t\t\t},\n\t\t\turl() {\n\t\t\t\treturn client.unrewriteUrl(this.url);\n\t\t\t},\n\t\t},\n\t};\n\n\tfunction wraplistener(listener: (...args: any) => any) {\n\t\treturn new Proxy(listener, {\n\t\t\tapply(target, that, args) {\n\t\t\t\tconst realEvent: Event = args[0];\n\n\t\t\t\t// we only need to handle events dispatched from the browser\n\t\t\t\tif (realEvent.isTrusted) {\n\t\t\t\t\tconst type = realEvent.type;\n\n\t\t\t\t\tif (type in handlers) {\n\t\t\t\t\t\tconst handler = handlers[type];\n\n\t\t\t\t\t\tif (handler._init) {\n\t\t\t\t\t\t\t// if _init returns false, we skip the event, and it never dispatches to listeners\n\t\t\t\t\t\t\tif (handler._init.call(realEvent) === false) return;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\targs[0] = new Proxy(realEvent, {\n\t\t\t\t\t\t\tget(target, prop, reciever) {\n\t\t\t\t\t\t\t\tconst value = Reflect.get(target, prop);\n\t\t\t\t\t\t\t\tif (prop in handler) {\n\t\t\t\t\t\t\t\t\treturn handler[prop].call(target);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (typeof value === \"function\") {\n\t\t\t\t\t\t\t\t\treturn new Proxy(value, {\n\t\t\t\t\t\t\t\t\t\tapply(target, that, args) {\n\t\t\t\t\t\t\t\t\t\t\tif (that === reciever) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn Reflect.apply(target, realEvent, args);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\treturn Reflect.apply(target, that, args);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetOwnPropertyDescriptor: getOwnPropertyDescriptorHandler,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!self.event) {\n\t\t\t\t\tObject.defineProperty(self, \"event\", {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn args[0];\n\t\t\t\t\t\t},\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst rv = Reflect.apply(target, that, args);\n\n\t\t\t\treturn rv;\n\t\t\t},\n\t\t\tgetOwnPropertyDescriptor: getOwnPropertyDescriptorHandler,\n\t\t});\n\t}\n\n\tclient.Proxy(\"EventTarget.prototype.addEventListener\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[1] !== \"function\") return;\n\n\t\t\tconst origlistener = ctx.args[1];\n\t\t\tconst proxylistener = wraplistener(origlistener);\n\n\t\t\tctx.args[1] = proxylistener;\n\n\t\t\tlet arr = client.eventcallbacks.get(ctx.this);\n\t\t\tarr ||= [] as any;\n\t\t\tarr.push({\n\t\t\t\tevent: ctx.args[0] as string,\n\t\t\t\toriginalCallback: origlistener,\n\t\t\t\tproxiedCallback: proxylistener,\n\t\t\t});\n\t\t\tclient.eventcallbacks.set(ctx.this, arr);\n\t\t},\n\t});\n\n\tclient.Proxy(\"EventTarget.prototype.removeEventListener\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[1] !== \"function\") return;\n\n\t\t\tconst arr = client.eventcallbacks.get(ctx.this);\n\t\t\tif (!arr) return;\n\n\t\t\tconst i = arr.findIndex(\n\t\t\t\t(e) => e.event === ctx.args[0] && e.originalCallback === ctx.args[1]\n\t\t\t);\n\t\t\tif (i === -1) return;\n\n\t\t\tconst r = arr.splice(i, 1);\n\t\t\tclient.eventcallbacks.set(ctx.this, arr);\n\n\t\t\tctx.args[1] = r[0].proxiedCallback;\n\t\t},\n\t});\n\n\tconst targets = [self.self, self.MessagePort.prototype] as Array<any>;\n\tif (iswindow) targets.push(self.HTMLElement.prototype);\n\tif (self.Worker) targets.push(self.Worker.prototype);\n\n\tfor (const target of targets) {\n\t\tconst keys = Reflect.ownKeys(target);\n\n\t\tfor (const key of keys) {\n\t\t\tif (\n\t\t\t\ttypeof key === \"string\" &&\n\t\t\t\tkey.startsWith(\"on\") &&\n\t\t\t\thandlers[key.slice(2)]\n\t\t\t) {\n\t\t\t\tconst descriptor = client.natives.call(\n\t\t\t\t\t\"Object.getOwnPropertyDescriptor\",\n\t\t\t\t\tnull,\n\t\t\t\t\ttarget,\n\t\t\t\t\tkey\n\t\t\t\t);\n\t\t\t\tif (!descriptor.get || !descriptor.set || !descriptor.configurable)\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// these are the `onmessage`, `onclick`, etc. properties\n\t\t\t\tclient.RawTrap(target, key, {\n\t\t\t\t\tget(ctx) {\n\t\t\t\t\t\tif (this[realOnEvent]) return this[realOnEvent];\n\n\t\t\t\t\t\treturn ctx.get();\n\t\t\t\t\t},\n\t\t\t\t\tset(ctx, value: any) {\n\t\t\t\t\t\tthis[realOnEvent] = value;\n\n\t\t\t\t\t\tif (typeof value !== \"function\") return ctx.set(value);\n\n\t\t\t\t\t\tctx.set(wraplistener(value));\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n","import { rewriteJs } from \"@rewriters/js\";\nimport { ScramjetClient, ProxyCtx, Proxy } from \"@client/index\";\n\nfunction rewriteFunction(ctx: ProxyCtx, client: ScramjetClient) {\n\tconst stringifiedFunction = ctx.call().toString();\n\n\t// TODO: also check if the function comes from a weird realm. if so we need to completely block it or do something else weird\n\t// not much point rewriting the javascript if it's executing in the top level\n\n\tconst content = rewriteJs(\n\t\t`return ${stringifiedFunction}`,\n\t\t\"(function proxy)\",\n\t\tclient.context,\n\t\tclient.meta\n\t);\n\tctx.return(ctx.fn(content)());\n}\n\nexport default function (client: ScramjetClient, _self: Self) {\n\tconst handler: Proxy = {\n\t\tapply(ctx: ProxyCtx) {\n\t\t\trewriteFunction(ctx, client);\n\t\t},\n\t\tconstruct(ctx) {\n\t\t\trewriteFunction(ctx, client);\n\t\t},\n\t};\n\n\tclient.Proxy(\"Function\", handler);\n\n\tconst RawFunction = client.natives.call(\n\t\t\"eval\",\n\t\tnull,\n\t\t\"(function () {})\"\n\t).constructor;\n\tconst RawAsyncFunction = client.natives.call(\n\t\t\"eval\",\n\t\tnull,\n\t\t\"(async function () {})\"\n\t).constructor;\n\tconst RawGeneratorFunction = client.natives.call(\n\t\t\"eval\",\n\t\tnull,\n\t\t\"(function* () {})\"\n\t).constructor;\n\tconst RawAsyncGeneratorFunction = client.natives.call(\n\t\t\"eval\",\n\t\tnull,\n\t\t\"(async function* () {})\"\n\t).constructor;\n\n\tclient.RawProxy(RawFunction.prototype, \"constructor\", handler);\n\tclient.RawProxy(RawAsyncFunction.prototype, \"constructor\", handler);\n\tclient.RawProxy(RawGeneratorFunction.prototype, \"constructor\", handler);\n\tclient.RawProxy(RawAsyncGeneratorFunction.prototype, \"constructor\", handler);\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: Self) {\n\tconst boundimport = client.natives.call(\n\t\t\"Function\",\n\t\tnull,\n\t\t\"url\",\n\t\t\"return import(url)\"\n\t);\n\n\tObject.defineProperty(self, client.config.globals.importfn, {\n\t\tvalue: function (base: string, url: string) {\n\t\t\tconst resolved = new URL(url, base).href;\n\n\t\t\tif (\n\t\t\t\turl.includes(\":\") ||\n\t\t\t\turl.startsWith(\"/\") ||\n\t\t\t\turl.startsWith(\".\") ||\n\t\t\t\turl.startsWith(\"..\")\n\t\t\t) {\n\t\t\t\t// this is a url\n\t\t\t\treturn boundimport(`${client.rewriteUrl(resolved)}?type=module`);\n\t\t\t} else {\n\t\t\t\t// this is a specifier handled by importmaps\n\t\t\t\treturn boundimport(url);\n\t\t\t}\n\t\t},\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t});\n\tObject.defineProperty(self, client.config.globals.metafn, {\n\t\tvalue: function (metaobj: any, base: string) {\n\t\t\tmetaobj.url = base;\n\t\t\tmetaobj.resolve = function (url: string) {\n\t\t\t\treturn new URL(url, base).href;\n\t\t\t};\n\n\t\t\treturn metaobj;\n\t\t},\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"IDBFactory.prototype.open\", {\n\t\tapply(ctx) {\n\t\t\tctx.args[0] = `${client.url.origin}@${ctx.args[0]}`;\n\t\t},\n\t});\n\n\tclient.Trap(\"IDBDatabase.prototype.name\", {\n\t\tget(ctx) {\n\t\t\tconst name = ctx.get() as string;\n\n\t\t\treturn name.substring(name.indexOf(\"@\") + 1);\n\t\t},\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"StorageManager.prototype.getDirectory\", {\n\t\tapply(ctx) {\n\t\t\tconst rootPromise = ctx.call() as Promise<FileSystemDirectoryHandle>;\n\t\t\tctx.return(\n\t\t\t\t(async () => {\n\t\t\t\t\tconst root = await rootPromise;\n\t\t\t\t\tconst directory = await root.getDirectoryHandle(\n\t\t\t\t\t\t`${client.url.origin.replace(/\\/|\\s|\\./g, \"-\")}`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcreate: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tObject.defineProperty(directory, \"name\", {\n\t\t\t\t\t\tvalue: \"\",\n\t\t\t\t\t\twritable: false,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn directory;\n\t\t\t\t})()\n\t\t\t);\n\t\t},\n\t});\n}\n","import { iswindow } from \"@client/entry\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\nimport { ScramjetClient } from \"@client/index\";\nimport { POLLUTANT } from \"./realm\";\n\nexport default function (client: ScramjetClient, self: Self) {\n\tif (iswindow)\n\t\tclient.Proxy(\"window.postMessage\", {\n\t\t\tapply(ctx) {\n\t\t\t\t// so we need to send the real origin here, since the recieving window can't possibly know.\n\t\t\t\t// except, remember that this code is being ran in a different realm than the invoker, so if we ask our `client` it may give us the wrong origin\n\t\t\t\t// if we were given any object that came from the real realm we can use that to get the real origin\n\t\t\t\t// and this works in every case EXCEPT for the fact that all three arguments can be strings which are copied instead of cloned\n\t\t\t\t// so we have to use `$setrealm` which will pollute this with an object from the real realm\n\n\t\t\t\tlet pollutant;\n\n\t\t\t\tif (typeof ctx.args[0] === \"object\" && ctx.args[0] !== null) {\n\t\t\t\t\tpollutant = ctx.args[0]; // try to use the first object we can find because it's more reliable\n\t\t\t\t} else if (typeof ctx.args[2] === \"object\" && ctx.args[2] !== null) {\n\t\t\t\t\tpollutant = ctx.args[2]; // next try to use transfer\n\t\t\t\t} else if (\n\t\t\t\t\tctx.this &&\n\t\t\t\t\tPOLLUTANT in ctx.this &&\n\t\t\t\t\ttypeof ctx.this[POLLUTANT] === \"object\" &&\n\t\t\t\t\tctx.this[POLLUTANT] !== null\n\t\t\t\t) {\n\t\t\t\t\tpollutant = ctx.this[POLLUTANT]; // lastly try to use the object from $setrealm\n\t\t\t\t} else {\n\t\t\t\t\tpollutant = {}; // give up\n\t\t\t\t}\n\n\t\t\t\t// and now we can steal Function from the caller's realm\n\t\t\t\tconst {\n\t\t\t\t\tconstructor: { constructor: Function },\n\t\t\t\t} = pollutant;\n\n\t\t\t\t// invoking stolen function will give us the caller's globalThis, remember scramjet has already proxied it!!!\n\t\t\t\tconst callerGlobalThisProxied: Self = Function(\"return globalThis\")();\n\t\t\t\tconst callerClient = callerGlobalThisProxied[SCRAMJETCLIENT];\n\n\t\t\t\t// this WOULD be enough but the source argument of MessageEvent has to return the caller's window\n\t\t\t\t// and if we just call it normally it would be coming from here, which WILL NOT BE THE CALLER'S because the accessor is from the parent\n\t\t\t\t// so with the stolen function we wrap postmessage so the source will truly be the caller's window (remember that function is scramjet's!!!)\n\t\t\t\tconst wrappedPostMessage = Function(\"...args\", \"this(...args)\");\n\n\t\t\t\t// console.log(\n\t\t\t\t// \tcallerClient,\n\t\t\t\t// \tclient,\n\t\t\t\t// \tcallerGlobalThisProxied.document,\n\t\t\t\t// \tself.document,\n\t\t\t\t// \tcallerClient === client\n\t\t\t\t// );\n\t\t\t\tctx.args[0] = {\n\t\t\t\t\t$scramjet$messagetype: \"window\",\n\t\t\t\t\t$scramjet$origin: callerClient.url.origin,\n\t\t\t\t\t$scramjet$data: ctx.args[0],\n\t\t\t\t};\n\t\t\t\t// console.error(\"?\", ctx.args);\n\t\t\t\t// eval(\"debugger\");\n\n\t\t\t\t// * origin because obviously\n\t\t\t\tif (typeof ctx.args[1] === \"string\") ctx.args[1] = \"*\";\n\t\t\t\tif (typeof ctx.args[1] === \"object\") ctx.args[1].targetOrigin = \"*\";\n\n\t\t\t\tctx.return(wrappedPostMessage.call(ctx.fn, ...ctx.args));\n\t\t\t},\n\t\t});\n\n\tconst toproxy = [\"MessagePort.prototype.postMessage\"];\n\n\tif (self.Worker) toproxy.push(\"Worker.prototype.postMessage\");\n\tif (!iswindow) toproxy.push(\"self.postMessage\"); // only do the generic version if we're in a worker\n\n\tclient.Proxy(toproxy, {\n\t\tapply(ctx) {\n\t\t\t// origin/source doesn't need to be preserved - it's null in the message event\n\n\t\t\tctx.args[0] = {\n\t\t\t\t$scramjet$messagetype: \"worker\",\n\t\t\t\t$scramjet$data: ctx.args[0],\n\t\t\t};\n\t\t},\n\t});\n\tObject.defineProperty(self, client.config.globals.wrappostmessagefn, {\n\t\tvalue: function (obj: any) {\n\t\t\tif (!obj || typeof obj.postMessage !== \"function\") return obj;\n\t\t\treturn obj.postMessage.bind(obj);\n\t\t},\n\t\tconfigurable: false,\n\t\twritable: false,\n\t\tenumerable: false,\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport const POLLUTANT = Symbol.for(\"scramjet realm pollutant\");\n\nexport default function (client: ScramjetClient, self: typeof globalThis) {\n\t// object.$setrealm({}).postMessage(...)\n\t// the empty object is the \"pollutant\" which can reconstruct the real realm\n\t// i explain more in postmessage.ts\n\tObject.defineProperty(self.Object.prototype, \"$scramjet$setrealmfn\", {\n\t\tvalue(pollution: object) {\n\t\t\t// this is bad!! sites could detect this\n\t\t\tObject.defineProperty(this, POLLUTANT, {\n\t\t\t\tvalue: pollution,\n\t\t\t\twritable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t});\n\n\t\t\treturn this;\n\t\t},\n\t\twritable: true,\n\t\tconfigurable: true,\n\t\tenumerable: false,\n\t});\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"EventSource\", {\n\t\tconstruct(ctx) {\n\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t},\n\t});\n\n\tclient.Trap(\"EventSource.prototype.url\", {\n\t\tget(ctx) {\n\t\t\tclient.unrewriteUrl(ctx.get() as string);\n\t\t},\n\t});\n}\n","import { rewriteUrl, unrewriteUrl } from \"@rewriters/url\";\nimport { ScramjetClient } from \"@client/index\";\nimport { unrewriteLinkHeader } from \"./xmlhttprequest\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"fetch\", {\n\t\tapply(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Proxy(\"Request\", {\n\t\tconstruct(ctx) {\n\t\t\tif (typeof ctx.args[0] === \"string\" || ctx.args[0] instanceof URL) {\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]);\n\t\t\t}\n\t\t},\n\t});\n\n\tclient.Trap(\"Response.prototype.url\", {\n\t\tget(ctx) {\n\t\t\treturn client.unrewriteUrl(ctx.get() as string);\n\t\t},\n\t});\n\n\tclient.Trap(\"Request.prototype.url\", {\n\t\tget(ctx) {\n\t\t\treturn client.unrewriteUrl(ctx.get() as string);\n\t\t},\n\t});\n\n\t// TODO: this needs to be only for response objects created from a fetch\n\tclient.Trap(\"Response.prototype.headers\", {\n\t\tget(ctx) {\n\t\t\tconst headers = ctx.get() as Headers;\n\t\t\tconst newHeaders = new Headers();\n\n\t\t\tfor (const [key, value] of headers.entries()) {\n\t\t\t\tif (key.toLowerCase() === \"link\") {\n\t\t\t\t\tnewHeaders.append(key, unrewriteLinkHeader(value, client.context));\n\t\t\t\t} else {\n\t\t\t\t\tnewHeaders.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newHeaders;\n\t\t},\n\t});\n}\n","import { type BareWebSocket } from \"@mercuryworkshop/proxy-transports\";\nimport { ScramjetClient } from \"@client/index\";\n\ntype FakeWebSocketState = {\n\textensions: string;\n\tprotocol: string;\n\turl: string;\n\tbinaryType: string;\n\tbarews: BareWebSocket;\n\n\tonclose?: (ev: CloseEvent) => any;\n\tonerror?: (ev: Event) => any;\n\tonmessage?: (ev: MessageEvent) => any;\n\tonopen?: (ev: Event) => any;\n};\ntype FakeWebSocketStreamState = {\n\textensions: string;\n\tprotocol: string;\n\turl: string;\n\tbarews: BareWebSocket;\n\n\topened: any;\n\tclosed: any;\n\treadable: ReadableStream;\n\twritable: WritableStream;\n};\nexport default function (client: ScramjetClient, self: typeof globalThis) {\n\tconst socketmap: WeakMap<WebSocket, FakeWebSocketState> = new WeakMap();\n\tconst socketstreammap: WeakMap<object, FakeWebSocketStreamState> =\n\t\tnew WeakMap();\n\tclient.Proxy(\"WebSocket\", {\n\t\tconstruct(ctx) {\n\t\t\tif (client.init.shouldPassthroughWebsocket?.(ctx.args[0])) {\n\t\t\t\treturn ctx.return(client.natives.construct(\"WebSocket\", ...ctx.args));\n\t\t\t}\n\t\t\tconst fakeWebSocket = new EventTarget() as WebSocket;\n\t\t\tObject.setPrototypeOf(fakeWebSocket, ctx.fn.prototype);\n\t\t\tfakeWebSocket.constructor = ctx.fn;\n\n\t\t\t// websockets can take relative URLs\n\t\t\tlet rawurl = new URL(ctx.args[0], client.url.href);\n\t\t\tif (rawurl.protocol === \"http:\") {\n\t\t\t\trawurl = new URL(\"ws:\" + rawurl.href.substring(rawurl.protocol.length));\n\t\t\t} else if (rawurl.protocol === \"https:\") {\n\t\t\t\trawurl = new URL(\n\t\t\t\t\t\"wss:\" + rawurl.href.substring(rawurl.protocol.length)\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet url = rawurl.href;\n\n\t\t\tconst trustEvent = (ev: Event) =>\n\t\t\t\tnew Proxy(ev, {\n\t\t\t\t\tget(target, prop) {\n\t\t\t\t\t\tif (prop === \"isTrusted\") return true;\n\n\t\t\t\t\t\treturn Reflect.get(target, prop);\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\tconst barews = client.bare.createWebSocket(url, ctx.args[1], [\n\t\t\t\t[\"User-Agent\", self.navigator.userAgent],\n\t\t\t\t[\"Origin\", client.url.origin],\n\t\t\t]);\n\n\t\t\tconst state: FakeWebSocketState = {\n\t\t\t\textensions: \"\",\n\t\t\t\tprotocol: \"\",\n\t\t\t\turl,\n\t\t\t\tbinaryType: \"blob\",\n\t\t\t\tbarews,\n\n\t\t\t\tonclose: null,\n\t\t\t\tonerror: null,\n\t\t\t\tonmessage: null,\n\t\t\t\tonopen: null,\n\t\t\t};\n\n\t\t\tfunction fakeEventSend(fakeev: Event) {\n\t\t\t\tstate[\"on\" + fakeev.type]?.(trustEvent(fakeev));\n\t\t\t\tfakeWebSocket.dispatchEvent(fakeev);\n\t\t\t}\n\n\t\t\tbarews.addEventListener(\"open\", () => {\n\t\t\t\tfakeEventSend(new Event(\"open\"));\n\t\t\t});\n\t\t\tbarews.addEventListener(\"close\", (ev) => {\n\t\t\t\tfakeEventSend(new CloseEvent(\"close\", ev));\n\t\t\t});\n\t\t\tbarews.addEventListener(\"message\", async (ev) => {\n\t\t\t\tlet payload = ev.data;\n\t\t\t\tif (typeof payload === \"string\") {\n\t\t\t\t\t// DO NOTHING\n\t\t\t\t} else if (\"byteLength\" in payload) {\n\t\t\t\t\t// arraybuffer, convert to blob if needed or set the proper prototype\n\t\t\t\t\tif (state.binaryType === \"blob\") {\n\t\t\t\t\t\tpayload = new Blob([payload]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.setPrototypeOf(payload, ArrayBuffer.prototype);\n\t\t\t\t\t}\n\t\t\t\t} else if (\"arrayBuffer\" in payload) {\n\t\t\t\t\t// blob, convert to arraybuffer if neccesary.\n\t\t\t\t\tif (state.binaryType === \"arraybuffer\") {\n\t\t\t\t\t\tpayload = await payload.arrayBuffer();\n\t\t\t\t\t\tObject.setPrototypeOf(payload, ArrayBuffer.prototype);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst fakeev = new MessageEvent(\"message\", {\n\t\t\t\t\tdata: payload,\n\t\t\t\t\torigin: ev.origin,\n\t\t\t\t\tlastEventId: ev.lastEventId,\n\t\t\t\t\tsource: ev.source,\n\t\t\t\t\tports: ev.ports,\n\t\t\t\t});\n\n\t\t\t\tfakeEventSend(fakeev);\n\t\t\t});\n\t\t\tbarews.addEventListener(\"error\", () => {\n\t\t\t\tfakeEventSend(new Event(\"error\"));\n\t\t\t});\n\n\t\t\tsocketmap.set(fakeWebSocket, state);\n\t\t\tctx.return(fakeWebSocket);\n\t\t},\n\t});\n\tclient.Trap(\"WebSocket.prototype.binaryType\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.binaryType;\n\t\t},\n\t\tset(ctx, v: string) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.set(v);\n\t\t\tif (v === \"blob\" || v === \"arraybuffer\") ws.binaryType = v;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.bufferedAmount\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn 0;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.extensions\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.extensions;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.onclose\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.onclose;\n\t\t},\n\t\tset(ctx, v: (ev: CloseEvent) => any) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.set(v);\n\n\t\t\tws.onclose = v;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.onerror\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.onerror;\n\t\t},\n\t\tset(ctx, v: (ev: Event) => any) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.set(v);\n\n\t\t\tws.onerror = v;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.onmessage\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.onmessage;\n\t\t},\n\t\tset(ctx, v: (ev: MessageEvent) => any) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.set(v);\n\n\t\t\tws.onmessage = v;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.onopen\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.onopen;\n\t\t},\n\t\tset(ctx, v: (ev: Event) => any) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.set(v);\n\n\t\t\tws.onopen = v;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.url\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.url;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.protocol\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.protocol;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocket.prototype.readyState\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return ctx.get();\n\n\t\t\treturn ws.barews.readyState;\n\t\t},\n\t});\n\n\tclient.Proxy(\"WebSocket.prototype.send\", {\n\t\tapply(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return;\n\n\t\t\tctx.return(ws.barews.send(ctx.args[0]));\n\t\t},\n\t});\n\n\tclient.Proxy(\"WebSocket.prototype.close\", {\n\t\tapply(ctx) {\n\t\t\tconst ws = socketmap.get(ctx.this);\n\t\t\tif (!ws) return;\n\n\t\t\tif (ctx.args[0] === undefined) ctx.args[0] = 1000;\n\t\t\tif (ctx.args[1] === undefined) ctx.args[1] = \"\";\n\t\t\tctx.return(ws.barews.close(ctx.args[0], ctx.args[1]));\n\t\t},\n\t});\n\n\tclient.Proxy(\"WebSocketStream\", {\n\t\tconstruct(ctx) {\n\t\t\tconst fakeWebSocket = {};\n\t\t\tObject.setPrototypeOf(fakeWebSocket, ctx.fn.prototype);\n\t\t\tfakeWebSocket.constructor = ctx.fn;\n\n\t\t\tconst barews = client.bare.createWebSocket(\n\t\t\t\tctx.args[0],\n\t\t\t\tctx.args[1],\n\t\t\t\tnull,\n\t\t\t\t{\n\t\t\t\t\t\"User-Agent\": self.navigator.userAgent,\n\t\t\t\t\tOrigin: client.url.origin,\n\t\t\t\t}\n\t\t\t);\n\t\t\tctx.args[1]?.signal.addEventListener(\"abort\", () => {\n\t\t\t\tbarews.close(1000, \"\");\n\t\t\t});\n\t\t\tlet openResolver, closeResolver;\n\t\t\tlet openRejector;\n\t\t\tconst state: FakeWebSocketStreamState = {\n\t\t\t\textensions: \"\",\n\t\t\t\tprotocol: \"\",\n\t\t\t\turl: ctx.args[0],\n\t\t\t\tbarews,\n\n\t\t\t\topened: new Promise((resolve, reject) => {\n\t\t\t\t\topenResolver = resolve;\n\t\t\t\t\topenRejector = reject;\n\t\t\t\t}),\n\t\t\t\tclosed: new Promise((resolve) => {\n\t\t\t\t\tcloseResolver = resolve;\n\t\t\t\t}),\n\t\t\t\treadable: new ReadableStream({\n\t\t\t\t\tstart(controller) {\n\t\t\t\t\t\tbarews.addEventListener(\"message\", async (ev: MessageEvent) => {\n\t\t\t\t\t\t\tlet payload = ev.data;\n\t\t\t\t\t\t\tif (typeof payload === \"string\") {\n\t\t\t\t\t\t\t\t// DO NOTHING\n\t\t\t\t\t\t\t} else if (\"byteLength\" in payload) {\n\t\t\t\t\t\t\t\t// arraybuffer, set the realms prototype so its recognized\n\t\t\t\t\t\t\t\tObject.setPrototypeOf(payload, ArrayBuffer.prototype);\n\t\t\t\t\t\t\t} else if (\"arrayBuffer\" in payload) {\n\t\t\t\t\t\t\t\t// blob, convert to arraybuffer\n\t\t\t\t\t\t\t\tpayload = await payload.arrayBuffer();\n\t\t\t\t\t\t\t\tObject.setPrototypeOf(payload, ArrayBuffer.prototype);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontroller.enqueue(payload);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\twritable: new WritableStream({\n\t\t\t\t\twrite(chunk) {\n\t\t\t\t\t\tbarews.send(chunk);\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\t\t\tbarews.addEventListener(\"open\", () => {\n\t\t\t\topenResolver({\n\t\t\t\t\treadable: state.readable,\n\t\t\t\t\twritable: state.writable,\n\t\t\t\t\textensions: state.extensions,\n\t\t\t\t\tprotocol: state.protocol,\n\t\t\t\t});\n\t\t\t});\n\t\t\tbarews.addEventListener(\"close\", (ev: CloseEvent) => {\n\t\t\t\tcloseResolver({ code: ev.code, reason: ev.reason });\n\t\t\t});\n\n\t\t\tbarews.addEventListener(\"error\", (ev: Event) => {\n\t\t\t\topenRejector(ev);\n\t\t\t});\n\n\t\t\tsocketstreammap.set(fakeWebSocket, state);\n\t\t\tctx.return(fakeWebSocket);\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocketStream.prototype.closed\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketstreammap.get(ctx.this);\n\n\t\t\treturn ws.closed;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocketStream.prototype.opened\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketstreammap.get(ctx.this);\n\n\t\t\treturn ws.opened;\n\t\t},\n\t});\n\n\tclient.Trap(\"WebSocketStream.prototype.url\", {\n\t\tget(ctx) {\n\t\t\tconst ws = socketstreammap.get(ctx.this);\n\n\t\t\treturn ws.url;\n\t\t},\n\t});\n\n\tclient.Proxy(\"WebSocketStream.prototype.close\", {\n\t\tapply(ctx) {\n\t\t\tconst ws = socketstreammap.get(ctx.this);\n\t\t\tif (ctx.args[0]) {\n\t\t\t\tif (ctx.args[0].closeCode === undefined) ctx.args[0].closeCode = 1000;\n\t\t\t\tif (ctx.args[0].reason === undefined) ctx.args[0].reason = \"\";\n\n\t\t\t\treturn ctx.return(\n\t\t\t\t\tws.barews.close(ctx.args[0].closeCode, ctx.args[0].reason)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn ctx.return(ws.barews.close(1000, \"\"));\n\t\t},\n\t});\n}\n","import { flagEnabled, ScramjetContext } from \"@/shared\";\nimport { rewriteUrl, unrewriteUrl, URLMeta } from \"@rewriters/url\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: Self) {\n\tlet worker;\n\t// if (self.Worker && flagEnabled(\"syncxhr\", client.url)) {\n\t// \tworker = client.natives.construct(\"Worker\", config.files.sync);\n\t// }\n\tconst ARGS = Symbol(\"xhr original args\");\n\tconst HEADERS = Symbol(\"xhr headers\");\n\n\tclient.Proxy(\"XMLHttpRequest.prototype.open\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[1]) ctx.args[1] = client.rewriteUrl(ctx.args[1]);\n\t\t\tif (ctx.args[2] === undefined) ctx.args[2] = true;\n\t\t\tctx.this[ARGS] = ctx.args;\n\t\t},\n\t});\n\n\tclient.Proxy(\"XMLHttpRequest.prototype.setRequestHeader\", {\n\t\tapply(ctx) {\n\t\t\tconst headers = ctx.this[HEADERS] || (ctx.this[HEADERS] = {});\n\t\t\theaders[ctx.args[0]] = ctx.args[1];\n\t\t},\n\t});\n\n\tclient.Proxy(\"XMLHttpRequest.prototype.send\", {\n\t\tapply(ctx) {\n\t\t\tconst args = ctx.this[ARGS];\n\t\t\tif (!args || args[2]) return;\n\n\t\t\tif (!client.flagEnabled(\"syncxhr\")) {\n\t\t\t\tconsole.warn(\"ignoring request - sync xhr disabled in flags\");\n\n\t\t\t\treturn ctx.return(undefined);\n\t\t\t}\n\n\t\t\t// it's a sync request\n\t\t\t// sync xhr to service worker is not supported\n\t\t\t// there's a nice way of polyfilling this though, we can spin on an atomic using sharedarraybuffer. this will maintain the sync behavior\n\n\t\t\t//@ts-ignore\n\t\t\tconst sab = new SharedArrayBuffer(1024, { maxByteLength: 2147483647 });\n\t\t\tconst view = new DataView(sab);\n\n\t\t\tclient.natives.call(\"Worker.prototype.postMessage\", worker, {\n\t\t\t\tsab,\n\t\t\t\targs,\n\t\t\t\theaders: ctx.this[HEADERS],\n\t\t\t\tbody: ctx.args[0],\n\t\t\t});\n\n\t\t\tconst now = performance.now();\n\t\t\twhile (view.getUint8(0) === 0) {\n\t\t\t\tif (performance.now() - now > 1000) {\n\t\t\t\t\tthrow new Error(\"xhr timeout\");\n\t\t\t\t}\n\t\t\t\t/* spin */\n\t\t\t}\n\n\t\t\tconst status = view.getUint16(1);\n\t\t\tconst headersLength = view.getUint32(3);\n\n\t\t\tconst headersab = new Uint8Array(headersLength);\n\t\t\theadersab.set(new Uint8Array(sab.slice(7, 7 + headersLength)));\n\t\t\tconst headers = new TextDecoder().decode(headersab);\n\n\t\t\tconst bodyLength = view.getUint32(7 + headersLength);\n\t\t\tconst bodyab = new Uint8Array(bodyLength);\n\t\t\tbodyab.set(\n\t\t\t\tnew Uint8Array(\n\t\t\t\t\tsab.slice(11 + headersLength, 11 + headersLength + bodyLength)\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst body = new TextDecoder().decode(bodyab);\n\n\t\t\t// these should be using proxies to not leak scram strings but who cares\n\t\t\tclient.RawTrap(ctx.this, \"status\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn status;\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.RawTrap(ctx.this, \"responseText\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn body;\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.RawTrap(ctx.this, \"response\", {\n\t\t\t\tget() {\n\t\t\t\t\tif (ctx.this.responseType === \"arraybuffer\") return bodyab.buffer;\n\n\t\t\t\t\treturn body;\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.RawTrap(ctx.this, \"responseXML\", {\n\t\t\t\tget() {\n\t\t\t\t\tconst parser = new DOMParser();\n\n\t\t\t\t\treturn parser.parseFromString(body, \"text/xml\");\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.RawTrap(ctx.this, \"getAllResponseHeaders\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn () => headers;\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.RawTrap(ctx.this, \"getResponseHeader\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn (header: string) => {\n\t\t\t\t\t\tconst re = new RegExp(`^${header}: (.*)$`, \"m\");\n\t\t\t\t\t\tconst match = re.exec(headers);\n\n\t\t\t\t\t\treturn match ? match[1] : null;\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tctx.return(undefined);\n\t\t},\n\t});\n\n\tclient.Trap(\"XMLHttpRequest.prototype.responseURL\", {\n\t\tget(ctx) {\n\t\t\treturn client.unrewriteUrl(ctx.get() as string);\n\t\t},\n\t});\n\n\tclient.Proxy(\"XMLHttpRequest.prototype.getAllResponseHeaders\", {\n\t\tapply(ctx) {\n\t\t\tconst headerstring = ctx.fn.call(ctx.this) as string;\n\t\t\tif (!headerstring) return headerstring;\n\t\t\tconst headers = headerstring.split(\"\\r\\n\");\n\n\t\t\tfor (const [i, header] of headers.entries()) {\n\t\t\t\tif (header.toLowerCase().startsWith(\"link:\")) {\n\t\t\t\t\theaders[i] = `Link: ${unrewriteLinkHeader(\n\t\t\t\t\t\theader.slice(5).trim(),\n\t\t\t\t\t\tclient.context\n\t\t\t\t\t)}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tctx.return(headers.join(\"\\r\\n\"));\n\t\t},\n\t});\n\tclient.Proxy(\"XMLHttpRequest.prototype.getResponseHeader\", {\n\t\tapply(ctx) {\n\t\t\tconst header = ctx.fn.call(ctx.this, ctx.args[0]) as string | null;\n\t\t\tif (!header) return header;\n\t\t\tif (ctx.args[0].toLowerCase() === \"link\") {\n\t\t\t\tctx.return(unrewriteLinkHeader(header, client.context));\n\t\t\t}\n\t\t},\n\t});\n}\n\nexport function unrewriteLinkHeader(header: string, context: ScramjetContext) {\n\treturn header.replace(\n\t\t/<([^>]+)>/gi,\n\t\t(match) => `${unrewriteUrl(match, context)}`\n\t);\n}\n","import { rewriteJs } from \"@rewriters/js\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, self: Self) {\n\tclient.Proxy([\"setTimeout\", \"setInterval\"], {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args.length > 0 && typeof ctx.args[0] === \"string\") {\n\t\t\t\tctx.args[0] = rewriteJs(\n\t\t\t\t\tctx.args[0],\n\t\t\t\t\t\"(setTimeout string eval)\",\n\t\t\t\t\tclient.context,\n\t\t\t\t\tclient.meta\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n}\n","import { SCRAMJETCLIENT, SCRAMJETCLIENTNAME } from \"@/symbols\";\nimport { ProxyCtx, ScramjetClient } from \"@client/index\";\n\nenum RewriteType {\n\tInsert = 0,\n\tReplace = 1,\n}\n\ntype Rewrite = {\n\tstart: number;\n} & (\n\t| {\n\t\t\ttype: RewriteType.Insert;\n\t\t\tsize: number;\n\t  }\n\t| {\n\t\t\ttype: RewriteType.Replace;\n\t\t\tend: number;\n\t\t\tstr: string;\n\t  }\n);\n\nexport type SourceMaps = Record<string, Rewrite[]>;\n\nfunction getEnd(rewrite: Rewrite): number {\n\tif (rewrite.type === RewriteType.Insert) {\n\t\treturn rewrite.start + rewrite.size;\n\t} else if (rewrite.type === RewriteType.Replace) {\n\t\treturn rewrite.end;\n\t}\n\tthrow \"unreachable\";\n}\n\nfunction registerRewrites(\n\tclient: ScramjetClient,\n\tbuf: Array<number>,\n\ttag: string\n) {\n\tconst sourcemap = Uint8Array.from(buf);\n\tconst view = new DataView(sourcemap.buffer);\n\tconst decoder = new TextDecoder(\"utf-8\");\n\n\tconst rewrites: Rewrite[] = [];\n\n\tconst rewritelen = view.getUint32(0, true);\n\tlet cursor = 4;\n\tfor (let i = 0; i < rewritelen; i++) {\n\t\tconst start = view.getUint32(cursor, true);\n\t\tcursor += 4;\n\t\tconst size = view.getUint32(cursor, true);\n\t\tcursor += 4;\n\n\t\tconst type = view.getUint8(cursor) as RewriteType;\n\t\tcursor += 1;\n\n\t\tif (type == RewriteType.Insert) {\n\t\t\trewrites.push({ type, start, size });\n\t\t} else if (type == RewriteType.Replace) {\n\t\t\tconst end = start + size;\n\n\t\t\tconst oldLen = view.getUint32(cursor, true);\n\t\t\tcursor += 4;\n\n\t\t\tconst oldStr = decoder.decode(\n\t\t\t\tsourcemap.subarray(cursor, cursor + oldLen)\n\t\t\t);\n\n\t\t\trewrites.push({ type, start, end, str: oldStr });\n\t\t}\n\t}\n\n\tclient.box.sourcemaps[tag] = rewrites;\n}\n\nconst SCRAMTAG = \"/*scramtag \";\n\nfunction extractTag(fn: string): [string, number, number] | null {\n\t// every function rewritten will have a scramtag comment\n\t// it will look like this:\n\t// function name()[possible whitespace]/*scramtag [index] [tag]*/[possible whitespace]{ ... }\n\n\tlet start = fn.indexOf(SCRAMTAG);\n\t// no scramtag, probably native function or stolen from scramjet\n\tif (start === -1) return null;\n\n\tconst end = fn.indexOf(\"*/\", start);\n\tif (end === -1) {\n\t\tconsole.log(fn, start, end);\n\t\tthrow new Error(\"unreachable\");\n\t}\n\n\tlet tag = fn.substring(start + 2, end).split(\" \");\n\n\tif (\n\t\ttag.length !== 3 ||\n\t\ttag[0] !== \"scramtag\" ||\n\t\t!Number.isSafeInteger(+tag[1])\n\t) {\n\t\tconsole.log(fn, start, end, tag);\n\t\tthrow new Error(\"invalid tag\");\n\t}\n\n\treturn [tag[2], start, +tag[1]];\n}\n\nfunction doUnrewrite(client: ScramjetClient, ctx: ProxyCtx) {\n\tconst stringified: string = ctx.fn.call(ctx.this);\n\n\tconst extracted = extractTag(stringified);\n\tif (!extracted) return ctx.return(stringified);\n\tconst [tag, tagOffset, tagStart] = extracted;\n\n\tconst fnStart = tagStart - tagOffset;\n\tconst fnEnd = fnStart + stringified.length;\n\tconst rewrites = client.box.sourcemaps[tag];\n\n\tif (!rewrites) {\n\t\tconsole.warn(\"failed to get rewrites for tag\", tag);\n\n\t\treturn ctx.return(stringified);\n\t}\n\n\tlet i = 0;\n\t// skip all rewrites in the file before the fn\n\twhile (i < rewrites.length) {\n\t\tif (rewrites[i].start < fnStart) i++;\n\t\telse break;\n\t}\n\n\tlet end = i;\n\twhile (end < rewrites.length) {\n\t\tif (getEnd(rewrites[end]) < fnEnd) end++;\n\t\telse break;\n\t}\n\tconst fnrewrites = rewrites.slice(i, end);\n\n\tlet newString = \"\";\n\tlet lastpos = 0;\n\n\tfor (const rewrite of fnrewrites) {\n\t\tnewString += stringified.slice(lastpos, rewrite.start - fnStart);\n\n\t\tif (rewrite.type === RewriteType.Insert) {\n\t\t\tlastpos = rewrite.start + rewrite.size - fnStart;\n\t\t} else if (rewrite.type === RewriteType.Replace) {\n\t\t\tnewString += rewrite.str;\n\t\t\tlastpos = rewrite.end - fnStart;\n\t\t} else {\n\t\t\tthrow \"unreachable\";\n\t\t}\n\t}\n\n\tnewString += stringified.slice(lastpos);\n\tnewString = newString.replace(`${SCRAMTAG}${tagStart} ${tag}*/`, \"\");\n\n\treturn ctx.return(newString);\n}\n\nexport const enabled = (client: ScramjetClient) =>\n\tclient.flagEnabled(\"sourcemaps\");\n\nexport default function (client: ScramjetClient, self: Self) {\n\t// every script will push a sourcemap\n\tObject.defineProperty(self, client.config.globals.pushsourcemapfn, {\n\t\tvalue: (buf: Array<number>, tag: string) => {\n\t\t\tconst before = performance.now();\n\t\t\tregisterRewrites(client, buf, tag);\n\t\t\tdbg.time(client.meta, before, `scramtag parse for ${tag}`);\n\t\t},\n\t\tenumerable: false,\n\t\twritable: false,\n\t\tconfigurable: false,\n\t});\n\n\t// when we rewrite javascript it will make function.toString leak internals\n\t// this can lead to double rewrites which is bad\n\tclient.Proxy(\"Function.prototype.toString\", {\n\t\tapply(ctx) {\n\t\t\tconst before = performance.now();\n\t\t\tdoUnrewrite(client, ctx);\n\t\t\t// dbg.time(client.meta, before, `scramtag unrewrite for ${ctx.fn.name}`);\n\t\t},\n\t});\n}\n","import { rewriteUrl } from \"@rewriters/url\";\nimport { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient, _self: typeof globalThis) {\n\tclient.Proxy(\"Worker\", {\n\t\tconstruct(ctx) {\n\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]) + \"?dest=worker\";\n\n\t\t\tif (ctx.args[1] && ctx.args[1].type === \"module\") {\n\t\t\t\tctx.args[0] += \"&type=module\";\n\t\t\t}\n\n\t\t\tconst worker = ctx.call();\n\t\t\t// const conn = new BareMuxConnection();\n\n\t\t\t// (async () => {\n\t\t\t// \tconst port = await conn.getInnerPort();\n\t\t\t// \tclient.natives.call(\n\t\t\t// \t\t\"Worker.prototype.postMessage\",\n\t\t\t// \t\tworker,\n\t\t\t// \t\t{\n\t\t\t// \t\t\t$scramjet$type: \"baremuxinit\",\n\t\t\t// \t\t\tport,\n\t\t\t// \t\t},\n\t\t\t// \t\t[port]\n\t\t\t// \t);\n\t\t\t// })();\n\t\t},\n\t});\n\n\t// sharedworkers can only be constructed from window\n\tclient.Proxy(\"SharedWorker\", {\n\t\tconstruct(ctx) {\n\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]) + \"?dest=sharedworker\";\n\n\t\t\tif (ctx.args[1] && typeof ctx.args[1] === \"string\")\n\t\t\t\tctx.args[1] = `${client.url.origin}@${ctx.args[1]}`;\n\n\t\t\tif (ctx.args[1] && typeof ctx.args[1] === \"object\") {\n\t\t\t\tif (ctx.args[1].type === \"module\") {\n\t\t\t\t\tctx.args[0] += \"&type=module\";\n\t\t\t\t}\n\n\t\t\t\tif (ctx.args[1].name) {\n\t\t\t\t\tctx.args[1].name = `${client.url.origin}@${ctx.args[1].name}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst worker = ctx.call();\n\t\t\t// const conn = new BareMuxConnection();\n\n\t\t\t// (async () => {\n\t\t\t// \tconst port = await conn.getInnerPort();\n\t\t\t// \tclient.natives.call(\n\t\t\t// \t\t\"MessagePort.prototype.postMessage\",\n\t\t\t// \t\tworker.port,\n\t\t\t// \t\t{\n\t\t\t// \t\t\t$scramjet$type: \"baremuxinit\",\n\t\t\t// \t\t\tport,\n\t\t\t// \t\t},\n\t\t\t// \t\t[port]\n\t\t\t// \t);\n\t\t\t// })();\n\t\t},\n\t});\n\n\tclient.Proxy(\"Worklet.prototype.addModule\", {\n\t\tapply(ctx) {\n\t\t\tif (ctx.args[0])\n\t\t\t\tctx.args[0] = client.rewriteUrl(ctx.args[0]) + \"?dest=worklet\";\n\t\t},\n\t});\n}\n","import { iswindow } from \"@client/entry\";\nimport { SCRAMJETCLIENT } from \"@/symbols\";\nimport { ScramjetClient } from \"@client/index\";\n// import { argdbg } from \"@client/shared/err\";\nimport { indirectEval } from \"@client/shared/eval\";\n\nexport function createWrapFn(client: ScramjetClient, self: typeof globalThis) {\n\tlet wrappedParent: typeof globalThis | null = null;\n\tlet wrappedTop: typeof globalThis | null = null;\n\tif (iswindow) {\n\t\ttry {\n\t\t\tif (SCRAMJETCLIENT in self.parent) {\n\t\t\t\t// ... then we're in a subframe, and the parent frame is also in a proxy context, so we should return its proxy\n\t\t\t\twrappedParent = self.parent;\n\t\t\t} else {\n\t\t\t\t// ... then we should pretend we aren't nested and return the current window\n\t\t\t\twrappedParent = self;\n\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// accessing self.parent can throw if it's cross-origin, in which case we should also pretend we aren't nested\n\t\t\t\twrappedParent = self;\n\t\t}\n\t\t// instead of returning top, we need to return the uppermost parent that's inside a scramjet context\n\t\tlet current = self;\n\t\tfor (;;) {\n\t\t\tconst test = current.parent.self;\n\t\t\tif (test === current) break; // there is no parent, actual or emulated.\n\t\n\t\t\ttry {\n\t\t\t\t// ... then `test` represents a window outside of the proxy context, and therefore `current` is the topmost window in the proxy context\n\t\t\t\tif (!(SCRAMJETCLIENT in test)) break;\n\t\t\t} catch {\n\t\t\t\t// accessing test can throw if it's cross-origin, in which case we should also break\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// test is also insde a proxy, so we should continue up the chain\n\t\t\tcurrent = test;\n\t\t}\n\t\twrappedTop = current;\n\t}\n\t\n\treturn function (identifier: any, strict: boolean) {\n\t\tif (identifier === self.location) return client.locationProxy;\n\t\tif (identifier === self.eval) return indirectEval.bind(client, strict);\n\t\tif (iswindow) {\n\t\t\tif (identifier === self.parent) {\n\t\t\t\treturn wrappedParent;\n\t\t\t} \n\t\t\telse if (identifier === self.top) {\n\t\t\t\treturn wrappedTop;\n\t\t\t}\n\t\t}\n\t\treturn identifier;\n\t};\n}\n\nexport const order = 4;\nexport default function (client: ScramjetClient, self: typeof globalThis) {\n\tObject.defineProperty(self, client.config.globals.wrapfn, {\n\t\tvalue: client.wrapfn,\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t});\n\tObject.defineProperty(self, client.config.globals.wrappropertyfn, {\n\t\tvalue: function (str) {\n\t\t\tif (\n\t\t\t\tstr === \"location\" ||\n\t\t\t\tstr === \"parent\" ||\n\t\t\t\tstr === \"top\" ||\n\t\t\t\tstr === \"eval\"\n\t\t\t)\n\t\t\t\treturn client.config.globals.wrappropertybase + str;\n\n\t\t\treturn str;\n\t\t},\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t});\n\tObject.defineProperty(self, client.config.globals.cleanrestfn, {\n\t\tvalue: function (obj) {\n\t\t\t// TODO\n\t\t},\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t});\n\n\tObject.defineProperty(\n\t\tself.Object.prototype,\n\t\tclient.config.globals.wrappropertybase + \"location\",\n\t\t{\n\t\t\tget: function () {\n\t\t\t\t// if (this.location.constructor.toString().includes(\"Location\")) {\n\n\t\t\t\tif (this === self || this === self.document) {\n\t\t\t\t\treturn client.locationProxy;\n\t\t\t\t}\n\n\t\t\t\treturn this.location;\n\t\t\t},\n\t\t\tset(value: any) {\n\t\t\t\tif (this === self || this === self.document) {\n\t\t\t\t\tclient.url = value;\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.location = value;\n\t\t\t},\n\t\t\tconfigurable: false,\n\t\t\tenumerable: false,\n\t\t}\n\t);\n\tObject.defineProperty(\n\t\tself.Object.prototype,\n\t\tclient.config.globals.wrappropertybase + \"parent\",\n\t\t{\n\t\t\tget: function () {\n\t\t\t\treturn client.wrapfn(this.parent, false);\n\t\t\t},\n\t\t\tset(value: any) {\n\t\t\t\t// i guess??\n\t\t\t\tthis.parent = value;\n\t\t\t},\n\t\t\tconfigurable: false,\n\t\t\tenumerable: false,\n\t\t}\n\t);\n\tObject.defineProperty(\n\t\tself.Object.prototype,\n\t\tclient.config.globals.wrappropertybase + \"top\",\n\t\t{\n\t\t\tget: function () {\n\t\t\t\treturn client.wrapfn(this.top, false);\n\t\t\t},\n\t\t\tset(value: any) {\n\t\t\t\tthis.top = value;\n\t\t\t},\n\t\t\tconfigurable: false,\n\t\t\tenumerable: false,\n\t\t}\n\t);\n\tObject.defineProperty(\n\t\tself.Object.prototype,\n\t\tclient.config.globals.wrappropertybase + \"eval\",\n\t\t{\n\t\t\tget: function () {\n\t\t\t\treturn client.wrapfn(this.eval, true);\n\t\t\t},\n\t\t\tset(value: any) {\n\t\t\t\tthis.eval = value;\n\t\t\t},\n\t\t\tconfigurable: false,\n\t\t\tenumerable: false,\n\t\t}\n\t);\n\n\tself.$scramitize = function (v) {\n\t\tif (v === location) debugger;\n\t\tif (iswindow) {\n\t\t\t// if (v === self.parent) debugger;\n\t\t\tif (v === self.top) debugger;\n\t\t}\n\n\t\tif (typeof v === \"string\" && v.includes(\"scramjet\")) debugger;\n\t\tif (typeof v === \"string\" && v.includes(location.origin)) debugger;\n\n\t\treturn v;\n\t};\n\n\t// location = \"...\" can't be rewritten as wrapfn(location) = ..., so instead it will actually be rewritten as\n\t// ((t)=>$scramjet$tryset(location,\"+=\",t)||location+=t)(...);\n\t// it has to be a discrete function because there's always the possibility that \"location\" is a local variable\n\t// we have to use an IIFE to avoid duplicating side-effects in the getter\n\tObject.defineProperty(self, client.config.globals.trysetfn, {\n\t\tvalue: function (lhs: any, op: string, rhs: any) {\n\t\t\t// TODO: not cross frame safe\n\t\t\tif (lhs instanceof self.Location) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tclient.locationProxy.href = rhs;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\twritable: false,\n\t\tconfigurable: false,\n\t});\n}\n","import { ScramjetClient } from \"./client\";\nimport { SourceMaps } from \"./shared/sourcemaps\";\n\nexport class SingletonBox {\n\tclients: ScramjetClient[] = [];\n\tglobals: Map<Self, ScramjetClient> = new Map();\n\tdocuments: Map<Document, ScramjetClient> = new Map();\n\tlocations: Map<Location, ScramjetClient> = new Map();\n\n\tctors: Record<string, Function[]> = {};\n\n\tsourcemaps: SourceMaps = {};\n\n\tconstructor(public ownerclient: ScramjetClient) {}\n\n\tregisterClient(client: ScramjetClient, global: Self) {\n\t\tthis.clients.push(client);\n\t\tthis.globals.set(global, client);\n\t\tthis.documents.set(global.document, client);\n\t\tthis.locations.set(global.location, client);\n\n\t\tObject.getOwnPropertyNames(global).forEach((prop) => {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(global, prop);\n\t\t\tif (desc && typeof desc.value === \"function\") {\n\t\t\t\tif (!this.ctors[prop]) this.ctors[prop] = [];\n\t\t\t\tthis.ctors[prop].push(desc.value);\n\t\t\t}\n\t\t});\n\t}\n\n\tinstanceof(obj: any, name: string) {\n\t\tconst ctors = this.ctors[name];\n\t\tif (!ctors) throw new Error(`No constructors for ${name} found`);\n\t\tfor (const ctor of ctors) {\n\t\t\tif (obj instanceof ctor) return true;\n\t\t}\n\t\treturn false;\n\t}\n}\n","import { ScramjetClient } from \"@client/index\";\n\nexport default function (client: ScramjetClient) {\n\tclient.Proxy(\"importScripts\", {\n\t\tapply(ctx) {\n\t\t\tfor (const i in ctx.args) {\n\t\t\t\tctx.args[i] = client.rewriteUrl(ctx.args[i]);\n\t\t\t}\n\t\t},\n\t});\n}\n","import {\n\tBareCompatibleClient,\n\tBareResponse,\n\tProxyTransport,\n\tRawHeaders,\n\tTransferrableResponse,\n\tBareRequestInit,\n} from \"@mercuryworkshop/proxy-transports\";\n\nimport {\n\trewriteUrl,\n\tunrewriteBlob,\n\tunrewriteUrl,\n\ttype URLMeta,\n} from \"@rewriters/url\";\nimport { rewriteJs } from \"@rewriters/js\";\nimport { ScramjetHeaders } from \"@/shared/headers\";\nimport { flagEnabled, ScramjetContext } from \"@/shared\";\nimport { rewriteHtml } from \"@rewriters/html\";\nimport { rewriteCss } from \"@rewriters/css\";\nimport { rewriteWorkers } from \"@rewriters/worker\";\nimport { ScramjetConfig } from \"@/types\";\nimport DomHandler from \"domhandler\";\n\nexport interface ScramjetFetchRequest {\n\trawUrl: URL;\n\tdestination: RequestDestination;\n\tmode: RequestMode;\n\treferrer: string;\n\tmethod: string;\n\tbody: BodyType | null;\n\tcache: RequestCache;\n\n\tinitialHeaders: ScramjetHeaders;\n\n\trawClientUrl?: URL;\n}\n\nexport interface ScramjetFetchParsed {\n\turl: URL;\n\tclientUrl?: URL;\n\n\tmeta: URLMeta;\n\tscriptType: \"module\" | \"regular\";\n}\n\nexport interface ScramjetFetchResponse {\n\tbody: BodyType;\n\theaders: ScramjetHeaders;\n\tstatus: number;\n\tstatusText: string;\n}\n\nexport type FetchHandlerInit = {\n\ttransport: ProxyTransport;\n\tcontext: ScramjetContext;\n\tcrossOriginIsolated?: boolean;\n\n\tsendSetCookie: (url: URL, cookie: string) => Promise<void>;\n\tfetchDataUrl(dataUrl: string): Promise<BareResponse>;\n\tfetchBlobUrl(blobUrl: string): Promise<BareResponse>;\n};\n\nexport class ScramjetFetchHandler extends EventTarget {\n\tpublic client: BareCompatibleClient;\n\tpublic crossOriginIsolated: boolean = false;\n\tpublic context: ScramjetContext;\n\n\tpublic fetchDataUrl: (dataUrl: string) => Promise<Response>;\n\tpublic fetchBlobUrl: (blobUrl: string) => Promise<Response>;\n\tpublic sendSetCookie: (url: URL, cookie: string) => Promise<void>;\n\n\tconstructor(init: FetchHandlerInit) {\n\t\tsuper();\n\t\tthis.client = new BareCompatibleClient(init.transport);\n\t\tthis.context = init.context;\n\t\tthis.crossOriginIsolated = init.crossOriginIsolated || false;\n\t\tthis.sendSetCookie = init.sendSetCookie;\n\t\tthis.fetchDataUrl = init.fetchDataUrl;\n\t\tthis.fetchBlobUrl = init.fetchBlobUrl;\n\t}\n\n\tasync handleFetch(\n\t\trequest: ScramjetFetchRequest\n\t): Promise<ScramjetFetchResponse> {\n\t\treturn doHandleFetch(this, request);\n\t}\n}\n\nasync function doHandleFetch(\n\thandler: ScramjetFetchHandler,\n\trequest: ScramjetFetchRequest\n): Promise<ScramjetFetchResponse> {\n\tconst parsed = parseRequest(request, handler);\n\n\tif (\n\t\trequest.rawUrl.pathname.startsWith(\n\t\t\t`${handler.context.prefix.pathname}blob:`\n\t\t) ||\n\t\trequest.rawUrl.pathname.startsWith(\n\t\t\t`${handler.context.prefix.pathname}data:`\n\t\t)\n\t) {\n\t\treturn handleBlobOrDataUrlFetch(handler, request, parsed);\n\t}\n\n\tconst newheaders = rewriteRequestHeaders(request, handler, parsed);\n\n\tconst init = {\n\t\tbody: request.body,\n\t\theaders: newheaders.toRawHeaders(),\n\t\tmethod: request.method,\n\t\tredirect: \"manual\",\n\t} as BareRequestInit;\n\n\tconst req = new ScramjetRequestEvent(\n\t\trequest,\n\t\tparsed.url,\n\t\tparsed,\n\t\tinit,\n\t\thandler.client\n\t);\n\thandler.dispatchEvent(req);\n\n\tlet response: BareResponse;\n\n\tif (req._response) {\n\t\tlet resp = req._response;\n\t\tif (\"then\" in resp) {\n\t\t\tresp = await resp;\n\t\t}\n\t\tif (\"rawHeaders\" in resp) {\n\t\t\t// it's a bare response\n\t\t\tresponse = resp;\n\t\t} else {\n\t\t\t// it's a native response, convert it\n\t\t\tresponse = BareResponse.fromNativeResponse(resp);\n\t\t}\n\t} else {\n\t\tresponse = await handler.client.fetch(req.url, req.init);\n\t}\n\n\tlet responseBody: BodyType;\n\n\t// set-cookie needs to take the raw headers. after this, we can flatten the headers into a ScramjetHeaders object\n\tawait handleCookies(handler, request, parsed, response.rawHeaders);\n\n\tconst responseHeaders = await rewriteHeaders(\n\t\thandler,\n\t\trequest,\n\t\tparsed,\n\t\tresponse.rawHeaders\n\t);\n\n\tif (isRedirect(response)) {\n\t\tconst redirectUrl = new URL(\n\t\t\tunrewriteUrl(responseHeaders.get(\"location\"), handler.context)\n\t\t);\n\n\t\t// await updateTracker(\n\t\t// \turl.toString(),\n\t\t// \tredirectUrl.toString(),\n\t\t// \tresponseHeaders[\"referrer-policy\"]\n\t\t// );\n\n\t\t// const redirectMeta = {\n\t\t// \torigin: redirectUrl,\n\t\t// \tbase: redirectUrl,\n\t\t// };\n\t\t// const newSiteDirective = await getSiteDirective(\n\t\t// \tredirectMeta,\n\t\t// \tparsed.url,\n\t\t// \tbareClient\n\t\t// );\n\t\t// await getMostRestrictiveSite(redirectUrl.toString(), newSiteDirective);\n\n\t\t// ensure that ?type=module is not lost in a redirect\n\t\tif (parsed.scriptType) {\n\t\t\tconst url = new URL(responseHeaders.get(\"location\"));\n\t\t\turl.searchParams.set(\"type\", parsed.scriptType);\n\t\t\tresponseHeaders.set(\"location\", url.href);\n\t\t}\n\t}\n\n\tif (response.body && !isRedirect(response)) {\n\t\tresponseBody = await rewriteBody(handler, request, parsed, response);\n\t}\n\n\t// Clean up tracker if not a redirect\n\t// if (!isRedirect(response)) {\n\t// await cleanTracker(parsed.url.toString());\n\t// }\n\n\tconst resp = new ScramjetResponseEvent(request, parsed, {\n\t\tbody: responseBody,\n\t\theaders: responseHeaders,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t});\n\thandler.dispatchEvent(resp);\n\n\tlet r = resp.response;\n\tif (resp._response) r = await resp._response;\n\n\treturn r;\n}\n\nfunction isRedirect(response: BareResponse) {\n\treturn response.status >= 300 && response.status < 400;\n}\n\nexport function parseRequest(\n\trequest: ScramjetFetchRequest,\n\thandler: ScramjetFetchHandler\n): ScramjetFetchParsed {\n\tconst strippedUrl = new URL(request.rawUrl.href);\n\tconst extraParams: Record<string, string> = {};\n\n\tlet scriptType: \"module\" | \"regular\" = \"regular\";\n\tlet topFrameName: string | undefined;\n\tlet parentFrameName: string | undefined;\n\tfor (const [param, value] of [...request.rawUrl.searchParams.entries()]) {\n\t\tswitch (param) {\n\t\t\tcase \"type\":\n\t\t\t\tif (value === \"module\") scriptType = value;\n\t\t\t\tbreak;\n\t\t\tcase \"dest\":\n\t\t\t\tbreak;\n\t\t\tcase \"topFrame\":\n\t\t\t\ttopFrameName = value;\n\t\t\t\tbreak;\n\t\t\tcase \"parentFrame\":\n\t\t\t\tparentFrameName = value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tdbg.warn(\n\t\t\t\t\t`${request.rawUrl.href} extraneous query parameter ${param}. Assuming <form> element`\n\t\t\t\t);\n\t\t\t\textraParams[param] = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tstrippedUrl.searchParams.delete(param);\n\t}\n\n\tif (!URL.canParse(unrewriteUrl(strippedUrl, handler.context))) {\n\t\tthrow new Error(`unable to parse rewritten url: ${strippedUrl.href}`);\n\t}\n\tconst url = new URL(unrewriteUrl(strippedUrl, handler.context));\n\n\tif (url.origin === new URL(request.rawUrl).origin) {\n\t\t// uh oh!\n\t\tthrow new Error(\n\t\t\t\"attempted to fetch from same origin - this means the site has obtained a reference to the real origin, aborting\"\n\t\t);\n\t}\n\n\t// now that we're past unrewriting it's safe to add back the params\n\tfor (const [param, value] of Object.entries(extraParams)) {\n\t\turl.searchParams.set(param, value);\n\t}\n\n\t// TODO: figure out what origin and base actually mean\n\tconst meta: URLMeta = {\n\t\torigin: url,\n\t\tbase: url,\n\t\ttopFrameName,\n\t\tparentFrameName,\n\t};\n\n\tconst parsed: ScramjetFetchParsed = {\n\t\tmeta,\n\t\turl,\n\t\tscriptType,\n\t};\n\n\tif (request.rawClientUrl) {\n\t\t// TODO: probably need to make a meta for it\n\t\tparsed.clientUrl = new URL(\n\t\t\tunrewriteUrl(request.rawClientUrl, handler.context)\n\t\t);\n\t}\n\n\treturn parsed;\n}\n\nfunction rewriteRequestHeaders(\n\trequest: ScramjetFetchRequest,\n\thandler: ScramjetFetchHandler,\n\tparsed: ScramjetFetchParsed\n): ScramjetHeaders {\n\tconst headers = request.initialHeaders.clone();\n\n\tif (\n\t\trequest.rawClientUrl &&\n\t\trequest.rawClientUrl.pathname.startsWith(handler.context.prefix.pathname)\n\t) {\n\t\t// TODO: i was against cors emulation but we might actually break stuff if we send full origin/referrer always\n\t\tlet clientURL = new URL(\n\t\t\tunrewriteUrl(request.rawClientUrl, handler.context)\n\t\t);\n\n\t\tif (clientURL.protocol !== \"http:\" && clientURL.protocol !== \"https:\") {\n\t\t\t// sites will explode if we send them a data url referer\n\t\t\tclientURL = new URL(\"https://example.com/\");\n\t\t}\n\n\t\tif (clientURL.toString().includes(\"youtube.com\")) {\n\t\t\t// console.log(headers);\n\t\t} else {\n\t\t\t// Force referrer to unsafe-url for all requests\n\t\t\theaders.set(\"Referer\", clientURL.href);\n\t\t\theaders.set(\"Origin\", clientURL.origin);\n\t\t}\n\t}\n\n\tconst cookies = handler.context.cookieJar.getCookies(parsed.url, false);\n\n\tif (cookies.length) {\n\t\theaders.set(\"Cookie\", cookies);\n\t}\n\n\t// // Check if we should emulate a top-level navigation\n\t// let isTopLevelProxyNavigation = false;\n\t// if (\n\t// \tcontext.destination === \"iframe\" &&\n\t// \tcontext.mode === \"navigate\" &&\n\t// \tcontext.referrer &&\n\t// \tcontext.referrer !== \"no-referrer\"\n\t// ) {\n\t// \t// Trace back through the referrer chain, checking if each was an iframe navigation using the clients, until we find a non-iframe parent on a non-proxy page\n\t// \tlet currentReferrer = context.referrer;\n\t// \tconst allClients = await self.clients.matchAll({ type: \"window\" });\n\n\t// \t// Trace backwards\n\t// \twhile (currentReferrer) {\n\t// \t\tif (!currentReferrer.includes(config.prefix)) {\n\t// \t\t\tisTopLevelProxyNavigation = true;\n\t// \t\t\tbreak;\n\t// \t\t}\n\n\t// \t\t// Find the parent for this iteration\n\t// \t\tconst parentChainClient = allClients.find(\n\t// \t\t\t(c) => c.url === currentReferrer\n\t// \t\t);\n\n\t// \t\t// Get the next referrer policy that applies to this parent\n\t// \t\t// eslint-disable-next-line no-await-in-loop\n\t// \t\tconst parentPolicyData = await getReferrerPolicy(currentReferrer);\n\n\t// \t\tif (!parentPolicyData || !parentPolicyData.referrer) {\n\t// \t\t\t// Check if this ends at the proxy origin\n\t// \t\t\tif (parentChainClient && currentReferrer.startsWith(location.origin)) {\n\t// \t\t\t\tisTopLevelProxyNavigation = true;\n\t// \t\t\t}\n\t// \t\t\t// Results are inclusive\n\t// \t\t\tbreak;\n\t// \t\t}\n\n\t// \t\t// Check if this was an iframe navigation by looking at the client\n\t// \t\tif (parentChainClient && parentChainClient.frameType === \"nested\") {\n\t// \t\t\t// Continue checking the chain\n\t// \t\t\tcurrentReferrer = parentPolicyData.referrer;\n\t// \t\t} else {\n\t// \t\t\t// Results are inclusive\n\t// \t\t\tbreak;\n\t// \t\t}\n\t// \t}\n\t// }\n\n\t// if (isTopLevelProxyNavigation) {\n\t// \theaders.set(\"Sec-Fetch-Dest\", \"document\");\n\t// \theaders.set(\"Sec-Fetch-Mode\", \"navigate\");\n\t// } else {\n\t// \t// Convert empty destination to \"empty\" string per spec\n\t// \theaders.set(\"Sec-Fetch-Dest\", request.destination || \"empty\");\n\t// \theaders.set(\"Sec-Fetch-Mode\", request.mode);\n\t// }\n\n\t// let siteDirective = \"none\";\n\t// if (\n\t// \trequest.referrer &&\n\t// \trequest.referrer !== \"\" &&\n\t// \trequest.referrer !== \"no-referrer\"\n\t// ) {\n\t// \tif (request.referrer.includes(config.prefix)) {\n\t// \t\tconst unrewrittenReferrer = unrewriteUrl(request.referrer);\n\t// \t\tif (unrewrittenReferrer) {\n\t// \t\t\tconst referrerUrl = new URL(unrewrittenReferrer);\n\t// \t\t\tsiteDirective = await getSiteDirective(meta, referrerUrl, this.client);\n\t// \t\t}\n\t// \t}\n\t// }\n\n\t// await initializeTracker(\n\t// \turl.toString(),\n\t// \trequest.referrer ? unrewriteUrl(request.referrer) : null,\n\t// \tsiteDirective\n\t// );\n\n\t// headers.set(\n\t// \t\"Sec-Fetch-Site\",\n\t// \tawait getMostRestrictiveSite(url.toString(), siteDirective)\n\t// );\n\treturn headers;\n}\n\nasync function handleBlobOrDataUrlFetch(\n\thandler: ScramjetFetchHandler,\n\trequest: ScramjetFetchRequest,\n\tparsed: ScramjetFetchParsed\n): Promise<ScramjetFetchResponse> {\n\tlet dataUrl = request.rawUrl.pathname.substring(\n\t\thandler.context.prefix.pathname.length\n\t);\n\tlet response: BareResponse;\n\n\tif (dataUrl.startsWith(\"blob:\")) {\n\t\tdataUrl = unrewriteBlob(dataUrl, handler.context, parsed.meta);\n\t\tresponse = BareResponse.fromNativeResponse(\n\t\t\tawait handler.fetchBlobUrl(dataUrl)\n\t\t);\n\t} else {\n\t\tresponse = BareResponse.fromNativeResponse(\n\t\t\tawait handler.fetchDataUrl(dataUrl)\n\t\t);\n\t}\n\n\tlet body: BodyType;\n\tif (response.body) {\n\t\tbody = await rewriteBody(\n\t\t\thandler,\n\t\t\trequest,\n\t\t\tparsed,\n\t\t\tresponse as BareResponse\n\t\t);\n\t}\n\tconst headers = ScramjetHeaders.fromRawHeaders(response.rawHeaders);\n\tif (handler.crossOriginIsolated) {\n\t\theaders.set(\"Cross-Origin-Opener-Policy\", \"same-origin\");\n\t\theaders.set(\"Cross-Origin-Embedder-Policy\", \"require-corp\");\n\t}\n\n\treturn {\n\t\tbody,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\theaders: headers,\n\t};\n}\n\nasync function handleCookies(\n\thandler: ScramjetFetchHandler,\n\trequest: ScramjetFetchRequest,\n\tparsed: ScramjetFetchParsed,\n\trawHeaders: RawHeaders\n) {\n\tfor (const [key, value] of rawHeaders) {\n\t\tif (key.toLowerCase() !== \"set-cookie\") continue;\n\n\t\thandler.context.cookieJar.setCookies([value], parsed.url);\n\t\tconst promise = handler.sendSetCookie(parsed.url, value);\n\n\t\t// we want the client to have the cookies before fetch returns\n\t\t// for navigations though, there's no race since we send the entire cookie dump in the same request\n\t\tif (\n\t\t\trequest.destination !== \"document\" &&\n\t\t\trequest.destination !== \"iframe\"\n\t\t) {\n\t\t\tawait promise;\n\t\t}\n\t}\n}\n\n/**\n * Headers for security policy features that haven't been emulated yet\n */\nconst SEC_HEADERS = new Set([\n\t\"cross-origin-embedder-policy\",\n\t\"cross-origin-opener-policy\",\n\t\"cross-origin-resource-policy\",\n\t\"content-security-policy\",\n\t\"content-security-policy-report-only\",\n\t\"expect-ct\",\n\t\"feature-policy\",\n\t\"origin-isolation\",\n\t\"strict-transport-security\",\n\t\"upgrade-insecure-requests\",\n\t\"x-content-type-options\",\n\t\"x-download-options\",\n\t\"x-frame-options\",\n\t\"x-permitted-cross-domain-policies\",\n\t\"x-powered-by\",\n\t\"x-xss-protection\",\n\t// This needs to be emulated, but for right now it isn't that important of a feature to be worried about\n\t// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Clear-Site-Data\n\t\"clear-site-data\",\n]);\n\n/**\n * Headers that are actually URLs that need to be rewritten\n */\nconst URL_HEADERS = new Set([\"location\", \"content-location\", \"referer\"]);\n\nfunction rewriteLinkHeader(\n\tlink: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\treturn link.replace(\n\t\t/<([^>]+)>/gi,\n\t\t(match) => `<${rewriteUrl(match, context, meta)}>`\n\t);\n}\n\nexport async function rewriteHeaders(\n\thandler: ScramjetFetchHandler,\n\trequest: ScramjetFetchRequest,\n\tparsed: ScramjetFetchParsed,\n\trawHeaders: RawHeaders\n): Promise<ScramjetHeaders> {\n\tconst headers = ScramjetHeaders.fromRawHeaders(rawHeaders);\n\n\tfor (const cspHeader of SEC_HEADERS) {\n\t\theaders.delete(cspHeader);\n\t}\n\n\tfor (const urlHeader of URL_HEADERS) {\n\t\tif (headers.has(urlHeader)) {\n\t\t\tlet url = headers.get(urlHeader)!;\n\t\t\tlet rewrittenUrl = rewriteUrl(url, handler.context, parsed.meta);\n\t\t\theaders.set(urlHeader, rewrittenUrl);\n\t\t}\n\t}\n\n\tif (headers.has(\"link\")) {\n\t\tlet link = headers.get(\"link\")!;\n\t\tlet rewritten = rewriteLinkHeader(link, handler.context, parsed.meta);\n\t\theaders.set(\"link\", rewritten);\n\t}\n\n\t// Emulate the referrer policy to set it back to what it should've been without Force Referrer in place\n\tif (typeof headers[\"referer\"] === \"string\") {\n\t\tconst referrerUrl = new URL(headers[\"referer\"]);\n\t\t// const storedPolicyData = await getReferrerPolicy(referrerUrl.href);\n\t\t// if (storedPolicyData) {\n\t\t// \tconst storedReferrerPolicy = storedPolicyData.policy\n\t\t// \t\t.toLowerCase()\n\t\t// \t\t.split(\",\")\n\t\t// \t\t.map((rawDir) => rawDir.trim());\n\t\t// \tif (\n\t\t// \t\tstoredReferrerPolicy.includes(\"no-referrer\") ||\n\t\t// \t\t(storedReferrerPolicy.includes(\"no-referrer-when-downgrade\") &&\n\t\t// \t\t\tparsed.meta.origin.protocol === \"http:\" &&\n\t\t// \t\t\treferrerUrl.protocol === \"https:\")\n\t\t// \t) {\n\t\t// \t\tdelete headers[\"referer\"];\n\t\t// \t} else if (storedReferrerPolicy.includes(\"origin\")) {\n\t\t// \t\theaders[\"referer\"] = referrerUrl.origin;\n\t\t// \t} else if (storedReferrerPolicy.includes(\"origin-when-cross-origin\")) {\n\t\t// \t\tif (referrerUrl.origin !== parsed.meta.origin.origin) {\n\t\t// \t\t\theaders[\"referer\"] = referrerUrl.origin;\n\t\t// \t\t} else {\n\t\t// \t\t\theaders[\"referer\"] = referrerUrl.href;\n\t\t// \t\t}\n\t\t// \t} else if (storedReferrerPolicy.includes(\"same-origin\")) {\n\t\t// \t\tif (referrerUrl.origin === parsed.meta.origin.origin) {\n\t\t// \t\t\theaders[\"referer\"] = referrerUrl.href;\n\t\t// \t\t} else {\n\t\t// \t\t\tdelete headers[\"referer\"];\n\t\t// \t\t}\n\t\t// \t} else if (storedReferrerPolicy.includes(\"strict-origin\")) {\n\t\t// \t\tif (\n\t\t// \t\t\tparsed.meta.origin.protocol === \"http:\" &&\n\t\t// \t\t\treferrerUrl.protocol === \"https:\"\n\t\t// \t\t) {\n\t\t// \t\t\tdelete headers[\"referer\"];\n\t\t// \t\t} else {\n\t\t// \t\t\theaders[\"referer\"] = referrerUrl.origin;\n\t\t// \t\t}\n\t\t// \t}\n\t\t// \t// `strict-origin-when-cross-origin` is the default behavior anyway\n\t\t// \telse {\n\t\tif (referrerUrl.origin === parsed.meta.origin.origin) {\n\t\t\theaders[\"referer\"] = referrerUrl.href;\n\t\t} else if (\n\t\t\tparsed.meta.origin.protocol === \"http:\" &&\n\t\t\treferrerUrl.protocol === \"https:\"\n\t\t) {\n\t\t\tdelete headers[\"referer\"];\n\t\t} else {\n\t\t\theaders[\"referer\"] = referrerUrl.origin;\n\t\t}\n\t\t// }\n\t\t// }\n\t}\n\tif (headers.has(\"sec-fetch-dest\") && headers.get(\"sec-fetch-dest\") === \"\") {\n\t\theaders[\"sec-fetch-dest\"] = \"empty\";\n\t}\n\n\tif (\n\t\theaders.has(\"sec-fetch-site\") &&\n\t\theaders.get(\"sec-fetch-site\") !== \"none\"\n\t) {\n\t\tif (headers.has(\"referer\")) {\n\t\t\t// headers[\"sec-fetch-site\"] = await getSiteDirective(\n\t\t\t// \tmeta,\n\t\t\t// \tnew URL(headers[\"referer\"]),\n\t\t\t// \tclient\n\t\t\t// );\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t\"Missing referrer header; can't rewrite sec-fetch-site properly. Falling back to unsafe deletion.\"\n\t\t\t);\n\t\t\theaders.delete(\"sec-fetch-site\");\n\t\t}\n\t}\n\n\t// const isNavigationRequest =\n\t// \tcontext.mode === \"navigate\" &&\n\t// \t[\"document\", \"iframe\"].includes(context.destination);\n\n\t// Store referrer policy from navigation responses for Force Referrer\n\t// if (isNavigationRequest && headers[\"referrer-policy\"] && context.referrer) {\n\t// \tawait storeReferrerPolicy(\n\t// \t\tparsed.url.href,\n\t// \t\theaders[\"referrer-policy\"],\n\t// \t\tcontext.referrer\n\t// \t);\n\t// }\n\n\tif (headers.get(\"accept\") === \"text/event-stream\") {\n\t\theaders.set(\"content-type\", \"text/event-stream\");\n\t}\n\n\t// scramjet runtime can use features that permissions-policy blocks\n\theaders.delete(\"permissions-policy\");\n\n\tif (\n\t\thandler.crossOriginIsolated &&\n\t\t[\n\t\t\t\"document\",\n\t\t\t\"iframe\",\n\t\t\t\"worker\",\n\t\t\t\"sharedworker\",\n\t\t\t\"style\",\n\t\t\t\"script\",\n\t\t].includes(request.destination)\n\t) {\n\t\theaders.set(\"Cross-Origin-Embedder-Policy\", \"require-corp\");\n\t\theaders.set(\"Cross-Origin-Opener-Policy\", \"same-origin\");\n\t}\n\n\treturn headers;\n}\n\nasync function rewriteBody(\n\thandler: ScramjetFetchHandler,\n\trequest: ScramjetFetchRequest,\n\tparsed: ScramjetFetchParsed,\n\tresponse: BareResponse\n): Promise<BodyType> {\n\tswitch (request.destination) {\n\t\tcase \"iframe\":\n\t\tcase \"document\":\n\t\t\tif (response.headers.get(\"content-type\")?.startsWith(\"text/html\")) {\n\t\t\t\t// note from percs: i think this has the potential to be slow asf, but for right now its fine (we should probably look for a better solution)\n\t\t\t\t// another note from percs: regex seems to be broken, gonna comment this out\n\t\t\t\t/*\n        const buf = await response.arrayBuffer();\n        const decode = new TextDecoder(\"utf-8\").decode(buf);\n        const charsetHeader = response.headers.get(\"content-type\");\n        const charset =\n          charsetHeader?.split(\"charset=\")[1] ||\n          decode.match(/charset=([^\"]+)/)?.[1] ||\n          \"utf-8\";\n        const htmlContent = charset\n          ? new TextDecoder(charset).decode(buf)\n          : decode;\n        */\n\t\t\t\treturn rewriteHtml(\n\t\t\t\t\tawait response.text(),\n\t\t\t\t\thandler.context,\n\t\t\t\t\tparsed.meta,\n\t\t\t\t\ttrue,\n\t\t\t\t\t(domhandler) => {\n\t\t\t\t\t\tconst evt = new ScramjetHTMLPreRewriteEvent(\n\t\t\t\t\t\t\tdomhandler,\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\tparsed\n\t\t\t\t\t\t);\n\t\t\t\t\t\thandler.dispatchEvent(evt);\n\t\t\t\t\t},\n\t\t\t\t\t(domhandler) => {\n\t\t\t\t\t\tconst evt = new ScramjetHTMLPostRewriteEvent(\n\t\t\t\t\t\t\tdomhandler,\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\tparsed\n\t\t\t\t\t\t);\n\t\t\t\t\t\thandler.dispatchEvent(evt);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn response.body;\n\t\t\t}\n\t\tcase \"script\": {\n\t\t\treturn rewriteJs(\n\t\t\t\tnew Uint8Array(await response.arrayBuffer()),\n\t\t\t\tresponse.url,\n\t\t\t\thandler.context,\n\t\t\t\tparsed.meta,\n\t\t\t\tparsed.scriptType === \"module\"\n\t\t\t) as unknown as ArrayBuffer;\n\t\t}\n\t\tcase \"style\":\n\t\t\treturn rewriteCss(await response.text(), handler.context, parsed.meta);\n\t\tcase \"sharedworker\":\n\t\tcase \"worker\":\n\t\t\treturn rewriteWorkers(\n\t\t\t\thandler.context,\n\t\t\t\tnew Uint8Array(await response.arrayBuffer()),\n\t\t\t\t// TODO: this takes a scriptType and rewritejs takes a bool..\n\t\t\t\tparsed.scriptType,\n\t\t\t\tresponse.url,\n\t\t\t\tparsed.meta\n\t\t\t);\n\t\tdefault:\n\t\t\treturn response.body;\n\t}\n}\n\ntype BodyType = string | ArrayBuffer | Blob | ReadableStream<any>;\n\nexport class ScramjetHTMLPreRewriteEvent extends Event {\n\tconstructor(\n\t\tpublic handler: DomHandler,\n\t\tpublic context: ScramjetFetchRequest,\n\t\tpublic parsed: ScramjetFetchParsed\n\t) {\n\t\tsuper(\"htmlPreRewrite\");\n\t}\n}\n\nexport class ScramjetHTMLPostRewriteEvent extends Event {\n\tconstructor(\n\t\tpublic handler: DomHandler,\n\t\tpublic context: ScramjetFetchRequest,\n\t\tpublic parsed: ScramjetFetchParsed\n\t) {\n\t\tsuper(\"htmlPostRewrite\");\n\t}\n}\n\nexport class ScramjetResponseEvent extends Event {\n\t_response?: ScramjetFetchResponse | Promise<ScramjetFetchResponse>;\n\tconstructor(\n\t\tpublic context: ScramjetFetchRequest,\n\t\tpublic parsed: ScramjetFetchParsed,\n\t\tpublic response: ScramjetFetchResponse\n\t) {\n\t\tsuper(\"handleResponse\");\n\t}\n\trespondWith(\n\t\tresponse: ScramjetFetchResponse | Promise<ScramjetFetchResponse>\n\t) {\n\t\tthis._response = response;\n\t}\n}\n\nexport class ScramjetRequestEvent extends Event {\n\t_response?:\n\t\t| BareResponse\n\t\t| Promise<BareResponse>\n\t\t| Response\n\t\t| Promise<Response>;\n\tconstructor(\n\t\tpublic context: ScramjetFetchRequest,\n\t\tpublic url: URL,\n\t\tpublic parsed: ScramjetFetchParsed,\n\t\tpublic init: BareRequestInit,\n\t\tpublic client: BareCompatibleClient\n\t) {\n\t\tsuper(\"request\");\n\t}\n\trespondWith(response: BareResponse | Promise<BareResponse>) {\n\t\tthis._response = response;\n\t}\n}\n","// import { flagEnabled } from \"@/shared\";\nimport type { URLMeta } from \"@rewriters/url\";\n\nconst logfuncs = {\n\tlog: console.log,\n\twarn: console.warn,\n\terror: console.error,\n\tdebug: console.debug,\n\tinfo: console.info,\n};\n\nexport default {\n\tfmt: function (severity: string, message: string, ...args: any[]) {\n\t\tconst old = Error.prepareStackTrace;\n\n\t\tError.prepareStackTrace = (_, stack) => {\n\t\t\tstack.shift(); // stack();\n\t\t\tstack.shift(); // fmt();\n\t\t\tstack.shift();\n\n\t\t\tlet fmt = \"\";\n\t\t\tfor (let i = 1; i < Math.min(2, stack.length); i++) {\n\t\t\t\tif (stack[i].getFunctionName()) {\n\t\t\t\t\t// const f = stack[i].getThis()?.constructor?.name;\n\t\t\t\t\t// if (f) fmt += `${f}.`\n\t\t\t\t\tfmt += `${stack[i].getFunctionName()} -> ` + fmt;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt += stack[0].getFunctionName() || \"Anonymous\";\n\n\t\t\treturn fmt;\n\t\t};\n\n\t\tconst fmt = (function stack() {\n\t\t\ttry {\n\t\t\t\tthrow new Error();\n\t\t\t} catch (e) {\n\t\t\t\treturn e.stack;\n\t\t\t}\n\t\t})();\n\n\t\tError.prepareStackTrace = old;\n\n\t\tthis.print(severity, fmt, message, ...args);\n\t},\n\tprint(severity: string, tag: string, message: string, ...args: any[]) {\n\t\tconst fn = logfuncs[severity] || logfuncs.log;\n\t\tconst bg = {\n\t\t\tlog: \"#000\",\n\t\t\twarn: \"#f80\",\n\t\t\terror: \"#f00\",\n\t\t\tdebug: \"transparent\",\n\t\t}[severity];\n\t\tconst fg = {\n\t\t\tlog: \"#fff\",\n\t\t\twarn: \"#fff\",\n\t\t\terror: \"#fff\",\n\t\t\tdebug: \"gray\",\n\t\t}[severity];\n\t\tconst padding = {\n\t\t\tlog: 2,\n\t\t\twarn: 4,\n\t\t\terror: 4,\n\t\t\tdebug: 0,\n\t\t}[severity];\n\n\t\tfn(\n\t\t\t`%c${tag}%c ${message}`,\n\t\t\t`\n  \tbackground-color: ${bg};\n  \tcolor: ${fg};\n  \tpadding: ${padding}px;\n  \tfont-weight: bold;\n  \tfont-family: monospace;\n  \tfont-size: 0.9em;\n  `,\n\t\t\t`${severity === \"debug\" ? \"color: gray\" : \"\"}`,\n\t\t\t...args\n\t\t);\n\t},\n\tlog: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"log\", message, ...args);\n\t},\n\twarn: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"warn\", message, ...args);\n\t},\n\terror: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"error\", message, ...args);\n\t},\n\tdebug: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"debug\", message, ...args);\n\t},\n\ttime(meta: URLMeta, before: number, type: string) {\n\t\tif (1) return;\n\t\tconst after = performance.now();\n\t\tconst duration = after - before;\n\n\t\tlet timespan: string;\n\t\tif (duration < 1) {\n\t\t\ttimespan = \"BLAZINGLY FAST\";\n\t\t} else if (duration < 500) {\n\t\t\ttimespan = \"decent speed\";\n\t\t} else {\n\t\t\ttimespan = \"really slow\";\n\t\t}\n\t\tthis.print(\n\t\t\t\"debug\",\n\t\t\t\"[time]\",\n\t\t\t`${type} was ${timespan} (${duration.toFixed(2)}ms)`\n\t\t);\n\t},\n};\n","// thnank you node unblocker guy\nimport parse from \"set-cookie-parser\";\n\nexport type Cookie = {\n\tname: string;\n\tvalue: string;\n\tpath?: string;\n\texpires?: string;\n\tmaxAge?: number;\n\tdomain?: string;\n\tsecure?: boolean;\n\thttpOnly?: boolean;\n\tsameSite?: \"strict\" | \"lax\" | \"none\";\n};\n\nexport class CookieJar {\n\tprivate cookies: Record<string, Cookie> = {};\n\n\tsetCookies(cookies: string[], url: URL) {\n\t\tfor (const str of cookies) {\n\t\t\tconst parsed = parse(str, {\n\t\t\t\t// this will fuck stuff up if you set it to true\n\t\t\t\tdecodeValues: false,\n\t\t\t});\n\t\t\tconst domain = parsed.domain;\n\t\t\tconst sameSite = parsed.sameSite;\n\t\t\tconst cookie: Cookie = {\n\t\t\t\tdomain,\n\t\t\t\tsameSite,\n\t\t\t\t...parsed[0],\n\t\t\t};\n\n\t\t\tif (!cookie.domain) cookie.domain = \".\" + url.hostname;\n\t\t\tif (!cookie.domain.startsWith(\".\")) cookie.domain = \".\" + cookie.domain;\n\t\t\tif (!cookie.path) cookie.path = \"/\";\n\t\t\tif (!cookie.sameSite) cookie.sameSite = \"lax\";\n\t\t\tif (cookie.expires) cookie.expires = cookie.expires.toString();\n\n\t\t\tconst id = `${cookie.domain}@${cookie.path}@${cookie.name}`;\n\t\t\tthis.cookies[id] = cookie;\n\t\t}\n\t}\n\n\tgetCookies(url: URL, fromJs: boolean): string {\n\t\tconst now = new Date();\n\t\tconst cookies = Object.values(this.cookies);\n\n\t\tconst validCookies: Cookie[] = [];\n\n\t\tfor (const cookie of cookies) {\n\t\t\tif (cookie.expires && new Date(cookie.expires) < now) {\n\t\t\t\tdelete this.cookies[`${cookie.domain}@${cookie.path}@${cookie.name}`];\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (cookie.secure && url.protocol !== \"https:\") continue;\n\t\t\tif (cookie.httpOnly && fromJs) continue;\n\t\t\tif (!url.pathname.startsWith(cookie.path)) continue;\n\n\t\t\tif (cookie.domain.startsWith(\".\")) {\n\t\t\t\tif (!url.hostname.endsWith(cookie.domain.slice(1))) continue;\n\t\t\t}\n\n\t\t\tvalidCookies.push(cookie);\n\t\t}\n\n\t\treturn validCookies\n\t\t\t.map((cookie) => `${cookie.name}=${cookie.value}`)\n\t\t\t.join(\"; \");\n\t}\n\n\tload(cookies: string) {\n\t\tif (typeof cookies === \"object\") return cookies;\n\t\tthis.cookies = JSON.parse(cookies);\n\t}\n\n\tdump(): string {\n\t\treturn JSON.stringify(this.cookies);\n\t}\n}\n","import { RawHeaders } from \"@mercuryworkshop/proxy-transports\";\n\nexport class ScramjetHeaders {\n\theaders = {};\n\n\tset(key: string, v: string) {\n\t\tthis.headers[key.toLowerCase()] = v;\n\t}\n\n\tget(key: string): string | null {\n\t\tconst lk = key.toLowerCase();\n\t\tif (lk in this.headers) {\n\t\t\treturn this.headers[lk];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tdelete(key: string) {\n\t\tdelete this.headers[key.toLowerCase()];\n\t}\n\n\thas(key: string): boolean {\n\t\treturn key.toLowerCase() in this.headers;\n\t}\n\n\ttoRawHeaders(): RawHeaders {\n\t\tconst raw: RawHeaders = [];\n\t\tfor (const k in this.headers) {\n\t\t\traw.push([k, this.headers[k]]);\n\t\t}\n\n\t\treturn raw;\n\t}\n\n\ttoNativeHeaders(): Headers {\n\t\tconst native = new Headers();\n\t\tfor (const k in this.headers) {\n\t\t\tnative.set(k, this.headers[k]);\n\t\t}\n\n\t\treturn native;\n\t}\n\n\tstatic fromRawHeaders(raw: RawHeaders): ScramjetHeaders {\n\t\tconst h = new ScramjetHeaders();\n\t\tfor (const [k, v] of raw) {\n\t\t\tif (h.has(k)) {\n\t\t\t\t// console.debug(\n\t\t\t\t// \t`Duplicate header \"${k}\" found in raw headers, overwriting previous value.`\n\t\t\t\t// );\n\t\t\t}\n\t\t\th.set(k, v);\n\t\t}\n\n\t\treturn h;\n\t}\n\n\tstatic fromNativeHeaders(native: Headers): ScramjetHeaders {\n\t\tconst h = new ScramjetHeaders();\n\t\tfor (const [k, v] of native.entries()) {\n\t\t\th.set(k, v);\n\t\t}\n\n\t\treturn h;\n\t}\n\n\tclone(): ScramjetHeaders {\n\t\tconst newh = new ScramjetHeaders();\n\t\tfor (const k in this.headers) {\n\t\t\tnewh.set(k, this.headers[k]);\n\t\t}\n\n\t\treturn newh;\n\t}\n}\n","import { CookieJar } from \"@/shared/cookie\";\nimport { rewriteCss } from \"@rewriters/css\";\nimport { rewriteHtml, rewriteSrcset } from \"@rewriters/html\";\nimport { rewriteUrl, unrewriteBlob, URLMeta } from \"@rewriters/url\";\nimport { ScramjetContext } from \"@/shared\";\n\nexport const htmlRules: {\n\t[key: string]: \"*\" | string[] | ((...any: any[]) => string | null);\n\tfn: (value: string, context: ScramjetContext, meta: URLMeta) => string | null;\n}[] = [\n\t{\n\t\tfn: (value, context, meta) => {\n\t\t\treturn rewriteUrl(value, context, meta);\n\t\t},\n\n\t\t// url rewrites\n\t\tsrc: [\"embed\", \"script\", \"img\", \"frame\", \"source\", \"input\", \"track\"],\n\t\thref: [\"a\", \"link\", \"area\", \"use\", \"image\"],\n\t\tdata: [\"object\"],\n\t\taction: [\"form\"],\n\t\tformaction: [\"button\", \"input\", \"textarea\", \"submit\"],\n\t\tposter: [\"video\"],\n\t\t\"xlink:href\": [\"image\"],\n\t},\n\t{\n\t\tfn: (value, context, meta) => {\n\t\t\tlet url = rewriteUrl(value, context, meta);\n\t\t\t// if (meta.topFrameName)\n\t\t\t// \turl += `?topFrame=${meta.topFrameName}&parentFrame=${meta.parentFrameName}`;\n\n\t\t\treturn url;\n\t\t},\n\t\tsrc: [\"iframe\"],\n\t},\n\t{\n\t\t// is this a good idea?\n\t\tfn: (value, context, meta) => {\n\t\t\treturn null;\n\t\t},\n\t\tsandbox: [\"iframe\"],\n\t},\n\t{\n\t\tfn: (value, context, meta) => {\n\t\t\tif (value.startsWith(\"blob:\")) {\n\t\t\t\t// for media elements specifically they must take the original blob\n\t\t\t\t// because they can't be fetch'd\n\t\t\t\treturn unrewriteBlob(value, context, meta);\n\t\t\t}\n\n\t\t\treturn rewriteUrl(value, context, meta);\n\t\t},\n\t\tsrc: [\"video\", \"audio\"],\n\t},\n\t{\n\t\tfn: () => \"\",\n\n\t\tintegrity: [\"script\", \"link\"],\n\t},\n\t{\n\t\tfn: () => null,\n\n\t\t// csp stuff that must be deleted\n\t\tnonce: \"*\",\n\t\tcsp: [\"iframe\"],\n\t\tcredentialless: [\"iframe\"],\n\t},\n\t{\n\t\tfn: (value, context, meta) => rewriteSrcset(value, context, meta),\n\n\t\t// srcset\n\t\tsrcset: [\"img\", \"source\"],\n\t\timagesrcset: [\"link\"],\n\t},\n\t{\n\t\tfn: (value, context, meta) =>\n\t\t\trewriteHtml(\n\t\t\t\tvalue,\n\t\t\t\tcontext,\n\t\t\t\t{\n\t\t\t\t\t// for srcdoc origin is the origin of the page that the iframe is on. base and path get dropped\n\t\t\t\t\torigin: new URL(meta.origin.origin),\n\t\t\t\t\tbase: new URL(meta.origin.origin),\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t),\n\n\t\t// srcdoc\n\t\tsrcdoc: [\"iframe\"],\n\t},\n\t{\n\t\tfn: (value, context, meta) => rewriteCss(value, context, meta),\n\t\tstyle: \"*\",\n\t},\n\t{\n\t\tfn: (value, context, meta) => {\n\t\t\tif (value === \"_top\" || value === \"_unfencedTop\")\n\t\t\t\treturn meta.topFrameName;\n\t\t\telse if (value === \"_parent\") return meta.parentFrameName;\n\t\t\telse return value;\n\t\t},\n\t\ttarget: [\"a\", \"base\"],\n\t},\n];\n","import { ScramjetConfig, ScramjetFlags, ScramjetVersionInfo } from \"@/types\";\nimport DomHandler, { Element } from \"domhandler\";\nimport { URLMeta } from \"@rewriters/url\";\nimport { CookieJar } from \"./cookie\";\n\nexport * from \"./cookie\";\nexport * from \"./headers\";\nexport * from \"./htmlRules\";\nexport * from \"./rewriters\";\nexport * from \"./security\";\n\nexport function flagEnabled(\n\tflag: keyof ScramjetFlags,\n\tcontext: ScramjetContext,\n\turl: URL\n): boolean {\n\tconst value = context.config.flags[flag];\n\tfor (const regex in context.config.siteFlags) {\n\t\tconst partialflags = context.config.siteFlags[regex];\n\t\tif (new RegExp(regex).test(url.href) && flag in partialflags) {\n\t\t\treturn partialflags[flag];\n\t\t}\n\t}\n\n\treturn value;\n}\nexport type ScramjetInterface = {\n\tcodecEncode: (input: string) => string;\n\tcodecDecode: (input: string) => string;\n\n\tgetInjectScripts(\n\t\tmeta: URLMeta,\n\t\thandler: DomHandler,\n\t\tscript: (src: string) => Element\n\t): Element[];\n\tgetWorkerInjectScripts?(\n\t\tmeta: URLMeta,\n\t\ttype: \"module\" | \"regular\",\n\t\tscript: (src: string) => string\n\t): string;\n};\n\nexport type ScramjetContext = {\n\tconfig: ScramjetConfig;\n\tprefix: URL;\n\tinterface: ScramjetInterface;\n\tcookieJar: CookieJar;\n};\n\nexport const versionInfo: ScramjetVersionInfo = {\n\tversion: VERSION,\n\tbuild: COMMITHASH,\n\tdate: BUILDDATE,\n};\n","import { URLMeta, rewriteUrl, unrewriteUrl } from \"@rewriters/url\";\nimport { ScramjetContext } from \"@/shared\";\n\nexport function rewriteCss(\n\tcss: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\treturn handleCss(\"rewrite\", css, context, meta);\n}\n\nexport function unrewriteCss(css: string) {\n\treturn handleCss(\"unrewrite\", css);\n}\n\nfunction handleCss(\n\ttype: \"rewrite\" | \"unrewrite\",\n\tcss: string,\n\tcontext?: ScramjetContext,\n\tmeta?: URLMeta\n) {\n\t// regex from vk6 (https://github.com/ading2210)\n\tconst urlRegex = /url\\(['\"]?(.+?)['\"]?\\)/gm;\n\tconst Atruleregex =\n\t\t/@import\\s+(url\\s*?\\(.{0,9999}?\\)|['\"].{0,9999}?['\"]|.{0,9999}?)($|\\s|;)/gm;\n\tcss = new String(css).toString();\n\tcss = css.replace(urlRegex, (match, url) => {\n\t\tconst encodedUrl =\n\t\t\ttype === \"rewrite\"\n\t\t\t\t? rewriteUrl(url.trim(), context, meta)\n\t\t\t\t: unrewriteUrl(url.trim(), context);\n\n\t\treturn match.replace(url, encodedUrl);\n\t});\n\tcss = css.replace(Atruleregex, (match, importStatement) => {\n\t\treturn match.replace(\n\t\t\timportStatement,\n\t\t\timportStatement.replace(\n\t\t\t\t/^(url\\(['\"]?|['\"]|)(.+?)(['\"]|['\"]?\\)|)$/gm,\n\t\t\t\t(match, firstQuote, url, endQuote) => {\n\t\t\t\t\tif (firstQuote.startsWith(\"url\")) {\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t}\n\t\t\t\t\tconst encodedUrl =\n\t\t\t\t\t\ttype === \"rewrite\"\n\t\t\t\t\t\t\t? rewriteUrl(url.trim(), context, meta)\n\t\t\t\t\t\t\t: unrewriteUrl(url.trim(), context);\n\n\t\t\t\t\treturn `${firstQuote}${encodedUrl}${endQuote}`;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t});\n\n\treturn css;\n}\n","import { ElementType, Handler, Parser } from \"htmlparser2\";\nimport { ChildNode, DomHandler, Element, Comment } from \"domhandler\";\nimport render from \"dom-serializer\";\nimport { URLMeta, rewriteUrl } from \"@rewriters/url\";\nimport { rewriteCss } from \"@rewriters/css\";\nimport { rewriteJs } from \"@rewriters/js\";\nimport { CookieJar } from \"@/shared/cookie\";\nimport { ScramjetContext } from \"@/shared\";\nimport { htmlRules } from \"@/shared/htmlRules\";\n\nconst encoder = new TextEncoder();\nfunction rewriteHtmlInner(\n\thtml: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta,\n\tfromTop: boolean = false,\n\tpreRewrite?: (handler: DomHandler) => void,\n\tpostRewrite?: (handler: DomHandler) => void\n) {\n\tconst handler = new DomHandler((err, dom) => dom);\n\tconst parser = new Parser(handler);\n\n\tparser.write(html);\n\tparser.end();\n\tif (preRewrite) preRewrite(handler);\n\ttraverseParsedHtml(handler.root, context, meta);\n\n\tlet htmlRoot: Element | undefined;\n\tlet headElement: Element | undefined;\n\tlet bodyElement: Element | undefined;\n\n\tfunction detectQuirks() {\n\t\tfor (const child of handler.root.childNodes) {\n\t\t\tif (\n\t\t\t\tchild.type === ElementType.Directive ||\n\t\t\t\tchild.type === ElementType.Comment ||\n\t\t\t\tchild.type === ElementType.Text\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (child.type === ElementType.Tag && child.name === \"html\") {\n\t\t\t\thtmlRoot = child as Element;\n\t\t\t} else {\n\t\t\t\t// there's a child of the root that isn't an html element or a doctype/comment/text\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!htmlRoot) return true; // no html tag or it's somewhere else other than first child\n\n\t\tfor (const child of htmlRoot.childNodes) {\n\t\t\tif (\n\t\t\t\tchild.type === ElementType.Directive ||\n\t\t\t\tchild.type === ElementType.Comment ||\n\t\t\t\tchild.type === ElementType.Text\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (child.type === ElementType.Tag && child.name === \"head\") {\n\t\t\t\tif (bodyElement) {\n\t\t\t\t\t// head comes after body\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\theadElement = child as Element;\n\t\t\t} else if (child.type === ElementType.Tag && child.name === \"body\") {\n\t\t\t\tbodyElement = child as Element;\n\t\t\t} else {\n\t\t\t\t// there's a child of html that isn't head or body\n\t\t\t\t// fine if head already exists, bad if it doesn't\n\t\t\t\tif (!headElement) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tlet isQuirky = detectQuirks();\n\n\tif (fromTop) {\n\t\tconst script = (src: string) => new Element(\"script\", { src });\n\t\tconst injectScripts = context.interface.getInjectScripts(\n\t\t\tmeta,\n\t\t\thandler,\n\t\t\tscript\n\t\t);\n\n\t\tif (isQuirky) {\n\t\t\tdbg.warn(\n\t\t\t\t`detected quirky document structure parsing @ ${meta.origin.href}!`\n\t\t\t);\n\t\t\t// there's weird stuff going on with the document that could result in page scripts being loaded before our inject scripts\n\t\t\t// so inject them at position 0\n\t\t\thandler.root.children.unshift(...injectScripts);\n\t\t} else {\n\t\t\tif (!headElement) {\n\t\t\t\theadElement = new Element(\"head\", {}, []);\n\t\t\t\thtmlRoot.children.unshift(headElement);\n\t\t\t}\n\n\t\t\theadElement.children.unshift(...injectScripts);\n\t\t}\n\t}\n\n\tif (postRewrite) postRewrite(handler);\n\n\treturn render(handler.root, {\n\t\tencodeEntities: \"utf8\",\n\t\tdecodeEntities: false,\n\t});\n}\n\nexport function rewriteHtml(\n\thtml: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta,\n\tfromTop: boolean = false,\n\tpreRewrite?: (handler: DomHandler) => void,\n\tpostRewrite?: (handler: DomHandler) => void\n) {\n\tconst before = performance.now();\n\tconst ret = rewriteHtmlInner(\n\t\thtml,\n\t\tcontext,\n\t\tmeta,\n\t\tfromTop,\n\t\tpreRewrite,\n\t\tpostRewrite\n\t);\n\tdbg.time(meta, before, \"html rewrite\");\n\n\treturn ret;\n}\n\n// type ParseState = {\n// \tbase: string;\n// \torigin?: URL;\n// };\n\nexport function unrewriteHtml(html: string) {\n\tconst handler = new DomHandler((err, dom) => dom);\n\tconst parser = new Parser(handler);\n\n\tparser.write(html);\n\tparser.end();\n\n\tfunction traverse(node: ChildNode) {\n\t\tif (\"attribs\" in node) {\n\t\t\tfor (const key in node.attribs) {\n\t\t\t\tif (key == \"scramjet-attr-script-source-src\") {\n\t\t\t\t\tif (node.children[0] && \"data\" in node.children[0])\n\t\t\t\t\t\tnode.children[0].data = atob(node.attribs[key]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (key.startsWith(\"scramjet-attr-\")) {\n\t\t\t\t\tnode.attribs[key.slice(\"scramjet-attr-\".length)] = node.attribs[key];\n\t\t\t\t\tdelete node.attribs[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\"childNodes\" in node) {\n\t\t\tfor (const child of node.childNodes) {\n\t\t\t\ttraverse(child);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverse(handler.root);\n\n\treturn render(handler.root, {\n\t\tdecodeEntities: false,\n\t});\n}\n\n// i need to add the attributes in during rewriting\n\nfunction traverseParsedHtml(\n\tnode: any,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\tif (node.name === \"base\" && node.attribs.href !== undefined) {\n\t\tmeta.base = new URL(node.attribs.href, meta.origin);\n\t}\n\n\tif (node.attribs) {\n\t\tfor (const rule of htmlRules) {\n\t\t\tfor (const attr in rule) {\n\t\t\t\tconst sel = rule[attr.toLowerCase()];\n\t\t\t\tif (typeof sel === \"function\") continue;\n\n\t\t\t\tif (sel === \"*\" || sel.includes(node.name)) {\n\t\t\t\t\tif (node.attribs[attr] !== undefined) {\n\t\t\t\t\t\tconst value = node.attribs[attr];\n\t\t\t\t\t\tconst v = rule.fn(value, context, meta);\n\n\t\t\t\t\t\tif (v === null) delete node.attribs[attr];\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnode.attribs[attr] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.attribs[`scramjet-attr-${attr}`] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const [attr, value] of Object.entries(node.attribs)) {\n\t\t\tif (eventAttributes.includes(attr)) {\n\t\t\t\tnode.attribs[`scramjet-attr-${attr}`] = value;\n\t\t\t\tnode.attribs[attr] = rewriteJs(\n\t\t\t\t\tvalue as string,\n\t\t\t\t\t`(inline ${attr} on element)`,\n\t\t\t\t\tcontext,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (node.name === \"style\" && node.children[0] !== undefined)\n\t\tnode.children[0].data = rewriteCss(node.children[0].data, context, meta);\n\n\tif (\n\t\tnode.name === \"script\" &&\n\t\tnode.attribs.type === \"module\" &&\n\t\tnode.attribs.src\n\t)\n\t\tnode.attribs.src = node.attribs.src + \"?type=module\";\n\n\tif (\n\t\tnode.name === \"script\" &&\n\t\tnode.attribs.type === \"importmap\" &&\n\t\tnode.children[0] !== undefined\n\t) {\n\t\tlet json = node.children[0].data;\n\t\ttry {\n\t\t\tconst map = JSON.parse(json);\n\t\t\tif (map.imports) {\n\t\t\t\tfor (const key in map.imports) {\n\t\t\t\t\tlet url = map.imports[key];\n\t\t\t\t\tif (typeof url === \"string\") {\n\t\t\t\t\t\turl = rewriteUrl(url, context, meta);\n\t\t\t\t\t\tmap.imports[key] = url;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.children[0].data = JSON.stringify(map);\n\t\t} catch (e) {\n\t\t\tconsole.error(\"Failed to parse importmap JSON:\", e);\n\t\t}\n\t}\n\tif (\n\t\tnode.name === \"script\" &&\n\t\t/(application|text)\\/javascript|module|undefined/.test(node.attribs.type) &&\n\t\tnode.children[0] !== undefined\n\t) {\n\t\tlet js = node.children[0].data;\n\t\tconst module = node.attribs.type === \"module\" ? true : false;\n\t\tnode.attribs[\"scramjet-attr-script-source-src\"] = bytesToBase64(\n\t\t\tencoder.encode(js)\n\t\t);\n\t\tconst htmlcomment = /<!--[\\s\\S]*?-->/g;\n\t\tjs = js.replace(htmlcomment, \"\");\n\t\tnode.children[0].data = rewriteJs(\n\t\t\tjs,\n\t\t\t\"(inline script element)\",\n\t\t\tcontext,\n\t\t\tmeta,\n\t\t\tmodule\n\t\t);\n\t}\n\n\tif (node.name === \"meta\" && node.attribs[\"http-equiv\"] !== undefined) {\n\t\tif (\n\t\t\tnode.attribs[\"http-equiv\"].toLowerCase() === \"content-security-policy\"\n\t\t) {\n\t\t\t// just delete it. this needs to be emulated eventually but like\n\t\t\tnode = new Comment(node.attribs.content);\n\t\t} else if (\n\t\t\tnode.attribs[\"http-equiv\"] === \"refresh\" &&\n\t\t\tnode.attribs.content.includes(\"url\")\n\t\t) {\n\t\t\tconst contentArray = node.attribs.content.split(\"url=\");\n\t\t\tif (contentArray[1])\n\t\t\t\tcontentArray[1] = rewriteUrl(contentArray[1].trim(), context, meta);\n\t\t\tnode.attribs.content = contentArray.join(\"url=\");\n\t\t}\n\t}\n\n\tif (node.childNodes) {\n\t\tfor (const childNode in node.childNodes) {\n\t\t\tnode.childNodes[childNode] = traverseParsedHtml(\n\t\t\t\tnode.childNodes[childNode],\n\t\t\t\tcontext,\n\t\t\t\tmeta\n\t\t\t);\n\t\t}\n\t}\n\n\treturn node;\n}\n\nexport function rewriteSrcset(\n\tsrcset: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\tconst sources = srcset.split(/ .*,/).map((src) => src.trim());\n\tconst rewrittenSources = sources.map((source) => {\n\t\t// Split into URLs and descriptors (if any)\n\t\t// e.g. url0, url1 1.5x, url2 2x\n\t\tconst [url, ...descriptors] = source.split(/\\s+/);\n\n\t\t// Rewrite the URLs and keep the descriptors (if any)\n\t\tconst rewrittenUrl = rewriteUrl(url.trim(), context, meta);\n\n\t\treturn descriptors.length > 0\n\t\t\t? `${rewrittenUrl} ${descriptors.join(\" \")}`\n\t\t\t: rewrittenUrl;\n\t});\n\n\treturn rewrittenSources.join(\", \");\n}\n\n// function base64ToBytes(base64) {\n// \tconst binString = atob(base64);\n\n// \treturn Uint8Array.from(binString, (m) => m.codePointAt(0));\n// }\n\nfunction bytesToBase64(bytes: Uint8Array) {\n\tconst binString = Array.from(bytes, (byte) =>\n\t\tString.fromCodePoint(byte)\n\t).join(\"\");\n\n\treturn btoa(binString);\n}\nconst eventAttributes = [\n\t\"onbeforexrselect\",\n\t\"onabort\",\n\t\"onbeforeinput\",\n\t\"onbeforematch\",\n\t\"onbeforetoggle\",\n\t\"onblur\",\n\t\"oncancel\",\n\t\"oncanplay\",\n\t\"oncanplaythrough\",\n\t\"onchange\",\n\t\"onclick\",\n\t\"onclose\",\n\t\"oncontentvisibilityautostatechange\",\n\t\"oncontextlost\",\n\t\"oncontextmenu\",\n\t\"oncontextrestored\",\n\t\"oncuechange\",\n\t\"ondblclick\",\n\t\"ondrag\",\n\t\"ondragend\",\n\t\"ondragenter\",\n\t\"ondragleave\",\n\t\"ondragover\",\n\t\"ondragstart\",\n\t\"ondrop\",\n\t\"ondurationchange\",\n\t\"onemptied\",\n\t\"onended\",\n\t\"onerror\",\n\t\"onfocus\",\n\t\"onformdata\",\n\t\"oninput\",\n\t\"oninvalid\",\n\t\"onkeydown\",\n\t\"onkeypress\",\n\t\"onkeyup\",\n\t\"onload\",\n\t\"onloadeddata\",\n\t\"onloadedmetadata\",\n\t\"onloadstart\",\n\t\"onmousedown\",\n\t\"onmouseenter\",\n\t\"onmouseleave\",\n\t\"onmousemove\",\n\t\"onmouseout\",\n\t\"onmouseover\",\n\t\"onmouseup\",\n\t\"onmousewheel\",\n\t\"onpause\",\n\t\"onplay\",\n\t\"onplaying\",\n\t\"onprogress\",\n\t\"onratechange\",\n\t\"onreset\",\n\t\"onresize\",\n\t\"onscroll\",\n\t\"onsecuritypolicyviolation\",\n\t\"onseeked\",\n\t\"onseeking\",\n\t\"onselect\",\n\t\"onslotchange\",\n\t\"onstalled\",\n\t\"onsubmit\",\n\t\"onsuspend\",\n\t\"ontimeupdate\",\n\t\"ontoggle\",\n\t\"onvolumechange\",\n\t\"onwaiting\",\n\t\"onwebkitanimationend\",\n\t\"onwebkitanimationiteration\",\n\t\"onwebkitanimationstart\",\n\t\"onwebkittransitionend\",\n\t\"onwheel\",\n\t\"onauxclick\",\n\t\"ongotpointercapture\",\n\t\"onlostpointercapture\",\n\t\"onpointerdown\",\n\t\"onpointermove\",\n\t\"onpointerrawupdate\",\n\t\"onpointerup\",\n\t\"onpointercancel\",\n\t\"onpointerover\",\n\t\"onpointerout\",\n\t\"onpointerenter\",\n\t\"onpointerleave\",\n\t\"onselectstart\",\n\t\"onselectionchange\",\n\t\"onanimationend\",\n\t\"onanimationiteration\",\n\t\"onanimationstart\",\n\t\"ontransitionrun\",\n\t\"ontransitionstart\",\n\t\"ontransitionend\",\n\t\"ontransitioncancel\",\n\t\"oncopy\",\n\t\"oncut\",\n\t\"onpaste\",\n\t\"onscrollend\",\n\t\"onscrollsnapchange\",\n\t\"onscrollsnapchanging\",\n];\n","import { flagEnabled, ScramjetContext } from \"@/shared\";\nimport { URLMeta } from \"@rewriters/url\";\n\nimport { getRewriter, JsRewriterOutput, textDecoder } from \"@rewriters/wasm\";\n\nError.stackTraceLimit = 50;\n\ntype RewriterResult = {\n\tjs: string | Uint8Array;\n\tmap: Uint8Array | null;\n\ttag: string;\n\terrors: string[];\n};\nfunction rewriteJsWasm(\n\tinput: string | Uint8Array,\n\tsource: string | null,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta,\n\tmodule: boolean\n): RewriterResult {\n\tlet [rewriter, ret] = getRewriter(context, meta);\n\n\tlet flagsobj = {};\n\tfor (const flag of Object.keys(context.config.flags)) {\n\t\tflagsobj[flag] = flagEnabled(flag as any, context, meta.base);\n\t}\n\n\ttry {\n\t\tlet out: JsRewriterOutput;\n\t\tconst before = performance.now();\n\t\t// try {\n\t\tif (typeof input === \"string\") {\n\t\t\tout = rewriter.rewrite_js(\n\t\t\t\t{\n\t\t\t\t\t...context.config.globals,\n\t\t\t\t\tprefix: context.prefix.pathname,\n\t\t\t\t},\n\t\t\t\tflagsobj,\n\t\t\t\tcontext.interface.codecEncode,\n\t\t\t\tinput,\n\t\t\t\tmeta.base.href,\n\t\t\t\tsource || \"(unknown)\",\n\t\t\t\tmodule\n\t\t\t);\n\t\t} else {\n\t\t\tout = rewriter.rewrite_js_bytes(\n\t\t\t\t{\n\t\t\t\t\t...context.config.globals,\n\t\t\t\t\tprefix: context.prefix.pathname,\n\t\t\t\t},\n\t\t\t\tflagsobj,\n\t\t\t\tcontext.interface.codecEncode,\n\t\t\t\tinput,\n\t\t\t\tmeta.base.href,\n\t\t\t\tsource || \"(unknown)\",\n\t\t\t\tmodule\n\t\t\t);\n\t\t}\n\t\t// } catch (err) {\n\t\t// \tconst err1 = err as Error;\n\t\t// \tconsole.warn(\n\t\t// \t\t\"failed rewriting js for\",\n\t\t// \t\tsource,\n\t\t// \t\terr1.message,\n\t\t// \t\tinput instanceof Uint8Array ? textDecoder.decode(input) : input\n\t\t// \t);\n\n\t\t// \treturn { js: input, tag: \"\", map: null };\n\t\t// }\n\t\tdbg.time(meta, before, `oxc rewrite for \"${source || \"(unknown)\"}\"`);\n\n\t\tconst { js, map, scramtag, errors } = out;\n\n\t\treturn {\n\t\t\tjs: typeof input === \"string\" ? textDecoder.decode(js) : js,\n\t\t\ttag: scramtag,\n\t\t\tmap,\n\t\t\terrors,\n\t\t};\n\t} finally {\n\t\tret();\n\t}\n}\n\nexport function rewriteJsInner(\n\tjs: string | Uint8Array,\n\turl: string | null,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta,\n\tmodule = false\n) {\n\treturn rewriteJsWasm(js, url, context, meta, module);\n}\n\nexport function rewriteJs(\n\tjs: string | Uint8Array,\n\turl: string | null,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta,\n\tmodule = false\n): string | Uint8Array {\n\ttry {\n\t\tconst res = rewriteJsInner(js, url, context, meta, module);\n\t\tlet newjs = res.js;\n\n\t\tif (flagEnabled(\"sourcemaps\", context, meta.base)) {\n\t\t\tconst pushmap = globalThis[context.config.globals.pushsourcemapfn];\n\t\t\tif (pushmap) {\n\t\t\t\tpushmap(Array.from(res.map), res.tag);\n\t\t\t} else {\n\t\t\t\tif (newjs instanceof Uint8Array) {\n\t\t\t\t\tnewjs = new TextDecoder().decode(newjs);\n\t\t\t\t}\n\t\t\t\tconst sourcemapfn = `${context.config.globals.pushsourcemapfn}([${res.map.join(\",\")}], \"${res.tag}\");`;\n\n\t\t\t\t// don't put the sourcemap call before \"use strict\"\n\t\t\t\tconst strictMode = /^\\s*(['\"])use strict\\1;?/;\n\t\t\t\tif (strictMode.test(newjs)) {\n\t\t\t\t\tnewjs = newjs.replace(strictMode, `$&\\n${sourcemapfn}`);\n\t\t\t\t} else {\n\t\t\t\t\tnewjs = `${sourcemapfn}\\n${newjs}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (flagEnabled(\"rewriterLogs\", context, meta.base)) {\n\t\t\tfor (const error of res.errors) {\n\t\t\t\tconsole.error(\"oxc parse error\", error);\n\t\t\t}\n\t\t}\n\n\t\treturn newjs;\n\t} catch (err) {\n\t\tconsole.warn(\n\t\t\t\"failed rewriting js for\",\n\t\t\turl || \"(unknown)\",\n\t\t\terr.message,\n\t\t\tjs instanceof Uint8Array ? textDecoder.decode(js) : js\n\t\t);\n\t\tif (flagEnabled(\"allowInvalidJs\", context, meta.base)) {\n\t\t\treturn js;\n\t\t} else {\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n","import { ScramjetContext } from \"@/shared\";\nimport { rewriteJs } from \"@rewriters/js\";\n\nexport type URLMeta = {\n\torigin: URL;\n\tbase: URL;\n\ttopFrameName?: string;\n\tparentFrameName?: string;\n};\n\nfunction tryCanParseURL(url: string, origin?: string | URL): URL | null {\n\ttry {\n\t\treturn new URL(url, origin);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function rewriteBlob(\n\turl: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\tconst blob = new URL(url.substring(\"blob:\".length));\n\n\treturn \"blob:\" + meta.origin.origin + blob.pathname;\n}\n\nexport function unrewriteBlob(\n\turl: string,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\tconst blob = new URL(url.substring(\"blob:\".length));\n\n\treturn \"blob:\" + context.prefix.origin + blob.pathname;\n}\n\nexport function rewriteUrl(\n\turl: string | URL,\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n) {\n\tif (url instanceof URL) url = url.toString();\n\n\tif (url.startsWith(\"javascript:\")) {\n\t\treturn (\n\t\t\t\"javascript:\" +\n\t\t\trewriteJs(\n\t\t\t\turl.slice(\"javascript:\".length),\n\t\t\t\t\"(javascript: url)\",\n\t\t\t\tcontext,\n\t\t\t\tmeta\n\t\t\t)\n\t\t);\n\t} else if (url.startsWith(\"blob:\")) {\n\t\treturn context.prefix.href + url;\n\t} else if (url.startsWith(\"data:\")) {\n\t\treturn context.prefix.href + url;\n\t} else if (url.startsWith(\"mailto:\") || url.startsWith(\"about:\")) {\n\t\treturn url;\n\t} else {\n\t\tlet base = meta.base.href;\n\n\t\tif (base.startsWith(\"about:\"))\n\t\t\tbase = unrewriteUrl(self.location.href, context); // jank!!!!! weird jank!!!\n\t\tconst realUrl = tryCanParseURL(url, base);\n\t\tif (!realUrl) return url;\n\n\t\tif (realUrl.protocol != \"http:\" && realUrl.protocol != \"https:\") {\n\t\t\t// custom protocol. best thing to do is pass it through so it can open an app etc\n\t\t\t// there's also extension:// pages we might need to worry about later\n\t\t\treturn url;\n\t\t}\n\n\t\tconst encodedHash = context.interface.codecEncode(realUrl.hash.slice(1));\n\t\tconst realHash = encodedHash ? \"#\" + encodedHash : \"\";\n\t\trealUrl.hash = \"\";\n\n\t\treturn (\n\t\t\tcontext.prefix.href +\n\t\t\tcontext.interface.codecEncode(realUrl.href) +\n\t\t\trealHash\n\t\t);\n\t}\n}\n\nexport function unrewriteUrl(url: string | URL, context: ScramjetContext) {\n\tif (url instanceof URL) url = url.toString();\n\t// remove query string\n\t// if (url.includes(\"?\")) {\n\t// \turl = url.split(\"?\")[0];\n\t// }\n\n\tif (url.startsWith(\"javascript:\")) {\n\t\t//TODO\n\t\treturn url;\n\t} else if (url.startsWith(\"blob:\")) {\n\t\t// realistically this shouldn't happen\n\t\treturn url;\n\t} else if (url.startsWith(context.prefix.href + \"blob:\")) {\n\t\treturn url.substring(context.prefix.href.length);\n\t} else if (url.startsWith(context.prefix.href + \"data:\")) {\n\t\treturn url.substring(context.prefix.href.length);\n\t} else if (url.startsWith(\"mailto:\") || url.startsWith(\"about:\")) {\n\t\treturn url;\n\t} else if (url.startsWith(\"http:\") || url.startsWith(\"https:\")) {\n\t\tconst realUrl = tryCanParseURL(url);\n\t\tif (!realUrl) return url;\n\t\tif (realUrl.protocol != \"http:\" && realUrl.protocol != \"https:\") {\n\t\t\t// custom protocol\n\t\t\treturn url;\n\t\t}\n\t\tconst decodedHash = context.interface.codecDecode(realUrl.hash.slice(1));\n\t\tconst realHash = decodedHash ? \"#\" + decodedHash : \"\";\n\t\trealUrl.hash = \"\";\n\n\t\treturn context.interface.codecDecode(\n\t\t\trealUrl.href.slice(context.prefix.href.length) + realHash\n\t\t);\n\t}\n}\n","// i am a cat. i like to be petted. i like to be fed. i like to be\nimport { initSync, Rewriter } from \"../../../rewriter/wasm/out/wasm.js\";\nimport type { JsRewriterOutput } from \"../../../rewriter/wasm/out/wasm.js\";\nimport { flagEnabled, ScramjetContext } from \"@/shared\";\n\nexport type { JsRewriterOutput, Rewriter };\n\nimport { rewriteUrl, URLMeta } from \"@rewriters/url\";\nimport { htmlRules } from \"@/shared/htmlRules\";\nimport { rewriteCss } from \"@rewriters/css\";\nimport { rewriteJs } from \"@rewriters/js\";\nimport { CookieJar } from \"@/shared/cookie\";\n\nlet wasm_u8: Uint8Array;\nexport function setWasm(u8: Uint8Array | ArrayBuffer) {\n\twasm_u8 = u8 instanceof Uint8Array ? u8 : new Uint8Array(u8);\n}\n\nexport const textDecoder = new TextDecoder();\nlet MAGIC = \"\\0asm\".split(\"\").map((x) => x.charCodeAt(0));\n\nfunction initWasm() {\n\tif (!(wasm_u8 instanceof Uint8Array))\n\t\tthrow new Error(\"rewriter wasm not found (was setWasm called?)\");\n\n\tif (![...wasm_u8.slice(0, 4)].every((x, i) => x === MAGIC[i]))\n\t\tthrow new Error(\n\t\t\t\"rewriter wasm does not have wasm magic (was it fetched correctly?)\\nrewriter wasm contents: \" +\n\t\t\t\ttextDecoder.decode(wasm_u8)\n\t\t);\n\n\tinitSync({\n\t\tmodule: new WebAssembly.Module(wasm_u8 as unknown as BufferSource),\n\t});\n}\n\nlet rewriters = [];\nexport function getRewriter(\n\tcontext: ScramjetContext,\n\tmeta: URLMeta\n): [Rewriter, () => void] {\n\tinitWasm();\n\n\tlet obj: { rewriter: Rewriter; inUse: boolean };\n\tlet index = rewriters.findIndex((x) => !x.inUse);\n\tlet len = rewriters.length;\n\n\tif (index === -1) {\n\t\tif (flagEnabled(\"rewriterLogs\", context, meta.base))\n\t\t\tconsole.log(`creating new rewriter, ${len} rewriters made already`);\n\n\t\tlet rewriter = new Rewriter();\n\t\tobj = { rewriter, inUse: false };\n\t\trewriters.push(obj);\n\t} else {\n\t\tobj = rewriters[index];\n\t}\n\tobj.inUse = true;\n\n\treturn [obj.rewriter, () => (obj.inUse = false)];\n}\n","import { flagEnabled, ScramjetContext } from \"@/shared\";\nimport { rewriteJs } from \"@rewriters/js\";\nimport { URLMeta } from \"@rewriters/url\";\n\nexport function rewriteWorkers(\n\tcontext: ScramjetContext,\n\tjs: string | Uint8Array,\n\ttype: \"module\" | \"regular\",\n\turl: string,\n\tmeta: URLMeta\n) {\n\tconst module = type === \"module\";\n\tconst script = (script: string) => {\n\t\tif (module) {\n\t\t\treturn `import \"${script}\"\\n`;\n\t\t}\n\t\treturn `importScripts(\"${script}\");\\n`;\n\t};\n\tlet str = context.interface.getWorkerInjectScripts(meta, type, script);\n\tlet rewritten = rewriteJs(js, url, context, meta, module);\n\tif (rewritten instanceof Uint8Array) {\n\t\trewritten = new TextDecoder().decode(rewritten);\n\t}\n\n\tif (flagEnabled(\"encapsulateWorkers\", context, meta.origin)) {\n\t\t// TODO: check if there's already a sourceURL/sourcemap before appending another?\n\t\trewritten += `//# sourceURL=${url}`;\n\t\tstr += script(`data:text/javascript;base64,${btoa(rewritten)}`);\n\t} else {\n\t\tstr += rewritten;\n\t}\n\n\treturn str;\n}\n","/**\n * @fileoverview\n * See `types.ts` for context on these symbols.\n */\n\nexport const SCRAMJETCLIENTNAME = \"scramjet client global\";\nexport const SCRAMJETCLIENT = Symbol.for(SCRAMJETCLIENTNAME);\nexport const SCRAMJETFRAME = Symbol.for(\"scramjet frame handle\");\n","const WebSocketFields = {\n    CLOSED: WebSocket.CLOSED,\n    CONNECTING: WebSocket.CONNECTING,\n    OPEN: WebSocket.OPEN,\n};\nclass BareCompatibleWebSocket extends EventTarget {\n    transport;\n    url;\n    readyState = WebSocketFields.CONNECTING;\n    extensions = \"\";\n    protocol = \"\";\n    _data;\n    _close;\n    constructor(remote, protocols, transport, requestHeaders) {\n        super();\n        this.transport = transport;\n        this.url = remote.toString();\n        if (!requestHeaders) {\n            requestHeaders = [];\n        }\n        if (!protocols) {\n            protocols = [];\n        }\n        if (typeof protocols === \"string\") {\n            protocols = [protocols];\n        }\n        const onopen = (protocol, extensions) => {\n            this.protocol = protocol;\n            this.extensions = extensions;\n            this.readyState = WebSocketFields.OPEN;\n            const event = new Event(\"open\");\n            this.dispatchEvent(event);\n        };\n        const onmessage = async (payload) => {\n            const event = new MessageEvent(\"message\", { data: payload });\n            this.dispatchEvent(event);\n        };\n        const onclose = (code, reason) => {\n            this.readyState = WebSocketFields.CLOSED;\n            const event = new CloseEvent(\"close\", { code, reason });\n            this.dispatchEvent(event);\n        };\n        const onerror = () => {\n            this.readyState = WebSocketFields.CLOSED;\n            const event = new Event(\"error\");\n            this.dispatchEvent(event);\n        };\n        (async () => {\n            if (!transport.ready) {\n                await transport.init();\n            }\n            const [_data, _close] = transport.connect(new URL(remote), protocols, requestHeaders, onopen, onmessage, onclose, onerror);\n            this._data = _data;\n            this._close = _close;\n        })();\n    }\n    async send(data) {\n        if (!this.transport.ready) {\n            await this.transport.init();\n        }\n        if (this.readyState === WebSocketFields.CONNECTING) {\n            throw new DOMException(\"Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.\");\n        }\n        // we can't check typeof Uint8Array here directly as it may come from another realm\n        if (typeof data === \"object\" && \"buffer\" in data && data.buffer) {\n            let _data = data;\n            // this is neccesary in case the buffer is a slice of a larger array\n            // in which case you risk edge cases such as sending an entire wasm memory buffer over the websocket\n            data = _data.buffer.slice(_data.byteOffset, _data.byteOffset + _data.byteLength);\n        }\n        this._data(data);\n    }\n    close(code, reason) {\n        this._close(code, reason);\n    }\n}\n\nconst validChars = \"!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz|~\";\nfunction validProtocol(protocol) {\n    for (let i = 0; i < protocol.length; i++) {\n        const char = protocol[i];\n        if (!validChars.includes(char)) {\n            return false;\n        }\n    }\n    return true;\n}\nconst wsProtocols = [\"ws:\", \"wss:\"];\nconst statusEmpty = [101, 204, 205, 304];\nconst statusRedirect = [301, 302, 303, 307, 308];\nconst nativeFetch = fetch;\nfunction headersObjectToEntries(headers) {\n    return [...headers];\n}\n/**\n * A Response with additional properties.\n */\nclass BareResponse extends Response {\n    url;\n    rawHeaders;\n    redirected = false;\n    static fromTransferrableResponse(resp, url) {\n        const response = new BareResponse(statusEmpty.includes(resp.status) ? undefined : resp.body, {\n            headers: new Headers(resp.headers),\n            status: resp.status,\n            statusText: resp.statusText,\n        });\n        response.url = url;\n        response.redirected =\n            resp.status >= 300 &&\n                resp.status < 400 &&\n                resp.headers[\"location\"] !== undefined;\n        response.rawHeaders = resp.headers;\n        return response;\n    }\n    static fromNativeResponse(resp) {\n        let body = statusEmpty.includes(resp.status) ? undefined : resp.body;\n        const response = new BareResponse(body, {\n            headers: resp.headers,\n            status: resp.status,\n            statusText: resp.statusText,\n        });\n        response.url = resp.url;\n        response.rawHeaders = headersObjectToEntries(resp.headers);\n        response.redirected = resp.redirected;\n        return response;\n    }\n}\nconst defaultMaxRedirects = 20;\nclass BareCompatibleClient {\n    transport;\n    /**\n     * Create a BareCompatibleClient using the provided transport. Calls to fetch and connect will wait for an implementation to be ready.\n     */\n    constructor(transport) {\n        this.transport = transport;\n    }\n    createWebSocket(remote, protocols = [], requestHeaders) {\n        try {\n            remote = new URL(remote);\n        }\n        catch (err) {\n            throw new DOMException(`Faiiled to construct 'WebSocket': The URL '${remote}' is invalid.`);\n        }\n        if (!wsProtocols.includes(remote.protocol))\n            throw new DOMException(`Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${remote.protocol}' is not allowed.`);\n        if (!Array.isArray(protocols))\n            protocols = [protocols];\n        protocols = protocols.map(String);\n        for (const proto of protocols)\n            if (!validProtocol(proto))\n                throw new DOMException(`Failed to construct 'WebSocket': The subprotocol '${proto}' is invalid.`);\n        requestHeaders = requestHeaders || [];\n        const socket = new BareCompatibleWebSocket(remote, protocols, this.transport, requestHeaders);\n        return socket;\n    }\n    async fetch(url, init) {\n        if (!this.transport.ready) {\n            await this.transport.init();\n        }\n        let maxRedirects = init?.maxRedirects || defaultMaxRedirects;\n        const body = init?.body;\n        const headers = init?.headers || [];\n        const method = init?.method || \"GET\";\n        const redirect = init?.redirect || \"follow\";\n        let urlO = new URL(url);\n        if (urlO.protocol.startsWith(\"blob:\")) {\n            const response = await nativeFetch(urlO);\n            return BareResponse.fromNativeResponse(response);\n        }\n        for (let i = 0;; i++) {\n            const resp = await this.transport.request(urlO, method, body, headers, undefined);\n            const bareresponse = BareResponse.fromTransferrableResponse(resp, urlO.toString());\n            if (statusRedirect.includes(bareresponse.status)) {\n                switch (redirect) {\n                    case \"follow\": {\n                        const location = bareresponse.headers.get(\"location\");\n                        if (maxRedirects > i && location !== null) {\n                            urlO = new URL(location, urlO);\n                            continue;\n                        }\n                        else\n                            throw new TypeError(\"Failed to fetch\");\n                    }\n                    case \"error\":\n                        throw new TypeError(\"Failed to fetch\");\n                    case \"manual\":\n                        return bareresponse;\n                }\n            }\n            else {\n                return bareresponse;\n            }\n        }\n    }\n}\n\nexport { BareCompatibleClient, BareCompatibleWebSocket, BareResponse };\n//# sourceMappingURL=index.mjs.map\n","export const elementNames = new Map([\n    \"altGlyph\",\n    \"altGlyphDef\",\n    \"altGlyphItem\",\n    \"animateColor\",\n    \"animateMotion\",\n    \"animateTransform\",\n    \"clipPath\",\n    \"feBlend\",\n    \"feColorMatrix\",\n    \"feComponentTransfer\",\n    \"feComposite\",\n    \"feConvolveMatrix\",\n    \"feDiffuseLighting\",\n    \"feDisplacementMap\",\n    \"feDistantLight\",\n    \"feDropShadow\",\n    \"feFlood\",\n    \"feFuncA\",\n    \"feFuncB\",\n    \"feFuncG\",\n    \"feFuncR\",\n    \"feGaussianBlur\",\n    \"feImage\",\n    \"feMerge\",\n    \"feMergeNode\",\n    \"feMorphology\",\n    \"feOffset\",\n    \"fePointLight\",\n    \"feSpecularLighting\",\n    \"feSpotLight\",\n    \"feTile\",\n    \"feTurbulence\",\n    \"foreignObject\",\n    \"glyphRef\",\n    \"linearGradient\",\n    \"radialGradient\",\n    \"textPath\",\n].map((val) => [val.toLowerCase(), val]));\nexport const attributeNames = new Map([\n    \"definitionURL\",\n    \"attributeName\",\n    \"attributeType\",\n    \"baseFrequency\",\n    \"baseProfile\",\n    \"calcMode\",\n    \"clipPathUnits\",\n    \"diffuseConstant\",\n    \"edgeMode\",\n    \"filterUnits\",\n    \"glyphRef\",\n    \"gradientTransform\",\n    \"gradientUnits\",\n    \"kernelMatrix\",\n    \"kernelUnitLength\",\n    \"keyPoints\",\n    \"keySplines\",\n    \"keyTimes\",\n    \"lengthAdjust\",\n    \"limitingConeAngle\",\n    \"markerHeight\",\n    \"markerUnits\",\n    \"markerWidth\",\n    \"maskContentUnits\",\n    \"maskUnits\",\n    \"numOctaves\",\n    \"pathLength\",\n    \"patternContentUnits\",\n    \"patternTransform\",\n    \"patternUnits\",\n    \"pointsAtX\",\n    \"pointsAtY\",\n    \"pointsAtZ\",\n    \"preserveAlpha\",\n    \"preserveAspectRatio\",\n    \"primitiveUnits\",\n    \"refX\",\n    \"refY\",\n    \"repeatCount\",\n    \"repeatDur\",\n    \"requiredExtensions\",\n    \"requiredFeatures\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"spreadMethod\",\n    \"startOffset\",\n    \"stdDeviation\",\n    \"stitchTiles\",\n    \"surfaceScale\",\n    \"systemLanguage\",\n    \"tableValues\",\n    \"targetX\",\n    \"targetY\",\n    \"textLength\",\n    \"viewBox\",\n    \"viewTarget\",\n    \"xChannelSelector\",\n    \"yChannelSelector\",\n    \"zoomAndPan\",\n].map((val) => [val.toLowerCase(), val]));\n","/*\n * Module dependencies\n */\nimport * as ElementType from \"domelementtype\";\nimport { encodeXML, escapeAttribute, escapeText } from \"entities\";\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nimport { elementNames, attributeNames } from \"./foreignNames.js\";\nconst unencodedElements = new Set([\n    \"style\",\n    \"script\",\n    \"xmp\",\n    \"iframe\",\n    \"noembed\",\n    \"noframes\",\n    \"plaintext\",\n    \"noscript\",\n]);\nfunction replaceQuotes(value) {\n    return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n    var _a;\n    if (!attributes)\n        return;\n    const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n        ? replaceQuotes\n        : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n            ? encodeXML\n            : escapeAttribute;\n    return Object.keys(attributes)\n        .map((key) => {\n        var _a, _b;\n        const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n        if (opts.xmlMode === \"foreign\") {\n            /* Fix up mixed-case attribute names */\n            key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n        }\n        if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n            return key;\n        }\n        return `${key}=\"${encode(value)}\"`;\n    })\n        .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = new Set([\n    \"area\",\n    \"base\",\n    \"basefont\",\n    \"br\",\n    \"col\",\n    \"command\",\n    \"embed\",\n    \"frame\",\n    \"hr\",\n    \"img\",\n    \"input\",\n    \"isindex\",\n    \"keygen\",\n    \"link\",\n    \"meta\",\n    \"param\",\n    \"source\",\n    \"track\",\n    \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nexport function render(node, options = {}) {\n    const nodes = \"length\" in node ? node : [node];\n    let output = \"\";\n    for (let i = 0; i < nodes.length; i++) {\n        output += renderNode(nodes[i], options);\n    }\n    return output;\n}\nexport default render;\nfunction renderNode(node, options) {\n    switch (node.type) {\n        case ElementType.Root:\n            return render(node.children, options);\n        // @ts-expect-error We don't use `Doctype` yet\n        case ElementType.Doctype:\n        case ElementType.Directive:\n            return renderDirective(node);\n        case ElementType.Comment:\n            return renderComment(node);\n        case ElementType.CDATA:\n            return renderCdata(node);\n        case ElementType.Script:\n        case ElementType.Style:\n        case ElementType.Tag:\n            return renderTag(node, options);\n        case ElementType.Text:\n            return renderText(node, options);\n    }\n}\nconst foreignModeIntegrationPoints = new Set([\n    \"mi\",\n    \"mo\",\n    \"mn\",\n    \"ms\",\n    \"mtext\",\n    \"annotation-xml\",\n    \"foreignObject\",\n    \"desc\",\n    \"title\",\n]);\nconst foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n    var _a;\n    // Handle SVG / MathML in HTML\n    if (opts.xmlMode === \"foreign\") {\n        /* Fix up mixed-case element names */\n        elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n        /* Exit foreign mode at integration points */\n        if (elem.parent &&\n            foreignModeIntegrationPoints.has(elem.parent.name)) {\n            opts = { ...opts, xmlMode: false };\n        }\n    }\n    if (!opts.xmlMode && foreignElements.has(elem.name)) {\n        opts = { ...opts, xmlMode: \"foreign\" };\n    }\n    let tag = `<${elem.name}`;\n    const attribs = formatAttributes(elem.attribs, opts);\n    if (attribs) {\n        tag += ` ${attribs}`;\n    }\n    if (elem.children.length === 0 &&\n        (opts.xmlMode\n            ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n                opts.selfClosingTags !== false\n            : // User explicitly asked for self-closing tags, even in HTML mode\n                opts.selfClosingTags && singleTag.has(elem.name))) {\n        if (!opts.xmlMode)\n            tag += \" \";\n        tag += \"/>\";\n    }\n    else {\n        tag += \">\";\n        if (elem.children.length > 0) {\n            tag += render(elem.children, opts);\n        }\n        if (opts.xmlMode || !singleTag.has(elem.name)) {\n            tag += `</${elem.name}>`;\n        }\n    }\n    return tag;\n}\nfunction renderDirective(elem) {\n    return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n    var _a;\n    let data = elem.data || \"\";\n    // If entities weren't decoded, no need to encode them back\n    if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n        !(!opts.xmlMode &&\n            elem.parent &&\n            unencodedElements.has(elem.parent.name))) {\n        data =\n            opts.xmlMode || opts.encodeEntities !== \"utf8\"\n                ? encodeXML(data)\n                : escapeText(data);\n    }\n    return data;\n}\nfunction renderCdata(elem) {\n    return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n    return `<!--${elem.data}-->`;\n}\n","/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n    /** Type for the root element of a document */\n    ElementType[\"Root\"] = \"root\";\n    /** Type for Text */\n    ElementType[\"Text\"] = \"text\";\n    /** Type for <? ... ?> */\n    ElementType[\"Directive\"] = \"directive\";\n    /** Type for <!-- ... --> */\n    ElementType[\"Comment\"] = \"comment\";\n    /** Type for <script> tags */\n    ElementType[\"Script\"] = \"script\";\n    /** Type for <style> tags */\n    ElementType[\"Style\"] = \"style\";\n    /** Type for Any tag */\n    ElementType[\"Tag\"] = \"tag\";\n    /** Type for <![CDATA[ ... ]]> */\n    ElementType[\"CDATA\"] = \"cdata\";\n    /** Type for <!doctype ...> */\n    ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n    return (elem.type === ElementType.Tag ||\n        elem.type === ElementType.Script ||\n        elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n","import { ElementType } from \"domelementtype\";\nimport { Element, Text, Comment, CDATA, Document, ProcessingInstruction, } from \"./node.js\";\nexport * from \"./node.js\";\n// Default options\nconst defaultOpts = {\n    withStartIndices: false,\n    withEndIndices: false,\n    xmlMode: false,\n};\nexport class DomHandler {\n    /**\n     * @param callback Called once parsing has completed.\n     * @param options Settings for the handler.\n     * @param elementCB Callback whenever a tag is closed.\n     */\n    constructor(callback, options, elementCB) {\n        /** The elements of the DOM */\n        this.dom = [];\n        /** The root element for the DOM */\n        this.root = new Document(this.dom);\n        /** Indicated whether parsing has been completed. */\n        this.done = false;\n        /** Stack of open tags. */\n        this.tagStack = [this.root];\n        /** A data node that is still being written to. */\n        this.lastNode = null;\n        /** Reference to the parser instance. Used for location information. */\n        this.parser = null;\n        // Make it possible to skip arguments, for backwards-compatibility\n        if (typeof options === \"function\") {\n            elementCB = options;\n            options = defaultOpts;\n        }\n        if (typeof callback === \"object\") {\n            options = callback;\n            callback = undefined;\n        }\n        this.callback = callback !== null && callback !== void 0 ? callback : null;\n        this.options = options !== null && options !== void 0 ? options : defaultOpts;\n        this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n    }\n    onparserinit(parser) {\n        this.parser = parser;\n    }\n    // Resets the handler back to starting state\n    onreset() {\n        this.dom = [];\n        this.root = new Document(this.dom);\n        this.done = false;\n        this.tagStack = [this.root];\n        this.lastNode = null;\n        this.parser = null;\n    }\n    // Signals the handler that parsing is done\n    onend() {\n        if (this.done)\n            return;\n        this.done = true;\n        this.parser = null;\n        this.handleCallback(null);\n    }\n    onerror(error) {\n        this.handleCallback(error);\n    }\n    onclosetag() {\n        this.lastNode = null;\n        const elem = this.tagStack.pop();\n        if (this.options.withEndIndices) {\n            elem.endIndex = this.parser.endIndex;\n        }\n        if (this.elementCB)\n            this.elementCB(elem);\n    }\n    onopentag(name, attribs) {\n        const type = this.options.xmlMode ? ElementType.Tag : undefined;\n        const element = new Element(name, attribs, undefined, type);\n        this.addNode(element);\n        this.tagStack.push(element);\n    }\n    ontext(data) {\n        const { lastNode } = this;\n        if (lastNode && lastNode.type === ElementType.Text) {\n            lastNode.data += data;\n            if (this.options.withEndIndices) {\n                lastNode.endIndex = this.parser.endIndex;\n            }\n        }\n        else {\n            const node = new Text(data);\n            this.addNode(node);\n            this.lastNode = node;\n        }\n    }\n    oncomment(data) {\n        if (this.lastNode && this.lastNode.type === ElementType.Comment) {\n            this.lastNode.data += data;\n            return;\n        }\n        const node = new Comment(data);\n        this.addNode(node);\n        this.lastNode = node;\n    }\n    oncommentend() {\n        this.lastNode = null;\n    }\n    oncdatastart() {\n        const text = new Text(\"\");\n        const node = new CDATA([text]);\n        this.addNode(node);\n        text.parent = node;\n        this.lastNode = text;\n    }\n    oncdataend() {\n        this.lastNode = null;\n    }\n    onprocessinginstruction(name, data) {\n        const node = new ProcessingInstruction(name, data);\n        this.addNode(node);\n    }\n    handleCallback(error) {\n        if (typeof this.callback === \"function\") {\n            this.callback(error, this.dom);\n        }\n        else if (error) {\n            throw error;\n        }\n    }\n    addNode(node) {\n        const parent = this.tagStack[this.tagStack.length - 1];\n        const previousSibling = parent.children[parent.children.length - 1];\n        if (this.options.withStartIndices) {\n            node.startIndex = this.parser.startIndex;\n        }\n        if (this.options.withEndIndices) {\n            node.endIndex = this.parser.endIndex;\n        }\n        parent.children.push(node);\n        if (previousSibling) {\n            node.prev = previousSibling;\n            previousSibling.next = node;\n        }\n        node.parent = parent;\n        this.lastNode = null;\n    }\n}\nexport default DomHandler;\n","import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n    constructor() {\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    // Read-write aliases for properties\n    /**\n     * Same as {@link parent}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get parentNode() {\n        return this.parent;\n    }\n    set parentNode(parent) {\n        this.parent = parent;\n    }\n    /**\n     * Same as {@link prev}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get previousSibling() {\n        return this.prev;\n    }\n    set previousSibling(prev) {\n        this.prev = prev;\n    }\n    /**\n     * Same as {@link next}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get nextSibling() {\n        return this.next;\n    }\n    set nextSibling(next) {\n        this.next = next;\n    }\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    cloneNode(recursive = false) {\n        return cloneNode(this, recursive);\n    }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n    /**\n     * @param data The content of the data node\n     */\n    constructor(data) {\n        super();\n        this.data = data;\n    }\n    /**\n     * Same as {@link data}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get nodeValue() {\n        return this.data;\n    }\n    set nodeValue(data) {\n        this.data = data;\n    }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.Text;\n    }\n    get nodeType() {\n        return 3;\n    }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.Comment;\n    }\n    get nodeType() {\n        return 8;\n    }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n    constructor(name, data) {\n        super(data);\n        this.name = name;\n        this.type = ElementType.Directive;\n    }\n    get nodeType() {\n        return 1;\n    }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n    /**\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    constructor(children) {\n        super();\n        this.children = children;\n    }\n    // Aliases\n    /** First child of the node. */\n    get firstChild() {\n        var _a;\n        return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n    }\n    /** Last child of the node. */\n    get lastChild() {\n        return this.children.length > 0\n            ? this.children[this.children.length - 1]\n            : null;\n    }\n    /**\n     * Same as {@link children}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get childNodes() {\n        return this.children;\n    }\n    set childNodes(children) {\n        this.children = children;\n    }\n}\nexport class CDATA extends NodeWithChildren {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.CDATA;\n    }\n    get nodeType() {\n        return 4;\n    }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.Root;\n    }\n    get nodeType() {\n        return 9;\n    }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    constructor(name, attribs, children = [], type = name === \"script\"\n        ? ElementType.Script\n        : name === \"style\"\n            ? ElementType.Style\n            : ElementType.Tag) {\n        super(children);\n        this.name = name;\n        this.attribs = attribs;\n        this.type = type;\n    }\n    get nodeType() {\n        return 1;\n    }\n    // DOM Level 1 aliases\n    /**\n     * Same as {@link name}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get tagName() {\n        return this.name;\n    }\n    set tagName(name) {\n        this.name = name;\n    }\n    get attributes() {\n        return Object.keys(this.attribs).map((name) => {\n            var _a, _b;\n            return ({\n                name,\n                value: this.attribs[name],\n                namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n            });\n        });\n    }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n    return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n    return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n    return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n    return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n    return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n    return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n    let result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        const children = recursive ? cloneChildren(node.children) : [];\n        const clone = new Element(node.name, { ...node.attribs }, children);\n        children.forEach((child) => (child.parent = clone));\n        if (node.namespace != null) {\n            clone.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n        }\n        result = clone;\n    }\n    else if (isCDATA(node)) {\n        const children = recursive ? cloneChildren(node.children) : [];\n        const clone = new CDATA(children);\n        children.forEach((child) => (child.parent = clone));\n        result = clone;\n    }\n    else if (isDocument(node)) {\n        const children = recursive ? cloneChildren(node.children) : [];\n        const clone = new Document(children);\n        children.forEach((child) => (child.parent = clone));\n        if (node[\"x-mode\"]) {\n            clone[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone;\n    }\n    else if (isDirective(node)) {\n        const instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(`Not implemented yet: ${node.type}`);\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nfunction cloneChildren(childs) {\n    const children = childs.map((child) => cloneNode(child, true));\n    for (let i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n","import { hasChildren } from \"domhandler\";\n/**\n * Given an array of nodes, remove any member that is contained by another\n * member.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't contained by other nodes.\n */\nexport function removeSubsets(nodes) {\n    let idx = nodes.length;\n    /*\n     * Check if each node (or one of its ancestors) is already contained in the\n     * array.\n     */\n    while (--idx >= 0) {\n        const node = nodes[idx];\n        /*\n         * Remove the node if it is not unique.\n         * We are going through the array from the end, so we only\n         * have to check nodes that preceed the node under consideration in the array.\n         */\n        if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n            nodes.splice(idx, 1);\n            continue;\n        }\n        for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n            if (nodes.includes(ancestor)) {\n                nodes.splice(idx, 1);\n                break;\n            }\n        }\n    }\n    return nodes;\n}\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nexport var DocumentPosition;\n(function (DocumentPosition) {\n    DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n    DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n    DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n    DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n    DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition || (DocumentPosition = {}));\n/**\n * Compare the position of one node against another node in any other document,\n * returning a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nexport function compareDocumentPosition(nodeA, nodeB) {\n    const aParents = [];\n    const bParents = [];\n    if (nodeA === nodeB) {\n        return 0;\n    }\n    let current = hasChildren(nodeA) ? nodeA : nodeA.parent;\n    while (current) {\n        aParents.unshift(current);\n        current = current.parent;\n    }\n    current = hasChildren(nodeB) ? nodeB : nodeB.parent;\n    while (current) {\n        bParents.unshift(current);\n        current = current.parent;\n    }\n    const maxIdx = Math.min(aParents.length, bParents.length);\n    let idx = 0;\n    while (idx < maxIdx && aParents[idx] === bParents[idx]) {\n        idx++;\n    }\n    if (idx === 0) {\n        return DocumentPosition.DISCONNECTED;\n    }\n    const sharedParent = aParents[idx - 1];\n    const siblings = sharedParent.children;\n    const aSibling = aParents[idx];\n    const bSibling = bParents[idx];\n    if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n        if (sharedParent === nodeB) {\n            return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n        }\n        return DocumentPosition.FOLLOWING;\n    }\n    if (sharedParent === nodeA) {\n        return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n    }\n    return DocumentPosition.PRECEDING;\n}\n/**\n * Sort an array of nodes based on their relative position in the document,\n * removing any duplicate nodes. If the array contains nodes that do not belong\n * to the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nexport function uniqueSort(nodes) {\n    nodes = nodes.filter((node, i, arr) => !arr.includes(node, i + 1));\n    nodes.sort((a, b) => {\n        const relative = compareDocumentPosition(a, b);\n        if (relative & DocumentPosition.PRECEDING) {\n            return -1;\n        }\n        else if (relative & DocumentPosition.FOLLOWING) {\n            return 1;\n        }\n        return 0;\n    });\n    return nodes;\n}\n//# sourceMappingURL=helpers.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n    CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n    CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n    CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n    CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n    CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n    CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n    CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n    CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n    CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n    CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n    CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n    BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n    EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n    EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n    EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n    /** Entities in text nodes that can end with any character. */\n    DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n    /** Only allow entities terminated with a semicolon. */\n    DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n    /** Entities in attributes have limitations on ending characters. */\n    DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n    /** The tree used to decode entities. */\n    decodeTree, \n    /**\n     * The function that is called when a codepoint is decoded.\n     *\n     * For multi-byte named entities, this will be called multiple times,\n     * with the second codepoint, and the same `consumed` value.\n     *\n     * @param codepoint The decoded codepoint.\n     * @param consumed The number of bytes consumed by the decoder.\n     */\n    emitCodePoint, \n    /** An object that is used to produce errors. */\n    errors) {\n        this.decodeTree = decodeTree;\n        this.emitCodePoint = emitCodePoint;\n        this.errors = errors;\n        /** The current state of the decoder. */\n        this.state = EntityDecoderState.EntityStart;\n        /** Characters that were consumed while parsing an entity. */\n        this.consumed = 1;\n        /**\n         * The result of the entity.\n         *\n         * Either the result index of a numeric entity, or the codepoint of a\n         * numeric entity.\n         */\n        this.result = 0;\n        /** The current index in the decode tree. */\n        this.treeIndex = 0;\n        /** The number of characters that were consumed in excess. */\n        this.excess = 1;\n        /** The mode in which the decoder is operating. */\n        this.decodeMode = DecodingMode.Strict;\n    }\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode) {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    }\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param string The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(str, offset) {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (str.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(str, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(str, offset);\n            }\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(str, offset);\n            }\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(str, offset);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(str, offset);\n            }\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(str, offset);\n            }\n        }\n    }\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericStart(str, offset) {\n        if (offset >= str.length) {\n            return -1;\n        }\n        if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(str, offset + 1);\n        }\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(str, offset);\n    }\n    addToNumericResult(str, start, end, base) {\n        if (start !== end) {\n            const digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                    parseInt(str.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    }\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericHex(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return -1;\n    }\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericDecimal(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return -1;\n    }\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    emitNumericEntity(lastCp, expectedLength) {\n        var _a;\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n            return 0;\n        }\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        }\n        else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n        return this.consumed;\n    }\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNamedEntity(str, offset) {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n        for (; offset < str.length; offset++, this.excess++) {\n            const char = str.charCodeAt(offset);\n            this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n                }\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n        return -1;\n    }\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNotTerminatedNamedEntity() {\n        var _a;\n        const { result, decodeTree } = this;\n        const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n        return this.consumed;\n    }\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNamedEntityData(result, valueLength, consumed) {\n        const { decodeTree } = this;\n        this.emitCodePoint(valueLength === 1\n            ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n            : decodeTree[result + 1], consumed);\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n        return consumed;\n    }\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end() {\n        var _a;\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n    let ret = \"\";\n    const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n    return function decodeWithTrie(str, decodeMode) {\n        let lastIndex = 0;\n        let offset = 0;\n        while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n            ret += str.slice(lastIndex, offset);\n            decoder.startEntity(decodeMode);\n            const len = decoder.write(str, \n            // Skip the \"&\"\n            offset + 1);\n            if (len < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n            lastIndex = offset + len;\n            // If `len` is 0, skip the current `&` and continue.\n            offset = len === 0 ? lastIndex + 1 : lastIndex;\n        }\n        const result = ret + str.slice(lastIndex);\n        // Make sure we don't keep a reference to the final string.\n        ret = \"\";\n        return result;\n    };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n    }\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIdx + value] - 1;\n    }\n    // Case 3: Multiple branches encoded in dictionary\n    // Binary search for the character.\n    let lo = nodeIdx;\n    let hi = lo + branchCount - 1;\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const midVal = decodeTree[mid];\n        if (midVal < char) {\n            lo = mid + 1;\n        }\n        else if (midVal > char) {\n            hi = mid - 1;\n        }\n        else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n    return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n    return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n    return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n    return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n    return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n    [0, 65533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n    let output = \"\";\n    if (codePoint > 0xffff) {\n        codePoint -= 0x10000;\n        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n        codePoint = 0xdc00 | (codePoint & 0x3ff);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n    var _a;\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return 0xfffd;\n    }\n    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","export const xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = new Map([\n    [34, \"&quot;\"],\n    [38, \"&amp;\"],\n    [39, \"&apos;\"],\n    [60, \"&lt;\"],\n    [62, \"&gt;\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n    ? (str, index) => str.codePointAt(index)\n    : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n        (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800\n            ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n                c.charCodeAt(index + 1) -\n                0xdc00 +\n                0x10000\n            : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexport function encodeXML(str) {\n    let ret = \"\";\n    let lastIdx = 0;\n    let match;\n    while ((match = xmlReplacer.exec(str)) !== null) {\n        const i = match.index;\n        const char = str.charCodeAt(i);\n        const next = xmlCodeMap.get(char);\n        if (next !== undefined) {\n            ret += str.substring(lastIdx, i) + next;\n            lastIdx = i + 1;\n        }\n        else {\n            ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n            // Increase by 1 if we have a surrogate pair\n            lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n        }\n    }\n    return ret + str.substr(lastIdx);\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n    return function escape(data) {\n        let match;\n        let lastIdx = 0;\n        let result = \"\";\n        while ((match = regex.exec(data))) {\n            if (lastIdx !== match.index) {\n                result += data.substring(lastIdx, match.index);\n            }\n            // We know that this character will be in the map.\n            result += map.get(match[0].charCodeAt(0));\n            // Every match will be of length 1\n            lastIdx = match.index + 1;\n        }\n        return result + data.substring(lastIdx);\n    };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n    [34, \"&quot;\"],\n    [38, \"&amp;\"],\n    [160, \"&nbsp;\"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n    [38, \"&amp;\"],\n    [60, \"&lt;\"],\n    [62, \"&gt;\"],\n    [160, \"&nbsp;\"],\n]));\n//# sourceMappingURL=escape.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\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\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\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\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\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\\ud835\\udc9ep\\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\\ud835\\udd07\\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\\ud835\\udd3b\\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\\ud835\\udc9frok;\\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\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\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\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\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\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\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\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\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\\ud835\\udd0f\\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\\ud835\\udd43er\\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\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\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\\ud835\\udd11\\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\\ud835\\udca9ilde\\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\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\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\\ud835\\udd13i;\\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\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\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\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\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\\ud835\\udcaear;\\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\\ud835\\udd17\\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\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\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\\ud835\\udd18rave\\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\\ud835\\udd4c\\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\\ud835\\udcb0ilde;\\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\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\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\\ud835\\udcb5\\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\\ud835\\udd1erave\\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\\ud835\\udd52\\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\\ud835\\udcb6;\\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\\ud835\\udd1fg\\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\\ud835\\udd53\\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\\ud835\\udcb7mi;\\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\\ud835\\udd20\\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\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\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\\ud835\\udd21ar\\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\\ud835\\udd55\\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\\ud835\\udcb9;\\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\\ud835\\udd22\\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\\ud835\\udd56\\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\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\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\\ud835\\udcbb\\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\\ud835\\udd24\\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\\ud835\\udd58\\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\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\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\\ud835\\udd26rave\\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\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\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\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\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\\ud835\\udd29\\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\\ud835\\udd5dus;\\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\\ud835\\udcc1m\\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\\ud835\\udd2ao;\\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\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\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\\ud835\\udd2b\\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\\ud835\\udd5f\\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\\ud835\\udcc3ort\\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\\ud835\\udd2c\\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\\ud835\\udd60\\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\\ud835\\udd2d\\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\\ud835\\udd61nd\\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\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\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\\ud835\\udd2f\\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\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\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\\ud835\\udd30\\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\\ud835\\udd64a\\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\\ud835\\udcc8tm\\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\\ud835\\udd31\\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\\ud835\\udd65rk;\\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\\ud835\\udcc9;\\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\\ud835\\udd32rave\\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\\ud835\\udd66\\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\\ud835\\udcca\\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\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\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\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\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\\ud835\\udd35\\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\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\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\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\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\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","import { decodeXML, decodeHTML, DecodingMode } from \"./decode.js\";\nimport { encodeHTML, encodeNonAsciiHTML } from \"./encode.js\";\nimport { encodeXML, escapeUTF8, escapeAttribute, escapeText, } from \"./escape.js\";\n/** The level of entities to support. */\nexport var EntityLevel;\n(function (EntityLevel) {\n    /** Support only XML entities. */\n    EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n    /** Support HTML entities, which are a superset of XML entities. */\n    EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel || (EntityLevel = {}));\nexport var EncodingMode;\n(function (EncodingMode) {\n    /**\n     * The output is UTF-8 encoded. Only characters that need escaping within\n     * XML will be escaped.\n     */\n    EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n    /**\n     * The output consists only of ASCII characters. Characters that need\n     * escaping within HTML, and characters that aren't ASCII characters will\n     * be escaped.\n     */\n    EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n    /**\n     * Encode all characters that have an equivalent entity, as well as all\n     * characters that are not ASCII characters.\n     */\n    EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n    /**\n     * Encode all characters that have to be escaped in HTML attributes,\n     * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n     */\n    EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n    /**\n     * Encode all characters that have to be escaped in HTML text,\n     * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n     */\n    EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode || (EncodingMode = {}));\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n */\nexport function decode(data, options = EntityLevel.XML) {\n    const level = typeof options === \"number\" ? options : options.level;\n    if (level === EntityLevel.HTML) {\n        const mode = typeof options === \"object\" ? options.mode : undefined;\n        return decodeHTML(data, mode);\n    }\n    return decodeXML(data);\n}\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n * @deprecated Use `decode` with the `mode` set to `Strict`.\n */\nexport function decodeStrict(data, options = EntityLevel.XML) {\n    var _a;\n    const opts = typeof options === \"number\" ? { level: options } : options;\n    (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);\n    return decode(data, opts);\n}\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param options Encoding options.\n */\nexport function encode(data, options = EntityLevel.XML) {\n    const opts = typeof options === \"number\" ? { level: options } : options;\n    // Mode `UTF8` just escapes XML entities\n    if (opts.mode === EncodingMode.UTF8)\n        return escapeUTF8(data);\n    if (opts.mode === EncodingMode.Attribute)\n        return escapeAttribute(data);\n    if (opts.mode === EncodingMode.Text)\n        return escapeText(data);\n    if (opts.level === EntityLevel.HTML) {\n        if (opts.mode === EncodingMode.ASCII) {\n            return encodeNonAsciiHTML(data);\n        }\n        return encodeHTML(data);\n    }\n    // ASCII and Extensive are equivalent\n    return encodeXML(data);\n}\nexport { encodeXML, escape, escapeUTF8, escapeAttribute, escapeText, } from \"./escape.js\";\nexport { encodeHTML, encodeNonAsciiHTML, \n// Legacy aliases (deprecated)\nencodeHTML as encodeHTML4, encodeHTML as encodeHTML5, } from \"./encode.js\";\nexport { EntityDecoder, DecodingMode, decodeXML, decodeHTML, decodeHTMLStrict, decodeHTMLAttribute, \n// Legacy aliases (deprecated)\ndecodeHTML as decodeHTML4, decodeHTML as decodeHTML5, decodeHTMLStrict as decodeHTML4Strict, decodeHTMLStrict as decodeHTML5Strict, decodeXML as decodeXMLStrict, } from \"./decode.js\";\n//# sourceMappingURL=index.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n    [0, 65533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n    let output = \"\";\n    if (codePoint > 65535) {\n        codePoint -= 65536;\n        output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);\n        codePoint = 56320 | (codePoint & 1023);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n    var _a;\n    if ((codePoint >= 55296 && codePoint <= 57343) ||\n        codePoint > 1114111) {\n        return 65533;\n    }\n    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint) {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map","import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n    CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n    CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n    CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n    CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n    CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n    CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n    CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n    CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n    CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n    CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n    CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n    BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n    EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n    EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n    EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n    /** Entities in text nodes that can end with any character. */\n    DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n    /** Only allow entities terminated with a semicolon. */\n    DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n    /** Entities in attributes have limitations on ending characters. */\n    DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n    /** The tree used to decode entities. */\n    decodeTree, \n    /**\n     * The function that is called when a codepoint is decoded.\n     *\n     * For multi-byte named entities, this will be called multiple times,\n     * with the second codepoint, and the same `consumed` value.\n     *\n     * @param codepoint The decoded codepoint.\n     * @param consumed The number of bytes consumed by the decoder.\n     */\n    emitCodePoint, \n    /** An object that is used to produce errors. */\n    errors) {\n        this.decodeTree = decodeTree;\n        this.emitCodePoint = emitCodePoint;\n        this.errors = errors;\n        /** The current state of the decoder. */\n        this.state = EntityDecoderState.EntityStart;\n        /** Characters that were consumed while parsing an entity. */\n        this.consumed = 1;\n        /**\n         * The result of the entity.\n         *\n         * Either the result index of a numeric entity, or the codepoint of a\n         * numeric entity.\n         */\n        this.result = 0;\n        /** The current index in the decode tree. */\n        this.treeIndex = 0;\n        /** The number of characters that were consumed in excess. */\n        this.excess = 1;\n        /** The mode in which the decoder is operating. */\n        this.decodeMode = DecodingMode.Strict;\n    }\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode) {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    }\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(input, offset) {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (input.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(input, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(input, offset);\n            }\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(input, offset);\n            }\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(input, offset);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(input, offset);\n            }\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(input, offset);\n            }\n        }\n    }\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericStart(input, offset) {\n        if (offset >= input.length) {\n            return -1;\n        }\n        if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(input, offset + 1);\n        }\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(input, offset);\n    }\n    addToNumericResult(input, start, end, base) {\n        if (start !== end) {\n            const digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                    Number.parseInt(input.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    }\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericHex(input, offset) {\n        const startIndex = offset;\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(input, startIndex, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        this.addToNumericResult(input, startIndex, offset, 16);\n        return -1;\n    }\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericDecimal(input, offset) {\n        const startIndex = offset;\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(input, startIndex, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        this.addToNumericResult(input, startIndex, offset, 10);\n        return -1;\n    }\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    emitNumericEntity(lastCp, expectedLength) {\n        var _a;\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n            return 0;\n        }\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        }\n        else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n        return this.consumed;\n    }\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNamedEntity(input, offset) {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n        for (; offset < input.length; offset++, this.excess++) {\n            const char = input.charCodeAt(offset);\n            this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n                }\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n        return -1;\n    }\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNotTerminatedNamedEntity() {\n        var _a;\n        const { result, decodeTree } = this;\n        const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n        return this.consumed;\n    }\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNamedEntityData(result, valueLength, consumed) {\n        const { decodeTree } = this;\n        this.emitCodePoint(valueLength === 1\n            ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n            : decodeTree[result + 1], consumed);\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n        return consumed;\n    }\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end() {\n        var _a;\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n    let returnValue = \"\";\n    const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += fromCodePoint(data)));\n    return function decodeWithTrie(input, decodeMode) {\n        let lastIndex = 0;\n        let offset = 0;\n        while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n            returnValue += input.slice(lastIndex, offset);\n            decoder.startEntity(decodeMode);\n            const length = decoder.write(input, \n            // Skip the \"&\"\n            offset + 1);\n            if (length < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n            lastIndex = offset + length;\n            // If `length` is 0, skip the current `&` and continue.\n            offset = length === 0 ? lastIndex + 1 : lastIndex;\n        }\n        const result = returnValue + input.slice(lastIndex);\n        // Make sure we don't keep a reference to the final string.\n        returnValue = \"\";\n        return result;\n    };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n    }\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIndex + value] - 1;\n    }\n    // Case 3: Multiple branches encoded in dictionary\n    // Binary search for the character.\n    let lo = nodeIndex;\n    let hi = lo + branchCount - 1;\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const midValue = decodeTree[mid];\n        if (midValue < char) {\n            lo = mid + 1;\n        }\n        else if (midValue > char) {\n            hi = mid - 1;\n        }\n        else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n    return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n    return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n    return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n    return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n    return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nexport { decodeCodePoint, replaceCodePoint, fromCodePoint, } from \"./decode-codepoint.js\";\n//# sourceMappingURL=decode.js.map","// Generated using scripts/write-decode-map.ts\nexport const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\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\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\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\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\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\\ud835\\udc9ep\\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\\ud835\\udd07\\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\\ud835\\udd3b\\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\\ud835\\udc9frok;\\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\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\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\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\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\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\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\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\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\\ud835\\udd0f\\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\\ud835\\udd43er\\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\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\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\\ud835\\udd11\\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\\ud835\\udca9ilde\\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\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\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\\ud835\\udd13i;\\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\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\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\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\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\\ud835\\udcaear;\\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\\ud835\\udd17\\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\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\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\\ud835\\udd18rave\\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\\ud835\\udd4c\\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\\ud835\\udcb0ilde;\\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\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\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\\ud835\\udcb5\\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\\ud835\\udd1erave\\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\\ud835\\udd52\\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\\ud835\\udcb6;\\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\\ud835\\udd1fg\\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\\ud835\\udd53\\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\\ud835\\udcb7mi;\\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\\ud835\\udd20\\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\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\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\\ud835\\udd21ar\\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\\ud835\\udd55\\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\\ud835\\udcb9;\\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\\ud835\\udd22\\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\\ud835\\udd56\\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\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\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\\ud835\\udcbb\\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\\ud835\\udd24\\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\\ud835\\udd58\\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\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\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\\ud835\\udd26rave\\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\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\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\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\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\\ud835\\udd29\\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\\ud835\\udd5dus;\\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\\ud835\\udcc1m\\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\\ud835\\udd2ao;\\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\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\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\\ud835\\udd2b\\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\\ud835\\udd5f\\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\\ud835\\udcc3ort\\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\\ud835\\udd2c\\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\\ud835\\udd60\\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\\ud835\\udd2d\\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\\ud835\\udd61nd\\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\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\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\\ud835\\udd2f\\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\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\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\\ud835\\udd30\\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\\ud835\\udd64a\\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\\ud835\\udcc8tm\\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\\ud835\\udd31\\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\\ud835\\udd65rk;\\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\\ud835\\udcc9;\\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\\ud835\\udd32rave\\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\\ud835\\udd66\\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\\ud835\\udcca\\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\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\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\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\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\\ud835\\udd35\\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\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\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\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\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\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport const xmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","import Tokenizer, { QuoteType } from \"./Tokenizer.js\";\nimport { fromCodePoint } from \"entities/decode\";\nconst formTags = new Set([\n    \"input\",\n    \"option\",\n    \"optgroup\",\n    \"select\",\n    \"button\",\n    \"datalist\",\n    \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\nconst openImpliesClose = new Map([\n    [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n    [\"th\", new Set([\"th\"])],\n    [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n    [\"body\", new Set([\"head\", \"link\", \"script\"])],\n    [\"li\", new Set([\"li\"])],\n    [\"p\", pTag],\n    [\"h1\", pTag],\n    [\"h2\", pTag],\n    [\"h3\", pTag],\n    [\"h4\", pTag],\n    [\"h5\", pTag],\n    [\"h6\", pTag],\n    [\"select\", formTags],\n    [\"input\", formTags],\n    [\"output\", formTags],\n    [\"button\", formTags],\n    [\"datalist\", formTags],\n    [\"textarea\", formTags],\n    [\"option\", new Set([\"option\"])],\n    [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n    [\"dd\", ddtTags],\n    [\"dt\", ddtTags],\n    [\"address\", pTag],\n    [\"article\", pTag],\n    [\"aside\", pTag],\n    [\"blockquote\", pTag],\n    [\"details\", pTag],\n    [\"div\", pTag],\n    [\"dl\", pTag],\n    [\"fieldset\", pTag],\n    [\"figcaption\", pTag],\n    [\"figure\", pTag],\n    [\"footer\", pTag],\n    [\"form\", pTag],\n    [\"header\", pTag],\n    [\"hr\", pTag],\n    [\"main\", pTag],\n    [\"nav\", pTag],\n    [\"ol\", pTag],\n    [\"pre\", pTag],\n    [\"section\", pTag],\n    [\"table\", pTag],\n    [\"ul\", pTag],\n    [\"rt\", rtpTags],\n    [\"rp\", rtpTags],\n    [\"tbody\", tableSectionTags],\n    [\"tfoot\", tableSectionTags],\n]);\nconst voidElements = new Set([\n    \"area\",\n    \"base\",\n    \"basefont\",\n    \"br\",\n    \"col\",\n    \"command\",\n    \"embed\",\n    \"frame\",\n    \"hr\",\n    \"img\",\n    \"input\",\n    \"isindex\",\n    \"keygen\",\n    \"link\",\n    \"meta\",\n    \"param\",\n    \"source\",\n    \"track\",\n    \"wbr\",\n]);\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\nconst htmlIntegrationElements = new Set([\n    \"mi\",\n    \"mo\",\n    \"mn\",\n    \"ms\",\n    \"mtext\",\n    \"annotation-xml\",\n    \"foreignobject\",\n    \"desc\",\n    \"title\",\n]);\nconst reNameEnd = /\\s|\\//;\nexport class Parser {\n    constructor(cbs, options = {}) {\n        var _a, _b, _c, _d, _e, _f;\n        this.options = options;\n        /** The start index of the last event. */\n        this.startIndex = 0;\n        /** The end index of the last event. */\n        this.endIndex = 0;\n        /**\n         * Store the start index of the current open tag,\n         * so we can update the start index for attributes.\n         */\n        this.openTagStart = 0;\n        this.tagname = \"\";\n        this.attribname = \"\";\n        this.attribvalue = \"\";\n        this.attribs = null;\n        this.stack = [];\n        this.buffers = [];\n        this.bufferOffset = 0;\n        /** The index of the last written buffer. Used when resuming after a `pause()`. */\n        this.writeIndex = 0;\n        /** Indicates whether the parser has finished running / `.end` has been called. */\n        this.ended = false;\n        this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n        this.htmlMode = !this.options.xmlMode;\n        this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;\n        this.lowerCaseAttributeNames =\n            (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;\n        this.recognizeSelfClosing =\n            (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;\n        this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);\n        this.foreignContext = [!this.htmlMode];\n        (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);\n    }\n    // Tokenizer event handlers\n    /** @internal */\n    ontext(start, endIndex) {\n        var _a, _b;\n        const data = this.getSlice(start, endIndex);\n        this.endIndex = endIndex - 1;\n        (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n        this.startIndex = endIndex;\n    }\n    /** @internal */\n    ontextentity(cp, endIndex) {\n        var _a, _b;\n        this.endIndex = endIndex - 1;\n        (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, fromCodePoint(cp));\n        this.startIndex = endIndex;\n    }\n    /**\n     * Checks if the current tag is a void element. Override this if you want\n     * to specify your own additional void elements.\n     */\n    isVoidElement(name) {\n        return this.htmlMode && voidElements.has(name);\n    }\n    /** @internal */\n    onopentagname(start, endIndex) {\n        this.endIndex = endIndex;\n        let name = this.getSlice(start, endIndex);\n        if (this.lowerCaseTagNames) {\n            name = name.toLowerCase();\n        }\n        this.emitOpenTag(name);\n    }\n    emitOpenTag(name) {\n        var _a, _b, _c, _d;\n        this.openTagStart = this.startIndex;\n        this.tagname = name;\n        const impliesClose = this.htmlMode && openImpliesClose.get(name);\n        if (impliesClose) {\n            while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n                const element = this.stack.shift();\n                (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);\n            }\n        }\n        if (!this.isVoidElement(name)) {\n            this.stack.unshift(name);\n            if (this.htmlMode) {\n                if (foreignContextElements.has(name)) {\n                    this.foreignContext.unshift(true);\n                }\n                else if (htmlIntegrationElements.has(name)) {\n                    this.foreignContext.unshift(false);\n                }\n            }\n        }\n        (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n        if (this.cbs.onopentag)\n            this.attribs = {};\n    }\n    endOpenTag(isImplied) {\n        var _a, _b;\n        this.startIndex = this.openTagStart;\n        if (this.attribs) {\n            (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n            this.attribs = null;\n        }\n        if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n            this.cbs.onclosetag(this.tagname, true);\n        }\n        this.tagname = \"\";\n    }\n    /** @internal */\n    onopentagend(endIndex) {\n        this.endIndex = endIndex;\n        this.endOpenTag(false);\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n    /** @internal */\n    onclosetag(start, endIndex) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        this.endIndex = endIndex;\n        let name = this.getSlice(start, endIndex);\n        if (this.lowerCaseTagNames) {\n            name = name.toLowerCase();\n        }\n        if (this.htmlMode &&\n            (foreignContextElements.has(name) ||\n                htmlIntegrationElements.has(name))) {\n            this.foreignContext.shift();\n        }\n        if (!this.isVoidElement(name)) {\n            const pos = this.stack.indexOf(name);\n            if (pos !== -1) {\n                for (let index = 0; index <= pos; index++) {\n                    const element = this.stack.shift();\n                    // We know the stack has sufficient elements.\n                    (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);\n                }\n            }\n            else if (this.htmlMode && name === \"p\") {\n                // Implicit open before close\n                this.emitOpenTag(\"p\");\n                this.closeCurrentTag(true);\n            }\n        }\n        else if (this.htmlMode && name === \"br\") {\n            // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n            (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\");\n            (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", {}, true);\n            (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, \"br\", false);\n        }\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n    /** @internal */\n    onselfclosingtag(endIndex) {\n        this.endIndex = endIndex;\n        if (this.recognizeSelfClosing || this.foreignContext[0]) {\n            this.closeCurrentTag(false);\n            // Set `startIndex` for next node\n            this.startIndex = endIndex + 1;\n        }\n        else {\n            // Ignore the fact that the tag is self-closing.\n            this.onopentagend(endIndex);\n        }\n    }\n    closeCurrentTag(isOpenImplied) {\n        var _a, _b;\n        const name = this.tagname;\n        this.endOpenTag(isOpenImplied);\n        // Self-closing tags will be on the top of the stack\n        if (this.stack[0] === name) {\n            // If the opening tag isn't implied, the closing tag has to be implied.\n            (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n            this.stack.shift();\n        }\n    }\n    /** @internal */\n    onattribname(start, endIndex) {\n        this.startIndex = start;\n        const name = this.getSlice(start, endIndex);\n        this.attribname = this.lowerCaseAttributeNames\n            ? name.toLowerCase()\n            : name;\n    }\n    /** @internal */\n    onattribdata(start, endIndex) {\n        this.attribvalue += this.getSlice(start, endIndex);\n    }\n    /** @internal */\n    onattribentity(cp) {\n        this.attribvalue += fromCodePoint(cp);\n    }\n    /** @internal */\n    onattribend(quote, endIndex) {\n        var _a, _b;\n        this.endIndex = endIndex;\n        (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === QuoteType.Double\n            ? '\"'\n            : quote === QuoteType.Single\n                ? \"'\"\n                : quote === QuoteType.NoValue\n                    ? undefined\n                    : null);\n        if (this.attribs &&\n            !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n            this.attribs[this.attribname] = this.attribvalue;\n        }\n        this.attribvalue = \"\";\n    }\n    getInstructionName(value) {\n        const index = value.search(reNameEnd);\n        let name = index < 0 ? value : value.substr(0, index);\n        if (this.lowerCaseTagNames) {\n            name = name.toLowerCase();\n        }\n        return name;\n    }\n    /** @internal */\n    ondeclaration(start, endIndex) {\n        this.endIndex = endIndex;\n        const value = this.getSlice(start, endIndex);\n        if (this.cbs.onprocessinginstruction) {\n            const name = this.getInstructionName(value);\n            this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n        }\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n    /** @internal */\n    onprocessinginstruction(start, endIndex) {\n        this.endIndex = endIndex;\n        const value = this.getSlice(start, endIndex);\n        if (this.cbs.onprocessinginstruction) {\n            const name = this.getInstructionName(value);\n            this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n        }\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n    /** @internal */\n    oncomment(start, endIndex, offset) {\n        var _a, _b, _c, _d;\n        this.endIndex = endIndex;\n        (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n        (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n    /** @internal */\n    oncdata(start, endIndex, offset) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n        this.endIndex = endIndex;\n        const value = this.getSlice(start, endIndex - offset);\n        if (!this.htmlMode || this.options.recognizeCDATA) {\n            (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n            (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n            (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n        }\n        else {\n            (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);\n            (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n        }\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n    /** @internal */\n    onend() {\n        var _a, _b;\n        if (this.cbs.onclosetag) {\n            // Set the end index for all remaining tags\n            this.endIndex = this.startIndex;\n            for (let index = 0; index < this.stack.length; index++) {\n                this.cbs.onclosetag(this.stack[index], true);\n            }\n        }\n        (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n    }\n    /**\n     * Resets the parser to a blank state, ready to parse a new HTML document\n     */\n    reset() {\n        var _a, _b, _c, _d;\n        (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n        this.tokenizer.reset();\n        this.tagname = \"\";\n        this.attribname = \"\";\n        this.attribs = null;\n        this.stack.length = 0;\n        this.startIndex = 0;\n        this.endIndex = 0;\n        (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n        this.buffers.length = 0;\n        this.foreignContext.length = 0;\n        this.foreignContext.unshift(!this.htmlMode);\n        this.bufferOffset = 0;\n        this.writeIndex = 0;\n        this.ended = false;\n    }\n    /**\n     * Resets the parser, then parses a complete document and\n     * pushes it to the handler.\n     *\n     * @param data Document to parse.\n     */\n    parseComplete(data) {\n        this.reset();\n        this.end(data);\n    }\n    getSlice(start, end) {\n        while (start - this.bufferOffset >= this.buffers[0].length) {\n            this.shiftBuffer();\n        }\n        let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n        while (end - this.bufferOffset > this.buffers[0].length) {\n            this.shiftBuffer();\n            slice += this.buffers[0].slice(0, end - this.bufferOffset);\n        }\n        return slice;\n    }\n    shiftBuffer() {\n        this.bufferOffset += this.buffers[0].length;\n        this.writeIndex--;\n        this.buffers.shift();\n    }\n    /**\n     * Parses a chunk of data and calls the corresponding callbacks.\n     *\n     * @param chunk Chunk to parse.\n     */\n    write(chunk) {\n        var _a, _b;\n        if (this.ended) {\n            (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n            return;\n        }\n        this.buffers.push(chunk);\n        if (this.tokenizer.running) {\n            this.tokenizer.write(chunk);\n            this.writeIndex++;\n        }\n    }\n    /**\n     * Parses the end of the buffer and clears the stack, calls onend.\n     *\n     * @param chunk Optional final chunk to parse.\n     */\n    end(chunk) {\n        var _a, _b;\n        if (this.ended) {\n            (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".end() after done!\"));\n            return;\n        }\n        if (chunk)\n            this.write(chunk);\n        this.ended = true;\n        this.tokenizer.end();\n    }\n    /**\n     * Pauses parsing. The parser won't emit events until `resume` is called.\n     */\n    pause() {\n        this.tokenizer.pause();\n    }\n    /**\n     * Resumes parsing after `pause` was called.\n     */\n    resume() {\n        this.tokenizer.resume();\n        while (this.tokenizer.running &&\n            this.writeIndex < this.buffers.length) {\n            this.tokenizer.write(this.buffers[this.writeIndex++]);\n        }\n        if (this.ended)\n            this.tokenizer.end();\n    }\n    /**\n     * Alias of `write`, for backwards compatibility.\n     *\n     * @param chunk Chunk to parse.\n     * @deprecated\n     */\n    parseChunk(chunk) {\n        this.write(chunk);\n    }\n    /**\n     * Alias of `end`, for backwards compatibility.\n     *\n     * @param chunk Optional final chunk to parse.\n     * @deprecated\n     */\n    done(chunk) {\n        this.end(chunk);\n    }\n}\n//# sourceMappingURL=Parser.js.map","import { EntityDecoder, DecodingMode, htmlDecodeTree, xmlDecodeTree, } from \"entities/decode\";\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n    CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n    CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n    CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n    CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n    CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n    CharCodes[CharCodes[\"Number\"] = 35] = \"Number\";\n    CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n    CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n    CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n    CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n    CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n    CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n    CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n    CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n    CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n    CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n    CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n    CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n    CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n    CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n    CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n    CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n    CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n    CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n    CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n    CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n})(CharCodes || (CharCodes = {}));\n/** All the states the tokenizer can be in. */\nvar State;\n(function (State) {\n    State[State[\"Text\"] = 1] = \"Text\";\n    State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n    State[State[\"InTagName\"] = 3] = \"InTagName\";\n    State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n    State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n    State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n    State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n    // Attributes\n    State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n    State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n    State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n    State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n    State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n    State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n    State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n    // Declarations\n    State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n    State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n    // Processing instructions\n    State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n    // Comments & CDATA\n    State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n    State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n    State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n    State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n    // Special tags\n    State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n    State[State[\"BeforeSpecialT\"] = 23] = \"BeforeSpecialT\";\n    State[State[\"SpecialStartSequence\"] = 24] = \"SpecialStartSequence\";\n    State[State[\"InSpecialTag\"] = 25] = \"InSpecialTag\";\n    State[State[\"InEntity\"] = 26] = \"InEntity\";\n})(State || (State = {}));\nfunction isWhitespace(c) {\n    return (c === CharCodes.Space ||\n        c === CharCodes.NewLine ||\n        c === CharCodes.Tab ||\n        c === CharCodes.FormFeed ||\n        c === CharCodes.CarriageReturn);\n}\nfunction isEndOfTagSection(c) {\n    return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isASCIIAlpha(c) {\n    return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n        (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));\n}\nexport var QuoteType;\n(function (QuoteType) {\n    QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n    QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n    QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n    QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n})(QuoteType || (QuoteType = {}));\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n    Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n    CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n    CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`\n    ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n    StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n    TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n    TextareaEnd: new Uint8Array([\n        0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n    ]), // `</textarea`\n    XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\nexport default class Tokenizer {\n    constructor({ xmlMode = false, decodeEntities = true, }, cbs) {\n        this.cbs = cbs;\n        /** The current state the tokenizer is in. */\n        this.state = State.Text;\n        /** The read buffer. */\n        this.buffer = \"\";\n        /** The beginning of the section that is currently being read. */\n        this.sectionStart = 0;\n        /** The index within the buffer that we are currently looking at. */\n        this.index = 0;\n        /** The start of the last entity. */\n        this.entityStart = 0;\n        /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n        this.baseState = State.Text;\n        /** For special parsing behavior inside of script and style tags. */\n        this.isSpecial = false;\n        /** Indicates whether the tokenizer has been paused. */\n        this.running = true;\n        /** The offset of the current buffer. */\n        this.offset = 0;\n        this.currentSequence = undefined;\n        this.sequenceIndex = 0;\n        this.xmlMode = xmlMode;\n        this.decodeEntities = decodeEntities;\n        this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));\n    }\n    reset() {\n        this.state = State.Text;\n        this.buffer = \"\";\n        this.sectionStart = 0;\n        this.index = 0;\n        this.baseState = State.Text;\n        this.currentSequence = undefined;\n        this.running = true;\n        this.offset = 0;\n    }\n    write(chunk) {\n        this.offset += this.buffer.length;\n        this.buffer = chunk;\n        this.parse();\n    }\n    end() {\n        if (this.running)\n            this.finish();\n    }\n    pause() {\n        this.running = false;\n    }\n    resume() {\n        this.running = true;\n        if (this.index < this.buffer.length + this.offset) {\n            this.parse();\n        }\n    }\n    stateText(c) {\n        if (c === CharCodes.Lt ||\n            (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {\n            if (this.index > this.sectionStart) {\n                this.cbs.ontext(this.sectionStart, this.index);\n            }\n            this.state = State.BeforeTagName;\n            this.sectionStart = this.index;\n        }\n        else if (this.decodeEntities && c === CharCodes.Amp) {\n            this.startEntity();\n        }\n    }\n    stateSpecialStartSequence(c) {\n        const isEnd = this.sequenceIndex === this.currentSequence.length;\n        const isMatch = isEnd\n            ? // If we are at the end of the sequence, make sure the tag name has ended\n                isEndOfTagSection(c)\n            : // Otherwise, do a case-insensitive comparison\n                (c | 0x20) === this.currentSequence[this.sequenceIndex];\n        if (!isMatch) {\n            this.isSpecial = false;\n        }\n        else if (!isEnd) {\n            this.sequenceIndex++;\n            return;\n        }\n        this.sequenceIndex = 0;\n        this.state = State.InTagName;\n        this.stateInTagName(c);\n    }\n    /** Look for an end tag. For <title> tags, also decode entities. */\n    stateInSpecialTag(c) {\n        if (this.sequenceIndex === this.currentSequence.length) {\n            if (c === CharCodes.Gt || isWhitespace(c)) {\n                const endOfText = this.index - this.currentSequence.length;\n                if (this.sectionStart < endOfText) {\n                    // Spoof the index so that reported locations match up.\n                    const actualIndex = this.index;\n                    this.index = endOfText;\n                    this.cbs.ontext(this.sectionStart, endOfText);\n                    this.index = actualIndex;\n                }\n                this.isSpecial = false;\n                this.sectionStart = endOfText + 2; // Skip over the `</`\n                this.stateInClosingTagName(c);\n                return; // We are done; skip the rest of the function.\n            }\n            this.sequenceIndex = 0;\n        }\n        if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n            this.sequenceIndex += 1;\n        }\n        else if (this.sequenceIndex === 0) {\n            if (this.currentSequence === Sequences.TitleEnd) {\n                // We have to parse entities in <title> tags.\n                if (this.decodeEntities && c === CharCodes.Amp) {\n                    this.startEntity();\n                }\n            }\n            else if (this.fastForwardTo(CharCodes.Lt)) {\n                // Outside of <title> tags, we can fast-forward.\n                this.sequenceIndex = 1;\n            }\n        }\n        else {\n            // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n            this.sequenceIndex = Number(c === CharCodes.Lt);\n        }\n    }\n    stateCDATASequence(c) {\n        if (c === Sequences.Cdata[this.sequenceIndex]) {\n            if (++this.sequenceIndex === Sequences.Cdata.length) {\n                this.state = State.InCommentLike;\n                this.currentSequence = Sequences.CdataEnd;\n                this.sequenceIndex = 0;\n                this.sectionStart = this.index + 1;\n            }\n        }\n        else {\n            this.sequenceIndex = 0;\n            this.state = State.InDeclaration;\n            this.stateInDeclaration(c); // Reconsume the character\n        }\n    }\n    /**\n     * When we wait for one specific character, we can speed things up\n     * by skipping through the buffer until we find it.\n     *\n     * @returns Whether the character was found.\n     */\n    fastForwardTo(c) {\n        while (++this.index < this.buffer.length + this.offset) {\n            if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n                return true;\n            }\n        }\n        /*\n         * We increment the index at the end of the `parse` loop,\n         * so set it to `buffer.length - 1` here.\n         *\n         * TODO: Refactor `parse` to increment index before calling states.\n         */\n        this.index = this.buffer.length + this.offset - 1;\n        return false;\n    }\n    /**\n     * Comments and CDATA end with `-->` and `]]>`.\n     *\n     * Their common qualities are:\n     * - Their end sequences have a distinct character they start with.\n     * - That character is then repeated, so we have to check multiple repeats.\n     * - All characters but the start character of the sequence can be skipped.\n     */\n    stateInCommentLike(c) {\n        if (c === this.currentSequence[this.sequenceIndex]) {\n            if (++this.sequenceIndex === this.currentSequence.length) {\n                if (this.currentSequence === Sequences.CdataEnd) {\n                    this.cbs.oncdata(this.sectionStart, this.index, 2);\n                }\n                else {\n                    this.cbs.oncomment(this.sectionStart, this.index, 2);\n                }\n                this.sequenceIndex = 0;\n                this.sectionStart = this.index + 1;\n                this.state = State.Text;\n            }\n        }\n        else if (this.sequenceIndex === 0) {\n            // Fast-forward to the first character of the sequence\n            if (this.fastForwardTo(this.currentSequence[0])) {\n                this.sequenceIndex = 1;\n            }\n        }\n        else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n            // Allow long sequences, eg. --->, ]]]>\n            this.sequenceIndex = 0;\n        }\n    }\n    /**\n     * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n     *\n     * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n     * We allow anything that wouldn't end the tag.\n     */\n    isTagStartChar(c) {\n        return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n    }\n    startSpecial(sequence, offset) {\n        this.isSpecial = true;\n        this.currentSequence = sequence;\n        this.sequenceIndex = offset;\n        this.state = State.SpecialStartSequence;\n    }\n    stateBeforeTagName(c) {\n        if (c === CharCodes.ExclamationMark) {\n            this.state = State.BeforeDeclaration;\n            this.sectionStart = this.index + 1;\n        }\n        else if (c === CharCodes.Questionmark) {\n            this.state = State.InProcessingInstruction;\n            this.sectionStart = this.index + 1;\n        }\n        else if (this.isTagStartChar(c)) {\n            const lower = c | 0x20;\n            this.sectionStart = this.index;\n            if (this.xmlMode) {\n                this.state = State.InTagName;\n            }\n            else if (lower === Sequences.ScriptEnd[2]) {\n                this.state = State.BeforeSpecialS;\n            }\n            else if (lower === Sequences.TitleEnd[2] ||\n                lower === Sequences.XmpEnd[2]) {\n                this.state = State.BeforeSpecialT;\n            }\n            else {\n                this.state = State.InTagName;\n            }\n        }\n        else if (c === CharCodes.Slash) {\n            this.state = State.BeforeClosingTagName;\n        }\n        else {\n            this.state = State.Text;\n            this.stateText(c);\n        }\n    }\n    stateInTagName(c) {\n        if (isEndOfTagSection(c)) {\n            this.cbs.onopentagname(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        }\n    }\n    stateBeforeClosingTagName(c) {\n        if (isWhitespace(c)) {\n            // Ignore\n        }\n        else if (c === CharCodes.Gt) {\n            this.state = State.Text;\n        }\n        else {\n            this.state = this.isTagStartChar(c)\n                ? State.InClosingTagName\n                : State.InSpecialComment;\n            this.sectionStart = this.index;\n        }\n    }\n    stateInClosingTagName(c) {\n        if (c === CharCodes.Gt || isWhitespace(c)) {\n            this.cbs.onclosetag(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.state = State.AfterClosingTagName;\n            this.stateAfterClosingTagName(c);\n        }\n    }\n    stateAfterClosingTagName(c) {\n        // Skip everything until \">\"\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    stateBeforeAttributeName(c) {\n        if (c === CharCodes.Gt) {\n            this.cbs.onopentagend(this.index);\n            if (this.isSpecial) {\n                this.state = State.InSpecialTag;\n                this.sequenceIndex = 0;\n            }\n            else {\n                this.state = State.Text;\n            }\n            this.sectionStart = this.index + 1;\n        }\n        else if (c === CharCodes.Slash) {\n            this.state = State.InSelfClosingTag;\n        }\n        else if (!isWhitespace(c)) {\n            this.state = State.InAttributeName;\n            this.sectionStart = this.index;\n        }\n    }\n    stateInSelfClosingTag(c) {\n        if (c === CharCodes.Gt) {\n            this.cbs.onselfclosingtag(this.index);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n            this.isSpecial = false; // Reset special state, in case of self-closing special tags\n        }\n        else if (!isWhitespace(c)) {\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        }\n    }\n    stateInAttributeName(c) {\n        if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n            this.cbs.onattribname(this.sectionStart, this.index);\n            this.sectionStart = this.index;\n            this.state = State.AfterAttributeName;\n            this.stateAfterAttributeName(c);\n        }\n    }\n    stateAfterAttributeName(c) {\n        if (c === CharCodes.Eq) {\n            this.state = State.BeforeAttributeValue;\n        }\n        else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n            this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n            this.sectionStart = -1;\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        }\n        else if (!isWhitespace(c)) {\n            this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n            this.state = State.InAttributeName;\n            this.sectionStart = this.index;\n        }\n    }\n    stateBeforeAttributeValue(c) {\n        if (c === CharCodes.DoubleQuote) {\n            this.state = State.InAttributeValueDq;\n            this.sectionStart = this.index + 1;\n        }\n        else if (c === CharCodes.SingleQuote) {\n            this.state = State.InAttributeValueSq;\n            this.sectionStart = this.index + 1;\n        }\n        else if (!isWhitespace(c)) {\n            this.sectionStart = this.index;\n            this.state = State.InAttributeValueNq;\n            this.stateInAttributeValueNoQuotes(c); // Reconsume token\n        }\n    }\n    handleInAttributeValue(c, quote) {\n        if (c === quote ||\n            (!this.decodeEntities && this.fastForwardTo(quote))) {\n            this.cbs.onattribdata(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.cbs.onattribend(quote === CharCodes.DoubleQuote\n                ? QuoteType.Double\n                : QuoteType.Single, this.index + 1);\n            this.state = State.BeforeAttributeName;\n        }\n        else if (this.decodeEntities && c === CharCodes.Amp) {\n            this.startEntity();\n        }\n    }\n    stateInAttributeValueDoubleQuotes(c) {\n        this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n    }\n    stateInAttributeValueSingleQuotes(c) {\n        this.handleInAttributeValue(c, CharCodes.SingleQuote);\n    }\n    stateInAttributeValueNoQuotes(c) {\n        if (isWhitespace(c) || c === CharCodes.Gt) {\n            this.cbs.onattribdata(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.cbs.onattribend(QuoteType.Unquoted, this.index);\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        }\n        else if (this.decodeEntities && c === CharCodes.Amp) {\n            this.startEntity();\n        }\n    }\n    stateBeforeDeclaration(c) {\n        if (c === CharCodes.OpeningSquareBracket) {\n            this.state = State.CDATASequence;\n            this.sequenceIndex = 0;\n        }\n        else {\n            this.state =\n                c === CharCodes.Dash\n                    ? State.BeforeComment\n                    : State.InDeclaration;\n        }\n    }\n    stateInDeclaration(c) {\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.cbs.ondeclaration(this.sectionStart, this.index);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    stateInProcessingInstruction(c) {\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    stateBeforeComment(c) {\n        if (c === CharCodes.Dash) {\n            this.state = State.InCommentLike;\n            this.currentSequence = Sequences.CommentEnd;\n            // Allow short comments (eg. <!-->)\n            this.sequenceIndex = 2;\n            this.sectionStart = this.index + 1;\n        }\n        else {\n            this.state = State.InDeclaration;\n        }\n    }\n    stateInSpecialComment(c) {\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.cbs.oncomment(this.sectionStart, this.index, 0);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    stateBeforeSpecialS(c) {\n        const lower = c | 0x20;\n        if (lower === Sequences.ScriptEnd[3]) {\n            this.startSpecial(Sequences.ScriptEnd, 4);\n        }\n        else if (lower === Sequences.StyleEnd[3]) {\n            this.startSpecial(Sequences.StyleEnd, 4);\n        }\n        else {\n            this.state = State.InTagName;\n            this.stateInTagName(c); // Consume the token again\n        }\n    }\n    stateBeforeSpecialT(c) {\n        const lower = c | 0x20;\n        switch (lower) {\n            case Sequences.TitleEnd[3]: {\n                this.startSpecial(Sequences.TitleEnd, 4);\n                break;\n            }\n            case Sequences.TextareaEnd[3]: {\n                this.startSpecial(Sequences.TextareaEnd, 4);\n                break;\n            }\n            case Sequences.XmpEnd[3]: {\n                this.startSpecial(Sequences.XmpEnd, 4);\n                break;\n            }\n            default: {\n                this.state = State.InTagName;\n                this.stateInTagName(c); // Consume the token again\n            }\n        }\n    }\n    startEntity() {\n        this.baseState = this.state;\n        this.state = State.InEntity;\n        this.entityStart = this.index;\n        this.entityDecoder.startEntity(this.xmlMode\n            ? DecodingMode.Strict\n            : this.baseState === State.Text ||\n                this.baseState === State.InSpecialTag\n                ? DecodingMode.Legacy\n                : DecodingMode.Attribute);\n    }\n    stateInEntity() {\n        const length = this.entityDecoder.write(this.buffer, this.index - this.offset);\n        // If `length` is positive, we are done with the entity.\n        if (length >= 0) {\n            this.state = this.baseState;\n            if (length === 0) {\n                this.index = this.entityStart;\n            }\n        }\n        else {\n            // Mark buffer as consumed.\n            this.index = this.offset + this.buffer.length - 1;\n        }\n    }\n    /**\n     * Remove data that has already been consumed from the buffer.\n     */\n    cleanup() {\n        // If we are inside of text or attributes, emit what we already have.\n        if (this.running && this.sectionStart !== this.index) {\n            if (this.state === State.Text ||\n                (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {\n                this.cbs.ontext(this.sectionStart, this.index);\n                this.sectionStart = this.index;\n            }\n            else if (this.state === State.InAttributeValueDq ||\n                this.state === State.InAttributeValueSq ||\n                this.state === State.InAttributeValueNq) {\n                this.cbs.onattribdata(this.sectionStart, this.index);\n                this.sectionStart = this.index;\n            }\n        }\n    }\n    shouldContinue() {\n        return this.index < this.buffer.length + this.offset && this.running;\n    }\n    /**\n     * Iterates through the buffer, calling the function corresponding to the current state.\n     *\n     * States that are more likely to be hit are higher up, as a performance improvement.\n     */\n    parse() {\n        while (this.shouldContinue()) {\n            const c = this.buffer.charCodeAt(this.index - this.offset);\n            switch (this.state) {\n                case State.Text: {\n                    this.stateText(c);\n                    break;\n                }\n                case State.SpecialStartSequence: {\n                    this.stateSpecialStartSequence(c);\n                    break;\n                }\n                case State.InSpecialTag: {\n                    this.stateInSpecialTag(c);\n                    break;\n                }\n                case State.CDATASequence: {\n                    this.stateCDATASequence(c);\n                    break;\n                }\n                case State.InAttributeValueDq: {\n                    this.stateInAttributeValueDoubleQuotes(c);\n                    break;\n                }\n                case State.InAttributeName: {\n                    this.stateInAttributeName(c);\n                    break;\n                }\n                case State.InCommentLike: {\n                    this.stateInCommentLike(c);\n                    break;\n                }\n                case State.InSpecialComment: {\n                    this.stateInSpecialComment(c);\n                    break;\n                }\n                case State.BeforeAttributeName: {\n                    this.stateBeforeAttributeName(c);\n                    break;\n                }\n                case State.InTagName: {\n                    this.stateInTagName(c);\n                    break;\n                }\n                case State.InClosingTagName: {\n                    this.stateInClosingTagName(c);\n                    break;\n                }\n                case State.BeforeTagName: {\n                    this.stateBeforeTagName(c);\n                    break;\n                }\n                case State.AfterAttributeName: {\n                    this.stateAfterAttributeName(c);\n                    break;\n                }\n                case State.InAttributeValueSq: {\n                    this.stateInAttributeValueSingleQuotes(c);\n                    break;\n                }\n                case State.BeforeAttributeValue: {\n                    this.stateBeforeAttributeValue(c);\n                    break;\n                }\n                case State.BeforeClosingTagName: {\n                    this.stateBeforeClosingTagName(c);\n                    break;\n                }\n                case State.AfterClosingTagName: {\n                    this.stateAfterClosingTagName(c);\n                    break;\n                }\n                case State.BeforeSpecialS: {\n                    this.stateBeforeSpecialS(c);\n                    break;\n                }\n                case State.BeforeSpecialT: {\n                    this.stateBeforeSpecialT(c);\n                    break;\n                }\n                case State.InAttributeValueNq: {\n                    this.stateInAttributeValueNoQuotes(c);\n                    break;\n                }\n                case State.InSelfClosingTag: {\n                    this.stateInSelfClosingTag(c);\n                    break;\n                }\n                case State.InDeclaration: {\n                    this.stateInDeclaration(c);\n                    break;\n                }\n                case State.BeforeDeclaration: {\n                    this.stateBeforeDeclaration(c);\n                    break;\n                }\n                case State.BeforeComment: {\n                    this.stateBeforeComment(c);\n                    break;\n                }\n                case State.InProcessingInstruction: {\n                    this.stateInProcessingInstruction(c);\n                    break;\n                }\n                case State.InEntity: {\n                    this.stateInEntity();\n                    break;\n                }\n            }\n            this.index++;\n        }\n        this.cleanup();\n    }\n    finish() {\n        if (this.state === State.InEntity) {\n            this.entityDecoder.end();\n            this.state = this.baseState;\n        }\n        this.handleTrailingData();\n        this.cbs.onend();\n    }\n    /** Handle any trailing data. */\n    handleTrailingData() {\n        const endIndex = this.buffer.length + this.offset;\n        // If there is no remaining data, we are done.\n        if (this.sectionStart >= endIndex) {\n            return;\n        }\n        if (this.state === State.InCommentLike) {\n            if (this.currentSequence === Sequences.CdataEnd) {\n                this.cbs.oncdata(this.sectionStart, endIndex, 0);\n            }\n            else {\n                this.cbs.oncomment(this.sectionStart, endIndex, 0);\n            }\n        }\n        else if (this.state === State.InTagName ||\n            this.state === State.BeforeAttributeName ||\n            this.state === State.BeforeAttributeValue ||\n            this.state === State.AfterAttributeName ||\n            this.state === State.InAttributeName ||\n            this.state === State.InAttributeValueSq ||\n            this.state === State.InAttributeValueDq ||\n            this.state === State.InAttributeValueNq ||\n            this.state === State.InClosingTagName) {\n            /*\n             * If we are currently in an opening or closing tag, us not calling the\n             * respective callback signals that the tag should be ignored.\n             */\n        }\n        else {\n            this.cbs.ontext(this.sectionStart, endIndex);\n        }\n    }\n    emitCodePoint(cp, consumed) {\n        if (this.baseState !== State.Text &&\n            this.baseState !== State.InSpecialTag) {\n            if (this.sectionStart < this.entityStart) {\n                this.cbs.onattribdata(this.sectionStart, this.entityStart);\n            }\n            this.sectionStart = this.entityStart + consumed;\n            this.index = this.sectionStart - 1;\n            this.cbs.onattribentity(cp);\n        }\n        else {\n            if (this.sectionStart < this.entityStart) {\n                this.cbs.ontext(this.sectionStart, this.entityStart);\n            }\n            this.sectionStart = this.entityStart + consumed;\n            this.index = this.sectionStart - 1;\n            this.cbs.ontextentity(cp, this.sectionStart);\n        }\n    }\n}\n//# sourceMappingURL=Tokenizer.js.map","\nexport function scramtag() {\n    return (\"\"+1e10).replace(/[018]/g,\n      c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n    );\n}\n","/* @ts-self-types=\"./wasm.d.ts\" */\nimport { scramtag } from './snippets/wasm-4b0f351a8e6eeb46/inline0.js';\n\nexport class Rewriter {\n    __destroy_into_raw() {\n        const ptr = this.__wbg_ptr;\n        this.__wbg_ptr = 0;\n        RewriterFinalization.unregister(this);\n        return ptr;\n    }\n    free() {\n        const ptr = this.__destroy_into_raw();\n        wasm.__wbg_rewriter_free(ptr, 0);\n    }\n    constructor() {\n        const ret = wasm.rewriter_new();\n        if (ret[2]) {\n            throw takeFromExternrefTable0(ret[1]);\n        }\n        this.__wbg_ptr = ret[0] >>> 0;\n        RewriterFinalization.register(this, this.__wbg_ptr, this);\n        return this;\n    }\n    /**\n     * @param {object} jsconfig\n     * @param {object} jsflags\n     * @param {object} encode_url\n     * @param {string} js\n     * @param {string} base\n     * @param {string} url\n     * @param {boolean} module\n     * @returns {JsRewriterOutput}\n     */\n    rewrite_js(jsconfig, jsflags, encode_url, js, base, url, module) {\n        const ptr0 = passStringToWasm0(js, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len0 = WASM_VECTOR_LEN;\n        const ptr1 = passStringToWasm0(base, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len1 = WASM_VECTOR_LEN;\n        const ptr2 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len2 = WASM_VECTOR_LEN;\n        const ret = wasm.rewriter_rewrite_js(this.__wbg_ptr, jsconfig, jsflags, encode_url, ptr0, len0, ptr1, len1, ptr2, len2, module);\n        if (ret[2]) {\n            throw takeFromExternrefTable0(ret[1]);\n        }\n        return takeFromExternrefTable0(ret[0]);\n    }\n    /**\n     * @param {object} jsconfig\n     * @param {object} jsflags\n     * @param {object} encode_url\n     * @param {Uint8Array} js\n     * @param {string} base\n     * @param {string} url\n     * @param {boolean} module\n     * @returns {JsRewriterOutput}\n     */\n    rewrite_js_bytes(jsconfig, jsflags, encode_url, js, base, url, module) {\n        const ptr0 = passArray8ToWasm0(js, wasm.__wbindgen_malloc);\n        const len0 = WASM_VECTOR_LEN;\n        const ptr1 = passStringToWasm0(base, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len1 = WASM_VECTOR_LEN;\n        const ptr2 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len2 = WASM_VECTOR_LEN;\n        const ret = wasm.rewriter_rewrite_js_bytes(this.__wbg_ptr, jsconfig, jsflags, encode_url, ptr0, len0, ptr1, len1, ptr2, len2, module);\n        if (ret[2]) {\n            throw takeFromExternrefTable0(ret[1]);\n        }\n        return takeFromExternrefTable0(ret[0]);\n    }\n}\nif (Symbol.dispose) Rewriter.prototype[Symbol.dispose] = Rewriter.prototype.free;\n\nfunction __wbg_get_imports() {\n    const import0 = {\n        __proto__: null,\n        __wbg_Error_8c4e43fe74559d73: function(arg0, arg1) {\n            const ret = Error(getStringFromWasm0(arg0, arg1));\n            return ret;\n        },\n        __wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25: function(arg0) {\n            const v = arg0;\n            const ret = typeof(v) === 'boolean' ? v : undefined;\n            return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n        },\n        __wbg___wbindgen_is_function_0095a73b8b156f76: function(arg0) {\n            const ret = typeof(arg0) === 'function';\n            return ret;\n        },\n        __wbg___wbindgen_string_get_72fb696202c56729: function(arg0, arg1) {\n            const obj = arg1;\n            const ret = typeof(obj) === 'string' ? obj : undefined;\n            var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            var len1 = WASM_VECTOR_LEN;\n            getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n            getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n        },\n        __wbg___wbindgen_throw_be289d5034ed271b: function(arg0, arg1) {\n            throw new Error(getStringFromWasm0(arg0, arg1));\n        },\n        __wbg_call_4708e0c13bdc8e95: function() { return handleError(function (arg0, arg1, arg2) {\n            const ret = arg0.call(arg1, arg2);\n            return ret;\n        }, arguments); },\n        __wbg_get_b3ed3ad4be2bc8ac: function() { return handleError(function (arg0, arg1) {\n            const ret = Reflect.get(arg0, arg1);\n            return ret;\n        }, arguments); },\n        __wbg_new_361308b2356cecd0: function() {\n            const ret = new Object();\n            return ret;\n        },\n        __wbg_new_3eb36ae241fe6f44: function() {\n            const ret = new Array();\n            return ret;\n        },\n        __wbg_new_from_slice_a3d2629dc1826784: function(arg0, arg1) {\n            const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1));\n            return ret;\n        },\n        __wbg_new_with_base_332baf6f4ebbaae9: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n            const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));\n            return ret;\n        }, arguments); },\n        __wbg_scramtag_3a255d78b157986d: function(arg0) {\n            const ret = scramtag();\n            const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len1 = WASM_VECTOR_LEN;\n            getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n            getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n        },\n        __wbg_set_6cb8631f80447a67: function() { return handleError(function (arg0, arg1, arg2) {\n            const ret = Reflect.set(arg0, arg1, arg2);\n            return ret;\n        }, arguments); },\n        __wbg_toString_029ac24421fd7a24: function(arg0) {\n            const ret = arg0.toString();\n            return ret;\n        },\n        __wbg_toString_964ff7fe6eca8362: function(arg0) {\n            const ret = arg0.toString();\n            return ret;\n        },\n        __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n            // Cast intrinsic for `Ref(String) -> Externref`.\n            const ret = getStringFromWasm0(arg0, arg1);\n            return ret;\n        },\n        __wbindgen_init_externref_table: function() {\n            const table = wasm.__wbindgen_externrefs;\n            const offset = table.grow(4);\n            table.set(0, undefined);\n            table.set(offset + 0, undefined);\n            table.set(offset + 1, null);\n            table.set(offset + 2, true);\n            table.set(offset + 3, false);\n        },\n    };\n    return {\n        __proto__: null,\n        \"./wasm_bg.js\": import0,\n    };\n}\n\nconst RewriterFinalization = (typeof FinalizationRegistry === 'undefined')\n    ? { register: () => {}, unregister: () => {} }\n    : new FinalizationRegistry(ptr => wasm.__wbg_rewriter_free(ptr >>> 0, 1));\n\nfunction addToExternrefTable0(obj) {\n    const idx = wasm.__externref_table_alloc();\n    wasm.__wbindgen_externrefs.set(idx, obj);\n    return idx;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n    ptr = ptr >>> 0;\n    return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n    if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n        cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n    }\n    return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    ptr = ptr >>> 0;\n    return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n    if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n        cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n    try {\n        return f.apply(this, args);\n    } catch (e) {\n        const idx = addToExternrefTable0(e);\n        wasm.__wbindgen_exn_store(idx);\n    }\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n    const ptr = malloc(arg.length * 1, 1) >>> 0;\n    getUint8ArrayMemory0().set(arg, ptr / 1);\n    WASM_VECTOR_LEN = arg.length;\n    return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length, 1) >>> 0;\n        getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len, 1) >>> 0;\n\n    const mem = getUint8ArrayMemory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n        const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n        const ret = cachedTextEncoder.encodeInto(arg, view);\n\n        offset += ret.written;\n        ptr = realloc(ptr, len, offset, 1) >>> 0;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n    const value = wasm.__wbindgen_externrefs.get(idx);\n    wasm.__externref_table_dealloc(idx);\n    return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n    numBytesDecoded += len;\n    if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n        cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n        cachedTextDecoder.decode();\n        numBytesDecoded = len;\n    }\n    return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n    cachedTextEncoder.encodeInto = function (arg, view) {\n        const buf = cachedTextEncoder.encode(arg);\n        view.set(buf);\n        return {\n            read: arg.length,\n            written: buf.length\n        };\n    };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n    wasm = instance.exports;\n    wasmModule = module;\n    cachedDataViewMemory0 = null;\n    cachedUint8ArrayMemory0 = null;\n    wasm.__wbindgen_start();\n    return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n            } catch (e) {\n                const validResponse = module.ok && expectedResponseType(module.type);\n\n                if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else { throw e; }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n    } else {\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n        } else {\n            return instance;\n        }\n    }\n\n    function expectedResponseType(type) {\n        switch (type) {\n            case 'basic': case 'cors': case 'default': return true;\n        }\n        return false;\n    }\n}\n\nfunction initSync(module) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (module !== undefined) {\n        if (Object.getPrototypeOf(module) === Object.prototype) {\n            ({module} = module)\n        } else {\n            console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n        }\n    }\n\n    const imports = __wbg_get_imports();\n    if (!(module instanceof WebAssembly.Module)) {\n        module = new WebAssembly.Module(module);\n    }\n    const instance = new WebAssembly.Instance(module, imports);\n    return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (module_or_path !== undefined) {\n        if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n            ({module_or_path} = module_or_path)\n        } else {\n            console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n        }\n    }\n\n    if (module_or_path === undefined) {\n        module_or_path = new URL('wasm_bg.wasm', \"\");\n    }\n    const imports = __wbg_get_imports();\n\n    if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n        module_or_path = fetch(module_or_path);\n    }\n\n    const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n    return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n        if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n            Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n        }\n    }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"names":["defaultConfig","defaultConfigDev","n","Object","decodeURIComponent","e","console","Date","parseInt","Array","Error","ScramjetClient","Map","global","init","SCRAMJETCLIENT","iswindow","b","findBox","seen","i","SingletonBox","BareCompatibleClient","createWrapFn","Proxy","target","prop","split","realProp","realTarget","a","original","Reflect","args","that","client","value","base","url","frag","undefined","URL","currentWin","frame","curclient","parentWin","parentClient","createLocationProxy","sframe","SCRAMJETFRAME","currentwin","currentFrame","currentclient","context","modules","key","module","aorder","ev","NavigateEvent","name","handler","debugname","applyFn","constructFn","originalDescriptor","h","fnName","windowName","location","sourceURL","construct","apply","constructor","newTarget","returnValue","earlyreturn","ctx","r","fn","pst","err","s","getOwnPropertyDescriptorHandler","descriptor","oldDescriptor","v","desc","rewriteUrl","unrewriteUrl","flag","flagEnabled","_self","map","proxy","_receiver","namespace","NamedNodeMap","isNaN","Number","keys","self","rewriteCss","unrewriteCss","style","CSSStyleDeclaration","tostring","String","rewriteHtml","encoder","TextEncoder","bytesToBase64","bytes","btoa","byte","attrObject","urlinterfaces","originalhrefs","attr","element","href","node","Document","attrib","cleaned","attrNames","ruleList","htmlRules","rule","ret","_ctx","_namespace","val","newval","rewriteJs","scriptSource","atob","unrewriteHtml","realwin","Function","callerGlobalThisProxied","callerClient","UrlChangeEvent","f","win","entries","entry","file","index","property","attributes","localStorageProxy","sessionStorageProxy","globalThis","window","Window","isworker","issw","isdedicated","isshared","Event","ScramjetContextEvent","Location","fakeLocation","descriptorSource","native","urlchangeev","log","_v","rewriteBlob","setTimeout","unrewriteBlob","del","Navigator","enabled","argdbg","arg","recurse","Symbol","ar","warn","t","closure","error","stack","newstack","lines","line","l","_value","js","indirectEval","strict","indirection","realOnEvent","handlers","wraplistener","listener","realEvent","type","reciever","origlistener","proxylistener","arr","targets","rewriteFunction","stringifiedFunction","content","RawFunction","RawAsyncFunction","RawGeneratorFunction","RawAsyncGeneratorFunction","boundimport","resolved","metaobj","rootPromise","root","directory","POLLUTANT","wrappedPostMessage","toproxy","obj","pollution","headers","newHeaders","Headers","unrewriteLinkHeader","socketmap","WeakMap","socketstreammap","fakeWebSocket","EventTarget","rawurl","barews","state","fakeEventSend","fakeev","CloseEvent","payload","Blob","ArrayBuffer","MessageEvent","ws","openResolver","closeResolver","openRejector","Promise","resolve","reject","ReadableStream","controller","WritableStream","chunk","worker","ARGS","HEADERS","sab","SharedArrayBuffer","view","DataView","now","performance","status","headersLength","headersab","Uint8Array","TextDecoder","bodyLength","bodyab","body","parser","DOMParser","header","match","re","RegExp","headerstring","SCRAMTAG","buf","tag","before","registerRewrites","sourcemap","decoder","rewrites","rewritelen","cursor","start","size","end","oldLen","oldStr","dbg","doUnrewrite","stringified","extracted","extractTag","tagOffset","tagStart","fnStart","fnEnd","getEnd","rewrite","fnrewrites","newString","lastpos","wrappedParent","wrappedTop","current","test","identifier","order","str","lhs","op","rhs","ownerclient","ctors","ctor","ScramjetFetchHandler","request","doHandleFetch","response","responseBody","parsed","parseRequest","handleBlobOrDataUrlFetch","newheaders","rewriteRequestHeaders","clientURL","cookies","req","ScramjetRequestEvent","resp","BareResponse","handleCookies","responseHeaders","rewriteHeaders","isRedirect","rewriteBody","ScramjetResponseEvent","topFrameName","parentFrameName","strippedUrl","extraParams","scriptType","param","meta","dataUrl","ScramjetHeaders","rawHeaders","promise","SEC_HEADERS","Set","URL_HEADERS","cspHeader","urlHeader","rewrittenUrl","link","rewritten","referrerUrl","domhandler","evt","ScramjetHTMLPreRewriteEvent","ScramjetHTMLPostRewriteEvent","rewriteWorkers","logfuncs","severity","message","old","_","fmt","Math","CookieJar","parse","cookie","domain","sameSite","id","fromJs","validCookies","JSON","lk","raw","k","newh","rewriteSrcset","regex","partialflags","versionInfo","VERSION","COMMITHASH","BUILDDATE","css","handleCss","encodedUrl","importStatement","firstQuote","endQuote","html","fromTop","preRewrite","postRewrite","rewriteHtmlInner","htmlRoot","headElement","bodyElement","DomHandler","dom","Parser","traverseParsedHtml","sel","eventAttributes","json","Comment","contentArray","childNode","isQuirky","detectQuirks","child","ElementType","injectScripts","src","Element","render","traverse","srcset","rewrittenSources","sources","source","descriptors","rewriteJsInner","rewriteJsWasm","input","rewriter","getRewriter","flagsobj","out","scramtag","errors","textDecoder","res","newjs","pushmap","sourcemapfn","strictMode","tryCanParseURL","origin","blob","realUrl","encodedHash","decodedHash","wasm_u8","setWasm","u8","MAGIC","x","rewriters","initSync","WebAssembly","len","Rewriter","script","SCRAMJETCLIENTNAME","WebSocket","o","DOMException","fetch","Response","u","TypeError","arguments","Uint16Array","crypto","FinalizationRegistry"],"mappings":"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"}