@r-universe/webr 2023.6.21 → 2023.8.26

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 (128) hide show
  1. package/dist/R.bin.data +3920 -2189
  2. package/dist/R.bin.js +1 -6
  3. package/dist/repl/App.d.ts +15 -0
  4. package/dist/repl/components/Editor.d.ts +26 -0
  5. package/dist/repl/components/Files.d.ts +19 -0
  6. package/dist/repl/components/Plot.d.ts +7 -0
  7. package/dist/repl/components/Terminal.d.ts +9 -0
  8. package/dist/repl/components/utils.d.ts +11 -0
  9. package/dist/tests/webR/error.test.d.ts +1 -0
  10. package/dist/vfs/usr/lib/R/library/grDevices/afm/ArialMT-Bold.afm.gz +0 -0
  11. package/dist/vfs/usr/lib/R/library/grDevices/afm/ArialMT-BoldItalic.afm.gz +0 -0
  12. package/dist/vfs/usr/lib/R/library/grDevices/afm/ArialMT-Italic.afm.gz +0 -0
  13. package/dist/vfs/usr/lib/R/library/grDevices/afm/ArialMT.afm.gz +0 -0
  14. package/dist/vfs/usr/lib/R/library/grDevices/afm/CM_boldx_10.afm.gz +0 -0
  15. package/dist/vfs/usr/lib/R/library/grDevices/afm/CM_boldx_italic_10.afm.gz +0 -0
  16. package/dist/vfs/usr/lib/R/library/grDevices/afm/CM_italic_10.afm.gz +0 -0
  17. package/dist/vfs/usr/lib/R/library/grDevices/afm/CM_regular_10.afm.gz +0 -0
  18. package/dist/vfs/usr/lib/R/library/grDevices/afm/CM_symbol_10.afm.gz +0 -0
  19. package/dist/vfs/usr/lib/R/library/grDevices/afm/Courier-Bold.afm.gz +0 -0
  20. package/dist/vfs/usr/lib/R/library/grDevices/afm/Courier-BoldOblique.afm.gz +0 -0
  21. package/dist/vfs/usr/lib/R/library/grDevices/afm/Courier-Oblique.afm.gz +0 -0
  22. package/dist/vfs/usr/lib/R/library/grDevices/afm/Courier.afm.gz +0 -0
  23. package/dist/vfs/usr/lib/R/library/grDevices/afm/Helvetica-Bold.afm.gz +0 -0
  24. package/dist/vfs/usr/lib/R/library/grDevices/afm/Helvetica-BoldOblique.afm.gz +0 -0
  25. package/dist/vfs/usr/lib/R/library/grDevices/afm/Helvetica-Oblique.afm.gz +0 -0
  26. package/dist/vfs/usr/lib/R/library/grDevices/afm/Helvetica.afm.gz +0 -0
  27. package/dist/vfs/usr/lib/R/library/grDevices/afm/Symbol.afm.gz +0 -0
  28. package/dist/vfs/usr/lib/R/library/grDevices/afm/Times-Bold.afm.gz +0 -0
  29. package/dist/vfs/usr/lib/R/library/grDevices/afm/Times-BoldItalic.afm.gz +0 -0
  30. package/dist/vfs/usr/lib/R/library/grDevices/afm/Times-Italic.afm.gz +0 -0
  31. package/dist/vfs/usr/lib/R/library/grDevices/afm/Times-Roman.afm.gz +0 -0
  32. package/dist/vfs/usr/lib/R/library/grDevices/afm/ZapfDingbats.afm.gz +0 -0
  33. package/dist/vfs/usr/lib/R/library/grDevices/afm/a010013l.afm.gz +0 -0
  34. package/dist/vfs/usr/lib/R/library/grDevices/afm/a010015l.afm.gz +0 -0
  35. package/dist/vfs/usr/lib/R/library/grDevices/afm/a010033l.afm.gz +0 -0
  36. package/dist/vfs/usr/lib/R/library/grDevices/afm/a010035l.afm.gz +0 -0
  37. package/dist/vfs/usr/lib/R/library/grDevices/afm/agd_____.afm.gz +0 -0
  38. package/dist/vfs/usr/lib/R/library/grDevices/afm/agdo____.afm.gz +0 -0
  39. package/dist/vfs/usr/lib/R/library/grDevices/afm/agw_____.afm.gz +0 -0
  40. package/dist/vfs/usr/lib/R/library/grDevices/afm/agwo____.afm.gz +0 -0
  41. package/dist/vfs/usr/lib/R/library/grDevices/afm/b018012l.afm.gz +0 -0
  42. package/dist/vfs/usr/lib/R/library/grDevices/afm/b018015l.afm.gz +0 -0
  43. package/dist/vfs/usr/lib/R/library/grDevices/afm/b018032l.afm.gz +0 -0
  44. package/dist/vfs/usr/lib/R/library/grDevices/afm/b018035l.afm.gz +0 -0
  45. package/dist/vfs/usr/lib/R/library/grDevices/afm/bkd_____.afm.gz +0 -0
  46. package/dist/vfs/usr/lib/R/library/grDevices/afm/bkdi____.afm.gz +0 -0
  47. package/dist/vfs/usr/lib/R/library/grDevices/afm/bkl_____.afm.gz +0 -0
  48. package/dist/vfs/usr/lib/R/library/grDevices/afm/bkli____.afm.gz +0 -0
  49. package/dist/vfs/usr/lib/R/library/grDevices/afm/c059013l.afm.gz +0 -0
  50. package/dist/vfs/usr/lib/R/library/grDevices/afm/c059016l.afm.gz +0 -0
  51. package/dist/vfs/usr/lib/R/library/grDevices/afm/c059033l.afm.gz +0 -0
  52. package/dist/vfs/usr/lib/R/library/grDevices/afm/c059036l.afm.gz +0 -0
  53. package/dist/vfs/usr/lib/R/library/grDevices/afm/cmbxti10.afm.gz +0 -0
  54. package/dist/vfs/usr/lib/R/library/grDevices/afm/cmti10.afm.gz +0 -0
  55. package/dist/vfs/usr/lib/R/library/grDevices/afm/cob_____.afm.gz +0 -0
  56. package/dist/vfs/usr/lib/R/library/grDevices/afm/cobo____.afm.gz +0 -0
  57. package/dist/vfs/usr/lib/R/library/grDevices/afm/com_____.afm.gz +0 -0
  58. package/dist/vfs/usr/lib/R/library/grDevices/afm/coo_____.afm.gz +0 -0
  59. package/dist/vfs/usr/lib/R/library/grDevices/afm/hv______.afm.gz +0 -0
  60. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvb_____.afm.gz +0 -0
  61. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvbo____.afm.gz +0 -0
  62. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvn_____.afm.gz +0 -0
  63. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvnb____.afm.gz +0 -0
  64. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvnbo___.afm.gz +0 -0
  65. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvno____.afm.gz +0 -0
  66. package/dist/vfs/usr/lib/R/library/grDevices/afm/hvo_____.afm.gz +0 -0
  67. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019003l.afm.gz +0 -0
  68. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019004l.afm.gz +0 -0
  69. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019023l.afm.gz +0 -0
  70. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019024l.afm.gz +0 -0
  71. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019043l.afm.gz +0 -0
  72. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019044l.afm.gz +0 -0
  73. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019063l.afm.gz +0 -0
  74. package/dist/vfs/usr/lib/R/library/grDevices/afm/n019064l.afm.gz +0 -0
  75. package/dist/vfs/usr/lib/R/library/grDevices/afm/n021003l.afm.gz +0 -0
  76. package/dist/vfs/usr/lib/R/library/grDevices/afm/n021004l.afm.gz +0 -0
  77. package/dist/vfs/usr/lib/R/library/grDevices/afm/n021023l.afm.gz +0 -0
  78. package/dist/vfs/usr/lib/R/library/grDevices/afm/n021024l.afm.gz +0 -0
  79. package/dist/vfs/usr/lib/R/library/grDevices/afm/n022003l.afm.gz +0 -0
  80. package/dist/vfs/usr/lib/R/library/grDevices/afm/n022004l.afm.gz +0 -0
  81. package/dist/vfs/usr/lib/R/library/grDevices/afm/n022023l.afm.gz +0 -0
  82. package/dist/vfs/usr/lib/R/library/grDevices/afm/n022024l.afm.gz +0 -0
  83. package/dist/vfs/usr/lib/R/library/grDevices/afm/ncb_____.afm.gz +0 -0
  84. package/dist/vfs/usr/lib/R/library/grDevices/afm/ncbi____.afm.gz +0 -0
  85. package/dist/vfs/usr/lib/R/library/grDevices/afm/nci_____.afm.gz +0 -0
  86. package/dist/vfs/usr/lib/R/library/grDevices/afm/ncr_____.afm.gz +0 -0
  87. package/dist/vfs/usr/lib/R/library/grDevices/afm/p052003l.afm.gz +0 -0
  88. package/dist/vfs/usr/lib/R/library/grDevices/afm/p052004l.afm.gz +0 -0
  89. package/dist/vfs/usr/lib/R/library/grDevices/afm/p052023l.afm.gz +0 -0
  90. package/dist/vfs/usr/lib/R/library/grDevices/afm/p052024l.afm.gz +0 -0
  91. package/dist/vfs/usr/lib/R/library/grDevices/afm/pob_____.afm.gz +0 -0
  92. package/dist/vfs/usr/lib/R/library/grDevices/afm/pobi____.afm.gz +0 -0
  93. package/dist/vfs/usr/lib/R/library/grDevices/afm/poi_____.afm.gz +0 -0
  94. package/dist/vfs/usr/lib/R/library/grDevices/afm/por_____.afm.gz +0 -0
  95. package/dist/vfs/usr/lib/R/library/grDevices/afm/s050000l.afm.gz +0 -0
  96. package/dist/vfs/usr/lib/R/library/grDevices/afm/sy______.afm.gz +0 -0
  97. package/dist/vfs/usr/lib/R/library/grDevices/afm/tib_____.afm.gz +0 -0
  98. package/dist/vfs/usr/lib/R/library/grDevices/afm/tibi____.afm.gz +0 -0
  99. package/dist/vfs/usr/lib/R/library/grDevices/afm/tii_____.afm.gz +0 -0
  100. package/dist/vfs/usr/lib/R/library/grDevices/afm/tir_____.afm.gz +0 -0
  101. package/dist/vfs/usr/lib/R/library/parallel/DESCRIPTION +1 -1
  102. package/dist/vfs/usr/lib/R/library/parallel/Meta/package.rds +0 -0
  103. package/dist/vfs/usr/lib/R/library/tcltk/DESCRIPTION +1 -1
  104. package/dist/vfs/usr/lib/R/library/tcltk/Meta/package.rds +0 -0
  105. package/dist/vfs/usr/lib/R/library/tools/help/tools.rdb +0 -0
  106. package/dist/vfs/usr/lib/R/library/translations/Meta/package.rds +0 -0
  107. package/dist/webR/console.d.ts +2 -2
  108. package/dist/webR/error.d.ts +26 -0
  109. package/dist/webR/payload.d.ts +1 -1
  110. package/dist/webR/webr-chan.d.ts +18 -0
  111. package/dist/webR/webr-main.d.ts +6 -0
  112. package/dist/webr-serviceworker.js +14 -3
  113. package/dist/webr-serviceworker.js.map +3 -3
  114. package/dist/webr-serviceworker.mjs +14 -3
  115. package/dist/webr-serviceworker.mjs.map +3 -3
  116. package/dist/webr-worker.js +43 -24
  117. package/dist/webr-worker.js.map +3 -3
  118. package/dist/webr.cjs +3 -3
  119. package/dist/webr.cjs.map +4 -4
  120. package/dist/webr.mjs +3 -3
  121. package/dist/webr.mjs.map +4 -4
  122. package/package.json +19 -9
  123. package/templates/repl.html +9 -127
  124. package/dist/repl/fstree.d.ts +0 -57
  125. package/dist/repl/repl.d.ts +0 -1
  126. package/dist/vfs/usr/lib/R/library/grDevices/libs/grDevices.so +0 -0
  127. package/dist/vfs/usr/lib/R/modules/internet.so +0 -0
  128. package/dist/vfs/usr/lib/R/modules/lapack.so +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/@msgpack/msgpack/src/utils/int.ts", "../node_modules/@msgpack/msgpack/src/utils/utf8.ts", "../node_modules/@msgpack/msgpack/src/ExtData.ts", "../node_modules/@msgpack/msgpack/src/DecodeError.ts", "../node_modules/@msgpack/msgpack/src/timestamp.ts", "../node_modules/@msgpack/msgpack/src/ExtensionCodec.ts", "../node_modules/@msgpack/msgpack/src/utils/typedArrays.ts", "../node_modules/@msgpack/msgpack/src/Encoder.ts", "../node_modules/@msgpack/msgpack/src/encode.ts", "../node_modules/@msgpack/msgpack/src/utils/prettyByte.ts", "../node_modules/@msgpack/msgpack/src/CachedKeyDecoder.ts", "../node_modules/@msgpack/msgpack/src/Decoder.ts", "../node_modules/@msgpack/msgpack/src/decode.ts", "../node_modules/@msgpack/msgpack/src/utils/stream.ts", "../node_modules/@msgpack/msgpack/src/decodeAsync.ts", "../node_modules/@msgpack/msgpack/src/index.ts", "../node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js", "../webR/compat.ts", "../webR/utils.ts", "../webR/chan/task-common.ts", "../webR/chan/task-main.ts", "../webR/chan/queue.ts", "../webR/chan/message.ts", "../webR/payload.ts", "../webR/chan/channel.ts", "../webR/chan/task-worker.ts", "../webR/emscripten.ts", "../webR/chan/channel-shared.ts", "../webR/chan/channel-service.ts", "../webR/chan/channel-common.ts", "../webR/robj.ts", "../webR/utils-r.ts", "../webR/robj-worker.ts", "../webR/webr-worker.ts"],
4
- "sourcesContent": ["// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n", "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int\";\n\nconst TEXT_ENCODING_AVAILABLE =\n (typeof process === \"undefined\" || process?.env?.[\"TEXT_ENCODING\"] !== \"never\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\n\nexport function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_ENCODING\"] !== \"force\"\n ? 200\n : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array<number> = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++]!;\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n const byte4 = bytes[offset++]! & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_DECODER\"] !== \"force\"\n ? 200\n : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder!.decode(stringBytes);\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n", "export class DecodeError extends Error {\n constructor(message: string) {\n super(message);\n\n // fix the prototype chain in a cross-platform way\n const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError\";\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType<ContextType> = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType<ContextType>;\n decode: ExtensionDecoderType<ContextType>;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n", "export function ensureUint8Array(buffer: ArrayLike<number> | Uint8Array | ArrayBufferView | ArrayBuffer): Uint8Array {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n\nexport function createDataView(buffer: ArrayLike<number> | ArrayBufferView | ArrayBuffer): DataView {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n\n const bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n", "import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport type { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder<ContextType = undefined> {\n private pos = 0;\n private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n private bytes = new Uint8Array(this.view.buffer);\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxDepth = DEFAULT_MAX_DEPTH,\n private readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n private readonly sortKeys = false,\n private readonly forceFloat32 = false,\n private readonly ignoreUndefined = false,\n private readonly forceIntegerToFloat = false,\n ) {}\n\n private reinitializeState() {\n this.pos = 0;\n }\n\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n public encodeSharedRef(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n }\n\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n public encode(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n }\n\n private doEncode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n this.encodeNumber(object);\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n private ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n private resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n private encodeNil() {\n this.writeU8(0xc0);\n }\n\n private encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n private encodeNumber(object: number) {\n if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n } else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n } else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n }\n\n private writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n private encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n const strLength = object.length;\n\n if (strLength > TEXT_ENCODER_THRESHOLD) {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n } else {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n }\n\n private encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record<string, unknown>, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n private encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n private encodeArray(object: Array<unknown>, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n\n private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n let count = 0;\n\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n\n return count;\n }\n\n private encodeMap(object: Record<string, unknown>, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (const key of keys) {\n const value = object[key];\n\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n\n private encodeExtension(ext: ExtData) {\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n private writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n private writeU8a(values: ArrayLike<number>) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n private writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n private writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n private writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n private writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n private writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n private writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n}\n", "import { Encoder } from \"./Encoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions<ContextType = undefined> = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * The maximum depth in nested objects and arrays.\n *\n * Defaults to 100.\n */\n maxDepth: number;\n\n /**\n * The initial size of the internal buffer.\n *\n * Defaults to 2048.\n */\n initialBufferSize: number;\n\n /**\n * If `true`, the keys of an object is sorted. In other words, the encoded\n * binary is canonical and thus comparable to another encoded binary.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n sortKeys: boolean;\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n *\n * Defaults to `false`.\n */\n forceFloat32: boolean;\n\n /**\n * If `true`, an object property with `undefined` value are ignored.\n * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n ignoreUndefined: boolean;\n\n /**\n * If `true`, integer numbers are encoded as floating point numbers,\n * with the `forceFloat32` option taken into account.\n *\n * Defaults to `false`.\n */\n forceIntegerToFloat: boolean;\n }>\n> &\n ContextOf<ContextType>;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n value: unknown,\n options: EncodeOptions<SplitUndefined<ContextType>> = defaultEncodeOptions as any,\n): Uint8Array {\n const encoder = new Encoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxDepth,\n options.initialBufferSize,\n options.sortKeys,\n options.forceFloat32,\n options.ignoreUndefined,\n options.forceIntegerToFloat,\n );\n return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n canBeCached(byteLength: number): boolean;\n decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n hit = 0;\n miss = 0;\n private readonly caches: Array<Array<KeyCacheRecord>>;\n\n constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number): boolean {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1]!;\n\n FIND_CHUNK: for (const record of records) {\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1]!;\n const record: KeyCacheRecord = { bytes, str: value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n\n const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n }\n}\n", "import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder, KeyDecoder } from \"./CachedKeyDecoder\";\nimport { DecodeError } from \"./DecodeError\";\n\nconst enum State {\n ARRAY,\n MAP_KEY,\n MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n const keyType = typeof key;\n\n return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n type: State.MAP_KEY | State.MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n type: State.ARRAY;\n size: number;\n array: Array<unknown>;\n position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n } catch (e: any) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n private totalPos = 0;\n private pos = 0;\n\n private view = EMPTY_VIEW;\n private bytes = EMPTY_BYTES;\n private headByte = HEAD_BYTE_REQUIRED;\n private readonly stack: Array<StackState> = [];\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxStrLength = UINT32_MAX,\n private readonly maxBinLength = UINT32_MAX,\n private readonly maxArrayLength = UINT32_MAX,\n private readonly maxMapLength = UINT32_MAX,\n private readonly maxExtLength = UINT32_MAX,\n private readonly keyDecoder: KeyDecoder | null = sharedCachedKeyDecoder,\n ) {}\n\n private reinitializeState() {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n\n // view, bytes, and pos will be re-initialized in setBuffer()\n }\n\n private setBuffer(buffer: ArrayLike<number> | BufferSource): void {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n }\n\n private appendBuffer(buffer: ArrayLike<number> | BufferSource) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n } else {\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n\n // concat remainingData + newData\n const newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n }\n\n private hasRemaining(size: number) {\n return this.view.byteLength - this.pos >= size;\n }\n\n private createExtraByteError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n }\n\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n public decode(buffer: ArrayLike<number> | BufferSource): unknown {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n const object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n }\n\n public *decodeMulti(buffer: ArrayLike<number> | BufferSource): Generator<unknown, void, unknown> {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n while (this.hasRemaining(1)) {\n yield this.doDecodeSync();\n }\n }\n\n public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>): Promise<unknown> {\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.doDecodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n }\n\n public decodeArrayStream(\n stream: AsyncIterable<ArrayLike<number> | BufferSource>,\n ): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, true);\n }\n\n public decodeStream(stream: AsyncIterable<ArrayLike<number> | BufferSource>): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>, isArray: boolean) {\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.doDecodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n }\n\n private doDecodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack[stack.length - 1]!;\n if (state.type === State.ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n } else {\n continue DECODE;\n }\n } else if (state.type === State.MAP_KEY) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n\n state.key = object;\n state.type = State.MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n } else {\n state.key = null;\n state.type = State.MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n private readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n private complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n private readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n private pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.push({\n type: State.MAP_KEY,\n size,\n key: null,\n readCount: 0,\n map: {},\n });\n }\n\n private pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.push({\n type: State.ARRAY,\n size,\n array: new Array<unknown>(size),\n position: 0,\n });\n }\n\n private decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\n `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n );\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n } else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n } else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n private stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack[this.stack.length - 1]!;\n return state.type === State.MAP_KEY;\n }\n return false;\n }\n\n private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n private decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n private lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n private lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n private lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n private readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n private readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n private readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions<ContextType = undefined> = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Maximum string length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n }>\n> &\n ContextOf<ContextType>;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): unknown {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Generator<unknown, void, unknown> {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeMulti(buffer);\n}\n", "// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike<T> = AsyncIterable<T> | ReadableStream<T>;\n\nexport function isAsyncIterable<T>(object: ReadableStreamLike<T>): object is AsyncIterable<T> {\n return (object as any)[Symbol.asyncIterator] != null;\n}\n\nfunction assertNonNull<T>(value: T | null | undefined): asserts value is T {\n if (value == null) {\n throw new Error(\"Assertion Failure: value must not be null nor undefined\");\n }\n}\n\nexport async function* asyncIterableFromStream<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n const reader = stream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n assertNonNull(value);\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function ensureAsyncIterable<T>(streamLike: ReadableStreamLike<T>): AsyncIterable<T> {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n } else {\n return asyncIterableFromStream(streamLike);\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport { ensureAsyncIterable } from \"./utils/stream\";\nimport { defaultDecodeOptions } from \"./decode\";\nimport type { ReadableStreamLike } from \"./utils/stream\";\nimport type { DecodeOptions } from \"./decode\";\nimport type { SplitUndefined } from \"./context\";\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export async function decodeAsync<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Promise<unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeAsync(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export function decodeArrayStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeArrayStream(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMultiStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeStream(stream);\n}\n\n/**\n * @deprecated Use {@link decodeMultiStream()} instead.\n */\nexport function decodeStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n return decodeMultiStream(streamLike, options);\n}\n", "// Main Functions:\n\nimport { encode } from \"./encode\";\nexport { encode };\nimport type { EncodeOptions } from \"./encode\";\nexport type { EncodeOptions };\n\nimport { decode, decodeMulti } from \"./decode\";\nexport { decode, decodeMulti };\nimport type { DecodeOptions } from \"./decode\";\nexport { DecodeOptions };\n\nimport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream } from \"./decodeAsync\";\nexport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream };\n\nimport { Decoder, DataViewIndexOutOfBoundsError } from \"./Decoder\";\nimport { DecodeError } from \"./DecodeError\";\nexport { Decoder, DecodeError, DataViewIndexOutOfBoundsError };\n\nimport { Encoder } from \"./Encoder\";\nexport { Encoder };\n\n// Utilitiies for Extension Types:\n\nimport { ExtensionCodec } from \"./ExtensionCodec\";\nexport { ExtensionCodec };\nimport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType };\nimport { ExtData } from \"./ExtData\";\nexport { ExtData };\n\nimport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n} from \"./timestamp\";\nexport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n};\n", "/**\n * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object.\n *\n * This can be used with JS designed for browsers to improve reuse of code and\n * allow the use of existing libraries.\n *\n * Usage: include(\"XMLHttpRequest.js\") and use XMLHttpRequest per W3C specs.\n *\n * @author Dan DeFelippi <dan@driverdan.com>\n * @contributor David Ellis <d.f.ellis@ieee.org>\n * @license MIT\n */\n\nvar fs = require('fs');\nvar Url = require('url');\nvar spawn = require('child_process').spawn;\n\n/**\n * Module exports.\n */\n\nmodule.exports = XMLHttpRequest;\n\n// backwards-compat\nXMLHttpRequest.XMLHttpRequest = XMLHttpRequest;\n\n/**\n * `XMLHttpRequest` constructor.\n *\n * Supported options for the `opts` object are:\n *\n * - `agent`: An http.Agent instance; http.globalAgent may be used; if 'undefined', agent usage is disabled\n *\n * @param {Object} opts optional \"options\" object\n */\n\nfunction XMLHttpRequest(opts) {\n \"use strict\";\n\n opts = opts || {};\n\n /**\n * Private variables\n */\n var self = this;\n var http = require('http');\n var https = require('https');\n\n // Holds http.js objects\n var request;\n var response;\n\n // Request settings\n var settings = {};\n\n // Disable header blacklist.\n // Not part of XHR specs.\n var disableHeaderCheck = false;\n\n // Set some default headers\n var defaultHeaders = {\n \"User-Agent\": \"node-XMLHttpRequest\",\n \"Accept\": \"*/*\"\n };\n\n var headers = Object.assign({}, defaultHeaders);\n\n // These headers are not user setable.\n // The following are allowed but banned in the spec:\n // * user-agent\n var forbiddenRequestHeaders = [\n \"accept-charset\",\n \"accept-encoding\",\n \"access-control-request-headers\",\n \"access-control-request-method\",\n \"connection\",\n \"content-length\",\n \"content-transfer-encoding\",\n \"cookie\",\n \"cookie2\",\n \"date\",\n \"expect\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"referer\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"via\"\n ];\n\n // These request methods are not allowed\n var forbiddenRequestMethods = [\n \"TRACE\",\n \"TRACK\",\n \"CONNECT\"\n ];\n\n // Send flag\n var sendFlag = false;\n // Error flag, used when errors occur or abort is called\n var errorFlag = false;\n var abortedFlag = false;\n\n // Event listeners\n var listeners = {};\n\n /**\n * Constants\n */\n\n this.UNSENT = 0;\n this.OPENED = 1;\n this.HEADERS_RECEIVED = 2;\n this.LOADING = 3;\n this.DONE = 4;\n\n /**\n * Public vars\n */\n\n // Current state\n this.readyState = this.UNSENT;\n\n // default ready state change handler in case one is not set or is set late\n this.onreadystatechange = null;\n\n // Result & response\n this.responseText = \"\";\n this.responseXML = \"\";\n this.response = Buffer.alloc(0);\n this.status = null;\n this.statusText = null;\n\n /**\n * Private methods\n */\n\n /**\n * Check if the specified header is allowed.\n *\n * @param string header Header to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpHeader = function(header) {\n return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1);\n };\n\n /**\n * Check if the specified method is allowed.\n *\n * @param string method Request method to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpMethod = function(method) {\n return (method && forbiddenRequestMethods.indexOf(method) === -1);\n };\n\n /**\n * Public methods\n */\n\n /**\n * Open the connection. Currently supports local server requests.\n *\n * @param string method Connection method (eg GET, POST)\n * @param string url URL for the connection.\n * @param boolean async Asynchronous connection. Default is true.\n * @param string user Username for basic authentication (optional)\n * @param string password Password for basic authentication (optional)\n */\n this.open = function(method, url, async, user, password) {\n this.abort();\n errorFlag = false;\n abortedFlag = false;\n\n // Check for valid request method\n if (!isAllowedHttpMethod(method)) {\n throw new Error(\"SecurityError: Request method not allowed\");\n }\n\n settings = {\n \"method\": method,\n \"url\": url.toString(),\n \"async\": (typeof async !== \"boolean\" ? true : async),\n \"user\": user || null,\n \"password\": password || null\n };\n\n setState(this.OPENED);\n };\n\n /**\n * Disables or enables isAllowedHttpHeader() check the request. Enabled by default.\n * This does not conform to the W3C spec.\n *\n * @param boolean state Enable or disable header checking.\n */\n this.setDisableHeaderCheck = function(state) {\n disableHeaderCheck = state;\n };\n\n /**\n * Sets a header for the request.\n *\n * @param string header Header name\n * @param string value Header value\n * @return boolean Header added\n */\n this.setRequestHeader = function(header, value) {\n if (this.readyState != this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN\");\n }\n if (!isAllowedHttpHeader(header)) {\n console.warn('Refused to set unsafe header \"' + header + '\"');\n return false;\n }\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send flag is true\");\n }\n headers[header] = value;\n return true;\n };\n\n /**\n * Gets a header from the server response.\n *\n * @param string header Name of header to get.\n * @return string Text of the header or null if it doesn't exist.\n */\n this.getResponseHeader = function(header) {\n if (typeof header === \"string\"\n && this.readyState > this.OPENED\n && response.headers[header.toLowerCase()]\n && !errorFlag\n ) {\n return response.headers[header.toLowerCase()];\n }\n\n return null;\n };\n\n /**\n * Gets all the response headers.\n *\n * @return string A string with all response headers separated by CR+LF\n */\n this.getAllResponseHeaders = function() {\n if (this.readyState < this.HEADERS_RECEIVED || errorFlag) {\n return \"\";\n }\n var result = \"\";\n\n for (var i in response.headers) {\n // Cookie headers are excluded\n if (i !== \"set-cookie\" && i !== \"set-cookie2\") {\n result += i + \": \" + response.headers[i] + \"\\r\\n\";\n }\n }\n return result.substr(0, result.length - 2);\n };\n\n /**\n * Gets a request header\n *\n * @param string name Name of header to get\n * @return string Returns the request header or empty string if not set\n */\n this.getRequestHeader = function(name) {\n // @TODO Make this case insensitive\n if (typeof name === \"string\" && headers[name]) {\n return headers[name];\n }\n\n return \"\";\n };\n\n /**\n * Sends the request to the server.\n *\n * @param string data Optional data to send as request body.\n */\n this.send = function(data) {\n if (this.readyState != this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: connection must be opened before send() is called\");\n }\n\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send has already been called\");\n }\n\n var ssl = false, local = false;\n var url = Url.parse(settings.url);\n var host;\n // Determine the server\n switch (url.protocol) {\n case 'https:':\n ssl = true;\n // SSL & non-SSL both need host, no break here.\n case 'http:':\n host = url.hostname;\n break;\n\n case 'file:':\n local = true;\n break;\n\n case undefined:\n case '':\n host = \"localhost\";\n break;\n\n default:\n throw new Error(\"Protocol not supported.\");\n }\n\n // Load files off the local filesystem (file://)\n if (local) {\n if (settings.method !== \"GET\") {\n throw new Error(\"XMLHttpRequest: Only GET method is supported\");\n }\n\n if (settings.async) {\n fs.readFile(unescape(url.pathname), function(error, data) {\n if (error) {\n self.handleError(error, error.errno || -1);\n } else {\n self.status = 200;\n self.responseText = data.toString('utf8');\n self.response = data;\n setState(self.DONE);\n }\n });\n } else {\n try {\n this.response = fs.readFileSync(unescape(url.pathname));\n this.responseText = this.response.toString('utf8');\n this.status = 200;\n setState(self.DONE);\n } catch(e) {\n this.handleError(e, e.errno || -1);\n }\n }\n\n return;\n }\n\n // Default to port 80. If accessing localhost on another port be sure\n // to use http://localhost:port/path\n var port = url.port || (ssl ? 443 : 80);\n // Add query string if one is used\n var uri = url.pathname + (url.search ? url.search : '');\n\n // Set the Host header or the server may reject the request\n headers[\"Host\"] = host;\n if (!((ssl && port === 443) || port === 80)) {\n headers[\"Host\"] += ':' + url.port;\n }\n\n // Set Basic Auth if necessary\n if (settings.user) {\n if (typeof settings.password == \"undefined\") {\n settings.password = \"\";\n }\n var authBuf = new Buffer(settings.user + \":\" + settings.password);\n headers[\"Authorization\"] = \"Basic \" + authBuf.toString(\"base64\");\n }\n\n // Set content length header\n if (settings.method === \"GET\" || settings.method === \"HEAD\") {\n data = null;\n } else if (data) {\n headers[\"Content-Length\"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);\n\n if (!headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\n }\n } else if (settings.method === \"POST\") {\n // For a post with no data set Content-Length: 0.\n // This is required by buggy servers that don't meet the specs.\n headers[\"Content-Length\"] = 0;\n }\n\n var agent = opts.agent || false;\n var options = {\n host: host,\n port: port,\n path: uri,\n method: settings.method,\n headers: headers,\n agent: agent\n };\n\n if (ssl) {\n options.pfx = opts.pfx;\n options.key = opts.key;\n options.passphrase = opts.passphrase;\n options.cert = opts.cert;\n options.ca = opts.ca;\n options.ciphers = opts.ciphers;\n options.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true;\n }\n\n // Reset error flag\n errorFlag = false;\n // Handle async requests\n if (settings.async) {\n // Use the proper protocol\n var doRequest = ssl ? https.request : http.request;\n\n // Request is being sent, set send flag\n sendFlag = true;\n\n // As per spec, this is called here for historical reasons.\n self.dispatchEvent(\"readystatechange\");\n\n // Handler for the response\n var responseHandler = function(resp) {\n // Set response var to the response we got back\n // This is so it remains accessable outside this scope\n response = resp;\n // Check for redirect\n // @TODO Prevent looped redirects\n if (response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n // Change URL to the redirect location\n settings.url = response.headers.location;\n var url = Url.parse(settings.url);\n // Set host var in case it's used later\n host = url.hostname;\n // Options for the new request\n var newOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.path,\n method: response.statusCode === 303 ? 'GET' : settings.method,\n headers: headers\n };\n\n if (ssl) {\n newOptions.pfx = opts.pfx;\n newOptions.key = opts.key;\n newOptions.passphrase = opts.passphrase;\n newOptions.cert = opts.cert;\n newOptions.ca = opts.ca;\n newOptions.ciphers = opts.ciphers;\n newOptions.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true;\n }\n\n // Issue the new request\n request = doRequest(newOptions, responseHandler).on('error', errorHandler);\n request.end();\n // @TODO Check if an XHR event needs to be fired here\n return;\n }\n\n setState(self.HEADERS_RECEIVED);\n self.status = response.statusCode;\n\n response.on('data', function(chunk) {\n // Make sure there's some data\n if (chunk) {\n var data = Buffer.from(chunk);\n self.responseText += data.toString('utf8');\n self.response = Buffer.concat([self.response, data]);\n }\n // Don't emit state changes if the connection has been aborted.\n if (sendFlag) {\n setState(self.LOADING);\n }\n });\n\n response.on('end', function() {\n if (sendFlag) {\n // The sendFlag needs to be set before setState is called. Otherwise if we are chaining callbacks\n // there can be a timing issue (the callback is called and a new call is made before the flag is reset).\n sendFlag = false;\n // Discard the 'end' event if the connection has been aborted\n setState(self.DONE);\n }\n });\n\n response.on('error', function(error) {\n self.handleError(error);\n });\n }\n\n // Error handler for the request\n var errorHandler = function(error) {\n self.handleError(error);\n }\n\n // Create the request\n request = doRequest(options, responseHandler).on('error', errorHandler);\n\n if (opts.autoUnref) {\n request.on('socket', (socket) => {\n socket.unref();\n });\n }\n\n // Node 0.4 and later won't accept empty data. Make sure it's needed.\n if (data) {\n request.write(data);\n }\n\n request.end();\n\n self.dispatchEvent(\"loadstart\");\n } else { // Synchronous\n // Create a temporary file for communication with the other Node process\n var contentFile = \".node-xmlhttprequest-content-\" + process.pid;\n var syncFile = \".node-xmlhttprequest-sync-\" + process.pid;\n fs.writeFileSync(syncFile, \"\", \"utf8\");\n // The async request the other Node process executes\n var execString = \"var http = require('http'), https = require('https'), fs = require('fs');\"\n + \"var doRequest = http\" + (ssl ? \"s\" : \"\") + \".request;\"\n + \"var options = \" + JSON.stringify(options) + \";\"\n + \"var responseText = '';\"\n + \"var responseData = Buffer.alloc(0);\"\n + \"var req = doRequest(options, function(response) {\"\n + \"response.on('data', function(chunk) {\"\n + \" var data = Buffer.from(chunk);\"\n + \" responseText += data.toString('utf8');\"\n + \" responseData = Buffer.concat([responseData, data]);\"\n + \"});\"\n + \"response.on('end', function() {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText, data: responseData.toString('base64')}}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"response.on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"}).on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + (data ? \"req.write('\" + JSON.stringify(data).slice(1,-1).replace(/'/g, \"\\\\'\") + \"');\":\"\")\n + \"req.end();\";\n // Start the other Node Process, executing this string\n var syncProc = spawn(process.argv[0], [\"-e\", execString]);\n var statusText;\n while(fs.existsSync(syncFile)) {\n // Wait while the sync file is empty\n }\n self.responseText = fs.readFileSync(contentFile, 'utf8');\n // Kill the child process once the file has data\n syncProc.stdin.end();\n // Remove the temporary file\n fs.unlinkSync(contentFile);\n if (self.responseText.match(/^NODE-XMLHTTPREQUEST-ERROR:/)) {\n // If the file returned an error, handle it\n var errorObj = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-ERROR:/, \"\"));\n self.handleError(errorObj, 503);\n } else {\n // If the file returned okay, parse its data and move to the DONE state\n self.status = self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:([0-9]*),.*/, \"$1\");\n var resp = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:[0-9]*,(.*)/, \"$1\"));\n response = {\n statusCode: self.status,\n headers: resp.data.headers\n };\n self.responseText = resp.data.text;\n self.response = Buffer.from(resp.data.data, 'base64');\n setState(self.DONE, true);\n }\n }\n };\n\n /**\n * Called when an error is encountered to deal with it.\n * @param status {number} HTTP status code to use rather than the default (0) for XHR errors.\n */\n this.handleError = function(error, status) {\n this.status = status || 0;\n this.statusText = error;\n this.responseText = error.stack;\n errorFlag = true;\n setState(this.DONE);\n };\n\n /**\n * Aborts a request.\n */\n this.abort = function() {\n if (request) {\n request.abort();\n request = null;\n }\n\n headers = Object.assign({}, defaultHeaders);\n this.responseText = \"\";\n this.responseXML = \"\";\n this.response = Buffer.alloc(0);\n\n errorFlag = abortedFlag = true\n if (this.readyState !== this.UNSENT\n && (this.readyState !== this.OPENED || sendFlag)\n && this.readyState !== this.DONE) {\n sendFlag = false;\n setState(this.DONE);\n }\n this.readyState = this.UNSENT;\n };\n\n /**\n * Adds an event listener. Preferred method of binding to events.\n */\n this.addEventListener = function(event, callback) {\n if (!(event in listeners)) {\n listeners[event] = [];\n }\n // Currently allows duplicate callbacks. Should it?\n listeners[event].push(callback);\n };\n\n /**\n * Remove an event callback that has already been bound.\n * Only works on the matching funciton, cannot be a copy.\n */\n this.removeEventListener = function(event, callback) {\n if (event in listeners) {\n // Filter will return a new array with the callback removed\n listeners[event] = listeners[event].filter(function(ev) {\n return ev !== callback;\n });\n }\n };\n\n /**\n * Dispatch any events, including both \"on\" methods and events attached using addEventListener.\n */\n this.dispatchEvent = function (event) {\n if (typeof self[\"on\" + event] === \"function\") {\n if (this.readyState === this.DONE && settings.async)\n setImmediate(function() { self[\"on\" + event]() })\n else\n self[\"on\" + event]()\n }\n if (event in listeners) {\n for (let i = 0, len = listeners[event].length; i < len; i++) {\n if (this.readyState === this.DONE)\n setImmediate(function() { listeners[event][i].call(self) })\n else\n listeners[event][i].call(self)\n }\n }\n };\n\n /**\n * Changes readyState and calls onreadystatechange.\n *\n * @param int state New state\n */\n var setState = function(state) {\n if ((self.readyState === state) || (self.readyState === self.UNSENT && abortedFlag))\n return\n\n self.readyState = state;\n\n if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) {\n self.dispatchEvent(\"readystatechange\");\n }\n\n if (self.readyState === self.DONE) {\n let fire\n\n if (abortedFlag)\n fire = \"abort\"\n else if (errorFlag)\n fire = \"error\"\n else\n fire = \"load\"\n\n self.dispatchEvent(fire)\n\n // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie)\n self.dispatchEvent(\"loadend\");\n }\n };\n};\n", "interface Process {\n browser: string | undefined;\n release: { [key: string]: string };\n}\ndeclare let process: Process;\n\nexport const IN_NODE =\n typeof process !== 'undefined' &&\n process.release &&\n process.release.name === 'node';\n\n// Adapted from https://github.com/pyodide/pyodide/blob/main/src/js/compat.ts\nexport let loadScript: (url: string) => Promise<void>;\nif (globalThis.document) {\n loadScript = (url) =>\n new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => resolve();\n script.onerror = reject;\n document.head.appendChild(script);\n });\n} else if (globalThis.importScripts) {\n loadScript = async (url) => {\n try {\n globalThis.importScripts(url);\n } catch (e) {\n if (e instanceof TypeError) {\n await import(url);\n } else {\n throw e;\n }\n }\n };\n} else if (IN_NODE) {\n loadScript = async (url: string) => {\n const nodePathMod = (await import('path')).default;\n await import(nodePathMod.resolve(url));\n };\n} else {\n throw new Error('Cannot determine runtime environment');\n}\n", "import { IN_NODE } from './compat';\n\nexport type ResolveFn = (_value?: unknown) => void;\nexport type RejectFn = (_reason?: any) => void;\n\nexport function promiseHandles() {\n const out = {\n resolve: (_value?: unknown) => {},\n reject: (_reason?: any) => {},\n promise: null as unknown as Promise<unknown>,\n };\n\n const promise = new Promise((resolve, reject) => {\n out.resolve = resolve;\n out.reject = reject;\n });\n out.promise = promise;\n\n return out;\n}\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function replaceInObject<T>(\n obj: T | T[],\n test: (obj: any) => boolean,\n replacer: (obj: any, ...replacerArgs: any[]) => unknown,\n ...replacerArgs: unknown[]\n): T | T[] {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n if (test(obj)) {\n return replacer(obj, ...replacerArgs) as T;\n }\n if (Array.isArray(obj) || ArrayBuffer.isView(obj)) {\n return (obj as unknown[]).map((v) =>\n replaceInObject(v, test, replacer, ...replacerArgs)\n ) as T[];\n }\n return Object.fromEntries(\n Object.entries(obj).map(([k, v], i) => [k, replaceInObject(v, test, replacer, ...replacerArgs)])\n ) as T;\n}\n\n/* Workaround for loading a cross-origin script.\n *\n * When fetching a worker script, the fetch is required by the spec to\n * use \"same-origin\" mode. This is to avoid loading a worker with a\n * cross-origin global scope, which can allow for a cross-origin\n * restriction bypass.\n *\n * When the fetch URL begins with 'http', we assume the request is\n * cross-origin. We download the content of the URL using a XHR first,\n * create a blob URL containing the requested content, then load the\n * blob URL as a script.\n *\n * The origin of a blob URL is the same as that of the environment that\n * created the URL, and so the global scope of the resulting worker is\n * no longer cross-origin. In that case, the cross-origin restriction\n * bypass is not possible, and the script is permitted to be loaded.\n */\nexport function newCrossOriginWorker(url: string, cb: (worker: Worker) => void): void {\n const req = new XMLHttpRequest();\n req.open('get', url, true);\n req.onload = () => {\n const worker = new Worker(URL.createObjectURL(new Blob([req.responseText])));\n cb(worker);\n };\n req.send();\n}\n\nexport function isCrossOrigin(urlString: string) {\n if (IN_NODE) return false;\n const url1 = new URL(location.href);\n const url2 = new URL(urlString, location.origin);\n if (url1.host === url2.host && url1.port === url2.port && url1.protocol === url2.protocol) {\n return false;\n }\n return true;\n}\n\nexport function throwUnreachable(context?: string) {\n let msg = 'Reached the unreachable';\n msg = msg + (context ? ': ' + context : '.');\n\n throw new Error(msg);\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nexport const SZ_BUF_DOESNT_FIT = 0;\nexport const SZ_BUF_FITS_IDX = 1;\nexport const SZ_BUF_SIZE_IDX = 0;\n\nexport interface Endpoint extends EventSource {\n postMessage(message: any, transfer?: Transferable[]): void;\n start?: () => void;\n}\n\nexport interface EventSource {\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: {}): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: {}\n ): void;\n}\n\nexport function toWireValue(value: any): [any, Transferable[]] {\n return [value, transferCache.get(value) || []];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport type UUID = string;\n\nexport function isUUID(x: any): x is UUID {\n return typeof x === 'string' && x.length === UUID_LENGTH;\n}\n\nexport const UUID_LENGTH = 63;\n\nexport function generateUUID(): UUID {\n const result = Array.from({ length: 4 }, randomSegment).join('-');\n if (result.length !== UUID_LENGTH) {\n throw new Error('comlink internal error: UUID has the wrong length');\n }\n return result;\n}\n\nfunction randomSegment() {\n let result = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16);\n const pad = 15 - result.length;\n if (pad > 0) {\n result = Array.from({ length: pad }, () => 0).join('') + result;\n }\n return result;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport { Endpoint, SZ_BUF_FITS_IDX, SZ_BUF_SIZE_IDX, generateUUID } from './task-common';\n\nimport { sleep } from '../utils';\nimport { SyncRequestData } from './message';\nimport { encode } from '@msgpack/msgpack';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\n\nconst encoder = new TextEncoder();\n\n/**\n * Respond to a blocking request. Most of the work has already been done in\n * asynclink, we are just responsible here for getting the return value back to\n * the requester through this slightly convoluted Atomics protocol.\n * @param {Endpoint} endpoint A message port to receive messages from. Other\n * thread is blocked, so we can't send messages back.\n * @param {SyncRequestData} data The message that was recieved. We will use it\n * to read out the buffers to write the answer into. NOTE: requester\n * owns buffers.\n * @param {any} response The value we want to send back to the requester. We\n * have to encode it into data_buffer.\n */\nexport async function syncResponse(endpoint: Endpoint, data: SyncRequestData, response: any) {\n try {\n let { taskId, sizeBuffer, dataBuffer, signalBuffer } = data;\n // console.warn(msg);\n\n const bytes = encode(response);\n const fits = bytes.length <= dataBuffer.length;\n\n Atomics.store(sizeBuffer, SZ_BUF_SIZE_IDX, bytes.length);\n Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +fits);\n if (!fits) {\n // console.log(\" need larger buffer\", taskId)\n // Request larger buffer\n const [uuid, dataPromise] = requestResponseMessage(endpoint);\n\n // Write UUID into dataBuffer so syncRequest knows where to respond to.\n dataBuffer.set(encoder.encode(uuid));\n await signalRequester(signalBuffer, taskId!);\n\n // Wait for response with new bigger dataBuffer\n dataBuffer = (await dataPromise).dataBuffer as Uint8Array;\n }\n\n // Encode result into dataBuffer\n dataBuffer.set(bytes);\n Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +true);\n\n // console.log(\" signaling completion\", taskId)\n await signalRequester(signalBuffer, taskId as number);\n } catch (e) {\n console.warn(e);\n }\n}\n\nfunction requestResponseMessage(ep: Endpoint): [string, Promise<any>] {\n const id = generateUUID();\n return [\n id,\n new Promise((resolve) => {\n if (IN_NODE) {\n (ep as unknown as NodeWorker).once('message', (message: any) => {\n if (!message.id || message.id !== id) {\n return;\n }\n resolve(message);\n });\n } else {\n ep.addEventListener('message', function l(ev: MessageEvent) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener('message', l as EventListenerOrEventListenerObject);\n resolve(ev.data);\n } as EventListenerOrEventListenerObject);\n }\n if (ep.start) {\n ep.start();\n }\n }),\n ];\n}\n\nasync function signalRequester(signalBuffer: Int32Array, taskId: number) {\n const index = (taskId >> 1) % 32;\n let sleepTime = 1;\n while (Atomics.compareExchange(signalBuffer, index + 1, 0, taskId) !== 0) {\n // No Atomics.asyncWait except on Chrome =(\n await sleep(sleepTime);\n if (sleepTime < 32) {\n // exponential backoff\n sleepTime *= 2;\n }\n }\n Atomics.or(signalBuffer, 0, 1 << index);\n Atomics.notify(signalBuffer, 0);\n}\n", "// From https://stackoverflow.com/questions/47157428/how-to-implement-a-pseudo-blocking-async-queue-in-js-ts\n/**\n * @module Queue\n */\n\n/**\n * Asynchronous queue mechanism to be used by the communication channels.\n * @typeParam T The type of item to be stored in the queue.\n */\nexport class AsyncQueue<T> {\n #promises: Promise<T>[];\n #resolvers: ((t: T) => void)[];\n\n constructor() {\n this.#resolvers = [];\n this.#promises = [];\n }\n\n reset() {\n this.#resolvers = [];\n this.#promises = [];\n }\n\n put(t: T) {\n if (!this.#resolvers.length) {\n this.#add();\n }\n const resolve = this.#resolvers.shift()!;\n resolve(t);\n }\n\n async get() {\n if (!this.#promises.length) {\n this.#add();\n }\n const promise = this.#promises.shift()!;\n return promise;\n }\n\n isEmpty() {\n return !this.#promises.length;\n }\n\n isBlocked() {\n return !!this.#resolvers.length;\n }\n\n get length() {\n return this.#promises.length - this.#resolvers.length;\n }\n\n #add() {\n this.#promises.push(\n new Promise((resolve) => {\n this.#resolvers.push(resolve);\n })\n );\n }\n}\n", "/**\n * WebR communication channel messaging and request types.\n * @module Message\n */\nimport { generateUUID, transfer, UUID } from './task-common';\n\n/** A webR communication channel message. */\nexport interface Message {\n type: string;\n data?: any;\n}\n\n/** A webR communication channel request. */\nexport interface Request {\n type: 'request';\n data: {\n uuid: UUID;\n msg: Message;\n };\n}\n\n/** A webR communication channel response. */\nexport interface Response {\n type: 'response';\n data: {\n uuid: UUID;\n resp: unknown;\n };\n}\n\n/** @internal */\nexport function newRequest(msg: Message, transferables?: [Transferable]): Request {\n return newRequestResponseMessage(\n {\n type: 'request',\n data: {\n uuid: generateUUID(),\n msg: msg,\n },\n },\n transferables\n );\n}\n\n/** @internal */\nexport function newResponse(uuid: UUID, resp: unknown, transferables?: [Transferable]): Response {\n return newRequestResponseMessage(\n {\n type: 'response',\n data: {\n uuid,\n resp,\n },\n },\n transferables\n );\n}\n\n/** @internal */\nfunction newRequestResponseMessage<T>(msg: T, transferables?: [Transferable]): T {\n // Signal to Synclink that the data contains objects we wish to\n // transfer, as in `postMessage()`\n if (transferables) {\n transfer(msg, transferables);\n }\n return msg;\n}\n\n/** A webR communication channel sync-request.\n * @internal\n */\nexport interface SyncRequest {\n type: 'sync-request';\n data: {\n msg: Message;\n reqData: SyncRequestData;\n };\n}\n\n/** Transfer data required when using sync-request with SharedArrayBuffer.\n * @internal */\nexport interface SyncRequestData {\n taskId?: number;\n sizeBuffer: Int32Array;\n signalBuffer: Int32Array;\n dataBuffer: Uint8Array;\n}\n\n/** @internal */\nexport function newSyncRequest(msg: Message, data: SyncRequestData): SyncRequest {\n return {\n type: 'sync-request',\n data: { msg, reqData: data },\n };\n}\n", "/**\n * Types containing references to R objects, raw data or errors over the webR\n * communication channel.\n * @module Payload\n */\nimport { WebRDataRaw, RPtr, RType } from './robj';\n\nexport type WebRPayloadRaw = {\n obj: WebRDataRaw;\n payloadType: 'raw';\n};\n\nexport type WebRPayloadPtr = {\n obj: {\n type?: RType;\n ptr: RPtr;\n methods?: string[];\n };\n payloadType: 'ptr';\n};\n\nexport type WebRPayloadErr = {\n obj: {\n message: string;\n name: string;\n stack?: string;\n };\n payloadType: 'err';\n};\n\n// On the main side we shouldn't see any error payload as these are\n// rethrown as JS exceptions\nexport type WebRPayload = WebRPayloadRaw | WebRPayloadPtr;\nexport type WebRPayloadWorker = WebRPayloadRaw | WebRPayloadPtr | WebRPayloadErr;\n\n/* @internal */\nexport function webRPayloadError(payload: WebRPayloadErr): Error {\n const e = new Error(payload.obj.message);\n e.name = payload.obj.name;\n e.stack = payload.obj.stack;\n return e;\n}\n\n/**\n * Test for an WebRPayload instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayload.\n */\nexport function isWebRPayload(value: any): value is WebRPayload {\n return value && typeof value === 'object' && 'payloadType' in value && 'obj' in value;\n}\n\n/**\n * Test for an WebRPayloadPtr instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayloadPtr.\n */\nexport function isWebRPayloadPtr(value: any): value is WebRPayloadPtr {\n return isWebRPayload(value) && value.payloadType === 'ptr';\n}\n\n/**\n * Test for an WebRPayloadRaw instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayloadRaw.\n */\nexport function isWebRPayloadRaw(value: any): value is WebRPayloadRaw {\n return isWebRPayload(value) && value.payloadType === 'raw';\n}\n", "/**\n * Interfaces for the webR main and worker thread communication channels.\n * @module Channel\n */\n\nimport { promiseHandles, ResolveFn, RejectFn } from '../utils';\nimport { AsyncQueue } from './queue';\nimport { Message, newRequest, Response } from './message';\nimport { WebRPayload, WebRPayloadWorker, webRPayloadError } from '../payload';\n\n// The channel structure is asymetric:\n//\n// - The main thread maintains the input and output queues. All\n// messages sent from main are stored in the input queue. The input\n// queue is pull-based, it's the worker that initiates a transfer\n// via a sync-request.\n//\n// The output queue is filled at the initiative of the worker. The\n// main thread asynchronously reads from this queue, typically in an\n// async infloop.\n//\n// - The worker synchronously reads from the input queue. Reading a\n// message blocks until an input is available. Writing a message to\n// the output queue is equivalent to calling `postMessage()` and\n// returns immediately.\n//\n// Note that the messages sent from main to worker need to be\n// serialised. There is no structured cloning involved, and\n// ArrayBuffers can't be transferred, only copied.\n\nexport abstract class ChannelMain {\n inputQueue = new AsyncQueue<Message>();\n outputQueue = new AsyncQueue<Message>();\n systemQueue = new AsyncQueue<Message>();\n\n #parked = new Map<string, { resolve: ResolveFn; reject: RejectFn }>();\n\n abstract initialised: Promise<unknown>;\n abstract close(): void;\n abstract interrupt(): void;\n\n async read(): Promise<Message> {\n return await this.outputQueue.get();\n }\n\n async flush(): Promise<Message[]> {\n const msg: Message[] = [];\n while (!this.outputQueue.isEmpty()) {\n msg.push(await this.read());\n }\n return msg;\n }\n\n async readSystem(): Promise<Message> {\n return await this.systemQueue.get();\n }\n\n write(msg: Message): void {\n this.inputQueue.put(msg);\n }\n\n async request(msg: Message, transferables?: [Transferable]): Promise<WebRPayload> {\n const req = newRequest(msg, transferables);\n\n const { resolve, reject, promise } = promiseHandles();\n this.#parked.set(req.data.uuid, { resolve, reject });\n\n this.write(req);\n return promise as Promise<WebRPayload>;\n }\n\n protected putClosedMessage(): void {\n this.outputQueue.put({ type: 'closed' });\n }\n\n protected resolveResponse(msg: Response) {\n const uuid = msg.data.uuid;\n const handles = this.#parked.get(uuid);\n\n if (handles) {\n const payload = msg.data.resp as WebRPayloadWorker;\n this.#parked.delete(uuid);\n\n if (payload.payloadType === 'err') {\n handles.reject(webRPayloadError(payload));\n } else {\n handles.resolve(payload);\n }\n } else {\n console.warn(\"Can't find request.\");\n }\n }\n}\n\nexport interface ChannelWorker {\n resolve(): void;\n write(msg: Message, transfer?: [Transferable]): void;\n writeSystem(msg: Message, transfer?: [Transferable]): void;\n read(): Message;\n handleInterrupt(): void;\n setInterrupt(interrupt: () => void): void;\n run(args: string[]): void;\n inputOrDispatch: () => number;\n setDispatchHandler: (dispatch: (msg: Message) => void) => void;\n}\n\n/**\n * Handler functions dealing with setup and commmunication over a Service Worker.\n */\nexport interface ServiceWorkerHandlers {\n handleActivate: (this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any;\n handleFetch: (this: ServiceWorkerGlobalScope, ev: FetchEvent) => any;\n handleInstall: (this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any;\n handleMessage: (this: ServiceWorkerGlobalScope, ev: ExtendableMessageEvent) => any;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport {\n Endpoint,\n SZ_BUF_DOESNT_FIT,\n SZ_BUF_FITS_IDX,\n SZ_BUF_SIZE_IDX,\n UUID_LENGTH,\n} from './task-common';\n\nimport { newSyncRequest, Message } from './message';\nimport { decode } from '@msgpack/msgpack';\n\nconst decoder = new TextDecoder('utf-8');\n\nexport class SyncTask {\n endpoint: Endpoint;\n msg: Message;\n transfers: Transferable[];\n\n #scheduled = false;\n #resolved: boolean;\n #result?: any;\n #exception?: any;\n\n // sync only\n taskId?: number;\n #syncGen?: Generator<void, unknown, void>;\n sizeBuffer?: Int32Array;\n signalBuffer?: Int32Array;\n syncifier = new _Syncifier();\n\n constructor(endpoint: Endpoint, msg: Message, transfers: Transferable[] = []) {\n this.endpoint = endpoint;\n this.msg = msg;\n this.transfers = transfers;\n this.#resolved = false;\n }\n\n scheduleSync() {\n if (this.#scheduled) {\n return;\n }\n this.#scheduled = true;\n\n this.syncifier.scheduleTask(this);\n this.#syncGen = this.doSync();\n this.#syncGen.next();\n return this;\n }\n\n poll() {\n if (!this.#scheduled) {\n throw new Error('Task not synchronously scheduled');\n }\n\n const { done, value } = this.#syncGen!.next();\n if (!done) {\n return false;\n }\n\n this.#resolved = true;\n this.#result = value;\n\n return true;\n }\n\n *doSync() {\n // just use syncRequest.\n const { endpoint, msg, transfers } = this;\n const sizeBuffer = new Int32Array(new SharedArrayBuffer(8));\n const signalBuffer = this.signalBuffer!;\n const taskId = this.taskId;\n\n // Ensure status is cleared. We will notify\n let dataBuffer = acquireDataBuffer(UUID_LENGTH);\n // console.log(\"===requesting\", taskId);\n\n const syncMsg = newSyncRequest(msg, {\n sizeBuffer,\n dataBuffer,\n signalBuffer,\n taskId,\n });\n\n endpoint.postMessage(syncMsg, transfers);\n yield;\n\n if (Atomics.load(sizeBuffer, SZ_BUF_FITS_IDX) === SZ_BUF_DOESNT_FIT) {\n // There wasn't enough space, make a bigger dataBuffer.\n // First read uuid for response out of current dataBuffer\n const id = decoder.decode(dataBuffer.slice(0, UUID_LENGTH));\n releaseDataBuffer(dataBuffer);\n const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n dataBuffer = acquireDataBuffer(size);\n // console.log(\"===bigger data buffer\", taskId);\n endpoint.postMessage({ id, dataBuffer });\n yield;\n }\n\n const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n // console.log(\"===completing\", taskId);\n return decode(dataBuffer.slice(0, size));\n }\n\n get result() {\n if (this.#exception) {\n throw this.#exception;\n }\n // console.log(this.#resolved);\n if (this.#resolved) {\n return this.#result as unknown;\n }\n throw new Error('Not ready.');\n }\n\n syncify(): any {\n this.scheduleSync();\n this.syncifier.syncifyTask(this);\n return this.result;\n }\n}\n\nclass _Syncifier {\n nextTaskId: Int32Array;\n signalBuffer: Int32Array;\n tasks: Map<number, SyncTask>;\n\n constructor() {\n this.nextTaskId = new Int32Array([1]);\n this.signalBuffer = new Int32Array(new SharedArrayBuffer(32 * 4 + 4));\n this.tasks = new Map();\n }\n\n scheduleTask(task: SyncTask) {\n task.taskId = this.nextTaskId[0];\n this.nextTaskId[0] += 2;\n task.signalBuffer = this.signalBuffer;\n this.tasks.set(task.taskId, task);\n }\n\n waitOnSignalBuffer() {\n const timeout = 50;\n for (;;) {\n const status = Atomics.wait(this.signalBuffer, 0, 0, timeout);\n switch (status) {\n case 'ok':\n case 'not-equal':\n return;\n case 'timed-out':\n if (interruptBuffer[0] !== 0) {\n handleInterrupt();\n }\n break;\n default:\n throw new Error('Unreachable');\n }\n }\n }\n\n *tasksIdsToWakeup() {\n const flag = Atomics.load(this.signalBuffer, 0);\n for (let i = 0; i < 32; i++) {\n const bit = 1 << i;\n if (flag & bit) {\n Atomics.and(this.signalBuffer, 0, ~bit);\n const wokenTask = Atomics.exchange(this.signalBuffer, i + 1, 0);\n yield wokenTask;\n }\n }\n }\n\n pollTasks(task?: SyncTask) {\n let result = false;\n for (const wokenTaskId of this.tasksIdsToWakeup()) {\n // console.log(\"poll task\", wokenTaskId, \"looking for\",task);\n const wokenTask = this.tasks.get(wokenTaskId);\n if (!wokenTask) {\n throw new Error(`Assertion error: unknown taskId ${wokenTaskId}.`);\n }\n if (wokenTask.poll()) {\n // console.log(\"completed task \", wokenTaskId, wokenTask, wokenTask._result);\n this.tasks.delete(wokenTaskId);\n if (wokenTask === task) {\n result = true;\n }\n }\n }\n return result;\n }\n\n syncifyTask(task: SyncTask) {\n for (;;) {\n this.waitOnSignalBuffer();\n // console.log(\"syncifyTask:: woke\");\n if (this.pollTasks(task)) {\n return;\n }\n }\n }\n}\n\nconst dataBuffers: Uint8Array[][] = [];\n\nfunction acquireDataBuffer(size: number): Uint8Array {\n const powerof2 = Math.ceil(Math.log2(size));\n if (!dataBuffers[powerof2]) {\n dataBuffers[powerof2] = [];\n }\n const result = dataBuffers[powerof2].pop();\n if (result) {\n result.fill(0);\n return result;\n }\n return new Uint8Array(new SharedArrayBuffer(2 ** powerof2));\n}\n\nfunction releaseDataBuffer(buffer: Uint8Array) {\n const powerof2 = Math.ceil(Math.log2(buffer.byteLength));\n dataBuffers[powerof2].push(buffer);\n}\n\nlet interruptBuffer = new Int32Array(new ArrayBuffer(4));\n\nlet handleInterrupt = (): void => {\n interruptBuffer[0] = 0;\n throw new Error('Interrupted!');\n};\n\n/**\n * Sets the interrupt handler. This is called when the computation is\n * interrupted. Should zero the interrupt buffer and throw an exception.\n * @internal\n */\nexport function setInterruptHandler(handler: () => void) {\n handleInterrupt = handler;\n}\n\n/**\n * Sets the interrupt buffer. Should be a shared array buffer. When element 0\n * is set non-zero it signals an interrupt.\n * @internal\n */\nexport function setInterruptBuffer(buffer: ArrayBufferLike) {\n interruptBuffer = new Int32Array(buffer);\n}\n", "import type { RPtr, RTypeNumber } from './robj';\nimport type { UnwindProtectException } from './utils-r';\n\nexport interface Module extends EmscriptenModule {\n /* Add mkdirTree to FS namespace, missing from @types/emscripten at the\n * time of writing.\n */\n FS: typeof FS & {\n mkdirTree(path: string): void;\n };\n ENV: { [key: string]: string };\n GOT: {\n [key: string]: {required: boolean; value: number};\n }\n createLazyFilesystem: () => void;\n monitorRunDependencies: (n: number) => void;\n noImageDecoding: boolean;\n noAudioDecoding: boolean;\n noWasmDecoding: boolean;\n setPrompt: (prompt: string) => void;\n canvasExec: (op: string) => void;\n downloadFileContent: (\n URL: string,\n headers: Array<string>\n ) => {\n status: number;\n response: string | ArrayBuffer;\n };\n // Exported Emscripten JS API\n allocateUTF8: typeof allocateUTF8;\n allocateUTF8OnStack: typeof allocateUTF8OnStack;\n getValue: typeof getValue;\n setValue: typeof setValue;\n UTF8ToString: typeof UTF8ToString;\n callMain: (args: string[]) => void;\n getWasmTableEntry: (entry: number) => Function;\n // R symbols from Rinternals.h\n _ATTRIB: (ptr: RPtr) => RPtr;\n _CAR: (ptr: RPtr) => RPtr;\n _CDR: (ptr: RPtr) => RPtr;\n _CLOENV: (ptr: RPtr) => RPtr;\n _COMPLEX: (ptr: RPtr) => RPtr;\n _FRAME: (ptr: RPtr) => RPtr;\n _INTEGER: (ptr: RPtr) => RPtr;\n _INTERNAL: (ptr: RPtr) => RPtr;\n _LENGTH: (ptr: RPtr) => number;\n _LOGICAL: (ptr: RPtr) => RPtr;\n _PRINTNAME: (ptr: RPtr) => RPtr;\n _R_CHAR: (ptr: RPtr) => RPtr;\n _RAW: (ptr: RPtr) => RPtr;\n _REAL: (ptr: RPtr) => RPtr;\n _SETCAR: (x: RPtr, y: RPtr) => void;\n _STRING_ELT: (ptr: RPtr, idx: number) => RPtr;\n _STRING_PTR: (ptr: RPtr) => RPtr;\n _SYMVALUE: (ptr: RPtr) => RPtr;\n _TAG: (ptr: RPtr) => RPtr;\n _TYPEOF: (ptr: RPtr) => RPtr;\n _VECTOR_ELT: (ptr: RPtr, idx: number) => RPtr;\n _R_lsInternal3: (env: RPtr, all: number, sorted: number) => RPtr;\n _R_MakeExternalPtr: (p: number, tag: RPtr, prot: RPtr) => RPtr;\n _R_NewEnv: (enclos: RPtr, hash: number, size: number) => RPtr;\n _R_ParseEvalString: (code: number, env: RPtr) => RPtr;\n _R_PreserveObject: (ptr: RPtr) => void;\n _R_ReleaseObject: (ptr: RPtr) => void;\n _Rf_ScalarReal: (n: number) => RPtr;\n _Rf_ScalarLogical: (l: number) => RPtr;\n _Rf_ScalarInteger: (n: number) => RPtr;\n _Rf_ScalarString: (s: string) => RPtr;\n _Rf_allocList: (len: number) => RPtr;\n _Rf_allocVector: (type: RTypeNumber, len: number) => RPtr;\n _Rf_defineVar: (symbol: RPtr, value: RPtr, env: RPtr) => void;\n _Rf_error: (msg: EmPtr) => void;\n _Rf_eval: (call: RPtr, env: RPtr) => RPtr;\n _Rf_findVarInFrame: (rho: RPtr, symbol: RPtr) => RPtr;\n _Rf_listAppend: (source: RPtr, target: RPtr) => RPtr;\n _Rf_getAttrib: (ptr1: RPtr, ptr2: RPtr) => RPtr;\n _Rf_install: (ptr: number) => RPtr;\n _Rf_installTrChar: (name: RPtr) => RPtr;\n _Rf_lang1: (ptr1: RPtr) => RPtr;\n _Rf_lang2: (ptr1: RPtr, ptr2: RPtr) => RPtr;\n _Rf_lang3: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;\n _Rf_lang4: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr) => RPtr;\n _Rf_lang5: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr) => RPtr;\n _Rf_lang6: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr, ptr6: RPtr) => RPtr;\n _Rf_mkChar: (ptr: number) => RPtr;\n _Rf_mkString: (ptr: number) => RPtr;\n _Rf_onintr: () => void;\n _Rf_protect: (ptr: RPtr) => RPtr;\n _R_ContinueUnwind: (cont: RPtr) => never;\n _R_ProtectWithIndex: (ptr1: RPtr, ptr2: RPtr) => void;\n _R_Reprotect: (ptr1: RPtr, ptr2: RPtr) => void;\n _Rf_setAttrib: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;\n _Rf_unprotect: (n: number) => void;\n _Rf_unprotect_ptr: (ptr: RPtr) => void;\n _R_BaseEnv: RPtr;\n _R_BracketSymbol: RPtr;\n _R_Bracket2Symbol: RPtr;\n _R_DollarSymbol: RPtr;\n _R_EmptyEnv: RPtr;\n _R_FalseValue: RPtr;\n _R_GlobalEnv: RPtr;\n _R_Interactive: RPtr;\n _R_NaInt: RPtr;\n _R_NaReal: RPtr;\n _R_NaString: RPtr;\n _R_LogicalNAValue: RPtr;\n _R_NilValue: RPtr;\n _R_TrueValue: RPtr;\n _R_NamesSymbol: RPtr;\n _R_UnboundValue: RPtr;\n _SET_STRING_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;\n _SET_VECTOR_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;\n // TODO: Namespace all webR properties\n webr: {\n UnwindProtectException: typeof UnwindProtectException;\n readConsole: () => number;\n resolveInit: () => void;\n handleEvents: () => void;\n evalJs: (code: RPtr) => number;\n setTimeoutWasm: (ptr: EmPtr, data: EmPtr, delay: number) => void;\n };\n}\n\nexport const Module = {} as Module;\n\nexport type EmPtr = ReturnType<typeof Module.allocateUTF8>;\n\nexport interface DictEmPtrs {\n [key: string]: EmPtr;\n}\n\nexport function dictEmFree(dict: { [key: string | number]: EmPtr }) {\n Object.keys(dict).forEach((key) => Module._free(dict[key]));\n}\n", "import { promiseHandles, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport { Message, Response, SyncRequest } from './message';\nimport { Endpoint } from './task-common';\nimport { syncResponse } from './task-main';\nimport { ChannelMain, ChannelWorker } from './channel';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class SharedBufferChannelMain extends ChannelMain {\n #interruptBuffer?: Int32Array;\n\n initialised: Promise<unknown>;\n resolve: (_?: unknown) => void;\n close = () => {};\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#handleEventsFromWorker(worker);\n this.close = () => {\n worker.terminate();\n this.putClosedMessage();\n };\n const msg = {\n type: 'init',\n data: { config, channelType: ChannelType.SharedArrayBuffer },\n } as Message;\n worker.postMessage(msg);\n };\n\n if (isCrossOrigin(config.baseUrl)) {\n newCrossOriginWorker(`${config.baseUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.baseUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n interrupt() {\n if (!this.#interruptBuffer) {\n throw new Error('Failed attempt to interrupt before initialising interruptBuffer');\n }\n this.inputQueue.reset();\n this.#interruptBuffer[0] = 1;\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.#interruptBuffer = new Int32Array(message.data as SharedArrayBuffer);\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'sync-request': {\n const msg = message as SyncRequest;\n const payload = msg.data.msg;\n const reqData = msg.data.reqData;\n\n switch (payload.type) {\n case 'read': {\n const response = await this.inputQueue.get();\n await syncResponse(worker, reqData, response);\n break;\n }\n default:\n throw new TypeError(`Unsupported request type '${payload.type}'.`);\n }\n return;\n }\n case 'request':\n throw new TypeError(\n \"Can't send messages of type 'request' from a worker. Please Use 'sync-request' instead.\"\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { SyncTask, setInterruptHandler, setInterruptBuffer } from './task-worker';\nimport { Module } from '../emscripten';\n\nexport class SharedBufferChannelWorker implements ChannelWorker {\n #ep: Endpoint;\n #dispatch: (msg: Message) => void = () => 0;\n #interruptBuffer = new Int32Array(new SharedArrayBuffer(4));\n #interrupt = () => {};\n\n constructor() {\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n setInterruptBuffer(this.#interruptBuffer.buffer);\n setInterruptHandler(() => this.handleInterrupt());\n }\n\n resolve() {\n this.write({ type: 'resolve', data: this.#interruptBuffer.buffer });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n read(): Message {\n const msg = { type: 'read' } as Message;\n const task = new SyncTask(this.#ep, msg);\n return task.syncify() as Message;\n }\n\n inputOrDispatch(): number {\n for (;;) {\n const msg = this.read();\n if (msg.type === 'stdin') {\n return Module.allocateUTF8(msg.data as string);\n }\n this.#dispatch(msg);\n }\n }\n\n run(args: string[]) {\n Module.callMain(args);\n }\n\n setInterrupt(interrupt: () => void) {\n this.#interrupt = interrupt;\n }\n\n handleInterrupt() {\n if (this.#interruptBuffer[0] !== 0) {\n this.#interruptBuffer[0] = 0;\n this.#interrupt();\n }\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n}\n", "import { promiseHandles, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport {\n Message,\n newRequest,\n Response,\n Request,\n newResponse,\n} from './message';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { Endpoint } from './task-common';\nimport { ChannelMain, ChannelWorker } from './channel';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class ServiceWorkerChannelMain extends ChannelMain {\n initialised: Promise<unknown>;\n\n resolve: (_?: unknown) => void;\n close = () => {};\n\n #syncMessageCache = new Map<string, Message>();\n #registration?: ServiceWorkerRegistration;\n #interrupted = false;\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#handleEventsFromWorker(worker);\n this.close = () => {\n worker.terminate();\n this.putClosedMessage();\n };\n this.#registerServiceWorker(`${config.serviceWorkerUrl}webr-serviceworker.js`).then(\n (clientId) => {\n const msg = {\n type: 'init',\n data: {\n config,\n channelType: ChannelType.ServiceWorker,\n clientId,\n location: window.location.href,\n },\n } as Message;\n worker.postMessage(msg);\n }\n );\n };\n\n if (isCrossOrigin(config.serviceWorkerUrl)) {\n newCrossOriginWorker(`${config.serviceWorkerUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.serviceWorkerUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n activeRegistration(): ServiceWorker {\n if (!this.#registration?.active) {\n throw new Error('Attempted to obtain a non-existent active registration.');\n }\n return this.#registration.active;\n }\n\n interrupt() {\n this.#interrupted = true;\n }\n\n async #registerServiceWorker(url: string): Promise<string> {\n // Register service worker\n this.#registration = await navigator.serviceWorker.register(url);\n await navigator.serviceWorker.ready;\n window.addEventListener('beforeunload', () => {\n this.#registration?.unregister();\n });\n\n // Ensure we can communicate with service worker and we have a client ID\n const clientId = await new Promise<string>((resolve) => {\n navigator.serviceWorker.addEventListener(\n 'message',\n function listener(event: MessageEvent<{ type: string; clientId: string }>) {\n if (event.data.type === 'registration-successful') {\n navigator.serviceWorker.removeEventListener('message', listener);\n resolve(event.data.clientId);\n }\n }\n );\n this.activeRegistration().postMessage({ type: 'register-client-main' });\n });\n\n // Setup listener for service worker messages\n navigator.serviceWorker.addEventListener('message', (event: MessageEvent<Request>) => {\n this.#onMessageFromServiceWorker(event);\n });\n return clientId;\n }\n\n async #onMessageFromServiceWorker(event: MessageEvent<Message>) {\n if (event.data.type === 'request') {\n const uuid = event.data.data as string;\n const message = this.#syncMessageCache.get(uuid);\n if (!message) {\n throw new Error('Request not found during service worker XHR request');\n }\n this.#syncMessageCache.delete(uuid);\n switch (message.type) {\n case 'read': {\n const response = await this.inputQueue.get();\n this.activeRegistration().postMessage({\n type: 'wasm-webr-fetch-response',\n uuid: uuid,\n response: newResponse(uuid, response),\n });\n break;\n }\n case 'interrupt': {\n const response = this.#interrupted;\n this.activeRegistration().postMessage({\n type: 'wasm-webr-fetch-response',\n uuid: uuid,\n response: newResponse(uuid, response),\n });\n this.inputQueue.reset();\n this.#interrupted = false;\n break;\n }\n default:\n throw new TypeError(`Unsupported request type '${message.type}'.`);\n }\n return;\n }\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'sync-request': {\n const request = message.data as Request;\n this.#syncMessageCache.set(request.data.uuid, request.data.msg);\n return;\n }\n\n case 'request':\n throw new TypeError(\n \"Can't send messages of type 'request' from a worker.\" +\n 'Use service worker fetch request instead.'\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { Module } from '../emscripten';\n\nexport class ServiceWorkerChannelWorker implements ChannelWorker {\n #ep: Endpoint;\n #mainThreadId: string;\n #location: string;\n #dispatch: (msg: Message) => void = () => 0;\n #interrupt = () => {};\n onMessageFromMainThread: (msg: Message) => void = () => {};\n\n constructor(data: { clientId?: string; location?: string }) {\n if (!data.clientId || !data.location) {\n throw Error(\"Can't start service worker channel\");\n }\n this.#mainThreadId = data.clientId;\n this.#location = data.location;\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n }\n\n resolve() {\n this.write({ type: 'resolve' });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n syncRequest(message: Message): Response {\n /*\n * Browsers timeout service workers after about 5 minutes on inactivity.\n * See e.g. service_worker_version.cc in Chromium.\n *\n * To avoid the service worker being shut down, we timeout our XHR after\n * 1 minute and then resend the request as a keep-alive. The service worker\n * uses the message UUID to identify the request and continue waiting for a\n * response from where it left off.\n */\n const request = newRequest(message);\n this.write({ type: 'sync-request', data: request });\n\n let retryCount = 0;\n for (;;) {\n try {\n const url = new URL('__wasm__/webr-fetch-request/', this.#location);\n const xhr = new XMLHttpRequest();\n xhr.timeout = 60000;\n xhr.responseType = 'arraybuffer';\n xhr.open('POST', url, false);\n const fetchReqBody = {\n clientId: this.#mainThreadId,\n uuid: request.data.uuid,\n };\n xhr.send(encode(fetchReqBody));\n return decode(xhr.response as ArrayBuffer) as Response;\n } catch (e: any) {\n if (e instanceof DOMException && retryCount++ < 1000) {\n console.log('Service worker request failed - resending request');\n } else {\n throw e;\n }\n }\n }\n }\n\n read(): Message {\n const response = this.syncRequest({ type: 'read' });\n return response.data.resp as Message;\n }\n\n inputOrDispatch(): number {\n for (;;) {\n const msg = this.read();\n if (msg.type === 'stdin') {\n return Module.allocateUTF8(msg.data as string);\n }\n this.#dispatch(msg);\n }\n }\n\n run(args: string[]) {\n Module.callMain(args);\n }\n\n setInterrupt(interrupt: () => void) {\n this.#interrupt = interrupt;\n }\n\n handleInterrupt() {\n /* During R computation we have no way to directly interrupt the worker\n * thread. Instead, we hook into R's PolledEvents. Since we are not using\n * SharedArrayBuffer as a signal method, we instead send a message to the\n * main thread to ask if we should interrupt R.\n */\n const response = this.syncRequest({ type: 'interrupt' });\n const interrupted = response.data.resp as boolean;\n if (interrupted) {\n this.#interrupt();\n }\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n}\n", "import { SharedBufferChannelMain, SharedBufferChannelWorker } from './channel-shared';\nimport { ServiceWorkerChannelMain, ServiceWorkerChannelWorker } from './channel-service';\nimport { WebROptions } from '../webr-main';\nimport { isCrossOrigin } from '../utils';\n\n// This file refers to objects imported from `./channel-shared` and\n// `./channel-service.` These can't be included in `./channel` as this\n// causes a circular dependency issue.\n\nexport const ChannelType = {\n Automatic: 0,\n SharedArrayBuffer: 1,\n ServiceWorker: 2,\n} as const;\n\nexport type ChannelInitMessage = {\n type: string;\n data: {\n config: Required<WebROptions>;\n channelType: Exclude<\n (typeof ChannelType)[keyof typeof ChannelType],\n typeof ChannelType.Automatic\n >;\n clientId?: string;\n location?: string;\n };\n};\n\nexport function newChannelMain(data: Required<WebROptions>) {\n switch (data.channelType) {\n case ChannelType.SharedArrayBuffer:\n return new SharedBufferChannelMain(data);\n case ChannelType.ServiceWorker:\n return new ServiceWorkerChannelMain(data);\n case ChannelType.Automatic:\n default:\n if (typeof SharedArrayBuffer !== 'undefined') {\n return new SharedBufferChannelMain(data);\n }\n /*\n * TODO: If we are not cross-origin isolated but we can still use service\n * workers, we could setup a service worker to inject the relevant headers\n * to enable cross-origin isolation.\n */\n if ('serviceWorker' in navigator && !isCrossOrigin(data.serviceWorkerUrl)) {\n return new ServiceWorkerChannelMain(data);\n }\n throw new Error(\"Can't initialise main thread communication channel\");\n }\n}\n\nexport function newChannelWorker(msg: ChannelInitMessage) {\n switch (msg.data.channelType) {\n case ChannelType.SharedArrayBuffer:\n return new SharedBufferChannelWorker();\n case ChannelType.ServiceWorker:\n return new ServiceWorkerChannelWorker(msg.data);\n default:\n throw new Error('Unknown worker channel type recieved');\n }\n}\n", "/**\n * Common module for working with R objects.\n * @module RObject\n */\nimport * as RMain from './robj-main';\nimport * as RWorker from './robj-worker';\n\nexport type RPtr = number;\n\nexport const RTypeMap = {\n null: 0,\n symbol: 1,\n pairlist: 2,\n closure: 3,\n environment: 4,\n promise: 5,\n call: 6,\n special: 7,\n builtin: 8,\n string: 9,\n logical: 10,\n integer: 13,\n double: 14,\n complex: 15,\n character: 16,\n dots: 17,\n any: 18,\n list: 19,\n expression: 20,\n bytecode: 21,\n pointer: 22,\n weakref: 23,\n raw: 24,\n s4: 25,\n new: 30,\n free: 31,\n function: 99,\n} as const;\nexport type RType = keyof typeof RTypeMap;\nexport type RTypeNumber = (typeof RTypeMap)[keyof typeof RTypeMap];\n\nexport type Complex = {\n re: number;\n im: number;\n};\n\nexport type WebRDataRaw =\n | number\n | string\n | boolean\n | undefined\n | null\n | void\n | Complex\n | Error\n | ArrayBuffer\n | ArrayBufferView\n | Array<WebRDataRaw>\n | Map<WebRDataRaw, WebRDataRaw>\n | Set<WebRDataRaw>\n | { [key: string]: WebRDataRaw };\n\nexport type NamedEntries<T> = [string | null, T][];\nexport type NamedObject<T> = { [key: string]: T };\n\n/**\n * A union of JavaScript types that are able to be converted into an R object.\n *\n * `WebRData` is used both as a general input argument for R object construction\n * and also as a general return type when converting R objects into JavaScript.\n *\n */\nexport type WebRData =\n | RMain.RObject\n | RWorker.RObjectBase\n | RWorker.RObject\n | WebRDataRaw\n | WebRDataJs\n | WebRData[]\n | { [key: string]: WebRData };\n\n/**\n * A subset of {@link WebRData} for JavaScript objects that can be converted\n * into R atomic vectors.\n * @typeParam T The JavaScript scalar type associated with the atomic vector.\n */\nexport type WebRDataAtomic<T> =\n | WebRDataScalar<T>\n | (T | null)[]\n | WebRDataJsAtomic<T>\n | NamedObject<T | null>;\n\n/**\n * `WebRDataJs` objects form a tree structure, used when serialising R objects\n * into a JavaScript respresentation.\n *\n * Nested R objects are serialised using the {@link WebRDataJsNode} type,\n * forming branches in the resulting tree structure, with leaves formed by the\n * remaining types.\n */\nexport type WebRDataJs =\n | WebRDataJsNull\n | WebRDataJsString\n | WebRDataJsSymbol\n | WebRDataJsNode\n | WebRDataJsAtomic<RWorker.atomicType>;\n\nexport type WebRDataJsNull = {\n type: 'null';\n};\n\nexport type WebRDataJsString = {\n type: 'string';\n value: string;\n};\n\nexport type WebRDataJsSymbol = {\n type: 'symbol';\n printname: string | null;\n symvalue: RPtr | null;\n internal: RPtr | null;\n};\n\nexport type WebRDataJsNode = {\n type: 'list' | 'pairlist' | 'environment';\n names: (string | null)[] | null;\n values: (WebRDataRaw | RWorker.RObject | RMain.RObject | WebRDataJs)[];\n};\n\nexport type WebRDataJsAtomic<T> = {\n type: 'logical' | 'integer' | 'double' | 'complex' | 'character' | 'raw';\n names: (string | null)[] | null;\n values: (T | null)[];\n};\n\n/**\n * Test for a {@link WebRDataJs} instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of a {@link WebRDataJs}.\n */\nexport function isWebRDataJs(value: any): value is WebRDataJs {\n return value && typeof value === 'object' && Object.keys(RTypeMap).includes(value.type as string);\n}\n\n/**\n * A subset of WebRData for scalar JavaScript objects.\n */\nexport type WebRDataScalar<T> = T | RMain.RObject | RWorker.RObjectBase;\n\n/**\n * Test if an object is of type {@link Complex}.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is of type {@link Complex}.\n */\nexport function isComplex(value: any): value is Complex {\n return value && typeof value === 'object' && 're' in value && 'im' in value;\n}\n", "import { Module, DictEmPtrs, dictEmFree } from './emscripten';\nimport { WebRData, RPtr } from './robj';\nimport { RObject, REnvironment, RHandle, handlePtr } from './robj-worker';\n\nexport function protect<T extends RHandle>(x: T): T {\n Module._Rf_protect(handlePtr(x));\n return x;\n}\n\nexport function protectInc<T extends RHandle>(x: T, prot: { n: number }): T {\n Module._Rf_protect(handlePtr(x));\n ++prot.n;\n return x;\n}\n\nexport function protectWithIndex(x: RHandle): { loc: number; ptr: RPtr } {\n // Integer size hardcoded to 4 bytes. This is fine but is there a\n // way to call sizeof?\n const pLoc = Module._malloc(4);\n\n Module._R_ProtectWithIndex(handlePtr(x), pLoc);\n const loc = Module.getValue(pLoc, 'i32');\n\n return { loc: loc, ptr: pLoc };\n}\n\nexport function unprotectIndex(index: { ptr: RPtr }): void {\n Module._Rf_unprotect(1);\n Module._free(index.ptr);\n}\n\nexport function reprotect<T extends RHandle>(x: T, index: { loc: number; ptr: RPtr }): T {\n Module._R_Reprotect(handlePtr(x), index.loc);\n return x;\n}\n\nexport function unprotect(n: number) {\n Module._Rf_unprotect(n);\n}\n\n// rlang convention: `env`-prefixed functions consistently take `env`\n// as first argument\nexport function envPoke(env: RHandle, sym: RHandle, value: RHandle) {\n Module._Rf_defineVar(handlePtr(sym), handlePtr(value), handlePtr(env));\n}\n\nexport function parseEvalBare(code: string, env: WebRData): RObject {\n const strings: DictEmPtrs = {};\n const prot = { n: 0 };\n\n try {\n const envObj = new REnvironment(env);\n protectInc(envObj, prot);\n\n strings.code = Module.allocateUTF8(code);\n\n const out = Module._R_ParseEvalString(strings.code, envObj.ptr);\n return RObject.wrap(out);\n } finally {\n dictEmFree(strings);\n unprotect(prot.n);\n }\n}\n\nexport class UnwindProtectException extends Error {\n cont: RPtr;\n constructor(message: string, cont: RPtr) {\n super(message);\n this.name = 'UnwindProtectException';\n this.cont = cont;\n }\n}\n\nexport function safeEval(call: RHandle, env: RHandle): RPtr {\n return Module.getWasmTableEntry(Module.GOT.ffi_safe_eval.value)(\n handlePtr(call),\n handlePtr(env)\n );\n}\n", "/**\n * Module for working with R objects on the worker thead.\n * @module RWorker\n */\nimport { Module } from './emscripten';\nimport { Complex, isComplex, NamedEntries, NamedObject, WebRDataRaw, WebRDataScalar } from './robj';\nimport { WebRData, WebRDataAtomic, RPtr, RType, RTypeMap, RTypeNumber } from './robj';\nimport { isWebRDataJs, WebRDataJs, WebRDataJsAtomic, WebRDataJsNode } from './robj';\nimport { WebRDataJsNull, WebRDataJsString, WebRDataJsSymbol } from './robj';\nimport { envPoke, parseEvalBare, protect, protectInc, unprotect } from './utils-r';\nimport { protectWithIndex, reprotect, unprotectIndex, safeEval } from './utils-r';\nimport { ShelterID, isShelterID } from './webr-chan';\n\nexport type RHandle = RObject | RPtr;\n\nexport function handlePtr(x: RHandle): RPtr {\n if (isRObject(x)) {\n return x.ptr;\n } else {\n return x;\n }\n}\n\n// Throw if an R object does not match a certain R type\nfunction assertRType(obj: RObjectBase, type: RType) {\n if (Module._TYPEOF(obj.ptr) !== RTypeMap[type]) {\n throw new Error(`Unexpected object type \"${obj.type()}\" when expecting type \"${type}\"`);\n }\n}\n\n// TODO: Shelter should be a dictionary not an array\nexport const shelters = new Map<ShelterID, RPtr[]>();\n\n// Use this for implicit protection of objects sent to the main\n// thread. Currently uses the precious list but could use a different\n// mechanism in the future. Unprotection is explicit through\n// `Shelter.destroy()`.\nexport function keep(shelter: ShelterID, x: RHandle) {\n const ptr = handlePtr(x);\n Module._R_PreserveObject(ptr);\n\n // TODO: Remove when shelter transition is complete\n if (shelter === undefined) {\n return;\n }\n\n if (isShelterID(shelter)) {\n shelters.get(shelter)!.push(ptr);\n return;\n }\n\n throw new Error('Unexpected shelter type ' + typeof shelter);\n}\n\n// Frees objects preserved with `keep()`. This method is called by\n// users in the main thread to release objects that were automatically\n// protected before being sent away.\nexport function destroy(shelter: ShelterID, x: RHandle) {\n const ptr = handlePtr(x);\n Module._R_ReleaseObject(ptr);\n\n const objs: RPtr[] = shelters.get(shelter)!;\n const loc = objs.indexOf(ptr);\n\n if (loc < 0) {\n throw new Error(\"Can't find object in shelter.\");\n }\n\n objs.splice(loc, 1);\n}\n\nexport function purge(shelter: ShelterID) {\n const ptrs: RPtr[] = shelters.get(shelter)!;\n\n for (const ptr of ptrs) {\n try {\n Module._R_ReleaseObject(ptr);\n } catch (e) {\n console.error(e);\n }\n }\n\n shelters.set(shelter, []);\n}\n\nexport interface ToJsOptions {\n depth: number;\n}\n\nexport type Nullable<T> = T | RNull;\n\nfunction newObjectFromData(obj: WebRData): RObject {\n // Conversion of WebRDataJs type JS objects\n if (isWebRDataJs(obj)) {\n return new (getRWorkerClass(RTypeMap[obj.type]))(obj);\n }\n\n // Conversion of explicit R NULL value\n if (obj && typeof obj === 'object' && 'type' in obj && obj.type === 'null') {\n return new RNull();\n }\n\n // Direct conversion of scalar JS values\n if (obj === null) {\n return new RLogical({ type: 'logical', names: null, values: [null] });\n }\n if (typeof obj === 'boolean') {\n return new RLogical(obj);\n }\n if (typeof obj === 'number') {\n return new RDouble(obj);\n }\n if (typeof obj === 'string') {\n return new RCharacter(obj);\n }\n if (isComplex(obj)) {\n return new RComplex(obj);\n }\n if (Array.isArray(obj)) {\n return newObjectFromArray(obj);\n }\n\n throw new Error('Robj construction for this JS object is not yet supported');\n}\n\n// JS arrays are interpreted using R's c() function, so as to match\n// R's built in coercion rules\nfunction newObjectFromArray(arr: WebRData[]) {\n const prot = { n: 0 };\n\n try {\n const call = new RCall([new RSymbol('c'), ...arr]);\n protectInc(call, prot);\n return call.eval();\n } finally {\n unprotect(prot.n);\n }\n}\n\nexport class RObjectBase {\n ptr: RPtr;\n constructor(ptr: RPtr) {\n this.ptr = ptr;\n }\n\n type(): RType {\n const typeNumber = Module._TYPEOF(this.ptr) as RTypeNumber;\n const type = Object.keys(RTypeMap).find(\n (typeName) => RTypeMap[typeName as RType] === typeNumber\n );\n return type as RType;\n }\n}\n\nexport class RObject extends RObjectBase {\n constructor(data: WebRData) {\n if (!(data instanceof RObjectBase)) {\n return newObjectFromData(data);\n }\n\n super(data.ptr);\n }\n\n static wrap<T extends typeof RObject>(this: T, ptr: RPtr): InstanceType<T> {\n const type = Module._TYPEOF(ptr);\n return new (getRWorkerClass(type as RTypeNumber))(new RObjectBase(ptr)) as InstanceType<T>;\n }\n\n get [Symbol.toStringTag](): string {\n return `RObject:${this.type()}`;\n }\n\n /** @internal */\n static getPersistentObject(prop: keyof typeof objs): unknown {\n return objs[prop];\n }\n\n /** @internal */\n getPropertyValue(prop: keyof this): unknown {\n return this[prop];\n }\n\n inspect(): void {\n parseEvalBare('.Internal(inspect(x))', { x: this });\n }\n\n isNull(): this is RNull {\n return Module._TYPEOF(this.ptr) === RTypeMap.null;\n }\n\n isUnbound(): boolean {\n return this.ptr === objs.unboundValue.ptr;\n }\n\n attrs(): Nullable<RPairlist> {\n return RPairlist.wrap(Module._ATTRIB(this.ptr));\n }\n\n setNames(values: (string | null)[] | null): this {\n let namesObj: RObject;\n\n if (values === null) {\n namesObj = objs.null;\n } else if (Array.isArray(values) && values.every((v) => typeof v === 'string' || v === null)) {\n namesObj = new RCharacter(values);\n } else {\n throw new Error('Argument to setNames must be null or an Array of strings or null');\n }\n\n // `setAttrib()` protects its inputs\n Module._Rf_setAttrib(this.ptr, objs.namesSymbol.ptr, namesObj.ptr);\n return this;\n }\n\n names(): (string | null)[] | null {\n const names = RCharacter.wrap(Module._Rf_getAttrib(this.ptr, objs.namesSymbol.ptr));\n if (names.isNull()) {\n return null;\n } else {\n return names.toArray();\n }\n }\n\n includes(name: string) {\n const names = this.names();\n return names && names.includes(name);\n }\n\n toJs(options: ToJsOptions = { depth: 0 }, depth = 1): WebRDataJs {\n throw new Error('This R object cannot be converted to JS');\n }\n\n subset(prop: number | string): RObject {\n return this.#slice(prop, objs.bracketSymbol.ptr);\n }\n\n get(prop: number | string): RObject {\n return this.#slice(prop, objs.bracket2Symbol.ptr);\n }\n\n getDollar(prop: string): RObject {\n return this.#slice(prop, objs.dollarSymbol.ptr);\n }\n\n #slice(prop: number | string, op: RPtr): RObject {\n const prot = { n: 0 };\n\n try {\n const idx = new RObject(prop);\n protectInc(idx, prot);\n\n const call = Module._Rf_lang3(op, this.ptr, idx.ptr);\n protectInc(call, prot);\n\n return RObject.wrap(safeEval(call, objs.baseEnv));\n } finally {\n unprotect(prot.n);\n }\n }\n\n pluck(...path: (string | number)[]): RObject | undefined {\n const index = protectWithIndex(objs.null);\n\n try {\n const getter = (obj: RObject, prop: string | number): RObject => {\n const out = obj.get(prop);\n return reprotect(out, index);\n };\n const result = path.reduce(getter, this);\n\n return result.isNull() ? undefined : result;\n } finally {\n unprotectIndex(index);\n }\n }\n\n set(prop: string | number, value: RObject | WebRDataRaw): RObject {\n const prot = { n: 0 };\n\n try {\n const idx = new RObject(prop);\n protectInc(idx, prot);\n\n const valueObj = new RObject(value);\n protectInc(valueObj, prot);\n\n const assign = new RSymbol('[[<-');\n const call = Module._Rf_lang4(assign.ptr, this.ptr, idx.ptr, valueObj.ptr);\n protectInc(call, prot);\n\n return RObject.wrap(safeEval(call, objs.baseEnv));\n } finally {\n unprotect(prot.n);\n }\n }\n\n /** @internal */\n static getMethods(obj: RObject) {\n const props = new Set<string>();\n let cur: unknown = obj;\n do {\n Object.getOwnPropertyNames(cur).map((p) => props.add(p));\n } while ((cur = Object.getPrototypeOf(cur)));\n return [...props.keys()].filter((i) => typeof obj[i as keyof typeof obj] === 'function');\n }\n}\n\nexport class RNull extends RObject {\n constructor() {\n super(new RObjectBase(Module.getValue(Module._R_NilValue, '*')));\n return this;\n }\n\n toJs(): WebRDataJsNull {\n return { type: 'null' };\n }\n}\n\nexport class RSymbol extends RObject {\n // Note that symbols don't need to be protected. This also means\n // that allocating symbols in loops with random data is probably a\n // bad idea because this leaks memory.\n constructor(x: WebRDataScalar<string>) {\n if (x instanceof RObjectBase) {\n assertRType(x, 'symbol');\n super(x);\n return;\n }\n const name = Module.allocateUTF8(x as string);\n try {\n super(new RObjectBase(Module._Rf_install(name)));\n } finally {\n Module._free(name);\n }\n }\n\n toJs(): WebRDataJsSymbol {\n const obj = this.toObject();\n return {\n type: 'symbol',\n printname: obj.printname,\n symvalue: obj.symvalue,\n internal: obj.internal,\n };\n }\n\n toObject(): {\n printname: string | null;\n symvalue: RPtr | null;\n internal: RPtr | null;\n } {\n return {\n printname: this.printname().isUnbound() ? null : this.printname().toString(),\n symvalue: this.symvalue().isUnbound() ? null : this.symvalue().ptr,\n internal: this.internal().isNull() ? null : this.internal().ptr,\n };\n }\n\n toString(): string {\n return this.printname().toString();\n }\n\n printname(): RString {\n return RString.wrap(Module._PRINTNAME(this.ptr));\n }\n symvalue(): RObject {\n return RObject.wrap(Module._SYMVALUE(this.ptr));\n }\n internal(): RObject {\n return RObject.wrap(Module._INTERNAL(this.ptr));\n }\n}\n\nexport class RPairlist extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'pairlist');\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n\n const list = RPairlist.wrap(Module._Rf_allocList(values.length));\n protectInc(list, prot);\n\n for (\n let [i, next] = [0, list as Nullable<RPairlist>];\n !next.isNull();\n [i, next] = [i + 1, next.cdr()]\n ) {\n next.setcar(new RObject(values[i]));\n }\n\n list.setNames(names);\n super(list);\n } finally {\n unprotect(prot.n);\n }\n }\n\n get length(): number {\n return this.toArray().length;\n }\n\n toArray(options: ToJsOptions = { depth: 1 }): WebRData[] {\n return this.toJs(options).values;\n }\n\n toObject({\n allowDuplicateKey = true,\n allowEmptyKey = false,\n depth = 1,\n } = {}): NamedObject<WebRData> {\n const entries = this.entries({ depth });\n const keys = entries.map(([k, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error('Duplicate key when converting pairlist without allowDuplicateKey enabled');\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error('Empty or null key when converting pairlist without allowEmptyKey enabled');\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(options: ToJsOptions = { depth: 1 }): NamedEntries<WebRData> {\n const obj = this.toJs(options);\n return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n }\n\n toJs(options: ToJsOptions = { depth: 0 }, depth = 1): WebRDataJsNode {\n const namesArray: string[] = [];\n let hasNames = false;\n const values: WebRDataJsNode['values'] = [];\n\n for (let next = this as Nullable<RPairlist>; !next.isNull(); next = next.cdr()) {\n const symbol = next.tag();\n if (symbol.isNull()) {\n namesArray.push('');\n } else {\n hasNames = true;\n namesArray.push(symbol.toString());\n }\n if (options.depth && depth >= options.depth) {\n values.push(next.car());\n } else {\n values.push(next.car().toJs(options, depth + 1));\n }\n }\n const names = hasNames ? namesArray : null;\n return { type: 'pairlist', names, values };\n }\n\n includes(name: string): boolean {\n return name in this.toObject();\n }\n\n setcar(obj: RObject): void {\n Module._SETCAR(this.ptr, obj.ptr);\n }\n\n car(): RObject {\n return RObject.wrap(Module._CAR(this.ptr));\n }\n\n cdr(): Nullable<RPairlist> {\n return RObject.wrap(Module._CDR(this.ptr)) as Nullable<RPairlist>;\n }\n\n tag(): Nullable<RSymbol> {\n return RObject.wrap(Module._TAG(this.ptr)) as Nullable<RSymbol>;\n }\n}\n\nexport class RCall extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'call');\n super(val);\n return this;\n }\n const prot = { n: 0 };\n\n try {\n const { values } = toWebRData(val);\n const objs = values.map((value) => protectInc(new RObject(value), prot));\n const call = RCall.wrap(Module._Rf_allocVector(RTypeMap.call, values.length));\n protectInc(call, prot);\n\n for (\n let [i, next] = [0, call as Nullable<RPairlist>];\n !next.isNull();\n [i, next] = [i + 1, next.cdr()]\n ) {\n next.setcar(objs[i]);\n }\n super(call);\n } finally {\n unprotect(prot.n);\n }\n }\n\n setcar(obj: RObject): void {\n Module._SETCAR(this.ptr, obj.ptr);\n }\n\n car(): RObject {\n return RObject.wrap(Module._CAR(this.ptr));\n }\n\n cdr(): Nullable<RPairlist> {\n return RObject.wrap(Module._CDR(this.ptr)) as Nullable<RPairlist>;\n }\n\n eval(): RObject {\n return RObject.wrap(safeEval(this.ptr, objs.baseEnv));\n }\n}\n\nexport class RList extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'list');\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n const ptr = Module._Rf_allocVector(RTypeMap.list, values.length);\n protectInc(ptr, prot);\n\n values.forEach((v, i) => {\n Module._SET_VECTOR_ELT(ptr, i, new RObject(v).ptr);\n });\n\n RObject.wrap(ptr).setNames(names);\n\n super(new RObjectBase(ptr));\n } finally {\n unprotect(prot.n);\n }\n }\n\n get length(): number {\n return Module._LENGTH(this.ptr);\n }\n\n toArray(options: { depth: number } = { depth: 1 }): WebRData[] {\n return this.toJs(options).values;\n }\n\n toObject({\n allowDuplicateKey = true,\n allowEmptyKey = false,\n depth = 1,\n } = {}): NamedObject<WebRData> {\n const entries = this.entries({ depth });\n const keys = entries.map(([k, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error('Duplicate key when converting list without allowDuplicateKey enabled');\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error('Empty or null key when converting list without allowEmptyKey enabled');\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(options: { depth: number } = { depth: 1 }): NamedEntries<WebRData> {\n const obj = this.toJs(options);\n return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n }\n\n toJs(options: { depth: number } = { depth: 0 }, depth = 1): WebRDataJsNode {\n return {\n type: 'list',\n names: this.names(),\n values: [...Array(this.length).keys()].map((i) => {\n if (options.depth && depth >= options.depth) {\n return this.get(i + 1);\n } else {\n return this.get(i + 1).toJs(options, depth + 1);\n }\n }),\n };\n }\n}\n\nexport class RFunction extends RObject {\n exec(...args: (WebRDataRaw | RObject)[]): RObject {\n const prot = { n: 0 };\n\n try {\n const call = new RCall([this, ...args]);\n protectInc(call, prot);\n return call.eval();\n } finally {\n unprotect(prot.n);\n }\n }\n}\n\nexport class RString extends RObject {\n // Unlike symbols, strings are not cached and must thus be protected\n constructor(x: WebRDataScalar<string>) {\n if (x instanceof RObjectBase) {\n assertRType(x, 'string');\n super(x);\n return;\n }\n\n const name = Module.allocateUTF8(x as string);\n\n try {\n super(new RObjectBase(Module._Rf_mkChar(name)));\n } finally {\n Module._free(name);\n }\n }\n\n toString(): string {\n return Module.UTF8ToString(Module._R_CHAR(this.ptr));\n }\n\n toJs(): WebRDataJsString {\n return {\n type: 'string',\n value: this.toString(),\n };\n }\n}\n\nexport class REnvironment extends RObject {\n constructor(val: WebRData = {}) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'environment');\n super(val);\n return this;\n }\n let nProt = 0;\n\n try {\n const { names, values } = toWebRData(val);\n\n const ptr = protect(Module._R_NewEnv(objs.globalEnv.ptr, 0, 0));\n ++nProt;\n\n values.forEach((v, i) => {\n const name = names ? names[i] : null;\n if (!name) {\n throw new Error(\"Can't create object in new environment with empty symbol name\");\n }\n\n const sym = new RSymbol(name);\n const vObj = protect(new RObject(v));\n try {\n envPoke(ptr, sym, vObj);\n } finally {\n unprotect(1);\n }\n });\n\n super(new RObjectBase(ptr));\n } finally {\n unprotect(nProt);\n }\n }\n\n ls(all = false, sorted = true): string[] {\n const ls = RCharacter.wrap(Module._R_lsInternal3(this.ptr, Number(all), Number(sorted)));\n return ls.toArray() as string[];\n }\n\n bind(name: string, value: WebRData): void {\n const sym = new RSymbol(name);\n const valueObj = protect(new RObject(value));\n\n try {\n envPoke(this, sym, valueObj);\n } finally {\n unprotect(1);\n }\n }\n\n names(): string[] {\n return this.ls(true, true);\n }\n\n frame(): RObject {\n return RObject.wrap(Module._FRAME(this.ptr));\n }\n\n subset(prop: number | string): RObject {\n if (typeof prop === 'number') {\n throw new Error('Object of type environment is not subsettable');\n }\n return this.getDollar(prop);\n }\n\n toObject({ depth = 0 } = {}): NamedObject<WebRData> {\n const symbols = this.names();\n return Object.fromEntries(\n [...Array(symbols.length).keys()].map((i) => {\n return [symbols[i], this.getDollar(symbols[i]).toJs({ depth })];\n })\n );\n }\n\n toJs(options: { depth: number } = { depth: 0 }, depth = 1): WebRDataJsNode {\n const names = this.names();\n const values = [...Array(names.length).keys()].map((i) => {\n if (options.depth && depth >= options.depth) {\n return this.getDollar(names[i]);\n } else {\n return this.getDollar(names[i]).toJs(options, depth + 1);\n }\n });\n\n return {\n type: 'environment',\n names,\n values,\n };\n }\n}\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array;\n\nexport type atomicType = number | boolean | Complex | string;\n\nabstract class RVectorAtomic<T extends atomicType> extends RObject {\n constructor(\n val: WebRDataAtomic<T>,\n kind: RType,\n newSetter: (ptr: RPtr) => (v: any, i: number) => void\n ) {\n if (val instanceof RObjectBase) {\n assertRType(val, kind);\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n\n const ptr = Module._Rf_allocVector(RTypeMap[kind], values.length);\n protectInc(ptr, prot);\n\n values.forEach(newSetter(ptr));\n RObject.wrap(ptr).setNames(names);\n\n super(new RObjectBase(ptr));\n } finally {\n unprotect(prot.n);\n }\n }\n\n get length(): number {\n return Module._LENGTH(this.ptr);\n }\n\n get(prop: number | string): this {\n return super.get(prop) as this;\n }\n\n subset(prop: number | string): this {\n return super.subset(prop) as this;\n }\n\n getDollar(prop: string): RObject {\n throw new Error('$ operator is invalid for atomic vectors');\n }\n\n detectMissing(): boolean[] {\n const prot = { n: 0 };\n\n try {\n const call = Module._Rf_lang2(new RSymbol('is.na').ptr, this.ptr);\n protectInc(call, prot);\n\n const val = RLogical.wrap(safeEval(call, objs.baseEnv));\n protectInc(val, prot);\n\n const ret = val.toTypedArray();\n return Array.from(ret).map((elt) => Boolean(elt));\n } finally {\n unprotect(prot.n);\n }\n }\n\n abstract toTypedArray(): TypedArray;\n\n toArray(): (T | null)[] {\n const arr = this.toTypedArray();\n return this.detectMissing().map((m, idx) => (m ? null : (arr[idx] as T)));\n }\n\n toObject({ allowDuplicateKey = true, allowEmptyKey = false } = {}): NamedObject<T | null> {\n const entries = this.entries();\n const keys = entries.map(([k, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error(\n 'Duplicate key when converting atomic vector without allowDuplicateKey enabled'\n );\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error(\n 'Empty or null key when converting atomic vector without allowEmptyKey enabled'\n );\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(): NamedEntries<T | null> {\n const values = this.toArray();\n const names = this.names();\n return values.map((v, i) => [names ? names[i] : null, v]);\n }\n\n toJs(): WebRDataJsAtomic<T> {\n return {\n type: this.type() as 'logical' | 'integer' | 'double' | 'complex' | 'character' | 'raw',\n names: this.names(),\n values: this.toArray(),\n };\n }\n}\n\nexport class RLogical extends RVectorAtomic<boolean> {\n constructor(val: WebRDataAtomic<boolean>) {\n super(val, 'logical', RLogical.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._LOGICAL(ptr);\n const naLogical = Module.getValue(Module._R_NaInt, 'i32');\n return (v: null | boolean, i: number) => {\n Module.setValue(data + 4 * i, v === null ? naLogical : Boolean(v), 'i32');\n };\n };\n\n getBoolean(idx: number): boolean | null {\n return this.get(idx).toArray()[0];\n }\n\n toBoolean(): boolean {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getBoolean(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS boolean\");\n }\n return val;\n }\n\n toTypedArray(): Int32Array {\n return new Int32Array(\n Module.HEAP32.subarray(\n Module._LOGICAL(this.ptr) / 4,\n Module._LOGICAL(this.ptr) / 4 + this.length\n )\n );\n }\n\n toArray(): (boolean | null)[] {\n const arr = this.toTypedArray();\n return this.detectMissing().map((m, idx) => (m ? null : Boolean(arr[idx])));\n }\n}\n\nexport class RInteger extends RVectorAtomic<number> {\n constructor(val: WebRDataAtomic<number>) {\n super(val, 'integer', RInteger.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._INTEGER(ptr);\n const naInteger = Module.getValue(Module._R_NaInt, 'i32');\n\n return (v: null | number, i: number) => {\n Module.setValue(data + 4 * i, v === null ? naInteger : Math.round(Number(v)), 'i32');\n };\n };\n\n getNumber(idx: number): number | null {\n return this.get(idx).toArray()[0];\n }\n\n toNumber(): number {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getNumber(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS number\");\n }\n return val;\n }\n\n toTypedArray(): Int32Array {\n return new Int32Array(\n Module.HEAP32.subarray(\n Module._INTEGER(this.ptr) / 4,\n Module._INTEGER(this.ptr) / 4 + this.length\n )\n );\n }\n}\n\nexport class RDouble extends RVectorAtomic<number> {\n constructor(val: WebRDataAtomic<number>) {\n super(val, 'double', RDouble.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._REAL(ptr);\n const naDouble = Module.getValue(Module._R_NaReal, 'double');\n\n return (v: null | number, i: number) => {\n Module.setValue(data + 8 * i, v === null ? naDouble : v, 'double');\n };\n };\n\n getNumber(idx: number): number | null {\n return this.get(idx).toArray()[0];\n }\n\n toNumber(): number {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getNumber(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS number\");\n }\n return val;\n }\n\n toTypedArray(): Float64Array {\n return new Float64Array(\n Module.HEAPF64.subarray(Module._REAL(this.ptr) / 8, Module._REAL(this.ptr) / 8 + this.length)\n );\n }\n}\n\nexport class RComplex extends RVectorAtomic<Complex> {\n constructor(val: WebRDataAtomic<Complex>) {\n super(val, 'complex', RComplex.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._COMPLEX(ptr);\n const naDouble = Module.getValue(Module._R_NaReal, 'double');\n\n return (v: null | Complex, i: number) => {\n Module.setValue(data + 8 * (2 * i), v === null ? naDouble : v.re, 'double');\n Module.setValue(data + 8 * (2 * i + 1), v === null ? naDouble : v.im, 'double');\n };\n };\n\n getComplex(idx: number): Complex | null {\n return this.get(idx).toArray()[0];\n }\n\n toComplex(): Complex {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getComplex(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS object\");\n }\n return val;\n }\n\n toTypedArray(): Float64Array {\n return new Float64Array(\n Module.HEAPF64.subarray(\n Module._COMPLEX(this.ptr) / 8,\n Module._COMPLEX(this.ptr) / 8 + 2 * this.length\n )\n );\n }\n\n toArray(): (Complex | null)[] {\n const arr = this.toTypedArray();\n return this.detectMissing().map((m, idx) =>\n m ? null : { re: arr[2 * idx], im: arr[2 * idx + 1] }\n );\n }\n}\n\nexport class RCharacter extends RVectorAtomic<string> {\n constructor(val: WebRDataAtomic<string>) {\n super(val, 'character', RCharacter.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n return (v: null | string, i: number) => {\n if (v === null) {\n Module._SET_STRING_ELT(ptr, i, objs.naString.ptr);\n } else {\n Module._SET_STRING_ELT(ptr, i, new RString(v).ptr);\n }\n };\n };\n\n getString(idx: number): string | null {\n return this.get(idx).toArray()[0];\n }\n\n toString(): string {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getString(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS string\");\n }\n return val;\n }\n\n toTypedArray(): Uint32Array {\n return new Uint32Array(\n Module.HEAPU32.subarray(\n Module._STRING_PTR(this.ptr) / 4,\n Module._STRING_PTR(this.ptr) / 4 + this.length\n )\n );\n }\n\n toArray(): (string | null)[] {\n return this.detectMissing().map((m, idx) =>\n m ? null : Module.UTF8ToString(Module._R_CHAR(Module._STRING_ELT(this.ptr, idx)))\n );\n }\n}\n\nexport class RRaw extends RVectorAtomic<number> {\n constructor(val: WebRDataAtomic<number>) {\n super(val, 'raw', RRaw.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._RAW(ptr);\n\n return (v: number, i: number) => {\n Module.setValue(data + i, Number(v), 'i8');\n };\n };\n\n getNumber(idx: number): number | null {\n return this.get(idx).toArray()[0];\n }\n\n toNumber(): number {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getNumber(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS number\");\n }\n return val;\n }\n\n toTypedArray(): Uint8Array {\n return new Uint8Array(\n Module.HEAPU8.subarray(Module._RAW(this.ptr), Module._RAW(this.ptr) + this.length)\n );\n }\n}\n\n/*\n * Convert the various types possible in the type union WebRData into\n * consistently typed arrays of names and values.\n */\nfunction toWebRData<T>(jsObj: WebRDataAtomic<T>): {\n names: (string | null)[] | null;\n values: (T | null)[];\n};\nfunction toWebRData(jsObj: WebRData): WebRData;\nfunction toWebRData(jsObj: WebRData): WebRData {\n if (isWebRDataJs(jsObj)) {\n return jsObj;\n } else if (Array.isArray(jsObj) || ArrayBuffer.isView(jsObj)) {\n return { names: null, values: jsObj };\n } else if (jsObj && typeof jsObj === 'object' && !isComplex(jsObj)) {\n return {\n names: Object.keys(jsObj),\n values: Object.values(jsObj),\n };\n }\n return { names: null, values: [jsObj] };\n}\n\nexport function getRWorkerClass(type: RTypeNumber): typeof RObject {\n const typeClasses: { [key: number]: typeof RObject } = {\n [RTypeMap.null]: RNull,\n [RTypeMap.symbol]: RSymbol,\n [RTypeMap.pairlist]: RPairlist,\n [RTypeMap.closure]: RFunction,\n [RTypeMap.environment]: REnvironment,\n [RTypeMap.call]: RCall,\n [RTypeMap.special]: RFunction,\n [RTypeMap.builtin]: RFunction,\n [RTypeMap.string]: RString,\n [RTypeMap.logical]: RLogical,\n [RTypeMap.integer]: RInteger,\n [RTypeMap.double]: RDouble,\n [RTypeMap.complex]: RComplex,\n [RTypeMap.character]: RCharacter,\n [RTypeMap.list]: RList,\n [RTypeMap.raw]: RRaw,\n [RTypeMap.function]: RFunction,\n };\n if (type in typeClasses) {\n return typeClasses[type];\n }\n return RObject;\n}\n\n/**\n * Test for an RWorker.RObject instance.\n *\n * RWorker.RObject is the internal interface to R objects, intended to be used\n * on the worker thread.\n *\n * @private\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RObject.\n */\nexport function isRObject(value: any): value is RObject {\n return value instanceof RObject;\n}\n\n/**\n * A store for persistent R objects, initialised at R startup.\n */\nexport let objs: {\n baseEnv: REnvironment,\n bracket2Symbol: RSymbol,\n bracketSymbol: RSymbol,\n dollarSymbol: RSymbol,\n emptyEnv: REnvironment,\n false: RLogical,\n globalEnv: REnvironment,\n na: RLogical,\n namesSymbol: RSymbol,\n naString: RObject,\n null: RNull,\n true: RLogical,\n unboundValue: RObject,\n};\n\n/**\n * Populate the persistent R object store.\n * @internal\n */\nexport function initPersistentObjects(){\n objs = {\n baseEnv: REnvironment.wrap(Module.getValue(Module._R_BaseEnv, '*')),\n bracket2Symbol: RSymbol.wrap(Module.getValue(Module._R_Bracket2Symbol, '*')),\n bracketSymbol: RSymbol.wrap(Module.getValue(Module._R_BracketSymbol, '*')),\n dollarSymbol: RSymbol.wrap(Module.getValue(Module._R_DollarSymbol, '*')),\n emptyEnv: REnvironment.wrap(Module.getValue(Module._R_EmptyEnv, '*')),\n false: RLogical.wrap(Module.getValue(Module._R_FalseValue, '*')),\n globalEnv: REnvironment.wrap(Module.getValue(Module._R_GlobalEnv, '*')),\n na: RLogical.wrap(Module.getValue(Module._R_LogicalNAValue, '*')),\n namesSymbol: RSymbol.wrap(Module.getValue(Module._R_NamesSymbol, '*')),\n naString: RObject.wrap(Module.getValue(Module._R_NaString, '*')),\n null: RNull.wrap(Module.getValue(Module._R_NilValue, '*')),\n true: RLogical.wrap(Module.getValue(Module._R_TrueValue, '*')),\n unboundValue: RObject.wrap(Module.getValue(Module._R_UnboundValue, '*')),\n };\n}\n", "import { loadScript } from './compat';\nimport { ChannelWorker } from './chan/channel';\nimport { newChannelWorker, ChannelInitMessage } from './chan/channel-common';\nimport { Message, Request, newResponse } from './chan/message';\nimport { FSNode, WebROptions } from './webr-main';\nimport { EmPtr, Module } from './emscripten';\nimport { IN_NODE } from './compat';\nimport { replaceInObject, throwUnreachable } from './utils';\nimport { WebRPayloadRaw, WebRPayloadPtr, WebRPayloadWorker, isWebRPayloadPtr } from './payload';\nimport { RObject, isRObject, REnvironment, RList, getRWorkerClass } from './robj-worker';\nimport { RCharacter, RString, keep, destroy, purge, shelters } from './robj-worker';\nimport { RLogical, RInteger, RDouble, initPersistentObjects, objs } from './robj-worker';\nimport { RPtr, RType, RTypeMap, WebRData, WebRDataRaw } from './robj';\nimport { protect, protectInc, unprotect, parseEvalBare, UnwindProtectException, safeEval } from './utils-r';\nimport { generateUUID } from './chan/task-common';\n\nimport {\n CallRObjectMethodMessage,\n CaptureRMessage,\n EvalROptions,\n EvalRMessage,\n EvalRMessageRaw,\n FSMessage,\n FSReadFileMessage,\n FSWriteFileMessage,\n InvokeWasmFunctionMessage,\n NewRObjectMessage,\n ShelterMessage,\n ShelterDestroyMessage,\n} from './webr-chan';\n\nlet initialised = false;\nlet chan: ChannelWorker | undefined;\n\nconst onWorkerMessage = function (msg: Message) {\n if (!msg || !msg.type || msg.type !== 'init') {\n return;\n }\n if (initialised) {\n throw new Error(\"Can't initialise worker multiple times.\");\n }\n const messageInit = msg as ChannelInitMessage;\n chan = newChannelWorker(messageInit);\n init(messageInit.data.config);\n initialised = true;\n};\n\nif (IN_NODE) {\n require('worker_threads').parentPort.on('message', onWorkerMessage);\n (globalThis as any).XMLHttpRequest = require('xmlhttprequest-ssl')\n .XMLHttpRequest as XMLHttpRequest;\n} else {\n globalThis.onmessage = (ev: MessageEvent<Message>) => onWorkerMessage(ev.data);\n}\n\ntype XHRResponse = {\n status: number;\n response: string | ArrayBuffer;\n};\n\nlet _config: Required<WebROptions>;\n\nfunction dispatch(msg: Message): void {\n switch (msg.type) {\n case 'request': {\n const req = msg as Request;\n const reqMsg = req.data.msg;\n\n const write = (resp: WebRPayloadWorker, transferables?: [Transferable]) =>\n chan?.write(newResponse(req.data.uuid, resp, transferables));\n try {\n switch (reqMsg.type) {\n case 'lookupPath': {\n const msg = reqMsg as FSMessage;\n const node = Module.FS.lookupPath(msg.data.path, {}).node;\n write({\n obj: copyFSNode(node as FSNode),\n payloadType: 'raw',\n });\n break;\n }\n case 'mkdir': {\n const msg = reqMsg as FSMessage;\n write({\n obj: copyFSNode(Module.FS.mkdir(msg.data.path) as FSNode),\n payloadType: 'raw',\n });\n break;\n }\n case 'readFile': {\n const msg = reqMsg as FSReadFileMessage;\n const reqData = msg.data;\n const out = {\n obj: Module.FS.readFile(reqData.path, {\n encoding: 'binary',\n flags: reqData.flags,\n }),\n payloadType: 'raw',\n };\n write(out as WebRPayloadRaw, [out.obj.buffer]);\n break;\n }\n case 'rmdir': {\n const msg = reqMsg as FSMessage;\n write({\n obj: Module.FS.rmdir(msg.data.path),\n payloadType: 'raw',\n });\n break;\n }\n case 'writeFile': {\n const msg = reqMsg as FSWriteFileMessage;\n const reqData = msg.data;\n // FIXME: Use a replacer + reviver to transfer Uint8Array\n const data = Uint8Array.from(Object.values(reqData.data));\n write({\n obj: Module.FS.writeFile(reqData.path, data, { flags: reqData.flags }),\n payloadType: 'raw',\n });\n break;\n }\n case 'unlink': {\n const msg = reqMsg as FSMessage;\n write({\n obj: Module.FS.unlink(msg.data.path),\n payloadType: 'raw',\n });\n break;\n }\n\n case 'newShelter': {\n const id = generateUUID();\n shelters.set(id, []);\n\n write({\n payloadType: 'raw',\n obj: id,\n });\n break;\n }\n\n case 'shelterSize': {\n const msg = reqMsg as ShelterMessage;\n const size = shelters.get(msg.data)!.length;\n\n write({ payloadType: 'raw', obj: size });\n break;\n }\n\n case 'shelterPurge': {\n const msg = reqMsg as ShelterMessage;\n purge(msg.data);\n\n write({ payloadType: 'raw', obj: null });\n break;\n }\n\n case 'shelterDestroy': {\n const msg = reqMsg as ShelterDestroyMessage;\n destroy(msg.data.id, msg.data.obj.obj.ptr);\n\n write({ payloadType: 'raw', obj: null });\n break;\n }\n\n case 'captureR': {\n const msg = reqMsg as CaptureRMessage;\n const data = msg.data;\n\n const shelter = data.shelter;\n const prot = { n: 0 };\n\n try {\n const capture = captureR(data.code, data.options);\n protectInc(capture, prot);\n\n const result = capture.get('result');\n const outputs = capture.get(2) as RList;\n\n keep(shelter, result);\n\n const n = outputs.length;\n const output: any[] = [];\n\n for (let i = 1; i < n + 1; ++i) {\n const out = outputs.get(i);\n const type = (out.pluck(1, 1) as RCharacter).toString();\n const data = out.get(2);\n\n if (type === 'stdout' || type === 'stderr') {\n const msg = (data as RString).toString();\n output.push({ type, data: msg });\n } else {\n keep(shelter, data);\n const payload = {\n obj: {\n ptr: data.ptr,\n type: data.type(),\n methods: RObject.getMethods(data),\n },\n payloadType: 'ptr',\n } as WebRPayloadPtr;\n output.push({ type, data: payload });\n }\n }\n\n const resultPayload = {\n payloadType: 'ptr',\n obj: {\n ptr: result.ptr,\n type: result.type(),\n methods: RObject.getMethods(result),\n },\n } as WebRPayloadPtr;\n\n write({\n payloadType: 'raw',\n obj: {\n result: resultPayload,\n output: output,\n },\n });\n } finally {\n unprotect(prot.n);\n }\n break;\n }\n\n case 'evalR': {\n const msg = reqMsg as EvalRMessage;\n\n const result = evalR(msg.data.code, msg.data.options);\n keep(msg.data.shelter, result);\n\n write({\n obj: {\n type: result.type(),\n ptr: result.ptr,\n methods: RObject.getMethods(result),\n },\n payloadType: 'ptr',\n });\n break;\n }\n\n case 'evalRRaw': {\n const msg = reqMsg as EvalRMessageRaw;\n const result = evalR(msg.data.code, msg.data.options);\n\n protect(result);\n\n const throwType = () => {\n throw new Error(`Can't convert object of type ${result.type()} to ${msg.data.outputType}.`);\n };\n\n try {\n let out: WebRDataRaw = undefined;\n switch (msg.data.outputType) {\n case 'void':\n break;\n case 'boolean':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toBoolean();\n break;\n default:\n throwType();\n }\n break;\n case 'boolean[]':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n default:\n throwType();\n }\n break;\n case 'number':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toBoolean();\n out = Number(out);\n break;\n case 'integer':\n out = (result as RInteger).toNumber();\n break;\n case 'double':\n out = (result as RDouble).toNumber();\n break;\n default:\n throwType();\n }\n break;\n case 'number[]':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toArray();\n out = out.map((i) => i === null ? throwType() : Number(i));\n break;\n case 'integer':\n out = (result as RInteger).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n case 'double':\n out = (result as RDouble).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n default:\n throwType();\n }\n break;\n case 'string':\n switch (result.type()) {\n case 'character':\n out = (result as RCharacter).toString();\n break;\n default:\n throwType();\n }\n break;\n case 'string[]':\n switch (result.type()) {\n case 'character':\n out = (result as RCharacter).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n default:\n throwType();\n }\n break;\n default:\n throw new Error('Unexpected output type in `evalRRaw().');\n }\n\n write({\n obj: out,\n payloadType: 'raw',\n });\n break;\n } finally {\n unprotect(1);\n }\n }\n\n case 'newRObject': {\n const msg = reqMsg as NewRObjectMessage;\n\n const payload = newRObject(msg.data.obj, msg.data.objType);\n keep(msg.data.shelter, payload.obj.ptr);\n\n write(payload);\n break;\n }\n\n case 'callRObjectMethod': {\n const msg = reqMsg as CallRObjectMethodMessage;\n const data = msg.data;\n const obj = data.payload ? RObject.wrap(data.payload.obj.ptr) : RObject;\n\n const payload = callRObjectMethod(obj, data.prop, data.args);\n if (isWebRPayloadPtr(payload)) {\n // TODO: Remove `!`\n keep(data.shelter!, payload.obj.ptr);\n }\n\n write(payload);\n break;\n }\n\n case 'invokeWasmFunction': {\n const msg = reqMsg as InvokeWasmFunctionMessage;\n const res = Module.getWasmTableEntry(msg.data.ptr)(...msg.data.args) as number;\n write({\n payloadType: 'raw',\n obj: res,\n });\n break;\n }\n\n case 'installPackage': {\n evalR(`webr::install(\n \"${reqMsg.data.name as string}\",\n repos = \"${_config.repoUrl}\",\n quiet = ${reqMsg.data.quiet ? 'TRUE' : 'FALSE'}\n )`);\n\n write({\n obj: true,\n payloadType: 'raw',\n });\n break;\n }\n default:\n throw new Error('Unknown event `' + reqMsg.type + '`');\n }\n } catch (_e) {\n const e = _e as Error;\n write({\n payloadType: 'err',\n obj: { name: e.name, message: e.message, stack: e.stack },\n });\n\n /* Capture continuation token and resume R's non-local transfer.\n * If the exception has reached this point there should no longer be\n * any `evalJs()` calls on the stack. As such, we assume there are no R\n * calls above us and it is safe to `longjmp` from here.\n */\n if (e instanceof UnwindProtectException) {\n Module._R_ContinueUnwind(e.cont);\n throwUnreachable();\n }\n }\n break;\n }\n default:\n throw new Error('Unknown event `' + msg.type + '`');\n }\n}\n\nfunction copyFSNode(obj: FSNode): FSNode {\n const retObj = {\n id: obj.id,\n name: obj.name,\n mode: obj.mode,\n isFolder: obj.isFolder,\n contents: {},\n };\n if (obj.isFolder) {\n retObj.contents = Object.entries(obj.contents).map(([, node]) => copyFSNode(node));\n }\n return retObj;\n}\n\nfunction downloadFileContent(URL: string, headers: Array<string> = []): XHRResponse {\n const request = new XMLHttpRequest();\n request.open('GET', URL, false);\n request.responseType = 'arraybuffer';\n\n try {\n headers.forEach((header) => {\n const splitHeader = header.split(': ');\n request.setRequestHeader(splitHeader[0], splitHeader[1]);\n });\n } catch {\n const responseText = 'An error occured setting headers in XMLHttpRequest';\n console.error(responseText);\n return { status: 400, response: responseText };\n }\n\n try {\n request.send(null);\n const status = IN_NODE\n ? (JSON.parse(String(request.status)) as { data: { statusCode: number } }).data.statusCode\n : request.status;\n\n if (status >= 200 && status < 300) {\n return { status: status, response: request.response as ArrayBuffer };\n } else {\n const responseText = new TextDecoder().decode(request.response as ArrayBuffer);\n console.error(`Error fetching ${URL} - ${responseText}`);\n return { status: status, response: responseText };\n }\n } catch {\n return { status: 400, response: 'An error occured in XMLHttpRequest' };\n }\n}\n\nfunction newRObject(data: WebRData, objType: RType | 'object'): WebRPayloadPtr {\n const RClass = objType === 'object' ? RObject : getRWorkerClass(RTypeMap[objType]);\n const obj = new RClass(\n replaceInObject(data, isWebRPayloadPtr, (t: WebRPayloadPtr) =>\n RObject.wrap(t.obj.ptr)\n ) as WebRData\n );\n return {\n obj: {\n type: obj.type(),\n ptr: obj.ptr,\n methods: RObject.getMethods(obj),\n },\n payloadType: 'ptr',\n };\n}\n\nfunction callRObjectMethod(\n obj: RObject | typeof RObject,\n prop: string,\n args: WebRPayloadWorker[]\n): WebRPayloadWorker {\n if (!(prop in obj)) {\n throw new ReferenceError(`${prop} is not defined`);\n }\n\n const fn = obj[prop as keyof typeof obj];\n if (typeof fn !== 'function') {\n throw Error('Requested property cannot be invoked');\n }\n\n const res = (fn as Function).apply(\n obj,\n args.map((arg) => {\n if (arg.payloadType === 'ptr') {\n return RObject.wrap(arg.obj.ptr);\n }\n return replaceInObject(arg.obj, isWebRPayloadPtr, (t: WebRPayloadPtr) =>\n RObject.wrap(t.obj.ptr)\n );\n })\n ) as WebRData;\n\n const ret = replaceInObject(res, isRObject, (obj: RObject) => {\n return {\n obj: { type: obj.type(), ptr: obj.ptr, methods: RObject.getMethods(obj) },\n payloadType: 'ptr',\n };\n }) as WebRDataRaw;\n\n return { obj: ret, payloadType: 'raw' };\n}\n\nfunction captureR(code: string, options: EvalROptions = {}): RList {\n const prot = { n: 0 };\n try {\n const _options: Required<EvalROptions> = Object.assign(\n {\n env: objs.globalEnv,\n captureStreams: true,\n captureConditions: true,\n withAutoprint: false,\n throwJsException: true,\n withHandlers: true,\n },\n replaceInObject(options, isWebRPayloadPtr, (t: WebRPayloadPtr) =>\n RObject.wrap(t.obj.ptr)\n )\n );\n\n const envObj = new REnvironment(_options.env);\n protectInc(envObj, prot);\n if (envObj.type() !== 'environment') {\n throw new Error('Attempted to evaluate R code with invalid environment object');\n }\n\n const tPtr = objs.true.ptr;\n const fPtr = objs.false.ptr;\n\n const fn = parseEvalBare('webr::eval_r', objs.baseEnv);\n protectInc(fn, prot);\n\n const codeObj = new RCharacter(code);\n protectInc(codeObj, prot);\n\n const call = Module._Rf_lang6(\n fn.ptr,\n codeObj.ptr,\n _options.captureConditions ? tPtr : fPtr,\n _options.captureStreams ? tPtr : fPtr,\n _options.withAutoprint ? tPtr : fPtr,\n _options.withHandlers ? tPtr : fPtr\n );\n protectInc(call, prot);\n\n const capture = RList.wrap(safeEval(call, envObj));\n protectInc(capture, prot);\n\n if (_options.captureConditions && _options.throwJsException) {\n const output = capture.get('output') as RList;\n const error = (output.toArray() as RObject[]).find(\n (out) => out.get('type').toString() === 'error'\n );\n if (error) {\n throw new Error(\n error.pluck('data', 'message')?.toString() || 'An error occured evaluating R code.'\n );\n }\n }\n\n return capture;\n } finally {\n unprotect(prot.n);\n }\n}\n\nfunction evalR(code: string, options: EvalROptions = {}): RObject {\n const capture = captureR(code, options);\n Module._Rf_protect(capture.ptr);\n\n try {\n // Send captured conditions and output to the JS console. By default, captured\n // error conditions are thrown and so do not need to be handled here.\n const output = capture.get('output') as RList;\n for (let i = 1; i <= output.length; i++) {\n const out = output.get(i);\n const outputType = out.get('type').toString();\n switch (outputType) {\n case 'stdout':\n chan?.writeSystem({ type: 'console.log', data: out.get('data').toString() });\n break;\n case 'stderr':\n chan?.writeSystem({ type: 'console.warn', data: out.get('data').toString() });\n break;\n case 'message':\n chan?.writeSystem({\n type: 'console.warn',\n data: out.pluck('data', 'message')?.toString() || '',\n });\n break;\n case 'warning':\n chan?.writeSystem({\n type: 'console.warn',\n data: `Warning message: \\n${out.pluck('data', 'message')?.toString() || ''}`,\n });\n break;\n default:\n chan?.writeSystem({ type: 'console.warn', data: `Output of type ${outputType}:` });\n chan?.writeSystem({ type: 'console.warn', data: out.get('data').toJs() });\n break;\n }\n }\n return capture.get('result');\n } finally {\n Module._Rf_unprotect(1);\n }\n}\n\nfunction init(config: Required<WebROptions>) {\n _config = config;\n\n const env = { ...config.REnv };\n if (!env.TZ) {\n const fmt = new Intl.DateTimeFormat();\n env.TZ = fmt.resolvedOptions().timeZone;\n }\n\n Module.preRun = [];\n Module.arguments = _config.RArgs;\n Module.noExitRuntime = true;\n Module.noImageDecoding = true;\n Module.noAudioDecoding = true;\n Module.noInitialRun = true;\n\n // Don't instantiate .so libraries packaged through `WEBR_REPO` too\n // early. Otherwise C++ libraries with dynamic initialisation of\n // global variables might call into the R API too early, before R has\n // started.\n Module.noWasmDecoding = true;\n\n Module.preRun.push(() => {\n if (IN_NODE) {\n globalThis.FS = Module.FS;\n }\n Module.createLazyFilesystem();\n Module.FS.mkdirTree(_config.homedir);\n Module.ENV.HOME = _config.homedir;\n Module.FS.chdir(_config.homedir);\n Module.ENV = Object.assign(Module.ENV, env);\n });\n\n chan?.setDispatchHandler(dispatch);\n\n Module.onRuntimeInitialized = () => {\n chan?.run(_config.RArgs);\n };\n\n Module.webr = {\n UnwindProtectException: UnwindProtectException,\n resolveInit: () => {\n initPersistentObjects();\n chan?.setInterrupt(Module._Rf_onintr);\n Module.setValue(Module._R_Interactive, _config.interactive, '*');\n evalR(`options(webr_pkg_repos=\"${_config.repoUrl}\")`);\n chan?.resolve();\n },\n\n readConsole: () => {\n if (!chan) {\n throw new Error(\"Can't read console input without a communication channel\");\n }\n return chan.inputOrDispatch();\n },\n\n handleEvents: () => {\n chan?.handleInterrupt();\n },\n\n evalJs: (code: RPtr): number => {\n try {\n return (0, eval)(Module.UTF8ToString(code));\n } catch (e) {\n /* Capture continuation token and resume R's non-local transfer here.\n * By resuming here we avoid potentially unwinding a target intermediate\n * R stack on the way up to the top level.\n */\n if (e instanceof UnwindProtectException) {\n Module._R_ContinueUnwind(e.cont);\n throwUnreachable();\n } else if (e === Infinity) {\n // Propagate interruption\n throw e;\n }\n const msg = Module.allocateUTF8OnStack(\n `An error occured during JavaScript evaluation:\\n ${(e as { message: string }).message}`\n );\n Module._Rf_error(msg);\n }\n throwUnreachable();\n return 0;\n },\n\n setTimeoutWasm: (ptr: EmPtr, delay: number, ...args: number[]): void => {\n chan?.writeSystem({ type: 'setTimeoutWasm', data: { ptr, delay, args } });\n },\n };\n\n Module.locateFile = (path: string) => _config.baseUrl + path;\n Module.downloadFileContent = downloadFileContent;\n\n Module.print = (text: string) => {\n chan?.write({ type: 'stdout', data: text });\n };\n Module.printErr = (text: string) => {\n chan?.write({ type: 'stderr', data: text });\n };\n Module.setPrompt = (prompt: string) => {\n chan?.write({ type: 'prompt', data: prompt });\n };\n Module.canvasExec = (op: string) => {\n chan?.write({ type: 'canvasExec', data: op });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (globalThis as any).Module = Module;\n\n // At the next tick, launch the REPL. This never returns.\n setTimeout(() => {\n const scriptSrc = `${_config.baseUrl}R.bin.js`;\n loadScript(scriptSrc);\n });\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../node_modules/@msgpack/msgpack/src/utils/int.ts", "../node_modules/@msgpack/msgpack/src/utils/utf8.ts", "../node_modules/@msgpack/msgpack/src/ExtData.ts", "../node_modules/@msgpack/msgpack/src/DecodeError.ts", "../node_modules/@msgpack/msgpack/src/timestamp.ts", "../node_modules/@msgpack/msgpack/src/ExtensionCodec.ts", "../node_modules/@msgpack/msgpack/src/utils/typedArrays.ts", "../node_modules/@msgpack/msgpack/src/Encoder.ts", "../node_modules/@msgpack/msgpack/src/encode.ts", "../node_modules/@msgpack/msgpack/src/utils/prettyByte.ts", "../node_modules/@msgpack/msgpack/src/CachedKeyDecoder.ts", "../node_modules/@msgpack/msgpack/src/Decoder.ts", "../node_modules/@msgpack/msgpack/src/decode.ts", "../node_modules/@msgpack/msgpack/src/utils/stream.ts", "../node_modules/@msgpack/msgpack/src/decodeAsync.ts", "../node_modules/@msgpack/msgpack/src/index.ts", "../node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js", "../webR/error.ts", "../webR/compat.ts", "../webR/utils.ts", "../webR/chan/task-common.ts", "../webR/chan/task-main.ts", "../webR/chan/queue.ts", "../webR/chan/message.ts", "../webR/payload.ts", "../webR/chan/channel.ts", "../webR/chan/task-worker.ts", "../webR/emscripten.ts", "../webR/chan/channel-shared.ts", "../webR/chan/channel-service.ts", "../webR/chan/channel-common.ts", "../webR/robj.ts", "../webR/utils-r.ts", "../webR/robj-worker.ts", "../webR/webr-worker.ts"],
4
+ "sourcesContent": ["// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n", "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int\";\n\nconst TEXT_ENCODING_AVAILABLE =\n (typeof process === \"undefined\" || process?.env?.[\"TEXT_ENCODING\"] !== \"never\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\n\nexport function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_ENCODING\"] !== \"force\"\n ? 200\n : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array<number> = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++]!;\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n const byte4 = bytes[offset++]! & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_DECODER\"] !== \"force\"\n ? 200\n : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder!.decode(stringBytes);\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n", "export class DecodeError extends Error {\n constructor(message: string) {\n super(message);\n\n // fix the prototype chain in a cross-platform way\n const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError\";\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType<ContextType> = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType<ContextType>;\n decode: ExtensionDecoderType<ContextType>;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n", "export function ensureUint8Array(buffer: ArrayLike<number> | Uint8Array | ArrayBufferView | ArrayBuffer): Uint8Array {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n\nexport function createDataView(buffer: ArrayLike<number> | ArrayBufferView | ArrayBuffer): DataView {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n\n const bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n", "import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport type { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder<ContextType = undefined> {\n private pos = 0;\n private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n private bytes = new Uint8Array(this.view.buffer);\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxDepth = DEFAULT_MAX_DEPTH,\n private readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n private readonly sortKeys = false,\n private readonly forceFloat32 = false,\n private readonly ignoreUndefined = false,\n private readonly forceIntegerToFloat = false,\n ) {}\n\n private reinitializeState() {\n this.pos = 0;\n }\n\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n public encodeSharedRef(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n }\n\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n public encode(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n }\n\n private doEncode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n this.encodeNumber(object);\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n private ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n private resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n private encodeNil() {\n this.writeU8(0xc0);\n }\n\n private encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n private encodeNumber(object: number) {\n if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n } else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n } else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n }\n\n private writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n private encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n const strLength = object.length;\n\n if (strLength > TEXT_ENCODER_THRESHOLD) {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n } else {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n }\n\n private encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record<string, unknown>, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n private encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n private encodeArray(object: Array<unknown>, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n\n private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n let count = 0;\n\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n\n return count;\n }\n\n private encodeMap(object: Record<string, unknown>, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (const key of keys) {\n const value = object[key];\n\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n\n private encodeExtension(ext: ExtData) {\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n private writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n private writeU8a(values: ArrayLike<number>) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n private writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n private writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n private writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n private writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n private writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n private writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n}\n", "import { Encoder } from \"./Encoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions<ContextType = undefined> = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * The maximum depth in nested objects and arrays.\n *\n * Defaults to 100.\n */\n maxDepth: number;\n\n /**\n * The initial size of the internal buffer.\n *\n * Defaults to 2048.\n */\n initialBufferSize: number;\n\n /**\n * If `true`, the keys of an object is sorted. In other words, the encoded\n * binary is canonical and thus comparable to another encoded binary.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n sortKeys: boolean;\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n *\n * Defaults to `false`.\n */\n forceFloat32: boolean;\n\n /**\n * If `true`, an object property with `undefined` value are ignored.\n * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n ignoreUndefined: boolean;\n\n /**\n * If `true`, integer numbers are encoded as floating point numbers,\n * with the `forceFloat32` option taken into account.\n *\n * Defaults to `false`.\n */\n forceIntegerToFloat: boolean;\n }>\n> &\n ContextOf<ContextType>;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n value: unknown,\n options: EncodeOptions<SplitUndefined<ContextType>> = defaultEncodeOptions as any,\n): Uint8Array {\n const encoder = new Encoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxDepth,\n options.initialBufferSize,\n options.sortKeys,\n options.forceFloat32,\n options.ignoreUndefined,\n options.forceIntegerToFloat,\n );\n return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n canBeCached(byteLength: number): boolean;\n decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n hit = 0;\n miss = 0;\n private readonly caches: Array<Array<KeyCacheRecord>>;\n\n constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number): boolean {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1]!;\n\n FIND_CHUNK: for (const record of records) {\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1]!;\n const record: KeyCacheRecord = { bytes, str: value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n\n const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n }\n}\n", "import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder, KeyDecoder } from \"./CachedKeyDecoder\";\nimport { DecodeError } from \"./DecodeError\";\n\nconst enum State {\n ARRAY,\n MAP_KEY,\n MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n const keyType = typeof key;\n\n return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n type: State.MAP_KEY | State.MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n type: State.ARRAY;\n size: number;\n array: Array<unknown>;\n position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n } catch (e: any) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n private totalPos = 0;\n private pos = 0;\n\n private view = EMPTY_VIEW;\n private bytes = EMPTY_BYTES;\n private headByte = HEAD_BYTE_REQUIRED;\n private readonly stack: Array<StackState> = [];\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxStrLength = UINT32_MAX,\n private readonly maxBinLength = UINT32_MAX,\n private readonly maxArrayLength = UINT32_MAX,\n private readonly maxMapLength = UINT32_MAX,\n private readonly maxExtLength = UINT32_MAX,\n private readonly keyDecoder: KeyDecoder | null = sharedCachedKeyDecoder,\n ) {}\n\n private reinitializeState() {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n\n // view, bytes, and pos will be re-initialized in setBuffer()\n }\n\n private setBuffer(buffer: ArrayLike<number> | BufferSource): void {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n }\n\n private appendBuffer(buffer: ArrayLike<number> | BufferSource) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n } else {\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n\n // concat remainingData + newData\n const newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n }\n\n private hasRemaining(size: number) {\n return this.view.byteLength - this.pos >= size;\n }\n\n private createExtraByteError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n }\n\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n public decode(buffer: ArrayLike<number> | BufferSource): unknown {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n const object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n }\n\n public *decodeMulti(buffer: ArrayLike<number> | BufferSource): Generator<unknown, void, unknown> {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n while (this.hasRemaining(1)) {\n yield this.doDecodeSync();\n }\n }\n\n public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>): Promise<unknown> {\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.doDecodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n }\n\n public decodeArrayStream(\n stream: AsyncIterable<ArrayLike<number> | BufferSource>,\n ): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, true);\n }\n\n public decodeStream(stream: AsyncIterable<ArrayLike<number> | BufferSource>): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>, isArray: boolean) {\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.doDecodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n }\n\n private doDecodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack[stack.length - 1]!;\n if (state.type === State.ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n } else {\n continue DECODE;\n }\n } else if (state.type === State.MAP_KEY) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n\n state.key = object;\n state.type = State.MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n } else {\n state.key = null;\n state.type = State.MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n private readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n private complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n private readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n private pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.push({\n type: State.MAP_KEY,\n size,\n key: null,\n readCount: 0,\n map: {},\n });\n }\n\n private pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.push({\n type: State.ARRAY,\n size,\n array: new Array<unknown>(size),\n position: 0,\n });\n }\n\n private decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\n `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n );\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n } else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n } else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n private stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack[this.stack.length - 1]!;\n return state.type === State.MAP_KEY;\n }\n return false;\n }\n\n private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n private decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n private lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n private lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n private lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n private readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n private readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n private readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions<ContextType = undefined> = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Maximum string length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n }>\n> &\n ContextOf<ContextType>;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): unknown {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Generator<unknown, void, unknown> {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeMulti(buffer);\n}\n", "// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike<T> = AsyncIterable<T> | ReadableStream<T>;\n\nexport function isAsyncIterable<T>(object: ReadableStreamLike<T>): object is AsyncIterable<T> {\n return (object as any)[Symbol.asyncIterator] != null;\n}\n\nfunction assertNonNull<T>(value: T | null | undefined): asserts value is T {\n if (value == null) {\n throw new Error(\"Assertion Failure: value must not be null nor undefined\");\n }\n}\n\nexport async function* asyncIterableFromStream<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n const reader = stream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n assertNonNull(value);\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function ensureAsyncIterable<T>(streamLike: ReadableStreamLike<T>): AsyncIterable<T> {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n } else {\n return asyncIterableFromStream(streamLike);\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport { ensureAsyncIterable } from \"./utils/stream\";\nimport { defaultDecodeOptions } from \"./decode\";\nimport type { ReadableStreamLike } from \"./utils/stream\";\nimport type { DecodeOptions } from \"./decode\";\nimport type { SplitUndefined } from \"./context\";\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export async function decodeAsync<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Promise<unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeAsync(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export function decodeArrayStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeArrayStream(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMultiStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeStream(stream);\n}\n\n/**\n * @deprecated Use {@link decodeMultiStream()} instead.\n */\nexport function decodeStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n return decodeMultiStream(streamLike, options);\n}\n", "// Main Functions:\n\nimport { encode } from \"./encode\";\nexport { encode };\nimport type { EncodeOptions } from \"./encode\";\nexport type { EncodeOptions };\n\nimport { decode, decodeMulti } from \"./decode\";\nexport { decode, decodeMulti };\nimport type { DecodeOptions } from \"./decode\";\nexport { DecodeOptions };\n\nimport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream } from \"./decodeAsync\";\nexport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream };\n\nimport { Decoder, DataViewIndexOutOfBoundsError } from \"./Decoder\";\nimport { DecodeError } from \"./DecodeError\";\nexport { Decoder, DecodeError, DataViewIndexOutOfBoundsError };\n\nimport { Encoder } from \"./Encoder\";\nexport { Encoder };\n\n// Utilitiies for Extension Types:\n\nimport { ExtensionCodec } from \"./ExtensionCodec\";\nexport { ExtensionCodec };\nimport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType };\nimport { ExtData } from \"./ExtData\";\nexport { ExtData };\n\nimport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n} from \"./timestamp\";\nexport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n};\n", "/**\n * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object.\n *\n * This can be used with JS designed for browsers to improve reuse of code and\n * allow the use of existing libraries.\n *\n * Usage: include(\"XMLHttpRequest.js\") and use XMLHttpRequest per W3C specs.\n *\n * @author Dan DeFelippi <dan@driverdan.com>\n * @contributor David Ellis <d.f.ellis@ieee.org>\n * @license MIT\n */\n\nvar fs = require('fs');\nvar Url = require('url');\nvar spawn = require('child_process').spawn;\n\n/**\n * Module exports.\n */\n\nmodule.exports = XMLHttpRequest;\n\n// backwards-compat\nXMLHttpRequest.XMLHttpRequest = XMLHttpRequest;\n\n/**\n * `XMLHttpRequest` constructor.\n *\n * Supported options for the `opts` object are:\n *\n * - `agent`: An http.Agent instance; http.globalAgent may be used; if 'undefined', agent usage is disabled\n *\n * @param {Object} opts optional \"options\" object\n */\n\nfunction XMLHttpRequest(opts) {\n \"use strict\";\n\n opts = opts || {};\n\n /**\n * Private variables\n */\n var self = this;\n var http = require('http');\n var https = require('https');\n\n // Holds http.js objects\n var request;\n var response;\n\n // Request settings\n var settings = {};\n\n // Disable header blacklist.\n // Not part of XHR specs.\n var disableHeaderCheck = false;\n\n // Set some default headers\n var defaultHeaders = {\n \"User-Agent\": \"node-XMLHttpRequest\",\n \"Accept\": \"*/*\"\n };\n\n var headers = Object.assign({}, defaultHeaders);\n\n // These headers are not user setable.\n // The following are allowed but banned in the spec:\n // * user-agent\n var forbiddenRequestHeaders = [\n \"accept-charset\",\n \"accept-encoding\",\n \"access-control-request-headers\",\n \"access-control-request-method\",\n \"connection\",\n \"content-length\",\n \"content-transfer-encoding\",\n \"cookie\",\n \"cookie2\",\n \"date\",\n \"expect\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"referer\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"via\"\n ];\n\n // These request methods are not allowed\n var forbiddenRequestMethods = [\n \"TRACE\",\n \"TRACK\",\n \"CONNECT\"\n ];\n\n // Send flag\n var sendFlag = false;\n // Error flag, used when errors occur or abort is called\n var errorFlag = false;\n var abortedFlag = false;\n\n // Event listeners\n var listeners = {};\n\n /**\n * Constants\n */\n\n this.UNSENT = 0;\n this.OPENED = 1;\n this.HEADERS_RECEIVED = 2;\n this.LOADING = 3;\n this.DONE = 4;\n\n /**\n * Public vars\n */\n\n // Current state\n this.readyState = this.UNSENT;\n\n // default ready state change handler in case one is not set or is set late\n this.onreadystatechange = null;\n\n // Result & response\n this.responseText = \"\";\n this.responseXML = \"\";\n this.response = Buffer.alloc(0);\n this.status = null;\n this.statusText = null;\n\n /**\n * Private methods\n */\n\n /**\n * Check if the specified header is allowed.\n *\n * @param string header Header to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpHeader = function(header) {\n return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1);\n };\n\n /**\n * Check if the specified method is allowed.\n *\n * @param string method Request method to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpMethod = function(method) {\n return (method && forbiddenRequestMethods.indexOf(method) === -1);\n };\n\n /**\n * Public methods\n */\n\n /**\n * Open the connection. Currently supports local server requests.\n *\n * @param string method Connection method (eg GET, POST)\n * @param string url URL for the connection.\n * @param boolean async Asynchronous connection. Default is true.\n * @param string user Username for basic authentication (optional)\n * @param string password Password for basic authentication (optional)\n */\n this.open = function(method, url, async, user, password) {\n this.abort();\n errorFlag = false;\n abortedFlag = false;\n\n // Check for valid request method\n if (!isAllowedHttpMethod(method)) {\n throw new Error(\"SecurityError: Request method not allowed\");\n }\n\n settings = {\n \"method\": method,\n \"url\": url.toString(),\n \"async\": (typeof async !== \"boolean\" ? true : async),\n \"user\": user || null,\n \"password\": password || null\n };\n\n setState(this.OPENED);\n };\n\n /**\n * Disables or enables isAllowedHttpHeader() check the request. Enabled by default.\n * This does not conform to the W3C spec.\n *\n * @param boolean state Enable or disable header checking.\n */\n this.setDisableHeaderCheck = function(state) {\n disableHeaderCheck = state;\n };\n\n /**\n * Sets a header for the request.\n *\n * @param string header Header name\n * @param string value Header value\n * @return boolean Header added\n */\n this.setRequestHeader = function(header, value) {\n if (this.readyState != this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN\");\n }\n if (!isAllowedHttpHeader(header)) {\n console.warn('Refused to set unsafe header \"' + header + '\"');\n return false;\n }\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send flag is true\");\n }\n headers[header] = value;\n return true;\n };\n\n /**\n * Gets a header from the server response.\n *\n * @param string header Name of header to get.\n * @return string Text of the header or null if it doesn't exist.\n */\n this.getResponseHeader = function(header) {\n if (typeof header === \"string\"\n && this.readyState > this.OPENED\n && response.headers[header.toLowerCase()]\n && !errorFlag\n ) {\n return response.headers[header.toLowerCase()];\n }\n\n return null;\n };\n\n /**\n * Gets all the response headers.\n *\n * @return string A string with all response headers separated by CR+LF\n */\n this.getAllResponseHeaders = function() {\n if (this.readyState < this.HEADERS_RECEIVED || errorFlag) {\n return \"\";\n }\n var result = \"\";\n\n for (var i in response.headers) {\n // Cookie headers are excluded\n if (i !== \"set-cookie\" && i !== \"set-cookie2\") {\n result += i + \": \" + response.headers[i] + \"\\r\\n\";\n }\n }\n return result.substr(0, result.length - 2);\n };\n\n /**\n * Gets a request header\n *\n * @param string name Name of header to get\n * @return string Returns the request header or empty string if not set\n */\n this.getRequestHeader = function(name) {\n // @TODO Make this case insensitive\n if (typeof name === \"string\" && headers[name]) {\n return headers[name];\n }\n\n return \"\";\n };\n\n /**\n * Sends the request to the server.\n *\n * @param string data Optional data to send as request body.\n */\n this.send = function(data) {\n if (this.readyState != this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: connection must be opened before send() is called\");\n }\n\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send has already been called\");\n }\n\n var ssl = false, local = false;\n var url = Url.parse(settings.url);\n var host;\n // Determine the server\n switch (url.protocol) {\n case 'https:':\n ssl = true;\n // SSL & non-SSL both need host, no break here.\n case 'http:':\n host = url.hostname;\n break;\n\n case 'file:':\n local = true;\n break;\n\n case undefined:\n case '':\n host = \"localhost\";\n break;\n\n default:\n throw new Error(\"Protocol not supported.\");\n }\n\n // Load files off the local filesystem (file://)\n if (local) {\n if (settings.method !== \"GET\") {\n throw new Error(\"XMLHttpRequest: Only GET method is supported\");\n }\n\n if (settings.async) {\n fs.readFile(unescape(url.pathname), function(error, data) {\n if (error) {\n self.handleError(error, error.errno || -1);\n } else {\n self.status = 200;\n self.responseText = data.toString('utf8');\n self.response = data;\n setState(self.DONE);\n }\n });\n } else {\n try {\n this.response = fs.readFileSync(unescape(url.pathname));\n this.responseText = this.response.toString('utf8');\n this.status = 200;\n setState(self.DONE);\n } catch(e) {\n this.handleError(e, e.errno || -1);\n }\n }\n\n return;\n }\n\n // Default to port 80. If accessing localhost on another port be sure\n // to use http://localhost:port/path\n var port = url.port || (ssl ? 443 : 80);\n // Add query string if one is used\n var uri = url.pathname + (url.search ? url.search : '');\n\n // Set the Host header or the server may reject the request\n headers[\"Host\"] = host;\n if (!((ssl && port === 443) || port === 80)) {\n headers[\"Host\"] += ':' + url.port;\n }\n\n // Set Basic Auth if necessary\n if (settings.user) {\n if (typeof settings.password == \"undefined\") {\n settings.password = \"\";\n }\n var authBuf = new Buffer(settings.user + \":\" + settings.password);\n headers[\"Authorization\"] = \"Basic \" + authBuf.toString(\"base64\");\n }\n\n // Set content length header\n if (settings.method === \"GET\" || settings.method === \"HEAD\") {\n data = null;\n } else if (data) {\n headers[\"Content-Length\"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);\n\n if (!headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\n }\n } else if (settings.method === \"POST\") {\n // For a post with no data set Content-Length: 0.\n // This is required by buggy servers that don't meet the specs.\n headers[\"Content-Length\"] = 0;\n }\n\n var agent = opts.agent || false;\n var options = {\n host: host,\n port: port,\n path: uri,\n method: settings.method,\n headers: headers,\n agent: agent\n };\n\n if (ssl) {\n options.pfx = opts.pfx;\n options.key = opts.key;\n options.passphrase = opts.passphrase;\n options.cert = opts.cert;\n options.ca = opts.ca;\n options.ciphers = opts.ciphers;\n options.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true;\n }\n\n // Reset error flag\n errorFlag = false;\n // Handle async requests\n if (settings.async) {\n // Use the proper protocol\n var doRequest = ssl ? https.request : http.request;\n\n // Request is being sent, set send flag\n sendFlag = true;\n\n // As per spec, this is called here for historical reasons.\n self.dispatchEvent(\"readystatechange\");\n\n // Handler for the response\n var responseHandler = function(resp) {\n // Set response var to the response we got back\n // This is so it remains accessable outside this scope\n response = resp;\n // Check for redirect\n // @TODO Prevent looped redirects\n if (response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n // Change URL to the redirect location\n settings.url = response.headers.location;\n var url = Url.parse(settings.url);\n // Set host var in case it's used later\n host = url.hostname;\n // Options for the new request\n var newOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.path,\n method: response.statusCode === 303 ? 'GET' : settings.method,\n headers: headers\n };\n\n if (ssl) {\n newOptions.pfx = opts.pfx;\n newOptions.key = opts.key;\n newOptions.passphrase = opts.passphrase;\n newOptions.cert = opts.cert;\n newOptions.ca = opts.ca;\n newOptions.ciphers = opts.ciphers;\n newOptions.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true;\n }\n\n // Issue the new request\n request = doRequest(newOptions, responseHandler).on('error', errorHandler);\n request.end();\n // @TODO Check if an XHR event needs to be fired here\n return;\n }\n\n setState(self.HEADERS_RECEIVED);\n self.status = response.statusCode;\n\n response.on('data', function(chunk) {\n // Make sure there's some data\n if (chunk) {\n var data = Buffer.from(chunk);\n self.responseText += data.toString('utf8');\n self.response = Buffer.concat([self.response, data]);\n }\n // Don't emit state changes if the connection has been aborted.\n if (sendFlag) {\n setState(self.LOADING);\n }\n });\n\n response.on('end', function() {\n if (sendFlag) {\n // The sendFlag needs to be set before setState is called. Otherwise if we are chaining callbacks\n // there can be a timing issue (the callback is called and a new call is made before the flag is reset).\n sendFlag = false;\n // Discard the 'end' event if the connection has been aborted\n setState(self.DONE);\n }\n });\n\n response.on('error', function(error) {\n self.handleError(error);\n });\n }\n\n // Error handler for the request\n var errorHandler = function(error) {\n self.handleError(error);\n }\n\n // Create the request\n request = doRequest(options, responseHandler).on('error', errorHandler);\n\n if (opts.autoUnref) {\n request.on('socket', (socket) => {\n socket.unref();\n });\n }\n\n // Node 0.4 and later won't accept empty data. Make sure it's needed.\n if (data) {\n request.write(data);\n }\n\n request.end();\n\n self.dispatchEvent(\"loadstart\");\n } else { // Synchronous\n // Create a temporary file for communication with the other Node process\n var contentFile = \".node-xmlhttprequest-content-\" + process.pid;\n var syncFile = \".node-xmlhttprequest-sync-\" + process.pid;\n fs.writeFileSync(syncFile, \"\", \"utf8\");\n // The async request the other Node process executes\n var execString = \"var http = require('http'), https = require('https'), fs = require('fs');\"\n + \"var doRequest = http\" + (ssl ? \"s\" : \"\") + \".request;\"\n + \"var options = \" + JSON.stringify(options) + \";\"\n + \"var responseText = '';\"\n + \"var responseData = Buffer.alloc(0);\"\n + \"var req = doRequest(options, function(response) {\"\n + \"response.on('data', function(chunk) {\"\n + \" var data = Buffer.from(chunk);\"\n + \" responseText += data.toString('utf8');\"\n + \" responseData = Buffer.concat([responseData, data]);\"\n + \"});\"\n + \"response.on('end', function() {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText, data: responseData.toString('base64')}}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"response.on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"}).on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + (data ? \"req.write('\" + JSON.stringify(data).slice(1,-1).replace(/'/g, \"\\\\'\") + \"');\":\"\")\n + \"req.end();\";\n // Start the other Node Process, executing this string\n var syncProc = spawn(process.argv[0], [\"-e\", execString]);\n var statusText;\n while(fs.existsSync(syncFile)) {\n // Wait while the sync file is empty\n }\n self.responseText = fs.readFileSync(contentFile, 'utf8');\n // Kill the child process once the file has data\n syncProc.stdin.end();\n // Remove the temporary file\n fs.unlinkSync(contentFile);\n if (self.responseText.match(/^NODE-XMLHTTPREQUEST-ERROR:/)) {\n // If the file returned an error, handle it\n var errorObj = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-ERROR:/, \"\"));\n self.handleError(errorObj, 503);\n } else {\n // If the file returned okay, parse its data and move to the DONE state\n self.status = self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:([0-9]*),.*/, \"$1\");\n var resp = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:[0-9]*,(.*)/, \"$1\"));\n response = {\n statusCode: self.status,\n headers: resp.data.headers\n };\n self.responseText = resp.data.text;\n self.response = Buffer.from(resp.data.data, 'base64');\n setState(self.DONE, true);\n }\n }\n };\n\n /**\n * Called when an error is encountered to deal with it.\n * @param status {number} HTTP status code to use rather than the default (0) for XHR errors.\n */\n this.handleError = function(error, status) {\n this.status = status || 0;\n this.statusText = error;\n this.responseText = error.stack;\n errorFlag = true;\n setState(this.DONE);\n };\n\n /**\n * Aborts a request.\n */\n this.abort = function() {\n if (request) {\n request.abort();\n request = null;\n }\n\n headers = Object.assign({}, defaultHeaders);\n this.responseText = \"\";\n this.responseXML = \"\";\n this.response = Buffer.alloc(0);\n\n errorFlag = abortedFlag = true\n if (this.readyState !== this.UNSENT\n && (this.readyState !== this.OPENED || sendFlag)\n && this.readyState !== this.DONE) {\n sendFlag = false;\n setState(this.DONE);\n }\n this.readyState = this.UNSENT;\n };\n\n /**\n * Adds an event listener. Preferred method of binding to events.\n */\n this.addEventListener = function(event, callback) {\n if (!(event in listeners)) {\n listeners[event] = [];\n }\n // Currently allows duplicate callbacks. Should it?\n listeners[event].push(callback);\n };\n\n /**\n * Remove an event callback that has already been bound.\n * Only works on the matching funciton, cannot be a copy.\n */\n this.removeEventListener = function(event, callback) {\n if (event in listeners) {\n // Filter will return a new array with the callback removed\n listeners[event] = listeners[event].filter(function(ev) {\n return ev !== callback;\n });\n }\n };\n\n /**\n * Dispatch any events, including both \"on\" methods and events attached using addEventListener.\n */\n this.dispatchEvent = function (event) {\n if (typeof self[\"on\" + event] === \"function\") {\n if (this.readyState === this.DONE && settings.async)\n setImmediate(function() { self[\"on\" + event]() })\n else\n self[\"on\" + event]()\n }\n if (event in listeners) {\n for (let i = 0, len = listeners[event].length; i < len; i++) {\n if (this.readyState === this.DONE)\n setImmediate(function() { listeners[event][i].call(self) })\n else\n listeners[event][i].call(self)\n }\n }\n };\n\n /**\n * Changes readyState and calls onreadystatechange.\n *\n * @param int state New state\n */\n var setState = function(state) {\n if ((self.readyState === state) || (self.readyState === self.UNSENT && abortedFlag))\n return\n\n self.readyState = state;\n\n if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) {\n self.dispatchEvent(\"readystatechange\");\n }\n\n if (self.readyState === self.DONE) {\n let fire\n\n if (abortedFlag)\n fire = \"abort\"\n else if (errorFlag)\n fire = \"error\"\n else\n fire = \"load\"\n\n self.dispatchEvent(fire)\n\n // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie)\n self.dispatchEvent(\"loadend\");\n }\n };\n};\n", "/**\n * Custom Error classes that shall be raised by webR.\n * @module Error\n */\n\n/**\n * A general error raised by webR.\n */\nexport class WebRError extends Error {\n constructor(msg: string) {\n super(msg);\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Exceptions raised on the webR worker thread that have been forwarded to the\n * main thread through the communication channel.\n */\nexport class WebRWorkerError extends WebRError {}\n\n/**\n * Exceptions related to issues with the webR communication channel.\n */\nexport class WebRChannelError extends WebRError {}\n\n/**\n * Exceptions related to issues with webR object payloads.\n */\nexport class WebRPayloadError extends WebRError {}\n", "import { WebRError } from './error';\n\ninterface Process {\n browser: string | undefined;\n release: { [key: string]: string };\n}\ndeclare let process: Process;\n\nexport const IN_NODE =\n typeof process !== 'undefined' &&\n process.release &&\n process.release.name === 'node';\n\n// Adapted from https://github.com/pyodide/pyodide/blob/main/src/js/compat.ts\nexport let loadScript: (url: string) => Promise<void>;\nif (globalThis.document) {\n loadScript = (url) =>\n new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => resolve();\n script.onerror = reject;\n document.head.appendChild(script);\n });\n} else if (globalThis.importScripts) {\n loadScript = async (url) => {\n try {\n globalThis.importScripts(url);\n } catch (e) {\n if (e instanceof TypeError) {\n await import(url);\n } else {\n throw e;\n }\n }\n };\n} else if (IN_NODE) {\n loadScript = async (url: string) => {\n const nodePathMod = (await import('path')).default;\n await import(nodePathMod.resolve(url));\n };\n} else {\n throw new WebRError('Cannot determine runtime environment');\n}\n", "import { IN_NODE } from './compat';\nimport { WebRError } from './error';\n\nexport type ResolveFn = (_value?: unknown) => void;\nexport type RejectFn = (_reason?: any) => void;\n\nexport function promiseHandles() {\n const out = {\n resolve: (_value?: unknown) => {},\n reject: (_reason?: any) => {},\n promise: null as unknown as Promise<unknown>,\n };\n\n const promise = new Promise((resolve, reject) => {\n out.resolve = resolve;\n out.reject = reject;\n });\n out.promise = promise;\n\n return out;\n}\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function replaceInObject<T>(\n obj: T | T[],\n test: (obj: any) => boolean,\n replacer: (obj: any, ...replacerArgs: any[]) => unknown,\n ...replacerArgs: unknown[]\n): T | T[] {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n if (test(obj)) {\n return replacer(obj, ...replacerArgs) as T;\n }\n if (Array.isArray(obj) || ArrayBuffer.isView(obj)) {\n return (obj as unknown[]).map((v) =>\n replaceInObject(v, test, replacer, ...replacerArgs)\n ) as T[];\n }\n return Object.fromEntries(\n Object.entries(obj).map(([k, v], i) => [k, replaceInObject(v, test, replacer, ...replacerArgs)])\n ) as T;\n}\n\n/* Workaround for loading a cross-origin script.\n *\n * When fetching a worker script, the fetch is required by the spec to\n * use \"same-origin\" mode. This is to avoid loading a worker with a\n * cross-origin global scope, which can allow for a cross-origin\n * restriction bypass.\n *\n * When the fetch URL begins with 'http', we assume the request is\n * cross-origin. We download the content of the URL using a XHR first,\n * create a blob URL containing the requested content, then load the\n * blob URL as a script.\n *\n * The origin of a blob URL is the same as that of the environment that\n * created the URL, and so the global scope of the resulting worker is\n * no longer cross-origin. In that case, the cross-origin restriction\n * bypass is not possible, and the script is permitted to be loaded.\n */\nexport function newCrossOriginWorker(url: string, cb: (worker: Worker) => void): void {\n const req = new XMLHttpRequest();\n req.open('get', url, true);\n req.onload = () => {\n const worker = new Worker(URL.createObjectURL(new Blob([req.responseText])));\n cb(worker);\n };\n req.send();\n}\n\nexport function isCrossOrigin(urlString: string) {\n if (IN_NODE) return false;\n const url1 = new URL(location.href);\n const url2 = new URL(urlString, location.origin);\n if (url1.host === url2.host && url1.port === url2.port && url1.protocol === url2.protocol) {\n return false;\n }\n return true;\n}\n\nexport function throwUnreachable(context?: string) {\n let msg = 'Reached the unreachable';\n msg = msg + (context ? ': ' + context : '.');\n\n throw new WebRError(msg);\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nexport const SZ_BUF_DOESNT_FIT = 0;\nexport const SZ_BUF_FITS_IDX = 1;\nexport const SZ_BUF_SIZE_IDX = 0;\n\nexport interface Endpoint extends EventSource {\n postMessage(message: any, transfer?: Transferable[]): void;\n start?: () => void;\n}\n\nexport interface EventSource {\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: {}): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: {}\n ): void;\n}\n\nexport function toWireValue(value: any): [any, Transferable[]] {\n return [value, transferCache.get(value) || []];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport type UUID = string;\n\nexport function isUUID(x: any): x is UUID {\n return typeof x === 'string' && x.length === UUID_LENGTH;\n}\n\nexport const UUID_LENGTH = 63;\n\nexport function generateUUID(): UUID {\n const result = Array.from({ length: 4 }, randomSegment).join('-');\n if (result.length !== UUID_LENGTH) {\n throw new Error('comlink internal error: UUID has the wrong length');\n }\n return result;\n}\n\nfunction randomSegment() {\n let result = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16);\n const pad = 15 - result.length;\n if (pad > 0) {\n result = Array.from({ length: pad }, () => 0).join('') + result;\n }\n return result;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport { Endpoint, SZ_BUF_FITS_IDX, SZ_BUF_SIZE_IDX, generateUUID } from './task-common';\n\nimport { sleep } from '../utils';\nimport { SyncRequestData } from './message';\nimport { encode } from '@msgpack/msgpack';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\n\nconst encoder = new TextEncoder();\n\n/**\n * Respond to a blocking request. Most of the work has already been done in\n * asynclink, we are just responsible here for getting the return value back to\n * the requester through this slightly convoluted Atomics protocol.\n * @param {Endpoint} endpoint A message port to receive messages from. Other\n * thread is blocked, so we can't send messages back.\n * @param {SyncRequestData} data The message that was recieved. We will use it\n * to read out the buffers to write the answer into. NOTE: requester\n * owns buffers.\n * @param {any} response The value we want to send back to the requester. We\n * have to encode it into data_buffer.\n */\nexport async function syncResponse(endpoint: Endpoint, data: SyncRequestData, response: any) {\n try {\n let { taskId, sizeBuffer, dataBuffer, signalBuffer } = data;\n // console.warn(msg);\n\n const bytes = encode(response);\n const fits = bytes.length <= dataBuffer.length;\n\n Atomics.store(sizeBuffer, SZ_BUF_SIZE_IDX, bytes.length);\n Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +fits);\n if (!fits) {\n // console.log(\" need larger buffer\", taskId)\n // Request larger buffer\n const [uuid, dataPromise] = requestResponseMessage(endpoint);\n\n // Write UUID into dataBuffer so syncRequest knows where to respond to.\n dataBuffer.set(encoder.encode(uuid));\n await signalRequester(signalBuffer, taskId!);\n\n // Wait for response with new bigger dataBuffer\n dataBuffer = (await dataPromise).dataBuffer as Uint8Array;\n }\n\n // Encode result into dataBuffer\n dataBuffer.set(bytes);\n Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +true);\n\n // console.log(\" signaling completion\", taskId)\n await signalRequester(signalBuffer, taskId as number);\n } catch (e) {\n console.warn(e);\n }\n}\n\nfunction requestResponseMessage(ep: Endpoint): [string, Promise<any>] {\n const id = generateUUID();\n return [\n id,\n new Promise((resolve) => {\n if (IN_NODE) {\n (ep as unknown as NodeWorker).once('message', (message: any) => {\n if (!message.id || message.id !== id) {\n return;\n }\n resolve(message);\n });\n } else {\n ep.addEventListener('message', function l(ev: MessageEvent) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener('message', l as EventListenerOrEventListenerObject);\n resolve(ev.data);\n } as EventListenerOrEventListenerObject);\n }\n if (ep.start) {\n ep.start();\n }\n }),\n ];\n}\n\nasync function signalRequester(signalBuffer: Int32Array, taskId: number) {\n const index = (taskId >> 1) % 32;\n let sleepTime = 1;\n while (Atomics.compareExchange(signalBuffer, index + 1, 0, taskId) !== 0) {\n // No Atomics.asyncWait except on Chrome =(\n await sleep(sleepTime);\n if (sleepTime < 32) {\n // exponential backoff\n sleepTime *= 2;\n }\n }\n Atomics.or(signalBuffer, 0, 1 << index);\n Atomics.notify(signalBuffer, 0);\n}\n", "// From https://stackoverflow.com/questions/47157428/how-to-implement-a-pseudo-blocking-async-queue-in-js-ts\n/**\n * @module Queue\n */\n\n/**\n * Asynchronous queue mechanism to be used by the communication channels.\n * @typeParam T The type of item to be stored in the queue.\n */\nexport class AsyncQueue<T> {\n #promises: Promise<T>[];\n #resolvers: ((t: T) => void)[];\n\n constructor() {\n this.#resolvers = [];\n this.#promises = [];\n }\n\n reset() {\n this.#resolvers = [];\n this.#promises = [];\n }\n\n put(t: T) {\n if (!this.#resolvers.length) {\n this.#add();\n }\n const resolve = this.#resolvers.shift()!;\n resolve(t);\n }\n\n async get() {\n if (!this.#promises.length) {\n this.#add();\n }\n const promise = this.#promises.shift()!;\n return promise;\n }\n\n isEmpty() {\n return !this.#promises.length;\n }\n\n isBlocked() {\n return !!this.#resolvers.length;\n }\n\n get length() {\n return this.#promises.length - this.#resolvers.length;\n }\n\n #add() {\n this.#promises.push(\n new Promise((resolve) => {\n this.#resolvers.push(resolve);\n })\n );\n }\n}\n", "/**\n * WebR communication channel messaging and request types.\n * @module Message\n */\nimport { generateUUID, transfer, UUID } from './task-common';\n\n/** A webR communication channel message. */\nexport interface Message {\n type: string;\n data?: any;\n}\n\n/** A webR communication channel request. */\nexport interface Request {\n type: 'request';\n data: {\n uuid: UUID;\n msg: Message;\n };\n}\n\n/** A webR communication channel response. */\nexport interface Response {\n type: 'response';\n data: {\n uuid: UUID;\n resp: unknown;\n };\n}\n\n/** @internal */\nexport function newRequest(msg: Message, transferables?: [Transferable]): Request {\n return newRequestResponseMessage(\n {\n type: 'request',\n data: {\n uuid: generateUUID(),\n msg: msg,\n },\n },\n transferables\n );\n}\n\n/** @internal */\nexport function newResponse(uuid: UUID, resp: unknown, transferables?: [Transferable]): Response {\n return newRequestResponseMessage(\n {\n type: 'response',\n data: {\n uuid,\n resp,\n },\n },\n transferables\n );\n}\n\n/** @internal */\nfunction newRequestResponseMessage<T>(msg: T, transferables?: [Transferable]): T {\n // Signal to Synclink that the data contains objects we wish to\n // transfer, as in `postMessage()`\n if (transferables) {\n transfer(msg, transferables);\n }\n return msg;\n}\n\n/** A webR communication channel sync-request.\n * @internal\n */\nexport interface SyncRequest {\n type: 'sync-request';\n data: {\n msg: Message;\n reqData: SyncRequestData;\n };\n}\n\n/** Transfer data required when using sync-request with SharedArrayBuffer.\n * @internal */\nexport interface SyncRequestData {\n taskId?: number;\n sizeBuffer: Int32Array;\n signalBuffer: Int32Array;\n dataBuffer: Uint8Array;\n}\n\n/** @internal */\nexport function newSyncRequest(msg: Message, data: SyncRequestData): SyncRequest {\n return {\n type: 'sync-request',\n data: { msg, reqData: data },\n };\n}\n", "/**\n * Types containing references to R objects, raw data or errors over the webR\n * communication channel.\n * @module Payload\n */\nimport { WebRDataRaw, RPtr, RType } from './robj';\nimport { WebRWorkerError } from './error';\n\nexport type WebRPayloadRaw = {\n obj: WebRDataRaw;\n payloadType: 'raw';\n};\n\nexport type WebRPayloadPtr = {\n obj: {\n type?: RType;\n ptr: RPtr;\n methods?: string[];\n };\n payloadType: 'ptr';\n};\n\nexport type WebRPayloadErr = {\n obj: {\n message: string;\n name: string;\n stack?: string;\n };\n payloadType: 'err';\n};\n\n// On the main side we shouldn't see any error payload as these are\n// rethrown as JS exceptions\nexport type WebRPayload = WebRPayloadRaw | WebRPayloadPtr;\nexport type WebRPayloadWorker = WebRPayloadRaw | WebRPayloadPtr | WebRPayloadErr;\n\n/* @internal */\nexport function webRPayloadAsError(payload: WebRPayloadErr): Error {\n const e = new WebRWorkerError(payload.obj.message);\n // Forward the error name to the main thread, if more specific than a general `Error`\n if (payload.obj.name !== 'Error') {\n e.name = payload.obj.name;\n }\n e.stack = payload.obj.stack;\n return e;\n}\n\n/**\n * Test for an WebRPayload instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayload.\n */\nexport function isWebRPayload(value: any): value is WebRPayload {\n return value && typeof value === 'object' && 'payloadType' in value && 'obj' in value;\n}\n\n/**\n * Test for an WebRPayloadPtr instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayloadPtr.\n */\nexport function isWebRPayloadPtr(value: any): value is WebRPayloadPtr {\n return isWebRPayload(value) && value.payloadType === 'ptr';\n}\n\n/**\n * Test for an WebRPayloadRaw instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayloadRaw.\n */\nexport function isWebRPayloadRaw(value: any): value is WebRPayloadRaw {\n return isWebRPayload(value) && value.payloadType === 'raw';\n}\n", "/**\n * Interfaces for the webR main and worker thread communication channels.\n * @module Channel\n */\n\nimport { promiseHandles, ResolveFn, RejectFn } from '../utils';\nimport { AsyncQueue } from './queue';\nimport { Message, newRequest, Response } from './message';\nimport { WebRPayload, WebRPayloadWorker, webRPayloadAsError } from '../payload';\n\n// The channel structure is asymetric:\n//\n// - The main thread maintains the input and output queues. All\n// messages sent from main are stored in the input queue. The input\n// queue is pull-based, it's the worker that initiates a transfer\n// via a sync-request.\n//\n// The output queue is filled at the initiative of the worker. The\n// main thread asynchronously reads from this queue, typically in an\n// async infloop.\n//\n// - The worker synchronously reads from the input queue. Reading a\n// message blocks until an input is available. Writing a message to\n// the output queue is equivalent to calling `postMessage()` and\n// returns immediately.\n//\n// Note that the messages sent from main to worker need to be\n// serialised. There is no structured cloning involved, and\n// ArrayBuffers can't be transferred, only copied.\n\nexport abstract class ChannelMain {\n inputQueue = new AsyncQueue<Message>();\n outputQueue = new AsyncQueue<Message>();\n systemQueue = new AsyncQueue<Message>();\n\n #parked = new Map<string, { resolve: ResolveFn; reject: RejectFn }>();\n\n abstract initialised: Promise<unknown>;\n abstract close(): void;\n abstract interrupt(): void;\n\n async read(): Promise<Message> {\n return await this.outputQueue.get();\n }\n\n async flush(): Promise<Message[]> {\n const msg: Message[] = [];\n while (!this.outputQueue.isEmpty()) {\n msg.push(await this.read());\n }\n return msg;\n }\n\n async readSystem(): Promise<Message> {\n return await this.systemQueue.get();\n }\n\n write(msg: Message): void {\n this.inputQueue.put(msg);\n }\n\n async request(msg: Message, transferables?: [Transferable]): Promise<WebRPayload> {\n const req = newRequest(msg, transferables);\n\n const { resolve, reject, promise } = promiseHandles();\n this.#parked.set(req.data.uuid, { resolve, reject });\n\n this.write(req);\n return promise as Promise<WebRPayload>;\n }\n\n protected putClosedMessage(): void {\n this.outputQueue.put({ type: 'closed' });\n }\n\n protected resolveResponse(msg: Response) {\n const uuid = msg.data.uuid;\n const handles = this.#parked.get(uuid);\n\n if (handles) {\n const payload = msg.data.resp as WebRPayloadWorker;\n this.#parked.delete(uuid);\n\n if (payload.payloadType === 'err') {\n handles.reject(webRPayloadAsError(payload));\n } else {\n handles.resolve(payload);\n }\n } else {\n console.warn(\"Can't find request.\");\n }\n }\n}\n\nexport interface ChannelWorker {\n resolve(): void;\n write(msg: Message, transfer?: [Transferable]): void;\n writeSystem(msg: Message, transfer?: [Transferable]): void;\n read(): Message;\n handleInterrupt(): void;\n setInterrupt(interrupt: () => void): void;\n run(args: string[]): void;\n inputOrDispatch: () => number;\n setDispatchHandler: (dispatch: (msg: Message) => void) => void;\n}\n\n/**\n * Handler functions dealing with setup and commmunication over a Service Worker.\n */\nexport interface ServiceWorkerHandlers {\n handleActivate: (this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any;\n handleFetch: (this: ServiceWorkerGlobalScope, ev: FetchEvent) => any;\n handleInstall: (this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any;\n handleMessage: (this: ServiceWorkerGlobalScope, ev: ExtendableMessageEvent) => any;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport {\n Endpoint,\n SZ_BUF_DOESNT_FIT,\n SZ_BUF_FITS_IDX,\n SZ_BUF_SIZE_IDX,\n UUID_LENGTH,\n} from './task-common';\n\nimport { newSyncRequest, Message } from './message';\nimport { decode } from '@msgpack/msgpack';\n\nconst decoder = new TextDecoder('utf-8');\n\nexport class SyncTask {\n endpoint: Endpoint;\n msg: Message;\n transfers: Transferable[];\n\n #scheduled = false;\n #resolved: boolean;\n #result?: any;\n #exception?: any;\n\n // sync only\n taskId?: number;\n #syncGen?: Generator<void, unknown, void>;\n sizeBuffer?: Int32Array;\n signalBuffer?: Int32Array;\n syncifier = new _Syncifier();\n\n constructor(endpoint: Endpoint, msg: Message, transfers: Transferable[] = []) {\n this.endpoint = endpoint;\n this.msg = msg;\n this.transfers = transfers;\n this.#resolved = false;\n }\n\n scheduleSync() {\n if (this.#scheduled) {\n return;\n }\n this.#scheduled = true;\n\n this.syncifier.scheduleTask(this);\n this.#syncGen = this.doSync();\n this.#syncGen.next();\n return this;\n }\n\n poll() {\n if (!this.#scheduled) {\n throw new Error('Task not synchronously scheduled');\n }\n\n const { done, value } = this.#syncGen!.next();\n if (!done) {\n return false;\n }\n\n this.#resolved = true;\n this.#result = value;\n\n return true;\n }\n\n *doSync() {\n // just use syncRequest.\n const { endpoint, msg, transfers } = this;\n const sizeBuffer = new Int32Array(new SharedArrayBuffer(8));\n const signalBuffer = this.signalBuffer!;\n const taskId = this.taskId;\n\n // Ensure status is cleared. We will notify\n let dataBuffer = acquireDataBuffer(UUID_LENGTH);\n // console.log(\"===requesting\", taskId);\n\n const syncMsg = newSyncRequest(msg, {\n sizeBuffer,\n dataBuffer,\n signalBuffer,\n taskId,\n });\n\n endpoint.postMessage(syncMsg, transfers);\n yield;\n\n if (Atomics.load(sizeBuffer, SZ_BUF_FITS_IDX) === SZ_BUF_DOESNT_FIT) {\n // There wasn't enough space, make a bigger dataBuffer.\n // First read uuid for response out of current dataBuffer\n const id = decoder.decode(dataBuffer.slice(0, UUID_LENGTH));\n releaseDataBuffer(dataBuffer);\n const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n dataBuffer = acquireDataBuffer(size);\n // console.log(\"===bigger data buffer\", taskId);\n endpoint.postMessage({ id, dataBuffer });\n yield;\n }\n\n const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n // console.log(\"===completing\", taskId);\n return decode(dataBuffer.slice(0, size));\n }\n\n get result() {\n if (this.#exception) {\n throw this.#exception;\n }\n // console.log(this.#resolved);\n if (this.#resolved) {\n return this.#result as unknown;\n }\n throw new Error('Not ready.');\n }\n\n syncify(): any {\n this.scheduleSync();\n this.syncifier.syncifyTask(this);\n return this.result;\n }\n}\n\nclass _Syncifier {\n nextTaskId: Int32Array;\n signalBuffer: Int32Array;\n tasks: Map<number, SyncTask>;\n\n constructor() {\n this.nextTaskId = new Int32Array([1]);\n this.signalBuffer = new Int32Array(new SharedArrayBuffer(32 * 4 + 4));\n this.tasks = new Map();\n }\n\n scheduleTask(task: SyncTask) {\n task.taskId = this.nextTaskId[0];\n this.nextTaskId[0] += 2;\n task.signalBuffer = this.signalBuffer;\n this.tasks.set(task.taskId, task);\n }\n\n waitOnSignalBuffer() {\n const timeout = 50;\n for (;;) {\n const status = Atomics.wait(this.signalBuffer, 0, 0, timeout);\n switch (status) {\n case 'ok':\n case 'not-equal':\n return;\n case 'timed-out':\n if (interruptBuffer[0] !== 0) {\n handleInterrupt();\n }\n break;\n default:\n throw new Error('Unreachable');\n }\n }\n }\n\n *tasksIdsToWakeup() {\n const flag = Atomics.load(this.signalBuffer, 0);\n for (let i = 0; i < 32; i++) {\n const bit = 1 << i;\n if (flag & bit) {\n Atomics.and(this.signalBuffer, 0, ~bit);\n const wokenTask = Atomics.exchange(this.signalBuffer, i + 1, 0);\n yield wokenTask;\n }\n }\n }\n\n pollTasks(task?: SyncTask) {\n let result = false;\n for (const wokenTaskId of this.tasksIdsToWakeup()) {\n // console.log(\"poll task\", wokenTaskId, \"looking for\",task);\n const wokenTask = this.tasks.get(wokenTaskId);\n if (!wokenTask) {\n throw new Error(`Assertion error: unknown taskId ${wokenTaskId}.`);\n }\n if (wokenTask.poll()) {\n // console.log(\"completed task \", wokenTaskId, wokenTask, wokenTask._result);\n this.tasks.delete(wokenTaskId);\n if (wokenTask === task) {\n result = true;\n }\n }\n }\n return result;\n }\n\n syncifyTask(task: SyncTask) {\n for (;;) {\n this.waitOnSignalBuffer();\n // console.log(\"syncifyTask:: woke\");\n if (this.pollTasks(task)) {\n return;\n }\n }\n }\n}\n\nconst dataBuffers: Uint8Array[][] = [];\n\nfunction acquireDataBuffer(size: number): Uint8Array {\n const powerof2 = Math.ceil(Math.log2(size));\n if (!dataBuffers[powerof2]) {\n dataBuffers[powerof2] = [];\n }\n const result = dataBuffers[powerof2].pop();\n if (result) {\n result.fill(0);\n return result;\n }\n return new Uint8Array(new SharedArrayBuffer(2 ** powerof2));\n}\n\nfunction releaseDataBuffer(buffer: Uint8Array) {\n const powerof2 = Math.ceil(Math.log2(buffer.byteLength));\n dataBuffers[powerof2].push(buffer);\n}\n\nlet interruptBuffer = new Int32Array(new ArrayBuffer(4));\n\nlet handleInterrupt = (): void => {\n interruptBuffer[0] = 0;\n throw new Error('Interrupted!');\n};\n\n/**\n * Sets the interrupt handler. This is called when the computation is\n * interrupted. Should zero the interrupt buffer and throw an exception.\n * @internal\n */\nexport function setInterruptHandler(handler: () => void) {\n handleInterrupt = handler;\n}\n\n/**\n * Sets the interrupt buffer. Should be a shared array buffer. When element 0\n * is set non-zero it signals an interrupt.\n * @internal\n */\nexport function setInterruptBuffer(buffer: ArrayBufferLike) {\n interruptBuffer = new Int32Array(buffer);\n}\n", "import type { RPtr, RTypeNumber } from './robj';\nimport type { UnwindProtectException } from './utils-r';\n\nexport interface Module extends EmscriptenModule {\n /* Add mkdirTree to FS namespace, missing from @types/emscripten at the\n * time of writing.\n */\n FS: typeof FS & {\n mkdirTree(path: string): void;\n };\n ENV: { [key: string]: string };\n GOT: {\n [key: string]: {required: boolean; value: number};\n }\n createLazyFilesystem: () => void;\n monitorRunDependencies: (n: number) => void;\n noImageDecoding: boolean;\n noAudioDecoding: boolean;\n noWasmDecoding: boolean;\n setPrompt: (prompt: string) => void;\n canvasExec: (op: string) => void;\n downloadFileContent: (\n URL: string,\n headers: Array<string>\n ) => {\n status: number;\n response: string | ArrayBuffer;\n };\n // Exported Emscripten JS API\n allocateUTF8: typeof allocateUTF8;\n allocateUTF8OnStack: typeof allocateUTF8OnStack;\n getValue: typeof getValue;\n setValue: typeof setValue;\n UTF8ToString: typeof UTF8ToString;\n callMain: (args: string[]) => void;\n getWasmTableEntry: (entry: number) => Function;\n // R symbols from Rinternals.h\n _ATTRIB: (ptr: RPtr) => RPtr;\n _CAR: (ptr: RPtr) => RPtr;\n _CDR: (ptr: RPtr) => RPtr;\n _CLOENV: (ptr: RPtr) => RPtr;\n _COMPLEX: (ptr: RPtr) => RPtr;\n _FRAME: (ptr: RPtr) => RPtr;\n _INTEGER: (ptr: RPtr) => RPtr;\n _INTERNAL: (ptr: RPtr) => RPtr;\n _LENGTH: (ptr: RPtr) => number;\n _LOGICAL: (ptr: RPtr) => RPtr;\n _PRINTNAME: (ptr: RPtr) => RPtr;\n _R_CHAR: (ptr: RPtr) => RPtr;\n _RAW: (ptr: RPtr) => RPtr;\n _REAL: (ptr: RPtr) => RPtr;\n _SETCAR: (x: RPtr, y: RPtr) => void;\n _STRING_ELT: (ptr: RPtr, idx: number) => RPtr;\n _STRING_PTR: (ptr: RPtr) => RPtr;\n _SYMVALUE: (ptr: RPtr) => RPtr;\n _TAG: (ptr: RPtr) => RPtr;\n _TYPEOF: (ptr: RPtr) => RPtr;\n _VECTOR_ELT: (ptr: RPtr, idx: number) => RPtr;\n _R_lsInternal3: (env: RPtr, all: number, sorted: number) => RPtr;\n _R_MakeExternalPtr: (p: number, tag: RPtr, prot: RPtr) => RPtr;\n _R_NewEnv: (enclos: RPtr, hash: number, size: number) => RPtr;\n _R_ParseEvalString: (code: number, env: RPtr) => RPtr;\n _R_PreserveObject: (ptr: RPtr) => void;\n _R_ReleaseObject: (ptr: RPtr) => void;\n _Rf_ScalarReal: (n: number) => RPtr;\n _Rf_ScalarLogical: (l: number) => RPtr;\n _Rf_ScalarInteger: (n: number) => RPtr;\n _Rf_ScalarString: (s: string) => RPtr;\n _Rf_allocList: (len: number) => RPtr;\n _Rf_allocVector: (type: RTypeNumber, len: number) => RPtr;\n _Rf_defineVar: (symbol: RPtr, value: RPtr, env: RPtr) => void;\n _Rf_error: (msg: EmPtr) => void;\n _Rf_eval: (call: RPtr, env: RPtr) => RPtr;\n _Rf_findVarInFrame: (rho: RPtr, symbol: RPtr) => RPtr;\n _Rf_listAppend: (source: RPtr, target: RPtr) => RPtr;\n _Rf_getAttrib: (ptr1: RPtr, ptr2: RPtr) => RPtr;\n _Rf_install: (ptr: number) => RPtr;\n _Rf_installTrChar: (name: RPtr) => RPtr;\n _Rf_lang1: (ptr1: RPtr) => RPtr;\n _Rf_lang2: (ptr1: RPtr, ptr2: RPtr) => RPtr;\n _Rf_lang3: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;\n _Rf_lang4: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr) => RPtr;\n _Rf_lang5: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr) => RPtr;\n _Rf_lang6: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr, ptr6: RPtr) => RPtr;\n _Rf_mkChar: (ptr: number) => RPtr;\n _Rf_mkString: (ptr: number) => RPtr;\n _Rf_onintr: () => void;\n _Rf_protect: (ptr: RPtr) => RPtr;\n _R_ContinueUnwind: (cont: RPtr) => never;\n _R_ProtectWithIndex: (ptr1: RPtr, ptr2: RPtr) => void;\n _R_Reprotect: (ptr1: RPtr, ptr2: RPtr) => void;\n _Rf_setAttrib: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;\n _Rf_unprotect: (n: number) => void;\n _Rf_unprotect_ptr: (ptr: RPtr) => void;\n _R_BaseEnv: RPtr;\n _R_BracketSymbol: RPtr;\n _R_Bracket2Symbol: RPtr;\n _R_DollarSymbol: RPtr;\n _R_EmptyEnv: RPtr;\n _R_FalseValue: RPtr;\n _R_GlobalEnv: RPtr;\n _R_Interactive: RPtr;\n _R_NaInt: RPtr;\n _R_NaReal: RPtr;\n _R_NaString: RPtr;\n _R_LogicalNAValue: RPtr;\n _R_NilValue: RPtr;\n _R_TrueValue: RPtr;\n _R_NamesSymbol: RPtr;\n _R_UnboundValue: RPtr;\n _SET_STRING_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;\n _SET_VECTOR_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;\n // TODO: Namespace all webR properties\n webr: {\n UnwindProtectException: typeof UnwindProtectException;\n readConsole: () => number;\n resolveInit: () => void;\n handleEvents: () => void;\n evalJs: (code: RPtr) => number;\n setTimeoutWasm: (ptr: EmPtr, data: EmPtr, delay: number) => void;\n };\n}\n\nexport const Module = {} as Module;\n\nexport type EmPtr = ReturnType<typeof Module.allocateUTF8>;\n\nexport interface DictEmPtrs {\n [key: string]: EmPtr;\n}\n\nexport function dictEmFree(dict: { [key: string | number]: EmPtr }) {\n Object.keys(dict).forEach((key) => Module._free(dict[key]));\n}\n", "import { promiseHandles, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport { Message, Response, SyncRequest } from './message';\nimport { Endpoint } from './task-common';\nimport { syncResponse } from './task-main';\nimport { ChannelMain, ChannelWorker } from './channel';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\nimport { WebRChannelError } from '../error';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class SharedBufferChannelMain extends ChannelMain {\n #interruptBuffer?: Int32Array;\n\n initialised: Promise<unknown>;\n resolve: (_?: unknown) => void;\n close = () => {};\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#handleEventsFromWorker(worker);\n this.close = () => {\n worker.terminate();\n this.putClosedMessage();\n };\n const msg = {\n type: 'init',\n data: { config, channelType: ChannelType.SharedArrayBuffer },\n } as Message;\n worker.postMessage(msg);\n };\n\n if (isCrossOrigin(config.baseUrl)) {\n newCrossOriginWorker(`${config.baseUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.baseUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n interrupt() {\n if (!this.#interruptBuffer) {\n throw new WebRChannelError('Failed attempt to interrupt before initialising interruptBuffer');\n }\n this.inputQueue.reset();\n this.#interruptBuffer[0] = 1;\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.#interruptBuffer = new Int32Array(message.data as SharedArrayBuffer);\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'sync-request': {\n const msg = message as SyncRequest;\n const payload = msg.data.msg;\n const reqData = msg.data.reqData;\n\n switch (payload.type) {\n case 'read': {\n const response = await this.inputQueue.get();\n await syncResponse(worker, reqData, response);\n break;\n }\n default:\n throw new WebRChannelError(`Unsupported request type '${payload.type}'.`);\n }\n return;\n }\n case 'request':\n throw new WebRChannelError(\n \"Can't send messages of type 'request' from a worker. Please Use 'sync-request' instead.\"\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { SyncTask, setInterruptHandler, setInterruptBuffer } from './task-worker';\nimport { Module } from '../emscripten';\n\nexport class SharedBufferChannelWorker implements ChannelWorker {\n #ep: Endpoint;\n #dispatch: (msg: Message) => void = () => 0;\n #interruptBuffer = new Int32Array(new SharedArrayBuffer(4));\n #interrupt = () => {};\n\n constructor() {\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n setInterruptBuffer(this.#interruptBuffer.buffer);\n setInterruptHandler(() => this.handleInterrupt());\n }\n\n resolve() {\n this.write({ type: 'resolve', data: this.#interruptBuffer.buffer });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n read(): Message {\n const msg = { type: 'read' } as Message;\n const task = new SyncTask(this.#ep, msg);\n return task.syncify() as Message;\n }\n\n inputOrDispatch(): number {\n for (;;) {\n const msg = this.read();\n if (msg.type === 'stdin') {\n return Module.allocateUTF8(msg.data as string);\n }\n this.#dispatch(msg);\n }\n }\n\n run(args: string[]) {\n Module.callMain(args);\n }\n\n setInterrupt(interrupt: () => void) {\n this.#interrupt = interrupt;\n }\n\n handleInterrupt() {\n if (this.#interruptBuffer[0] !== 0) {\n this.#interruptBuffer[0] = 0;\n this.#interrupt();\n }\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n}\n", "import { promiseHandles, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport {\n Message,\n newRequest,\n Response,\n Request,\n newResponse,\n} from './message';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { Endpoint } from './task-common';\nimport { ChannelMain, ChannelWorker } from './channel';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\nimport { WebRChannelError } from '../error';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class ServiceWorkerChannelMain extends ChannelMain {\n initialised: Promise<unknown>;\n\n resolve: (_?: unknown) => void;\n close = () => {};\n\n #syncMessageCache = new Map<string, Message>();\n #registration?: ServiceWorkerRegistration;\n #interrupted = false;\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#handleEventsFromWorker(worker);\n this.close = () => {\n worker.terminate();\n this.putClosedMessage();\n };\n this.#registerServiceWorker(`${config.serviceWorkerUrl}webr-serviceworker.js`).then(\n (clientId) => {\n const msg = {\n type: 'init',\n data: {\n config,\n channelType: ChannelType.ServiceWorker,\n clientId,\n location: window.location.href,\n },\n } as Message;\n worker.postMessage(msg);\n }\n );\n };\n\n if (isCrossOrigin(config.serviceWorkerUrl)) {\n newCrossOriginWorker(`${config.serviceWorkerUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.serviceWorkerUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n activeRegistration(): ServiceWorker {\n if (!this.#registration?.active) {\n throw new WebRChannelError('Attempted to obtain a non-existent active registration.');\n }\n return this.#registration.active;\n }\n\n interrupt() {\n this.#interrupted = true;\n }\n\n async #registerServiceWorker(url: string): Promise<string> {\n // Register service worker\n this.#registration = await navigator.serviceWorker.register(url);\n await navigator.serviceWorker.ready;\n window.addEventListener('beforeunload', () => {\n this.#registration?.unregister();\n });\n\n // Ensure we can communicate with service worker and we have a client ID\n const clientId = await new Promise<string>((resolve) => {\n navigator.serviceWorker.addEventListener(\n 'message',\n function listener(event: MessageEvent<{ type: string; clientId: string }>) {\n if (event.data.type === 'registration-successful') {\n navigator.serviceWorker.removeEventListener('message', listener);\n resolve(event.data.clientId);\n }\n }\n );\n this.activeRegistration().postMessage({ type: 'register-client-main' });\n });\n\n // Setup listener for service worker messages\n navigator.serviceWorker.addEventListener('message', (event: MessageEvent<Request>) => {\n this.#onMessageFromServiceWorker(event);\n });\n return clientId;\n }\n\n async #onMessageFromServiceWorker(event: MessageEvent<Message>) {\n if (event.data.type === 'request') {\n const uuid = event.data.data as string;\n const message = this.#syncMessageCache.get(uuid);\n if (!message) {\n throw new WebRChannelError('Request not found during service worker XHR request');\n }\n this.#syncMessageCache.delete(uuid);\n switch (message.type) {\n case 'read': {\n const response = await this.inputQueue.get();\n this.activeRegistration().postMessage({\n type: 'wasm-webr-fetch-response',\n uuid: uuid,\n response: newResponse(uuid, response),\n });\n break;\n }\n case 'interrupt': {\n const response = this.#interrupted;\n this.activeRegistration().postMessage({\n type: 'wasm-webr-fetch-response',\n uuid: uuid,\n response: newResponse(uuid, response),\n });\n this.inputQueue.reset();\n this.#interrupted = false;\n break;\n }\n default:\n throw new WebRChannelError(`Unsupported request type '${message.type}'.`);\n }\n return;\n }\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'sync-request': {\n const request = message.data as Request;\n this.#syncMessageCache.set(request.data.uuid, request.data.msg);\n return;\n }\n\n case 'request':\n throw new WebRChannelError(\n \"Can't send messages of type 'request' from a worker.\" +\n 'Use service worker fetch request instead.'\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { Module } from '../emscripten';\n\nexport class ServiceWorkerChannelWorker implements ChannelWorker {\n #ep: Endpoint;\n #mainThreadId: string;\n #location: string;\n #lastInterruptReq = Date.now();\n #dispatch: (msg: Message) => void = () => 0;\n #interrupt = () => {};\n onMessageFromMainThread: (msg: Message) => void = () => {};\n\n constructor(data: { clientId?: string; location?: string }) {\n if (!data.clientId || !data.location) {\n throw new WebRChannelError(\"Can't start service worker channel\");\n }\n this.#mainThreadId = data.clientId;\n this.#location = data.location;\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n }\n\n resolve() {\n this.write({ type: 'resolve' });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n syncRequest(message: Message): Response {\n /*\n * Browsers timeout service workers after about 5 minutes on inactivity.\n * See e.g. service_worker_version.cc in Chromium.\n *\n * To avoid the service worker being shut down, we timeout our XHR after\n * 1 minute and then resend the request as a keep-alive. The service worker\n * uses the message UUID to identify the request and continue waiting for a\n * response from where it left off.\n */\n const request = newRequest(message);\n this.write({ type: 'sync-request', data: request });\n\n let retryCount = 0;\n for (;;) {\n try {\n const url = new URL('__wasm__/webr-fetch-request/', this.#location);\n const xhr = new XMLHttpRequest();\n xhr.timeout = 60000;\n xhr.responseType = 'arraybuffer';\n xhr.open('POST', url, false);\n const fetchReqBody = {\n clientId: this.#mainThreadId,\n uuid: request.data.uuid,\n };\n xhr.send(encode(fetchReqBody));\n return decode(xhr.response as ArrayBuffer) as Response;\n } catch (e: any) {\n if (e instanceof DOMException && retryCount++ < 1000) {\n console.log('Service worker request failed - resending request');\n } else {\n throw e;\n }\n }\n }\n }\n\n read(): Message {\n const response = this.syncRequest({ type: 'read' });\n return response.data.resp as Message;\n }\n\n inputOrDispatch(): number {\n for (;;) {\n const msg = this.read();\n if (msg.type === 'stdin') {\n return Module.allocateUTF8(msg.data as string);\n }\n this.#dispatch(msg);\n }\n }\n\n run(args: string[]) {\n Module.callMain(args);\n }\n\n setInterrupt(interrupt: () => void) {\n this.#interrupt = interrupt;\n }\n\n handleInterrupt() {\n /* During R computation we have no way to directly interrupt the worker\n * thread. Instead, we hook into R's PolledEvents. Since we are not using\n * SharedArrayBuffer as a signal method, we instead send a message to the\n * main thread to ask if we should interrupt R.\n *\n * The rate of requests is limited to once per second. This stops the\n * browser being overloaded with XHR sync requests while R is working.\n */\n if (Date.now() > this.#lastInterruptReq + 1000) {\n this.#lastInterruptReq = Date.now();\n const response = this.syncRequest({ type: 'interrupt' });\n const interrupted = response.data.resp as boolean;\n if (interrupted) {\n this.#interrupt();\n }\n }\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n}\n", "import { SharedBufferChannelMain, SharedBufferChannelWorker } from './channel-shared';\nimport { ServiceWorkerChannelMain, ServiceWorkerChannelWorker } from './channel-service';\nimport { WebROptions } from '../webr-main';\nimport { isCrossOrigin } from '../utils';\nimport { WebRChannelError } from '../error';\n\n// This file refers to objects imported from `./channel-shared` and\n// `./channel-service.` These can't be included in `./channel` as this\n// causes a circular dependency issue.\n\nexport const ChannelType = {\n Automatic: 0,\n SharedArrayBuffer: 1,\n ServiceWorker: 2,\n} as const;\n\nexport type ChannelInitMessage = {\n type: string;\n data: {\n config: Required<WebROptions>;\n channelType: Exclude<\n (typeof ChannelType)[keyof typeof ChannelType],\n typeof ChannelType.Automatic\n >;\n clientId?: string;\n location?: string;\n };\n};\n\nexport function newChannelMain(data: Required<WebROptions>) {\n switch (data.channelType) {\n case ChannelType.SharedArrayBuffer:\n return new SharedBufferChannelMain(data);\n case ChannelType.ServiceWorker:\n return new ServiceWorkerChannelMain(data);\n case ChannelType.Automatic:\n default:\n if (typeof SharedArrayBuffer !== 'undefined') {\n return new SharedBufferChannelMain(data);\n }\n /*\n * TODO: If we are not cross-origin isolated but we can still use service\n * workers, we could setup a service worker to inject the relevant headers\n * to enable cross-origin isolation.\n */\n if ('serviceWorker' in navigator && !isCrossOrigin(data.serviceWorkerUrl)) {\n return new ServiceWorkerChannelMain(data);\n }\n throw new WebRChannelError(\"Can't initialise main thread communication channel\");\n }\n}\n\nexport function newChannelWorker(msg: ChannelInitMessage) {\n switch (msg.data.channelType) {\n case ChannelType.SharedArrayBuffer:\n return new SharedBufferChannelWorker();\n case ChannelType.ServiceWorker:\n return new ServiceWorkerChannelWorker(msg.data);\n default:\n throw new WebRChannelError('Unknown worker channel type recieved');\n }\n}\n", "/**\n * Common module for working with R objects.\n * @module RObject\n */\nimport * as RMain from './robj-main';\nimport * as RWorker from './robj-worker';\n\nexport type RPtr = number;\n\nexport const RTypeMap = {\n null: 0,\n symbol: 1,\n pairlist: 2,\n closure: 3,\n environment: 4,\n promise: 5,\n call: 6,\n special: 7,\n builtin: 8,\n string: 9,\n logical: 10,\n integer: 13,\n double: 14,\n complex: 15,\n character: 16,\n dots: 17,\n any: 18,\n list: 19,\n expression: 20,\n bytecode: 21,\n pointer: 22,\n weakref: 23,\n raw: 24,\n s4: 25,\n new: 30,\n free: 31,\n function: 99,\n} as const;\nexport type RType = keyof typeof RTypeMap;\nexport type RTypeNumber = (typeof RTypeMap)[keyof typeof RTypeMap];\n\nexport type Complex = {\n re: number;\n im: number;\n};\n\nexport type WebRDataRaw =\n | number\n | string\n | boolean\n | undefined\n | null\n | void\n | Complex\n | Error\n | ArrayBuffer\n | ArrayBufferView\n | Array<WebRDataRaw>\n | Map<WebRDataRaw, WebRDataRaw>\n | Set<WebRDataRaw>\n | { [key: string]: WebRDataRaw };\n\nexport type NamedEntries<T> = [string | null, T][];\nexport type NamedObject<T> = { [key: string]: T };\n\n/**\n * A union of JavaScript types that are able to be converted into an R object.\n *\n * `WebRData` is used both as a general input argument for R object construction\n * and also as a general return type when converting R objects into JavaScript.\n *\n */\nexport type WebRData =\n | RMain.RObject\n | RWorker.RObjectBase\n | RWorker.RObject\n | WebRDataRaw\n | WebRDataJs\n | WebRData[]\n | { [key: string]: WebRData };\n\n/**\n * A subset of {@link WebRData} for JavaScript objects that can be converted\n * into R atomic vectors.\n * @typeParam T The JavaScript scalar type associated with the atomic vector.\n */\nexport type WebRDataAtomic<T> =\n | WebRDataScalar<T>\n | (T | null)[]\n | WebRDataJsAtomic<T>\n | NamedObject<T | null>;\n\n/**\n * `WebRDataJs` objects form a tree structure, used when serialising R objects\n * into a JavaScript respresentation.\n *\n * Nested R objects are serialised using the {@link WebRDataJsNode} type,\n * forming branches in the resulting tree structure, with leaves formed by the\n * remaining types.\n */\nexport type WebRDataJs =\n | WebRDataJsNull\n | WebRDataJsString\n | WebRDataJsSymbol\n | WebRDataJsNode\n | WebRDataJsAtomic<RWorker.atomicType>;\n\nexport type WebRDataJsNull = {\n type: 'null';\n};\n\nexport type WebRDataJsString = {\n type: 'string';\n value: string;\n};\n\nexport type WebRDataJsSymbol = {\n type: 'symbol';\n printname: string | null;\n symvalue: RPtr | null;\n internal: RPtr | null;\n};\n\nexport type WebRDataJsNode = {\n type: 'list' | 'pairlist' | 'environment';\n names: (string | null)[] | null;\n values: (WebRDataRaw | RWorker.RObject | RMain.RObject | WebRDataJs)[];\n};\n\nexport type WebRDataJsAtomic<T> = {\n type: 'logical' | 'integer' | 'double' | 'complex' | 'character' | 'raw';\n names: (string | null)[] | null;\n values: (T | null)[];\n};\n\n/**\n * Test for a {@link WebRDataJs} instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of a {@link WebRDataJs}.\n */\nexport function isWebRDataJs(value: any): value is WebRDataJs {\n return value && typeof value === 'object' && Object.keys(RTypeMap).includes(value.type as string);\n}\n\n/**\n * A subset of WebRData for scalar JavaScript objects.\n */\nexport type WebRDataScalar<T> = T | RMain.RObject | RWorker.RObjectBase;\n\n/**\n * Test if an object is of type {@link Complex}.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is of type {@link Complex}.\n */\nexport function isComplex(value: any): value is Complex {\n return value && typeof value === 'object' && 're' in value && 'im' in value;\n}\n", "import { Module, DictEmPtrs, dictEmFree } from './emscripten';\nimport { WebRData, RPtr } from './robj';\nimport { RObject, REnvironment, RHandle, handlePtr } from './robj-worker';\n\nexport function protect<T extends RHandle>(x: T): T {\n Module._Rf_protect(handlePtr(x));\n return x;\n}\n\nexport function protectInc<T extends RHandle>(x: T, prot: { n: number }): T {\n Module._Rf_protect(handlePtr(x));\n ++prot.n;\n return x;\n}\n\nexport function protectWithIndex(x: RHandle): { loc: number; ptr: RPtr } {\n // Integer size hardcoded to 4 bytes. This is fine but is there a\n // way to call sizeof?\n const pLoc = Module._malloc(4);\n\n Module._R_ProtectWithIndex(handlePtr(x), pLoc);\n const loc = Module.getValue(pLoc, 'i32');\n\n return { loc: loc, ptr: pLoc };\n}\n\nexport function unprotectIndex(index: { ptr: RPtr }): void {\n Module._Rf_unprotect(1);\n Module._free(index.ptr);\n}\n\nexport function reprotect<T extends RHandle>(x: T, index: { loc: number; ptr: RPtr }): T {\n Module._R_Reprotect(handlePtr(x), index.loc);\n return x;\n}\n\nexport function unprotect(n: number) {\n Module._Rf_unprotect(n);\n}\n\n// rlang convention: `env`-prefixed functions consistently take `env`\n// as first argument\nexport function envPoke(env: RHandle, sym: RHandle, value: RHandle) {\n Module._Rf_defineVar(handlePtr(sym), handlePtr(value), handlePtr(env));\n}\n\nexport function parseEvalBare(code: string, env: WebRData): RObject {\n const strings: DictEmPtrs = {};\n const prot = { n: 0 };\n\n try {\n const envObj = new REnvironment(env);\n protectInc(envObj, prot);\n\n strings.code = Module.allocateUTF8(code);\n\n const out = Module._R_ParseEvalString(strings.code, envObj.ptr);\n return RObject.wrap(out);\n } finally {\n dictEmFree(strings);\n unprotect(prot.n);\n }\n}\n\nexport class UnwindProtectException extends Error {\n cont: RPtr;\n constructor(message: string, cont: RPtr) {\n super(message);\n this.name = 'UnwindProtectException';\n this.cont = cont;\n }\n}\n\nexport function safeEval(call: RHandle, env: RHandle): RPtr {\n return Module.getWasmTableEntry(Module.GOT.ffi_safe_eval.value)(\n handlePtr(call),\n handlePtr(env)\n );\n}\n", "/**\n * Module for working with R objects on the worker thead.\n * @module RWorker\n */\nimport { Module } from './emscripten';\nimport { Complex, isComplex, NamedEntries, NamedObject, WebRDataRaw, WebRDataScalar } from './robj';\nimport { WebRData, WebRDataAtomic, RPtr, RType, RTypeMap, RTypeNumber } from './robj';\nimport { isWebRDataJs, WebRDataJs, WebRDataJsAtomic, WebRDataJsNode } from './robj';\nimport { WebRDataJsNull, WebRDataJsString, WebRDataJsSymbol } from './robj';\nimport { envPoke, parseEvalBare, protect, protectInc, unprotect } from './utils-r';\nimport { protectWithIndex, reprotect, unprotectIndex, safeEval } from './utils-r';\nimport { ShelterID, isShelterID } from './webr-chan';\n\nexport type RHandle = RObject | RPtr;\n\nexport function handlePtr(x: RHandle): RPtr {\n if (isRObject(x)) {\n return x.ptr;\n } else {\n return x;\n }\n}\n\n// Throw if an R object does not match a certain R type\nfunction assertRType(obj: RObjectBase, type: RType) {\n if (Module._TYPEOF(obj.ptr) !== RTypeMap[type]) {\n throw new Error(`Unexpected object type \"${obj.type()}\" when expecting type \"${type}\"`);\n }\n}\n\n// TODO: Shelter should be a dictionary not an array\nexport const shelters = new Map<ShelterID, RPtr[]>();\n\n// Use this for implicit protection of objects sent to the main\n// thread. Currently uses the precious list but could use a different\n// mechanism in the future. Unprotection is explicit through\n// `Shelter.destroy()`.\nexport function keep(shelter: ShelterID, x: RHandle) {\n const ptr = handlePtr(x);\n Module._R_PreserveObject(ptr);\n\n // TODO: Remove when shelter transition is complete\n if (shelter === undefined) {\n return;\n }\n\n if (isShelterID(shelter)) {\n shelters.get(shelter)!.push(ptr);\n return;\n }\n\n throw new Error('Unexpected shelter type ' + typeof shelter);\n}\n\n// Frees objects preserved with `keep()`. This method is called by\n// users in the main thread to release objects that were automatically\n// protected before being sent away.\nexport function destroy(shelter: ShelterID, x: RHandle) {\n const ptr = handlePtr(x);\n Module._R_ReleaseObject(ptr);\n\n const objs: RPtr[] = shelters.get(shelter)!;\n const loc = objs.indexOf(ptr);\n\n if (loc < 0) {\n throw new Error(\"Can't find object in shelter.\");\n }\n\n objs.splice(loc, 1);\n}\n\nexport function purge(shelter: ShelterID) {\n const ptrs: RPtr[] = shelters.get(shelter)!;\n\n for (const ptr of ptrs) {\n try {\n Module._R_ReleaseObject(ptr);\n } catch (e) {\n console.error(e);\n }\n }\n\n shelters.set(shelter, []);\n}\n\nexport interface ToJsOptions {\n depth: number;\n}\n\nexport type Nullable<T> = T | RNull;\n\nfunction newObjectFromData(obj: WebRData): RObject {\n // Conversion of WebRDataJs type JS objects\n if (isWebRDataJs(obj)) {\n return new (getRWorkerClass(RTypeMap[obj.type]))(obj);\n }\n\n // Conversion of explicit R NULL value\n if (obj && typeof obj === 'object' && 'type' in obj && obj.type === 'null') {\n return new RNull();\n }\n\n // Direct conversion of scalar JS values\n if (obj === null) {\n return new RLogical({ type: 'logical', names: null, values: [null] });\n }\n if (typeof obj === 'boolean') {\n return new RLogical(obj);\n }\n if (typeof obj === 'number') {\n return new RDouble(obj);\n }\n if (typeof obj === 'string') {\n return new RCharacter(obj);\n }\n if (isComplex(obj)) {\n return new RComplex(obj);\n }\n if (Array.isArray(obj)) {\n return newObjectFromArray(obj);\n }\n\n throw new Error('Robj construction for this JS object is not yet supported');\n}\n\n// JS arrays are interpreted using R's c() function, so as to match\n// R's built in coercion rules\nfunction newObjectFromArray(arr: WebRData[]) {\n const prot = { n: 0 };\n\n try {\n const call = new RCall([new RSymbol('c'), ...arr]);\n protectInc(call, prot);\n return call.eval();\n } finally {\n unprotect(prot.n);\n }\n}\n\nexport class RObjectBase {\n ptr: RPtr;\n constructor(ptr: RPtr) {\n this.ptr = ptr;\n }\n\n type(): RType {\n const typeNumber = Module._TYPEOF(this.ptr) as RTypeNumber;\n const type = Object.keys(RTypeMap).find(\n (typeName) => RTypeMap[typeName as RType] === typeNumber\n );\n return type as RType;\n }\n}\n\nexport class RObject extends RObjectBase {\n constructor(data: WebRData) {\n if (!(data instanceof RObjectBase)) {\n return newObjectFromData(data);\n }\n\n super(data.ptr);\n }\n\n static wrap<T extends typeof RObject>(this: T, ptr: RPtr): InstanceType<T> {\n const type = Module._TYPEOF(ptr);\n return new (getRWorkerClass(type as RTypeNumber))(new RObjectBase(ptr)) as InstanceType<T>;\n }\n\n get [Symbol.toStringTag](): string {\n return `RObject:${this.type()}`;\n }\n\n /** @internal */\n static getPersistentObject(prop: keyof typeof objs): unknown {\n return objs[prop];\n }\n\n /** @internal */\n getPropertyValue(prop: keyof this): unknown {\n return this[prop];\n }\n\n inspect(): void {\n parseEvalBare('.Internal(inspect(x))', { x: this });\n }\n\n isNull(): this is RNull {\n return Module._TYPEOF(this.ptr) === RTypeMap.null;\n }\n\n isUnbound(): boolean {\n return this.ptr === objs.unboundValue.ptr;\n }\n\n attrs(): Nullable<RPairlist> {\n return RPairlist.wrap(Module._ATTRIB(this.ptr));\n }\n\n setNames(values: (string | null)[] | null): this {\n let namesObj: RObject;\n\n if (values === null) {\n namesObj = objs.null;\n } else if (Array.isArray(values) && values.every((v) => typeof v === 'string' || v === null)) {\n namesObj = new RCharacter(values);\n } else {\n throw new Error('Argument to setNames must be null or an Array of strings or null');\n }\n\n // `setAttrib()` protects its inputs\n Module._Rf_setAttrib(this.ptr, objs.namesSymbol.ptr, namesObj.ptr);\n return this;\n }\n\n names(): (string | null)[] | null {\n const names = RCharacter.wrap(Module._Rf_getAttrib(this.ptr, objs.namesSymbol.ptr));\n if (names.isNull()) {\n return null;\n } else {\n return names.toArray();\n }\n }\n\n includes(name: string) {\n const names = this.names();\n return names && names.includes(name);\n }\n\n toJs(options: ToJsOptions = { depth: 0 }, depth = 1): WebRDataJs {\n throw new Error('This R object cannot be converted to JS');\n }\n\n subset(prop: number | string): RObject {\n return this.#slice(prop, objs.bracketSymbol.ptr);\n }\n\n get(prop: number | string): RObject {\n return this.#slice(prop, objs.bracket2Symbol.ptr);\n }\n\n getDollar(prop: string): RObject {\n return this.#slice(prop, objs.dollarSymbol.ptr);\n }\n\n #slice(prop: number | string, op: RPtr): RObject {\n const prot = { n: 0 };\n\n try {\n const idx = new RObject(prop);\n protectInc(idx, prot);\n\n const call = Module._Rf_lang3(op, this.ptr, idx.ptr);\n protectInc(call, prot);\n\n return RObject.wrap(safeEval(call, objs.baseEnv));\n } finally {\n unprotect(prot.n);\n }\n }\n\n pluck(...path: (string | number)[]): RObject | undefined {\n const index = protectWithIndex(objs.null);\n\n try {\n const getter = (obj: RObject, prop: string | number): RObject => {\n const out = obj.get(prop);\n return reprotect(out, index);\n };\n const result = path.reduce(getter, this);\n\n return result.isNull() ? undefined : result;\n } finally {\n unprotectIndex(index);\n }\n }\n\n set(prop: string | number, value: RObject | WebRDataRaw): RObject {\n const prot = { n: 0 };\n\n try {\n const idx = new RObject(prop);\n protectInc(idx, prot);\n\n const valueObj = new RObject(value);\n protectInc(valueObj, prot);\n\n const assign = new RSymbol('[[<-');\n const call = Module._Rf_lang4(assign.ptr, this.ptr, idx.ptr, valueObj.ptr);\n protectInc(call, prot);\n\n return RObject.wrap(safeEval(call, objs.baseEnv));\n } finally {\n unprotect(prot.n);\n }\n }\n\n /** @internal */\n static getMethods(obj: RObject) {\n const props = new Set<string>();\n let cur: unknown = obj;\n do {\n Object.getOwnPropertyNames(cur).map((p) => props.add(p));\n } while ((cur = Object.getPrototypeOf(cur)));\n return [...props.keys()].filter((i) => typeof obj[i as keyof typeof obj] === 'function');\n }\n}\n\nexport class RNull extends RObject {\n constructor() {\n super(new RObjectBase(Module.getValue(Module._R_NilValue, '*')));\n return this;\n }\n\n toJs(): WebRDataJsNull {\n return { type: 'null' };\n }\n}\n\nexport class RSymbol extends RObject {\n // Note that symbols don't need to be protected. This also means\n // that allocating symbols in loops with random data is probably a\n // bad idea because this leaks memory.\n constructor(x: WebRDataScalar<string>) {\n if (x instanceof RObjectBase) {\n assertRType(x, 'symbol');\n super(x);\n return;\n }\n const name = Module.allocateUTF8(x as string);\n try {\n super(new RObjectBase(Module._Rf_install(name)));\n } finally {\n Module._free(name);\n }\n }\n\n toJs(): WebRDataJsSymbol {\n const obj = this.toObject();\n return {\n type: 'symbol',\n printname: obj.printname,\n symvalue: obj.symvalue,\n internal: obj.internal,\n };\n }\n\n toObject(): {\n printname: string | null;\n symvalue: RPtr | null;\n internal: RPtr | null;\n } {\n return {\n printname: this.printname().isUnbound() ? null : this.printname().toString(),\n symvalue: this.symvalue().isUnbound() ? null : this.symvalue().ptr,\n internal: this.internal().isNull() ? null : this.internal().ptr,\n };\n }\n\n toString(): string {\n return this.printname().toString();\n }\n\n printname(): RString {\n return RString.wrap(Module._PRINTNAME(this.ptr));\n }\n symvalue(): RObject {\n return RObject.wrap(Module._SYMVALUE(this.ptr));\n }\n internal(): RObject {\n return RObject.wrap(Module._INTERNAL(this.ptr));\n }\n}\n\nexport class RPairlist extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'pairlist');\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n\n const list = RPairlist.wrap(Module._Rf_allocList(values.length));\n protectInc(list, prot);\n\n for (\n let [i, next] = [0, list as Nullable<RPairlist>];\n !next.isNull();\n [i, next] = [i + 1, next.cdr()]\n ) {\n next.setcar(new RObject(values[i]));\n }\n\n list.setNames(names);\n super(list);\n } finally {\n unprotect(prot.n);\n }\n }\n\n get length(): number {\n return this.toArray().length;\n }\n\n toArray(options: ToJsOptions = { depth: 1 }): WebRData[] {\n return this.toJs(options).values;\n }\n\n toObject({\n allowDuplicateKey = true,\n allowEmptyKey = false,\n depth = 1,\n } = {}): NamedObject<WebRData> {\n const entries = this.entries({ depth });\n const keys = entries.map(([k, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error('Duplicate key when converting pairlist without allowDuplicateKey enabled');\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error('Empty or null key when converting pairlist without allowEmptyKey enabled');\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(options: ToJsOptions = { depth: 1 }): NamedEntries<WebRData> {\n const obj = this.toJs(options);\n return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n }\n\n toJs(options: ToJsOptions = { depth: 0 }, depth = 1): WebRDataJsNode {\n const namesArray: string[] = [];\n let hasNames = false;\n const values: WebRDataJsNode['values'] = [];\n\n for (let next = this as Nullable<RPairlist>; !next.isNull(); next = next.cdr()) {\n const symbol = next.tag();\n if (symbol.isNull()) {\n namesArray.push('');\n } else {\n hasNames = true;\n namesArray.push(symbol.toString());\n }\n if (options.depth && depth >= options.depth) {\n values.push(next.car());\n } else {\n values.push(next.car().toJs(options, depth + 1));\n }\n }\n const names = hasNames ? namesArray : null;\n return { type: 'pairlist', names, values };\n }\n\n includes(name: string): boolean {\n return name in this.toObject();\n }\n\n setcar(obj: RObject): void {\n Module._SETCAR(this.ptr, obj.ptr);\n }\n\n car(): RObject {\n return RObject.wrap(Module._CAR(this.ptr));\n }\n\n cdr(): Nullable<RPairlist> {\n return RObject.wrap(Module._CDR(this.ptr)) as Nullable<RPairlist>;\n }\n\n tag(): Nullable<RSymbol> {\n return RObject.wrap(Module._TAG(this.ptr)) as Nullable<RSymbol>;\n }\n}\n\nexport class RCall extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'call');\n super(val);\n return this;\n }\n const prot = { n: 0 };\n\n try {\n const { values } = toWebRData(val);\n const objs = values.map((value) => protectInc(new RObject(value), prot));\n const call = RCall.wrap(Module._Rf_allocVector(RTypeMap.call, values.length));\n protectInc(call, prot);\n\n for (\n let [i, next] = [0, call as Nullable<RPairlist>];\n !next.isNull();\n [i, next] = [i + 1, next.cdr()]\n ) {\n next.setcar(objs[i]);\n }\n super(call);\n } finally {\n unprotect(prot.n);\n }\n }\n\n setcar(obj: RObject): void {\n Module._SETCAR(this.ptr, obj.ptr);\n }\n\n car(): RObject {\n return RObject.wrap(Module._CAR(this.ptr));\n }\n\n cdr(): Nullable<RPairlist> {\n return RObject.wrap(Module._CDR(this.ptr)) as Nullable<RPairlist>;\n }\n\n eval(): RObject {\n return RObject.wrap(safeEval(this.ptr, objs.baseEnv));\n }\n}\n\nexport class RList extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'list');\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n const ptr = Module._Rf_allocVector(RTypeMap.list, values.length);\n protectInc(ptr, prot);\n\n values.forEach((v, i) => {\n Module._SET_VECTOR_ELT(ptr, i, new RObject(v).ptr);\n });\n\n RObject.wrap(ptr).setNames(names);\n\n super(new RObjectBase(ptr));\n } finally {\n unprotect(prot.n);\n }\n }\n\n get length(): number {\n return Module._LENGTH(this.ptr);\n }\n\n toArray(options: { depth: number } = { depth: 1 }): WebRData[] {\n return this.toJs(options).values;\n }\n\n toObject({\n allowDuplicateKey = true,\n allowEmptyKey = false,\n depth = 1,\n } = {}): NamedObject<WebRData> {\n const entries = this.entries({ depth });\n const keys = entries.map(([k, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error('Duplicate key when converting list without allowDuplicateKey enabled');\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error('Empty or null key when converting list without allowEmptyKey enabled');\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(options: { depth: number } = { depth: 1 }): NamedEntries<WebRData> {\n const obj = this.toJs(options);\n return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n }\n\n toJs(options: { depth: number } = { depth: 0 }, depth = 1): WebRDataJsNode {\n return {\n type: 'list',\n names: this.names(),\n values: [...Array(this.length).keys()].map((i) => {\n if (options.depth && depth >= options.depth) {\n return this.get(i + 1);\n } else {\n return this.get(i + 1).toJs(options, depth + 1);\n }\n }),\n };\n }\n}\n\nexport class RFunction extends RObject {\n exec(...args: (WebRDataRaw | RObject)[]): RObject {\n const prot = { n: 0 };\n\n try {\n const call = new RCall([this, ...args]);\n protectInc(call, prot);\n return call.eval();\n } finally {\n unprotect(prot.n);\n }\n }\n}\n\nexport class RString extends RObject {\n // Unlike symbols, strings are not cached and must thus be protected\n constructor(x: WebRDataScalar<string>) {\n if (x instanceof RObjectBase) {\n assertRType(x, 'string');\n super(x);\n return;\n }\n\n const name = Module.allocateUTF8(x as string);\n\n try {\n super(new RObjectBase(Module._Rf_mkChar(name)));\n } finally {\n Module._free(name);\n }\n }\n\n toString(): string {\n return Module.UTF8ToString(Module._R_CHAR(this.ptr));\n }\n\n toJs(): WebRDataJsString {\n return {\n type: 'string',\n value: this.toString(),\n };\n }\n}\n\nexport class REnvironment extends RObject {\n constructor(val: WebRData = {}) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'environment');\n super(val);\n return this;\n }\n let nProt = 0;\n\n try {\n const { names, values } = toWebRData(val);\n\n const ptr = protect(Module._R_NewEnv(objs.globalEnv.ptr, 0, 0));\n ++nProt;\n\n values.forEach((v, i) => {\n const name = names ? names[i] : null;\n if (!name) {\n throw new Error(\"Can't create object in new environment with empty symbol name\");\n }\n\n const sym = new RSymbol(name);\n const vObj = protect(new RObject(v));\n try {\n envPoke(ptr, sym, vObj);\n } finally {\n unprotect(1);\n }\n });\n\n super(new RObjectBase(ptr));\n } finally {\n unprotect(nProt);\n }\n }\n\n ls(all = false, sorted = true): string[] {\n const ls = RCharacter.wrap(Module._R_lsInternal3(this.ptr, Number(all), Number(sorted)));\n return ls.toArray() as string[];\n }\n\n bind(name: string, value: WebRData): void {\n const sym = new RSymbol(name);\n const valueObj = protect(new RObject(value));\n\n try {\n envPoke(this, sym, valueObj);\n } finally {\n unprotect(1);\n }\n }\n\n names(): string[] {\n return this.ls(true, true);\n }\n\n frame(): RObject {\n return RObject.wrap(Module._FRAME(this.ptr));\n }\n\n subset(prop: number | string): RObject {\n if (typeof prop === 'number') {\n throw new Error('Object of type environment is not subsettable');\n }\n return this.getDollar(prop);\n }\n\n toObject({ depth = 0 } = {}): NamedObject<WebRData> {\n const symbols = this.names();\n return Object.fromEntries(\n [...Array(symbols.length).keys()].map((i) => {\n return [symbols[i], this.getDollar(symbols[i]).toJs({ depth })];\n })\n );\n }\n\n toJs(options: { depth: number } = { depth: 0 }, depth = 1): WebRDataJsNode {\n const names = this.names();\n const values = [...Array(names.length).keys()].map((i) => {\n if (options.depth && depth >= options.depth) {\n return this.getDollar(names[i]);\n } else {\n return this.getDollar(names[i]).toJs(options, depth + 1);\n }\n });\n\n return {\n type: 'environment',\n names,\n values,\n };\n }\n}\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array;\n\nexport type atomicType = number | boolean | Complex | string;\n\nabstract class RVectorAtomic<T extends atomicType> extends RObject {\n constructor(\n val: WebRDataAtomic<T>,\n kind: RType,\n newSetter: (ptr: RPtr) => (v: any, i: number) => void\n ) {\n if (val instanceof RObjectBase) {\n assertRType(val, kind);\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n\n const ptr = Module._Rf_allocVector(RTypeMap[kind], values.length);\n protectInc(ptr, prot);\n\n values.forEach(newSetter(ptr));\n RObject.wrap(ptr).setNames(names);\n\n super(new RObjectBase(ptr));\n } finally {\n unprotect(prot.n);\n }\n }\n\n get length(): number {\n return Module._LENGTH(this.ptr);\n }\n\n get(prop: number | string): this {\n return super.get(prop) as this;\n }\n\n subset(prop: number | string): this {\n return super.subset(prop) as this;\n }\n\n getDollar(prop: string): RObject {\n throw new Error('$ operator is invalid for atomic vectors');\n }\n\n detectMissing(): boolean[] {\n const prot = { n: 0 };\n\n try {\n const call = Module._Rf_lang2(new RSymbol('is.na').ptr, this.ptr);\n protectInc(call, prot);\n\n const val = RLogical.wrap(safeEval(call, objs.baseEnv));\n protectInc(val, prot);\n\n const ret = val.toTypedArray();\n return Array.from(ret).map((elt) => Boolean(elt));\n } finally {\n unprotect(prot.n);\n }\n }\n\n abstract toTypedArray(): TypedArray;\n\n toArray(): (T | null)[] {\n const arr = this.toTypedArray();\n return this.detectMissing().map((m, idx) => (m ? null : (arr[idx] as T)));\n }\n\n toObject({ allowDuplicateKey = true, allowEmptyKey = false } = {}): NamedObject<T | null> {\n const entries = this.entries();\n const keys = entries.map(([k, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error(\n 'Duplicate key when converting atomic vector without allowDuplicateKey enabled'\n );\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error(\n 'Empty or null key when converting atomic vector without allowEmptyKey enabled'\n );\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(): NamedEntries<T | null> {\n const values = this.toArray();\n const names = this.names();\n return values.map((v, i) => [names ? names[i] : null, v]);\n }\n\n toJs(): WebRDataJsAtomic<T> {\n return {\n type: this.type() as 'logical' | 'integer' | 'double' | 'complex' | 'character' | 'raw',\n names: this.names(),\n values: this.toArray(),\n };\n }\n}\n\nexport class RLogical extends RVectorAtomic<boolean> {\n constructor(val: WebRDataAtomic<boolean>) {\n super(val, 'logical', RLogical.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._LOGICAL(ptr);\n const naLogical = Module.getValue(Module._R_NaInt, 'i32');\n return (v: null | boolean, i: number) => {\n Module.setValue(data + 4 * i, v === null ? naLogical : Boolean(v), 'i32');\n };\n };\n\n getBoolean(idx: number): boolean | null {\n return this.get(idx).toArray()[0];\n }\n\n toBoolean(): boolean {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getBoolean(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS boolean\");\n }\n return val;\n }\n\n toTypedArray(): Int32Array {\n return new Int32Array(\n Module.HEAP32.subarray(\n Module._LOGICAL(this.ptr) / 4,\n Module._LOGICAL(this.ptr) / 4 + this.length\n )\n );\n }\n\n toArray(): (boolean | null)[] {\n const arr = this.toTypedArray();\n return this.detectMissing().map((m, idx) => (m ? null : Boolean(arr[idx])));\n }\n}\n\nexport class RInteger extends RVectorAtomic<number> {\n constructor(val: WebRDataAtomic<number>) {\n super(val, 'integer', RInteger.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._INTEGER(ptr);\n const naInteger = Module.getValue(Module._R_NaInt, 'i32');\n\n return (v: null | number, i: number) => {\n Module.setValue(data + 4 * i, v === null ? naInteger : Math.round(Number(v)), 'i32');\n };\n };\n\n getNumber(idx: number): number | null {\n return this.get(idx).toArray()[0];\n }\n\n toNumber(): number {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getNumber(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS number\");\n }\n return val;\n }\n\n toTypedArray(): Int32Array {\n return new Int32Array(\n Module.HEAP32.subarray(\n Module._INTEGER(this.ptr) / 4,\n Module._INTEGER(this.ptr) / 4 + this.length\n )\n );\n }\n}\n\nexport class RDouble extends RVectorAtomic<number> {\n constructor(val: WebRDataAtomic<number>) {\n super(val, 'double', RDouble.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._REAL(ptr);\n const naDouble = Module.getValue(Module._R_NaReal, 'double');\n\n return (v: null | number, i: number) => {\n Module.setValue(data + 8 * i, v === null ? naDouble : v, 'double');\n };\n };\n\n getNumber(idx: number): number | null {\n return this.get(idx).toArray()[0];\n }\n\n toNumber(): number {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getNumber(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS number\");\n }\n return val;\n }\n\n toTypedArray(): Float64Array {\n return new Float64Array(\n Module.HEAPF64.subarray(Module._REAL(this.ptr) / 8, Module._REAL(this.ptr) / 8 + this.length)\n );\n }\n}\n\nexport class RComplex extends RVectorAtomic<Complex> {\n constructor(val: WebRDataAtomic<Complex>) {\n super(val, 'complex', RComplex.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._COMPLEX(ptr);\n const naDouble = Module.getValue(Module._R_NaReal, 'double');\n\n return (v: null | Complex, i: number) => {\n Module.setValue(data + 8 * (2 * i), v === null ? naDouble : v.re, 'double');\n Module.setValue(data + 8 * (2 * i + 1), v === null ? naDouble : v.im, 'double');\n };\n };\n\n getComplex(idx: number): Complex | null {\n return this.get(idx).toArray()[0];\n }\n\n toComplex(): Complex {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getComplex(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS object\");\n }\n return val;\n }\n\n toTypedArray(): Float64Array {\n return new Float64Array(\n Module.HEAPF64.subarray(\n Module._COMPLEX(this.ptr) / 8,\n Module._COMPLEX(this.ptr) / 8 + 2 * this.length\n )\n );\n }\n\n toArray(): (Complex | null)[] {\n const arr = this.toTypedArray();\n return this.detectMissing().map((m, idx) =>\n m ? null : { re: arr[2 * idx], im: arr[2 * idx + 1] }\n );\n }\n}\n\nexport class RCharacter extends RVectorAtomic<string> {\n constructor(val: WebRDataAtomic<string>) {\n super(val, 'character', RCharacter.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n return (v: null | string, i: number) => {\n if (v === null) {\n Module._SET_STRING_ELT(ptr, i, objs.naString.ptr);\n } else {\n Module._SET_STRING_ELT(ptr, i, new RString(v).ptr);\n }\n };\n };\n\n getString(idx: number): string | null {\n return this.get(idx).toArray()[0];\n }\n\n toString(): string {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getString(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS string\");\n }\n return val;\n }\n\n toTypedArray(): Uint32Array {\n return new Uint32Array(\n Module.HEAPU32.subarray(\n Module._STRING_PTR(this.ptr) / 4,\n Module._STRING_PTR(this.ptr) / 4 + this.length\n )\n );\n }\n\n toArray(): (string | null)[] {\n return this.detectMissing().map((m, idx) =>\n m ? null : Module.UTF8ToString(Module._R_CHAR(Module._STRING_ELT(this.ptr, idx)))\n );\n }\n}\n\nexport class RRaw extends RVectorAtomic<number> {\n constructor(val: WebRDataAtomic<number>) {\n super(val, 'raw', RRaw.#newSetter);\n }\n\n static #newSetter = (ptr: RPtr) => {\n const data = Module._RAW(ptr);\n\n return (v: number, i: number) => {\n Module.setValue(data + i, Number(v), 'i8');\n };\n };\n\n getNumber(idx: number): number | null {\n return this.get(idx).toArray()[0];\n }\n\n toNumber(): number {\n if (this.length !== 1) {\n throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n }\n const val = this.getNumber(1);\n if (val === null) {\n throw new Error(\"Can't convert missing value `NA` to a JS number\");\n }\n return val;\n }\n\n toTypedArray(): Uint8Array {\n return new Uint8Array(\n Module.HEAPU8.subarray(Module._RAW(this.ptr), Module._RAW(this.ptr) + this.length)\n );\n }\n}\n\n/*\n * Convert the various types possible in the type union WebRData into\n * consistently typed arrays of names and values.\n */\nfunction toWebRData<T>(jsObj: WebRDataAtomic<T>): {\n names: (string | null)[] | null;\n values: (T | null)[];\n};\nfunction toWebRData(jsObj: WebRData): WebRData;\nfunction toWebRData(jsObj: WebRData): WebRData {\n if (isWebRDataJs(jsObj)) {\n return jsObj;\n } else if (Array.isArray(jsObj) || ArrayBuffer.isView(jsObj)) {\n return { names: null, values: jsObj };\n } else if (jsObj && typeof jsObj === 'object' && !isComplex(jsObj)) {\n return {\n names: Object.keys(jsObj),\n values: Object.values(jsObj),\n };\n }\n return { names: null, values: [jsObj] };\n}\n\nexport function getRWorkerClass(type: RTypeNumber): typeof RObject {\n const typeClasses: { [key: number]: typeof RObject } = {\n [RTypeMap.null]: RNull,\n [RTypeMap.symbol]: RSymbol,\n [RTypeMap.pairlist]: RPairlist,\n [RTypeMap.closure]: RFunction,\n [RTypeMap.environment]: REnvironment,\n [RTypeMap.call]: RCall,\n [RTypeMap.special]: RFunction,\n [RTypeMap.builtin]: RFunction,\n [RTypeMap.string]: RString,\n [RTypeMap.logical]: RLogical,\n [RTypeMap.integer]: RInteger,\n [RTypeMap.double]: RDouble,\n [RTypeMap.complex]: RComplex,\n [RTypeMap.character]: RCharacter,\n [RTypeMap.list]: RList,\n [RTypeMap.raw]: RRaw,\n [RTypeMap.function]: RFunction,\n };\n if (type in typeClasses) {\n return typeClasses[type];\n }\n return RObject;\n}\n\n/**\n * Test for an RWorker.RObject instance.\n *\n * RWorker.RObject is the internal interface to R objects, intended to be used\n * on the worker thread.\n *\n * @private\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RObject.\n */\nexport function isRObject(value: any): value is RObject {\n return value instanceof RObject;\n}\n\n/**\n * A store for persistent R objects, initialised at R startup.\n */\nexport let objs: {\n baseEnv: REnvironment,\n bracket2Symbol: RSymbol,\n bracketSymbol: RSymbol,\n dollarSymbol: RSymbol,\n emptyEnv: REnvironment,\n false: RLogical,\n globalEnv: REnvironment,\n na: RLogical,\n namesSymbol: RSymbol,\n naString: RObject,\n null: RNull,\n true: RLogical,\n unboundValue: RObject,\n};\n\n/**\n * Populate the persistent R object store.\n * @internal\n */\nexport function initPersistentObjects(){\n objs = {\n baseEnv: REnvironment.wrap(Module.getValue(Module._R_BaseEnv, '*')),\n bracket2Symbol: RSymbol.wrap(Module.getValue(Module._R_Bracket2Symbol, '*')),\n bracketSymbol: RSymbol.wrap(Module.getValue(Module._R_BracketSymbol, '*')),\n dollarSymbol: RSymbol.wrap(Module.getValue(Module._R_DollarSymbol, '*')),\n emptyEnv: REnvironment.wrap(Module.getValue(Module._R_EmptyEnv, '*')),\n false: RLogical.wrap(Module.getValue(Module._R_FalseValue, '*')),\n globalEnv: REnvironment.wrap(Module.getValue(Module._R_GlobalEnv, '*')),\n na: RLogical.wrap(Module.getValue(Module._R_LogicalNAValue, '*')),\n namesSymbol: RSymbol.wrap(Module.getValue(Module._R_NamesSymbol, '*')),\n naString: RObject.wrap(Module.getValue(Module._R_NaString, '*')),\n null: RNull.wrap(Module.getValue(Module._R_NilValue, '*')),\n true: RLogical.wrap(Module.getValue(Module._R_TrueValue, '*')),\n unboundValue: RObject.wrap(Module.getValue(Module._R_UnboundValue, '*')),\n };\n}\n", "import { loadScript } from './compat';\nimport { ChannelWorker } from './chan/channel';\nimport { newChannelWorker, ChannelInitMessage } from './chan/channel-common';\nimport { Message, Request, newResponse } from './chan/message';\nimport { FSNode, WebROptions } from './webr-main';\nimport { EmPtr, Module } from './emscripten';\nimport { IN_NODE } from './compat';\nimport { replaceInObject, throwUnreachable } from './utils';\nimport { WebRPayloadRaw, WebRPayloadPtr, WebRPayloadWorker, isWebRPayloadPtr } from './payload';\nimport { RObject, isRObject, REnvironment, RList, getRWorkerClass } from './robj-worker';\nimport { RCharacter, RString, keep, destroy, purge, shelters } from './robj-worker';\nimport { RLogical, RInteger, RDouble, initPersistentObjects, objs } from './robj-worker';\nimport { RPtr, RType, RTypeMap, WebRData, WebRDataRaw } from './robj';\nimport { protect, protectInc, unprotect, parseEvalBare, UnwindProtectException, safeEval } from './utils-r';\nimport { generateUUID } from './chan/task-common';\n\nimport {\n CallRObjectMethodMessage,\n CaptureRMessage,\n EvalROptions,\n EvalRMessage,\n EvalRMessageRaw,\n FSMessage,\n FSReadFileMessage,\n FSWriteFileMessage,\n InvokeWasmFunctionMessage,\n NewRObjectMessage,\n ShelterMessage,\n ShelterDestroyMessage,\n} from './webr-chan';\n\nlet initialised = false;\nlet chan: ChannelWorker | undefined;\n\nconst onWorkerMessage = function (msg: Message) {\n if (!msg || !msg.type || msg.type !== 'init') {\n return;\n }\n if (initialised) {\n throw new Error(\"Can't initialise worker multiple times.\");\n }\n const messageInit = msg as ChannelInitMessage;\n chan = newChannelWorker(messageInit);\n init(messageInit.data.config);\n initialised = true;\n};\n\nif (IN_NODE) {\n require('worker_threads').parentPort.on('message', onWorkerMessage);\n (globalThis as any).XMLHttpRequest = require('xmlhttprequest-ssl')\n .XMLHttpRequest as XMLHttpRequest;\n} else {\n globalThis.onmessage = (ev: MessageEvent<Message>) => onWorkerMessage(ev.data);\n}\n\ntype XHRResponse = {\n status: number;\n response: string | ArrayBuffer;\n};\n\nlet _config: Required<WebROptions>;\n\nfunction dispatch(msg: Message): void {\n switch (msg.type) {\n case 'request': {\n const req = msg as Request;\n const reqMsg = req.data.msg;\n\n const write = (resp: WebRPayloadWorker, transferables?: [Transferable]) =>\n chan?.write(newResponse(req.data.uuid, resp, transferables));\n try {\n switch (reqMsg.type) {\n case 'lookupPath': {\n const msg = reqMsg as FSMessage;\n const node = Module.FS.lookupPath(msg.data.path, {}).node;\n write({\n obj: copyFSNode(node as FSNode),\n payloadType: 'raw',\n });\n break;\n }\n case 'mkdir': {\n const msg = reqMsg as FSMessage;\n write({\n obj: copyFSNode(Module.FS.mkdir(msg.data.path) as FSNode),\n payloadType: 'raw',\n });\n break;\n }\n case 'readFile': {\n const msg = reqMsg as FSReadFileMessage;\n const reqData = msg.data;\n const out = {\n obj: Module.FS.readFile(reqData.path, {\n encoding: 'binary',\n flags: reqData.flags,\n }),\n payloadType: 'raw',\n };\n write(out as WebRPayloadRaw, [out.obj.buffer]);\n break;\n }\n case 'rmdir': {\n const msg = reqMsg as FSMessage;\n write({\n obj: Module.FS.rmdir(msg.data.path),\n payloadType: 'raw',\n });\n break;\n }\n case 'writeFile': {\n const msg = reqMsg as FSWriteFileMessage;\n const reqData = msg.data;\n // FIXME: Use a replacer + reviver to transfer Uint8Array\n const data = Uint8Array.from(Object.values(reqData.data));\n write({\n obj: Module.FS.writeFile(reqData.path, data, { flags: reqData.flags }),\n payloadType: 'raw',\n });\n break;\n }\n case 'unlink': {\n const msg = reqMsg as FSMessage;\n write({\n obj: Module.FS.unlink(msg.data.path),\n payloadType: 'raw',\n });\n break;\n }\n\n case 'newShelter': {\n const id = generateUUID();\n shelters.set(id, []);\n\n write({\n payloadType: 'raw',\n obj: id,\n });\n break;\n }\n\n case 'shelterSize': {\n const msg = reqMsg as ShelterMessage;\n const size = shelters.get(msg.data)!.length;\n\n write({ payloadType: 'raw', obj: size });\n break;\n }\n\n case 'shelterPurge': {\n const msg = reqMsg as ShelterMessage;\n purge(msg.data);\n\n write({ payloadType: 'raw', obj: null });\n break;\n }\n\n case 'shelterDestroy': {\n const msg = reqMsg as ShelterDestroyMessage;\n destroy(msg.data.id, msg.data.obj.obj.ptr);\n\n write({ payloadType: 'raw', obj: null });\n break;\n }\n\n case 'captureR': {\n const msg = reqMsg as CaptureRMessage;\n const data = msg.data;\n\n const shelter = data.shelter;\n const prot = { n: 0 };\n\n try {\n const capture = captureR(data.code, data.options);\n protectInc(capture, prot);\n\n const result = capture.get('result');\n const outputs = capture.get(2) as RList;\n\n keep(shelter, result);\n\n const n = outputs.length;\n const output: any[] = [];\n\n for (let i = 1; i < n + 1; ++i) {\n const out = outputs.get(i);\n const type = (out.pluck(1, 1) as RCharacter).toString();\n const data = out.get(2);\n\n if (type === 'stdout' || type === 'stderr') {\n const msg = (data as RString).toString();\n output.push({ type, data: msg });\n } else {\n keep(shelter, data);\n const payload = {\n obj: {\n ptr: data.ptr,\n type: data.type(),\n methods: RObject.getMethods(data),\n },\n payloadType: 'ptr',\n } as WebRPayloadPtr;\n output.push({ type, data: payload });\n }\n }\n\n const resultPayload = {\n payloadType: 'ptr',\n obj: {\n ptr: result.ptr,\n type: result.type(),\n methods: RObject.getMethods(result),\n },\n } as WebRPayloadPtr;\n\n write({\n payloadType: 'raw',\n obj: {\n result: resultPayload,\n output: output,\n },\n });\n } finally {\n unprotect(prot.n);\n }\n break;\n }\n\n case 'evalR': {\n const msg = reqMsg as EvalRMessage;\n\n const result = evalR(msg.data.code, msg.data.options);\n keep(msg.data.shelter, result);\n\n write({\n obj: {\n type: result.type(),\n ptr: result.ptr,\n methods: RObject.getMethods(result),\n },\n payloadType: 'ptr',\n });\n break;\n }\n\n case 'evalRRaw': {\n const msg = reqMsg as EvalRMessageRaw;\n const result = evalR(msg.data.code, msg.data.options);\n\n protect(result);\n\n const throwType = () => {\n throw new Error(`Can't convert object of type ${result.type()} to ${msg.data.outputType}.`);\n };\n\n try {\n let out: WebRDataRaw = undefined;\n switch (msg.data.outputType) {\n case 'void':\n break;\n case 'boolean':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toBoolean();\n break;\n default:\n throwType();\n }\n break;\n case 'boolean[]':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n default:\n throwType();\n }\n break;\n case 'number':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toBoolean();\n out = Number(out);\n break;\n case 'integer':\n out = (result as RInteger).toNumber();\n break;\n case 'double':\n out = (result as RDouble).toNumber();\n break;\n default:\n throwType();\n }\n break;\n case 'number[]':\n switch (result.type()) {\n case 'logical':\n out = (result as RLogical).toArray();\n out = out.map((i) => i === null ? throwType() : Number(i));\n break;\n case 'integer':\n out = (result as RInteger).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n case 'double':\n out = (result as RDouble).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n default:\n throwType();\n }\n break;\n case 'string':\n switch (result.type()) {\n case 'character':\n out = (result as RCharacter).toString();\n break;\n default:\n throwType();\n }\n break;\n case 'string[]':\n switch (result.type()) {\n case 'character':\n out = (result as RCharacter).toArray();\n if (out.some((i) => i === null)) {\n throwType();\n }\n break;\n default:\n throwType();\n }\n break;\n default:\n throw new Error('Unexpected output type in `evalRRaw().');\n }\n\n write({\n obj: out,\n payloadType: 'raw',\n });\n break;\n } finally {\n unprotect(1);\n }\n }\n\n case 'newRObject': {\n const msg = reqMsg as NewRObjectMessage;\n\n const payload = newRObject(msg.data.obj, msg.data.objType);\n keep(msg.data.shelter, payload.obj.ptr);\n\n write(payload);\n break;\n }\n\n case 'callRObjectMethod': {\n const msg = reqMsg as CallRObjectMethodMessage;\n const data = msg.data;\n const obj = data.payload ? RObject.wrap(data.payload.obj.ptr) : RObject;\n\n const payload = callRObjectMethod(obj, data.prop, data.args);\n if (isWebRPayloadPtr(payload)) {\n // TODO: Remove `!`\n keep(data.shelter!, payload.obj.ptr);\n }\n\n write(payload);\n break;\n }\n\n case 'invokeWasmFunction': {\n const msg = reqMsg as InvokeWasmFunctionMessage;\n const res = Module.getWasmTableEntry(msg.data.ptr)(...msg.data.args) as number;\n write({\n payloadType: 'raw',\n obj: res,\n });\n break;\n }\n\n case 'installPackage': {\n evalR(`webr::install(\n \"${reqMsg.data.name as string}\",\n repos = \"${_config.repoUrl}\",\n quiet = ${reqMsg.data.quiet ? 'TRUE' : 'FALSE'}\n )`);\n\n write({\n obj: true,\n payloadType: 'raw',\n });\n break;\n }\n default:\n throw new Error('Unknown event `' + reqMsg.type + '`');\n }\n } catch (_e) {\n const e = _e as Error;\n write({\n payloadType: 'err',\n obj: { name: e.name, message: e.message, stack: e.stack },\n });\n\n /* Capture continuation token and resume R's non-local transfer.\n * If the exception has reached this point there should no longer be\n * any `evalJs()` calls on the stack. As such, we assume there are no R\n * calls above us and it is safe to `longjmp` from here.\n */\n if (e instanceof UnwindProtectException) {\n Module._R_ContinueUnwind(e.cont);\n throwUnreachable();\n }\n }\n break;\n }\n default:\n throw new Error('Unknown event `' + msg.type + '`');\n }\n}\n\nfunction copyFSNode(obj: FSNode): FSNode {\n const retObj = {\n id: obj.id,\n name: obj.name,\n mode: obj.mode,\n isFolder: obj.isFolder,\n contents: {},\n };\n if (obj.isFolder) {\n retObj.contents = Object.entries(obj.contents).map(([, node]) => copyFSNode(node));\n }\n return retObj;\n}\n\nfunction downloadFileContent(URL: string, headers: Array<string> = []): XHRResponse {\n const request = new XMLHttpRequest();\n request.open('GET', URL, false);\n request.responseType = 'arraybuffer';\n\n try {\n headers.forEach((header) => {\n const splitHeader = header.split(': ');\n request.setRequestHeader(splitHeader[0], splitHeader[1]);\n });\n } catch {\n const responseText = 'An error occured setting headers in XMLHttpRequest';\n console.error(responseText);\n return { status: 400, response: responseText };\n }\n\n try {\n request.send(null);\n const status = IN_NODE\n ? (JSON.parse(String(request.status)) as { data: { statusCode: number } }).data.statusCode\n : request.status;\n\n if (status >= 200 && status < 300) {\n return { status: status, response: request.response as ArrayBuffer };\n } else {\n const responseText = new TextDecoder().decode(request.response as ArrayBuffer);\n console.error(`Error fetching ${URL} - ${responseText}`);\n return { status: status, response: responseText };\n }\n } catch {\n return { status: 400, response: 'An error occured in XMLHttpRequest' };\n }\n}\n\nfunction newRObject(data: WebRData, objType: RType | 'object'): WebRPayloadPtr {\n const RClass = objType === 'object' ? RObject : getRWorkerClass(RTypeMap[objType]);\n const obj = new RClass(\n replaceInObject(data, isWebRPayloadPtr, (t: WebRPayloadPtr) =>\n RObject.wrap(t.obj.ptr)\n ) as WebRData\n );\n return {\n obj: {\n type: obj.type(),\n ptr: obj.ptr,\n methods: RObject.getMethods(obj),\n },\n payloadType: 'ptr',\n };\n}\n\nfunction callRObjectMethod(\n obj: RObject | typeof RObject,\n prop: string,\n args: WebRPayloadWorker[]\n): WebRPayloadWorker {\n if (!(prop in obj)) {\n throw new ReferenceError(`${prop} is not defined`);\n }\n\n const fn = obj[prop as keyof typeof obj];\n if (typeof fn !== 'function') {\n throw Error('Requested property cannot be invoked');\n }\n\n const res = (fn as Function).apply(\n obj,\n args.map((arg) => {\n if (arg.payloadType === 'ptr') {\n return RObject.wrap(arg.obj.ptr);\n }\n return replaceInObject(arg.obj, isWebRPayloadPtr, (t: WebRPayloadPtr) =>\n RObject.wrap(t.obj.ptr)\n );\n })\n ) as WebRData;\n\n const ret = replaceInObject(res, isRObject, (obj: RObject) => {\n return {\n obj: { type: obj.type(), ptr: obj.ptr, methods: RObject.getMethods(obj) },\n payloadType: 'ptr',\n };\n }) as WebRDataRaw;\n\n return { obj: ret, payloadType: 'raw' };\n}\n\nfunction captureR(code: string, options: EvalROptions = {}): RList {\n const prot = { n: 0 };\n try {\n const _options: Required<EvalROptions> = Object.assign(\n {\n env: objs.globalEnv,\n captureStreams: true,\n captureConditions: true,\n withAutoprint: false,\n throwJsException: true,\n withHandlers: true,\n },\n replaceInObject(options, isWebRPayloadPtr, (t: WebRPayloadPtr) =>\n RObject.wrap(t.obj.ptr)\n )\n );\n\n const envObj = new REnvironment(_options.env);\n protectInc(envObj, prot);\n if (envObj.type() !== 'environment') {\n throw new Error('Attempted to evaluate R code with invalid environment object');\n }\n\n const tPtr = objs.true.ptr;\n const fPtr = objs.false.ptr;\n\n const fn = parseEvalBare('webr::eval_r', objs.baseEnv);\n protectInc(fn, prot);\n\n const codeObj = new RCharacter(code);\n protectInc(codeObj, prot);\n\n const call = Module._Rf_lang6(\n fn.ptr,\n codeObj.ptr,\n _options.captureConditions ? tPtr : fPtr,\n _options.captureStreams ? tPtr : fPtr,\n _options.withAutoprint ? tPtr : fPtr,\n _options.withHandlers ? tPtr : fPtr\n );\n protectInc(call, prot);\n\n const capture = RList.wrap(safeEval(call, envObj));\n protectInc(capture, prot);\n\n if (_options.captureConditions && _options.throwJsException) {\n const output = capture.get('output') as RList;\n const error = (output.toArray() as RObject[]).find(\n (out) => out.get('type').toString() === 'error'\n );\n if (error) {\n throw new Error(\n error.pluck('data', 'message')?.toString() || 'An error occured evaluating R code.'\n );\n }\n }\n\n return capture;\n } finally {\n unprotect(prot.n);\n }\n}\n\nfunction evalR(code: string, options: EvalROptions = {}): RObject {\n const capture = captureR(code, options);\n Module._Rf_protect(capture.ptr);\n\n try {\n // Send captured conditions and output to the JS console. By default, captured\n // error conditions are thrown and so do not need to be handled here.\n const output = capture.get('output') as RList;\n for (let i = 1; i <= output.length; i++) {\n const out = output.get(i);\n const outputType = out.get('type').toString();\n switch (outputType) {\n case 'stdout':\n chan?.writeSystem({ type: 'console.log', data: out.get('data').toString() });\n break;\n case 'stderr':\n chan?.writeSystem({ type: 'console.warn', data: out.get('data').toString() });\n break;\n case 'message':\n chan?.writeSystem({\n type: 'console.warn',\n data: out.pluck('data', 'message')?.toString() || '',\n });\n break;\n case 'warning':\n chan?.writeSystem({\n type: 'console.warn',\n data: `Warning message: \\n${out.pluck('data', 'message')?.toString() || ''}`,\n });\n break;\n default:\n chan?.writeSystem({ type: 'console.warn', data: `Output of type ${outputType}:` });\n chan?.writeSystem({ type: 'console.warn', data: out.get('data').toJs() });\n break;\n }\n }\n return capture.get('result');\n } finally {\n Module._Rf_unprotect(1);\n }\n}\n\nfunction init(config: Required<WebROptions>) {\n _config = config;\n\n const env = { ...config.REnv };\n if (!env.TZ) {\n const fmt = new Intl.DateTimeFormat();\n env.TZ = fmt.resolvedOptions().timeZone;\n }\n\n Module.preRun = [];\n Module.arguments = _config.RArgs;\n Module.noExitRuntime = true;\n Module.noImageDecoding = true;\n Module.noAudioDecoding = true;\n Module.noInitialRun = true;\n\n // Don't instantiate .so libraries packaged through `WEBR_REPO` too\n // early. Otherwise C++ libraries with dynamic initialisation of\n // global variables might call into the R API too early, before R has\n // started.\n Module.noWasmDecoding = true;\n\n Module.preRun.push(() => {\n if (IN_NODE) {\n globalThis.FS = Module.FS;\n }\n if (_config.createLazyFilesystem) {\n Module.createLazyFilesystem();\n }\n Module.FS.mkdirTree(_config.homedir);\n Module.ENV.HOME = _config.homedir;\n Module.FS.chdir(_config.homedir);\n Module.ENV = Object.assign(Module.ENV, env);\n });\n\n chan?.setDispatchHandler(dispatch);\n\n Module.onRuntimeInitialized = () => {\n chan?.run(_config.RArgs);\n };\n\n Module.webr = {\n UnwindProtectException: UnwindProtectException,\n resolveInit: () => {\n initPersistentObjects();\n chan?.setInterrupt(Module._Rf_onintr);\n Module.setValue(Module._R_Interactive, _config.interactive, '*');\n evalR(`options(webr_pkg_repos=\"${_config.repoUrl}\")`);\n chan?.resolve();\n },\n\n readConsole: () => {\n if (!chan) {\n throw new Error(\"Can't read console input without a communication channel\");\n }\n return chan.inputOrDispatch();\n },\n\n handleEvents: () => {\n chan?.handleInterrupt();\n },\n\n evalJs: (code: RPtr): number => {\n try {\n return (0, eval)(Module.UTF8ToString(code));\n } catch (e) {\n /* Capture continuation token and resume R's non-local transfer here.\n * By resuming here we avoid potentially unwinding a target intermediate\n * R stack on the way up to the top level.\n */\n if (e instanceof UnwindProtectException) {\n Module._R_ContinueUnwind(e.cont);\n throwUnreachable();\n } else if (e === Infinity) {\n // Propagate interruption\n throw e;\n }\n const msg = Module.allocateUTF8OnStack(\n `An error occured during JavaScript evaluation:\\n ${(e as { message: string }).message}`\n );\n Module._Rf_error(msg);\n }\n throwUnreachable();\n return 0;\n },\n\n setTimeoutWasm: (ptr: EmPtr, delay: number, ...args: number[]): void => {\n chan?.writeSystem({ type: 'setTimeoutWasm', data: { ptr, delay, args } });\n },\n };\n\n Module.locateFile = (path: string) => _config.baseUrl + path;\n Module.downloadFileContent = downloadFileContent;\n\n Module.print = (text: string) => {\n chan?.write({ type: 'stdout', data: text });\n };\n Module.printErr = (text: string) => {\n chan?.write({ type: 'stderr', data: text });\n };\n Module.setPrompt = (prompt: string) => {\n chan?.write({ type: 'prompt', data: prompt });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (globalThis as any).Module = Module;\n\n // At the next tick, launch the REPL. This never returns.\n setTimeout(() => {\n const scriptSrc = `${_config.baseUrl}R.bin.js`;\n loadScript(scriptSrc);\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,YAAA,aAAa;AAK1B,aAAgB,UAAU,MAAgB,QAAgB,OAAa;AACrE,YAAM,OAAO,QAAQ;AACrB,YAAM,MAAM;AACZ,WAAK,UAAU,QAAQ,IAAI;AAC3B,WAAK,UAAU,SAAS,GAAG,GAAG;IAChC;AALA,YAAA,YAAA;AAOA,aAAgB,SAAS,MAAgB,QAAgB,OAAa;AACpE,YAAM,OAAO,KAAK,MAAM,QAAQ,UAAa;AAC7C,YAAM,MAAM;AACZ,WAAK,UAAU,QAAQ,IAAI;AAC3B,WAAK,UAAU,SAAS,GAAG,GAAG;IAChC;AALA,YAAA,WAAA;AAOA,aAAgB,SAAS,MAAgB,QAAc;AACrD,YAAM,OAAO,KAAK,SAAS,MAAM;AACjC,YAAM,MAAM,KAAK,UAAU,SAAS,CAAC;AACrC,aAAO,OAAO,aAAgB;IAChC;AAJA,YAAA,WAAA;AAMA,aAAgB,UAAU,MAAgB,QAAc;AACtD,YAAM,OAAO,KAAK,UAAU,MAAM;AAClC,YAAM,MAAM,KAAK,UAAU,SAAS,CAAC;AACrC,aAAO,OAAO,aAAgB;IAChC;AAJA,YAAA,YAAA;;;;;;;;;;;;;AC1BA,QAAA,QAAA;AAEA,QAAM,2BACH,OAAO,YAAY,iBAAe,KAAA,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,SAAG,QAAA,OAAA,SAAA,SAAA,GAAG,eAAe,OAAM,YACvE,OAAO,gBAAgB,eACvB,OAAO,gBAAgB;AAEzB,aAAgB,UAAU,KAAW;AACnC,YAAM,YAAY,IAAI;AAEtB,UAAI,aAAa;AACjB,UAAI,MAAM;AACV,aAAO,MAAM,WAAW;AACtB,YAAI,QAAQ,IAAI,WAAW,KAAK;AAEhC,aAAK,QAAQ,gBAAgB,GAAG;AAE9B;AACA;oBACU,QAAQ,gBAAgB,GAAG;AAErC,wBAAc;eACT;AAEL,cAAI,SAAS,SAAU,SAAS,OAAQ;AAEtC,gBAAI,MAAM,WAAW;AACnB,oBAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,mBAAK,QAAQ,WAAY,OAAQ;AAC/B,kBAAE;AACF,0BAAU,QAAQ,SAAU,OAAO,QAAQ,QAAS;;;;AAK1D,eAAK,QAAQ,gBAAgB,GAAG;AAE9B,0BAAc;iBACT;AAEL,0BAAc;;;;AAIpB,aAAO;IACT;AAtCA,YAAA,YAAA;AAwCA,aAAgB,aAAa,KAAa,QAAoB,cAAoB;AAChF,YAAM,YAAY,IAAI;AACtB,UAAI,SAAS;AACb,UAAI,MAAM;AACV,aAAO,MAAM,WAAW;AACtB,YAAI,QAAQ,IAAI,WAAW,KAAK;AAEhC,aAAK,QAAQ,gBAAgB,GAAG;AAE9B,iBAAO,QAAQ,IAAI;AACnB;oBACU,QAAQ,gBAAgB,GAAG;AAErC,iBAAO,QAAQ,IAAM,SAAS,IAAK,KAAQ;eACtC;AAEL,cAAI,SAAS,SAAU,SAAS,OAAQ;AAEtC,gBAAI,MAAM,WAAW;AACnB,oBAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,mBAAK,QAAQ,WAAY,OAAQ;AAC/B,kBAAE;AACF,0BAAU,QAAQ,SAAU,OAAO,QAAQ,QAAS;;;;AAK1D,eAAK,QAAQ,gBAAgB,GAAG;AAE9B,mBAAO,QAAQ,IAAM,SAAS,KAAM,KAAQ;AAC5C,mBAAO,QAAQ,IAAM,SAAS,IAAK,KAAQ;iBACtC;AAEL,mBAAO,QAAQ,IAAM,SAAS,KAAM,IAAQ;AAC5C,mBAAO,QAAQ,IAAM,SAAS,KAAM,KAAQ;AAC5C,mBAAO,QAAQ,IAAM,SAAS,IAAK,KAAQ;;;AAI/C,eAAO,QAAQ,IAAK,QAAQ,KAAQ;;IAExC;AAzCA,YAAA,eAAA;AA2CA,QAAM,oBAAoB,0BAA0B,IAAI,YAAW,IAAK;AAC3D,YAAA,yBAAyB,CAAC,0BACnC,MAAA,aACA,OAAO,YAAY,iBAAe,KAAA,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,SAAG,QAAA,OAAA,SAAA,SAAA,GAAG,eAAe,OAAM,UACtE,MACA;AAEJ,aAAS,mBAAmB,KAAa,QAAoB,cAAoB;AAC/E,aAAO,IAAI,kBAAmB,OAAO,GAAG,GAAG,YAAY;IACzD;AAEA,aAAS,uBAAuB,KAAa,QAAoB,cAAoB;AACnF,wBAAmB,WAAW,KAAK,OAAO,SAAS,YAAY,CAAC;IAClE;AAEa,YAAA,gBAAe,sBAAiB,QAAjB,sBAAiB,SAAA,SAAjB,kBAAmB,cAAa,yBAAyB;AAErF,QAAM,aAAa;AAEnB,aAAgB,aAAa,OAAmB,aAAqB,YAAkB;AACrF,UAAI,SAAS;AACb,YAAM,MAAM,SAAS;AAErB,YAAM,QAAuB,CAAA;AAC7B,UAAI,SAAS;AACb,aAAO,SAAS,KAAK;AACnB,cAAM,QAAQ,MAAM,QAAQ;AAC5B,aAAK,QAAQ,SAAU,GAAG;AAExB,gBAAM,KAAK,KAAK;oBACN,QAAQ,SAAU,KAAM;AAElC,gBAAM,QAAQ,MAAM,QAAQ,IAAK;AACjC,gBAAM,MAAO,QAAQ,OAAS,IAAK,KAAK;oBAC9B,QAAQ,SAAU,KAAM;AAElC,gBAAM,QAAQ,MAAM,QAAQ,IAAK;AACjC,gBAAM,QAAQ,MAAM,QAAQ,IAAK;AACjC,gBAAM,MAAO,QAAQ,OAAS,KAAO,SAAS,IAAK,KAAK;oBAC9C,QAAQ,SAAU,KAAM;AAElC,gBAAM,QAAQ,MAAM,QAAQ,IAAK;AACjC,gBAAM,QAAQ,MAAM,QAAQ,IAAK;AACjC,gBAAM,QAAQ,MAAM,QAAQ,IAAK;AACjC,cAAI,QAAS,QAAQ,MAAS,KAAS,SAAS,KAAS,SAAS,IAAQ;AAC1E,cAAI,OAAO,OAAQ;AACjB,oBAAQ;AACR,kBAAM,KAAO,SAAS,KAAM,OAAS,KAAM;AAC3C,mBAAO,QAAU,OAAO;;AAE1B,gBAAM,KAAK,IAAI;eACV;AACL,gBAAM,KAAK,KAAK;;AAGlB,YAAI,MAAM,UAAU,YAAY;AAC9B,oBAAU,OAAO,aAAa,GAAG,KAAK;AACtC,gBAAM,SAAS;;;AAInB,UAAI,MAAM,SAAS,GAAG;AACpB,kBAAU,OAAO,aAAa,GAAG,KAAK;;AAGxC,aAAO;IACT;AA/CA,YAAA,eAAA;AAiDA,QAAM,oBAAoB,0BAA0B,IAAI,YAAW,IAAK;AAC3D,YAAA,yBAAyB,CAAC,0BACnC,MAAA,aACA,OAAO,YAAY,iBAAe,KAAA,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,SAAG,QAAA,OAAA,SAAA,SAAA,GAAG,cAAc,OAAM,UACrE,MACA;AAEJ,aAAgB,aAAa,OAAmB,aAAqB,YAAkB;AACrF,YAAM,cAAc,MAAM,SAAS,aAAa,cAAc,UAAU;AACxE,aAAO,kBAAmB,OAAO,WAAW;IAC9C;AAHA,YAAA,eAAA;;;;;;;;;;ACnKA,QAAa,UAAb,MAAoB;MAClB,YAAqB,MAAuB,MAAgB;AAAvC,aAAA,OAAA;AAAuB,aAAA,OAAA;MAAmB;;AADjE,YAAA,UAAA;;;;;;;;;;ACHA,QAAa,cAAb,cAAiC,MAAK;MACpC,YAAY,SAAe;AACzB,cAAM,OAAO;AAGb,cAAM,QAAsC,OAAO,OAAO,YAAY,SAAS;AAC/E,eAAO,eAAe,MAAM,KAAK;AAEjC,eAAO,eAAe,MAAM,QAAQ;UAClC,cAAc;UACd,YAAY;UACZ,OAAO,YAAY;SACpB;MACH;;AAbF,YAAA,cAAA;;;;;;;;;;ACCA,QAAA,gBAAA;AACA,QAAA,QAAA;AAEa,YAAA,gBAAgB;AAO7B,QAAM,sBAAsB,aAAc;AAC1C,QAAM,sBAAsB,cAAc;AAE1C,aAAgB,0BAA0B,EAAE,KAAK,KAAI,GAAY;AAC/D,UAAI,OAAO,KAAK,QAAQ,KAAK,OAAO,qBAAqB;AAEvD,YAAI,SAAS,KAAK,OAAO,qBAAqB;AAE5C,gBAAM,KAAK,IAAI,WAAW,CAAC;AAC3B,gBAAM,OAAO,IAAI,SAAS,GAAG,MAAM;AACnC,eAAK,UAAU,GAAG,GAAG;AACrB,iBAAO;eACF;AAEL,gBAAM,UAAU,MAAM;AACtB,gBAAM,SAAS,MAAM;AACrB,gBAAM,KAAK,IAAI,WAAW,CAAC;AAC3B,gBAAM,OAAO,IAAI,SAAS,GAAG,MAAM;AAEnC,eAAK,UAAU,GAAI,QAAQ,IAAM,UAAU,CAAI;AAE/C,eAAK,UAAU,GAAG,MAAM;AACxB,iBAAO;;aAEJ;AAEL,cAAM,KAAK,IAAI,WAAW,EAAE;AAC5B,cAAM,OAAO,IAAI,SAAS,GAAG,MAAM;AACnC,aAAK,UAAU,GAAG,IAAI;AACtB,SAAA,GAAA,MAAA,UAAS,MAAM,GAAG,GAAG;AACrB,eAAO;;IAEX;AA7BA,YAAA,4BAAA;AA+BA,aAAgB,qBAAqB,MAAU;AAC7C,YAAM,OAAO,KAAK,QAAO;AACzB,YAAM,MAAM,KAAK,MAAM,OAAO,GAAG;AACjC,YAAM,QAAQ,OAAO,MAAM,OAAO;AAGlC,YAAM,YAAY,KAAK,MAAM,OAAO,GAAG;AACvC,aAAO;QACL,KAAK,MAAM;QACX,MAAM,OAAO,YAAY;;IAE7B;AAXA,YAAA,uBAAA;AAaA,aAAgB,yBAAyB,QAAe;AACtD,UAAI,kBAAkB,MAAM;AAC1B,cAAM,WAAW,qBAAqB,MAAM;AAC5C,eAAO,0BAA0B,QAAQ;aACpC;AACL,eAAO;;IAEX;AAPA,YAAA,2BAAA;AASA,aAAgB,0BAA0B,MAAgB;AACxD,YAAM,OAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;AAGvE,cAAQ,KAAK,YAAY;QACvB,KAAK,GAAG;AAEN,gBAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,gBAAM,OAAO;AACb,iBAAO,EAAE,KAAK,KAAI;;QAEpB,KAAK,GAAG;AAEN,gBAAM,oBAAoB,KAAK,UAAU,CAAC;AAC1C,gBAAM,WAAW,KAAK,UAAU,CAAC;AACjC,gBAAM,OAAO,oBAAoB,KAAO,aAAc;AACtD,gBAAM,OAAO,sBAAsB;AACnC,iBAAO,EAAE,KAAK,KAAI;;QAEpB,KAAK,IAAI;AAGP,gBAAM,OAAM,GAAA,MAAA,UAAS,MAAM,CAAC;AAC5B,gBAAM,OAAO,KAAK,UAAU,CAAC;AAC7B,iBAAO,EAAE,KAAK,KAAI;;QAEpB;AACE,gBAAM,IAAI,cAAA,YAAY,gEAAgE,KAAK,QAAQ;;IAEzG;AA7BA,YAAA,4BAAA;AA+BA,aAAgB,yBAAyB,MAAgB;AACvD,YAAM,WAAW,0BAA0B,IAAI;AAC/C,aAAO,IAAI,KAAK,SAAS,MAAM,MAAM,SAAS,OAAO,GAAG;IAC1D;AAHA,YAAA,2BAAA;AAKa,YAAA,qBAAqB;MAChC,MAAM,QAAA;MACN,QAAQ;MACR,QAAQ;;;;;;;;;;;ACxGV,QAAA,YAAA;AACA,QAAA,cAAA;AAkBA,QAAa,iBAAb,MAA2B;MAgBzB,cAAA;AAPiB,aAAA,kBAA+E,CAAA;AAC/E,aAAA,kBAA+E,CAAA;AAG/E,aAAA,WAAwE,CAAA;AACxE,aAAA,WAAwE,CAAA;AAGvF,aAAK,SAAS,YAAA,kBAAkB;MAClC;MAEO,SAAS,EACd,MACA,QAAAA,SACA,QAAAC,QAAM,GAKP;AACC,YAAI,QAAQ,GAAG;AAEb,eAAK,SAAS,IAAI,IAAID;AACtB,eAAK,SAAS,IAAI,IAAIC;eACjB;AAEL,gBAAM,QAAQ,IAAI;AAClB,eAAK,gBAAgB,KAAK,IAAID;AAC9B,eAAK,gBAAgB,KAAK,IAAIC;;MAElC;MAEO,YAAY,QAAiB,SAAoB;AAEtD,iBAAS,IAAI,GAAG,IAAI,KAAK,gBAAgB,QAAQ,KAAK;AACpD,gBAAM,YAAY,KAAK,gBAAgB,CAAC;AACxC,cAAI,aAAa,MAAM;AACrB,kBAAM,OAAO,UAAU,QAAQ,OAAO;AACtC,gBAAI,QAAQ,MAAM;AAChB,oBAAM,OAAO,KAAK;AAClB,qBAAO,IAAI,UAAA,QAAQ,MAAM,IAAI;;;;AAMnC,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,gBAAM,YAAY,KAAK,SAAS,CAAC;AACjC,cAAI,aAAa,MAAM;AACrB,kBAAM,OAAO,UAAU,QAAQ,OAAO;AACtC,gBAAI,QAAQ,MAAM;AAChB,oBAAM,OAAO;AACb,qBAAO,IAAI,UAAA,QAAQ,MAAM,IAAI;;;;AAKnC,YAAI,kBAAkB,UAAA,SAAS;AAE7B,iBAAO;;AAET,eAAO;MACT;MAEO,OAAO,MAAkB,MAAc,SAAoB;AAChE,cAAM,YAAY,OAAO,IAAI,KAAK,gBAAgB,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI;AACjF,YAAI,WAAW;AACb,iBAAO,UAAU,MAAM,MAAM,OAAO;eAC/B;AAEL,iBAAO,IAAI,UAAA,QAAQ,MAAM,IAAI;;MAEjC;;AAjFF,YAAA,iBAAA;AACyB,mBAAA,eAA8C,IAAI,eAAc;;;;;;;;;;ACtBzF,aAAgB,iBAAiB,QAAsE;AACrG,UAAI,kBAAkB,YAAY;AAChC,eAAO;iBACE,YAAY,OAAO,MAAM,GAAG;AACrC,eAAO,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;iBAChE,kBAAkB,aAAa;AACxC,eAAO,IAAI,WAAW,MAAM;aACvB;AAEL,eAAO,WAAW,KAAK,MAAM;;IAEjC;AAXA,YAAA,mBAAA;AAaA,aAAgB,eAAe,QAAyD;AACtF,UAAI,kBAAkB,aAAa;AACjC,eAAO,IAAI,SAAS,MAAM;;AAG5B,YAAM,aAAa,iBAAiB,MAAM;AAC1C,aAAO,IAAI,SAAS,WAAW,QAAQ,WAAW,YAAY,WAAW,UAAU;IACrF;AAPA,YAAA,iBAAA;;;;;;;;;;ACbA,QAAA,SAAA;AACA,QAAA,mBAAA;AACA,QAAA,QAAA;AACA,QAAA,gBAAA;AAGa,YAAA,oBAAoB;AACpB,YAAA,8BAA8B;AAE3C,QAAa,UAAb,MAAoB;MAKlB,YACmB,iBAAkD,iBAAA,eAAe,cACjE,UAAuB,QACvB,WAAW,QAAA,mBACX,oBAAoB,QAAA,6BACpB,WAAW,OACX,eAAe,OACf,kBAAkB,OAClB,sBAAsB,OAAK;AAP3B,aAAA,iBAAA;AACA,aAAA,UAAA;AACA,aAAA,WAAA;AACA,aAAA,oBAAA;AACA,aAAA,WAAA;AACA,aAAA,eAAA;AACA,aAAA,kBAAA;AACA,aAAA,sBAAA;AAZX,aAAA,MAAM;AACN,aAAA,OAAO,IAAI,SAAS,IAAI,YAAY,KAAK,iBAAiB,CAAC;AAC3D,aAAA,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM;MAW5C;MAEK,oBAAiB;AACvB,aAAK,MAAM;MACb;;;;;;MAOO,gBAAgB,QAAe;AACpC,aAAK,kBAAiB;AACtB,aAAK,SAAS,QAAQ,CAAC;AACvB,eAAO,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG;MACxC;;;;MAKO,OAAO,QAAe;AAC3B,aAAK,kBAAiB;AACtB,aAAK,SAAS,QAAQ,CAAC;AACvB,eAAO,KAAK,MAAM,MAAM,GAAG,KAAK,GAAG;MACrC;MAEQ,SAAS,QAAiB,OAAa;AAC7C,YAAI,QAAQ,KAAK,UAAU;AACzB,gBAAM,IAAI,MAAM,6BAA6B,OAAO;;AAGtD,YAAI,UAAU,MAAM;AAClB,eAAK,UAAS;mBACL,OAAO,WAAW,WAAW;AACtC,eAAK,cAAc,MAAM;mBAChB,OAAO,WAAW,UAAU;AACrC,eAAK,aAAa,MAAM;mBACf,OAAO,WAAW,UAAU;AACrC,eAAK,aAAa,MAAM;eACnB;AACL,eAAK,aAAa,QAAQ,KAAK;;MAEnC;MAEQ,wBAAwB,aAAmB;AACjD,cAAM,eAAe,KAAK,MAAM;AAEhC,YAAI,KAAK,KAAK,aAAa,cAAc;AACvC,eAAK,aAAa,eAAe,CAAC;;MAEtC;MAEQ,aAAa,SAAe;AAClC,cAAM,YAAY,IAAI,YAAY,OAAO;AACzC,cAAM,WAAW,IAAI,WAAW,SAAS;AACzC,cAAM,UAAU,IAAI,SAAS,SAAS;AAEtC,iBAAS,IAAI,KAAK,KAAK;AAEvB,aAAK,OAAO;AACZ,aAAK,QAAQ;MACf;MAEQ,YAAS;AACf,aAAK,QAAQ,GAAI;MACnB;MAEQ,cAAc,QAAe;AACnC,YAAI,WAAW,OAAO;AACpB,eAAK,QAAQ,GAAI;eACZ;AACL,eAAK,QAAQ,GAAI;;MAErB;MACQ,aAAa,QAAc;AACjC,YAAI,OAAO,cAAc,MAAM,KAAK,CAAC,KAAK,qBAAqB;AAC7D,cAAI,UAAU,GAAG;AACf,gBAAI,SAAS,KAAM;AAEjB,mBAAK,QAAQ,MAAM;uBACV,SAAS,KAAO;AAEzB,mBAAK,QAAQ,GAAI;AACjB,mBAAK,QAAQ,MAAM;uBACV,SAAS,OAAS;AAE3B,mBAAK,QAAQ,GAAI;AACjB,mBAAK,SAAS,MAAM;uBACX,SAAS,YAAa;AAE/B,mBAAK,QAAQ,GAAI;AACjB,mBAAK,SAAS,MAAM;mBACf;AAEL,mBAAK,QAAQ,GAAI;AACjB,mBAAK,SAAS,MAAM;;iBAEjB;AACL,gBAAI,UAAU,KAAO;AAEnB,mBAAK,QAAQ,MAAQ,SAAS,EAAK;uBAC1B,UAAU,MAAO;AAE1B,mBAAK,QAAQ,GAAI;AACjB,mBAAK,QAAQ,MAAM;uBACV,UAAU,QAAS;AAE5B,mBAAK,QAAQ,GAAI;AACjB,mBAAK,SAAS,MAAM;uBACX,UAAU,aAAa;AAEhC,mBAAK,QAAQ,GAAI;AACjB,mBAAK,SAAS,MAAM;mBACf;AAEL,mBAAK,QAAQ,GAAI;AACjB,mBAAK,SAAS,MAAM;;;eAGnB;AAEL,cAAI,KAAK,cAAc;AAErB,iBAAK,QAAQ,GAAI;AACjB,iBAAK,SAAS,MAAM;iBACf;AAEL,iBAAK,QAAQ,GAAI;AACjB,iBAAK,SAAS,MAAM;;;MAG1B;MAEQ,kBAAkB,YAAkB;AAC1C,YAAI,aAAa,IAAI;AAEnB,eAAK,QAAQ,MAAO,UAAU;mBACrB,aAAa,KAAO;AAE7B,eAAK,QAAQ,GAAI;AACjB,eAAK,QAAQ,UAAU;mBACd,aAAa,OAAS;AAE/B,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,UAAU;mBACf,aAAa,YAAa;AAEnC,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,UAAU;eACnB;AACL,gBAAM,IAAI,MAAM,oBAAoB,2BAA2B;;MAEnE;MAEQ,aAAa,QAAc;AACjC,cAAM,gBAAgB,IAAI;AAC1B,cAAM,YAAY,OAAO;AAEzB,YAAI,YAAY,OAAA,wBAAwB;AACtC,gBAAM,cAAa,GAAA,OAAA,WAAU,MAAM;AACnC,eAAK,wBAAwB,gBAAgB,UAAU;AACvD,eAAK,kBAAkB,UAAU;AACjC,WAAA,GAAA,OAAA,cAAa,QAAQ,KAAK,OAAO,KAAK,GAAG;AACzC,eAAK,OAAO;eACP;AACL,gBAAM,cAAa,GAAA,OAAA,WAAU,MAAM;AACnC,eAAK,wBAAwB,gBAAgB,UAAU;AACvD,eAAK,kBAAkB,UAAU;AACjC,WAAA,GAAA,OAAA,cAAa,QAAQ,KAAK,OAAO,KAAK,GAAG;AACzC,eAAK,OAAO;;MAEhB;MAEQ,aAAa,QAAiB,OAAa;AAEjD,cAAM,MAAM,KAAK,eAAe,YAAY,QAAQ,KAAK,OAAO;AAChE,YAAI,OAAO,MAAM;AACf,eAAK,gBAAgB,GAAG;mBACf,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAK,YAAY,QAAQ,KAAK;mBACrB,YAAY,OAAO,MAAM,GAAG;AACrC,eAAK,aAAa,MAAM;mBACf,OAAO,WAAW,UAAU;AACrC,eAAK,UAAU,QAAmC,KAAK;eAClD;AAEL,gBAAM,IAAI,MAAM,wBAAwB,OAAO,UAAU,SAAS,MAAM,MAAM,GAAG;;MAErF;MAEQ,aAAa,QAAuB;AAC1C,cAAM,OAAO,OAAO;AACpB,YAAI,OAAO,KAAO;AAEhB,eAAK,QAAQ,GAAI;AACjB,eAAK,QAAQ,IAAI;mBACR,OAAO,OAAS;AAEzB,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;mBACT,OAAO,YAAa;AAE7B,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;eACb;AACL,gBAAM,IAAI,MAAM,qBAAqB,MAAM;;AAE7C,cAAM,SAAQ,GAAA,cAAA,kBAAiB,MAAM;AACrC,aAAK,SAAS,KAAK;MACrB;MAEQ,YAAY,QAAwB,OAAa;AACvD,cAAM,OAAO,OAAO;AACpB,YAAI,OAAO,IAAI;AAEb,eAAK,QAAQ,MAAO,IAAI;mBACf,OAAO,OAAS;AAEzB,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;mBACT,OAAO,YAAa;AAE7B,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;eACb;AACL,gBAAM,IAAI,MAAM,oBAAoB,MAAM;;AAE5C,mBAAW,QAAQ,QAAQ;AACzB,eAAK,SAAS,MAAM,QAAQ,CAAC;;MAEjC;MAEQ,sBAAsB,QAAiC,MAA2B;AACxF,YAAI,QAAQ;AAEZ,mBAAW,OAAO,MAAM;AACtB,cAAI,OAAO,GAAG,MAAM,QAAW;AAC7B;;;AAIJ,eAAO;MACT;MAEQ,UAAU,QAAiC,OAAa;AAC9D,cAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,YAAI,KAAK,UAAU;AACjB,eAAK,KAAI;;AAGX,cAAM,OAAO,KAAK,kBAAkB,KAAK,sBAAsB,QAAQ,IAAI,IAAI,KAAK;AAEpF,YAAI,OAAO,IAAI;AAEb,eAAK,QAAQ,MAAO,IAAI;mBACf,OAAO,OAAS;AAEzB,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;mBACT,OAAO,YAAa;AAE7B,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;eACb;AACL,gBAAM,IAAI,MAAM,yBAAyB,MAAM;;AAGjD,mBAAW,OAAO,MAAM;AACtB,gBAAM,QAAQ,OAAO,GAAG;AAExB,cAAI,EAAE,KAAK,mBAAmB,UAAU,SAAY;AAClD,iBAAK,aAAa,GAAG;AACrB,iBAAK,SAAS,OAAO,QAAQ,CAAC;;;MAGpC;MAEQ,gBAAgB,KAAY;AAClC,cAAM,OAAO,IAAI,KAAK;AACtB,YAAI,SAAS,GAAG;AAEd,eAAK,QAAQ,GAAI;mBACR,SAAS,GAAG;AAErB,eAAK,QAAQ,GAAI;mBACR,SAAS,GAAG;AAErB,eAAK,QAAQ,GAAI;mBACR,SAAS,GAAG;AAErB,eAAK,QAAQ,GAAI;mBACR,SAAS,IAAI;AAEtB,eAAK,QAAQ,GAAI;mBACR,OAAO,KAAO;AAEvB,eAAK,QAAQ,GAAI;AACjB,eAAK,QAAQ,IAAI;mBACR,OAAO,OAAS;AAEzB,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;mBACT,OAAO,YAAa;AAE7B,eAAK,QAAQ,GAAI;AACjB,eAAK,SAAS,IAAI;eACb;AACL,gBAAM,IAAI,MAAM,+BAA+B,MAAM;;AAEvD,aAAK,QAAQ,IAAI,IAAI;AACrB,aAAK,SAAS,IAAI,IAAI;MACxB;MAEQ,QAAQ,OAAa;AAC3B,aAAK,wBAAwB,CAAC;AAE9B,aAAK,KAAK,SAAS,KAAK,KAAK,KAAK;AAClC,aAAK;MACP;MAEQ,SAAS,QAAyB;AACxC,cAAM,OAAO,OAAO;AACpB,aAAK,wBAAwB,IAAI;AAEjC,aAAK,MAAM,IAAI,QAAQ,KAAK,GAAG;AAC/B,aAAK,OAAO;MACd;MAEQ,QAAQ,OAAa;AAC3B,aAAK,wBAAwB,CAAC;AAE9B,aAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AACjC,aAAK;MACP;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAE9B,aAAK,KAAK,UAAU,KAAK,KAAK,KAAK;AACnC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAE9B,aAAK,KAAK,SAAS,KAAK,KAAK,KAAK;AAClC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAE9B,aAAK,KAAK,UAAU,KAAK,KAAK,KAAK;AACnC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAE9B,aAAK,KAAK,SAAS,KAAK,KAAK,KAAK;AAClC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAC9B,aAAK,KAAK,WAAW,KAAK,KAAK,KAAK;AACpC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAC9B,aAAK,KAAK,WAAW,KAAK,KAAK,KAAK;AACpC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAE9B,SAAA,GAAA,MAAA,WAAU,KAAK,MAAM,KAAK,KAAK,KAAK;AACpC,aAAK,OAAO;MACd;MAEQ,SAAS,OAAa;AAC5B,aAAK,wBAAwB,CAAC;AAE9B,SAAA,GAAA,MAAA,UAAS,KAAK,MAAM,KAAK,KAAK,KAAK;AACnC,aAAK,OAAO;MACd;;AAjZF,YAAA,UAAA;;;;;;;;;;ACTA,QAAA,YAAA;AAyDA,QAAM,uBAAsC,CAAA;AAQ5C,aAAgBC,QACd,OACA,UAAsD,sBAA2B;AAEjF,YAAMC,WAAU,IAAI,UAAA,QAClB,QAAQ,gBACP,QAA8C,SAC/C,QAAQ,UACR,QAAQ,mBACR,QAAQ,UACR,QAAQ,cACR,QAAQ,iBACR,QAAQ,mBAAmB;AAE7B,aAAOA,SAAQ,gBAAgB,KAAK;IACtC;AAfA,YAAA,SAAAD;;;;;;;;;;ACjEA,aAAgB,WAAW,MAAY;AACrC,aAAO,GAAG,OAAO,IAAI,MAAM,OAAO,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;IAC/E;AAFA,YAAA,aAAA;;;;;;;;;;ACAA,QAAA,SAAA;AAEA,QAAM,yBAAyB;AAC/B,QAAM,6BAA6B;AAWnC,QAAa,mBAAb,MAA6B;MAK3B,YAAqB,eAAe,wBAAiC,kBAAkB,4BAA0B;AAA5F,aAAA,eAAA;AAAgD,aAAA,kBAAA;AAJrE,aAAA,MAAM;AACN,aAAA,OAAO;AAML,aAAK,SAAS,CAAA;AACd,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AAC1C,eAAK,OAAO,KAAK,CAAA,CAAE;;MAEvB;MAEO,YAAY,YAAkB;AACnC,eAAO,aAAa,KAAK,cAAc,KAAK;MAC9C;MAEQ,KAAK,OAAmB,aAAqB,YAAkB;AACrE,cAAM,UAAU,KAAK,OAAO,aAAa,CAAC;AAE1C;AAAY,qBAAW,UAAU,SAAS;AACxC,kBAAM,cAAc,OAAO;AAE3B,qBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,kBAAI,YAAY,CAAC,MAAM,MAAM,cAAc,CAAC,GAAG;AAC7C,yBAAS;;;AAGb,mBAAO,OAAO;;AAEhB,eAAO;MACT;MAEQ,MAAM,OAAmB,OAAa;AAC5C,cAAM,UAAU,KAAK,OAAO,MAAM,SAAS,CAAC;AAC5C,cAAM,SAAyB,EAAE,OAAO,KAAK,MAAK;AAElD,YAAI,QAAQ,UAAU,KAAK,iBAAiB;AAG1C,kBAAS,KAAK,OAAM,IAAK,QAAQ,SAAU,CAAC,IAAI;eAC3C;AACL,kBAAQ,KAAK,MAAM;;MAEvB;MAEO,OAAO,OAAmB,aAAqB,YAAkB;AACtE,cAAM,cAAc,KAAK,KAAK,OAAO,aAAa,UAAU;AAC5D,YAAI,eAAe,MAAM;AACvB,eAAK;AACL,iBAAO;;AAET,aAAK;AAEL,cAAM,OAAM,GAAA,OAAA,cAAa,OAAO,aAAa,UAAU;AAEvD,cAAM,oBAAoB,WAAW,UAAU,MAAM,KAAK,OAAO,aAAa,cAAc,UAAU;AACtG,aAAK,MAAM,mBAAmB,GAAG;AACjC,eAAO;MACT;;AA5DF,YAAA,mBAAA;;;;;;;;;;ACdA,QAAA,eAAA;AACA,QAAA,mBAAA;AACA,QAAA,QAAA;AACA,QAAA,SAAA;AACA,QAAA,gBAAA;AACA,QAAA,qBAAA;AACA,QAAA,gBAAA;AAUA,QAAM,oBAAoB,CAAC,QAAmC;AAC5D,YAAM,UAAU,OAAO;AAEvB,aAAO,YAAY,YAAY,YAAY;IAC7C;AAmBA,QAAM,qBAAqB;AAE3B,QAAM,aAAa,IAAI,SAAS,IAAI,YAAY,CAAC,CAAC;AAClD,QAAM,cAAc,IAAI,WAAW,WAAW,MAAM;AAIvC,YAAA,iCAA+C,MAAK;AAC/D,UAAI;AAGF,mBAAW,QAAQ,CAAC;eACb,GAAP;AACA,eAAO,EAAE;;AAEX,YAAM,IAAI,MAAM,eAAe;IACjC,GAAE;AAEF,QAAM,YAAY,IAAI,QAAA,8BAA8B,mBAAmB;AAEvE,QAAM,yBAAyB,IAAI,mBAAA,iBAAgB;AAEnD,QAAa,UAAb,MAAoB;MASlB,YACmB,iBAAkD,iBAAA,eAAe,cACjE,UAAuB,QACvB,eAAe,MAAA,YACf,eAAe,MAAA,YACf,iBAAiB,MAAA,YACjB,eAAe,MAAA,YACf,eAAe,MAAA,YACf,aAAgC,wBAAsB;AAPtD,aAAA,iBAAA;AACA,aAAA,UAAA;AACA,aAAA,eAAA;AACA,aAAA,eAAA;AACA,aAAA,iBAAA;AACA,aAAA,eAAA;AACA,aAAA,eAAA;AACA,aAAA,aAAA;AAhBX,aAAA,WAAW;AACX,aAAA,MAAM;AAEN,aAAA,OAAO;AACP,aAAA,QAAQ;AACR,aAAA,WAAW;AACF,aAAA,QAA2B,CAAA;MAWzC;MAEK,oBAAiB;AACvB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,MAAM,SAAS;MAGtB;MAEQ,UAAU,QAAwC;AACxD,aAAK,SAAQ,GAAA,cAAA,kBAAiB,MAAM;AACpC,aAAK,QAAO,GAAA,cAAA,gBAAe,KAAK,KAAK;AACrC,aAAK,MAAM;MACb;MAEQ,aAAa,QAAwC;AAC3D,YAAI,KAAK,aAAa,sBAAsB,CAAC,KAAK,aAAa,CAAC,GAAG;AACjE,eAAK,UAAU,MAAM;eAChB;AACL,gBAAM,gBAAgB,KAAK,MAAM,SAAS,KAAK,GAAG;AAClD,gBAAM,WAAU,GAAA,cAAA,kBAAiB,MAAM;AAGvC,gBAAM,YAAY,IAAI,WAAW,cAAc,SAAS,QAAQ,MAAM;AACtE,oBAAU,IAAI,aAAa;AAC3B,oBAAU,IAAI,SAAS,cAAc,MAAM;AAC3C,eAAK,UAAU,SAAS;;MAE5B;MAEQ,aAAa,MAAY;AAC/B,eAAO,KAAK,KAAK,aAAa,KAAK,OAAO;MAC5C;MAEQ,qBAAqB,WAAiB;AAC5C,cAAM,EAAE,MAAM,IAAG,IAAK;AACtB,eAAO,IAAI,WAAW,SAAS,KAAK,aAAa,UAAU,KAAK,sCAAsC,YAAY;MACpH;;;;;MAMO,OAAO,QAAwC;AACpD,aAAK,kBAAiB;AACtB,aAAK,UAAU,MAAM;AAErB,cAAM,SAAS,KAAK,aAAY;AAChC,YAAI,KAAK,aAAa,CAAC,GAAG;AACxB,gBAAM,KAAK,qBAAqB,KAAK,GAAG;;AAE1C,eAAO;MACT;MAEO,CAAC,YAAY,QAAwC;AAC1D,aAAK,kBAAiB;AACtB,aAAK,UAAU,MAAM;AAErB,eAAO,KAAK,aAAa,CAAC,GAAG;AAC3B,gBAAM,KAAK,aAAY;;MAE3B;MAEO,MAAM,YAAY,QAAuD;AAC9E,YAAI,UAAU;AACd,YAAI;AACJ,yBAAiB,UAAU,QAAQ;AACjC,cAAI,SAAS;AACX,kBAAM,KAAK,qBAAqB,KAAK,QAAQ;;AAG/C,eAAK,aAAa,MAAM;AAExB,cAAI;AACF,qBAAS,KAAK,aAAY;AAC1B,sBAAU;mBACH,GAAP;AACA,gBAAI,EAAE,aAAa,QAAA,gCAAgC;AACjD,oBAAM;;;AAIV,eAAK,YAAY,KAAK;;AAGxB,YAAI,SAAS;AACX,cAAI,KAAK,aAAa,CAAC,GAAG;AACxB,kBAAM,KAAK,qBAAqB,KAAK,QAAQ;;AAE/C,iBAAO;;AAGT,cAAM,EAAE,UAAU,KAAK,SAAQ,IAAK;AACpC,cAAM,IAAI,WACR,iCAAgC,GAAA,aAAA,YAAW,QAAQ,QAAQ,aAAa,4BAA4B;MAExG;MAEO,kBACL,QAAuD;AAEvD,eAAO,KAAK,iBAAiB,QAAQ,IAAI;MAC3C;MAEO,aAAa,QAAuD;AACzE,eAAO,KAAK,iBAAiB,QAAQ,KAAK;MAC5C;MAEQ,OAAO,iBAAiB,QAAyD,SAAgB;AACvG,YAAI,wBAAwB;AAC5B,YAAI,iBAAiB;AAErB,yBAAiB,UAAU,QAAQ;AACjC,cAAI,WAAW,mBAAmB,GAAG;AACnC,kBAAM,KAAK,qBAAqB,KAAK,QAAQ;;AAG/C,eAAK,aAAa,MAAM;AAExB,cAAI,uBAAuB;AACzB,6BAAiB,KAAK,cAAa;AACnC,oCAAwB;AACxB,iBAAK,SAAQ;;AAGf,cAAI;AACF,mBAAO,MAAM;AACX,oBAAM,KAAK,aAAY;AACvB,kBAAI,EAAE,mBAAmB,GAAG;AAC1B;;;mBAGG,GAAP;AACA,gBAAI,EAAE,aAAa,QAAA,gCAAgC;AACjD,oBAAM;;;AAIV,eAAK,YAAY,KAAK;;MAE1B;MAEQ,eAAY;AAClB;AAAQ,iBAAO,MAAM;AACnB,kBAAM,WAAW,KAAK,aAAY;AAClC,gBAAI;AAEJ,gBAAI,YAAY,KAAM;AAEpB,uBAAS,WAAW;uBACX,WAAW,KAAM;AAC1B,kBAAI,WAAW,KAAM;AAEnB,yBAAS;yBACA,WAAW,KAAM;AAE1B,sBAAM,OAAO,WAAW;AACxB,oBAAI,SAAS,GAAG;AACd,uBAAK,aAAa,IAAI;AACtB,uBAAK,SAAQ;AACb,2BAAS;uBACJ;AACL,2BAAS,CAAA;;yBAEF,WAAW,KAAM;AAE1B,sBAAM,OAAO,WAAW;AACxB,oBAAI,SAAS,GAAG;AACd,uBAAK,eAAe,IAAI;AACxB,uBAAK,SAAQ;AACb,2BAAS;uBACJ;AACL,2BAAS,CAAA;;qBAEN;AAEL,sBAAM,aAAa,WAAW;AAC9B,yBAAS,KAAK,iBAAiB,YAAY,CAAC;;uBAErC,aAAa,KAAM;AAE5B,uBAAS;uBACA,aAAa,KAAM;AAE5B,uBAAS;uBACA,aAAa,KAAM;AAE5B,uBAAS;uBACA,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,OAAM;uBACX,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,OAAM;uBACX,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,uBAAS,KAAK,QAAO;uBACZ,aAAa,KAAM;AAE5B,oBAAM,aAAa,KAAK,OAAM;AAC9B,uBAAS,KAAK,iBAAiB,YAAY,CAAC;uBACnC,aAAa,KAAM;AAE5B,oBAAM,aAAa,KAAK,QAAO;AAC/B,uBAAS,KAAK,iBAAiB,YAAY,CAAC;uBACnC,aAAa,KAAM;AAE5B,oBAAM,aAAa,KAAK,QAAO;AAC/B,uBAAS,KAAK,iBAAiB,YAAY,CAAC;uBACnC,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,kBAAI,SAAS,GAAG;AACd,qBAAK,eAAe,IAAI;AACxB,qBAAK,SAAQ;AACb,yBAAS;qBACJ;AACL,yBAAS,CAAA;;uBAEF,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,kBAAI,SAAS,GAAG;AACd,qBAAK,eAAe,IAAI;AACxB,qBAAK,SAAQ;AACb,yBAAS;qBACJ;AACL,yBAAS,CAAA;;uBAEF,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,kBAAI,SAAS,GAAG;AACd,qBAAK,aAAa,IAAI;AACtB,qBAAK,SAAQ;AACb,yBAAS;qBACJ;AACL,yBAAS,CAAA;;uBAEF,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,kBAAI,SAAS,GAAG;AACd,qBAAK,aAAa,IAAI;AACtB,qBAAK,SAAQ;AACb,yBAAS;qBACJ;AACL,yBAAS,CAAA;;uBAEF,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,OAAM;AACxB,uBAAS,KAAK,aAAa,MAAM,CAAC;uBACzB,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,uBAAS,KAAK,aAAa,MAAM,CAAC;uBACzB,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,uBAAS,KAAK,aAAa,MAAM,CAAC;uBACzB,aAAa,KAAM;AAE5B,uBAAS,KAAK,gBAAgB,GAAG,CAAC;uBACzB,aAAa,KAAM;AAE5B,uBAAS,KAAK,gBAAgB,GAAG,CAAC;uBACzB,aAAa,KAAM;AAE5B,uBAAS,KAAK,gBAAgB,GAAG,CAAC;uBACzB,aAAa,KAAM;AAE5B,uBAAS,KAAK,gBAAgB,GAAG,CAAC;uBACzB,aAAa,KAAM;AAE5B,uBAAS,KAAK,gBAAgB,IAAI,CAAC;uBAC1B,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,OAAM;AACxB,uBAAS,KAAK,gBAAgB,MAAM,CAAC;uBAC5B,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,uBAAS,KAAK,gBAAgB,MAAM,CAAC;uBAC5B,aAAa,KAAM;AAE5B,oBAAM,OAAO,KAAK,QAAO;AACzB,uBAAS,KAAK,gBAAgB,MAAM,CAAC;mBAChC;AACL,oBAAM,IAAI,cAAA,YAAY,4BAA2B,GAAA,aAAA,YAAW,QAAQ,GAAG;;AAGzE,iBAAK,SAAQ;AAEb,kBAAM,QAAQ,KAAK;AACnB,mBAAO,MAAM,SAAS,GAAG;AAEvB,oBAAM,QAAQ,MAAM,MAAM,SAAS,CAAC;AACpC,kBAAI,MAAM,SAAI,GAAkB;AAC9B,sBAAM,MAAM,MAAM,QAAQ,IAAI;AAC9B,sBAAM;AACN,oBAAI,MAAM,aAAa,MAAM,MAAM;AACjC,wBAAM,IAAG;AACT,2BAAS,MAAM;uBACV;AACL,2BAAS;;yBAEF,MAAM,SAAI,GAAoB;AACvC,oBAAI,CAAC,kBAAkB,MAAM,GAAG;AAC9B,wBAAM,IAAI,cAAA,YAAY,kDAAkD,OAAO,MAAM;;AAEvF,oBAAI,WAAW,aAAa;AAC1B,wBAAM,IAAI,cAAA,YAAY,kCAAkC;;AAG1D,sBAAM,MAAM;AACZ,sBAAM,OAAI;AACV,yBAAS;qBACJ;AAGL,sBAAM,IAAI,MAAM,GAAI,IAAI;AACxB,sBAAM;AAEN,oBAAI,MAAM,cAAc,MAAM,MAAM;AAClC,wBAAM,IAAG;AACT,2BAAS,MAAM;uBACV;AACL,wBAAM,MAAM;AACZ,wBAAM,OAAI;AACV,2BAAS;;;;AAKf,mBAAO;;MAEX;MAEQ,eAAY;AAClB,YAAI,KAAK,aAAa,oBAAoB;AACxC,eAAK,WAAW,KAAK,OAAM;;AAI7B,eAAO,KAAK;MACd;MAEQ,WAAQ;AACd,aAAK,WAAW;MAClB;MAEQ,gBAAa;AACnB,cAAM,WAAW,KAAK,aAAY;AAElC,gBAAQ,UAAU;UAChB,KAAK;AACH,mBAAO,KAAK,QAAO;UACrB,KAAK;AACH,mBAAO,KAAK,QAAO;UACrB,SAAS;AACP,gBAAI,WAAW,KAAM;AACnB,qBAAO,WAAW;mBACb;AACL,oBAAM,IAAI,cAAA,YAAY,kCAAiC,GAAA,aAAA,YAAW,QAAQ,GAAG;;;;MAIrF;MAEQ,aAAa,MAAY;AAC/B,YAAI,OAAO,KAAK,cAAc;AAC5B,gBAAM,IAAI,cAAA,YAAY,oCAAoC,+BAA+B,KAAK,eAAe;;AAG/G,aAAK,MAAM,KAAK;UACd,MAAI;UACJ;UACA,KAAK;UACL,WAAW;UACX,KAAK,CAAA;SACN;MACH;MAEQ,eAAe,MAAY;AACjC,YAAI,OAAO,KAAK,gBAAgB;AAC9B,gBAAM,IAAI,cAAA,YAAY,sCAAsC,2BAA2B,KAAK,iBAAiB;;AAG/G,aAAK,MAAM,KAAK;UACd,MAAI;UACJ;UACA,OAAO,IAAI,MAAe,IAAI;UAC9B,UAAU;SACX;MACH;MAEQ,iBAAiB,YAAoB,cAAoB;;AAC/D,YAAI,aAAa,KAAK,cAAc;AAClC,gBAAM,IAAI,cAAA,YACR,2CAA2C,+BAA+B,KAAK,eAAe;;AAIlG,YAAI,KAAK,MAAM,aAAa,KAAK,MAAM,eAAe,YAAY;AAChE,gBAAM;;AAGR,cAAM,SAAS,KAAK,MAAM;AAC1B,YAAI;AACJ,YAAI,KAAK,cAAa,OAAM,KAAA,KAAK,gBAAU,QAAA,OAAA,SAAA,SAAA,GAAE,YAAY,UAAU,IAAG;AACpE,mBAAS,KAAK,WAAW,OAAO,KAAK,OAAO,QAAQ,UAAU;mBACrD,aAAa,OAAA,wBAAwB;AAC9C,oBAAS,GAAA,OAAA,cAAa,KAAK,OAAO,QAAQ,UAAU;eAC/C;AACL,oBAAS,GAAA,OAAA,cAAa,KAAK,OAAO,QAAQ,UAAU;;AAEtD,aAAK,OAAO,eAAe;AAC3B,eAAO;MACT;MAEQ,gBAAa;AACnB,YAAI,KAAK,MAAM,SAAS,GAAG;AACzB,gBAAM,QAAQ,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAC9C,iBAAO,MAAM,SAAI;;AAEnB,eAAO;MACT;MAEQ,aAAa,YAAoB,YAAkB;AACzD,YAAI,aAAa,KAAK,cAAc;AAClC,gBAAM,IAAI,cAAA,YAAY,oCAAoC,+BAA+B,KAAK,eAAe;;AAG/G,YAAI,CAAC,KAAK,aAAa,aAAa,UAAU,GAAG;AAC/C,gBAAM;;AAGR,cAAM,SAAS,KAAK,MAAM;AAC1B,cAAM,SAAS,KAAK,MAAM,SAAS,QAAQ,SAAS,UAAU;AAC9D,aAAK,OAAO,aAAa;AACzB,eAAO;MACT;MAEQ,gBAAgB,MAAc,YAAkB;AACtD,YAAI,OAAO,KAAK,cAAc;AAC5B,gBAAM,IAAI,cAAA,YAAY,oCAAoC,yBAAyB,KAAK,eAAe;;AAGzG,cAAM,UAAU,KAAK,KAAK,QAAQ,KAAK,MAAM,UAAU;AACvD,cAAM,OAAO,KAAK;UAAa;UAAM,aAAa;;QAAe;AACjE,eAAO,KAAK,eAAe,OAAO,MAAM,SAAS,KAAK,OAAO;MAC/D;MAEQ,SAAM;AACZ,eAAO,KAAK,KAAK,SAAS,KAAK,GAAG;MACpC;MAEQ,UAAO;AACb,eAAO,KAAK,KAAK,UAAU,KAAK,GAAG;MACrC;MAEQ,UAAO;AACb,eAAO,KAAK,KAAK,UAAU,KAAK,GAAG;MACrC;MAEQ,SAAM;AACZ,cAAM,QAAQ,KAAK,KAAK,SAAS,KAAK,GAAG;AACzC,aAAK;AACL,eAAO;MACT;MAEQ,SAAM;AACZ,cAAM,QAAQ,KAAK,KAAK,QAAQ,KAAK,GAAG;AACxC,aAAK;AACL,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,QAAQ,KAAK,KAAK,UAAU,KAAK,GAAG;AAC1C,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,QAAQ,KAAK,KAAK,SAAS,KAAK,GAAG;AACzC,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,QAAQ,KAAK,KAAK,UAAU,KAAK,GAAG;AAC1C,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,QAAQ,KAAK,KAAK,SAAS,KAAK,GAAG;AACzC,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,SAAQ,GAAA,MAAA,WAAU,KAAK,MAAM,KAAK,GAAG;AAC3C,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,SAAQ,GAAA,MAAA,UAAS,KAAK,MAAM,KAAK,GAAG;AAC1C,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,QAAQ,KAAK,KAAK,WAAW,KAAK,GAAG;AAC3C,aAAK,OAAO;AACZ,eAAO;MACT;MAEQ,UAAO;AACb,cAAM,QAAQ,KAAK,KAAK,WAAW,KAAK,GAAG;AAC3C,aAAK,OAAO;AACZ,eAAO;MACT;;AApjBF,YAAA,UAAA;;;;;;;;;;AC7DA,QAAA,YAAA;AA0Ca,YAAA,uBAAsC,CAAA;AAWnD,aAAgBE,QACd,QACA,UAAsD,QAAA,sBAA2B;AAEjF,YAAMC,WAAU,IAAI,UAAA,QAClB,QAAQ,gBACP,QAA8C,SAC/C,QAAQ,cACR,QAAQ,cACR,QAAQ,gBACR,QAAQ,cACR,QAAQ,YAAY;AAEtB,aAAOA,SAAQ,OAAO,MAAM;IAC9B;AAdA,YAAA,SAAAD;AAuBA,aAAgB,YACd,QACA,UAAsD,QAAA,sBAA2B;AAEjF,YAAMC,WAAU,IAAI,UAAA,QAClB,QAAQ,gBACP,QAA8C,SAC/C,QAAQ,cACR,QAAQ,cACR,QAAQ,gBACR,QAAQ,cACR,QAAQ,YAAY;AAEtB,aAAOA,SAAQ,YAAY,MAAM;IACnC;AAdA,YAAA,cAAA;;;;;;;;;;ACpEA,aAAgB,gBAAmB,QAA6B;AAC9D,aAAQ,OAAe,OAAO,aAAa,KAAK;IAClD;AAFA,YAAA,kBAAA;AAIA,aAAS,cAAiB,OAA2B;AACnD,UAAI,SAAS,MAAM;AACjB,cAAM,IAAI,MAAM,yDAAyD;;IAE7E;AAEO,oBAAgB,wBAA2B,QAAyB;AACzE,YAAM,SAAS,OAAO,UAAS;AAE/B,UAAI;AACF,eAAO,MAAM;AACX,gBAAM,EAAE,MAAM,MAAK,IAAK,MAAM,OAAO,KAAI;AACzC,cAAI,MAAM;AACR;;AAEF,wBAAc,KAAK;AACnB,gBAAM;;;AAGR,eAAO,YAAW;;IAEtB;AAfA,YAAA,0BAAA;AAiBA,aAAgB,oBAAuB,YAAiC;AACtE,UAAI,gBAAgB,UAAU,GAAG;AAC/B,eAAO;aACF;AACL,eAAO,wBAAwB,UAAU;;IAE7C;AANA,YAAA,sBAAA;;;;;;;;;;ACnCA,QAAA,YAAA;AACA,QAAA,WAAA;AACA,QAAA,WAAA;AASQ,mBAAe,YACrB,YACA,UAAsD,SAAA,sBAA2B;AAEjF,YAAM,UAAS,GAAA,SAAA,qBAAoB,UAAU;AAE7C,YAAMC,WAAU,IAAI,UAAA,QAClB,QAAQ,gBACP,QAA8C,SAC/C,QAAQ,cACR,QAAQ,cACR,QAAQ,gBACR,QAAQ,cACR,QAAQ,YAAY;AAEtB,aAAOA,SAAQ,YAAY,MAAM;IACnC;AAhBC,YAAA,cAAA;AAsBA,aAAgB,kBACf,YACA,UAAsD,SAAA,sBAA2B;AAEjF,YAAM,UAAS,GAAA,SAAA,qBAAoB,UAAU;AAE7C,YAAMA,WAAU,IAAI,UAAA,QAClB,QAAQ,gBACP,QAA8C,SAC/C,QAAQ,cACR,QAAQ,cACR,QAAQ,gBACR,QAAQ,cACR,QAAQ,YAAY;AAGtB,aAAOA,SAAQ,kBAAkB,MAAM;IACzC;AAjBC,YAAA,oBAAA;AAuBD,aAAgB,kBACd,YACA,UAAsD,SAAA,sBAA2B;AAEjF,YAAM,UAAS,GAAA,SAAA,qBAAoB,UAAU;AAE7C,YAAMA,WAAU,IAAI,UAAA,QAClB,QAAQ,gBACP,QAA8C,SAC/C,QAAQ,cACR,QAAQ,cACR,QAAQ,gBACR,QAAQ,cACR,QAAQ,YAAY;AAGtB,aAAOA,SAAQ,aAAa,MAAM;IACpC;AAjBA,YAAA,oBAAA;AAsBA,aAAgB,aACd,YACA,UAAsD,SAAA,sBAA2B;AAEjF,aAAO,kBAAkB,YAAY,OAAO;IAC9C;AALA,YAAA,eAAA;;;;;;;;;;AC5EA,QAAA,WAAA;AACS,WAAA,eAAA,SAAA,UAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,SAAA;IAAM,EAAA,CAAA;AAKf,QAAA,WAAA;AACS,WAAA,eAAA,SAAA,UAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,SAAA;IAAM,EAAA,CAAA;AACE,WAAA,eAAA,SAAA,eAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,SAAA;IAAW,EAAA,CAAA;AAK5B,QAAA,gBAAA;AACS,WAAA,eAAA,SAAA,eAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,cAAA;IAAW,EAAA,CAAA;AACE,WAAA,eAAA,SAAA,qBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,cAAA;IAAiB,EAAA,CAAA;AACE,WAAA,eAAA,SAAA,qBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,cAAA;IAAiB,EAAA,CAAA;AACE,WAAA,eAAA,SAAA,gBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,cAAA;IAAY,EAAA,CAAA;AAGxE,QAAA,YAAA;AAES,WAAA,eAAA,SAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAFA,UAAA;IAAO,EAAA,CAAA;AAEe,WAAA,eAAA,SAAA,iCAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAFb,UAAA;IAA6B,EAAA,CAAA;AAC/C,QAAA,gBAAA;AACkB,WAAA,eAAA,SAAA,eAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADT,cAAA;IAAW,EAAA,CAAA;AAGpB,QAAA,YAAA;AACS,WAAA,eAAA,SAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,UAAA;IAAO,EAAA,CAAA;AAKhB,QAAA,mBAAA;AACS,WAAA,eAAA,SAAA,kBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,iBAAA;IAAc,EAAA,CAAA;AAIvB,QAAA,YAAA;AACS,WAAA,eAAA,SAAA,WAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aADA,UAAA;IAAO,EAAA,CAAA;AAGhB,QAAA,cAAA;AASE,WAAA,eAAA,SAAA,iBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aARA,YAAA;IAAa,EAAA,CAAA;AASb,WAAA,eAAA,SAAA,wBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aARA,YAAA;IAAoB,EAAA,CAAA;AASpB,WAAA,eAAA,SAAA,6BAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aARA,YAAA;IAAyB,EAAA,CAAA;AASzB,WAAA,eAAA,SAAA,6BAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aARA,YAAA;IAAyB,EAAA,CAAA;AASzB,WAAA,eAAA,SAAA,4BAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aARA,YAAA;IAAwB,EAAA,CAAA;AASxB,WAAA,eAAA,SAAA,4BAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aARA,YAAA;IAAwB,EAAA,CAAA;;;;;ACrC1B;AAAA,mEAAAC,SAAA;AAaA,QAAI,KAAK,QAAQ,IAAI;AACrB,QAAI,MAAM,QAAQ,KAAK;AACvB,QAAI,QAAQ,QAAQ,eAAe,EAAE;AAMrC,IAAAA,QAAO,UAAUC;AAGjB,IAAAA,gBAAe,iBAAiBA;AAYhC,aAASA,gBAAe,MAAM;AAC5B;AAEA,aAAO,QAAQ,CAAC;AAKhB,UAAI,OAAO;AACX,UAAI,OAAO,QAAQ,MAAM;AACzB,UAAI,QAAQ,QAAQ,OAAO;AAG3B,UAAI;AACJ,UAAI;AAGJ,UAAI,WAAW,CAAC;AAIhB,UAAI,qBAAqB;AAGzB,UAAI,iBAAiB;AAAA,QACnB,cAAc;AAAA,QACd,UAAU;AAAA,MACZ;AAEA,UAAI,UAAU,OAAO,OAAO,CAAC,GAAG,cAAc;AAK9C,UAAI,0BAA0B;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAGA,UAAI,0BAA0B;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAGA,UAAI,WAAW;AAEf,UAAI,YAAY;AAChB,UAAI,cAAc;AAGlB,UAAI,YAAY,CAAC;AAMjB,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,mBAAmB;AACxB,WAAK,UAAU;AACf,WAAK,OAAO;AAOZ,WAAK,aAAa,KAAK;AAGvB,WAAK,qBAAqB;AAG1B,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,WAAW,OAAO,MAAM,CAAC;AAC9B,WAAK,SAAS;AACd,WAAK,aAAa;AAYlB,UAAI,sBAAsB,SAAS,QAAQ;AACzC,eAAO,sBAAuB,UAAU,wBAAwB,QAAQ,OAAO,YAAY,CAAC,MAAM;AAAA,MACpG;AAQA,UAAI,sBAAsB,SAAS,QAAQ;AACzC,eAAQ,UAAU,wBAAwB,QAAQ,MAAM,MAAM;AAAA,MAChE;AAeA,WAAK,OAAO,SAAS,QAAQ,KAAK,OAAO,MAAM,UAAU;AACvD,aAAK,MAAM;AACX,oBAAY;AACZ,sBAAc;AAGd,YAAI,CAAC,oBAAoB,MAAM,GAAG;AAChC,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC7D;AAEA,mBAAW;AAAA,UACT,UAAU;AAAA,UACV,OAAO,IAAI,SAAS;AAAA,UACpB,SAAU,OAAO,UAAU,YAAY,OAAO;AAAA,UAC9C,QAAQ,QAAQ;AAAA,UAChB,YAAY,YAAY;AAAA,QAC1B;AAEA,iBAAS,KAAK,MAAM;AAAA,MACtB;AAQA,WAAK,wBAAwB,SAAS,OAAO;AAC3C,6BAAqB;AAAA,MACvB;AASA,WAAK,mBAAmB,SAAS,QAAQ,OAAO;AAC9C,YAAI,KAAK,cAAc,KAAK,QAAQ;AAClC,gBAAM,IAAI,MAAM,2EAA2E;AAAA,QAC7F;AACA,YAAI,CAAC,oBAAoB,MAAM,GAAG;AAChC,kBAAQ,KAAK,mCAAmC,SAAS,GAAG;AAC5D,iBAAO;AAAA,QACT;AACA,YAAI,UAAU;AACZ,gBAAM,IAAI,MAAM,sCAAsC;AAAA,QACxD;AACA,gBAAQ,MAAM,IAAI;AAClB,eAAO;AAAA,MACT;AAQA,WAAK,oBAAoB,SAAS,QAAQ;AACxC,YAAI,OAAO,WAAW,YACjB,KAAK,aAAa,KAAK,UACvB,SAAS,QAAQ,OAAO,YAAY,CAAC,KACrC,CAAC,WACJ;AACA,iBAAO,SAAS,QAAQ,OAAO,YAAY,CAAC;AAAA,QAC9C;AAEA,eAAO;AAAA,MACT;AAOA,WAAK,wBAAwB,WAAW;AACtC,YAAI,KAAK,aAAa,KAAK,oBAAoB,WAAW;AACxD,iBAAO;AAAA,QACT;AACA,YAAI,SAAS;AAEb,iBAAS,KAAK,SAAS,SAAS;AAE9B,cAAI,MAAM,gBAAgB,MAAM,eAAe;AAC7C,sBAAU,IAAI,OAAO,SAAS,QAAQ,CAAC,IAAI;AAAA,UAC7C;AAAA,QACF;AACA,eAAO,OAAO,OAAO,GAAG,OAAO,SAAS,CAAC;AAAA,MAC3C;AAQA,WAAK,mBAAmB,SAAS,MAAM;AAErC,YAAI,OAAO,SAAS,YAAY,QAAQ,IAAI,GAAG;AAC7C,iBAAO,QAAQ,IAAI;AAAA,QACrB;AAEA,eAAO;AAAA,MACT;AAOA,WAAK,OAAO,SAAS,MAAM;AACzB,YAAI,KAAK,cAAc,KAAK,QAAQ;AAClC,gBAAM,IAAI,MAAM,sEAAsE;AAAA,QACxF;AAEA,YAAI,UAAU;AACZ,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AAEA,YAAI,MAAM,OAAO,QAAQ;AACzB,YAAI,MAAM,IAAI,MAAM,SAAS,GAAG;AAChC,YAAI;AAEJ,gBAAQ,IAAI,UAAU;AAAA,UACpB,KAAK;AACH,kBAAM;AAAA,UAER,KAAK;AACH,mBAAO,IAAI;AACX;AAAA,UAEF,KAAK;AACH,oBAAQ;AACR;AAAA,UAEF,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AACP;AAAA,UAEF;AACE,kBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC7C;AAGA,YAAI,OAAO;AACT,cAAI,SAAS,WAAW,OAAO;AAC7B,kBAAM,IAAI,MAAM,8CAA8C;AAAA,UAChE;AAEA,cAAI,SAAS,OAAO;AAClB,eAAG,SAAS,SAAS,IAAI,QAAQ,GAAG,SAAS,OAAOC,OAAM;AACxD,kBAAI,OAAO;AACT,qBAAK,YAAY,OAAO,MAAM,SAAS,EAAE;AAAA,cAC3C,OAAO;AACL,qBAAK,SAAS;AACd,qBAAK,eAAeA,MAAK,SAAS,MAAM;AACxC,qBAAK,WAAWA;AAChB,yBAAS,KAAK,IAAI;AAAA,cACpB;AAAA,YACF,CAAC;AAAA,UACH,OAAO;AACL,gBAAI;AACF,mBAAK,WAAW,GAAG,aAAa,SAAS,IAAI,QAAQ,CAAC;AACtD,mBAAK,eAAe,KAAK,SAAS,SAAS,MAAM;AACjD,mBAAK,SAAS;AACd,uBAAS,KAAK,IAAI;AAAA,YACpB,SAAQ,GAAN;AACA,mBAAK,YAAY,GAAG,EAAE,SAAS,EAAE;AAAA,YACnC;AAAA,UACF;AAEA;AAAA,QACF;AAIA,YAAI,OAAO,IAAI,SAAS,MAAM,MAAM;AAEpC,YAAI,MAAM,IAAI,YAAY,IAAI,SAAS,IAAI,SAAS;AAGpD,gBAAQ,MAAM,IAAI;AAClB,YAAI,EAAG,OAAO,SAAS,OAAQ,SAAS,KAAK;AAC3C,kBAAQ,MAAM,KAAK,MAAM,IAAI;AAAA,QAC/B;AAGA,YAAI,SAAS,MAAM;AACjB,cAAI,OAAO,SAAS,YAAY,aAAa;AAC3C,qBAAS,WAAW;AAAA,UACtB;AACA,cAAI,UAAU,IAAI,OAAO,SAAS,OAAO,MAAM,SAAS,QAAQ;AAChE,kBAAQ,eAAe,IAAI,WAAW,QAAQ,SAAS,QAAQ;AAAA,QACjE;AAGA,YAAI,SAAS,WAAW,SAAS,SAAS,WAAW,QAAQ;AAC3D,iBAAO;AAAA,QACT,WAAW,MAAM;AACf,kBAAQ,gBAAgB,IAAI,OAAO,SAAS,IAAI,IAAI,KAAK,SAAS,OAAO,WAAW,IAAI;AAExF,cAAI,CAAC,QAAQ,cAAc,GAAG;AAC5B,oBAAQ,cAAc,IAAI;AAAA,UAC5B;AAAA,QACF,WAAW,SAAS,WAAW,QAAQ;AAGrC,kBAAQ,gBAAgB,IAAI;AAAA,QAC9B;AAEA,YAAI,QAAQ,KAAK,SAAS;AAC1B,YAAI,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,QAAQ,SAAS;AAAA,UACjB;AAAA,UACA;AAAA,QACF;AAEA,YAAI,KAAK;AACP,kBAAQ,MAAM,KAAK;AACnB,kBAAQ,MAAM,KAAK;AACnB,kBAAQ,aAAa,KAAK;AAC1B,kBAAQ,OAAO,KAAK;AACpB,kBAAQ,KAAK,KAAK;AAClB,kBAAQ,UAAU,KAAK;AACvB,kBAAQ,qBAAqB,KAAK,uBAAuB,QAAQ,QAAQ;AAAA,QAC3E;AAGA,oBAAY;AAEZ,YAAI,SAAS,OAAO;AAElB,cAAI,YAAY,MAAM,MAAM,UAAU,KAAK;AAG3C,qBAAW;AAGX,eAAK,cAAc,kBAAkB;AAGrC,cAAI,kBAAkB,SAASC,OAAM;AAGnC,uBAAWA;AAGX,gBAAI,SAAS,eAAe,OAAO,SAAS,eAAe,OAAO,SAAS,eAAe,KAAK;AAE7F,uBAAS,MAAM,SAAS,QAAQ;AAChC,kBAAIC,OAAM,IAAI,MAAM,SAAS,GAAG;AAEhC,qBAAOA,KAAI;AAEX,kBAAI,aAAa;AAAA,gBACf,UAAUA,KAAI;AAAA,gBACd,MAAMA,KAAI;AAAA,gBACV,MAAMA,KAAI;AAAA,gBACV,QAAQ,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,gBACvD;AAAA,cACF;AAEA,kBAAI,KAAK;AACP,2BAAW,MAAM,KAAK;AACtB,2BAAW,MAAM,KAAK;AACtB,2BAAW,aAAa,KAAK;AAC7B,2BAAW,OAAO,KAAK;AACvB,2BAAW,KAAK,KAAK;AACrB,2BAAW,UAAU,KAAK;AAC1B,2BAAW,qBAAqB,KAAK,uBAAuB,QAAQ,QAAQ;AAAA,cAC9E;AAGA,wBAAU,UAAU,YAAY,eAAe,EAAE,GAAG,SAAS,YAAY;AACzE,sBAAQ,IAAI;AAEZ;AAAA,YACF;AAEA,qBAAS,KAAK,gBAAgB;AAC9B,iBAAK,SAAS,SAAS;AAEvB,qBAAS,GAAG,QAAQ,SAAS,OAAO;AAElC,kBAAI,OAAO;AACT,oBAAIF,QAAO,OAAO,KAAK,KAAK;AAC5B,qBAAK,gBAAgBA,MAAK,SAAS,MAAM;AACzC,qBAAK,WAAW,OAAO,OAAO,CAAC,KAAK,UAAUA,KAAI,CAAC;AAAA,cACrD;AAEA,kBAAI,UAAU;AACZ,yBAAS,KAAK,OAAO;AAAA,cACvB;AAAA,YACF,CAAC;AAED,qBAAS,GAAG,OAAO,WAAW;AAC5B,kBAAI,UAAU;AAGZ,2BAAW;AAEX,yBAAS,KAAK,IAAI;AAAA,cACpB;AAAA,YACF,CAAC;AAED,qBAAS,GAAG,SAAS,SAAS,OAAO;AACnC,mBAAK,YAAY,KAAK;AAAA,YACxB,CAAC;AAAA,UACH;AAGA,cAAI,eAAe,SAAS,OAAO;AACjC,iBAAK,YAAY,KAAK;AAAA,UACxB;AAGA,oBAAU,UAAU,SAAS,eAAe,EAAE,GAAG,SAAS,YAAY;AAEtE,cAAI,KAAK,WAAW;AAClB,oBAAQ,GAAG,UAAU,CAAC,WAAW;AAC/B,qBAAO,MAAM;AAAA,YACf,CAAC;AAAA,UACH;AAGA,cAAI,MAAM;AACR,oBAAQ,MAAM,IAAI;AAAA,UACpB;AAEA,kBAAQ,IAAI;AAEZ,eAAK,cAAc,WAAW;AAAA,QAChC,OAAO;AAEL,cAAI,cAAc,kCAAkC,QAAQ;AAC5D,cAAI,WAAW,+BAA+B,QAAQ;AACtD,aAAG,cAAc,UAAU,IAAI,MAAM;AAErC,cAAI,aAAa,mGACa,MAAM,MAAM,MAAM,4BACzB,KAAK,UAAU,OAAO,IAAI,sUAUtB,cAAc,2LACjB,WAAW,mEAGR,cAAc,qFACjB,WAAW,6DAGR,cAAc,qFACjB,WAAW,YAE9B,OAAO,gBAAgB,KAAK,UAAU,IAAI,EAAE,MAAM,GAAE,EAAE,EAAE,QAAQ,MAAM,KAAK,IAAI,QAAM,MACtF;AAEJ,cAAI,WAAW,MAAM,QAAQ,KAAK,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC;AACxD,cAAI;AACJ,iBAAM,GAAG,WAAW,QAAQ,GAAG;AAAA,UAE/B;AACA,eAAK,eAAe,GAAG,aAAa,aAAa,MAAM;AAEvD,mBAAS,MAAM,IAAI;AAEnB,aAAG,WAAW,WAAW;AACzB,cAAI,KAAK,aAAa,MAAM,6BAA6B,GAAG;AAE1D,gBAAI,WAAW,KAAK,MAAM,KAAK,aAAa,QAAQ,+BAA+B,EAAE,CAAC;AACtF,iBAAK,YAAY,UAAU,GAAG;AAAA,UAChC,OAAO;AAEL,iBAAK,SAAS,KAAK,aAAa,QAAQ,2CAA2C,IAAI;AACvF,gBAAI,OAAO,KAAK,MAAM,KAAK,aAAa,QAAQ,2CAA2C,IAAI,CAAC;AAChG,uBAAW;AAAA,cACT,YAAY,KAAK;AAAA,cACjB,SAAS,KAAK,KAAK;AAAA,YACrB;AACA,iBAAK,eAAe,KAAK,KAAK;AAC9B,iBAAK,WAAW,OAAO,KAAK,KAAK,KAAK,MAAM,QAAQ;AACpD,qBAAS,KAAK,MAAM,IAAI;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAMA,WAAK,cAAc,SAAS,OAAO,QAAQ;AACzC,aAAK,SAAS,UAAU;AACxB,aAAK,aAAa;AAClB,aAAK,eAAe,MAAM;AAC1B,oBAAY;AACZ,iBAAS,KAAK,IAAI;AAAA,MACpB;AAKA,WAAK,QAAQ,WAAW;AACtB,YAAI,SAAS;AACX,kBAAQ,MAAM;AACd,oBAAU;AAAA,QACZ;AAEA,kBAAU,OAAO,OAAO,CAAC,GAAG,cAAc;AAC1C,aAAK,eAAe;AACpB,aAAK,cAAc;AACnB,aAAK,WAAW,OAAO,MAAM,CAAC;AAE9B,oBAAY,cAAc;AAC1B,YAAI,KAAK,eAAe,KAAK,WACrB,KAAK,eAAe,KAAK,UAAU,aACpC,KAAK,eAAe,KAAK,MAAM;AACpC,qBAAW;AACX,mBAAS,KAAK,IAAI;AAAA,QACpB;AACA,aAAK,aAAa,KAAK;AAAA,MACzB;AAKA,WAAK,mBAAmB,SAAS,OAAO,UAAU;AAChD,YAAI,EAAE,SAAS,YAAY;AACzB,oBAAU,KAAK,IAAI,CAAC;AAAA,QACtB;AAEA,kBAAU,KAAK,EAAE,KAAK,QAAQ;AAAA,MAChC;AAMA,WAAK,sBAAsB,SAAS,OAAO,UAAU;AACnD,YAAI,SAAS,WAAW;AAEtB,oBAAU,KAAK,IAAI,UAAU,KAAK,EAAE,OAAO,SAAS,IAAI;AACtD,mBAAO,OAAO;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF;AAKA,WAAK,gBAAgB,SAAU,OAAO;AACpC,YAAI,OAAO,KAAK,OAAO,KAAK,MAAM,YAAY;AAC5C,cAAI,KAAK,eAAe,KAAK,QAAQ,SAAS;AAC5C,yBAAa,WAAW;AAAE,mBAAK,OAAO,KAAK,EAAE;AAAA,YAAE,CAAC;AAAA;AAEhD,iBAAK,OAAO,KAAK,EAAE;AAAA,QACvB;AACA,YAAI,SAAS,WAAW;AACtB,mBAAS,IAAI,GAAG,MAAM,UAAU,KAAK,EAAE,QAAQ,IAAI,KAAK,KAAK;AAC3D,gBAAI,KAAK,eAAe,KAAK;AAC3B,2BAAa,WAAW;AAAE,0BAAU,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI;AAAA,cAAE,CAAC;AAAA;AAE1D,wBAAU,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAOA,UAAI,WAAW,SAAS,OAAO;AAC7B,YAAK,KAAK,eAAe,SAAW,KAAK,eAAe,KAAK,UAAU;AACrE;AAEF,aAAK,aAAa;AAElB,YAAI,SAAS,SAAS,KAAK,aAAa,KAAK,UAAU,KAAK,eAAe,KAAK,MAAM;AACpF,eAAK,cAAc,kBAAkB;AAAA,QACvC;AAEA,YAAI,KAAK,eAAe,KAAK,MAAM;AACjC,cAAI;AAEJ,cAAI;AACF,mBAAO;AAAA,mBACA;AACP,mBAAO;AAAA;AAEP,mBAAO;AAET,eAAK,cAAc,IAAI;AAGvB,eAAK,cAAc,SAAS;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClqBO,IAAM,YAAN,cAAwB,MAAM;AAAA,EACnC,YAAY,KAAa;AACrB,UAAM,GAAG;AACT,SAAK,OAAO,KAAK,YAAY;AAC7B,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EACpD;AACF;AAMO,IAAM,kBAAN,cAA8B,UAAU;AAAC;AAKzC,IAAM,mBAAN,cAA+B,UAAU;AAAC;;;ACjB1C,IAAM,UACX,OAAO,YAAY,eACnB,QAAQ,WACR,QAAQ,QAAQ,SAAS;AAGpB,IAAI;AACX,IAAI,WAAW,UAAU;AACvB,eAAa,CAAC,QACZ,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,MAAM;AACb,WAAO,SAAS,MAAM,QAAQ;AAC9B,WAAO,UAAU;AACjB,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC,CAAC;AACL,WAAW,WAAW,eAAe;AACnC,eAAa,OAAO,QAAQ;AAC1B,QAAI;AACF,iBAAW,cAAc,GAAG;AAAA,IAC9B,SAAS,GAAP;AACA,UAAI,aAAa,WAAW;AAC1B,cAAM,6BAAO,QAAP,QAAO,GAAG;AAAA,MAClB,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF,WAAW,SAAS;AAClB,eAAa,OAAO,QAAgB;AAClC,UAAM,eAAe,MAAM,6CAAO,MAAM,KAAG;AAC3C,UAAM,6BAAO,QAAP,QAAO,YAAY,QAAQ,GAAG,CAAC;AAAA,EACvC;AACF,OAAO;AACL,QAAM,IAAI,UAAU,sCAAsC;AAC5D;;;ACrCO,SAAS,iBAAiB;AAC/B,QAAM,MAAM;AAAA,IACV,SAAS,CAAC,WAAqB;AAAA,IAAC;AAAA,IAChC,QAAQ,CAAC,YAAkB;AAAA,IAAC;AAAA,IAC5B,SAAS;AAAA,EACX;AAEA,QAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,QAAI,UAAU;AACd,QAAI,SAAS;AAAA,EACf,CAAC;AACD,MAAI,UAAU;AAEd,SAAO;AACT;AAEO,SAAS,MAAM,IAAY;AAChC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAEO,SAAS,gBACd,KACA,MACA,aACG,cACM;AACT,MAAI,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAC3C,WAAO;AAAA,EACT;AACA,MAAI,KAAK,GAAG,GAAG;AACb,WAAO,SAAS,KAAK,GAAG,YAAY;AAAA,EACtC;AACA,MAAI,MAAM,QAAQ,GAAG,KAAK,YAAY,OAAO,GAAG,GAAG;AACjD,WAAQ,IAAkB;AAAA,MAAI,CAAC,MAC7B,gBAAgB,GAAG,MAAM,UAAU,GAAG,YAAY;AAAA,IACpD;AAAA,EACF;AACA,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,gBAAgB,GAAG,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC;AAAA,EACjG;AACF;AAmBO,SAAS,qBAAqB,KAAa,IAAoC;AACpF,QAAM,MAAM,IAAI,eAAe;AAC/B,MAAI,KAAK,OAAO,KAAK,IAAI;AACzB,MAAI,SAAS,MAAM;AACjB,UAAM,SAAS,IAAI,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;AAC3E,OAAG,MAAM;AAAA,EACX;AACA,MAAI,KAAK;AACX;AAEO,SAAS,cAAc,WAAmB;AAC/C,MAAI;AAAS,WAAO;AACpB,QAAM,OAAO,IAAI,IAAI,SAAS,IAAI;AAClC,QAAM,OAAO,IAAI,IAAI,WAAW,SAAS,MAAM;AAC/C,MAAI,KAAK,SAAS,KAAK,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,aAAa,KAAK,UAAU;AACzF,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,SAAkB;AACjD,MAAI,MAAM;AACV,QAAM,OAAO,UAAU,OAAO,UAAU;AAExC,QAAM,IAAI,UAAU,GAAG;AACzB;;;ACxFO,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAqB/B,IAAM,gBAAgB,oBAAI,QAA6B;AAChD,SAAS,SAAY,KAAQ,WAA8B;AAChE,gBAAc,IAAI,KAAK,SAAS;AAChC,SAAO;AACT;AAIO,SAAS,OAAO,GAAmB;AACxC,SAAO,OAAO,MAAM,YAAY,EAAE,WAAW;AAC/C;AAEO,IAAM,cAAc;AAEpB,SAAS,eAAqB;AACnC,QAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,KAAK,GAAG;AAChE,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB;AACvB,MAAI,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,OAAO,gBAAgB,EAAE,SAAS,EAAE;AAC5E,QAAM,MAAM,KAAK,OAAO;AACxB,MAAI,MAAM,GAAG;AACX,aAAS,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI;AAAA,EAC3D;AACA,SAAO;AACT;;;AChDA,qBAAuB;AAKvB,IAAM,UAAU,IAAI,YAAY;AAchC,eAAsB,aAAa,UAAoB,MAAuB,UAAe;AAC3F,MAAI;AACF,QAAI,EAAE,QAAQ,YAAY,YAAY,aAAa,IAAI;AAGvD,UAAM,YAAQ,uBAAO,QAAQ;AAC7B,UAAM,OAAO,MAAM,UAAU,WAAW;AAExC,YAAQ,MAAM,YAAY,iBAAiB,MAAM,MAAM;AACvD,YAAQ,MAAM,YAAY,iBAAiB,CAAC,IAAI;AAChD,QAAI,CAAC,MAAM;AAGT,YAAM,CAAC,MAAM,WAAW,IAAI,uBAAuB,QAAQ;AAG3D,iBAAW,IAAI,QAAQ,OAAO,IAAI,CAAC;AACnC,YAAM,gBAAgB,cAAc,MAAO;AAG3C,oBAAc,MAAM,aAAa;AAAA,IACnC;AAGA,eAAW,IAAI,KAAK;AACpB,YAAQ,MAAM,YAAY,iBAAiB,CAAK;AAGhD,UAAM,gBAAgB,cAAc,MAAgB;AAAA,EACtD,SAAS,GAAP;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,SAAS,uBAAuB,IAAsC;AACpE,QAAM,KAAK,aAAa;AACxB,SAAO;AAAA,IACL;AAAA,IACA,IAAI,QAAQ,CAAC,YAAY;AACvB,UAAI,SAAS;AACX,QAAC,GAA6B,KAAK,WAAW,CAAC,YAAiB;AAC9D,cAAI,CAAC,QAAQ,MAAM,QAAQ,OAAO,IAAI;AACpC;AAAA,UACF;AACA,kBAAQ,OAAO;AAAA,QACjB,CAAC;AAAA,MACH,OAAO;AACL,WAAG,iBAAiB,WAAW,SAAS,EAAE,IAAkB;AAC1D,cAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,MAAM,GAAG,KAAK,OAAO,IAAI;AAChD;AAAA,UACF;AACA,aAAG,oBAAoB,WAAW,CAAuC;AACzE,kBAAQ,GAAG,IAAI;AAAA,QACjB,CAAuC;AAAA,MACzC;AACA,UAAI,GAAG,OAAO;AACZ,WAAG,MAAM;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,eAAe,gBAAgB,cAA0B,QAAgB;AACvE,QAAM,SAAS,UAAU,KAAK;AAC9B,MAAI,YAAY;AAChB,SAAO,QAAQ,gBAAgB,cAAc,QAAQ,GAAG,GAAG,MAAM,MAAM,GAAG;AAExE,UAAM,MAAM,SAAS;AACrB,QAAI,YAAY,IAAI;AAElB,mBAAa;AAAA,IACf;AAAA,EACF;AACA,UAAQ,GAAG,cAAc,GAAG,KAAK,KAAK;AACtC,UAAQ,OAAO,cAAc,CAAC;AAChC;;;ACpGA;AASO,IAAM,aAAN,MAAoB;AAAA,EAIzB,cAAc;AAsCd;AAzCA;AACA;AAGE,uBAAK,YAAa,CAAC;AACnB,uBAAK,WAAY,CAAC;AAAA,EACpB;AAAA,EAEA,QAAQ;AACN,uBAAK,YAAa,CAAC;AACnB,uBAAK,WAAY,CAAC;AAAA,EACpB;AAAA,EAEA,IAAI,GAAM;AACR,QAAI,CAAC,mBAAK,YAAW,QAAQ;AAC3B,4BAAK,cAAL;AAAA,IACF;AACA,UAAM,UAAU,mBAAK,YAAW,MAAM;AACtC,YAAQ,CAAC;AAAA,EACX;AAAA,EAEA,MAAM,MAAM;AACV,QAAI,CAAC,mBAAK,WAAU,QAAQ;AAC1B,4BAAK,cAAL;AAAA,IACF;AACA,UAAM,UAAU,mBAAK,WAAU,MAAM;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,UAAU;AACR,WAAO,CAAC,mBAAK,WAAU;AAAA,EACzB;AAAA,EAEA,YAAY;AACV,WAAO,CAAC,CAAC,mBAAK,YAAW;AAAA,EAC3B;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,mBAAK,WAAU,SAAS,mBAAK,YAAW;AAAA,EACjD;AASF;AAhDE;AACA;AAwCA;AAAA,SAAI,WAAG;AACL,qBAAK,WAAU;AAAA,IACb,IAAI,QAAQ,CAAC,YAAY;AACvB,yBAAK,YAAW,KAAK,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;;;AC1BK,SAAS,WAAW,KAAc,eAAyC;AAChF,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,MAAM,aAAa;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,YAAY,MAAY,MAAe,eAA0C;AAC/F,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAGA,SAAS,0BAA6B,KAAQ,eAAmC;AAG/E,MAAI,eAAe;AACjB,aAAS,KAAK,aAAa;AAAA,EAC7B;AACA,SAAO;AACT;AAuBO,SAAS,eAAe,KAAc,MAAoC;AAC/E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,EAAE,KAAK,SAAS,KAAK;AAAA,EAC7B;AACF;;;ACzDO,SAAS,mBAAmB,SAAgC;AACjE,QAAM,IAAI,IAAI,gBAAgB,QAAQ,IAAI,OAAO;AAEjD,MAAI,QAAQ,IAAI,SAAS,SAAS;AAChC,MAAE,OAAO,QAAQ,IAAI;AAAA,EACvB;AACA,IAAE,QAAQ,QAAQ,IAAI;AACtB,SAAO;AACT;AAOO,SAAS,cAAc,OAAkC;AAC9D,SAAO,SAAS,OAAO,UAAU,YAAY,iBAAiB,SAAS,SAAS;AAClF;AAOO,SAAS,iBAAiB,OAAqC;AACpE,SAAO,cAAc,KAAK,KAAK,MAAM,gBAAgB;AACvD;;;AC/DA;AA8BO,IAAe,cAAf,MAA2B;AAAA,EAA3B;AACL,sBAAa,IAAI,WAAoB;AACrC,uBAAc,IAAI,WAAoB;AACtC,uBAAc,IAAI,WAAoB;AAEtC,gCAAU,oBAAI,IAAsD;AAAA;AAAA,EAMpE,MAAM,OAAyB;AAC7B,WAAO,MAAM,KAAK,YAAY,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM,QAA4B;AAChC,UAAM,MAAiB,CAAC;AACxB,WAAO,CAAC,KAAK,YAAY,QAAQ,GAAG;AAClC,UAAI,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAA+B;AACnC,WAAO,MAAM,KAAK,YAAY,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM,KAAoB;AACxB,SAAK,WAAW,IAAI,GAAG;AAAA,EACzB;AAAA,EAEA,MAAM,QAAQ,KAAc,eAAsD;AAChF,UAAM,MAAM,WAAW,KAAK,aAAa;AAEzC,UAAM,EAAE,SAAS,QAAQ,QAAQ,IAAI,eAAe;AACpD,uBAAK,SAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,SAAS,OAAO,CAAC;AAEnD,SAAK,MAAM,GAAG;AACd,WAAO;AAAA,EACT;AAAA,EAEU,mBAAyB;AACjC,SAAK,YAAY,IAAI,EAAE,MAAM,SAAS,CAAC;AAAA,EACzC;AAAA,EAEU,gBAAgB,KAAe;AACvC,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,UAAU,mBAAK,SAAQ,IAAI,IAAI;AAErC,QAAI,SAAS;AACX,YAAM,UAAU,IAAI,KAAK;AACzB,yBAAK,SAAQ,OAAO,IAAI;AAExB,UAAI,QAAQ,gBAAgB,OAAO;AACjC,gBAAQ,OAAO,mBAAmB,OAAO,CAAC;AAAA,MAC5C,OAAO;AACL,gBAAQ,QAAQ,OAAO;AAAA,MACzB;AAAA,IACF,OAAO;AACL,cAAQ,KAAK,qBAAqB;AAAA,IACpC;AAAA,EACF;AACF;AAzDE;;;ACxBF,IAAAG,kBAAuB;AAEvB,IAAM,UAAU,IAAI,YAAY,OAAO;AAbvC;AAeO,IAAM,WAAN,MAAe;AAAA,EAiBpB,YAAY,UAAoB,KAAc,YAA4B,CAAC,GAAG;AAZ9E,mCAAa;AACb;AACA;AACA;AAIA;AAGA,qBAAY,IAAI,WAAW;AAGzB,SAAK,WAAW;AAChB,SAAK,MAAM;AACX,SAAK,YAAY;AACjB,uBAAK,WAAY;AAAA,EACnB;AAAA,EAEA,eAAe;AACb,QAAI,mBAAK,aAAY;AACnB;AAAA,IACF;AACA,uBAAK,YAAa;AAElB,SAAK,UAAU,aAAa,IAAI;AAChC,uBAAK,UAAW,KAAK,OAAO;AAC5B,uBAAK,UAAS,KAAK;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO;AACL,QAAI,CAAC,mBAAK,aAAY;AACpB,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAEA,UAAM,EAAE,MAAM,MAAM,IAAI,mBAAK,UAAU,KAAK;AAC5C,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,uBAAK,WAAY;AACjB,uBAAK,SAAU;AAEf,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,SAAS;AAER,UAAM,EAAE,UAAU,KAAK,UAAU,IAAI;AACrC,UAAM,aAAa,IAAI,WAAW,IAAI,kBAAkB,CAAC,CAAC;AAC1D,UAAM,eAAe,KAAK;AAC1B,UAAM,SAAS,KAAK;AAGpB,QAAI,aAAa,kBAAkB,WAAW;AAG9C,UAAM,UAAU,eAAe,KAAK;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,aAAS,YAAY,SAAS,SAAS;AACvC;AAEA,QAAI,QAAQ,KAAK,YAAY,eAAe,MAAM,mBAAmB;AAGnE,YAAM,KAAK,QAAQ,OAAO,WAAW,MAAM,GAAG,WAAW,CAAC;AAC1D,wBAAkB,UAAU;AAC5B,YAAMC,QAAO,QAAQ,KAAK,YAAY,eAAe;AACrD,mBAAa,kBAAkBA,KAAI;AAEnC,eAAS,YAAY,EAAE,IAAI,WAAW,CAAC;AACvC;AAAA,IACF;AAEA,UAAM,OAAO,QAAQ,KAAK,YAAY,eAAe;AAErD,eAAO,wBAAO,WAAW,MAAM,GAAG,IAAI,CAAC;AAAA,EACzC;AAAA,EAEA,IAAI,SAAS;AACX,QAAI,mBAAK,aAAY;AACnB,YAAM,mBAAK;AAAA,IACb;AAEA,QAAI,mBAAK,YAAW;AAClB,aAAO,mBAAK;AAAA,IACd;AACA,UAAM,IAAI,MAAM,YAAY;AAAA,EAC9B;AAAA,EAEA,UAAe;AACb,SAAK,aAAa;AAClB,SAAK,UAAU,YAAY,IAAI;AAC/B,WAAO,KAAK;AAAA,EACd;AACF;AArGE;AACA;AACA;AACA;AAIA;AAgGF,IAAM,aAAN,MAAiB;AAAA,EAKf,cAAc;AACZ,SAAK,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC;AACpC,SAAK,eAAe,IAAI,WAAW,IAAI,kBAAkB,KAAK,IAAI,CAAC,CAAC;AACpE,SAAK,QAAQ,oBAAI,IAAI;AAAA,EACvB;AAAA,EAEA,aAAa,MAAgB;AAC3B,SAAK,SAAS,KAAK,WAAW,CAAC;AAC/B,SAAK,WAAW,CAAC,KAAK;AACtB,SAAK,eAAe,KAAK;AACzB,SAAK,MAAM,IAAI,KAAK,QAAQ,IAAI;AAAA,EAClC;AAAA,EAEA,qBAAqB;AACnB,UAAM,UAAU;AAChB,eAAS;AACP,YAAM,SAAS,QAAQ,KAAK,KAAK,cAAc,GAAG,GAAG,OAAO;AAC5D,cAAQ,QAAQ;AAAA,QACd,KAAK;AAAA,QACL,KAAK;AACH;AAAA,QACF,KAAK;AACH,cAAI,gBAAgB,CAAC,MAAM,GAAG;AAC5B,4BAAgB;AAAA,UAClB;AACA;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,aAAa;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,mBAAmB;AAClB,UAAM,OAAO,QAAQ,KAAK,KAAK,cAAc,CAAC;AAC9C,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,MAAM,KAAK;AACjB,UAAI,OAAO,KAAK;AACd,gBAAQ,IAAI,KAAK,cAAc,GAAG,CAAC,GAAG;AACtC,cAAM,YAAY,QAAQ,SAAS,KAAK,cAAc,IAAI,GAAG,CAAC;AAC9D,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,MAAiB;AACzB,QAAI,SAAS;AACb,eAAW,eAAe,KAAK,iBAAiB,GAAG;AAEjD,YAAM,YAAY,KAAK,MAAM,IAAI,WAAW;AAC5C,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,mCAAmC,cAAc;AAAA,MACnE;AACA,UAAI,UAAU,KAAK,GAAG;AAEpB,aAAK,MAAM,OAAO,WAAW;AAC7B,YAAI,cAAc,MAAM;AACtB,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,MAAgB;AAC1B,eAAS;AACP,WAAK,mBAAmB;AAExB,UAAI,KAAK,UAAU,IAAI,GAAG;AACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,cAA8B,CAAC;AAErC,SAAS,kBAAkB,MAA0B;AACnD,QAAM,WAAW,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;AAC1C,MAAI,CAAC,YAAY,QAAQ,GAAG;AAC1B,gBAAY,QAAQ,IAAI,CAAC;AAAA,EAC3B;AACA,QAAM,SAAS,YAAY,QAAQ,EAAE,IAAI;AACzC,MAAI,QAAQ;AACV,WAAO,KAAK,CAAC;AACb,WAAO;AAAA,EACT;AACA,SAAO,IAAI,WAAW,IAAI,kBAAkB,KAAK,QAAQ,CAAC;AAC5D;AAEA,SAAS,kBAAkB,QAAoB;AAC7C,QAAM,WAAW,KAAK,KAAK,KAAK,KAAK,OAAO,UAAU,CAAC;AACvD,cAAY,QAAQ,EAAE,KAAK,MAAM;AACnC;AAEA,IAAI,kBAAkB,IAAI,WAAW,IAAI,YAAY,CAAC,CAAC;AAEvD,IAAI,kBAAkB,MAAY;AAChC,kBAAgB,CAAC,IAAI;AACrB,QAAM,IAAI,MAAM,cAAc;AAChC;AAOO,SAAS,oBAAoB,SAAqB;AACvD,oBAAkB;AACpB;AAOO,SAAS,mBAAmB,QAAyB;AAC1D,oBAAkB,IAAI,WAAW,MAAM;AACzC;;;AC1HO,IAAM,SAAS,CAAC;AAQhB,SAAS,WAAW,MAAyC;AAClE,SAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAQ,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC;AAC5D;;;AC1HA,IAAI,SAAS;AACX,EAAC,WAAmB,SAAS,QAAQ,gBAAgB,EAAE;AACzD;AAbA;AAiBO,IAAM,0BAAN,cAAsC,YAAY;AAAA,EAOvD,YAAY,QAA+B;AACzC,UAAM;AAkCR;AAzCA;AAIA,iBAAQ,MAAM;AAAA,IAAC;AAgDf,6CAAuB,OAAO,QAAgB,YAAqB;AACjE,UAAI,CAAC,WAAW,CAAC,QAAQ,MAAM;AAC7B;AAAA,MACF;AAEA,cAAQ,QAAQ,MAAM;AAAA,QACpB,KAAK;AACH,6BAAK,kBAAmB,IAAI,WAAW,QAAQ,IAAyB;AACxE,eAAK,QAAQ;AACb;AAAA,QAEF,KAAK;AACH,eAAK,gBAAgB,OAAmB;AACxC;AAAA,QAEF,KAAK;AACH,eAAK,YAAY,IAAI,QAAQ,IAAe;AAC5C;AAAA,QAEF;AACE,eAAK,YAAY,IAAI,OAAO;AAC5B;AAAA,QAEF,KAAK,gBAAgB;AACnB,gBAAM,MAAM;AACZ,gBAAM,UAAU,IAAI,KAAK;AACzB,gBAAM,UAAU,IAAI,KAAK;AAEzB,kBAAQ,QAAQ,MAAM;AAAA,YACpB,KAAK,QAAQ;AACX,oBAAM,WAAW,MAAM,KAAK,WAAW,IAAI;AAC3C,oBAAM,aAAa,QAAQ,SAAS,QAAQ;AAC5C;AAAA,YACF;AAAA,YACA;AACE,oBAAM,IAAI,iBAAiB,6BAA6B,QAAQ,QAAQ;AAAA,UAC5E;AACA;AAAA,QACF;AAAA,QACA,KAAK;AACH,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,MACJ;AAAA,IACF;AAxFE,UAAM,aAAa,CAAC,WAAmB;AACrC,4BAAK,oDAAL,WAA6B;AAC7B,WAAK,QAAQ,MAAM;AACjB,eAAO,UAAU;AACjB,aAAK,iBAAiB;AAAA,MACxB;AACA,YAAM,MAAM;AAAA,QACV,MAAM;AAAA,QACN,MAAM,EAAE,QAAQ,aAAa,YAAY,kBAAkB;AAAA,MAC7D;AACA,aAAO,YAAY,GAAG;AAAA,IACxB;AAEA,QAAI,cAAc,OAAO,OAAO,GAAG;AACjC;AAAA,QAAqB,GAAG,OAAO;AAAA,QAAyB,CAAC,WACvD,WAAW,MAAM;AAAA,MACnB;AAAA,IACF,OAAO;AACL,YAAM,SAAS,IAAI,OAAO,GAAG,OAAO,uBAAuB;AAC3D,iBAAW,MAAM;AAAA,IACnB;AAEA,KAAC,EAAE,SAAS,KAAK,SAAS,SAAS,KAAK,YAAY,IAAI,eAAe;AAAA,EACzE;AAAA,EAEA,YAAY;AACV,QAAI,CAAC,mBAAK,mBAAkB;AAC1B,YAAM,IAAI,iBAAiB,iEAAiE;AAAA,IAC9F;AACA,SAAK,WAAW,MAAM;AACtB,uBAAK,kBAAiB,CAAC,IAAI;AAAA,EAC7B;AA0DF;AAjGE;AAyCA;AAAA,4BAAuB,SAAC,QAAgB;AACtC,MAAI,SAAS;AACX,IAAC,OAAiC,GAAG,WAAW,CAAC,YAAqB;AACpE,yBAAK,sBAAL,WAA0B,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,OAAO;AACL,WAAO,YAAY,CAAC,OAClB,mBAAK,sBAAL,WAA0B,QAAQ,GAAG;AAAA,EACzC;AACF;AAEA;AAtEF,oBAAAC,mBAAA;AA0HO,IAAM,4BAAN,MAAyD;AAAA,EAM9D,cAAc;AALd;AACA,kCAAoC,MAAM;AAC1C,uBAAAA,mBAAmB,IAAI,WAAW,IAAI,kBAAkB,CAAC,CAAC;AAC1D,mCAAa,MAAM;AAAA,IAAC;AAGlB,uBAAK,KAAO,UAAU,QAAQ,gBAAgB,EAAE,aAAa;AAC7D,uBAAmB,mBAAKA,mBAAiB,MAAM;AAC/C,wBAAoB,MAAM,KAAK,gBAAgB,CAAC;AAAA,EAClD;AAAA,EAEA,UAAU;AACR,SAAK,MAAM,EAAE,MAAM,WAAW,MAAM,mBAAKA,mBAAiB,OAAO,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,KAAcC,WAA2B;AAC7C,uBAAK,KAAI,YAAY,KAAKA,SAAQ;AAAA,EACpC;AAAA,EAEA,YAAY,KAAcA,WAA2B;AACnD,uBAAK,KAAI,YAAY,EAAE,MAAM,UAAU,MAAM,IAAI,GAAGA,SAAQ;AAAA,EAC9D;AAAA,EAEA,OAAgB;AACd,UAAM,MAAM,EAAE,MAAM,OAAO;AAC3B,UAAM,OAAO,IAAI,SAAS,mBAAK,MAAK,GAAG;AACvC,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,kBAA0B;AACxB,eAAS;AACP,YAAM,MAAM,KAAK,KAAK;AACtB,UAAI,IAAI,SAAS,SAAS;AACxB,eAAO,OAAO,aAAa,IAAI,IAAc;AAAA,MAC/C;AACA,yBAAK,WAAL,WAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,IAAI,MAAgB;AAClB,WAAO,SAAS,IAAI;AAAA,EACtB;AAAA,EAEA,aAAa,WAAuB;AAClC,uBAAK,YAAa;AAAA,EACpB;AAAA,EAEA,kBAAkB;AAChB,QAAI,mBAAKD,mBAAiB,CAAC,MAAM,GAAG;AAClC,yBAAKA,mBAAiB,CAAC,IAAI;AAC3B,yBAAK,YAAL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBAAmBE,WAAkC;AACnD,uBAAK,WAAYA;AAAA,EACnB;AACF;AAzDE;AACA;AACAF,oBAAA;AACA;;;ACtHF,IAAAG,kBAA+B;AAS/B,IAAI,SAAS;AACX,EAAC,WAAmB,SAAS,QAAQ,gBAAgB,EAAE;AACzD;AAnBA,kKAAAC,0BAAAC,4BAAAC;AAuBO,IAAM,2BAAN,cAAuC,YAAY;AAAA,EAUxD,YAAY,QAA+B;AACzC,UAAM;AA8CR,uBAAM;AA6BN,uBAAM;AAoCN,uBAAAF;AAtHA,iBAAQ,MAAM;AAAA,IAAC;AAEf,0CAAoB,oBAAI,IAAqB;AAC7C;AACA,qCAAe;AA6Hf,uBAAAE,uBAAuB,OAAO,QAAgB,YAAqB;AACjE,UAAI,CAAC,WAAW,CAAC,QAAQ,MAAM;AAC7B;AAAA,MACF;AAEA,cAAQ,QAAQ,MAAM;AAAA,QACpB,KAAK;AACH,eAAK,QAAQ;AACb;AAAA,QAEF,KAAK;AACH,eAAK,gBAAgB,OAAmB;AACxC;AAAA,QAEF,KAAK;AACH,eAAK,YAAY,IAAI,QAAQ,IAAe;AAC5C;AAAA,QAEF;AACE,eAAK,YAAY,IAAI,OAAO;AAC5B;AAAA,QAEF,KAAK,gBAAgB;AACnB,gBAAM,UAAU,QAAQ;AACxB,6BAAK,mBAAkB,IAAI,QAAQ,KAAK,MAAM,QAAQ,KAAK,GAAG;AAC9D;AAAA,QACF;AAAA,QAEA,KAAK;AACH,gBAAM,IAAI;AAAA,YACR;AAAA,UAEF;AAAA,MACJ;AAAA,IACF;AA3JE,UAAM,aAAa,CAAC,WAAmB;AACrC,4BAAKF,0BAAAC,4BAAL,WAA6B;AAC7B,WAAK,QAAQ,MAAM;AACjB,eAAO,UAAU;AACjB,aAAK,iBAAiB;AAAA,MACxB;AACA,4BAAK,kDAAL,WAA4B,GAAG,OAAO,yCAAyC;AAAA,QAC7E,CAAC,aAAa;AACZ,gBAAM,MAAM;AAAA,YACV,MAAM;AAAA,YACN,MAAM;AAAA,cACJ;AAAA,cACA,aAAa,YAAY;AAAA,cACzB;AAAA,cACA,UAAU,OAAO,SAAS;AAAA,YAC5B;AAAA,UACF;AACA,iBAAO,YAAY,GAAG;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,gBAAgB,GAAG;AAC1C;AAAA,QAAqB,GAAG,OAAO;AAAA,QAAkC,CAAC,WAChE,WAAW,MAAM;AAAA,MACnB;AAAA,IACF,OAAO;AACL,YAAM,SAAS,IAAI,OAAO,GAAG,OAAO,gCAAgC;AACpE,iBAAW,MAAM;AAAA,IACnB;AAEA,KAAC,EAAE,SAAS,KAAK,SAAS,SAAS,KAAK,YAAY,IAAI,eAAe;AAAA,EACzE;AAAA,EAEA,qBAAoC;AArEtC;AAsEI,QAAI,GAAC,wBAAK,mBAAL,mBAAoB,SAAQ;AAC/B,YAAM,IAAI,iBAAiB,yDAAyD;AAAA,IACtF;AACA,WAAO,mBAAK,eAAc;AAAA,EAC5B;AAAA,EAEA,YAAY;AACV,uBAAK,cAAe;AAAA,EACtB;AAiHF;AAlKE;AACA;AACA;AAiDM;AAAA,2BAAsB,eAAC,KAA8B;AAEzD,qBAAK,eAAgB,MAAM,UAAU,cAAc,SAAS,GAAG;AAC/D,QAAM,UAAU,cAAc;AAC9B,SAAO,iBAAiB,gBAAgB,MAAM;AApFlD;AAqFM,6BAAK,mBAAL,mBAAoB;AAAA,EACtB,CAAC;AAGD,QAAM,WAAW,MAAM,IAAI,QAAgB,CAAC,YAAY;AACtD,cAAU,cAAc;AAAA,MACtB;AAAA,MACA,SAAS,SAAS,OAAyD;AACzE,YAAI,MAAM,KAAK,SAAS,2BAA2B;AACjD,oBAAU,cAAc,oBAAoB,WAAW,QAAQ;AAC/D,kBAAQ,MAAM,KAAK,QAAQ;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AACA,SAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAAA,EACxE,CAAC;AAGD,YAAU,cAAc,iBAAiB,WAAW,CAAC,UAAiC;AACpF,0BAAK,4DAAL,WAAiC;AAAA,EACnC,CAAC;AACD,SAAO;AACT;AAEM;AAAA,gCAA2B,eAAC,OAA8B;AAC9D,MAAI,MAAM,KAAK,SAAS,WAAW;AACjC,UAAM,OAAO,MAAM,KAAK;AACxB,UAAM,UAAU,mBAAK,mBAAkB,IAAI,IAAI;AAC/C,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,iBAAiB,qDAAqD;AAAA,IAClF;AACA,uBAAK,mBAAkB,OAAO,IAAI;AAClC,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK,QAAQ;AACX,cAAM,WAAW,MAAM,KAAK,WAAW,IAAI;AAC3C,aAAK,mBAAmB,EAAE,YAAY;AAAA,UACpC,MAAM;AAAA,UACN;AAAA,UACA,UAAU,YAAY,MAAM,QAAQ;AAAA,QACtC,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,WAAW,mBAAK;AACtB,aAAK,mBAAmB,EAAE,YAAY;AAAA,UACpC,MAAM;AAAA,UACN;AAAA,UACA,UAAU,YAAY,MAAM,QAAQ;AAAA,QACtC,CAAC;AACD,aAAK,WAAW,MAAM;AACtB,2BAAK,cAAe;AACpB;AAAA,MACF;AAAA,MACA;AACE,cAAM,IAAI,iBAAiB,6BAA6B,QAAQ,QAAQ;AAAA,IAC5E;AACA;AAAA,EACF;AACF;AAEAD,2BAAA;AAAAC,6BAAuB,SAAC,QAAgB;AACtC,MAAI,SAAS;AACX,IAAC,OAAiC,GAAG,WAAW,CAAC,YAAqB;AACpE,yBAAKC,uBAAL,WAA0B,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,OAAO;AACL,WAAO,YAAY,CAAC,OAClB,mBAAKA,uBAAL,WAA0B,QAAQ,GAAG;AAAA,EACzC;AACF;AAEAA,wBAAA;AA5JF,IAAAC,MAAA,6CAAAC,YAAAC;AAqMO,IAAM,6BAAN,MAA0D;AAAA,EAS/D,YAAY,MAAgD;AAR5D,uBAAAF,MAAA;AACA;AACA;AACA,0CAAoB,KAAK,IAAI;AAC7B,uBAAAC,YAAoC,MAAM;AAC1C,uBAAAC,aAAa,MAAM;AAAA,IAAC;AACpB,mCAAkD,MAAM;AAAA,IAAC;AAGvD,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,UAAU;AACpC,YAAM,IAAI,iBAAiB,oCAAoC;AAAA,IACjE;AACA,uBAAK,eAAgB,KAAK;AAC1B,uBAAK,WAAY,KAAK;AACtB,uBAAKF,MAAO,UAAU,QAAQ,gBAAgB,EAAE,aAAa;AAAA,EAC/D;AAAA,EAEA,UAAU;AACR,SAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,KAAcG,WAA2B;AAC7C,uBAAKH,MAAI,YAAY,KAAKG,SAAQ;AAAA,EACpC;AAAA,EAEA,YAAY,KAAcA,WAA2B;AACnD,uBAAKH,MAAI,YAAY,EAAE,MAAM,UAAU,MAAM,IAAI,GAAGG,SAAQ;AAAA,EAC9D;AAAA,EAEA,YAAY,SAA4B;AAUtC,UAAM,UAAU,WAAW,OAAO;AAClC,SAAK,MAAM,EAAE,MAAM,gBAAgB,MAAM,QAAQ,CAAC;AAElD,QAAI,aAAa;AACjB,eAAS;AACP,UAAI;AACF,cAAM,MAAM,IAAI,IAAI,gCAAgC,mBAAK,UAAS;AAClE,cAAM,MAAM,IAAI,eAAe;AAC/B,YAAI,UAAU;AACd,YAAI,eAAe;AACnB,YAAI,KAAK,QAAQ,KAAK,KAAK;AAC3B,cAAM,eAAe;AAAA,UACnB,UAAU,mBAAK;AAAA,UACf,MAAM,QAAQ,KAAK;AAAA,QACrB;AACA,YAAI,SAAK,wBAAO,YAAY,CAAC;AAC7B,mBAAO,wBAAO,IAAI,QAAuB;AAAA,MAC3C,SAAS,GAAP;AACA,YAAI,aAAa,gBAAgB,eAAe,KAAM;AACpD,kBAAQ,IAAI,mDAAmD;AAAA,QACjE,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAgB;AACd,UAAM,WAAW,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAClD,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,kBAA0B;AACxB,eAAS;AACP,YAAM,MAAM,KAAK,KAAK;AACtB,UAAI,IAAI,SAAS,SAAS;AACxB,eAAO,OAAO,aAAa,IAAI,IAAc;AAAA,MAC/C;AACA,yBAAKF,YAAL,WAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,IAAI,MAAgB;AAClB,WAAO,SAAS,IAAI;AAAA,EACtB;AAAA,EAEA,aAAa,WAAuB;AAClC,uBAAKC,aAAa;AAAA,EACpB;AAAA,EAEA,kBAAkB;AAShB,QAAI,KAAK,IAAI,IAAI,mBAAK,qBAAoB,KAAM;AAC9C,yBAAK,mBAAoB,KAAK,IAAI;AAClC,YAAM,WAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACvD,YAAM,cAAc,SAAS,KAAK;AAClC,UAAI,aAAa;AACf,2BAAKA,aAAL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBAAmBE,WAAkC;AACnD,uBAAKH,YAAYG;AAAA,EACnB;AACF;AA/GEJ,OAAA;AACA;AACA;AACA;AACAC,aAAA;AACAC,cAAA;;;ACjMK,IAAM,cAAc;AAAA,EACzB,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,eAAe;AACjB;AAsCO,SAAS,iBAAiB,KAAyB;AACxD,UAAQ,IAAI,KAAK,aAAa;AAAA,IAC5B,KAAK,YAAY;AACf,aAAO,IAAI,0BAA0B;AAAA,IACvC,KAAK,YAAY;AACf,aAAO,IAAI,2BAA2B,IAAI,IAAI;AAAA,IAChD;AACE,YAAM,IAAI,iBAAiB,sCAAsC;AAAA,EACrE;AACF;;;ACpDO,IAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AACZ;AAuGO,SAAS,aAAa,OAAiC;AAC5D,SAAO,SAAS,OAAO,UAAU,YAAY,OAAO,KAAK,QAAQ,EAAE,SAAS,MAAM,IAAc;AAClG;AAYO,SAAS,UAAU,OAA8B;AACtD,SAAO,SAAS,OAAO,UAAU,YAAY,QAAQ,SAAS,QAAQ;AACxE;;;ACxJO,SAAS,QAA2B,GAAS;AAClD,SAAO,YAAY,UAAU,CAAC,CAAC;AAC/B,SAAO;AACT;AAEO,SAAS,WAA8B,GAAM,MAAwB;AAC1E,SAAO,YAAY,UAAU,CAAC,CAAC;AAC/B,IAAE,KAAK;AACP,SAAO;AACT;AAEO,SAAS,iBAAiB,GAAwC;AAGvE,QAAM,OAAO,OAAO,QAAQ,CAAC;AAE7B,SAAO,oBAAoB,UAAU,CAAC,GAAG,IAAI;AAC7C,QAAM,MAAM,OAAO,SAAS,MAAM,KAAK;AAEvC,SAAO,EAAE,KAAU,KAAK,KAAK;AAC/B;AAEO,SAAS,eAAe,OAA4B;AACzD,SAAO,cAAc,CAAC;AACtB,SAAO,MAAM,MAAM,GAAG;AACxB;AAEO,SAAS,UAA6B,GAAM,OAAsC;AACvF,SAAO,aAAa,UAAU,CAAC,GAAG,MAAM,GAAG;AAC3C,SAAO;AACT;AAEO,SAAS,UAAU,GAAW;AACnC,SAAO,cAAc,CAAC;AACxB;AAIO,SAAS,QAAQ,KAAc,KAAc,OAAgB;AAClE,SAAO,cAAc,UAAU,GAAG,GAAG,UAAU,KAAK,GAAG,UAAU,GAAG,CAAC;AACvE;AAEO,SAAS,cAAc,MAAc,KAAwB;AAClE,QAAM,UAAsB,CAAC;AAC7B,QAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,MAAI;AACF,UAAM,SAAS,IAAI,aAAa,GAAG;AACnC,eAAW,QAAQ,IAAI;AAEvB,YAAQ,OAAO,OAAO,aAAa,IAAI;AAEvC,UAAM,MAAM,OAAO,mBAAmB,QAAQ,MAAM,OAAO,GAAG;AAC9D,WAAO,QAAQ,KAAK,GAAG;AAAA,EACzB,UAAE;AACA,eAAW,OAAO;AAClB,cAAU,KAAK,CAAC;AAAA,EAClB;AACF;AAEO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAEhD,YAAY,SAAiB,MAAY;AACvC,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,SAAS,MAAe,KAAoB;AAC1D,SAAO,OAAO,kBAAkB,OAAO,IAAI,cAAc,KAAK;AAAA,IAC5D,UAAU,IAAI;AAAA,IACd,UAAU,GAAG;AAAA,EACf;AACF;;;AC/DO,SAAS,UAAU,GAAkB;AAC1C,MAAI,UAAU,CAAC,GAAG;AAChB,WAAO,EAAE;AAAA,EACX,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAGA,SAAS,YAAY,KAAkB,MAAa;AAClD,MAAI,OAAO,QAAQ,IAAI,GAAG,MAAM,SAAS,IAAI,GAAG;AAC9C,UAAM,IAAI,MAAM,2BAA2B,IAAI,KAAK,2BAA2B,OAAO;AAAA,EACxF;AACF;AAGO,IAAM,WAAW,oBAAI,IAAuB;AAM5C,SAAS,KAAK,SAAoB,GAAY;AACnD,QAAM,MAAM,UAAU,CAAC;AACvB,SAAO,kBAAkB,GAAG;AAG5B,MAAI,YAAY,QAAW;AACzB;AAAA,EACF;AAEA,MAAI,OAAY,OAAO,GAAG;AACxB,aAAS,IAAI,OAAO,EAAG,KAAK,GAAG;AAC/B;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,6BAA6B,OAAO,OAAO;AAC7D;AAKO,SAAS,QAAQ,SAAoB,GAAY;AACtD,QAAM,MAAM,UAAU,CAAC;AACvB,SAAO,iBAAiB,GAAG;AAE3B,QAAMG,QAAe,SAAS,IAAI,OAAO;AACzC,QAAM,MAAMA,MAAK,QAAQ,GAAG;AAE5B,MAAI,MAAM,GAAG;AACX,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAEA,EAAAA,MAAK,OAAO,KAAK,CAAC;AACpB;AAEO,SAAS,MAAM,SAAoB;AACxC,QAAM,OAAe,SAAS,IAAI,OAAO;AAEzC,aAAW,OAAO,MAAM;AACtB,QAAI;AACF,aAAO,iBAAiB,GAAG;AAAA,IAC7B,SAAS,GAAP;AACA,cAAQ,MAAM,CAAC;AAAA,IACjB;AAAA,EACF;AAEA,WAAS,IAAI,SAAS,CAAC,CAAC;AAC1B;AAQA,SAAS,kBAAkB,KAAwB;AAEjD,MAAI,aAAa,GAAG,GAAG;AACrB,WAAO,KAAK,gBAAgB,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG;AAAA,EACtD;AAGA,MAAI,OAAO,OAAO,QAAQ,YAAY,UAAU,OAAO,IAAI,SAAS,QAAQ;AAC1E,WAAO,IAAI,MAAM;AAAA,EACnB;AAGA,MAAI,QAAQ,MAAM;AAChB,WAAO,IAAI,SAAS,EAAE,MAAM,WAAW,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAAA,EACtE;AACA,MAAI,OAAO,QAAQ,WAAW;AAC5B,WAAO,IAAI,SAAS,GAAG;AAAA,EACzB;AACA,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,IAAI,QAAQ,GAAG;AAAA,EACxB;AACA,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,IAAI,WAAW,GAAG;AAAA,EAC3B;AACA,MAAI,UAAU,GAAG,GAAG;AAClB,WAAO,IAAI,SAAS,GAAG;AAAA,EACzB;AACA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,mBAAmB,GAAG;AAAA,EAC/B;AAEA,QAAM,IAAI,MAAM,2DAA2D;AAC7E;AAIA,SAAS,mBAAmB,KAAiB;AAC3C,QAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,MAAI;AACF,UAAM,OAAO,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AACjD,eAAW,MAAM,IAAI;AACrB,WAAO,KAAK,KAAK;AAAA,EACnB,UAAE;AACA,cAAU,KAAK,CAAC;AAAA,EAClB;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EAEvB,YAAY,KAAW;AACrB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,OAAc;AACZ,UAAM,aAAa,OAAO,QAAQ,KAAK,GAAG;AAC1C,UAAM,OAAO,OAAO,KAAK,QAAQ,EAAE;AAAA,MACjC,CAAC,aAAa,SAAS,QAAiB,MAAM;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AACF;AAxJA;AA0JO,IAAM,WAAN,cAAsB,YAAY;AAAA,EACvC,YAAY,MAAgB;AAC1B,QAAI,EAAE,gBAAgB,cAAc;AAClC,aAAO,kBAAkB,IAAI;AAAA,IAC/B;AAEA,UAAM,KAAK,GAAG;AAoFhB;AAAA,EAnFA;AAAA,EAEA,OAAO,KAAwC,KAA4B;AACzE,UAAM,OAAO,OAAO,QAAQ,GAAG;AAC/B,WAAO,KAAK,gBAAgB,IAAmB,GAAG,IAAI,YAAY,GAAG,CAAC;AAAA,EACxE;AAAA,EAEA,KAAK,OAAO,WAAW,IAAY;AACjC,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAAA;AAAA,EAGA,OAAO,oBAAoB,MAAkC;AAC3D,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA;AAAA,EAGA,iBAAiB,MAA2B;AAC1C,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,UAAgB;AACd,kBAAc,yBAAyB,EAAE,GAAG,KAAK,CAAC;AAAA,EACpD;AAAA,EAEA,SAAwB;AACtB,WAAO,OAAO,QAAQ,KAAK,GAAG,MAAM,SAAS;AAAA,EAC/C;AAAA,EAEA,YAAqB;AACnB,WAAO,KAAK,QAAQ,KAAK,aAAa;AAAA,EACxC;AAAA,EAEA,QAA6B;AAC3B,WAAO,UAAU,KAAK,OAAO,QAAQ,KAAK,GAAG,CAAC;AAAA,EAChD;AAAA,EAEA,SAAS,QAAwC;AAC/C,QAAI;AAEJ,QAAI,WAAW,MAAM;AACnB,iBAAW,KAAK;AAAA,IAClB,WAAW,MAAM,QAAQ,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,YAAY,MAAM,IAAI,GAAG;AAC5F,iBAAW,IAAI,WAAW,MAAM;AAAA,IAClC,OAAO;AACL,YAAM,IAAI,MAAM,kEAAkE;AAAA,IACpF;AAGA,WAAO,cAAc,KAAK,KAAK,KAAK,YAAY,KAAK,SAAS,GAAG;AACjE,WAAO;AAAA,EACT;AAAA,EAEA,QAAkC;AAChC,UAAM,QAAQ,WAAW,KAAK,OAAO,cAAc,KAAK,KAAK,KAAK,YAAY,GAAG,CAAC;AAClF,QAAI,MAAM,OAAO,GAAG;AAClB,aAAO;AAAA,IACT,OAAO;AACL,aAAO,MAAM,QAAQ;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,SAAS,MAAc;AACrB,UAAM,QAAQ,KAAK,MAAM;AACzB,WAAO,SAAS,MAAM,SAAS,IAAI;AAAA,EACrC;AAAA,EAEA,KAAK,UAAuB,EAAE,OAAO,EAAE,GAAG,QAAQ,GAAe;AAC/D,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAAA,EAEA,OAAO,MAAgC;AACrC,WAAO,sBAAK,kBAAL,WAAY,MAAM,KAAK,cAAc;AAAA,EAC9C;AAAA,EAEA,IAAI,MAAgC;AAClC,WAAO,sBAAK,kBAAL,WAAY,MAAM,KAAK,eAAe;AAAA,EAC/C;AAAA,EAEA,UAAU,MAAuB;AAC/B,WAAO,sBAAK,kBAAL,WAAY,MAAM,KAAK,aAAa;AAAA,EAC7C;AAAA,EAkBA,SAAS,MAAgD;AACvD,UAAM,QAAQ,iBAAiB,KAAK,IAAI;AAExC,QAAI;AACF,YAAM,SAAS,CAAC,KAAc,SAAmC;AAC/D,cAAM,MAAM,IAAI,IAAI,IAAI;AACxB,eAAO,UAAU,KAAK,KAAK;AAAA,MAC7B;AACA,YAAM,SAAS,KAAK,OAAO,QAAQ,IAAI;AAEvC,aAAO,OAAO,OAAO,IAAI,SAAY;AAAA,IACvC,UAAE;AACA,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,IAAI,MAAuB,OAAuC;AAChE,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,MAAM,IAAI,SAAQ,IAAI;AAC5B,iBAAW,KAAK,IAAI;AAEpB,YAAM,WAAW,IAAI,SAAQ,KAAK;AAClC,iBAAW,UAAU,IAAI;AAEzB,YAAM,SAAS,IAAI,QAAQ,MAAM;AACjC,YAAM,OAAO,OAAO,UAAU,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,SAAS,GAAG;AACzE,iBAAW,MAAM,IAAI;AAErB,aAAO,SAAQ,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC;AAAA,IAClD,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AAAA;AAAA,EAGA,OAAO,WAAW,KAAc;AAC9B,UAAM,QAAQ,oBAAI,IAAY;AAC9B,QAAI,MAAe;AACnB,OAAG;AACD,aAAO,oBAAoB,GAAG,EAAE,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,CAAC;AAAA,IACzD,SAAU,MAAM,OAAO,eAAe,GAAG;AACzC,WAAO,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,CAAqB,MAAM,UAAU;AAAA,EACzF;AACF;AAvJO,IAAM,UAAN;AA0FL;AAAA,WAAM,SAAC,MAAuB,IAAmB;AAC/C,QAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,MAAI;AACF,UAAM,MAAM,IAAI,SAAQ,IAAI;AAC5B,eAAW,KAAK,IAAI;AAEpB,UAAM,OAAO,OAAO,UAAU,IAAI,KAAK,KAAK,IAAI,GAAG;AACnD,eAAW,MAAM,IAAI;AAErB,WAAO,SAAQ,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC;AAAA,EAClD,UAAE;AACA,cAAU,KAAK,CAAC;AAAA,EAClB;AACF;AAiDK,IAAM,QAAN,cAAoB,QAAQ;AAAA,EACjC,cAAc;AACZ,UAAM,IAAI,YAAY,OAAO,SAAS,OAAO,aAAa,GAAG,CAAC,CAAC;AAC/D,WAAO;AAAA,EACT;AAAA,EAEA,OAAuB;AACrB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,UAAN,cAAsB,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInC,YAAY,GAA2B;AACrC,QAAI,aAAa,aAAa;AAC5B,kBAAY,GAAG,QAAQ;AACvB,YAAM,CAAC;AACP;AAAA,IACF;AACA,UAAM,OAAO,OAAO,aAAa,CAAW;AAC5C,QAAI;AACF,YAAM,IAAI,YAAY,OAAO,YAAY,IAAI,CAAC,CAAC;AAAA,IACjD,UAAE;AACA,aAAO,MAAM,IAAI;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAyB;AACvB,UAAM,MAAM,KAAK,SAAS;AAC1B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW,IAAI;AAAA,MACf,UAAU,IAAI;AAAA,MACd,UAAU,IAAI;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,WAIE;AACA,WAAO;AAAA,MACL,WAAW,KAAK,UAAU,EAAE,UAAU,IAAI,OAAO,KAAK,UAAU,EAAE,SAAS;AAAA,MAC3E,UAAU,KAAK,SAAS,EAAE,UAAU,IAAI,OAAO,KAAK,SAAS,EAAE;AAAA,MAC/D,UAAU,KAAK,SAAS,EAAE,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,UAAU,EAAE,SAAS;AAAA,EACnC;AAAA,EAEA,YAAqB;AACnB,WAAO,QAAQ,KAAK,OAAO,WAAW,KAAK,GAAG,CAAC;AAAA,EACjD;AAAA,EACA,WAAoB;AAClB,WAAO,QAAQ,KAAK,OAAO,UAAU,KAAK,GAAG,CAAC;AAAA,EAChD;AAAA,EACA,WAAoB;AAClB,WAAO,QAAQ,KAAK,OAAO,UAAU,KAAK,GAAG,CAAC;AAAA,EAChD;AACF;AAEO,IAAM,YAAN,cAAwB,QAAQ;AAAA,EACrC,YAAY,KAAe;AACzB,QAAI,eAAe,aAAa;AAC9B,kBAAY,KAAK,UAAU;AAC3B,YAAM,GAAG;AACT,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,EAAE,OAAO,OAAO,IAAI,WAAW,GAAG;AAExC,YAAM,OAAO,UAAU,KAAK,OAAO,cAAc,OAAO,MAAM,CAAC;AAC/D,iBAAW,MAAM,IAAI;AAErB,eACM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAA2B,GAC/C,CAAC,KAAK,OAAO,GACb,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,GAC9B;AACA,aAAK,OAAO,IAAI,QAAQ,OAAO,CAAC,CAAC,CAAC;AAAA,MACpC;AAEA,WAAK,SAAS,KAAK;AACnB,YAAM,IAAI;AAAA,IACZ,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,QAAQ,EAAE;AAAA,EACxB;AAAA,EAEA,QAAQ,UAAuB,EAAE,OAAO,EAAE,GAAe;AACvD,WAAO,KAAK,KAAK,OAAO,EAAE;AAAA,EAC5B;AAAA,EAEA,SAAS;AAAA,IACP,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,QAAQ;AAAA,EACV,IAAI,CAAC,GAA0B;AAC7B,UAAM,UAAU,KAAK,QAAQ,EAAE,MAAM,CAAC;AACtC,UAAM,OAAO,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,QAAI,CAAC,qBAAqB,IAAI,IAAI,IAAI,EAAE,SAAS,KAAK,QAAQ;AAC5D,YAAM,IAAI,MAAM,0EAA0E;AAAA,IAC5F;AACA,QAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG;AAC1C,YAAM,IAAI,MAAM,0EAA0E;AAAA,IAC5F;AACA,WAAO,OAAO;AAAA,MACZ,QAAQ,OAAO,CAAC,GAAG,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAAA,IAC5E;AAAA,EACF;AAAA,EAEA,QAAQ,UAAuB,EAAE,OAAO,EAAE,GAA2B;AACnE,UAAM,MAAM,KAAK,KAAK,OAAO;AAC7B,WAAO,IAAI,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;AAAA,EACtE;AAAA,EAEA,KAAK,UAAuB,EAAE,OAAO,EAAE,GAAG,QAAQ,GAAmB;AACnE,UAAM,aAAuB,CAAC;AAC9B,QAAI,WAAW;AACf,UAAM,SAAmC,CAAC;AAE1C,aAAS,OAAO,MAA6B,CAAC,KAAK,OAAO,GAAG,OAAO,KAAK,IAAI,GAAG;AAC9E,YAAM,SAAS,KAAK,IAAI;AACxB,UAAI,OAAO,OAAO,GAAG;AACnB,mBAAW,KAAK,EAAE;AAAA,MACpB,OAAO;AACL,mBAAW;AACX,mBAAW,KAAK,OAAO,SAAS,CAAC;AAAA,MACnC;AACA,UAAI,QAAQ,SAAS,SAAS,QAAQ,OAAO;AAC3C,eAAO,KAAK,KAAK,IAAI,CAAC;AAAA,MACxB,OAAO;AACL,eAAO,KAAK,KAAK,IAAI,EAAE,KAAK,SAAS,QAAQ,CAAC,CAAC;AAAA,MACjD;AAAA,IACF;AACA,UAAM,QAAQ,WAAW,aAAa;AACtC,WAAO,EAAE,MAAM,YAAY,OAAO,OAAO;AAAA,EAC3C;AAAA,EAEA,SAAS,MAAuB;AAC9B,WAAO,QAAQ,KAAK,SAAS;AAAA,EAC/B;AAAA,EAEA,OAAO,KAAoB;AACzB,WAAO,QAAQ,KAAK,KAAK,IAAI,GAAG;AAAA,EAClC;AAAA,EAEA,MAAe;AACb,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,MAA2B;AACzB,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,MAAyB;AACvB,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,GAAG,CAAC;AAAA,EAC3C;AACF;AAEO,IAAM,QAAN,cAAoB,QAAQ;AAAA,EACjC,YAAY,KAAe;AACzB,QAAI,eAAe,aAAa;AAC9B,kBAAY,KAAK,MAAM;AACvB,YAAM,GAAG;AACT,aAAO;AAAA,IACT;AACA,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,EAAE,OAAO,IAAI,WAAW,GAAG;AACjC,YAAMA,QAAO,OAAO,IAAI,CAAC,UAAU,WAAW,IAAI,QAAQ,KAAK,GAAG,IAAI,CAAC;AACvE,YAAM,OAAO,MAAM,KAAK,OAAO,gBAAgB,SAAS,MAAM,OAAO,MAAM,CAAC;AAC5E,iBAAW,MAAM,IAAI;AAErB,eACM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAA2B,GAC/C,CAAC,KAAK,OAAO,GACb,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,GAC9B;AACA,aAAK,OAAOA,MAAK,CAAC,CAAC;AAAA,MACrB;AACA,YAAM,IAAI;AAAA,IACZ,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,OAAO,KAAoB;AACzB,WAAO,QAAQ,KAAK,KAAK,IAAI,GAAG;AAAA,EAClC;AAAA,EAEA,MAAe;AACb,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,MAA2B;AACzB,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,OAAgB;AACd,WAAO,QAAQ,KAAK,SAAS,KAAK,KAAK,KAAK,OAAO,CAAC;AAAA,EACtD;AACF;AAEO,IAAM,QAAN,cAAoB,QAAQ;AAAA,EACjC,YAAY,KAAe;AACzB,QAAI,eAAe,aAAa;AAC9B,kBAAY,KAAK,MAAM;AACvB,YAAM,GAAG;AACT,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,EAAE,OAAO,OAAO,IAAI,WAAW,GAAG;AACxC,YAAM,MAAM,OAAO,gBAAgB,SAAS,MAAM,OAAO,MAAM;AAC/D,iBAAW,KAAK,IAAI;AAEpB,aAAO,QAAQ,CAAC,GAAG,MAAM;AACvB,eAAO,gBAAgB,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG;AAAA,MACnD,CAAC;AAED,cAAQ,KAAK,GAAG,EAAE,SAAS,KAAK;AAEhC,YAAM,IAAI,YAAY,GAAG,CAAC;AAAA,IAC5B,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,OAAO,QAAQ,KAAK,GAAG;AAAA,EAChC;AAAA,EAEA,QAAQ,UAA6B,EAAE,OAAO,EAAE,GAAe;AAC7D,WAAO,KAAK,KAAK,OAAO,EAAE;AAAA,EAC5B;AAAA,EAEA,SAAS;AAAA,IACP,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,QAAQ;AAAA,EACV,IAAI,CAAC,GAA0B;AAC7B,UAAM,UAAU,KAAK,QAAQ,EAAE,MAAM,CAAC;AACtC,UAAM,OAAO,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,QAAI,CAAC,qBAAqB,IAAI,IAAI,IAAI,EAAE,SAAS,KAAK,QAAQ;AAC5D,YAAM,IAAI,MAAM,sEAAsE;AAAA,IACxF;AACA,QAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG;AAC1C,YAAM,IAAI,MAAM,sEAAsE;AAAA,IACxF;AACA,WAAO,OAAO;AAAA,MACZ,QAAQ,OAAO,CAAC,GAAG,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAAA,IAC5E;AAAA,EACF;AAAA,EAEA,QAAQ,UAA6B,EAAE,OAAO,EAAE,GAA2B;AACzE,UAAM,MAAM,KAAK,KAAK,OAAO;AAC7B,WAAO,IAAI,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;AAAA,EACtE;AAAA,EAEA,KAAK,UAA6B,EAAE,OAAO,EAAE,GAAG,QAAQ,GAAmB;AACzE,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,KAAK,MAAM;AAAA,MAClB,QAAQ,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM;AAChD,YAAI,QAAQ,SAAS,SAAS,QAAQ,OAAO;AAC3C,iBAAO,KAAK,IAAI,IAAI,CAAC;AAAA,QACvB,OAAO;AACL,iBAAO,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,QAAQ,CAAC;AAAA,QAChD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,YAAN,cAAwB,QAAQ;AAAA,EACrC,QAAQ,MAA0C;AAChD,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;AACtC,iBAAW,MAAM,IAAI;AACrB,aAAO,KAAK,KAAK;AAAA,IACnB,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AACF;AAEO,IAAM,UAAN,cAAsB,QAAQ;AAAA;AAAA,EAEnC,YAAY,GAA2B;AACrC,QAAI,aAAa,aAAa;AAC5B,kBAAY,GAAG,QAAQ;AACvB,YAAM,CAAC;AACP;AAAA,IACF;AAEA,UAAM,OAAO,OAAO,aAAa,CAAW;AAE5C,QAAI;AACF,YAAM,IAAI,YAAY,OAAO,WAAW,IAAI,CAAC,CAAC;AAAA,IAChD,UAAE;AACA,aAAO,MAAM,IAAI;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,WAAO,OAAO,aAAa,OAAO,QAAQ,KAAK,GAAG,CAAC;AAAA,EACrD;AAAA,EAEA,OAAyB;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,KAAK,SAAS;AAAA,IACvB;AAAA,EACF;AACF;AAEO,IAAM,eAAN,cAA2B,QAAQ;AAAA,EACxC,YAAY,MAAgB,CAAC,GAAG;AAC9B,QAAI,eAAe,aAAa;AAC9B,kBAAY,KAAK,aAAa;AAC9B,YAAM,GAAG;AACT,aAAO;AAAA,IACT;AACA,QAAI,QAAQ;AAEZ,QAAI;AACF,YAAM,EAAE,OAAO,OAAO,IAAI,WAAW,GAAG;AAExC,YAAM,MAAM,QAAQ,OAAO,UAAU,KAAK,UAAU,KAAK,GAAG,CAAC,CAAC;AAC9D,QAAE;AAEF,aAAO,QAAQ,CAAC,GAAG,MAAM;AACvB,cAAM,OAAO,QAAQ,MAAM,CAAC,IAAI;AAChC,YAAI,CAAC,MAAM;AACT,gBAAM,IAAI,MAAM,+DAA+D;AAAA,QACjF;AAEA,cAAM,MAAM,IAAI,QAAQ,IAAI;AAC5B,cAAM,OAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC;AACnC,YAAI;AACF,kBAAQ,KAAK,KAAK,IAAI;AAAA,QACxB,UAAE;AACA,oBAAU,CAAC;AAAA,QACb;AAAA,MACF,CAAC;AAED,YAAM,IAAI,YAAY,GAAG,CAAC;AAAA,IAC5B,UAAE;AACA,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,GAAG,MAAM,OAAO,SAAS,MAAgB;AACvC,UAAM,KAAK,WAAW,KAAK,OAAO,eAAe,KAAK,KAAK,OAAO,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AACvF,WAAO,GAAG,QAAQ;AAAA,EACpB;AAAA,EAEA,KAAK,MAAc,OAAuB;AACxC,UAAM,MAAM,IAAI,QAAQ,IAAI;AAC5B,UAAM,WAAW,QAAQ,IAAI,QAAQ,KAAK,CAAC;AAE3C,QAAI;AACF,cAAQ,MAAM,KAAK,QAAQ;AAAA,IAC7B,UAAE;AACA,gBAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEA,QAAkB;AAChB,WAAO,KAAK,GAAG,MAAM,IAAI;AAAA,EAC3B;AAAA,EAEA,QAAiB;AACf,WAAO,QAAQ,KAAK,OAAO,OAAO,KAAK,GAAG,CAAC;AAAA,EAC7C;AAAA,EAEA,OAAO,MAAgC;AACrC,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AACA,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EAEA,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,GAA0B;AAClD,UAAM,UAAU,KAAK,MAAM;AAC3B,WAAO,OAAO;AAAA,MACZ,CAAC,GAAG,MAAM,QAAQ,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM;AAC3C,eAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,UAAU,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAAA,MAChE,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,KAAK,UAA6B,EAAE,OAAO,EAAE,GAAG,QAAQ,GAAmB;AACzE,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,SAAS,CAAC,GAAG,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM;AACxD,UAAI,QAAQ,SAAS,SAAS,QAAQ,OAAO;AAC3C,eAAO,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,MAChC,OAAO;AACL,eAAO,KAAK,UAAU,MAAM,CAAC,CAAC,EAAE,KAAK,SAAS,QAAQ,CAAC;AAAA,MACzD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAcA,IAAe,gBAAf,cAA2D,QAAQ;AAAA,EACjE,YACE,KACA,MACA,WACA;AACA,QAAI,eAAe,aAAa;AAC9B,kBAAY,KAAK,IAAI;AACrB,YAAM,GAAG;AACT,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,EAAE,OAAO,OAAO,IAAI,WAAW,GAAG;AAExC,YAAM,MAAM,OAAO,gBAAgB,SAAS,IAAI,GAAG,OAAO,MAAM;AAChE,iBAAW,KAAK,IAAI;AAEpB,aAAO,QAAQ,UAAU,GAAG,CAAC;AAC7B,cAAQ,KAAK,GAAG,EAAE,SAAS,KAAK;AAEhC,YAAM,IAAI,YAAY,GAAG,CAAC;AAAA,IAC5B,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,OAAO,QAAQ,KAAK,GAAG;AAAA,EAChC;AAAA,EAEA,IAAI,MAA6B;AAC/B,WAAO,MAAM,IAAI,IAAI;AAAA,EACvB;AAAA,EAEA,OAAO,MAA6B;AAClC,WAAO,MAAM,OAAO,IAAI;AAAA,EAC1B;AAAA,EAEA,UAAU,MAAuB;AAC/B,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAAA,EAEA,gBAA2B;AACzB,UAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,QAAI;AACF,YAAM,OAAO,OAAO,UAAU,IAAI,QAAQ,OAAO,EAAE,KAAK,KAAK,GAAG;AAChE,iBAAW,MAAM,IAAI;AAErB,YAAM,MAAM,SAAS,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC;AACtD,iBAAW,KAAK,IAAI;AAEpB,YAAM,MAAM,IAAI,aAAa;AAC7B,aAAO,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAAA,IAClD,UAAE;AACA,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EAIA,UAAwB;AACtB,UAAM,MAAM,KAAK,aAAa;AAC9B,WAAO,KAAK,cAAc,EAAE,IAAI,CAAC,GAAG,QAAS,IAAI,OAAQ,IAAI,GAAG,CAAQ;AAAA,EAC1E;AAAA,EAEA,SAAS,EAAE,oBAAoB,MAAM,gBAAgB,MAAM,IAAI,CAAC,GAA0B;AACxF,UAAM,UAAU,KAAK,QAAQ;AAC7B,UAAM,OAAO,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,QAAI,CAAC,qBAAqB,IAAI,IAAI,IAAI,EAAE,SAAS,KAAK,QAAQ;AAC5D,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO;AAAA,MACZ,QAAQ,OAAO,CAAC,GAAG,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG;AAAA,IAC5E;AAAA,EACF;AAAA,EAEA,UAAkC;AAChC,UAAM,SAAS,KAAK,QAAQ;AAC5B,UAAM,QAAQ,KAAK,MAAM;AACzB,WAAO,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;AAAA,EAC1D;AAAA,EAEA,OAA4B;AAC1B,WAAO;AAAA,MACL,MAAM,KAAK,KAAK;AAAA,MAChB,OAAO,KAAK,MAAM;AAAA,MAClB,QAAQ,KAAK,QAAQ;AAAA,IACvB;AAAA,EACF;AACF;AA/0BA;AAi1BO,IAAM,YAAN,cAAuB,cAAuB;AAAA,EACnD,YAAY,KAA8B;AACxC,UAAM,KAAK,WAAW,wBAAS,WAAU;AAAA,EAC3C;AAAA,EAUA,WAAW,KAA6B;AACtC,WAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,YAAqB;AACnB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,UAAM,MAAM,KAAK,WAAW,CAAC;AAC7B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAA2B;AACzB,WAAO,IAAI;AAAA,MACT,OAAO,OAAO;AAAA,QACZ,OAAO,SAAS,KAAK,GAAG,IAAI;AAAA,QAC5B,OAAO,SAAS,KAAK,GAAG,IAAI,IAAI,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAA8B;AAC5B,UAAM,MAAM,KAAK,aAAa;AAC9B,WAAO,KAAK,cAAc,EAAE,IAAI,CAAC,GAAG,QAAS,IAAI,OAAO,QAAQ,IAAI,GAAG,CAAC,CAAE;AAAA,EAC5E;AACF;AAzCO,IAAM,WAAN;AAKE;AAAP,aALW,UAKJ,YAAa,CAAC,QAAc;AACjC,QAAM,OAAO,OAAO,SAAS,GAAG;AAChC,QAAM,YAAY,OAAO,SAAS,OAAO,UAAU,KAAK;AACxD,SAAO,CAAC,GAAmB,MAAc;AACvC,WAAO,SAAS,OAAO,IAAI,GAAG,MAAM,OAAO,YAAY,QAAQ,CAAC,GAAG,KAAK;AAAA,EAC1E;AACF;AA51BF,IAAAC;AA43BO,IAAM,YAAN,cAAuB,cAAsB;AAAA,EAClD,YAAY,KAA6B;AACvC,UAAM,KAAK,WAAW,wBAASA,YAAU;AAAA,EAC3C;AAAA,EAWA,UAAU,KAA4B;AACpC,WAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,WAAmB;AACjB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,UAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAA2B;AACzB,WAAO,IAAI;AAAA,MACT,OAAO,OAAO;AAAA,QACZ,OAAO,SAAS,KAAK,GAAG,IAAI;AAAA,QAC5B,OAAO,SAAS,KAAK,GAAG,IAAI,IAAI,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACF;AArCO,IAAM,WAAN;AAKEA,cAAA;AAAP,aALW,UAKJA,aAAa,CAAC,QAAc;AACjC,QAAM,OAAO,OAAO,SAAS,GAAG;AAChC,QAAM,YAAY,OAAO,SAAS,OAAO,UAAU,KAAK;AAExD,SAAO,CAAC,GAAkB,MAAc;AACtC,WAAO,SAAS,OAAO,IAAI,GAAG,MAAM,OAAO,YAAY,KAAK,MAAM,OAAO,CAAC,CAAC,GAAG,KAAK;AAAA,EACrF;AACF;AAx4BF,IAAAA;AAm6BO,IAAM,WAAN,cAAsB,cAAsB;AAAA,EACjD,YAAY,KAA6B;AACvC,UAAM,KAAK,UAAU,uBAAQA,YAAU;AAAA,EACzC;AAAA,EAWA,UAAU,KAA4B;AACpC,WAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,WAAmB;AACjB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,UAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAA6B;AAC3B,WAAO,IAAI;AAAA,MACT,OAAO,QAAQ,SAAS,OAAO,MAAM,KAAK,GAAG,IAAI,GAAG,OAAO,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM;AAAA,IAC9F;AAAA,EACF;AACF;AAlCO,IAAM,UAAN;AAKEA,cAAA;AAAP,aALW,SAKJA,aAAa,CAAC,QAAc;AACjC,QAAM,OAAO,OAAO,MAAM,GAAG;AAC7B,QAAM,WAAW,OAAO,SAAS,OAAO,WAAW,QAAQ;AAE3D,SAAO,CAAC,GAAkB,MAAc;AACtC,WAAO,SAAS,OAAO,IAAI,GAAG,MAAM,OAAO,WAAW,GAAG,QAAQ;AAAA,EACnE;AACF;AA/6BF,IAAAA;AAu8BO,IAAM,YAAN,cAAuB,cAAuB;AAAA,EACnD,YAAY,KAA8B;AACxC,UAAM,KAAK,WAAW,wBAASA,YAAU;AAAA,EAC3C;AAAA,EAYA,WAAW,KAA6B;AACtC,WAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,YAAqB;AACnB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,UAAM,MAAM,KAAK,WAAW,CAAC;AAC7B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAA6B;AAC3B,WAAO,IAAI;AAAA,MACT,OAAO,QAAQ;AAAA,QACb,OAAO,SAAS,KAAK,GAAG,IAAI;AAAA,QAC5B,OAAO,SAAS,KAAK,GAAG,IAAI,IAAI,IAAI,KAAK;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAA8B;AAC5B,UAAM,MAAM,KAAK,aAAa;AAC9B,WAAO,KAAK,cAAc,EAAE;AAAA,MAAI,CAAC,GAAG,QAClC,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,EAAE;AAAA,IACtD;AAAA,EACF;AACF;AA7CO,IAAM,WAAN;AAKEA,cAAA;AAAP,aALW,UAKJA,aAAa,CAAC,QAAc;AACjC,QAAM,OAAO,OAAO,SAAS,GAAG;AAChC,QAAM,WAAW,OAAO,SAAS,OAAO,WAAW,QAAQ;AAE3D,SAAO,CAAC,GAAmB,MAAc;AACvC,WAAO,SAAS,OAAO,KAAK,IAAI,IAAI,MAAM,OAAO,WAAW,EAAE,IAAI,QAAQ;AAC1E,WAAO,SAAS,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,OAAO,WAAW,EAAE,IAAI,QAAQ;AAAA,EAChF;AACF;AAp9BF,IAAAA;AAs/BO,IAAM,cAAN,cAAyB,cAAsB;AAAA,EACpD,YAAY,KAA6B;AACvC,UAAM,KAAK,aAAa,0BAAWA,YAAU;AAAA,EAC/C;AAAA,EAYA,UAAU,KAA4B;AACpC,WAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,WAAmB;AACjB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,UAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAA4B;AAC1B,WAAO,IAAI;AAAA,MACT,OAAO,QAAQ;AAAA,QACb,OAAO,YAAY,KAAK,GAAG,IAAI;AAAA,QAC/B,OAAO,YAAY,KAAK,GAAG,IAAI,IAAI,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAA6B;AAC3B,WAAO,KAAK,cAAc,EAAE;AAAA,MAAI,CAAC,GAAG,QAClC,IAAI,OAAO,OAAO,aAAa,OAAO,QAAQ,OAAO,YAAY,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,IAClF;AAAA,EACF;AACF;AA5CO,IAAM,aAAN;AAKEA,cAAA;AAAP,aALW,YAKJA,aAAa,CAAC,QAAc;AACjC,SAAO,CAAC,GAAkB,MAAc;AACtC,QAAI,MAAM,MAAM;AACd,aAAO,gBAAgB,KAAK,GAAG,KAAK,SAAS,GAAG;AAAA,IAClD,OAAO;AACL,aAAO,gBAAgB,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG;AAAA,IACnD;AAAA,EACF;AACF;AAngCF,IAAAA;AAoiCO,IAAM,QAAN,cAAmB,cAAsB;AAAA,EAC9C,YAAY,KAA6B;AACvC,UAAM,KAAK,OAAO,oBAAKA,YAAU;AAAA,EACnC;AAAA,EAUA,UAAU,KAA4B;AACpC,WAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,EAClC;AAAA,EAEA,WAAmB;AACjB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,UAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAA2B;AACzB,WAAO,IAAI;AAAA,MACT,OAAO,OAAO,SAAS,OAAO,KAAK,KAAK,GAAG,GAAG,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,MAAM;AAAA,IACnF;AAAA,EACF;AACF;AAjCO,IAAM,OAAN;AAKEA,cAAA;AAAP,aALW,MAKJA,aAAa,CAAC,QAAc;AACjC,QAAM,OAAO,OAAO,KAAK,GAAG;AAE5B,SAAO,CAAC,GAAW,MAAc;AAC/B,WAAO,SAAS,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI;AAAA,EAC3C;AACF;AAiCF,SAAS,WAAW,OAA2B;AAC7C,MAAI,aAAa,KAAK,GAAG;AACvB,WAAO;AAAA,EACT,WAAW,MAAM,QAAQ,KAAK,KAAK,YAAY,OAAO,KAAK,GAAG;AAC5D,WAAO,EAAE,OAAO,MAAM,QAAQ,MAAM;AAAA,EACtC,WAAW,SAAS,OAAO,UAAU,YAAY,CAAC,UAAU,KAAK,GAAG;AAClE,WAAO;AAAA,MACL,OAAO,OAAO,KAAK,KAAK;AAAA,MACxB,QAAQ,OAAO,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,SAAO,EAAE,OAAO,MAAM,QAAQ,CAAC,KAAK,EAAE;AACxC;AAEO,SAAS,gBAAgB,MAAmC;AACjE,QAAM,cAAiD;AAAA,IACrD,CAAC,SAAS,IAAI,GAAG;AAAA,IACjB,CAAC,SAAS,MAAM,GAAG;AAAA,IACnB,CAAC,SAAS,QAAQ,GAAG;AAAA,IACrB,CAAC,SAAS,OAAO,GAAG;AAAA,IACpB,CAAC,SAAS,WAAW,GAAG;AAAA,IACxB,CAAC,SAAS,IAAI,GAAG;AAAA,IACjB,CAAC,SAAS,OAAO,GAAG;AAAA,IACpB,CAAC,SAAS,OAAO,GAAG;AAAA,IACpB,CAAC,SAAS,MAAM,GAAG;AAAA,IACnB,CAAC,SAAS,OAAO,GAAG;AAAA,IACpB,CAAC,SAAS,OAAO,GAAG;AAAA,IACpB,CAAC,SAAS,MAAM,GAAG;AAAA,IACnB,CAAC,SAAS,OAAO,GAAG;AAAA,IACpB,CAAC,SAAS,SAAS,GAAG;AAAA,IACtB,CAAC,SAAS,IAAI,GAAG;AAAA,IACjB,CAAC,SAAS,GAAG,GAAG;AAAA,IAChB,CAAC,SAAS,QAAQ,GAAG;AAAA,EACvB;AACA,MAAI,QAAQ,aAAa;AACvB,WAAO,YAAY,IAAI;AAAA,EACzB;AACA,SAAO;AACT;AAYO,SAAS,UAAU,OAA8B;AACtD,SAAO,iBAAiB;AAC1B;AAKO,IAAI;AAoBJ,SAAS,wBAAuB;AACrC,SAAO;AAAA,IACL,SAAS,aAAa,KAAK,OAAO,SAAS,OAAO,YAAY,GAAG,CAAC;AAAA,IAClE,gBAAgB,QAAQ,KAAK,OAAO,SAAS,OAAO,mBAAmB,GAAG,CAAC;AAAA,IAC3E,eAAe,QAAQ,KAAK,OAAO,SAAS,OAAO,kBAAkB,GAAG,CAAC;AAAA,IACzE,cAAc,QAAQ,KAAK,OAAO,SAAS,OAAO,iBAAiB,GAAG,CAAC;AAAA,IACvE,UAAU,aAAa,KAAK,OAAO,SAAS,OAAO,aAAa,GAAG,CAAC;AAAA,IACpE,OAAO,SAAS,KAAK,OAAO,SAAS,OAAO,eAAe,GAAG,CAAC;AAAA,IAC/D,WAAW,aAAa,KAAK,OAAO,SAAS,OAAO,cAAc,GAAG,CAAC;AAAA,IACtE,IAAI,SAAS,KAAK,OAAO,SAAS,OAAO,mBAAmB,GAAG,CAAC;AAAA,IAChE,aAAa,QAAQ,KAAK,OAAO,SAAS,OAAO,gBAAgB,GAAG,CAAC;AAAA,IACrE,UAAU,QAAQ,KAAK,OAAO,SAAS,OAAO,aAAa,GAAG,CAAC;AAAA,IAC/D,MAAM,MAAM,KAAK,OAAO,SAAS,OAAO,aAAa,GAAG,CAAC;AAAA,IACzD,MAAM,SAAS,KAAK,OAAO,SAAS,OAAO,cAAc,GAAG,CAAC;AAAA,IAC7D,cAAc,QAAQ,KAAK,OAAO,SAAS,OAAO,iBAAiB,GAAG,CAAC;AAAA,EACzE;AACF;;;AC9oCA,IAAI,cAAc;AAClB,IAAI;AAEJ,IAAM,kBAAkB,SAAU,KAAc;AAC9C,MAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,IAAI,SAAS,QAAQ;AAC5C;AAAA,EACF;AACA,MAAI,aAAa;AACf,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,QAAM,cAAc;AACpB,SAAO,iBAAiB,WAAW;AACnC,OAAK,YAAY,KAAK,MAAM;AAC5B,gBAAc;AAChB;AAEA,IAAI,SAAS;AACX,UAAQ,gBAAgB,EAAE,WAAW,GAAG,WAAW,eAAe;AAClE,EAAC,WAAmB,iBAAiB,yBAClC;AACL,OAAO;AACL,aAAW,YAAY,CAAC,OAA8B,gBAAgB,GAAG,IAAI;AAC/E;AAOA,IAAI;AAEJ,SAAS,SAAS,KAAoB;AACpC,UAAQ,IAAI,MAAM;AAAA,IAChB,KAAK,WAAW;AACd,YAAM,MAAM;AACZ,YAAM,SAAS,IAAI,KAAK;AAExB,YAAM,QAAQ,CAAC,MAAyB,kBACtC,6BAAM,MAAM,YAAY,IAAI,KAAK,MAAM,MAAM,aAAa;AAC5D,UAAI;AACF,gBAAQ,OAAO,MAAM;AAAA,UACnB,KAAK,cAAc;AACjB,kBAAMC,OAAM;AACZ,kBAAM,OAAO,OAAO,GAAG,WAAWA,KAAI,KAAK,MAAM,CAAC,CAAC,EAAE;AACrD,kBAAM;AAAA,cACJ,KAAK,WAAW,IAAc;AAAA,cAC9B,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UACA,KAAK,SAAS;AACZ,kBAAMA,OAAM;AACZ,kBAAM;AAAA,cACJ,KAAK,WAAW,OAAO,GAAG,MAAMA,KAAI,KAAK,IAAI,CAAW;AAAA,cACxD,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UACA,KAAK,YAAY;AACf,kBAAMA,OAAM;AACZ,kBAAM,UAAUA,KAAI;AACpB,kBAAM,MAAM;AAAA,cACV,KAAK,OAAO,GAAG,SAAS,QAAQ,MAAM;AAAA,gBACpC,UAAU;AAAA,gBACV,OAAO,QAAQ;AAAA,cACjB,CAAC;AAAA,cACD,aAAa;AAAA,YACf;AACA,kBAAM,KAAuB,CAAC,IAAI,IAAI,MAAM,CAAC;AAC7C;AAAA,UACF;AAAA,UACA,KAAK,SAAS;AACZ,kBAAMA,OAAM;AACZ,kBAAM;AAAA,cACJ,KAAK,OAAO,GAAG,MAAMA,KAAI,KAAK,IAAI;AAAA,cAClC,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAChB,kBAAMA,OAAM;AACZ,kBAAM,UAAUA,KAAI;AAEpB,kBAAM,OAAO,WAAW,KAAK,OAAO,OAAO,QAAQ,IAAI,CAAC;AACxD,kBAAM;AAAA,cACJ,KAAK,OAAO,GAAG,UAAU,QAAQ,MAAM,MAAM,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,cACrE,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UACA,KAAK,UAAU;AACb,kBAAMA,OAAM;AACZ,kBAAM;AAAA,cACJ,KAAK,OAAO,GAAG,OAAOA,KAAI,KAAK,IAAI;AAAA,cACnC,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UAEA,KAAK,cAAc;AACjB,kBAAM,KAAK,aAAa;AACxB,qBAAS,IAAI,IAAI,CAAC,CAAC;AAEnB,kBAAM;AAAA,cACJ,aAAa;AAAA,cACb,KAAK;AAAA,YACP,CAAC;AACD;AAAA,UACF;AAAA,UAEA,KAAK,eAAe;AAClB,kBAAMA,OAAM;AACZ,kBAAM,OAAO,SAAS,IAAIA,KAAI,IAAI,EAAG;AAErC,kBAAM,EAAE,aAAa,OAAO,KAAK,KAAK,CAAC;AACvC;AAAA,UACF;AAAA,UAEA,KAAK,gBAAgB;AACnB,kBAAMA,OAAM;AACZ,kBAAMA,KAAI,IAAI;AAEd,kBAAM,EAAE,aAAa,OAAO,KAAK,KAAK,CAAC;AACvC;AAAA,UACF;AAAA,UAEA,KAAK,kBAAkB;AACrB,kBAAMA,OAAM;AACZ,oBAAQA,KAAI,KAAK,IAAIA,KAAI,KAAK,IAAI,IAAI,GAAG;AAEzC,kBAAM,EAAE,aAAa,OAAO,KAAK,KAAK,CAAC;AACvC;AAAA,UACF;AAAA,UAEA,KAAK,YAAY;AACf,kBAAMA,OAAM;AACZ,kBAAM,OAAOA,KAAI;AAEjB,kBAAM,UAAU,KAAK;AACrB,kBAAM,OAAO,EAAE,GAAG,EAAE;AAEpB,gBAAI;AACF,oBAAM,UAAU,SAAS,KAAK,MAAM,KAAK,OAAO;AAChD,yBAAW,SAAS,IAAI;AAExB,oBAAM,SAAS,QAAQ,IAAI,QAAQ;AACnC,oBAAM,UAAU,QAAQ,IAAI,CAAC;AAE7B,mBAAK,SAAS,MAAM;AAEpB,oBAAM,IAAI,QAAQ;AAClB,oBAAM,SAAgB,CAAC;AAEvB,uBAAS,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG;AAC9B,sBAAM,MAAM,QAAQ,IAAI,CAAC;AACzB,sBAAM,OAAQ,IAAI,MAAM,GAAG,CAAC,EAAiB,SAAS;AACtD,sBAAMC,QAAO,IAAI,IAAI,CAAC;AAEtB,oBAAI,SAAS,YAAY,SAAS,UAAU;AAC1C,wBAAMD,OAAOC,MAAiB,SAAS;AACvC,yBAAO,KAAK,EAAE,MAAM,MAAMD,KAAI,CAAC;AAAA,gBACjC,OAAO;AACL,uBAAK,SAASC,KAAI;AAClB,wBAAM,UAAU;AAAA,oBACd,KAAK;AAAA,sBACH,KAAKA,MAAK;AAAA,sBACV,MAAMA,MAAK,KAAK;AAAA,sBAChB,SAAS,QAAQ,WAAWA,KAAI;AAAA,oBAClC;AAAA,oBACA,aAAa;AAAA,kBACf;AACA,yBAAO,KAAK,EAAE,MAAM,MAAM,QAAQ,CAAC;AAAA,gBACrC;AAAA,cACF;AAEA,oBAAM,gBAAgB;AAAA,gBACpB,aAAa;AAAA,gBACb,KAAK;AAAA,kBACH,KAAK,OAAO;AAAA,kBACZ,MAAM,OAAO,KAAK;AAAA,kBAClB,SAAS,QAAQ,WAAW,MAAM;AAAA,gBACpC;AAAA,cACF;AAEA,oBAAM;AAAA,gBACJ,aAAa;AAAA,gBACb,KAAK;AAAA,kBACH,QAAQ;AAAA,kBACR;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH,UAAE;AACA,wBAAU,KAAK,CAAC;AAAA,YAClB;AACA;AAAA,UACF;AAAA,UAEA,KAAK,SAAS;AACZ,kBAAMD,OAAM;AAEZ,kBAAM,SAAS,MAAMA,KAAI,KAAK,MAAMA,KAAI,KAAK,OAAO;AACpD,iBAAKA,KAAI,KAAK,SAAS,MAAM;AAE7B,kBAAM;AAAA,cACJ,KAAK;AAAA,gBACH,MAAM,OAAO,KAAK;AAAA,gBAClB,KAAK,OAAO;AAAA,gBACZ,SAAS,QAAQ,WAAW,MAAM;AAAA,cACpC;AAAA,cACA,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UAEA,KAAK,YAAY;AACf,kBAAMA,OAAM;AACZ,kBAAM,SAAS,MAAMA,KAAI,KAAK,MAAMA,KAAI,KAAK,OAAO;AAEpD,oBAAQ,MAAM;AAEd,kBAAM,YAAY,MAAM;AACtB,oBAAM,IAAI,MAAM,gCAAgC,OAAO,KAAK,QAAQA,KAAI,KAAK,aAAa;AAAA,YAC5F;AAEA,gBAAI;AACF,kBAAI,MAAmB;AACvB,sBAAQA,KAAI,KAAK,YAAY;AAAA,gBAC3B,KAAK;AACH;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,KAAK,GAAG;AAAA,oBACrB,KAAK;AACH,4BAAO,OAAoB,UAAU;AACrC;AAAA,oBACF;AACE,gCAAU;AAAA,kBACd;AACA;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,KAAK,GAAG;AAAA,oBACrB,KAAK;AACH,4BAAO,OAAoB,QAAQ;AACnC,0BAAI,IAAI,KAAK,CAAC,MAAM,MAAM,IAAI,GAAG;AAC/B,kCAAU;AAAA,sBACZ;AACA;AAAA,oBACF;AACE,gCAAU;AAAA,kBACd;AACA;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,KAAK,GAAG;AAAA,oBACrB,KAAK;AACH,4BAAO,OAAoB,UAAU;AACrC,4BAAM,OAAO,GAAG;AAChB;AAAA,oBACF,KAAK;AACH,4BAAO,OAAoB,SAAS;AACpC;AAAA,oBACF,KAAK;AACH,4BAAO,OAAmB,SAAS;AACnC;AAAA,oBACF;AACE,gCAAU;AAAA,kBACd;AACA;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,KAAK,GAAG;AAAA,oBACrB,KAAK;AACH,4BAAO,OAAoB,QAAQ;AACnC,4BAAM,IAAI,IAAI,CAAC,MAAM,MAAM,OAAO,UAAU,IAAI,OAAO,CAAC,CAAC;AACzD;AAAA,oBACF,KAAK;AACH,4BAAO,OAAoB,QAAQ;AACnC,0BAAI,IAAI,KAAK,CAAC,MAAM,MAAM,IAAI,GAAG;AAC/B,kCAAU;AAAA,sBACZ;AACA;AAAA,oBACF,KAAK;AACH,4BAAO,OAAmB,QAAQ;AAClC,0BAAI,IAAI,KAAK,CAAC,MAAM,MAAM,IAAI,GAAG;AAC/B,kCAAU;AAAA,sBACZ;AACA;AAAA,oBACF;AACE,gCAAU;AAAA,kBACd;AACA;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,KAAK,GAAG;AAAA,oBACrB,KAAK;AACH,4BAAO,OAAsB,SAAS;AACtC;AAAA,oBACF;AACE,gCAAU;AAAA,kBACd;AACA;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,KAAK,GAAG;AAAA,oBACrB,KAAK;AACH,4BAAO,OAAsB,QAAQ;AACrC,0BAAI,IAAI,KAAK,CAAC,MAAM,MAAM,IAAI,GAAG;AAC/B,kCAAU;AAAA,sBACZ;AACA;AAAA,oBACF;AACE,gCAAU;AAAA,kBACd;AACA;AAAA,gBACF;AACE,wBAAM,IAAI,MAAM,wCAAwC;AAAA,cAC5D;AAEA,oBAAM;AAAA,gBACJ,KAAK;AAAA,gBACL,aAAa;AAAA,cACf,CAAC;AACD;AAAA,YACF,UAAE;AACA,wBAAU,CAAC;AAAA,YACb;AAAA,UACF;AAAA,UAEA,KAAK,cAAc;AACjB,kBAAMA,OAAM;AAEZ,kBAAM,UAAU,WAAWA,KAAI,KAAK,KAAKA,KAAI,KAAK,OAAO;AACzD,iBAAKA,KAAI,KAAK,SAAS,QAAQ,IAAI,GAAG;AAEtC,kBAAM,OAAO;AACb;AAAA,UACF;AAAA,UAEA,KAAK,qBAAqB;AACxB,kBAAMA,OAAM;AACZ,kBAAM,OAAOA,KAAI;AACjB,kBAAM,MAAM,KAAK,UAAU,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI;AAEhE,kBAAM,UAAU,kBAAkB,KAAK,KAAK,MAAM,KAAK,IAAI;AAC3D,gBAAI,iBAAiB,OAAO,GAAG;AAE7B,mBAAK,KAAK,SAAU,QAAQ,IAAI,GAAG;AAAA,YACrC;AAEA,kBAAM,OAAO;AACb;AAAA,UACF;AAAA,UAEA,KAAK,sBAAsB;AACzB,kBAAMA,OAAM;AACZ,kBAAM,MAAM,OAAO,kBAAkBA,KAAI,KAAK,GAAG,EAAE,GAAGA,KAAI,KAAK,IAAI;AACnE,kBAAM;AAAA,cACJ,aAAa;AAAA,cACb,KAAK;AAAA,YACP,CAAC;AACD;AAAA,UACF;AAAA,UAEA,KAAK,kBAAkB;AACrB,kBAAM;AAAA,iBACD,OAAO,KAAK;AAAA,yBACJ,QAAQ;AAAA,wBACT,OAAO,KAAK,QAAQ,SAAS;AAAA,cACvC;AAEF,kBAAM;AAAA,cACJ,KAAK;AAAA,cACL,aAAa;AAAA,YACf,CAAC;AACD;AAAA,UACF;AAAA,UACA;AACE,kBAAM,IAAI,MAAM,oBAAoB,OAAO,OAAO,GAAG;AAAA,QACzD;AAAA,MACF,SAAS,IAAP;AACA,cAAM,IAAI;AACV,cAAM;AAAA,UACJ,aAAa;AAAA,UACb,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,SAAS,OAAO,EAAE,MAAM;AAAA,QAC1D,CAAC;AAOD,YAAI,aAAa,wBAAwB;AACvC,iBAAO,kBAAkB,EAAE,IAAI;AAC/B,2BAAiB;AAAA,QACnB;AAAA,MACF;AACA;AAAA,IACF;AAAA,IACA;AACE,YAAM,IAAI,MAAM,oBAAoB,IAAI,OAAO,GAAG;AAAA,EACtD;AACF;AAEA,SAAS,WAAW,KAAqB;AACvC,QAAM,SAAS;AAAA,IACb,IAAI,IAAI;AAAA,IACR,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,UAAU,IAAI;AAAA,IACd,UAAU,CAAC;AAAA,EACb;AACA,MAAI,IAAI,UAAU;AAChB,WAAO,WAAW,OAAO,QAAQ,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,WAAW,IAAI,CAAC;AAAA,EACnF;AACA,SAAO;AACT;AAEA,SAAS,oBAAoBE,MAAa,UAAyB,CAAC,GAAgB;AAClF,QAAM,UAAU,IAAI,eAAe;AACnC,UAAQ,KAAK,OAAOA,MAAK,KAAK;AAC9B,UAAQ,eAAe;AAEvB,MAAI;AACF,YAAQ,QAAQ,CAAC,WAAW;AAC1B,YAAM,cAAc,OAAO,MAAM,IAAI;AACrC,cAAQ,iBAAiB,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAAA,IACzD,CAAC;AAAA,EACH,QAAE;AACA,UAAM,eAAe;AACrB,YAAQ,MAAM,YAAY;AAC1B,WAAO,EAAE,QAAQ,KAAK,UAAU,aAAa;AAAA,EAC/C;AAEA,MAAI;AACF,YAAQ,KAAK,IAAI;AACjB,UAAM,SAAS,UACV,KAAK,MAAM,OAAO,QAAQ,MAAM,CAAC,EAAuC,KAAK,aAC9E,QAAQ;AAEZ,QAAI,UAAU,OAAO,SAAS,KAAK;AACjC,aAAO,EAAE,QAAgB,UAAU,QAAQ,SAAwB;AAAA,IACrE,OAAO;AACL,YAAM,eAAe,IAAI,YAAY,EAAE,OAAO,QAAQ,QAAuB;AAC7E,cAAQ,MAAM,kBAAkBA,UAAS,cAAc;AACvD,aAAO,EAAE,QAAgB,UAAU,aAAa;AAAA,IAClD;AAAA,EACF,QAAE;AACA,WAAO,EAAE,QAAQ,KAAK,UAAU,qCAAqC;AAAA,EACvE;AACF;AAEA,SAAS,WAAW,MAAgB,SAA2C;AAC7E,QAAM,SAAS,YAAY,WAAW,UAAU,gBAAgB,SAAS,OAAO,CAAC;AACjF,QAAM,MAAM,IAAI;AAAA,IACd;AAAA,MAAgB;AAAA,MAAM;AAAA,MAAkB,CAAC,MACvC,QAAQ,KAAK,EAAE,IAAI,GAAG;AAAA,IACxB;AAAA,EACF;AACA,SAAO;AAAA,IACL,KAAK;AAAA,MACH,MAAM,IAAI,KAAK;AAAA,MACf,KAAK,IAAI;AAAA,MACT,SAAS,QAAQ,WAAW,GAAG;AAAA,IACjC;AAAA,IACA,aAAa;AAAA,EACf;AACF;AAEA,SAAS,kBACP,KACA,MACA,MACmB;AACnB,MAAI,EAAE,QAAQ,MAAM;AAClB,UAAM,IAAI,eAAe,GAAG,qBAAqB;AAAA,EACnD;AAEA,QAAM,KAAK,IAAI,IAAwB;AACvC,MAAI,OAAO,OAAO,YAAY;AAC5B,UAAM,MAAM,sCAAsC;AAAA,EACpD;AAEA,QAAM,MAAO,GAAgB;AAAA,IAC3B;AAAA,IACA,KAAK,IAAI,CAAC,QAAQ;AAChB,UAAI,IAAI,gBAAgB,OAAO;AAC7B,eAAO,QAAQ,KAAK,IAAI,IAAI,GAAG;AAAA,MACjC;AACA,aAAO;AAAA,QAAgB,IAAI;AAAA,QAAK;AAAA,QAAkB,CAAC,MACjD,QAAQ,KAAK,EAAE,IAAI,GAAG;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,MAAM,gBAAgB,KAAK,WAAW,CAACC,SAAiB;AAC5D,WAAO;AAAA,MACL,KAAK,EAAE,MAAMA,KAAI,KAAK,GAAG,KAAKA,KAAI,KAAK,SAAS,QAAQ,WAAWA,IAAG,EAAE;AAAA,MACxE,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AAED,SAAO,EAAE,KAAK,KAAK,aAAa,MAAM;AACxC;AAEA,SAAS,SAAS,MAAc,UAAwB,CAAC,GAAU;AAlhBnE;AAmhBE,QAAM,OAAO,EAAE,GAAG,EAAE;AACpB,MAAI;AACF,UAAM,WAAmC,OAAO;AAAA,MAC9C;AAAA,QACE,KAAK,KAAK;AAAA,QACV,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QAAgB;AAAA,QAAS;AAAA,QAAkB,CAAC,MAC1C,QAAQ,KAAK,EAAE,IAAI,GAAG;AAAA,MACxB;AAAA,IACF;AAEA,UAAM,SAAS,IAAI,aAAa,SAAS,GAAG;AAC5C,eAAW,QAAQ,IAAI;AACvB,QAAI,OAAO,KAAK,MAAM,eAAe;AACnC,YAAM,IAAI,MAAM,8DAA8D;AAAA,IAChF;AAEA,UAAM,OAAO,KAAK,KAAK;AACvB,UAAM,OAAO,KAAK,MAAM;AAExB,UAAM,KAAK,cAAc,gBAAgB,KAAK,OAAO;AACrD,eAAW,IAAI,IAAI;AAEnB,UAAM,UAAU,IAAI,WAAW,IAAI;AACnC,eAAW,SAAS,IAAI;AAExB,UAAM,OAAO,OAAO;AAAA,MAClB,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,oBAAoB,OAAO;AAAA,MACpC,SAAS,iBAAiB,OAAO;AAAA,MACjC,SAAS,gBAAgB,OAAO;AAAA,MAChC,SAAS,eAAe,OAAO;AAAA,IACjC;AACA,eAAW,MAAM,IAAI;AAErB,UAAM,UAAU,MAAM,KAAK,SAAS,MAAM,MAAM,CAAC;AACjD,eAAW,SAAS,IAAI;AAExB,QAAI,SAAS,qBAAqB,SAAS,kBAAkB;AAC3D,YAAM,SAAS,QAAQ,IAAI,QAAQ;AACnC,YAAM,QAAS,OAAO,QAAQ,EAAgB;AAAA,QAC5C,CAAC,QAAQ,IAAI,IAAI,MAAM,EAAE,SAAS,MAAM;AAAA,MAC1C;AACA,UAAI,OAAO;AACT,cAAM,IAAI;AAAA,YACR,WAAM,MAAM,QAAQ,SAAS,MAA7B,mBAAgC,eAAc;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,UAAE;AACA,cAAU,KAAK,CAAC;AAAA,EAClB;AACF;AAEA,SAAS,MAAM,MAAc,UAAwB,CAAC,GAAY;AAjlBlE;AAklBE,QAAM,UAAU,SAAS,MAAM,OAAO;AACtC,SAAO,YAAY,QAAQ,GAAG;AAE9B,MAAI;AAGF,UAAM,SAAS,QAAQ,IAAI,QAAQ;AACnC,aAAS,IAAI,GAAG,KAAK,OAAO,QAAQ,KAAK;AACvC,YAAM,MAAM,OAAO,IAAI,CAAC;AACxB,YAAM,aAAa,IAAI,IAAI,MAAM,EAAE,SAAS;AAC5C,cAAQ,YAAY;AAAA,QAClB,KAAK;AACH,uCAAM,YAAY,EAAE,MAAM,eAAe,MAAM,IAAI,IAAI,MAAM,EAAE,SAAS,EAAE;AAC1E;AAAA,QACF,KAAK;AACH,uCAAM,YAAY,EAAE,MAAM,gBAAgB,MAAM,IAAI,IAAI,MAAM,EAAE,SAAS,EAAE;AAC3E;AAAA,QACF,KAAK;AACH,uCAAM,YAAY;AAAA,YAChB,MAAM;AAAA,YACN,QAAM,SAAI,MAAM,QAAQ,SAAS,MAA3B,mBAA8B,eAAc;AAAA,UACpD;AACA;AAAA,QACF,KAAK;AACH,uCAAM,YAAY;AAAA,YAChB,MAAM;AAAA,YACN,MAAM;AAAA,IAAsB,SAAI,MAAM,QAAQ,SAAS,MAA3B,mBAA8B,eAAc;AAAA,UAC1E;AACA;AAAA,QACF;AACE,uCAAM,YAAY,EAAE,MAAM,gBAAgB,MAAM,kBAAkB,cAAc;AAChF,uCAAM,YAAY,EAAE,MAAM,gBAAgB,MAAM,IAAI,IAAI,MAAM,EAAE,KAAK,EAAE;AACvE;AAAA,MACJ;AAAA,IACF;AACA,WAAO,QAAQ,IAAI,QAAQ;AAAA,EAC7B,UAAE;AACA,WAAO,cAAc,CAAC;AAAA,EACxB;AACF;AAEA,SAAS,KAAK,QAA+B;AAC3C,YAAU;AAEV,QAAM,MAAM,EAAE,GAAG,OAAO,KAAK;AAC7B,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,MAAM,IAAI,KAAK,eAAe;AACpC,QAAI,KAAK,IAAI,gBAAgB,EAAE;AAAA,EACjC;AAEA,SAAO,SAAS,CAAC;AACjB,SAAO,YAAY,QAAQ;AAC3B,SAAO,gBAAgB;AACvB,SAAO,kBAAkB;AACzB,SAAO,kBAAkB;AACzB,SAAO,eAAe;AAMtB,SAAO,iBAAiB;AAExB,SAAO,OAAO,KAAK,MAAM;AACvB,QAAI,SAAS;AACX,iBAAW,KAAK,OAAO;AAAA,IACzB;AACA,QAAI,QAAQ,sBAAsB;AAChC,aAAO,qBAAqB;AAAA,IAC9B;AACA,WAAO,GAAG,UAAU,QAAQ,OAAO;AACnC,WAAO,IAAI,OAAO,QAAQ;AAC1B,WAAO,GAAG,MAAM,QAAQ,OAAO;AAC/B,WAAO,MAAM,OAAO,OAAO,OAAO,KAAK,GAAG;AAAA,EAC5C,CAAC;AAED,+BAAM,mBAAmB;AAEzB,SAAO,uBAAuB,MAAM;AAClC,iCAAM,IAAI,QAAQ;AAAA,EACpB;AAEA,SAAO,OAAO;AAAA,IACZ;AAAA,IACA,aAAa,MAAM;AACjB,4BAAsB;AACtB,mCAAM,aAAa,OAAO;AAC1B,aAAO,SAAS,OAAO,gBAAgB,QAAQ,aAAa,GAAG;AAC/D,YAAM,2BAA2B,QAAQ,WAAW;AACpD,mCAAM;AAAA,IACR;AAAA,IAEA,aAAa,MAAM;AACjB,UAAI,CAAC,MAAM;AACT,cAAM,IAAI,MAAM,0DAA0D;AAAA,MAC5E;AACA,aAAO,KAAK,gBAAgB;AAAA,IAC9B;AAAA,IAEA,cAAc,MAAM;AAClB,mCAAM;AAAA,IACR;AAAA,IAEA,QAAQ,CAAC,SAAuB;AAC9B,UAAI;AACF,gBAAQ,GAAG,MAAM,OAAO,aAAa,IAAI,CAAC;AAAA,MAC5C,SAAS,GAAP;AAKA,YAAI,aAAa,wBAAwB;AACvC,iBAAO,kBAAkB,EAAE,IAAI;AAC/B,2BAAiB;AAAA,QACnB,WAAW,MAAM,UAAU;AAEzB,gBAAM;AAAA,QACR;AACA,cAAM,MAAM,OAAO;AAAA,UACjB;AAAA,IAAsD,EAA0B;AAAA,QAClF;AACA,eAAO,UAAU,GAAG;AAAA,MACtB;AACA,uBAAiB;AACjB,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,CAAC,KAAY,UAAkB,SAAyB;AACtE,mCAAM,YAAY,EAAE,MAAM,kBAAkB,MAAM,EAAE,KAAK,OAAO,KAAK,EAAE;AAAA,IACzE;AAAA,EACF;AAEA,SAAO,aAAa,CAAC,SAAiB,QAAQ,UAAU;AACxD,SAAO,sBAAsB;AAE7B,SAAO,QAAQ,CAAC,SAAiB;AAC/B,iCAAM,MAAM,EAAE,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3C;AACA,SAAO,WAAW,CAAC,SAAiB;AAClC,iCAAM,MAAM,EAAE,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3C;AACA,SAAO,YAAY,CAAC,WAAmB;AACrC,iCAAM,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO;AAAA,EAC7C;AAGA,EAAC,WAAmB,SAAS;AAG7B,aAAW,MAAM;AACf,UAAM,YAAY,GAAG,QAAQ;AAC7B,eAAW,SAAS;AAAA,EACtB,CAAC;AACH;",
6
6
  "names": ["encode", "decode", "encode", "encoder", "decode", "decoder", "decoder", "module", "XMLHttpRequest", "data", "resp", "url", "import_msgpack", "size", "_interruptBuffer", "transfer", "dispatch", "import_msgpack", "_handleEventsFromWorker", "handleEventsFromWorker_fn", "_onMessageFromWorker", "_ep", "_dispatch", "_interrupt", "transfer", "dispatch", "objs", "_newSetter", "msg", "data", "URL", "obj"]
7
7
  }