@depup/miniflare 4.20260317.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +31 -0
  2. package/bootstrap.js +11 -0
  3. package/changes.json +10 -0
  4. package/dist/local-explorer-ui/assets/Breadcrumbs-7hjI0sYt.js +1 -0
  5. package/dist/local-explorer-ui/assets/TableSelect-_bi6l6Iv.js +25 -0
  6. package/dist/local-explorer-ui/assets/_className-gSkjniQn.js +1 -0
  7. package/dist/local-explorer-ui/assets/_databaseId-DWcfgBis.js +1 -0
  8. package/dist/local-explorer-ui/assets/_namespaceId-8ViM8VDL.js +1 -0
  9. package/dist/local-explorer-ui/assets/_objectId-X6x-JUph.js +1 -0
  10. package/dist/local-explorer-ui/assets/dropdown-DFeFcKfn-BCd_NRZS.js +1 -0
  11. package/dist/local-explorer-ui/assets/index-BFNDwiew.js +42 -0
  12. package/dist/local-explorer-ui/assets/index-CLSFsgi0.js +1 -0
  13. package/dist/local-explorer-ui/assets/index-KG4JeHCX.js +1 -0
  14. package/dist/local-explorer-ui/assets/index-mgoUmSld.css +1 -0
  15. package/dist/local-explorer-ui/assets/table-BUmvaBj8-v-EIZgOz.js +1 -0
  16. package/dist/local-explorer-ui/favicon.svg +3 -0
  17. package/dist/local-explorer-ui/index.html +14 -0
  18. package/dist/src/index.d.ts +8703 -0
  19. package/dist/src/index.js +83666 -0
  20. package/dist/src/index.js.map +6 -0
  21. package/dist/src/shared/dev-registry.worker.js +69801 -0
  22. package/dist/src/shared/dev-registry.worker.js.map +6 -0
  23. package/dist/src/workers/analytics-engine/analytics-engine.worker.js +15 -0
  24. package/dist/src/workers/analytics-engine/analytics-engine.worker.js.map +6 -0
  25. package/dist/src/workers/assets/assets-kv.worker.js +28 -0
  26. package/dist/src/workers/assets/assets-kv.worker.js.map +6 -0
  27. package/dist/src/workers/assets/assets.worker.js +9014 -0
  28. package/dist/src/workers/assets/assets.worker.js.map +6 -0
  29. package/dist/src/workers/assets/router.worker.js +9625 -0
  30. package/dist/src/workers/assets/router.worker.js.map +6 -0
  31. package/dist/src/workers/assets/rpc-proxy.worker.js +29 -0
  32. package/dist/src/workers/assets/rpc-proxy.worker.js.map +6 -0
  33. package/dist/src/workers/browser-rendering/binding.worker.js +129 -0
  34. package/dist/src/workers/browser-rendering/binding.worker.js.map +6 -0
  35. package/dist/src/workers/cache/cache-entry-noop.worker.js +19 -0
  36. package/dist/src/workers/cache/cache-entry-noop.worker.js.map +6 -0
  37. package/dist/src/workers/cache/cache-entry.worker.js +28 -0
  38. package/dist/src/workers/cache/cache-entry.worker.js.map +6 -0
  39. package/dist/src/workers/cache/cache.worker.js +653 -0
  40. package/dist/src/workers/cache/cache.worker.js.map +6 -0
  41. package/dist/src/workers/core/do-wrapper.worker.js +43 -0
  42. package/dist/src/workers/core/do-wrapper.worker.js.map +6 -0
  43. package/dist/src/workers/core/entry.worker.js +4633 -0
  44. package/dist/src/workers/core/entry.worker.js.map +6 -0
  45. package/dist/src/workers/core/strip-cf-connecting-ip.worker.js +11 -0
  46. package/dist/src/workers/core/strip-cf-connecting-ip.worker.js.map +6 -0
  47. package/dist/src/workers/d1/database.worker.js +219 -0
  48. package/dist/src/workers/d1/database.worker.js.map +6 -0
  49. package/dist/src/workers/dispatch-namespace/dispatch-namespace-proxy.worker.js +2271 -0
  50. package/dist/src/workers/dispatch-namespace/dispatch-namespace-proxy.worker.js.map +6 -0
  51. package/dist/src/workers/dispatch-namespace/dispatch-namespace.worker.js +12 -0
  52. package/dist/src/workers/dispatch-namespace/dispatch-namespace.worker.js.map +6 -0
  53. package/dist/src/workers/email/email.worker.js +23 -0
  54. package/dist/src/workers/email/email.worker.js.map +6 -0
  55. package/dist/src/workers/email/send_email.worker.js +3294 -0
  56. package/dist/src/workers/email/send_email.worker.js.map +6 -0
  57. package/dist/src/workers/hello-world/binding.worker.js +19 -0
  58. package/dist/src/workers/hello-world/binding.worker.js.map +6 -0
  59. package/dist/src/workers/hello-world/object.worker.js +14 -0
  60. package/dist/src/workers/hello-world/object.worker.js.map +6 -0
  61. package/dist/src/workers/images/images.worker.js +155 -0
  62. package/dist/src/workers/images/images.worker.js.map +6 -0
  63. package/dist/src/workers/kv/namespace.worker.js +322 -0
  64. package/dist/src/workers/kv/namespace.worker.js.map +6 -0
  65. package/dist/src/workers/kv/sites.worker.js +146 -0
  66. package/dist/src/workers/kv/sites.worker.js.map +6 -0
  67. package/dist/src/workers/local-explorer/explorer.worker.js +5245 -0
  68. package/dist/src/workers/local-explorer/explorer.worker.js.map +6 -0
  69. package/dist/src/workers/pipelines/pipeline.worker.js +10 -0
  70. package/dist/src/workers/pipelines/pipeline.worker.js.map +6 -0
  71. package/dist/src/workers/queues/broker.worker.js +289 -0
  72. package/dist/src/workers/queues/broker.worker.js.map +6 -0
  73. package/dist/src/workers/r2/bucket.worker.js +1134 -0
  74. package/dist/src/workers/r2/bucket.worker.js.map +6 -0
  75. package/dist/src/workers/ratelimit/ratelimit.worker.js +54 -0
  76. package/dist/src/workers/ratelimit/ratelimit.worker.js.map +6 -0
  77. package/dist/src/workers/secrets-store/secret.worker.js +65 -0
  78. package/dist/src/workers/secrets-store/secret.worker.js.map +6 -0
  79. package/dist/src/workers/shared/index.worker.js +693 -0
  80. package/dist/src/workers/shared/index.worker.js.map +6 -0
  81. package/dist/src/workers/shared/object-entry.worker.js +21 -0
  82. package/dist/src/workers/shared/object-entry.worker.js.map +6 -0
  83. package/dist/src/workers/shared/remote-proxy-client.worker.js +2271 -0
  84. package/dist/src/workers/shared/remote-proxy-client.worker.js.map +6 -0
  85. package/dist/src/workers/shared/zod.worker.js +2954 -0
  86. package/dist/src/workers/shared/zod.worker.js.map +6 -0
  87. package/dist/src/workers/workflows/binding.worker.js +2422 -0
  88. package/dist/src/workers/workflows/binding.worker.js.map +6 -0
  89. package/dist/src/workers/workflows/wrapped-binding.worker.js +71 -0
  90. package/dist/src/workers/workflows/wrapped-binding.worker.js.map +6 -0
  91. package/package.json +139 -0
