{
  "version": 3,
  "sources": ["../../../../../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs", "../../../../src/workers/core/entry.worker.ts", "../../../../src/shared/mime-types.ts", "../../../../src/workers/core/constants.ts", "../../../../src/workers/core/email.ts", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/decode-strings.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/pass-through-decoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/base64-decoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/qp-decoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/mime-node.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/html-entities.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/text-format.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/address-parser.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/base64-encoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/postal-mime.js", "../../../../src/workers/email/constants.ts", "../../../../src/workers/email/validate.ts", "../../../../src/workers/core/http.ts", "../../../../src/workers/core/routing.ts", "../../../../src/workers/core/scheduled.ts", "../../../../src/workers/core/proxy.worker.ts", "../../../../../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/utils.js", "../../../../../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/base64.js", "../../../../../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/parse.js", "../../../../../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/stringify.js", "../../../../src/workers/core/devalue.ts"],
  "sourcesContent": ["let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nexport const $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t)\n}\n\nfunction init(x, y) {\n\tlet rgx = new RegExp(`\\\\x1b\\\\[${y}m`, 'g');\n\tlet open = `\\x1b[${x}m`, close = `\\x1b[${y}m`;\n\n\treturn function (txt) {\n\t\tif (!$.enabled || txt == null) return txt;\n\t\treturn open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;\n\t};\n}\n\n// modifiers\nexport const reset = init(0, 0);\nexport const bold = init(1, 22);\nexport const dim = init(2, 22);\nexport const italic = init(3, 23);\nexport const underline = init(4, 24);\nexport const inverse = init(7, 27);\nexport const hidden = init(8, 28);\nexport const strikethrough = init(9, 29);\n\n// colors\nexport const black = init(30, 39);\nexport const red = init(31, 39);\nexport const green = init(32, 39);\nexport const yellow = init(33, 39);\nexport const blue = init(34, 39);\nexport const magenta = init(35, 39);\nexport const cyan = init(36, 39);\nexport const white = init(37, 39);\nexport const gray = init(90, 39);\nexport const grey = init(90, 39);\n\n// background colors\nexport const bgBlack = init(40, 49);\nexport const bgRed = init(41, 49);\nexport const bgGreen = init(42, 49);\nexport const bgYellow = init(43, 49);\nexport const bgBlue = init(44, 49);\nexport const bgMagenta = init(45, 49);\nexport const bgCyan = init(46, 49);\nexport const bgWhite = init(47, 49);\n", "import { blue, bold, green, grey, red, reset, yellow } from \"kleur/colors\";\nimport { HttpError, LogLevel, SharedHeaders } from \"miniflare:shared\";\nimport { isCompressedByCloudflareFL } from \"../../shared/mime-types\";\nimport {\n\tCoreBindings,\n\tCoreHeaders,\n\tCorePaths,\n\tdecodeErrorPayload,\n} from \"./constants\";\nimport { handleEmail } from \"./email\";\nimport { STATUS_CODES } from \"./http\";\nimport { matchRoutes } from \"./routing\";\nimport { handleScheduled } from \"./scheduled\";\nimport type { WorkerRoute } from \"./routing\";\nimport type { Colorize } from \"kleur/colors\";\n\ntype Env = {\n\t[CoreBindings.SERVICE_LOOPBACK]: Fetcher;\n\t[CoreBindings.SERVICE_USER_FALLBACK]: Fetcher;\n\t[CoreBindings.SERVICE_LOCAL_EXPLORER]: Fetcher;\n\t[CoreBindings.SERVICE_STREAM]?: Fetcher;\n\t[CoreBindings.SERVICE_IMAGES_DELIVERY]?: Fetcher;\n\t[CoreBindings.SERVICE_R2_PUBLIC]?: Fetcher;\n\t[CoreBindings.SERVICE_R2_S3]?: Fetcher;\n\t[CoreBindings.TEXT_CUSTOM_SERVICE]: string;\n\t[CoreBindings.TEXT_UPSTREAM_URL]?: string;\n\t[CoreBindings.JSON_CF_BLOB]: IncomingRequestCfProperties;\n\t[CoreBindings.TEXT_FALLBACK_WORKER_NAME]: string;\n\t[CoreBindings.JSON_ROUTES]: WorkerRoute[];\n\t[CoreBindings.JSON_LOG_LEVEL]: LogLevel;\n\t[CoreBindings.DURABLE_OBJECT_NAMESPACE_PROXY]: DurableObjectNamespace;\n\t[CoreBindings.DATA_PROXY_SHARED_SECRET]?: ArrayBuffer;\n\t[CoreBindings.TRIGGER_HANDLERS]: boolean;\n\t[CoreBindings.LOG_REQUESTS]: boolean;\n\t[CoreBindings.STRIP_DISABLE_PRETTY_ERROR]: boolean;\n} & {\n\t[K in `${typeof CoreBindings.SERVICE_USER_ROUTE_PREFIX}${string}`]:\n\t\t| Fetcher\n\t\t| undefined; // Won't have a `Fetcher` for every possible `string`\n} & {\n\t[K in `${typeof CoreBindings.JSON_ACCESS_BLOB_PREFIX}${string}`]:\n\t\t| { app_aud: string; jwt_claims?: Record<string, unknown> }\n\t\t| undefined;\n};\n\nconst encoder = new TextEncoder();\n\nfunction getUserRequest(\n\trequest: Request<unknown, IncomingRequestCfProperties>,\n\tenv: Env,\n\tclientIp: string | undefined\n) {\n\t// The ORIGINAL_URL header is added to outbound requests from Miniflare,\n\t// triggered either by calling Miniflare.#dispatchFetch(request),\n\t// or as part of a loopback request in a Custom Service.\n\t// The ORIGINAL_URL is extracted from the `request` being sent.\n\t// This is relevant here in the case that a Miniflare implemented Proxy Worker is\n\t// sitting in front of this User Worker, which is hosted on a different URL.\n\tconst originalUrl = request.headers.get(CoreHeaders.ORIGINAL_URL);\n\tlet url = new URL(originalUrl ?? request.url);\n\n\tlet rewriteHeadersFromOriginalUrl = false;\n\n\t// If the request is signed by a proxy server then we can use the Host and Origin from the ORIGINAL_URL.\n\t// The shared secret is required to prevent a malicious user being able to change the headers without permission.\n\tconst proxySharedSecret = request.headers.get(\n\t\tCoreHeaders.PROXY_SHARED_SECRET\n\t);\n\tif (proxySharedSecret) {\n\t\tconst secretFromHeader = encoder.encode(proxySharedSecret);\n\t\tconst configuredSecret = env[CoreBindings.DATA_PROXY_SHARED_SECRET];\n\t\tif (\n\t\t\tsecretFromHeader.byteLength === configuredSecret?.byteLength &&\n\t\t\tcrypto.subtle.timingSafeEqual(secretFromHeader, configuredSecret)\n\t\t) {\n\t\t\trewriteHeadersFromOriginalUrl = true;\n\t\t} else {\n\t\t\tthrow new HttpError(\n\t\t\t\t400,\n\t\t\t\t`Disallowed header in request: ${CoreHeaders.PROXY_SHARED_SECRET}=${proxySharedSecret}`\n\t\t\t);\n\t\t}\n\t}\n\n\t// If Miniflare was configured with `upstream`, then we use this to override the url and host in the request.\n\tconst upstreamUrl = env[CoreBindings.TEXT_UPSTREAM_URL];\n\t// Store the original hostname before it gets rewritten by upstream\n\tconst originalHostname = upstreamUrl !== undefined ? url.host : undefined;\n\tif (upstreamUrl !== undefined) {\n\t\t// If a custom `upstream` was specified, make sure the URL starts with it\n\t\tlet path = url.pathname + url.search;\n\t\t// Remove leading slash, so we resolve relative to `upstream`'s path\n\t\tif (path.startsWith(\"/\")) path = `./${path.substring(1)}`;\n\t\turl = new URL(path, upstreamUrl);\n\t\trewriteHeadersFromOriginalUrl = true;\n\t}\n\n\t// Note when constructing new `Request`s from `request`, we must always pass\n\t// `request` as is to the `new Request()` constructor. Whilst prohibited by\n\t// the `Request` API spec, `GET` requests are allowed to have bodies. If\n\t// `Content-Length` or `Transfer-Encoding` are specified, `workerd` will give\n\t// the request a (potentially empty) body. Passing a bodied-GET-request\n\t// through to the `new Request()` constructor should throw, but `workerd` has\n\t// special handling to allow this if a `Request` instance is passed.\n\t// See https://github.com/cloudflare/workerd/issues/1122 for more details.\n\trequest = new Request(url, request);\n\n\t// `Accept-Encoding` is always set to \"br, gzip\" in Workers:\n\t// https://developers.cloudflare.com/fundamentals/reference/http-request-headers/#accept-encoding\n\trequest.headers.set(\"Accept-Encoding\", \"br, gzip\");\n\n\tconst secFetchMode = request.headers.get(CoreHeaders.SEC_FETCH_MODE);\n\tif (secFetchMode) {\n\t\trequest.headers.set(\"Sec-Fetch-Mode\", secFetchMode);\n\t}\n\trequest.headers.delete(CoreHeaders.SEC_FETCH_MODE);\n\n\tif (rewriteHeadersFromOriginalUrl) {\n\t\trequest.headers.set(\"Host\", url.host);\n\t}\n\n\t// Set the original hostname header when using upstream, so Workers can\n\t// access the original hostname even after the Host header is rewritten\n\tif (originalHostname !== undefined) {\n\t\trequest.headers.set(CoreHeaders.ORIGINAL_HOSTNAME, originalHostname);\n\t}\n\n\tif (clientIp && !request.headers.get(\"CF-Connecting-IP\")) {\n\t\tconst ipv4Regex = /(?<ip>.*?):\\d+/;\n\t\tconst ipv6Regex = /\\[(?<ip>.*?)\\]:\\d+/;\n\t\tconst ip =\n\t\t\tclientIp.match(ipv6Regex)?.groups?.ip ??\n\t\t\tclientIp.match(ipv4Regex)?.groups?.ip;\n\n\t\tif (ip) {\n\t\t\trequest.headers.set(\"CF-Connecting-IP\", ip);\n\t\t}\n\t}\n\n\trequest.headers.delete(CoreHeaders.PROXY_SHARED_SECRET);\n\trequest.headers.delete(CoreHeaders.ORIGINAL_URL);\n\tif (env[CoreBindings.STRIP_DISABLE_PRETTY_ERROR]) {\n\t\trequest.headers.delete(CoreHeaders.DISABLE_PRETTY_ERROR);\n\t}\n\treturn request;\n}\n\nfunction getTargetService(\n\trequest: Request,\n\turl: URL,\n\tenv: Env\n): { service: Fetcher | undefined; routeTarget: string } {\n\tconst override = request.headers.get(CoreHeaders.ROUTE_OVERRIDE);\n\trequest.headers.delete(CoreHeaders.ROUTE_OVERRIDE);\n\n\tconst route = override ?? matchRoutes(env[CoreBindings.JSON_ROUTES], url);\n\tif (route !== null) {\n\t\treturn {\n\t\t\tservice: env[`${CoreBindings.SERVICE_USER_ROUTE_PREFIX}${route}`],\n\t\t\trouteTarget: route,\n\t\t};\n\t}\n\treturn {\n\t\tservice: env[CoreBindings.SERVICE_USER_FALLBACK],\n\t\trouteTarget: env[CoreBindings.TEXT_FALLBACK_WORKER_NAME],\n\t};\n}\n\nconst LOCALHOST_HOSTNAMES = [\"localhost\", \"127.0.0.1\", \"[::1]\"];\n\nfunction isCdnCgiRequest(url: string | null): boolean {\n\tif (url === null) return false;\n\n\ttry {\n\t\treturn new URL(url).pathname.startsWith(\"/cdn-cgi/\");\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Validates that a request to a /cdn-cgi/* endpoint originates from an allowed host.\n * This check must happen BEFORE any header rewriting (getUserRequest) to ensure\n * we're checking the actual browser-sent headers, not Miniflare rewritten ones.\n */\nfunction validateCdnCgiRequest(\n\trequest: Request,\n\troutes: WorkerRoute[],\n\tupstreamUrl: string | undefined\n): void {\n\tif (\n\t\t!isCdnCgiRequest(request.url) &&\n\t\t!isCdnCgiRequest(request.headers.get(CoreHeaders.ORIGINAL_URL))\n\t) {\n\t\treturn;\n\t}\n\n\t// Subdomain matching should only apply to wildcard routes (e.g.\n\t// \"*.example.com/*\"). Exact routes and the configured upstream hostname\n\t// must match the request hostname exactly.\n\tconst exactHostnames = new Set<string>();\n\tconst wildcardHostnames = new Set<string>();\n\tfor (const route of routes) {\n\t\t// route.hostname has already had the leading \"*\" stripped by parseRoutes,\n\t\t// but wildcard routes still carry a leading \".\" (e.g., \"*.example.com\" -> \".example.com\")\n\t\tconst hostname = route.hostname.replace(/^\\./, \"\");\n\t\tif (!hostname) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (route.allowHostnamePrefix) {\n\t\t\twildcardHostnames.add(hostname);\n\t\t} else {\n\t\t\texactHostnames.add(hostname);\n\t\t}\n\t}\n\t// Upstream is a single configured host, not a wildcard.\n\tif (upstreamUrl) {\n\t\ttry {\n\t\t\tconst upstreamHostname = new URL(upstreamUrl).hostname;\n\t\t\tif (upstreamHostname) {\n\t\t\t\texactHostnames.add(upstreamHostname);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore invalid upstream URL\n\t\t}\n\t}\n\n\tconst hostHeader = request.headers.get(\"Host\");\n\tlet hostHostname: string;\n\tif (hostHeader) {\n\t\ttry {\n\t\t\thostHostname = new URL(`http://${hostHeader}`).hostname;\n\t\t} catch {\n\t\t\tthrow new HttpError(403, \"Invalid Host header\");\n\t\t}\n\t\tif (!isHostnameAllowed(hostHostname, exactHostnames, wildcardHostnames)) {\n\t\t\tthrow new HttpError(403, \"Invalid Host header\");\n\t\t}\n\t}\n\n\tconst origin = request.headers.get(\"Origin\");\n\tif (origin) {\n\t\tlet originHostname: string;\n\t\ttry {\n\t\t\toriginHostname = new URL(origin).hostname;\n\t\t} catch {\n\t\t\tthrow new HttpError(403, \"Invalid Origin header\");\n\t\t}\n\t\tif (!isHostnameAllowed(originHostname, exactHostnames, wildcardHostnames)) {\n\t\t\tthrow new HttpError(403, \"Invalid Origin header\");\n\t\t}\n\t}\n}\n\n/**\n * Checks whether a hostname is allowed.\n * - exactHostnames: must match exactly (configured non-wildcard routes, upstream)\n * - wildcardHostnames: also match any subdomain (for wildcard routes like *.example.com)\n *\n * Localhost hostnames are always allowed.\n */\nfunction isHostnameAllowed(\n\thostname: string,\n\texactHostnames: Set<string>,\n\twildcardHostnames: Set<string>\n): boolean {\n\tif (LOCALHOST_HOSTNAMES.includes(hostname)) {\n\t\treturn true;\n\t}\n\tif (exactHostnames.has(hostname)) {\n\t\treturn true;\n\t}\n\tfor (const allowed of wildcardHostnames) {\n\t\t// Match the base domain or any subdomain\n\t\tif (hostname === allowed || hostname.endsWith(`.${allowed}`)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction maybePrettifyError(request: Request, response: Response, env: Env) {\n\tif (\n\t\tresponse.status !== 500 ||\n\t\tresponse.headers.get(CoreHeaders.ERROR_STACK) === null\n\t) {\n\t\treturn response;\n\t}\n\n\t// `workerd` drops response bodies for `HEAD` requests, so fall back to the\n\t// header copy of the serialised error. Without a payload there is nothing to\n\t// prettify, and POSTing an empty body would surface a JSON parse error from\n\t// miniflare's internals instead of the user's error.\n\tconst body = response.body ?? decodeErrorPayload(response);\n\tif (body === null) {\n\t\treturn response;\n\t}\n\n\treturn env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\"http://localhost/core/error\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: request.headers,\n\t\t\tbody,\n\t\t\tcf: { prettyErrorOriginalUrl: request.url },\n\t\t}\n\t);\n}\n\nconst acceptEncodingElement =\n\t/^(?<coding>[a-z]+|\\*)(?:\\s*;\\s*q=(?<weight>\\d+(?:.\\d+)?))?$/;\ninterface AcceptedEncoding {\n\tcoding: string;\n\tweight: number;\n}\nfunction maybeParseAcceptEncodingElement(\n\telement: string\n): AcceptedEncoding | undefined {\n\tconst match = acceptEncodingElement.exec(element);\n\tif (match?.groups == null) return;\n\treturn {\n\t\tcoding: match.groups.coding,\n\t\tweight:\n\t\t\tmatch.groups.weight === undefined ? 1 : parseFloat(match.groups.weight),\n\t};\n}\nfunction parseAcceptEncoding(header: string): AcceptedEncoding[] {\n\tconst encodings: AcceptedEncoding[] = [];\n\tfor (const element of header.split(\",\")) {\n\t\tconst maybeEncoding = maybeParseAcceptEncodingElement(element.trim());\n\t\tif (maybeEncoding !== undefined) encodings.push(maybeEncoding);\n\t}\n\t// `Array#sort()` is stable, so original ordering preserved for same weights\n\treturn encodings.sort((a, b) => b.weight - a.weight);\n}\nfunction ensureAcceptableEncoding(\n\tclientAcceptEncoding: string | null,\n\tresponse: Response\n): Response {\n\t// https://www.rfc-editor.org/rfc/rfc9110#section-12.5.3\n\n\t// If the client hasn't specified any acceptable encodings, assume anything is\n\tif (clientAcceptEncoding === null) return response;\n\tconst encodings = parseAcceptEncoding(clientAcceptEncoding);\n\tif (encodings.length === 0) return response;\n\n\tconst contentEncoding = response.headers.get(\"Content-Encoding\");\n\tconst contentType = response.headers.get(\"Content-Type\");\n\n\t// if cloudflare's FL does not compress this mime-type, then don't compress locally either\n\tif (!isCompressedByCloudflareFL(contentType)) {\n\t\treturn response;\n\t}\n\n\t// If `Content-Encoding` is defined, but unknown, return the response as is\n\tif (\n\t\tcontentEncoding !== null &&\n\t\tcontentEncoding !== \"gzip\" &&\n\t\tcontentEncoding !== \"br\"\n\t) {\n\t\treturn response;\n\t}\n\n\tlet desiredEncoding: \"gzip\" | \"br\" | undefined;\n\tlet identityDisallowed = false;\n\n\tfor (const encoding of encodings) {\n\t\tif (encoding.weight === 0) {\n\t\t\t// If we have an `identity;q=0` or `*;q=0` entry, disallow no encoding\n\t\t\tif (encoding.coding === \"identity\" || encoding.coding === \"*\") {\n\t\t\t\tidentityDisallowed = true;\n\t\t\t}\n\t\t} else if (encoding.coding === \"gzip\" || encoding.coding === \"br\") {\n\t\t\t// If the client accepts one of our supported encodings, use that\n\t\t\tdesiredEncoding = encoding.coding;\n\t\t\tbreak;\n\t\t} else if (encoding.coding === \"identity\") {\n\t\t\t// If the client accepts no encoding, use that\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (desiredEncoding === undefined) {\n\t\tif (identityDisallowed) {\n\t\t\treturn new Response(\"Unsupported Media Type\", {\n\t\t\t\tstatus: 415 /* Unsupported Media Type */,\n\t\t\t\theaders: { \"Accept-Encoding\": \"br, gzip\" },\n\t\t\t});\n\t\t}\n\t\tif (contentEncoding === null) return response;\n\t\tresponse = new Response(response.body, response); // Ensure mutable headers\n\t\tresponse.headers.delete(\"Content-Encoding\"); // Use identity\n\t\treturn response;\n\t} else {\n\t\tif (contentEncoding === desiredEncoding) return response;\n\t\tresponse = new Response(response.body, response); // Ensure mutable headers\n\t\tresponse.headers.set(\"Content-Encoding\", desiredEncoding); // Use desired\n\t\treturn response;\n\t}\n}\n\nfunction colourFromHTTPStatus(status: number): Colorize {\n\tif (200 <= status && status < 300) return green;\n\tif (400 <= status && status < 500) return yellow;\n\tif (500 <= status) return red;\n\treturn blue;\n}\n\nconst ADDITIONAL_RESPONSE_LOG_HEADER_NAME = \"X-Mf-Additional-Response-Log\";\n\nfunction maybeLogRequest(\n\treq: Request,\n\tres: Response,\n\tenv: Env,\n\tctx: ExecutionContext,\n\tstartTime: number\n): Response {\n\tres = new Response(res.body, res); // Ensure mutable headers\n\tconst additionalResponseLog = res.headers.get(\n\t\tADDITIONAL_RESPONSE_LOG_HEADER_NAME\n\t);\n\tres.headers.delete(ADDITIONAL_RESPONSE_LOG_HEADER_NAME);\n\n\tif (env[CoreBindings.JSON_LOG_LEVEL] < LogLevel.INFO) return res;\n\n\tconst url = new URL(req.url);\n\tconst statusText = (res.statusText.trim() || STATUS_CODES[res.status]) ?? \"\";\n\tconst lines = [\n\t\t`${bold(req.method)} ${url.pathname} `,\n\t\tcolourFromHTTPStatus(res.status)(`${bold(res.status)} ${statusText} `),\n\t\tgrey(`(${Date.now() - startTime}ms)`),\n\t];\n\tif (additionalResponseLog) {\n\t\tlines.push(` ${grey(additionalResponseLog)}`);\n\t}\n\tconst message = reset(lines.join(\"\"));\n\n\tctx.waitUntil(\n\t\tenv[CoreBindings.SERVICE_LOOPBACK].fetch(\"http://localhost/core/log\", {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { [SharedHeaders.LOG_LEVEL]: LogLevel.INFO.toString() },\n\t\t\tbody: message,\n\t\t})\n\t);\n\n\treturn res;\n}\n\n/**\n * Proxy here refers to the 'magic proxy' used by getPlatformProxy\n */\nfunction handleProxy(request: Request, env: Env) {\n\tconst ns = env[CoreBindings.DURABLE_OBJECT_NAMESPACE_PROXY];\n\t// Always use the same singleton Durable Object instance, so we always have\n\t// access to the same \"heap\"\n\tconst id = ns.idFromName(\"\");\n\tconst stub = ns.get(id);\n\treturn stub.fetch(request);\n}\n\nexport default <ExportedHandler<Env>>{\n\tasync fetch(request, env, ctx) {\n\t\tconst startTime = Date.now();\n\n\t\tconst clientIp = request.cf?.clientIp as string;\n\n\t\t// Parse this manually (rather than using the `cfBlobHeader` config property in workerd to parse it into request.cf)\n\t\t// This is because we want to have access to the clientIp, which workerd puts in request.cf if no cfBlobHeader is provided\n\t\tconst clientCfBlobHeader = request.headers.get(CoreHeaders.CF_BLOB);\n\n\t\tconst cf: IncomingRequestCfProperties = clientCfBlobHeader\n\t\t\t? JSON.parse(clientCfBlobHeader)\n\t\t\t: {\n\t\t\t\t\t...env[CoreBindings.JSON_CF_BLOB],\n\t\t\t\t\t// Defaulting to empty string to preserve undefined `Accept-Encoding`\n\t\t\t\t\t// through Wrangler's proxy worker.\n\t\t\t\t\tclientAcceptEncoding: request.headers.get(\"Accept-Encoding\") ?? \"\",\n\t\t\t\t};\n\t\trequest = new Request(request, { cf });\n\n\t\t// Strip any client-supplied Access blob header early, before branches\n\t\t// that return without calling getUserRequest() (e.g. the magic proxy).\n\t\t// The correct per-worker blob is injected later after routing.\n\t\trequest.headers.delete(CoreHeaders.ACCESS_BLOB);\n\n\t\t// Restrict /cdn-cgi/* requests to allowed hostnames.\n\t\t// These endpoints should be served only when the browser-sent Host and\n\t\t// Origin headers match localhost, a configured route, or the configured upstream.\n\t\t// This must happen before getUserRequest() so we validate the\n\t\t// original browser-sent headers, not Miniflare-rewritten ones.\n\t\tconst requestUrl = new URL(request.url);\n\t\ttry {\n\t\t\tvalidateCdnCgiRequest(\n\t\t\t\trequest,\n\t\t\t\tenv[CoreBindings.JSON_ROUTES],\n\t\t\t\tenv[CoreBindings.TEXT_UPSTREAM_URL]\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tif (e instanceof HttpError) {\n\t\t\t\treturn e.toResponse();\n\t\t\t}\n\t\t\tthrow e;\n\t\t}\n\n\t\t// The magic proxy client (used by getPlatformProxy)\n\t\tif (requestUrl.pathname === CorePaths.PLATFORM_PROXY) {\n\t\t\tif (request.headers.get(CoreHeaders.OP) !== null) {\n\t\t\t\treturn handleProxy(request, env);\n\t\t\t}\n\n\t\t\treturn new Response(\"Invalid proxy request\", { status: 400 });\n\t\t}\n\n\t\t// `dispatchFetch()` will always inject this header. When\n\t\t// calling this function, we never want to display the pretty-error page.\n\t\t// Instead, we propagate the error and reject the returned `Promise`.\n\t\tconst disablePrettyErrorPage =\n\t\t\trequest.headers.get(CoreHeaders.DISABLE_PRETTY_ERROR) !== null;\n\n\t\tconst clientAcceptEncoding = request.headers.get(\"Accept-Encoding\");\n\n\t\ttry {\n\t\t\trequest = getUserRequest(request, env, clientIp);\n\t\t} catch (e) {\n\t\t\tif (e instanceof HttpError) {\n\t\t\t\treturn e.toResponse();\n\t\t\t}\n\t\t\tthrow e;\n\t\t}\n\t\tconst url = new URL(request.url);\n\t\tconst { service, routeTarget } = getTargetService(request, url, env);\n\t\tif (service === undefined) {\n\t\t\treturn new Response(\"No entrypoint worker found\", { status: 404 });\n\t\t}\n\n\t\ttry {\n\t\t\tif (env[CoreBindings.SERVICE_LOCAL_EXPLORER]) {\n\t\t\t\tif (\n\t\t\t\t\turl.pathname === CorePaths.EXPLORER ||\n\t\t\t\t\turl.pathname.startsWith(`${CorePaths.EXPLORER}/`)\n\t\t\t\t) {\n\t\t\t\t\treturn await env[CoreBindings.SERVICE_LOCAL_EXPLORER].fetch(request);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst imagesDelivery = env[CoreBindings.SERVICE_IMAGES_DELIVERY];\n\t\t\tif (\n\t\t\t\t(url.pathname === CorePaths.IMAGE_DELIVERY ||\n\t\t\t\t\turl.pathname.startsWith(`${CorePaths.IMAGE_DELIVERY}/`)) &&\n\t\t\t\timagesDelivery\n\t\t\t) {\n\t\t\t\treturn await imagesDelivery.fetch(request);\n\t\t\t}\n\t\t\tif (env[CoreBindings.TRIGGER_HANDLERS]) {\n\t\t\t\tif (url.pathname === CorePaths.SCHEDULED) {\n\t\t\t\t\treturn await handleScheduled(url.searchParams, service);\n\t\t\t\t}\n\n\t\t\t\tif (url.pathname === CorePaths.EMAIL) {\n\t\t\t\t\treturn await handleEmail(\n\t\t\t\t\t\turl.searchParams,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tservice,\n\t\t\t\t\t\tenv,\n\t\t\t\t\t\tctx\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst streamService = env[CoreBindings.SERVICE_STREAM];\n\t\t\tif (\n\t\t\t\t(url.pathname === CorePaths.STREAM_VIDEO ||\n\t\t\t\t\turl.pathname.startsWith(`${CorePaths.STREAM_VIDEO}/`)) &&\n\t\t\t\tstreamService\n\t\t\t) {\n\t\t\t\treturn await streamService.fetch(request);\n\t\t\t}\n\n\t\t\tconst r2PublicService = env[CoreBindings.SERVICE_R2_PUBLIC];\n\t\t\tif (\n\t\t\t\t(url.pathname === CorePaths.R2_PUBLIC ||\n\t\t\t\t\turl.pathname.startsWith(`${CorePaths.R2_PUBLIC}/`)) &&\n\t\t\t\tr2PublicService\n\t\t\t) {\n\t\t\t\treturn await r2PublicService.fetch(request);\n\t\t\t}\n\n\t\t\tconst r2S3Service = env[CoreBindings.SERVICE_R2_S3];\n\t\t\tif (\n\t\t\t\t(url.pathname === CorePaths.R2_S3 ||\n\t\t\t\t\turl.pathname.startsWith(`${CorePaths.R2_S3}/`)) &&\n\t\t\t\tr2S3Service\n\t\t\t) {\n\t\t\t\t// SigV4 verification compares against the host the client\n\t\t\t\t// signed, so undo the `upstream` URL/Host rewrite from\n\t\t\t\t// `getUserRequest()`\n\t\t\t\tlet s3Request = request;\n\t\t\t\tconst originalHostname = request.headers.get(\n\t\t\t\t\tCoreHeaders.ORIGINAL_HOSTNAME\n\t\t\t\t);\n\t\t\t\tif (originalHostname !== null) {\n\t\t\t\t\tconst s3Url = new URL(url);\n\t\t\t\t\ts3Url.host = originalHostname;\n\t\t\t\t\ts3Request = new Request(s3Url, request);\n\t\t\t\t\ts3Request.headers.set(\"Host\", originalHostname);\n\t\t\t\t}\n\t\t\t\treturn await r2S3Service.fetch(s3Request);\n\t\t\t}\n\n\t\t\t// Inject per-worker Cloudflare Access blob header so workerd populates ctx.access\n\t\t\tconst accessBlob =\n\t\t\t\tenv[`${CoreBindings.JSON_ACCESS_BLOB_PREFIX}${routeTarget}`];\n\t\t\tif (accessBlob) {\n\t\t\t\tconst headers = new Headers(request.headers);\n\t\t\t\theaders.set(CoreHeaders.ACCESS_BLOB, JSON.stringify(accessBlob));\n\t\t\t\trequest = new Request(request, { headers });\n\t\t\t}\n\n\t\t\tlet response = await service.fetch(request);\n\t\t\tif (!disablePrettyErrorPage) {\n\t\t\t\tresponse = await maybePrettifyError(request, response, env);\n\t\t\t}\n\t\t\tresponse = ensureAcceptableEncoding(clientAcceptEncoding, response);\n\t\t\tif (env[CoreBindings.LOG_REQUESTS]) {\n\t\t\t\tresponse = maybeLogRequest(request, response, env, ctx, startTime);\n\t\t\t}\n\t\t\treturn response;\n\t\t} catch (e: any) {\n\t\t\treturn new Response(e?.stack ?? String(e), { status: 500 });\n\t\t}\n\t},\n};\n\nexport { ProxyServer } from \"./proxy.worker\";\n", "export const compressedByCloudflareFL = new Set([\n\t// list copied from https://developers.cloudflare.com/speed/optimization/content/brotli/content-compression/#:~:text=If%20supported%20by%20visitors%E2%80%99%20web%20browsers%2C%20Cloudflare%20will%20return%20Gzip%20or%20Brotli%2Dencoded%20responses%20for%20the%20following%20content%20types%3A\n\t\"text/html\",\n\t\"text/richtext\",\n\t\"text/plain\",\n\t\"text/css\",\n\t\"text/x-script\",\n\t\"text/x-component\",\n\t\"text/x-java-source\",\n\t\"text/x-markdown\",\n\t\"application/javascript\",\n\t\"application/x-javascript\",\n\t\"text/javascript\",\n\t\"text/js\",\n\t\"image/x-icon\",\n\t\"image/vnd.microsoft.icon\",\n\t\"application/x-perl\",\n\t\"application/x-httpd-cgi\",\n\t\"text/xml\",\n\t\"application/xml\",\n\t\"application/rss+xml\",\n\t\"application/vnd.api+json\",\n\t\"application/x-protobuf\",\n\t\"application/json\",\n\t\"multipart/bag\",\n\t\"multipart/mixed\",\n\t\"application/xhtml+xml\",\n\t\"font/ttf\",\n\t\"font/otf\",\n\t\"font/x-woff\",\n\t\"image/svg+xml\",\n\t\"application/vnd.ms-fontobject\",\n\t\"application/ttf\",\n\t\"application/x-ttf\",\n\t\"application/otf\",\n\t\"application/x-otf\",\n\t\"application/truetype\",\n\t\"application/opentype\",\n\t\"application/x-opentype\",\n\t\"application/font-woff\",\n\t\"application/eot\",\n\t\"application/font\",\n\t\"application/font-sfnt\",\n\t\"application/wasm\",\n\t\"application/javascript-binast\",\n\t\"application/manifest+json\",\n\t\"application/ld+json\",\n\t\"application/graphql+json\",\n\t\"application/geo+json\",\n]);\n\nexport function isCompressedByCloudflareFL(\n\tcontentTypeHeader: string | undefined | null\n) {\n\tif (!contentTypeHeader) return true; // Content-Type inferred as text/plain\n\n\tconst [contentType] = contentTypeHeader.split(\";\");\n\n\treturn compressedByCloudflareFL.has(contentType);\n}\n", "/**\n * Reserved paths for internal Miniflare endpoints.\n *\n * Paths under `/cdn-cgi/local/` are reserved by Cloudflare's network\n * and won't conflict with user routes. Paths under `/__cf_local/` live\n * outside `/cdn-cgi/` so they remain reachable over tunnels.\n */\nexport const CorePaths = {\n\t/** Magic proxy used by getPlatformProxy */\n\tPLATFORM_PROXY: \"/cdn-cgi/local/platform-proxy\",\n\t/** Trigger scheduled event handlers */\n\tSCHEDULED: \"/cdn-cgi/local/scheduled\",\n\t/** Trigger email event handlers */\n\tEMAIL: \"/cdn-cgi/local/email\",\n\t/** Local explorer UI and API */\n\tEXPLORER: \"/cdn-cgi/local/explorer\",\n\t/** Stream video serving endpoint (outside /cdn-cgi/ for tunnel access) */\n\tSTREAM_VIDEO: \"/__cf_local/stream\",\n\t/** Local image delivery endpoint (outside /cdn-cgi/ for tunnel access) */\n\tIMAGE_DELIVERY: \"/__cf_local/imagedelivery\",\n\t/** Public R2 bucket object serving endpoint */\n\tR2_PUBLIC: \"/cdn-cgi/local/r2/public\",\n\t/** S3-compatible API endpoint for local R2 buckets */\n\tR2_S3: \"/cdn-cgi/local/r2/s3\",\n} as const;\n\nexport const CoreHeaders = {\n\tCUSTOM_FETCH_SERVICE: \"MF-Custom-Fetch-Service\",\n\tCUSTOM_NODE_SERVICE: \"MF-Custom-Node-Service\",\n\tORIGINAL_URL: \"MF-Original-URL\",\n\t/**\n\t * Stores the original hostname when using the `upstream` option.\n\t * When requests are proxied to an upstream, the `Host` header is rewritten\n\t * to match the upstream. This header preserves the original hostname\n\t * so Workers can access it if needed.\n\t */\n\tORIGINAL_HOSTNAME: \"MF-Original-Hostname\",\n\tPROXY_SHARED_SECRET: \"MF-Proxy-Shared-Secret\",\n\tDISABLE_PRETTY_ERROR: \"MF-Disable-Pretty-Error\",\n\tERROR_STACK: \"MF-Experimental-Error-Stack\",\n\t/**\n\t * The serialised error, URI-encoded. `workerd` drops response bodies for\n\t * `HEAD` requests, so the body alone cannot carry the error out of the user\n\t * Worker. Producers set this in addition to the body; consumers fall back to\n\t * it whenever the body is unavailable.\n\t */\n\tERROR_STACK_PAYLOAD: \"MF-Experimental-Error-Stack-Payload\",\n\tROUTE_OVERRIDE: \"MF-Route-Override\",\n\tCF_BLOB: \"MF-CF-Blob\",\n\tACCESS_BLOB: \"MF-Access-Blob\",\n\t/** Used by the Vite plugin to pass through the original `sec-fetch-mode` header */\n\tSEC_FETCH_MODE: \"MF-Sec-Fetch-Mode\",\n\n\t// API Proxy\n\tOP_SECRET: \"MF-Op-Secret\",\n\tOP: \"MF-Op\",\n\tOP_TARGET: \"MF-Op-Target\",\n\tOP_KEY: \"MF-Op-Key\",\n\tOP_SYNC: \"MF-Op-Sync\",\n\tOP_STRINGIFIED_SIZE: \"MF-Op-Stringified-Size\",\n\tOP_RESULT_TYPE: \"MF-Op-Result-Type\",\n\tOP_ORIGINAL_URL: \"MF-Op-Original-URL\",\n} as const;\n\nexport const CoreBindings = {\n\tSERVICE_LOOPBACK: \"MINIFLARE_LOOPBACK\",\n\tSERVICE_USER_ROUTE_PREFIX: \"MINIFLARE_USER_ROUTE_\",\n\tSERVICE_USER_FALLBACK: \"MINIFLARE_USER_FALLBACK\",\n\tTEXT_CUSTOM_SERVICE: \"MINIFLARE_CUSTOM_SERVICE\",\n\t// Backs the Images binding (`env.IMAGES`) \u2014 see imagesLocalFetcher.\n\tIMAGES_BINDING_SERVICE: \"MINIFLARE_IMAGES_BINDING_SERVICE\",\n\t// Backs `fetch(url, { cf: { image } })` transforms \u2014 see cfImageLocalFetcher.\n\tIMAGES_FETCH_SERVICE: \"MINIFLARE_IMAGES_FETCH_SERVICE\",\n\tTEXT_UPSTREAM_URL: \"MINIFLARE_UPSTREAM_URL\",\n\tJSON_CF_BLOB: \"CF_BLOB\",\n\tJSON_ROUTES: \"MINIFLARE_ROUTES\",\n\tJSON_LOG_LEVEL: \"MINIFLARE_LOG_LEVEL\",\n\tDURABLE_OBJECT_NAMESPACE_PROXY: \"MINIFLARE_PROXY\",\n\tDATA_PROXY_SECRET: \"MINIFLARE_PROXY_SECRET\",\n\tDATA_PROXY_SHARED_SECRET: \"MINIFLARE_PROXY_SHARED_SECRET\",\n\tTRIGGER_HANDLERS: \"TRIGGER_HANDLERS\",\n\tLOG_REQUESTS: \"LOG_REQUESTS\",\n\tSTRIP_DISABLE_PRETTY_ERROR: \"STRIP_DISABLE_PRETTY_ERROR\",\n\tSERVICE_LOCAL_EXPLORER: \"MINIFLARE_LOCAL_EXPLORER\",\n\tEXPLORER_DISK: \"MINIFLARE_EXPLORER_DISK\",\n\tJSON_LOCAL_EXPLORER_BINDING_MAP: \"LOCAL_EXPLORER_BINDING_MAP\",\n\tJSON_LOCAL_EXPLORER_WORKER_NAMES: \"LOCAL_EXPLORER_WORKER_NAMES\",\n\tJSON_EXPLORER_WORKER_OPTS: \"MINIFLARE_EXPLORER_WORKER_OPTS\",\n\tSERVICE_CACHE: \"MINIFLARE_CACHE\",\n\tSERVICE_DEV_CONTROL: \"MINIFLARE_DEV_CONTROL\",\n\tSERVICE_DEV_REGISTRY_PROXY: \"MINIFLARE_DEV_REGISTRY_PROXY\",\n\tJSON_TELEMETRY_CONFIG: \"MINIFLARE_TELEMETRY_CONFIG\",\n\tDEV_REGISTRY_DEBUG_PORT: \"DEV_REGISTRY_DEBUG_PORT\",\n\tSERVICE_STREAM: \"MINIFLARE_STREAM\",\n\tSERVICE_IMAGES_DELIVERY: \"MINIFLARE_IMAGES_DELIVERY\",\n\tSERVICE_R2_PUBLIC: \"MINIFLARE_R2_PUBLIC\",\n\tSERVICE_R2_S3: \"MINIFLARE_R2_S3\",\n\tSERVICE_OBSERVABILITY_COLLECTOR: \"MINIFLARE_OBSERVABILITY_COLLECTOR\",\n\tJSON_ACCESS_BLOB_PREFIX: \"MINIFLARE_ACCESS_BLOB_\",\n\tTEXT_FALLBACK_WORKER_NAME: \"MINIFLARE_FALLBACK_WORKER_NAME\",\n} as const;\n\nexport const ProxyOps = {\n\t// Get the target or a property of the target\n\tGET: \"GET\",\n\t// Get the descriptor for a property of the target\n\tGET_OWN_DESCRIPTOR: \"GET_OWN_DESCRIPTOR\",\n\t// Get the target's own property names\n\tGET_OWN_KEYS: \"GET_OWN_KEYS\",\n\t// Call a method on the target\n\tCALL: \"CALL\",\n\t// Remove the strong reference to the target on the \"heap\", allowing it to be\n\t// garbage collected\n\tFREE: \"FREE\",\n} as const;\nexport const ProxyAddresses = {\n\tGLOBAL: 0, // globalThis\n\tENV: 1, // env\n\tUSER_START: 2,\n} as const;\n\n/**\n * Recovers the serialised error a Worker put in `ERROR_STACK_PAYLOAD`, for the\n * cases where the response body carrying it has been dropped (`HEAD` requests).\n * Returns `null` when the header is absent or malformed, so callers can fall\n * back rather than surfacing a decoding failure as the Worker's error.\n */\nexport function decodeErrorPayload(response: {\n\theaders: { get(name: string): string | null };\n}): string | null {\n\tconst payload = response.headers.get(CoreHeaders.ERROR_STACK_PAYLOAD);\n\tif (payload === null) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn decodeURIComponent(payload);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n// ### Proxy Special Cases\n// The proxy supports serialising `Request`/`Response`s for the Cache API. It\n// doesn't support serialising `WebSocket`s though. Rather than attempting this,\n// we call `Fetcher#fetch()` using `dispatchFetch()` directly, using the passed\n// request. This gives us WebSocket support, and is much more efficient, since\n// there's no need to serialise the `Request`/`Response`: we just pass\n// everything to `dispatchFetch()` and return what that gives us.\nexport function isFetcherFetch(targetName: string, key: string) {\n\t// `DurableObject` and `WorkerRpc` are the internal names of `DurableObjectStub`:\n\t// https://github.com/cloudflare/workerd/blob/62b9ceee4c94d2b238692397dc4f604fef84f474/src/workerd/api/actor.h#L86\n\t// https://github.com/cloudflare/workerd/blob/62b9ceee4c94d2b238692397dc4f604fef84f474/src/workerd/api/worker-rpc.h#L30\n\treturn (\n\t\t(targetName === \"Fetcher\" ||\n\t\t\ttargetName === \"DurableObject\" ||\n\t\t\ttargetName === \"WorkerRpc\") &&\n\t\tkey === \"fetch\"\n\t);\n}\n// `R2Object#writeHttpMetadata()` is one of the few functions that mutates its\n// arguments. This would be proxied correctly if the argument were a native\n// target proxy itself, but `Headers` can be constructed in Node. Instead, we\n// respond with the updated headers in the proxy server, then copy them to the\n// original argument on the client.\nexport function isR2ObjectWriteHttpMetadata(targetName: string, key: string) {\n\t// `HeadResult` and `GetResult` are the internal names of `R2Object` and `R2ObjectBody` respectively:\n\t// https://github.com/cloudflare/workerd/blob/ae612f0563d864c82adbfa4c2e5ed78b547aa0a1/src/workerd/api/r2-bucket.h#L210\n\t// https://github.com/cloudflare/workerd/blob/ae612f0563d864c82adbfa4c2e5ed78b547aa0a1/src/workerd/api/r2-bucket.h#L263-L264\n\treturn (\n\t\t(targetName === \"HeadResult\" || targetName === \"GetResult\") &&\n\t\tkey === \"writeHttpMetadata\"\n\t);\n}\n\n/**\n * See #createMediaProxy() comment for why this is special\n */\nexport function isImagesInput(targetName: string, key: string) {\n\treturn targetName === \"ImagesBindingImpl\" && key === \"input\";\n}\n\n// Durable Object stub RPC calls should always be async to avoid blocking the\n// Node.js event loop. The internal names are \"DurableObject\" and \"WorkerRpc\".\n// https://github.com/cloudflare/workerd/blob/62b9ceee/src/workerd/api/actor.h#L86\n// https://github.com/cloudflare/workerd/blob/62b9ceee/src/workerd/api/worker-rpc.h#L30\nexport function isDurableObjectStub(targetName: string) {\n\treturn targetName === \"DurableObject\" || targetName === \"WorkerRpc\";\n}\n", "import assert from \"node:assert\";\nimport { $, blue, red, reset, yellow } from \"kleur/colors\";\nimport { LogLevel, SharedHeaders } from \"miniflare:shared\";\nimport PostalMime from \"postal-mime\";\nimport { isEmailReplyable, validateReply } from \"../email/validate\";\nimport { CoreBindings } from \"./constants\";\nimport type { MiniflareEmailMessage } from \"../email/email.worker\";\nimport type { ForwardableEmailMessage } from \"@cloudflare/workers-types/experimental\";\nimport type { Email } from \"postal-mime\";\n\n// Force-enable colours, because kleur can't detect this setting correctly from within a Worker\n// The user setting should be respected (and ansi stripped out if needed) in https://github.com/cloudflare/workers-sdk/blob/2529848e9ff3ddb01ac8c73f96747f32b47aca3e/packages/miniflare/src/index.ts#L993\n$.enabled = true;\n\ntype Env = {\n\t[CoreBindings.SERVICE_LOOPBACK]: Fetcher;\n};\n\nfunction renderEmailHeaders(headers: Headers | undefined) {\n\treturn headers\n\t\t? `\\n  headers:\\n${[...headers.entries()].map(([k, v]) => `    ${k}: ${v}`).join(\"\\n\")}`\n\t\t: \"\";\n}\n\nexport async function handleEmail(\n\tparams: URLSearchParams,\n\trequest: Request,\n\tservice: Fetcher,\n\tenv: Env,\n\tctx: ExecutionContext\n): Promise<Response> {\n\tconst events: Array<\n\t\t| {\n\t\t\t\ttype: \"forward\" | \"reply\";\n\t\t\t\ttimestamp: string;\n\t\t\t\tmessageId: string;\n\t\t  }\n\t\t| {\n\t\t\t\ttype: \"reject\";\n\t\t\t\ttimestamp: string;\n\t\t  }\n\t> = [];\n\tconst forwards: Array<{\n\t\tmessageId: string;\n\t\trecipient: string;\n\t\theaders: [string, string][];\n\t}> = [];\n\tconst replies: Array<{\n\t\tmessageId: string;\n\t\tsender: string;\n\t\traw: string;\n\t}> = [];\n\n\t// Turn an HTTP request into an EmailMessage, using:\n\t//  - `from` and `to` from the URL\n\t//    - These refer to the SMTP envelope addresses: https://datatracker.ietf.org/doc/html/rfc5321#section-3\n\t//  - `raw` from the request body\n\t//  - `headers` from the request headers\n\t// Refer to https://developers.cloudflare.com/email-routing/email-workers/runtime-api/#emailmessage-definition for more details\n\tconst from = params.get(\"from\");\n\tconst to = params.get(\"to\");\n\n\tif (!request.body || !from || !to) {\n\t\treturn new Response(\n\t\t\t\"Invalid email. Your request must include URL parameters specifying the `from` and `to` addresses, as well as an email in the body\",\n\t\t\t{\n\t\t\t\tstatus: 400,\n\t\t\t}\n\t\t);\n\t}\n\t// We need to parse the email body in this handler in order to validate it, but we also want to pass through\n\t// the raw email to the user Worker. As such, clone the request for use in this handler.\n\tconst clonedRequest = request.clone();\n\n\tassert(clonedRequest.body !== null, \"Cloned request body is null\");\n\n\tconst incomingEmailRaw = new Uint8Array(await request.arrayBuffer());\n\n\t// Email Routing does not support messages bigger than 25Mib: https://developers.cloudflare.com/email-routing/limits/#message-size\n\t// In practice, local dev only supports 1MB, since it uses a JSRPC transport.\n\tif (incomingEmailRaw.byteLength > 25 * 1024 * 1024) {\n\t\treturn new Response(\n\t\t\t\"Email message size is bigger than the production size limit of 25MiB. Local development has a lower limit of 1Mib.\",\n\t\t\t{\n\t\t\t\tstatus: 400,\n\t\t\t}\n\t\t);\n\t}\n\tif (incomingEmailRaw.byteLength > 1024 * 1024) {\n\t\treturn new Response(\n\t\t\t\"Email message size is within the production size limit of 25MiB, but exceeds the lower 1Mib limit for testing locally.\",\n\t\t\t{\n\t\t\t\tstatus: 400,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet parsedIncomingEmail: Email;\n\ttry {\n\t\tparsedIncomingEmail = await PostalMime.parse(incomingEmailRaw);\n\t} catch (e) {\n\t\tconst error = e as Error;\n\t\treturn new Response(\n\t\t\t`Email could not be parsed: ${error.name}: ${error.message}`,\n\t\t\t{ status: 400 }\n\t\t);\n\t}\n\n\tif (parsedIncomingEmail.messageId === undefined) {\n\t\treturn new Response(\n\t\t\t\"Email could not be parsed: invalid or no message id provided\",\n\t\t\t{ status: 400 }\n\t\t);\n\t}\n\n\t// Emails can contain both an \"envelope\" from/to and a \"header\" from/to. Warn if these are different.\n\t// Refer to https://datatracker.ietf.org/doc/html/rfc5321#section-3, https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.2, and https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.3 for more details\n\tif (from !== parsedIncomingEmail.from.address) {\n\t\tawait env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\"http://localhost/core/log\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { [SharedHeaders.LOG_LEVEL]: LogLevel.WARN.toString() },\n\t\t\t\tbody: `${yellow(\"Provided MAIL FROM address doesn't match the email message's \\\"From\\\" header\")}:\\n  MAIL FROM: ${from}\\n  \"From\" header: ${parsedIncomingEmail.from.address}`,\n\t\t\t}\n\t\t);\n\t}\n\n\tif (!parsedIncomingEmail.to?.map((addr) => addr.address).includes(to)) {\n\t\tawait env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\"http://localhost/core/log\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { [SharedHeaders.LOG_LEVEL]: LogLevel.WARN.toString() },\n\t\t\t\tbody: `${yellow('Provided RCPT TO address doesn\\'t match any \"To\" header in the email message')}:\\n  RCPT TO: ${to}\\n  \"To\" header: ${parsedIncomingEmail.to?.map((addr) => addr.address).join(\", \")}`,\n\t\t\t}\n\t\t);\n\t}\n\n\tconst incomingEmailHeaders = new Headers(\n\t\tparsedIncomingEmail.headers.map((header) => [header.key, header.value])\n\t);\n\n\t// Propogate `.setReject()` reasons to the caller\n\tlet rejectReason: string | undefined = undefined;\n\n\t// @ts-expect-error .email is not in the `Fetcher` but it's a valid RPC call.\n\tconst emailEvent = service.email(\n\t\t// Construct a ForwardableEmailMessage-like object. We need\n\t\t// - ForwardableEmailMessage to be able to be passed across JSRPC (to support e.g. userWorker.email(ForwardableEmailMessage))\n\t\t// - ForwardableEmailMessage properties to be synchronously available (to match production). This rules out a class extending `RpcStub`\n\t\t// However, unlike EmailMessage (see email.worker.ts) it doesn't need to be user-constructable, and so we can just use an object with `satisfies`\n\t\t{\n\t\t\tfrom,\n\t\t\tto,\n\t\t\traw: clonedRequest.body,\n\t\t\trawSize: incomingEmailRaw.byteLength,\n\t\t\theaders: incomingEmailHeaders,\n\t\t\tsetReject: (reason: string): void => {\n\t\t\t\tctx.waitUntil(\n\t\t\t\t\tenv[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\t\t\t\"http://localhost/core/log\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\theaders: { [SharedHeaders.LOG_LEVEL]: LogLevel.ERROR.toString() },\n\t\t\t\t\t\t\tbody: `${red(\"Email handler rejected message\")}${reset(` with the following reason: \"${reason}\"`)}`,\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t});\n\t\t\t\trejectReason = reason;\n\t\t\t},\n\t\t\tforward: async (\n\t\t\t\trcptTo: string,\n\t\t\t\theaders?: Headers\n\t\t\t): Promise<EmailSendResult> => {\n\t\t\t\tawait env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\t\t\"http://localhost/core/log\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: { [SharedHeaders.LOG_LEVEL]: LogLevel.INFO.toString() },\n\t\t\t\t\t\tbody: `${blue(\"Email handler forwarded message\")}${reset(` with\\n  rcptTo: ${rcptTo}${renderEmailHeaders(headers)}`)}`,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\t/**\n\t\t\t\t * The message ID in production is a 36 character random string that identifies the message for e.g. linking up threads.\n\t\t\t\t * In production it uses the sender domain rather than example.com. Locally, we have access to none of that information\n\t\t\t\t * so instead we make a dummy message ID that matches the production format (36 characters followed by a domain)\n\t\t\t\t */\n\t\t\t\tconst uuid = crypto.randomUUID().replaceAll(\"-\", \"\");\n\t\t\t\tconst result = { messageId: `${uuid}@example.com` };\n\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"forward\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t\tmessageId: result.messageId,\n\t\t\t\t});\n\t\t\t\tforwards.push({\n\t\t\t\t\trecipient: rcptTo,\n\t\t\t\t\theaders: headers ? [...headers.entries()] : [],\n\t\t\t\t\tmessageId: result.messageId,\n\t\t\t\t});\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\treply: async (replyMessage): Promise<EmailSendResult> => {\n\t\t\t\tassert(\n\t\t\t\t\t\"from\" in replyMessage && \"to\" in replyMessage,\n\t\t\t\t\t\"EmailReplyMessageBuilder is not currently supported\"\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\t!(await isEmailReplyable(\n\t\t\t\t\t\tparsedIncomingEmail,\n\t\t\t\t\t\tincomingEmailHeaders,\n\t\t\t\t\t\tasync (msg) =>\n\t\t\t\t\t\t\tvoid (await env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\t\t\t\t\t\"http://localhost/core/log\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t[SharedHeaders.LOG_LEVEL]: LogLevel.ERROR.toString(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbody: msg,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t))\n\t\t\t\t\t))\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Original email is not replyable\");\n\t\t\t\t}\n\t\t\t\tconst finalReply = await validateReply(\n\t\t\t\t\tparsedIncomingEmail,\n\t\t\t\t\treplyMessage as MiniflareEmailMessage\n\t\t\t\t);\n\n\t\t\t\tconst resp = await env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\t\t\"http://localhost/core/store-temp-file?extension=eml&prefix=email\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: finalReply,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tconst file = await resp.text();\n\n\t\t\t\tawait env[CoreBindings.SERVICE_LOOPBACK].fetch(\n\t\t\t\t\t\"http://localhost/core/log\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: { [SharedHeaders.LOG_LEVEL]: LogLevel.INFO.toString() },\n\t\t\t\t\t\tbody: `${blue(\"Email handler replied to sender\")}${reset(` with the following message:\\n  ${file}`)}`,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t/**\n\t\t\t\t * The message ID in production is a 36 character random string that identifies the message for e.g. linking up threads.\n\t\t\t\t * In production it uses the sender domain rather than example.com. Locally, we have access to none of that information\n\t\t\t\t * so instead we make a dummy message ID that matches the production format (36 characters followed by a domain)\n\t\t\t\t */\n\t\t\t\tconst uuid = crypto.randomUUID().replaceAll(\"-\", \"\");\n\t\t\t\tconst result = { messageId: `${uuid}@example.com` };\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"reply\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t\tmessageId: result.messageId,\n\t\t\t\t});\n\t\t\t\treplies.push({\n\t\t\t\t\tmessageId: result.messageId,\n\t\t\t\t\tsender: replyMessage.from,\n\t\t\t\t\traw: new TextDecoder().decode(finalReply),\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t},\n\t\t} satisfies ForwardableEmailMessage\n\t);\n\n\tif (params.get(\"format\") !== \"json\") {\n\t\tawait emailEvent;\n\n\t\tif (rejectReason !== undefined) {\n\t\t\treturn new Response(\n\t\t\t\t`Worker rejected email with the following reason: ${rejectReason}`,\n\t\t\t\t{ status: 400 }\n\t\t\t);\n\t\t}\n\n\t\treturn new Response(\"Worker successfully processed email\", {\n\t\t\tstatus: 200,\n\t\t});\n\t}\n\n\tlet outcome: \"ok\" | \"exception\";\n\n\ttry {\n\t\tawait emailEvent;\n\t\toutcome = \"ok\";\n\t} catch {\n\t\toutcome = \"exception\";\n\t}\n\n\t// Give an un-awaited `setReject()` call time to cross JSRPC.\n\tawait scheduler.wait(0);\n\n\treturn Response.json(\n\t\t{\n\t\t\toutcome,\n\t\t\trejectReason,\n\t\t\tforwards,\n\t\t\treplies,\n\t\t\tevents,\n\t\t},\n\t\t{ status: outcome === \"ok\" ? 200 : 500 }\n\t);\n}\n", "export const textEncoder = new TextEncoder();\n\nconst base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst base64Lookup = new Uint8Array(256);\nfor (var i = 0; i < base64Chars.length; i++) {\n    base64Lookup[base64Chars.charCodeAt(i)] = i;\n}\n\nexport function decodeBase64(base64) {\n    let bufferLength = Math.ceil(base64.length / 4) * 3;\n    const len = base64.length;\n\n    let p = 0;\n\n    if (base64.length % 4 === 3) {\n        bufferLength--;\n    } else if (base64.length % 4 === 2) {\n        bufferLength -= 2;\n    } else if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arrayBuffer = new ArrayBuffer(bufferLength);\n    const bytes = new Uint8Array(arrayBuffer);\n\n    for (let i = 0; i < len; i += 4) {\n        let encoded1 = base64Lookup[base64.charCodeAt(i)];\n        let encoded2 = base64Lookup[base64.charCodeAt(i + 1)];\n        let encoded3 = base64Lookup[base64.charCodeAt(i + 2)];\n        let encoded4 = base64Lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arrayBuffer;\n}\n\nexport function getDecoder(charset) {\n    charset = charset || 'utf8';\n    return new TextDecoder(charset);\n}\n\n/**\n * Converts a Blob into an ArrayBuffer\n * @param {Blob} blob Blob to convert\n * @returns {ArrayBuffer} Converted value\n */\nexport async function blobToArrayBuffer(blob) {\n    if ('arrayBuffer' in blob) {\n        return await blob.arrayBuffer();\n    }\n\n    const fr = new FileReader();\n\n    return new Promise((resolve, reject) => {\n        fr.onload = function (e) {\n            resolve(e.target.result);\n        };\n\n        fr.onerror = function (e) {\n            reject(fr.error);\n        };\n\n        fr.readAsArrayBuffer(blob);\n    });\n}\n\nexport function getHex(c) {\n    if ((c >= 0x30 /* 0 */ && c <= 0x39) /* 9 */ || (c >= 0x61 /* a */ && c <= 0x66) /* f */ || (c >= 0x41 /* A */ && c <= 0x46) /* F */) {\n        return String.fromCharCode(c);\n    }\n    return false;\n}\n\n/**\n * Decode a complete mime word encoded string\n *\n * @param {String} str Mime word encoded string\n * @return {String} Decoded unicode string\n */\nexport function decodeWord(charset, encoding, str) {\n    // RFC2231 added language tag to the encoding\n    // see: https://tools.ietf.org/html/rfc2231#section-5\n    // this implementation silently ignores this tag\n    let splitPos = charset.indexOf('*');\n    if (splitPos >= 0) {\n        charset = charset.substr(0, splitPos);\n    }\n\n    encoding = encoding.toUpperCase();\n\n    let byteStr;\n\n    if (encoding === 'Q') {\n        str = str\n            // remove spaces between = and hex char, this might indicate invalidly applied line splitting\n            .replace(/=\\s+([0-9a-fA-F])/g, '=$1')\n            // convert all underscores to spaces\n            .replace(/[_\\s]/g, ' ');\n\n        let buf = textEncoder.encode(str);\n        let encodedBytes = [];\n        for (let i = 0, len = buf.length; i < len; i++) {\n            let c = buf[i];\n            if (i <= len - 2 && c === 0x3d /* = */) {\n                let c1 = getHex(buf[i + 1]);\n                let c2 = getHex(buf[i + 2]);\n                if (c1 && c2) {\n                    let c = parseInt(c1 + c2, 16);\n                    encodedBytes.push(c);\n                    i += 2;\n                    continue;\n                }\n            }\n            encodedBytes.push(c);\n        }\n        byteStr = new ArrayBuffer(encodedBytes.length);\n        let dataView = new DataView(byteStr);\n        for (let i = 0, len = encodedBytes.length; i < len; i++) {\n            dataView.setUint8(i, encodedBytes[i]);\n        }\n    } else if (encoding === 'B') {\n        byteStr = decodeBase64(str.replace(/[^a-zA-Z0-9\\+\\/=]+/g, ''));\n    } else {\n        // keep as is, convert ArrayBuffer to unicode string, assume utf8\n        byteStr = textEncoder.encode(str);\n    }\n\n    return getDecoder(charset).decode(byteStr);\n}\n\nexport function decodeWords(str) {\n    let joinString = true;\n    let done = false;\n\n    while (!done) {\n        let result = (str || '')\n            .toString()\n            // find base64 words that can be joined\n            .replace(/(=\\?([^?]+)\\?[Bb]\\?([^?]*)\\?=)\\s*(?==\\?([^?]+)\\?[Bb]\\?[^?]*\\?=)/g, (match, left, chLeft, encodedLeftStr, chRight) => {\n                if (!joinString) {\n                    return match;\n                }\n                // only mark b64 chunks to be joined if charsets match and left side does not end with =\n                if (chLeft === chRight && encodedLeftStr.length % 4 === 0 && !/=$/.test(encodedLeftStr)) {\n                    // set a joiner marker\n                    return left + '__\\x00JOIN\\x00__';\n                }\n\n                return match;\n            })\n            // find QP words that can be joined\n            .replace(/(=\\?([^?]+)\\?[Qq]\\?[^?]*\\?=)\\s*(?==\\?([^?]+)\\?[Qq]\\?[^?]*\\?=)/g, (match, left, chLeft, chRight) => {\n                if (!joinString) {\n                    return match;\n                }\n                // only mark QP chunks to be joined if charsets match\n                if (chLeft === chRight) {\n                    // set a joiner marker\n                    return left + '__\\x00JOIN\\x00__';\n                }\n                return match;\n            })\n            // join base64 encoded words\n            .replace(/(\\?=)?__\\x00JOIN\\x00__(=\\?([^?]+)\\?[QqBb]\\?)?/g, '')\n            // remove spaces between mime encoded words\n            .replace(/(=\\?[^?]+\\?[QqBb]\\?[^?]*\\?=)\\s+(?==\\?[^?]+\\?[QqBb]\\?[^?]*\\?=)/g, '$1')\n            // decode words\n            .replace(/=\\?([\\w_\\-*]+)\\?([QqBb])\\?([^?]*)\\?=/g, (m, charset, encoding, text) => decodeWord(charset, encoding, text));\n\n        if (joinString && result.indexOf('\\ufffd') >= 0) {\n            // text contains \\ufffd (EF BF BD), so unicode conversion failed, retry without joining strings\n            joinString = false;\n        } else {\n            return result;\n        }\n    }\n}\n\nexport function decodeURIComponentWithCharset(encodedStr, charset) {\n    charset = charset || 'utf-8';\n\n    let encodedBytes = [];\n    for (let i = 0; i < encodedStr.length; i++) {\n        let c = encodedStr.charAt(i);\n        if (c === '%' && /^[a-f0-9]{2}/i.test(encodedStr.substr(i + 1, 2))) {\n            // encoded sequence\n            let byte = encodedStr.substr(i + 1, 2);\n            i += 2;\n            encodedBytes.push(parseInt(byte, 16));\n        } else if (c.charCodeAt(0) > 126) {\n            c = textEncoder.encode(c);\n            for (let j = 0; j < c.length; j++) {\n                encodedBytes.push(c[j]);\n            }\n        } else {\n            // \"normal\" char\n            encodedBytes.push(c.charCodeAt(0));\n        }\n    }\n\n    const byteStr = new ArrayBuffer(encodedBytes.length);\n    const dataView = new DataView(byteStr);\n    for (let i = 0, len = encodedBytes.length; i < len; i++) {\n        dataView.setUint8(i, encodedBytes[i]);\n    }\n\n    return getDecoder(charset).decode(byteStr);\n}\n\nexport function decodeParameterValueContinuations(header) {\n    // handle parameter value continuations\n    // https://tools.ietf.org/html/rfc2231#section-3\n\n    // preprocess values\n    let paramKeys = new Map();\n\n    Object.keys(header.params).forEach(key => {\n        let match = key.match(/\\*((\\d+)\\*?)?$/);\n        if (!match) {\n            // nothing to do here, does not seem like a continuation param\n            return;\n        }\n\n        let actualKey = key.substr(0, match.index).toLowerCase();\n        let nr = Number(match[2]) || 0;\n\n        let paramVal;\n        if (!paramKeys.has(actualKey)) {\n            paramVal = {\n                charset: false,\n                values: []\n            };\n            paramKeys.set(actualKey, paramVal);\n        } else {\n            paramVal = paramKeys.get(actualKey);\n        }\n\n        let value = header.params[key];\n        if (nr === 0 && match[0].charAt(match[0].length - 1) === '*' && (match = value.match(/^([^']*)'[^']*'(.*)$/))) {\n            paramVal.charset = match[1] || 'utf-8';\n            value = match[2];\n        }\n\n        paramVal.values.push({ nr, value });\n\n        // remove the old reference\n        delete header.params[key];\n    });\n\n    paramKeys.forEach((paramVal, key) => {\n        header.params[key] = decodeURIComponentWithCharset(\n            paramVal.values\n                .sort((a, b) => a.nr - b.nr)\n                .map(a => a.value)\n                .join(''),\n            paramVal.charset\n        );\n    });\n}\n", "import { blobToArrayBuffer } from './decode-strings.js';\n\nexport default class PassThroughDecoder {\n    constructor() {\n        this.chunks = [];\n    }\n\n    update(line) {\n        this.chunks.push(line);\n        this.chunks.push('\\n');\n    }\n\n    finalize() {\n        // convert an array of arraybuffers into a blob and then back into a single arraybuffer\n        return blobToArrayBuffer(new Blob(this.chunks, { type: 'application/octet-stream' }));\n    }\n}\n", "import { decodeBase64, blobToArrayBuffer } from './decode-strings.js';\n\nexport default class Base64Decoder {\n    constructor(opts) {\n        opts = opts || {};\n\n        this.decoder = opts.decoder || new TextDecoder();\n\n        this.maxChunkSize = 100 * 1024;\n\n        this.chunks = [];\n\n        this.remainder = '';\n    }\n\n    update(buffer) {\n        let str = this.decoder.decode(buffer);\n\n        if (/[^a-zA-Z0-9+\\/]/.test(str)) {\n            str = str.replace(/[^a-zA-Z0-9+\\/]+/g, '');\n        }\n\n        this.remainder += str;\n\n        if (this.remainder.length >= this.maxChunkSize) {\n            let allowedBytes = Math.floor(this.remainder.length / 4) * 4;\n            let base64Str;\n\n            if (allowedBytes === this.remainder.length) {\n                base64Str = this.remainder;\n                this.remainder = '';\n            } else {\n                base64Str = this.remainder.substr(0, allowedBytes);\n                this.remainder = this.remainder.substr(allowedBytes);\n            }\n\n            if (base64Str.length) {\n                this.chunks.push(decodeBase64(base64Str));\n            }\n        }\n    }\n\n    finalize() {\n        if (this.remainder && !/^=+$/.test(this.remainder)) {\n            this.chunks.push(decodeBase64(this.remainder));\n        }\n\n        return blobToArrayBuffer(new Blob(this.chunks, { type: 'application/octet-stream' }));\n    }\n}\n", "import { blobToArrayBuffer } from './decode-strings.js';\n\nexport default class QPDecoder {\n    constructor(opts) {\n        opts = opts || {};\n\n        this.decoder = opts.decoder || new TextDecoder();\n\n        this.maxChunkSize = 100 * 1024;\n\n        this.remainder = '';\n\n        this.chunks = [];\n    }\n\n    decodeQPBytes(encodedBytes) {\n        let buf = new ArrayBuffer(encodedBytes.length);\n        let dataView = new DataView(buf);\n        for (let i = 0, len = encodedBytes.length; i < len; i++) {\n            dataView.setUint8(i, parseInt(encodedBytes[i], 16));\n        }\n        return buf;\n    }\n\n    decodeChunks(str) {\n        // unwrap newlines\n        str = str.replace(/=\\r?\\n/g, '');\n\n        let list = str.split(/(?==)/);\n        let encodedBytes = [];\n        for (let part of list) {\n            if (part.charAt(0) !== '=') {\n                if (encodedBytes.length) {\n                    this.chunks.push(this.decodeQPBytes(encodedBytes));\n                    encodedBytes = [];\n                }\n                this.chunks.push(part);\n                continue;\n            }\n\n            if (part.length === 3) {\n                encodedBytes.push(part.substr(1));\n                continue;\n            }\n\n            if (part.length > 3) {\n                encodedBytes.push(part.substr(1, 2));\n                this.chunks.push(this.decodeQPBytes(encodedBytes));\n                encodedBytes = [];\n\n                part = part.substr(3);\n                this.chunks.push(part);\n            }\n        }\n        if (encodedBytes.length) {\n            this.chunks.push(this.decodeQPBytes(encodedBytes));\n            encodedBytes = [];\n        }\n    }\n\n    update(buffer) {\n        // expect full lines, so add line terminator as well\n        let str = this.decoder.decode(buffer) + '\\n';\n\n        str = this.remainder + str;\n\n        if (str.length < this.maxChunkSize) {\n            this.remainder = str;\n            return;\n        }\n\n        this.remainder = '';\n\n        let partialEnding = str.match(/=[a-fA-F0-9]?$/);\n        if (partialEnding) {\n            if (partialEnding.index === 0) {\n                this.remainder = str;\n                return;\n            }\n            this.remainder = str.substr(partialEnding.index);\n            str = str.substr(0, partialEnding.index);\n        }\n\n        this.decodeChunks(str);\n    }\n\n    finalize() {\n        if (this.remainder.length) {\n            this.decodeChunks(this.remainder);\n            this.remainder = '';\n        }\n\n        // convert an array of arraybuffers into a blob and then back into a single arraybuffer\n        return blobToArrayBuffer(new Blob(this.chunks, { type: 'application/octet-stream' }));\n    }\n}\n", "import { getDecoder, decodeParameterValueContinuations, textEncoder } from './decode-strings.js';\nimport PassThroughDecoder from './pass-through-decoder.js';\nimport Base64Decoder from './base64-decoder.js';\nimport QPDecoder from './qp-decoder.js';\n\nexport default class MimeNode {\n    constructor(opts) {\n        opts = opts || {};\n\n        this.postalMime = opts.postalMime;\n\n        this.root = !!opts.parentNode;\n        this.childNodes = [];\n        if (opts.parentNode) {\n            opts.parentNode.childNodes.push(this);\n        }\n\n        this.state = 'header';\n\n        this.headerLines = [];\n\n        this.contentType = {\n            value: 'text/plain',\n            default: true\n        };\n\n        this.contentTransferEncoding = {\n            value: '8bit'\n        };\n\n        this.contentDisposition = {\n            value: ''\n        };\n\n        this.headers = [];\n\n        this.contentDecoder = false;\n    }\n\n    setupContentDecoder(transferEncoding) {\n        if (/base64/i.test(transferEncoding)) {\n            this.contentDecoder = new Base64Decoder();\n        } else if (/quoted-printable/i.test(transferEncoding)) {\n            this.contentDecoder = new QPDecoder({ decoder: getDecoder(this.contentType.parsed.params.charset) });\n        } else {\n            this.contentDecoder = new PassThroughDecoder();\n        }\n    }\n\n    async finalize() {\n        if (this.state === 'finished') {\n            return;\n        }\n\n        if (this.state === 'header') {\n            this.processHeaders();\n        }\n\n        // remove self from boundary listing\n        let boundaries = this.postalMime.boundaries;\n        for (let i = boundaries.length - 1; i >= 0; i--) {\n            let boundary = boundaries[i];\n            if (boundary.node === this) {\n                boundaries.splice(i, 1);\n                break;\n            }\n        }\n\n        await this.finalizeChildNodes();\n\n        this.content = this.contentDecoder ? await this.contentDecoder.finalize() : null;\n\n        this.state = 'finished';\n    }\n\n    async finalizeChildNodes() {\n        for (let childNode of this.childNodes) {\n            await childNode.finalize();\n        }\n    }\n\n    parseStructuredHeader(str) {\n        let response = {\n            value: false,\n            params: {}\n        };\n\n        let key = false;\n        let value = '';\n        let stage = 'value';\n\n        let quote = false;\n        let escaped = false;\n        let chr;\n\n        for (let i = 0, len = str.length; i < len; i++) {\n            chr = str.charAt(i);\n            switch (stage) {\n                case 'key':\n                    if (chr === '=') {\n                        key = value.trim().toLowerCase();\n                        stage = 'value';\n                        value = '';\n                        break;\n                    }\n                    value += chr;\n                    break;\n                case 'value':\n                    if (escaped) {\n                        value += chr;\n                    } else if (chr === '\\\\') {\n                        escaped = true;\n                        continue;\n                    } else if (quote && chr === quote) {\n                        quote = false;\n                    } else if (!quote && chr === '\"') {\n                        quote = chr;\n                    } else if (!quote && chr === ';') {\n                        if (key === false) {\n                            response.value = value.trim();\n                        } else {\n                            response.params[key] = value.trim();\n                        }\n                        stage = 'key';\n                        value = '';\n                    } else {\n                        value += chr;\n                    }\n                    escaped = false;\n                    break;\n            }\n        }\n\n        // finalize remainder\n        value = value.trim();\n        if (stage === 'value') {\n            if (key === false) {\n                // default value\n                response.value = value;\n            } else {\n                // subkey value\n                response.params[key] = value;\n            }\n        } else if (value) {\n            // treat as key without value, see emptykey:\n            // Header-Key: somevalue; key=value; emptykey\n            response.params[value.toLowerCase()] = '';\n        }\n\n        if (response.value) {\n            response.value = response.value.toLowerCase();\n        }\n\n        // convert Parameter Value Continuations into single strings\n        decodeParameterValueContinuations(response);\n\n        return response;\n    }\n\n    decodeFlowedText(str, delSp) {\n        return (\n            str\n                .split(/\\r?\\n/)\n                // remove soft linebreaks\n                // soft linebreaks are added after space symbols\n                .reduce((previousValue, currentValue) => {\n                    if (/ $/.test(previousValue) && !/(^|\\n)-- $/.test(previousValue)) {\n                        if (delSp) {\n                            // delsp adds space to text to be able to fold it\n                            // these spaces can be removed once the text is unfolded\n                            return previousValue.slice(0, -1) + currentValue;\n                        } else {\n                            return previousValue + currentValue;\n                        }\n                    } else {\n                        return previousValue + '\\n' + currentValue;\n                    }\n                })\n                // remove whitespace stuffing\n                // http://tools.ietf.org/html/rfc3676#section-4.4\n                .replace(/^ /gm, '')\n        );\n    }\n\n    getTextContent() {\n        if (!this.content) {\n            return '';\n        }\n\n        let str = getDecoder(this.contentType.parsed.params.charset).decode(this.content);\n\n        if (/^flowed$/i.test(this.contentType.parsed.params.format)) {\n            str = this.decodeFlowedText(str, /^yes$/i.test(this.contentType.parsed.params.delsp));\n        }\n\n        return str;\n    }\n\n    processHeaders() {\n        for (let i = this.headerLines.length - 1; i >= 0; i--) {\n            let line = this.headerLines[i];\n            if (i && /^\\s/.test(line)) {\n                this.headerLines[i - 1] += '\\n' + line;\n                this.headerLines.splice(i, 1);\n            } else {\n                // remove folding and extra WS\n                line = line.replace(/\\s+/g, ' ');\n                let sep = line.indexOf(':');\n                let key = sep < 0 ? line.trim() : line.substr(0, sep).trim();\n                let value = sep < 0 ? '' : line.substr(sep + 1).trim();\n                this.headers.push({ key: key.toLowerCase(), originalKey: key, value });\n\n                switch (key.toLowerCase()) {\n                    case 'content-type':\n                        if (this.contentType.default) {\n                            this.contentType = { value, parsed: {} };\n                        }\n                        break;\n                    case 'content-transfer-encoding':\n                        this.contentTransferEncoding = { value, parsed: {} };\n                        break;\n                    case 'content-disposition':\n                        this.contentDisposition = { value, parsed: {} };\n                        break;\n                    case 'content-id':\n                        this.contentId = value;\n                        break;\n                    case 'content-description':\n                        this.contentDescription = value;\n                        break;\n                }\n            }\n        }\n\n        this.contentType.parsed = this.parseStructuredHeader(this.contentType.value);\n        this.contentType.multipart = /^multipart\\//i.test(this.contentType.parsed.value)\n            ? this.contentType.parsed.value.substr(this.contentType.parsed.value.indexOf('/') + 1)\n            : false;\n\n        if (this.contentType.multipart && this.contentType.parsed.params.boundary) {\n            // add self to boundary terminator listing\n            this.postalMime.boundaries.push({\n                value: textEncoder.encode(this.contentType.parsed.params.boundary),\n                node: this\n            });\n        }\n\n        this.contentDisposition.parsed = this.parseStructuredHeader(this.contentDisposition.value);\n\n        this.contentTransferEncoding.encoding = this.contentTransferEncoding.value\n            .toLowerCase()\n            .split(/[^\\w-]/)\n            .shift();\n\n        this.setupContentDecoder(this.contentTransferEncoding.encoding);\n    }\n\n    feed(line) {\n        switch (this.state) {\n            case 'header':\n                if (!line.length) {\n                    this.state = 'body';\n                    return this.processHeaders();\n                }\n                this.headerLines.push(getDecoder().decode(line));\n                break;\n            case 'body': {\n                // add line to body\n                this.contentDecoder.update(line);\n            }\n        }\n    }\n}\n", "// Entity map from https://html.spec.whatwg.org/multipage/named-characters.html#named-character-references\nexport const htmlEntities = {\n    '&AElig': '\\u00C6',\n    '&AElig;': '\\u00C6',\n    '&AMP': '\\u0026',\n    '&AMP;': '\\u0026',\n    '&Aacute': '\\u00C1',\n    '&Aacute;': '\\u00C1',\n    '&Abreve;': '\\u0102',\n    '&Acirc': '\\u00C2',\n    '&Acirc;': '\\u00C2',\n    '&Acy;': '\\u0410',\n    '&Afr;': '\\uD835\\uDD04',\n    '&Agrave': '\\u00C0',\n    '&Agrave;': '\\u00C0',\n    '&Alpha;': '\\u0391',\n    '&Amacr;': '\\u0100',\n    '&And;': '\\u2A53',\n    '&Aogon;': '\\u0104',\n    '&Aopf;': '\\uD835\\uDD38',\n    '&ApplyFunction;': '\\u2061',\n    '&Aring': '\\u00C5',\n    '&Aring;': '\\u00C5',\n    '&Ascr;': '\\uD835\\uDC9C',\n    '&Assign;': '\\u2254',\n    '&Atilde': '\\u00C3',\n    '&Atilde;': '\\u00C3',\n    '&Auml': '\\u00C4',\n    '&Auml;': '\\u00C4',\n    '&Backslash;': '\\u2216',\n    '&Barv;': '\\u2AE7',\n    '&Barwed;': '\\u2306',\n    '&Bcy;': '\\u0411',\n    '&Because;': '\\u2235',\n    '&Bernoullis;': '\\u212C',\n    '&Beta;': '\\u0392',\n    '&Bfr;': '\\uD835\\uDD05',\n    '&Bopf;': '\\uD835\\uDD39',\n    '&Breve;': '\\u02D8',\n    '&Bscr;': '\\u212C',\n    '&Bumpeq;': '\\u224E',\n    '&CHcy;': '\\u0427',\n    '&COPY': '\\u00A9',\n    '&COPY;': '\\u00A9',\n    '&Cacute;': '\\u0106',\n    '&Cap;': '\\u22D2',\n    '&CapitalDifferentialD;': '\\u2145',\n    '&Cayleys;': '\\u212D',\n    '&Ccaron;': '\\u010C',\n    '&Ccedil': '\\u00C7',\n    '&Ccedil;': '\\u00C7',\n    '&Ccirc;': '\\u0108',\n    '&Cconint;': '\\u2230',\n    '&Cdot;': '\\u010A',\n    '&Cedilla;': '\\u00B8',\n    '&CenterDot;': '\\u00B7',\n    '&Cfr;': '\\u212D',\n    '&Chi;': '\\u03A7',\n    '&CircleDot;': '\\u2299',\n    '&CircleMinus;': '\\u2296',\n    '&CirclePlus;': '\\u2295',\n    '&CircleTimes;': '\\u2297',\n    '&ClockwiseContourIntegral;': '\\u2232',\n    '&CloseCurlyDoubleQuote;': '\\u201D',\n    '&CloseCurlyQuote;': '\\u2019',\n    '&Colon;': '\\u2237',\n    '&Colone;': '\\u2A74',\n    '&Congruent;': '\\u2261',\n    '&Conint;': '\\u222F',\n    '&ContourIntegral;': '\\u222E',\n    '&Copf;': '\\u2102',\n    '&Coproduct;': '\\u2210',\n    '&CounterClockwiseContourIntegral;': '\\u2233',\n    '&Cross;': '\\u2A2F',\n    '&Cscr;': '\\uD835\\uDC9E',\n    '&Cup;': '\\u22D3',\n    '&CupCap;': '\\u224D',\n    '&DD;': '\\u2145',\n    '&DDotrahd;': '\\u2911',\n    '&DJcy;': '\\u0402',\n    '&DScy;': '\\u0405',\n    '&DZcy;': '\\u040F',\n    '&Dagger;': '\\u2021',\n    '&Darr;': '\\u21A1',\n    '&Dashv;': '\\u2AE4',\n    '&Dcaron;': '\\u010E',\n    '&Dcy;': '\\u0414',\n    '&Del;': '\\u2207',\n    '&Delta;': '\\u0394',\n    '&Dfr;': '\\uD835\\uDD07',\n    '&DiacriticalAcute;': '\\u00B4',\n    '&DiacriticalDot;': '\\u02D9',\n    '&DiacriticalDoubleAcute;': '\\u02DD',\n    '&DiacriticalGrave;': '\\u0060',\n    '&DiacriticalTilde;': '\\u02DC',\n    '&Diamond;': '\\u22C4',\n    '&DifferentialD;': '\\u2146',\n    '&Dopf;': '\\uD835\\uDD3B',\n    '&Dot;': '\\u00A8',\n    '&DotDot;': '\\u20DC',\n    '&DotEqual;': '\\u2250',\n    '&DoubleContourIntegral;': '\\u222F',\n    '&DoubleDot;': '\\u00A8',\n    '&DoubleDownArrow;': '\\u21D3',\n    '&DoubleLeftArrow;': '\\u21D0',\n    '&DoubleLeftRightArrow;': '\\u21D4',\n    '&DoubleLeftTee;': '\\u2AE4',\n    '&DoubleLongLeftArrow;': '\\u27F8',\n    '&DoubleLongLeftRightArrow;': '\\u27FA',\n    '&DoubleLongRightArrow;': '\\u27F9',\n    '&DoubleRightArrow;': '\\u21D2',\n    '&DoubleRightTee;': '\\u22A8',\n    '&DoubleUpArrow;': '\\u21D1',\n    '&DoubleUpDownArrow;': '\\u21D5',\n    '&DoubleVerticalBar;': '\\u2225',\n    '&DownArrow;': '\\u2193',\n    '&DownArrowBar;': '\\u2913',\n    '&DownArrowUpArrow;': '\\u21F5',\n    '&DownBreve;': '\\u0311',\n    '&DownLeftRightVector;': '\\u2950',\n    '&DownLeftTeeVector;': '\\u295E',\n    '&DownLeftVector;': '\\u21BD',\n    '&DownLeftVectorBar;': '\\u2956',\n    '&DownRightTeeVector;': '\\u295F',\n    '&DownRightVector;': '\\u21C1',\n    '&DownRightVectorBar;': '\\u2957',\n    '&DownTee;': '\\u22A4',\n    '&DownTeeArrow;': '\\u21A7',\n    '&Downarrow;': '\\u21D3',\n    '&Dscr;': '\\uD835\\uDC9F',\n    '&Dstrok;': '\\u0110',\n    '&ENG;': '\\u014A',\n    '&ETH': '\\u00D0',\n    '&ETH;': '\\u00D0',\n    '&Eacute': '\\u00C9',\n    '&Eacute;': '\\u00C9',\n    '&Ecaron;': '\\u011A',\n    '&Ecirc': '\\u00CA',\n    '&Ecirc;': '\\u00CA',\n    '&Ecy;': '\\u042D',\n    '&Edot;': '\\u0116',\n    '&Efr;': '\\uD835\\uDD08',\n    '&Egrave': '\\u00C8',\n    '&Egrave;': '\\u00C8',\n    '&Element;': '\\u2208',\n    '&Emacr;': '\\u0112',\n    '&EmptySmallSquare;': '\\u25FB',\n    '&EmptyVerySmallSquare;': '\\u25AB',\n    '&Eogon;': '\\u0118',\n    '&Eopf;': '\\uD835\\uDD3C',\n    '&Epsilon;': '\\u0395',\n    '&Equal;': '\\u2A75',\n    '&EqualTilde;': '\\u2242',\n    '&Equilibrium;': '\\u21CC',\n    '&Escr;': '\\u2130',\n    '&Esim;': '\\u2A73',\n    '&Eta;': '\\u0397',\n    '&Euml': '\\u00CB',\n    '&Euml;': '\\u00CB',\n    '&Exists;': '\\u2203',\n    '&ExponentialE;': '\\u2147',\n    '&Fcy;': '\\u0424',\n    '&Ffr;': '\\uD835\\uDD09',\n    '&FilledSmallSquare;': '\\u25FC',\n    '&FilledVerySmallSquare;': '\\u25AA',\n    '&Fopf;': '\\uD835\\uDD3D',\n    '&ForAll;': '\\u2200',\n    '&Fouriertrf;': '\\u2131',\n    '&Fscr;': '\\u2131',\n    '&GJcy;': '\\u0403',\n    '&GT': '\\u003E',\n    '&GT;': '\\u003E',\n    '&Gamma;': '\\u0393',\n    '&Gammad;': '\\u03DC',\n    '&Gbreve;': '\\u011E',\n    '&Gcedil;': '\\u0122',\n    '&Gcirc;': '\\u011C',\n    '&Gcy;': '\\u0413',\n    '&Gdot;': '\\u0120',\n    '&Gfr;': '\\uD835\\uDD0A',\n    '&Gg;': '\\u22D9',\n    '&Gopf;': '\\uD835\\uDD3E',\n    '&GreaterEqual;': '\\u2265',\n    '&GreaterEqualLess;': '\\u22DB',\n    '&GreaterFullEqual;': '\\u2267',\n    '&GreaterGreater;': '\\u2AA2',\n    '&GreaterLess;': '\\u2277',\n    '&GreaterSlantEqual;': '\\u2A7E',\n    '&GreaterTilde;': '\\u2273',\n    '&Gscr;': '\\uD835\\uDCA2',\n    '&Gt;': '\\u226B',\n    '&HARDcy;': '\\u042A',\n    '&Hacek;': '\\u02C7',\n    '&Hat;': '\\u005E',\n    '&Hcirc;': '\\u0124',\n    '&Hfr;': '\\u210C',\n    '&HilbertSpace;': '\\u210B',\n    '&Hopf;': '\\u210D',\n    '&HorizontalLine;': '\\u2500',\n    '&Hscr;': '\\u210B',\n    '&Hstrok;': '\\u0126',\n    '&HumpDownHump;': '\\u224E',\n    '&HumpEqual;': '\\u224F',\n    '&IEcy;': '\\u0415',\n    '&IJlig;': '\\u0132',\n    '&IOcy;': '\\u0401',\n    '&Iacute': '\\u00CD',\n    '&Iacute;': '\\u00CD',\n    '&Icirc': '\\u00CE',\n    '&Icirc;': '\\u00CE',\n    '&Icy;': '\\u0418',\n    '&Idot;': '\\u0130',\n    '&Ifr;': '\\u2111',\n    '&Igrave': '\\u00CC',\n    '&Igrave;': '\\u00CC',\n    '&Im;': '\\u2111',\n    '&Imacr;': '\\u012A',\n    '&ImaginaryI;': '\\u2148',\n    '&Implies;': '\\u21D2',\n    '&Int;': '\\u222C',\n    '&Integral;': '\\u222B',\n    '&Intersection;': '\\u22C2',\n    '&InvisibleComma;': '\\u2063',\n    '&InvisibleTimes;': '\\u2062',\n    '&Iogon;': '\\u012E',\n    '&Iopf;': '\\uD835\\uDD40',\n    '&Iota;': '\\u0399',\n    '&Iscr;': '\\u2110',\n    '&Itilde;': '\\u0128',\n    '&Iukcy;': '\\u0406',\n    '&Iuml': '\\u00CF',\n    '&Iuml;': '\\u00CF',\n    '&Jcirc;': '\\u0134',\n    '&Jcy;': '\\u0419',\n    '&Jfr;': '\\uD835\\uDD0D',\n    '&Jopf;': '\\uD835\\uDD41',\n    '&Jscr;': '\\uD835\\uDCA5',\n    '&Jsercy;': '\\u0408',\n    '&Jukcy;': '\\u0404',\n    '&KHcy;': '\\u0425',\n    '&KJcy;': '\\u040C',\n    '&Kappa;': '\\u039A',\n    '&Kcedil;': '\\u0136',\n    '&Kcy;': '\\u041A',\n    '&Kfr;': '\\uD835\\uDD0E',\n    '&Kopf;': '\\uD835\\uDD42',\n    '&Kscr;': '\\uD835\\uDCA6',\n    '&LJcy;': '\\u0409',\n    '&LT': '\\u003C',\n    '&LT;': '\\u003C',\n    '&Lacute;': '\\u0139',\n    '&Lambda;': '\\u039B',\n    '&Lang;': '\\u27EA',\n    '&Laplacetrf;': '\\u2112',\n    '&Larr;': '\\u219E',\n    '&Lcaron;': '\\u013D',\n    '&Lcedil;': '\\u013B',\n    '&Lcy;': '\\u041B',\n    '&LeftAngleBracket;': '\\u27E8',\n    '&LeftArrow;': '\\u2190',\n    '&LeftArrowBar;': '\\u21E4',\n    '&LeftArrowRightArrow;': '\\u21C6',\n    '&LeftCeiling;': '\\u2308',\n    '&LeftDoubleBracket;': '\\u27E6',\n    '&LeftDownTeeVector;': '\\u2961',\n    '&LeftDownVector;': '\\u21C3',\n    '&LeftDownVectorBar;': '\\u2959',\n    '&LeftFloor;': '\\u230A',\n    '&LeftRightArrow;': '\\u2194',\n    '&LeftRightVector;': '\\u294E',\n    '&LeftTee;': '\\u22A3',\n    '&LeftTeeArrow;': '\\u21A4',\n    '&LeftTeeVector;': '\\u295A',\n    '&LeftTriangle;': '\\u22B2',\n    '&LeftTriangleBar;': '\\u29CF',\n    '&LeftTriangleEqual;': '\\u22B4',\n    '&LeftUpDownVector;': '\\u2951',\n    '&LeftUpTeeVector;': '\\u2960',\n    '&LeftUpVector;': '\\u21BF',\n    '&LeftUpVectorBar;': '\\u2958',\n    '&LeftVector;': '\\u21BC',\n    '&LeftVectorBar;': '\\u2952',\n    '&Leftarrow;': '\\u21D0',\n    '&Leftrightarrow;': '\\u21D4',\n    '&LessEqualGreater;': '\\u22DA',\n    '&LessFullEqual;': '\\u2266',\n    '&LessGreater;': '\\u2276',\n    '&LessLess;': '\\u2AA1',\n    '&LessSlantEqual;': '\\u2A7D',\n    '&LessTilde;': '\\u2272',\n    '&Lfr;': '\\uD835\\uDD0F',\n    '&Ll;': '\\u22D8',\n    '&Lleftarrow;': '\\u21DA',\n    '&Lmidot;': '\\u013F',\n    '&LongLeftArrow;': '\\u27F5',\n    '&LongLeftRightArrow;': '\\u27F7',\n    '&LongRightArrow;': '\\u27F6',\n    '&Longleftarrow;': '\\u27F8',\n    '&Longleftrightarrow;': '\\u27FA',\n    '&Longrightarrow;': '\\u27F9',\n    '&Lopf;': '\\uD835\\uDD43',\n    '&LowerLeftArrow;': '\\u2199',\n    '&LowerRightArrow;': '\\u2198',\n    '&Lscr;': '\\u2112',\n    '&Lsh;': '\\u21B0',\n    '&Lstrok;': '\\u0141',\n    '&Lt;': '\\u226A',\n    '&Map;': '\\u2905',\n    '&Mcy;': '\\u041C',\n    '&MediumSpace;': '\\u205F',\n    '&Mellintrf;': '\\u2133',\n    '&Mfr;': '\\uD835\\uDD10',\n    '&MinusPlus;': '\\u2213',\n    '&Mopf;': '\\uD835\\uDD44',\n    '&Mscr;': '\\u2133',\n    '&Mu;': '\\u039C',\n    '&NJcy;': '\\u040A',\n    '&Nacute;': '\\u0143',\n    '&Ncaron;': '\\u0147',\n    '&Ncedil;': '\\u0145',\n    '&Ncy;': '\\u041D',\n    '&NegativeMediumSpace;': '\\u200B',\n    '&NegativeThickSpace;': '\\u200B',\n    '&NegativeThinSpace;': '\\u200B',\n    '&NegativeVeryThinSpace;': '\\u200B',\n    '&NestedGreaterGreater;': '\\u226B',\n    '&NestedLessLess;': '\\u226A',\n    '&NewLine;': '\\u000A',\n    '&Nfr;': '\\uD835\\uDD11',\n    '&NoBreak;': '\\u2060',\n    '&NonBreakingSpace;': '\\u00A0',\n    '&Nopf;': '\\u2115',\n    '&Not;': '\\u2AEC',\n    '&NotCongruent;': '\\u2262',\n    '&NotCupCap;': '\\u226D',\n    '&NotDoubleVerticalBar;': '\\u2226',\n    '&NotElement;': '\\u2209',\n    '&NotEqual;': '\\u2260',\n    '&NotEqualTilde;': '\\u2242\\u0338',\n    '&NotExists;': '\\u2204',\n    '&NotGreater;': '\\u226F',\n    '&NotGreaterEqual;': '\\u2271',\n    '&NotGreaterFullEqual;': '\\u2267\\u0338',\n    '&NotGreaterGreater;': '\\u226B\\u0338',\n    '&NotGreaterLess;': '\\u2279',\n    '&NotGreaterSlantEqual;': '\\u2A7E\\u0338',\n    '&NotGreaterTilde;': '\\u2275',\n    '&NotHumpDownHump;': '\\u224E\\u0338',\n    '&NotHumpEqual;': '\\u224F\\u0338',\n    '&NotLeftTriangle;': '\\u22EA',\n    '&NotLeftTriangleBar;': '\\u29CF\\u0338',\n    '&NotLeftTriangleEqual;': '\\u22EC',\n    '&NotLess;': '\\u226E',\n    '&NotLessEqual;': '\\u2270',\n    '&NotLessGreater;': '\\u2278',\n    '&NotLessLess;': '\\u226A\\u0338',\n    '&NotLessSlantEqual;': '\\u2A7D\\u0338',\n    '&NotLessTilde;': '\\u2274',\n    '&NotNestedGreaterGreater;': '\\u2AA2\\u0338',\n    '&NotNestedLessLess;': '\\u2AA1\\u0338',\n    '&NotPrecedes;': '\\u2280',\n    '&NotPrecedesEqual;': '\\u2AAF\\u0338',\n    '&NotPrecedesSlantEqual;': '\\u22E0',\n    '&NotReverseElement;': '\\u220C',\n    '&NotRightTriangle;': '\\u22EB',\n    '&NotRightTriangleBar;': '\\u29D0\\u0338',\n    '&NotRightTriangleEqual;': '\\u22ED',\n    '&NotSquareSubset;': '\\u228F\\u0338',\n    '&NotSquareSubsetEqual;': '\\u22E2',\n    '&NotSquareSuperset;': '\\u2290\\u0338',\n    '&NotSquareSupersetEqual;': '\\u22E3',\n    '&NotSubset;': '\\u2282\\u20D2',\n    '&NotSubsetEqual;': '\\u2288',\n    '&NotSucceeds;': '\\u2281',\n    '&NotSucceedsEqual;': '\\u2AB0\\u0338',\n    '&NotSucceedsSlantEqual;': '\\u22E1',\n    '&NotSucceedsTilde;': '\\u227F\\u0338',\n    '&NotSuperset;': '\\u2283\\u20D2',\n    '&NotSupersetEqual;': '\\u2289',\n    '&NotTilde;': '\\u2241',\n    '&NotTildeEqual;': '\\u2244',\n    '&NotTildeFullEqual;': '\\u2247',\n    '&NotTildeTilde;': '\\u2249',\n    '&NotVerticalBar;': '\\u2224',\n    '&Nscr;': '\\uD835\\uDCA9',\n    '&Ntilde': '\\u00D1',\n    '&Ntilde;': '\\u00D1',\n    '&Nu;': '\\u039D',\n    '&OElig;': '\\u0152',\n    '&Oacute': '\\u00D3',\n    '&Oacute;': '\\u00D3',\n    '&Ocirc': '\\u00D4',\n    '&Ocirc;': '\\u00D4',\n    '&Ocy;': '\\u041E',\n    '&Odblac;': '\\u0150',\n    '&Ofr;': '\\uD835\\uDD12',\n    '&Ograve': '\\u00D2',\n    '&Ograve;': '\\u00D2',\n    '&Omacr;': '\\u014C',\n    '&Omega;': '\\u03A9',\n    '&Omicron;': '\\u039F',\n    '&Oopf;': '\\uD835\\uDD46',\n    '&OpenCurlyDoubleQuote;': '\\u201C',\n    '&OpenCurlyQuote;': '\\u2018',\n    '&Or;': '\\u2A54',\n    '&Oscr;': '\\uD835\\uDCAA',\n    '&Oslash': '\\u00D8',\n    '&Oslash;': '\\u00D8',\n    '&Otilde': '\\u00D5',\n    '&Otilde;': '\\u00D5',\n    '&Otimes;': '\\u2A37',\n    '&Ouml': '\\u00D6',\n    '&Ouml;': '\\u00D6',\n    '&OverBar;': '\\u203E',\n    '&OverBrace;': '\\u23DE',\n    '&OverBracket;': '\\u23B4',\n    '&OverParenthesis;': '\\u23DC',\n    '&PartialD;': '\\u2202',\n    '&Pcy;': '\\u041F',\n    '&Pfr;': '\\uD835\\uDD13',\n    '&Phi;': '\\u03A6',\n    '&Pi;': '\\u03A0',\n    '&PlusMinus;': '\\u00B1',\n    '&Poincareplane;': '\\u210C',\n    '&Popf;': '\\u2119',\n    '&Pr;': '\\u2ABB',\n    '&Precedes;': '\\u227A',\n    '&PrecedesEqual;': '\\u2AAF',\n    '&PrecedesSlantEqual;': '\\u227C',\n    '&PrecedesTilde;': '\\u227E',\n    '&Prime;': '\\u2033',\n    '&Product;': '\\u220F',\n    '&Proportion;': '\\u2237',\n    '&Proportional;': '\\u221D',\n    '&Pscr;': '\\uD835\\uDCAB',\n    '&Psi;': '\\u03A8',\n    '&QUOT': '\\u0022',\n    '&QUOT;': '\\u0022',\n    '&Qfr;': '\\uD835\\uDD14',\n    '&Qopf;': '\\u211A',\n    '&Qscr;': '\\uD835\\uDCAC',\n    '&RBarr;': '\\u2910',\n    '&REG': '\\u00AE',\n    '&REG;': '\\u00AE',\n    '&Racute;': '\\u0154',\n    '&Rang;': '\\u27EB',\n    '&Rarr;': '\\u21A0',\n    '&Rarrtl;': '\\u2916',\n    '&Rcaron;': '\\u0158',\n    '&Rcedil;': '\\u0156',\n    '&Rcy;': '\\u0420',\n    '&Re;': '\\u211C',\n    '&ReverseElement;': '\\u220B',\n    '&ReverseEquilibrium;': '\\u21CB',\n    '&ReverseUpEquilibrium;': '\\u296F',\n    '&Rfr;': '\\u211C',\n    '&Rho;': '\\u03A1',\n    '&RightAngleBracket;': '\\u27E9',\n    '&RightArrow;': '\\u2192',\n    '&RightArrowBar;': '\\u21E5',\n    '&RightArrowLeftArrow;': '\\u21C4',\n    '&RightCeiling;': '\\u2309',\n    '&RightDoubleBracket;': '\\u27E7',\n    '&RightDownTeeVector;': '\\u295D',\n    '&RightDownVector;': '\\u21C2',\n    '&RightDownVectorBar;': '\\u2955',\n    '&RightFloor;': '\\u230B',\n    '&RightTee;': '\\u22A2',\n    '&RightTeeArrow;': '\\u21A6',\n    '&RightTeeVector;': '\\u295B',\n    '&RightTriangle;': '\\u22B3',\n    '&RightTriangleBar;': '\\u29D0',\n    '&RightTriangleEqual;': '\\u22B5',\n    '&RightUpDownVector;': '\\u294F',\n    '&RightUpTeeVector;': '\\u295C',\n    '&RightUpVector;': '\\u21BE',\n    '&RightUpVectorBar;': '\\u2954',\n    '&RightVector;': '\\u21C0',\n    '&RightVectorBar;': '\\u2953',\n    '&Rightarrow;': '\\u21D2',\n    '&Ropf;': '\\u211D',\n    '&RoundImplies;': '\\u2970',\n    '&Rrightarrow;': '\\u21DB',\n    '&Rscr;': '\\u211B',\n    '&Rsh;': '\\u21B1',\n    '&RuleDelayed;': '\\u29F4',\n    '&SHCHcy;': '\\u0429',\n    '&SHcy;': '\\u0428',\n    '&SOFTcy;': '\\u042C',\n    '&Sacute;': '\\u015A',\n    '&Sc;': '\\u2ABC',\n    '&Scaron;': '\\u0160',\n    '&Scedil;': '\\u015E',\n    '&Scirc;': '\\u015C',\n    '&Scy;': '\\u0421',\n    '&Sfr;': '\\uD835\\uDD16',\n    '&ShortDownArrow;': '\\u2193',\n    '&ShortLeftArrow;': '\\u2190',\n    '&ShortRightArrow;': '\\u2192',\n    '&ShortUpArrow;': '\\u2191',\n    '&Sigma;': '\\u03A3',\n    '&SmallCircle;': '\\u2218',\n    '&Sopf;': '\\uD835\\uDD4A',\n    '&Sqrt;': '\\u221A',\n    '&Square;': '\\u25A1',\n    '&SquareIntersection;': '\\u2293',\n    '&SquareSubset;': '\\u228F',\n    '&SquareSubsetEqual;': '\\u2291',\n    '&SquareSuperset;': '\\u2290',\n    '&SquareSupersetEqual;': '\\u2292',\n    '&SquareUnion;': '\\u2294',\n    '&Sscr;': '\\uD835\\uDCAE',\n    '&Star;': '\\u22C6',\n    '&Sub;': '\\u22D0',\n    '&Subset;': '\\u22D0',\n    '&SubsetEqual;': '\\u2286',\n    '&Succeeds;': '\\u227B',\n    '&SucceedsEqual;': '\\u2AB0',\n    '&SucceedsSlantEqual;': '\\u227D',\n    '&SucceedsTilde;': '\\u227F',\n    '&SuchThat;': '\\u220B',\n    '&Sum;': '\\u2211',\n    '&Sup;': '\\u22D1',\n    '&Superset;': '\\u2283',\n    '&SupersetEqual;': '\\u2287',\n    '&Supset;': '\\u22D1',\n    '&THORN': '\\u00DE',\n    '&THORN;': '\\u00DE',\n    '&TRADE;': '\\u2122',\n    '&TSHcy;': '\\u040B',\n    '&TScy;': '\\u0426',\n    '&Tab;': '\\u0009',\n    '&Tau;': '\\u03A4',\n    '&Tcaron;': '\\u0164',\n    '&Tcedil;': '\\u0162',\n    '&Tcy;': '\\u0422',\n    '&Tfr;': '\\uD835\\uDD17',\n    '&Therefore;': '\\u2234',\n    '&Theta;': '\\u0398',\n    '&ThickSpace;': '\\u205F\\u200A',\n    '&ThinSpace;': '\\u2009',\n    '&Tilde;': '\\u223C',\n    '&TildeEqual;': '\\u2243',\n    '&TildeFullEqual;': '\\u2245',\n    '&TildeTilde;': '\\u2248',\n    '&Topf;': '\\uD835\\uDD4B',\n    '&TripleDot;': '\\u20DB',\n    '&Tscr;': '\\uD835\\uDCAF',\n    '&Tstrok;': '\\u0166',\n    '&Uacute': '\\u00DA',\n    '&Uacute;': '\\u00DA',\n    '&Uarr;': '\\u219F',\n    '&Uarrocir;': '\\u2949',\n    '&Ubrcy;': '\\u040E',\n    '&Ubreve;': '\\u016C',\n    '&Ucirc': '\\u00DB',\n    '&Ucirc;': '\\u00DB',\n    '&Ucy;': '\\u0423',\n    '&Udblac;': '\\u0170',\n    '&Ufr;': '\\uD835\\uDD18',\n    '&Ugrave': '\\u00D9',\n    '&Ugrave;': '\\u00D9',\n    '&Umacr;': '\\u016A',\n    '&UnderBar;': '\\u005F',\n    '&UnderBrace;': '\\u23DF',\n    '&UnderBracket;': '\\u23B5',\n    '&UnderParenthesis;': '\\u23DD',\n    '&Union;': '\\u22C3',\n    '&UnionPlus;': '\\u228E',\n    '&Uogon;': '\\u0172',\n    '&Uopf;': '\\uD835\\uDD4C',\n    '&UpArrow;': '\\u2191',\n    '&UpArrowBar;': '\\u2912',\n    '&UpArrowDownArrow;': '\\u21C5',\n    '&UpDownArrow;': '\\u2195',\n    '&UpEquilibrium;': '\\u296E',\n    '&UpTee;': '\\u22A5',\n    '&UpTeeArrow;': '\\u21A5',\n    '&Uparrow;': '\\u21D1',\n    '&Updownarrow;': '\\u21D5',\n    '&UpperLeftArrow;': '\\u2196',\n    '&UpperRightArrow;': '\\u2197',\n    '&Upsi;': '\\u03D2',\n    '&Upsilon;': '\\u03A5',\n    '&Uring;': '\\u016E',\n    '&Uscr;': '\\uD835\\uDCB0',\n    '&Utilde;': '\\u0168',\n    '&Uuml': '\\u00DC',\n    '&Uuml;': '\\u00DC',\n    '&VDash;': '\\u22AB',\n    '&Vbar;': '\\u2AEB',\n    '&Vcy;': '\\u0412',\n    '&Vdash;': '\\u22A9',\n    '&Vdashl;': '\\u2AE6',\n    '&Vee;': '\\u22C1',\n    '&Verbar;': '\\u2016',\n    '&Vert;': '\\u2016',\n    '&VerticalBar;': '\\u2223',\n    '&VerticalLine;': '\\u007C',\n    '&VerticalSeparator;': '\\u2758',\n    '&VerticalTilde;': '\\u2240',\n    '&VeryThinSpace;': '\\u200A',\n    '&Vfr;': '\\uD835\\uDD19',\n    '&Vopf;': '\\uD835\\uDD4D',\n    '&Vscr;': '\\uD835\\uDCB1',\n    '&Vvdash;': '\\u22AA',\n    '&Wcirc;': '\\u0174',\n    '&Wedge;': '\\u22C0',\n    '&Wfr;': '\\uD835\\uDD1A',\n    '&Wopf;': '\\uD835\\uDD4E',\n    '&Wscr;': '\\uD835\\uDCB2',\n    '&Xfr;': '\\uD835\\uDD1B',\n    '&Xi;': '\\u039E',\n    '&Xopf;': '\\uD835\\uDD4F',\n    '&Xscr;': '\\uD835\\uDCB3',\n    '&YAcy;': '\\u042F',\n    '&YIcy;': '\\u0407',\n    '&YUcy;': '\\u042E',\n    '&Yacute': '\\u00DD',\n    '&Yacute;': '\\u00DD',\n    '&Ycirc;': '\\u0176',\n    '&Ycy;': '\\u042B',\n    '&Yfr;': '\\uD835\\uDD1C',\n    '&Yopf;': '\\uD835\\uDD50',\n    '&Yscr;': '\\uD835\\uDCB4',\n    '&Yuml;': '\\u0178',\n    '&ZHcy;': '\\u0416',\n    '&Zacute;': '\\u0179',\n    '&Zcaron;': '\\u017D',\n    '&Zcy;': '\\u0417',\n    '&Zdot;': '\\u017B',\n    '&ZeroWidthSpace;': '\\u200B',\n    '&Zeta;': '\\u0396',\n    '&Zfr;': '\\u2128',\n    '&Zopf;': '\\u2124',\n    '&Zscr;': '\\uD835\\uDCB5',\n    '&aacute': '\\u00E1',\n    '&aacute;': '\\u00E1',\n    '&abreve;': '\\u0103',\n    '&ac;': '\\u223E',\n    '&acE;': '\\u223E\\u0333',\n    '&acd;': '\\u223F',\n    '&acirc': '\\u00E2',\n    '&acirc;': '\\u00E2',\n    '&acute': '\\u00B4',\n    '&acute;': '\\u00B4',\n    '&acy;': '\\u0430',\n    '&aelig': '\\u00E6',\n    '&aelig;': '\\u00E6',\n    '&af;': '\\u2061',\n    '&afr;': '\\uD835\\uDD1E',\n    '&agrave': '\\u00E0',\n    '&agrave;': '\\u00E0',\n    '&alefsym;': '\\u2135',\n    '&aleph;': '\\u2135',\n    '&alpha;': '\\u03B1',\n    '&amacr;': '\\u0101',\n    '&amalg;': '\\u2A3F',\n    '&amp': '\\u0026',\n    '&amp;': '\\u0026',\n    '&and;': '\\u2227',\n    '&andand;': '\\u2A55',\n    '&andd;': '\\u2A5C',\n    '&andslope;': '\\u2A58',\n    '&andv;': '\\u2A5A',\n    '&ang;': '\\u2220',\n    '&ange;': '\\u29A4',\n    '&angle;': '\\u2220',\n    '&angmsd;': '\\u2221',\n    '&angmsdaa;': '\\u29A8',\n    '&angmsdab;': '\\u29A9',\n    '&angmsdac;': '\\u29AA',\n    '&angmsdad;': '\\u29AB',\n    '&angmsdae;': '\\u29AC',\n    '&angmsdaf;': '\\u29AD',\n    '&angmsdag;': '\\u29AE',\n    '&angmsdah;': '\\u29AF',\n    '&angrt;': '\\u221F',\n    '&angrtvb;': '\\u22BE',\n    '&angrtvbd;': '\\u299D',\n    '&angsph;': '\\u2222',\n    '&angst;': '\\u00C5',\n    '&angzarr;': '\\u237C',\n    '&aogon;': '\\u0105',\n    '&aopf;': '\\uD835\\uDD52',\n    '&ap;': '\\u2248',\n    '&apE;': '\\u2A70',\n    '&apacir;': '\\u2A6F',\n    '&ape;': '\\u224A',\n    '&apid;': '\\u224B',\n    '&apos;': '\\u0027',\n    '&approx;': '\\u2248',\n    '&approxeq;': '\\u224A',\n    '&aring': '\\u00E5',\n    '&aring;': '\\u00E5',\n    '&ascr;': '\\uD835\\uDCB6',\n    '&ast;': '\\u002A',\n    '&asymp;': '\\u2248',\n    '&asympeq;': '\\u224D',\n    '&atilde': '\\u00E3',\n    '&atilde;': '\\u00E3',\n    '&auml': '\\u00E4',\n    '&auml;': '\\u00E4',\n    '&awconint;': '\\u2233',\n    '&awint;': '\\u2A11',\n    '&bNot;': '\\u2AED',\n    '&backcong;': '\\u224C',\n    '&backepsilon;': '\\u03F6',\n    '&backprime;': '\\u2035',\n    '&backsim;': '\\u223D',\n    '&backsimeq;': '\\u22CD',\n    '&barvee;': '\\u22BD',\n    '&barwed;': '\\u2305',\n    '&barwedge;': '\\u2305',\n    '&bbrk;': '\\u23B5',\n    '&bbrktbrk;': '\\u23B6',\n    '&bcong;': '\\u224C',\n    '&bcy;': '\\u0431',\n    '&bdquo;': '\\u201E',\n    '&becaus;': '\\u2235',\n    '&because;': '\\u2235',\n    '&bemptyv;': '\\u29B0',\n    '&bepsi;': '\\u03F6',\n    '&bernou;': '\\u212C',\n    '&beta;': '\\u03B2',\n    '&beth;': '\\u2136',\n    '&between;': '\\u226C',\n    '&bfr;': '\\uD835\\uDD1F',\n    '&bigcap;': '\\u22C2',\n    '&bigcirc;': '\\u25EF',\n    '&bigcup;': '\\u22C3',\n    '&bigodot;': '\\u2A00',\n    '&bigoplus;': '\\u2A01',\n    '&bigotimes;': '\\u2A02',\n    '&bigsqcup;': '\\u2A06',\n    '&bigstar;': '\\u2605',\n    '&bigtriangledown;': '\\u25BD',\n    '&bigtriangleup;': '\\u25B3',\n    '&biguplus;': '\\u2A04',\n    '&bigvee;': '\\u22C1',\n    '&bigwedge;': '\\u22C0',\n    '&bkarow;': '\\u290D',\n    '&blacklozenge;': '\\u29EB',\n    '&blacksquare;': '\\u25AA',\n    '&blacktriangle;': '\\u25B4',\n    '&blacktriangledown;': '\\u25BE',\n    '&blacktriangleleft;': '\\u25C2',\n    '&blacktriangleright;': '\\u25B8',\n    '&blank;': '\\u2423',\n    '&blk12;': '\\u2592',\n    '&blk14;': '\\u2591',\n    '&blk34;': '\\u2593',\n    '&block;': '\\u2588',\n    '&bne;': '\\u003D\\u20E5',\n    '&bnequiv;': '\\u2261\\u20E5',\n    '&bnot;': '\\u2310',\n    '&bopf;': '\\uD835\\uDD53',\n    '&bot;': '\\u22A5',\n    '&bottom;': '\\u22A5',\n    '&bowtie;': '\\u22C8',\n    '&boxDL;': '\\u2557',\n    '&boxDR;': '\\u2554',\n    '&boxDl;': '\\u2556',\n    '&boxDr;': '\\u2553',\n    '&boxH;': '\\u2550',\n    '&boxHD;': '\\u2566',\n    '&boxHU;': '\\u2569',\n    '&boxHd;': '\\u2564',\n    '&boxHu;': '\\u2567',\n    '&boxUL;': '\\u255D',\n    '&boxUR;': '\\u255A',\n    '&boxUl;': '\\u255C',\n    '&boxUr;': '\\u2559',\n    '&boxV;': '\\u2551',\n    '&boxVH;': '\\u256C',\n    '&boxVL;': '\\u2563',\n    '&boxVR;': '\\u2560',\n    '&boxVh;': '\\u256B',\n    '&boxVl;': '\\u2562',\n    '&boxVr;': '\\u255F',\n    '&boxbox;': '\\u29C9',\n    '&boxdL;': '\\u2555',\n    '&boxdR;': '\\u2552',\n    '&boxdl;': '\\u2510',\n    '&boxdr;': '\\u250C',\n    '&boxh;': '\\u2500',\n    '&boxhD;': '\\u2565',\n    '&boxhU;': '\\u2568',\n    '&boxhd;': '\\u252C',\n    '&boxhu;': '\\u2534',\n    '&boxminus;': '\\u229F',\n    '&boxplus;': '\\u229E',\n    '&boxtimes;': '\\u22A0',\n    '&boxuL;': '\\u255B',\n    '&boxuR;': '\\u2558',\n    '&boxul;': '\\u2518',\n    '&boxur;': '\\u2514',\n    '&boxv;': '\\u2502',\n    '&boxvH;': '\\u256A',\n    '&boxvL;': '\\u2561',\n    '&boxvR;': '\\u255E',\n    '&boxvh;': '\\u253C',\n    '&boxvl;': '\\u2524',\n    '&boxvr;': '\\u251C',\n    '&bprime;': '\\u2035',\n    '&breve;': '\\u02D8',\n    '&brvbar': '\\u00A6',\n    '&brvbar;': '\\u00A6',\n    '&bscr;': '\\uD835\\uDCB7',\n    '&bsemi;': '\\u204F',\n    '&bsim;': '\\u223D',\n    '&bsime;': '\\u22CD',\n    '&bsol;': '\\u005C',\n    '&bsolb;': '\\u29C5',\n    '&bsolhsub;': '\\u27C8',\n    '&bull;': '\\u2022',\n    '&bullet;': '\\u2022',\n    '&bump;': '\\u224E',\n    '&bumpE;': '\\u2AAE',\n    '&bumpe;': '\\u224F',\n    '&bumpeq;': '\\u224F',\n    '&cacute;': '\\u0107',\n    '&cap;': '\\u2229',\n    '&capand;': '\\u2A44',\n    '&capbrcup;': '\\u2A49',\n    '&capcap;': '\\u2A4B',\n    '&capcup;': '\\u2A47',\n    '&capdot;': '\\u2A40',\n    '&caps;': '\\u2229\\uFE00',\n    '&caret;': '\\u2041',\n    '&caron;': '\\u02C7',\n    '&ccaps;': '\\u2A4D',\n    '&ccaron;': '\\u010D',\n    '&ccedil': '\\u00E7',\n    '&ccedil;': '\\u00E7',\n    '&ccirc;': '\\u0109',\n    '&ccups;': '\\u2A4C',\n    '&ccupssm;': '\\u2A50',\n    '&cdot;': '\\u010B',\n    '&cedil': '\\u00B8',\n    '&cedil;': '\\u00B8',\n    '&cemptyv;': '\\u29B2',\n    '&cent': '\\u00A2',\n    '&cent;': '\\u00A2',\n    '&centerdot;': '\\u00B7',\n    '&cfr;': '\\uD835\\uDD20',\n    '&chcy;': '\\u0447',\n    '&check;': '\\u2713',\n    '&checkmark;': '\\u2713',\n    '&chi;': '\\u03C7',\n    '&cir;': '\\u25CB',\n    '&cirE;': '\\u29C3',\n    '&circ;': '\\u02C6',\n    '&circeq;': '\\u2257',\n    '&circlearrowleft;': '\\u21BA',\n    '&circlearrowright;': '\\u21BB',\n    '&circledR;': '\\u00AE',\n    '&circledS;': '\\u24C8',\n    '&circledast;': '\\u229B',\n    '&circledcirc;': '\\u229A',\n    '&circleddash;': '\\u229D',\n    '&cire;': '\\u2257',\n    '&cirfnint;': '\\u2A10',\n    '&cirmid;': '\\u2AEF',\n    '&cirscir;': '\\u29C2',\n    '&clubs;': '\\u2663',\n    '&clubsuit;': '\\u2663',\n    '&colon;': '\\u003A',\n    '&colone;': '\\u2254',\n    '&coloneq;': '\\u2254',\n    '&comma;': '\\u002C',\n    '&commat;': '\\u0040',\n    '&comp;': '\\u2201',\n    '&compfn;': '\\u2218',\n    '&complement;': '\\u2201',\n    '&complexes;': '\\u2102',\n    '&cong;': '\\u2245',\n    '&congdot;': '\\u2A6D',\n    '&conint;': '\\u222E',\n    '&copf;': '\\uD835\\uDD54',\n    '&coprod;': '\\u2210',\n    '&copy': '\\u00A9',\n    '&copy;': '\\u00A9',\n    '&copysr;': '\\u2117',\n    '&crarr;': '\\u21B5',\n    '&cross;': '\\u2717',\n    '&cscr;': '\\uD835\\uDCB8',\n    '&csub;': '\\u2ACF',\n    '&csube;': '\\u2AD1',\n    '&csup;': '\\u2AD0',\n    '&csupe;': '\\u2AD2',\n    '&ctdot;': '\\u22EF',\n    '&cudarrl;': '\\u2938',\n    '&cudarrr;': '\\u2935',\n    '&cuepr;': '\\u22DE',\n    '&cuesc;': '\\u22DF',\n    '&cularr;': '\\u21B6',\n    '&cularrp;': '\\u293D',\n    '&cup;': '\\u222A',\n    '&cupbrcap;': '\\u2A48',\n    '&cupcap;': '\\u2A46',\n    '&cupcup;': '\\u2A4A',\n    '&cupdot;': '\\u228D',\n    '&cupor;': '\\u2A45',\n    '&cups;': '\\u222A\\uFE00',\n    '&curarr;': '\\u21B7',\n    '&curarrm;': '\\u293C',\n    '&curlyeqprec;': '\\u22DE',\n    '&curlyeqsucc;': '\\u22DF',\n    '&curlyvee;': '\\u22CE',\n    '&curlywedge;': '\\u22CF',\n    '&curren': '\\u00A4',\n    '&curren;': '\\u00A4',\n    '&curvearrowleft;': '\\u21B6',\n    '&curvearrowright;': '\\u21B7',\n    '&cuvee;': '\\u22CE',\n    '&cuwed;': '\\u22CF',\n    '&cwconint;': '\\u2232',\n    '&cwint;': '\\u2231',\n    '&cylcty;': '\\u232D',\n    '&dArr;': '\\u21D3',\n    '&dHar;': '\\u2965',\n    '&dagger;': '\\u2020',\n    '&daleth;': '\\u2138',\n    '&darr;': '\\u2193',\n    '&dash;': '\\u2010',\n    '&dashv;': '\\u22A3',\n    '&dbkarow;': '\\u290F',\n    '&dblac;': '\\u02DD',\n    '&dcaron;': '\\u010F',\n    '&dcy;': '\\u0434',\n    '&dd;': '\\u2146',\n    '&ddagger;': '\\u2021',\n    '&ddarr;': '\\u21CA',\n    '&ddotseq;': '\\u2A77',\n    '&deg': '\\u00B0',\n    '&deg;': '\\u00B0',\n    '&delta;': '\\u03B4',\n    '&demptyv;': '\\u29B1',\n    '&dfisht;': '\\u297F',\n    '&dfr;': '\\uD835\\uDD21',\n    '&dharl;': '\\u21C3',\n    '&dharr;': '\\u21C2',\n    '&diam;': '\\u22C4',\n    '&diamond;': '\\u22C4',\n    '&diamondsuit;': '\\u2666',\n    '&diams;': '\\u2666',\n    '&die;': '\\u00A8',\n    '&digamma;': '\\u03DD',\n    '&disin;': '\\u22F2',\n    '&div;': '\\u00F7',\n    '&divide': '\\u00F7',\n    '&divide;': '\\u00F7',\n    '&divideontimes;': '\\u22C7',\n    '&divonx;': '\\u22C7',\n    '&djcy;': '\\u0452',\n    '&dlcorn;': '\\u231E',\n    '&dlcrop;': '\\u230D',\n    '&dollar;': '\\u0024',\n    '&dopf;': '\\uD835\\uDD55',\n    '&dot;': '\\u02D9',\n    '&doteq;': '\\u2250',\n    '&doteqdot;': '\\u2251',\n    '&dotminus;': '\\u2238',\n    '&dotplus;': '\\u2214',\n    '&dotsquare;': '\\u22A1',\n    '&doublebarwedge;': '\\u2306',\n    '&downarrow;': '\\u2193',\n    '&downdownarrows;': '\\u21CA',\n    '&downharpoonleft;': '\\u21C3',\n    '&downharpoonright;': '\\u21C2',\n    '&drbkarow;': '\\u2910',\n    '&drcorn;': '\\u231F',\n    '&drcrop;': '\\u230C',\n    '&dscr;': '\\uD835\\uDCB9',\n    '&dscy;': '\\u0455',\n    '&dsol;': '\\u29F6',\n    '&dstrok;': '\\u0111',\n    '&dtdot;': '\\u22F1',\n    '&dtri;': '\\u25BF',\n    '&dtrif;': '\\u25BE',\n    '&duarr;': '\\u21F5',\n    '&duhar;': '\\u296F',\n    '&dwangle;': '\\u29A6',\n    '&dzcy;': '\\u045F',\n    '&dzigrarr;': '\\u27FF',\n    '&eDDot;': '\\u2A77',\n    '&eDot;': '\\u2251',\n    '&eacute': '\\u00E9',\n    '&eacute;': '\\u00E9',\n    '&easter;': '\\u2A6E',\n    '&ecaron;': '\\u011B',\n    '&ecir;': '\\u2256',\n    '&ecirc': '\\u00EA',\n    '&ecirc;': '\\u00EA',\n    '&ecolon;': '\\u2255',\n    '&ecy;': '\\u044D',\n    '&edot;': '\\u0117',\n    '&ee;': '\\u2147',\n    '&efDot;': '\\u2252',\n    '&efr;': '\\uD835\\uDD22',\n    '&eg;': '\\u2A9A',\n    '&egrave': '\\u00E8',\n    '&egrave;': '\\u00E8',\n    '&egs;': '\\u2A96',\n    '&egsdot;': '\\u2A98',\n    '&el;': '\\u2A99',\n    '&elinters;': '\\u23E7',\n    '&ell;': '\\u2113',\n    '&els;': '\\u2A95',\n    '&elsdot;': '\\u2A97',\n    '&emacr;': '\\u0113',\n    '&empty;': '\\u2205',\n    '&emptyset;': '\\u2205',\n    '&emptyv;': '\\u2205',\n    '&emsp13;': '\\u2004',\n    '&emsp14;': '\\u2005',\n    '&emsp;': '\\u2003',\n    '&eng;': '\\u014B',\n    '&ensp;': '\\u2002',\n    '&eogon;': '\\u0119',\n    '&eopf;': '\\uD835\\uDD56',\n    '&epar;': '\\u22D5',\n    '&eparsl;': '\\u29E3',\n    '&eplus;': '\\u2A71',\n    '&epsi;': '\\u03B5',\n    '&epsilon;': '\\u03B5',\n    '&epsiv;': '\\u03F5',\n    '&eqcirc;': '\\u2256',\n    '&eqcolon;': '\\u2255',\n    '&eqsim;': '\\u2242',\n    '&eqslantgtr;': '\\u2A96',\n    '&eqslantless;': '\\u2A95',\n    '&equals;': '\\u003D',\n    '&equest;': '\\u225F',\n    '&equiv;': '\\u2261',\n    '&equivDD;': '\\u2A78',\n    '&eqvparsl;': '\\u29E5',\n    '&erDot;': '\\u2253',\n    '&erarr;': '\\u2971',\n    '&escr;': '\\u212F',\n    '&esdot;': '\\u2250',\n    '&esim;': '\\u2242',\n    '&eta;': '\\u03B7',\n    '&eth': '\\u00F0',\n    '&eth;': '\\u00F0',\n    '&euml': '\\u00EB',\n    '&euml;': '\\u00EB',\n    '&euro;': '\\u20AC',\n    '&excl;': '\\u0021',\n    '&exist;': '\\u2203',\n    '&expectation;': '\\u2130',\n    '&exponentiale;': '\\u2147',\n    '&fallingdotseq;': '\\u2252',\n    '&fcy;': '\\u0444',\n    '&female;': '\\u2640',\n    '&ffilig;': '\\uFB03',\n    '&fflig;': '\\uFB00',\n    '&ffllig;': '\\uFB04',\n    '&ffr;': '\\uD835\\uDD23',\n    '&filig;': '\\uFB01',\n    '&fjlig;': '\\u0066\\u006A',\n    '&flat;': '\\u266D',\n    '&fllig;': '\\uFB02',\n    '&fltns;': '\\u25B1',\n    '&fnof;': '\\u0192',\n    '&fopf;': '\\uD835\\uDD57',\n    '&forall;': '\\u2200',\n    '&fork;': '\\u22D4',\n    '&forkv;': '\\u2AD9',\n    '&fpartint;': '\\u2A0D',\n    '&frac12': '\\u00BD',\n    '&frac12;': '\\u00BD',\n    '&frac13;': '\\u2153',\n    '&frac14': '\\u00BC',\n    '&frac14;': '\\u00BC',\n    '&frac15;': '\\u2155',\n    '&frac16;': '\\u2159',\n    '&frac18;': '\\u215B',\n    '&frac23;': '\\u2154',\n    '&frac25;': '\\u2156',\n    '&frac34': '\\u00BE',\n    '&frac34;': '\\u00BE',\n    '&frac35;': '\\u2157',\n    '&frac38;': '\\u215C',\n    '&frac45;': '\\u2158',\n    '&frac56;': '\\u215A',\n    '&frac58;': '\\u215D',\n    '&frac78;': '\\u215E',\n    '&frasl;': '\\u2044',\n    '&frown;': '\\u2322',\n    '&fscr;': '\\uD835\\uDCBB',\n    '&gE;': '\\u2267',\n    '&gEl;': '\\u2A8C',\n    '&gacute;': '\\u01F5',\n    '&gamma;': '\\u03B3',\n    '&gammad;': '\\u03DD',\n    '&gap;': '\\u2A86',\n    '&gbreve;': '\\u011F',\n    '&gcirc;': '\\u011D',\n    '&gcy;': '\\u0433',\n    '&gdot;': '\\u0121',\n    '&ge;': '\\u2265',\n    '&gel;': '\\u22DB',\n    '&geq;': '\\u2265',\n    '&geqq;': '\\u2267',\n    '&geqslant;': '\\u2A7E',\n    '&ges;': '\\u2A7E',\n    '&gescc;': '\\u2AA9',\n    '&gesdot;': '\\u2A80',\n    '&gesdoto;': '\\u2A82',\n    '&gesdotol;': '\\u2A84',\n    '&gesl;': '\\u22DB\\uFE00',\n    '&gesles;': '\\u2A94',\n    '&gfr;': '\\uD835\\uDD24',\n    '&gg;': '\\u226B',\n    '&ggg;': '\\u22D9',\n    '&gimel;': '\\u2137',\n    '&gjcy;': '\\u0453',\n    '&gl;': '\\u2277',\n    '&glE;': '\\u2A92',\n    '&gla;': '\\u2AA5',\n    '&glj;': '\\u2AA4',\n    '&gnE;': '\\u2269',\n    '&gnap;': '\\u2A8A',\n    '&gnapprox;': '\\u2A8A',\n    '&gne;': '\\u2A88',\n    '&gneq;': '\\u2A88',\n    '&gneqq;': '\\u2269',\n    '&gnsim;': '\\u22E7',\n    '&gopf;': '\\uD835\\uDD58',\n    '&grave;': '\\u0060',\n    '&gscr;': '\\u210A',\n    '&gsim;': '\\u2273',\n    '&gsime;': '\\u2A8E',\n    '&gsiml;': '\\u2A90',\n    '&gt': '\\u003E',\n    '&gt;': '\\u003E',\n    '&gtcc;': '\\u2AA7',\n    '&gtcir;': '\\u2A7A',\n    '&gtdot;': '\\u22D7',\n    '&gtlPar;': '\\u2995',\n    '&gtquest;': '\\u2A7C',\n    '&gtrapprox;': '\\u2A86',\n    '&gtrarr;': '\\u2978',\n    '&gtrdot;': '\\u22D7',\n    '&gtreqless;': '\\u22DB',\n    '&gtreqqless;': '\\u2A8C',\n    '&gtrless;': '\\u2277',\n    '&gtrsim;': '\\u2273',\n    '&gvertneqq;': '\\u2269\\uFE00',\n    '&gvnE;': '\\u2269\\uFE00',\n    '&hArr;': '\\u21D4',\n    '&hairsp;': '\\u200A',\n    '&half;': '\\u00BD',\n    '&hamilt;': '\\u210B',\n    '&hardcy;': '\\u044A',\n    '&harr;': '\\u2194',\n    '&harrcir;': '\\u2948',\n    '&harrw;': '\\u21AD',\n    '&hbar;': '\\u210F',\n    '&hcirc;': '\\u0125',\n    '&hearts;': '\\u2665',\n    '&heartsuit;': '\\u2665',\n    '&hellip;': '\\u2026',\n    '&hercon;': '\\u22B9',\n    '&hfr;': '\\uD835\\uDD25',\n    '&hksearow;': '\\u2925',\n    '&hkswarow;': '\\u2926',\n    '&hoarr;': '\\u21FF',\n    '&homtht;': '\\u223B',\n    '&hookleftarrow;': '\\u21A9',\n    '&hookrightarrow;': '\\u21AA',\n    '&hopf;': '\\uD835\\uDD59',\n    '&horbar;': '\\u2015',\n    '&hscr;': '\\uD835\\uDCBD',\n    '&hslash;': '\\u210F',\n    '&hstrok;': '\\u0127',\n    '&hybull;': '\\u2043',\n    '&hyphen;': '\\u2010',\n    '&iacute': '\\u00ED',\n    '&iacute;': '\\u00ED',\n    '&ic;': '\\u2063',\n    '&icirc': '\\u00EE',\n    '&icirc;': '\\u00EE',\n    '&icy;': '\\u0438',\n    '&iecy;': '\\u0435',\n    '&iexcl': '\\u00A1',\n    '&iexcl;': '\\u00A1',\n    '&iff;': '\\u21D4',\n    '&ifr;': '\\uD835\\uDD26',\n    '&igrave': '\\u00EC',\n    '&igrave;': '\\u00EC',\n    '&ii;': '\\u2148',\n    '&iiiint;': '\\u2A0C',\n    '&iiint;': '\\u222D',\n    '&iinfin;': '\\u29DC',\n    '&iiota;': '\\u2129',\n    '&ijlig;': '\\u0133',\n    '&imacr;': '\\u012B',\n    '&image;': '\\u2111',\n    '&imagline;': '\\u2110',\n    '&imagpart;': '\\u2111',\n    '&imath;': '\\u0131',\n    '&imof;': '\\u22B7',\n    '&imped;': '\\u01B5',\n    '&in;': '\\u2208',\n    '&incare;': '\\u2105',\n    '&infin;': '\\u221E',\n    '&infintie;': '\\u29DD',\n    '&inodot;': '\\u0131',\n    '&int;': '\\u222B',\n    '&intcal;': '\\u22BA',\n    '&integers;': '\\u2124',\n    '&intercal;': '\\u22BA',\n    '&intlarhk;': '\\u2A17',\n    '&intprod;': '\\u2A3C',\n    '&iocy;': '\\u0451',\n    '&iogon;': '\\u012F',\n    '&iopf;': '\\uD835\\uDD5A',\n    '&iota;': '\\u03B9',\n    '&iprod;': '\\u2A3C',\n    '&iquest': '\\u00BF',\n    '&iquest;': '\\u00BF',\n    '&iscr;': '\\uD835\\uDCBE',\n    '&isin;': '\\u2208',\n    '&isinE;': '\\u22F9',\n    '&isindot;': '\\u22F5',\n    '&isins;': '\\u22F4',\n    '&isinsv;': '\\u22F3',\n    '&isinv;': '\\u2208',\n    '&it;': '\\u2062',\n    '&itilde;': '\\u0129',\n    '&iukcy;': '\\u0456',\n    '&iuml': '\\u00EF',\n    '&iuml;': '\\u00EF',\n    '&jcirc;': '\\u0135',\n    '&jcy;': '\\u0439',\n    '&jfr;': '\\uD835\\uDD27',\n    '&jmath;': '\\u0237',\n    '&jopf;': '\\uD835\\uDD5B',\n    '&jscr;': '\\uD835\\uDCBF',\n    '&jsercy;': '\\u0458',\n    '&jukcy;': '\\u0454',\n    '&kappa;': '\\u03BA',\n    '&kappav;': '\\u03F0',\n    '&kcedil;': '\\u0137',\n    '&kcy;': '\\u043A',\n    '&kfr;': '\\uD835\\uDD28',\n    '&kgreen;': '\\u0138',\n    '&khcy;': '\\u0445',\n    '&kjcy;': '\\u045C',\n    '&kopf;': '\\uD835\\uDD5C',\n    '&kscr;': '\\uD835\\uDCC0',\n    '&lAarr;': '\\u21DA',\n    '&lArr;': '\\u21D0',\n    '&lAtail;': '\\u291B',\n    '&lBarr;': '\\u290E',\n    '&lE;': '\\u2266',\n    '&lEg;': '\\u2A8B',\n    '&lHar;': '\\u2962',\n    '&lacute;': '\\u013A',\n    '&laemptyv;': '\\u29B4',\n    '&lagran;': '\\u2112',\n    '&lambda;': '\\u03BB',\n    '&lang;': '\\u27E8',\n    '&langd;': '\\u2991',\n    '&langle;': '\\u27E8',\n    '&lap;': '\\u2A85',\n    '&laquo': '\\u00AB',\n    '&laquo;': '\\u00AB',\n    '&larr;': '\\u2190',\n    '&larrb;': '\\u21E4',\n    '&larrbfs;': '\\u291F',\n    '&larrfs;': '\\u291D',\n    '&larrhk;': '\\u21A9',\n    '&larrlp;': '\\u21AB',\n    '&larrpl;': '\\u2939',\n    '&larrsim;': '\\u2973',\n    '&larrtl;': '\\u21A2',\n    '&lat;': '\\u2AAB',\n    '&latail;': '\\u2919',\n    '&late;': '\\u2AAD',\n    '&lates;': '\\u2AAD\\uFE00',\n    '&lbarr;': '\\u290C',\n    '&lbbrk;': '\\u2772',\n    '&lbrace;': '\\u007B',\n    '&lbrack;': '\\u005B',\n    '&lbrke;': '\\u298B',\n    '&lbrksld;': '\\u298F',\n    '&lbrkslu;': '\\u298D',\n    '&lcaron;': '\\u013E',\n    '&lcedil;': '\\u013C',\n    '&lceil;': '\\u2308',\n    '&lcub;': '\\u007B',\n    '&lcy;': '\\u043B',\n    '&ldca;': '\\u2936',\n    '&ldquo;': '\\u201C',\n    '&ldquor;': '\\u201E',\n    '&ldrdhar;': '\\u2967',\n    '&ldrushar;': '\\u294B',\n    '&ldsh;': '\\u21B2',\n    '&le;': '\\u2264',\n    '&leftarrow;': '\\u2190',\n    '&leftarrowtail;': '\\u21A2',\n    '&leftharpoondown;': '\\u21BD',\n    '&leftharpoonup;': '\\u21BC',\n    '&leftleftarrows;': '\\u21C7',\n    '&leftrightarrow;': '\\u2194',\n    '&leftrightarrows;': '\\u21C6',\n    '&leftrightharpoons;': '\\u21CB',\n    '&leftrightsquigarrow;': '\\u21AD',\n    '&leftthreetimes;': '\\u22CB',\n    '&leg;': '\\u22DA',\n    '&leq;': '\\u2264',\n    '&leqq;': '\\u2266',\n    '&leqslant;': '\\u2A7D',\n    '&les;': '\\u2A7D',\n    '&lescc;': '\\u2AA8',\n    '&lesdot;': '\\u2A7F',\n    '&lesdoto;': '\\u2A81',\n    '&lesdotor;': '\\u2A83',\n    '&lesg;': '\\u22DA\\uFE00',\n    '&lesges;': '\\u2A93',\n    '&lessapprox;': '\\u2A85',\n    '&lessdot;': '\\u22D6',\n    '&lesseqgtr;': '\\u22DA',\n    '&lesseqqgtr;': '\\u2A8B',\n    '&lessgtr;': '\\u2276',\n    '&lesssim;': '\\u2272',\n    '&lfisht;': '\\u297C',\n    '&lfloor;': '\\u230A',\n    '&lfr;': '\\uD835\\uDD29',\n    '&lg;': '\\u2276',\n    '&lgE;': '\\u2A91',\n    '&lhard;': '\\u21BD',\n    '&lharu;': '\\u21BC',\n    '&lharul;': '\\u296A',\n    '&lhblk;': '\\u2584',\n    '&ljcy;': '\\u0459',\n    '&ll;': '\\u226A',\n    '&llarr;': '\\u21C7',\n    '&llcorner;': '\\u231E',\n    '&llhard;': '\\u296B',\n    '&lltri;': '\\u25FA',\n    '&lmidot;': '\\u0140',\n    '&lmoust;': '\\u23B0',\n    '&lmoustache;': '\\u23B0',\n    '&lnE;': '\\u2268',\n    '&lnap;': '\\u2A89',\n    '&lnapprox;': '\\u2A89',\n    '&lne;': '\\u2A87',\n    '&lneq;': '\\u2A87',\n    '&lneqq;': '\\u2268',\n    '&lnsim;': '\\u22E6',\n    '&loang;': '\\u27EC',\n    '&loarr;': '\\u21FD',\n    '&lobrk;': '\\u27E6',\n    '&longleftarrow;': '\\u27F5',\n    '&longleftrightarrow;': '\\u27F7',\n    '&longmapsto;': '\\u27FC',\n    '&longrightarrow;': '\\u27F6',\n    '&looparrowleft;': '\\u21AB',\n    '&looparrowright;': '\\u21AC',\n    '&lopar;': '\\u2985',\n    '&lopf;': '\\uD835\\uDD5D',\n    '&loplus;': '\\u2A2D',\n    '&lotimes;': '\\u2A34',\n    '&lowast;': '\\u2217',\n    '&lowbar;': '\\u005F',\n    '&loz;': '\\u25CA',\n    '&lozenge;': '\\u25CA',\n    '&lozf;': '\\u29EB',\n    '&lpar;': '\\u0028',\n    '&lparlt;': '\\u2993',\n    '&lrarr;': '\\u21C6',\n    '&lrcorner;': '\\u231F',\n    '&lrhar;': '\\u21CB',\n    '&lrhard;': '\\u296D',\n    '&lrm;': '\\u200E',\n    '&lrtri;': '\\u22BF',\n    '&lsaquo;': '\\u2039',\n    '&lscr;': '\\uD835\\uDCC1',\n    '&lsh;': '\\u21B0',\n    '&lsim;': '\\u2272',\n    '&lsime;': '\\u2A8D',\n    '&lsimg;': '\\u2A8F',\n    '&lsqb;': '\\u005B',\n    '&lsquo;': '\\u2018',\n    '&lsquor;': '\\u201A',\n    '&lstrok;': '\\u0142',\n    '&lt': '\\u003C',\n    '&lt;': '\\u003C',\n    '&ltcc;': '\\u2AA6',\n    '&ltcir;': '\\u2A79',\n    '&ltdot;': '\\u22D6',\n    '&lthree;': '\\u22CB',\n    '&ltimes;': '\\u22C9',\n    '&ltlarr;': '\\u2976',\n    '&ltquest;': '\\u2A7B',\n    '&ltrPar;': '\\u2996',\n    '&ltri;': '\\u25C3',\n    '&ltrie;': '\\u22B4',\n    '&ltrif;': '\\u25C2',\n    '&lurdshar;': '\\u294A',\n    '&luruhar;': '\\u2966',\n    '&lvertneqq;': '\\u2268\\uFE00',\n    '&lvnE;': '\\u2268\\uFE00',\n    '&mDDot;': '\\u223A',\n    '&macr': '\\u00AF',\n    '&macr;': '\\u00AF',\n    '&male;': '\\u2642',\n    '&malt;': '\\u2720',\n    '&maltese;': '\\u2720',\n    '&map;': '\\u21A6',\n    '&mapsto;': '\\u21A6',\n    '&mapstodown;': '\\u21A7',\n    '&mapstoleft;': '\\u21A4',\n    '&mapstoup;': '\\u21A5',\n    '&marker;': '\\u25AE',\n    '&mcomma;': '\\u2A29',\n    '&mcy;': '\\u043C',\n    '&mdash;': '\\u2014',\n    '&measuredangle;': '\\u2221',\n    '&mfr;': '\\uD835\\uDD2A',\n    '&mho;': '\\u2127',\n    '&micro': '\\u00B5',\n    '&micro;': '\\u00B5',\n    '&mid;': '\\u2223',\n    '&midast;': '\\u002A',\n    '&midcir;': '\\u2AF0',\n    '&middot': '\\u00B7',\n    '&middot;': '\\u00B7',\n    '&minus;': '\\u2212',\n    '&minusb;': '\\u229F',\n    '&minusd;': '\\u2238',\n    '&minusdu;': '\\u2A2A',\n    '&mlcp;': '\\u2ADB',\n    '&mldr;': '\\u2026',\n    '&mnplus;': '\\u2213',\n    '&models;': '\\u22A7',\n    '&mopf;': '\\uD835\\uDD5E',\n    '&mp;': '\\u2213',\n    '&mscr;': '\\uD835\\uDCC2',\n    '&mstpos;': '\\u223E',\n    '&mu;': '\\u03BC',\n    '&multimap;': '\\u22B8',\n    '&mumap;': '\\u22B8',\n    '&nGg;': '\\u22D9\\u0338',\n    '&nGt;': '\\u226B\\u20D2',\n    '&nGtv;': '\\u226B\\u0338',\n    '&nLeftarrow;': '\\u21CD',\n    '&nLeftrightarrow;': '\\u21CE',\n    '&nLl;': '\\u22D8\\u0338',\n    '&nLt;': '\\u226A\\u20D2',\n    '&nLtv;': '\\u226A\\u0338',\n    '&nRightarrow;': '\\u21CF',\n    '&nVDash;': '\\u22AF',\n    '&nVdash;': '\\u22AE',\n    '&nabla;': '\\u2207',\n    '&nacute;': '\\u0144',\n    '&nang;': '\\u2220\\u20D2',\n    '&nap;': '\\u2249',\n    '&napE;': '\\u2A70\\u0338',\n    '&napid;': '\\u224B\\u0338',\n    '&napos;': '\\u0149',\n    '&napprox;': '\\u2249',\n    '&natur;': '\\u266E',\n    '&natural;': '\\u266E',\n    '&naturals;': '\\u2115',\n    '&nbsp': '\\u00A0',\n    '&nbsp;': '\\u00A0',\n    '&nbump;': '\\u224E\\u0338',\n    '&nbumpe;': '\\u224F\\u0338',\n    '&ncap;': '\\u2A43',\n    '&ncaron;': '\\u0148',\n    '&ncedil;': '\\u0146',\n    '&ncong;': '\\u2247',\n    '&ncongdot;': '\\u2A6D\\u0338',\n    '&ncup;': '\\u2A42',\n    '&ncy;': '\\u043D',\n    '&ndash;': '\\u2013',\n    '&ne;': '\\u2260',\n    '&neArr;': '\\u21D7',\n    '&nearhk;': '\\u2924',\n    '&nearr;': '\\u2197',\n    '&nearrow;': '\\u2197',\n    '&nedot;': '\\u2250\\u0338',\n    '&nequiv;': '\\u2262',\n    '&nesear;': '\\u2928',\n    '&nesim;': '\\u2242\\u0338',\n    '&nexist;': '\\u2204',\n    '&nexists;': '\\u2204',\n    '&nfr;': '\\uD835\\uDD2B',\n    '&ngE;': '\\u2267\\u0338',\n    '&nge;': '\\u2271',\n    '&ngeq;': '\\u2271',\n    '&ngeqq;': '\\u2267\\u0338',\n    '&ngeqslant;': '\\u2A7E\\u0338',\n    '&nges;': '\\u2A7E\\u0338',\n    '&ngsim;': '\\u2275',\n    '&ngt;': '\\u226F',\n    '&ngtr;': '\\u226F',\n    '&nhArr;': '\\u21CE',\n    '&nharr;': '\\u21AE',\n    '&nhpar;': '\\u2AF2',\n    '&ni;': '\\u220B',\n    '&nis;': '\\u22FC',\n    '&nisd;': '\\u22FA',\n    '&niv;': '\\u220B',\n    '&njcy;': '\\u045A',\n    '&nlArr;': '\\u21CD',\n    '&nlE;': '\\u2266\\u0338',\n    '&nlarr;': '\\u219A',\n    '&nldr;': '\\u2025',\n    '&nle;': '\\u2270',\n    '&nleftarrow;': '\\u219A',\n    '&nleftrightarrow;': '\\u21AE',\n    '&nleq;': '\\u2270',\n    '&nleqq;': '\\u2266\\u0338',\n    '&nleqslant;': '\\u2A7D\\u0338',\n    '&nles;': '\\u2A7D\\u0338',\n    '&nless;': '\\u226E',\n    '&nlsim;': '\\u2274',\n    '&nlt;': '\\u226E',\n    '&nltri;': '\\u22EA',\n    '&nltrie;': '\\u22EC',\n    '&nmid;': '\\u2224',\n    '&nopf;': '\\uD835\\uDD5F',\n    '&not': '\\u00AC',\n    '&not;': '\\u00AC',\n    '&notin;': '\\u2209',\n    '&notinE;': '\\u22F9\\u0338',\n    '&notindot;': '\\u22F5\\u0338',\n    '&notinva;': '\\u2209',\n    '&notinvb;': '\\u22F7',\n    '&notinvc;': '\\u22F6',\n    '&notni;': '\\u220C',\n    '&notniva;': '\\u220C',\n    '&notnivb;': '\\u22FE',\n    '&notnivc;': '\\u22FD',\n    '&npar;': '\\u2226',\n    '&nparallel;': '\\u2226',\n    '&nparsl;': '\\u2AFD\\u20E5',\n    '&npart;': '\\u2202\\u0338',\n    '&npolint;': '\\u2A14',\n    '&npr;': '\\u2280',\n    '&nprcue;': '\\u22E0',\n    '&npre;': '\\u2AAF\\u0338',\n    '&nprec;': '\\u2280',\n    '&npreceq;': '\\u2AAF\\u0338',\n    '&nrArr;': '\\u21CF',\n    '&nrarr;': '\\u219B',\n    '&nrarrc;': '\\u2933\\u0338',\n    '&nrarrw;': '\\u219D\\u0338',\n    '&nrightarrow;': '\\u219B',\n    '&nrtri;': '\\u22EB',\n    '&nrtrie;': '\\u22ED',\n    '&nsc;': '\\u2281',\n    '&nsccue;': '\\u22E1',\n    '&nsce;': '\\u2AB0\\u0338',\n    '&nscr;': '\\uD835\\uDCC3',\n    '&nshortmid;': '\\u2224',\n    '&nshortparallel;': '\\u2226',\n    '&nsim;': '\\u2241',\n    '&nsime;': '\\u2244',\n    '&nsimeq;': '\\u2244',\n    '&nsmid;': '\\u2224',\n    '&nspar;': '\\u2226',\n    '&nsqsube;': '\\u22E2',\n    '&nsqsupe;': '\\u22E3',\n    '&nsub;': '\\u2284',\n    '&nsubE;': '\\u2AC5\\u0338',\n    '&nsube;': '\\u2288',\n    '&nsubset;': '\\u2282\\u20D2',\n    '&nsubseteq;': '\\u2288',\n    '&nsubseteqq;': '\\u2AC5\\u0338',\n    '&nsucc;': '\\u2281',\n    '&nsucceq;': '\\u2AB0\\u0338',\n    '&nsup;': '\\u2285',\n    '&nsupE;': '\\u2AC6\\u0338',\n    '&nsupe;': '\\u2289',\n    '&nsupset;': '\\u2283\\u20D2',\n    '&nsupseteq;': '\\u2289',\n    '&nsupseteqq;': '\\u2AC6\\u0338',\n    '&ntgl;': '\\u2279',\n    '&ntilde': '\\u00F1',\n    '&ntilde;': '\\u00F1',\n    '&ntlg;': '\\u2278',\n    '&ntriangleleft;': '\\u22EA',\n    '&ntrianglelefteq;': '\\u22EC',\n    '&ntriangleright;': '\\u22EB',\n    '&ntrianglerighteq;': '\\u22ED',\n    '&nu;': '\\u03BD',\n    '&num;': '\\u0023',\n    '&numero;': '\\u2116',\n    '&numsp;': '\\u2007',\n    '&nvDash;': '\\u22AD',\n    '&nvHarr;': '\\u2904',\n    '&nvap;': '\\u224D\\u20D2',\n    '&nvdash;': '\\u22AC',\n    '&nvge;': '\\u2265\\u20D2',\n    '&nvgt;': '\\u003E\\u20D2',\n    '&nvinfin;': '\\u29DE',\n    '&nvlArr;': '\\u2902',\n    '&nvle;': '\\u2264\\u20D2',\n    '&nvlt;': '\\u003C\\u20D2',\n    '&nvltrie;': '\\u22B4\\u20D2',\n    '&nvrArr;': '\\u2903',\n    '&nvrtrie;': '\\u22B5\\u20D2',\n    '&nvsim;': '\\u223C\\u20D2',\n    '&nwArr;': '\\u21D6',\n    '&nwarhk;': '\\u2923',\n    '&nwarr;': '\\u2196',\n    '&nwarrow;': '\\u2196',\n    '&nwnear;': '\\u2927',\n    '&oS;': '\\u24C8',\n    '&oacute': '\\u00F3',\n    '&oacute;': '\\u00F3',\n    '&oast;': '\\u229B',\n    '&ocir;': '\\u229A',\n    '&ocirc': '\\u00F4',\n    '&ocirc;': '\\u00F4',\n    '&ocy;': '\\u043E',\n    '&odash;': '\\u229D',\n    '&odblac;': '\\u0151',\n    '&odiv;': '\\u2A38',\n    '&odot;': '\\u2299',\n    '&odsold;': '\\u29BC',\n    '&oelig;': '\\u0153',\n    '&ofcir;': '\\u29BF',\n    '&ofr;': '\\uD835\\uDD2C',\n    '&ogon;': '\\u02DB',\n    '&ograve': '\\u00F2',\n    '&ograve;': '\\u00F2',\n    '&ogt;': '\\u29C1',\n    '&ohbar;': '\\u29B5',\n    '&ohm;': '\\u03A9',\n    '&oint;': '\\u222E',\n    '&olarr;': '\\u21BA',\n    '&olcir;': '\\u29BE',\n    '&olcross;': '\\u29BB',\n    '&oline;': '\\u203E',\n    '&olt;': '\\u29C0',\n    '&omacr;': '\\u014D',\n    '&omega;': '\\u03C9',\n    '&omicron;': '\\u03BF',\n    '&omid;': '\\u29B6',\n    '&ominus;': '\\u2296',\n    '&oopf;': '\\uD835\\uDD60',\n    '&opar;': '\\u29B7',\n    '&operp;': '\\u29B9',\n    '&oplus;': '\\u2295',\n    '&or;': '\\u2228',\n    '&orarr;': '\\u21BB',\n    '&ord;': '\\u2A5D',\n    '&order;': '\\u2134',\n    '&orderof;': '\\u2134',\n    '&ordf': '\\u00AA',\n    '&ordf;': '\\u00AA',\n    '&ordm': '\\u00BA',\n    '&ordm;': '\\u00BA',\n    '&origof;': '\\u22B6',\n    '&oror;': '\\u2A56',\n    '&orslope;': '\\u2A57',\n    '&orv;': '\\u2A5B',\n    '&oscr;': '\\u2134',\n    '&oslash': '\\u00F8',\n    '&oslash;': '\\u00F8',\n    '&osol;': '\\u2298',\n    '&otilde': '\\u00F5',\n    '&otilde;': '\\u00F5',\n    '&otimes;': '\\u2297',\n    '&otimesas;': '\\u2A36',\n    '&ouml': '\\u00F6',\n    '&ouml;': '\\u00F6',\n    '&ovbar;': '\\u233D',\n    '&par;': '\\u2225',\n    '&para': '\\u00B6',\n    '&para;': '\\u00B6',\n    '&parallel;': '\\u2225',\n    '&parsim;': '\\u2AF3',\n    '&parsl;': '\\u2AFD',\n    '&part;': '\\u2202',\n    '&pcy;': '\\u043F',\n    '&percnt;': '\\u0025',\n    '&period;': '\\u002E',\n    '&permil;': '\\u2030',\n    '&perp;': '\\u22A5',\n    '&pertenk;': '\\u2031',\n    '&pfr;': '\\uD835\\uDD2D',\n    '&phi;': '\\u03C6',\n    '&phiv;': '\\u03D5',\n    '&phmmat;': '\\u2133',\n    '&phone;': '\\u260E',\n    '&pi;': '\\u03C0',\n    '&pitchfork;': '\\u22D4',\n    '&piv;': '\\u03D6',\n    '&planck;': '\\u210F',\n    '&planckh;': '\\u210E',\n    '&plankv;': '\\u210F',\n    '&plus;': '\\u002B',\n    '&plusacir;': '\\u2A23',\n    '&plusb;': '\\u229E',\n    '&pluscir;': '\\u2A22',\n    '&plusdo;': '\\u2214',\n    '&plusdu;': '\\u2A25',\n    '&pluse;': '\\u2A72',\n    '&plusmn': '\\u00B1',\n    '&plusmn;': '\\u00B1',\n    '&plussim;': '\\u2A26',\n    '&plustwo;': '\\u2A27',\n    '&pm;': '\\u00B1',\n    '&pointint;': '\\u2A15',\n    '&popf;': '\\uD835\\uDD61',\n    '&pound': '\\u00A3',\n    '&pound;': '\\u00A3',\n    '&pr;': '\\u227A',\n    '&prE;': '\\u2AB3',\n    '&prap;': '\\u2AB7',\n    '&prcue;': '\\u227C',\n    '&pre;': '\\u2AAF',\n    '&prec;': '\\u227A',\n    '&precapprox;': '\\u2AB7',\n    '&preccurlyeq;': '\\u227C',\n    '&preceq;': '\\u2AAF',\n    '&precnapprox;': '\\u2AB9',\n    '&precneqq;': '\\u2AB5',\n    '&precnsim;': '\\u22E8',\n    '&precsim;': '\\u227E',\n    '&prime;': '\\u2032',\n    '&primes;': '\\u2119',\n    '&prnE;': '\\u2AB5',\n    '&prnap;': '\\u2AB9',\n    '&prnsim;': '\\u22E8',\n    '&prod;': '\\u220F',\n    '&profalar;': '\\u232E',\n    '&profline;': '\\u2312',\n    '&profsurf;': '\\u2313',\n    '&prop;': '\\u221D',\n    '&propto;': '\\u221D',\n    '&prsim;': '\\u227E',\n    '&prurel;': '\\u22B0',\n    '&pscr;': '\\uD835\\uDCC5',\n    '&psi;': '\\u03C8',\n    '&puncsp;': '\\u2008',\n    '&qfr;': '\\uD835\\uDD2E',\n    '&qint;': '\\u2A0C',\n    '&qopf;': '\\uD835\\uDD62',\n    '&qprime;': '\\u2057',\n    '&qscr;': '\\uD835\\uDCC6',\n    '&quaternions;': '\\u210D',\n    '&quatint;': '\\u2A16',\n    '&quest;': '\\u003F',\n    '&questeq;': '\\u225F',\n    '&quot': '\\u0022',\n    '&quot;': '\\u0022',\n    '&rAarr;': '\\u21DB',\n    '&rArr;': '\\u21D2',\n    '&rAtail;': '\\u291C',\n    '&rBarr;': '\\u290F',\n    '&rHar;': '\\u2964',\n    '&race;': '\\u223D\\u0331',\n    '&racute;': '\\u0155',\n    '&radic;': '\\u221A',\n    '&raemptyv;': '\\u29B3',\n    '&rang;': '\\u27E9',\n    '&rangd;': '\\u2992',\n    '&range;': '\\u29A5',\n    '&rangle;': '\\u27E9',\n    '&raquo': '\\u00BB',\n    '&raquo;': '\\u00BB',\n    '&rarr;': '\\u2192',\n    '&rarrap;': '\\u2975',\n    '&rarrb;': '\\u21E5',\n    '&rarrbfs;': '\\u2920',\n    '&rarrc;': '\\u2933',\n    '&rarrfs;': '\\u291E',\n    '&rarrhk;': '\\u21AA',\n    '&rarrlp;': '\\u21AC',\n    '&rarrpl;': '\\u2945',\n    '&rarrsim;': '\\u2974',\n    '&rarrtl;': '\\u21A3',\n    '&rarrw;': '\\u219D',\n    '&ratail;': '\\u291A',\n    '&ratio;': '\\u2236',\n    '&rationals;': '\\u211A',\n    '&rbarr;': '\\u290D',\n    '&rbbrk;': '\\u2773',\n    '&rbrace;': '\\u007D',\n    '&rbrack;': '\\u005D',\n    '&rbrke;': '\\u298C',\n    '&rbrksld;': '\\u298E',\n    '&rbrkslu;': '\\u2990',\n    '&rcaron;': '\\u0159',\n    '&rcedil;': '\\u0157',\n    '&rceil;': '\\u2309',\n    '&rcub;': '\\u007D',\n    '&rcy;': '\\u0440',\n    '&rdca;': '\\u2937',\n    '&rdldhar;': '\\u2969',\n    '&rdquo;': '\\u201D',\n    '&rdquor;': '\\u201D',\n    '&rdsh;': '\\u21B3',\n    '&real;': '\\u211C',\n    '&realine;': '\\u211B',\n    '&realpart;': '\\u211C',\n    '&reals;': '\\u211D',\n    '&rect;': '\\u25AD',\n    '&reg': '\\u00AE',\n    '&reg;': '\\u00AE',\n    '&rfisht;': '\\u297D',\n    '&rfloor;': '\\u230B',\n    '&rfr;': '\\uD835\\uDD2F',\n    '&rhard;': '\\u21C1',\n    '&rharu;': '\\u21C0',\n    '&rharul;': '\\u296C',\n    '&rho;': '\\u03C1',\n    '&rhov;': '\\u03F1',\n    '&rightarrow;': '\\u2192',\n    '&rightarrowtail;': '\\u21A3',\n    '&rightharpoondown;': '\\u21C1',\n    '&rightharpoonup;': '\\u21C0',\n    '&rightleftarrows;': '\\u21C4',\n    '&rightleftharpoons;': '\\u21CC',\n    '&rightrightarrows;': '\\u21C9',\n    '&rightsquigarrow;': '\\u219D',\n    '&rightthreetimes;': '\\u22CC',\n    '&ring;': '\\u02DA',\n    '&risingdotseq;': '\\u2253',\n    '&rlarr;': '\\u21C4',\n    '&rlhar;': '\\u21CC',\n    '&rlm;': '\\u200F',\n    '&rmoust;': '\\u23B1',\n    '&rmoustache;': '\\u23B1',\n    '&rnmid;': '\\u2AEE',\n    '&roang;': '\\u27ED',\n    '&roarr;': '\\u21FE',\n    '&robrk;': '\\u27E7',\n    '&ropar;': '\\u2986',\n    '&ropf;': '\\uD835\\uDD63',\n    '&roplus;': '\\u2A2E',\n    '&rotimes;': '\\u2A35',\n    '&rpar;': '\\u0029',\n    '&rpargt;': '\\u2994',\n    '&rppolint;': '\\u2A12',\n    '&rrarr;': '\\u21C9',\n    '&rsaquo;': '\\u203A',\n    '&rscr;': '\\uD835\\uDCC7',\n    '&rsh;': '\\u21B1',\n    '&rsqb;': '\\u005D',\n    '&rsquo;': '\\u2019',\n    '&rsquor;': '\\u2019',\n    '&rthree;': '\\u22CC',\n    '&rtimes;': '\\u22CA',\n    '&rtri;': '\\u25B9',\n    '&rtrie;': '\\u22B5',\n    '&rtrif;': '\\u25B8',\n    '&rtriltri;': '\\u29CE',\n    '&ruluhar;': '\\u2968',\n    '&rx;': '\\u211E',\n    '&sacute;': '\\u015B',\n    '&sbquo;': '\\u201A',\n    '&sc;': '\\u227B',\n    '&scE;': '\\u2AB4',\n    '&scap;': '\\u2AB8',\n    '&scaron;': '\\u0161',\n    '&sccue;': '\\u227D',\n    '&sce;': '\\u2AB0',\n    '&scedil;': '\\u015F',\n    '&scirc;': '\\u015D',\n    '&scnE;': '\\u2AB6',\n    '&scnap;': '\\u2ABA',\n    '&scnsim;': '\\u22E9',\n    '&scpolint;': '\\u2A13',\n    '&scsim;': '\\u227F',\n    '&scy;': '\\u0441',\n    '&sdot;': '\\u22C5',\n    '&sdotb;': '\\u22A1',\n    '&sdote;': '\\u2A66',\n    '&seArr;': '\\u21D8',\n    '&searhk;': '\\u2925',\n    '&searr;': '\\u2198',\n    '&searrow;': '\\u2198',\n    '&sect': '\\u00A7',\n    '&sect;': '\\u00A7',\n    '&semi;': '\\u003B',\n    '&seswar;': '\\u2929',\n    '&setminus;': '\\u2216',\n    '&setmn;': '\\u2216',\n    '&sext;': '\\u2736',\n    '&sfr;': '\\uD835\\uDD30',\n    '&sfrown;': '\\u2322',\n    '&sharp;': '\\u266F',\n    '&shchcy;': '\\u0449',\n    '&shcy;': '\\u0448',\n    '&shortmid;': '\\u2223',\n    '&shortparallel;': '\\u2225',\n    '&shy': '\\u00AD',\n    '&shy;': '\\u00AD',\n    '&sigma;': '\\u03C3',\n    '&sigmaf;': '\\u03C2',\n    '&sigmav;': '\\u03C2',\n    '&sim;': '\\u223C',\n    '&simdot;': '\\u2A6A',\n    '&sime;': '\\u2243',\n    '&simeq;': '\\u2243',\n    '&simg;': '\\u2A9E',\n    '&simgE;': '\\u2AA0',\n    '&siml;': '\\u2A9D',\n    '&simlE;': '\\u2A9F',\n    '&simne;': '\\u2246',\n    '&simplus;': '\\u2A24',\n    '&simrarr;': '\\u2972',\n    '&slarr;': '\\u2190',\n    '&smallsetminus;': '\\u2216',\n    '&smashp;': '\\u2A33',\n    '&smeparsl;': '\\u29E4',\n    '&smid;': '\\u2223',\n    '&smile;': '\\u2323',\n    '&smt;': '\\u2AAA',\n    '&smte;': '\\u2AAC',\n    '&smtes;': '\\u2AAC\\uFE00',\n    '&softcy;': '\\u044C',\n    '&sol;': '\\u002F',\n    '&solb;': '\\u29C4',\n    '&solbar;': '\\u233F',\n    '&sopf;': '\\uD835\\uDD64',\n    '&spades;': '\\u2660',\n    '&spadesuit;': '\\u2660',\n    '&spar;': '\\u2225',\n    '&sqcap;': '\\u2293',\n    '&sqcaps;': '\\u2293\\uFE00',\n    '&sqcup;': '\\u2294',\n    '&sqcups;': '\\u2294\\uFE00',\n    '&sqsub;': '\\u228F',\n    '&sqsube;': '\\u2291',\n    '&sqsubset;': '\\u228F',\n    '&sqsubseteq;': '\\u2291',\n    '&sqsup;': '\\u2290',\n    '&sqsupe;': '\\u2292',\n    '&sqsupset;': '\\u2290',\n    '&sqsupseteq;': '\\u2292',\n    '&squ;': '\\u25A1',\n    '&square;': '\\u25A1',\n    '&squarf;': '\\u25AA',\n    '&squf;': '\\u25AA',\n    '&srarr;': '\\u2192',\n    '&sscr;': '\\uD835\\uDCC8',\n    '&ssetmn;': '\\u2216',\n    '&ssmile;': '\\u2323',\n    '&sstarf;': '\\u22C6',\n    '&star;': '\\u2606',\n    '&starf;': '\\u2605',\n    '&straightepsilon;': '\\u03F5',\n    '&straightphi;': '\\u03D5',\n    '&strns;': '\\u00AF',\n    '&sub;': '\\u2282',\n    '&subE;': '\\u2AC5',\n    '&subdot;': '\\u2ABD',\n    '&sube;': '\\u2286',\n    '&subedot;': '\\u2AC3',\n    '&submult;': '\\u2AC1',\n    '&subnE;': '\\u2ACB',\n    '&subne;': '\\u228A',\n    '&subplus;': '\\u2ABF',\n    '&subrarr;': '\\u2979',\n    '&subset;': '\\u2282',\n    '&subseteq;': '\\u2286',\n    '&subseteqq;': '\\u2AC5',\n    '&subsetneq;': '\\u228A',\n    '&subsetneqq;': '\\u2ACB',\n    '&subsim;': '\\u2AC7',\n    '&subsub;': '\\u2AD5',\n    '&subsup;': '\\u2AD3',\n    '&succ;': '\\u227B',\n    '&succapprox;': '\\u2AB8',\n    '&succcurlyeq;': '\\u227D',\n    '&succeq;': '\\u2AB0',\n    '&succnapprox;': '\\u2ABA',\n    '&succneqq;': '\\u2AB6',\n    '&succnsim;': '\\u22E9',\n    '&succsim;': '\\u227F',\n    '&sum;': '\\u2211',\n    '&sung;': '\\u266A',\n    '&sup1': '\\u00B9',\n    '&sup1;': '\\u00B9',\n    '&sup2': '\\u00B2',\n    '&sup2;': '\\u00B2',\n    '&sup3': '\\u00B3',\n    '&sup3;': '\\u00B3',\n    '&sup;': '\\u2283',\n    '&supE;': '\\u2AC6',\n    '&supdot;': '\\u2ABE',\n    '&supdsub;': '\\u2AD8',\n    '&supe;': '\\u2287',\n    '&supedot;': '\\u2AC4',\n    '&suphsol;': '\\u27C9',\n    '&suphsub;': '\\u2AD7',\n    '&suplarr;': '\\u297B',\n    '&supmult;': '\\u2AC2',\n    '&supnE;': '\\u2ACC',\n    '&supne;': '\\u228B',\n    '&supplus;': '\\u2AC0',\n    '&supset;': '\\u2283',\n    '&supseteq;': '\\u2287',\n    '&supseteqq;': '\\u2AC6',\n    '&supsetneq;': '\\u228B',\n    '&supsetneqq;': '\\u2ACC',\n    '&supsim;': '\\u2AC8',\n    '&supsub;': '\\u2AD4',\n    '&supsup;': '\\u2AD6',\n    '&swArr;': '\\u21D9',\n    '&swarhk;': '\\u2926',\n    '&swarr;': '\\u2199',\n    '&swarrow;': '\\u2199',\n    '&swnwar;': '\\u292A',\n    '&szlig': '\\u00DF',\n    '&szlig;': '\\u00DF',\n    '&target;': '\\u2316',\n    '&tau;': '\\u03C4',\n    '&tbrk;': '\\u23B4',\n    '&tcaron;': '\\u0165',\n    '&tcedil;': '\\u0163',\n    '&tcy;': '\\u0442',\n    '&tdot;': '\\u20DB',\n    '&telrec;': '\\u2315',\n    '&tfr;': '\\uD835\\uDD31',\n    '&there4;': '\\u2234',\n    '&therefore;': '\\u2234',\n    '&theta;': '\\u03B8',\n    '&thetasym;': '\\u03D1',\n    '&thetav;': '\\u03D1',\n    '&thickapprox;': '\\u2248',\n    '&thicksim;': '\\u223C',\n    '&thinsp;': '\\u2009',\n    '&thkap;': '\\u2248',\n    '&thksim;': '\\u223C',\n    '&thorn': '\\u00FE',\n    '&thorn;': '\\u00FE',\n    '&tilde;': '\\u02DC',\n    '&times': '\\u00D7',\n    '&times;': '\\u00D7',\n    '&timesb;': '\\u22A0',\n    '&timesbar;': '\\u2A31',\n    '&timesd;': '\\u2A30',\n    '&tint;': '\\u222D',\n    '&toea;': '\\u2928',\n    '&top;': '\\u22A4',\n    '&topbot;': '\\u2336',\n    '&topcir;': '\\u2AF1',\n    '&topf;': '\\uD835\\uDD65',\n    '&topfork;': '\\u2ADA',\n    '&tosa;': '\\u2929',\n    '&tprime;': '\\u2034',\n    '&trade;': '\\u2122',\n    '&triangle;': '\\u25B5',\n    '&triangledown;': '\\u25BF',\n    '&triangleleft;': '\\u25C3',\n    '&trianglelefteq;': '\\u22B4',\n    '&triangleq;': '\\u225C',\n    '&triangleright;': '\\u25B9',\n    '&trianglerighteq;': '\\u22B5',\n    '&tridot;': '\\u25EC',\n    '&trie;': '\\u225C',\n    '&triminus;': '\\u2A3A',\n    '&triplus;': '\\u2A39',\n    '&trisb;': '\\u29CD',\n    '&tritime;': '\\u2A3B',\n    '&trpezium;': '\\u23E2',\n    '&tscr;': '\\uD835\\uDCC9',\n    '&tscy;': '\\u0446',\n    '&tshcy;': '\\u045B',\n    '&tstrok;': '\\u0167',\n    '&twixt;': '\\u226C',\n    '&twoheadleftarrow;': '\\u219E',\n    '&twoheadrightarrow;': '\\u21A0',\n    '&uArr;': '\\u21D1',\n    '&uHar;': '\\u2963',\n    '&uacute': '\\u00FA',\n    '&uacute;': '\\u00FA',\n    '&uarr;': '\\u2191',\n    '&ubrcy;': '\\u045E',\n    '&ubreve;': '\\u016D',\n    '&ucirc': '\\u00FB',\n    '&ucirc;': '\\u00FB',\n    '&ucy;': '\\u0443',\n    '&udarr;': '\\u21C5',\n    '&udblac;': '\\u0171',\n    '&udhar;': '\\u296E',\n    '&ufisht;': '\\u297E',\n    '&ufr;': '\\uD835\\uDD32',\n    '&ugrave': '\\u00F9',\n    '&ugrave;': '\\u00F9',\n    '&uharl;': '\\u21BF',\n    '&uharr;': '\\u21BE',\n    '&uhblk;': '\\u2580',\n    '&ulcorn;': '\\u231C',\n    '&ulcorner;': '\\u231C',\n    '&ulcrop;': '\\u230F',\n    '&ultri;': '\\u25F8',\n    '&umacr;': '\\u016B',\n    '&uml': '\\u00A8',\n    '&uml;': '\\u00A8',\n    '&uogon;': '\\u0173',\n    '&uopf;': '\\uD835\\uDD66',\n    '&uparrow;': '\\u2191',\n    '&updownarrow;': '\\u2195',\n    '&upharpoonleft;': '\\u21BF',\n    '&upharpoonright;': '\\u21BE',\n    '&uplus;': '\\u228E',\n    '&upsi;': '\\u03C5',\n    '&upsih;': '\\u03D2',\n    '&upsilon;': '\\u03C5',\n    '&upuparrows;': '\\u21C8',\n    '&urcorn;': '\\u231D',\n    '&urcorner;': '\\u231D',\n    '&urcrop;': '\\u230E',\n    '&uring;': '\\u016F',\n    '&urtri;': '\\u25F9',\n    '&uscr;': '\\uD835\\uDCCA',\n    '&utdot;': '\\u22F0',\n    '&utilde;': '\\u0169',\n    '&utri;': '\\u25B5',\n    '&utrif;': '\\u25B4',\n    '&uuarr;': '\\u21C8',\n    '&uuml': '\\u00FC',\n    '&uuml;': '\\u00FC',\n    '&uwangle;': '\\u29A7',\n    '&vArr;': '\\u21D5',\n    '&vBar;': '\\u2AE8',\n    '&vBarv;': '\\u2AE9',\n    '&vDash;': '\\u22A8',\n    '&vangrt;': '\\u299C',\n    '&varepsilon;': '\\u03F5',\n    '&varkappa;': '\\u03F0',\n    '&varnothing;': '\\u2205',\n    '&varphi;': '\\u03D5',\n    '&varpi;': '\\u03D6',\n    '&varpropto;': '\\u221D',\n    '&varr;': '\\u2195',\n    '&varrho;': '\\u03F1',\n    '&varsigma;': '\\u03C2',\n    '&varsubsetneq;': '\\u228A\\uFE00',\n    '&varsubsetneqq;': '\\u2ACB\\uFE00',\n    '&varsupsetneq;': '\\u228B\\uFE00',\n    '&varsupsetneqq;': '\\u2ACC\\uFE00',\n    '&vartheta;': '\\u03D1',\n    '&vartriangleleft;': '\\u22B2',\n    '&vartriangleright;': '\\u22B3',\n    '&vcy;': '\\u0432',\n    '&vdash;': '\\u22A2',\n    '&vee;': '\\u2228',\n    '&veebar;': '\\u22BB',\n    '&veeeq;': '\\u225A',\n    '&vellip;': '\\u22EE',\n    '&verbar;': '\\u007C',\n    '&vert;': '\\u007C',\n    '&vfr;': '\\uD835\\uDD33',\n    '&vltri;': '\\u22B2',\n    '&vnsub;': '\\u2282\\u20D2',\n    '&vnsup;': '\\u2283\\u20D2',\n    '&vopf;': '\\uD835\\uDD67',\n    '&vprop;': '\\u221D',\n    '&vrtri;': '\\u22B3',\n    '&vscr;': '\\uD835\\uDCCB',\n    '&vsubnE;': '\\u2ACB\\uFE00',\n    '&vsubne;': '\\u228A\\uFE00',\n    '&vsupnE;': '\\u2ACC\\uFE00',\n    '&vsupne;': '\\u228B\\uFE00',\n    '&vzigzag;': '\\u299A',\n    '&wcirc;': '\\u0175',\n    '&wedbar;': '\\u2A5F',\n    '&wedge;': '\\u2227',\n    '&wedgeq;': '\\u2259',\n    '&weierp;': '\\u2118',\n    '&wfr;': '\\uD835\\uDD34',\n    '&wopf;': '\\uD835\\uDD68',\n    '&wp;': '\\u2118',\n    '&wr;': '\\u2240',\n    '&wreath;': '\\u2240',\n    '&wscr;': '\\uD835\\uDCCC',\n    '&xcap;': '\\u22C2',\n    '&xcirc;': '\\u25EF',\n    '&xcup;': '\\u22C3',\n    '&xdtri;': '\\u25BD',\n    '&xfr;': '\\uD835\\uDD35',\n    '&xhArr;': '\\u27FA',\n    '&xharr;': '\\u27F7',\n    '&xi;': '\\u03BE',\n    '&xlArr;': '\\u27F8',\n    '&xlarr;': '\\u27F5',\n    '&xmap;': '\\u27FC',\n    '&xnis;': '\\u22FB',\n    '&xodot;': '\\u2A00',\n    '&xopf;': '\\uD835\\uDD69',\n    '&xoplus;': '\\u2A01',\n    '&xotime;': '\\u2A02',\n    '&xrArr;': '\\u27F9',\n    '&xrarr;': '\\u27F6',\n    '&xscr;': '\\uD835\\uDCCD',\n    '&xsqcup;': '\\u2A06',\n    '&xuplus;': '\\u2A04',\n    '&xutri;': '\\u25B3',\n    '&xvee;': '\\u22C1',\n    '&xwedge;': '\\u22C0',\n    '&yacute': '\\u00FD',\n    '&yacute;': '\\u00FD',\n    '&yacy;': '\\u044F',\n    '&ycirc;': '\\u0177',\n    '&ycy;': '\\u044B',\n    '&yen': '\\u00A5',\n    '&yen;': '\\u00A5',\n    '&yfr;': '\\uD835\\uDD36',\n    '&yicy;': '\\u0457',\n    '&yopf;': '\\uD835\\uDD6A',\n    '&yscr;': '\\uD835\\uDCCE',\n    '&yucy;': '\\u044E',\n    '&yuml': '\\u00FF',\n    '&yuml;': '\\u00FF',\n    '&zacute;': '\\u017A',\n    '&zcaron;': '\\u017E',\n    '&zcy;': '\\u0437',\n    '&zdot;': '\\u017C',\n    '&zeetrf;': '\\u2128',\n    '&zeta;': '\\u03B6',\n    '&zfr;': '\\uD835\\uDD37',\n    '&zhcy;': '\\u0436',\n    '&zigrarr;': '\\u21DD',\n    '&zopf;': '\\uD835\\uDD6B',\n    '&zscr;': '\\uD835\\uDCCF',\n    '&zwj;': '\\u200D',\n    '&zwnj;': '\\u200C'\n};\n\nexport default htmlEntities;\n", "import htmlEntities from './html-entities.js';\n\nexport function decodeHTMLEntities(str) {\n    return str.replace(/&(#\\d+|#x[a-f0-9]+|[a-z]+\\d*);?/gi, (match, entity) => {\n        if (typeof htmlEntities[match] === 'string') {\n            return htmlEntities[match];\n        }\n\n        if (entity.charAt(0) !== '#' || match.charAt(match.length - 1) !== ';') {\n            // keep as is, invalid or unknown sequence\n            return match;\n        }\n\n        let codePoint;\n        if (entity.charAt(1) === 'x') {\n            // hex\n            codePoint = parseInt(entity.substr(2), 16);\n        } else {\n            // dec\n            codePoint = parseInt(entity.substr(1), 10);\n        }\n\n        var output = '';\n\n        if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n            // Invalid range, return a replacement character instead\n            return '\\uFFFD';\n        }\n\n        if (codePoint > 0xffff) {\n            codePoint -= 0x10000;\n            output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n            codePoint = 0xdc00 | (codePoint & 0x3ff);\n        }\n\n        output += String.fromCharCode(codePoint);\n\n        return output;\n    });\n}\n\nexport function escapeHtml(str) {\n    return str.trim().replace(/[<>\"'?&]/g, c => {\n        let hex = c.charCodeAt(0).toString(16);\n        if (hex.length < 2) {\n            hex = '0' + hex;\n        }\n        return '&#x' + hex.toUpperCase() + ';';\n    });\n}\n\nexport function textToHtml(str) {\n    let html = escapeHtml(str).replace(/\\n/g, '<br />');\n    return '<div>' + html + '</div>';\n}\n\nexport function htmlToText(str) {\n    str = str\n        // we can't process tags on multiple lines so remove newlines first\n        .replace(/\\r?\\n/g, '\\u0001')\n        .replace(/<\\!\\-\\-.*?\\-\\->/gi, ' ')\n\n        .replace(/<br\\b[^>]*>/gi, '\\n')\n        .replace(/<\\/?(p|div|table|tr|td|th)\\b[^>]*>/gi, '\\n\\n')\n        .replace(/<script\\b[^>]*>.*?<\\/script\\b[^>]*>/gi, ' ')\n        .replace(/^.*<body\\b[^>]*>/i, '')\n        .replace(/^.*<\\/head\\b[^>]*>/i, '')\n        .replace(/^.*<\\!doctype\\b[^>]*>/i, '')\n        .replace(/<\\/body\\b[^>]*>.*$/i, '')\n        .replace(/<\\/html\\b[^>]*>.*$/i, '')\n\n        .replace(/<a\\b[^>]*href\\s*=\\s*[\"']?([^\\s\"']+)[^>]*>/gi, ' ($1) ')\n\n        .replace(/<\\/?(span|em|i|strong|b|u|a)\\b[^>]*>/gi, '')\n\n        .replace(/<li\\b[^>]*>[\\n\\u0001\\s]*/gi, '* ')\n\n        .replace(/<hr\\b[^>]*>/g, '\\n-------------\\n')\n\n        .replace(/<[^>]*>/g, ' ')\n\n        // convert linebreak placeholders back to newlines\n        .replace(/\\u0001/g, '\\n')\n\n        .replace(/[ \\t]+/g, ' ')\n\n        .replace(/^\\s+$/gm, '')\n\n        .replace(/\\n\\n+/g, '\\n\\n')\n        .replace(/^\\n+/, '\\n')\n        .replace(/\\n+$/, '\\n');\n\n    str = decodeHTMLEntities(str);\n\n    return str;\n}\n\nfunction formatTextAddress(address) {\n    return []\n        .concat(address.name || [])\n        .concat(address.name ? `<${address.address}>` : address.address)\n        .join(' ');\n}\n\nfunction formatTextAddresses(addresses) {\n    let parts = [];\n\n    let processAddress = (address, partCounter) => {\n        if (partCounter) {\n            parts.push(', ');\n        }\n\n        if (address.group) {\n            let groupStart = `${address.name}:`;\n            let groupEnd = `;`;\n\n            parts.push(groupStart);\n            address.group.forEach(processAddress);\n            parts.push(groupEnd);\n        } else {\n            parts.push(formatTextAddress(address));\n        }\n    };\n\n    addresses.forEach(processAddress);\n\n    return parts.join('');\n}\n\nfunction formatHtmlAddress(address) {\n    return `<a href=\"mailto:${escapeHtml(address.address)}\" class=\"postal-email-address\">${escapeHtml(address.name || `<${address.address}>`)}</a>`;\n}\n\nfunction formatHtmlAddresses(addresses) {\n    let parts = [];\n\n    let processAddress = (address, partCounter) => {\n        if (partCounter) {\n            parts.push('<span class=\"postal-email-address-separator\">, </span>');\n        }\n\n        if (address.group) {\n            let groupStart = `<span class=\"postal-email-address-group\">${escapeHtml(address.name)}:</span>`;\n            let groupEnd = `<span class=\"postal-email-address-group\">;</span>`;\n\n            parts.push(groupStart);\n            address.group.forEach(processAddress);\n            parts.push(groupEnd);\n        } else {\n            parts.push(formatHtmlAddress(address));\n        }\n    };\n\n    addresses.forEach(processAddress);\n\n    return parts.join(' ');\n}\n\nfunction foldLines(str, lineLength, afterSpace) {\n    str = (str || '').toString();\n    lineLength = lineLength || 76;\n\n    let pos = 0,\n        len = str.length,\n        result = '',\n        line,\n        match;\n\n    while (pos < len) {\n        line = str.substr(pos, lineLength);\n        if (line.length < lineLength) {\n            result += line;\n            break;\n        }\n        if ((match = line.match(/^[^\\n\\r]*(\\r?\\n|\\r)/))) {\n            line = match[0];\n            result += line;\n            pos += line.length;\n            continue;\n        } else if ((match = line.match(/(\\s+)[^\\s]*$/)) && match[0].length - (afterSpace ? (match[1] || '').length : 0) < line.length) {\n            line = line.substr(0, line.length - (match[0].length - (afterSpace ? (match[1] || '').length : 0)));\n        } else if ((match = str.substr(pos + line.length).match(/^[^\\s]+(\\s*)/))) {\n            line = line + match[0].substr(0, match[0].length - (!afterSpace ? (match[1] || '').length : 0));\n        }\n\n        result += line;\n        pos += line.length;\n        if (pos < len) {\n            result += '\\r\\n';\n        }\n    }\n\n    return result;\n}\n\nexport function formatTextHeader(message) {\n    let rows = [];\n\n    if (message.from) {\n        rows.push({ key: 'From', val: formatTextAddress(message.from) });\n    }\n\n    if (message.subject) {\n        rows.push({ key: 'Subject', val: message.subject });\n    }\n\n    if (message.date) {\n        let dateOptions = {\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric',\n            hour12: false\n        };\n\n        let dateStr = typeof Intl === 'undefined' ? message.date : new Intl.DateTimeFormat('default', dateOptions).format(new Date(message.date));\n\n        rows.push({ key: 'Date', val: dateStr });\n    }\n\n    if (message.to && message.to.length) {\n        rows.push({ key: 'To', val: formatTextAddresses(message.to) });\n    }\n\n    if (message.cc && message.cc.length) {\n        rows.push({ key: 'Cc', val: formatTextAddresses(message.cc) });\n    }\n\n    if (message.bcc && message.bcc.length) {\n        rows.push({ key: 'Bcc', val: formatTextAddresses(message.bcc) });\n    }\n\n    // Align keys and values by adding space between these two\n    // Also make sure that the separator line is as long as the longest line\n    // Should end up with something like this:\n    /*\n    -----------------------------\n    From:    xx xx <xxx@xxx.com>\n    Subject: Example Subject\n    Date:    16/02/2021, 02:57:06\n    To:      not@found.com\n    -----------------------------\n    */\n\n    let maxKeyLength = rows\n        .map(r => r.key.length)\n        .reduce((acc, cur) => {\n            return cur > acc ? cur : acc;\n        }, 0);\n\n    rows = rows.flatMap(row => {\n        let sepLen = maxKeyLength - row.key.length;\n        let prefix = `${row.key}: ${' '.repeat(sepLen)}`;\n        let emptyPrefix = `${' '.repeat(row.key.length + 1)} ${' '.repeat(sepLen)}`;\n\n        let foldedLines = foldLines(row.val, 80, true)\n            .split(/\\r?\\n/)\n            .map(line => line.trim());\n\n        return foldedLines.map((line, i) => `${i ? emptyPrefix : prefix}${line}`);\n    });\n\n    let maxLineLength = rows\n        .map(r => r.length)\n        .reduce((acc, cur) => {\n            return cur > acc ? cur : acc;\n        }, 0);\n\n    let lineMarker = '-'.repeat(maxLineLength);\n\n    let template = `\n${lineMarker}\n${rows.join('\\n')}\n${lineMarker}\n`;\n\n    return template;\n}\n\nexport function formatHtmlHeader(message) {\n    let rows = [];\n\n    if (message.from) {\n        rows.push(`<div class=\"postal-email-header-key\">From</div><div class=\"postal-email-header-value\">${formatHtmlAddress(message.from)}</div>`);\n    }\n\n    if (message.subject) {\n        rows.push(\n            `<div class=\"postal-email-header-key\">Subject</div><div class=\"postal-email-header-value postal-email-header-subject\">${escapeHtml(\n                message.subject\n            )}</div>`\n        );\n    }\n\n    if (message.date) {\n        let dateOptions = {\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric',\n            hour12: false\n        };\n\n        let dateStr = typeof Intl === 'undefined' ? message.date : new Intl.DateTimeFormat('default', dateOptions).format(new Date(message.date));\n\n        rows.push(\n            `<div class=\"postal-email-header-key\">Date</div><div class=\"postal-email-header-value postal-email-header-date\" data-date=\"${escapeHtml(\n                message.date\n            )}\">${escapeHtml(dateStr)}</div>`\n        );\n    }\n\n    if (message.to && message.to.length) {\n        rows.push(`<div class=\"postal-email-header-key\">To</div><div class=\"postal-email-header-value\">${formatHtmlAddresses(message.to)}</div>`);\n    }\n\n    if (message.cc && message.cc.length) {\n        rows.push(`<div class=\"postal-email-header-key\">Cc</div><div class=\"postal-email-header-value\">${formatHtmlAddresses(message.cc)}</div>`);\n    }\n\n    if (message.bcc && message.bcc.length) {\n        rows.push(`<div class=\"postal-email-header-key\">Bcc</div><div class=\"postal-email-header-value\">${formatHtmlAddresses(message.bcc)}</div>`);\n    }\n\n    let template = `<div class=\"postal-email-header\">${rows.length ? '<div class=\"postal-email-header-row\">' : ''}${rows.join(\n        '</div>\\n<div class=\"postal-email-header-row\">'\n    )}${rows.length ? '</div>' : ''}</div>`;\n\n    return template;\n}\n", "import { decodeWords } from './decode-strings.js';\n\n/**\n * Converts tokens for a single address into an address object\n *\n * @param {Array} tokens Tokens object\n * @return {Object} Address object\n */\nfunction _handleAddress(tokens) {\n    let token;\n    let isGroup = false;\n    let state = 'text';\n    let address;\n    let addresses = [];\n    let data = {\n        address: [],\n        comment: [],\n        group: [],\n        text: []\n    };\n    let i;\n    let len;\n\n    // Filter out <addresses>, (comments) and regular text\n    for (i = 0, len = tokens.length; i < len; i++) {\n        token = tokens[i];\n        if (token.type === 'operator') {\n            switch (token.value) {\n                case '<':\n                    state = 'address';\n                    break;\n                case '(':\n                    state = 'comment';\n                    break;\n                case ':':\n                    state = 'group';\n                    isGroup = true;\n                    break;\n                default:\n                    state = 'text';\n            }\n        } else if (token.value) {\n            if (state === 'address') {\n                // handle use case where unquoted name includes a \"<\"\n                // Apple Mail truncates everything between an unexpected < and an address\n                // and so will we\n                token.value = token.value.replace(/^[^<]*<\\s*/, '');\n            }\n            data[state].push(token.value);\n        }\n    }\n\n    // If there is no text but a comment, replace the two\n    if (!data.text.length && data.comment.length) {\n        data.text = data.comment;\n        data.comment = [];\n    }\n\n    if (isGroup) {\n        // http://tools.ietf.org/html/rfc2822#appendix-A.1.3\n        data.text = data.text.join(' ');\n        addresses.push({\n            name: decodeWords(data.text || (address && address.name)),\n            group: data.group.length ? addressParser(data.group.join(',')) : []\n        });\n    } else {\n        // If no address was found, try to detect one from regular text\n        if (!data.address.length && data.text.length) {\n            for (i = data.text.length - 1; i >= 0; i--) {\n                if (data.text[i].match(/^[^@\\s]+@[^@\\s]+$/)) {\n                    data.address = data.text.splice(i, 1);\n                    break;\n                }\n            }\n\n            let _regexHandler = function (address) {\n                if (!data.address.length) {\n                    data.address = [address.trim()];\n                    return ' ';\n                } else {\n                    return address;\n                }\n            };\n\n            // still no address\n            if (!data.address.length) {\n                for (i = data.text.length - 1; i >= 0; i--) {\n                    // fixed the regex to parse email address correctly when email address has more than one @\n                    data.text[i] = data.text[i].replace(/\\s*\\b[^@\\s]+@[^\\s]+\\b\\s*/, _regexHandler).trim();\n                    if (data.address.length) {\n                        break;\n                    }\n                }\n            }\n        }\n\n        // If there's still is no text but a comment exixts, replace the two\n        if (!data.text.length && data.comment.length) {\n            data.text = data.comment;\n            data.comment = [];\n        }\n\n        // Keep only the first address occurence, push others to regular text\n        if (data.address.length > 1) {\n            data.text = data.text.concat(data.address.splice(1));\n        }\n\n        // Join values with spaces\n        data.text = data.text.join(' ');\n        data.address = data.address.join(' ');\n\n        if (!data.address && /^=\\?[^=]+?=$/.test(data.text.trim())) {\n            // try to extract words from text content\n            const parsedSubAddresses = addressParser(decodeWords(data.text));\n            if (parsedSubAddresses && parsedSubAddresses.length) {\n                return parsedSubAddresses;\n            }\n        }\n\n        if (!data.address && isGroup) {\n            return [];\n        } else {\n            address = {\n                address: data.address || data.text || '',\n                name: decodeWords(data.text || data.address || '')\n            };\n\n            if (address.address === address.name) {\n                if ((address.address || '').match(/@/)) {\n                    address.name = '';\n                } else {\n                    address.address = '';\n                }\n            }\n\n            addresses.push(address);\n        }\n    }\n\n    return addresses;\n}\n\n/**\n * Creates a Tokenizer object for tokenizing address field strings\n *\n * @constructor\n * @param {String} str Address field string\n */\nclass Tokenizer {\n    constructor(str) {\n        this.str = (str || '').toString();\n        this.operatorCurrent = '';\n        this.operatorExpecting = '';\n        this.node = null;\n        this.escaped = false;\n\n        this.list = [];\n        /**\n         * Operator tokens and which tokens are expected to end the sequence\n         */\n        this.operators = {\n            '\"': '\"',\n            '(': ')',\n            '<': '>',\n            ',': '',\n            ':': ';',\n            // Semicolons are not a legal delimiter per the RFC2822 grammar other\n            // than for terminating a group, but they are also not valid for any\n            // other use in this context.  Given that some mail clients have\n            // historically allowed the semicolon as a delimiter equivalent to the\n            // comma in their UI, it makes sense to treat them the same as a comma\n            // when used outside of a group.\n            ';': ''\n        };\n    }\n\n    /**\n     * Tokenizes the original input string\n     *\n     * @return {Array} An array of operator|text tokens\n     */\n    tokenize() {\n        let chr,\n            list = [];\n        for (let i = 0, len = this.str.length; i < len; i++) {\n            chr = this.str.charAt(i);\n            this.checkChar(chr);\n        }\n\n        this.list.forEach(node => {\n            node.value = (node.value || '').toString().trim();\n            if (node.value) {\n                list.push(node);\n            }\n        });\n\n        return list;\n    }\n\n    /**\n     * Checks if a character is an operator or text and acts accordingly\n     *\n     * @param {String} chr Character from the address field\n     */\n    checkChar(chr) {\n        if (this.escaped) {\n            // ignore next condition blocks\n        } else if (chr === this.operatorExpecting) {\n            this.node = {\n                type: 'operator',\n                value: chr\n            };\n            this.list.push(this.node);\n            this.node = null;\n            this.operatorExpecting = '';\n            this.escaped = false;\n            return;\n        } else if (!this.operatorExpecting && chr in this.operators) {\n            this.node = {\n                type: 'operator',\n                value: chr\n            };\n            this.list.push(this.node);\n            this.node = null;\n            this.operatorExpecting = this.operators[chr];\n            this.escaped = false;\n            return;\n        } else if (['\"', \"'\"].includes(this.operatorExpecting) && chr === '\\\\') {\n            this.escaped = true;\n            return;\n        }\n\n        if (!this.node) {\n            this.node = {\n                type: 'text',\n                value: ''\n            };\n            this.list.push(this.node);\n        }\n\n        if (chr === '\\n') {\n            // Convert newlines to spaces. Carriage return is ignored as \\r and \\n usually\n            // go together anyway and there already is a WS for \\n. Lone \\r means something is fishy.\n            chr = ' ';\n        }\n\n        if (chr.charCodeAt(0) >= 0x21 || [' ', '\\t'].includes(chr)) {\n            // skip command bytes\n            this.node.value += chr;\n        }\n\n        this.escaped = false;\n    }\n}\n\n/**\n * Parses structured e-mail addresses from an address field\n *\n * Example:\n *\n *    'Name <address@domain>'\n *\n * will be converted to\n *\n *     [{name: 'Name', address: 'address@domain'}]\n *\n * @param {String} str Address field\n * @return {Array} An array of address objects\n */\nfunction addressParser(str, options) {\n    options = options || {};\n\n    let tokenizer = new Tokenizer(str);\n    let tokens = tokenizer.tokenize();\n\n    let addresses = [];\n    let address = [];\n    let parsedAddresses = [];\n\n    tokens.forEach(token => {\n        if (token.type === 'operator' && (token.value === ',' || token.value === ';')) {\n            if (address.length) {\n                addresses.push(address);\n            }\n            address = [];\n        } else {\n            address.push(token);\n        }\n    });\n\n    if (address.length) {\n        addresses.push(address);\n    }\n\n    addresses.forEach(address => {\n        address = _handleAddress(address);\n        if (address.length) {\n            parsedAddresses = parsedAddresses.concat(address);\n        }\n    });\n\n    if (options.flatten) {\n        let addresses = [];\n        let walkAddressList = list => {\n            list.forEach(address => {\n                if (address.group) {\n                    return walkAddressList(address.group);\n                } else {\n                    addresses.push(address);\n                }\n            });\n        };\n        walkAddressList(parsedAddresses);\n        return addresses;\n    }\n\n    return parsedAddresses;\n}\n\n// expose to the world\nexport default addressParser;\n", "// Code from: https://gist.githubusercontent.com/jonleighton/958841/raw/fb05a8632efb75d85d43deb593df04367ce48371/base64ArrayBuffer.js\n\n// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then\n// use window.btoa' step. According to my tests, this appears to be a faster approach:\n// http://jsperf.com/encoding-xhr-image-data/5\n\n/*\nMIT LICENSE\n\nCopyright 2011 Jon Leighton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function base64ArrayBuffer(arrayBuffer) {\n    var base64 = '';\n    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n    var bytes = new Uint8Array(arrayBuffer);\n    var byteLength = bytes.byteLength;\n    var byteRemainder = byteLength % 3;\n    var mainLength = byteLength - byteRemainder;\n\n    var a, b, c, d;\n    var chunk;\n\n    // Main loop deals with bytes in chunks of 3\n    for (var i = 0; i < mainLength; i = i + 3) {\n        // Combine the three bytes into a single integer\n        chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n        // Use bitmasks to extract 6-bit segments from the triplet\n        a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n        b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12\n        c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6\n        d = chunk & 63; // 63       = 2^6 - 1\n\n        // Convert the raw binary segments to the appropriate ASCII encoding\n        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n    }\n\n    // Deal with the remaining bytes and padding\n    if (byteRemainder == 1) {\n        chunk = bytes[mainLength];\n\n        a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n        // Set the 4 least significant bits to zero\n        b = (chunk & 3) << 4; // 3   = 2^2 - 1\n\n        base64 += encodings[a] + encodings[b] + '==';\n    } else if (byteRemainder == 2) {\n        chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n        a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n        b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4\n\n        // Set the 2 least significant bits to zero\n        c = (chunk & 15) << 2; // 15    = 2^4 - 1\n\n        base64 += encodings[a] + encodings[b] + encodings[c] + '=';\n    }\n\n    return base64;\n}\n", "import MimeNode from './mime-node.js';\nimport { textToHtml, htmlToText, formatTextHeader, formatHtmlHeader } from './text-format.js';\nimport addressParser from './address-parser.js';\nimport { decodeWords, textEncoder, blobToArrayBuffer } from './decode-strings.js';\nimport { base64ArrayBuffer } from './base64-encoder.js';\n\nexport { addressParser, decodeWords };\n\nexport default class PostalMime {\n    static parse(buf, options) {\n        const parser = new PostalMime(options);\n        return parser.parse(buf);\n    }\n\n    constructor(options) {\n        this.options = options || {};\n\n        this.root = this.currentNode = new MimeNode({\n            postalMime: this\n        });\n        this.boundaries = [];\n\n        this.textContent = {};\n        this.attachments = [];\n\n        this.attachmentEncoding =\n            (this.options.attachmentEncoding || '')\n                .toString()\n                .replace(/[-_\\s]/g, '')\n                .trim()\n                .toLowerCase() || 'arraybuffer';\n\n        this.started = false;\n    }\n\n    async finalize() {\n        // close all pending nodes\n        await this.root.finalize();\n    }\n\n    async processLine(line, isFinal) {\n        let boundaries = this.boundaries;\n\n        // check if this is a mime boundary\n        if (boundaries.length && line.length > 2 && line[0] === 0x2d && line[1] === 0x2d) {\n            // could be a boundary marker\n            for (let i = boundaries.length - 1; i >= 0; i--) {\n                let boundary = boundaries[i];\n\n                if (line.length !== boundary.value.length + 2 && line.length !== boundary.value.length + 4) {\n                    continue;\n                }\n\n                let isTerminator = line.length === boundary.value.length + 4;\n\n                if (isTerminator && (line[line.length - 2] !== 0x2d || line[line.length - 1] !== 0x2d)) {\n                    continue;\n                }\n\n                let boudaryMatches = true;\n                for (let i = 0; i < boundary.value.length; i++) {\n                    if (line[i + 2] !== boundary.value[i]) {\n                        boudaryMatches = false;\n                        break;\n                    }\n                }\n                if (!boudaryMatches) {\n                    continue;\n                }\n\n                if (isTerminator) {\n                    await boundary.node.finalize();\n\n                    this.currentNode = boundary.node.parentNode || this.root;\n                } else {\n                    // finalize any open child nodes (should be just one though)\n                    await boundary.node.finalizeChildNodes();\n\n                    this.currentNode = new MimeNode({\n                        postalMime: this,\n                        parentNode: boundary.node\n                    });\n                }\n\n                if (isFinal) {\n                    return this.finalize();\n                }\n\n                return;\n            }\n        }\n\n        this.currentNode.feed(line);\n\n        if (isFinal) {\n            return this.finalize();\n        }\n    }\n\n    readLine() {\n        let startPos = this.readPos;\n        let endPos = this.readPos;\n\n        let res = () => {\n            return {\n                bytes: new Uint8Array(this.buf, startPos, endPos - startPos),\n                done: this.readPos >= this.av.length\n            };\n        };\n\n        while (this.readPos < this.av.length) {\n            const c = this.av[this.readPos++];\n\n            if (c !== 0x0d && c !== 0x0a) {\n                endPos = this.readPos;\n            }\n\n            if (c === 0x0a) {\n                return res();\n            }\n        }\n\n        return res();\n    }\n\n    async processNodeTree() {\n        // get text nodes\n\n        let textContent = {};\n\n        let textTypes = new Set();\n        let textMap = (this.textMap = new Map());\n\n        let forceRfc822Attachments = this.forceRfc822Attachments();\n\n        let walk = async (node, alternative, related) => {\n            alternative = alternative || false;\n            related = related || false;\n\n            if (!node.contentType.multipart) {\n                // is it inline message/rfc822\n                if (this.isInlineMessageRfc822(node) && !forceRfc822Attachments) {\n                    const subParser = new PostalMime();\n                    node.subMessage = await subParser.parse(node.content);\n\n                    if (!textMap.has(node)) {\n                        textMap.set(node, {});\n                    }\n\n                    let textEntry = textMap.get(node);\n\n                    // default to text if there is no content\n                    if (node.subMessage.text || !node.subMessage.html) {\n                        textEntry.plain = textEntry.plain || [];\n                        textEntry.plain.push({ type: 'subMessage', value: node.subMessage });\n                        textTypes.add('plain');\n                    }\n\n                    if (node.subMessage.html) {\n                        textEntry.html = textEntry.html || [];\n                        textEntry.html.push({ type: 'subMessage', value: node.subMessage });\n                        textTypes.add('html');\n                    }\n\n                    if (subParser.textMap) {\n                        subParser.textMap.forEach((subTextEntry, subTextNode) => {\n                            textMap.set(subTextNode, subTextEntry);\n                        });\n                    }\n\n                    for (let attachment of node.subMessage.attachments || []) {\n                        this.attachments.push(attachment);\n                    }\n                }\n\n                // is it text?\n                else if (this.isInlineTextNode(node)) {\n                    let textType = node.contentType.parsed.value.substr(node.contentType.parsed.value.indexOf('/') + 1);\n\n                    let selectorNode = alternative || node;\n                    if (!textMap.has(selectorNode)) {\n                        textMap.set(selectorNode, {});\n                    }\n\n                    let textEntry = textMap.get(selectorNode);\n                    textEntry[textType] = textEntry[textType] || [];\n                    textEntry[textType].push({ type: 'text', value: node.getTextContent() });\n                    textTypes.add(textType);\n                }\n\n                // is it an attachment\n                else if (node.content) {\n                    const filename = node.contentDisposition.parsed.params.filename || node.contentType.parsed.params.name || null;\n                    const attachment = {\n                        filename: filename ? decodeWords(filename) : null,\n                        mimeType: node.contentType.parsed.value,\n                        disposition: node.contentDisposition.parsed.value || null\n                    };\n\n                    if (related && node.contentId) {\n                        attachment.related = true;\n                    }\n\n                    if (node.contentDescription) {\n                        attachment.description = node.contentDescription;\n                    }\n\n                    if (node.contentId) {\n                        attachment.contentId = node.contentId;\n                    }\n\n                    switch (node.contentType.parsed.value) {\n                        // Special handling for calendar events\n                        case 'text/calendar':\n                        case 'application/ics': {\n                            if (node.contentType.parsed.params.method) {\n                                attachment.method = node.contentType.parsed.params.method.toString().toUpperCase().trim();\n                            }\n\n                            // Enforce into unicode\n                            const decodedText = node.getTextContent().replace(/\\r?\\n/g, '\\n').replace(/\\n*$/, '\\n');\n                            attachment.content = textEncoder.encode(decodedText);\n                            break;\n                        }\n\n                        // Regular attachments\n                        default:\n                            attachment.content = node.content;\n                    }\n\n                    this.attachments.push(attachment);\n                }\n            } else if (node.contentType.multipart === 'alternative') {\n                alternative = node;\n            } else if (node.contentType.multipart === 'related') {\n                related = node;\n            }\n\n            for (let childNode of node.childNodes) {\n                await walk(childNode, alternative, related);\n            }\n        };\n\n        await walk(this.root, false, []);\n\n        textMap.forEach(mapEntry => {\n            textTypes.forEach(textType => {\n                if (!textContent[textType]) {\n                    textContent[textType] = [];\n                }\n\n                if (mapEntry[textType]) {\n                    mapEntry[textType].forEach(textEntry => {\n                        switch (textEntry.type) {\n                            case 'text':\n                                textContent[textType].push(textEntry.value);\n                                break;\n\n                            case 'subMessage':\n                                {\n                                    switch (textType) {\n                                        case 'html':\n                                            textContent[textType].push(formatHtmlHeader(textEntry.value));\n                                            break;\n                                        case 'plain':\n                                            textContent[textType].push(formatTextHeader(textEntry.value));\n                                            break;\n                                    }\n                                }\n                                break;\n                        }\n                    });\n                } else {\n                    let alternativeType;\n                    switch (textType) {\n                        case 'html':\n                            alternativeType = 'plain';\n                            break;\n                        case 'plain':\n                            alternativeType = 'html';\n                            break;\n                    }\n\n                    (mapEntry[alternativeType] || []).forEach(textEntry => {\n                        switch (textEntry.type) {\n                            case 'text':\n                                switch (textType) {\n                                    case 'html':\n                                        textContent[textType].push(textToHtml(textEntry.value));\n                                        break;\n                                    case 'plain':\n                                        textContent[textType].push(htmlToText(textEntry.value));\n                                        break;\n                                }\n                                break;\n\n                            case 'subMessage':\n                                {\n                                    switch (textType) {\n                                        case 'html':\n                                            textContent[textType].push(formatHtmlHeader(textEntry.value));\n                                            break;\n                                        case 'plain':\n                                            textContent[textType].push(formatTextHeader(textEntry.value));\n                                            break;\n                                    }\n                                }\n                                break;\n                        }\n                    });\n                }\n            });\n        });\n\n        Object.keys(textContent).forEach(textType => {\n            textContent[textType] = textContent[textType].join('\\n');\n        });\n\n        this.textContent = textContent;\n    }\n\n    isInlineTextNode(node) {\n        if (node.contentDisposition.parsed.value === 'attachment') {\n            // no matter the type, this is an attachment\n            return false;\n        }\n\n        switch (node.contentType.parsed.value) {\n            case 'text/html':\n            case 'text/plain':\n                return true;\n\n            case 'text/calendar':\n            case 'text/csv':\n            default:\n                return false;\n        }\n    }\n\n    isInlineMessageRfc822(node) {\n        if (node.contentType.parsed.value !== 'message/rfc822') {\n            return false;\n        }\n        let disposition = node.contentDisposition.parsed.value || (this.options.rfc822Attachments ? 'attachment' : 'inline');\n        return disposition === 'inline';\n    }\n\n    // Check if this is a specially crafted report email where message/rfc822 content should not be inlined\n    forceRfc822Attachments() {\n        if (this.options.forceRfc822Attachments) {\n            return true;\n        }\n\n        let forceRfc822Attachments = false;\n        let walk = node => {\n            if (!node.contentType.multipart) {\n                if (['message/delivery-status', 'message/feedback-report'].includes(node.contentType.parsed.value)) {\n                    forceRfc822Attachments = true;\n                }\n            }\n\n            for (let childNode of node.childNodes) {\n                walk(childNode);\n            }\n        };\n        walk(this.root);\n        return forceRfc822Attachments;\n    }\n\n    async resolveStream(stream) {\n        let chunkLen = 0;\n        let chunks = [];\n        const reader = stream.getReader();\n\n        while (true) {\n            const { done, value } = await reader.read();\n            if (done) {\n                break;\n            }\n            chunks.push(value);\n            chunkLen += value.length;\n        }\n\n        const result = new Uint8Array(chunkLen);\n        let chunkPointer = 0;\n        for (let chunk of chunks) {\n            result.set(chunk, chunkPointer);\n            chunkPointer += chunk.length;\n        }\n\n        return result;\n    }\n\n    async parse(buf) {\n        if (this.started) {\n            throw new Error('Can not reuse parser, create a new PostalMime object');\n        }\n        this.started = true;\n\n        // Check if the input is a readable stream and resolve it into an ArrayBuffer\n        if (buf && typeof buf.getReader === 'function') {\n            buf = await this.resolveStream(buf);\n        }\n\n        // Should it throw for an empty value instead of defaulting to an empty ArrayBuffer?\n        buf = buf || new ArrayBuffer(0);\n\n        // Cast string input to Uint8Array\n        if (typeof buf === 'string') {\n            buf = textEncoder.encode(buf);\n        }\n\n        // Cast Blob to ArrayBuffer\n        if (buf instanceof Blob || Object.prototype.toString.call(buf) === '[object Blob]') {\n            buf = await blobToArrayBuffer(buf);\n        }\n\n        // Cast Node.js Buffer object or Uint8Array into ArrayBuffer\n        if (buf.buffer instanceof ArrayBuffer) {\n            buf = new Uint8Array(buf).buffer;\n        }\n\n        this.buf = buf;\n\n        this.av = new Uint8Array(buf);\n        this.readPos = 0;\n\n        while (this.readPos < this.av.length) {\n            const line = this.readLine();\n\n            await this.processLine(line.bytes, line.done);\n        }\n\n        await this.processNodeTree();\n\n        const message = {\n            headers: this.root.headers.map(entry => ({ key: entry.key, value: entry.value })).reverse()\n        };\n\n        for (const key of ['from', 'sender']) {\n            const addressHeader = this.root.headers.find(line => line.key === key);\n            if (addressHeader && addressHeader.value) {\n                const addresses = addressParser(addressHeader.value);\n                if (addresses && addresses.length) {\n                    message[key] = addresses[0];\n                }\n            }\n        }\n\n        for (const key of ['delivered-to', 'return-path']) {\n            const addressHeader = this.root.headers.find(line => line.key === key);\n            if (addressHeader && addressHeader.value) {\n                const addresses = addressParser(addressHeader.value);\n                if (addresses && addresses.length && addresses[0].address) {\n                    const camelKey = key.replace(/\\-(.)/g, (o, c) => c.toUpperCase());\n                    message[camelKey] = addresses[0].address;\n                }\n            }\n        }\n\n        for (const key of ['to', 'cc', 'bcc', 'reply-to']) {\n            const addressHeaders = this.root.headers.filter(line => line.key === key);\n            let addresses = [];\n\n            addressHeaders\n                .filter(entry => entry && entry.value)\n                .map(entry => addressParser(entry.value))\n                .forEach(parsed => (addresses = addresses.concat(parsed || [])));\n\n            if (addresses && addresses.length) {\n                const camelKey = key.replace(/\\-(.)/g, (o, c) => c.toUpperCase());\n                message[camelKey] = addresses;\n            }\n        }\n\n        for (const key of ['subject', 'message-id', 'in-reply-to', 'references']) {\n            const header = this.root.headers.find(line => line.key === key);\n            if (header && header.value) {\n                const camelKey = key.replace(/\\-(.)/g, (o, c) => c.toUpperCase());\n                message[camelKey] = decodeWords(header.value);\n            }\n        }\n\n        let dateHeader = this.root.headers.find(line => line.key === 'date');\n        if (dateHeader) {\n            let date = new Date(dateHeader.value);\n            if (!date || date.toString() === 'Invalid Date') {\n                date = dateHeader.value;\n            } else {\n                // enforce ISO format if seems to be a valid date\n                date = date.toISOString();\n            }\n            message.date = date;\n        }\n\n        if (this.textContent?.html) {\n            message.html = this.textContent.html;\n        }\n\n        if (this.textContent?.plain) {\n            message.text = this.textContent.plain;\n        }\n\n        message.attachments = this.attachments;\n\n        switch (this.attachmentEncoding) {\n            case 'arraybuffer':\n                break;\n\n            case 'base64':\n                for (let attachment of message.attachments || []) {\n                    if (attachment?.content) {\n                        attachment.content = base64ArrayBuffer(attachment.content);\n                        attachment.encoding = 'base64';\n                    }\n                }\n                break;\n\n            case 'utf8':\n                let attachmentDecoder = new TextDecoder('utf8');\n                for (let attachment of message.attachments || []) {\n                    if (attachment?.content) {\n                        attachment.content = attachmentDecoder.decode(attachment.content);\n                        attachment.encoding = 'utf8';\n                    }\n                }\n                break;\n\n            default:\n                throw new Error('Unknwon attachment encoding');\n        }\n\n        return message;\n    }\n}\n", "export const RAW_EMAIL = \"EmailMessage::raw\";\n", "import { red } from \"kleur/colors\";\nimport PostalMime from \"postal-mime\";\nimport { RAW_EMAIL } from \"./constants\";\nimport { type MiniflareEmailMessage as EmailMessage } from \"./email.worker\";\nimport type { Email } from \"postal-mime\";\n\n// Email Routing has some limits on what emails can be responded to, documented at https://developers.cloudflare.com/email-routing/email-workers/reply-email-workers/\nexport async function isEmailReplyable(\n\temail: Email,\n\tincomingEmailHeaders: Headers,\n\tlog: (message: string) => Promise<void>\n): Promise<boolean> {\n\t// The x-auto-response-supress header is set by MS Exchange and some other email services on outgoing email\n\t// to opt-out of automatic responses. If it's set, don't allow the user Worker to reply to the email\n\tconst autoResponseSuppress = incomingEmailHeaders\n\t\t.get(\"x-auto-response-suppress\")\n\t\t?.toLowerCase();\n\tif (autoResponseSuppress !== undefined && autoResponseSuppress !== \"none\") {\n\t\treturn false;\n\t}\n\n\t// The auto-submitted header is set by some services to indicate that the email is auto generated\n\t// If it's set, don't allow the user Worker to reply to the email\n\tconst autoSubmittedValue = incomingEmailHeaders\n\t\t.get(\"auto-submitted\")\n\t\t?.toLowerCase();\n\tif (autoSubmittedValue !== undefined && autoSubmittedValue !== \"no\") {\n\t\treturn false;\n\t}\n\n\tif (email.inReplyTo === undefined && email.references === undefined) {\n\t\t// If this email is _not_ part of an existing reply chain, it can be replied to\n\t\treturn true;\n\t} else if (email.inReplyTo !== undefined && email.references !== undefined) {\n\t\t// If this email _is_ part of an existing reply chain, we need to validate the References header\n\t\t// according to https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4\n\n\t\t// Email Routing does not support more than 100 entries in the References header\n\t\t// Instead of parsing the References header according to https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4\n\t\t// we instead count the occurrences of the `@` symbol, which occurs once per email\n\t\tif ((email.references.match(/@/g)?.length ?? 0) >= 100) {\n\t\t\tawait log(\n\t\t\t\tred(\n\t\t\t\t\t'The incoming email\\'s \"References\" header has more than 100 entries. As such, your Worker cannot respond to this email. Refer to https://developers.cloudflare.com/email-routing/email-workers/reply-email-workers/'\n\t\t\t\t)\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} else {\n\t\t// While this case (one of In-Reply-To or References being empty) is technically allowed by the RFC (https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4)\n\t\t// Email Routing does not support replying to emails with this format\n\t\treturn false;\n\t}\n}\n\n/**\n * This will throw if there's anything wrong with the email (will try to send the same errors as we do in production).\n * It will also add the `References` header if it's not on the reply email.\n * @param email email reply\n * @returns Actual email to be used to reply (with all correct headers)\n */\nexport async function validateReply(\n\tincomingMessage: Email,\n\treplyMessage: EmailMessage\n): Promise<Uint8Array> {\n\tconst rawEmail: ReadableStream<Uint8Array> = replyMessage[RAW_EMAIL];\n\n\tconst rawEmailBuffer = new Uint8Array(\n\t\tawait new Response(rawEmail).arrayBuffer()\n\t);\n\n\tlet parsedReply: Email;\n\ttry {\n\t\tparsedReply = await PostalMime.parse(rawEmailBuffer);\n\t} catch (e) {\n\t\tconst error = e as Error;\n\t\tthrow new Error(`could not parse email: ${error.message}`);\n\t}\n\n\tif (parsedReply.from?.address !== replyMessage.from) {\n\t\tthrow new Error(\"From: header does not match mail from\");\n\t}\n\n\tif (parsedReply.messageId === undefined) {\n\t\tthrow new Error(\"invalid message-id\");\n\t}\n\n\tconst replyEmailHeaders = new Headers(\n\t\tparsedReply.headers.map((header) => [header.key, header.value])\n\t);\n\n\t// Replies from an Email Worker cannot change the Received header\n\tif (replyEmailHeaders.get(\"received\") !== null) {\n\t\tthrow new Error(\"invalid headers set\");\n\t}\n\n\tif (parsedReply.inReplyTo === undefined) {\n\t\tthrow new Error(\"no In-Reply-To header found in reply message\");\n\t}\n\n\tif (parsedReply.inReplyTo !== incomingMessage.messageId) {\n\t\tthrow new Error(\"In-Reply-To does not match original Message-ID\");\n\t}\n\n\tconst incomingReferences = incomingMessage.references ?? \"\";\n\n\tif (parsedReply.references !== undefined) {\n\t\t// if the email has the References header, we just validate it matches the incoming References header and also includes the incoming message ID\n\t\t// Refer to https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4\n\t\tif (\n\t\t\t!(\n\t\t\t\tparsedReply.references.includes(incomingMessage.messageId) &&\n\t\t\t\tparsedReply.references.includes(incomingReferences)\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\"provided References header is invalid\");\n\t\t}\n\t} else {\n\t\t// Otherwise, we need to construct a new References header according to https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4\n\t\tconst replyReferences = `References: ${incomingMessage.messageId}${incomingReferences.length > 0 ? \" \" : \"\"}${incomingReferences}\\r\\n`;\n\n\t\tconst encodedReferences = new TextEncoder().encode(replyReferences);\n\n\t\tconst finalReplyEmail = new Uint8Array(\n\t\t\tencodedReferences.byteLength + rawEmailBuffer.byteLength\n\t\t);\n\n\t\t// prepend References to be in the headers instead of the end of the body\n\t\tfinalReplyEmail.set(encodedReferences, 0);\n\t\tfinalReplyEmail.set(rawEmailBuffer, encodedReferences.byteLength);\n\t\treturn finalReplyEmail;\n\t}\n\n\treturn rawEmailBuffer;\n}\n", "export const STATUS_CODES: Record<number, string | undefined> = {\n\t100: \"Continue\",\n\t101: \"Switching Protocols\",\n\t102: \"Processing\",\n\t103: \"Early Hints\",\n\t200: \"OK\",\n\t201: \"Created\",\n\t202: \"Accepted\",\n\t203: \"Non-Authoritative Information\",\n\t204: \"No Content\",\n\t205: \"Reset Content\",\n\t206: \"Partial Content\",\n\t207: \"Multi-Status\",\n\t208: \"Already Reported\",\n\t226: \"IM Used\",\n\t300: \"Multiple Choices\",\n\t301: \"Moved Permanently\",\n\t302: \"Found\",\n\t303: \"See Other\",\n\t304: \"Not Modified\",\n\t305: \"Use Proxy\",\n\t307: \"Temporary Redirect\",\n\t308: \"Permanent Redirect\",\n\t400: \"Bad Request\",\n\t401: \"Unauthorized\",\n\t402: \"Payment Required\",\n\t403: \"Forbidden\",\n\t404: \"Not Found\",\n\t405: \"Method Not Allowed\",\n\t406: \"Not Acceptable\",\n\t407: \"Proxy Authentication Required\",\n\t408: \"Request Timeout\",\n\t409: \"Conflict\",\n\t410: \"Gone\",\n\t411: \"Length Required\",\n\t412: \"Precondition Failed\",\n\t413: \"Payload Too Large\",\n\t414: \"URI Too Long\",\n\t415: \"Unsupported Media Type\",\n\t416: \"Range Not Satisfiable\",\n\t417: \"Expectation Failed\",\n\t418: \"I'm a Teapot\",\n\t421: \"Misdirected Request\",\n\t422: \"Unprocessable Entity\",\n\t423: \"Locked\",\n\t424: \"Failed Dependency\",\n\t425: \"Too Early\",\n\t426: \"Upgrade Required\",\n\t428: \"Precondition Required\",\n\t429: \"Too Many Requests\",\n\t431: \"Request Header Fields Too Large\",\n\t451: \"Unavailable For Legal Reasons\",\n\t500: \"Internal Server Error\",\n\t501: \"Not Implemented\",\n\t502: \"Bad Gateway\",\n\t503: \"Service Unavailable\",\n\t504: \"Gateway Timeout\",\n\t505: \"HTTP Version Not Supported\",\n\t506: \"Variant Also Negotiates\",\n\t507: \"Insufficient Storage\",\n\t508: \"Loop Detected\",\n\t509: \"Bandwidth Limit Exceeded\",\n\t510: \"Not Extended\",\n\t511: \"Network Authentication Required\",\n};\n", "export interface WorkerRoute {\n\ttarget: string;\n\troute: string;\n\tspecificity: number;\n\n\tprotocol?: string;\n\tallowHostnamePrefix: boolean;\n\thostname: string;\n\tpath: string;\n\tallowPathSuffix: boolean;\n}\n\nexport function matchRoutes(routes: WorkerRoute[], url: URL): string | null {\n\tfor (const route of routes) {\n\t\tif (route.protocol && route.protocol !== url.protocol) continue;\n\n\t\tif (route.allowHostnamePrefix) {\n\t\t\tif (!url.hostname.endsWith(route.hostname)) continue;\n\t\t} else {\n\t\t\tif (url.hostname !== route.hostname) continue;\n\t\t}\n\n\t\tconst path = url.pathname + url.search;\n\t\tif (route.allowPathSuffix) {\n\t\t\tif (!path.startsWith(route.path)) continue;\n\t\t} else {\n\t\t\tif (path !== route.path) continue;\n\t\t}\n\n\t\treturn route.target;\n\t}\n\n\treturn null;\n}\n", "export async function handleScheduled(\n\tparams: URLSearchParams,\n\tservice: Fetcher\n): Promise<Response> {\n\tconst time = params.get(\"time\");\n\tconst scheduledTime = time ? new Date(parseInt(time)) : undefined;\n\tconst cron = params.get(\"cron\") ?? undefined;\n\tconst format = params.get(\"format\");\n\tconst result = await service.scheduled({\n\t\tscheduledTime,\n\t\tcron,\n\t});\n\n\tif (format === \"json\") {\n\t\treturn Response.json(result, {\n\t\t\tstatus: result.outcome === \"ok\" ? 200 : 500,\n\t\t});\n\t}\n\n\treturn new Response(result.outcome, {\n\t\tstatus: result.outcome === \"ok\" ? 200 : 500,\n\t});\n}\n", "import assert from \"node:assert\";\nimport { Buffer } from \"node:buffer\";\nimport { parse } from \"devalue\";\nimport { readPrefix, reduceError } from \"miniflare:shared\";\nimport {\n\tCoreBindings,\n\tCoreHeaders,\n\tisFetcherFetch,\n\tisImagesInput,\n\tisR2ObjectWriteHttpMetadata,\n\tProxyAddresses,\n\tProxyOps,\n} from \"./constants\";\nimport {\n\t__MiniflareFunctionWrapper,\n\tcreateHTTPReducers,\n\tcreateHTTPRevivers,\n\tparseWithReadableStreams,\n\tstringifyWithStreams,\n\tstructuredSerializableReducers,\n\tstructuredSerializableRevivers,\n} from \"./devalue\";\nimport type { PlatformImpl, ReducersRevivers } from \"./devalue\";\n\nconst ENCODER = new TextEncoder();\nconst DECODER = new TextDecoder();\nconst ALLOWED_HOSTNAMES = [\"127.0.0.1\", \"[::1]\", \"localhost\"];\n\nconst WORKERS_PLATFORM_IMPL: PlatformImpl<ReadableStream> = {\n\tBlob,\n\tFile,\n\tHeaders,\n\tRequest,\n\tResponse,\n\n\tisReadableStream(value): value is ReadableStream {\n\t\treturn value instanceof ReadableStream;\n\t},\n\tbufferReadableStream(stream) {\n\t\treturn new Response(stream).arrayBuffer();\n\t},\n\tunbufferReadableStream(buffer) {\n\t\tconst body = new Response(buffer).body;\n\t\tassert(body !== null);\n\t\treturn body;\n\t},\n};\n\n// Helpers taken from `devalue` (unfortunately not exported):\n// https://github.com/Rich-Harris/devalue/blob/50af63e2b2c648f6e6ea29904a14faac25a581fc/src/utils.js#L31-L51\nconst objectProtoNames = Object.getOwnPropertyNames(Object.prototype)\n\t.sort()\n\t.join(\"\\0\");\nfunction isPlainObject(value: unknown) {\n\tconst proto = Object.getPrototypeOf(value);\n\tif (value?.constructor?.name === \"RpcStub\") {\n\t\treturn false;\n\t}\n\tif (isObject(value)) {\n\t\tconst valueAsRecord = value as Record<string, unknown>;\n\t\tif (objectContainsFunctions(valueAsRecord)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn (\n\t\tproto === Object.prototype ||\n\t\tproto === null ||\n\t\tObject.getOwnPropertyNames(proto).sort().join(\"\\0\") === objectProtoNames\n\t);\n}\nfunction objectContainsFunctions(\n\tobj: Record<string | symbol, unknown>\n): boolean {\n\tconst propertyNames = Object.getOwnPropertyNames(obj);\n\tconst propertySymbols = Object.getOwnPropertySymbols(obj);\n\tconst properties = [...propertyNames, ...propertySymbols];\n\n\tfor (const property of properties) {\n\t\tconst entry = obj[property];\n\t\tif (typeof entry === \"function\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (\n\t\t\tisObject(entry) &&\n\t\t\tobjectContainsFunctions(entry as Record<string, unknown>)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction isObject(\n\tvalue: unknown\n): value is Record<string | number | symbol, unknown> {\n\treturn !!value && typeof value === \"object\";\n}\n\nfunction getType(value: unknown) {\n\treturn Object.prototype.toString.call(value).slice(8, -1); // `[object <type>]`\n}\n\nfunction isInternal(value: unknown) {\n\treturn isObject(value) && value[Symbol.for(\"cloudflare:internal-class\")];\n}\n\ntype Env = Record<string, unknown> & {\n\t[CoreBindings.DATA_PROXY_SECRET]: ArrayBuffer;\n};\n\n// TODO(someday): extract `ProxyServer` into component that could be used by\n//  other (user) Durable Objects\nexport class ProxyServer implements DurableObject {\n\tnextHeapAddress = ProxyAddresses.USER_START;\n\treadonly heap = new Map<number, unknown>();\n\n\treducers: ReducersRevivers = {\n\t\t...structuredSerializableReducers,\n\t\t...createHTTPReducers(WORKERS_PLATFORM_IMPL),\n\t\t// Corresponding revivers in `ProxyClient`\n\t\t// `Native` reducer *MUST* be applied last\n\t\tNative: (value) => {\n\t\t\t// For instances of runtime API classes implemented in C++, `getType()`\n\t\t\t// should only ever return `Object`, as none override `Symbol.toStringTag`\n\t\t\t// https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.prototype.tostring\n\t\t\tconst type = getType(value);\n\t\t\tif (\n\t\t\t\t((type === \"Object\" || isInternal(value)) && !isPlainObject(value)) ||\n\t\t\t\ttype === \"Promise\"\n\t\t\t) {\n\t\t\t\tconst address = this.nextHeapAddress++;\n\t\t\t\tthis.heap.set(address, value);\n\t\t\t\tassert(value !== null);\n\t\t\t\tconst name = value?.constructor.name;\n\t\t\t\tconst isFunction = value instanceof __MiniflareFunctionWrapper;\n\t\t\t\treturn [address, name, isFunction];\n\t\t\t}\n\t\t},\n\t};\n\trevivers: ReducersRevivers = {\n\t\t...structuredSerializableRevivers,\n\t\t...createHTTPRevivers(WORKERS_PLATFORM_IMPL),\n\t\t// Corresponding reducers in `ProxyClient`\n\t\tNative: (value) => {\n\t\t\tassert(Array.isArray(value));\n\t\t\tconst [address] = value as unknown[];\n\t\t\tassert(typeof address === \"number\");\n\t\t\tconst heapValue = this.heap.get(address);\n\t\t\tassert(heapValue !== undefined);\n\t\t\t// We should only store `Promise`s on the heap if we attempted to make a\n\t\t\t// synchronous GET/CALL that then returned a `Promise`. In that case,\n\t\t\t// we'll immediately make an asynchronous GET to resolve the `Promise`.\n\t\t\t// Rather than worrying about cleaning up `Promise`s some other way, we\n\t\t\t// just remove them from the heap immediately, since we should never make\n\t\t\t// a request to resolve them again.\n\t\t\tif (heapValue instanceof Promise) this.heap.delete(address);\n\t\t\treturn heapValue;\n\t\t},\n\t};\n\tnativeReviver: ReducersRevivers = { Native: this.revivers.Native };\n\n\tconstructor(\n\t\t_state: DurableObjectState,\n\t\treadonly env: Env\n\t) {\n\t\tthis.heap.set(ProxyAddresses.GLOBAL, globalThis);\n\t\tthis.heap.set(ProxyAddresses.ENV, env);\n\t}\n\n\tasync fetch(request: Request) {\n\t\ttry {\n\t\t\treturn await this.#fetch(request);\n\t\t} catch (e) {\n\t\t\tconst error = reduceError(e);\n\t\t\treturn Response.json(error, {\n\t\t\t\tstatus: 500,\n\t\t\t\theaders: { [CoreHeaders.ERROR_STACK]: \"true\" },\n\t\t\t});\n\t\t}\n\t}\n\n\tasync #fetch(request: Request) {\n\t\t// Validate `Host` header\n\t\tconst hostHeader = request.headers.get(\"Host\");\n\t\tif (hostHeader == null) return new Response(null, { status: 400 });\n\t\ttry {\n\t\t\tconst host = new URL(`http://${hostHeader}`);\n\t\t\tif (!ALLOWED_HOSTNAMES.includes(host.hostname)) {\n\t\t\t\treturn new Response(null, { status: 401 });\n\t\t\t}\n\t\t} catch {\n\t\t\treturn new Response(null, { status: 400 });\n\t\t}\n\n\t\t// Validate secret header to prevent unauthorised access to proxy\n\t\tconst secretHex = request.headers.get(CoreHeaders.OP_SECRET);\n\t\tif (secretHex == null) return new Response(null, { status: 401 });\n\t\tconst expectedSecret = this.env[CoreBindings.DATA_PROXY_SECRET];\n\t\tconst secretBuffer = Buffer.from(secretHex, \"hex\");\n\t\tif (\n\t\t\tsecretBuffer.byteLength !== expectedSecret.byteLength ||\n\t\t\t!crypto.subtle.timingSafeEqual(secretBuffer, expectedSecret)\n\t\t) {\n\t\t\treturn new Response(null, { status: 401 });\n\t\t}\n\n\t\tconst opHeader = request.headers.get(CoreHeaders.OP);\n\t\tconst targetHeader = request.headers.get(CoreHeaders.OP_TARGET);\n\t\tconst keyHeader = request.headers.get(CoreHeaders.OP_KEY);\n\t\tconst allowAsync = request.headers.get(CoreHeaders.OP_SYNC) === null;\n\t\tconst argsSizeHeader = request.headers.get(CoreHeaders.OP_STRINGIFIED_SIZE);\n\t\tconst contentLengthHeader = request.headers.get(\"Content-Length\");\n\n\t\t// Get target to perform operations on\n\t\tif (targetHeader === null) return new Response(null, { status: 400 });\n\n\t\t// If this is a FREE operation, remove the target(s) from the heap\n\t\tif (opHeader === ProxyOps.FREE) {\n\t\t\tfor (const targetValue of targetHeader.split(\",\")) {\n\t\t\t\tconst targetAddress = parseInt(targetValue);\n\t\t\t\tassert(!Number.isNaN(targetAddress));\n\t\t\t\tthis.heap.delete(targetAddress);\n\t\t\t}\n\t\t\treturn new Response(null, { status: 204 });\n\t\t}\n\n\t\t// Revive the target from the heap\n\t\tconst target: Record<string, unknown> = parse(\n\t\t\ttargetHeader,\n\t\t\tthis.nativeReviver\n\t\t);\n\t\tconst targetName = target.constructor.name;\n\n\t\tlet status = 200;\n\t\tlet result: unknown;\n\t\tlet unbufferedRest: ReadableStream | undefined;\n\t\tlet rpcAwaited = false;\n\t\tif (opHeader === ProxyOps.GET) {\n\t\t\t// If no key header is specified, just return the target\n\t\t\tresult = keyHeader === null ? target : target[keyHeader];\n\n\t\t\t// Immediately resolve all RpcProperties\n\t\t\tif (result?.constructor.name === \"RpcProperty\") result = await result;\n\n\t\t\tif (typeof result === \"function\") {\n\t\t\t\t// Calling functions-which-return-functions not yet supported\n\t\t\t\treturn new Response(null, {\n\t\t\t\t\tstatus: 204,\n\t\t\t\t\theaders: { [CoreHeaders.OP_RESULT_TYPE]: \"Function\" },\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (opHeader === ProxyOps.GET_OWN_DESCRIPTOR) {\n\t\t\tif (keyHeader === null) return new Response(null, { status: 400 });\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(target, keyHeader);\n\t\t\tif (descriptor !== undefined) {\n\t\t\t\tresult = <PropertyDescriptor>{\n\t\t\t\t\tconfigurable: descriptor.configurable,\n\t\t\t\t\tenumerable: descriptor.enumerable,\n\t\t\t\t\twritable: descriptor.writable,\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (opHeader === ProxyOps.GET_OWN_KEYS) {\n\t\t\tresult = Object.getOwnPropertyNames(target);\n\t\t} else if (opHeader === ProxyOps.CALL) {\n\t\t\tassert(keyHeader !== null);\n\t\t\tconst func = target[keyHeader];\n\t\t\tassert(typeof func === \"function\");\n\n\t\t\t// See `isFetcherFetch()` comment for why this special\n\t\t\tif (isFetcherFetch(targetName, keyHeader)) {\n\t\t\t\tconst originalUrl =\n\t\t\t\t\trequest.headers.get(CoreHeaders.OP_ORIGINAL_URL) ??\n\t\t\t\t\trequest.headers.get(CoreHeaders.ORIGINAL_URL);\n\t\t\t\tconst url = new URL(originalUrl ?? request.url);\n\t\t\t\t// Create a new request to allow header mutation and use original URL\n\t\t\t\trequest = new Request(url, request);\n\t\t\t\trequest.headers.delete(CoreHeaders.OP_SECRET);\n\t\t\t\trequest.headers.delete(CoreHeaders.OP);\n\t\t\t\trequest.headers.delete(CoreHeaders.OP_TARGET);\n\t\t\t\trequest.headers.delete(CoreHeaders.OP_KEY);\n\t\t\t\trequest.headers.delete(CoreHeaders.OP_ORIGINAL_URL);\n\t\t\t\trequest.headers.delete(CoreHeaders.ORIGINAL_URL);\n\t\t\t\trequest.headers.delete(CoreHeaders.DISABLE_PRETTY_ERROR);\n\t\t\t\treturn func.call(target, request);\n\t\t\t}\n\n\t\t\tlet args: unknown;\n\t\t\tif (argsSizeHeader === null || argsSizeHeader === contentLengthHeader) {\n\t\t\t\t// No unbuffered `ReadableStream`\n\t\t\t\targs = parseWithReadableStreams(\n\t\t\t\t\tWORKERS_PLATFORM_IMPL,\n\t\t\t\t\t{ value: await request.text() },\n\t\t\t\t\tthis.revivers\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Unbuffered `ReadableStream` argument\n\t\t\t\tconst argsSize = parseInt(argsSizeHeader);\n\t\t\t\tassert(!Number.isNaN(argsSize));\n\t\t\t\tassert(request.body !== null);\n\t\t\t\tconst [encodedArgs, rest] = await readPrefix(request.body, argsSize);\n\t\t\t\tunbufferedRest = rest;\n\t\t\t\tconst stringifiedArgs = DECODER.decode(encodedArgs);\n\t\t\t\targs = parseWithReadableStreams(\n\t\t\t\t\tWORKERS_PLATFORM_IMPL,\n\t\t\t\t\t{ value: stringifiedArgs, unbufferedStream: rest },\n\t\t\t\t\tthis.revivers\n\t\t\t\t);\n\t\t\t}\n\t\t\tassert(Array.isArray(args));\n\t\t\ttry {\n\t\t\t\t// See #createMediaProxy() for why this is special\n\t\t\t\tif (isImagesInput(targetName, keyHeader)) {\n\t\t\t\t\tlet transform = func.apply(target, [args[0]]);\n\t\t\t\t\tfor (const operation of args[1]) {\n\t\t\t\t\t\ttransform = transform[operation.type](...operation.arguments);\n\t\t\t\t\t}\n\t\t\t\t\t// We intentionally don't await this `output()` call so that it's treated as a regular promise\n\t\t\t\t\tresult = transform.output(args[2]);\n\t\t\t\t} else if ([\"RpcProperty\", \"RpcStub\"].includes(func.constructor.name)) {\n\t\t\t\t\t// let's resolve RpcPromise instances right away (to support serialization)\n\t\t\t\t\tresult = await func(...args);\n\t\t\t\t\t// Mark that we've awaited this RPC call, so we set the Promise header below\n\t\t\t\t\trpcAwaited = true;\n\t\t\t\t} else {\n\t\t\t\t\tresult = func.apply(target, args);\n\t\t\t\t}\n\n\t\t\t\t// See `isR2ObjectWriteHttpMetadata()` comment for why this special\n\t\t\t\tif (isR2ObjectWriteHttpMetadata(targetName, keyHeader)) {\n\t\t\t\t\tresult = args[0];\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tstatus = 500;\n\t\t\t\tresult = e;\n\t\t\t}\n\t\t} else {\n\t\t\treturn new Response(null, { status: 404 });\n\t\t}\n\n\t\tconst headers = new Headers();\n\t\tif (allowAsync && (result instanceof Promise || rpcAwaited)) {\n\t\t\t// Note we only resolve `Promise`s if we're allowing async operations.\n\t\t\t// Otherwise, we'll treat the `Promise` as a native target. This allows\n\t\t\t// us to use regular HTTP status/headers to indicate whether the `Promise`\n\t\t\t// resolved/rejected and whether the body should be interpreted as a raw\n\t\t\t// `ReadableStream`. Otherwise, we'd need to devise an encoding scheme for\n\t\t\t// this in the body.\n\t\t\ttry {\n\t\t\t\tresult = await result;\n\t\t\t} catch (e) {\n\t\t\t\tstatus = 500;\n\t\t\t\tresult = e;\n\t\t\t}\n\t\t\theaders.append(CoreHeaders.OP_RESULT_TYPE, \"Promise\");\n\t\t}\n\t\t// Make sure we fully-consume the request body if it wasn't used (e.g. key\n\t\t// validation failed). Without this, we'll get a `TypeError: Can't read from\n\t\t// request stream after response has been sent.`\n\t\t// TODO(soon): remove once https://github.com/cloudflare/workerd/issues/918 fixed\n\t\tif (unbufferedRest !== undefined && !unbufferedRest.locked) {\n\t\t\ttry {\n\t\t\t\tawait unbufferedRest.pipeTo(new WritableStream());\n\t\t\t} catch {}\n\t\t}\n\t\tif (result instanceof ReadableStream) {\n\t\t\t// If this was also a resolve `Promise`, the result type header will end\n\t\t\t// up as \"Promise, ReadableStream\"\n\t\t\theaders.append(CoreHeaders.OP_RESULT_TYPE, \"ReadableStream\");\n\t\t\treturn new Response(result, { status, headers });\n\t\t} else {\n\t\t\tconst stringified = await stringifyWithStreams(\n\t\t\t\tWORKERS_PLATFORM_IMPL,\n\t\t\t\tresult,\n\t\t\t\tthis.reducers,\n\t\t\t\t/* allowUnbufferedStream */ allowAsync\n\t\t\t);\n\t\t\tif (stringified.unbufferedStream === undefined) {\n\t\t\t\treturn new Response(stringified.value, { status, headers });\n\t\t\t} else {\n\t\t\t\tconst body = new IdentityTransformStream();\n\t\t\t\tconst encodedValue = ENCODER.encode(stringified.value);\n\t\t\t\tconst encodedSize = encodedValue.byteLength.toString();\n\t\t\t\theaders.set(CoreHeaders.OP_STRINGIFIED_SIZE, encodedSize);\n\t\t\t\tvoid this.#writeWithUnbufferedStream(\n\t\t\t\t\tbody.writable,\n\t\t\t\t\tencodedValue,\n\t\t\t\t\tstringified.unbufferedStream\n\t\t\t\t);\n\t\t\t\treturn new Response(body.readable, { status, headers });\n\t\t\t}\n\t\t}\n\t}\n\n\tasync #writeWithUnbufferedStream(\n\t\twritable: WritableStream,\n\t\tencodedValue: Uint8Array,\n\t\tunbufferedStream: ReadableStream\n\t) {\n\t\tconst writer = writable.getWriter();\n\t\tawait writer.write(encodedValue);\n\t\twriter.releaseLock();\n\t\tawait unbufferedStream.pipeTo(writable);\n\t}\n}\n", "/** @type {Record<string, string>} */\nexport const escaped = {\n\t'<': '\\\\u003C',\n\t'\\\\': '\\\\\\\\',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t',\n\t'\\u2028': '\\\\u2028',\n\t'\\u2029': '\\\\u2029'\n};\n\nexport class DevalueError extends Error {\n\t/**\n\t * @param {string} message\n\t * @param {string[]} keys\n\t * @param {any} [value] - The value that failed to be serialized\n\t * @param {any} [root] - The root value being serialized\n\t */\n\tconstructor(message, keys, value, root) {\n\t\tsuper(message);\n\t\tthis.name = 'DevalueError';\n\t\tthis.path = keys.join('');\n\t\tthis.value = value;\n\t\tthis.root = root;\n\t}\n}\n\n/** @param {any} thing */\nexport function is_primitive(thing) {\n\treturn Object(thing) !== thing;\n}\n\nconst object_proto_names = /* @__PURE__ */ Object.getOwnPropertyNames(\n\tObject.prototype\n)\n\t.sort()\n\t.join('\\0');\n\n/** @param {any} thing */\nexport function is_plain_object(thing) {\n\tconst proto = Object.getPrototypeOf(thing);\n\n\treturn (\n\t\tproto === Object.prototype ||\n\t\tproto === null ||\n\t\tObject.getPrototypeOf(proto) === null ||\n\t\tObject.getOwnPropertyNames(proto).sort().join('\\0') === object_proto_names\n\t);\n}\n\n/** @param {any} thing */\nexport function get_type(thing) {\n\treturn Object.prototype.toString.call(thing).slice(8, -1);\n}\n\n/** @param {string} char */\nfunction get_escaped_char(char) {\n\tswitch (char) {\n\t\tcase '\"':\n\t\t\treturn '\\\\\"';\n\t\tcase '<':\n\t\t\treturn '\\\\u003C';\n\t\tcase '\\\\':\n\t\t\treturn '\\\\\\\\';\n\t\tcase '\\n':\n\t\t\treturn '\\\\n';\n\t\tcase '\\r':\n\t\t\treturn '\\\\r';\n\t\tcase '\\t':\n\t\t\treturn '\\\\t';\n\t\tcase '\\b':\n\t\t\treturn '\\\\b';\n\t\tcase '\\f':\n\t\t\treturn '\\\\f';\n\t\tcase '\\u2028':\n\t\t\treturn '\\\\u2028';\n\t\tcase '\\u2029':\n\t\t\treturn '\\\\u2029';\n\t\tdefault:\n\t\t\treturn char < ' '\n\t\t\t\t? `\\\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}`\n\t\t\t\t: '';\n\t}\n}\n\n/** @param {string} str */\nexport function stringify_string(str) {\n\tlet result = '';\n\tlet last_pos = 0;\n\tconst len = str.length;\n\n\tfor (let i = 0; i < len; i += 1) {\n\t\tconst char = str[i];\n\t\tconst replacement = get_escaped_char(char);\n\t\tif (replacement) {\n\t\t\tresult += str.slice(last_pos, i) + replacement;\n\t\t\tlast_pos = i + 1;\n\t\t}\n\t}\n\n\treturn `\"${last_pos === 0 ? str : result + str.slice(last_pos)}\"`;\n}\n\n/** @param {Record<string | symbol, any>} object */\nexport function enumerable_symbols(object) {\n\treturn Object.getOwnPropertySymbols(object).filter(\n\t\t(symbol) => Object.getOwnPropertyDescriptor(object, symbol).enumerable\n\t);\n}\n\nconst is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/** @param {string} key */\nexport function stringify_key(key) {\n\treturn is_identifier.test(key) ? '.' + key : '[' + JSON.stringify(key) + ']';\n}\n\n/** @param {string} s */\nfunction is_valid_array_index(s) {\n\tif (s.length === 0) return false;\n\tif (s.length > 1 && s.charCodeAt(0) === 48) return false; // leading zero\n\tfor (let i = 0; i < s.length; i++) {\n\t\tconst c = s.charCodeAt(i);\n\t\tif (c < 48 || c > 57) return false;\n\t}\n\t// by this point we know it's a string of digits, but it has to be within the range of valid array indices\n\tconst n = +s;\n\tif (n >= 2 ** 32 - 1) return false;\n\tif (n < 0) return false;\n\treturn true;\n}\n\n/**\n * Finds the populated indices of an array.\n * @param {unknown[]} array\n */\nexport function valid_array_indices(array) {\n\tconst keys = Object.keys(array);\n\tfor (var i = keys.length - 1; i >= 0; i--) {\n\t\tif (is_valid_array_index(keys[i])) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tkeys.length = i + 1;\n\treturn keys;\n}\n", "/**\n * Base64 Encodes an arraybuffer\n * @param {ArrayBuffer} arraybuffer\n * @returns {string}\n */\nexport function encode64(arraybuffer) {\n  const dv = new DataView(arraybuffer);\n  let binaryString = \"\";\n\n  for (let i = 0; i < arraybuffer.byteLength; i++) {\n    binaryString += String.fromCharCode(dv.getUint8(i));\n  }\n\n  return binaryToAscii(binaryString);\n}\n\n/**\n * Decodes a base64 string into an arraybuffer\n * @param {string} string\n * @returns {ArrayBuffer}\n */\nexport function decode64(string) {\n  const binaryString = asciiToBinary(string);\n  const arraybuffer = new ArrayBuffer(binaryString.length);\n  const dv = new DataView(arraybuffer);\n\n  for (let i = 0; i < arraybuffer.byteLength; i++) {\n    dv.setUint8(i, binaryString.charCodeAt(i));\n  }\n\n  return arraybuffer;\n}\n\nconst KEY_STRING =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n/**\n * Substitute for atob since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/atob.js\n *\n * @param {string} data\n * @returns {string}\n */\nfunction asciiToBinary(data) {\n  if (data.length % 4 === 0) {\n    data = data.replace(/==?$/, \"\");\n  }\n\n  let output = \"\";\n  let buffer = 0;\n  let accumulatedBits = 0;\n\n  for (let i = 0; i < data.length; i++) {\n    buffer <<= 6;\n    buffer |= KEY_STRING.indexOf(data[i]);\n    accumulatedBits += 6;\n    if (accumulatedBits === 24) {\n      output += String.fromCharCode((buffer & 0xff0000) >> 16);\n      output += String.fromCharCode((buffer & 0xff00) >> 8);\n      output += String.fromCharCode(buffer & 0xff);\n      buffer = accumulatedBits = 0;\n    }\n  }\n  if (accumulatedBits === 12) {\n    buffer >>= 4;\n    output += String.fromCharCode(buffer);\n  } else if (accumulatedBits === 18) {\n    buffer >>= 2;\n    output += String.fromCharCode((buffer & 0xff00) >> 8);\n    output += String.fromCharCode(buffer & 0xff);\n  }\n  return output;\n}\n\n/**\n * Substitute for btoa since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/btoa.js\n *\n * @param {string} str\n * @returns {string}\n */\nfunction binaryToAscii(str) {\n  let out = \"\";\n  for (let i = 0; i < str.length; i += 3) {\n    /** @type {[number, number, number, number]} */\n    const groupsOfSix = [undefined, undefined, undefined, undefined];\n    groupsOfSix[0] = str.charCodeAt(i) >> 2;\n    groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;\n    if (str.length > i + 1) {\n      groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;\n      groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;\n    }\n    if (str.length > i + 2) {\n      groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;\n      groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;\n    }\n    for (let j = 0; j < groupsOfSix.length; j++) {\n      if (typeof groupsOfSix[j] === \"undefined\") {\n        out += \"=\";\n      } else {\n        out += KEY_STRING[groupsOfSix[j]];\n      }\n    }\n  }\n  return out;\n}\n", "import { decode64 } from './base64.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tSPARSE,\n\tUNDEFINED\n} from './constants.js';\n\n/**\n * Revive a value serialized with `devalue.stringify`\n * @param {string} serialized\n * @param {Record<string, (value: any) => any>} [revivers]\n */\nexport function parse(serialized, revivers) {\n\treturn unflatten(JSON.parse(serialized), revivers);\n}\n\n/**\n * Revive a value flattened with `devalue.stringify`\n * @param {number | any[]} parsed\n * @param {Record<string, (value: any) => any>} [revivers]\n */\nexport function unflatten(parsed, revivers) {\n\tif (typeof parsed === 'number') return hydrate(parsed, true);\n\n\tif (!Array.isArray(parsed) || parsed.length === 0) {\n\t\tthrow new Error('Invalid input');\n\t}\n\n\tconst values = /** @type {any[]} */ (parsed);\n\n\tconst hydrated = Array(values.length);\n\n\t/**\n\t * A set of values currently being hydrated with custom revivers,\n\t * used to detect invalid cyclical dependencies\n\t * @type {Set<number> | null}\n\t */\n\tlet hydrating = null;\n\n\t/**\n\t * @param {number} index\n\t * @returns {any}\n\t */\n\tfunction hydrate(index, standalone = false) {\n\t\tif (index === UNDEFINED) return undefined;\n\t\tif (index === NAN) return NaN;\n\t\tif (index === POSITIVE_INFINITY) return Infinity;\n\t\tif (index === NEGATIVE_INFINITY) return -Infinity;\n\t\tif (index === NEGATIVE_ZERO) return -0;\n\n\t\tif (standalone || typeof index !== 'number') {\n\t\t\tthrow new Error(`Invalid input`);\n\t\t}\n\n\t\tif (index in hydrated) return hydrated[index];\n\n\t\tconst value = values[index];\n\n\t\tif (!value || typeof value !== 'object') {\n\t\t\thydrated[index] = value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tif (typeof value[0] === 'string') {\n\t\t\t\tconst type = value[0];\n\n\t\t\t\tconst reviver =\n\t\t\t\t\trevivers && Object.hasOwn(revivers, type)\n\t\t\t\t\t\t? revivers[type]\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tif (reviver) {\n\t\t\t\t\tlet i = value[1];\n\t\t\t\t\tif (typeof i !== 'number') {\n\t\t\t\t\t\t// if it's not a number, it was serialized by a builtin reviver\n\t\t\t\t\t\t// so we need to munge it into the format expected by a custom reviver\n\t\t\t\t\t\ti = values.push(value[1]) - 1;\n\t\t\t\t\t}\n\n\t\t\t\t\thydrating ??= new Set();\n\n\t\t\t\t\tif (hydrating.has(i)) {\n\t\t\t\t\t\tthrow new Error('Invalid circular reference');\n\t\t\t\t\t}\n\n\t\t\t\t\thydrating.add(i);\n\t\t\t\t\thydrated[index] = reviver(hydrate(i));\n\t\t\t\t\thydrating.delete(i);\n\n\t\t\t\t\treturn hydrated[index];\n\t\t\t\t}\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'Date':\n\t\t\t\t\t\thydrated[index] = new Date(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Set':\n\t\t\t\t\t\tconst set = new Set();\n\t\t\t\t\t\thydrated[index] = set;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 1) {\n\t\t\t\t\t\t\tset.add(hydrate(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Map':\n\t\t\t\t\t\tconst map = new Map();\n\t\t\t\t\t\thydrated[index] = map;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tmap.set(hydrate(value[i]), hydrate(value[i + 1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RegExp':\n\t\t\t\t\t\thydrated[index] = new RegExp(value[1], value[2]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\thydrated[index] = Object(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BigInt':\n\t\t\t\t\t\thydrated[index] = BigInt(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'null':\n\t\t\t\t\t\tconst obj = Object.create(null);\n\t\t\t\t\t\thydrated[index] = obj;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tobj[value[i]] = hydrate(value[i + 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Int8Array':\n\t\t\t\t\tcase 'Uint8Array':\n\t\t\t\t\tcase 'Uint8ClampedArray':\n\t\t\t\t\tcase 'Int16Array':\n\t\t\t\t\tcase 'Uint16Array':\n\t\t\t\t\tcase 'Int32Array':\n\t\t\t\t\tcase 'Uint32Array':\n\t\t\t\t\tcase 'Float32Array':\n\t\t\t\t\tcase 'Float64Array':\n\t\t\t\t\tcase 'BigInt64Array':\n\t\t\t\t\tcase 'BigUint64Array': {\n\t\t\t\t\t\tif (values[value[1]][0] !== 'ArrayBuffer') {\n\t\t\t\t\t\t\t// without this, if we receive malformed input we could\n\t\t\t\t\t\t\t// end up trying to hydrate in a circle or allocate\n\t\t\t\t\t\t\t// huge amounts of memory when we call `new TypedArrayConstructor(buffer)`\n\t\t\t\t\t\t\tthrow new Error('Invalid data');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst TypedArrayConstructor = globalThis[type];\n\t\t\t\t\t\tconst buffer = hydrate(value[1]);\n\t\t\t\t\t\tconst typedArray = new TypedArrayConstructor(buffer);\n\n\t\t\t\t\t\thydrated[index] =\n\t\t\t\t\t\t\tvalue[2] !== undefined\n\t\t\t\t\t\t\t\t? typedArray.subarray(value[2], value[3])\n\t\t\t\t\t\t\t\t: typedArray;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'ArrayBuffer': {\n\t\t\t\t\t\tconst base64 = value[1];\n\t\t\t\t\t\tif (typeof base64 !== 'string') {\n\t\t\t\t\t\t\tthrow new Error('Invalid ArrayBuffer encoding');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst arraybuffer = decode64(base64);\n\t\t\t\t\t\thydrated[index] = arraybuffer;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'Temporal.Duration':\n\t\t\t\t\tcase 'Temporal.Instant':\n\t\t\t\t\tcase 'Temporal.PlainDate':\n\t\t\t\t\tcase 'Temporal.PlainTime':\n\t\t\t\t\tcase 'Temporal.PlainDateTime':\n\t\t\t\t\tcase 'Temporal.PlainMonthDay':\n\t\t\t\t\tcase 'Temporal.PlainYearMonth':\n\t\t\t\t\tcase 'Temporal.ZonedDateTime': {\n\t\t\t\t\t\tconst temporalName = type.slice(9);\n\t\t\t\t\t\t// @ts-expect-error TS doesn't know about Temporal yet\n\t\t\t\t\t\thydrated[index] = Temporal[temporalName].from(value[1]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'URL': {\n\t\t\t\t\t\tconst url = new URL(value[1]);\n\t\t\t\t\t\thydrated[index] = url;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'URLSearchParams': {\n\t\t\t\t\t\tconst url = new URLSearchParams(value[1]);\n\t\t\t\t\t\thydrated[index] = url;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Unknown type ${type}`);\n\t\t\t\t}\n\t\t\t} else if (value[0] === SPARSE) {\n\t\t\t\t// Sparse array encoding: [SPARSE, length, idx, val, idx, val, ...]\n\t\t\t\tconst len = value[1];\n\n\t\t\t\tconst array = new Array(len);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 2; i < value.length; i += 2) {\n\t\t\t\t\tconst idx = value[i];\n\t\t\t\t\tarray[idx] = hydrate(value[i + 1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst array = new Array(value.length);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\tconst n = value[i];\n\t\t\t\t\tif (n === HOLE) continue;\n\n\t\t\t\t\tarray[i] = hydrate(n);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tconst object = {};\n\t\t\thydrated[index] = object;\n\n\t\t\tfor (const key of Object.keys(value)) {\n\t\t\t\tif (key === '__proto__') {\n\t\t\t\t\tthrow new Error('Cannot parse an object with a `__proto__` property');\n\t\t\t\t}\n\n\t\t\t\tconst n = value[key];\n\t\t\t\tobject[key] = hydrate(n);\n\t\t\t}\n\t\t}\n\n\t\treturn hydrated[index];\n\t}\n\n\treturn hydrate(0);\n}\n", "import {\n\tDevalueError,\n\tenumerable_symbols,\n\tget_type,\n\tis_plain_object,\n\tis_primitive,\n\tstringify_key,\n\tstringify_string,\n\tvalid_array_indices\n} from './utils.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tSPARSE,\n\tUNDEFINED\n} from './constants.js';\nimport { encode64 } from './base64.js';\n\n/**\n * Turn a value into a JSON string that can be parsed with `devalue.parse`\n * @param {any} value\n * @param {Record<string, (value: any) => any>} [reducers]\n */\nexport function stringify(value, reducers) {\n\t/** @type {any[]} */\n\tconst stringified = [];\n\n\t/** @type {Map<any, number>} */\n\tconst indexes = new Map();\n\n\t/** @type {Array<{ key: string, fn: (value: any) => any }>} */\n\tconst custom = [];\n\tif (reducers) {\n\t\tfor (const key of Object.getOwnPropertyNames(reducers)) {\n\t\t\tcustom.push({ key, fn: reducers[key] });\n\t\t}\n\t}\n\n\t/** @type {string[]} */\n\tconst keys = [];\n\n\tlet p = 0;\n\n\t/** @param {any} thing */\n\tfunction flatten(thing) {\n\t\tif (thing === undefined) return UNDEFINED;\n\t\tif (Number.isNaN(thing)) return NAN;\n\t\tif (thing === Infinity) return POSITIVE_INFINITY;\n\t\tif (thing === -Infinity) return NEGATIVE_INFINITY;\n\t\tif (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO;\n\n\t\tif (indexes.has(thing)) return indexes.get(thing);\n\n\t\tconst index = p++;\n\t\tindexes.set(thing, index);\n\n\t\tfor (const { key, fn } of custom) {\n\t\t\tconst value = fn(thing);\n\t\t\tif (value) {\n\t\t\t\tstringified[index] = `[\"${key}\",${flatten(value)}]`;\n\t\t\t\treturn index;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof thing === 'function') {\n\t\t\tthrow new DevalueError(`Cannot stringify a function`, keys, thing, value);\n\t\t}\n\n\t\tlet str = '';\n\n\t\tif (is_primitive(thing)) {\n\t\t\tstr = stringify_primitive(thing);\n\t\t} else {\n\t\t\tconst type = get_type(thing);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'Number':\n\t\t\t\tcase 'String':\n\t\t\t\tcase 'Boolean':\n\t\t\t\t\tstr = `[\"Object\",${stringify_primitive(thing)}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'BigInt':\n\t\t\t\t\tstr = `[\"BigInt\",${thing}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Date':\n\t\t\t\t\tconst valid = !isNaN(thing.getDate());\n\t\t\t\t\tstr = `[\"Date\",\"${valid ? thing.toISOString() : ''}\"]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'URL':\n\t\t\t\t\tstr = `[\"URL\",${stringify_string(thing.toString())}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'URLSearchParams':\n\t\t\t\t\tstr = `[\"URLSearchParams\",${stringify_string(thing.toString())}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RegExp':\n\t\t\t\t\tconst { source, flags } = thing;\n\t\t\t\t\tstr = flags\n\t\t\t\t\t\t? `[\"RegExp\",${stringify_string(source)},\"${flags}\"]`\n\t\t\t\t\t\t: `[\"RegExp\",${stringify_string(source)}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Array': {\n\t\t\t\t\t// For dense arrays (no holes), we iterate normally.\n\t\t\t\t\t// When we encounter the first hole, we call Object.keys\n\t\t\t\t\t// to determine the sparseness, then decide between:\n\t\t\t\t\t//   - HOLE encoding: [-2, val, -2, ...] (default)\n\t\t\t\t\t//   - Sparse encoding: [-7, length, idx, val, ...] (for very sparse arrays)\n\t\t\t\t\t// Only the sparse path avoids iterating every slot, which\n\t\t\t\t\t// is what protects against the DoS of e.g. `arr[1000000] = 1`.\n\t\t\t\t\tlet mostly_dense = false;\n\n\t\t\t\t\tstr = '[';\n\n\t\t\t\t\tfor (let i = 0; i < thing.length; i += 1) {\n\t\t\t\t\t\tif (i > 0) str += ',';\n\n\t\t\t\t\t\tif (Object.hasOwn(thing, i)) {\n\t\t\t\t\t\t\tkeys.push(`[${i}]`);\n\t\t\t\t\t\t\tstr += flatten(thing[i]);\n\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t} else if (mostly_dense) {\n\t\t\t\t\t\t\t// Use dense encoding. The heuristic guarantees the\n\t\t\t\t\t\t\t// array is only mildly sparse, so iterating over every\n\t\t\t\t\t\t\t// slot is fine.\n\t\t\t\t\t\t\tstr += HOLE;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Decide between HOLE encoding and sparse encoding.\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// HOLE encoding: each hole is serialized as the HOLE\n\t\t\t\t\t\t\t// sentinel (-2). For example, [, \"a\", ,] becomes\n\t\t\t\t\t\t\t// [-2, 0, -2]. Each hole costs 3 chars (\"-2\" + comma).\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// Sparse encoding: lists only populated indices.\n\t\t\t\t\t\t\t// For example, [, \"a\", ,] becomes [-7, 3, 1, 0] \u2014 the\n\t\t\t\t\t\t\t// -7 sentinel, the array length (3), then index-value\n\t\t\t\t\t\t\t// pairs. This avoids paying per-hole, but each element\n\t\t\t\t\t\t\t// costs extra chars to write its index.\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// The values are the same size either way, so the\n\t\t\t\t\t\t\t// choice comes down to structural overhead:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t//   HOLE overhead:\n\t\t\t\t\t\t\t//     3 chars per hole (\"-2\" + comma)\n\t\t\t\t\t\t\t//     = (L - P) * 3\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t//   Sparse overhead:\n\t\t\t\t\t\t\t//     \"-7,\"          \u2014 3 chars (sparse sentinel + comma)\n\t\t\t\t\t\t\t//     + length + \",\" \u2014 (d + 1) chars (array length + comma)\n\t\t\t\t\t\t\t//     + per element: index + \",\" \u2014 (d + 1) chars\n\t\t\t\t\t\t\t//     = (4 + d) + P * (d + 1)\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// where L is the array length, P is the number of\n\t\t\t\t\t\t\t// populated elements, and d is the number of digits\n\t\t\t\t\t\t\t// in L (an upper bound on the digits in any index).\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// Sparse encoding is cheaper when:\n\t\t\t\t\t\t\t//   (4 + d) + P * (d + 1) < (L - P) * 3\n\t\t\t\t\t\t\tconst populated_keys = valid_array_indices(/** @type {any[]} */ (thing));\n\t\t\t\t\t\t\tconst population = populated_keys.length;\n\t\t\t\t\t\t\tconst d = String(thing.length).length;\n\n\t\t\t\t\t\t\tconst hole_cost = (thing.length - population) * 3;\n\t\t\t\t\t\t\tconst sparse_cost = 4 + d + population * (d + 1);\n\n\t\t\t\t\t\t\tif (hole_cost > sparse_cost) {\n\t\t\t\t\t\t\t\tstr = '[' + SPARSE + ',' + thing.length;\n\t\t\t\t\t\t\t\tfor (let j = 0; j < populated_keys.length; j++) {\n\t\t\t\t\t\t\t\t\tconst key = populated_keys[j];\n\t\t\t\t\t\t\t\t\tkeys.push(`[${key}]`);\n\t\t\t\t\t\t\t\t\tstr += ',' + key + ',' + flatten(thing[key]);\n\t\t\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmostly_dense = true;\n\t\t\t\t\t\t\t\tstr += HOLE;\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\tstr += ']';\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'Set':\n\t\t\t\t\tstr = '[\"Set\"';\n\n\t\t\t\t\tfor (const value of thing) {\n\t\t\t\t\t\tstr += `,${flatten(value)}`;\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += ']';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Map':\n\t\t\t\t\tstr = '[\"Map\"';\n\n\t\t\t\t\tfor (const [key, value] of thing) {\n\t\t\t\t\t\tkeys.push(\n\t\t\t\t\t\t\t`.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstr += `,${flatten(key)},${flatten(value)}`;\n\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += ']';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Int8Array':\n\t\t\t\tcase 'Uint8Array':\n\t\t\t\tcase 'Uint8ClampedArray':\n\t\t\t\tcase 'Int16Array':\n\t\t\t\tcase 'Uint16Array':\n\t\t\t\tcase 'Int32Array':\n\t\t\t\tcase 'Uint32Array':\n\t\t\t\tcase 'Float32Array':\n\t\t\t\tcase 'Float64Array':\n\t\t\t\tcase 'BigInt64Array':\n\t\t\t\tcase 'BigUint64Array': {\n\t\t\t\t\t/** @type {import(\"./types.js\").TypedArray} */\n\t\t\t\t\tconst typedArray = thing;\n\t\t\t\t\tstr = '[\"' + type + '\",' + flatten(typedArray.buffer);\n\n\t\t\t\t\tconst a = thing.byteOffset;\n\t\t\t\t\tconst b = a + thing.byteLength;\n\n\t\t\t\t\t// handle subarrays\n\t\t\t\t\tif (a > 0 || b !== typedArray.buffer.byteLength) {\n\t\t\t\t\t\tconst m = +/(\\d+)/.exec(type)[1] / 8;\n\t\t\t\t\t\tstr += `,${a / m},${b / m}`;\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += ']';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'ArrayBuffer': {\n\t\t\t\t\t/** @type {ArrayBuffer} */\n\t\t\t\t\tconst arraybuffer = thing;\n\t\t\t\t\tconst base64 = encode64(arraybuffer);\n\n\t\t\t\t\tstr = `[\"ArrayBuffer\",\"${base64}\"]`;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'Temporal.Duration':\n\t\t\t\tcase 'Temporal.Instant':\n\t\t\t\tcase 'Temporal.PlainDate':\n\t\t\t\tcase 'Temporal.PlainTime':\n\t\t\t\tcase 'Temporal.PlainDateTime':\n\t\t\t\tcase 'Temporal.PlainMonthDay':\n\t\t\t\tcase 'Temporal.PlainYearMonth':\n\t\t\t\tcase 'Temporal.ZonedDateTime':\n\t\t\t\t\tstr = `[\"${type}\",${stringify_string(thing.toString())}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (!is_plain_object(thing)) {\n\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t`Cannot stringify arbitrary non-POJOs`,\n\t\t\t\t\t\t\tkeys,\n\t\t\t\t\t\t\tthing,\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (enumerable_symbols(thing).length > 0) {\n\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t`Cannot stringify POJOs with symbolic keys`,\n\t\t\t\t\t\t\tkeys,\n\t\t\t\t\t\t\tthing,\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Object.getPrototypeOf(thing) === null) {\n\t\t\t\t\t\tstr = '[\"null\"';\n\t\t\t\t\t\tfor (const key of Object.keys(thing)) {\n\t\t\t\t\t\t\tif (key === '__proto__') {\n\t\t\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t\t\t`Cannot stringify objects with __proto__ keys`,\n\t\t\t\t\t\t\t\t\tkeys,\n\t\t\t\t\t\t\t\t\tthing,\n\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tkeys.push(stringify_key(key));\n\t\t\t\t\t\t\tstr += `,${stringify_string(key)},${flatten(thing[key])}`;\n\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += ']';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstr = '{';\n\t\t\t\t\t\tlet started = false;\n\t\t\t\t\t\tfor (const key of Object.keys(thing)) {\n\t\t\t\t\t\t\tif (key === '__proto__') {\n\t\t\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t\t\t`Cannot stringify objects with __proto__ keys`,\n\t\t\t\t\t\t\t\t\tkeys,\n\t\t\t\t\t\t\t\t\tthing,\n\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (started) str += ',';\n\t\t\t\t\t\t\tstarted = true;\n\t\t\t\t\t\t\tkeys.push(stringify_key(key));\n\t\t\t\t\t\t\tstr += `${stringify_string(key)}:${flatten(thing[key])}`;\n\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += '}';\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstringified[index] = str;\n\t\treturn index;\n\t}\n\n\tconst index = flatten(value);\n\n\t// special case \u2014\u00A0value is represented as a negative index\n\tif (index < 0) return `${index}`;\n\n\treturn `[${stringified.join(',')}]`;\n}\n\n/**\n * @param {any} thing\n * @returns {string}\n */\nfunction stringify_primitive(thing) {\n\tconst type = typeof thing;\n\tif (type === 'string') return stringify_string(thing);\n\tif (thing instanceof String) return stringify_string(thing.toString());\n\tif (thing === void 0) return UNDEFINED.toString();\n\tif (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO.toString();\n\tif (type === 'bigint') return `[\"BigInt\",\"${thing}\"]`;\n\treturn String(thing);\n}\n", "import assert from \"node:assert\";\nimport { Buffer } from \"node:buffer\";\nimport { parse, stringify } from \"devalue\";\nimport type {\n\tBlob as WorkerBlob,\n\tBlobOptions as WorkerBlobOptions,\n\tFile as WorkerFile,\n\tFileOptions as WorkerFileOptions,\n\tHeaders as WorkerHeaders,\n\tReadableStream as WorkerReadableStream,\n\tRequest as WorkerRequest,\n\tResponse as WorkerResponse,\n} from \"@cloudflare/workers-types/experimental\";\n\n// This file implements `devalue` reducers and revivers for structured-\n// serialisable types not supported by default. See serialisable types here:\n// https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types\n\nexport type ReducerReviver = (value: unknown) => unknown;\nexport type ReducersRevivers = Record<string, ReducerReviver>;\n\nconst ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS = [\n\tDataView<ArrayBuffer>,\n\tInt8Array,\n\tUint8Array,\n\tUint8ClampedArray,\n\tInt16Array,\n\tUint16Array,\n\tInt32Array,\n\tUint32Array,\n\tFloat32Array,\n\tFloat64Array,\n\tBigInt64Array,\n\tBigUint64Array,\n] as const;\nconst ALLOWED_ERROR_CONSTRUCTORS = [\n\tEvalError,\n\tRangeError,\n\tReferenceError,\n\tSyntaxError,\n\tTypeError,\n\tURIError,\n\tError, // `Error` last so more specific error subclasses preferred\n] as const;\n\nexport const structuredSerializableReducers: ReducersRevivers = {\n\tArrayBuffer(value) {\n\t\tif (value instanceof ArrayBuffer) {\n\t\t\t// Return single element array so empty `ArrayBuffer` serialised as truthy\n\t\t\treturn [Buffer.from(value).toString(\"base64\")];\n\t\t}\n\t},\n\tArrayBufferView(value) {\n\t\tif (ArrayBuffer.isView(value)) {\n\t\t\tlet name = value.constructor.name;\n\t\t\t// Subclasses like Node.js `Buffer` extend standard typed arrays but\n\t\t\t// aren't available in all runtimes. Normalise to the parent constructor.\n\t\t\tif (\n\t\t\t\t!ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS.some((c) => c.name === name)\n\t\t\t) {\n\t\t\t\tfor (const ctor of ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS) {\n\t\t\t\t\tif (value instanceof ctor) {\n\t\t\t\t\t\tname = ctor.name;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet buf = value.buffer;\n\t\t\tlet off = value.byteOffset;\n\t\t\tif (off !== 0 || buf.byteLength !== value.byteLength) {\n\t\t\t\tbuf = buf.slice(off, off + value.byteLength);\n\t\t\t\toff = 0;\n\t\t\t}\n\t\t\treturn [name, buf, off, value.byteLength];\n\t\t}\n\t},\n\tRegExp(value) {\n\t\tif (value instanceof RegExp) {\n\t\t\tconst { source, flags } = value;\n\t\t\tconst encoded = Buffer.from(source).toString(\"base64\");\n\t\t\treturn flags ? [\"RegExp\", encoded, flags] : [\"RegExp\", encoded];\n\t\t}\n\t},\n\tError(value) {\n\t\tfor (const ctor of ALLOWED_ERROR_CONSTRUCTORS) {\n\t\t\tif (value instanceof ctor && value.name === ctor.name) {\n\t\t\t\treturn [value.name, value.message, value.stack, value.cause];\n\t\t\t}\n\t\t}\n\t\tif (value instanceof Error) {\n\t\t\treturn [\"Error\", value.message, value.stack, value.cause];\n\t\t}\n\t},\n};\nexport const structuredSerializableRevivers: ReducersRevivers = {\n\tArrayBuffer(value) {\n\t\tassert(Array.isArray(value));\n\t\tconst [encoded] = value as unknown[];\n\t\tassert(typeof encoded === \"string\");\n\t\tconst view = Buffer.from(encoded, \"base64\");\n\t\treturn view.buffer.slice(\n\t\t\tview.byteOffset,\n\t\t\tview.byteOffset + view.byteLength\n\t\t);\n\t},\n\tArrayBufferView(value) {\n\t\tassert(Array.isArray(value));\n\t\tconst [name, buffer, byteOffset, byteLength] = value as unknown[];\n\t\tassert(typeof name === \"string\");\n\t\tassert(buffer instanceof ArrayBuffer);\n\t\tassert(typeof byteOffset === \"number\");\n\t\tassert(typeof byteLength === \"number\");\n\t\tconst ctor = (globalThis as Record<string, unknown>)[\n\t\t\tname\n\t\t] as (typeof ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS)[number];\n\t\tassert(ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS.includes(ctor));\n\t\tlet length = byteLength;\n\t\tif (\"BYTES_PER_ELEMENT\" in ctor) length /= ctor.BYTES_PER_ELEMENT;\n\t\treturn new ctor(buffer as ArrayBuffer, byteOffset, length);\n\t},\n\tRegExp(value) {\n\t\tassert(Array.isArray(value));\n\t\tconst [name, encoded, flags] = value;\n\t\tassert(typeof name === \"string\");\n\t\tassert(typeof encoded === \"string\");\n\t\tconst source = Buffer.from(encoded, \"base64\").toString(\"utf-8\");\n\t\treturn new RegExp(source, flags);\n\t},\n\tError(value) {\n\t\tassert(Array.isArray(value));\n\t\tconst [name, message, stack, cause] = value as unknown[];\n\t\tassert(typeof name === \"string\");\n\t\tassert(typeof message === \"string\");\n\t\tassert(stack === undefined || typeof stack === \"string\");\n\t\tconst ctor = (globalThis as Record<string, unknown>)[\n\t\t\tname\n\t\t] as (typeof ALLOWED_ERROR_CONSTRUCTORS)[number];\n\t\tassert(ALLOWED_ERROR_CONSTRUCTORS.includes(ctor));\n\t\tconst error = new ctor(message, { cause });\n\t\terror.stack = stack;\n\t\treturn error;\n\t},\n};\n\n// This file gets imported both by Node and workers. These platforms have\n// different ways of accessing/performing operations required by this code.\n// This interface should be implemented by both platforms to provide this\n// functionality. `RS` is the type of `ReadableStream`.\nexport interface PlatformImpl<RS> {\n\tBlob: typeof WorkerBlob;\n\tFile: typeof WorkerFile;\n\tHeaders: typeof WorkerHeaders;\n\tRequest: typeof WorkerRequest;\n\tResponse: typeof WorkerResponse;\n\n\tisReadableStream(value: unknown): value is RS;\n\tbufferReadableStream(stream: RS): Promise<ArrayBuffer>;\n\tunbufferReadableStream(buffer: ArrayBuffer): RS;\n}\n\nexport function createHTTPReducers(\n\timpl: PlatformImpl<unknown>\n): ReducersRevivers {\n\treturn {\n\t\tHeaders(val) {\n\t\t\tif (val instanceof impl.Headers) return [...val.entries()];\n\t\t},\n\t\tRequest(val) {\n\t\t\tif (val instanceof impl.Request) {\n\t\t\t\treturn [val.method, val.url, val.headers, val.cf, val.body];\n\t\t\t}\n\t\t},\n\t\tResponse(val) {\n\t\t\tif (val instanceof impl.Response) {\n\t\t\t\treturn [val.status, val.statusText, val.headers, val.cf, val.body];\n\t\t\t}\n\t\t},\n\t};\n}\nexport function createHTTPRevivers<RS>(\n\timpl: PlatformImpl<RS>\n): ReducersRevivers {\n\treturn {\n\t\tHeaders(value) {\n\t\t\tassert(typeof value === \"object\" && value !== null);\n\t\t\treturn new impl.Headers(value as string[][]);\n\t\t},\n\t\tRequest(value) {\n\t\t\tassert(Array.isArray(value));\n\t\t\tconst [method, url, headers, cf, body] = value as unknown[];\n\t\t\tassert(typeof method === \"string\");\n\t\t\tassert(typeof url === \"string\");\n\t\t\tassert(headers instanceof impl.Headers);\n\t\t\tassert(body === null || impl.isReadableStream(body));\n\t\t\treturn new impl.Request(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tcf,\n\t\t\t\t// @ts-expect-error `duplex` is not required by `workerd` yet\n\t\t\t\tduplex: body === null ? undefined : \"half\",\n\t\t\t\tbody: body as WorkerReadableStream | null,\n\t\t\t});\n\t\t},\n\t\tResponse(value) {\n\t\t\tassert(Array.isArray(value));\n\t\t\tconst [status, statusText, headers, cf, body] = value as unknown[];\n\t\t\tassert(typeof status === \"number\");\n\t\t\tassert(typeof statusText === \"string\");\n\t\t\tassert(headers instanceof impl.Headers);\n\t\t\tassert(body === null || impl.isReadableStream(body));\n\t\t\treturn new impl.Response(body as WorkerReadableStream | null, {\n\t\t\t\tstatus,\n\t\t\t\tstatusText,\n\t\t\t\theaders,\n\t\t\t\tcf,\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport interface StringifiedWithStream<RS> {\n\tvalue: string;\n\tunbufferedStream?: RS;\n}\n// `devalue` `stringify()` that allows a single stream to be \"unbuffered\", and\n// sent separately. Other streams will be buffered.\nexport function stringifyWithStreams<RS>(\n\timpl: PlatformImpl<RS>,\n\tvalue: unknown,\n\treducers: ReducersRevivers,\n\tallowUnbufferedStream: boolean\n): StringifiedWithStream<RS> | Promise<StringifiedWithStream<RS>> {\n\tlet unbufferedStream: RS | undefined;\n\t// The tricky thing here is that `devalue` `stringify()` is synchronous, and\n\t// doesn't support asynchronous reducers. Assuming we visit values in the same\n\t// order each time, we can use an array to store buffer promises.\n\tconst bufferPromises: Promise<ArrayBuffer>[] = [];\n\tconst streamReducers: ReducersRevivers = {\n\t\tReadableStream(value) {\n\t\t\tif (impl.isReadableStream(value)) {\n\t\t\t\tif (allowUnbufferedStream && unbufferedStream === undefined) {\n\t\t\t\t\tunbufferedStream = value;\n\t\t\t\t} else {\n\t\t\t\t\tbufferPromises.push(impl.bufferReadableStream(value));\n\t\t\t\t}\n\t\t\t\t// Using `true` to signify unbuffered stream, buffered streams will\n\t\t\t\t// have this replaced with an `ArrayBuffer` on the 2nd `stringify()`\n\t\t\t\t// If we don't have any buffer promises, this will encode to the correct\n\t\t\t\t// value, so we don't need to re-`stringify()`.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tBlob(value) {\n\t\t\tif (value instanceof impl.Blob) {\n\t\t\t\t// `Blob`s are always buffered. We can't just serialise with a stream\n\t\t\t\t// here (and recursively use the reducer above), because `workerd`\n\t\t\t\t// doesn't allow us to synchronously reconstruct a `Blob` from a stream:\n\t\t\t\t// its `new Blob([...])` doesn't support `ReadableStream` blob bits.\n\t\t\t\tbufferPromises.push(value.arrayBuffer());\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\n\t\t...reducers,\n\t};\n\tif (typeof value === \"function\") {\n\t\tvalue = new __MiniflareFunctionWrapper(\n\t\t\tvalue as ConstructorParameters<typeof __MiniflareFunctionWrapper>[0]\n\t\t);\n\t}\n\tconst stringifiedValue = stringify(value, streamReducers);\n\t// If we didn't need to buffer anything, we've just encoded correctly. Note\n\t// `unbufferedStream` may be undefined if the `value` didn't contain streams.\n\t// Note also in this case we're returning synchronously, so we can use this\n\t// for synchronous methods too.\n\tif (bufferPromises.length === 0) {\n\t\treturn { value: stringifiedValue, unbufferedStream };\n\t}\n\n\t// Otherwise, wait for buffering to complete, and `stringify()` again with\n\t// a reducer that expects buffers.\n\treturn Promise.all(bufferPromises).then((streamBuffers) => {\n\t\t// Again, we're assuming values are visited in the same order, so `shift()`\n\t\t// will give us the next correct buffer\n\t\tstreamReducers.ReadableStream = function (value) {\n\t\t\tif (impl.isReadableStream(value)) {\n\t\t\t\tif (value === unbufferedStream) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn streamBuffers.shift();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tstreamReducers.Blob = function (value) {\n\t\t\tif (value instanceof impl.Blob) {\n\t\t\t\tconst array: unknown[] = [streamBuffers.shift(), value.type];\n\t\t\t\tif (value instanceof impl.File) {\n\t\t\t\t\tarray.push(value.name, value.lastModified);\n\t\t\t\t}\n\t\t\t\treturn array;\n\t\t\t}\n\t\t};\n\t\tconst stringifiedValue = stringify(value, streamReducers);\n\t\treturn { value: stringifiedValue, unbufferedStream };\n\t});\n}\n\n// functions can't be stringified, so we wrap them into a class that we then use to pseudo-serialize them\n// we also add a proxy and make sure that properties set on the function object are accessible\n// (this is in particular necessary for RpcStubs)\nexport class __MiniflareFunctionWrapper {\n\tconstructor(\n\t\tfnWithProps: ((...args: unknown[]) => unknown) & {\n\t\t\t[key: string | symbol]: unknown;\n\t\t}\n\t) {\n\t\treturn new Proxy(this, {\n\t\t\tget: (_, key) => {\n\t\t\t\tif (key === \"__miniflareWrappedFunction\") return fnWithProps;\n\t\t\t\treturn fnWithProps[key];\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport function parseWithReadableStreams<RS>(\n\timpl: PlatformImpl<RS>,\n\tstringified: StringifiedWithStream<RS>,\n\trevivers: ReducersRevivers\n): unknown {\n\tconst streamRevivers: ReducersRevivers = {\n\t\tReadableStream(value) {\n\t\t\tif (value === true) {\n\t\t\t\tassert(stringified.unbufferedStream !== undefined);\n\t\t\t\treturn stringified.unbufferedStream;\n\t\t\t}\n\t\t\tassert(value instanceof ArrayBuffer);\n\t\t\treturn impl.unbufferReadableStream(value);\n\t\t},\n\t\tBlob(value) {\n\t\t\tassert(Array.isArray(value));\n\t\t\tif (value.length === 2) {\n\t\t\t\t// Blob\n\t\t\t\tconst [buffer, type] = value as unknown[];\n\t\t\t\tassert(buffer instanceof ArrayBuffer);\n\t\t\t\tassert(typeof type === \"string\");\n\t\t\t\tconst opts: WorkerBlobOptions = {};\n\t\t\t\tif (type !== \"\") opts.type = type;\n\t\t\t\treturn new impl.Blob([buffer], opts);\n\t\t\t} else {\n\t\t\t\t// File\n\t\t\t\tassert(value.length === 4);\n\t\t\t\tconst [buffer, type, name, lastModified] = value as unknown[];\n\t\t\t\tassert(buffer instanceof ArrayBuffer);\n\t\t\t\tassert(typeof type === \"string\");\n\t\t\t\tassert(typeof name === \"string\");\n\t\t\t\tassert(typeof lastModified === \"number\");\n\t\t\t\tconst opts: WorkerFileOptions = { lastModified };\n\t\t\t\tif (type !== \"\") opts.type = type;\n\t\t\t\treturn new impl.File([buffer], name, opts);\n\t\t\t}\n\t\t},\n\t\t...revivers,\n\t};\n\n\treturn parse(stringified.value, streamRevivers);\n}\n"],
  "mappings": "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",
  "names": ["LogLevel", "SharedHeaders", "i", "c", "i", "i", "i", "i", "address", "addresses", "i", "i", "assert", "Buffer", "i", "i", "i", "index", "value", "i", "assert", "assert", "value", "assert", "Buffer", "LogLevel", "SharedHeaders"]
}
