diff --git a/c/.gitignore b/c/.gitignore
new file mode 100644
index 0000000..3ee6987
--- /dev/null
+++ b/c/.gitignore
@@ -0,0 +1,7 @@
+# Build outputs
+*.o
+*.a
+*.d
+.deps/
+qrcodegen-demo
+qrcodegen-test
diff --git a/solidity/.gitignore b/solidity/.gitignore
new file mode 100644
index 0000000..8338c47
--- /dev/null
+++ b/solidity/.gitignore
@@ -0,0 +1,5 @@
+node_modules/
+artifacts/
+cache/
+typechain-types/
+gasReporterOutput.json
diff --git a/solidity/Readme.markdown b/solidity/Readme.markdown
new file mode 100644
index 0000000..d01ea71
--- /dev/null
+++ b/solidity/Readme.markdown
@@ -0,0 +1,204 @@
+QR Code generator library — Solidity
+=====================================
+
+
+Introduction
+------------
+
+This is the Solidity port of the QR Code generator library, modeled after the
+C implementation in this repository. It provides on-chain QR Code generation
+as a pure Solidity library — no external calls, no oracles, entirely self-contained.
+
+Home page with live JavaScript demo, extensive descriptions, and competitor comparisons:
+https://www.nayuki.io/page/qr-code-generator-library
+
+
+Features
+--------
+
+Core features:
+
+* Supports all 40 QR Code versions (sizes 21×21 to 177×177)
+* All 4 error correction levels: Low, Medium, Quartile, High
+* All 4 encoding modes: Numeric, Alphanumeric, Byte, Kanji/ECI
+* Automatic mask selection (evaluates all 8 patterns, picks the lowest-penalty one)
+* Manual mask pattern override (MASK_0 … MASK_7)
+* ECC level boosting (upgrades ECC level when the version number doesn't increase)
+* Low-level segment API for mixed-mode encoding
+* On-chain SVG renderer (QRCodeDemo.toSvgString)
+* Open source under the MIT License
+
+
+Output format
+-------------
+
+Every successful encoding returns a `bytes` value:
+
+```
+qrcode[0] — side length in modules (21 for version 1, 177 for version 40)
+qrcode[1..] — packed module bits, row-major order
+ Module (x, y) is at bit index y * size + x
+ stored in byte (y * size + x) / 8 + 1
+ at bit position (y * size + x) % 8 (LSB = bit 0)
+ A set bit (1) means a dark / black module.
+```
+
+A failed encoding (data too long for the requested version range) returns
+`bytes` of length 1 where `qrcode[0] == 0`.
+
+
+Examples
+--------
+
+```solidity
+import "./QRCode.sol";
+
+// Simple — encode "Hello, world!" with Low ECC, auto mask
+bytes memory qr = QRCode.encodeText(
+ "Hello, world!",
+ QRCode.ECC_LOW,
+ QRCode.VERSION_MIN, // 1
+ QRCode.VERSION_MAX, // 40
+ QRCode.MASK_AUTO,
+ true // boost ECC level if possible
+);
+uint size = QRCode.getSize(qr); // 21 for version 1
+
+// Read a module
+bool dark = QRCode.getModule(qr, x, y);
+
+// Manual — force version 5, mask pattern 2, no ECC boost
+bytes memory qr2 = QRCode.encodeText(
+ "3141592653589793238462643383",
+ QRCode.ECC_HIGH,
+ 5, 5,
+ QRCode.MASK_2,
+ false
+);
+
+// Low-level — mix numeric and alphanumeric segments
+QRCode.Segment[] memory segs = new QRCode.Segment[](2);
+segs[0] = QRCode.makeAlphanumeric(bytes("THE SQUARE ROOT OF 2 IS 1."));
+segs[1] = QRCode.makeNumeric(bytes("41421356237309504880168872420969807856967187537694"));
+bytes memory qr3 = QRCode.encodeSegments(segs, QRCode.ECC_LOW);
+
+// On-chain SVG (4 module quiet zone)
+string memory svg = QRCodeDemo(demoAddress).toSvgString(qr, 4);
+```
+
+
+Gas usage
+---------
+
+QR Code generation is compute-intensive on-chain. The tables below show gas
+estimates (measured on Hardhat's in-process EVM with the optimizer enabled at
+200 runs) for a range of typical inputs.
+
+The current implementation applies three EVM-native optimisations over the
+original C-port baseline: pre-computed `bytes constant` lookup tables for
+GF(256) exp/log and ECC block data; `uint256` row packing for the internal
+module grid (whole-row XOR/OR instead of per-module bit manipulation); and
+Yul inline assembly for the Reed-Solomon inner loop and penalty-scoring hot
+paths. The result is roughly a **55–62% reduction** in gas across all inputs.
+
+### Fixed mask (recommended for on-chain transactions)
+
+| Input | ECC | Mask | QR version | Gas |
+|---|---|---|---|---|
+| `"Hello, world!"` (13 B, byte mode) | Low | 2 | 1 (21×21) | ~930,000 |
+| Binary payload 13 bytes | Medium | 0 | 1 (21×21) | ~928,000 |
+| ECI(26) + 6-byte UTF-8 | Medium | 0 | 1 (21×21) | ~1,227,000 |
+| 50-digit numeric string | Medium | 3 | 2 (25×25) | ~1,728,000 |
+| 22-char URL (alphanumeric mode) | High | — | 3 (29×29) | ~2,397,000 |
+| 26-char mixed segments | Low | 0 | 3 (29×29) | ~3,276,000 |
+| 28-digit numeric string | High | 2 | 5 (37×37) | ~3,337,000 |
+| 55-char alphanumeric string | High | — | 5 (37×37) | ~3,594,000 |
+
+### Automatic mask selection (`MASK_AUTO`)
+
+`MASK_AUTO` runs the full encoding pipeline 8 times to score each mask and
+pick the lowest-penalty one. Gas is roughly 5–6× the fixed-mask cost:
+
+| Input | QR version | Gas |
+|---|---|---|
+| `"Hello, world!"` (byte mode) | 1 (21×21) | ~5,291,000 |
+| Binary payload 13 bytes | 1 (21×21) | ~5,290,000 |
+| ECI(26) + 6-byte UTF-8 | 1 (21×21) | ~5,591,000 |
+| 50-digit numeric string | 2 (25×25) | ~7,698,000 |
+| 26-char mixed segments | 3 (29×29) | ~11,121,000 |
+| 55-char alphanumeric string | 5 (37×37) | ~15,741,000 |
+
+All `MASK_AUTO` cases now fit comfortably within Ethereum mainnet's 30 M gas
+block limit (previously they exceeded it for versions ≥ 2).
+
+### SVG rendering
+
+`QRCodeDemo.toSvgString(qr, border)` costs approximately **2,356,000 gas**
+for a version-1 QR Code with a 4-module quiet-zone border.
+
+### Gas scaling by version
+
+Gas scales with the number of modules (size²) of the QR Code:
+
+* Version 1 (21×21 = 441 modules): ~930 k gas (fixed mask)
+* Version 2 (25×25 = 625 modules): ~1.7 M gas
+* Version 3 (29×29 = 841 modules): ~2.4–3.3 M gas
+* Version 5 (37×37 = 1 369 modules): ~3.3–3.6 M gas
+* Higher versions scale proportionally
+
+Practical considerations:
+
+* Use a **fixed mask** (`MASK_0`…`MASK_7`) whenever calling from a transaction
+ or when operating near the block gas limit. Mask quality varies little in
+ practice; `MASK_0` or `MASK_2` are reasonable defaults.
+* `MASK_AUTO` is now feasible for on-chain transactions through version 5
+ (all cases are below 30 M gas), and is always suitable for off-chain
+ `eth_call` simulation with an unlimited gas allowance.
+* The QR Code library itself is a pure Solidity function (no storage, no
+ events); all the gas is spent on computation, not on state writes.
+
+
+Building and testing
+--------------------
+
+Prerequisites: Node.js ≥ 18 and npm.
+
+```bash
+cd solidity
+npm install
+npm run compile # compiles with the bundled solc (no internet required)
+npm test # runs the Hardhat test suite against a local network
+```
+
+The `npm run compile` script uses the bundled `solc` npm package so no
+network access is needed. `npm test` runs Hardhat which spins up an
+in-process EVM for the tests.
+
+Note: the contracts use `viaIR: true` (Yul IR pipeline) to avoid the EVM's
+16-slot stack-depth limit, which the QR Code algorithm would otherwise exceed.
+
+
+License
+-------
+
+Solidity port and EVM optimizations copyright © trifle-labs contributors. (MIT License)
+Based on the C implementation by Project Nayuki.
+https://www.nayuki.io/page/qr-code-generator-library
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+* The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+* The Software is provided "as is", without warranty of any kind, express or
+ implied, including but not limited to the warranties of merchantability,
+ fitness for a particular purpose and noninfringement. In no event shall the
+ authors or copyright holders be liable for any claim, damages or other
+ liability, whether in an action of contract, tort or otherwise, arising from,
+ out of or in connection with the Software or the use or other dealings in the
+ Software.
diff --git a/solidity/contracts/QRCode.sol b/solidity/contracts/QRCode.sol
new file mode 100644
index 0000000..b196146
--- /dev/null
+++ b/solidity/contracts/QRCode.sol
@@ -0,0 +1,1329 @@
+/*
+ * QR Code generator library (Solidity)
+ *
+ * Solidity port and EVM optimizations copyright (c) trifle-labs contributors.
+ * Based on the C implementation by Project Nayuki (MIT License).
+ * https://www.nayuki.io/page/qr-code-generator-library
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ * - The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * - The Software is provided "as is", without warranty of any kind, express or
+ * implied, including but not limited to the warranties of merchantability,
+ * fitness for a particular purpose and noninfringement. In no event shall the
+ * authors or copyright holders be liable for any claim, damages or other
+ * liability, whether in an action of contract, tort or otherwise, arising from,
+ * out of or in connection with the Software or the use or other dealings in the
+ * Software.
+ */
+
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+/*
+ * This library creates QR Code symbols, which is a type of two-dimensional barcode.
+ * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
+ * A QR Code structure is an immutable square grid of dark and light cells.
+ * The library provides functions to create a QR Code from text or binary data.
+ * The library covers the QR Code Model 2 specification, supporting all versions (sizes)
+ * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
+ *
+ * Ways to create a QR Code:
+ * - High level: Take the payload data and call encodeText() or encodeBinary().
+ * - Low level: Custom-make the list of segments and call
+ * encodeSegments() or encodeSegmentsAdvanced().
+ *
+ * Output format — the returned bytes value:
+ * qrcode[0] : side length of the QR Code in modules (e.g. 21 for version 1)
+ * qrcode[1..] : packed module bits, row-major order.
+ * Module at (x, y) is at bit index y*size + x, stored in byte at
+ * index (y*size + x)/8 + 1, at bit position (y*size + x) % 8 (LSB=0).
+ * A set bit means a dark (black) module.
+ * An invalid/failed encoding is represented as bytes of length 1 with qrcode[0] == 0.
+ *
+ * Gas optimisations over the C-port baseline:
+ * 1. Pre-computed lookup tables (GF256 log/exp, alphanumeric map, ECC tables) stored
+ * as `bytes constant` so they live in bytecode and never allocate heap memory.
+ * 2. Internal module grid represented as uint256[] rows (one uint256 per row) so
+ * every module read/write is a single bit-shift instead of a multiply + byte index.
+ * All-column operations (mask application, rectangle fill) work on whole rows.
+ * 3. Yul inline assembly for the Reed-Solomon remainder inner loop and for the
+ * vectorised penalty-scoring (N2 2x2 block check and N4 dark-module count).
+ */
+library QRCode {
+
+ /*---- Error correction level constants ----*/
+
+ uint8 internal constant ECC_LOW = 0; // ~7% error tolerance
+ uint8 internal constant ECC_MEDIUM = 1; // ~15% error tolerance
+ uint8 internal constant ECC_QUARTILE = 2; // ~25% error tolerance
+ uint8 internal constant ECC_HIGH = 3; // ~30% error tolerance
+
+ /*---- Mask pattern constants ----*/
+
+ uint8 internal constant MASK_AUTO = 0xFF; // Library selects the best mask
+ uint8 internal constant MASK_0 = 0;
+ uint8 internal constant MASK_1 = 1;
+ uint8 internal constant MASK_2 = 2;
+ uint8 internal constant MASK_3 = 3;
+ uint8 internal constant MASK_4 = 4;
+ uint8 internal constant MASK_5 = 5;
+ uint8 internal constant MASK_6 = 6;
+ uint8 internal constant MASK_7 = 7;
+
+ /*---- Segment mode constants ----*/
+
+ uint8 internal constant MODE_NUMERIC = 0x1;
+ uint8 internal constant MODE_ALPHANUMERIC = 0x2;
+ uint8 internal constant MODE_BYTE = 0x4;
+ uint8 internal constant MODE_KANJI = 0x8;
+ uint8 internal constant MODE_ECI = 0x7;
+
+ /*---- Version range ----*/
+
+ uint8 internal constant VERSION_MIN = 1;
+ uint8 internal constant VERSION_MAX = 40;
+
+ /*---- Penalty score constants (used by auto mask selection) ----*/
+
+ uint internal constant PENALTY_N1 = 3;
+ uint internal constant PENALTY_N2 = 3;
+ uint internal constant PENALTY_N3 = 40;
+ uint internal constant PENALTY_N4 = 10;
+
+ // Sentinel returned by _calcSegmentBitLength/_getTotalBits on overflow
+ int internal constant LENGTH_OVERFLOW = type(int256).min;
+
+
+ /*======== Pre-computed lookup tables (stored in bytecode, zero heap allocation) ========*/
+
+ /*
+ * GF(2^8) exponentiation table over polynomial 0x11D: GF256_EXP[i] = 2^i.
+ * 256 bytes. Replaces the 8-iteration Russian-peasant multiply with 3 lookups.
+ */
+ bytes private constant GF256_EXP =
+ hex"01020408102040801d3a74e8cd8713264c982d5ab475eac98f03060c183060c0"
+ hex"9d274e9c254a94356ad4b577eec19f23468c050a142850a05dba69d2b96fdea1"
+ hex"5fbe61c2992f5ebc65ca890f1e3c78f0fde7d3bb6bd6b17ffee1dfa35bb671e2"
+ hex"d9af4386112244880d1a3468d0bd67ce811f3e7cf8edc7933b76ecc5973366cc"
+ hex"85172e5cb86ddaa94f9e214284152a54a84d9a2952a455aa49923972e4d5b773"
+ hex"e6d1bf63c6913f7efce5d7b37bf6f1ffe3dbab4b963162c495376edca557ae41"
+ hex"82193264c88d070e1c3870e0dda753a651a259b279f2f9efc39b2b56ac458a09"
+ hex"122448903d7af4f5f7f3fbebcb8b0b162c58b07dfae9cf831b366cd8ad478e01";
+
+ /*
+ * GF(2^8) discrete-log table: GF256_LOG[x] = log_2(x) mod 0x11D.
+ * GF256_LOG[0] is undefined; _gf256Mul guards against zero inputs.
+ */
+ bytes private constant GF256_LOG =
+ hex"0000011902321ac603df33ee1b68c74b0464e00e348def811cc169f8c8084c71"
+ hex"058a652fe1240f2135938edaf01282451db5c27d6a27f9b9c99a09784de472a6"
+ hex"06bf8b6266dd30fde29825b31091228836d094ce8f96dbbdf1d2135c83384640"
+ hex"1e42b6a3c3487e6e6b3a2854fa85ba3dca5e9b9f0a15792b4ed4e5ac73f3a757"
+ hex"0770c0f78c80630d674adeed31c5fe18e3a5997726b8b47c114492d92320892e"
+ hex"373fd15b95bccfcd908797b2dcfcbe61f256d3ab142a5d9e843c3953476d41a2"
+ hex"1f2d43d8b77ba476c41749ec7f0c6ff66ca13b52299d55aafb6086b1bbcc3e5a"
+ hex"cb595fb09ca9a0510bf516eb7a752cd74faed5e9e6e7ade874d6f4eaa85058af";
+
+ /*
+ * Alphanumeric character map, indexed by (c - 0x20) for c in [0x20, 0x5A].
+ * Stored value = (QR alphanumeric index + 1), 0 = invalid character.
+ * Reduces the original 11-branch if-else chain to two range checks + one read.
+ */
+ bytes private constant ALPHA_MAP =
+ hex"250000002627000000002829002a2b2c0102030405060708090a2d"
+ hex"0000000000000b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324";
+
+ /*
+ * ECC codewords per block [version 0..40], one table per ECC level.
+ * Index 0 = 0xFF sentinel. `bytes constant` means bytecode storage,
+ * no heap allocation per call (unlike the original function-local hex literals).
+ */
+ bytes private constant _ECPB_LOW = hex"ff070a0f141a1214181e1214181a1e16181c1e1c1c1c1c1e1e1a1c1e1e1e1e1e1e1e1e1e1e1e1e1e1e";
+ bytes private constant _ECPB_MED = hex"ff0a101a1218101216161a1e161618181c1c1a1a1a1a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c";
+ bytes private constant _ECPB_QRT = hex"ff0d16121a1218121614181c1a18141e181c1c1a1e1c1e1e1e1e1c1e1e1e1e1e1e1e1e1e1e1e1e1e1e";
+ bytes private constant _ECPB_HIGH = hex"ff111c1610161c1a1a181c181c1618181e1c1c1a1c1e181e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e";
+
+ /*
+ * Number of error-correction blocks [version 0..40], one table per ECC level.
+ */
+ bytes private constant _NECB_LOW = hex"ff01010101010202020204040404040606060607080809090a0c0c0c0d0e0f10111213131415161819";
+ bytes private constant _NECB_MED = hex"ff01010102020404040505050809090a0a0b0d0e10111112141517191a1c1d1f21232526282b2d2f31";
+ bytes private constant _NECB_QRT = hex"ff01010202040406060808080a0c100c11101215141717191b1d22222326282b2d303335383b3e4144";
+ bytes private constant _NECB_HIGH = hex"ff010102040404050608080b0b101012101315191919221e202325282a2d303336393c3f42464a4d51";
+
+ /*
+ * Vectorised 256-bit mask-pattern constants.
+ * Bit x is set iff column x satisfies the mask formula for that row category.
+ * Verified against per-pixel formula for all qrsize values 1..177.
+ */
+ // Mask 0: (x+y)%2==0 — even row: even x; odd row: odd x
+ uint256 private constant _MASK0_EVEN =
+ 0x5555555555555555555555555555555555555555555555555555555555555555;
+ uint256 private constant _MASK0_ODD =
+ 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
+ // Period-3 column patterns (masks 2, 3, 5, 6, 7)
+ uint256 private constant _MP0 = // x%3==0
+ 0x9249249249249249249249249249249249249249249249249249249249249249;
+ uint256 private constant _MP1 = // x%3==1
+ 0x2492492492492492492492492492492492492492492492492492492492492492;
+ uint256 private constant _MP2 = // x%3==2
+ 0x4924924924924924924924924924924924924924924924924924924924924924;
+ // Period-6 column patterns (masks 4, 6, 7)
+ uint256 private constant _MPA = // x%6 in {0,1,2}
+ 0x71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7;
+ uint256 private constant _MPB = // x%6 in {3,4,5}
+ 0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38;
+ uint256 private constant _MP6 = // x%6==0 (mask 5)
+ 0x1041041041041041041041041041041041041041041041041041041041041041;
+ uint256 private constant _MPC = // x%6 in {0,4,5} (masks 6, 7)
+ 0x1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71;
+ uint256 private constant _MPD = // x%6 in {1,2,3} (masks 6, 7)
+ 0xe38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e;
+
+
+ /*---- Segment struct ----*/
+
+ /*
+ * A segment of character/binary/control data.
+ * mode : One of the MODE_* constants above
+ * numChars : Character count (bytes for MODE_BYTE, 0 for MODE_ECI)
+ * data : Encoded data bits, packed in bitwise big-endian order
+ * bitLength : Number of valid data bits in `data`
+ */
+ struct Segment {
+ uint8 mode;
+ uint numChars;
+ bytes data;
+ uint bitLength;
+ }
+
+
+ /*---- Buffer length helper ----*/
+
+ // Returns the number of bytes needed to store a QR Code of the given version.
+ function bufferLenForVersion(uint ver) internal pure returns (uint) {
+ return ((ver * 4 + 17) * (ver * 4 + 17) + 7) / 8 + 1;
+ }
+
+
+ /*======== High-level encoding API ========*/
+
+ /*
+ * Encodes the given text to a QR Code.
+ * Returns bytes of length 1 with qrcode[0]==0 on failure (data too long).
+ */
+ function encodeText(
+ string memory text,
+ uint8 ecl,
+ uint8 minVersion,
+ uint8 maxVersion,
+ uint8 mask,
+ bool boostEcl
+ ) internal pure returns (bytes memory) {
+ bytes memory tb = bytes(text);
+ if (tb.length == 0)
+ return encodeSegmentsAdvanced(new Segment[](0), ecl, minVersion, maxVersion, mask, boostEcl);
+
+ Segment[] memory segs = new Segment[](1);
+ if (isNumericBytes(tb))
+ segs[0] = makeNumeric(tb);
+ else if (isAlphanumericBytes(tb))
+ segs[0] = makeAlphanumeric(tb);
+ else
+ segs[0] = makeBytes(tb);
+
+ return encodeSegmentsAdvanced(segs, ecl, minVersion, maxVersion, mask, boostEcl);
+ }
+
+ /*
+ * Encodes the given binary data to a QR Code using byte mode.
+ * Returns bytes of length 1 with qrcode[0]==0 on failure.
+ */
+ function encodeBinary(
+ bytes memory data,
+ uint8 ecl,
+ uint8 minVersion,
+ uint8 maxVersion,
+ uint8 mask,
+ bool boostEcl
+ ) internal pure returns (bytes memory) {
+ Segment[] memory segs = new Segment[](1);
+ segs[0] = makeBytes(data);
+ return encodeSegmentsAdvanced(segs, ecl, minVersion, maxVersion, mask, boostEcl);
+ }
+
+
+ /*======== Low-level encoding API ========*/
+
+ /*
+ * Encodes segments to a QR Code using sensible defaults:
+ * minVersion=1, maxVersion=40, mask=MASK_AUTO, boostEcl=true.
+ */
+ function encodeSegments(
+ Segment[] memory segs,
+ uint8 ecl
+ ) internal pure returns (bytes memory) {
+ return encodeSegmentsAdvanced(segs, ecl, VERSION_MIN, VERSION_MAX, MASK_AUTO, true);
+ }
+
+ /*
+ * Encodes segments to a QR Code with full parameter control.
+ * Returns bytes of length 1 with qrcode[0]==0 if the data does not fit.
+ */
+ function encodeSegmentsAdvanced(
+ Segment[] memory segs,
+ uint8 ecl,
+ uint8 minVersion,
+ uint8 maxVersion,
+ uint8 mask,
+ bool boostEcl
+ ) internal pure returns (bytes memory) {
+ uint8 version;
+ uint8 finalEcl;
+ {
+ bool found;
+ uint dataUsedBits;
+ (found, version, dataUsedBits) = _findMinVersion(segs, ecl, minVersion, maxVersion);
+ if (!found) {
+ bytes memory empty = new bytes(1);
+ return empty;
+ }
+ finalEcl = _boostEccLevel(ecl, version, dataUsedBits, boostEcl);
+ }
+ return _buildQrCode(segs, version, finalEcl, mask);
+ }
+
+
+ /*======== Segment factory functions ========*/
+
+ /*
+ * Returns a segment representing the given binary data encoded in byte mode.
+ */
+ function makeBytes(bytes memory data) internal pure returns (Segment memory seg) {
+ int bl = _calcSegmentBitLength(MODE_BYTE, data.length);
+ require(bl != LENGTH_OVERFLOW, "QRCode: byte segment too long");
+ seg.mode = MODE_BYTE;
+ seg.numChars = data.length;
+ seg.bitLength = uint(bl);
+ seg.data = data;
+ }
+
+ /*
+ * Returns a segment representing the given string of decimal digits in numeric mode.
+ */
+ function makeNumeric(bytes memory digits) internal pure returns (Segment memory seg) {
+ uint len = digits.length;
+ int bl = _calcSegmentBitLength(MODE_NUMERIC, len);
+ require(bl != LENGTH_OVERFLOW, "QRCode: numeric segment too long");
+ seg.mode = MODE_NUMERIC;
+ seg.numChars = len;
+ seg.bitLength = 0;
+
+ bytes memory buf = new bytes((uint(bl) + 7) / 8);
+ uint accumData = 0;
+ uint accumCount = 0;
+ for (uint i = 0; i < len; i++) {
+ uint8 c = uint8(digits[i]);
+ require(c >= 0x30 && c <= 0x39, "QRCode: non-digit in numeric segment");
+ accumData = accumData * 10 + uint(c - 0x30);
+ accumCount++;
+ if (accumCount == 3) {
+ seg.bitLength = _appendBitsToBuffer(accumData, 10, buf, seg.bitLength);
+ accumData = 0;
+ accumCount = 0;
+ }
+ }
+ if (accumCount > 0)
+ seg.bitLength = _appendBitsToBuffer(accumData, accumCount * 3 + 1, buf, seg.bitLength);
+ seg.data = buf;
+ }
+
+ /*
+ * Returns a segment representing the given text in alphanumeric mode.
+ * Valid characters: 0-9, A-Z (uppercase only), space, $, %, *, +, -, ., /, :
+ */
+ function makeAlphanumeric(bytes memory text) internal pure returns (Segment memory seg) {
+ uint len = text.length;
+ int bl = _calcSegmentBitLength(MODE_ALPHANUMERIC, len);
+ require(bl != LENGTH_OVERFLOW, "QRCode: alphanumeric segment too long");
+ seg.mode = MODE_ALPHANUMERIC;
+ seg.numChars = len;
+ seg.bitLength = 0;
+
+ bytes memory buf = new bytes((uint(bl) + 7) / 8);
+ uint accumData = 0;
+ uint accumCount = 0;
+ for (uint i = 0; i < len; i++) {
+ (bool ok, uint idx) = _alphanumericCharIndex(uint8(text[i]));
+ require(ok, "QRCode: invalid char in alphanumeric segment");
+ accumData = accumData * 45 + idx;
+ accumCount++;
+ if (accumCount == 2) {
+ seg.bitLength = _appendBitsToBuffer(accumData, 11, buf, seg.bitLength);
+ accumData = 0;
+ accumCount = 0;
+ }
+ }
+ if (accumCount > 0)
+ seg.bitLength = _appendBitsToBuffer(accumData, 6, buf, seg.bitLength);
+ seg.data = buf;
+ }
+
+ /*
+ * Returns a segment representing an Extended Channel Interpretation (ECI) designator.
+ * assignVal must be in [0, 999999].
+ */
+ function makeEci(uint256 assignVal) internal pure returns (Segment memory seg) {
+ require(assignVal < 1000000, "QRCode: ECI value out of range");
+ seg.mode = MODE_ECI;
+ seg.numChars = 0;
+ bytes memory buf;
+ uint bl;
+ if (assignVal < (1 << 7)) {
+ buf = new bytes(1);
+ bl = _appendBitsToBuffer(assignVal, 8, buf, 0);
+ } else if (assignVal < (1 << 14)) {
+ buf = new bytes(2);
+ bl = _appendBitsToBuffer(2, 2, buf, 0);
+ bl = _appendBitsToBuffer(assignVal, 14, buf, bl);
+ } else {
+ buf = new bytes(3);
+ bl = _appendBitsToBuffer(6, 3, buf, 0);
+ bl = _appendBitsToBuffer(assignVal >> 10, 11, buf, bl);
+ bl = _appendBitsToBuffer(assignVal & 0x3FF, 10, buf, bl);
+ }
+ seg.bitLength = bl;
+ seg.data = buf;
+ }
+
+
+ /*======== QR Code output query functions ========*/
+
+ /*
+ * Returns the side length of the QR Code in modules.
+ * Result is in [21, 177]. qrcode[0] must be nonzero (valid QR Code).
+ */
+ function getSize(bytes memory qrcode) internal pure returns (uint) {
+ require(qrcode.length > 0 && uint8(qrcode[0]) != 0, "QRCode: invalid qrcode");
+ return uint8(qrcode[0]);
+ }
+
+ /*
+ * Returns true if and only if the module at coordinates (x, y) is dark.
+ * Out-of-bounds coordinates return false (light).
+ */
+ function getModule(bytes memory qrcode, uint x, uint y) internal pure returns (bool) {
+ uint qrsize = uint8(qrcode[0]);
+ if (x >= qrsize || y >= qrsize) return false;
+ return _getModuleBounded(qrcode, x, y);
+ }
+
+
+ /*======== Character set helpers ========*/
+
+ /*
+ * Returns true iff every byte in text is an ASCII decimal digit (0x30-0x39).
+ */
+ function isNumericBytes(bytes memory text) internal pure returns (bool) {
+ for (uint i = 0; i < text.length; i++) {
+ uint8 c = uint8(text[i]);
+ if (c < 0x30 || c > 0x39) return false;
+ }
+ return true;
+ }
+
+ /*
+ * Returns true iff every byte in text is a valid alphanumeric-mode character.
+ */
+ function isAlphanumericBytes(bytes memory text) internal pure returns (bool) {
+ for (uint i = 0; i < text.length; i++) {
+ (bool ok,) = _alphanumericCharIndex(uint8(text[i]));
+ if (!ok) return false;
+ }
+ return true;
+ }
+
+ /*
+ * Returns the number of bytes needed for a segment data buffer.
+ * Returns type(uint).max on overflow.
+ */
+ function calcSegmentBufferSize(uint8 mode, uint numChars) internal pure returns (uint) {
+ int temp = _calcSegmentBitLength(mode, numChars);
+ if (temp == LENGTH_OVERFLOW) return type(uint).max;
+ return (uint(temp) + 7) / 8;
+ }
+
+
+ /*======== Private: core encode pipeline ========*/
+
+ /*
+ * Builds the QR Code symbol from already-determined version and ECC level.
+ *
+ * The module grid is kept as uint256[] rows internally (bit x of rows[y] = module
+ * at column x, row y). This eliminates the y*size multiplication on every module
+ * access and enables whole-row operations for rectangle fills, mask application,
+ * and penalty scoring. The grid is converted to the standard packed-bytes output
+ * format only in the final _gridToBytes call.
+ */
+ function _buildQrCode(
+ Segment[] memory segs,
+ uint8 version,
+ uint8 ecl,
+ uint8 mask
+ ) private pure returns (bytes memory) {
+ uint qrsize = uint(version) * 4 + 17;
+ uint bufLen = bufferLenForVersion(version);
+
+ // Phase 1-2: encode segment bits, pad, compute ECC — all in packed bytes.
+ bytes memory scratch = new bytes(bufLen);
+ bytes memory eccBuf = new bytes(bufLen);
+ uint bitLen = _appendSegmentBits(segs, version, scratch);
+ bitLen = _addTerminatorAndPad(scratch, bitLen, version, ecl);
+ _addEccAndInterleave(scratch, version, ecl, eccBuf);
+
+ // Phase 3: build and finalise the module grid as uint256[].
+ uint256[] memory rows = new uint256[](qrsize);
+ uint256[] memory frows = new uint256[](qrsize);
+
+ _initFuncModules(version, qrsize, rows);
+ _drawCodewords(eccBuf, _getNumRawDataModules(version) / 8, qrsize, rows);
+ _drawLightFuncModules(qrsize, version, rows);
+ _initFuncModules(version, qrsize, frows);
+
+ if (mask == MASK_AUTO)
+ mask = _chooseBestMask(frows, rows, qrsize, ecl);
+ _applyMask(frows, rows, qrsize, mask);
+ _drawFormatBits(ecl, mask, qrsize, rows);
+
+ return _gridToBytes(rows, qrsize);
+ }
+
+ function _findMinVersion(
+ Segment[] memory segs,
+ uint8 ecl,
+ uint8 minVersion,
+ uint8 maxVersion
+ ) private pure returns (bool success, uint8 version, uint dataUsedBits) {
+ for (version = minVersion; ; version++) {
+ uint cap = _getNumDataCodewords(version, ecl) * 8;
+ int bits = _getTotalBits(segs, version);
+ if (bits >= 0 && uint(bits) <= cap) {
+ dataUsedBits = uint(bits);
+ return (true, version, dataUsedBits);
+ }
+ if (version >= maxVersion) return (false, 0, 0);
+ }
+ }
+
+ function _boostEccLevel(
+ uint8 ecl,
+ uint8 version,
+ uint dataUsedBits,
+ bool boostEcl
+ ) private pure returns (uint8) {
+ if (!boostEcl) return ecl;
+ for (uint8 i = ECC_MEDIUM; i <= ECC_HIGH; i++) {
+ if (dataUsedBits <= _getNumDataCodewords(version, i) * 8)
+ ecl = i;
+ }
+ return ecl;
+ }
+
+ function _appendSegmentBits(
+ Segment[] memory segs,
+ uint8 version,
+ bytes memory qrcode
+ ) private pure returns (uint bitLen) {
+ bitLen = 0;
+ for (uint i = 0; i < segs.length; i++) {
+ Segment memory seg = segs[i];
+ bitLen = _appendBitsToBuffer(uint(seg.mode), 4, qrcode, bitLen);
+ bitLen = _appendBitsToBuffer(seg.numChars, _numCharCountBits(seg.mode, version), qrcode, bitLen);
+ for (uint j = 0; j < seg.bitLength; j++) {
+ uint bit = (uint8(seg.data[j >> 3]) >> (7 - (j & 7))) & 1;
+ bitLen = _appendBitsToBuffer(bit, 1, qrcode, bitLen);
+ }
+ }
+ }
+
+ function _addTerminatorAndPad(
+ bytes memory qrcode,
+ uint bitLen,
+ uint8 version,
+ uint8 ecl
+ ) private pure returns (uint) {
+ uint cap = _getNumDataCodewords(version, ecl) * 8;
+ uint term = cap - bitLen;
+ if (term > 4) term = 4;
+ bitLen = _appendBitsToBuffer(0, term, qrcode, bitLen);
+ bitLen = _appendBitsToBuffer(0, (8 - bitLen % 8) % 8, qrcode, bitLen);
+
+ uint8 padByte = 0xEC;
+ while (bitLen < cap) {
+ bitLen = _appendBitsToBuffer(padByte, 8, qrcode, bitLen);
+ padByte = (padByte == 0xEC) ? 0x11 : 0xEC;
+ }
+ return bitLen;
+ }
+
+
+ /*======== Private: ECC computation and interleaving ========*/
+
+ function _addEccAndInterleave(
+ bytes memory data,
+ uint8 version,
+ uint8 ecl,
+ bytes memory result
+ ) private pure {
+ uint numBlocks = _numErrCorrBlocks(ecl, version);
+ uint blockEccLen = _eccCodewordsPerBlock(ecl, version);
+ uint rawCodewords = _getNumRawDataModules(version) / 8;
+ uint dataLen = _getNumDataCodewords(version, ecl);
+ uint numShortBlocks = numBlocks - rawCodewords % numBlocks;
+ uint shortBlockDataLen = rawCodewords / numBlocks - blockEccLen;
+
+ bytes memory rsdiv = _reedSolomonComputeDivisor(blockEccLen);
+ uint datOffset = 0;
+
+ for (uint i = 0; i < numBlocks; i++) {
+ uint datLen = shortBlockDataLen + (i < numShortBlocks ? 0 : 1);
+ _interleaveBlock(
+ data, datOffset, datLen, rsdiv, blockEccLen,
+ result, i, numBlocks, numShortBlocks, shortBlockDataLen, dataLen
+ );
+ datOffset += datLen;
+ }
+ }
+
+ function _interleaveBlock(
+ bytes memory data,
+ uint datOffset,
+ uint datLen,
+ bytes memory rsdiv,
+ uint blockEccLen,
+ bytes memory result,
+ uint blockIdx,
+ uint numBlocks,
+ uint numShortBlocks,
+ uint shortBlockDataLen,
+ uint dataLen
+ ) private pure {
+ bytes memory ecc = _reedSolomonComputeRemainder(data, datOffset, datLen, rsdiv, blockEccLen);
+
+ for (uint j = 0; j < datLen; j++) {
+ uint k = blockIdx + j * numBlocks;
+ if (j >= shortBlockDataLen) k -= numShortBlocks;
+ result[k] = data[datOffset + j];
+ }
+ for (uint j = 0; j < blockEccLen; j++)
+ result[dataLen + blockIdx + j * numBlocks] = ecc[j];
+ }
+
+ function _getNumDataCodewords(uint8 version, uint8 ecl) private pure returns (uint) {
+ return _getNumRawDataModules(version) / 8
+ - _eccCodewordsPerBlock(ecl, version) * _numErrCorrBlocks(ecl, version);
+ }
+
+ function _getNumRawDataModules(uint8 version) private pure returns (uint) {
+ uint v = version;
+ uint result = (16 * v + 128) * v + 64;
+ if (v >= 2) {
+ uint numAlign = v / 7 + 2;
+ result -= (25 * numAlign - 10) * numAlign - 55;
+ if (v >= 7) result -= 36;
+ }
+ return result;
+ }
+
+
+ /*======== Private: Reed-Solomon ECC ========*/
+
+ /*
+ * GF(2^8) multiply using the pre-computed log/exp constant tables.
+ * Three table lookups replace the 8-iteration Russian-peasant loop.
+ */
+ function _gf256Mul(uint8 x, uint8 y) private pure returns (uint8 z) {
+ if (x == 0 || y == 0) return 0;
+ uint ix = uint8(GF256_LOG[x]);
+ uint iy = uint8(GF256_LOG[y]);
+ unchecked {
+ uint s = ix + iy;
+ if (s >= 255) s -= 255;
+ z = uint8(GF256_EXP[s]);
+ }
+ }
+
+ // Returns the RS generator polynomial of the given degree.
+ function _reedSolomonComputeDivisor(uint degree) private pure returns (bytes memory result) {
+ require(degree >= 1 && degree <= 30, "QRCode: RS degree out of range");
+ result = new bytes(degree);
+ result[degree - 1] = 0x01;
+
+ uint8 root = 1;
+ for (uint i = 0; i < degree; i++) {
+ for (uint j = 0; j < degree; j++) {
+ result[j] = bytes1(_gf256Mul(uint8(result[j]), root));
+ if (j + 1 < degree)
+ result[j] = bytes1(uint8(result[j]) ^ uint8(result[j + 1]));
+ }
+ root = _gf256Mul(root, 0x02);
+ }
+ }
+
+ /*
+ * Computes the RS remainder of data[offset..offset+dataLen-1] divided by the generator.
+ *
+ * The inner loop runs in Yul assembly to eliminate per-byte bounds-check overhead
+ * and to inline the GF(256) multiply directly from memory-resident log/exp tables,
+ * avoiding Solidity function-call overhead on the hot multiply path.
+ */
+ function _reedSolomonComputeRemainder(
+ bytes memory data,
+ uint dataOffset,
+ uint dataLen,
+ bytes memory generator,
+ uint degree
+ ) private pure returns (bytes memory result) {
+ result = new bytes(degree);
+ bytes memory expMem = GF256_EXP; // load constants to memory once
+ bytes memory logMem = GF256_LOG;
+ assembly {
+ let resPtr := add(result, 0x20)
+ let genPtr := add(generator, 0x20)
+ let datPtr := add(add(data, 0x20), dataOffset)
+ let expBase := add(expMem, 0x20)
+ let logBase := add(logMem, 0x20)
+
+ for { let i := 0 } lt(i, dataLen) { i := add(i, 1) } {
+ // factor = data[i] XOR result[0]
+ let factor := xor(byte(0, mload(datPtr)), byte(0, mload(resPtr)))
+ datPtr := add(datPtr, 1)
+
+ // Shift result left by 1; zero the last byte.
+ let deg1 := sub(degree, 1)
+ for { let k := 0 } lt(k, deg1) { k := add(k, 1) } {
+ mstore8(add(resPtr, k), byte(0, mload(add(resPtr, add(k, 1)))))
+ }
+ mstore8(add(resPtr, deg1), 0)
+
+ // result[j] ^= gf256Mul(generator[j], factor)
+ for { let j := 0 } lt(j, degree) { j := add(j, 1) } {
+ let g := byte(0, mload(add(genPtr, j)))
+ // mul(g, factor) is nonzero iff both g and factor are nonzero
+ // (each <= 255, product <= 65025, no 256-bit overflow).
+ if mul(g, factor) {
+ let lg := byte(0, mload(add(logBase, g)))
+ let lf := byte(0, mload(add(logBase, factor)))
+ let s := add(lg, lf)
+ if gt(s, 254) { s := sub(s, 255) }
+ let prod := byte(0, mload(add(expBase, s)))
+ let addr := add(resPtr, j)
+ mstore8(addr, xor(byte(0, mload(addr)), prod))
+ }
+ }
+ }
+ }
+ }
+
+
+ /*======== Private: Function module drawing (uint256[] grid) ========*/
+
+ /*
+ * Zeros rows[], then marks every function-module position as dark (bit set).
+ * Grid convention: bit x of rows[y] = module (column x, row y).
+ */
+ function _initFuncModules(uint8 version, uint qrsize, uint256[] memory rows) private pure {
+ // new uint256[] is already zero-initialised.
+
+ // Timing patterns
+ _fillRect(6, 0, 1, qrsize, rows); // vertical: col 6, all rows
+ _fillRect(0, 6, qrsize, 1, rows); // horizontal: row 6, all cols
+
+ // Finder patterns + format bit areas
+ _fillRect(0, 0, 9, 9, rows);
+ _fillRect(qrsize - 8, 0, 8, 9, rows);
+ _fillRect(0, qrsize - 8, 9, 8, rows);
+
+ // Alignment patterns
+ {
+ (bytes memory ap, uint n) = _getAlignmentPatternPositions(version);
+ for (uint i = 0; i < n; i++) {
+ for (uint j = 0; j < n; j++) {
+ if ((i == 0 && j == 0) || (i == 0 && j == n - 1) || (i == n - 1 && j == 0))
+ continue;
+ _fillRect(uint(uint8(ap[i])) - 2, uint(uint8(ap[j])) - 2, 5, 5, rows);
+ }
+ }
+ }
+
+ // Version information blocks (version >= 7)
+ if (version >= 7) {
+ _fillRect(qrsize - 11, 0, 3, 6, rows);
+ _fillRect(0, qrsize - 11, 6, 3, rows);
+ }
+ }
+
+ /*
+ * Draws the light (white) parts of the function modules: timing gaps, finder
+ * separator rings, alignment pattern interiors, and version information bits.
+ */
+ function _drawLightFuncModules(uint qrsize, uint8 version, uint256[] memory rows) private pure {
+ // Timing gap: every other module starting at index 7
+ {
+ uint i = 7;
+ while (i < qrsize - 7) {
+ _clearMod(rows, 6, i);
+ _clearMod(rows, i, 6);
+ i += 2;
+ }
+ }
+
+ // Finder pattern separator rings (Chebyshev distance 2 and 4 from each center)
+ for (int dy = -4; dy <= 4; dy++) {
+ for (int dx = -4; dx <= 4; dx++) {
+ int adx = dx < 0 ? -dx : dx;
+ int ady = dy < 0 ? -dy : dy;
+ int dist = adx > ady ? adx : ady;
+ if (dist == 2 || dist == 4) {
+ _setModU(rows, qrsize, int(3) + dx, int(3) + dy, false);
+ _setModU(rows, qrsize, int(qrsize) - 4 + dx, int(3) + dy, false);
+ _setModU(rows, qrsize, int(3) + dx, int(qrsize) - 4 + dy, false);
+ }
+ }
+ }
+
+ // Alignment pattern interiors
+ {
+ (bytes memory ap, uint n) = _getAlignmentPatternPositions(version);
+ for (uint i = 0; i < n; i++) {
+ for (uint j = 0; j < n; j++) {
+ if ((i == 0 && j == 0) || (i == 0 && j == n - 1) || (i == n - 1 && j == 0))
+ continue;
+ for (int dy2 = -1; dy2 <= 1; dy2++) {
+ for (int dx2 = -1; dx2 <= 1; dx2++) {
+ _setMod(rows,
+ uint(int(uint(uint8(ap[i]))) + dx2),
+ uint(int(uint(uint8(ap[j]))) + dy2),
+ dx2 == 0 && dy2 == 0);
+ }
+ }
+ }
+ }
+ }
+
+ // Version information modules (version >= 7)
+ if (version >= 7) {
+ uint rem = version;
+ for (uint i = 0; i < 12; i++)
+ rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);
+ uint bits = (uint(version) << 12) | rem;
+
+ for (uint i = 0; i < 6; i++) {
+ for (uint j = 0; j < 3; j++) {
+ uint p = qrsize - 11 + j;
+ _setMod(rows, p, i, (bits & 1) != 0);
+ _setMod(rows, i, p, (bits & 1) != 0);
+ bits >>= 1;
+ }
+ }
+ }
+ }
+
+ // Draws two copies of the 15-bit format information (including its own ECC).
+ function _drawFormatBits(uint8 ecl, uint8 mask, uint qrsize, uint256[] memory rows) private pure {
+ // Remap ECC level: LOW->1, MEDIUM->0, QUARTILE->3, HIGH->2
+ uint8[4] memory table;
+ table[0] = 1; table[1] = 0; table[2] = 3; table[3] = 2;
+ uint data = (uint(table[ecl]) << 3) | uint(mask);
+ uint rem = data;
+ for (uint i = 0; i < 10; i++)
+ rem = (rem << 1) ^ ((rem >> 9) * 0x537);
+ uint bits = (data << 10 | rem) ^ 0x5412;
+
+ // First copy (around the top-left finder)
+ for (uint i = 0; i <= 5; i++) _setMod(rows, 8, i, _getBit(bits, i));
+ _setMod(rows, 8, 7, _getBit(bits, 6));
+ _setMod(rows, 8, 8, _getBit(bits, 7));
+ _setMod(rows, 7, 8, _getBit(bits, 8));
+ for (uint i = 9; i < 15; i++) _setMod(rows, 14 - i, 8, _getBit(bits, i));
+
+ // Second copy (top-right and bottom-left finders)
+ for (uint i = 0; i < 8; i++) _setMod(rows, qrsize - 1 - i, 8, _getBit(bits, i));
+ for (uint i = 8; i < 15; i++) _setMod(rows, 8, qrsize - 15 + i, _getBit(bits, i));
+ _setMod(rows, 8, qrsize - 8, true); // Always dark
+ }
+
+ // Returns the sorted list of alignment pattern centre positions for `version`.
+ function _getAlignmentPatternPositions(uint8 version)
+ private pure returns (bytes memory result, uint numAlign)
+ {
+ result = new bytes(7);
+ if (version == 1) return (result, 0);
+ numAlign = uint(version) / 7 + 2;
+ uint step = ((uint(version) * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4)) * 2;
+ {
+ uint pos = uint(version) * 4 + 10;
+ uint i = numAlign - 1;
+ while (true) {
+ result[i] = bytes1(uint8(pos));
+ if (i == 1) break;
+ i--;
+ pos -= step;
+ }
+ }
+ result[0] = 0x06;
+ }
+
+ /*
+ * Sets all modules in [left, left+width) x [top, top+height) to dark.
+ * Vectorised: computes a column bitmask and ORs it into each row word —
+ * height OR operations instead of width*height individual bit sets.
+ */
+ function _fillRect(uint left, uint top, uint width, uint height, uint256[] memory rows) private pure {
+ uint256 colBits = ((uint256(1) << width) - 1) << left;
+ unchecked {
+ for (uint dy = 0; dy < height; dy++)
+ rows[top + dy] |= colBits;
+ }
+ }
+
+
+ /*======== Private: Codeword drawing and masking ========*/
+
+ function _drawCodewords(
+ bytes memory data,
+ uint dataLen,
+ uint qrsize,
+ uint256[] memory rows
+ ) private pure {
+ uint idx = 0;
+ uint right = qrsize - 1;
+ while (right >= 1) {
+ if (right == 6) right = 5;
+ for (uint vert = 0; vert < qrsize; vert++) {
+ for (uint j = 0; j < 2; j++) {
+ uint x = right - j;
+ bool upward = ((right + 1) & 2) == 0;
+ uint y = upward ? qrsize - 1 - vert : vert;
+ if (!_getMod(rows, x, y) && idx < dataLen * 8) {
+ bool dark = _getBit(uint8(data[idx >> 3]), 7 - (idx & 7));
+ _setMod(rows, x, y, dark);
+ idx++;
+ }
+ }
+ }
+ if (right < 2) break;
+ right -= 2;
+ }
+ }
+
+ /*
+ * XORs every non-function module with the given mask pattern.
+ *
+ * For each row y a 256-bit column-pattern is computed analytically from the
+ * precomputed constants (O(1) per row for masks 0-4; same for masks 5-7 using
+ * six (y%2, y%3) cases). The pattern is ANDed with ~frows[y] to skip function
+ * modules, then XORed into the row in a single word operation.
+ */
+ function _applyMask(
+ uint256[] memory frows,
+ uint256[] memory rows,
+ uint qrsize,
+ uint8 mask
+ ) private pure {
+ uint256 colMask = (uint256(1) << qrsize) - 1;
+ for (uint y = 0; y < qrsize; y++) {
+ uint256 pat = _maskRowPattern(mask, y);
+ rows[y] ^= (pat & ~frows[y]) & colMask;
+ }
+ }
+
+ /*
+ * Returns the 256-bit column-inversion pattern for row y of the given mask.
+ * Bit x is 1 iff the mask formula would invert module (x, y).
+ */
+ function _maskRowPattern(uint8 mask, uint y) private pure returns (uint256) {
+ if (mask == 0) return (y & 1) == 0 ? _MASK0_EVEN : _MASK0_ODD; // (x+y)%2==0
+ if (mask == 1) return (y & 1) == 0 ? type(uint256).max : 0; // y%2==0
+ if (mask == 2) return _MP0; // x%3==0
+ if (mask == 3) { // (x+y)%3==0
+ uint yr3 = y % 3;
+ return yr3 == 0 ? _MP0 : yr3 == 1 ? _MP2 : _MP1;
+ }
+ if (mask == 4) return ((y >> 1) & 1) == 0 ? _MPA : _MPB; // (x/3+y/2)%2==0
+
+ // Masks 5-7: six (y%2, y%3) cases analytically derived.
+ uint ym2 = y & 1;
+ uint ym3 = y % 3;
+ if (mask == 5) { // x*y%2 + x*y%3 == 0 (i.e. x*y divisible by 6)
+ if (ym2 == 0 && ym3 == 0) return type(uint256).max;
+ if (ym2 == 0) return _MP0;
+ if (ym3 == 0) return _MASK0_EVEN;
+ return _MP6;
+ }
+ if (mask == 6) { // (x*y%2 + x*y%3) % 2 == 0
+ if (ym2 == 0 && ym3 == 0) return type(uint256).max;
+ if (ym2 == 0 && ym3 == 1) return _MP0 | _MP2;
+ if (ym2 == 0 && ym3 == 2) return _MP0 | _MP1;
+ if (ym2 == 1 && ym3 == 0) return _MASK0_EVEN;
+ if (ym2 == 1 && ym3 == 1) return _MPA;
+ return _MPC;
+ }
+ // mask == 7: ((x+y)%2 + x*y%3) % 2 == 0
+ if (ym2 == 0 && ym3 == 0) return _MASK0_EVEN;
+ if (ym2 == 0 && ym3 == 1) return _MPA;
+ if (ym2 == 0 && ym3 == 2) return _MPC;
+ if (ym2 == 1 && ym3 == 0) return _MASK0_ODD;
+ if (ym2 == 1 && ym3 == 1) return _MPB;
+ return _MPD;
+ }
+
+ function _chooseBestMask(
+ uint256[] memory frows,
+ uint256[] memory rows,
+ uint qrsize,
+ uint8 ecl
+ ) private pure returns (uint8 bestMask) {
+ uint minPenalty = type(uint).max;
+ for (uint8 i = 0; i < 8; i++) {
+ _applyMask(frows, rows, qrsize, i);
+ _drawFormatBits(ecl, i, qrsize, rows);
+ uint penalty = _getPenaltyScore(rows, qrsize);
+ if (penalty < minPenalty) {
+ bestMask = i;
+ minPenalty = penalty;
+ }
+ _applyMask(frows, rows, qrsize, i); // undo via XOR
+ }
+ }
+
+ /*
+ * Computes the QR Code penalty score (lower is better).
+ *
+ * N2 (2x2 same-colour blocks) and N4 (dark/light balance) use Yul popcount
+ * on 256-bit row words, reducing O(n^2) module reads to O(n) word operations.
+ * N1/N3 (run-length and finder patterns) use a per-module scan that reads from
+ * a pre-loaded uint256 row word, eliminating the y*size multiplication.
+ */
+ function _getPenaltyScore(uint256[] memory rows, uint qrsize) private pure returns (uint result) {
+ uint256 colMask = (uint256(1) << qrsize) - 1;
+ uint256 blkMask = qrsize > 1 ? (uint256(1) << (qrsize - 1)) - 1 : 0;
+ result = 0;
+
+ // N1 + N3: row scans
+ for (uint y = 0; y < qrsize; y++)
+ result += _penaltyLine(rows[y] & colMask, qrsize);
+ // N1 + N3: column scans
+ for (uint x = 0; x < qrsize; x++)
+ result += _penaltyCol(rows, x, qrsize);
+
+ // N2 and N4 computed in Yul with vectorised 256-bit row operations.
+ assembly {
+ function popcnt64(u) -> c {
+ u := sub(u, and(shr(1, u), 0x5555555555555555))
+ u := add(and(u, 0x3333333333333333),
+ and(shr(2, u), 0x3333333333333333))
+ u := and(add(u, shr(4, u)), 0x0f0f0f0f0f0f0f0f)
+ c := shr(56, mul(u, 0x0101010101010101))
+ }
+ function popcnt256(v) -> cnt {
+ cnt := add(
+ add(popcnt64(and(v, 0xffffffffffffffff)),
+ popcnt64(and(shr(64, v), 0xffffffffffffffff))),
+ add(popcnt64(and(shr(128, v), 0xffffffffffffffff)),
+ popcnt64(shr(192, v))))
+ }
+
+ let rowsData := add(rows, 0x20)
+ let qrs := qrsize
+ let cm := colMask
+ let bm := blkMask
+ let darkTotal := 0
+
+ // N4: popcount all rows to get total dark module count.
+ for { let y := 0 } lt(y, qrs) { y := add(y, 1) } {
+ let row := mload(add(rowsData, mul(y, 0x20)))
+ darkTotal := add(darkTotal, popcnt256(and(row, cm)))
+ }
+
+ // N2: count 2x2 same-colour blocks over consecutive row pairs.
+ // For rows r0, r1:
+ // dark squares: (r0 & (r0>>1)) & (r1 & (r1>>1))
+ // light squares: (~r0 & (~r0>>1)) & (~r1 & (~r1>>1)) [masked to colMask]
+ let n2count := 0
+ for { let y := 0 } lt(y, sub(qrs, 1)) { y := add(y, 1) } {
+ let r0 := and(mload(add(rowsData, mul(y, 0x20))), cm)
+ let r1 := and(mload(add(rowsData, mul(add(y, 1), 0x20))), cm)
+ let d := and(and(r0, shr(1, r0)), and(r1, shr(1, r1)))
+ let nr0 := and(not(r0), cm)
+ let nr1 := and(not(r1), cm)
+ let l := and(and(nr0, shr(1, nr0)), and(nr1, shr(1, nr1)))
+ n2count := add(n2count, popcnt256(and(or(d, l), bm)))
+ }
+
+ // N4 penalty calculation
+ let total := mul(qrs, qrs)
+ let darkDiff := 0
+ let t20 := mul(darkTotal, 20)
+ let base10 := mul(total, 10)
+ switch gt(t20, base10)
+ case 1 { darkDiff := sub(t20, base10) }
+ default { darkDiff := sub(base10, t20) }
+ let c_val := div(add(darkDiff, sub(total, 1)), total)
+ let k_val := 0
+ if gt(c_val, 0) { k_val := sub(c_val, 1) }
+
+ result := add(result, add(mul(n2count, 3), mul(k_val, 10)))
+ }
+ }
+
+ // N1+N3 penalty for one row (passed as a pre-loaded uint256 word).
+ function _penaltyLine(uint256 rowBits, uint qrsize)
+ private pure returns (uint score)
+ {
+ bool runColor = false;
+ uint runLen = 0;
+ uint[7] memory history;
+ score = 0;
+ for (uint x = 0; x < qrsize; x++) {
+ bool cur = ((rowBits >> x) & 1) != 0;
+ if (cur == runColor) {
+ runLen++;
+ if (runLen == 5) score += PENALTY_N1;
+ else if (runLen > 5) score++;
+ } else {
+ _finderPenaltyAddHistory(runLen, history, qrsize);
+ if (!runColor) score += _finderPenaltyCountPatterns(history) * PENALTY_N3;
+ runColor = cur;
+ runLen = 1;
+ }
+ }
+ score += _finderPenaltyTerminateAndCount(runColor, runLen, history, qrsize) * PENALTY_N3;
+ }
+
+ // N1+N3 penalty for column x (reads rows[y] bit x for each y).
+ function _penaltyCol(uint256[] memory rows, uint x, uint qrsize)
+ private pure returns (uint score)
+ {
+ bool runColor = false;
+ uint runLen = 0;
+ uint[7] memory history;
+ score = 0;
+ uint256 xBit = uint256(1) << x;
+ for (uint y = 0; y < qrsize; y++) {
+ bool cur = (rows[y] & xBit) != 0;
+ if (cur == runColor) {
+ runLen++;
+ if (runLen == 5) score += PENALTY_N1;
+ else if (runLen > 5) score++;
+ } else {
+ _finderPenaltyAddHistory(runLen, history, qrsize);
+ if (!runColor) score += _finderPenaltyCountPatterns(history) * PENALTY_N3;
+ runColor = cur;
+ runLen = 1;
+ }
+ }
+ score += _finderPenaltyTerminateAndCount(runColor, runLen, history, qrsize) * PENALTY_N3;
+ }
+
+ function _finderPenaltyCountPatterns(uint[7] memory h) private pure returns (uint) {
+ uint n = h[1];
+ bool core = n > 0 && h[2] == n && h[3] == n * 3 && h[4] == n && h[5] == n;
+ uint cnt = 0;
+ if (core && h[0] >= n * 4 && h[6] >= n) cnt++;
+ if (core && h[6] >= n * 4 && h[0] >= n) cnt++;
+ return cnt;
+ }
+
+ function _finderPenaltyTerminateAndCount(
+ bool runColor,
+ uint runLen,
+ uint[7] memory history,
+ uint qrsize
+ ) private pure returns (uint) {
+ if (runColor) {
+ _finderPenaltyAddHistory(runLen, history, qrsize);
+ runLen = 0;
+ }
+ runLen += qrsize;
+ _finderPenaltyAddHistory(runLen, history, qrsize);
+ return _finderPenaltyCountPatterns(history);
+ }
+
+ function _finderPenaltyAddHistory(uint runLen, uint[7] memory h, uint qrsize) private pure {
+ if (h[0] == 0) runLen += qrsize;
+ h[6] = h[5]; h[5] = h[4]; h[4] = h[3];
+ h[3] = h[2]; h[2] = h[1]; h[1] = h[0];
+ h[0] = runLen;
+ }
+
+
+ /*======== Private: Grid-to-bytes conversion ========*/
+
+ /*
+ * Converts the uint256[] row grid to the standard packed-bytes output format:
+ * out[0] = qrsize
+ * out[1..] = module bits packed row-major, LSB-first within each byte.
+ *
+ * The Yul loop scans each row word once; only dark-module bits call mstore8.
+ */
+ function _gridToBytes(uint256[] memory rows, uint qrsize)
+ private pure returns (bytes memory out)
+ {
+ uint bufLen = (qrsize * qrsize + 7) / 8 + 1;
+ out = new bytes(bufLen);
+ out[0] = bytes1(uint8(qrsize));
+ assembly {
+ // out[1] is the first module-data byte.
+ // Memory layout: out -> length (32 bytes) -> out[0] (size) -> out[1..] (modules)
+ let outModBase := add(out, 0x21) // skip length word and size byte
+ let rowsData := add(rows, 0x20)
+ let qrs := qrsize
+
+ for { let y := 0 } lt(y, qrs) { y := add(y, 1) } {
+ let row := mload(add(rowsData, mul(y, 0x20)))
+ let bitStart := mul(y, qrs)
+
+ for { let x := 0 } lt(x, qrs) { x := add(x, 1) } {
+ if and(shr(x, row), 1) {
+ let bi := add(bitStart, x)
+ let byteIdx := shr(3, bi)
+ let bitOff := and(bi, 7)
+ let addr := add(outModBase, byteIdx)
+ mstore8(addr, or(byte(0, mload(addr)), shl(bitOff, 1)))
+ }
+ }
+ }
+ }
+ }
+
+
+ /*======== Private: uint256 grid module helpers ========*/
+
+ function _setMod(uint256[] memory rows, uint x, uint y, bool dark) private pure {
+ if (dark)
+ rows[y] |= (uint256(1) << x);
+ else
+ rows[y] &= ~(uint256(1) << x);
+ }
+
+ function _clearMod(uint256[] memory rows, uint x, uint y) private pure {
+ rows[y] &= ~(uint256(1) << x);
+ }
+
+ function _getMod(uint256[] memory rows, uint x, uint y) private pure returns (bool) {
+ return (rows[y] >> x) & 1 != 0;
+ }
+
+ // Bounded set: silently ignores out-of-range coordinates.
+ function _setModU(uint256[] memory rows, uint qrsize, int x, int y, bool dark) private pure {
+ if (x >= 0 && x < int(qrsize) && y >= 0 && y < int(qrsize))
+ _setMod(rows, uint(x), uint(y), dark);
+ }
+
+
+ /*======== Private: Packed-bytes module access (used by getModule only) ========*/
+
+ function _getModuleBounded(bytes memory qrcode, uint x, uint y) private pure returns (bool) {
+ uint qrsize = uint8(qrcode[0]);
+ uint index = y * qrsize + x;
+ return ((uint8(qrcode[(index >> 3) + 1]) >> (index & 7)) & 1) != 0;
+ }
+
+ function _getBit(uint x, uint i) private pure returns (bool) {
+ return ((x >> i) & 1) != 0;
+ }
+
+
+ /*======== Private: Segment bit-length calculations ========*/
+
+ function _calcSegmentBitLength(uint8 mode, uint numChars) private pure returns (int) {
+ if (numChars > 32767) return LENGTH_OVERFLOW;
+ int result = int(numChars);
+ if (mode == MODE_NUMERIC) result = (result * 10 + 2) / 3;
+ else if (mode == MODE_ALPHANUMERIC) result = (result * 11 + 1) / 2;
+ else if (mode == MODE_BYTE) result *= 8;
+ else if (mode == MODE_KANJI) result *= 13;
+ else if (mode == MODE_ECI && numChars == 0) result = 3 * 8;
+ else return LENGTH_OVERFLOW;
+ if (result > 32767) return LENGTH_OVERFLOW;
+ return result;
+ }
+
+ function _getTotalBits(Segment[] memory segs, uint8 version) private pure returns (int) {
+ int result = 0;
+ for (uint i = 0; i < segs.length; i++) {
+ uint ccbits = _numCharCountBits(segs[i].mode, version);
+ if (segs[i].numChars >= (1 << ccbits)) return LENGTH_OVERFLOW;
+ result += int(4 + ccbits + segs[i].bitLength);
+ if (result > 32767) return LENGTH_OVERFLOW;
+ }
+ return result;
+ }
+
+ function _numCharCountBits(uint8 mode, uint8 version) private pure returns (uint) {
+ uint i = (uint(version) + 7) / 17; // 0 for v1–9, 1 for v10–26, 2 for v27–40
+ if (mode == MODE_NUMERIC) { if (i == 0) return 10; if (i == 1) return 12; return 14; }
+ if (mode == MODE_ALPHANUMERIC) { if (i == 0) return 9; if (i == 1) return 11; return 13; }
+ if (mode == MODE_BYTE) { if (i == 0) return 8; return 16; }
+ if (mode == MODE_KANJI) { if (i == 0) return 8; if (i == 1) return 10; return 12; }
+ if (mode == MODE_ECI) return 0;
+ revert("QRCode: invalid mode");
+ }
+
+
+ /*======== Private: Bit buffer ========*/
+
+ function _appendBitsToBuffer(uint val, uint numBits, bytes memory buffer, uint bitLen)
+ private pure returns (uint)
+ {
+ for (int i = int(numBits) - 1; i >= 0; i--) {
+ if (((val >> uint(i)) & 1) != 0) {
+ uint byteIdx = bitLen >> 3;
+ uint bitIdx = 7 - (bitLen & 7);
+ buffer[byteIdx] = bytes1(uint8(buffer[byteIdx]) | uint8(1 << bitIdx));
+ }
+ bitLen++;
+ }
+ return bitLen;
+ }
+
+
+ /*======== Private: Alphanumeric character lookup ========*/
+
+ /*
+ * Returns (true, index) if c is in the QR alphanumeric charset, else (false, 0).
+ * Uses the pre-computed ALPHA_MAP constant: two range checks + one table lookup,
+ * replacing the original 11-branch if-else chain.
+ */
+ function _alphanumericCharIndex(uint8 c) private pure returns (bool, uint) {
+ if (c < 0x20 || c > 0x5A) return (false, 0);
+ uint8 v = uint8(ALPHA_MAP[c - 0x20]);
+ if (v == 0) return (false, 0);
+ return (true, uint(v) - 1);
+ }
+
+
+ /*======== Private: ECC codeword lookup tables ========*/
+
+ function _eccCodewordsPerBlock(uint8 ecl, uint8 version) private pure returns (uint8) {
+ if (ecl == ECC_LOW) return uint8(_ECPB_LOW[version]);
+ if (ecl == ECC_MEDIUM) return uint8(_ECPB_MED[version]);
+ if (ecl == ECC_QUARTILE) return uint8(_ECPB_QRT[version]);
+ return uint8(_ECPB_HIGH[version]);
+ }
+
+ function _numErrCorrBlocks(uint8 ecl, uint8 version) private pure returns (uint8) {
+ if (ecl == ECC_LOW) return uint8(_NECB_LOW[version]);
+ if (ecl == ECC_MEDIUM) return uint8(_NECB_MED[version]);
+ if (ecl == ECC_QUARTILE) return uint8(_NECB_QRT[version]);
+ return uint8(_NECB_HIGH[version]);
+ }
+
+}
diff --git a/solidity/contracts/QRCodeDemo.sol b/solidity/contracts/QRCodeDemo.sol
new file mode 100644
index 0000000..68ccd8c
--- /dev/null
+++ b/solidity/contracts/QRCodeDemo.sol
@@ -0,0 +1,258 @@
+/*
+ * QR Code generator demo (Solidity)
+ *
+ * Solidity port and EVM optimizations copyright (c) trifle-labs contributors.
+ * Based on the C implementation by Project Nayuki (MIT License).
+ * https://www.nayuki.io/page/qr-code-generator-library
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ * - The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * - The Software is provided "as is", without warranty of any kind, express or
+ * implied, including but not limited to the warranties of merchantability,
+ * fitness for a particular purpose and noninfringement. In no event shall the
+ * authors or copyright holders be liable for any claim, damages or other
+ * liability, whether in an action of contract, tort or otherwise, arising from,
+ * out of or in connection with the Software or the use or other dealings in the
+ * Software.
+ */
+
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.0;
+
+import "./QRCode.sol";
+
+/*
+ * A demo contract that exercises the QRCode library.
+ *
+ * All public functions are pure (no state) and return the raw QR Code bytes.
+ * Callers can inspect individual modules with QRCode.getModule() or render the
+ * symbol off-chain. See the Readme.markdown for the output format.
+ *
+ * toSvgString() shows how to render a QR Code to an inline SVG string entirely
+ * on-chain — useful for NFT metadata or other on-chain display.
+ */
+contract QRCodeDemo {
+
+ // -----------------------------------------------------------------------
+ // Demo scenarios
+ // -----------------------------------------------------------------------
+
+ // Simple: encode "Hello, world!" with Low ECC, automatic mask.
+ function doBasicDemo() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "Hello, world!",
+ QRCode.ECC_LOW,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_AUTO,
+ true
+ );
+ }
+
+ // Same as doBasicDemo() but forces mask 2 (the mask AUTO selects for this input).
+ // Useful for testing when on-chain gas limits prohibit the 8-pass auto-mask scan.
+ function doBasicDemoFixedMask() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "Hello, world!",
+ QRCode.ECC_LOW,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_2,
+ true
+ );
+ }
+
+ // Numeric mode: digits are encoded with 3.33 bits per digit.
+ function doNumericDemo() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "314159265358979323846264338327950288419716939937510",
+ QRCode.ECC_MEDIUM,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_AUTO,
+ true
+ );
+ }
+
+ // Same as doNumericDemo() but forces mask 3 (the mask AUTO selects for this input).
+ // Useful for testing when on-chain gas limits prohibit the 8-pass auto-mask scan.
+ function doNumericDemoFixedMask() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "314159265358979323846264338327950288419716939937510",
+ QRCode.ECC_MEDIUM,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_3,
+ true
+ );
+ }
+
+ // Alphanumeric mode: uppercase + special chars at 5.5 bits per character.
+ function doAlphanumericDemo() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/",
+ QRCode.ECC_HIGH,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_AUTO,
+ true
+ );
+ }
+
+ // Same as doAlphanumericDemo() but forces mask 0.
+ // Useful for testing when on-chain gas limits prohibit the 8-pass auto-mask scan.
+ function doAlphanumericDemoFixedMask() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/",
+ QRCode.ECC_HIGH,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_0,
+ true
+ );
+ }
+
+ // Binary / byte mode: arbitrary byte sequences.
+ function doBinaryDemo() external pure returns (bytes memory) {
+ bytes memory data = hex"48656c6c6f2c20776f726c6421"; // "Hello, world!"
+ return QRCode.encodeBinary(
+ data,
+ QRCode.ECC_MEDIUM,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_AUTO,
+ true
+ );
+ }
+
+ // Same as doBinaryDemo() but forces mask 0.
+ function doBinaryDemoFixedMask() external pure returns (bytes memory) {
+ bytes memory data = hex"48656c6c6f2c20776f726c6421"; // "Hello, world!"
+ return QRCode.encodeBinary(
+ data,
+ QRCode.ECC_MEDIUM,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_0,
+ true
+ );
+ }
+
+ // Fixed mask: forces mask pattern 3 instead of auto-selecting.
+ function doFixedMaskDemo() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "https://www.nayuki.io/",
+ QRCode.ECC_HIGH,
+ QRCode.VERSION_MIN,
+ QRCode.VERSION_MAX,
+ QRCode.MASK_3,
+ true
+ );
+ }
+
+ // Segment API: mix alphanumeric + numeric segments for compact encoding.
+ function doSegmentDemo() external pure returns (bytes memory) {
+ QRCode.Segment[] memory segs = new QRCode.Segment[](2);
+ segs[0] = QRCode.makeAlphanumeric(bytes("THE SQUARE ROOT OF 2 IS 1."));
+ segs[1] = QRCode.makeNumeric(bytes("41421356237309504880168872420969807856967187537694"));
+ return QRCode.encodeSegments(segs, QRCode.ECC_LOW);
+ }
+
+ // Same as doSegmentDemo() but forces mask 0 to stay within the gas cap.
+ function doSegmentDemoFixedMask() external pure returns (bytes memory) {
+ QRCode.Segment[] memory segs = new QRCode.Segment[](2);
+ segs[0] = QRCode.makeAlphanumeric(bytes("THE SQUARE ROOT OF 2 IS 1."));
+ segs[1] = QRCode.makeNumeric(bytes("41421356237309504880168872420969807856967187537694"));
+ return QRCode.encodeSegmentsAdvanced(segs, QRCode.ECC_LOW,
+ QRCode.VERSION_MIN, QRCode.VERSION_MAX, QRCode.MASK_0, true);
+ }
+
+ // ECI segment: marks the payload as UTF-8 (ECI assignment value 26).
+ function doEciDemo() external pure returns (bytes memory) {
+ QRCode.Segment[] memory segs = new QRCode.Segment[](2);
+ segs[0] = QRCode.makeEci(26);
+ segs[1] = QRCode.makeBytes(hex"e4b8ade69687"); // Chinese "zhongwen" in UTF-8
+ return QRCode.encodeSegments(segs, QRCode.ECC_MEDIUM);
+ }
+
+ // Same as doEciDemo() but forces mask 0 to stay within the gas cap.
+ function doEciDemoFixedMask() external pure returns (bytes memory) {
+ QRCode.Segment[] memory segs = new QRCode.Segment[](2);
+ segs[0] = QRCode.makeEci(26);
+ segs[1] = QRCode.makeBytes(hex"e4b8ade69687"); // Chinese "zhongwen" in UTF-8
+ return QRCode.encodeSegmentsAdvanced(segs, QRCode.ECC_MEDIUM,
+ QRCode.VERSION_MIN, QRCode.VERSION_MAX, QRCode.MASK_0, true);
+ }
+
+ // Version-constrained: forces exactly version 5 (37×37 modules), mask 2, no ECC boost.
+ function doVersionConstraintDemo() external pure returns (bytes memory) {
+ return QRCode.encodeText(
+ "3141592653589793238462643383",
+ QRCode.ECC_HIGH,
+ 5, 5,
+ QRCode.MASK_2,
+ false
+ );
+ }
+
+ // -----------------------------------------------------------------------
+ // SVG renderer (on-chain)
+ // -----------------------------------------------------------------------
+
+ /*
+ * Converts a QR Code to a minimal SVG string suitable for embedding in HTML
+ * or returning as NFT metadata.
+ *
+ * `border` is the number of quiet-zone modules to add on each side (the QR
+ * Code specification recommends at least 4).
+ */
+ function toSvgString(bytes memory qrcode, uint border)
+ external pure returns (string memory)
+ {
+ uint sz = QRCode.getSize(qrcode);
+ uint total = sz + 2 * border;
+
+ string memory svg = string(abi.encodePacked(
+ '',
+ ''));
+ }
+
+ // Internal helper: convert uint to its decimal string representation.
+ function _uint2str(uint n) internal pure returns (string memory) {
+ if (n == 0) return "0";
+ uint temp = n;
+ uint digits = 0;
+ while (temp != 0) { digits++; temp /= 10; }
+ bytes memory buf = new bytes(digits);
+ while (n != 0) {
+ digits--;
+ buf[digits] = bytes1(uint8(48 + n % 10));
+ n /= 10;
+ }
+ return string(buf);
+ }
+}
diff --git a/solidity/gasReporterOutput.json b/solidity/gasReporterOutput.json
new file mode 100644
index 0000000..ed79cc9
--- /dev/null
+++ b/solidity/gasReporterOutput.json
@@ -0,0 +1 @@
+{"namespace":"ethGasReporter","config":{"token":"ETH","blockLimit":30000000,"defaultGasPrice":5,"currency":"USD","gasPriceApi":"https://api.etherscan.io/api?module=proxy&action=eth_gasPrice","coinmarketcap":null,"ethPrice":null,"gasPrice":null,"outputFile":null,"forceConsoleOutput":false,"rst":false,"rstTitle":"","showTimeSpent":false,"srcPath":"contracts","artifactType":"truffle-v5","proxyResolver":null,"metadata":{"compiler":{"version":"0.8.34"},"settings":{"optimizer":{"enabled":true,"runs":200}}},"showMethodSig":false,"excludeContracts":[],"onlyCalledMethods":true,"url":"http://localhost:8545"},"info":{"addressCache":{},"methods":{"QRCodeDemo_7d24d9b7":{"key":"7d24d9b7","contract":"QRCodeDemo","method":"doAlphanumericDemo","fnSig":"doAlphanumericDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_ae324b5d":{"key":"ae324b5d","contract":"QRCodeDemo","method":"doAlphanumericDemoFixedMask","fnSig":"doAlphanumericDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_b66bb332":{"key":"b66bb332","contract":"QRCodeDemo","method":"doBasicDemo","fnSig":"doBasicDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_3ced44b5":{"key":"3ced44b5","contract":"QRCodeDemo","method":"doBasicDemoFixedMask","fnSig":"doBasicDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_8fca6de6":{"key":"8fca6de6","contract":"QRCodeDemo","method":"doBinaryDemo","fnSig":"doBinaryDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_e660ad3f":{"key":"e660ad3f","contract":"QRCodeDemo","method":"doBinaryDemoFixedMask","fnSig":"doBinaryDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_8d042b1a":{"key":"8d042b1a","contract":"QRCodeDemo","method":"doEciDemo","fnSig":"doEciDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_e0b41de5":{"key":"e0b41de5","contract":"QRCodeDemo","method":"doEciDemoFixedMask","fnSig":"doEciDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_1fee786b":{"key":"1fee786b","contract":"QRCodeDemo","method":"doFixedMaskDemo","fnSig":"doFixedMaskDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_28cbf77d":{"key":"28cbf77d","contract":"QRCodeDemo","method":"doNumericDemo","fnSig":"doNumericDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_cf68df27":{"key":"cf68df27","contract":"QRCodeDemo","method":"doNumericDemoFixedMask","fnSig":"doNumericDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_da4b5c89":{"key":"da4b5c89","contract":"QRCodeDemo","method":"doSegmentDemo","fnSig":"doSegmentDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_913583f2":{"key":"913583f2","contract":"QRCodeDemo","method":"doSegmentDemoFixedMask","fnSig":"doSegmentDemoFixedMask()","gasData":[],"numberOfCalls":0},"QRCodeDemo_bb20f6be":{"key":"bb20f6be","contract":"QRCodeDemo","method":"doVersionConstraintDemo","fnSig":"doVersionConstraintDemo()","gasData":[],"numberOfCalls":0},"QRCodeDemo_fb0f4bf3":{"key":"fb0f4bf3","contract":"QRCodeDemo","method":"toSvgString","fnSig":"toSvgString(bytes,uint256)","gasData":[],"numberOfCalls":0}},"deployments":[{"name":"QRCode","bytecode":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220e8d9818643dc853f172e152d2c9a8bdcefdf2eee384cd376a23b16fbc6c0e2e264736f6c63430008220033","deployedBytecode":"0x600080fdfea2646970667358221220e8d9818643dc853f172e152d2c9a8bdcefdf2eee384cd376a23b16fbc6c0e2e264736f6c63430008220033","gasData":[]},{"name":"QRCodeDemo","bytecode":"0x6080806040523460155761492e908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631fee786b1461010757806328cbf77d146101025780633ced44b5146100fd5780637d24d9b7146100f85780638d042b1a146100f35780638fca6de6146100ee578063913583f2146100e9578063ae324b5d146100e4578063b66bb332146100df578063bb20f6be146100da578063cf68df27146100d5578063da4b5c89146100d0578063e0b41de5146100cb578063e660ad3f146100c65763fb0f4bf3146100c157600080fd5b610599565b6104f5565b610490565b610425565b610401565b6103ad565b610389565b610365565b6102f3565b6102a2565b610233565b61020f565b6101eb565b6101bb565b61015a565b60005b83811061011f5750506000910152565b818101518382015260200161010f565b9060208092818152019061014e8151809281855285808601910161010c565b601f01601f1916010190565b346101b65760003660031901126101b6576101b260406101a7815161017f8382610556565b601681527568747470733a2f2f7777772e6e6179756b692e696f2f60501b6020820152610d43565b90519182918261012f565b0390f35b600080fd5b346101b65760003660031901126101b6576101b26101df6101da610613565b610df2565b6040519182918261012f565b346101b65760003660031901126101b6576101b26101df61020a61066a565b610e87565b346101b65760003660031901126101b6576101b26101df61022e610695565b610f20565b346101b65760003660031901126101b65761024c610744565b61025461126d565b81511561029d57602082015280511561029d57610277610272610847565b611316565b81516001101561029d57816101df9160406101b294015261029781610816565b50611391565b610800565b346101b65760003660031901126101b6576102bb61066a565b6102cc6102c66107bf565b91611316565b81511561029d57602082015280511561029d576101df600160ff602882806101b2966119c7565b346101b65760003660031901126101b65761030c610744565b61031c61031761086b565b61149c565b81511561029d57602082015280511561029d5761033f61033a6108a6565b611660565b81516001101561029d57816101df9160406101b294015261035f81610816565b5061178b565b346101b65760003660031901126101b6576101b26101df610384610695565b610fb9565b346101b65760003660031901126101b6576101b26101df6103a861066a565b611052565b346101b65760003660031901126101b6576101b260406101a781516103d28382610556565b601c81527f333134313539323635333538393739333233383436323634333338330000000060208201526110eb565b346101b65760003660031901126101b6576101b26101df610420610613565b611184565b346101b65760003660031901126101b65761043e610744565b61044961031761086b565b81511561029d57602082015280511561029d5761046761033a6108a6565b9080516001101561029d576000816101b29360406101df94015261048a81610816565b506118ba565b346101b65760003660031901126101b6576104a9610744565b6104b161126d565b81511561029d57602082015280511561029d576104cf610272610847565b81516001101561029d57816101df9160406101b29401526104ef81610816565b50611898565b346101b65760003660031901126101b65761050e61066a565b6105196102c66107bf565b81511561029d57602082015280511561029d576101df60016000602882806101b2966119c7565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761057857604052565b610540565b67ffffffffffffffff811161057857601f01601f191660200190565b346101b65760403660031901126101b65760043567ffffffffffffffff81116101b657366023820112156101b6578060040135906105d68261057d565b6105e36040519182610556565b82815236602484840101116101b65760006020846101b29560246101df9601838601378301015260243590610ab1565b60405190610622606083610556565b603382527203032383834313937313639333939333735313606c1b6040837f333134313539323635333538393739333233383436323634333338333237393560208201520152565b60405190610679604083610556565b600d82526c48656c6c6f2c20776f726c642160981b6020830152565b604051906106a4606083610556565b603782527f3130302e303025204f5045524154494f4e533a2b2d2a2f0000000000000000006040837f444f4c4c41522d414d4f554e543a2433392e38372050455243454e544147453a60208201520152565b67ffffffffffffffff81116105785760051b60200190565b604051906080820182811067ffffffffffffffff8211176105785760405260006060838281528260208201528160408201520152565b604051606091906107558382610556565b6002815291601f19018260005b82811061076e57505050565b60209061077961070e565b82828501015201610762565b60405190610794602083610556565b600080835282815b8281106107a857505050565b6020906107b361070e565b8282850101520161079c565b604080519091906107d08382610556565b6001815291601f19018260005b8281106107e957505050565b6020906107f461070e565b828285010152016107dd565b634e487b7160e01b600052603260045260246000fd5b80516001101561029d5760400190565b80511561029d5760200190565b805182101561029d5760209160051b010190565b60405190610856604083610556565b6006825265e4b8ade6968760d01b6020830152565b6040519061087a604083610556565b601a82527f5448452053515541524520524f4f54204f46203220495320312e0000000000006020830152565b604051906108b5606083610556565b60328252710e0c0dce0d4d8e4d8dcc4e0dcd4ccdcd8e4d60721b6040837f343134323133353632333733303935303438383031363838373234323039363960208201520152565b634e487b7160e01b600052601160045260246000fd5b600181901b91906001600160ff1b0381160361092a57565b6108fc565b90602d820291808304602d149015171561092a57565b90600a820291808304600a149015171561092a57565b9060038202918083046003149015171561092a57565b908160190291601983040361092a57565b908160031b918083046008149015171561092a57565b90611f25820291808304611f25149015171561092a57565b90610537820291808304610537149015171561092a57565b908160021b918083046004149015171561092a57565b908160011b918083046002149015171561092a57565b9060288202918083046028149015171561092a57565b8181029291811591840414171561092a57565b906007820180921161092a57565b906001820180921161092a57565b603001908160301161092a57565b600401908160041161092a57565b906002820180921161092a57565b906005820180921161092a57565b90600a820180921161092a57565b906003820180921161092a57565b9190820180921161092a57565b90610aad6020928281519485920161010c565b0190565b610aba81611afb565b610ba9610c58610ad2610acc86610912565b84610a8d565b610c4a610c21610bde610bc3610bb6610af3610aed87611b87565b96611b87565b610ba3604051998a98610ba3610b89610b4260208d016026907f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555481526523169c111f9f60d11b60208201520190565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f3230815274181817b9bb3391103b32b939b4b7b71e911897189160591b602082015260350190565b6d0103b34b2bba137bc1e91181018160951b8152600e0190565b90610a9a565b600160fd1b815260010190565b601160f91b815260010190565b6e1039ba3937b5b29e913737b732911f60891b8152600f0190565b7f3c726563742077696474683d223130302522206865696768743d223130302522815270103334b6361e9111a3232323232311179f60791b602082015260310190565b7f3c706174682066696c6c3d22233030303030302220643d220000000000000000815260180190565b03601f198101835282610556565b9260005b828110610c995750505050610c96610c8191610c4a6040519384926020840190610a9a565b6811179f1e17b9bb339f60b91b815260090190565b90565b60005b838110610cac5750600101610c5c565b610cb7828287611c39565b610cc4575b600101610c9c565b94610d0d610d3b600192610c4a610d27610ce6610ce1898d610a8d565b611b87565b610ba3610d1a610cf9610ce18c8c610a8d565b92610ba3604051998a9860208a0190610a9a565b604d60f81b815260010190565b600b60fa1b815260010190565b673418bb18b41698bd60c11b815260080190565b959050610cbc565b805115610dde57610d526107bf565b90610d5c81611cc8565b15610d905760036028600182610c9695610d768396611660565b610d7f82610826565b52610d8981610826565b505b6119c7565b610d9981611d14565b15610db35760036028600182610c9695610d76839661149c565b610dbc90611316565b81511561029d57600360286001828582956020610c96980152610d8981610826565b50610c966001600360288282610d8b610785565b805115610e7357610e016107bf565b90610e0b81611cc8565b15610e255760ff6028600180610c9695610d768296611660565b610e2e81611d14565b15610e485760ff6028600180610c9695610d76829661149c565b610e5190611316565b81511561029d5760ff60286001808581956020610c96980152610d8981610826565b50610c96600160ff60288280610d8b610785565b805115610f0b57610e966107bf565b90610ea081611cc8565b15610ebb576002602860016000610c9695610d768396611660565b610ec481611d14565b15610edf576002602860016000610c9695610d76839661149c565b610ee890611316565b81511561029d5760026028600160008582956020610c96980152610d8981610826565b50610c96600160026028826000610d8b610785565b805115610fa457610f2f6107bf565b90610f3981611cc8565b15610f545760ff602860016003610c9695610d768396611660565b610f5d81611d14565b15610f785760ff602860016003610c9695610d76839661149c565b610f8190611316565b81511561029d5760ff6028600160038582956020610c96980152610d8981610826565b50610c96600160ff6028826003610d8b610785565b80511561103d57610fc86107bf565b90610fd281611cc8565b15610fed576000602860016003610c9695610d768396611660565b610ff681611d14565b15611011576000602860016003610c9695610d76839661149c565b61101a90611316565b81511561029d5760006028600160038582956020610c96980152610d8981610826565b50610c96600160006028826003610d8b610785565b8051156110d6576110616107bf565b9061106b81611cc8565b156110865760ff602860016000610c9695610d768396611660565b61108f81611d14565b156110aa5760ff602860016000610c9695610d76839661149c565b6110b390611316565b81511561029d5760ff6028600160008582956020610c96980152610d8981610826565b50610c96600160ff6028826000610d8b610785565b80511561116f576110fa6107bf565b9061110481611cc8565b1561111f5760026005806003610c9695610d76600096611660565b61112881611d14565b156111435760026005806003610c9695610d7660009661149c565b61114c90611316565b81511561029d5760026005806003856000956020610c96980152610d8981610826565b50610c96600060026005806003610d8b610785565b805115611205576111936107bf565b9061119d81611cc8565b156111b75760036028600180610c9695610d768296611660565b6111c081611d14565b156111da5760036028600180610c9695610d76829661149c565b6111e390611316565b81511561029d57600360286001808581956020610c96980152610d8981610826565b50610c966001600360288280610d8b610785565b6040805190919061122a8382610556565b6001815291601f1901366020840137565b906112458261057d565b6112526040519182610556565b8281528092611263601f199161057d565b0190602036910137565b61127561070e565b906007825260006020830152611289611219565b60006007601a825b808312156112a85750505060608401526040830152565b9091926112c16112c791600185871c166112ce5761148d565b93611d56565b9190611291565b8060031c6113106112e160078416611d68565b60ff60016112ef858d61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b16861a918961141b565b5361148d565b9061131f61070e565b9161132a81516120db565b600160ff1b811461134c57600484528151602085015260608401526040830152565b60405162461bcd60e51b815260206004820152601d60248201527f5152436f64653a2062797465207365676d656e7420746f6f206c6f6e670000006044820152606490fd5b6001610c96916118ba565b156113a357565b60405162461bcd60e51b815260206004820152602560248201527f5152436f64653a20616c7068616e756d65726963207365676d656e7420746f6f604482015264206c6f6e6760d81b6064820152608490fd5b634e487b7160e01b600052601260045260246000fd5b8115611416570490565b6113f6565b90815181101561029d570160200190565b1561143357565b60405162461bcd60e51b815260206004820152602c60248201527f5152436f64653a20696e76616c6964206368617220696e20616c7068616e756d60448201526b195c9a58c81cd959db595b9d60a21b6064820152608490fd5b600019811461092a5760010190565b906114a561070e565b918051906114b28261211e565b906114c3600160ff1b83141561139c565b600285528260208601526114ef6114ea6114e4606088019460008652610a1d565b60031c90565b61123b565b92600091829183915b81831061152657505050611510575b50506040830152565b61151d9083835191611ede565b90523880611507565b9091929361157461156a61156f61157a9361156361155e61155861154a8b8a61141b565b516001600160f81b03191690565b60f81c90565b6121aa565b939061142c565b61092f565b610a8d565b9461148d565b926002841461158e575b60010191906114f8565b92509261159e9086865191611e35565b84526000928392611584565b156115b157565b606460405162461bcd60e51b815260206004820152602060248201527f5152436f64653a206e756d65726963207365676d656e7420746f6f206c6f6e676044820152fd5b156115fc57565b60405162461bcd60e51b8152602060048201526024808201527f5152436f64653a206e6f6e2d646967697420696e206e756d65726963207365676044820152631b595b9d60e21b6064820152608490fd5b60ff602f199116019060ff821161092a57565b9061166961070e565b91805161167581612164565b90611686600160ff1b8314156115aa565b600185528060208601526116a76114ea6114e4606088019460008652610a1d565b92600090819282915b8183106116f35750505083826116cc575b505050506040830152565b6116e06116db6116e89461095b565b610a2b565b84519261201f565b9052388080836116c1565b9091939261174861174e9161174261173c61173661171761155861154a8c8a61141b565b9361173160ff86166030811015908161177f575b506115f5565b610945565b9261164d565b60ff1690565b90610a8d565b9361148d565b9360038514611762575b60010191906116b0565b9350916117729086865191611eab565b8452600092839290611758565b6039915011153861172b565b61179a60286001600084612274565b90911561188d5760016117af918360006122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5783916117e2839261245a565b81858180826117f08661123b565b9b6117fb8d9761123b565b9c8d966118079261249c565b916118129287612576565b5061181c93612610565b61182582612354565b95828794926118348694612354565b926118408584846126d6565b848361184b8461281f565b60031c611857936128af565b8282611864868483612a01565b61186d926126d6565b61187992600092612ea6565b600061188493612f3c565b610c96916130bd565b505050610c96611219565b6118a6602860018084612274565b90911561188d5760016117af9183826122f9565b906118c9602860018385612274565b91929092156119bb576118df91836001926122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5761190f9061245a565b818381808261191d8661123b565b996119288b9761123b565b9a8b966119349261249c565b9161193f9287612576565b5061194993612610565b828061195481612354565b8096819461196184612354565b9161196d8486846126d6565b83856119788461281f565b60031c611984936128af565b8184611991858483612a01565b61199a926126d6565b6119a686848484612cda565b926119b2928492612ea6565b61188493612f3c565b50505050610c96611219565b93926119d591928386612274565b90959115611aed57856119e7936122f9565b91819360ff81166103fc8260021b16958187046004148215171561092a576011870180971161092a578695611a1c879361245a565b8482818082611a2a8661123b565b9a611a358c9761123b565b9b8c96611a419261249c565b91611a4c9287612576565b50611a5693612610565b611a5f83612354565b9788968795611a6d83612354565b97611a798885846126d6565b8784611a848461281f565b60031c611a90936128af565b8783611a9d898483612a01565b611aa6926126d6565b60ff1660ff1498611acb96610c969a611ad0575b918491611ac693612ea6565b612f3c565b6130bd565b90935081611ae384611ac6948785612cda565b9491909250611aba565b505050505050610c96611219565b80511580159081611b64575b5015611b2657611b1860ff91610826565b8160f81b90511660f81c1690565b60405162461bcd60e51b81526020600482015260166024820152755152436f64653a20696e76616c6964207172636f646560501b6044820152606490fd5b905061029d57602081015160f81c151538611b07565b801561092a576000190190565b908115611c1857600082805b611bf9575080611ba3849261123b565b915b611bae57509150565b611bba611bf291611b7a565b93611bdd611bcd61173c600a8406610a39565b60f81b6001600160f81b03191690565b60001a611bea868561141b565b53600a900490565b9283611ba5565b9290611c07611c0f9161148d565b93600a900490565b80939193611b93565b9050604051611c28604082610556565b60018152600360fc1b602082015290565b909181511561029d576020820190815160f81c80851090811591611cbd575b50611cb45782511561029d57611c72915160f81c90610a0a565b91820180921161092a57816007611ca161155861154a611cae95611c9b6116db60019960031c90565b9061141b565b911660ff809216901c1690565b16151590565b50505050600090565b905081101538611c58565b60005b8151811015611d0d57611cde818361141b565b5160f81c60308110908115611d02575b50611cfb57600101611ccb565b5050600090565b603991501138611cee565b5050600190565b60005b8151811015611d0d57611d36611d2d828461141b565b5160f81c6121aa565b5015611cfb57600101611d17565b90600319820191821360011661092a57565b600160ff1b811461092a576000190190565b600703906007821161092a57565b60001981019190821161092a57565b600803906008821161092a57565b60071981019190821161092a57565b60011981019190821161092a57565b600a1981019190821161092a57565b60091981019190821161092a57565b60361981019190821161092a57565b60231981019190821161092a57565b60061981019190821161092a57565b600e0390600e821161092a57565b600e1981019190821161092a57565b60031981019190821161092a57565b9190820391821161092a57565b600a915b6000831215611e485750505090565b9091926112c1611e6191600185871c16611e685761148d565b9190611e39565b8060031c611310611e7b60078416611d68565b60ff6001611e89858a61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b1660001a918661141b565b6009915b6000831215611ebe5750505090565b9091926112c1611ed791600185871c16611e685761148d565b9190611eaf565b6005915b6000831215611ef15750505090565b9091926112c1611f0a91600185871c16611e685761148d565b9190611ee2565b6003915b6000831215611f245750505090565b9091926112c1611f3d91600185871c16611e685761148d565b9190611f15565b6000915b6000831215611f575750505090565b9091926112c1611f7091600185871c16611f775761148d565b9190611f48565b8060031c611310611f8a60078416611d68565b60ff600181611f99868b61141b565b5160f81c16921b1660ff60f81b911760f81b1660001a918661141b565b60001981019150811360011661092a575b6000811215611fd4575090565b90611fe1611fe79161148d565b91611d56565b611fc7565b6007915b6000831215611fff5750505090565b9091926112c161201891600185871c16611e685761148d565b9190611ff0565b9190600019810190811360011661092a5791905b60008312156120425750505090565b9091926112c161205b91600185871c166120625761148d565b9190612033565b8060031c6113106120a461207860078516611d68565b6120936001612087868b61141b565b5160f81c921b60ff1690565b1760f81b6001600160f81b03191690565b60001a918661141b565b908160030191821260011661092a57565b9190916000838201938412911290801582169115161761092a57565b6000617fff821161211357506000908060031b91508082056008149015171561092a57617fff811361210a5790565b50600160ff1b90565b50600160ff1b919050565b617fff811161210a57600b810290808205600b149015171561092a576001810190600060018312911290801582169115161761092a5760029005617fff811361210a5790565b617fff811161210a57600a810290808205600a149015171561092a576002810190600060028312911290801582169115161761092a5760039005617fff811361210a5790565b60ff16602081108015612259575b61225057604051906121cb606083610556565b603b82527f250000002627000000002829002a2b2c0102030405060708090a2d000000000060208301527e0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232400000000006040830152601f190160ff811161092a5761155861154a60ff938461223b94169061141b565b1680156122505761224b90611d76565b600191565b50600090600090565b50605a81116121b8565b60ff1660ff811461092a5760010190565b9092915b612282848261237c565b8060031b908082046008149015171561092a5761229f82846123bb565b90600082121590816122ee575b506122e2575060ff831660ff821610156122d3576122cc61228291612263565b9050612278565b50505050600090600090600090565b60019591945092509050565b9050811115386122ac565b921561234f5760015b600360ff821611156123145750505090565b61231e818361237c565b8060031b908082046008149015171561092a57831115612347575b61234290612263565b612302565b925082612339565b505090565b9061235e826106f6565b61236b6040519182610556565b8281528092611263601f19916106f6565b9060ff806123a061238c8561281f565b60031c9461239a8186613242565b946133e5565b1691160260ff811690810361092a57810390811161092a5790565b600090815b8151831015612453576123e18460ff6123d98686610833565b515116613499565b9060206123ee8585610833565b5101516001831b11156124455761241f61240a61242593610a47565b60606124168787610833565b51015190610a8d565b906120bf565b91617fff831361243857600101916123c0565b50600160ff1b9392505050565b50600160ff1b949350505050565b9250505090565b8060021b908082046004149015171561092a576011810180911161092a5761248460009180610a0a565b6007810180911161092a57610c96915060031c610a2b565b91909260009160005b845181101561256e576124f76124d76124c18388969998610833565b5195846124d261173c895160ff1690565b611f11565b8360208701516124f1896124ec8a5160ff1690565b613499565b9061201f565b946000966040606087019601965b865189101561255e57612556600191866125518461254a8e61253f8f61253861155861154a60079351611c9b8760031c90565b9216611d68565b60ff809216901c1690565b1660ff1690565b611f44565b980197612505565b91975093955093506001016124a5565b505091509150565b9192612582919361237c565b918260031b928084046008149015171561092a5780830383811161092a576125d291838260046125b794911161260857611fb6565b826125cd6125c760078416611d85565b60071690565b611fb6565b9160ec5b8184106125e35750505090565b6125f460ff60ec9216948486611fec565b93036126015760116125d6565b60ec6125d6565b506004611fb6565b9260ff61261d83856133e5565b169161264260ff61262e8387613242565b16946126398361281f565b60031c9261237c565b9280156114165780820681039181831161092a5785612664836126699361140c565b611e28565b92612673866135d3565b60009690875b84891061268c5750505050505050505050565b6126c38160019261156f8b8b8f8f8c908c8f938c8e918685106000146126cb576126bb60ff60005b1689610a8d565b9b8c916136d3565b980197612679565b6126bb60ff8f6126b4565b9190916126e382846137a1565b6126ed82846137d3565b6126f682613819565b6127088261270385611d93565b61384b565b61271a8261271585611d93565b613881565b6127238161394e565b60005b8181106127655750505060ff600791161015612740575050565b61275e826127598361275461276396611db1565b6138eb565b611db1565b613921565b565b801560005b83811061277b575050600101612726565b806001918887868680612817575b80156127fe575b80156127e4575b6127db576127c461173c61155861154a6127d5976127c96127c461173c61155861154a6127cf9a8c61141b565b611da2565b9661141b565b906138af565b0161276a565b505050506127d5565b506127ee89611d76565b8114801561279757508315612797565b50868015612790575061281089611d76565b8414612790565b508315612789565b60ff81169060041b610ff0166080810180911161092a578161284091610a0a565b906040820180921161092a5781600282101561285b57505090565b90915060079061289c9061289661289161287b858704610a55565b610a55565b61288c61288782610971565b611dc0565b610a0a565b611dcf565b90611e28565b9110156128a65790565b610c9690611dde565b9190916000906128be83611d76565b60018110156128d0575b505050505050565b600681146129d4575b60005b8481106128ff5750600281106128fa576128f590611da2565b6128be565b6128c8565b60009691965b6002811061291957506001019590956128dc565b6129238189611e28565b600261292e8a610a2b565b166129ce576129408361266489611d76565b61295261294e828488613a3c565b1590565b806129bd575b612967575b5050600101612905565b956129b06129b592600194986129a961298f61155861154a6129898860031c90565b8d61141b565b60ff61299d60078816611d68565b91166001911c16151590565b9188613bc4565b61148d565b94903861295d565b506129c789610982565b8710612958565b82612940565b5060056128d9565b6001600160ff1b03811461092a5760010190565b600160ff1b811461092a5760000390565b92909260075b612a1082611ded565b811015612a345780612a25612a2f9286613bf0565b6128768186613c02565b612a07565b5090926003195b6004811315612c0b5750612a4e8161394e565b60005b818110612b005750505060ff166007811015612a6c57505050565b8060005b600c8110612adf5750600c1b1760005b60068110612a8e5750505050565b60005b60038110612aa25750600101612a80565b91612ad8600191612ad2612ab98661156f89611db1565b848316151590612acb8288838d613bc4565b868a613bc4565b60011c90565b9201612a91565b91600190612af8612af382841b92600b1c90565b610998565b189201612a70565b801560005b838110612b16575050600101612a51565b8180612c03575b8015612bea575b8015612bd0575b612bc8576000195b6001811315612b4757506001905b01612b05565b6000195b898784876001851315612b6b575050505050612b66906129dc565b612b33565b91612ba786612b9c61173c61155861154a8a9997612ba1612bba9c612b9c61173c61155861154a612bb59f8e61141b565b6120bf565b9761141b565b9084159283612bbf57613bc4565b6129dc565b612b4b565b87159350613bc4565b600190612b41565b50612bda84611d76565b83148015612b2b57508015612b2b565b50818015612b245750612bfc84611d76565b8114612b24565b508015612b1d565b600081126003195b6004811315612c2c575050612c27906129dc565b612a3b565b612c71906000811215612cd457612c42816129f0565b8315612cce57612c51856129f0565b80821315612cc757505b60028114908115612cbc575b50612c76576129dc565b612c13565b612c93612c82826120ae565b612c8b866120ae565b90888a613c2c565b612ca3612c8282612b9c89611d44565b612bb5612caf826120ae565b612c8b86612b9c8a611d44565b600491501438612c67565b9050612c5b565b84612c51565b80612c42565b600094936000199390929091865b600860ff821610612cfb57505050505050565b612d0781858585612ea6565b612d1383858388612f3c565b6000612d216001861b611d76565b6001861115612ea057612d3e6001612d3888611d76565b1b611d76565b915b9160005b878110612e7c575060005b878110612e635750600090815b888110612e43575060009283916000198a01905b818410612dee5750505050600a60039160148980029102828202808211600114612de757035b600091908101600019010480612ddb575b500291020101868110612dce575b50600181612dc760ff93878787612ea6565b0116612ce8565b9097509450866001612db5565b60001901905038612da7565b9003612d96565b90919294600190612e38838c87602081818d60051b850101511692878d0160051b0101511690888119168983191680881c169080881c16169180871c169080871c16161716613cbf565b019501929190612d70565b91600190612e5b8560208660051b8c01015116613cbf565b019201612d5c565b92612e756001916117428a878b614693565b9301612d4f565b92612e996001916117428a86612e92898d610833565b51166145c2565b9301612d44565b81612d40565b929091926001841b91600019830192831161092a5760005b858110612ecd57505050505050565b8084612edb60019385613d09565b612ee58387610833565b51191616612ef38288610833565b5118612eff8288610833565b5201612ebe565b604051906080612f168184610556565b368337565b6040519060e0612f168184610556565b90600481101561029d5760051b0190565b612f86612f8061173c612f7960ff949897969885612f58612f06565b60018152600060208201526003604082015291600260608401521690612f2b565b5160ff1690565b60031b90565b9116178060005b600a811061309c5750600a1b176154121860005b60058111156130815750612fbe600682901c600116151583613a8d565b612fd1600782901c600116151583613ad8565b612fe4600882901c600116151583613b25565b60095b600f811061306c575060005b60088110613044575060085b600f811061301c5750506130166127639293611d93565b90613bb2565b8061303e61302f60019361156f89611e0a565b84831c60011615159086613a51565b01612fff565b8061306661305760019361266489611d76565b84831c60011615159086613b70565b01612ff3565b8061307b613057600193611dfc565b01612fe7565b613097906129b083821c60011615158286613a51565b612fa1565b916001906130b56130b082841b9260091c90565b6109b0565b189201612f8d565b91906130da6114ea6116db6114e46130d58580610a0a565b610a1d565b9260f882901b6001600160f81b03191660001a6130f685610826565b5360005b82811061310657505050565b60208160051b830101518382029060005b858110613129575050506001016130fa565b8060018381931c1661313c575b01613117565b80840182600760218360031c8d010192161b815160001a179053613136565b6040519061316a606083610556565b602982527fff0a101a1218101216161a1e161618181c1c1a1a1a1a1c1c1c1c1c1c1c1c1c1c60208301526807070707070707070760ba1b6040830152565b604051906131b7606083610556565b602982527fff0d16121a1218121614181c1a18141e181c1c1a1e1c1e1e1e1e1c1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60405190613204606083610556565b602982527fff111c1610161c1a1a181c181c1618181e1c1c1a1c1e181e1e1e1e1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60ff16801561329f576001811461328a576002146132765761155861154a610c969260ff61326e6131f5565b91169061141b565b61155861154a610c969260ff61326e6131a8565b5061155861154a610c969260ff61326e61315b565b5061155861154a610c969260ff604051916132bb606084610556565b602983527fff070a0f141a1214181e1214181a1e16181c1e1c1c1c1c1e1e1a1c1e1e1e1e1e6020840152680f0f0f0f0f0f0f0f0f60b91b6040840152169061141b565b6040519061330d606083610556565b602982526821232526282b2d2f3160b81b6040837fff01010102020404040505050809090a0a0b0d0e10111112141517191a1c1d1f60208201520152565b6040519061335a606083610556565b60298252680b4c0ccd4e0ecf905160ba1b6040837fff01010202040406060808080a0c100c11101215141717191b1d22222326282b60208201520152565b604051906133a7606083610556565b602982526836393c3f42464a4d5160b81b6040837fff010102040404050608080b0b101012101315191919221e202325282a2d303360208201520152565b60ff16801561343a5760018114613425576002146134115761155861154a610c969260ff61326e613398565b61155861154a610c969260ff61326e61334b565b5061155861154a610c969260ff61326e6132fe565b5061155861154a610c969260ff60405191613456606084610556565b602983527fff01010101010202020204040404040606060607080809090a0c0c0c0d0e0f1060208401526811121313141516181960b81b6040840152169061141b565b906134b16134aa60ff809316610a1d565b6011900490565b911660018114613569576002811461354b576004811461353b576008811461351d5760079150146135185760405162461bcd60e51b81526020600482015260146024820152735152436f64653a20696e76616c6964206d6f646560601b6044820152606490fd5b600090565b5080156135355760011461353057600c90565b600a90565b50600890565b501561354657601090565b600890565b5080156135635760011461355e57600d90565b600b90565b50600990565b5080156135815760011461357c57600e90565b600c90565b50600a90565b1561358e57565b60405162461bcd60e51b815260206004820152601e60248201527f5152436f64653a20525320646567726565206f7574206f662072616e676500006044820152606490fd5b906001821015806136c8575b6135e890613587565b6135f18261123b565b91600161360661360083611d76565b8561141b565b53600060015b82821061361857505050565b60005b838110613636575061362e6001916143d9565b91019061360c565b80613655611bcd8461365061155861154a6001978d61141b565b614456565b60001a613662828961141b565b538461366d82610a2b565b10613679575b0161361b565b6136b561368c61155861154a848b61141b565b6136a461155861154a61369e86610a2b565b8c61141b565b1860f81b6001600160f81b03191690565b60001a6136c2828961141b565b53613673565b50601e8211156135df565b919399979498928a6136e7918684866144c2565b9460005b8581106137475750505050505060005b86811061370b5750505050505050565b8061371b61154a6001938561141b565b61374061373561372b878a610a8d565b6117428986610a0a565b9160001a918961141b565b53016136fb565b808b61378b61376161375b8d600196610a0a565b8c610a8d565b8589851015613792575b5061378261154a61377c868a610a8d565b8a61141b565b60001a9261141b565b53016136eb565b61379b91611e28565b8561376b565b9060005b8281106137b157505050565b8060406137c060019385610833565b51176137cc8285610833565b52016137a5565b6001901b90600019820191821161092a5760005b600181106137f457505050565b80600191600601613812856138098387610833565b51179185610833565b52016137e7565b60005b60098110613828575050565b806101ff61383860019385610833565b51176138448285610833565b520161381c565b60ff901b9060005b6009811061386057505050565b808361386e60019385610833565b511761387a8285610833565b5201613853565b9060005b6008811061389257505050565b8060019184016138a86101ff6138098387610833565b5201613885565b601f909291921b60005b600581106138c75750505050565b8060019185016138e4846138db8388610833565b51179186610833565b52016138b9565b6007901b9060005b6006811061390057505050565b808361390e60019385610833565b511761391a8285610833565b52016138f3565b9060005b6003811061393257505050565b806001918401613947603f6138098387610833565b5201613925565b60408051919061395e8184610556565b60078352601f190136602084013760ff16908060018314613a3357509161398760078304610a55565b926139d86139d36139cd6139c86139b16139ac6139a389610982565b6117428b61095b565b610a63565b6139c26139bd8a6109c8565b611e19565b9061140c565b6109de565b946109c8565b610a71565b936139e281611d76565b60f886901b6001600160f81b03191660001a6139fe828561141b565b5360018114613a205784613a14613a1a92611b7a565b96611e28565b946139e2565b50925092506006613a3084610826565b53565b91505090600090565b600192613a4891610833565b51901c16151590565b9115613a735780610100613a68613a709385610833565b511792610833565b52565b613a709061010019613a858285610833565b511692610833565b9015613ab25780516007101561029d57610100818101511790613a7090600790610833565b80516007101561029d5761010081018051915161010019909216916007101561029d5752565b9015613aff5780516008101561029d576101208101516101001790613a7090600890610833565b80516008101561029d5761012081018051915161010019909216916008101561029d5752565b9015613b4b5780516008101561029d5761012081015160801790613a7090600890610833565b80516008101561029d57610120810180519151608019909216916008101561029d5752565b9115613b895760086001613a70921b613a688285610833565b81516008101561029d5760016020600860051b840101911b1981511691516008101561029d5752565b90613a7090610100613a688285610833565b9290919015613bde576001613a70921b613a688285610833565b6001613a70921b19613a858285610833565b90613a7090604019613a858285610833565b9081516006101561029d5760016020600660051b840101911b1981511691516006101561029d5752565b91929060008412159081613c73575b81613c67575b81613c5d575b50613c5157505050565b61276392600092613bc4565b9050811238613c47565b60008312159150613c41565b8085129150613c3b565b670f0f0f0f0f0f0f0f670101010101010101916755555555555555558160011c169003673333333333333333808260021c169116018060041c01160260381c90565b613ccb8160c01c613c7d565b613ce167ffffffffffffffff8360801c16613c7d565b0190613d0467ffffffffffffffff613cfd818460401c16613c7d565b9216613c7d565b010190565b60ff1690811561410a57600182146140f957600282146140d357600382146140545760048214614025576001811690600390069160058114613fa457600614613e875780158080613e7f575b613e6a578080613e60575b613e395780613e2f575b613e0957600114908180613e01575b613ddb5781613dd0575b50613dac577fe38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e90565b7f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e3890565b600191501438613d83565b50507faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b508015613d79565b50507f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b5060028214613d6a565b5050507f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b5060018314613d60565b5050506000805160206148d983398151915290565b508215613d55565b80158080613f9c575b613f93578080613f89575b613f625780613f58575b613f3257600114908180613f2a575b613f165781613f0b575b50613ee7577f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b7f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b600191501438613ebe565b50506000805160206148d983398151915290565b508015613eb4565b50507fb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db90565b5060028214613ea5565b5050507fdb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6d90565b5060018314613e9b565b50505060001990565b508215613e90565b5015808061401d575b61401557613ff05715613fde577f104104104104104104104104104104104104104104104104104104104104104190565b6000805160206148d983398151915290565b507f924924924924924924924924924924924924924924924924924924924924924990565b505060001990565b508115613fad565b60019150811c16613dac577f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b6003900690508061408457507f924924924924924924924924924924924924924924924924924924924924924990565b6001036140af577f492492492492492492492492492492492492492492492492492492492492492490565b7f249249249249249249249249249249249249249249249249249249249249249290565b50507f924924924924924924924924924924924924924924924924924924924924924990565b600116151590506135185760001990565b60011615159050614127576000805160206148d983398151915290565b7faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b6040519061415b61012083610556565b61010082527fcb595fb09ca9a0510bf516eb7a752cd74faed5e9e6e7ade874d6f4eaa85058af610100837d011902321ac603df33ee1b68c74b0464e00e348def811cc169f8c8084c7160208201527f058a652fe1240f2135938edaf01282451db5c27d6a27f9b9c99a09784de472a660408201527f06bf8b6266dd30fde29825b31091228836d094ce8f96dbbdf1d2135c8338464060608201527f1e42b6a3c3487e6e6b3a2854fa85ba3dca5e9b9f0a15792b4ed4e5ac73f3a75760808201527f0770c0f78c80630d674adeed31c5fe18e3a5997726b8b47c114492d92320892e60a08201527f373fd15b95bccfcd908797b2dcfcbe61f256d3ab142a5d9e843c3953476d41a260c08201527f1f2d43d8b77ba476c41749ec7f0c6ff66ca13b52299d55aafb6086b1bbcc3e5a60e08201520152565b604051906142a161012083610556565b61010082527f122448903d7af4f5f7f3fbebcb8b0b162c58b07dfae9cf831b366cd8ad478e01610100837f01020408102040801d3a74e8cd8713264c982d5ab475eac98f03060c183060c060208201527f9d274e9c254a94356ad4b577eec19f23468c050a142850a05dba69d2b96fdea160408201527f5fbe61c2992f5ebc65ca890f1e3c78f0fde7d3bb6bd6b17ffee1dfa35bb671e260608201527fd9af4386112244880d1a3468d0bd67ce811f3e7cf8edc7933b76ecc5973366cc60808201527f85172e5cb86ddaa94f9e214284152a54a84d9a2952a455aa49923972e4d5b77360a08201527fe6d1bf63c6913f7efce5d7b37bf6f1ffe3dbab4b963162c495376edca557ae4160c08201527f82193264c88d070e1c3870e0dda753a651a259b279f2f9efc39b2b56ac458a0960e08201520152565b60ff168015801561444e575b614448576143fa906143f561414b565b61141b565b5160f81c61440661414b565b9081516002101561029d5761154a6115589160ff6022610c9695018160f81b90511660f81c160160ff81101561443f575b6143f5614291565b60fe1901614437565b50600090565b5060006143e5565b60ff16801580156144b7575b611cfb57610c969160ff61447b6144b0936143f561414b565b5160f81c9161449861448b61414b565b838060f81b93169061141b565b511660f81c160160ff81101561443f576143f5614291565b5160f81c90565b5060ff821615614462565b949392946144cf8461123b565b956144d8614291565b9060206144e361414b565b94818a019401019260005b8681106144ff575050505050505050565b6001825160001a865160001a1895019460001989018b60005b8281106145a85750600091508a01601f015360005b89811061453e5750506001016144ee565b808c60206001938801015160001a82858c818402614562575b50505050500161452d565b60208094928180948401015160001a9201015160001a0160fe811161459f575b8b01015160001a92010190815160001a1890538c3882858c614557565b60fe1901614582565b80600192016020602182015160001a910153018c90614518565b60009291836145cf612f1b565b94809381905b8482106145f657505091610c9694956145f192611742946148a1565b6109f4565b90949281861c60011615158315898115830361465b575050506146189061148d565b92600584036146355761462c600191610a7f565b955b01906145d5565b9460058411614647575b60019061462e565b9461465360019161148d565b95905061463f565b61466d9294955087919398969861476d565b61467c575b906001809361462e565b9361468d906117426145f1896147be565b93614672565b92916000806146a0612f1b565b95600182951b9082915b8583106146c75750505091610c9694956145f192611742946148a1565b90919593816146d68885610833565b5116151584158a81158303614735575050506146f19061148d565b936005850361470f57614705600191610a7f565b965b0191906146aa565b9560058511614721575b600190614707565b9561472d60019161148d565b969050614719565b6147479294965088919399979961476d565b614756575b9160018094614707565b94614767906117426145f18a6147be565b9461474c565b90918251156147af575b509060a08101805160c08301526080820190815190526060820190815190526040820190815190526020820190815190528151905252565b810180911161092a5738614777565b60208101518015159081614893575b8161487c575b8161486e575b81614860575b600092828061484d575b8061483f575b614836575b8261481e575b82614812575b50506148095790565b610c969061148d565b51101590503880614800565b915060c082015161482e826109c8565b1115916147fa565b600193506147f4565b508160c082015110156147ef565b508051614859836109c8565b11156147e9565b60a0830151811491506147df565b6080830151811491506147d9565b9050606082015161488c8261095b565b14906147d3565b6040830151811491506147cd565b8284916148c6575b50810180911161092a57610c9692826148c19261476d565b6147be565b6148cf9261476d565b600082826148a956fe5555555555555555555555555555555555555555555555555555555555555555a2646970667358221220a2ab092f927a5c9c8602049f4de81c27d044d7e87118f9061175de3f9a165b5564736f6c63430008220033","deployedBytecode":"0x6080604052600436101561001257600080fd5b60003560e01c80631fee786b1461010757806328cbf77d146101025780633ced44b5146100fd5780637d24d9b7146100f85780638d042b1a146100f35780638fca6de6146100ee578063913583f2146100e9578063ae324b5d146100e4578063b66bb332146100df578063bb20f6be146100da578063cf68df27146100d5578063da4b5c89146100d0578063e0b41de5146100cb578063e660ad3f146100c65763fb0f4bf3146100c157600080fd5b610599565b6104f5565b610490565b610425565b610401565b6103ad565b610389565b610365565b6102f3565b6102a2565b610233565b61020f565b6101eb565b6101bb565b61015a565b60005b83811061011f5750506000910152565b818101518382015260200161010f565b9060208092818152019061014e8151809281855285808601910161010c565b601f01601f1916010190565b346101b65760003660031901126101b6576101b260406101a7815161017f8382610556565b601681527568747470733a2f2f7777772e6e6179756b692e696f2f60501b6020820152610d43565b90519182918261012f565b0390f35b600080fd5b346101b65760003660031901126101b6576101b26101df6101da610613565b610df2565b6040519182918261012f565b346101b65760003660031901126101b6576101b26101df61020a61066a565b610e87565b346101b65760003660031901126101b6576101b26101df61022e610695565b610f20565b346101b65760003660031901126101b65761024c610744565b61025461126d565b81511561029d57602082015280511561029d57610277610272610847565b611316565b81516001101561029d57816101df9160406101b294015261029781610816565b50611391565b610800565b346101b65760003660031901126101b6576102bb61066a565b6102cc6102c66107bf565b91611316565b81511561029d57602082015280511561029d576101df600160ff602882806101b2966119c7565b346101b65760003660031901126101b65761030c610744565b61031c61031761086b565b61149c565b81511561029d57602082015280511561029d5761033f61033a6108a6565b611660565b81516001101561029d57816101df9160406101b294015261035f81610816565b5061178b565b346101b65760003660031901126101b6576101b26101df610384610695565b610fb9565b346101b65760003660031901126101b6576101b26101df6103a861066a565b611052565b346101b65760003660031901126101b6576101b260406101a781516103d28382610556565b601c81527f333134313539323635333538393739333233383436323634333338330000000060208201526110eb565b346101b65760003660031901126101b6576101b26101df610420610613565b611184565b346101b65760003660031901126101b65761043e610744565b61044961031761086b565b81511561029d57602082015280511561029d5761046761033a6108a6565b9080516001101561029d576000816101b29360406101df94015261048a81610816565b506118ba565b346101b65760003660031901126101b6576104a9610744565b6104b161126d565b81511561029d57602082015280511561029d576104cf610272610847565b81516001101561029d57816101df9160406101b29401526104ef81610816565b50611898565b346101b65760003660031901126101b65761050e61066a565b6105196102c66107bf565b81511561029d57602082015280511561029d576101df60016000602882806101b2966119c7565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761057857604052565b610540565b67ffffffffffffffff811161057857601f01601f191660200190565b346101b65760403660031901126101b65760043567ffffffffffffffff81116101b657366023820112156101b6578060040135906105d68261057d565b6105e36040519182610556565b82815236602484840101116101b65760006020846101b29560246101df9601838601378301015260243590610ab1565b60405190610622606083610556565b603382527203032383834313937313639333939333735313606c1b6040837f333134313539323635333538393739333233383436323634333338333237393560208201520152565b60405190610679604083610556565b600d82526c48656c6c6f2c20776f726c642160981b6020830152565b604051906106a4606083610556565b603782527f3130302e303025204f5045524154494f4e533a2b2d2a2f0000000000000000006040837f444f4c4c41522d414d4f554e543a2433392e38372050455243454e544147453a60208201520152565b67ffffffffffffffff81116105785760051b60200190565b604051906080820182811067ffffffffffffffff8211176105785760405260006060838281528260208201528160408201520152565b604051606091906107558382610556565b6002815291601f19018260005b82811061076e57505050565b60209061077961070e565b82828501015201610762565b60405190610794602083610556565b600080835282815b8281106107a857505050565b6020906107b361070e565b8282850101520161079c565b604080519091906107d08382610556565b6001815291601f19018260005b8281106107e957505050565b6020906107f461070e565b828285010152016107dd565b634e487b7160e01b600052603260045260246000fd5b80516001101561029d5760400190565b80511561029d5760200190565b805182101561029d5760209160051b010190565b60405190610856604083610556565b6006825265e4b8ade6968760d01b6020830152565b6040519061087a604083610556565b601a82527f5448452053515541524520524f4f54204f46203220495320312e0000000000006020830152565b604051906108b5606083610556565b60328252710e0c0dce0d4d8e4d8dcc4e0dcd4ccdcd8e4d60721b6040837f343134323133353632333733303935303438383031363838373234323039363960208201520152565b634e487b7160e01b600052601160045260246000fd5b600181901b91906001600160ff1b0381160361092a57565b6108fc565b90602d820291808304602d149015171561092a57565b90600a820291808304600a149015171561092a57565b9060038202918083046003149015171561092a57565b908160190291601983040361092a57565b908160031b918083046008149015171561092a57565b90611f25820291808304611f25149015171561092a57565b90610537820291808304610537149015171561092a57565b908160021b918083046004149015171561092a57565b908160011b918083046002149015171561092a57565b9060288202918083046028149015171561092a57565b8181029291811591840414171561092a57565b906007820180921161092a57565b906001820180921161092a57565b603001908160301161092a57565b600401908160041161092a57565b906002820180921161092a57565b906005820180921161092a57565b90600a820180921161092a57565b906003820180921161092a57565b9190820180921161092a57565b90610aad6020928281519485920161010c565b0190565b610aba81611afb565b610ba9610c58610ad2610acc86610912565b84610a8d565b610c4a610c21610bde610bc3610bb6610af3610aed87611b87565b96611b87565b610ba3604051998a98610ba3610b89610b4260208d016026907f3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d22555481526523169c111f9f60d11b60208201520190565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f3230815274181817b9bb3391103b32b939b4b7b71e911897189160591b602082015260350190565b6d0103b34b2bba137bc1e91181018160951b8152600e0190565b90610a9a565b600160fd1b815260010190565b601160f91b815260010190565b6e1039ba3937b5b29e913737b732911f60891b8152600f0190565b7f3c726563742077696474683d223130302522206865696768743d223130302522815270103334b6361e9111a3232323232311179f60791b602082015260310190565b7f3c706174682066696c6c3d22233030303030302220643d220000000000000000815260180190565b03601f198101835282610556565b9260005b828110610c995750505050610c96610c8191610c4a6040519384926020840190610a9a565b6811179f1e17b9bb339f60b91b815260090190565b90565b60005b838110610cac5750600101610c5c565b610cb7828287611c39565b610cc4575b600101610c9c565b94610d0d610d3b600192610c4a610d27610ce6610ce1898d610a8d565b611b87565b610ba3610d1a610cf9610ce18c8c610a8d565b92610ba3604051998a9860208a0190610a9a565b604d60f81b815260010190565b600b60fa1b815260010190565b673418bb18b41698bd60c11b815260080190565b959050610cbc565b805115610dde57610d526107bf565b90610d5c81611cc8565b15610d905760036028600182610c9695610d768396611660565b610d7f82610826565b52610d8981610826565b505b6119c7565b610d9981611d14565b15610db35760036028600182610c9695610d76839661149c565b610dbc90611316565b81511561029d57600360286001828582956020610c96980152610d8981610826565b50610c966001600360288282610d8b610785565b805115610e7357610e016107bf565b90610e0b81611cc8565b15610e255760ff6028600180610c9695610d768296611660565b610e2e81611d14565b15610e485760ff6028600180610c9695610d76829661149c565b610e5190611316565b81511561029d5760ff60286001808581956020610c96980152610d8981610826565b50610c96600160ff60288280610d8b610785565b805115610f0b57610e966107bf565b90610ea081611cc8565b15610ebb576002602860016000610c9695610d768396611660565b610ec481611d14565b15610edf576002602860016000610c9695610d76839661149c565b610ee890611316565b81511561029d5760026028600160008582956020610c96980152610d8981610826565b50610c96600160026028826000610d8b610785565b805115610fa457610f2f6107bf565b90610f3981611cc8565b15610f545760ff602860016003610c9695610d768396611660565b610f5d81611d14565b15610f785760ff602860016003610c9695610d76839661149c565b610f8190611316565b81511561029d5760ff6028600160038582956020610c96980152610d8981610826565b50610c96600160ff6028826003610d8b610785565b80511561103d57610fc86107bf565b90610fd281611cc8565b15610fed576000602860016003610c9695610d768396611660565b610ff681611d14565b15611011576000602860016003610c9695610d76839661149c565b61101a90611316565b81511561029d5760006028600160038582956020610c96980152610d8981610826565b50610c96600160006028826003610d8b610785565b8051156110d6576110616107bf565b9061106b81611cc8565b156110865760ff602860016000610c9695610d768396611660565b61108f81611d14565b156110aa5760ff602860016000610c9695610d76839661149c565b6110b390611316565b81511561029d5760ff6028600160008582956020610c96980152610d8981610826565b50610c96600160ff6028826000610d8b610785565b80511561116f576110fa6107bf565b9061110481611cc8565b1561111f5760026005806003610c9695610d76600096611660565b61112881611d14565b156111435760026005806003610c9695610d7660009661149c565b61114c90611316565b81511561029d5760026005806003856000956020610c96980152610d8981610826565b50610c96600060026005806003610d8b610785565b805115611205576111936107bf565b9061119d81611cc8565b156111b75760036028600180610c9695610d768296611660565b6111c081611d14565b156111da5760036028600180610c9695610d76829661149c565b6111e390611316565b81511561029d57600360286001808581956020610c96980152610d8981610826565b50610c966001600360288280610d8b610785565b6040805190919061122a8382610556565b6001815291601f1901366020840137565b906112458261057d565b6112526040519182610556565b8281528092611263601f199161057d565b0190602036910137565b61127561070e565b906007825260006020830152611289611219565b60006007601a825b808312156112a85750505060608401526040830152565b9091926112c16112c791600185871c166112ce5761148d565b93611d56565b9190611291565b8060031c6113106112e160078416611d68565b60ff60016112ef858d61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b16861a918961141b565b5361148d565b9061131f61070e565b9161132a81516120db565b600160ff1b811461134c57600484528151602085015260608401526040830152565b60405162461bcd60e51b815260206004820152601d60248201527f5152436f64653a2062797465207365676d656e7420746f6f206c6f6e670000006044820152606490fd5b6001610c96916118ba565b156113a357565b60405162461bcd60e51b815260206004820152602560248201527f5152436f64653a20616c7068616e756d65726963207365676d656e7420746f6f604482015264206c6f6e6760d81b6064820152608490fd5b634e487b7160e01b600052601260045260246000fd5b8115611416570490565b6113f6565b90815181101561029d570160200190565b1561143357565b60405162461bcd60e51b815260206004820152602c60248201527f5152436f64653a20696e76616c6964206368617220696e20616c7068616e756d60448201526b195c9a58c81cd959db595b9d60a21b6064820152608490fd5b600019811461092a5760010190565b906114a561070e565b918051906114b28261211e565b906114c3600160ff1b83141561139c565b600285528260208601526114ef6114ea6114e4606088019460008652610a1d565b60031c90565b61123b565b92600091829183915b81831061152657505050611510575b50506040830152565b61151d9083835191611ede565b90523880611507565b9091929361157461156a61156f61157a9361156361155e61155861154a8b8a61141b565b516001600160f81b03191690565b60f81c90565b6121aa565b939061142c565b61092f565b610a8d565b9461148d565b926002841461158e575b60010191906114f8565b92509261159e9086865191611e35565b84526000928392611584565b156115b157565b606460405162461bcd60e51b815260206004820152602060248201527f5152436f64653a206e756d65726963207365676d656e7420746f6f206c6f6e676044820152fd5b156115fc57565b60405162461bcd60e51b8152602060048201526024808201527f5152436f64653a206e6f6e2d646967697420696e206e756d65726963207365676044820152631b595b9d60e21b6064820152608490fd5b60ff602f199116019060ff821161092a57565b9061166961070e565b91805161167581612164565b90611686600160ff1b8314156115aa565b600185528060208601526116a76114ea6114e4606088019460008652610a1d565b92600090819282915b8183106116f35750505083826116cc575b505050506040830152565b6116e06116db6116e89461095b565b610a2b565b84519261201f565b9052388080836116c1565b9091939261174861174e9161174261173c61173661171761155861154a8c8a61141b565b9361173160ff86166030811015908161177f575b506115f5565b610945565b9261164d565b60ff1690565b90610a8d565b9361148d565b9360038514611762575b60010191906116b0565b9350916117729086865191611eab565b8452600092839290611758565b6039915011153861172b565b61179a60286001600084612274565b90911561188d5760016117af918360006122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5783916117e2839261245a565b81858180826117f08661123b565b9b6117fb8d9761123b565b9c8d966118079261249c565b916118129287612576565b5061181c93612610565b61182582612354565b95828794926118348694612354565b926118408584846126d6565b848361184b8461281f565b60031c611857936128af565b8282611864868483612a01565b61186d926126d6565b61187992600092612ea6565b600061188493612f3c565b610c96916130bd565b505050610c96611219565b6118a6602860018084612274565b90911561188d5760016117af9183826122f9565b906118c9602860018385612274565b91929092156119bb576118df91836001926122f9565b60ff8216916103fc8160021b16928084046004148115171561092a576011840180941161092a5761190f9061245a565b818381808261191d8661123b565b996119288b9761123b565b9a8b966119349261249c565b9161193f9287612576565b5061194993612610565b828061195481612354565b8096819461196184612354565b9161196d8486846126d6565b83856119788461281f565b60031c611984936128af565b8184611991858483612a01565b61199a926126d6565b6119a686848484612cda565b926119b2928492612ea6565b61188493612f3c565b50505050610c96611219565b93926119d591928386612274565b90959115611aed57856119e7936122f9565b91819360ff81166103fc8260021b16958187046004148215171561092a576011870180971161092a578695611a1c879361245a565b8482818082611a2a8661123b565b9a611a358c9761123b565b9b8c96611a419261249c565b91611a4c9287612576565b50611a5693612610565b611a5f83612354565b9788968795611a6d83612354565b97611a798885846126d6565b8784611a848461281f565b60031c611a90936128af565b8783611a9d898483612a01565b611aa6926126d6565b60ff1660ff1498611acb96610c969a611ad0575b918491611ac693612ea6565b612f3c565b6130bd565b90935081611ae384611ac6948785612cda565b9491909250611aba565b505050505050610c96611219565b80511580159081611b64575b5015611b2657611b1860ff91610826565b8160f81b90511660f81c1690565b60405162461bcd60e51b81526020600482015260166024820152755152436f64653a20696e76616c6964207172636f646560501b6044820152606490fd5b905061029d57602081015160f81c151538611b07565b801561092a576000190190565b908115611c1857600082805b611bf9575080611ba3849261123b565b915b611bae57509150565b611bba611bf291611b7a565b93611bdd611bcd61173c600a8406610a39565b60f81b6001600160f81b03191690565b60001a611bea868561141b565b53600a900490565b9283611ba5565b9290611c07611c0f9161148d565b93600a900490565b80939193611b93565b9050604051611c28604082610556565b60018152600360fc1b602082015290565b909181511561029d576020820190815160f81c80851090811591611cbd575b50611cb45782511561029d57611c72915160f81c90610a0a565b91820180921161092a57816007611ca161155861154a611cae95611c9b6116db60019960031c90565b9061141b565b911660ff809216901c1690565b16151590565b50505050600090565b905081101538611c58565b60005b8151811015611d0d57611cde818361141b565b5160f81c60308110908115611d02575b50611cfb57600101611ccb565b5050600090565b603991501138611cee565b5050600190565b60005b8151811015611d0d57611d36611d2d828461141b565b5160f81c6121aa565b5015611cfb57600101611d17565b90600319820191821360011661092a57565b600160ff1b811461092a576000190190565b600703906007821161092a57565b60001981019190821161092a57565b600803906008821161092a57565b60071981019190821161092a57565b60011981019190821161092a57565b600a1981019190821161092a57565b60091981019190821161092a57565b60361981019190821161092a57565b60231981019190821161092a57565b60061981019190821161092a57565b600e0390600e821161092a57565b600e1981019190821161092a57565b60031981019190821161092a57565b9190820391821161092a57565b600a915b6000831215611e485750505090565b9091926112c1611e6191600185871c16611e685761148d565b9190611e39565b8060031c611310611e7b60078416611d68565b60ff6001611e89858a61141b565b8260f81b90511660f81c921b1660ff60f81b911760f81b1660001a918661141b565b6009915b6000831215611ebe5750505090565b9091926112c1611ed791600185871c16611e685761148d565b9190611eaf565b6005915b6000831215611ef15750505090565b9091926112c1611f0a91600185871c16611e685761148d565b9190611ee2565b6003915b6000831215611f245750505090565b9091926112c1611f3d91600185871c16611e685761148d565b9190611f15565b6000915b6000831215611f575750505090565b9091926112c1611f7091600185871c16611f775761148d565b9190611f48565b8060031c611310611f8a60078416611d68565b60ff600181611f99868b61141b565b5160f81c16921b1660ff60f81b911760f81b1660001a918661141b565b60001981019150811360011661092a575b6000811215611fd4575090565b90611fe1611fe79161148d565b91611d56565b611fc7565b6007915b6000831215611fff5750505090565b9091926112c161201891600185871c16611e685761148d565b9190611ff0565b9190600019810190811360011661092a5791905b60008312156120425750505090565b9091926112c161205b91600185871c166120625761148d565b9190612033565b8060031c6113106120a461207860078516611d68565b6120936001612087868b61141b565b5160f81c921b60ff1690565b1760f81b6001600160f81b03191690565b60001a918661141b565b908160030191821260011661092a57565b9190916000838201938412911290801582169115161761092a57565b6000617fff821161211357506000908060031b91508082056008149015171561092a57617fff811361210a5790565b50600160ff1b90565b50600160ff1b919050565b617fff811161210a57600b810290808205600b149015171561092a576001810190600060018312911290801582169115161761092a5760029005617fff811361210a5790565b617fff811161210a57600a810290808205600a149015171561092a576002810190600060028312911290801582169115161761092a5760039005617fff811361210a5790565b60ff16602081108015612259575b61225057604051906121cb606083610556565b603b82527f250000002627000000002829002a2b2c0102030405060708090a2d000000000060208301527e0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232400000000006040830152601f190160ff811161092a5761155861154a60ff938461223b94169061141b565b1680156122505761224b90611d76565b600191565b50600090600090565b50605a81116121b8565b60ff1660ff811461092a5760010190565b9092915b612282848261237c565b8060031b908082046008149015171561092a5761229f82846123bb565b90600082121590816122ee575b506122e2575060ff831660ff821610156122d3576122cc61228291612263565b9050612278565b50505050600090600090600090565b60019591945092509050565b9050811115386122ac565b921561234f5760015b600360ff821611156123145750505090565b61231e818361237c565b8060031b908082046008149015171561092a57831115612347575b61234290612263565b612302565b925082612339565b505090565b9061235e826106f6565b61236b6040519182610556565b8281528092611263601f19916106f6565b9060ff806123a061238c8561281f565b60031c9461239a8186613242565b946133e5565b1691160260ff811690810361092a57810390811161092a5790565b600090815b8151831015612453576123e18460ff6123d98686610833565b515116613499565b9060206123ee8585610833565b5101516001831b11156124455761241f61240a61242593610a47565b60606124168787610833565b51015190610a8d565b906120bf565b91617fff831361243857600101916123c0565b50600160ff1b9392505050565b50600160ff1b949350505050565b9250505090565b8060021b908082046004149015171561092a576011810180911161092a5761248460009180610a0a565b6007810180911161092a57610c96915060031c610a2b565b91909260009160005b845181101561256e576124f76124d76124c18388969998610833565b5195846124d261173c895160ff1690565b611f11565b8360208701516124f1896124ec8a5160ff1690565b613499565b9061201f565b946000966040606087019601965b865189101561255e57612556600191866125518461254a8e61253f8f61253861155861154a60079351611c9b8760031c90565b9216611d68565b60ff809216901c1690565b1660ff1690565b611f44565b980197612505565b91975093955093506001016124a5565b505091509150565b9192612582919361237c565b918260031b928084046008149015171561092a5780830383811161092a576125d291838260046125b794911161260857611fb6565b826125cd6125c760078416611d85565b60071690565b611fb6565b9160ec5b8184106125e35750505090565b6125f460ff60ec9216948486611fec565b93036126015760116125d6565b60ec6125d6565b506004611fb6565b9260ff61261d83856133e5565b169161264260ff61262e8387613242565b16946126398361281f565b60031c9261237c565b9280156114165780820681039181831161092a5785612664836126699361140c565b611e28565b92612673866135d3565b60009690875b84891061268c5750505050505050505050565b6126c38160019261156f8b8b8f8f8c908c8f938c8e918685106000146126cb576126bb60ff60005b1689610a8d565b9b8c916136d3565b980197612679565b6126bb60ff8f6126b4565b9190916126e382846137a1565b6126ed82846137d3565b6126f682613819565b6127088261270385611d93565b61384b565b61271a8261271585611d93565b613881565b6127238161394e565b60005b8181106127655750505060ff600791161015612740575050565b61275e826127598361275461276396611db1565b6138eb565b611db1565b613921565b565b801560005b83811061277b575050600101612726565b806001918887868680612817575b80156127fe575b80156127e4575b6127db576127c461173c61155861154a6127d5976127c96127c461173c61155861154a6127cf9a8c61141b565b611da2565b9661141b565b906138af565b0161276a565b505050506127d5565b506127ee89611d76565b8114801561279757508315612797565b50868015612790575061281089611d76565b8414612790565b508315612789565b60ff81169060041b610ff0166080810180911161092a578161284091610a0a565b906040820180921161092a5781600282101561285b57505090565b90915060079061289c9061289661289161287b858704610a55565b610a55565b61288c61288782610971565b611dc0565b610a0a565b611dcf565b90611e28565b9110156128a65790565b610c9690611dde565b9190916000906128be83611d76565b60018110156128d0575b505050505050565b600681146129d4575b60005b8481106128ff5750600281106128fa576128f590611da2565b6128be565b6128c8565b60009691965b6002811061291957506001019590956128dc565b6129238189611e28565b600261292e8a610a2b565b166129ce576129408361266489611d76565b61295261294e828488613a3c565b1590565b806129bd575b612967575b5050600101612905565b956129b06129b592600194986129a961298f61155861154a6129898860031c90565b8d61141b565b60ff61299d60078816611d68565b91166001911c16151590565b9188613bc4565b61148d565b94903861295d565b506129c789610982565b8710612958565b82612940565b5060056128d9565b6001600160ff1b03811461092a5760010190565b600160ff1b811461092a5760000390565b92909260075b612a1082611ded565b811015612a345780612a25612a2f9286613bf0565b6128768186613c02565b612a07565b5090926003195b6004811315612c0b5750612a4e8161394e565b60005b818110612b005750505060ff166007811015612a6c57505050565b8060005b600c8110612adf5750600c1b1760005b60068110612a8e5750505050565b60005b60038110612aa25750600101612a80565b91612ad8600191612ad2612ab98661156f89611db1565b848316151590612acb8288838d613bc4565b868a613bc4565b60011c90565b9201612a91565b91600190612af8612af382841b92600b1c90565b610998565b189201612a70565b801560005b838110612b16575050600101612a51565b8180612c03575b8015612bea575b8015612bd0575b612bc8576000195b6001811315612b4757506001905b01612b05565b6000195b898784876001851315612b6b575050505050612b66906129dc565b612b33565b91612ba786612b9c61173c61155861154a8a9997612ba1612bba9c612b9c61173c61155861154a612bb59f8e61141b565b6120bf565b9761141b565b9084159283612bbf57613bc4565b6129dc565b612b4b565b87159350613bc4565b600190612b41565b50612bda84611d76565b83148015612b2b57508015612b2b565b50818015612b245750612bfc84611d76565b8114612b24565b508015612b1d565b600081126003195b6004811315612c2c575050612c27906129dc565b612a3b565b612c71906000811215612cd457612c42816129f0565b8315612cce57612c51856129f0565b80821315612cc757505b60028114908115612cbc575b50612c76576129dc565b612c13565b612c93612c82826120ae565b612c8b866120ae565b90888a613c2c565b612ca3612c8282612b9c89611d44565b612bb5612caf826120ae565b612c8b86612b9c8a611d44565b600491501438612c67565b9050612c5b565b84612c51565b80612c42565b600094936000199390929091865b600860ff821610612cfb57505050505050565b612d0781858585612ea6565b612d1383858388612f3c565b6000612d216001861b611d76565b6001861115612ea057612d3e6001612d3888611d76565b1b611d76565b915b9160005b878110612e7c575060005b878110612e635750600090815b888110612e43575060009283916000198a01905b818410612dee5750505050600a60039160148980029102828202808211600114612de757035b600091908101600019010480612ddb575b500291020101868110612dce575b50600181612dc760ff93878787612ea6565b0116612ce8565b9097509450866001612db5565b60001901905038612da7565b9003612d96565b90919294600190612e38838c87602081818d60051b850101511692878d0160051b0101511690888119168983191680881c169080881c16169180871c169080871c16161716613cbf565b019501929190612d70565b91600190612e5b8560208660051b8c01015116613cbf565b019201612d5c565b92612e756001916117428a878b614693565b9301612d4f565b92612e996001916117428a86612e92898d610833565b51166145c2565b9301612d44565b81612d40565b929091926001841b91600019830192831161092a5760005b858110612ecd57505050505050565b8084612edb60019385613d09565b612ee58387610833565b51191616612ef38288610833565b5118612eff8288610833565b5201612ebe565b604051906080612f168184610556565b368337565b6040519060e0612f168184610556565b90600481101561029d5760051b0190565b612f86612f8061173c612f7960ff949897969885612f58612f06565b60018152600060208201526003604082015291600260608401521690612f2b565b5160ff1690565b60031b90565b9116178060005b600a811061309c5750600a1b176154121860005b60058111156130815750612fbe600682901c600116151583613a8d565b612fd1600782901c600116151583613ad8565b612fe4600882901c600116151583613b25565b60095b600f811061306c575060005b60088110613044575060085b600f811061301c5750506130166127639293611d93565b90613bb2565b8061303e61302f60019361156f89611e0a565b84831c60011615159086613a51565b01612fff565b8061306661305760019361266489611d76565b84831c60011615159086613b70565b01612ff3565b8061307b613057600193611dfc565b01612fe7565b613097906129b083821c60011615158286613a51565b612fa1565b916001906130b56130b082841b9260091c90565b6109b0565b189201612f8d565b91906130da6114ea6116db6114e46130d58580610a0a565b610a1d565b9260f882901b6001600160f81b03191660001a6130f685610826565b5360005b82811061310657505050565b60208160051b830101518382029060005b858110613129575050506001016130fa565b8060018381931c1661313c575b01613117565b80840182600760218360031c8d010192161b815160001a179053613136565b6040519061316a606083610556565b602982527fff0a101a1218101216161a1e161618181c1c1a1a1a1a1c1c1c1c1c1c1c1c1c1c60208301526807070707070707070760ba1b6040830152565b604051906131b7606083610556565b602982527fff0d16121a1218121614181c1a18141e181c1c1a1e1c1e1e1e1e1c1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60405190613204606083610556565b602982527fff111c1610161c1a1a181c181c1618181e1c1c1a1c1e181e1e1e1e1e1e1e1e1e6020830152680f0f0f0f0f0f0f0f0f60b91b6040830152565b60ff16801561329f576001811461328a576002146132765761155861154a610c969260ff61326e6131f5565b91169061141b565b61155861154a610c969260ff61326e6131a8565b5061155861154a610c969260ff61326e61315b565b5061155861154a610c969260ff604051916132bb606084610556565b602983527fff070a0f141a1214181e1214181a1e16181c1e1c1c1c1c1e1e1a1c1e1e1e1e1e6020840152680f0f0f0f0f0f0f0f0f60b91b6040840152169061141b565b6040519061330d606083610556565b602982526821232526282b2d2f3160b81b6040837fff01010102020404040505050809090a0a0b0d0e10111112141517191a1c1d1f60208201520152565b6040519061335a606083610556565b60298252680b4c0ccd4e0ecf905160ba1b6040837fff01010202040406060808080a0c100c11101215141717191b1d22222326282b60208201520152565b604051906133a7606083610556565b602982526836393c3f42464a4d5160b81b6040837fff010102040404050608080b0b101012101315191919221e202325282a2d303360208201520152565b60ff16801561343a5760018114613425576002146134115761155861154a610c969260ff61326e613398565b61155861154a610c969260ff61326e61334b565b5061155861154a610c969260ff61326e6132fe565b5061155861154a610c969260ff60405191613456606084610556565b602983527fff01010101010202020204040404040606060607080809090a0c0c0c0d0e0f1060208401526811121313141516181960b81b6040840152169061141b565b906134b16134aa60ff809316610a1d565b6011900490565b911660018114613569576002811461354b576004811461353b576008811461351d5760079150146135185760405162461bcd60e51b81526020600482015260146024820152735152436f64653a20696e76616c6964206d6f646560601b6044820152606490fd5b600090565b5080156135355760011461353057600c90565b600a90565b50600890565b501561354657601090565b600890565b5080156135635760011461355e57600d90565b600b90565b50600990565b5080156135815760011461357c57600e90565b600c90565b50600a90565b1561358e57565b60405162461bcd60e51b815260206004820152601e60248201527f5152436f64653a20525320646567726565206f7574206f662072616e676500006044820152606490fd5b906001821015806136c8575b6135e890613587565b6135f18261123b565b91600161360661360083611d76565b8561141b565b53600060015b82821061361857505050565b60005b838110613636575061362e6001916143d9565b91019061360c565b80613655611bcd8461365061155861154a6001978d61141b565b614456565b60001a613662828961141b565b538461366d82610a2b565b10613679575b0161361b565b6136b561368c61155861154a848b61141b565b6136a461155861154a61369e86610a2b565b8c61141b565b1860f81b6001600160f81b03191690565b60001a6136c2828961141b565b53613673565b50601e8211156135df565b919399979498928a6136e7918684866144c2565b9460005b8581106137475750505050505060005b86811061370b5750505050505050565b8061371b61154a6001938561141b565b61374061373561372b878a610a8d565b6117428986610a0a565b9160001a918961141b565b53016136fb565b808b61378b61376161375b8d600196610a0a565b8c610a8d565b8589851015613792575b5061378261154a61377c868a610a8d565b8a61141b565b60001a9261141b565b53016136eb565b61379b91611e28565b8561376b565b9060005b8281106137b157505050565b8060406137c060019385610833565b51176137cc8285610833565b52016137a5565b6001901b90600019820191821161092a5760005b600181106137f457505050565b80600191600601613812856138098387610833565b51179185610833565b52016137e7565b60005b60098110613828575050565b806101ff61383860019385610833565b51176138448285610833565b520161381c565b60ff901b9060005b6009811061386057505050565b808361386e60019385610833565b511761387a8285610833565b5201613853565b9060005b6008811061389257505050565b8060019184016138a86101ff6138098387610833565b5201613885565b601f909291921b60005b600581106138c75750505050565b8060019185016138e4846138db8388610833565b51179186610833565b52016138b9565b6007901b9060005b6006811061390057505050565b808361390e60019385610833565b511761391a8285610833565b52016138f3565b9060005b6003811061393257505050565b806001918401613947603f6138098387610833565b5201613925565b60408051919061395e8184610556565b60078352601f190136602084013760ff16908060018314613a3357509161398760078304610a55565b926139d86139d36139cd6139c86139b16139ac6139a389610982565b6117428b61095b565b610a63565b6139c26139bd8a6109c8565b611e19565b9061140c565b6109de565b946109c8565b610a71565b936139e281611d76565b60f886901b6001600160f81b03191660001a6139fe828561141b565b5360018114613a205784613a14613a1a92611b7a565b96611e28565b946139e2565b50925092506006613a3084610826565b53565b91505090600090565b600192613a4891610833565b51901c16151590565b9115613a735780610100613a68613a709385610833565b511792610833565b52565b613a709061010019613a858285610833565b511692610833565b9015613ab25780516007101561029d57610100818101511790613a7090600790610833565b80516007101561029d5761010081018051915161010019909216916007101561029d5752565b9015613aff5780516008101561029d576101208101516101001790613a7090600890610833565b80516008101561029d5761012081018051915161010019909216916008101561029d5752565b9015613b4b5780516008101561029d5761012081015160801790613a7090600890610833565b80516008101561029d57610120810180519151608019909216916008101561029d5752565b9115613b895760086001613a70921b613a688285610833565b81516008101561029d5760016020600860051b840101911b1981511691516008101561029d5752565b90613a7090610100613a688285610833565b9290919015613bde576001613a70921b613a688285610833565b6001613a70921b19613a858285610833565b90613a7090604019613a858285610833565b9081516006101561029d5760016020600660051b840101911b1981511691516006101561029d5752565b91929060008412159081613c73575b81613c67575b81613c5d575b50613c5157505050565b61276392600092613bc4565b9050811238613c47565b60008312159150613c41565b8085129150613c3b565b670f0f0f0f0f0f0f0f670101010101010101916755555555555555558160011c169003673333333333333333808260021c169116018060041c01160260381c90565b613ccb8160c01c613c7d565b613ce167ffffffffffffffff8360801c16613c7d565b0190613d0467ffffffffffffffff613cfd818460401c16613c7d565b9216613c7d565b010190565b60ff1690811561410a57600182146140f957600282146140d357600382146140545760048214614025576001811690600390069160058114613fa457600614613e875780158080613e7f575b613e6a578080613e60575b613e395780613e2f575b613e0957600114908180613e01575b613ddb5781613dd0575b50613dac577fe38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e90565b7f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e3890565b600191501438613d83565b50507faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b508015613d79565b50507f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b5060028214613d6a565b5050507f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b5060018314613d60565b5050506000805160206148d983398151915290565b508215613d55565b80158080613f9c575b613f93578080613f89575b613f625780613f58575b613f3257600114908180613f2a575b613f165781613f0b575b50613ee7577f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7190565b7f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b600191501438613ebe565b50506000805160206148d983398151915290565b508015613eb4565b50507fb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db90565b5060028214613ea5565b5050507fdb6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6d90565b5060018314613e9b565b50505060001990565b508215613e90565b5015808061401d575b61401557613ff05715613fde577f104104104104104104104104104104104104104104104104104104104104104190565b6000805160206148d983398151915290565b507f924924924924924924924924924924924924924924924924924924924924924990565b505060001990565b508115613fad565b60019150811c16613dac577f71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c790565b6003900690508061408457507f924924924924924924924924924924924924924924924924924924924924924990565b6001036140af577f492492492492492492492492492492492492492492492492492492492492492490565b7f249249249249249249249249249249249249249249249249249249249249249290565b50507f924924924924924924924924924924924924924924924924924924924924924990565b600116151590506135185760001990565b60011615159050614127576000805160206148d983398151915290565b7faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa90565b6040519061415b61012083610556565b61010082527fcb595fb09ca9a0510bf516eb7a752cd74faed5e9e6e7ade874d6f4eaa85058af610100837d011902321ac603df33ee1b68c74b0464e00e348def811cc169f8c8084c7160208201527f058a652fe1240f2135938edaf01282451db5c27d6a27f9b9c99a09784de472a660408201527f06bf8b6266dd30fde29825b31091228836d094ce8f96dbbdf1d2135c8338464060608201527f1e42b6a3c3487e6e6b3a2854fa85ba3dca5e9b9f0a15792b4ed4e5ac73f3a75760808201527f0770c0f78c80630d674adeed31c5fe18e3a5997726b8b47c114492d92320892e60a08201527f373fd15b95bccfcd908797b2dcfcbe61f256d3ab142a5d9e843c3953476d41a260c08201527f1f2d43d8b77ba476c41749ec7f0c6ff66ca13b52299d55aafb6086b1bbcc3e5a60e08201520152565b604051906142a161012083610556565b61010082527f122448903d7af4f5f7f3fbebcb8b0b162c58b07dfae9cf831b366cd8ad478e01610100837f01020408102040801d3a74e8cd8713264c982d5ab475eac98f03060c183060c060208201527f9d274e9c254a94356ad4b577eec19f23468c050a142850a05dba69d2b96fdea160408201527f5fbe61c2992f5ebc65ca890f1e3c78f0fde7d3bb6bd6b17ffee1dfa35bb671e260608201527fd9af4386112244880d1a3468d0bd67ce811f3e7cf8edc7933b76ecc5973366cc60808201527f85172e5cb86ddaa94f9e214284152a54a84d9a2952a455aa49923972e4d5b77360a08201527fe6d1bf63c6913f7efce5d7b37bf6f1ffe3dbab4b963162c495376edca557ae4160c08201527f82193264c88d070e1c3870e0dda753a651a259b279f2f9efc39b2b56ac458a0960e08201520152565b60ff168015801561444e575b614448576143fa906143f561414b565b61141b565b5160f81c61440661414b565b9081516002101561029d5761154a6115589160ff6022610c9695018160f81b90511660f81c160160ff81101561443f575b6143f5614291565b60fe1901614437565b50600090565b5060006143e5565b60ff16801580156144b7575b611cfb57610c969160ff61447b6144b0936143f561414b565b5160f81c9161449861448b61414b565b838060f81b93169061141b565b511660f81c160160ff81101561443f576143f5614291565b5160f81c90565b5060ff821615614462565b949392946144cf8461123b565b956144d8614291565b9060206144e361414b565b94818a019401019260005b8681106144ff575050505050505050565b6001825160001a865160001a1895019460001989018b60005b8281106145a85750600091508a01601f015360005b89811061453e5750506001016144ee565b808c60206001938801015160001a82858c818402614562575b50505050500161452d565b60208094928180948401015160001a9201015160001a0160fe811161459f575b8b01015160001a92010190815160001a1890538c3882858c614557565b60fe1901614582565b80600192016020602182015160001a910153018c90614518565b60009291836145cf612f1b565b94809381905b8482106145f657505091610c9694956145f192611742946148a1565b6109f4565b90949281861c60011615158315898115830361465b575050506146189061148d565b92600584036146355761462c600191610a7f565b955b01906145d5565b9460058411614647575b60019061462e565b9461465360019161148d565b95905061463f565b61466d9294955087919398969861476d565b61467c575b906001809361462e565b9361468d906117426145f1896147be565b93614672565b92916000806146a0612f1b565b95600182951b9082915b8583106146c75750505091610c9694956145f192611742946148a1565b90919593816146d68885610833565b5116151584158a81158303614735575050506146f19061148d565b936005850361470f57614705600191610a7f565b965b0191906146aa565b9560058511614721575b600190614707565b9561472d60019161148d565b969050614719565b6147479294965088919399979961476d565b614756575b9160018094614707565b94614767906117426145f18a6147be565b9461474c565b90918251156147af575b509060a08101805160c08301526080820190815190526060820190815190526040820190815190526020820190815190528151905252565b810180911161092a5738614777565b60208101518015159081614893575b8161487c575b8161486e575b81614860575b600092828061484d575b8061483f575b614836575b8261481e575b82614812575b50506148095790565b610c969061148d565b51101590503880614800565b915060c082015161482e826109c8565b1115916147fa565b600193506147f4565b508160c082015110156147ef565b508051614859836109c8565b11156147e9565b60a0830151811491506147df565b6080830151811491506147d9565b9050606082015161488c8261095b565b14906147d3565b6040830151811491506147cd565b8284916148c6575b50810180911161092a57610c9692826148c19261476d565b6147be565b6148cf9261476d565b600082826148a956fe5555555555555555555555555555555555555555555555555555555555555555a2646970667358221220a2ab092f927a5c9c8602049f4de81c27d044d7e87118f9061175de3f9a165b5564736f6c63430008220033","gasData":[4102066,4102066]}],"codeHashMap":{"4d52f9216ee6b8627e17e4095705c673af59b94d":"QRCodeDemo"},"sync":{"url":"http://localhost:8545"},"blockLimit":30000000}}
\ No newline at end of file
diff --git a/solidity/hardhat.config.js b/solidity/hardhat.config.js
new file mode 100644
index 0000000..2d061d5
--- /dev/null
+++ b/solidity/hardhat.config.js
@@ -0,0 +1,25 @@
+import "@nomicfoundation/hardhat-toolbox";
+
+/** @type import('hardhat/config').HardhatUserConfig */
+const config = {
+ solidity: {
+ version: "0.8.34",
+ settings: {
+ viaIR: true,
+ optimizer: {
+ enabled: true,
+ runs: 200,
+ },
+ },
+ },
+ networks: {
+ hardhat: {
+ // QR Code generation requires significant gas.
+ // blockGasLimit increases the cap for calls; gas is the default per-tx limit.
+ blockGasLimit: 30_000_000,
+ allowUnlimitedContractSize: true,
+ },
+ },
+};
+
+export default config;
diff --git a/solidity/package-lock.json b/solidity/package-lock.json
new file mode 100644
index 0000000..2a4f06a
--- /dev/null
+++ b/solidity/package-lock.json
@@ -0,0 +1,8134 @@
+{
+ "name": "qrcodegen-solidity",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "qrcodegen-solidity",
+ "version": "1.0.0",
+ "license": "ISC",
+ "devDependencies": {
+ "@nomicfoundation/hardhat-toolbox": "^5.0.0",
+ "ethers": "^6.16.0",
+ "hardhat": "^2.28.6",
+ "solc": "^0.8.34"
+ }
+ },
+ "node_modules/@adraffy/ens-normalize": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz",
+ "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@ethereumjs/rlp": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz",
+ "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "bin": {
+ "rlp": "bin/rlp.cjs"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ethereumjs/util": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz",
+ "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "@ethereumjs/rlp": "^5.0.2",
+ "ethereum-cryptography": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.4.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
+ }
+ },
+ "node_modules/@ethersproject/abi": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz",
+ "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/abstract-provider": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz",
+ "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/networks": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/web": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/abstract-signer": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz",
+ "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/address": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz",
+ "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/base64": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz",
+ "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/basex": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz",
+ "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/bignumber": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz",
+ "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "bn.js": "^5.2.1"
+ }
+ },
+ "node_modules/@ethersproject/bytes": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz",
+ "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/constants": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz",
+ "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/contracts": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz",
+ "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abi": "^5.8.0",
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/hash": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz",
+ "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/hdnode": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz",
+ "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/basex": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/pbkdf2": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/sha2": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/wordlists": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/json-wallets": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz",
+ "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/hdnode": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/pbkdf2": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/random": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "aes-js": "3.0.0",
+ "scrypt-js": "3.0.1"
+ }
+ },
+ "node_modules/@ethersproject/json-wallets/node_modules/aes-js": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
+ "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@ethersproject/keccak256": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz",
+ "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "node_modules/@ethersproject/logger": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz",
+ "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@ethersproject/networks": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz",
+ "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/pbkdf2": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz",
+ "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/sha2": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/properties": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz",
+ "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/providers": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz",
+ "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/basex": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/networks": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/random": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0",
+ "@ethersproject/sha2": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/web": "^5.8.0",
+ "bech32": "1.1.4",
+ "ws": "8.18.0"
+ }
+ },
+ "node_modules/@ethersproject/providers/node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ethersproject/random": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz",
+ "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/rlp": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz",
+ "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/sha2": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz",
+ "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "hash.js": "1.1.7"
+ }
+ },
+ "node_modules/@ethersproject/signing-key": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz",
+ "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.6.1",
+ "hash.js": "1.1.7"
+ }
+ },
+ "node_modules/@ethersproject/solidity": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz",
+ "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/sha2": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/strings": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz",
+ "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/transactions": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz",
+ "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/units": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz",
+ "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/wallet": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz",
+ "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/hdnode": "^5.8.0",
+ "@ethersproject/json-wallets": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/random": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/wordlists": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/web": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz",
+ "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/@ethersproject/wordlists": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz",
+ "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/@fastify/busboy": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+ "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@noble/curves": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz",
+ "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.3.2"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
+ "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/secp256k1": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
+ "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nomicfoundation/edr": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz",
+ "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23",
+ "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23",
+ "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23",
+ "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23",
+ "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23",
+ "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23",
+ "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-darwin-arm64": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz",
+ "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-darwin-x64": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz",
+ "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-linux-arm64-gnu": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz",
+ "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-linux-arm64-musl": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz",
+ "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-linux-x64-gnu": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz",
+ "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-linux-x64-musl": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz",
+ "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/edr-win32-x64-msvc": {
+ "version": "0.12.0-next.23",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz",
+ "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-chai-matchers": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz",
+ "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/chai-as-promised": "^7.1.3",
+ "chai-as-promised": "^7.1.1",
+ "deep-eql": "^4.0.1",
+ "ordinal": "^1.0.3"
+ },
+ "peerDependencies": {
+ "@nomicfoundation/hardhat-ethers": "^3.1.0",
+ "chai": "^4.2.0",
+ "ethers": "^6.14.0",
+ "hardhat": "^2.26.0"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-ethers": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz",
+ "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "lodash.isequal": "^4.5.0"
+ },
+ "peerDependencies": {
+ "ethers": "^6.14.0",
+ "hardhat": "^2.28.0"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-ignition": {
+ "version": "0.15.16",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz",
+ "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nomicfoundation/ignition-core": "^0.15.15",
+ "@nomicfoundation/ignition-ui": "^0.15.13",
+ "chalk": "^4.0.0",
+ "debug": "^4.3.2",
+ "fs-extra": "^10.0.0",
+ "json5": "^2.2.3",
+ "prompts": "^2.4.2"
+ },
+ "peerDependencies": {
+ "@nomicfoundation/hardhat-verify": "^2.1.0",
+ "hardhat": "^2.26.0"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-ignition-ethers": {
+ "version": "0.15.17",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz",
+ "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "@nomicfoundation/hardhat-ethers": "^3.1.0",
+ "@nomicfoundation/hardhat-ignition": "^0.15.16",
+ "@nomicfoundation/ignition-core": "^0.15.15",
+ "ethers": "^6.14.0",
+ "hardhat": "^2.26.0"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-network-helpers": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz",
+ "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ethereumjs-util": "^7.1.4"
+ },
+ "peerDependencies": {
+ "hardhat": "^2.26.0"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-toolbox": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz",
+ "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@nomicfoundation/hardhat-chai-matchers": "^2.0.0",
+ "@nomicfoundation/hardhat-ethers": "^3.0.0",
+ "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0",
+ "@nomicfoundation/hardhat-network-helpers": "^1.0.0",
+ "@nomicfoundation/hardhat-verify": "^2.0.0",
+ "@typechain/ethers-v6": "^0.5.0",
+ "@typechain/hardhat": "^9.0.0",
+ "@types/chai": "^4.2.0",
+ "@types/mocha": ">=9.1.0",
+ "@types/node": ">=18.0.0",
+ "chai": "^4.2.0",
+ "ethers": "^6.4.0",
+ "hardhat": "^2.11.0",
+ "hardhat-gas-reporter": "^1.0.8",
+ "solidity-coverage": "^0.8.1",
+ "ts-node": ">=8.0.0",
+ "typechain": "^8.3.0",
+ "typescript": ">=4.5.0"
+ }
+ },
+ "node_modules/@nomicfoundation/hardhat-verify": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz",
+ "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abi": "^5.1.2",
+ "@ethersproject/address": "^5.0.2",
+ "cbor": "^8.1.0",
+ "debug": "^4.1.1",
+ "lodash.clonedeep": "^4.5.0",
+ "picocolors": "^1.1.0",
+ "semver": "^6.3.0",
+ "table": "^6.8.0",
+ "undici": "^5.14.0"
+ },
+ "peerDependencies": {
+ "hardhat": "^2.26.0"
+ }
+ },
+ "node_modules/@nomicfoundation/ignition-core": {
+ "version": "0.15.15",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz",
+ "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/address": "5.6.1",
+ "@nomicfoundation/solidity-analyzer": "^0.1.1",
+ "cbor": "^9.0.0",
+ "debug": "^4.3.2",
+ "ethers": "^6.14.0",
+ "fs-extra": "^10.0.0",
+ "immer": "10.0.2",
+ "lodash": "4.17.21",
+ "ndjson": "2.0.0"
+ }
+ },
+ "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz",
+ "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.6.2",
+ "@ethersproject/bytes": "^5.6.1",
+ "@ethersproject/keccak256": "^5.6.1",
+ "@ethersproject/logger": "^5.6.0",
+ "@ethersproject/rlp": "^5.6.1"
+ }
+ },
+ "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz",
+ "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "nofilter": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@nomicfoundation/ignition-ui": {
+ "version": "0.15.13",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz",
+ "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz",
+ "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ },
+ "optionalDependencies": {
+ "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2",
+ "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2",
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2",
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2",
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz",
+ "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz",
+ "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz",
+ "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz",
+ "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz",
+ "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz",
+ "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz",
+ "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@scure/base": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz",
+ "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
+ "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.4.0",
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32/node_modules/@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.4.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32/node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
+ "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39/node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@sentry/core": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
+ "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/minimal": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/core/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@sentry/hub": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
+ "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/hub/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@sentry/minimal": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
+ "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/minimal/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@sentry/node": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
+ "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sentry/core": "5.30.0",
+ "@sentry/hub": "5.30.0",
+ "@sentry/tracing": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "cookie": "^0.4.1",
+ "https-proxy-agent": "^5.0.0",
+ "lru_map": "^0.3.3",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/node/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@sentry/tracing": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
+ "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/minimal": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/tracing/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@sentry/types": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
+ "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/utils": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
+ "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sentry/types": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/utils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@solidity-parser/parser": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz",
+ "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "antlr4ts": "^0.5.0-alpha.4"
+ }
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
+ "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@typechain/ethers-v6": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz",
+ "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "lodash": "^4.17.15",
+ "ts-essentials": "^7.0.1"
+ },
+ "peerDependencies": {
+ "ethers": "6.x",
+ "typechain": "^8.3.2",
+ "typescript": ">=4.7.0"
+ }
+ },
+ "node_modules/@typechain/hardhat": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz",
+ "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fs-extra": "^9.1.0"
+ },
+ "peerDependencies": {
+ "@typechain/ethers-v6": "^0.5.1",
+ "ethers": "^6.1.0",
+ "hardhat": "^2.9.9",
+ "typechain": "^8.3.2"
+ }
+ },
+ "node_modules/@typechain/hardhat/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@types/bn.js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz",
+ "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/chai": {
+ "version": "4.3.20",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz",
+ "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/chai-as-promised": {
+ "version": "7.1.8",
+ "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz",
+ "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/chai": "*"
+ }
+ },
+ "node_modules/@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/mocha": {
+ "version": "10.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz",
+ "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/node": {
+ "version": "25.3.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
+ "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.18.0"
+ }
+ },
+ "node_modules/@types/pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/prettier": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
+ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/secp256k1": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz",
+ "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/acorn": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.5",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
+ "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/adm-zip": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
+ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.3.0"
+ }
+ },
+ "node_modules/aes-js": {
+ "version": "4.0.0-beta.5",
+ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz",
+ "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+ "dev": true,
+ "license": "BSD-3-Clause OR MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.4.2"
+ }
+ },
+ "node_modules/ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.1.0"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/antlr4ts": {
+ "version": "0.5.0-alpha.4",
+ "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz",
+ "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/array-back": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
+ "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz",
+ "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base-x": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz",
+ "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/bech32": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+ "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/blakejs": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
+ "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz",
+ "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/boxen": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
+ "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-align": "^3.0.0",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.1.0",
+ "cli-boxes": "^2.2.1",
+ "string-width": "^4.2.2",
+ "type-fest": "^0.20.2",
+ "widest-line": "^3.1.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/boxen/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "base-x": "^3.0.2"
+ }
+ },
+ "node_modules/bs58check": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
+ "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "bs58": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true
+ },
+ "node_modules/cbor": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz",
+ "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "nofilter": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12.19"
+ }
+ },
+ "node_modules/chai": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz",
+ "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.3",
+ "deep-eql": "^4.1.3",
+ "get-func-name": "^2.0.2",
+ "loupe": "^2.3.6",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chai-as-promised": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz",
+ "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==",
+ "dev": true,
+ "license": "WTFPL",
+ "peer": true,
+ "dependencies": {
+ "check-error": "^1.0.2"
+ },
+ "peerDependencies": {
+ "chai": ">= 2.1.2 < 6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
+ "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "get-func-name": "^2.0.2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz",
+ "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
+ "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz",
+ "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "string-width": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "optionalDependencies": {
+ "colors": "^1.1.2"
+ }
+ },
+ "node_modules/cli-table3/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-table3/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-table3/node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-table3/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/command-exists": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/command-line-args": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
+ "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "array-back": "^3.1.0",
+ "find-replace": "^3.0.0",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/command-line-usage": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz",
+ "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "array-back": "^4.0.2",
+ "chalk": "^2.4.2",
+ "table-layout": "^1.0.2",
+ "typical": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/array-back": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
+ "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/command-line-usage/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/command-line-usage/node_modules/typical": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
+ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/concat-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/concat-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/death": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz",
+ "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
+ "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
+ "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/difflib": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz",
+ "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "heap": ">= 0.2.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/elliptic": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
+ "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.2.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eth-gas-reporter": {
+ "version": "0.2.27",
+ "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz",
+ "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@solidity-parser/parser": "^0.14.0",
+ "axios": "^1.5.1",
+ "cli-table3": "^0.5.0",
+ "colors": "1.4.0",
+ "ethereum-cryptography": "^1.0.3",
+ "ethers": "^5.7.2",
+ "fs-readdir-recursive": "^1.1.0",
+ "lodash": "^4.17.14",
+ "markdown-table": "^1.1.3",
+ "mocha": "^10.2.0",
+ "req-cwd": "^2.0.0",
+ "sha1": "^1.1.1",
+ "sync-request": "^6.0.0"
+ },
+ "peerDependencies": {
+ "@codechecks/client": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@codechecks/client": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eth-gas-reporter/node_modules/@noble/hashes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz",
+ "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/eth-gas-reporter/node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/eth-gas-reporter/node_modules/@scure/bip32": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz",
+ "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@noble/hashes": "~1.2.0",
+ "@noble/secp256k1": "~1.7.0",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "node_modules/eth-gas-reporter/node_modules/@scure/bip39": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz",
+ "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@noble/hashes": "~1.2.0",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz",
+ "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@noble/hashes": "1.2.0",
+ "@noble/secp256k1": "1.7.1",
+ "@scure/bip32": "1.1.5",
+ "@scure/bip39": "1.1.1"
+ }
+ },
+ "node_modules/eth-gas-reporter/node_modules/ethers": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz",
+ "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abi": "5.8.0",
+ "@ethersproject/abstract-provider": "5.8.0",
+ "@ethersproject/abstract-signer": "5.8.0",
+ "@ethersproject/address": "5.8.0",
+ "@ethersproject/base64": "5.8.0",
+ "@ethersproject/basex": "5.8.0",
+ "@ethersproject/bignumber": "5.8.0",
+ "@ethersproject/bytes": "5.8.0",
+ "@ethersproject/constants": "5.8.0",
+ "@ethersproject/contracts": "5.8.0",
+ "@ethersproject/hash": "5.8.0",
+ "@ethersproject/hdnode": "5.8.0",
+ "@ethersproject/json-wallets": "5.8.0",
+ "@ethersproject/keccak256": "5.8.0",
+ "@ethersproject/logger": "5.8.0",
+ "@ethersproject/networks": "5.8.0",
+ "@ethersproject/pbkdf2": "5.8.0",
+ "@ethersproject/properties": "5.8.0",
+ "@ethersproject/providers": "5.8.0",
+ "@ethersproject/random": "5.8.0",
+ "@ethersproject/rlp": "5.8.0",
+ "@ethersproject/sha2": "5.8.0",
+ "@ethersproject/signing-key": "5.8.0",
+ "@ethersproject/solidity": "5.8.0",
+ "@ethersproject/strings": "5.8.0",
+ "@ethersproject/transactions": "5.8.0",
+ "@ethersproject/units": "5.8.0",
+ "@ethersproject/wallet": "5.8.0",
+ "@ethersproject/web": "5.8.0",
+ "@ethersproject/wordlists": "5.8.0"
+ }
+ },
+ "node_modules/ethereum-bloom-filters": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz",
+ "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@noble/hashes": "^1.4.0"
+ }
+ },
+ "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/ethereumjs-util": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
+ "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "peer": true,
+ "dependencies": {
+ "@types/bn.js": "^5.1.0",
+ "bn.js": "^5.1.2",
+ "create-hash": "^1.1.2",
+ "ethereum-cryptography": "^0.1.3",
+ "rlp": "^2.2.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/ethers": {
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz",
+ "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/ethers-io/"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@adraffy/ens-normalize": "1.10.1",
+ "@noble/curves": "1.2.0",
+ "@noble/hashes": "1.3.2",
+ "@types/node": "22.7.5",
+ "aes-js": "4.0.0-beta.5",
+ "tslib": "2.7.0",
+ "ws": "8.17.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/ethers/node_modules/@types/node": {
+ "version": "22.7.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+ "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.19.2"
+ }
+ },
+ "node_modules/ethers/node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ethjs-unit": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
+ "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "bn.js": "4.11.6",
+ "number-to-bn": "1.7.0"
+ },
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "node_modules/ethjs-unit/node_modules/bn.js": {
+ "version": "4.11.6",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
+ "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-replace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
+ "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "array-back": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fp-ts": {
+ "version": "1.19.3",
+ "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
+ "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ghost-testrpc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz",
+ "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "node-emoji": "^1.10.0"
+ },
+ "bin": {
+ "testrpc-sc": "index.js"
+ }
+ },
+ "node_modules/ghost-testrpc/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ghost-testrpc/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ghost-testrpc/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/ghost-testrpc/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ghost-testrpc/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/ghost-testrpc/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ghost-testrpc/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/globby": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
+ "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/globby/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/globby/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globby/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/handlebars/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hardhat": {
+ "version": "2.28.6",
+ "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz",
+ "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ethereumjs/util": "^9.1.0",
+ "@ethersproject/abi": "^5.1.2",
+ "@nomicfoundation/edr": "0.12.0-next.23",
+ "@nomicfoundation/solidity-analyzer": "^0.1.0",
+ "@sentry/node": "^5.18.1",
+ "adm-zip": "^0.4.16",
+ "aggregate-error": "^3.0.0",
+ "ansi-escapes": "^4.3.0",
+ "boxen": "^5.1.2",
+ "chokidar": "^4.0.0",
+ "ci-info": "^2.0.0",
+ "debug": "^4.1.1",
+ "enquirer": "^2.3.0",
+ "env-paths": "^2.2.0",
+ "ethereum-cryptography": "^1.0.3",
+ "find-up": "^5.0.0",
+ "fp-ts": "1.19.3",
+ "fs-extra": "^7.0.1",
+ "immutable": "^4.0.0-rc.12",
+ "io-ts": "1.10.4",
+ "json-stream-stringify": "^3.1.4",
+ "keccak": "^3.0.2",
+ "lodash": "^4.17.11",
+ "micro-eth-signer": "^0.14.0",
+ "mnemonist": "^0.38.0",
+ "mocha": "^10.0.0",
+ "p-map": "^4.0.0",
+ "picocolors": "^1.1.0",
+ "raw-body": "^2.4.1",
+ "resolve": "1.17.0",
+ "semver": "^6.3.0",
+ "solc": "0.8.26",
+ "source-map-support": "^0.5.13",
+ "stacktrace-parser": "^0.1.10",
+ "tinyglobby": "^0.2.6",
+ "tsort": "0.0.1",
+ "undici": "^5.14.0",
+ "uuid": "^8.3.2",
+ "ws": "^7.4.6"
+ },
+ "bin": {
+ "hardhat": "internal/cli/bootstrap.js"
+ },
+ "peerDependencies": {
+ "ts-node": "*",
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "ts-node": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/hardhat-gas-reporter": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz",
+ "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "array-uniq": "1.0.3",
+ "eth-gas-reporter": "^0.2.25",
+ "sha1": "^1.1.1"
+ },
+ "peerDependencies": {
+ "hardhat": "^2.0.2"
+ }
+ },
+ "node_modules/hardhat/node_modules/@noble/hashes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz",
+ "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/hardhat/node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/hardhat/node_modules/@scure/bip32": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz",
+ "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.2.0",
+ "@noble/secp256k1": "~1.7.0",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "node_modules/hardhat/node_modules/@scure/bip39": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz",
+ "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.2.0",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "node_modules/hardhat/node_modules/ethereum-cryptography": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz",
+ "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.2.0",
+ "@noble/secp256k1": "1.7.1",
+ "@scure/bip32": "1.1.5",
+ "@scure/bip39": "1.1.1"
+ }
+ },
+ "node_modules/hardhat/node_modules/fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/hardhat/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "license": "MIT",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/hardhat/node_modules/solc": {
+ "version": "0.8.26",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz",
+ "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "command-exists": "^1.2.8",
+ "commander": "^8.1.0",
+ "follow-redirects": "^1.12.1",
+ "js-sha3": "0.8.0",
+ "memorystream": "^0.3.1",
+ "semver": "^5.5.0",
+ "tmp": "0.0.33"
+ },
+ "bin": {
+ "solcjs": "solc.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/hardhat/node_modules/solc/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/hardhat/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/hardhat/node_modules/ws": {
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz",
+ "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^2.3.8",
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/hash-base/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/hash-base/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/hash-base/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/heap": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
+ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "^10.0.3"
+ }
+ },
+ "node_modules/http-response-object/node_modules/@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immer": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz",
+ "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.3.8",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz",
+ "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/io-ts": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
+ "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fp-ts": "^1.0.0"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hex-prefixed": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
+ "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/js-sha3": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/json-stream-stringify": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz",
+ "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=7.10.1"
+ }
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonschema": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz",
+ "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/keccak": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz",
+ "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+ "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
+ "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "get-func-name": "^2.0.1"
+ }
+ },
+ "node_modules/lru_map": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/markdown-table": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz",
+ "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micro-eth-signer": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz",
+ "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.8.1",
+ "@noble/hashes": "~1.7.1",
+ "micro-packed": "~0.7.2"
+ }
+ },
+ "node_modules/micro-eth-signer/node_modules/@noble/curves": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz",
+ "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.7.2"
+ },
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/micro-eth-signer/node_modules/@noble/hashes": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz",
+ "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/micro-ftch": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz",
+ "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/micro-packed": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz",
+ "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@scure/base": "~1.2.5"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/minimatch": {
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
+ "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mnemonist": {
+ "version": "0.38.5",
+ "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
+ "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "obliterator": "^2.0.0"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "10.8.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
+ "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.3",
+ "browser-stdout": "^1.3.1",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.5",
+ "diff": "^5.2.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-up": "^5.0.0",
+ "glob": "^8.1.0",
+ "he": "^1.2.0",
+ "js-yaml": "^4.1.0",
+ "log-symbols": "^4.1.0",
+ "minimatch": "^5.1.6",
+ "ms": "^2.1.3",
+ "serialize-javascript": "^6.0.2",
+ "strip-json-comments": "^3.1.1",
+ "supports-color": "^8.1.1",
+ "workerpool": "^6.5.1",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9",
+ "yargs-unparser": "^2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/mocha/node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ndjson": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz",
+ "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "json-stringify-safe": "^5.0.1",
+ "minimist": "^1.2.5",
+ "readable-stream": "^3.6.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "bin": {
+ "ndjson": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/node-addon-api": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
+ "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-emoji": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
+ "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.8.4",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
+ "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/nofilter": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz",
+ "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12.19"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/number-to-bn": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
+ "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "bn.js": "4.11.6",
+ "strip-hex-prefix": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "node_modules/number-to-bn/node_modules/bn.js": {
+ "version": "4.11.6",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
+ "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/obliterator": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz",
+ "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ordinal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz",
+ "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz",
+ "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "ripemd160": "^2.0.3",
+ "safe-buffer": "^5.2.1",
+ "sha.js": "^2.4.12",
+ "to-buffer": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "asap": "~2.0.6"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/qs": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
+ "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+ "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.4.24",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/recursive-readdir": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
+ "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/recursive-readdir/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/recursive-readdir/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/reduce-flatten": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
+ "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/req-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz",
+ "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "req-from": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/req-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz",
+ "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "resolve-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz",
+ "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "hash-base": "^3.1.2",
+ "inherits": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/rlp": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz",
+ "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "peer": true,
+ "dependencies": {
+ "bn.js": "^5.2.0"
+ },
+ "bin": {
+ "rlp": "bin/rlp"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sc-istanbul": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz",
+ "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "abbrev": "1.0.x",
+ "async": "1.x",
+ "escodegen": "1.8.x",
+ "esprima": "2.7.x",
+ "glob": "^5.0.15",
+ "handlebars": "^4.0.1",
+ "js-yaml": "3.x",
+ "mkdirp": "0.5.x",
+ "nopt": "3.x",
+ "once": "1.x",
+ "resolve": "1.1.x",
+ "supports-color": "^3.1.0",
+ "which": "^1.1.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "istanbul": "lib/cli.js"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/js-yaml": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sc-istanbul/node_modules/resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/sc-istanbul/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/scrypt-js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
+ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/secp256k1": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz",
+ "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "elliptic": "^6.5.7",
+ "node-addon-api": "^5.0.0",
+ "node-gyp-build": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/secp256k1/node_modules/node-addon-api": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
+ "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.12",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
+ "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
+ "dev": true,
+ "license": "(MIT AND BSD-3-Clause)",
+ "peer": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.0"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sha1": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz",
+ "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "charenc": ">= 0.0.1",
+ "crypt": ">= 0.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ },
+ "bin": {
+ "shjs": "bin/shjs"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/shelljs/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/shelljs/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/shelljs/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/solc": {
+ "version": "0.8.34",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.34.tgz",
+ "integrity": "sha512-qf8HajA1sHhXRV0hMSDXLjVbc4v3Q+SQbL9zok+1WmgVj7Z4oMjMHxaysCzfGtFVqjZdfDDJWyZI+tcx5bO7Dw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "command-exists": "^1.2.8",
+ "commander": "^8.1.0",
+ "follow-redirects": "^1.12.1",
+ "js-sha3": "0.8.0",
+ "memorystream": "^0.3.1",
+ "semver": "^5.5.0",
+ "tmp": "0.0.33"
+ },
+ "bin": {
+ "solcjs": "solc.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/solc/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/solidity-coverage": {
+ "version": "0.8.17",
+ "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz",
+ "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "@ethersproject/abi": "^5.0.9",
+ "@solidity-parser/parser": "^0.20.1",
+ "chalk": "^2.4.2",
+ "death": "^1.1.0",
+ "difflib": "^0.2.4",
+ "fs-extra": "^8.1.0",
+ "ghost-testrpc": "^0.0.2",
+ "global-modules": "^2.0.0",
+ "globby": "^10.0.1",
+ "jsonschema": "^1.2.4",
+ "lodash": "^4.17.21",
+ "mocha": "^10.2.0",
+ "node-emoji": "^1.10.0",
+ "pify": "^4.0.1",
+ "recursive-readdir": "^2.2.2",
+ "sc-istanbul": "^0.4.5",
+ "semver": "^7.3.4",
+ "shelljs": "^0.8.3",
+ "web3-utils": "^1.3.6"
+ },
+ "bin": {
+ "solidity-coverage": "plugins/bin.js"
+ },
+ "peerDependencies": {
+ "hardhat": "^2.11.0"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz",
+ "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/solidity-coverage/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/solidity-coverage/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/solidity-coverage/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split2": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
+ "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "readable-stream": "^3.0.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/stacktrace-parser": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz",
+ "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.7.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/stacktrace-parser/node_modules/type-fest": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
+ "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-format": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz",
+ "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==",
+ "dev": true,
+ "license": "WTFPL OR MIT",
+ "peer": true
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-hex-prefix": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
+ "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-hex-prefixed": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "node_modules/table": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table-layout": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz",
+ "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "array-back": "^4.0.1",
+ "deep-extend": "~0.6.0",
+ "typical": "^5.2.0",
+ "wordwrapjs": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/table-layout/node_modules/array-back": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
+ "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/table-layout/node_modules/typical": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
+ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/then-request/node_modules/@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/then-request/node_modules/form-data": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz",
+ "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.35",
+ "safe-buffer": "^5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "readable-stream": "3"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/to-buffer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
+ "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "isarray": "^2.0.5",
+ "safe-buffer": "^5.2.1",
+ "typed-array-buffer": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/ts-command-line-args": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz",
+ "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "command-line-args": "^5.1.1",
+ "command-line-usage": "^6.1.0",
+ "string-format": "^2.0.0"
+ },
+ "bin": {
+ "write-markdown": "dist/write-markdown.js"
+ }
+ },
+ "node_modules/ts-essentials": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz",
+ "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "typescript": ">=3.7.0"
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-node/node_modules/diff": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz",
+ "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tsort": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
+ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
+ "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typechain": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz",
+ "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/prettier": "^2.1.1",
+ "debug": "^4.3.1",
+ "fs-extra": "^7.0.0",
+ "glob": "7.1.7",
+ "js-sha3": "^0.8.0",
+ "lodash": "^4.17.15",
+ "mkdirp": "^1.0.4",
+ "prettier": "^2.3.1",
+ "ts-command-line-args": "^2.2.0",
+ "ts-essentials": "^7.0.1"
+ },
+ "bin": {
+ "typechain": "dist/cli/cli.js"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.3.0"
+ }
+ },
+ "node_modules/typechain/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/typechain/node_modules/fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/typechain/node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/typechain/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/typechain/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/typechain/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/typechain/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typical": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
+ "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/undici": {
+ "version": "5.29.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
+ "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@fastify/busboy": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
+ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/utf8": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
+ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/web3-utils": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz",
+ "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "peer": true,
+ "dependencies": {
+ "@ethereumjs/util": "^8.1.0",
+ "bn.js": "^5.2.1",
+ "ethereum-bloom-filters": "^1.0.6",
+ "ethereum-cryptography": "^2.1.2",
+ "ethjs-unit": "0.1.6",
+ "number-to-bn": "1.7.0",
+ "randombytes": "^2.1.0",
+ "utf8": "3.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@ethereumjs/rlp": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz",
+ "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "peer": true,
+ "bin": {
+ "rlp": "bin/rlp"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@ethereumjs/util": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz",
+ "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "peer": true,
+ "dependencies": {
+ "@ethereumjs/rlp": "^4.0.1",
+ "ethereum-cryptography": "^2.0.0",
+ "micro-ftch": "^0.3.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@noble/hashes": "1.4.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/web3-utils/node_modules/ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz",
+ "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/widest-line": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
+ "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/wordwrapjs": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
+ "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "reduce-flatten": "^2.0.0",
+ "typical": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/wordwrapjs/node_modules/typical": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
+ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/workerpool": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
+ "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/solidity/package.json b/solidity/package.json
new file mode 100644
index 0000000..6a90409
--- /dev/null
+++ b/solidity/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "qrcodegen-solidity",
+ "version": "1.0.0",
+ "description": "QR Code generator library — Solidity port",
+ "main": "index.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "test": "hardhat test",
+ "compile": "node scripts/compile.js"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "type": "module",
+ "devDependencies": {
+ "@nomicfoundation/hardhat-toolbox": "^5.0.0",
+ "ethers": "^6.16.0",
+ "hardhat": "^2.28.6",
+ "solc": "^0.8.34"
+ }
+}
diff --git a/solidity/scripts/compile.js b/solidity/scripts/compile.js
new file mode 100644
index 0000000..ed3e763
--- /dev/null
+++ b/solidity/scripts/compile.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/**
+ * Compile script — uses the bundled solc npm package (no internet required).
+ * Outputs compiled JSON artifacts to the artifacts/ directory.
+ *
+ * Usage: node scripts/compile.js
+ * or: npm run compile
+ */
+
+import { readFileSync, writeFileSync, mkdirSync } from "fs";
+import { createRequire } from "module";
+import { resolve, dirname } from "path";
+import { fileURLToPath } from "url";
+
+const require = createRequire(import.meta.url);
+const __dirname = dirname(fileURLToPath(import.meta.url));
+const solc = require("solc");
+
+const contractsDir = resolve(__dirname, "../contracts");
+const artifactsDir = resolve(__dirname, "../artifacts");
+mkdirSync(artifactsDir, { recursive: true });
+
+const input = {
+ language: "Solidity",
+ sources: {
+ "QRCode.sol": { content: readFileSync(`${contractsDir}/QRCode.sol`, "utf8") },
+ "QRCodeDemo.sol": { content: readFileSync(`${contractsDir}/QRCodeDemo.sol`, "utf8") },
+ },
+ settings: {
+ viaIR: true,
+ optimizer: { enabled: true, runs: 200 },
+ outputSelection: {
+ "*": { "*": ["abi", "evm.bytecode.object", "evm.deployedBytecode.object"] },
+ },
+ },
+};
+
+console.log(`Compiling with solc ${solc.version()} …`);
+const output = JSON.parse(solc.compile(JSON.stringify(input)));
+
+let hasError = false;
+for (const e of output.errors || []) {
+ const msg = `[${e.severity.toUpperCase()}] ${e.formattedMessage}`;
+ if (e.severity === "error") { console.error(msg); hasError = true; }
+ else { console.warn(msg); }
+}
+if (hasError) process.exit(1);
+
+for (const [, contracts] of Object.entries(output.contracts || {})) {
+ for (const [name, data] of Object.entries(contracts)) {
+ const artifact = {
+ contractName: name,
+ abi: data.abi,
+ bytecode: "0x" + data.evm.bytecode.object,
+ deployedBytecode: "0x" + data.evm.deployedBytecode.object,
+ };
+ const outPath = `${artifactsDir}/${name}.json`;
+ writeFileSync(outPath, JSON.stringify(artifact, null, 2));
+ console.log(` ✓ ${name} → artifacts/${name}.json`);
+ }
+}
+console.log("Compilation successful.");
diff --git a/solidity/test/QRCodeTest.js b/solidity/test/QRCodeTest.js
new file mode 100644
index 0000000..dd17fe4
--- /dev/null
+++ b/solidity/test/QRCodeTest.js
@@ -0,0 +1,227 @@
+/*
+ * QR Code generator test suite (Solidity)
+ *
+ * Deploys QRCodeDemo to a local Hardhat network and validates the output of
+ * every demo function against known-good values produced by the C reference
+ * implementation in this repository.
+ *
+ * Run with: npx hardhat test
+ * or: npm test
+ *
+ * Gas note: On-chain QR Code generation for small inputs costs 3–9 million gas.
+ * Auto-mask selection evaluates all 8 mask patterns and can exceed Hardhat's
+ * default per-transaction gas cap (16 777 216 gas, `FUSAKA_TRANSACTION_GAS_LIMIT`
+ * in hardhat/src/internal/constants.ts). The fixed-mask demo functions
+ * (doBasicDemoFixedMask, doNumericDemoFixedMask, etc.) are provided specifically
+ * to allow byte-exact comparison against the C reference output without triggering
+ * the 8-pass auto-mask penalty scoring.
+ *
+ * The expected byte strings were obtained by compiling and running the C reference
+ * implementation (c/qrcodegen.c) with identical parameters.
+ */
+
+import { expect } from "chai";
+import hre from "hardhat";
+
+// ---------------------------------------------------------------------------
+// Utility: read a single module from raw QR Code bytes (JS-side helper)
+// ---------------------------------------------------------------------------
+function getModule(buf, x, y) {
+ const size = buf[0];
+ if (x < 0 || x >= size || y < 0 || y >= size) return false;
+ const index = y * size + x;
+ const byteIdx = (index >> 3) + 1; // +1 because buf[0] is the size
+ const bitIdx = index & 7;
+ return ((buf[byteIdx] >> bitIdx) & 1) !== 0;
+}
+
+// ---------------------------------------------------------------------------
+// Helpers
+// ---------------------------------------------------------------------------
+function hexToBytes(hex) {
+ const h = hex.startsWith("0x") ? hex.slice(2) : hex;
+ return Buffer.from(h, "hex");
+}
+
+// ---------------------------------------------------------------------------
+// Test suite
+// ---------------------------------------------------------------------------
+describe("QRCode library", function () {
+
+ let demo;
+
+ before(async function () {
+ const Demo = await hre.ethers.getContractFactory("QRCodeDemo");
+ demo = await Demo.deploy();
+ await demo.waitForDeployment();
+ });
+
+
+ // -----------------------------------------------------------------------
+ // 1. Byte-for-byte comparison against C reference output
+ // (all use explicit fixed masks to stay within the ~16 M gas cap)
+ // -----------------------------------------------------------------------
+
+ it("'Hello, world!' ECC_LOW MASK_2 matches C reference", async function () {
+ // C: qrcodegen_encodeText("Hello, world!", …, Ecc_LOW, 1, 40, Mask_2, true)
+ // MASK_AUTO also selects mask 2 for this input (verified with C reference).
+ const expected = "157fd03f48097675ddaea0db3575839ee05ff50728007dce0733e622dd39535eb3170d01c2c79f3d0baa755d7bb9ab70747d93209af3b79400";
+ const qr = await demo.doBasicDemoFixedMask();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+ it("50-digit π string ECC_MEDIUM MASK_3 matches C reference", async function () {
+ // MASK_AUTO also selects mask 3 for this input (verified with C reference).
+ const expected = "197f41fc83ea0a7611d7eddaa9db254f3748a2e05f557f805c00edcaa4617a999dd9898804a9aaad4452e225bb57d5dcc4bb4fcc2fbf006a23fd7d540aba8ad6a5fbbb6ba668d7eead20c1617fd14e01";
+ const qr = await demo.doNumericDemoFixedMask();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+ it("version-5 HIGH MASK_2 no-boost matches C reference", async function () {
+ const expected = "257f6508cf3f68a7ef0b76d55b29dd2e744aa6db45deac748376fdbee05f5555f507a8bfda005ce991fd9c56ef6a79bb0b047f44571c56f6bd2fdcd60729a7e6d607fb4ef64f6d0de054fc70fa2cadfe0049104b434d6803d3564d9e3aa5a6151aa557908cc828520456b6cbd5f0e92f5e4ab1c06ae47eee8f7667cc18ba8e62973892567445bf00e64f32f61fc408d60de234ab085d4516f1b52bb7cf93765dfcded820496061fe874add2601";
+ const qr = await demo.doVersionConstraintDemo();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+ it("'https://www.nayuki.io/' ECC_HIGH MASK_3 matches C reference", async function () {
+ const expected = "1d7f90d53fc8bc0b76c951dd2ee7afdb55aa7483a0b0e05f55f507987000cc016961224f2cbe770339c40188488dcbeb3b9591ad9c95ee96c5f9dbcdfbb45bc469d014f35c0b1057f52b9e4cdf015630f65ffc560b229c085d60f7b76b01e175c556c220cab8f5a7c48b00";
+ const qr = await demo.doFixedMaskDemo();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+ it("binary 'Hello, world!' ECC_MEDIUM MASK_0 matches C reference", async function () {
+ const expected = "157fd63f680a7669dd2eacdb557583ace05ff507e000550869272153c1fe024274661100b2db1f4c0f62045dbda88bb77565d42086f4d78801";
+ const qr = await demo.doBinaryDemoFixedMask();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+ it("mixed alphanumeric+numeric segment ECC_LOW MASK_0 matches C reference", async function () {
+ const expected = "1d7fc4cd3f68280b76e104dd2ea0acdb75d87583809de05f55f507b0a00055e00849c1cc499d5da07ccf6115830593916751f86e70bc0e548c7038efad85dd322d311707051055dd499ec7645f012e2cca1fc9d50fc29c285d15f4ad8bb19d75955ede202034fe37173401";
+ const qr = await demo.doSegmentDemoFixedMask();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+ it("ECI(26)+UTF-8 bytes ECC_MEDIUM MASK_0 matches C reference", async function () {
+ const expected = "157fc93f88097609ddaea3db657583ace05ff507c000742df291a763e1e7504154374201c6df1fe30eaaf15d53a48bfb748dc720ccfa07ea01";
+ const qr = await demo.doEciDemoFixedMask();
+ expect(hexToBytes(qr).toString("hex")).to.equal(expected);
+ });
+
+
+ // -----------------------------------------------------------------------
+ // 2. Size / structural invariants for fixed-mask functions
+ // -----------------------------------------------------------------------
+
+ it("doBasicDemoFixedMask: size is 21 modules (version 1)", async function () {
+ const qr = await demo.doBasicDemoFixedMask();
+ const size = hexToBytes(qr)[0];
+ expect(size).to.equal(21);
+ });
+
+ it("doNumericDemoFixedMask: size is 25 modules (version 2)", async function () {
+ const qr = await demo.doNumericDemoFixedMask();
+ const size = hexToBytes(qr)[0];
+ expect(size).to.equal(25);
+ });
+
+ it("doVersionConstraintDemo: size is 37 modules (version 5)", async function () {
+ const qr = await demo.doVersionConstraintDemo();
+ const size = hexToBytes(qr)[0];
+ expect(size).to.equal(37);
+ });
+
+ it("doFixedMaskDemo: size is 29 modules (version 3)", async function () {
+ const qr = await demo.doFixedMaskDemo();
+ const size = hexToBytes(qr)[0];
+ expect(size).to.equal(29);
+ });
+
+ it("doSegmentDemoFixedMask: size is 29 modules (version 3)", async function () {
+ const qr = await demo.doSegmentDemoFixedMask();
+ const size = hexToBytes(qr)[0];
+ expect(size).to.equal(29);
+ });
+
+ it("doEciDemoFixedMask: size is 21 modules (version 1)", async function () {
+ const qr = await demo.doEciDemoFixedMask();
+ const size = hexToBytes(qr)[0];
+ expect(size).to.equal(21);
+ });
+
+
+ // -----------------------------------------------------------------------
+ // 3. Buffer-length invariant: length == 1 + ceil(size² / 8)
+ // -----------------------------------------------------------------------
+
+ const lengthCheckCases = [
+ ["doBasicDemoFixedMask", (d) => d.doBasicDemoFixedMask()],
+ ["doNumericDemoFixedMask", (d) => d.doNumericDemoFixedMask()],
+ ["doVersionConstraintDemo", (d) => d.doVersionConstraintDemo()],
+ ["doFixedMaskDemo", (d) => d.doFixedMaskDemo()],
+ ["doSegmentDemoFixedMask", (d) => d.doSegmentDemoFixedMask()],
+ ["doEciDemoFixedMask", (d) => d.doEciDemoFixedMask()],
+ ];
+
+ for (const [name, fn] of lengthCheckCases) {
+ it(`${name}: buffer length equals 1 + ceil(size² / 8)`, async function () {
+ const qr = await fn(demo);
+ const buf = hexToBytes(qr);
+ const size = buf[0];
+ const expected = 1 + Math.ceil(size * size / 8);
+ expect(buf.length).to.equal(expected);
+ });
+ }
+
+
+ // -----------------------------------------------------------------------
+ // 4. Finder-pattern module checks (version 1, top-left corner)
+ // -----------------------------------------------------------------------
+
+ it("finder pattern: outer corners dark, separator ring light, centre dark", async function () {
+ const qr = await demo.doBasicDemoFixedMask();
+ const buf = hexToBytes(qr);
+
+ // Top-left finder outer corners must be dark
+ expect(getModule(buf, 0, 0)).to.be.true;
+ expect(getModule(buf, 6, 0)).to.be.true;
+ expect(getModule(buf, 0, 6)).to.be.true;
+ expect(getModule(buf, 6, 6)).to.be.true;
+
+ // Inner dark 3×3 centre
+ expect(getModule(buf, 3, 3)).to.be.true;
+
+ // Separator ring (Chebyshev distance 2 from centre (3,3)) must be light
+ expect(getModule(buf, 1, 1)).to.be.false;
+ expect(getModule(buf, 5, 1)).to.be.false;
+ expect(getModule(buf, 1, 5)).to.be.false;
+ expect(getModule(buf, 5, 5)).to.be.false;
+ });
+
+
+ // -----------------------------------------------------------------------
+ // 5. Determinism: calling the same function twice gives the same output
+ // -----------------------------------------------------------------------
+
+ it("encodeText is deterministic", async function () {
+ const qr1 = await demo.doBasicDemoFixedMask();
+ const qr2 = await demo.doBasicDemoFixedMask();
+ expect(qr1).to.equal(qr2);
+ });
+
+
+ // -----------------------------------------------------------------------
+ // 6. SVG output
+ // -----------------------------------------------------------------------
+
+ it("toSvgString returns well-formed SVG", async function () {
+ const qr = await demo.doBasicDemoFixedMask();
+ const svg = await demo.toSvgString(qr, 4);
+ expect(svg).to.include('