@@ -0,0 +1,4633 @@
1
+ // ../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs
2
+ var FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY = !0;
3
+ typeof process < "u" && ({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {}, isTTY = process.stdout && process.stdout.isTTY);
4
+ var $ = {
5
+ enabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== "dumb" && (FORCE_COLOR != null && FORCE_COLOR !== "0" || isTTY)
6
+ };
7
+ function init(x, y) {
8
+ let rgx = new RegExp(`\\x1b\\[${y}m`, "g"), open = `\x1B[${x}m`, close = `\x1B[${y}m`;
9
+ return function(txt) {
10
+ return !$.enabled || txt == null ? txt : open + (~("" + txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;
11
+ };
12
+ }
13
+ var reset = init(0, 0), bold = init(1, 22), dim = init(2, 22), italic = init(3, 23), underline = init(4, 24), inverse = init(7, 27), hidden = init(8, 28), strikethrough = init(9, 29), black = init(30, 39), red = init(31, 39), green = init(32, 39), yellow = init(33, 39), blue = init(34, 39), magenta = init(35, 39), cyan = init(36, 39), white = init(37, 39), gray = init(90, 39), grey = init(90, 39), bgBlack = init(40, 49), bgRed = init(41, 49), bgGreen = init(42, 49), bgYellow = init(43, 49), bgBlue = init(44, 49), bgMagenta = init(45, 49), bgCyan = init(46, 49), bgWhite = init(47, 49);
14
+
15
+ // src/workers/core/entry.worker.ts
16
+ import { HttpError, LogLevel as LogLevel2, SharedHeaders as SharedHeaders2 } from "miniflare:shared";
17
+
18
+ // src/plugins/core/constants.ts
19
+ var CORE_PLUGIN_NAME = "core", SERVICE_ENTRY = `${CORE_PLUGIN_NAME}:entry`, SERVICE_LOCAL_EXPLORER = `${CORE_PLUGIN_NAME}:local-explorer`, LOCAL_EXPLORER_DISK = `${CORE_PLUGIN_NAME}:local-explorer-disk`, LOCAL_EXPLORER_BASE_PATH = "/cdn-cgi/explorer", LOCAL_EXPLORER_API_PATH = `${LOCAL_EXPLORER_BASE_PATH}/api`, SERVICE_USER_PREFIX = `${CORE_PLUGIN_NAME}:user`, SERVICE_BUILTIN_PREFIX = `${CORE_PLUGIN_NAME}:builtin`, SERVICE_CUSTOM_FETCH_PREFIX = `${CORE_PLUGIN_NAME}:custom-fetch`, SERVICE_CUSTOM_NODE_PREFIX = `${CORE_PLUGIN_NAME}:custom-node`;
20
+
21
+ // src/shared/mime-types.ts
22
+ var compressedByCloudflareFL = /* @__PURE__ */ new Set([
23
+ // 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
24
+ "text/html",
25
+ "text/richtext",
26
+ "text/plain",
27
+ "text/css",
28
+ "text/x-script",
29
+ "text/x-component",
30
+ "text/x-java-source",
31
+ "text/x-markdown",
32
+ "application/javascript",
33
+ "application/x-javascript",
34
+ "text/javascript",
35
+ "text/js",
36
+ "image/x-icon",
37
+ "image/vnd.microsoft.icon",
38
+ "application/x-perl",
39
+ "application/x-httpd-cgi",
40
+ "text/xml",
41
+ "application/xml",
42
+ "application/rss+xml",
43
+ "application/vnd.api+json",
44
+ "application/x-protobuf",
45
+ "application/json",
46
+ "multipart/bag",
47
+ "multipart/mixed",
48
+ "application/xhtml+xml",
49
+ "font/ttf",
50
+ "font/otf",
51
+ "font/x-woff",
52
+ "image/svg+xml",
53
+ "application/vnd.ms-fontobject",
54
+ "application/ttf",
55
+ "application/x-ttf",
56
+ "application/otf",
57
+ "application/x-otf",
58
+ "application/truetype",
59
+ "application/opentype",
60
+ "application/x-opentype",
61
+ "application/font-woff",
62
+ "application/eot",
63
+ "application/font",
64
+ "application/font-sfnt",
65
+ "application/wasm",
66
+ "application/javascript-binast",
67
+ "application/manifest+json",
68
+ "application/ld+json",
69
+ "application/graphql+json",
70
+ "application/geo+json"
71
+ ]);
72
+ function isCompressedByCloudflareFL(contentTypeHeader) {
73
+ if (!contentTypeHeader) return !0;
74
+ let [contentType] = contentTypeHeader.split(";");
75
+ return compressedByCloudflareFL.has(contentType);
76
+ }
77
+
78
+ // src/workers/core/constants.ts
79
+ var CoreHeaders = {
80
+ CUSTOM_FETCH_SERVICE: "MF-Custom-Fetch-Service",
81
+ CUSTOM_NODE_SERVICE: "MF-Custom-Node-Service",
82
+ ORIGINAL_URL: "MF-Original-URL",
83
+ /**
84
+ * Stores the original hostname when using the `upstream` option.
85
+ * When requests are proxied to an upstream, the `Host` header is rewritten
86
+ * to match the upstream. This header preserves the original hostname
87
+ * so Workers can access it if needed.
88
+ */
89
+ ORIGINAL_HOSTNAME: "MF-Original-Hostname",
90
+ PROXY_SHARED_SECRET: "MF-Proxy-Shared-Secret",
91
+ DISABLE_PRETTY_ERROR: "MF-Disable-Pretty-Error",
92
+ ERROR_STACK: "MF-Experimental-Error-Stack",
93
+ ROUTE_OVERRIDE: "MF-Route-Override",
94
+ CF_BLOB: "MF-CF-Blob",
95
+ /** Used by the Vite plugin to pass through the original `sec-fetch-mode` header */
96
+ SEC_FETCH_MODE: "MF-Sec-Fetch-Mode",
97
+ // API Proxy
98
+ OP_SECRET: "MF-Op-Secret",
99
+ OP: "MF-Op",
100
+ OP_TARGET: "MF-Op-Target",
101
+ OP_KEY: "MF-Op-Key",
102
+ OP_SYNC: "MF-Op-Sync",
103
+ OP_STRINGIFIED_SIZE: "MF-Op-Stringified-Size",
104
+ OP_RESULT_TYPE: "MF-Op-Result-Type"
105
+ }, CoreBindings = {
106
+ SERVICE_LOOPBACK: "MINIFLARE_LOOPBACK",
107
+ SERVICE_USER_ROUTE_PREFIX: "MINIFLARE_USER_ROUTE_",
108
+ SERVICE_USER_FALLBACK: "MINIFLARE_USER_FALLBACK",
109
+ TEXT_CUSTOM_SERVICE: "MINIFLARE_CUSTOM_SERVICE",
110
+ IMAGES_SERVICE: "MINIFLARE_IMAGES_SERVICE",
111
+ TEXT_UPSTREAM_URL: "MINIFLARE_UPSTREAM_URL",
112
+ JSON_CF_BLOB: "CF_BLOB",
113
+ JSON_ROUTES: "MINIFLARE_ROUTES",
114
+ JSON_LOG_LEVEL: "MINIFLARE_LOG_LEVEL",
115
+ DATA_LIVE_RELOAD_SCRIPT: "MINIFLARE_LIVE_RELOAD_SCRIPT",
116
+ DURABLE_OBJECT_NAMESPACE_PROXY: "MINIFLARE_PROXY",
117
+ DATA_PROXY_SECRET: "MINIFLARE_PROXY_SECRET",
118
+ DATA_PROXY_SHARED_SECRET: "MINIFLARE_PROXY_SHARED_SECRET",
119
+ TRIGGER_HANDLERS: "TRIGGER_HANDLERS",
120
+ LOG_REQUESTS: "LOG_REQUESTS",
121
+ STRIP_DISABLE_PRETTY_ERROR: "STRIP_DISABLE_PRETTY_ERROR",
122
+ SERVICE_LOCAL_EXPLORER: "MINIFLARE_LOCAL_EXPLORER",
123
+ EXPLORER_DISK: "MINIFLARE_EXPLORER_DISK",
124
+ JSON_LOCAL_EXPLORER_BINDING_MAP: "LOCAL_EXPLORER_BINDING_MAP",
125
+ JSON_LOCAL_EXPLORER_WORKER_NAMES: "LOCAL_EXPLORER_WORKER_NAMES",
126
+ SERVICE_CACHE: "MINIFLARE_CACHE"
127
+ }, ProxyOps = {
128
+ // Get the target or a property of the target
129
+ GET: "GET",
130
+ // Get the descriptor for a property of the target
131
+ GET_OWN_DESCRIPTOR: "GET_OWN_DESCRIPTOR",
132
+ // Get the target's own property names
133
+ GET_OWN_KEYS: "GET_OWN_KEYS",
134
+ // Call a method on the target
135
+ CALL: "CALL",
136
+ // Remove the strong reference to the target on the "heap", allowing it to be
137
+ // garbage collected
138
+ FREE: "FREE"
139
+ }, ProxyAddresses = {
140
+ GLOBAL: 0,
141
+ // globalThis
142
+ ENV: 1,
143
+ // env
144
+ USER_START: 2
145
+ };
146
+ function isFetcherFetch(targetName, key) {
147
+ return (targetName === "Fetcher" || targetName === "DurableObject" || targetName === "WorkerRpc") && key === "fetch";
148
+ }
149
+ function isR2ObjectWriteHttpMetadata(targetName, key) {
150
+ return (targetName === "HeadResult" || targetName === "GetResult") && key === "writeHttpMetadata";
151
+ }
152
+ function isImagesInput(targetName, key) {
153
+ return targetName === "ImagesBindingImpl" && key === "input";
154
+ }
155
+
156
+ // src/workers/core/email.ts
157
+ import assert from "node:assert";
158
+ import { LogLevel, SharedHeaders } from "miniflare:shared";
159
+
160
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/decode-strings.js
161
+ var textEncoder = new TextEncoder(), base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Lookup = new Uint8Array(256);
162
+ for (i = 0; i < base64Chars.length; i++)
163
+ base64Lookup[base64Chars.charCodeAt(i)] = i;
164
+ var i;
165
+ function decodeBase64(base64) {
166
+ let bufferLength = Math.ceil(base64.length / 4) * 3, len = base64.length, p = 0;
167
+ base64.length % 4 === 3 ? bufferLength-- : base64.length % 4 === 2 ? bufferLength -= 2 : base64[base64.length - 1] === "=" && (bufferLength--, base64[base64.length - 2] === "=" && bufferLength--);
168
+ let arrayBuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arrayBuffer);
169
+ for (let i = 0; i < len; i += 4) {
170
+ let encoded1 = base64Lookup[base64.charCodeAt(i)], encoded2 = base64Lookup[base64.charCodeAt(i + 1)], encoded3 = base64Lookup[base64.charCodeAt(i + 2)], encoded4 = base64Lookup[base64.charCodeAt(i + 3)];
171
+ bytes[p++] = encoded1 << 2 | encoded2 >> 4, bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2, bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
172
+ }
173
+ return arrayBuffer;
174
+ }
175
+ function getDecoder(charset) {
176
+ return charset = charset || "utf8", new TextDecoder(charset);
177
+ }
178
+ async function blobToArrayBuffer(blob) {
179
+ if ("arrayBuffer" in blob)
180
+ return await blob.arrayBuffer();
181
+ let fr = new FileReader();
182
+ return new Promise((resolve, reject) => {
183
+ fr.onload = function(e) {
184
+ resolve(e.target.result);
185
+ }, fr.onerror = function(e) {
186
+ reject(fr.error);
187
+ }, fr.readAsArrayBuffer(blob);
188
+ });
189
+ }
190
+ function getHex(c) {
191
+ return c >= 48 && c <= 57 || c >= 97 && c <= 102 || c >= 65 && c <= 70 ? String.fromCharCode(c) : !1;
192
+ }
193
+ function decodeWord(charset, encoding, str) {
194
+ let splitPos = charset.indexOf("*");
195
+ splitPos >= 0 && (charset = charset.substr(0, splitPos)), encoding = encoding.toUpperCase();
196
+ let byteStr;
197
+ if (encoding === "Q") {
198
+ str = str.replace(/=\s+([0-9a-fA-F])/g, "=$1").replace(/[_\s]/g, " ");
199
+ let buf = textEncoder.encode(str), encodedBytes = [];
200
+ for (let i = 0, len = buf.length; i < len; i++) {
201
+ let c = buf[i];
202
+ if (i <= len - 2 && c === 61) {
203
+ let c1 = getHex(buf[i + 1]), c2 = getHex(buf[i + 2]);
204
+ if (c1 && c2) {
205
+ let c3 = parseInt(c1 + c2, 16);
206
+ encodedBytes.push(c3), i += 2;
207
+ continue;
208
+ }
209
+ }
210
+ encodedBytes.push(c);
211
+ }
212
+ byteStr = new ArrayBuffer(encodedBytes.length);
213
+ let dataView = new DataView(byteStr);
214
+ for (let i = 0, len = encodedBytes.length; i < len; i++)
215
+ dataView.setUint8(i, encodedBytes[i]);
216
+ } else encoding === "B" ? byteStr = decodeBase64(str.replace(/[^a-zA-Z0-9\+\/=]+/g, "")) : byteStr = textEncoder.encode(str);
217
+ return getDecoder(charset).decode(byteStr);
218
+ }
219
+ function decodeWords(str) {
220
+ let joinString = !0, done = !1;
221
+ for (; !done; ) {
222
+ let result = (str || "").toString().replace(/(=\?([^?]+)\?[Bb]\?([^?]*)\?=)\s*(?==\?([^?]+)\?[Bb]\?[^?]*\?=)/g, (match, left, chLeft, encodedLeftStr, chRight) => joinString && chLeft === chRight && encodedLeftStr.length % 4 === 0 && !/=$/.test(encodedLeftStr) ? left + "__\0JOIN\0__" : match).replace(/(=\?([^?]+)\?[Qq]\?[^?]*\?=)\s*(?==\?([^?]+)\?[Qq]\?[^?]*\?=)/g, (match, left, chLeft, chRight) => joinString && chLeft === chRight ? left + "__\0JOIN\0__" : match).replace(/(\?=)?__\x00JOIN\x00__(=\?([^?]+)\?[QqBb]\?)?/g, "").replace(/(=\?[^?]+\?[QqBb]\?[^?]*\?=)\s+(?==\?[^?]+\?[QqBb]\?[^?]*\?=)/g, "$1").replace(/=\?([\w_\-*]+)\?([QqBb])\?([^?]*)\?=/g, (m, charset, encoding, text) => decodeWord(charset, encoding, text));
223
+ if (joinString && result.indexOf("\uFFFD") >= 0)
224
+ joinString = !1;
225
+ else
226
+ return result;
227
+ }
228
+ }
229
+ function decodeURIComponentWithCharset(encodedStr, charset) {
230
+ charset = charset || "utf-8";
231
+ let encodedBytes = [];
232
+ for (let i = 0; i < encodedStr.length; i++) {
233
+ let c = encodedStr.charAt(i);
234
+ if (c === "%" && /^[a-f0-9]{2}/i.test(encodedStr.substr(i + 1, 2))) {
235
+ let byte = encodedStr.substr(i + 1, 2);
236
+ i += 2, encodedBytes.push(parseInt(byte, 16));
237
+ } else if (c.charCodeAt(0) > 126) {
238
+ c = textEncoder.encode(c);
239
+ for (let j = 0; j < c.length; j++)
240
+ encodedBytes.push(c[j]);
241
+ } else
242
+ encodedBytes.push(c.charCodeAt(0));
243
+ }
244
+ let byteStr = new ArrayBuffer(encodedBytes.length), dataView = new DataView(byteStr);
245
+ for (let i = 0, len = encodedBytes.length; i < len; i++)
246
+ dataView.setUint8(i, encodedBytes[i]);
247
+ return getDecoder(charset).decode(byteStr);
248
+ }
249
+ function decodeParameterValueContinuations(header) {
250
+ let paramKeys = /* @__PURE__ */ new Map();
251
+ Object.keys(header.params).forEach((key) => {
252
+ let match = key.match(/\*((\d+)\*?)?$/);
253
+ if (!match)
254
+ return;
255
+ let actualKey = key.substr(0, match.index).toLowerCase(), nr = Number(match[2]) || 0, paramVal;
256
+ paramKeys.has(actualKey) ? paramVal = paramKeys.get(actualKey) : (paramVal = {
257
+ charset: !1,
258
+ values: []
259
+ }, paramKeys.set(actualKey, paramVal));
260
+ let value = header.params[key];
261
+ nr === 0 && match[0].charAt(match[0].length - 1) === "*" && (match = value.match(/^([^']*)'[^']*'(.*)$/)) && (paramVal.charset = match[1] || "utf-8", value = match[2]), paramVal.values.push({ nr, value }), delete header.params[key];
262
+ }), paramKeys.forEach((paramVal, key) => {
263
+ header.params[key] = decodeURIComponentWithCharset(
264
+ paramVal.values.sort((a, b) => a.nr - b.nr).map((a) => a.value).join(""),
265
+ paramVal.charset
266
+ );
267
+ });
268
+ }
269
+
270
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/pass-through-decoder.js
271
+ var PassThroughDecoder = class {
272
+ constructor() {
273
+ this.chunks = [];
274
+ }
275
+ update(line) {
276
+ this.chunks.push(line), this.chunks.push(`
277
+ `);
278
+ }
279
+ finalize() {
280
+ return blobToArrayBuffer(new Blob(this.chunks, { type: "application/octet-stream" }));
281
+ }
282
+ };
283
+
284
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/base64-decoder.js
285
+ var Base64Decoder = class {
286
+ constructor(opts) {
287
+ opts = opts || {}, this.decoder = opts.decoder || new TextDecoder(), this.maxChunkSize = 100 * 1024, this.chunks = [], this.remainder = "";
288
+ }
289
+ update(buffer) {
290
+ let str = this.decoder.decode(buffer);
291
+ if (/[^a-zA-Z0-9+\/]/.test(str) && (str = str.replace(/[^a-zA-Z0-9+\/]+/g, "")), this.remainder += str, this.remainder.length >= this.maxChunkSize) {
292
+ let allowedBytes = Math.floor(this.remainder.length / 4) * 4, base64Str;
293
+ allowedBytes === this.remainder.length ? (base64Str = this.remainder, this.remainder = "") : (base64Str = this.remainder.substr(0, allowedBytes), this.remainder = this.remainder.substr(allowedBytes)), base64Str.length && this.chunks.push(decodeBase64(base64Str));
294
+ }
295
+ }
296
+ finalize() {
297
+ return this.remainder && !/^=+$/.test(this.remainder) && this.chunks.push(decodeBase64(this.remainder)), blobToArrayBuffer(new Blob(this.chunks, { type: "application/octet-stream" }));
298
+ }
299
+ };
300
+
301
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/qp-decoder.js
302
+ var QPDecoder = class {
303
+ constructor(opts) {
304
+ opts = opts || {}, this.decoder = opts.decoder || new TextDecoder(), this.maxChunkSize = 100 * 1024, this.remainder = "", this.chunks = [];
305
+ }
306
+ decodeQPBytes(encodedBytes) {
307
+ let buf = new ArrayBuffer(encodedBytes.length), dataView = new DataView(buf);
308
+ for (let i = 0, len = encodedBytes.length; i < len; i++)
309
+ dataView.setUint8(i, parseInt(encodedBytes[i], 16));
310
+ return buf;
311
+ }
312
+ decodeChunks(str) {
313
+ str = str.replace(/=\r?\n/g, "");
314
+ let list = str.split(/(?==)/), encodedBytes = [];
315
+ for (let part of list) {
316
+ if (part.charAt(0) !== "=") {
317
+ encodedBytes.length && (this.chunks.push(this.decodeQPBytes(encodedBytes)), encodedBytes = []), this.chunks.push(part);
318
+ continue;
319
+ }
320
+ if (part.length === 3) {
321
+ encodedBytes.push(part.substr(1));
322
+ continue;
323
+ }
324
+ part.length > 3 && (encodedBytes.push(part.substr(1, 2)), this.chunks.push(this.decodeQPBytes(encodedBytes)), encodedBytes = [], part = part.substr(3), this.chunks.push(part));
325
+ }
326
+ encodedBytes.length && (this.chunks.push(this.decodeQPBytes(encodedBytes)), encodedBytes = []);
327
+ }
328
+ update(buffer) {
329
+ let str = this.decoder.decode(buffer) + `
330
+ `;
331
+ if (str = this.remainder + str, str.length < this.maxChunkSize) {
332
+ this.remainder = str;
333
+ return;
334
+ }
335
+ this.remainder = "";
336
+ let partialEnding = str.match(/=[a-fA-F0-9]?$/);
337
+ if (partialEnding) {
338
+ if (partialEnding.index === 0) {
339
+ this.remainder = str;
340
+ return;
341
+ }
342
+ this.remainder = str.substr(partialEnding.index), str = str.substr(0, partialEnding.index);
343
+ }
344
+ this.decodeChunks(str);
345
+ }
346
+ finalize() {
347
+ return this.remainder.length && (this.decodeChunks(this.remainder), this.remainder = ""), blobToArrayBuffer(new Blob(this.chunks, { type: "application/octet-stream" }));
348
+ }
349
+ };
350
+
351
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/mime-node.js
352
+ var MimeNode = class {
353
+ constructor(opts) {
354
+ opts = opts || {}, this.postalMime = opts.postalMime, this.root = !!opts.parentNode, this.childNodes = [], opts.parentNode && opts.parentNode.childNodes.push(this), this.state = "header", this.headerLines = [], this.contentType = {
355
+ value: "text/plain",
356
+ default: !0
357
+ }, this.contentTransferEncoding = {
358
+ value: "8bit"
359
+ }, this.contentDisposition = {
360
+ value: ""
361
+ }, this.headers = [], this.contentDecoder = !1;
362
+ }
363
+ setupContentDecoder(transferEncoding) {
364
+ /base64/i.test(transferEncoding) ? this.contentDecoder = new Base64Decoder() : /quoted-printable/i.test(transferEncoding) ? this.contentDecoder = new QPDecoder({ decoder: getDecoder(this.contentType.parsed.params.charset) }) : this.contentDecoder = new PassThroughDecoder();
365
+ }
366
+ async finalize() {
367
+ if (this.state === "finished")
368
+ return;
369
+ this.state === "header" && this.processHeaders();
370
+ let boundaries = this.postalMime.boundaries;
371
+ for (let i = boundaries.length - 1; i >= 0; i--)
372
+ if (boundaries[i].node === this) {
373
+ boundaries.splice(i, 1);
374
+ break;
375
+ }
376
+ await this.finalizeChildNodes(), this.content = this.contentDecoder ? await this.contentDecoder.finalize() : null, this.state = "finished";
377
+ }
378
+ async finalizeChildNodes() {
379
+ for (let childNode of this.childNodes)
380
+ await childNode.finalize();
381
+ }
382
+ parseStructuredHeader(str) {
383
+ let response = {
384
+ value: !1,
385
+ params: {}
386
+ }, key = !1, value = "", stage = "value", quote = !1, escaped = !1, chr;
387
+ for (let i = 0, len = str.length; i < len; i++)
388
+ switch (chr = str.charAt(i), stage) {
389
+ case "key":
390
+ if (chr === "=") {
391
+ key = value.trim().toLowerCase(), stage = "value", value = "";
392
+ break;
393
+ }
394
+ value += chr;
395
+ break;
396
+ case "value":
397
+ if (escaped)
398
+ value += chr;
399
+ else if (chr === "\\") {
400
+ escaped = !0;
401
+ continue;
402
+ } else quote && chr === quote ? quote = !1 : !quote && chr === '"' ? quote = chr : !quote && chr === ";" ? (key === !1 ? response.value = value.trim() : response.params[key] = value.trim(), stage = "key", value = "") : value += chr;
403
+ escaped = !1;
404
+ break;
405
+ }
406
+ return value = value.trim(), stage === "value" ? key === !1 ? response.value = value : response.params[key] = value : value && (response.params[value.toLowerCase()] = ""), response.value && (response.value = response.value.toLowerCase()), decodeParameterValueContinuations(response), response;
407
+ }
408
+ decodeFlowedText(str, delSp) {
409
+ return str.split(/\r?\n/).reduce((previousValue, currentValue) => / $/.test(previousValue) && !/(^|\n)-- $/.test(previousValue) ? delSp ? previousValue.slice(0, -1) + currentValue : previousValue + currentValue : previousValue + `
410
+ ` + currentValue).replace(/^ /gm, "");
411
+ }
412
+ getTextContent() {
413
+ if (!this.content)
414
+ return "";
415
+ let str = getDecoder(this.contentType.parsed.params.charset).decode(this.content);
416
+ return /^flowed$/i.test(this.contentType.parsed.params.format) && (str = this.decodeFlowedText(str, /^yes$/i.test(this.contentType.parsed.params.delsp))), str;
417
+ }
418
+ processHeaders() {
419
+ for (let i = this.headerLines.length - 1; i >= 0; i--) {
420
+ let line = this.headerLines[i];
421
+ if (i && /^\s/.test(line))
422
+ this.headerLines[i - 1] += `
423
+ ` + line, this.headerLines.splice(i, 1);
424
+ else {
425
+ line = line.replace(/\s+/g, " ");
426
+ let sep = line.indexOf(":"), key = sep < 0 ? line.trim() : line.substr(0, sep).trim(), value = sep < 0 ? "" : line.substr(sep + 1).trim();
427
+ switch (this.headers.push({ key: key.toLowerCase(), originalKey: key, value }), key.toLowerCase()) {
428
+ case "content-type":
429
+ this.contentType.default && (this.contentType = { value, parsed: {} });
430
+ break;
431
+ case "content-transfer-encoding":
432
+ this.contentTransferEncoding = { value, parsed: {} };
433
+ break;
434
+ case "content-disposition":
435
+ this.contentDisposition = { value, parsed: {} };
436
+ break;
437
+ case "content-id":
438
+ this.contentId = value;
439
+ break;
440
+ case "content-description":
441
+ this.contentDescription = value;
442
+ break;
443
+ }
444
+ }
445
+ }
446
+ this.contentType.parsed = this.parseStructuredHeader(this.contentType.value), this.contentType.multipart = /^multipart\//i.test(this.contentType.parsed.value) ? this.contentType.parsed.value.substr(this.contentType.parsed.value.indexOf("/") + 1) : !1, this.contentType.multipart && this.contentType.parsed.params.boundary && this.postalMime.boundaries.push({
447
+ value: textEncoder.encode(this.contentType.parsed.params.boundary),
448
+ node: this
449
+ }), this.contentDisposition.parsed = this.parseStructuredHeader(this.contentDisposition.value), this.contentTransferEncoding.encoding = this.contentTransferEncoding.value.toLowerCase().split(/[^\w-]/).shift(), this.setupContentDecoder(this.contentTransferEncoding.encoding);
450
+ }
451
+ feed(line) {
452
+ switch (this.state) {
453
+ case "header":
454
+ if (!line.length)
455
+ return this.state = "body", this.processHeaders();
456
+ this.headerLines.push(getDecoder().decode(line));
457
+ break;
458
+ case "body":
459
+ this.contentDecoder.update(line);
460
+ }
461
+ }
462
+ };
463
+
464
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/html-entities.js
465
+ var htmlEntities = {
466
+ "&AElig": "\xC6",
467
+ "&AElig;": "\xC6",
468
+ "&AMP": "&",
469
+ "&AMP;": "&",
470
+ "&Aacute": "\xC1",
471
+ "&Aacute;": "\xC1",
472
+ "&Abreve;": "\u0102",
473
+ "&Acirc": "\xC2",
474
+ "&Acirc;": "\xC2",
475
+ "&Acy;": "\u0410",
476
+ "&Afr;": "\u{1D504}",
477
+ "&Agrave": "\xC0",
478
+ "&Agrave;": "\xC0",
479
+ "&Alpha;": "\u0391",
480
+ "&Amacr;": "\u0100",
481
+ "&And;": "\u2A53",
482
+ "&Aogon;": "\u0104",
483
+ "&Aopf;": "\u{1D538}",
484
+ "&ApplyFunction;": "\u2061",
485
+ "&Aring": "\xC5",
486
+ "&Aring;": "\xC5",
487
+ "&Ascr;": "\u{1D49C}",
488
+ "&Assign;": "\u2254",
489
+ "&Atilde": "\xC3",
490
+ "&Atilde;": "\xC3",
491
+ "&Auml": "\xC4",
492
+ "&Auml;": "\xC4",
493
+ "&Backslash;": "\u2216",
494
+ "&Barv;": "\u2AE7",
495
+ "&Barwed;": "\u2306",
496
+ "&Bcy;": "\u0411",
497
+ "&Because;": "\u2235",
498
+ "&Bernoullis;": "\u212C",
499
+ "&Beta;": "\u0392",
500
+ "&Bfr;": "\u{1D505}",
501
+ "&Bopf;": "\u{1D539}",
502
+ "&Breve;": "\u02D8",
503
+ "&Bscr;": "\u212C",
504
+ "&Bumpeq;": "\u224E",
505
+ "&CHcy;": "\u0427",
506
+ "&COPY": "\xA9",
507
+ "&COPY;": "\xA9",
508
+ "&Cacute;": "\u0106",
509
+ "&Cap;": "\u22D2",
510
+ "&CapitalDifferentialD;": "\u2145",
511
+ "&Cayleys;": "\u212D",
512
+ "&Ccaron;": "\u010C",
513
+ "&Ccedil": "\xC7",
514
+ "&Ccedil;": "\xC7",
515
+ "&Ccirc;": "\u0108",
516
+ "&Cconint;": "\u2230",
517
+ "&Cdot;": "\u010A",
518
+ "&Cedilla;": "\xB8",
519
+ "&CenterDot;": "\xB7",
520
+ "&Cfr;": "\u212D",
521
+ "&Chi;": "\u03A7",
522
+ "&CircleDot;": "\u2299",
523
+ "&CircleMinus;": "\u2296",
524
+ "&CirclePlus;": "\u2295",
525
+ "&CircleTimes;": "\u2297",
526
+ "&ClockwiseContourIntegral;": "\u2232",
527
+ "&CloseCurlyDoubleQuote;": "\u201D",
528
+ "&CloseCurlyQuote;": "\u2019",
529
+ "&Colon;": "\u2237",
530
+ "&Colone;": "\u2A74",
531
+ "&Congruent;": "\u2261",
532
+ "&Conint;": "\u222F",
533
+ "&ContourIntegral;": "\u222E",
534
+ "&Copf;": "\u2102",
535
+ "&Coproduct;": "\u2210",
536
+ "&CounterClockwiseContourIntegral;": "\u2233",
537
+ "&Cross;": "\u2A2F",
538
+ "&Cscr;": "\u{1D49E}",
539
+ "&Cup;": "\u22D3",
540
+ "&CupCap;": "\u224D",
541
+ "&DD;": "\u2145",
542
+ "&DDotrahd;": "\u2911",
543
+ "&DJcy;": "\u0402",
544
+ "&DScy;": "\u0405",
545
+ "&DZcy;": "\u040F",
546
+ "&Dagger;": "\u2021",
547
+ "&Darr;": "\u21A1",
548
+ "&Dashv;": "\u2AE4",
549
+ "&Dcaron;": "\u010E",
550
+ "&Dcy;": "\u0414",
551
+ "&Del;": "\u2207",
552
+ "&Delta;": "\u0394",
553
+ "&Dfr;": "\u{1D507}",
554
+ "&DiacriticalAcute;": "\xB4",
555
+ "&DiacriticalDot;": "\u02D9",
556
+ "&DiacriticalDoubleAcute;": "\u02DD",
557
+ "&DiacriticalGrave;": "`",
558
+ "&DiacriticalTilde;": "\u02DC",
559
+ "&Diamond;": "\u22C4",
560
+ "&DifferentialD;": "\u2146",
561
+ "&Dopf;": "\u{1D53B}",
562
+ "&Dot;": "\xA8",
563
+ "&DotDot;": "\u20DC",
564
+ "&DotEqual;": "\u2250",
565
+ "&DoubleContourIntegral;": "\u222F",
566
+ "&DoubleDot;": "\xA8",
567
+ "&DoubleDownArrow;": "\u21D3",
568
+ "&DoubleLeftArrow;": "\u21D0",
569
+ "&DoubleLeftRightArrow;": "\u21D4",
570
+ "&DoubleLeftTee;": "\u2AE4",
571
+ "&DoubleLongLeftArrow;": "\u27F8",
572
+ "&DoubleLongLeftRightArrow;": "\u27FA",
573
+ "&DoubleLongRightArrow;": "\u27F9",
574
+ "&DoubleRightArrow;": "\u21D2",
575
+ "&DoubleRightTee;": "\u22A8",
576
+ "&DoubleUpArrow;": "\u21D1",
577
+ "&DoubleUpDownArrow;": "\u21D5",
578
+ "&DoubleVerticalBar;": "\u2225",
579
+ "&DownArrow;": "\u2193",
580
+ "&DownArrowBar;": "\u2913",
581
+ "&DownArrowUpArrow;": "\u21F5",
582
+ "&DownBreve;": "\u0311",
583
+ "&DownLeftRightVector;": "\u2950",
584
+ "&DownLeftTeeVector;": "\u295E",
585
+ "&DownLeftVector;": "\u21BD",
586
+ "&DownLeftVectorBar;": "\u2956",
587
+ "&DownRightTeeVector;": "\u295F",
588
+ "&DownRightVector;": "\u21C1",
589
+ "&DownRightVectorBar;": "\u2957",
590
+ "&DownTee;": "\u22A4",
591
+ "&DownTeeArrow;": "\u21A7",
592
+ "&Downarrow;": "\u21D3",
593
+ "&Dscr;": "\u{1D49F}",
594
+ "&Dstrok;": "\u0110",
595
+ "&ENG;": "\u014A",
596
+ "&ETH": "\xD0",
597
+ "&ETH;": "\xD0",
598
+ "&Eacute": "\xC9",
599
+ "&Eacute;": "\xC9",
600
+ "&Ecaron;": "\u011A",
601
+ "&Ecirc": "\xCA",
602
+ "&Ecirc;": "\xCA",
603
+ "&Ecy;": "\u042D",
604
+ "&Edot;": "\u0116",
605
+ "&Efr;": "\u{1D508}",
606
+ "&Egrave": "\xC8",
607
+ "&Egrave;": "\xC8",
608
+ "&Element;": "\u2208",
609
+ "&Emacr;": "\u0112",
610
+ "&EmptySmallSquare;": "\u25FB",
611
+ "&EmptyVerySmallSquare;": "\u25AB",
612
+ "&Eogon;": "\u0118",
613
+ "&Eopf;": "\u{1D53C}",
614
+ "&Epsilon;": "\u0395",
615
+ "&Equal;": "\u2A75",
616
+ "&EqualTilde;": "\u2242",
617
+ "&Equilibrium;": "\u21CC",
618
+ "&Escr;": "\u2130",
619
+ "&Esim;": "\u2A73",
620
+ "&Eta;": "\u0397",
621
+ "&Euml": "\xCB",
622
+ "&Euml;": "\xCB",
623
+ "&Exists;": "\u2203",
624
+ "&ExponentialE;": "\u2147",
625
+ "&Fcy;": "\u0424",
626
+ "&Ffr;": "\u{1D509}",
627
+ "&FilledSmallSquare;": "\u25FC",
628
+ "&FilledVerySmallSquare;": "\u25AA",
629
+ "&Fopf;": "\u{1D53D}",
630
+ "&ForAll;": "\u2200",
631
+ "&Fouriertrf;": "\u2131",
632
+ "&Fscr;": "\u2131",
633
+ "&GJcy;": "\u0403",
634
+ "&GT": ">",
635
+ "&GT;": ">",
636
+ "&Gamma;": "\u0393",
637
+ "&Gammad;": "\u03DC",
638
+ "&Gbreve;": "\u011E",
639
+ "&Gcedil;": "\u0122",
640
+ "&Gcirc;": "\u011C",
641
+ "&Gcy;": "\u0413",
642
+ "&Gdot;": "\u0120",
643
+ "&Gfr;": "\u{1D50A}",
644
+ "&Gg;": "\u22D9",
645
+ "&Gopf;": "\u{1D53E}",
646
+ "&GreaterEqual;": "\u2265",
647
+ "&GreaterEqualLess;": "\u22DB",
648
+ "&GreaterFullEqual;": "\u2267",
649
+ "&GreaterGreater;": "\u2AA2",
650
+ "&GreaterLess;": "\u2277",
651
+ "&GreaterSlantEqual;": "\u2A7E",
652
+ "&GreaterTilde;": "\u2273",
653
+ "&Gscr;": "\u{1D4A2}",
654
+ "&Gt;": "\u226B",
655
+ "&HARDcy;": "\u042A",
656
+ "&Hacek;": "\u02C7",
657
+ "&Hat;": "^",
658
+ "&Hcirc;": "\u0124",
659
+ "&Hfr;": "\u210C",
660
+ "&HilbertSpace;": "\u210B",
661
+ "&Hopf;": "\u210D",
662
+ "&HorizontalLine;": "\u2500",
663
+ "&Hscr;": "\u210B",
664
+ "&Hstrok;": "\u0126",
665
+ "&HumpDownHump;": "\u224E",
666
+ "&HumpEqual;": "\u224F",
667
+ "&IEcy;": "\u0415",
668
+ "&IJlig;": "\u0132",
669
+ "&IOcy;": "\u0401",
670
+ "&Iacute": "\xCD",
671
+ "&Iacute;": "\xCD",
672
+ "&Icirc": "\xCE",
673
+ "&Icirc;": "\xCE",
674
+ "&Icy;": "\u0418",
675
+ "&Idot;": "\u0130",
676
+ "&Ifr;": "\u2111",
677
+ "&Igrave": "\xCC",
678
+ "&Igrave;": "\xCC",
679
+ "&Im;": "\u2111",
680
+ "&Imacr;": "\u012A",
681
+ "&ImaginaryI;": "\u2148",
682
+ "&Implies;": "\u21D2",
683
+ "&Int;": "\u222C",
684
+ "&Integral;": "\u222B",
685
+ "&Intersection;": "\u22C2",
686
+ "&InvisibleComma;": "\u2063",
687
+ "&InvisibleTimes;": "\u2062",
688
+ "&Iogon;": "\u012E",
689
+ "&Iopf;": "\u{1D540}",
690
+ "&Iota;": "\u0399",
691
+ "&Iscr;": "\u2110",
692
+ "&Itilde;": "\u0128",
693
+ "&Iukcy;": "\u0406",
694
+ "&Iuml": "\xCF",
695
+ "&Iuml;": "\xCF",
696
+ "&Jcirc;": "\u0134",
697
+ "&Jcy;": "\u0419",
698
+ "&Jfr;": "\u{1D50D}",
699
+ "&Jopf;": "\u{1D541}",
700
+ "&Jscr;": "\u{1D4A5}",
701
+ "&Jsercy;": "\u0408",
702
+ "&Jukcy;": "\u0404",
703
+ "&KHcy;": "\u0425",
704
+ "&KJcy;": "\u040C",
705
+ "&Kappa;": "\u039A",
706
+ "&Kcedil;": "\u0136",
707
+ "&Kcy;": "\u041A",
708
+ "&Kfr;": "\u{1D50E}",
709
+ "&Kopf;": "\u{1D542}",
710
+ "&Kscr;": "\u{1D4A6}",
711
+ "&LJcy;": "\u0409",
712
+ "&LT": "<",
713
+ "&LT;": "<",
714
+ "&Lacute;": "\u0139",
715
+ "&Lambda;": "\u039B",
716
+ "&Lang;": "\u27EA",
717
+ "&Laplacetrf;": "\u2112",
718
+ "&Larr;": "\u219E",
719
+ "&Lcaron;": "\u013D",
720
+ "&Lcedil;": "\u013B",
721
+ "&Lcy;": "\u041B",
722
+ "&LeftAngleBracket;": "\u27E8",
723
+ "&LeftArrow;": "\u2190",
724
+ "&LeftArrowBar;": "\u21E4",
725
+ "&LeftArrowRightArrow;": "\u21C6",
726
+ "&LeftCeiling;": "\u2308",
727
+ "&LeftDoubleBracket;": "\u27E6",
728
+ "&LeftDownTeeVector;": "\u2961",
729
+ "&LeftDownVector;": "\u21C3",
730
+ "&LeftDownVectorBar;": "\u2959",
731
+ "&LeftFloor;": "\u230A",
732
+ "&LeftRightArrow;": "\u2194",
733
+ "&LeftRightVector;": "\u294E",
734
+ "&LeftTee;": "\u22A3",
735
+ "&LeftTeeArrow;": "\u21A4",
736
+ "&LeftTeeVector;": "\u295A",
737
+ "&LeftTriangle;": "\u22B2",
738
+ "&LeftTriangleBar;": "\u29CF",
739
+ "&LeftTriangleEqual;": "\u22B4",
740
+ "&LeftUpDownVector;": "\u2951",
741
+ "&LeftUpTeeVector;": "\u2960",
742
+ "&LeftUpVector;": "\u21BF",
743
+ "&LeftUpVectorBar;": "\u2958",
744
+ "&LeftVector;": "\u21BC",
745
+ "&LeftVectorBar;": "\u2952",
746
+ "&Leftarrow;": "\u21D0",
747
+ "&Leftrightarrow;": "\u21D4",
748
+ "&LessEqualGreater;": "\u22DA",
749
+ "&LessFullEqual;": "\u2266",
750
+ "&LessGreater;": "\u2276",
751
+ "&LessLess;": "\u2AA1",
752
+ "&LessSlantEqual;": "\u2A7D",
753
+ "&LessTilde;": "\u2272",
754
+ "&Lfr;": "\u{1D50F}",
755
+ "&Ll;": "\u22D8",
756
+ "&Lleftarrow;": "\u21DA",
757
+ "&Lmidot;": "\u013F",
758
+ "&LongLeftArrow;": "\u27F5",
759
+ "&LongLeftRightArrow;": "\u27F7",
760
+ "&LongRightArrow;": "\u27F6",
761
+ "&Longleftarrow;": "\u27F8",
762
+ "&Longleftrightarrow;": "\u27FA",
763
+ "&Longrightarrow;": "\u27F9",
764
+ "&Lopf;": "\u{1D543}",
765
+ "&LowerLeftArrow;": "\u2199",
766
+ "&LowerRightArrow;": "\u2198",
767
+ "&Lscr;": "\u2112",
768
+ "&Lsh;": "\u21B0",
769
+ "&Lstrok;": "\u0141",
770
+ "&Lt;": "\u226A",
771
+ "&Map;": "\u2905",
772
+ "&Mcy;": "\u041C",
773
+ "&MediumSpace;": "\u205F",
774
+ "&Mellintrf;": "\u2133",
775
+ "&Mfr;": "\u{1D510}",
776
+ "&MinusPlus;": "\u2213",
777
+ "&Mopf;": "\u{1D544}",
778
+ "&Mscr;": "\u2133",
779
+ "&Mu;": "\u039C",
780
+ "&NJcy;": "\u040A",
781
+ "&Nacute;": "\u0143",
782
+ "&Ncaron;": "\u0147",
783
+ "&Ncedil;": "\u0145",
784
+ "&Ncy;": "\u041D",
785
+ "&NegativeMediumSpace;": "\u200B",
786
+ "&NegativeThickSpace;": "\u200B",
787
+ "&NegativeThinSpace;": "\u200B",
788
+ "&NegativeVeryThinSpace;": "\u200B",
789
+ "&NestedGreaterGreater;": "\u226B",
790
+ "&NestedLessLess;": "\u226A",
791
+ "&NewLine;": `
792
+ `,
793
+ "&Nfr;": "\u{1D511}",
794
+ "&NoBreak;": "\u2060",
795
+ "&NonBreakingSpace;": "\xA0",
796
+ "&Nopf;": "\u2115",
797
+ "&Not;": "\u2AEC",
798
+ "&NotCongruent;": "\u2262",
799
+ "&NotCupCap;": "\u226D",
800
+ "&NotDoubleVerticalBar;": "\u2226",
801
+ "&NotElement;": "\u2209",
802
+ "&NotEqual;": "\u2260",
803
+ "&NotEqualTilde;": "\u2242\u0338",
804
+ "&NotExists;": "\u2204",
805
+ "&NotGreater;": "\u226F",
806
+ "&NotGreaterEqual;": "\u2271",
807
+ "&NotGreaterFullEqual;": "\u2267\u0338",
808
+ "&NotGreaterGreater;": "\u226B\u0338",
809
+ "&NotGreaterLess;": "\u2279",
810
+ "&NotGreaterSlantEqual;": "\u2A7E\u0338",
811
+ "&NotGreaterTilde;": "\u2275",
812
+ "&NotHumpDownHump;": "\u224E\u0338",
813
+ "&NotHumpEqual;": "\u224F\u0338",
814
+ "&NotLeftTriangle;": "\u22EA",
815
+ "&NotLeftTriangleBar;": "\u29CF\u0338",
816
+ "&NotLeftTriangleEqual;": "\u22EC",
817
+ "&NotLess;": "\u226E",
818
+ "&NotLessEqual;": "\u2270",
819
+ "&NotLessGreater;": "\u2278",
820
+ "&NotLessLess;": "\u226A\u0338",
821
+ "&NotLessSlantEqual;": "\u2A7D\u0338",
822
+ "&NotLessTilde;": "\u2274",
823
+ "&NotNestedGreaterGreater;": "\u2AA2\u0338",
824
+ "&NotNestedLessLess;": "\u2AA1\u0338",
825
+ "&NotPrecedes;": "\u2280",
826
+ "&NotPrecedesEqual;": "\u2AAF\u0338",
827
+ "&NotPrecedesSlantEqual;": "\u22E0",
828
+ "&NotReverseElement;": "\u220C",
829
+ "&NotRightTriangle;": "\u22EB",
830
+ "&NotRightTriangleBar;": "\u29D0\u0338",
831
+ "&NotRightTriangleEqual;": "\u22ED",
832
+ "&NotSquareSubset;": "\u228F\u0338",
833
+ "&NotSquareSubsetEqual;": "\u22E2",
834
+ "&NotSquareSuperset;": "\u2290\u0338",
835
+ "&NotSquareSupersetEqual;": "\u22E3",
836
+ "&NotSubset;": "\u2282\u20D2",
837
+ "&NotSubsetEqual;": "\u2288",
838
+ "&NotSucceeds;": "\u2281",
839
+ "&NotSucceedsEqual;": "\u2AB0\u0338",
840
+ "&NotSucceedsSlantEqual;": "\u22E1",
841
+ "&NotSucceedsTilde;": "\u227F\u0338",
842
+ "&NotSuperset;": "\u2283\u20D2",
843
+ "&NotSupersetEqual;": "\u2289",
844
+ "&NotTilde;": "\u2241",
845
+ "&NotTildeEqual;": "\u2244",
846
+ "&NotTildeFullEqual;": "\u2247",
847
+ "&NotTildeTilde;": "\u2249",
848
+ "&NotVerticalBar;": "\u2224",
849
+ "&Nscr;": "\u{1D4A9}",
850
+ "&Ntilde": "\xD1",
851
+ "&Ntilde;": "\xD1",
852
+ "&Nu;": "\u039D",
853
+ "&OElig;": "\u0152",
854
+ "&Oacute": "\xD3",
855
+ "&Oacute;": "\xD3",
856
+ "&Ocirc": "\xD4",
857
+ "&Ocirc;": "\xD4",
858
+ "&Ocy;": "\u041E",
859
+ "&Odblac;": "\u0150",
860
+ "&Ofr;": "\u{1D512}",
861
+ "&Ograve": "\xD2",
862
+ "&Ograve;": "\xD2",
863
+ "&Omacr;": "\u014C",
864
+ "&Omega;": "\u03A9",
865
+ "&Omicron;": "\u039F",
866
+ "&Oopf;": "\u{1D546}",
867
+ "&OpenCurlyDoubleQuote;": "\u201C",
868
+ "&OpenCurlyQuote;": "\u2018",
869
+ "&Or;": "\u2A54",
870
+ "&Oscr;": "\u{1D4AA}",
871
+ "&Oslash": "\xD8",
872
+ "&Oslash;": "\xD8",
873
+ "&Otilde": "\xD5",
874
+ "&Otilde;": "\xD5",
875
+ "&Otimes;": "\u2A37",
876
+ "&Ouml": "\xD6",
877
+ "&Ouml;": "\xD6",
878
+ "&OverBar;": "\u203E",
879
+ "&OverBrace;": "\u23DE",
880
+ "&OverBracket;": "\u23B4",
881
+ "&OverParenthesis;": "\u23DC",
882
+ "&PartialD;": "\u2202",
883
+ "&Pcy;": "\u041F",
884
+ "&Pfr;": "\u{1D513}",
885
+ "&Phi;": "\u03A6",
886
+ "&Pi;": "\u03A0",
887
+ "&PlusMinus;": "\xB1",
888
+ "&Poincareplane;": "\u210C",
889
+ "&Popf;": "\u2119",
890
+ "&Pr;": "\u2ABB",
891
+ "&Precedes;": "\u227A",
892
+ "&PrecedesEqual;": "\u2AAF",
893
+ "&PrecedesSlantEqual;": "\u227C",
894
+ "&PrecedesTilde;": "\u227E",
895
+ "&Prime;": "\u2033",
896
+ "&Product;": "\u220F",
897
+ "&Proportion;": "\u2237",
898
+ "&Proportional;": "\u221D",
899
+ "&Pscr;": "\u{1D4AB}",
900
+ "&Psi;": "\u03A8",
901
+ "&QUOT": '"',
902
+ "&QUOT;": '"',
903
+ "&Qfr;": "\u{1D514}",
904
+ "&Qopf;": "\u211A",
905
+ "&Qscr;": "\u{1D4AC}",
906
+ "&RBarr;": "\u2910",
907
+ "&REG": "\xAE",
908
+ "&REG;": "\xAE",
909
+ "&Racute;": "\u0154",
910
+ "&Rang;": "\u27EB",
911
+ "&Rarr;": "\u21A0",
912
+ "&Rarrtl;": "\u2916",
913
+ "&Rcaron;": "\u0158",
914
+ "&Rcedil;": "\u0156",
915
+ "&Rcy;": "\u0420",
916
+ "&Re;": "\u211C",
917
+ "&ReverseElement;": "\u220B",
918
+ "&ReverseEquilibrium;": "\u21CB",
919
+ "&ReverseUpEquilibrium;": "\u296F",
920
+ "&Rfr;": "\u211C",
921
+ "&Rho;": "\u03A1",
922
+ "&RightAngleBracket;": "\u27E9",
923
+ "&RightArrow;": "\u2192",
924
+ "&RightArrowBar;": "\u21E5",
925
+ "&RightArrowLeftArrow;": "\u21C4",
926
+ "&RightCeiling;": "\u2309",
927
+ "&RightDoubleBracket;": "\u27E7",
928
+ "&RightDownTeeVector;": "\u295D",
929
+ "&RightDownVector;": "\u21C2",
930
+ "&RightDownVectorBar;": "\u2955",
931
+ "&RightFloor;": "\u230B",
932
+ "&RightTee;": "\u22A2",
933
+ "&RightTeeArrow;": "\u21A6",
934
+ "&RightTeeVector;": "\u295B",
935
+ "&RightTriangle;": "\u22B3",
936
+ "&RightTriangleBar;": "\u29D0",
937
+ "&RightTriangleEqual;": "\u22B5",
938
+ "&RightUpDownVector;": "\u294F",
939
+ "&RightUpTeeVector;": "\u295C",
940
+ "&RightUpVector;": "\u21BE",
941
+ "&RightUpVectorBar;": "\u2954",
942
+ "&RightVector;": "\u21C0",
943
+ "&RightVectorBar;": "\u2953",
944
+ "&Rightarrow;": "\u21D2",
945
+ "&Ropf;": "\u211D",
946
+ "&RoundImplies;": "\u2970",
947
+ "&Rrightarrow;": "\u21DB",
948
+ "&Rscr;": "\u211B",
949
+ "&Rsh;": "\u21B1",
950
+ "&RuleDelayed;": "\u29F4",
951
+ "&SHCHcy;": "\u0429",
952
+ "&SHcy;": "\u0428",
953
+ "&SOFTcy;": "\u042C",
954
+ "&Sacute;": "\u015A",
955
+ "&Sc;": "\u2ABC",
956
+ "&Scaron;": "\u0160",
957
+ "&Scedil;": "\u015E",
958
+ "&Scirc;": "\u015C",
959
+ "&Scy;": "\u0421",
960
+ "&Sfr;": "\u{1D516}",
961
+ "&ShortDownArrow;": "\u2193",
962
+ "&ShortLeftArrow;": "\u2190",
963
+ "&ShortRightArrow;": "\u2192",
964
+ "&ShortUpArrow;": "\u2191",
965
+ "&Sigma;": "\u03A3",
966
+ "&SmallCircle;": "\u2218",
967
+ "&Sopf;": "\u{1D54A}",
968
+ "&Sqrt;": "\u221A",
969
+ "&Square;": "\u25A1",
970
+ "&SquareIntersection;": "\u2293",
971
+ "&SquareSubset;": "\u228F",
972
+ "&SquareSubsetEqual;": "\u2291",
973
+ "&SquareSuperset;": "\u2290",
974
+ "&SquareSupersetEqual;": "\u2292",
975
+ "&SquareUnion;": "\u2294",
976
+ "&Sscr;": "\u{1D4AE}",
977
+ "&Star;": "\u22C6",
978
+ "&Sub;": "\u22D0",
979
+ "&Subset;": "\u22D0",
980
+ "&SubsetEqual;": "\u2286",
981
+ "&Succeeds;": "\u227B",
982
+ "&SucceedsEqual;": "\u2AB0",
983
+ "&SucceedsSlantEqual;": "\u227D",
984
+ "&SucceedsTilde;": "\u227F",
985
+ "&SuchThat;": "\u220B",
986
+ "&Sum;": "\u2211",
987
+ "&Sup;": "\u22D1",
988
+ "&Superset;": "\u2283",
989
+ "&SupersetEqual;": "\u2287",
990
+ "&Supset;": "\u22D1",
991
+ "&THORN": "\xDE",
992
+ "&THORN;": "\xDE",
993
+ "&TRADE;": "\u2122",
994
+ "&TSHcy;": "\u040B",
995
+ "&TScy;": "\u0426",
996
+ "&Tab;": " ",
997
+ "&Tau;": "\u03A4",
998
+ "&Tcaron;": "\u0164",
999
+ "&Tcedil;": "\u0162",
1000
+ "&Tcy;": "\u0422",
1001
+ "&Tfr;": "\u{1D517}",
1002
+ "&Therefore;": "\u2234",
1003
+ "&Theta;": "\u0398",
1004
+ "&ThickSpace;": "\u205F\u200A",
1005
+ "&ThinSpace;": "\u2009",
1006
+ "&Tilde;": "\u223C",
1007
+ "&TildeEqual;": "\u2243",
1008
+ "&TildeFullEqual;": "\u2245",
1009
+ "&TildeTilde;": "\u2248",
1010
+ "&Topf;": "\u{1D54B}",
1011
+ "&TripleDot;": "\u20DB",
1012
+ "&Tscr;": "\u{1D4AF}",
1013
+ "&Tstrok;": "\u0166",
1014
+ "&Uacute": "\xDA",
1015
+ "&Uacute;": "\xDA",
1016
+ "&Uarr;": "\u219F",
1017
+ "&Uarrocir;": "\u2949",
1018
+ "&Ubrcy;": "\u040E",
1019
+ "&Ubreve;": "\u016C",
1020
+ "&Ucirc": "\xDB",
1021
+ "&Ucirc;": "\xDB",
1022
+ "&Ucy;": "\u0423",
1023
+ "&Udblac;": "\u0170",
1024
+ "&Ufr;": "\u{1D518}",
1025
+ "&Ugrave": "\xD9",
1026
+ "&Ugrave;": "\xD9",
1027
+ "&Umacr;": "\u016A",
1028
+ "&UnderBar;": "_",
1029
+ "&UnderBrace;": "\u23DF",
1030
+ "&UnderBracket;": "\u23B5",
1031
+ "&UnderParenthesis;": "\u23DD",
1032
+ "&Union;": "\u22C3",
1033
+ "&UnionPlus;": "\u228E",
1034
+ "&Uogon;": "\u0172",
1035
+ "&Uopf;": "\u{1D54C}",
1036
+ "&UpArrow;": "\u2191",
1037
+ "&UpArrowBar;": "\u2912",
1038
+ "&UpArrowDownArrow;": "\u21C5",
1039
+ "&UpDownArrow;": "\u2195",
1040
+ "&UpEquilibrium;": "\u296E",
1041
+ "&UpTee;": "\u22A5",
1042
+ "&UpTeeArrow;": "\u21A5",
1043
+ "&Uparrow;": "\u21D1",
1044
+ "&Updownarrow;": "\u21D5",
1045
+ "&UpperLeftArrow;": "\u2196",
1046
+ "&UpperRightArrow;": "\u2197",
1047
+ "&Upsi;": "\u03D2",
1048
+ "&Upsilon;": "\u03A5",
1049
+ "&Uring;": "\u016E",
1050
+ "&Uscr;": "\u{1D4B0}",
1051
+ "&Utilde;": "\u0168",
1052
+ "&Uuml": "\xDC",
1053
+ "&Uuml;": "\xDC",
1054
+ "&VDash;": "\u22AB",
1055
+ "&Vbar;": "\u2AEB",
1056
+ "&Vcy;": "\u0412",
1057
+ "&Vdash;": "\u22A9",
1058
+ "&Vdashl;": "\u2AE6",
1059
+ "&Vee;": "\u22C1",
1060
+ "&Verbar;": "\u2016",
1061
+ "&Vert;": "\u2016",
1062
+ "&VerticalBar;": "\u2223",
1063
+ "&VerticalLine;": "|",
1064
+ "&VerticalSeparator;": "\u2758",
1065
+ "&VerticalTilde;": "\u2240",
1066
+ "&VeryThinSpace;": "\u200A",
1067
+ "&Vfr;": "\u{1D519}",
1068
+ "&Vopf;": "\u{1D54D}",
1069
+ "&Vscr;": "\u{1D4B1}",
1070
+ "&Vvdash;": "\u22AA",
1071
+ "&Wcirc;": "\u0174",
1072
+ "&Wedge;": "\u22C0",
1073
+ "&Wfr;": "\u{1D51A}",
1074
+ "&Wopf;": "\u{1D54E}",
1075
+ "&Wscr;": "\u{1D4B2}",
1076
+ "&Xfr;": "\u{1D51B}",
1077
+ "&Xi;": "\u039E",
1078
+ "&Xopf;": "\u{1D54F}",
1079
+ "&Xscr;": "\u{1D4B3}",
1080
+ "&YAcy;": "\u042F",
1081
+ "&YIcy;": "\u0407",
1082
+ "&YUcy;": "\u042E",
1083
+ "&Yacute": "\xDD",
1084
+ "&Yacute;": "\xDD",
1085
+ "&Ycirc;": "\u0176",
1086
+ "&Ycy;": "\u042B",
1087
+ "&Yfr;": "\u{1D51C}",
1088
+ "&Yopf;": "\u{1D550}",
1089
+ "&Yscr;": "\u{1D4B4}",
1090
+ "&Yuml;": "\u0178",
1091
+ "&ZHcy;": "\u0416",
1092
+ "&Zacute;": "\u0179",
1093
+ "&Zcaron;": "\u017D",
1094
+ "&Zcy;": "\u0417",
1095
+ "&Zdot;": "\u017B",
1096
+ "&ZeroWidthSpace;": "\u200B",
1097
+ "&Zeta;": "\u0396",
1098
+ "&Zfr;": "\u2128",
1099
+ "&Zopf;": "\u2124",
1100
+ "&Zscr;": "\u{1D4B5}",
1101
+ "&aacute": "\xE1",
1102
+ "&aacute;": "\xE1",
1103
+ "&abreve;": "\u0103",
1104
+ "&ac;": "\u223E",
1105
+ "&acE;": "\u223E\u0333",
1106
+ "&acd;": "\u223F",
1107
+ "&acirc": "\xE2",
1108
+ "&acirc;": "\xE2",
1109
+ "&acute": "\xB4",
1110
+ "&acute;": "\xB4",
1111
+ "&acy;": "\u0430",
1112
+ "&aelig": "\xE6",
1113
+ "&aelig;": "\xE6",
1114
+ "&af;": "\u2061",
1115
+ "&afr;": "\u{1D51E}",
1116
+ "&agrave": "\xE0",
1117
+ "&agrave;": "\xE0",
1118
+ "&alefsym;": "\u2135",
1119
+ "&aleph;": "\u2135",
1120
+ "&alpha;": "\u03B1",
1121
+ "&amacr;": "\u0101",
1122
+ "&amalg;": "\u2A3F",
1123
+ "&amp": "&",
1124
+ "&amp;": "&",
1125
+ "&and;": "\u2227",
1126
+ "&andand;": "\u2A55",
1127
+ "&andd;": "\u2A5C",
1128
+ "&andslope;": "\u2A58",
1129
+ "&andv;": "\u2A5A",
1130
+ "&ang;": "\u2220",
1131
+ "&ange;": "\u29A4",
1132
+ "&angle;": "\u2220",
1133
+ "&angmsd;": "\u2221",
1134
+ "&angmsdaa;": "\u29A8",
1135
+ "&angmsdab;": "\u29A9",
1136
+ "&angmsdac;": "\u29AA",
1137
+ "&angmsdad;": "\u29AB",
1138
+ "&angmsdae;": "\u29AC",
1139
+ "&angmsdaf;": "\u29AD",
1140
+ "&angmsdag;": "\u29AE",
1141
+ "&angmsdah;": "\u29AF",
1142
+ "&angrt;": "\u221F",
1143
+ "&angrtvb;": "\u22BE",
1144
+ "&angrtvbd;": "\u299D",
1145
+ "&angsph;": "\u2222",
1146
+ "&angst;": "\xC5",
1147
+ "&angzarr;": "\u237C",
1148
+ "&aogon;": "\u0105",
1149
+ "&aopf;": "\u{1D552}",
1150
+ "&ap;": "\u2248",
1151
+ "&apE;": "\u2A70",
1152
+ "&apacir;": "\u2A6F",
1153
+ "&ape;": "\u224A",
1154
+ "&apid;": "\u224B",
1155
+ "&apos;": "'",
1156
+ "&approx;": "\u2248",
1157
+ "&approxeq;": "\u224A",
1158
+ "&aring": "\xE5",
1159
+ "&aring;": "\xE5",
1160
+ "&ascr;": "\u{1D4B6}",
1161
+ "&ast;": "*",
1162
+ "&asymp;": "\u2248",
1163
+ "&asympeq;": "\u224D",
1164
+ "&atilde": "\xE3",
1165
+ "&atilde;": "\xE3",
1166
+ "&auml": "\xE4",
1167
+ "&auml;": "\xE4",
1168
+ "&awconint;": "\u2233",
1169
+ "&awint;": "\u2A11",
1170
+ "&bNot;": "\u2AED",
1171
+ "&backcong;": "\u224C",
1172
+ "&backepsilon;": "\u03F6",
1173
+ "&backprime;": "\u2035",
1174
+ "&backsim;": "\u223D",
1175
+ "&backsimeq;": "\u22CD",
1176
+ "&barvee;": "\u22BD",
1177
+ "&barwed;": "\u2305",
1178
+ "&barwedge;": "\u2305",
1179
+ "&bbrk;": "\u23B5",
1180
+ "&bbrktbrk;": "\u23B6",
1181
+ "&bcong;": "\u224C",
1182
+ "&bcy;": "\u0431",
1183
+ "&bdquo;": "\u201E",
1184
+ "&becaus;": "\u2235",
1185
+ "&because;": "\u2235",
1186
+ "&bemptyv;": "\u29B0",
1187
+ "&bepsi;": "\u03F6",
1188
+ "&bernou;": "\u212C",
1189
+ "&beta;": "\u03B2",
1190
+ "&beth;": "\u2136",
1191
+ "&between;": "\u226C",
1192
+ "&bfr;": "\u{1D51F}",
1193
+ "&bigcap;": "\u22C2",
1194
+ "&bigcirc;": "\u25EF",
1195
+ "&bigcup;": "\u22C3",
1196
+ "&bigodot;": "\u2A00",
1197
+ "&bigoplus;": "\u2A01",
1198
+ "&bigotimes;": "\u2A02",
1199
+ "&bigsqcup;": "\u2A06",
1200
+ "&bigstar;": "\u2605",
1201
+ "&bigtriangledown;": "\u25BD",
1202
+ "&bigtriangleup;": "\u25B3",
1203
+ "&biguplus;": "\u2A04",
1204
+ "&bigvee;": "\u22C1",
1205
+ "&bigwedge;": "\u22C0",
1206
+ "&bkarow;": "\u290D",
1207
+ "&blacklozenge;": "\u29EB",
1208
+ "&blacksquare;": "\u25AA",
1209
+ "&blacktriangle;": "\u25B4",
1210
+ "&blacktriangledown;": "\u25BE",
1211
+ "&blacktriangleleft;": "\u25C2",
1212
+ "&blacktriangleright;": "\u25B8",
1213
+ "&blank;": "\u2423",
1214
+ "&blk12;": "\u2592",
1215
+ "&blk14;": "\u2591",
1216
+ "&blk34;": "\u2593",
1217
+ "&block;": "\u2588",
1218
+ "&bne;": "=\u20E5",
1219
+ "&bnequiv;": "\u2261\u20E5",
1220
+ "&bnot;": "\u2310",
1221
+ "&bopf;": "\u{1D553}",
1222
+ "&bot;": "\u22A5",
1223
+ "&bottom;": "\u22A5",
1224
+ "&bowtie;": "\u22C8",
1225
+ "&boxDL;": "\u2557",
1226
+ "&boxDR;": "\u2554",
1227
+ "&boxDl;": "\u2556",
1228
+ "&boxDr;": "\u2553",
1229
+ "&boxH;": "\u2550",
1230
+ "&boxHD;": "\u2566",
1231
+ "&boxHU;": "\u2569",
1232
+ "&boxHd;": "\u2564",
1233
+ "&boxHu;": "\u2567",
1234
+ "&boxUL;": "\u255D",
1235
+ "&boxUR;": "\u255A",
1236
+ "&boxUl;": "\u255C",
1237
+ "&boxUr;": "\u2559",
1238
+ "&boxV;": "\u2551",
1239
+ "&boxVH;": "\u256C",
1240
+ "&boxVL;": "\u2563",
1241
+ "&boxVR;": "\u2560",
1242
+ "&boxVh;": "\u256B",
1243
+ "&boxVl;": "\u2562",
1244
+ "&boxVr;": "\u255F",
1245
+ "&boxbox;": "\u29C9",
1246
+ "&boxdL;": "\u2555",
1247
+ "&boxdR;": "\u2552",
1248
+ "&boxdl;": "\u2510",
1249
+ "&boxdr;": "\u250C",
1250
+ "&boxh;": "\u2500",
1251
+ "&boxhD;": "\u2565",
1252
+ "&boxhU;": "\u2568",
1253
+ "&boxhd;": "\u252C",
1254
+ "&boxhu;": "\u2534",
1255
+ "&boxminus;": "\u229F",
1256
+ "&boxplus;": "\u229E",
1257
+ "&boxtimes;": "\u22A0",
1258
+ "&boxuL;": "\u255B",
1259
+ "&boxuR;": "\u2558",
1260
+ "&boxul;": "\u2518",
1261
+ "&boxur;": "\u2514",
1262
+ "&boxv;": "\u2502",
1263
+ "&boxvH;": "\u256A",
1264
+ "&boxvL;": "\u2561",
1265
+ "&boxvR;": "\u255E",
1266
+ "&boxvh;": "\u253C",
1267
+ "&boxvl;": "\u2524",
1268
+ "&boxvr;": "\u251C",
1269
+ "&bprime;": "\u2035",
1270
+ "&breve;": "\u02D8",
1271
+ "&brvbar": "\xA6",
1272
+ "&brvbar;": "\xA6",
1273
+ "&bscr;": "\u{1D4B7}",
1274
+ "&bsemi;": "\u204F",
1275
+ "&bsim;": "\u223D",
1276
+ "&bsime;": "\u22CD",
1277
+ "&bsol;": "\\",
1278
+ "&bsolb;": "\u29C5",
1279
+ "&bsolhsub;": "\u27C8",
1280
+ "&bull;": "\u2022",
1281
+ "&bullet;": "\u2022",
1282
+ "&bump;": "\u224E",
1283
+ "&bumpE;": "\u2AAE",
1284
+ "&bumpe;": "\u224F",
1285
+ "&bumpeq;": "\u224F",
1286
+ "&cacute;": "\u0107",
1287
+ "&cap;": "\u2229",
1288
+ "&capand;": "\u2A44",
1289
+ "&capbrcup;": "\u2A49",
1290
+ "&capcap;": "\u2A4B",
1291
+ "&capcup;": "\u2A47",
1292
+ "&capdot;": "\u2A40",
1293
+ "&caps;": "\u2229\uFE00",
1294
+ "&caret;": "\u2041",
1295
+ "&caron;": "\u02C7",
1296
+ "&ccaps;": "\u2A4D",
1297
+ "&ccaron;": "\u010D",
1298
+ "&ccedil": "\xE7",
1299
+ "&ccedil;": "\xE7",
1300
+ "&ccirc;": "\u0109",
1301
+ "&ccups;": "\u2A4C",
1302
+ "&ccupssm;": "\u2A50",
1303
+ "&cdot;": "\u010B",
1304
+ "&cedil": "\xB8",
1305
+ "&cedil;": "\xB8",
1306
+ "&cemptyv;": "\u29B2",
1307
+ "&cent": "\xA2",
1308
+ "&cent;": "\xA2",
1309
+ "&centerdot;": "\xB7",
1310
+ "&cfr;": "\u{1D520}",
1311
+ "&chcy;": "\u0447",
1312
+ "&check;": "\u2713",
1313
+ "&checkmark;": "\u2713",
1314
+ "&chi;": "\u03C7",
1315
+ "&cir;": "\u25CB",
1316
+ "&cirE;": "\u29C3",
1317
+ "&circ;": "\u02C6",
1318
+ "&circeq;": "\u2257",
1319
+ "&circlearrowleft;": "\u21BA",
1320
+ "&circlearrowright;": "\u21BB",
1321
+ "&circledR;": "\xAE",
1322
+ "&circledS;": "\u24C8",
1323
+ "&circledast;": "\u229B",
1324
+ "&circledcirc;": "\u229A",
1325
+ "&circleddash;": "\u229D",
1326
+ "&cire;": "\u2257",
1327
+ "&cirfnint;": "\u2A10",
1328
+ "&cirmid;": "\u2AEF",
1329
+ "&cirscir;": "\u29C2",
1330
+ "&clubs;": "\u2663",
1331
+ "&clubsuit;": "\u2663",
1332
+ "&colon;": ":",
1333
+ "&colone;": "\u2254",
1334
+ "&coloneq;": "\u2254",
1335
+ "&comma;": ",",
1336
+ "&commat;": "@",
1337
+ "&comp;": "\u2201",
1338
+ "&compfn;": "\u2218",
1339
+ "&complement;": "\u2201",
1340
+ "&complexes;": "\u2102",
1341
+ "&cong;": "\u2245",
1342
+ "&congdot;": "\u2A6D",
1343
+ "&conint;": "\u222E",
1344
+ "&copf;": "\u{1D554}",
1345
+ "&coprod;": "\u2210",
1346
+ "&copy": "\xA9",
1347
+ "&copy;": "\xA9",
1348
+ "&copysr;": "\u2117",
1349
+ "&crarr;": "\u21B5",
1350
+ "&cross;": "\u2717",
1351
+ "&cscr;": "\u{1D4B8}",
1352
+ "&csub;": "\u2ACF",
1353
+ "&csube;": "\u2AD1",
1354
+ "&csup;": "\u2AD0",
1355
+ "&csupe;": "\u2AD2",
1356
+ "&ctdot;": "\u22EF",
1357
+ "&cudarrl;": "\u2938",
1358
+ "&cudarrr;": "\u2935",
1359
+ "&cuepr;": "\u22DE",
1360
+ "&cuesc;": "\u22DF",
1361
+ "&cularr;": "\u21B6",
1362
+ "&cularrp;": "\u293D",
1363
+ "&cup;": "\u222A",
1364
+ "&cupbrcap;": "\u2A48",
1365
+ "&cupcap;": "\u2A46",
1366
+ "&cupcup;": "\u2A4A",
1367
+ "&cupdot;": "\u228D",
1368
+ "&cupor;": "\u2A45",
1369
+ "&cups;": "\u222A\uFE00",
1370
+ "&curarr;": "\u21B7",
1371
+ "&curarrm;": "\u293C",
1372
+ "&curlyeqprec;": "\u22DE",
1373
+ "&curlyeqsucc;": "\u22DF",
1374
+ "&curlyvee;": "\u22CE",
1375
+ "&curlywedge;": "\u22CF",
1376
+ "&curren": "\xA4",
1377
+ "&curren;": "\xA4",
1378
+ "&curvearrowleft;": "\u21B6",
1379
+ "&curvearrowright;": "\u21B7",
1380
+ "&cuvee;": "\u22CE",
1381
+ "&cuwed;": "\u22CF",
1382
+ "&cwconint;": "\u2232",
1383
+ "&cwint;": "\u2231",
1384
+ "&cylcty;": "\u232D",
1385
+ "&dArr;": "\u21D3",
1386
+ "&dHar;": "\u2965",
1387
+ "&dagger;": "\u2020",
1388
+ "&daleth;": "\u2138",
1389
+ "&darr;": "\u2193",
1390
+ "&dash;": "\u2010",
1391
+ "&dashv;": "\u22A3",
1392
+ "&dbkarow;": "\u290F",
1393
+ "&dblac;": "\u02DD",
1394
+ "&dcaron;": "\u010F",
1395
+ "&dcy;": "\u0434",
1396
+ "&dd;": "\u2146",
1397
+ "&ddagger;": "\u2021",
1398
+ "&ddarr;": "\u21CA",
1399
+ "&ddotseq;": "\u2A77",
1400
+ "&deg": "\xB0",
1401
+ "&deg;": "\xB0",
1402
+ "&delta;": "\u03B4",
1403
+ "&demptyv;": "\u29B1",
1404
+ "&dfisht;": "\u297F",
1405
+ "&dfr;": "\u{1D521}",
1406
+ "&dharl;": "\u21C3",
1407
+ "&dharr;": "\u21C2",
1408
+ "&diam;": "\u22C4",
1409
+ "&diamond;": "\u22C4",
1410
+ "&diamondsuit;": "\u2666",
1411
+ "&diams;": "\u2666",
1412
+ "&die;": "\xA8",
1413
+ "&digamma;": "\u03DD",
1414
+ "&disin;": "\u22F2",
1415
+ "&div;": "\xF7",
1416
+ "&divide": "\xF7",
1417
+ "&divide;": "\xF7",
1418
+ "&divideontimes;": "\u22C7",
1419
+ "&divonx;": "\u22C7",
1420
+ "&djcy;": "\u0452",
1421
+ "&dlcorn;": "\u231E",
1422
+ "&dlcrop;": "\u230D",
1423
+ "&dollar;": "$",
1424
+ "&dopf;": "\u{1D555}",
1425
+ "&dot;": "\u02D9",
1426
+ "&doteq;": "\u2250",
1427
+ "&doteqdot;": "\u2251",
1428
+ "&dotminus;": "\u2238",
1429
+ "&dotplus;": "\u2214",
1430
+ "&dotsquare;": "\u22A1",
1431
+ "&doublebarwedge;": "\u2306",
1432
+ "&downarrow;": "\u2193",
1433
+ "&downdownarrows;": "\u21CA",
1434
+ "&downharpoonleft;": "\u21C3",
1435
+ "&downharpoonright;": "\u21C2",
1436
+ "&drbkarow;": "\u2910",
1437
+ "&drcorn;": "\u231F",
1438
+ "&drcrop;": "\u230C",
1439
+ "&dscr;": "\u{1D4B9}",
1440
+ "&dscy;": "\u0455",
1441
+ "&dsol;": "\u29F6",
1442
+ "&dstrok;": "\u0111",
1443
+ "&dtdot;": "\u22F1",
1444
+ "&dtri;": "\u25BF",
1445
+ "&dtrif;": "\u25BE",
1446
+ "&duarr;": "\u21F5",
1447
+ "&duhar;": "\u296F",
1448
+ "&dwangle;": "\u29A6",
1449
+ "&dzcy;": "\u045F",
1450
+ "&dzigrarr;": "\u27FF",
1451
+ "&eDDot;": "\u2A77",
1452
+ "&eDot;": "\u2251",
1453
+ "&eacute": "\xE9",
1454
+ "&eacute;": "\xE9",
1455
+ "&easter;": "\u2A6E",
1456
+ "&ecaron;": "\u011B",
1457
+ "&ecir;": "\u2256",
1458
+ "&ecirc": "\xEA",
1459
+ "&ecirc;": "\xEA",
1460
+ "&ecolon;": "\u2255",
1461
+ "&ecy;": "\u044D",
1462
+ "&edot;": "\u0117",
1463
+ "&ee;": "\u2147",
1464
+ "&efDot;": "\u2252",
1465
+ "&efr;": "\u{1D522}",
1466
+ "&eg;": "\u2A9A",
1467
+ "&egrave": "\xE8",
1468
+ "&egrave;": "\xE8",
1469
+ "&egs;": "\u2A96",
1470
+ "&egsdot;": "\u2A98",
1471
+ "&el;": "\u2A99",
1472
+ "&elinters;": "\u23E7",
1473
+ "&ell;": "\u2113",
1474
+ "&els;": "\u2A95",
1475
+ "&elsdot;": "\u2A97",
1476
+ "&emacr;": "\u0113",
1477
+ "&empty;": "\u2205",
1478
+ "&emptyset;": "\u2205",
1479
+ "&emptyv;": "\u2205",
1480
+ "&emsp13;": "\u2004",
1481
+ "&emsp14;": "\u2005",
1482
+ "&emsp;": "\u2003",
1483
+ "&eng;": "\u014B",
1484
+ "&ensp;": "\u2002",
1485
+ "&eogon;": "\u0119",
1486
+ "&eopf;": "\u{1D556}",
1487
+ "&epar;": "\u22D5",
1488
+ "&eparsl;": "\u29E3",
1489
+ "&eplus;": "\u2A71",
1490
+ "&epsi;": "\u03B5",
1491
+ "&epsilon;": "\u03B5",
1492
+ "&epsiv;": "\u03F5",
1493
+ "&eqcirc;": "\u2256",
1494
+ "&eqcolon;": "\u2255",
1495
+ "&eqsim;": "\u2242",
1496
+ "&eqslantgtr;": "\u2A96",
1497
+ "&eqslantless;": "\u2A95",
1498
+ "&equals;": "=",
1499
+ "&equest;": "\u225F",
1500
+ "&equiv;": "\u2261",
1501
+ "&equivDD;": "\u2A78",
1502
+ "&eqvparsl;": "\u29E5",
1503
+ "&erDot;": "\u2253",
1504
+ "&erarr;": "\u2971",
1505
+ "&escr;": "\u212F",
1506
+ "&esdot;": "\u2250",
1507
+ "&esim;": "\u2242",
1508
+ "&eta;": "\u03B7",
1509
+ "&eth": "\xF0",
1510
+ "&eth;": "\xF0",
1511
+ "&euml": "\xEB",
1512
+ "&euml;": "\xEB",
1513
+ "&euro;": "\u20AC",
1514
+ "&excl;": "!",
1515
+ "&exist;": "\u2203",
1516
+ "&expectation;": "\u2130",
1517
+ "&exponentiale;": "\u2147",
1518
+ "&fallingdotseq;": "\u2252",
1519
+ "&fcy;": "\u0444",
1520
+ "&female;": "\u2640",
1521
+ "&ffilig;": "\uFB03",
1522
+ "&fflig;": "\uFB00",
1523
+ "&ffllig;": "\uFB04",
1524
+ "&ffr;": "\u{1D523}",
1525
+ "&filig;": "\uFB01",
1526
+ "&fjlig;": "fj",
1527
+ "&flat;": "\u266D",
1528
+ "&fllig;": "\uFB02",
1529
+ "&fltns;": "\u25B1",
1530
+ "&fnof;": "\u0192",
1531
+ "&fopf;": "\u{1D557}",
1532
+ "&forall;": "\u2200",
1533
+ "&fork;": "\u22D4",
1534
+ "&forkv;": "\u2AD9",
1535
+ "&fpartint;": "\u2A0D",
1536
+ "&frac12": "\xBD",
1537
+ "&frac12;": "\xBD",
1538
+ "&frac13;": "\u2153",
1539
+ "&frac14": "\xBC",
1540
+ "&frac14;": "\xBC",
1541
+ "&frac15;": "\u2155",
1542
+ "&frac16;": "\u2159",
1543
+ "&frac18;": "\u215B",
1544
+ "&frac23;": "\u2154",
1545
+ "&frac25;": "\u2156",
1546
+ "&frac34": "\xBE",
1547
+ "&frac34;": "\xBE",
1548
+ "&frac35;": "\u2157",
1549
+ "&frac38;": "\u215C",
1550
+ "&frac45;": "\u2158",
1551
+ "&frac56;": "\u215A",
1552
+ "&frac58;": "\u215D",
1553
+ "&frac78;": "\u215E",
1554
+ "&frasl;": "\u2044",
1555
+ "&frown;": "\u2322",
1556
+ "&fscr;": "\u{1D4BB}",
1557
+ "&gE;": "\u2267",
1558
+ "&gEl;": "\u2A8C",
1559
+ "&gacute;": "\u01F5",
1560
+ "&gamma;": "\u03B3",
1561
+ "&gammad;": "\u03DD",
1562
+ "&gap;": "\u2A86",
1563
+ "&gbreve;": "\u011F",
1564
+ "&gcirc;": "\u011D",
1565
+ "&gcy;": "\u0433",
1566
+ "&gdot;": "\u0121",
1567
+ "&ge;": "\u2265",
1568
+ "&gel;": "\u22DB",
1569
+ "&geq;": "\u2265",
1570
+ "&geqq;": "\u2267",
1571
+ "&geqslant;": "\u2A7E",
1572
+ "&ges;": "\u2A7E",
1573
+ "&gescc;": "\u2AA9",
1574
+ "&gesdot;": "\u2A80",
1575
+ "&gesdoto;": "\u2A82",
1576
+ "&gesdotol;": "\u2A84",
1577
+ "&gesl;": "\u22DB\uFE00",
1578
+ "&gesles;": "\u2A94",
1579
+ "&gfr;": "\u{1D524}",
1580
+ "&gg;": "\u226B",
1581
+ "&ggg;": "\u22D9",
1582
+ "&gimel;": "\u2137",
1583
+ "&gjcy;": "\u0453",
1584
+ "&gl;": "\u2277",
1585
+ "&glE;": "\u2A92",
1586
+ "&gla;": "\u2AA5",
1587
+ "&glj;": "\u2AA4",
1588
+ "&gnE;": "\u2269",
1589
+ "&gnap;": "\u2A8A",
1590
+ "&gnapprox;": "\u2A8A",
1591
+ "&gne;": "\u2A88",
1592
+ "&gneq;": "\u2A88",
1593
+ "&gneqq;": "\u2269",
1594
+ "&gnsim;": "\u22E7",
1595
+ "&gopf;": "\u{1D558}",
1596
+ "&grave;": "`",
1597
+ "&gscr;": "\u210A",
1598
+ "&gsim;": "\u2273",
1599
+ "&gsime;": "\u2A8E",
1600
+ "&gsiml;": "\u2A90",
1601
+ "&gt": ">",
1602
+ "&gt;": ">",
1603
+ "&gtcc;": "\u2AA7",
1604
+ "&gtcir;": "\u2A7A",
1605
+ "&gtdot;": "\u22D7",
1606
+ "&gtlPar;": "\u2995",
1607
+ "&gtquest;": "\u2A7C",
1608
+ "&gtrapprox;": "\u2A86",
1609
+ "&gtrarr;": "\u2978",
1610
+ "&gtrdot;": "\u22D7",
1611
+ "&gtreqless;": "\u22DB",
1612
+ "&gtreqqless;": "\u2A8C",
1613
+ "&gtrless;": "\u2277",
1614
+ "&gtrsim;": "\u2273",
1615
+ "&gvertneqq;": "\u2269\uFE00",
1616
+ "&gvnE;": "\u2269\uFE00",
1617
+ "&hArr;": "\u21D4",
1618
+ "&hairsp;": "\u200A",
1619
+ "&half;": "\xBD",
1620
+ "&hamilt;": "\u210B",
1621
+ "&hardcy;": "\u044A",
1622
+ "&harr;": "\u2194",
1623
+ "&harrcir;": "\u2948",
1624
+ "&harrw;": "\u21AD",
1625
+ "&hbar;": "\u210F",
1626
+ "&hcirc;": "\u0125",
1627
+ "&hearts;": "\u2665",
1628
+ "&heartsuit;": "\u2665",
1629
+ "&hellip;": "\u2026",
1630
+ "&hercon;": "\u22B9",
1631
+ "&hfr;": "\u{1D525}",
1632
+ "&hksearow;": "\u2925",
1633
+ "&hkswarow;": "\u2926",
1634
+ "&hoarr;": "\u21FF",
1635
+ "&homtht;": "\u223B",
1636
+ "&hookleftarrow;": "\u21A9",
1637
+ "&hookrightarrow;": "\u21AA",
1638
+ "&hopf;": "\u{1D559}",
1639
+ "&horbar;": "\u2015",
1640
+ "&hscr;": "\u{1D4BD}",
1641
+ "&hslash;": "\u210F",
1642
+ "&hstrok;": "\u0127",
1643
+ "&hybull;": "\u2043",
1644
+ "&hyphen;": "\u2010",
1645
+ "&iacute": "\xED",
1646
+ "&iacute;": "\xED",
1647
+ "&ic;": "\u2063",
1648
+ "&icirc": "\xEE",
1649
+ "&icirc;": "\xEE",
1650
+ "&icy;": "\u0438",
1651
+ "&iecy;": "\u0435",
1652
+ "&iexcl": "\xA1",
1653
+ "&iexcl;": "\xA1",
1654
+ "&iff;": "\u21D4",
1655
+ "&ifr;": "\u{1D526}",
1656
+ "&igrave": "\xEC",
1657
+ "&igrave;": "\xEC",
1658
+ "&ii;": "\u2148",
1659
+ "&iiiint;": "\u2A0C",
1660
+ "&iiint;": "\u222D",
1661
+ "&iinfin;": "\u29DC",
1662
+ "&iiota;": "\u2129",
1663
+ "&ijlig;": "\u0133",
1664
+ "&imacr;": "\u012B",
1665
+ "&image;": "\u2111",
1666
+ "&imagline;": "\u2110",
1667
+ "&imagpart;": "\u2111",
1668
+ "&imath;": "\u0131",
1669
+ "&imof;": "\u22B7",
1670
+ "&imped;": "\u01B5",
1671
+ "&in;": "\u2208",
1672
+ "&incare;": "\u2105",
1673
+ "&infin;": "\u221E",
1674
+ "&infintie;": "\u29DD",
1675
+ "&inodot;": "\u0131",
1676
+ "&int;": "\u222B",
1677
+ "&intcal;": "\u22BA",
1678
+ "&integers;": "\u2124",
1679
+ "&intercal;": "\u22BA",
1680
+ "&intlarhk;": "\u2A17",
1681
+ "&intprod;": "\u2A3C",
1682
+ "&iocy;": "\u0451",
1683
+ "&iogon;": "\u012F",
1684
+ "&iopf;": "\u{1D55A}",
1685
+ "&iota;": "\u03B9",
1686
+ "&iprod;": "\u2A3C",
1687
+ "&iquest": "\xBF",
1688
+ "&iquest;": "\xBF",
1689
+ "&iscr;": "\u{1D4BE}",
1690
+ "&isin;": "\u2208",
1691
+ "&isinE;": "\u22F9",
1692
+ "&isindot;": "\u22F5",
1693
+ "&isins;": "\u22F4",
1694
+ "&isinsv;": "\u22F3",
1695
+ "&isinv;": "\u2208",
1696
+ "&it;": "\u2062",
1697
+ "&itilde;": "\u0129",
1698
+ "&iukcy;": "\u0456",
1699
+ "&iuml": "\xEF",
1700
+ "&iuml;": "\xEF",
1701
+ "&jcirc;": "\u0135",
1702
+ "&jcy;": "\u0439",
1703
+ "&jfr;": "\u{1D527}",
1704
+ "&jmath;": "\u0237",
1705
+ "&jopf;": "\u{1D55B}",
1706
+ "&jscr;": "\u{1D4BF}",
1707
+ "&jsercy;": "\u0458",
1708
+ "&jukcy;": "\u0454",
1709
+ "&kappa;": "\u03BA",
1710
+ "&kappav;": "\u03F0",
1711
+ "&kcedil;": "\u0137",
1712
+ "&kcy;": "\u043A",
1713
+ "&kfr;": "\u{1D528}",
1714
+ "&kgreen;": "\u0138",
1715
+ "&khcy;": "\u0445",
1716
+ "&kjcy;": "\u045C",
1717
+ "&kopf;": "\u{1D55C}",
1718
+ "&kscr;": "\u{1D4C0}",
1719
+ "&lAarr;": "\u21DA",
1720
+ "&lArr;": "\u21D0",
1721
+ "&lAtail;": "\u291B",
1722
+ "&lBarr;": "\u290E",
1723
+ "&lE;": "\u2266",
1724
+ "&lEg;": "\u2A8B",
1725
+ "&lHar;": "\u2962",
1726
+ "&lacute;": "\u013A",
1727
+ "&laemptyv;": "\u29B4",
1728
+ "&lagran;": "\u2112",
1729
+ "&lambda;": "\u03BB",
1730
+ "&lang;": "\u27E8",
1731
+ "&langd;": "\u2991",
1732
+ "&langle;": "\u27E8",
1733
+ "&lap;": "\u2A85",
1734
+ "&laquo": "\xAB",
1735
+ "&laquo;": "\xAB",
1736
+ "&larr;": "\u2190",
1737
+ "&larrb;": "\u21E4",
1738
+ "&larrbfs;": "\u291F",
1739
+ "&larrfs;": "\u291D",
1740
+ "&larrhk;": "\u21A9",
1741
+ "&larrlp;": "\u21AB",
1742
+ "&larrpl;": "\u2939",
1743
+ "&larrsim;": "\u2973",
1744
+ "&larrtl;": "\u21A2",
1745
+ "&lat;": "\u2AAB",
1746
+ "&latail;": "\u2919",
1747
+ "&late;": "\u2AAD",
1748
+ "&lates;": "\u2AAD\uFE00",
1749
+ "&lbarr;": "\u290C",
1750
+ "&lbbrk;": "\u2772",
1751
+ "&lbrace;": "{",
1752
+ "&lbrack;": "[",
1753
+ "&lbrke;": "\u298B",
1754
+ "&lbrksld;": "\u298F",
1755
+ "&lbrkslu;": "\u298D",
1756
+ "&lcaron;": "\u013E",
1757
+ "&lcedil;": "\u013C",
1758
+ "&lceil;": "\u2308",
1759
+ "&lcub;": "{",
1760
+ "&lcy;": "\u043B",
1761
+ "&ldca;": "\u2936",
1762
+ "&ldquo;": "\u201C",
1763
+ "&ldquor;": "\u201E",
1764
+ "&ldrdhar;": "\u2967",
1765
+ "&ldrushar;": "\u294B",
1766
+ "&ldsh;": "\u21B2",
1767
+ "&le;": "\u2264",
1768
+ "&leftarrow;": "\u2190",
1769
+ "&leftarrowtail;": "\u21A2",
1770
+ "&leftharpoondown;": "\u21BD",
1771
+ "&leftharpoonup;": "\u21BC",
1772
+ "&leftleftarrows;": "\u21C7",
1773
+ "&leftrightarrow;": "\u2194",
1774
+ "&leftrightarrows;": "\u21C6",
1775
+ "&leftrightharpoons;": "\u21CB",
1776
+ "&leftrightsquigarrow;": "\u21AD",
1777
+ "&leftthreetimes;": "\u22CB",
1778
+ "&leg;": "\u22DA",
1779
+ "&leq;": "\u2264",
1780
+ "&leqq;": "\u2266",
1781
+ "&leqslant;": "\u2A7D",
1782
+ "&les;": "\u2A7D",
1783
+ "&lescc;": "\u2AA8",
1784
+ "&lesdot;": "\u2A7F",
1785
+ "&lesdoto;": "\u2A81",
1786
+ "&lesdotor;": "\u2A83",
1787
+ "&lesg;": "\u22DA\uFE00",
1788
+ "&lesges;": "\u2A93",
1789
+ "&lessapprox;": "\u2A85",
1790
+ "&lessdot;": "\u22D6",
1791
+ "&lesseqgtr;": "\u22DA",
1792
+ "&lesseqqgtr;": "\u2A8B",
1793
+ "&lessgtr;": "\u2276",
1794
+ "&lesssim;": "\u2272",
1795
+ "&lfisht;": "\u297C",
1796
+ "&lfloor;": "\u230A",
1797
+ "&lfr;": "\u{1D529}",
1798
+ "&lg;": "\u2276",
1799
+ "&lgE;": "\u2A91",
1800
+ "&lhard;": "\u21BD",
1801
+ "&lharu;": "\u21BC",
1802
+ "&lharul;": "\u296A",
1803
+ "&lhblk;": "\u2584",
1804
+ "&ljcy;": "\u0459",
1805
+ "&ll;": "\u226A",
1806
+ "&llarr;": "\u21C7",
1807
+ "&llcorner;": "\u231E",
1808
+ "&llhard;": "\u296B",
1809
+ "&lltri;": "\u25FA",
1810
+ "&lmidot;": "\u0140",
1811
+ "&lmoust;": "\u23B0",
1812
+ "&lmoustache;": "\u23B0",
1813
+ "&lnE;": "\u2268",
1814
+ "&lnap;": "\u2A89",
1815
+ "&lnapprox;": "\u2A89",
1816
+ "&lne;": "\u2A87",
1817
+ "&lneq;": "\u2A87",
1818
+ "&lneqq;": "\u2268",
1819
+ "&lnsim;": "\u22E6",
1820
+ "&loang;": "\u27EC",
1821
+ "&loarr;": "\u21FD",
1822
+ "&lobrk;": "\u27E6",
1823
+ "&longleftarrow;": "\u27F5",
1824
+ "&longleftrightarrow;": "\u27F7",
1825
+ "&longmapsto;": "\u27FC",
1826
+ "&longrightarrow;": "\u27F6",
1827
+ "&looparrowleft;": "\u21AB",
1828
+ "&looparrowright;": "\u21AC",
1829
+ "&lopar;": "\u2985",
1830
+ "&lopf;": "\u{1D55D}",
1831
+ "&loplus;": "\u2A2D",
1832
+ "&lotimes;": "\u2A34",
1833
+ "&lowast;": "\u2217",
1834
+ "&lowbar;": "_",
1835
+ "&loz;": "\u25CA",
1836
+ "&lozenge;": "\u25CA",
1837
+ "&lozf;": "\u29EB",
1838
+ "&lpar;": "(",
1839
+ "&lparlt;": "\u2993",
1840
+ "&lrarr;": "\u21C6",
1841
+ "&lrcorner;": "\u231F",
1842
+ "&lrhar;": "\u21CB",
1843
+ "&lrhard;": "\u296D",
1844
+ "&lrm;": "\u200E",
1845
+ "&lrtri;": "\u22BF",
1846
+ "&lsaquo;": "\u2039",
1847
+ "&lscr;": "\u{1D4C1}",
1848
+ "&lsh;": "\u21B0",
1849
+ "&lsim;": "\u2272",
1850
+ "&lsime;": "\u2A8D",
1851
+ "&lsimg;": "\u2A8F",
1852
+ "&lsqb;": "[",
1853
+ "&lsquo;": "\u2018",
1854
+ "&lsquor;": "\u201A",
1855
+ "&lstrok;": "\u0142",
1856
+ "&lt": "<",
1857
+ "&lt;": "<",
1858
+ "&ltcc;": "\u2AA6",
1859
+ "&ltcir;": "\u2A79",
1860
+ "&ltdot;": "\u22D6",
1861
+ "&lthree;": "\u22CB",
1862
+ "&ltimes;": "\u22C9",
1863
+ "&ltlarr;": "\u2976",
1864
+ "&ltquest;": "\u2A7B",
1865
+ "&ltrPar;": "\u2996",
1866
+ "&ltri;": "\u25C3",
1867
+ "&ltrie;": "\u22B4",
1868
+ "&ltrif;": "\u25C2",
1869
+ "&lurdshar;": "\u294A",
1870
+ "&luruhar;": "\u2966",
1871
+ "&lvertneqq;": "\u2268\uFE00",
1872
+ "&lvnE;": "\u2268\uFE00",
1873
+ "&mDDot;": "\u223A",
1874
+ "&macr": "\xAF",
1875
+ "&macr;": "\xAF",
1876
+ "&male;": "\u2642",
1877
+ "&malt;": "\u2720",
1878
+ "&maltese;": "\u2720",
1879
+ "&map;": "\u21A6",
1880
+ "&mapsto;": "\u21A6",
1881
+ "&mapstodown;": "\u21A7",
1882
+ "&mapstoleft;": "\u21A4",
1883
+ "&mapstoup;": "\u21A5",
1884
+ "&marker;": "\u25AE",
1885
+ "&mcomma;": "\u2A29",
1886
+ "&mcy;": "\u043C",
1887
+ "&mdash;": "\u2014",
1888
+ "&measuredangle;": "\u2221",
1889
+ "&mfr;": "\u{1D52A}",
1890
+ "&mho;": "\u2127",
1891
+ "&micro": "\xB5",
1892
+ "&micro;": "\xB5",
1893
+ "&mid;": "\u2223",
1894
+ "&midast;": "*",
1895
+ "&midcir;": "\u2AF0",
1896
+ "&middot": "\xB7",
1897
+ "&middot;": "\xB7",
1898
+ "&minus;": "\u2212",
1899
+ "&minusb;": "\u229F",
1900
+ "&minusd;": "\u2238",
1901
+ "&minusdu;": "\u2A2A",
1902
+ "&mlcp;": "\u2ADB",
1903
+ "&mldr;": "\u2026",
1904
+ "&mnplus;": "\u2213",
1905
+ "&models;": "\u22A7",
1906
+ "&mopf;": "\u{1D55E}",
1907
+ "&mp;": "\u2213",
1908
+ "&mscr;": "\u{1D4C2}",
1909
+ "&mstpos;": "\u223E",
1910
+ "&mu;": "\u03BC",
1911
+ "&multimap;": "\u22B8",
1912
+ "&mumap;": "\u22B8",
1913
+ "&nGg;": "\u22D9\u0338",
1914
+ "&nGt;": "\u226B\u20D2",
1915
+ "&nGtv;": "\u226B\u0338",
1916
+ "&nLeftarrow;": "\u21CD",
1917
+ "&nLeftrightarrow;": "\u21CE",
1918
+ "&nLl;": "\u22D8\u0338",
1919
+ "&nLt;": "\u226A\u20D2",
1920
+ "&nLtv;": "\u226A\u0338",
1921
+ "&nRightarrow;": "\u21CF",
1922
+ "&nVDash;": "\u22AF",
1923
+ "&nVdash;": "\u22AE",
1924
+ "&nabla;": "\u2207",
1925
+ "&nacute;": "\u0144",
1926
+ "&nang;": "\u2220\u20D2",
1927
+ "&nap;": "\u2249",
1928
+ "&napE;": "\u2A70\u0338",
1929
+ "&napid;": "\u224B\u0338",
1930
+ "&napos;": "\u0149",
1931
+ "&napprox;": "\u2249",
1932
+ "&natur;": "\u266E",
1933
+ "&natural;": "\u266E",
1934
+ "&naturals;": "\u2115",
1935
+ "&nbsp": "\xA0",
1936
+ "&nbsp;": "\xA0",
1937
+ "&nbump;": "\u224E\u0338",
1938
+ "&nbumpe;": "\u224F\u0338",
1939
+ "&ncap;": "\u2A43",
1940
+ "&ncaron;": "\u0148",
1941
+ "&ncedil;": "\u0146",
1942
+ "&ncong;": "\u2247",
1943
+ "&ncongdot;": "\u2A6D\u0338",
1944
+ "&ncup;": "\u2A42",
1945
+ "&ncy;": "\u043D",
1946
+ "&ndash;": "\u2013",
1947
+ "&ne;": "\u2260",
1948
+ "&neArr;": "\u21D7",
1949
+ "&nearhk;": "\u2924",
1950
+ "&nearr;": "\u2197",
1951
+ "&nearrow;": "\u2197",
1952
+ "&nedot;": "\u2250\u0338",
1953
+ "&nequiv;": "\u2262",
1954
+ "&nesear;": "\u2928",
1955
+ "&nesim;": "\u2242\u0338",
1956
+ "&nexist;": "\u2204",
1957
+ "&nexists;": "\u2204",
1958
+ "&nfr;": "\u{1D52B}",
1959
+ "&ngE;": "\u2267\u0338",
1960
+ "&nge;": "\u2271",
1961
+ "&ngeq;": "\u2271",
1962
+ "&ngeqq;": "\u2267\u0338",
1963
+ "&ngeqslant;": "\u2A7E\u0338",
1964
+ "&nges;": "\u2A7E\u0338",
1965
+ "&ngsim;": "\u2275",
1966
+ "&ngt;": "\u226F",
1967
+ "&ngtr;": "\u226F",
1968
+ "&nhArr;": "\u21CE",
1969
+ "&nharr;": "\u21AE",
1970
+ "&nhpar;": "\u2AF2",
1971
+ "&ni;": "\u220B",
1972
+ "&nis;": "\u22FC",
1973
+ "&nisd;": "\u22FA",
1974
+ "&niv;": "\u220B",
1975
+ "&njcy;": "\u045A",
1976
+ "&nlArr;": "\u21CD",
1977
+ "&nlE;": "\u2266\u0338",
1978
+ "&nlarr;": "\u219A",
1979
+ "&nldr;": "\u2025",
1980
+ "&nle;": "\u2270",
1981
+ "&nleftarrow;": "\u219A",
1982
+ "&nleftrightarrow;": "\u21AE",
1983
+ "&nleq;": "\u2270",
1984
+ "&nleqq;": "\u2266\u0338",
1985
+ "&nleqslant;": "\u2A7D\u0338",
1986
+ "&nles;": "\u2A7D\u0338",
1987
+ "&nless;": "\u226E",
1988
+ "&nlsim;": "\u2274",
1989
+ "&nlt;": "\u226E",
1990
+ "&nltri;": "\u22EA",
1991
+ "&nltrie;": "\u22EC",
1992
+ "&nmid;": "\u2224",
1993
+ "&nopf;": "\u{1D55F}",
1994
+ "&not": "\xAC",
1995
+ "&not;": "\xAC",
1996
+ "&notin;": "\u2209",
1997
+ "&notinE;": "\u22F9\u0338",
1998
+ "&notindot;": "\u22F5\u0338",
1999
+ "&notinva;": "\u2209",
2000
+ "&notinvb;": "\u22F7",
2001
+ "&notinvc;": "\u22F6",
2002
+ "&notni;": "\u220C",
2003
+ "&notniva;": "\u220C",
2004
+ "&notnivb;": "\u22FE",
2005
+ "&notnivc;": "\u22FD",
2006
+ "&npar;": "\u2226",
2007
+ "&nparallel;": "\u2226",
2008
+ "&nparsl;": "\u2AFD\u20E5",
2009
+ "&npart;": "\u2202\u0338",
2010
+ "&npolint;": "\u2A14",
2011
+ "&npr;": "\u2280",
2012
+ "&nprcue;": "\u22E0",
2013
+ "&npre;": "\u2AAF\u0338",
2014
+ "&nprec;": "\u2280",
2015
+ "&npreceq;": "\u2AAF\u0338",
2016
+ "&nrArr;": "\u21CF",
2017
+ "&nrarr;": "\u219B",
2018
+ "&nrarrc;": "\u2933\u0338",
2019
+ "&nrarrw;": "\u219D\u0338",
2020
+ "&nrightarrow;": "\u219B",
2021
+ "&nrtri;": "\u22EB",
2022
+ "&nrtrie;": "\u22ED",
2023
+ "&nsc;": "\u2281",
2024
+ "&nsccue;": "\u22E1",
2025
+ "&nsce;": "\u2AB0\u0338",
2026
+ "&nscr;": "\u{1D4C3}",
2027
+ "&nshortmid;": "\u2224",
2028
+ "&nshortparallel;": "\u2226",
2029
+ "&nsim;": "\u2241",
2030
+ "&nsime;": "\u2244",
2031
+ "&nsimeq;": "\u2244",
2032
+ "&nsmid;": "\u2224",
2033
+ "&nspar;": "\u2226",
2034
+ "&nsqsube;": "\u22E2",
2035
+ "&nsqsupe;": "\u22E3",
2036
+ "&nsub;": "\u2284",
2037
+ "&nsubE;": "\u2AC5\u0338",
2038
+ "&nsube;": "\u2288",
2039
+ "&nsubset;": "\u2282\u20D2",
2040
+ "&nsubseteq;": "\u2288",
2041
+ "&nsubseteqq;": "\u2AC5\u0338",
2042
+ "&nsucc;": "\u2281",
2043
+ "&nsucceq;": "\u2AB0\u0338",
2044
+ "&nsup;": "\u2285",
2045
+ "&nsupE;": "\u2AC6\u0338",
2046
+ "&nsupe;": "\u2289",
2047
+ "&nsupset;": "\u2283\u20D2",
2048
+ "&nsupseteq;": "\u2289",
2049
+ "&nsupseteqq;": "\u2AC6\u0338",
2050
+ "&ntgl;": "\u2279",
2051
+ "&ntilde": "\xF1",
2052
+ "&ntilde;": "\xF1",
2053
+ "&ntlg;": "\u2278",
2054
+ "&ntriangleleft;": "\u22EA",
2055
+ "&ntrianglelefteq;": "\u22EC",
2056
+ "&ntriangleright;": "\u22EB",
2057
+ "&ntrianglerighteq;": "\u22ED",
2058
+ "&nu;": "\u03BD",
2059
+ "&num;": "#",
2060
+ "&numero;": "\u2116",
2061
+ "&numsp;": "\u2007",
2062
+ "&nvDash;": "\u22AD",
2063
+ "&nvHarr;": "\u2904",
2064
+ "&nvap;": "\u224D\u20D2",
2065
+ "&nvdash;": "\u22AC",
2066
+ "&nvge;": "\u2265\u20D2",
2067
+ "&nvgt;": ">\u20D2",
2068
+ "&nvinfin;": "\u29DE",
2069
+ "&nvlArr;": "\u2902",
2070
+ "&nvle;": "\u2264\u20D2",
2071
+ "&nvlt;": "<\u20D2",
2072
+ "&nvltrie;": "\u22B4\u20D2",
2073
+ "&nvrArr;": "\u2903",
2074
+ "&nvrtrie;": "\u22B5\u20D2",
2075
+ "&nvsim;": "\u223C\u20D2",
2076
+ "&nwArr;": "\u21D6",
2077
+ "&nwarhk;": "\u2923",
2078
+ "&nwarr;": "\u2196",
2079
+ "&nwarrow;": "\u2196",
2080
+ "&nwnear;": "\u2927",
2081
+ "&oS;": "\u24C8",
2082
+ "&oacute": "\xF3",
2083
+ "&oacute;": "\xF3",
2084
+ "&oast;": "\u229B",
2085
+ "&ocir;": "\u229A",
2086
+ "&ocirc": "\xF4",
2087
+ "&ocirc;": "\xF4",
2088
+ "&ocy;": "\u043E",
2089
+ "&odash;": "\u229D",
2090
+ "&odblac;": "\u0151",
2091
+ "&odiv;": "\u2A38",
2092
+ "&odot;": "\u2299",
2093
+ "&odsold;": "\u29BC",
2094
+ "&oelig;": "\u0153",
2095
+ "&ofcir;": "\u29BF",
2096
+ "&ofr;": "\u{1D52C}",
2097
+ "&ogon;": "\u02DB",
2098
+ "&ograve": "\xF2",
2099
+ "&ograve;": "\xF2",
2100
+ "&ogt;": "\u29C1",
2101
+ "&ohbar;": "\u29B5",
2102
+ "&ohm;": "\u03A9",
2103
+ "&oint;": "\u222E",
2104
+ "&olarr;": "\u21BA",
2105
+ "&olcir;": "\u29BE",
2106
+ "&olcross;": "\u29BB",
2107
+ "&oline;": "\u203E",
2108
+ "&olt;": "\u29C0",
2109
+ "&omacr;": "\u014D",
2110
+ "&omega;": "\u03C9",
2111
+ "&omicron;": "\u03BF",
2112
+ "&omid;": "\u29B6",
2113
+ "&ominus;": "\u2296",
2114
+ "&oopf;": "\u{1D560}",
2115
+ "&opar;": "\u29B7",
2116
+ "&operp;": "\u29B9",
2117
+ "&oplus;": "\u2295",
2118
+ "&or;": "\u2228",
2119
+ "&orarr;": "\u21BB",
2120
+ "&ord;": "\u2A5D",
2121
+ "&order;": "\u2134",
2122
+ "&orderof;": "\u2134",
2123
+ "&ordf": "\xAA",
2124
+ "&ordf;": "\xAA",
2125
+ "&ordm": "\xBA",
2126
+ "&ordm;": "\xBA",
2127
+ "&origof;": "\u22B6",
2128
+ "&oror;": "\u2A56",
2129
+ "&orslope;": "\u2A57",
2130
+ "&orv;": "\u2A5B",
2131
+ "&oscr;": "\u2134",
2132
+ "&oslash": "\xF8",
2133
+ "&oslash;": "\xF8",
2134
+ "&osol;": "\u2298",
2135
+ "&otilde": "\xF5",
2136
+ "&otilde;": "\xF5",
2137
+ "&otimes;": "\u2297",
2138
+ "&otimesas;": "\u2A36",
2139
+ "&ouml": "\xF6",
2140
+ "&ouml;": "\xF6",
2141
+ "&ovbar;": "\u233D",
2142
+ "&par;": "\u2225",
2143
+ "&para": "\xB6",
2144
+ "&para;": "\xB6",
2145
+ "&parallel;": "\u2225",
2146
+ "&parsim;": "\u2AF3",
2147
+ "&parsl;": "\u2AFD",
2148
+ "&part;": "\u2202",
2149
+ "&pcy;": "\u043F",
2150
+ "&percnt;": "%",
2151
+ "&period;": ".",
2152
+ "&permil;": "\u2030",
2153
+ "&perp;": "\u22A5",
2154
+ "&pertenk;": "\u2031",
2155
+ "&pfr;": "\u{1D52D}",
2156
+ "&phi;": "\u03C6",
2157
+ "&phiv;": "\u03D5",
2158
+ "&phmmat;": "\u2133",
2159
+ "&phone;": "\u260E",
2160
+ "&pi;": "\u03C0",
2161
+ "&pitchfork;": "\u22D4",
2162
+ "&piv;": "\u03D6",
2163
+ "&planck;": "\u210F",
2164
+ "&planckh;": "\u210E",
2165
+ "&plankv;": "\u210F",
2166
+ "&plus;": "+",
2167
+ "&plusacir;": "\u2A23",
2168
+ "&plusb;": "\u229E",
2169
+ "&pluscir;": "\u2A22",
2170
+ "&plusdo;": "\u2214",
2171
+ "&plusdu;": "\u2A25",
2172
+ "&pluse;": "\u2A72",
2173
+ "&plusmn": "\xB1",
2174
+ "&plusmn;": "\xB1",
2175
+ "&plussim;": "\u2A26",
2176
+ "&plustwo;": "\u2A27",
2177
+ "&pm;": "\xB1",
2178
+ "&pointint;": "\u2A15",
2179
+ "&popf;": "\u{1D561}",
2180
+ "&pound": "\xA3",
2181
+ "&pound;": "\xA3",
2182
+ "&pr;": "\u227A",
2183
+ "&prE;": "\u2AB3",
2184
+ "&prap;": "\u2AB7",
2185
+ "&prcue;": "\u227C",
2186
+ "&pre;": "\u2AAF",
2187
+ "&prec;": "\u227A",
2188
+ "&precapprox;": "\u2AB7",
2189
+ "&preccurlyeq;": "\u227C",
2190
+ "&preceq;": "\u2AAF",
2191
+ "&precnapprox;": "\u2AB9",
2192
+ "&precneqq;": "\u2AB5",
2193
+ "&precnsim;": "\u22E8",
2194
+ "&precsim;": "\u227E",
2195
+ "&prime;": "\u2032",
2196
+ "&primes;": "\u2119",
2197
+ "&prnE;": "\u2AB5",
2198
+ "&prnap;": "\u2AB9",
2199
+ "&prnsim;": "\u22E8",
2200
+ "&prod;": "\u220F",
2201
+ "&profalar;": "\u232E",
2202
+ "&profline;": "\u2312",
2203
+ "&profsurf;": "\u2313",
2204
+ "&prop;": "\u221D",
2205
+ "&propto;": "\u221D",
2206
+ "&prsim;": "\u227E",
2207
+ "&prurel;": "\u22B0",
2208
+ "&pscr;": "\u{1D4C5}",
2209
+ "&psi;": "\u03C8",
2210
+ "&puncsp;": "\u2008",
2211
+ "&qfr;": "\u{1D52E}",
2212
+ "&qint;": "\u2A0C",
2213
+ "&qopf;": "\u{1D562}",
2214
+ "&qprime;": "\u2057",
2215
+ "&qscr;": "\u{1D4C6}",
2216
+ "&quaternions;": "\u210D",
2217
+ "&quatint;": "\u2A16",
2218
+ "&quest;": "?",
2219
+ "&questeq;": "\u225F",
2220
+ "&quot": '"',
2221
+ "&quot;": '"',
2222
+ "&rAarr;": "\u21DB",
2223
+ "&rArr;": "\u21D2",
2224
+ "&rAtail;": "\u291C",
2225
+ "&rBarr;": "\u290F",
2226
+ "&rHar;": "\u2964",
2227
+ "&race;": "\u223D\u0331",
2228
+ "&racute;": "\u0155",
2229
+ "&radic;": "\u221A",
2230
+ "&raemptyv;": "\u29B3",
2231
+ "&rang;": "\u27E9",
2232
+ "&rangd;": "\u2992",
2233
+ "&range;": "\u29A5",
2234
+ "&rangle;": "\u27E9",
2235
+ "&raquo": "\xBB",
2236
+ "&raquo;": "\xBB",
2237
+ "&rarr;": "\u2192",
2238
+ "&rarrap;": "\u2975",
2239
+ "&rarrb;": "\u21E5",
2240
+ "&rarrbfs;": "\u2920",
2241
+ "&rarrc;": "\u2933",
2242
+ "&rarrfs;": "\u291E",
2243
+ "&rarrhk;": "\u21AA",
2244
+ "&rarrlp;": "\u21AC",
2245
+ "&rarrpl;": "\u2945",
2246
+ "&rarrsim;": "\u2974",
2247
+ "&rarrtl;": "\u21A3",
2248
+ "&rarrw;": "\u219D",
2249
+ "&ratail;": "\u291A",
2250
+ "&ratio;": "\u2236",
2251
+ "&rationals;": "\u211A",
2252
+ "&rbarr;": "\u290D",
2253
+ "&rbbrk;": "\u2773",
2254
+ "&rbrace;": "}",
2255
+ "&rbrack;": "]",
2256
+ "&rbrke;": "\u298C",
2257
+ "&rbrksld;": "\u298E",
2258
+ "&rbrkslu;": "\u2990",
2259
+ "&rcaron;": "\u0159",
2260
+ "&rcedil;": "\u0157",
2261
+ "&rceil;": "\u2309",
2262
+ "&rcub;": "}",
2263
+ "&rcy;": "\u0440",
2264
+ "&rdca;": "\u2937",
2265
+ "&rdldhar;": "\u2969",
2266
+ "&rdquo;": "\u201D",
2267
+ "&rdquor;": "\u201D",
2268
+ "&rdsh;": "\u21B3",
2269
+ "&real;": "\u211C",
2270
+ "&realine;": "\u211B",
2271
+ "&realpart;": "\u211C",
2272
+ "&reals;": "\u211D",
2273
+ "&rect;": "\u25AD",
2274
+ "&reg": "\xAE",
2275
+ "&reg;": "\xAE",
2276
+ "&rfisht;": "\u297D",
2277
+ "&rfloor;": "\u230B",
2278
+ "&rfr;": "\u{1D52F}",
2279
+ "&rhard;": "\u21C1",
2280
+ "&rharu;": "\u21C0",
2281
+ "&rharul;": "\u296C",
2282
+ "&rho;": "\u03C1",
2283
+ "&rhov;": "\u03F1",
2284
+ "&rightarrow;": "\u2192",
2285
+ "&rightarrowtail;": "\u21A3",
2286
+ "&rightharpoondown;": "\u21C1",
2287
+ "&rightharpoonup;": "\u21C0",
2288
+ "&rightleftarrows;": "\u21C4",
2289
+ "&rightleftharpoons;": "\u21CC",
2290
+ "&rightrightarrows;": "\u21C9",
2291
+ "&rightsquigarrow;": "\u219D",
2292
+ "&rightthreetimes;": "\u22CC",
2293
+ "&ring;": "\u02DA",
2294
+ "&risingdotseq;": "\u2253",
2295
+ "&rlarr;": "\u21C4",
2296
+ "&rlhar;": "\u21CC",
2297
+ "&rlm;": "\u200F",
2298
+ "&rmoust;": "\u23B1",
2299
+ "&rmoustache;": "\u23B1",
2300
+ "&rnmid;": "\u2AEE",
2301
+ "&roang;": "\u27ED",
2302
+ "&roarr;": "\u21FE",
2303
+ "&robrk;": "\u27E7",
2304
+ "&ropar;": "\u2986",
2305
+ "&ropf;": "\u{1D563}",
2306
+ "&roplus;": "\u2A2E",
2307
+ "&rotimes;": "\u2A35",
2308
+ "&rpar;": ")",
2309
+ "&rpargt;": "\u2994",
2310
+ "&rppolint;": "\u2A12",
2311
+ "&rrarr;": "\u21C9",
2312
+ "&rsaquo;": "\u203A",
2313
+ "&rscr;": "\u{1D4C7}",
2314
+ "&rsh;": "\u21B1",
2315
+ "&rsqb;": "]",
2316
+ "&rsquo;": "\u2019",
2317
+ "&rsquor;": "\u2019",
2318
+ "&rthree;": "\u22CC",
2319
+ "&rtimes;": "\u22CA",
2320
+ "&rtri;": "\u25B9",
2321
+ "&rtrie;": "\u22B5",
2322
+ "&rtrif;": "\u25B8",
2323
+ "&rtriltri;": "\u29CE",
2324
+ "&ruluhar;": "\u2968",
2325
+ "&rx;": "\u211E",
2326
+ "&sacute;": "\u015B",
2327
+ "&sbquo;": "\u201A",
2328
+ "&sc;": "\u227B",
2329
+ "&scE;": "\u2AB4",
2330
+ "&scap;": "\u2AB8",
2331
+ "&scaron;": "\u0161",
2332
+ "&sccue;": "\u227D",
2333
+ "&sce;": "\u2AB0",
2334
+ "&scedil;": "\u015F",
2335
+ "&scirc;": "\u015D",
2336
+ "&scnE;": "\u2AB6",
2337
+ "&scnap;": "\u2ABA",
2338
+ "&scnsim;": "\u22E9",
2339
+ "&scpolint;": "\u2A13",
2340
+ "&scsim;": "\u227F",
2341
+ "&scy;": "\u0441",
2342
+ "&sdot;": "\u22C5",
2343
+ "&sdotb;": "\u22A1",
2344
+ "&sdote;": "\u2A66",
2345
+ "&seArr;": "\u21D8",
2346
+ "&searhk;": "\u2925",
2347
+ "&searr;": "\u2198",
2348
+ "&searrow;": "\u2198",
2349
+ "&sect": "\xA7",
2350
+ "&sect;": "\xA7",
2351
+ "&semi;": ";",
2352
+ "&seswar;": "\u2929",
2353
+ "&setminus;": "\u2216",
2354
+ "&setmn;": "\u2216",
2355
+ "&sext;": "\u2736",
2356
+ "&sfr;": "\u{1D530}",
2357
+ "&sfrown;": "\u2322",
2358
+ "&sharp;": "\u266F",
2359
+ "&shchcy;": "\u0449",
2360
+ "&shcy;": "\u0448",
2361
+ "&shortmid;": "\u2223",
2362
+ "&shortparallel;": "\u2225",
2363
+ "&shy": "\xAD",
2364
+ "&shy;": "\xAD",
2365
+ "&sigma;": "\u03C3",
2366
+ "&sigmaf;": "\u03C2",
2367
+ "&sigmav;": "\u03C2",
2368
+ "&sim;": "\u223C",
2369
+ "&simdot;": "\u2A6A",
2370
+ "&sime;": "\u2243",
2371
+ "&simeq;": "\u2243",
2372
+ "&simg;": "\u2A9E",
2373
+ "&simgE;": "\u2AA0",
2374
+ "&siml;": "\u2A9D",
2375
+ "&simlE;": "\u2A9F",
2376
+ "&simne;": "\u2246",
2377
+ "&simplus;": "\u2A24",
2378
+ "&simrarr;": "\u2972",
2379
+ "&slarr;": "\u2190",
2380
+ "&smallsetminus;": "\u2216",
2381
+ "&smashp;": "\u2A33",
2382
+ "&smeparsl;": "\u29E4",
2383
+ "&smid;": "\u2223",
2384
+ "&smile;": "\u2323",
2385
+ "&smt;": "\u2AAA",
2386
+ "&smte;": "\u2AAC",
2387
+ "&smtes;": "\u2AAC\uFE00",
2388
+ "&softcy;": "\u044C",
2389
+ "&sol;": "/",
2390
+ "&solb;": "\u29C4",
2391
+ "&solbar;": "\u233F",
2392
+ "&sopf;": "\u{1D564}",
2393
+ "&spades;": "\u2660",
2394
+ "&spadesuit;": "\u2660",
2395
+ "&spar;": "\u2225",
2396
+ "&sqcap;": "\u2293",
2397
+ "&sqcaps;": "\u2293\uFE00",
2398
+ "&sqcup;": "\u2294",
2399
+ "&sqcups;": "\u2294\uFE00",
2400
+ "&sqsub;": "\u228F",
2401
+ "&sqsube;": "\u2291",
2402
+ "&sqsubset;": "\u228F",
2403
+ "&sqsubseteq;": "\u2291",
2404
+ "&sqsup;": "\u2290",
2405
+ "&sqsupe;": "\u2292",
2406
+ "&sqsupset;": "\u2290",
2407
+ "&sqsupseteq;": "\u2292",
2408
+ "&squ;": "\u25A1",
2409
+ "&square;": "\u25A1",
2410
+ "&squarf;": "\u25AA",
2411
+ "&squf;": "\u25AA",
2412
+ "&srarr;": "\u2192",
2413
+ "&sscr;": "\u{1D4C8}",
2414
+ "&ssetmn;": "\u2216",
2415
+ "&ssmile;": "\u2323",
2416
+ "&sstarf;": "\u22C6",
2417
+ "&star;": "\u2606",
2418
+ "&starf;": "\u2605",
2419
+ "&straightepsilon;": "\u03F5",
2420
+ "&straightphi;": "\u03D5",
2421
+ "&strns;": "\xAF",
2422
+ "&sub;": "\u2282",
2423
+ "&subE;": "\u2AC5",
2424
+ "&subdot;": "\u2ABD",
2425
+ "&sube;": "\u2286",
2426
+ "&subedot;": "\u2AC3",
2427
+ "&submult;": "\u2AC1",
2428
+ "&subnE;": "\u2ACB",
2429
+ "&subne;": "\u228A",
2430
+ "&subplus;": "\u2ABF",
2431
+ "&subrarr;": "\u2979",
2432
+ "&subset;": "\u2282",
2433
+ "&subseteq;": "\u2286",
2434
+ "&subseteqq;": "\u2AC5",
2435
+ "&subsetneq;": "\u228A",
2436
+ "&subsetneqq;": "\u2ACB",
2437
+ "&subsim;": "\u2AC7",
2438
+ "&subsub;": "\u2AD5",
2439
+ "&subsup;": "\u2AD3",
2440
+ "&succ;": "\u227B",
2441
+ "&succapprox;": "\u2AB8",
2442
+ "&succcurlyeq;": "\u227D",
2443
+ "&succeq;": "\u2AB0",
2444
+ "&succnapprox;": "\u2ABA",
2445
+ "&succneqq;": "\u2AB6",
2446
+ "&succnsim;": "\u22E9",
2447
+ "&succsim;": "\u227F",
2448
+ "&sum;": "\u2211",
2449
+ "&sung;": "\u266A",
2450
+ "&sup1": "\xB9",
2451
+ "&sup1;": "\xB9",
2452
+ "&sup2": "\xB2",
2453
+ "&sup2;": "\xB2",
2454
+ "&sup3": "\xB3",
2455
+ "&sup3;": "\xB3",
2456
+ "&sup;": "\u2283",
2457
+ "&supE;": "\u2AC6",
2458
+ "&supdot;": "\u2ABE",
2459
+ "&supdsub;": "\u2AD8",
2460
+ "&supe;": "\u2287",
2461
+ "&supedot;": "\u2AC4",
2462
+ "&suphsol;": "\u27C9",
2463
+ "&suphsub;": "\u2AD7",
2464
+ "&suplarr;": "\u297B",
2465
+ "&supmult;": "\u2AC2",
2466
+ "&supnE;": "\u2ACC",
2467
+ "&supne;": "\u228B",
2468
+ "&supplus;": "\u2AC0",
2469
+ "&supset;": "\u2283",
2470
+ "&supseteq;": "\u2287",
2471
+ "&supseteqq;": "\u2AC6",
2472
+ "&supsetneq;": "\u228B",
2473
+ "&supsetneqq;": "\u2ACC",
2474
+ "&supsim;": "\u2AC8",
2475
+ "&supsub;": "\u2AD4",
2476
+ "&supsup;": "\u2AD6",
2477
+ "&swArr;": "\u21D9",
2478
+ "&swarhk;": "\u2926",
2479
+ "&swarr;": "\u2199",
2480
+ "&swarrow;": "\u2199",
2481
+ "&swnwar;": "\u292A",
2482
+ "&szlig": "\xDF",
2483
+ "&szlig;": "\xDF",
2484
+ "&target;": "\u2316",
2485
+ "&tau;": "\u03C4",
2486
+ "&tbrk;": "\u23B4",
2487
+ "&tcaron;": "\u0165",
2488
+ "&tcedil;": "\u0163",
2489
+ "&tcy;": "\u0442",
2490
+ "&tdot;": "\u20DB",
2491
+ "&telrec;": "\u2315",
2492
+ "&tfr;": "\u{1D531}",
2493
+ "&there4;": "\u2234",
2494
+ "&therefore;": "\u2234",
2495
+ "&theta;": "\u03B8",
2496
+ "&thetasym;": "\u03D1",
2497
+ "&thetav;": "\u03D1",
2498
+ "&thickapprox;": "\u2248",
2499
+ "&thicksim;": "\u223C",
2500
+ "&thinsp;": "\u2009",
2501
+ "&thkap;": "\u2248",
2502
+ "&thksim;": "\u223C",
2503
+ "&thorn": "\xFE",
2504
+ "&thorn;": "\xFE",
2505
+ "&tilde;": "\u02DC",
2506
+ "&times": "\xD7",
2507
+ "&times;": "\xD7",
2508
+ "&timesb;": "\u22A0",
2509
+ "&timesbar;": "\u2A31",
2510
+ "&timesd;": "\u2A30",
2511
+ "&tint;": "\u222D",
2512
+ "&toea;": "\u2928",
2513
+ "&top;": "\u22A4",
2514
+ "&topbot;": "\u2336",
2515
+ "&topcir;": "\u2AF1",
2516
+ "&topf;": "\u{1D565}",
2517
+ "&topfork;": "\u2ADA",
2518
+ "&tosa;": "\u2929",
2519
+ "&tprime;": "\u2034",
2520
+ "&trade;": "\u2122",
2521
+ "&triangle;": "\u25B5",
2522
+ "&triangledown;": "\u25BF",
2523
+ "&triangleleft;": "\u25C3",
2524
+ "&trianglelefteq;": "\u22B4",
2525
+ "&triangleq;": "\u225C",
2526
+ "&triangleright;": "\u25B9",
2527
+ "&trianglerighteq;": "\u22B5",
2528
+ "&tridot;": "\u25EC",
2529
+ "&trie;": "\u225C",
2530
+ "&triminus;": "\u2A3A",
2531
+ "&triplus;": "\u2A39",
2532
+ "&trisb;": "\u29CD",
2533
+ "&tritime;": "\u2A3B",
2534
+ "&trpezium;": "\u23E2",
2535
+ "&tscr;": "\u{1D4C9}",
2536
+ "&tscy;": "\u0446",
2537
+ "&tshcy;": "\u045B",
2538
+ "&tstrok;": "\u0167",
2539
+ "&twixt;": "\u226C",
2540
+ "&twoheadleftarrow;": "\u219E",
2541
+ "&twoheadrightarrow;": "\u21A0",
2542
+ "&uArr;": "\u21D1",
2543
+ "&uHar;": "\u2963",
2544
+ "&uacute": "\xFA",
2545
+ "&uacute;": "\xFA",
2546
+ "&uarr;": "\u2191",
2547
+ "&ubrcy;": "\u045E",
2548
+ "&ubreve;": "\u016D",
2549
+ "&ucirc": "\xFB",
2550
+ "&ucirc;": "\xFB",
2551
+ "&ucy;": "\u0443",
2552
+ "&udarr;": "\u21C5",
2553
+ "&udblac;": "\u0171",
2554
+ "&udhar;": "\u296E",
2555
+ "&ufisht;": "\u297E",
2556
+ "&ufr;": "\u{1D532}",
2557
+ "&ugrave": "\xF9",
2558
+ "&ugrave;": "\xF9",
2559
+ "&uharl;": "\u21BF",
2560
+ "&uharr;": "\u21BE",
2561
+ "&uhblk;": "\u2580",
2562
+ "&ulcorn;": "\u231C",
2563
+ "&ulcorner;": "\u231C",
2564
+ "&ulcrop;": "\u230F",
2565
+ "&ultri;": "\u25F8",
2566
+ "&umacr;": "\u016B",
2567
+ "&uml": "\xA8",
2568
+ "&uml;": "\xA8",
2569
+ "&uogon;": "\u0173",
2570
+ "&uopf;": "\u{1D566}",
2571
+ "&uparrow;": "\u2191",
2572
+ "&updownarrow;": "\u2195",
2573
+ "&upharpoonleft;": "\u21BF",
2574
+ "&upharpoonright;": "\u21BE",
2575
+ "&uplus;": "\u228E",
2576
+ "&upsi;": "\u03C5",
2577
+ "&upsih;": "\u03D2",
2578
+ "&upsilon;": "\u03C5",
2579
+ "&upuparrows;": "\u21C8",
2580
+ "&urcorn;": "\u231D",
2581
+ "&urcorner;": "\u231D",
2582
+ "&urcrop;": "\u230E",
2583
+ "&uring;": "\u016F",
2584
+ "&urtri;": "\u25F9",
2585
+ "&uscr;": "\u{1D4CA}",
2586
+ "&utdot;": "\u22F0",
2587
+ "&utilde;": "\u0169",
2588
+ "&utri;": "\u25B5",
2589
+ "&utrif;": "\u25B4",
2590
+ "&uuarr;": "\u21C8",
2591
+ "&uuml": "\xFC",
2592
+ "&uuml;": "\xFC",
2593
+ "&uwangle;": "\u29A7",
2594
+ "&vArr;": "\u21D5",
2595
+ "&vBar;": "\u2AE8",
2596
+ "&vBarv;": "\u2AE9",
2597
+ "&vDash;": "\u22A8",
2598
+ "&vangrt;": "\u299C",
2599
+ "&varepsilon;": "\u03F5",
2600
+ "&varkappa;": "\u03F0",
2601
+ "&varnothing;": "\u2205",
2602
+ "&varphi;": "\u03D5",
2603
+ "&varpi;": "\u03D6",
2604
+ "&varpropto;": "\u221D",
2605
+ "&varr;": "\u2195",
2606
+ "&varrho;": "\u03F1",
2607
+ "&varsigma;": "\u03C2",
2608
+ "&varsubsetneq;": "\u228A\uFE00",
2609
+ "&varsubsetneqq;": "\u2ACB\uFE00",
2610
+ "&varsupsetneq;": "\u228B\uFE00",
2611
+ "&varsupsetneqq;": "\u2ACC\uFE00",
2612
+ "&vartheta;": "\u03D1",
2613
+ "&vartriangleleft;": "\u22B2",
2614
+ "&vartriangleright;": "\u22B3",
2615
+ "&vcy;": "\u0432",
2616
+ "&vdash;": "\u22A2",
2617
+ "&vee;": "\u2228",
2618
+ "&veebar;": "\u22BB",
2619
+ "&veeeq;": "\u225A",
2620
+ "&vellip;": "\u22EE",
2621
+ "&verbar;": "|",
2622
+ "&vert;": "|",
2623
+ "&vfr;": "\u{1D533}",
2624
+ "&vltri;": "\u22B2",
2625
+ "&vnsub;": "\u2282\u20D2",
2626
+ "&vnsup;": "\u2283\u20D2",
2627
+ "&vopf;": "\u{1D567}",
2628
+ "&vprop;": "\u221D",
2629
+ "&vrtri;": "\u22B3",
2630
+ "&vscr;": "\u{1D4CB}",
2631
+ "&vsubnE;": "\u2ACB\uFE00",
2632
+ "&vsubne;": "\u228A\uFE00",
2633
+ "&vsupnE;": "\u2ACC\uFE00",
2634
+ "&vsupne;": "\u228B\uFE00",
2635
+ "&vzigzag;": "\u299A",
2636
+ "&wcirc;": "\u0175",
2637
+ "&wedbar;": "\u2A5F",
2638
+ "&wedge;": "\u2227",
2639
+ "&wedgeq;": "\u2259",
2640
+ "&weierp;": "\u2118",
2641
+ "&wfr;": "\u{1D534}",
2642
+ "&wopf;": "\u{1D568}",
2643
+ "&wp;": "\u2118",
2644
+ "&wr;": "\u2240",
2645
+ "&wreath;": "\u2240",
2646
+ "&wscr;": "\u{1D4CC}",
2647
+ "&xcap;": "\u22C2",
2648
+ "&xcirc;": "\u25EF",
2649
+ "&xcup;": "\u22C3",
2650
+ "&xdtri;": "\u25BD",
2651
+ "&xfr;": "\u{1D535}",
2652
+ "&xhArr;": "\u27FA",
2653
+ "&xharr;": "\u27F7",
2654
+ "&xi;": "\u03BE",
2655
+ "&xlArr;": "\u27F8",
2656
+ "&xlarr;": "\u27F5",
2657
+ "&xmap;": "\u27FC",
2658
+ "&xnis;": "\u22FB",
2659
+ "&xodot;": "\u2A00",
2660
+ "&xopf;": "\u{1D569}",
2661
+ "&xoplus;": "\u2A01",
2662
+ "&xotime;": "\u2A02",
2663
+ "&xrArr;": "\u27F9",
2664
+ "&xrarr;": "\u27F6",
2665
+ "&xscr;": "\u{1D4CD}",
2666
+ "&xsqcup;": "\u2A06",
2667
+ "&xuplus;": "\u2A04",
2668
+ "&xutri;": "\u25B3",
2669
+ "&xvee;": "\u22C1",
2670
+ "&xwedge;": "\u22C0",
2671
+ "&yacute": "\xFD",
2672
+ "&yacute;": "\xFD",
2673
+ "&yacy;": "\u044F",
2674
+ "&ycirc;": "\u0177",
2675
+ "&ycy;": "\u044B",
2676
+ "&yen": "\xA5",
2677
+ "&yen;": "\xA5",
2678
+ "&yfr;": "\u{1D536}",
2679
+ "&yicy;": "\u0457",
2680
+ "&yopf;": "\u{1D56A}",
2681
+ "&yscr;": "\u{1D4CE}",
2682
+ "&yucy;": "\u044E",
2683
+ "&yuml": "\xFF",
2684
+ "&yuml;": "\xFF",
2685
+ "&zacute;": "\u017A",
2686
+ "&zcaron;": "\u017E",
2687
+ "&zcy;": "\u0437",
2688
+ "&zdot;": "\u017C",
2689
+ "&zeetrf;": "\u2128",
2690
+ "&zeta;": "\u03B6",
2691
+ "&zfr;": "\u{1D537}",
2692
+ "&zhcy;": "\u0436",
2693
+ "&zigrarr;": "\u21DD",
2694
+ "&zopf;": "\u{1D56B}",
2695
+ "&zscr;": "\u{1D4CF}",
2696
+ "&zwj;": "\u200D",
2697
+ "&zwnj;": "\u200C"
2698
+ }, html_entities_default = htmlEntities;
2699
+
2700
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/text-format.js
2701
+ function decodeHTMLEntities(str) {
2702
+ return str.replace(/&(#\d+|#x[a-f0-9]+|[a-z]+\d*);?/gi, (match, entity) => {
2703
+ if (typeof html_entities_default[match] == "string")
2704
+ return html_entities_default[match];
2705
+ if (entity.charAt(0) !== "#" || match.charAt(match.length - 1) !== ";")
2706
+ return match;
2707
+ let codePoint;
2708
+ entity.charAt(1) === "x" ? codePoint = parseInt(entity.substr(2), 16) : codePoint = parseInt(entity.substr(1), 10);
2709
+ var output = "";
2710
+ return codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111 ? "\uFFFD" : (codePoint > 65535 && (codePoint -= 65536, output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296), codePoint = 56320 | codePoint & 1023), output += String.fromCharCode(codePoint), output);
2711
+ });
2712
+ }
2713
+ function escapeHtml(str) {
2714
+ return str.trim().replace(/[<>"'?&]/g, (c) => {
2715
+ let hex = c.charCodeAt(0).toString(16);
2716
+ return hex.length < 2 && (hex = "0" + hex), "&#x" + hex.toUpperCase() + ";";
2717
+ });
2718
+ }
2719
+ function textToHtml(str) {
2720
+ return "<div>" + escapeHtml(str).replace(/\n/g, "<br />") + "</div>";
2721
+ }
2722
+ function htmlToText(str) {
2723
+ return str = str.replace(/\r?\n/g, "").replace(/<\!\-\-.*?\-\->/gi, " ").replace(/<br\b[^>]*>/gi, `
2724
+ `).replace(/<\/?(p|div|table|tr|td|th)\b[^>]*>/gi, `
2725
+
2726
+ `).replace(/<script\b[^>]*>.*?<\/script\b[^>]*>/gi, " ").replace(/^.*<body\b[^>]*>/i, "").replace(/^.*<\/head\b[^>]*>/i, "").replace(/^.*<\!doctype\b[^>]*>/i, "").replace(/<\/body\b[^>]*>.*$/i, "").replace(/<\/html\b[^>]*>.*$/i, "").replace(/<a\b[^>]*href\s*=\s*["']?([^\s"']+)[^>]*>/gi, " ($1) ").replace(/<\/?(span|em|i|strong|b|u|a)\b[^>]*>/gi, "").replace(/<li\b[^>]*>[\n\u0001\s]*/gi, "* ").replace(/<hr\b[^>]*>/g, `
2727
+ -------------
2728
+ `).replace(/<[^>]*>/g, " ").replace(/\u0001/g, `
2729
+ `).replace(/[ \t]+/g, " ").replace(/^\s+$/gm, "").replace(/\n\n+/g, `
2730
+
2731
+ `).replace(/^\n+/, `
2732
+ `).replace(/\n+$/, `
2733
+ `), str = decodeHTMLEntities(str), str;
2734
+ }
2735
+ function formatTextAddress(address) {
2736
+ return [].concat(address.name || []).concat(address.name ? `<${address.address}>` : address.address).join(" ");
2737
+ }
2738
+ function formatTextAddresses(addresses) {
2739
+ let parts = [], processAddress = (address, partCounter) => {
2740
+ if (partCounter && parts.push(", "), address.group) {
2741
+ let groupStart = `${address.name}:`, groupEnd = ";";
2742
+ parts.push(groupStart), address.group.forEach(processAddress), parts.push(groupEnd);
2743
+ } else
2744
+ parts.push(formatTextAddress(address));
2745
+ };
2746
+ return addresses.forEach(processAddress), parts.join("");
2747
+ }
2748
+ function formatHtmlAddress(address) {
2749
+ return `<a href="mailto:${escapeHtml(address.address)}" class="postal-email-address">${escapeHtml(address.name || `<${address.address}>`)}</a>`;
2750
+ }
2751
+ function formatHtmlAddresses(addresses) {
2752
+ let parts = [], processAddress = (address, partCounter) => {
2753
+ if (partCounter && parts.push('<span class="postal-email-address-separator">, </span>'), address.group) {
2754
+ let groupStart = `<span class="postal-email-address-group">${escapeHtml(address.name)}:</span>`, groupEnd = '<span class="postal-email-address-group">;</span>';
2755
+ parts.push(groupStart), address.group.forEach(processAddress), parts.push(groupEnd);
2756
+ } else
2757
+ parts.push(formatHtmlAddress(address));
2758
+ };
2759
+ return addresses.forEach(processAddress), parts.join(" ");
2760
+ }
2761
+ function foldLines(str, lineLength, afterSpace) {
2762
+ str = (str || "").toString(), lineLength = lineLength || 76;
2763
+ let pos = 0, len = str.length, result = "", line, match;
2764
+ for (; pos < len; ) {
2765
+ if (line = str.substr(pos, lineLength), line.length < lineLength) {
2766
+ result += line;
2767
+ break;
2768
+ }
2769
+ if (match = line.match(/^[^\n\r]*(\r?\n|\r)/)) {
2770
+ line = match[0], result += line, pos += line.length;
2771
+ continue;
2772
+ } else (match = line.match(/(\s+)[^\s]*$/)) && match[0].length - (afterSpace ? (match[1] || "").length : 0) < line.length ? line = line.substr(0, line.length - (match[0].length - (afterSpace ? (match[1] || "").length : 0))) : (match = str.substr(pos + line.length).match(/^[^\s]+(\s*)/)) && (line = line + match[0].substr(0, match[0].length - (afterSpace ? 0 : (match[1] || "").length)));
2773
+ result += line, pos += line.length, pos < len && (result += `\r
2774
+ `);
2775
+ }
2776
+ return result;
2777
+ }
2778
+ function formatTextHeader(message) {
2779
+ let rows = [];
2780
+ if (message.from && rows.push({ key: "From", val: formatTextAddress(message.from) }), message.subject && rows.push({ key: "Subject", val: message.subject }), message.date) {
2781
+ let dateOptions = {
2782
+ year: "numeric",
2783
+ month: "numeric",
2784
+ day: "numeric",
2785
+ hour: "numeric",
2786
+ minute: "numeric",
2787
+ second: "numeric",
2788
+ hour12: !1
2789
+ }, dateStr = typeof Intl > "u" ? message.date : new Intl.DateTimeFormat("default", dateOptions).format(new Date(message.date));
2790
+ rows.push({ key: "Date", val: dateStr });
2791
+ }
2792
+ message.to && message.to.length && rows.push({ key: "To", val: formatTextAddresses(message.to) }), message.cc && message.cc.length && rows.push({ key: "Cc", val: formatTextAddresses(message.cc) }), message.bcc && message.bcc.length && rows.push({ key: "Bcc", val: formatTextAddresses(message.bcc) });
2793
+ let maxKeyLength = rows.map((r) => r.key.length).reduce((acc, cur) => cur > acc ? cur : acc, 0);
2794
+ rows = rows.flatMap((row) => {
2795
+ let sepLen = maxKeyLength - row.key.length, prefix = `${row.key}: ${" ".repeat(sepLen)}`, emptyPrefix = `${" ".repeat(row.key.length + 1)} ${" ".repeat(sepLen)}`;
2796
+ return foldLines(row.val, 80, !0).split(/\r?\n/).map((line) => line.trim()).map((line, i) => `${i ? emptyPrefix : prefix}${line}`);
2797
+ });
2798
+ let maxLineLength = rows.map((r) => r.length).reduce((acc, cur) => cur > acc ? cur : acc, 0), lineMarker = "-".repeat(maxLineLength);
2799
+ return `
2800
+ ${lineMarker}
2801
+ ${rows.join(`
2802
+ `)}
2803
+ ${lineMarker}
2804
+ `;
2805
+ }
2806
+ function formatHtmlHeader(message) {
2807
+ let rows = [];
2808
+ if (message.from && rows.push(`<div class="postal-email-header-key">From</div><div class="postal-email-header-value">${formatHtmlAddress(message.from)}</div>`), message.subject && rows.push(
2809
+ `<div class="postal-email-header-key">Subject</div><div class="postal-email-header-value postal-email-header-subject">${escapeHtml(
2810
+ message.subject
2811
+ )}</div>`
2812
+ ), message.date) {
2813
+ let dateOptions = {
2814
+ year: "numeric",
2815
+ month: "numeric",
2816
+ day: "numeric",
2817
+ hour: "numeric",
2818
+ minute: "numeric",
2819
+ second: "numeric",
2820
+ hour12: !1
2821
+ }, dateStr = typeof Intl > "u" ? message.date : new Intl.DateTimeFormat("default", dateOptions).format(new Date(message.date));
2822
+ rows.push(
2823
+ `<div class="postal-email-header-key">Date</div><div class="postal-email-header-value postal-email-header-date" data-date="${escapeHtml(
2824
+ message.date
2825
+ )}">${escapeHtml(dateStr)}</div>`
2826
+ );
2827
+ }
2828
+ return message.to && message.to.length && rows.push(`<div class="postal-email-header-key">To</div><div class="postal-email-header-value">${formatHtmlAddresses(message.to)}</div>`), message.cc && message.cc.length && rows.push(`<div class="postal-email-header-key">Cc</div><div class="postal-email-header-value">${formatHtmlAddresses(message.cc)}</div>`), message.bcc && message.bcc.length && rows.push(`<div class="postal-email-header-key">Bcc</div><div class="postal-email-header-value">${formatHtmlAddresses(message.bcc)}</div>`), `<div class="postal-email-header">${rows.length ? '<div class="postal-email-header-row">' : ""}${rows.join(
2829
+ `</div>
2830
+ <div class="postal-email-header-row">`
2831
+ )}${rows.length ? "</div>" : ""}</div>`;
2832
+ }
2833
+
2834
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/address-parser.js
2835
+ function _handleAddress(tokens) {
2836
+ let token, isGroup = !1, state = "text", address, addresses = [], data = {
2837
+ address: [],
2838
+ comment: [],
2839
+ group: [],
2840
+ text: []
2841
+ }, i, len;
2842
+ for (i = 0, len = tokens.length; i < len; i++)
2843
+ if (token = tokens[i], token.type === "operator")
2844
+ switch (token.value) {
2845
+ case "<":
2846
+ state = "address";
2847
+ break;
2848
+ case "(":
2849
+ state = "comment";
2850
+ break;
2851
+ case ":":
2852
+ state = "group", isGroup = !0;
2853
+ break;
2854
+ default:
2855
+ state = "text";
2856
+ }
2857
+ else token.value && (state === "address" && (token.value = token.value.replace(/^[^<]*<\s*/, "")), data[state].push(token.value));
2858
+ if (!data.text.length && data.comment.length && (data.text = data.comment, data.comment = []), isGroup)
2859
+ data.text = data.text.join(" "), addresses.push({
2860
+ name: decodeWords(data.text || address && address.name),
2861
+ group: data.group.length ? addressParser(data.group.join(",")) : []
2862
+ });
2863
+ else {
2864
+ if (!data.address.length && data.text.length) {
2865
+ for (i = data.text.length - 1; i >= 0; i--)
2866
+ if (data.text[i].match(/^[^@\s]+@[^@\s]+$/)) {
2867
+ data.address = data.text.splice(i, 1);
2868
+ break;
2869
+ }
2870
+ let _regexHandler = function(address2) {
2871
+ return data.address.length ? address2 : (data.address = [address2.trim()], " ");
2872
+ };
2873
+ if (!data.address.length)
2874
+ for (i = data.text.length - 1; i >= 0 && (data.text[i] = data.text[i].replace(/\s*\b[^@\s]+@[^\s]+\b\s*/, _regexHandler).trim(), !data.address.length); i--)
2875
+ ;
2876
+ }
2877
+ if (!data.text.length && data.comment.length && (data.text = data.comment, data.comment = []), data.address.length > 1 && (data.text = data.text.concat(data.address.splice(1))), data.text = data.text.join(" "), data.address = data.address.join(" "), !data.address && /^=\?[^=]+?=$/.test(data.text.trim())) {
2878
+ let parsedSubAddresses = addressParser(decodeWords(data.text));
2879
+ if (parsedSubAddresses && parsedSubAddresses.length)
2880
+ return parsedSubAddresses;
2881
+ }
2882
+ if (!data.address && isGroup)
2883
+ return [];
2884
+ address = {
2885
+ address: data.address || data.text || "",
2886
+ name: decodeWords(data.text || data.address || "")
2887
+ }, address.address === address.name && ((address.address || "").match(/@/) ? address.name = "" : address.address = ""), addresses.push(address);
2888
+ }
2889
+ return addresses;
2890
+ }
2891
+ var Tokenizer = class {
2892
+ constructor(str) {
2893
+ this.str = (str || "").toString(), this.operatorCurrent = "", this.operatorExpecting = "", this.node = null, this.escaped = !1, this.list = [], this.operators = {
2894
+ '"': '"',
2895
+ "(": ")",
2896
+ "<": ">",
2897
+ ",": "",
2898
+ ":": ";",
2899
+ // Semicolons are not a legal delimiter per the RFC2822 grammar other
2900
+ // than for terminating a group, but they are also not valid for any
2901
+ // other use in this context. Given that some mail clients have
2902
+ // historically allowed the semicolon as a delimiter equivalent to the
2903
+ // comma in their UI, it makes sense to treat them the same as a comma
2904
+ // when used outside of a group.
2905
+ ";": ""
2906
+ };
2907
+ }
2908
+ /**
2909
+ * Tokenizes the original input string
2910
+ *
2911
+ * @return {Array} An array of operator|text tokens
2912
+ */
2913
+ tokenize() {
2914
+ let chr, list = [];
2915
+ for (let i = 0, len = this.str.length; i < len; i++)
2916
+ chr = this.str.charAt(i), this.checkChar(chr);
2917
+ return this.list.forEach((node) => {
2918
+ node.value = (node.value || "").toString().trim(), node.value && list.push(node);
2919
+ }), list;
2920
+ }
2921
+ /**
2922
+ * Checks if a character is an operator or text and acts accordingly
2923
+ *
2924
+ * @param {String} chr Character from the address field
2925
+ */
2926
+ checkChar(chr) {
2927
+ if (!this.escaped) {
2928
+ if (chr === this.operatorExpecting) {
2929
+ this.node = {
2930
+ type: "operator",
2931
+ value: chr
2932
+ }, this.list.push(this.node), this.node = null, this.operatorExpecting = "", this.escaped = !1;
2933
+ return;
2934
+ } else if (!this.operatorExpecting && chr in this.operators) {
2935
+ this.node = {
2936
+ type: "operator",
2937
+ value: chr
2938
+ }, this.list.push(this.node), this.node = null, this.operatorExpecting = this.operators[chr], this.escaped = !1;
2939
+ return;
2940
+ } else if (['"', "'"].includes(this.operatorExpecting) && chr === "\\") {
2941
+ this.escaped = !0;
2942
+ return;
2943
+ }
2944
+ }
2945
+ this.node || (this.node = {
2946
+ type: "text",
2947
+ value: ""
2948
+ }, this.list.push(this.node)), chr === `
2949
+ ` && (chr = " "), (chr.charCodeAt(0) >= 33 || [" ", " "].includes(chr)) && (this.node.value += chr), this.escaped = !1;
2950
+ }
2951
+ };
2952
+ function addressParser(str, options) {
2953
+ options = options || {};
2954
+ let tokens = new Tokenizer(str).tokenize(), addresses = [], address = [], parsedAddresses = [];
2955
+ if (tokens.forEach((token) => {
2956
+ token.type === "operator" && (token.value === "," || token.value === ";") ? (address.length && addresses.push(address), address = []) : address.push(token);
2957
+ }), address.length && addresses.push(address), addresses.forEach((address2) => {
2958
+ address2 = _handleAddress(address2), address2.length && (parsedAddresses = parsedAddresses.concat(address2));
2959
+ }), options.flatten) {
2960
+ let addresses2 = [], walkAddressList = (list) => {
2961
+ list.forEach((address2) => {
2962
+ if (address2.group)
2963
+ return walkAddressList(address2.group);
2964
+ addresses2.push(address2);
2965
+ });
2966
+ };
2967
+ return walkAddressList(parsedAddresses), addresses2;
2968
+ }
2969
+ return parsedAddresses;
2970
+ }
2971
+ var address_parser_default = addressParser;
2972
+
2973
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/base64-encoder.js
2974
+ function base64ArrayBuffer(arrayBuffer) {
2975
+ for (var base64 = "", encodings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", bytes = new Uint8Array(arrayBuffer), byteLength = bytes.byteLength, byteRemainder = byteLength % 3, mainLength = byteLength - byteRemainder, a, b, c, d, chunk, i = 0; i < mainLength; i = i + 3)
2976
+ chunk = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2], a = (chunk & 16515072) >> 18, b = (chunk & 258048) >> 12, c = (chunk & 4032) >> 6, d = chunk & 63, base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
2977
+ return byteRemainder == 1 ? (chunk = bytes[mainLength], a = (chunk & 252) >> 2, b = (chunk & 3) << 4, base64 += encodings[a] + encodings[b] + "==") : byteRemainder == 2 && (chunk = bytes[mainLength] << 8 | bytes[mainLength + 1], a = (chunk & 64512) >> 10, b = (chunk & 1008) >> 4, c = (chunk & 15) << 2, base64 += encodings[a] + encodings[b] + encodings[c] + "="), base64;
2978
+ }
2979
+
2980
+ // ../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=ngwql2fj2dlex3jjynq4iizhk4/node_modules/postal-mime/src/postal-mime.js
2981
+ var PostalMime = class _PostalMime {
2982
+ static parse(buf, options) {
2983
+ return new _PostalMime(options).parse(buf);
2984
+ }
2985
+ constructor(options) {
2986
+ this.options = options || {}, this.root = this.currentNode = new MimeNode({
2987
+ postalMime: this
2988
+ }), this.boundaries = [], this.textContent = {}, this.attachments = [], this.attachmentEncoding = (this.options.attachmentEncoding || "").toString().replace(/[-_\s]/g, "").trim().toLowerCase() || "arraybuffer", this.started = !1;
2989
+ }
2990
+ async finalize() {
2991
+ await this.root.finalize();
2992
+ }
2993
+ async processLine(line, isFinal) {
2994
+ let boundaries = this.boundaries;
2995
+ if (boundaries.length && line.length > 2 && line[0] === 45 && line[1] === 45)
2996
+ for (let i = boundaries.length - 1; i >= 0; i--) {
2997
+ let boundary = boundaries[i];
2998
+ if (line.length !== boundary.value.length + 2 && line.length !== boundary.value.length + 4)
2999
+ continue;
3000
+ let isTerminator = line.length === boundary.value.length + 4;
3001
+ if (isTerminator && (line[line.length - 2] !== 45 || line[line.length - 1] !== 45))
3002
+ continue;
3003
+ let boudaryMatches = !0;
3004
+ for (let i2 = 0; i2 < boundary.value.length; i2++)
3005
+ if (line[i2 + 2] !== boundary.value[i2]) {
3006
+ boudaryMatches = !1;
3007
+ break;
3008
+ }
3009
+ if (boudaryMatches)
3010
+ return isTerminator ? (await boundary.node.finalize(), this.currentNode = boundary.node.parentNode || this.root) : (await boundary.node.finalizeChildNodes(), this.currentNode = new MimeNode({
3011
+ postalMime: this,
3012
+ parentNode: boundary.node
3013
+ })), isFinal ? this.finalize() : void 0;
3014
+ }
3015
+ if (this.currentNode.feed(line), isFinal)
3016
+ return this.finalize();
3017
+ }
3018
+ readLine() {
3019
+ let startPos = this.readPos, endPos = this.readPos, res = () => ({
3020
+ bytes: new Uint8Array(this.buf, startPos, endPos - startPos),
3021
+ done: this.readPos >= this.av.length
3022
+ });
3023
+ for (; this.readPos < this.av.length; ) {
3024
+ let c = this.av[this.readPos++];
3025
+ if (c !== 13 && c !== 10 && (endPos = this.readPos), c === 10)
3026
+ return res();
3027
+ }
3028
+ return res();
3029
+ }
3030
+ async processNodeTree() {
3031
+ let textContent = {}, textTypes = /* @__PURE__ */ new Set(), textMap = this.textMap = /* @__PURE__ */ new Map(), forceRfc822Attachments = this.forceRfc822Attachments(), walk = async (node, alternative, related) => {
3032
+ if (alternative = alternative || !1, related = related || !1, node.contentType.multipart)
3033
+ node.contentType.multipart === "alternative" ? alternative = node : node.contentType.multipart === "related" && (related = node);
3034
+ else if (this.isInlineMessageRfc822(node) && !forceRfc822Attachments) {
3035
+ let subParser = new _PostalMime();
3036
+ node.subMessage = await subParser.parse(node.content), textMap.has(node) || textMap.set(node, {});
3037
+ let textEntry = textMap.get(node);
3038
+ (node.subMessage.text || !node.subMessage.html) && (textEntry.plain = textEntry.plain || [], textEntry.plain.push({ type: "subMessage", value: node.subMessage }), textTypes.add("plain")), node.subMessage.html && (textEntry.html = textEntry.html || [], textEntry.html.push({ type: "subMessage", value: node.subMessage }), textTypes.add("html")), subParser.textMap && subParser.textMap.forEach((subTextEntry, subTextNode) => {
3039
+ textMap.set(subTextNode, subTextEntry);
3040
+ });
3041
+ for (let attachment of node.subMessage.attachments || [])
3042
+ this.attachments.push(attachment);
3043
+ } else if (this.isInlineTextNode(node)) {
3044
+ let textType = node.contentType.parsed.value.substr(node.contentType.parsed.value.indexOf("/") + 1), selectorNode = alternative || node;
3045
+ textMap.has(selectorNode) || textMap.set(selectorNode, {});
3046
+ let textEntry = textMap.get(selectorNode);
3047
+ textEntry[textType] = textEntry[textType] || [], textEntry[textType].push({ type: "text", value: node.getTextContent() }), textTypes.add(textType);
3048
+ } else if (node.content) {
3049
+ let filename = node.contentDisposition.parsed.params.filename || node.contentType.parsed.params.name || null, attachment = {
3050
+ filename: filename ? decodeWords(filename) : null,
3051
+ mimeType: node.contentType.parsed.value,
3052
+ disposition: node.contentDisposition.parsed.value || null
3053
+ };
3054
+ switch (related && node.contentId && (attachment.related = !0), node.contentDescription && (attachment.description = node.contentDescription), node.contentId && (attachment.contentId = node.contentId), node.contentType.parsed.value) {
3055
+ // Special handling for calendar events
3056
+ case "text/calendar":
3057
+ case "application/ics": {
3058
+ node.contentType.parsed.params.method && (attachment.method = node.contentType.parsed.params.method.toString().toUpperCase().trim());
3059
+ let decodedText = node.getTextContent().replace(/\r?\n/g, `
3060
+ `).replace(/\n*$/, `
3061
+ `);
3062
+ attachment.content = textEncoder.encode(decodedText);
3063
+ break;
3064
+ }
3065
+ // Regular attachments
3066
+ default:
3067
+ attachment.content = node.content;
3068
+ }
3069
+ this.attachments.push(attachment);
3070
+ }
3071
+ for (let childNode of node.childNodes)
3072
+ await walk(childNode, alternative, related);
3073
+ };
3074
+ await walk(this.root, !1, []), textMap.forEach((mapEntry) => {
3075
+ textTypes.forEach((textType) => {
3076
+ if (textContent[textType] || (textContent[textType] = []), mapEntry[textType])
3077
+ mapEntry[textType].forEach((textEntry) => {
3078
+ switch (textEntry.type) {
3079
+ case "text":
3080
+ textContent[textType].push(textEntry.value);
3081
+ break;
3082
+ case "subMessage":
3083
+ switch (textType) {
3084
+ case "html":
3085
+ textContent[textType].push(formatHtmlHeader(textEntry.value));
3086
+ break;
3087
+ case "plain":
3088
+ textContent[textType].push(formatTextHeader(textEntry.value));
3089
+ break;
3090
+ }
3091
+ break;
3092
+ }
3093
+ });
3094
+ else {
3095
+ let alternativeType;
3096
+ switch (textType) {
3097
+ case "html":
3098
+ alternativeType = "plain";
3099
+ break;
3100
+ case "plain":
3101
+ alternativeType = "html";
3102
+ break;
3103
+ }
3104
+ (mapEntry[alternativeType] || []).forEach((textEntry) => {
3105
+ switch (textEntry.type) {
3106
+ case "text":
3107
+ switch (textType) {
3108
+ case "html":
3109
+ textContent[textType].push(textToHtml(textEntry.value));
3110
+ break;
3111
+ case "plain":
3112
+ textContent[textType].push(htmlToText(textEntry.value));
3113
+ break;
3114
+ }
3115
+ break;
3116
+ case "subMessage":
3117
+ switch (textType) {
3118
+ case "html":
3119
+ textContent[textType].push(formatHtmlHeader(textEntry.value));
3120
+ break;
3121
+ case "plain":
3122
+ textContent[textType].push(formatTextHeader(textEntry.value));
3123
+ break;
3124
+ }
3125
+ break;
3126
+ }
3127
+ });
3128
+ }
3129
+ });
3130
+ }), Object.keys(textContent).forEach((textType) => {
3131
+ textContent[textType] = textContent[textType].join(`
3132
+ `);
3133
+ }), this.textContent = textContent;
3134
+ }
3135
+ isInlineTextNode(node) {
3136
+ if (node.contentDisposition.parsed.value === "attachment")
3137
+ return !1;
3138
+ switch (node.contentType.parsed.value) {
3139
+ case "text/html":
3140
+ case "text/plain":
3141
+ return !0;
3142
+ default:
3143
+ return !1;
3144
+ }
3145
+ }
3146
+ isInlineMessageRfc822(node) {
3147
+ return node.contentType.parsed.value !== "message/rfc822" ? !1 : (node.contentDisposition.parsed.value || (this.options.rfc822Attachments ? "attachment" : "inline")) === "inline";
3148
+ }
3149
+ // Check if this is a specially crafted report email where message/rfc822 content should not be inlined
3150
+ forceRfc822Attachments() {
3151
+ if (this.options.forceRfc822Attachments)
3152
+ return !0;
3153
+ let forceRfc822Attachments = !1, walk = (node) => {
3154
+ node.contentType.multipart || ["message/delivery-status", "message/feedback-report"].includes(node.contentType.parsed.value) && (forceRfc822Attachments = !0);
3155
+ for (let childNode of node.childNodes)
3156
+ walk(childNode);
3157
+ };
3158
+ return walk(this.root), forceRfc822Attachments;
3159
+ }
3160
+ async resolveStream(stream) {
3161
+ let chunkLen = 0, chunks = [], reader = stream.getReader();
3162
+ for (; ; ) {
3163
+ let { done, value } = await reader.read();
3164
+ if (done)
3165
+ break;
3166
+ chunks.push(value), chunkLen += value.length;
3167
+ }
3168
+ let result = new Uint8Array(chunkLen), chunkPointer = 0;
3169
+ for (let chunk of chunks)
3170
+ result.set(chunk, chunkPointer), chunkPointer += chunk.length;
3171
+ return result;
3172
+ }
3173
+ async parse(buf) {
3174
+ if (this.started)
3175
+ throw new Error("Can not reuse parser, create a new PostalMime object");
3176
+ for (this.started = !0, buf && typeof buf.getReader == "function" && (buf = await this.resolveStream(buf)), buf = buf || new ArrayBuffer(0), typeof buf == "string" && (buf = textEncoder.encode(buf)), (buf instanceof Blob || Object.prototype.toString.call(buf) === "[object Blob]") && (buf = await blobToArrayBuffer(buf)), buf.buffer instanceof ArrayBuffer && (buf = new Uint8Array(buf).buffer), this.buf = buf, this.av = new Uint8Array(buf), this.readPos = 0; this.readPos < this.av.length; ) {
3177
+ let line = this.readLine();
3178
+ await this.processLine(line.bytes, line.done);
3179
+ }
3180
+ await this.processNodeTree();
3181
+ let message = {
3182
+ headers: this.root.headers.map((entry) => ({ key: entry.key, value: entry.value })).reverse()
3183
+ };
3184
+ for (let key of ["from", "sender"]) {
3185
+ let addressHeader = this.root.headers.find((line) => line.key === key);
3186
+ if (addressHeader && addressHeader.value) {
3187
+ let addresses = address_parser_default(addressHeader.value);
3188
+ addresses && addresses.length && (message[key] = addresses[0]);
3189
+ }
3190
+ }
3191
+ for (let key of ["delivered-to", "return-path"]) {
3192
+ let addressHeader = this.root.headers.find((line) => line.key === key);
3193
+ if (addressHeader && addressHeader.value) {
3194
+ let addresses = address_parser_default(addressHeader.value);
3195
+ if (addresses && addresses.length && addresses[0].address) {
3196
+ let camelKey = key.replace(/\-(.)/g, (o, c) => c.toUpperCase());
3197
+ message[camelKey] = addresses[0].address;
3198
+ }
3199
+ }
3200
+ }
3201
+ for (let key of ["to", "cc", "bcc", "reply-to"]) {
3202
+ let addressHeaders = this.root.headers.filter((line) => line.key === key), addresses = [];
3203
+ if (addressHeaders.filter((entry) => entry && entry.value).map((entry) => address_parser_default(entry.value)).forEach((parsed) => addresses = addresses.concat(parsed || [])), addresses && addresses.length) {
3204
+ let camelKey = key.replace(/\-(.)/g, (o, c) => c.toUpperCase());
3205
+ message[camelKey] = addresses;
3206
+ }
3207
+ }
3208
+ for (let key of ["subject", "message-id", "in-reply-to", "references"]) {
3209
+ let header = this.root.headers.find((line) => line.key === key);
3210
+ if (header && header.value) {
3211
+ let camelKey = key.replace(/\-(.)/g, (o, c) => c.toUpperCase());
3212
+ message[camelKey] = decodeWords(header.value);
3213
+ }
3214
+ }
3215
+ let dateHeader = this.root.headers.find((line) => line.key === "date");
3216
+ if (dateHeader) {
3217
+ let date = new Date(dateHeader.value);
3218
+ !date || date.toString() === "Invalid Date" ? date = dateHeader.value : date = date.toISOString(), message.date = date;
3219
+ }
3220
+ switch (this.textContent?.html && (message.html = this.textContent.html), this.textContent?.plain && (message.text = this.textContent.plain), message.attachments = this.attachments, this.attachmentEncoding) {
3221
+ case "arraybuffer":
3222
+ break;
3223
+ case "base64":
3224
+ for (let attachment of message.attachments || [])
3225
+ attachment?.content && (attachment.content = base64ArrayBuffer(attachment.content), attachment.encoding = "base64");
3226
+ break;
3227
+ case "utf8":
3228
+ let attachmentDecoder = new TextDecoder("utf8");
3229
+ for (let attachment of message.attachments || [])
3230
+ attachment?.content && (attachment.content = attachmentDecoder.decode(attachment.content), attachment.encoding = "utf8");
3231
+ break;
3232
+ default:
3233
+ throw new Error("Unknwon attachment encoding");
3234
+ }
3235
+ return message;
3236
+ }
3237
+ };
3238
+
3239
+ // src/workers/email/constants.ts
3240
+ var RAW_EMAIL = "EmailMessage::raw";
3241
+
3242
+ // src/workers/email/validate.ts
3243
+ async function isEmailReplyable(email, incomingEmailHeaders, log) {
3244
+ let autoResponseSuppress = incomingEmailHeaders.get("x-auto-response-suppress")?.toLowerCase();
3245
+ if (autoResponseSuppress !== void 0 && autoResponseSuppress !== "none")
3246
+ return !1;
3247
+ let autoSubmittedValue = incomingEmailHeaders.get("auto-submitted")?.toLowerCase();
3248
+ return autoSubmittedValue !== void 0 && autoSubmittedValue !== "no" ? !1 : email.inReplyTo === void 0 && email.references === void 0 ? !0 : email.inReplyTo !== void 0 && email.references !== void 0 ? (email.references.match(/@/g)?.length ?? 0) >= 100 ? (await log(
3249
+ red(
3250
+ `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/.`
3251
+ )
3252
+ ), !1) : !0 : !1;
3253
+ }
3254
+ async function validateReply(incomingMessage, replyMessage) {
3255
+ let rawEmail = replyMessage[RAW_EMAIL], rawEmailBuffer = new Uint8Array(
3256
+ await new Response(rawEmail).arrayBuffer()
3257
+ ), parsedReply;
3258
+ try {
3259
+ parsedReply = await PostalMime.parse(rawEmailBuffer);
3260
+ } catch (e) {
3261
+ let error = e;
3262
+ throw new Error(`could not parse email: ${error.message}`);
3263
+ }
3264
+ if (parsedReply.from?.address !== replyMessage.from)
3265
+ throw new Error("From: header does not match mail from");
3266
+ if (parsedReply.messageId === void 0)
3267
+ throw new Error("invalid message-id");
3268
+ if (new Headers(
3269
+ parsedReply.headers.map((header) => [header.key, header.value])
3270
+ ).get("received") !== null)
3271
+ throw new Error("invalid headers set");
3272
+ if (parsedReply.inReplyTo === void 0)
3273
+ throw new Error("no In-Reply-To header found in reply message");
3274
+ if (parsedReply.inReplyTo !== incomingMessage.messageId)
3275
+ throw new Error("In-Reply-To does not match original Message-ID");
3276
+ let incomingReferences = incomingMessage.references ?? "";
3277
+ if (parsedReply.references !== void 0) {
3278
+ if (!(parsedReply.references.includes(incomingMessage.messageId) && parsedReply.references.includes(incomingReferences)))
3279
+ throw new Error("provided References header is invalid");
3280
+ } else {
3281
+ let replyReferences = `References: ${incomingMessage.messageId}${incomingReferences.length > 0 ? " " : ""}${incomingReferences}\r
3282
+ `, encodedReferences = new TextEncoder().encode(replyReferences), finalReplyEmail = new Uint8Array(
3283
+ encodedReferences.byteLength + rawEmailBuffer.byteLength
3284
+ );
3285
+ return finalReplyEmail.set(encodedReferences, 0), finalReplyEmail.set(rawEmailBuffer, encodedReferences.byteLength), finalReplyEmail;
3286
+ }
3287
+ return rawEmailBuffer;
3288
+ }
3289
+
3290
+ // src/workers/core/email.ts
3291
+ $.enabled = !0;
3292
+ function renderEmailHeaders(headers) {
3293
+ return headers ? `
3294
+ headers:
3295
+ ${[...headers.entries()].map(([k, v]) => ` ${k}: ${v}`).join(`
3296
+ `)}` : "";
3297
+ }
3298
+ async function handleEmail(params, request, service, env, ctx) {
3299
+ let from = params.get("from"), to = params.get("to");
3300
+ if (!request.body || !from || !to)
3301
+ return new Response(
3302
+ "Invalid email. Your request must include URL parameters specifying the `from` and `to` addresses, as well as an email in the body",
3303
+ {
3304
+ status: 400
3305
+ }
3306
+ );
3307
+ let clonedRequest = request.clone();
3308
+ assert(clonedRequest.body !== null, "Cloned request body is null");
3309
+ let incomingEmailRaw = new Uint8Array(await request.arrayBuffer());
3310
+ if (incomingEmailRaw.byteLength > 25 * 1024 * 1024)
3311
+ return new Response(
3312
+ "Email message size is bigger than the production size limit of 25MiB. Local development has a lower limit of 1Mib.",
3313
+ {
3314
+ status: 400
3315
+ }
3316
+ );
3317
+ if (incomingEmailRaw.byteLength > 1024 * 1024)
3318
+ return new Response(
3319
+ "Email message size is within the production size limit of 25MiB, but exceeds the lower 1Mib limit for testing locally.",
3320
+ {
3321
+ status: 400
3322
+ }
3323
+ );
3324
+ let parsedIncomingEmail;
3325
+ try {
3326
+ parsedIncomingEmail = await PostalMime.parse(incomingEmailRaw);
3327
+ } catch (e) {
3328
+ let error = e;
3329
+ return new Response(
3330
+ `Email could not be parsed: ${error.name}: ${error.message}`,
3331
+ { status: 400 }
3332
+ );
3333
+ }
3334
+ if (parsedIncomingEmail.messageId === void 0)
3335
+ return new Response(
3336
+ "Email could not be parsed: invalid or no message id provided",
3337
+ { status: 400 }
3338
+ );
3339
+ from !== parsedIncomingEmail.from.address && await env[CoreBindings.SERVICE_LOOPBACK].fetch(
3340
+ "http://localhost/core/log",
3341
+ {
3342
+ method: "POST",
3343
+ headers: { [SharedHeaders.LOG_LEVEL]: LogLevel.WARN.toString() },
3344
+ body: `${yellow(`Provided MAIL FROM address doesn't match the email message's "From" header`)}:
3345
+ MAIL FROM: ${from}
3346
+ "From" header: ${parsedIncomingEmail.from.address}`
3347
+ }
3348
+ ), parsedIncomingEmail.to?.map((addr) => addr.address).includes(to) || await env[CoreBindings.SERVICE_LOOPBACK].fetch(
3349
+ "http://localhost/core/log",
3350
+ {
3351
+ method: "POST",
3352
+ headers: { [SharedHeaders.LOG_LEVEL]: LogLevel.WARN.toString() },
3353
+ body: `${yellow(`Provided RCPT TO address doesn't match any "To" header in the email message`)}:
3354
+ RCPT TO: ${to}
3355
+ "To" header: ${parsedIncomingEmail.to?.map((addr) => addr.address).join(", ")}`
3356
+ }
3357
+ );
3358
+ let incomingEmailHeaders = new Headers(
3359
+ parsedIncomingEmail.headers.map((header) => [header.key, header.value])
3360
+ ), maybeClientError;
3361
+ return await service.email(
3362
+ // Construct a ForwardableEmailMessage-like object. We need
3363
+ // - ForwardableEmailMessage to be able to be passed across JSRPC (to support e.g. userWorker.email(ForwardableEmailMessage))
3364
+ // - ForwardableEmailMessage properties to be synchronously available (to match production). This rules out a class extending `RpcStub`
3365
+ // 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`
3366
+ {
3367
+ from,
3368
+ to,
3369
+ raw: clonedRequest.body,
3370
+ rawSize: incomingEmailRaw.byteLength,
3371
+ headers: incomingEmailHeaders,
3372
+ setReject: (reason) => {
3373
+ ctx.waitUntil(
3374
+ env[CoreBindings.SERVICE_LOOPBACK].fetch(
3375
+ "http://localhost/core/log",
3376
+ {
3377
+ method: "POST",
3378
+ headers: { [SharedHeaders.LOG_LEVEL]: LogLevel.ERROR.toString() },
3379
+ body: `${red("Email handler rejected message")}${reset(` with the following reason: "${reason}"`)}`
3380
+ }
3381
+ )
3382
+ ), maybeClientError = reason;
3383
+ },
3384
+ forward: async (rcptTo, headers) => (await env[CoreBindings.SERVICE_LOOPBACK].fetch(
3385
+ "http://localhost/core/log",
3386
+ {
3387
+ method: "POST",
3388
+ headers: { [SharedHeaders.LOG_LEVEL]: LogLevel.INFO.toString() },
3389
+ body: `${blue("Email handler forwarded message")}${reset(` with
3390
+ rcptTo: ${rcptTo}${renderEmailHeaders(headers)}`)}`
3391
+ }
3392
+ ), { messageId: `${crypto.randomUUID().replaceAll("-", "")}@example.com` }),
3393
+ reply: async (replyMessage) => {
3394
+ if (!await isEmailReplyable(
3395
+ parsedIncomingEmail,
3396
+ incomingEmailHeaders,
3397
+ async (msg) => {
3398
+ await env[CoreBindings.SERVICE_LOOPBACK].fetch(
3399
+ "http://localhost/core/log",
3400
+ {
3401
+ method: "POST",
3402
+ headers: {
3403
+ [SharedHeaders.LOG_LEVEL]: LogLevel.ERROR.toString()
3404
+ },
3405
+ body: msg
3406
+ }
3407
+ );
3408
+ }
3409
+ ))
3410
+ throw new Error("Original email is not replyable");
3411
+ let finalReply = await validateReply(
3412
+ parsedIncomingEmail,
3413
+ replyMessage
3414
+ ), file = await (await env[CoreBindings.SERVICE_LOOPBACK].fetch(
3415
+ "http://localhost/core/store-temp-file?extension=eml&prefix=email",
3416
+ {
3417
+ method: "POST",
3418
+ body: finalReply
3419
+ }
3420
+ )).text();
3421
+ return await env[CoreBindings.SERVICE_LOOPBACK].fetch(
3422
+ "http://localhost/core/log",
3423
+ {
3424
+ method: "POST",
3425
+ headers: { [SharedHeaders.LOG_LEVEL]: LogLevel.INFO.toString() },
3426
+ body: `${blue("Email handler replied to sender")}${reset(` with the following message:
3427
+ ${file}`)}`
3428
+ }
3429
+ ), { messageId: `${crypto.randomUUID().replaceAll("-", "")}@example.com` };
3430
+ }
3431
+ }
3432
+ ), maybeClientError !== void 0 ? new Response(
3433
+ `Worker rejected email with the following reason: ${maybeClientError}`,
3434
+ { status: 400 }
3435
+ ) : new Response("Worker successfully processed email", {
3436
+ status: 200
3437
+ });
3438
+ }
3439
+
3440
+ // src/workers/core/http.ts
3441
+ var STATUS_CODES = {
3442
+ 100: "Continue",
3443
+ 101: "Switching Protocols",
3444
+ 102: "Processing",
3445
+ 103: "Early Hints",
3446
+ 200: "OK",
3447
+ 201: "Created",
3448
+ 202: "Accepted",
3449
+ 203: "Non-Authoritative Information",
3450
+ 204: "No Content",
3451
+ 205: "Reset Content",
3452
+ 206: "Partial Content",
3453
+ 207: "Multi-Status",
3454
+ 208: "Already Reported",
3455
+ 226: "IM Used",
3456
+ 300: "Multiple Choices",
3457
+ 301: "Moved Permanently",
3458
+ 302: "Found",
3459
+ 303: "See Other",
3460
+ 304: "Not Modified",
3461
+ 305: "Use Proxy",
3462
+ 307: "Temporary Redirect",
3463
+ 308: "Permanent Redirect",
3464
+ 400: "Bad Request",
3465
+ 401: "Unauthorized",
3466
+ 402: "Payment Required",
3467
+ 403: "Forbidden",
3468
+ 404: "Not Found",
3469
+ 405: "Method Not Allowed",
3470
+ 406: "Not Acceptable",
3471
+ 407: "Proxy Authentication Required",
3472
+ 408: "Request Timeout",
3473
+ 409: "Conflict",
3474
+ 410: "Gone",
3475
+ 411: "Length Required",
3476
+ 412: "Precondition Failed",
3477
+ 413: "Payload Too Large",
3478
+ 414: "URI Too Long",
3479
+ 415: "Unsupported Media Type",
3480
+ 416: "Range Not Satisfiable",
3481
+ 417: "Expectation Failed",
3482
+ 418: "I'm a Teapot",
3483
+ 421: "Misdirected Request",
3484
+ 422: "Unprocessable Entity",
3485
+ 423: "Locked",
3486
+ 424: "Failed Dependency",
3487
+ 425: "Too Early",
3488
+ 426: "Upgrade Required",
3489
+ 428: "Precondition Required",
3490
+ 429: "Too Many Requests",
3491
+ 431: "Request Header Fields Too Large",
3492
+ 451: "Unavailable For Legal Reasons",
3493
+ 500: "Internal Server Error",
3494
+ 501: "Not Implemented",
3495
+ 502: "Bad Gateway",
3496
+ 503: "Service Unavailable",
3497
+ 504: "Gateway Timeout",
3498
+ 505: "HTTP Version Not Supported",
3499
+ 506: "Variant Also Negotiates",
3500
+ 507: "Insufficient Storage",
3501
+ 508: "Loop Detected",
3502
+ 509: "Bandwidth Limit Exceeded",
3503
+ 510: "Not Extended",
3504
+ 511: "Network Authentication Required"
3505
+ };
3506
+
3507
+ // src/workers/core/routing.ts
3508
+ function matchRoutes(routes, url) {
3509
+ for (let route of routes) {
3510
+ if (route.protocol && route.protocol !== url.protocol) continue;
3511
+ if (route.allowHostnamePrefix) {
3512
+ if (!url.hostname.endsWith(route.hostname)) continue;
3513
+ } else if (url.hostname !== route.hostname) continue;
3514
+ let path = url.pathname + url.search;
3515
+ if (route.allowPathSuffix) {
3516
+ if (!path.startsWith(route.path)) continue;
3517
+ } else if (path !== route.path) continue;
3518
+ return route.target;
3519
+ }
3520
+ return null;
3521
+ }
3522
+
3523
+ // src/workers/core/scheduled.ts
3524
+ async function handleScheduled(params, service) {
3525
+ let time = params.get("time"), scheduledTime = time ? new Date(parseInt(time)) : void 0, cron = params.get("cron") ?? void 0, result = await service.scheduled({
3526
+ scheduledTime,
3527
+ cron
3528
+ });
3529
+ return new Response(result.outcome, {
3530
+ status: result.outcome === "ok" ? 200 : 500
3531
+ });
3532
+ }
3533
+
3534
+ // src/workers/core/proxy.worker.ts
3535
+ import assert3 from "node:assert";
3536
+ import { Buffer as Buffer2 } from "node:buffer";
3537
+
3538
+ // ../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/utils.js
3539
+ var DevalueError = class extends Error {
3540
+ /**
3541
+ * @param {string} message
3542
+ * @param {string[]} keys
3543
+ * @param {any} [value] - The value that failed to be serialized
3544
+ * @param {any} [root] - The root value being serialized
3545
+ */
3546
+ constructor(message, keys, value, root) {
3547
+ super(message), this.name = "DevalueError", this.path = keys.join(""), this.value = value, this.root = root;
3548
+ }
3549
+ };
3550
+ function is_primitive(thing) {
3551
+ return Object(thing) !== thing;
3552
+ }
3553
+ var object_proto_names = /* @__PURE__ */ Object.getOwnPropertyNames(
3554
+ Object.prototype
3555
+ ).sort().join("\0");
3556
+ function is_plain_object(thing) {
3557
+ let proto = Object.getPrototypeOf(thing);
3558
+ return proto === Object.prototype || proto === null || Object.getPrototypeOf(proto) === null || Object.getOwnPropertyNames(proto).sort().join("\0") === object_proto_names;
3559
+ }
3560
+ function get_type(thing) {
3561
+ return Object.prototype.toString.call(thing).slice(8, -1);
3562
+ }
3563
+ function get_escaped_char(char) {
3564
+ switch (char) {
3565
+ case '"':
3566
+ return '\\"';
3567
+ case "<":
3568
+ return "\\u003C";
3569
+ case "\\":
3570
+ return "\\\\";
3571
+ case `
3572
+ `:
3573
+ return "\\n";
3574
+ case "\r":
3575
+ return "\\r";
3576
+ case " ":
3577
+ return "\\t";
3578
+ case "\b":
3579
+ return "\\b";
3580
+ case "\f":
3581
+ return "\\f";
3582
+ case "\u2028":
3583
+ return "\\u2028";
3584
+ case "\u2029":
3585
+ return "\\u2029";
3586
+ default:
3587
+ return char < " " ? `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}` : "";
3588
+ }
3589
+ }
3590
+ function stringify_string(str) {
3591
+ let result = "", last_pos = 0, len = str.length;
3592
+ for (let i = 0; i < len; i += 1) {
3593
+ let char = str[i], replacement = get_escaped_char(char);
3594
+ replacement && (result += str.slice(last_pos, i) + replacement, last_pos = i + 1);
3595
+ }
3596
+ return `"${last_pos === 0 ? str : result + str.slice(last_pos)}"`;
3597
+ }
3598
+ function enumerable_symbols(object) {
3599
+ return Object.getOwnPropertySymbols(object).filter(
3600
+ (symbol) => Object.getOwnPropertyDescriptor(object, symbol).enumerable
3601
+ );
3602
+ }
3603
+ var is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
3604
+ function stringify_key(key) {
3605
+ return is_identifier.test(key) ? "." + key : "[" + JSON.stringify(key) + "]";
3606
+ }
3607
+ function is_valid_array_index(s) {
3608
+ if (s.length === 0 || s.length > 1 && s.charCodeAt(0) === 48) return !1;
3609
+ for (let i = 0; i < s.length; i++) {
3610
+ let c = s.charCodeAt(i);
3611
+ if (c < 48 || c > 57) return !1;
3612
+ }
3613
+ let n = +s;
3614
+ return !(n >= 2 ** 32 - 1 || n < 0);
3615
+ }
3616
+ function valid_array_indices(array) {
3617
+ let keys = Object.keys(array);
3618
+ for (var i = keys.length - 1; i >= 0 && !is_valid_array_index(keys[i]); i--)
3619
+ ;
3620
+ return keys.length = i + 1, keys;
3621
+ }
3622
+
3623
+ // ../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/base64.js
3624
+ function encode64(arraybuffer) {
3625
+ let dv = new DataView(arraybuffer), binaryString = "";
3626
+ for (let i = 0; i < arraybuffer.byteLength; i++)
3627
+ binaryString += String.fromCharCode(dv.getUint8(i));
3628
+ return binaryToAscii(binaryString);
3629
+ }
3630
+ function decode64(string) {
3631
+ let binaryString = asciiToBinary(string), arraybuffer = new ArrayBuffer(binaryString.length), dv = new DataView(arraybuffer);
3632
+ for (let i = 0; i < arraybuffer.byteLength; i++)
3633
+ dv.setUint8(i, binaryString.charCodeAt(i));
3634
+ return arraybuffer;
3635
+ }
3636
+ var KEY_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
3637
+ function asciiToBinary(data) {
3638
+ data.length % 4 === 0 && (data = data.replace(/==?$/, ""));
3639
+ let output = "", buffer = 0, accumulatedBits = 0;
3640
+ for (let i = 0; i < data.length; i++)
3641
+ buffer <<= 6, buffer |= KEY_STRING.indexOf(data[i]), accumulatedBits += 6, accumulatedBits === 24 && (output += String.fromCharCode((buffer & 16711680) >> 16), output += String.fromCharCode((buffer & 65280) >> 8), output += String.fromCharCode(buffer & 255), buffer = accumulatedBits = 0);
3642
+ return accumulatedBits === 12 ? (buffer >>= 4, output += String.fromCharCode(buffer)) : accumulatedBits === 18 && (buffer >>= 2, output += String.fromCharCode((buffer & 65280) >> 8), output += String.fromCharCode(buffer & 255)), output;
3643
+ }
3644
+ function binaryToAscii(str) {
3645
+ let out = "";
3646
+ for (let i = 0; i < str.length; i += 3) {
3647
+ let groupsOfSix = [void 0, void 0, void 0, void 0];
3648
+ groupsOfSix[0] = str.charCodeAt(i) >> 2, groupsOfSix[1] = (str.charCodeAt(i) & 3) << 4, str.length > i + 1 && (groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4, groupsOfSix[2] = (str.charCodeAt(i + 1) & 15) << 2), str.length > i + 2 && (groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6, groupsOfSix[3] = str.charCodeAt(i + 2) & 63);
3649
+ for (let j = 0; j < groupsOfSix.length; j++)
3650
+ typeof groupsOfSix[j] > "u" ? out += "=" : out += KEY_STRING[groupsOfSix[j]];
3651
+ }
3652
+ return out;
3653
+ }
3654
+
3655
+ // ../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/parse.js
3656
+ function parse(serialized, revivers) {
3657
+ return unflatten(JSON.parse(serialized), revivers);
3658
+ }
3659
+ function unflatten(parsed, revivers) {
3660
+ if (typeof parsed == "number") return hydrate(parsed, !0);
3661
+ if (!Array.isArray(parsed) || parsed.length === 0)
3662
+ throw new Error("Invalid input");
3663
+ let values = (
3664
+ /** @type {any[]} */
3665
+ parsed
3666
+ ), hydrated = Array(values.length), hydrating = null;
3667
+ function hydrate(index, standalone = !1) {
3668
+ if (index === -1) return;
3669
+ if (index === -3) return NaN;
3670
+ if (index === -4) return 1 / 0;
3671
+ if (index === -5) return -1 / 0;
3672
+ if (index === -6) return -0;
3673
+ if (standalone || typeof index != "number")
3674
+ throw new Error("Invalid input");
3675
+ if (index in hydrated) return hydrated[index];
3676
+ let value = values[index];
3677
+ if (!value || typeof value != "object")
3678
+ hydrated[index] = value;
3679
+ else if (Array.isArray(value))
3680
+ if (typeof value[0] == "string") {
3681
+ let type = value[0], reviver = revivers && Object.hasOwn(revivers, type) ? revivers[type] : void 0;
3682
+ if (reviver) {
3683
+ let i = value[1];
3684
+ if (typeof i != "number" && (i = values.push(value[1]) - 1), hydrating ??= /* @__PURE__ */ new Set(), hydrating.has(i))
3685
+ throw new Error("Invalid circular reference");
3686
+ return hydrating.add(i), hydrated[index] = reviver(hydrate(i)), hydrating.delete(i), hydrated[index];
3687
+ }
3688
+ switch (type) {
3689
+ case "Date":
3690
+ hydrated[index] = new Date(value[1]);
3691
+ break;
3692
+ case "Set":
3693
+ let set = /* @__PURE__ */ new Set();
3694
+ hydrated[index] = set;
3695
+ for (let i = 1; i < value.length; i += 1)
3696
+ set.add(hydrate(value[i]));
3697
+ break;
3698
+ case "Map":
3699
+ let map = /* @__PURE__ */ new Map();
3700
+ hydrated[index] = map;
3701
+ for (let i = 1; i < value.length; i += 2)
3702
+ map.set(hydrate(value[i]), hydrate(value[i + 1]));
3703
+ break;
3704
+ case "RegExp":
3705
+ hydrated[index] = new RegExp(value[1], value[2]);
3706
+ break;
3707
+ case "Object":
3708
+ hydrated[index] = Object(value[1]);
3709
+ break;
3710
+ case "BigInt":
3711
+ hydrated[index] = BigInt(value[1]);
3712
+ break;
3713
+ case "null":
3714
+ let obj = /* @__PURE__ */ Object.create(null);
3715
+ hydrated[index] = obj;
3716
+ for (let i = 1; i < value.length; i += 2)
3717
+ obj[value[i]] = hydrate(value[i + 1]);
3718
+ break;
3719
+ case "Int8Array":
3720
+ case "Uint8Array":
3721
+ case "Uint8ClampedArray":
3722
+ case "Int16Array":
3723
+ case "Uint16Array":
3724
+ case "Int32Array":
3725
+ case "Uint32Array":
3726
+ case "Float32Array":
3727
+ case "Float64Array":
3728
+ case "BigInt64Array":
3729
+ case "BigUint64Array": {
3730
+ if (values[value[1]][0] !== "ArrayBuffer")
3731
+ throw new Error("Invalid data");
3732
+ let TypedArrayConstructor = globalThis[type], buffer = hydrate(value[1]), typedArray = new TypedArrayConstructor(buffer);
3733
+ hydrated[index] = value[2] !== void 0 ? typedArray.subarray(value[2], value[3]) : typedArray;
3734
+ break;
3735
+ }
3736
+ case "ArrayBuffer": {
3737
+ let base64 = value[1];
3738
+ if (typeof base64 != "string")
3739
+ throw new Error("Invalid ArrayBuffer encoding");
3740
+ let arraybuffer = decode64(base64);
3741
+ hydrated[index] = arraybuffer;
3742
+ break;
3743
+ }
3744
+ case "Temporal.Duration":
3745
+ case "Temporal.Instant":
3746
+ case "Temporal.PlainDate":
3747
+ case "Temporal.PlainTime":
3748
+ case "Temporal.PlainDateTime":
3749
+ case "Temporal.PlainMonthDay":
3750
+ case "Temporal.PlainYearMonth":
3751
+ case "Temporal.ZonedDateTime": {
3752
+ let temporalName = type.slice(9);
3753
+ hydrated[index] = Temporal[temporalName].from(value[1]);
3754
+ break;
3755
+ }
3756
+ case "URL": {
3757
+ let url = new URL(value[1]);
3758
+ hydrated[index] = url;
3759
+ break;
3760
+ }
3761
+ case "URLSearchParams": {
3762
+ let url = new URLSearchParams(value[1]);
3763
+ hydrated[index] = url;
3764
+ break;
3765
+ }
3766
+ default:
3767
+ throw new Error(`Unknown type ${type}`);
3768
+ }
3769
+ } else if (value[0] === -7) {
3770
+ let len = value[1], array = new Array(len);
3771
+ hydrated[index] = array;
3772
+ for (let i = 2; i < value.length; i += 2) {
3773
+ let idx = value[i];
3774
+ array[idx] = hydrate(value[i + 1]);
3775
+ }
3776
+ } else {
3777
+ let array = new Array(value.length);
3778
+ hydrated[index] = array;
3779
+ for (let i = 0; i < value.length; i += 1) {
3780
+ let n = value[i];
3781
+ n !== -2 && (array[i] = hydrate(n));
3782
+ }
3783
+ }
3784
+ else {
3785
+ let object = {};
3786
+ hydrated[index] = object;
3787
+ for (let key of Object.keys(value)) {
3788
+ if (key === "__proto__")
3789
+ throw new Error("Cannot parse an object with a `__proto__` property");
3790
+ let n = value[key];
3791
+ object[key] = hydrate(n);
3792
+ }
3793
+ }
3794
+ return hydrated[index];
3795
+ }
3796
+ return hydrate(0);
3797
+ }
3798
+
3799
+ // ../../node_modules/.pnpm/devalue@5.6.3/node_modules/devalue/src/stringify.js
3800
+ function stringify(value, reducers) {
3801
+ let stringified = [], indexes = /* @__PURE__ */ new Map(), custom = [];
3802
+ if (reducers)
3803
+ for (let key of Object.getOwnPropertyNames(reducers))
3804
+ custom.push({ key, fn: reducers[key] });
3805
+ let keys = [], p = 0;
3806
+ function flatten(thing) {
3807
+ if (thing === void 0) return -1;
3808
+ if (Number.isNaN(thing)) return -3;
3809
+ if (thing === 1 / 0) return -4;
3810
+ if (thing === -1 / 0) return -5;
3811
+ if (thing === 0 && 1 / thing < 0) return -6;
3812
+ if (indexes.has(thing)) return indexes.get(thing);
3813
+ let index2 = p++;
3814
+ indexes.set(thing, index2);
3815
+ for (let { key, fn } of custom) {
3816
+ let value2 = fn(thing);
3817
+ if (value2)
3818
+ return stringified[index2] = `["${key}",${flatten(value2)}]`, index2;
3819
+ }
3820
+ if (typeof thing == "function")
3821
+ throw new DevalueError("Cannot stringify a function", keys, thing, value);
3822
+ let str = "";
3823
+ if (is_primitive(thing))
3824
+ str = stringify_primitive(thing);
3825
+ else {
3826
+ let type = get_type(thing);
3827
+ switch (type) {
3828
+ case "Number":
3829
+ case "String":
3830
+ case "Boolean":
3831
+ str = `["Object",${stringify_primitive(thing)}]`;
3832
+ break;
3833
+ case "BigInt":
3834
+ str = `["BigInt",${thing}]`;
3835
+ break;
3836
+ case "Date":
3837
+ str = `["Date","${!isNaN(thing.getDate()) ? thing.toISOString() : ""}"]`;
3838
+ break;
3839
+ case "URL":
3840
+ str = `["URL",${stringify_string(thing.toString())}]`;
3841
+ break;
3842
+ case "URLSearchParams":
3843
+ str = `["URLSearchParams",${stringify_string(thing.toString())}]`;
3844
+ break;
3845
+ case "RegExp":
3846
+ let { source, flags } = thing;
3847
+ str = flags ? `["RegExp",${stringify_string(source)},"${flags}"]` : `["RegExp",${stringify_string(source)}]`;
3848
+ break;
3849
+ case "Array": {
3850
+ let mostly_dense = !1;
3851
+ str = "[";
3852
+ for (let i = 0; i < thing.length; i += 1)
3853
+ if (i > 0 && (str += ","), Object.hasOwn(thing, i))
3854
+ keys.push(`[${i}]`), str += flatten(thing[i]), keys.pop();
3855
+ else if (mostly_dense)
3856
+ str += -2;
3857
+ else {
3858
+ let populated_keys = valid_array_indices(
3859
+ /** @type {any[]} */
3860
+ thing
3861
+ ), population = populated_keys.length, d = String(thing.length).length, hole_cost = (thing.length - population) * 3, sparse_cost = 4 + d + population * (d + 1);
3862
+ if (hole_cost > sparse_cost) {
3863
+ str = "[" + -7 + "," + thing.length;
3864
+ for (let j = 0; j < populated_keys.length; j++) {
3865
+ let key = populated_keys[j];
3866
+ keys.push(`[${key}]`), str += "," + key + "," + flatten(thing[key]), keys.pop();
3867
+ }
3868
+ break;
3869
+ } else
3870
+ mostly_dense = !0, str += -2;
3871
+ }
3872
+ str += "]";
3873
+ break;
3874
+ }
3875
+ case "Set":
3876
+ str = '["Set"';
3877
+ for (let value2 of thing)
3878
+ str += `,${flatten(value2)}`;
3879
+ str += "]";
3880
+ break;
3881
+ case "Map":
3882
+ str = '["Map"';
3883
+ for (let [key, value2] of thing)
3884
+ keys.push(
3885
+ `.get(${is_primitive(key) ? stringify_primitive(key) : "..."})`
3886
+ ), str += `,${flatten(key)},${flatten(value2)}`, keys.pop();
3887
+ str += "]";
3888
+ break;
3889
+ case "Int8Array":
3890
+ case "Uint8Array":
3891
+ case "Uint8ClampedArray":
3892
+ case "Int16Array":
3893
+ case "Uint16Array":
3894
+ case "Int32Array":
3895
+ case "Uint32Array":
3896
+ case "Float32Array":
3897
+ case "Float64Array":
3898
+ case "BigInt64Array":
3899
+ case "BigUint64Array": {
3900
+ let typedArray = thing;
3901
+ str = '["' + type + '",' + flatten(typedArray.buffer);
3902
+ let a = thing.byteOffset, b = a + thing.byteLength;
3903
+ if (a > 0 || b !== typedArray.buffer.byteLength) {
3904
+ let m = +/(\d+)/.exec(type)[1] / 8;
3905
+ str += `,${a / m},${b / m}`;
3906
+ }
3907
+ str += "]";
3908
+ break;
3909
+ }
3910
+ case "ArrayBuffer": {
3911
+ str = `["ArrayBuffer","${encode64(thing)}"]`;
3912
+ break;
3913
+ }
3914
+ case "Temporal.Duration":
3915
+ case "Temporal.Instant":
3916
+ case "Temporal.PlainDate":
3917
+ case "Temporal.PlainTime":
3918
+ case "Temporal.PlainDateTime":
3919
+ case "Temporal.PlainMonthDay":
3920
+ case "Temporal.PlainYearMonth":
3921
+ case "Temporal.ZonedDateTime":
3922
+ str = `["${type}",${stringify_string(thing.toString())}]`;
3923
+ break;
3924
+ default:
3925
+ if (!is_plain_object(thing))
3926
+ throw new DevalueError(
3927
+ "Cannot stringify arbitrary non-POJOs",
3928
+ keys,
3929
+ thing,
3930
+ value
3931
+ );
3932
+ if (enumerable_symbols(thing).length > 0)
3933
+ throw new DevalueError(
3934
+ "Cannot stringify POJOs with symbolic keys",
3935
+ keys,
3936
+ thing,
3937
+ value
3938
+ );
3939
+ if (Object.getPrototypeOf(thing) === null) {
3940
+ str = '["null"';
3941
+ for (let key of Object.keys(thing)) {
3942
+ if (key === "__proto__")
3943
+ throw new DevalueError(
3944
+ "Cannot stringify objects with __proto__ keys",
3945
+ keys,
3946
+ thing,
3947
+ value
3948
+ );
3949
+ keys.push(stringify_key(key)), str += `,${stringify_string(key)},${flatten(thing[key])}`, keys.pop();
3950
+ }
3951
+ str += "]";
3952
+ } else {
3953
+ str = "{";
3954
+ let started = !1;
3955
+ for (let key of Object.keys(thing)) {
3956
+ if (key === "__proto__")
3957
+ throw new DevalueError(
3958
+ "Cannot stringify objects with __proto__ keys",
3959
+ keys,
3960
+ thing,
3961
+ value
3962
+ );
3963
+ started && (str += ","), started = !0, keys.push(stringify_key(key)), str += `${stringify_string(key)}:${flatten(thing[key])}`, keys.pop();
3964
+ }
3965
+ str += "}";
3966
+ }
3967
+ }
3968
+ }
3969
+ return stringified[index2] = str, index2;
3970
+ }
3971
+ let index = flatten(value);
3972
+ return index < 0 ? `${index}` : `[${stringified.join(",")}]`;
3973
+ }
3974
+ function stringify_primitive(thing) {
3975
+ let type = typeof thing;
3976
+ return type === "string" ? stringify_string(thing) : thing instanceof String ? stringify_string(thing.toString()) : thing === void 0 ? (-1).toString() : thing === 0 && 1 / thing < 0 ? (-6).toString() : type === "bigint" ? `["BigInt","${thing}"]` : String(thing);
3977
+ }
3978
+
3979
+ // src/workers/core/proxy.worker.ts
3980
+ import { readPrefix, reduceError } from "miniflare:shared";
3981
+
3982
+ // src/workers/core/devalue.ts
3983
+ import assert2 from "node:assert";
3984
+ import { Buffer } from "node:buffer";
3985
+ var ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS = [
3986
+ DataView,
3987
+ Int8Array,
3988
+ Uint8Array,
3989
+ Uint8ClampedArray,
3990
+ Int16Array,
3991
+ Uint16Array,
3992
+ Int32Array,
3993
+ Uint32Array,
3994
+ Float32Array,
3995
+ Float64Array,
3996
+ BigInt64Array,
3997
+ BigUint64Array
3998
+ ], ALLOWED_ERROR_CONSTRUCTORS = [
3999
+ EvalError,
4000
+ RangeError,
4001
+ ReferenceError,
4002
+ SyntaxError,
4003
+ TypeError,
4004
+ URIError,
4005
+ Error
4006
+ // `Error` last so more specific error subclasses preferred
4007
+ ], structuredSerializableReducers = {
4008
+ ArrayBuffer(value) {
4009
+ if (value instanceof ArrayBuffer)
4010
+ return [Buffer.from(value).toString("base64")];
4011
+ },
4012
+ ArrayBufferView(value) {
4013
+ if (ArrayBuffer.isView(value))
4014
+ return [
4015
+ value.constructor.name,
4016
+ value.buffer,
4017
+ value.byteOffset,
4018
+ value.byteLength
4019
+ ];
4020
+ },
4021
+ RegExp(value) {
4022
+ if (value instanceof RegExp) {
4023
+ let { source, flags } = value, encoded = Buffer.from(source).toString("base64");
4024
+ return flags ? ["RegExp", encoded, flags] : ["RegExp", encoded];
4025
+ }
4026
+ },
4027
+ Error(value) {
4028
+ for (let ctor of ALLOWED_ERROR_CONSTRUCTORS)
4029
+ if (value instanceof ctor && value.name === ctor.name)
4030
+ return [value.name, value.message, value.stack, value.cause];
4031
+ if (value instanceof Error)
4032
+ return ["Error", value.message, value.stack, value.cause];
4033
+ }
4034
+ }, structuredSerializableRevivers = {
4035
+ ArrayBuffer(value) {
4036
+ assert2(Array.isArray(value));
4037
+ let [encoded] = value;
4038
+ assert2(typeof encoded == "string");
4039
+ let view = Buffer.from(encoded, "base64");
4040
+ return view.buffer.slice(
4041
+ view.byteOffset,
4042
+ view.byteOffset + view.byteLength
4043
+ );
4044
+ },
4045
+ ArrayBufferView(value) {
4046
+ assert2(Array.isArray(value));
4047
+ let [name, buffer, byteOffset, byteLength] = value;
4048
+ assert2(typeof name == "string"), assert2(buffer instanceof ArrayBuffer), assert2(typeof byteOffset == "number"), assert2(typeof byteLength == "number");
4049
+ let ctor = globalThis[name];
4050
+ assert2(ALLOWED_ARRAY_BUFFER_VIEW_CONSTRUCTORS.includes(ctor));
4051
+ let length = byteLength;
4052
+ return "BYTES_PER_ELEMENT" in ctor && (length /= ctor.BYTES_PER_ELEMENT), new ctor(buffer, byteOffset, length);
4053
+ },
4054
+ RegExp(value) {
4055
+ assert2(Array.isArray(value));
4056
+ let [name, encoded, flags] = value;
4057
+ assert2(typeof name == "string"), assert2(typeof encoded == "string");
4058
+ let source = Buffer.from(encoded, "base64").toString("utf-8");
4059
+ return new RegExp(source, flags);
4060
+ },
4061
+ Error(value) {
4062
+ assert2(Array.isArray(value));
4063
+ let [name, message, stack, cause] = value;
4064
+ assert2(typeof name == "string"), assert2(typeof message == "string"), assert2(stack === void 0 || typeof stack == "string");
4065
+ let ctor = globalThis[name];
4066
+ assert2(ALLOWED_ERROR_CONSTRUCTORS.includes(ctor));
4067
+ let error = new ctor(message, { cause });
4068
+ return error.stack = stack, error;
4069
+ }
4070
+ };
4071
+ function createHTTPReducers(impl) {
4072
+ return {
4073
+ Headers(val) {
4074
+ if (val instanceof impl.Headers) return [...val.entries()];
4075
+ },
4076
+ Request(val) {
4077
+ if (val instanceof impl.Request)
4078
+ return [val.method, val.url, val.headers, val.cf, val.body];
4079
+ },
4080
+ Response(val) {
4081
+ if (val instanceof impl.Response)
4082
+ return [val.status, val.statusText, val.headers, val.cf, val.body];
4083
+ }
4084
+ };
4085
+ }
4086
+ function createHTTPRevivers(impl) {
4087
+ return {
4088
+ Headers(value) {
4089
+ return assert2(typeof value == "object" && value !== null), new impl.Headers(value);
4090
+ },
4091
+ Request(value) {
4092
+ assert2(Array.isArray(value));
4093
+ let [method, url, headers, cf, body] = value;
4094
+ return assert2(typeof method == "string"), assert2(typeof url == "string"), assert2(headers instanceof impl.Headers), assert2(body === null || impl.isReadableStream(body)), new impl.Request(url, {
4095
+ method,
4096
+ headers,
4097
+ cf,
4098
+ // @ts-expect-error `duplex` is not required by `workerd` yet
4099
+ duplex: body === null ? void 0 : "half",
4100
+ body
4101
+ });
4102
+ },
4103
+ Response(value) {
4104
+ assert2(Array.isArray(value));
4105
+ let [status, statusText, headers, cf, body] = value;
4106
+ return assert2(typeof status == "number"), assert2(typeof statusText == "string"), assert2(headers instanceof impl.Headers), assert2(body === null || impl.isReadableStream(body)), new impl.Response(body, {
4107
+ status,
4108
+ statusText,
4109
+ headers,
4110
+ cf
4111
+ });
4112
+ }
4113
+ };
4114
+ }
4115
+ function stringifyWithStreams(impl, value, reducers, allowUnbufferedStream) {
4116
+ let unbufferedStream, bufferPromises = [], streamReducers = {
4117
+ ReadableStream(value2) {
4118
+ if (impl.isReadableStream(value2))
4119
+ return allowUnbufferedStream && unbufferedStream === void 0 ? unbufferedStream = value2 : bufferPromises.push(impl.bufferReadableStream(value2)), !0;
4120
+ },
4121
+ Blob(value2) {
4122
+ if (value2 instanceof impl.Blob)
4123
+ return bufferPromises.push(value2.arrayBuffer()), !0;
4124
+ },
4125
+ ...reducers
4126
+ };
4127
+ typeof value == "function" && (value = new __MiniflareFunctionWrapper(
4128
+ value
4129
+ ));
4130
+ let stringifiedValue = stringify(value, streamReducers);
4131
+ return bufferPromises.length === 0 ? { value: stringifiedValue, unbufferedStream } : Promise.all(bufferPromises).then((streamBuffers) => (streamReducers.ReadableStream = function(value2) {
4132
+ if (impl.isReadableStream(value2))
4133
+ return value2 === unbufferedStream ? !0 : streamBuffers.shift();
4134
+ }, streamReducers.Blob = function(value2) {
4135
+ if (value2 instanceof impl.Blob) {
4136
+ let array = [streamBuffers.shift(), value2.type];
4137
+ return value2 instanceof impl.File && array.push(value2.name, value2.lastModified), array;
4138
+ }
4139
+ }, { value: stringify(value, streamReducers), unbufferedStream }));
4140
+ }
4141
+ var __MiniflareFunctionWrapper = class {
4142
+ constructor(fnWithProps) {
4143
+ return new Proxy(this, {
4144
+ get: (_, key) => key === "__miniflareWrappedFunction" ? fnWithProps : fnWithProps[key]
4145
+ });
4146
+ }
4147
+ };
4148
+ function parseWithReadableStreams(impl, stringified, revivers) {
4149
+ let streamRevivers = {
4150
+ ReadableStream(value) {
4151
+ return value === !0 ? (assert2(stringified.unbufferedStream !== void 0), stringified.unbufferedStream) : (assert2(value instanceof ArrayBuffer), impl.unbufferReadableStream(value));
4152
+ },
4153
+ Blob(value) {
4154
+ if (assert2(Array.isArray(value)), value.length === 2) {
4155
+ let [buffer, type] = value;
4156
+ assert2(buffer instanceof ArrayBuffer), assert2(typeof type == "string");
4157
+ let opts = {};
4158
+ return type !== "" && (opts.type = type), new impl.Blob([buffer], opts);
4159
+ } else {
4160
+ assert2(value.length === 4);
4161
+ let [buffer, type, name, lastModified] = value;
4162
+ assert2(buffer instanceof ArrayBuffer), assert2(typeof type == "string"), assert2(typeof name == "string"), assert2(typeof lastModified == "number");
4163
+ let opts = { lastModified };
4164
+ return type !== "" && (opts.type = type), new impl.File([buffer], name, opts);
4165
+ }
4166
+ },
4167
+ ...revivers
4168
+ };
4169
+ return parse(stringified.value, streamRevivers);
4170
+ }
4171
+
4172
+ // src/workers/core/proxy.worker.ts
4173
+ var ENCODER = new TextEncoder(), DECODER = new TextDecoder(), ALLOWED_HOSTNAMES = ["127.0.0.1", "[::1]", "localhost"], WORKERS_PLATFORM_IMPL = {
4174
+ Blob,
4175
+ File,
4176
+ Headers,
4177
+ Request,
4178
+ Response,
4179
+ isReadableStream(value) {
4180
+ return value instanceof ReadableStream;
4181
+ },
4182
+ bufferReadableStream(stream) {
4183
+ return new Response(stream).arrayBuffer();
4184
+ },
4185
+ unbufferReadableStream(buffer) {
4186
+ let body = new Response(buffer).body;
4187
+ return assert3(body !== null), body;
4188
+ }
4189
+ }, objectProtoNames = Object.getOwnPropertyNames(Object.prototype).sort().join("\0");
4190
+ function isPlainObject(value) {
4191
+ let proto = Object.getPrototypeOf(value);
4192
+ return value?.constructor?.name === "RpcStub" || isObject(value) && objectContainsFunctions(value) ? !1 : proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join("\0") === objectProtoNames;
4193
+ }
4194
+ function objectContainsFunctions(obj) {
4195
+ let propertyNames = Object.getOwnPropertyNames(obj), propertySymbols = Object.getOwnPropertySymbols(obj), properties = [...propertyNames, ...propertySymbols];
4196
+ for (let property of properties) {
4197
+ let entry = obj[property];
4198
+ if (typeof entry == "function" || isObject(entry) && objectContainsFunctions(entry))
4199
+ return !0;
4200
+ }
4201
+ return !1;
4202
+ }
4203
+ function isObject(value) {
4204
+ return !!value && typeof value == "object";
4205
+ }
4206
+ function getType(value) {
4207
+ return Object.prototype.toString.call(value).slice(8, -1);
4208
+ }
4209
+ function isInternal(value) {
4210
+ return isObject(value) && value[/* @__PURE__ */ Symbol.for("cloudflare:internal-class")];
4211
+ }
4212
+ var ProxyServer = class {
4213
+ constructor(_state, env) {
4214
+ this.env = env;
4215
+ this.heap.set(ProxyAddresses.GLOBAL, globalThis), this.heap.set(ProxyAddresses.ENV, env);
4216
+ }
4217
+ nextHeapAddress = ProxyAddresses.USER_START;
4218
+ heap = /* @__PURE__ */ new Map();
4219
+ reducers = {
4220
+ ...structuredSerializableReducers,
4221
+ ...createHTTPReducers(WORKERS_PLATFORM_IMPL),
4222
+ // Corresponding revivers in `ProxyClient`
4223
+ // `Native` reducer *MUST* be applied last
4224
+ Native: (value) => {
4225
+ let type = getType(value);
4226
+ if ((type === "Object" || isInternal(value)) && !isPlainObject(value) || type === "Promise") {
4227
+ let address = this.nextHeapAddress++;
4228
+ this.heap.set(address, value), assert3(value !== null);
4229
+ let name = value?.constructor.name, isFunction = value instanceof __MiniflareFunctionWrapper;
4230
+ return [address, name, isFunction];
4231
+ }
4232
+ }
4233
+ };
4234
+ revivers = {
4235
+ ...structuredSerializableRevivers,
4236
+ ...createHTTPRevivers(WORKERS_PLATFORM_IMPL),
4237
+ // Corresponding reducers in `ProxyClient`
4238
+ Native: (value) => {
4239
+ assert3(Array.isArray(value));
4240
+ let [address] = value;
4241
+ assert3(typeof address == "number");
4242
+ let heapValue = this.heap.get(address);
4243
+ return assert3(heapValue !== void 0), heapValue instanceof Promise && this.heap.delete(address), heapValue;
4244
+ }
4245
+ };
4246
+ nativeReviver = { Native: this.revivers.Native };
4247
+ async fetch(request) {
4248
+ try {
4249
+ return await this.#fetch(request);
4250
+ } catch (e) {
4251
+ let error = reduceError(e);
4252
+ return Response.json(error, {
4253
+ status: 500,
4254
+ headers: { [CoreHeaders.ERROR_STACK]: "true" }
4255
+ });
4256
+ }
4257
+ }
4258
+ async #fetch(request) {
4259
+ let hostHeader = request.headers.get("Host");
4260
+ if (hostHeader == null) return new Response(null, { status: 400 });
4261
+ try {
4262
+ let host = new URL(`http://${hostHeader}`);
4263
+ if (!ALLOWED_HOSTNAMES.includes(host.hostname))
4264
+ return new Response(null, { status: 401 });
4265
+ } catch {
4266
+ return new Response(null, { status: 400 });
4267
+ }
4268
+ let secretHex = request.headers.get(CoreHeaders.OP_SECRET);
4269
+ if (secretHex == null) return new Response(null, { status: 401 });
4270
+ let expectedSecret = this.env[CoreBindings.DATA_PROXY_SECRET], secretBuffer = Buffer2.from(secretHex, "hex");
4271
+ if (secretBuffer.byteLength !== expectedSecret.byteLength || !crypto.subtle.timingSafeEqual(secretBuffer, expectedSecret))
4272
+ return new Response(null, { status: 401 });
4273
+ let opHeader = request.headers.get(CoreHeaders.OP), targetHeader = request.headers.get(CoreHeaders.OP_TARGET), keyHeader = request.headers.get(CoreHeaders.OP_KEY), allowAsync = request.headers.get(CoreHeaders.OP_SYNC) === null, argsSizeHeader = request.headers.get(CoreHeaders.OP_STRINGIFIED_SIZE), contentLengthHeader = request.headers.get("Content-Length");
4274
+ if (targetHeader === null) return new Response(null, { status: 400 });
4275
+ if (opHeader === ProxyOps.FREE) {
4276
+ for (let targetValue of targetHeader.split(",")) {
4277
+ let targetAddress = parseInt(targetValue);
4278
+ assert3(!Number.isNaN(targetAddress)), this.heap.delete(targetAddress);
4279
+ }
4280
+ return new Response(null, { status: 204 });
4281
+ }
4282
+ let target = parse(
4283
+ targetHeader,
4284
+ this.nativeReviver
4285
+ ), targetName = target.constructor.name, status = 200, result, unbufferedRest, rpcAwaited = !1;
4286
+ if (opHeader === ProxyOps.GET) {
4287
+ if (result = keyHeader === null ? target : target[keyHeader], result?.constructor.name === "RpcProperty" && (result = await result), typeof result == "function")
4288
+ return new Response(null, {
4289
+ status: 204,
4290
+ headers: { [CoreHeaders.OP_RESULT_TYPE]: "Function" }
4291
+ });
4292
+ } else if (opHeader === ProxyOps.GET_OWN_DESCRIPTOR) {
4293
+ if (keyHeader === null) return new Response(null, { status: 400 });
4294
+ let descriptor = Object.getOwnPropertyDescriptor(target, keyHeader);
4295
+ descriptor !== void 0 && (result = {
4296
+ configurable: descriptor.configurable,
4297
+ enumerable: descriptor.enumerable,
4298
+ writable: descriptor.writable
4299
+ });
4300
+ } else if (opHeader === ProxyOps.GET_OWN_KEYS)
4301
+ result = Object.getOwnPropertyNames(target);
4302
+ else if (opHeader === ProxyOps.CALL) {
4303
+ assert3(keyHeader !== null);
4304
+ let func = target[keyHeader];
4305
+ if (assert3(typeof func == "function"), isFetcherFetch(targetName, keyHeader)) {
4306
+ let originalUrl = request.headers.get(CoreHeaders.ORIGINAL_URL), url = new URL(originalUrl ?? request.url);
4307
+ return request = new Request(url, request), request.headers.delete(CoreHeaders.OP_SECRET), request.headers.delete(CoreHeaders.OP), request.headers.delete(CoreHeaders.OP_TARGET), request.headers.delete(CoreHeaders.OP_KEY), request.headers.delete(CoreHeaders.ORIGINAL_URL), request.headers.delete(CoreHeaders.DISABLE_PRETTY_ERROR), func.call(target, request);
4308
+ }
4309
+ let args;
4310
+ if (argsSizeHeader === null || argsSizeHeader === contentLengthHeader)
4311
+ args = parseWithReadableStreams(
4312
+ WORKERS_PLATFORM_IMPL,
4313
+ { value: await request.text() },
4314
+ this.revivers
4315
+ );
4316
+ else {
4317
+ let argsSize = parseInt(argsSizeHeader);
4318
+ assert3(!Number.isNaN(argsSize)), assert3(request.body !== null);
4319
+ let [encodedArgs, rest] = await readPrefix(request.body, argsSize);
4320
+ unbufferedRest = rest;
4321
+ let stringifiedArgs = DECODER.decode(encodedArgs);
4322
+ args = parseWithReadableStreams(
4323
+ WORKERS_PLATFORM_IMPL,
4324
+ { value: stringifiedArgs, unbufferedStream: rest },
4325
+ this.revivers
4326
+ );
4327
+ }
4328
+ assert3(Array.isArray(args));
4329
+ try {
4330
+ if (isImagesInput(targetName, keyHeader)) {
4331
+ let transform = func.apply(target, [args[0]]);
4332
+ for (let operation of args[1])
4333
+ transform = transform[operation.type](...operation.arguments);
4334
+ result = transform.output(args[2]);
4335
+ } else ["RpcProperty", "RpcStub"].includes(func.constructor.name) ? (result = await func(...args), rpcAwaited = !0) : result = func.apply(target, args);
4336
+ isR2ObjectWriteHttpMetadata(targetName, keyHeader) && (result = args[0]);
4337
+ } catch (e) {
4338
+ status = 500, result = e;
4339
+ }
4340
+ } else
4341
+ return new Response(null, { status: 404 });
4342
+ let headers = new Headers();
4343
+ if (allowAsync && (result instanceof Promise || rpcAwaited)) {
4344
+ try {
4345
+ result = await result;
4346
+ } catch (e) {
4347
+ status = 500, result = e;
4348
+ }
4349
+ headers.append(CoreHeaders.OP_RESULT_TYPE, "Promise");
4350
+ }
4351
+ if (unbufferedRest !== void 0 && !unbufferedRest.locked)
4352
+ try {
4353
+ await unbufferedRest.pipeTo(new WritableStream());
4354
+ } catch {
4355
+ }
4356
+ if (result instanceof ReadableStream)
4357
+ return headers.append(CoreHeaders.OP_RESULT_TYPE, "ReadableStream"), new Response(result, { status, headers });
4358
+ {
4359
+ let stringified = await stringifyWithStreams(
4360
+ WORKERS_PLATFORM_IMPL,
4361
+ result,
4362
+ this.reducers,
4363
+ /* allowUnbufferedStream */
4364
+ allowAsync
4365
+ );
4366
+ if (stringified.unbufferedStream === void 0)
4367
+ return new Response(stringified.value, { status, headers });
4368
+ {
4369
+ let body = new IdentityTransformStream(), encodedValue = ENCODER.encode(stringified.value), encodedSize = encodedValue.byteLength.toString();
4370
+ return headers.set(CoreHeaders.OP_STRINGIFIED_SIZE, encodedSize), this.#writeWithUnbufferedStream(
4371
+ body.writable,
4372
+ encodedValue,
4373
+ stringified.unbufferedStream
4374
+ ), new Response(body.readable, { status, headers });
4375
+ }
4376
+ }
4377
+ }
4378
+ async #writeWithUnbufferedStream(writable, encodedValue, unbufferedStream) {
4379
+ let writer = writable.getWriter();
4380
+ await writer.write(encodedValue), writer.releaseLock(), await unbufferedStream.pipeTo(writable);
4381
+ }
4382
+ };
4383
+
4384
+ // src/workers/core/entry.worker.ts
4385
+ var encoder = new TextEncoder();
4386
+ function getUserRequest(request, env, clientIp) {
4387
+ let originalUrl = request.headers.get(CoreHeaders.ORIGINAL_URL), url = new URL(originalUrl ?? request.url), rewriteHeadersFromOriginalUrl = !1, proxySharedSecret = request.headers.get(
4388
+ CoreHeaders.PROXY_SHARED_SECRET
4389
+ );
4390
+ if (proxySharedSecret) {
4391
+ let secretFromHeader = encoder.encode(proxySharedSecret), configuredSecret = env[CoreBindings.DATA_PROXY_SHARED_SECRET];
4392
+ if (secretFromHeader.byteLength === configuredSecret?.byteLength && crypto.subtle.timingSafeEqual(secretFromHeader, configuredSecret))
4393
+ rewriteHeadersFromOriginalUrl = !0;
4394
+ else
4395
+ throw new HttpError(
4396
+ 400,
4397
+ `Disallowed header in request: ${CoreHeaders.PROXY_SHARED_SECRET}=${proxySharedSecret}`
4398
+ );
4399
+ }
4400
+ let upstreamUrl = env[CoreBindings.TEXT_UPSTREAM_URL], originalHostname = upstreamUrl !== void 0 ? url.host : void 0;
4401
+ if (upstreamUrl !== void 0) {
4402
+ let path = url.pathname + url.search;
4403
+ path.startsWith("/") && (path = `./${path.substring(1)}`), url = new URL(path, upstreamUrl), rewriteHeadersFromOriginalUrl = !0;
4404
+ }
4405
+ request = new Request(url, request), request.headers.set("Accept-Encoding", "br, gzip");
4406
+ let secFetchMode = request.headers.get(CoreHeaders.SEC_FETCH_MODE);
4407
+ if (secFetchMode && request.headers.set("Sec-Fetch-Mode", secFetchMode), request.headers.delete(CoreHeaders.SEC_FETCH_MODE), rewriteHeadersFromOriginalUrl && request.headers.set("Host", url.host), originalHostname !== void 0 && request.headers.set(CoreHeaders.ORIGINAL_HOSTNAME, originalHostname), clientIp && !request.headers.get("CF-Connecting-IP")) {
4408
+ let ipv4Regex = /(?<ip>.*?):\d+/, ipv6Regex = /\[(?<ip>.*?)\]:\d+/, ip = clientIp.match(ipv6Regex)?.groups?.ip ?? clientIp.match(ipv4Regex)?.groups?.ip;
4409
+ ip && request.headers.set("CF-Connecting-IP", ip);
4410
+ }
4411
+ return request.headers.delete(CoreHeaders.PROXY_SHARED_SECRET), request.headers.delete(CoreHeaders.ORIGINAL_URL), env[CoreBindings.STRIP_DISABLE_PRETTY_ERROR] && request.headers.delete(CoreHeaders.DISABLE_PRETTY_ERROR), request;
4412
+ }
4413
+ function getTargetService(request, url, env) {
4414
+ let service = env[CoreBindings.SERVICE_USER_FALLBACK], override = request.headers.get(CoreHeaders.ROUTE_OVERRIDE);
4415
+ request.headers.delete(CoreHeaders.ROUTE_OVERRIDE);
4416
+ let route = override ?? matchRoutes(env[CoreBindings.JSON_ROUTES], url);
4417
+ return route !== null && (service = env[`${CoreBindings.SERVICE_USER_ROUTE_PREFIX}${route}`]), service;
4418
+ }
4419
+ var LOCALHOST_HOSTNAMES = ["localhost", "127.0.0.1", "[::1]"];
4420
+ function validateLocalExplorerRequest(request, routes, upstreamUrl) {
4421
+ let allowedHostnames = /* @__PURE__ */ new Set();
4422
+ for (let route of routes) {
4423
+ let hostname = route.hostname.replace(/^\./, "");
4424
+ hostname && allowedHostnames.add(hostname);
4425
+ }
4426
+ if (upstreamUrl)
4427
+ try {
4428
+ let upstreamHostname = new URL(upstreamUrl).hostname;
4429
+ upstreamHostname && allowedHostnames.add(upstreamHostname);
4430
+ } catch {
4431
+ }
4432
+ let hostHeader = request.headers.get("Host"), hostHostname;
4433
+ if (hostHeader) {
4434
+ try {
4435
+ hostHostname = new URL(`http://${hostHeader}`).hostname;
4436
+ } catch {
4437
+ throw new HttpError(403, "Invalid Host header");
4438
+ }
4439
+ if (!isHostnameAllowed(hostHostname, allowedHostnames))
4440
+ throw new HttpError(403, "Invalid Host header");
4441
+ }
4442
+ let origin = request.headers.get("Origin");
4443
+ if (origin) {
4444
+ let originHostname;
4445
+ try {
4446
+ originHostname = new URL(origin).hostname;
4447
+ } catch {
4448
+ throw new HttpError(403, "Invalid Origin header");
4449
+ }
4450
+ if (!isHostnameAllowed(originHostname, allowedHostnames))
4451
+ throw new HttpError(403, "Invalid Origin header");
4452
+ }
4453
+ }
4454
+ function isHostnameAllowed(hostname, allowedHostnames) {
4455
+ if (LOCALHOST_HOSTNAMES.includes(hostname))
4456
+ return !0;
4457
+ for (let allowed of allowedHostnames)
4458
+ if (hostname === allowed || hostname.endsWith(`.${allowed}`))
4459
+ return !0;
4460
+ return !1;
4461
+ }
4462
+ function maybePrettifyError(request, response, env) {
4463
+ return response.status !== 500 || response.headers.get(CoreHeaders.ERROR_STACK) === null ? response : env[CoreBindings.SERVICE_LOOPBACK].fetch(
4464
+ "http://localhost/core/error",
4465
+ {
4466
+ method: "POST",
4467
+ headers: request.headers,
4468
+ body: response.body,
4469
+ cf: { prettyErrorOriginalUrl: request.url }
4470
+ }
4471
+ );
4472
+ }
4473
+ function maybeInjectLiveReload(response, env, ctx) {
4474
+ let liveReloadScript = env[CoreBindings.DATA_LIVE_RELOAD_SCRIPT];
4475
+ if (liveReloadScript === void 0 || !response.headers.get("Content-Type")?.toLowerCase().includes("text/html"))
4476
+ return response;
4477
+ let headers = new Headers(response.headers), contentLength = parseInt(headers.get("content-length"));
4478
+ isNaN(contentLength) || headers.set(
4479
+ "content-length",
4480
+ String(contentLength + liveReloadScript.byteLength)
4481
+ );
4482
+ let { readable, writable } = new IdentityTransformStream();
4483
+ return ctx.waitUntil(
4484
+ (async () => {
4485
+ await response.body?.pipeTo(writable, { preventClose: !0 });
4486
+ let writer = writable.getWriter();
4487
+ await writer.write(liveReloadScript), await writer.close();
4488
+ })()
4489
+ ), new Response(readable, {
4490
+ status: response.status,
4491
+ statusText: response.statusText,
4492
+ headers
4493
+ });
4494
+ }
4495
+ var acceptEncodingElement = /^(?<coding>[a-z]+|\*)(?:\s*;\s*q=(?<weight>\d+(?:.\d+)?))?$/;
4496
+ function maybeParseAcceptEncodingElement(element) {
4497
+ let match = acceptEncodingElement.exec(element);
4498
+ if (match?.groups != null)
4499
+ return {
4500
+ coding: match.groups.coding,
4501
+ weight: match.groups.weight === void 0 ? 1 : parseFloat(match.groups.weight)
4502
+ };
4503
+ }
4504
+ function parseAcceptEncoding(header) {
4505
+ let encodings = [];
4506
+ for (let element of header.split(",")) {
4507
+ let maybeEncoding = maybeParseAcceptEncodingElement(element.trim());
4508
+ maybeEncoding !== void 0 && encodings.push(maybeEncoding);
4509
+ }
4510
+ return encodings.sort((a, b) => b.weight - a.weight);
4511
+ }
4512
+ function ensureAcceptableEncoding(clientAcceptEncoding, response) {
4513
+ if (clientAcceptEncoding === null) return response;
4514
+ let encodings = parseAcceptEncoding(clientAcceptEncoding);
4515
+ if (encodings.length === 0) return response;
4516
+ let contentEncoding = response.headers.get("Content-Encoding"), contentType = response.headers.get("Content-Type");
4517
+ if (!isCompressedByCloudflareFL(contentType) || contentEncoding !== null && contentEncoding !== "gzip" && contentEncoding !== "br")
4518
+ return response;
4519
+ let desiredEncoding, identityDisallowed = !1;
4520
+ for (let encoding of encodings)
4521
+ if (encoding.weight === 0)
4522
+ (encoding.coding === "identity" || encoding.coding === "*") && (identityDisallowed = !0);
4523
+ else if (encoding.coding === "gzip" || encoding.coding === "br") {
4524
+ desiredEncoding = encoding.coding;
4525
+ break;
4526
+ } else if (encoding.coding === "identity")
4527
+ break;
4528
+ return desiredEncoding === void 0 ? identityDisallowed ? new Response("Unsupported Media Type", {
4529
+ status: 415,
4530
+ headers: { "Accept-Encoding": "br, gzip" }
4531
+ }) : (contentEncoding === null || (response = new Response(response.body, response), response.headers.delete("Content-Encoding")), response) : (contentEncoding === desiredEncoding || (response = new Response(response.body, response), response.headers.set("Content-Encoding", desiredEncoding)), response);
4532
+ }
4533
+ function colourFromHTTPStatus(status) {
4534
+ return 200 <= status && status < 300 ? green : 400 <= status && status < 500 ? yellow : 500 <= status ? red : blue;
4535
+ }
4536
+ var ADDITIONAL_RESPONSE_LOG_HEADER_NAME = "X-Mf-Additional-Response-Log";
4537
+ function maybeLogRequest(req, res, env, ctx, startTime) {
4538
+ res = new Response(res.body, res);
4539
+ let additionalResponseLog = res.headers.get(
4540
+ ADDITIONAL_RESPONSE_LOG_HEADER_NAME
4541
+ );
4542
+ if (res.headers.delete(ADDITIONAL_RESPONSE_LOG_HEADER_NAME), env[CoreBindings.JSON_LOG_LEVEL] < LogLevel2.INFO) return res;
4543
+ let url = new URL(req.url), statusText = (res.statusText.trim() || STATUS_CODES[res.status]) ?? "", lines = [
4544
+ `${bold(req.method)} ${url.pathname} `,
4545
+ colourFromHTTPStatus(res.status)(`${bold(res.status)} ${statusText} `),
4546
+ grey(`(${Date.now() - startTime}ms)`)
4547
+ ];
4548
+ additionalResponseLog && lines.push(` ${grey(additionalResponseLog)}`);
4549
+ let message = reset(lines.join(""));
4550
+ return ctx.waitUntil(
4551
+ env[CoreBindings.SERVICE_LOOPBACK].fetch("http://localhost/core/log", {
4552
+ method: "POST",
4553
+ headers: { [SharedHeaders2.LOG_LEVEL]: LogLevel2.INFO.toString() },
4554
+ body: message
4555
+ })
4556
+ ), res;
4557
+ }
4558
+ function handleProxy(request, env) {
4559
+ let ns = env[CoreBindings.DURABLE_OBJECT_NAMESPACE_PROXY], id = ns.idFromName("");
4560
+ return ns.get(id).fetch(request);
4561
+ }
4562
+ var entry_worker_default = {
4563
+ async fetch(request, env, ctx) {
4564
+ let startTime = Date.now(), clientIp = request.cf?.clientIp, clientCfBlobHeader = request.headers.get(CoreHeaders.CF_BLOB), cf = clientCfBlobHeader ? JSON.parse(clientCfBlobHeader) : {
4565
+ ...env[CoreBindings.JSON_CF_BLOB],
4566
+ // Defaulting to empty string to preserve undefined `Accept-Encoding`
4567
+ // through Wrangler's proxy worker.
4568
+ clientAcceptEncoding: request.headers.get("Accept-Encoding") ?? ""
4569
+ };
4570
+ if (request = new Request(request, { cf }), request.headers.get(CoreHeaders.OP) !== null) return handleProxy(request, env);
4571
+ let disablePrettyErrorPage = request.headers.get(CoreHeaders.DISABLE_PRETTY_ERROR) !== null, clientAcceptEncoding = request.headers.get("Accept-Encoding");
4572
+ try {
4573
+ if (env[CoreBindings.SERVICE_LOCAL_EXPLORER]) {
4574
+ let preRewriteUrl = new URL(request.url);
4575
+ (preRewriteUrl.pathname === LOCAL_EXPLORER_BASE_PATH || preRewriteUrl.pathname.startsWith(`${LOCAL_EXPLORER_BASE_PATH}/`)) && validateLocalExplorerRequest(
4576
+ request,
4577
+ env[CoreBindings.JSON_ROUTES],
4578
+ env[CoreBindings.TEXT_UPSTREAM_URL]
4579
+ );
4580
+ }
4581
+ request = getUserRequest(request, env, clientIp);
4582
+ } catch (e) {
4583
+ if (e instanceof HttpError)
4584
+ return e.toResponse();
4585
+ throw e;
4586
+ }
4587
+ let url = new URL(request.url), service = getTargetService(request, url, env);
4588
+ if (service === void 0)
4589
+ return new Response("No entrypoint worker found", { status: 404 });
4590
+ try {
4591
+ if (env[CoreBindings.SERVICE_LOCAL_EXPLORER] && (url.pathname === LOCAL_EXPLORER_BASE_PATH || url.pathname.startsWith(`${LOCAL_EXPLORER_BASE_PATH}/`)))
4592
+ return await env[CoreBindings.SERVICE_LOCAL_EXPLORER].fetch(request);
4593
+ if (env[CoreBindings.TRIGGER_HANDLERS]) {
4594
+ if (url.pathname === "/cdn-cgi/handler/scheduled" || /* legacy URL path */
4595
+ url.pathname === "/cdn-cgi/mf/scheduled")
4596
+ return url.pathname === "/cdn-cgi/mf/scheduled" && ctx.waitUntil(
4597
+ env[CoreBindings.SERVICE_LOOPBACK].fetch(
4598
+ "http://localhost/core/log",
4599
+ {
4600
+ method: "POST",
4601
+ headers: {
4602
+ [SharedHeaders2.LOG_LEVEL]: LogLevel2.WARN.toString()
4603
+ },
4604
+ body: "Triggering scheduled handlers via a request to `/cdn-cgi/mf/scheduled` is deprecated, and will be removed in a future version of Miniflare. Instead, send a request to `/cdn-cgi/handler/scheduled`"
4605
+ }
4606
+ )
4607
+ ), await handleScheduled(url.searchParams, service);
4608
+ if (url.pathname === "/cdn-cgi/handler/email")
4609
+ return await handleEmail(
4610
+ url.searchParams,
4611
+ request,
4612
+ service,
4613
+ env,
4614
+ ctx
4615
+ );
4616
+ if (url.pathname.startsWith("/cdn-cgi/handler/"))
4617
+ return new Response(
4618
+ `"${url.pathname}" is not a valid handler. Did you mean to use "/cdn-cgi/handler/scheduled" or "/cdn-cgi/handler/email"?`,
4619
+ { status: 404 }
4620
+ );
4621
+ }
4622
+ let response = await service.fetch(request);
4623
+ return disablePrettyErrorPage || (response = await maybePrettifyError(request, response, env)), response = maybeInjectLiveReload(response, env, ctx), response = ensureAcceptableEncoding(clientAcceptEncoding, response), env[CoreBindings.LOG_REQUESTS] && (response = maybeLogRequest(request, response, env, ctx, startTime)), response;
4624
+ } catch (e) {
4625
+ return new Response(e?.stack ?? String(e), { status: 500 });
4626
+ }
4627
+ }
4628
+ };
4629
+ export {
4630
+ ProxyServer,
4631
+ entry_worker_default as default
4632
+ };
4633
+ //# sourceMappingURL=entry.worker.js.map