From f57fe76dce6cba66d61afe71a0a9e1f783c40a24 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 13:55:48 +0100 Subject: [PATCH 001/122] Define external tbtc interfaces We will integrate with tBTC Bridge and TBTCVault contracts. Here we define interfaces with the functions from external contracts that we will use. The interfaces are based on the changes proposed in https://github.com/keep-network/tbtc-v2/pull/760. --- core/contracts/external/tbtc/IBridge.sol | 189 ++++++++++++++++++++ core/contracts/external/tbtc/ITBTCVault.sol | 50 ++++++ 2 files changed, 239 insertions(+) create mode 100644 core/contracts/external/tbtc/IBridge.sol create mode 100644 core/contracts/external/tbtc/ITBTCVault.sol diff --git a/core/contracts/external/tbtc/IBridge.sol b/core/contracts/external/tbtc/IBridge.sol new file mode 100644 index 000000000..1f5749955 --- /dev/null +++ b/core/contracts/external/tbtc/IBridge.sol @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +// This file defines an interface based on the Bridge contract. It defines functions +// from the external source contract that are used in this repository. +// Source: +// https://github.com/keep-network/tbtc-v2/blob/a78cc16e3521a6339f1c27891bb1ad60b9202406/solidity/contracts/bridge/Bridge.sol +// +// TODO: Update after the released version with a commit hash after PR is merged +// https://github.com/keep-network/tbtc-v2/pull/760 and released. + +/// @title Bitcoin Bridge +/// @notice Bridge manages BTC deposit and redemption flow and is increasing and +/// decreasing balances in the Bank as a result of BTC deposit and +/// redemption operations performed by depositors and redeemers. +/// +/// Depositors send BTC funds to the most recently created off-chain +/// ECDSA wallet of the bridge using pay-to-script-hash (P2SH) or +/// pay-to-witness-script-hash (P2WSH) containing hashed information +/// about the depositor’s Ethereum address. Then, the depositor reveals +/// their Ethereum address along with their deposit blinding factor, +/// refund public key hash and refund locktime to the Bridge on Ethereum +/// chain. The off-chain ECDSA wallet listens for these sorts of +/// messages and when it gets one, it checks the Bitcoin network to make +/// sure the deposit lines up. If it does, the off-chain ECDSA wallet +/// may decide to pick the deposit transaction for sweeping, and when +/// the sweep operation is confirmed on the Bitcoin network, the ECDSA +/// wallet informs the Bridge about the sweep increasing appropriate +/// balances in the Bank. +/// @dev Bridge is an upgradeable component of the Bank. The order of +/// functionalities in this contract is: deposit, sweep, redemption, +/// moving funds, wallet lifecycle, frauds, parameters. +interface IBridge { + /// @notice Represents Bitcoin transaction data. + struct BitcoinTxInfo { + /// @notice Bitcoin transaction version. + /// @dev `version` from raw Bitcoin transaction data. + /// Encoded as 4-bytes signed integer, little endian. + bytes4 version; + /// @notice All Bitcoin transaction inputs, prepended by the number of + /// transaction inputs. + /// @dev `tx_in_count | tx_in` from raw Bitcoin transaction data. + /// + /// The number of transaction inputs encoded as compactSize + /// unsigned integer, little-endian. + /// + /// Note that some popular block explorers reverse the order of + /// bytes from `outpoint`'s `hash` and display it as big-endian. + /// Solidity code of Bridge expects hashes in little-endian, just + /// like they are represented in a raw Bitcoin transaction. + bytes inputVector; + /// @notice All Bitcoin transaction outputs prepended by the number of + /// transaction outputs. + /// @dev `tx_out_count | tx_out` from raw Bitcoin transaction data. + /// + /// The number of transaction outputs encoded as a compactSize + /// unsigned integer, little-endian. + bytes outputVector; + /// @notice Bitcoin transaction locktime. + /// + /// @dev `lock_time` from raw Bitcoin transaction data. + /// Encoded as 4-bytes unsigned integer, little endian. + bytes4 locktime; + // This struct doesn't contain `__gap` property as the structure is not + // stored, it is used as a function's calldata argument. + } + + /// @notice Represents data which must be revealed by the depositor during + /// deposit reveal. + struct DepositRevealInfo { + // Index of the funding output belonging to the funding transaction. + uint32 fundingOutputIndex; + // The blinding factor as 8 bytes. Byte endianness doesn't matter + // as this factor is not interpreted as uint. The blinding factor allows + // to distinguish deposits from the same depositor. + bytes8 blindingFactor; + // The compressed Bitcoin public key (33 bytes and 02 or 03 prefix) + // of the deposit's wallet hashed in the HASH160 Bitcoin opcode style. + bytes20 walletPubKeyHash; + // The compressed Bitcoin public key (33 bytes and 02 or 03 prefix) + // that can be used to make the deposit refund after the refund + // locktime passes. Hashed in the HASH160 Bitcoin opcode style. + bytes20 refundPubKeyHash; + // The refund locktime (4-byte LE). Interpreted according to locktime + // parsing rules described in: + // https://developer.bitcoin.org/devguide/transactions.html#locktime-and-sequence-number + // and used with OP_CHECKLOCKTIMEVERIFY opcode as described in: + // https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki + bytes4 refundLocktime; + // Address of the Bank vault to which the deposit is routed to. + // Optional, can be 0x0. The vault must be trusted by the Bridge. + address vault; + } + + /// @notice Represents tBTC deposit request data. + struct DepositRequest { + // Ethereum depositor address. + address depositor; + // Deposit amount in satoshi. + uint64 amount; + // UNIX timestamp the deposit was revealed at. + // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. + uint32 revealedAt; + // Address of the Bank vault the deposit is routed to. + // Optional, can be 0x0. + address vault; + // Treasury TBTC fee in satoshi at the moment of deposit reveal. + uint64 treasuryFee; + // UNIX timestamp the deposit was swept at. Note this is not the + // time when the deposit was swept on the Bitcoin chain but actually + // the time when the sweep proof was delivered to the Ethereum chain. + // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. + uint32 sweptAt; + // The 32-byte deposit extra data. Optional, can be bytes32(0). + bytes32 extraData; + // This struct doesn't contain `__gap` property as the structure is stored + // in a mapping, mappings store values in different slots and they are + // not contiguous with other values. + } + + /// @notice Sibling of the `revealDeposit` function. This function allows + /// to reveal a P2(W)SH Bitcoin deposit with 32-byte extra data + /// embedded in the deposit script. The extra data allows to + /// attach additional context to the deposit. For example, + /// it allows a third-party smart contract to reveal the + /// deposit on behalf of the original depositor and provide + /// additional services once the deposit is handled. In this + /// case, the address of the original depositor can be encoded + /// as extra data. + /// @param fundingTx Bitcoin funding transaction data, see `BitcoinTx.Info`. + /// @param reveal Deposit reveal data, see `RevealInfo struct. + /// @param extraData 32-byte deposit extra data. + /// @dev Requirements: + /// - All requirements from `revealDeposit` function must be met, + /// - `extraData` must not be bytes32(0), + /// - `extraData` must be the actual extra data used in the P2(W)SH + /// BTC deposit transaction. + /// + /// If any of these requirements is not met, the wallet _must_ refuse + /// to sweep the deposit and the depositor has to wait until the + /// deposit script unlocks to receive their BTC back. + function revealDepositWithExtraData( + BitcoinTxInfo calldata fundingTx, + DepositRevealInfo calldata reveal, + bytes32 extraData + ) external; + + /// @notice Collection of all revealed deposits indexed by + /// keccak256(fundingTxHash | fundingOutputIndex). + /// The fundingTxHash is bytes32 (ordered as in Bitcoin internally) + /// and fundingOutputIndex an uint32. This mapping may contain valid + /// and invalid deposits and the wallet is responsible for + /// validating them before attempting to execute a sweep. + function deposits( + uint256 depositKey + ) external view returns (DepositRequest memory); + + /// @notice Returns the current values of Bridge deposit parameters. + /// @return depositDustThreshold The minimal amount that can be requested + /// to deposit. Value of this parameter must take into account the + /// value of `depositTreasuryFeeDivisor` and `depositTxMaxFee` + /// parameters in order to make requests that can incur the + /// treasury and transaction fee and still satisfy the depositor. + /// @return depositTreasuryFeeDivisor Divisor used to compute the treasury + /// fee taken from each deposit and transferred to the treasury upon + /// sweep proof submission. That fee is computed as follows: + /// `treasuryFee = depositedAmount / depositTreasuryFeeDivisor` + /// For example, if the treasury fee needs to be 2% of each deposit, + /// the `depositTreasuryFeeDivisor` should be set to `50` + /// because `1/50 = 0.02 = 2%`. + /// @return depositTxMaxFee Maximum amount of BTC transaction fee that can + /// be incurred by each swept deposit being part of the given sweep + /// transaction. If the maximum BTC transaction fee is exceeded, + /// such transaction is considered a fraud. + /// @return depositRevealAheadPeriod Defines the length of the period that + /// must be preserved between the deposit reveal time and the + /// deposit refund locktime. For example, if the deposit become + /// refundable on August 1st, and the ahead period is 7 days, the + /// latest moment for deposit reveal is July 25th. Value in seconds. + function depositParameters() + external + view + returns ( + uint64 depositDustThreshold, + uint64 depositTreasuryFeeDivisor, + uint64 depositTxMaxFee, + uint32 depositRevealAheadPeriod + ); +} diff --git a/core/contracts/external/tbtc/ITBTCVault.sol b/core/contracts/external/tbtc/ITBTCVault.sol new file mode 100644 index 000000000..bbc2cb103 --- /dev/null +++ b/core/contracts/external/tbtc/ITBTCVault.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +// This file defines an interface based on the TBTCVault contract. It defines functions +// from the external source contract that are used in this repository. +// Source: +// https://github.com/keep-network/tbtc-v2/blob/a78cc16e3521a6339f1c27891bb1ad60b9202406/solidity/contracts/vault/TBTCVault.sol +// +// TODO: Update after the released version with a commit hash after PR is merged +// https://github.com/keep-network/tbtc-v2/pull/760 and released. + +/// @title TBTC application vault +/// @notice TBTC is a fully Bitcoin-backed ERC-20 token pegged to the price of +/// Bitcoin. It facilitates Bitcoin holders to act on the Ethereum +/// blockchain and access the decentralized finance (DeFi) ecosystem. +/// TBTC Vault mints and unmints TBTC based on Bitcoin balances in the +/// Bank. +/// @dev TBTC Vault is the owner of TBTC token contract and is the only contract +/// minting the token. +interface ITBTCVault { + // Represents optimistic minting request for the given deposit revealed + // to the Bridge. + struct OptimisticMintingRequest { + // UNIX timestamp at which the optimistic minting was requested. + uint64 requestedAt; + // UNIX timestamp at which the optimistic minting was finalized. + // 0 if not yet finalized. + uint64 finalizedAt; + } + + /// @notice Collection of all revealed deposits for which the optimistic + /// minting was requested. Indexed by a deposit key computed as + /// `keccak256(fundingTxHash | fundingOutputIndex)`. + function optimisticMintingRequests( + uint256 depositKey + ) external returns (OptimisticMintingRequest memory); + + /// @notice Divisor used to compute the treasury fee taken from each + /// optimistically minted deposit and transferred to the treasury + /// upon finalization of the optimistic mint. This fee is computed + /// as follows: `fee = amount / optimisticMintingFeeDivisor`. + /// For example, if the fee needs to be 2%, the + /// `optimisticMintingFeeDivisor` should be set to `50` because + /// `1/50 = 0.02 = 2%`. + /// The optimistic minting fee does not replace the deposit treasury + /// fee cut by the Bridge. The optimistic fee is a percentage AFTER + /// the treasury fee is cut: + /// `optimisticMintingFee = (depositAmount - treasuryFee) / optimisticMintingFeeDivisor` + function optimisticMintingFeeDivisor() external view returns (uint32); +} From a6d27d49bf3b8e4bdea34b17f77265288dc16107 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 18:51:12 +0100 Subject: [PATCH 002/122] Implement tBTC Depositor contract The tBTC Depositor contract is an implementation of a depositor contract mentioned in [RFC-11](https://github.com/keep-network/tbtc-v2/blob/main/docs/rfc/rfc-11.adoc). This contract serves as an integrator of tBTC Bridge and Acre staking contract. Bitcoin deposits revealed via tBTC Depositor contract will be automatically staked in Acre after tBTC minting process is completed on the tBTC network side. The process consists of two steps: - initializeStake - this step reveals a deposit to tBTC Bridge to start minting process - finalizeStake - this step should be called after tBTC minting was completed to stake the tBTC tokens in Acre The functions are unprotected, it means that anyone can call them (e.g. bots). This solution will be used to enable gasless minting experience to the users, where only funding Bitcoin transaction will be required from them. The complexity comes with the actual minted tBTC amount calculation, as the fees are not unambiguously predictable. The stake finalization step calculates the amount to stake in Acre contract by deducting tBTC network minting fees from the initial funding transaction amount. The amount to stake is calculated depending on the process the tBTC was minted in: - for swept deposits: `amount = depositAmount - depositTreasuryFee - depositTxMaxFee` - for optimistically minted deposits: ``` amount = depositAmount - depositTreasuryFee - depositTxMaxFee - optimisticMintingFee ``` These calculation are simplified and can leave some positive imbalance in the Depositor contract. - depositTxMaxFee - this is a maximum transaction fee that can be deducted on Bitcoin transaction sweeping, - optimisticMintingFee - this is a optimistic minting fee snapshotted at the moment of the deposit reveal, there is a chance that the fee parameter is updated in the tBTC Vault contract before the optimistic minting is finalized. The imbalance should be donated to the Acre staking contract by the Governance. --- core/contracts/tbtc/TbtcDepositor.sol | 308 ++++++++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 core/contracts/tbtc/TbtcDepositor.sol diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol new file mode 100644 index 000000000..b8fd11673 --- /dev/null +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; + +import {IBridge} from "../external/tbtc/IBridge.sol"; +import {ITBTCVault} from "../external/tbtc/ITBTCVault.sol"; +import {Acre} from "../Acre.sol"; + +// TODO: Add Missfund token protection. +// TODO: Make Upgradable + +/// @title tBTC Depositor contract. +/// @notice The contract integrates Acre staking with tBTC minting. +/// User who want to stake BTC in Acre should submit a Bitcoin transaction +/// to the most recently created off-chain ECDSA wallets of the tBTC Bridge +/// using pay-to-script-hash (P2SH) or pay-to-witness-script-hash (P2WSH) +/// containing hashed information about this Depositor contract address, +/// and staker's Ethereum address. +/// Then, the staker initiates tBTC minting by revealing their Ethereum +/// address along with their deposit blinding factor, refund public key +/// hash and refund locktime on the tBTC Bridge through this Depositor +/// contract. +/// The off-chain ECDSA wallet listens for these sorts of +/// messages and when it gets one, it checks the Bitcoin network to make +/// sure the deposit lines up. If it does, the off-chain ECDSA wallet +/// may decide to pick the deposit transaction for sweeping, and when +/// the sweep operation is confirmed on the Bitcoin network, the tBTC Bridge +/// and tBTC vault mint the tBTC token to the Depositor address. +/// After tBTC is minted to the Depositor, on the stake finalization +/// tBTC is staked in Acre contract and stBTC shares are emitted to the +/// receiver pointed by the staker. +contract TbtcDepositor { + using BTCUtils for bytes; + using SafeERC20 for IERC20; + + struct StakeRequest { + // UNIX timestamp at which the deposit request was initialized. + uint64 requestedAt; + // UNIX timestamp at which the deposit request was finalized. + // 0 if not yet finalized. + uint64 finalizedAt; + // Maximum tBTC Deposit Transaction Fee snapshotted from the Bridge + // contract at the moment of deposit reveal. + uint64 tbtcDepositTxMaxFee; + // tBTC Optimistic Minting Fee Divisor snapshotted from the TBTC Vault + // contract at the moment of deposit reveal. + uint32 tbtcOptimisticMintingFeeDivisor; + } + + /// @notice tBTC Bridge contract. + IBridge public bridge; + /// @notice tBTC Vault contract. + ITBTCVault public tbtcVault; + /// @notice Acre contract. + Acre public acre; + + /// @notice Mapping of stake requests. + /// @dev The key is a deposit key computed in the same way as in tBTC Bridge: + /// `keccak256(fundingTxHash | fundingOutputIndex)`. + mapping(uint256 => StakeRequest) public stakeRequests; + + /// @notice Multiplier to convert satoshi (8 decimals precision) to tBTC + /// token units (18 decimals precision). + uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; + + // TODO: Decide if leave or remove? + uint64 public minimumFundingTransactionAmount; + + /// @dev Receiver address is zero. + error ReceiverIsZeroAddress(); + /// @dev Attempted to initiate a stake request that was already initialized. + error StakeRequestAlreadyInProgress(); + /// @dev Attempted to finalize a stake request that has not been initialized. + error StakeRequestNotInitialized(); + /// @dev Attempted to finalize a stake request that was already finalized. + error StakeRequestAlreadyFinalized(); + /// @dev Depositor address stored in the Deposit Request in the tBTC Bridge + /// contract doesn't match the current contract address. + error UnexpectedDepositor(address bridgeDepositRequestDepositor); + /// @dev Deposit was not completed on the tBTC side and tBTC was not minted + /// to the depositor contract. It is thrown when the deposit neither has + /// been optimistically minted nor swept. + error TbtcDepositNotCompleted(); + + + /// @notice Tbtc Depositor contract constructor. + /// @param _bridge tBTC Bridge contract instance. + /// @param _tbtcVault tBTC Vault contract instance. + /// @param _acre Acre contract instance. + constructor(IBridge _bridge, ITBTCVault _tbtcVault, Acre _acre) { + bridge = _bridge; + tbtcVault = _tbtcVault; + acre = _acre; + } + + /// @notice This function allows staking process initialization for a Bitcoin + /// deposit made by an user with a P2(W)SH transaction. It uses the + /// supplied information to reveal a deposit to the tBTC Bridge contract. + /// @dev Requirements: + /// - `reveal.walletPubKeyHash` must identify a `Live` wallet, + /// - `reveal.vault` must be 0x0 or point to a trusted vault, + /// - `reveal.fundingOutputIndex` must point to the actual P2(W)SH + /// output of the BTC deposit transaction, + /// - `reveal.blindingFactor` must be the blinding factor used in the + /// P2(W)SH BTC deposit transaction, + /// - `reveal.walletPubKeyHash` must be the wallet pub key hash used in + /// the P2(W)SH BTC deposit transaction, + /// - `reveal.refundPubKeyHash` must be the refund pub key hash used in + /// the P2(W)SH BTC deposit transaction, + /// - `reveal.refundLocktime` must be the refund locktime used in the + /// P2(W)SH BTC deposit transaction, + /// - `receiver` must be the receiver address used in the P2(W)SH BTC + /// deposit transaction as part of the extra data. + /// - `referral` must be the referral info used in the P2(W)SH BTC + /// deposit transaction as part of the extra data. + /// - BTC deposit for the given `fundingTxHash`, `fundingOutputIndex` + /// can be revealed only one time. + /// + /// If any of these requirements is not met, the wallet _must_ refuse + /// to sweep the deposit and the depositor has to wait until the + /// deposit script unlocks to receive their BTC back. + /// @param fundingTx Bitcoin funding transaction data, see `IBridge.BitcoinTxInfo`. + /// @param reveal Deposit reveal data, see `IBridge.DepositRevealInfo`. + /// @param receiver The address to which the stBTC shares will be minted. + /// @param referral Data used for referral program. + function initializeStake( + IBridge.BitcoinTxInfo calldata fundingTx, + IBridge.DepositRevealInfo calldata reveal, + address receiver, + uint16 referral + ) external { + if (receiver == address(0)) revert ReceiverIsZeroAddress(); + + // Calculate Bitcoin transaction hash. + bytes32 fundingTxHash = abi + .encodePacked( + fundingTx.version, + fundingTx.inputVector, + fundingTx.outputVector, + fundingTx.locktime + ) + .hash256View(); + + StakeRequest storage request = stakeRequests[ + calculateDepositKey(fundingTxHash, reveal.fundingOutputIndex) + ]; + + if (request.requestedAt > 0) revert StakeRequestAlreadyInProgress(); + + // solhint-disable-next-line not-rely-on-time + request.requestedAt = uint64(block.timestamp); + + // Reveal the deposit to tBTC Bridge contract. + bridge.revealDepositWithExtraData( + fundingTx, + reveal, + encodeExtraData(receiver, referral) + ); + + // Snapshot parameters required for fee calculation. + (, , request.tbtcDepositTxMaxFee, ) = bridge.depositParameters(); + request.tbtcOptimisticMintingFeeDivisor = tbtcVault + .optimisticMintingFeeDivisor(); + } + + /// @notice This function should be called for previously initialized stake + /// request, after tBTC minting process completed and tBTC was deposited + /// in this Depositor contract. + /// @dev It calculates the amount to stake in Acre contract by deducting + /// tBTC network minting fees from the initial funding transaction amount. + /// The amount to stake is calculated depending on the process the tBTC + /// was minted in: + /// - for swept deposits: + /// `amount = depositAmount - depositTreasuryFee - depositTxMaxFee` + /// - for optimistically minted deposits: + /// ``` + /// amount = depositAmount - depositTreasuryFee - depositTxMaxFee + /// - optimisticMintingFee + /// ``` + /// These calculation are simplified and can leave some positive + /// imbalance in the Depositor contract. + /// - depositTxMaxFee - this is a maximum transaction fee that can be deducted + /// on Bitcoin transaction sweeping, + /// - optimisticMintingFee - this is a optimistic minting fee snapshotted + /// at the moment of the deposit reveal, there is a chance that the fee + /// parameter is updated in the tBTC Vault contract before the optimistic + /// minting is finalized. + /// The imbalance should be donated to the Acre staking contract by the + /// Governance. + /// @param depositKey Deposit key computed as + /// `keccak256(fundingTxHash | fundingOutputIndex)`. + function finalizeStake(uint256 depositKey) external { + StakeRequest storage request = stakeRequests[depositKey]; + + if (request.requestedAt == 0) revert StakeRequestNotInitialized(); + if (request.finalizedAt >0) revert StakeRequestAlreadyFinalized(); + + // solhint-disable-next-line not-rely-on-time + request.finalizedAt = uint64(block.timestamp); + + // Get deposit details from tBTC Bridge and Vault contracts. + IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( + depositKey + ); + ITBTCVault.OptimisticMintingRequest + memory optimisticMintingRequest = tbtcVault + .optimisticMintingRequests(depositKey); + + // Check if Depositor revealed to the tBTC Bridge contract matches the + // current contract address. + if (bridgeDepositRequest.depositor != address(this)) revert UnexpectedDepositor(bridgeDepositRequest.depositor); + + // Extract funding transaction amount sent by the user in Bitcoin transaction. + uint256 fundingTxAmount = bridgeDepositRequest.amount; + + uint256 amountToStakeSat = (fundingTxAmount - + bridgeDepositRequest.treasuryFee - + request.tbtcDepositTxMaxFee); + + // Check if deposit was optimistically minted. + if (optimisticMintingRequest.finalizedAt > 0) { + // For tBTC minted with optimistic minting process additional fee + // is taken. The fee is calculated on `TBTCVautl.finalizeOptimisticMint` + // call, and not stored in the contract. + // There is a possibility the fee has changed since the snapshot of + // the `tbtcOptimisticMintingFeeDivisor`, to cover this scenario + // in fee computation we use the bigger of these. + uint256 optimisticMintingFeeDivisor = Math.max(request + .tbtcOptimisticMintingFeeDivisor, tbtcVault + .optimisticMintingFeeDivisor()); + + uint256 optimisticMintingFee = optimisticMintingFeeDivisor > 0 + ? (fundingTxAmount / optimisticMintingFeeDivisor) + : 0; + + amountToStakeSat -= optimisticMintingFee; + } else { + // If the deposit wan't optimistically minted check if it was swept. + if (bridgeDepositRequest.sweptAt == 0) revert TbtcDepositNotCompleted(); + } + + // Convert amount in satoshi to tBTC token precision. + uint256 amountToStakeTbtc = amountToStakeSat * SATOSHI_MULTIPLIER; + + // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit + // Request. + bytes32 extraData = bridgeDepositRequest.extraData; + (address receiver, uint16 referral) = decodeExtraData(extraData); + + // Stake tBTC in Acre. + IERC20(acre.asset()).safeIncreaseAllowance( + address(acre), + amountToStakeTbtc + ); + // TODO: Figure out what to do if deposit limit is reached in Acre + // TODO: Consider extracting stake function with referrals from Acre to this contract. + acre.stake(amountToStakeTbtc, receiver, referral); + } + + /// @notice Calculates deposit key the same way as the Bridge contract. + /// @dev The deposit key is computed as + /// `keccak256(fundingTxHash | fundingOutputIndex)`. + /// @param fundingTxHash Bitcoin transaction hash (ordered as in Bitcoin internally) + /// @param fundingOutputIndex Output in Bitcoin transaction used to fund + /// the deposit. + /// @return Calculated Deposit Key. + function calculateDepositKey( + bytes32 fundingTxHash, + uint32 fundingOutputIndex + ) public pure returns (uint256) { + return + uint256( + keccak256(abi.encodePacked(fundingTxHash, fundingOutputIndex)) + ); + } + + /// @notice Encode receiver address and referral as extra data. + /// @dev Packs the data to bytes32: 20 bytes of receiver address and + /// 2 bytes of referral, 10 bytes of trailing zeros. + /// @param receiver The address to which the stBTC shares will be minted. + /// @param referral Data used for referral program. + /// @return Encoded extra data. + function encodeExtraData( + address receiver, + uint16 referral + ) public pure returns (bytes32) { + return bytes32(abi.encodePacked(receiver, referral)); + } + + /// @notice Decodes receiver address and referral from extera data, + /// @dev Unpacks the data from bytes32: 20 bytes of receiver address and + /// 2 bytes of referral, 10 bytes of trailing zeros. + /// @param extraData Encoded extra data. + /// @return receiver The address to which the stBTC shares will be minted. + /// @return referral Data used for referral program. + function decodeExtraData( + bytes32 extraData + ) public pure returns (address receiver, uint16 referral) { + // First 20 bytes of extra data is receiver address. + receiver = address(uint160(bytes20(extraData))); + // Next 2 bytes of extra data is referral info. + referral = uint16(bytes2(extraData << (8 * 20))); + } +} From a95e09dfbc9fe14d44b4a05c685abf62ece352a6 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 19:00:53 +0100 Subject: [PATCH 003/122] Add dependency to @keep-network/bitcoin-spv-sol The dependency is used in TbtcDepositor contract to calculate bitcoin transaction hash. --- core/package.json | 1 + pnpm-lock.yaml | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/core/package.json b/core/package.json index ff7aa5197..e6c3e0de3 100644 --- a/core/package.json +++ b/core/package.json @@ -58,6 +58,7 @@ "typescript": "^5.3.2" }, "dependencies": { + "@keep-network/bitcoin-spv-sol": "3.4.0-solc-0.8", "@openzeppelin/contracts": "^5.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index adb0d21f3..b74bec39f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: core: dependencies: + '@keep-network/bitcoin-spv-sol': + specifier: 3.4.0-solc-0.8 + version: 3.4.0-solc-0.8 '@openzeppelin/contracts': specifier: ^5.0.0 version: 5.0.0 @@ -3826,6 +3829,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@keep-network/bitcoin-spv-sol@3.4.0-solc-0.8: + resolution: {integrity: sha512-KlpY9BbasyLvYXSS7dsJktgRChu/yjdFLOX8ldGA/pltLicCm/l0F4oqxL8wSws9XD12vq9x0B5qzPygVLB2TQ==} + dev: false + /@ledgerhq/devices@8.0.8: resolution: {integrity: sha512-0j7E8DY2jeSSATc8IJk+tXDZ9u+Z7tXxB8I4TzXrfV/8A5exMh/K1IwX6Jt1zlw1wre4CT9MV4mzUs3M/TE7lg==} dependencies: From 97337045b61d5823e6953e1b80690a2c2c32b21e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 19:03:06 +0100 Subject: [PATCH 004/122] Add TODO about minimum limits --- core/contracts/tbtc/TbtcDepositor.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index b8fd11673..4e7f238e2 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -260,6 +260,7 @@ contract TbtcDepositor { // TODO: Consider extracting stake function with referrals from Acre to this contract. acre.stake(amountToStakeTbtc, receiver, referral); } + // TODO: Handle minimum deposit amount in tBTC Bridge vs Acre. /// @notice Calculates deposit key the same way as the Bridge contract. /// @dev The deposit key is computed as From c1b4b12df33e8b0fc2fa4220dbfcde0913f1249f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 19:07:14 +0100 Subject: [PATCH 005/122] Change referral type to uint16 uint16 should be enough to track partners as the max value is 65535. --- core/contracts/Acre.sol | 4 ++-- core/test/Acre.test.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/contracts/Acre.sol b/core/contracts/Acre.sol index 0e1cf640f..1679b659b 100644 --- a/core/contracts/Acre.sol +++ b/core/contracts/Acre.sol @@ -32,12 +32,12 @@ contract Acre is ERC4626 { function stake( uint256 assets, address receiver, - bytes32 referral + uint16 referral ) public returns (uint256) { // TODO: revisit the type of referral. uint256 shares = deposit(assets, receiver); - if (referral != bytes32(0)) { + if (referral > 0) { emit StakeReferral(referral, assets); } diff --git a/core/test/Acre.test.ts b/core/test/Acre.test.ts index 4a5960e3e..9d7d0c9c6 100644 --- a/core/test/Acre.test.ts +++ b/core/test/Acre.test.ts @@ -37,7 +37,7 @@ describe("Acre", () => { }) describe("stake", () => { - const referral = ethers.encodeBytes32String("referral") + const referral: number = 17283 let snapshot: SnapshotRestorer context("when staking as first staker", () => { From 6f48f76b3691eed63d179a1cd8fb0daef7e6b857 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 19:15:07 +0100 Subject: [PATCH 006/122] Update referral type in StakeReferral event --- core/contracts/Acre.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/contracts/Acre.sol b/core/contracts/Acre.sol index 1679b659b..967896c3e 100644 --- a/core/contracts/Acre.sol +++ b/core/contracts/Acre.sol @@ -15,7 +15,7 @@ import "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol"; /// burning of shares (stBTC), which are represented as standard ERC20 /// tokens, providing a seamless exchange with tBTC tokens. contract Acre is ERC4626 { - event StakeReferral(bytes32 indexed referral, uint256 assets); + event StakeReferral(uint16 indexed referral, uint256 assets); constructor( IERC20 tbtc From 27fb5ff3772be95865edaf672a0b18d8524c258a Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 22 Dec 2023 19:25:47 +0100 Subject: [PATCH 007/122] Fix formatting --- core/contracts/tbtc/TbtcDepositor.sol | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 4e7f238e2..b149ef4bc 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -86,7 +86,6 @@ contract TbtcDepositor { /// been optimistically minted nor swept. error TbtcDepositNotCompleted(); - /// @notice Tbtc Depositor contract constructor. /// @param _bridge tBTC Bridge contract instance. /// @param _tbtcVault tBTC Vault contract instance. @@ -197,7 +196,7 @@ contract TbtcDepositor { StakeRequest storage request = stakeRequests[depositKey]; if (request.requestedAt == 0) revert StakeRequestNotInitialized(); - if (request.finalizedAt >0) revert StakeRequestAlreadyFinalized(); + if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); // solhint-disable-next-line not-rely-on-time request.finalizedAt = uint64(block.timestamp); @@ -212,7 +211,8 @@ contract TbtcDepositor { // Check if Depositor revealed to the tBTC Bridge contract matches the // current contract address. - if (bridgeDepositRequest.depositor != address(this)) revert UnexpectedDepositor(bridgeDepositRequest.depositor); + if (bridgeDepositRequest.depositor != address(this)) + revert UnexpectedDepositor(bridgeDepositRequest.depositor); // Extract funding transaction amount sent by the user in Bitcoin transaction. uint256 fundingTxAmount = bridgeDepositRequest.amount; @@ -229,9 +229,10 @@ contract TbtcDepositor { // There is a possibility the fee has changed since the snapshot of // the `tbtcOptimisticMintingFeeDivisor`, to cover this scenario // in fee computation we use the bigger of these. - uint256 optimisticMintingFeeDivisor = Math.max(request - .tbtcOptimisticMintingFeeDivisor, tbtcVault - .optimisticMintingFeeDivisor()); + uint256 optimisticMintingFeeDivisor = Math.max( + request.tbtcOptimisticMintingFeeDivisor, + tbtcVault.optimisticMintingFeeDivisor() + ); uint256 optimisticMintingFee = optimisticMintingFeeDivisor > 0 ? (fundingTxAmount / optimisticMintingFeeDivisor) @@ -240,7 +241,8 @@ contract TbtcDepositor { amountToStakeSat -= optimisticMintingFee; } else { // If the deposit wan't optimistically minted check if it was swept. - if (bridgeDepositRequest.sweptAt == 0) revert TbtcDepositNotCompleted(); + if (bridgeDepositRequest.sweptAt == 0) + revert TbtcDepositNotCompleted(); } // Convert amount in satoshi to tBTC token precision. From d409aeacb98bfa16921f15901b86885296ae21a4 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 3 Jan 2024 14:24:07 +0100 Subject: [PATCH 008/122] Fix ducumentation --- core/contracts/tbtc/TbtcDepositor.sol | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index b149ef4bc..eb2cf3ad1 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -15,7 +15,7 @@ import {Acre} from "../Acre.sol"; /// @title tBTC Depositor contract. /// @notice The contract integrates Acre staking with tBTC minting. -/// User who want to stake BTC in Acre should submit a Bitcoin transaction +/// User who wants to stake BTC in Acre should submit a Bitcoin transaction /// to the most recently created off-chain ECDSA wallets of the tBTC Bridge /// using pay-to-script-hash (P2SH) or pay-to-witness-script-hash (P2WSH) /// containing hashed information about this Depositor contract address, @@ -177,7 +177,7 @@ contract TbtcDepositor { /// `amount = depositAmount - depositTreasuryFee - depositTxMaxFee` /// - for optimistically minted deposits: /// ``` - /// amount = depositAmount - depositTreasuryFee - depositTxMaxFee + /// amount = depositAmount - depositTreasuryFee - depositTxMaxFee /// - optimisticMintingFee /// ``` /// These calculation are simplified and can leave some positive @@ -188,9 +188,8 @@ contract TbtcDepositor { /// at the moment of the deposit reveal, there is a chance that the fee /// parameter is updated in the tBTC Vault contract before the optimistic /// minting is finalized. - /// The imbalance should be donated to the Acre staking contract by the - /// Governance. - /// @param depositKey Deposit key computed as + /// The imbalance is considered a part of the depositor fee. + /// @param depositKey Deposit key computed as /// `keccak256(fundingTxHash | fundingOutputIndex)`. function finalizeStake(uint256 depositKey) external { StakeRequest storage request = stakeRequests[depositKey]; @@ -224,7 +223,7 @@ contract TbtcDepositor { // Check if deposit was optimistically minted. if (optimisticMintingRequest.finalizedAt > 0) { // For tBTC minted with optimistic minting process additional fee - // is taken. The fee is calculated on `TBTCVautl.finalizeOptimisticMint` + // is taken. The fee is calculated on `TBTCVault.finalizeOptimisticMint` // call, and not stored in the contract. // There is a possibility the fee has changed since the snapshot of // the `tbtcOptimisticMintingFeeDivisor`, to cover this scenario @@ -294,7 +293,7 @@ contract TbtcDepositor { return bytes32(abi.encodePacked(receiver, referral)); } - /// @notice Decodes receiver address and referral from extera data, + /// @notice Decodes receiver address and referral from extra data, /// @dev Unpacks the data from bytes32: 20 bytes of receiver address and /// 2 bytes of referral, 10 bytes of trailing zeros. /// @param extraData Encoded extra data. From 4ea86174c4a3432c0a50263d0594a7c16379b2ae Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 3 Jan 2024 17:02:54 +0100 Subject: [PATCH 009/122] Emit events on stake initialization and finalization --- core/contracts/tbtc/TbtcDepositor.sol | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index eb2cf3ad1..2689f370f 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -70,6 +70,30 @@ contract TbtcDepositor { // TODO: Decide if leave or remove? uint64 public minimumFundingTransactionAmount; + /// @notice Emitted when a stake request is initialized. + /// @dev Deposit details can be fetched from {{ Bridge.DepositRevealed }} + /// event emitted in the same transaction. + /// @param depositKey Deposit identifier. + /// @param caller Address that initialized the stake request. + /// @param receiver The address to which the stBTC shares will be minted. + /// @return referral Data used for referral program. + event StakeInitialized( + uint256 indexed depositKey, + address indexed caller, + address receiver, + uint16 referral + ); + + /// @notice Emitted when a stake request is finalized. + /// @dev Deposit details can be fetched from {{ ERC4626.Deposit }} + /// event emitted in the same transaction. + /// @param depositKey Deposit identifier. + /// @param caller Address that finalized the stake request. + event StakeFinalized( + uint256 indexed depositKey, + address indexed caller + ); + /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); /// @dev Attempted to initiate a stake request that was already initialized. @@ -144,12 +168,15 @@ contract TbtcDepositor { ) .hash256View(); + uint256 depositKey = calculateDepositKey(fundingTxHash, reveal.fundingOutputIndex); StakeRequest storage request = stakeRequests[ - calculateDepositKey(fundingTxHash, reveal.fundingOutputIndex) + depositKey ]; if (request.requestedAt > 0) revert StakeRequestAlreadyInProgress(); + emit StakeInitialized(depositKey, msg.sender, receiver, referral); + // solhint-disable-next-line not-rely-on-time request.requestedAt = uint64(block.timestamp); @@ -252,6 +279,8 @@ contract TbtcDepositor { bytes32 extraData = bridgeDepositRequest.extraData; (address receiver, uint16 referral) = decodeExtraData(extraData); + emit StakeFinalized(depositKey, msg.sender); + // Stake tBTC in Acre. IERC20(acre.asset()).safeIncreaseAllowance( address(acre), From be66889220e22a97b376619a323109e7e1382522 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 4 Jan 2024 10:57:47 +0100 Subject: [PATCH 010/122] Add missing dependency in Acre deployment script --- core/deploy/21_transfer_ownership_acre.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/core/deploy/21_transfer_ownership_acre.ts b/core/deploy/21_transfer_ownership_acre.ts index 09a875a1d..f903996a8 100644 --- a/core/deploy/21_transfer_ownership_acre.ts +++ b/core/deploy/21_transfer_ownership_acre.ts @@ -19,3 +19,4 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func func.tags = ["TransferOwnershipAcre"] +func.dependencies = ["Acre"] From e9af2acb9ee8ca5275062062cbd49ca4b9fa2638 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 4 Jan 2024 10:56:55 +0100 Subject: [PATCH 011/122] Make TbtcDepositor contract Ownable The contract is Ownable with governance as the owner. --- core/contracts/tbtc/TbtcDepositor.sol | 23 +++++++++++-------- .../23_transfer_ownership_tbtc_depositor.ts | 22 ++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 core/deploy/23_transfer_ownership_tbtc_depositor.ts diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 2689f370f..1a0543d77 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.21; import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; @@ -33,7 +34,7 @@ import {Acre} from "../Acre.sol"; /// After tBTC is minted to the Depositor, on the stake finalization /// tBTC is staked in Acre contract and stBTC shares are emitted to the /// receiver pointed by the staker. -contract TbtcDepositor { +contract TbtcDepositor is Ownable { using BTCUtils for bytes; using SafeERC20 for IERC20; @@ -89,10 +90,7 @@ contract TbtcDepositor { /// event emitted in the same transaction. /// @param depositKey Deposit identifier. /// @param caller Address that finalized the stake request. - event StakeFinalized( - uint256 indexed depositKey, - address indexed caller - ); + event StakeFinalized(uint256 indexed depositKey, address indexed caller); /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); @@ -114,7 +112,11 @@ contract TbtcDepositor { /// @param _bridge tBTC Bridge contract instance. /// @param _tbtcVault tBTC Vault contract instance. /// @param _acre Acre contract instance. - constructor(IBridge _bridge, ITBTCVault _tbtcVault, Acre _acre) { + constructor( + IBridge _bridge, + ITBTCVault _tbtcVault, + Acre _acre + ) Ownable(msg.sender) { bridge = _bridge; tbtcVault = _tbtcVault; acre = _acre; @@ -168,10 +170,11 @@ contract TbtcDepositor { ) .hash256View(); - uint256 depositKey = calculateDepositKey(fundingTxHash, reveal.fundingOutputIndex); - StakeRequest storage request = stakeRequests[ - depositKey - ]; + uint256 depositKey = calculateDepositKey( + fundingTxHash, + reveal.fundingOutputIndex + ); + StakeRequest storage request = stakeRequests[depositKey]; if (request.requestedAt > 0) revert StakeRequestAlreadyInProgress(); diff --git a/core/deploy/23_transfer_ownership_tbtc_depositor.ts b/core/deploy/23_transfer_ownership_tbtc_depositor.ts new file mode 100644 index 000000000..d448b30a5 --- /dev/null +++ b/core/deploy/23_transfer_ownership_tbtc_depositor.ts @@ -0,0 +1,22 @@ +import type { HardhatRuntimeEnvironment } from "hardhat/types" +import type { DeployFunction } from "hardhat-deploy/types" + +const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { + const { getNamedAccounts, deployments } = hre + const { deployer, governance } = await getNamedAccounts() + const { log } = deployments + + log(`transferring ownership of TbtcDepositor contract to ${governance}`) + + await deployments.execute( + "TbtcDepositor", + { from: deployer, log: true, waitConfirmations: 1 }, + "transferOwnership", + governance, + ) +} + +export default func + +func.tags = ["TransferOwnershipAcre"] +func.dependencies = ["TbtcDepositor"] From c2720af877354691e85374e6b2635dbaec248a80 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 4 Jan 2024 11:10:08 +0100 Subject: [PATCH 012/122] Define tBTC Depositor's depositor fee Define a fee for tBTC Depositor contract that will be taken before staking tBTC in Acre contract. The fee should cover costs of running maintainer bots that will execute initializeStake and finalizeStake methods. The fee is calculated based on the divisor. Initial value for the fee is set to zero. --- core/contracts/tbtc/TbtcDepositor.sol | 69 ++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 11 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 1a0543d77..b921d1c5f 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -68,6 +68,15 @@ contract TbtcDepositor is Ownable { /// token units (18 decimals precision). uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; + /// @notice Divisor used to compute the depositor fee taken from each deposit + /// and transferred to the treasury upon stake request finalization. + /// @dev That fee is computed as follows: + /// `depositorFee = depositedAmount / depositorFeeDivisor` + /// for example, if the depositor fee needs to be 2% of each deposit, + /// the `depositorFeeDivisor` should be set to `50` because + /// `1/50 = 0.02 = 2%`. + uint64 public depositorFeeDivisor; + // TODO: Decide if leave or remove? uint64 public minimumFundingTransactionAmount; @@ -92,6 +101,10 @@ contract TbtcDepositor is Ownable { /// @param caller Address that finalized the stake request. event StakeFinalized(uint256 indexed depositKey, address indexed caller); + /// @notice Emitted when a depositor fee divisor is updated. + /// @param depositorFeeDivisor New value of the depositor fee divisor. + event DepositorFeeDivisorUpdated(uint64 depositorFeeDivisor); + /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); /// @dev Attempted to initiate a stake request that was already initialized. @@ -120,6 +133,8 @@ contract TbtcDepositor is Ownable { bridge = _bridge; tbtcVault = _tbtcVault; acre = _acre; + + depositorFeeDivisor = 0; // Depositor fee is disabled initially. } /// @notice This function allows staking process initialization for a Bitcoin @@ -200,9 +215,11 @@ contract TbtcDepositor is Ownable { /// request, after tBTC minting process completed and tBTC was deposited /// in this Depositor contract. /// @dev It calculates the amount to stake in Acre contract by deducting - /// tBTC network minting fees from the initial funding transaction amount. - /// The amount to stake is calculated depending on the process the tBTC - /// was minted in: + /// tBTC protocol minting fee and the Depositor fee from the initial + /// funding transaction amount. + /// + /// The tBTC protocol minting fee is calculated depending on the process + /// the tBTC was minted in: /// - for swept deposits: /// `amount = depositAmount - depositTreasuryFee - depositTxMaxFee` /// - for optimistically minted deposits: @@ -218,7 +235,11 @@ contract TbtcDepositor is Ownable { /// at the moment of the deposit reveal, there is a chance that the fee /// parameter is updated in the tBTC Vault contract before the optimistic /// minting is finalized. - /// The imbalance is considered a part of the depositor fee. + /// The imbalance is left in the tBTC Depositor contract. + /// + /// The Depositor fee is computed based on the `depositorFeeDivisor` + /// parameter. The fee is transferred to the treasury wallet on the + /// stake request finalization. /// @param depositKey Deposit key computed as /// `keccak256(fundingTxHash | fundingOutputIndex)`. function finalizeStake(uint256 depositKey) external { @@ -246,9 +267,9 @@ contract TbtcDepositor is Ownable { // Extract funding transaction amount sent by the user in Bitcoin transaction. uint256 fundingTxAmount = bridgeDepositRequest.amount; - uint256 amountToStakeSat = (fundingTxAmount - - bridgeDepositRequest.treasuryFee - - request.tbtcDepositTxMaxFee); + // Estimate tBTC protocol fees for minting. + uint256 tbtcMintingFees = bridgeDepositRequest.treasuryFee + + request.tbtcDepositTxMaxFee; // Check if deposit was optimistically minted. if (optimisticMintingRequest.finalizedAt > 0) { @@ -267,32 +288,58 @@ contract TbtcDepositor is Ownable { ? (fundingTxAmount / optimisticMintingFeeDivisor) : 0; - amountToStakeSat -= optimisticMintingFee; + tbtcMintingFees += optimisticMintingFee; } else { - // If the deposit wan't optimistically minted check if it was swept. + // If the deposit wasn't optimistically minted check if it was swept. if (bridgeDepositRequest.sweptAt == 0) revert TbtcDepositNotCompleted(); } + // Compute depositor fee. + uint256 depositorFee = depositorFeeDivisor > 0 + ? (fundingTxAmount / depositorFeeDivisor) + : 0; + + // Calculate tBTC amount available to stake after subtracting all the fees. // Convert amount in satoshi to tBTC token precision. - uint256 amountToStakeTbtc = amountToStakeSat * SATOSHI_MULTIPLIER; + uint256 amountToStakeTbtc = (fundingTxAmount - + tbtcMintingFees - + depositorFee) * SATOSHI_MULTIPLIER; - // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit + // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit. // Request. bytes32 extraData = bridgeDepositRequest.extraData; (address receiver, uint16 referral) = decodeExtraData(extraData); emit StakeFinalized(depositKey, msg.sender); + // Transfer depositor fee to the treasury wallet. + if (depositorFee > 0) { + IERC20(acre.asset()).safeTransfer(acre.treasury(), depositorFee); + } + // Stake tBTC in Acre. IERC20(acre.asset()).safeIncreaseAllowance( address(acre), amountToStakeTbtc ); + // TODO: Figure out what to do if deposit limit is reached in Acre // TODO: Consider extracting stake function with referrals from Acre to this contract. acre.stake(amountToStakeTbtc, receiver, referral); } + + /// @notice Updates the depositor fee divisor. + /// @param newDepositorFeeDivisor New depositor fee divisor value. + function updateDepositorFeeDivisor( + uint64 newDepositorFeeDivisor + ) external onlyOwner { + // TODO: Introduce a parameters update process. + depositorFeeDivisor = newDepositorFeeDivisor; + + emit DepositorFeeDivisorUpdated(newDepositorFeeDivisor); + } + // TODO: Handle minimum deposit amount in tBTC Bridge vs Acre. /// @notice Calculates deposit key the same way as the Bridge contract. From fda93b749d499824c04128bb2bf953db7057dafd Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 4 Jan 2024 20:27:53 +0100 Subject: [PATCH 013/122] Define treasury address reference in Acre contract The treasury address will be used as a destination to transfer fees. --- core/contracts/Acre.sol | 25 ++++++++++++++++++++++--- core/hardhat.config.ts | 11 ++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/core/contracts/Acre.sol b/core/contracts/Acre.sol index c6841b031..70157d62a 100644 --- a/core/contracts/Acre.sol +++ b/core/contracts/Acre.sol @@ -22,6 +22,10 @@ contract Acre is ERC4626, Ownable { /// Dispatcher contract that routes tBTC from Acre to a given vault and back. Dispatcher public dispatcher; + + /// Address of the treasury wallet, where fees should be transferred to. + address public treasury; + /// Minimum amount for a single deposit operation. uint256 public minimumDepositAmount; /// Maximum total amount of tBTC token held by Acre. @@ -32,6 +36,10 @@ contract Acre is ERC4626, Ownable { /// @param assets Amount of tBTC tokens staked. event StakeReferral(uint16 indexed referral, uint256 assets); + /// Emitted when the treasury wallet address is updated. + /// @param treasury New treasury wallet address. + event TreasuryUpdated(address treasury); + /// Emitted when deposit parameters are updated. /// @param minimumDepositAmount New value of the minimum deposit amount. /// @param maximumTotalAssets New value of the maximum total assets amount. @@ -54,13 +62,24 @@ contract Acre is ERC4626, Ownable { error ZeroAddress(); constructor( - IERC20 tbtc - ) ERC4626(tbtc) ERC20("Acre Staked Bitcoin", "stBTC") Ownable(msg.sender) { + IERC20 _tbtc, + address _treasury + ) ERC4626(_tbtc) ERC20("Acre Staked Bitcoin", "stBTC") Ownable(msg.sender) { + treasury = _treasury; // TODO: Revisit the exact values closer to the launch. - minimumDepositAmount = 0.01 * 1e18; // 0.01 tBTC + minimumDepositAmount = 0.001 * 1e18; // 0.001 tBTC maximumTotalAssets = 25 * 1e18; // 25 tBTC } + /// @notice Updates treasury wallet address. + /// @param newTreasury New treasury wallet address. + function updateTreasury(address newTreasury) external onlyOwner { + // TODO: Introduce a parameters update process. + treasury = newTreasury; + + emit TreasuryUpdated(newTreasury); + } + /// @notice Updates deposit parameters. /// @dev To disable the limit for deposits, set the maximum total assets to /// maximum (`type(uint256).max`). diff --git a/core/hardhat.config.ts b/core/hardhat.config.ts index 0a2053a70..df0ebebd1 100644 --- a/core/hardhat.config.ts +++ b/core/hardhat.config.ts @@ -63,19 +63,24 @@ const config: HardhatUserConfig = { namedAccounts: { deployer: { default: 1, - sepolia: 0, - mainnet: "", + sepolia: 0, // TODO: updated to the actual address once available + mainnet: "", // TODO: updated to the actual address once available }, governance: { default: 2, sepolia: 0, // TODO: updated to the actual address once available mainnet: "", // TODO: updated to the actual address once available }, - maintainer: { + treasury: { default: 3, sepolia: 0, // TODO: updated to the actual address once available mainnet: "", // TODO: updated to the actual address once available }, + maintainer: { + default: 4, + sepolia: 0, // TODO: updated to the actual address once available + mainnet: "", // TODO: updated to the actual address once available + }, }, contractSizer: { From dee6db3fc97406b09c5a05ccc5725f1b77b1a384 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 4 Jan 2024 20:30:09 +0100 Subject: [PATCH 014/122] Document minimum deposit amount The value for minimum deposit amount in Acre contract should consider the amount that will be a result of TbtcDepositor stake. It means that it is dependend on tBTC minimum deposit (`depositDustThreshold`) and all the fees taken by tBTC minting process and TbtcDepositor fee. --- core/contracts/Acre.sol | 7 ++++++- core/contracts/tbtc/TbtcDepositor.sol | 10 ++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/contracts/Acre.sol b/core/contracts/Acre.sol index 70157d62a..01545e1a2 100644 --- a/core/contracts/Acre.sol +++ b/core/contracts/Acre.sol @@ -26,8 +26,13 @@ contract Acre is ERC4626, Ownable { /// Address of the treasury wallet, where fees should be transferred to. address public treasury; - /// Minimum amount for a single deposit operation. + /// Minimum amount for a single deposit operation. The value should be set + /// low enough so the deposits routed through TbtcDepositor contract won't + /// be rejected. It means that minimumDepositAmount should be lower than + /// tBTC protocol's depositDustThreshold reduced by all the minting fees taken + /// before depositing in the Acre contract. uint256 public minimumDepositAmount; + /// Maximum total amount of tBTC token held by Acre. uint256 public maximumTotalAssets; diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index b921d1c5f..f62f3a542 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -77,16 +77,13 @@ contract TbtcDepositor is Ownable { /// `1/50 = 0.02 = 2%`. uint64 public depositorFeeDivisor; - // TODO: Decide if leave or remove? - uint64 public minimumFundingTransactionAmount; - /// @notice Emitted when a stake request is initialized. /// @dev Deposit details can be fetched from {{ Bridge.DepositRevealed }} /// event emitted in the same transaction. /// @param depositKey Deposit identifier. /// @param caller Address that initialized the stake request. /// @param receiver The address to which the stBTC shares will be minted. - /// @return referral Data used for referral program. + /// @param referral Data used for referral program. event StakeInitialized( uint256 indexed depositKey, address indexed caller, @@ -107,15 +104,20 @@ contract TbtcDepositor is Ownable { /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); + /// @dev Attempted to initiate a stake request that was already initialized. error StakeRequestAlreadyInProgress(); + /// @dev Attempted to finalize a stake request that has not been initialized. error StakeRequestNotInitialized(); + /// @dev Attempted to finalize a stake request that was already finalized. error StakeRequestAlreadyFinalized(); + /// @dev Depositor address stored in the Deposit Request in the tBTC Bridge /// contract doesn't match the current contract address. error UnexpectedDepositor(address bridgeDepositRequestDepositor); + /// @dev Deposit was not completed on the tBTC side and tBTC was not minted /// to the depositor contract. It is thrown when the deposit neither has /// been optimistically minted nor swept. From f24ccb895a33bc2b0504f99269d34df9a3012827 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 4 Jan 2024 20:36:14 +0100 Subject: [PATCH 015/122] Add function to help estimate fees The function estimates fees that will be taken for a deposit of a given amount by: - tBTC protocol minting - tBTC Depositor contract - Acre contract's deposit function --- core/contracts/tbtc/TbtcDepositor.sol | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index f62f3a542..59cdc8a22 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -331,6 +331,61 @@ contract TbtcDepositor is Ownable { acre.stake(amountToStakeTbtc, receiver, referral); } + /// @notice Estimate and breakdown fees taken for `amount` of stake. + /// @dev It doesn't validate the amount against minimum and maximum limits + /// for tBTC minting and Acre depositing processes. + /// @param amount Amount of Bitcoin the user wants to stake. + /// @return maxTbtcMintingFee Maximum tBTC protocol minting fees for the given + /// amount. + /// @return tbtcDepositorFee TbtcDepositor fee for the given amount. + /// @return acreDepositFee Acre deposit fee for the given amount. + function estimateFees( + uint256 amount + ) + external + view + returns ( + uint256 maxTbtcMintingFee, + uint256 tbtcDepositorFee, + uint256 acreDepositFee + ) + { + ( + , + uint64 tbtcDepositTreasuryFeeDivisor, + uint64 tbtcDepositTxMaxFee, + + ) = bridge.depositParameters(); + + // Calculate Treasury fee. + uint256 tbtcTreasuryFee = tbtcDepositTreasuryFeeDivisor > 0 + ? amount / tbtcDepositTreasuryFeeDivisor + : 0; + + // Calculate Optimistic Minting fee. + uint32 tbtcOptimisticMintingFeeDivisor = tbtcVault + .optimisticMintingFeeDivisor(); + uint256 optimisticMintingFee = tbtcOptimisticMintingFeeDivisor > 0 + ? (amount / tbtcOptimisticMintingFeeDivisor) + : 0; + + // Total maximum tBTC minting fees. + maxTbtcMintingFee = + tbtcTreasuryFee + + tbtcDepositTxMaxFee + + optimisticMintingFee; + + // Calculate TbtcDepositor fee. + tbtcDepositorFee = depositorFeeDivisor > 0 + ? amount / depositorFeeDivisor + : 0; + + // Calculate Acre deposit fee. + // TODO: Make sure the calculation takes into account the Acre contract + // deposit fee charged by `Acre.deposit` function once it is implemented. + acreDepositFee = 0; + } + /// @notice Updates the depositor fee divisor. /// @param newDepositorFeeDivisor New depositor fee divisor value. function updateDepositorFeeDivisor( From 53e33f07d13853e1d4c0b4c51dbb38d5cf47f8e1 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 12:41:23 +0100 Subject: [PATCH 016/122] Add unit tests for extra data encode/decode functions --- core/test/TbtcDepositor.test.ts | 140 ++++++++++++++++++++++++++++++++ core/test/helpers/context.ts | 12 ++- 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 core/test/TbtcDepositor.test.ts diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts new file mode 100644 index 000000000..5875fdba9 --- /dev/null +++ b/core/test/TbtcDepositor.test.ts @@ -0,0 +1,140 @@ +import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" + +import { expect } from "chai" +import type { TbtcDepositor } from "../typechain" +import { deployment } from "./helpers" + +async function fixture() { + const { tbtcDepositor } = await deployment() + + return { tbtcDepositor } +} + +describe("TbtcDepositor", () => { + let tbtcDepositor: TbtcDepositor + + before(async () => { + ;({ tbtcDepositor } = await loadFixture(fixture)) + }) + + describe("initializeStake", () => {}) + + describe("finalizeStake", () => {}) + + describe("updateDepositorFeeDivisor", () => {}) + + describe("calculateDepositKey", () => {}) + + const extraDataValidTestData = new Map< + string, + { + receiver: string + referral: number + extraData: string + } + >([ + [ + "receiver has leading zeros", + { + receiver: "0x000055d85E80A49B5930C4a77975d44f012D86C1", + referral: 6851, // hex: 0x1ac3 + extraData: + "0x000055d85e80a49b5930c4a77975d44f012d86c11ac300000000000000000000", + }, + ], + [ + "receiver has trailing zeros", + { + receiver: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", + referral: 6851, // hex: 0x1ac3 + extraData: + "0x2d2f8bc7923f7f806dc9bb2e17f950b42cfe00001ac300000000000000000000", + }, + ], + [ + "referral is zero", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 0, + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89e000000000000000000000000", + }, + ], + [ + "referral has leading zeros", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 31, // hex: 0x001f + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89e001f00000000000000000000", + }, + ], + [ + "referral has trailing zeros", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 19712, // hex: 0x4d00 + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89e4d0000000000000000000000", + }, + ], + [ + "referral is maximum value", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 65535, // max uint16 + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89effff00000000000000000000", + }, + ], + ]) + + describe("encodeExtraData", () => { + extraDataValidTestData.forEach( + ({ receiver, referral, extraData: expectedExtraData }, testName) => { + it(testName, async () => { + expect( + await tbtcDepositor.encodeExtraData(receiver, referral), + ).to.be.equal(expectedExtraData) + }) + }, + ) + }) + + describe("decodeExtraData", () => { + extraDataValidTestData.forEach( + ( + { receiver: expectedReceiver, referral: expectedReferral, extraData }, + testName, + ) => { + it(testName, async () => { + const [actualReceiver, actualReferral] = + await tbtcDepositor.decodeExtraData(extraData) + + expect(actualReceiver, "invalid receiver").to.be.equal( + expectedReceiver, + ) + expect(actualReferral, "invalid referral").to.be.equal( + expectedReferral, + ) + }) + }, + ) + + it("with unused bytes filled with data", async () => { + // Extra data uses address (20 bytes) and referral (2 bytes), leaving the + // remaining 10 bytes unused. This test fills the unused bytes with a random + // value. + const extraData = + "0xeb098d6cde6a202981316b24b19e64d82721e89e1ac3105f9919321ea7d75f58" + const expectedReceiver = "0xeb098d6cDE6A202981316b24B19e64D82721e89E" + const expectedReferral = 6851 // hex: 0x1ac3 + + const [actualReceiver, actualReferral] = + await tbtcDepositor.decodeExtraData(extraData) + + expect(actualReceiver, "invalid receiver").to.be.equal(expectedReceiver) + expect(actualReferral, "invalid referral").to.be.equal(expectedReferral) + }) + }) +}) diff --git a/core/test/helpers/context.ts b/core/test/helpers/context.ts index 239242a39..84d661445 100644 --- a/core/test/helpers/context.ts +++ b/core/test/helpers/context.ts @@ -2,7 +2,13 @@ import { deployments } from "hardhat" import { getDeployedContract } from "./contract" -import type { Acre, Dispatcher, TestERC20, TestERC4626 } from "../../typechain" +import type { + Acre, + Dispatcher, + TestERC20, + TbtcDepositor, + TestERC4626, +} from "../../typechain" // eslint-disable-next-line import/prefer-default-export export async function deployment() { @@ -10,8 +16,10 @@ export async function deployment() { const tbtc: TestERC20 = await getDeployedContract("TBTC") const acre: Acre = await getDeployedContract("Acre") + const tbtcDepositor: TbtcDepositor = + await getDeployedContract("TbtcDepositor") const dispatcher: Dispatcher = await getDeployedContract("Dispatcher") const vault: TestERC4626 = await getDeployedContract("Vault") - return { tbtc, acre, dispatcher, vault } + return { tbtc, acre, tbtcDepositor, dispatcher, vault } } From 0648cb90c2ce6dae529445162af90619e832828d Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 13:01:17 +0100 Subject: [PATCH 017/122] Add unit tests for updateDepositorFeeDivisor --- core/test/TbtcDepositor.test.ts | 58 +++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 5875fdba9..267387a54 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -1,8 +1,12 @@ +/* eslint-disable func-names */ import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" import { expect } from "chai" +import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" +import { ContractTransactionResponse } from "ethers" import type { TbtcDepositor } from "../typechain" -import { deployment } from "./helpers" +import { deployment, getNamedSigner, getUnnamedSigner } from "./helpers" +import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" async function fixture() { const { tbtcDepositor } = await deployment() @@ -13,15 +17,65 @@ async function fixture() { describe("TbtcDepositor", () => { let tbtcDepositor: TbtcDepositor + let governance: HardhatEthersSigner + let thirdParty: HardhatEthersSigner + before(async () => { ;({ tbtcDepositor } = await loadFixture(fixture)) + ;({ governance } = await getNamedSigner()) + ;[thirdParty] = await getUnnamedSigner() }) describe("initializeStake", () => {}) describe("finalizeStake", () => {}) - describe("updateDepositorFeeDivisor", () => {}) + describe("updateDepositorFeeDivisor", () => { + context("when caller is not governance", () => { + it("should revert", async () => { + await expect( + tbtcDepositor.connect(thirdParty).updateDepositorFeeDivisor(1234), + ) + .to.be.revertedWithCustomError( + tbtcDepositor, + "OwnableUnauthorizedAccount", + ) + .withArgs(thirdParty.address) + }) + }) + + context("when caller is governance", () => { + const testUpdateDepositorFeeDivisor = (newValue: number) => + function () { + beforeAfterSnapshotWrapper() + + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(newValue) + }) + + it("should emit DepositorFeeDivisorUpdated event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "DepositorFeeDivisorUpdated") + .withArgs(newValue) + }) + + it("should update value correctly", async () => { + expect(await tbtcDepositor.depositorFeeDivisor()).to.be.eq(newValue) + }) + } + + describe( + "when new value is non-zero", + testUpdateDepositorFeeDivisor(47281), + ) + + describe("when new value is zero", testUpdateDepositorFeeDivisor(0)) + }) + }) describe("calculateDepositKey", () => {}) From 9ee08d68eedde7d2e623b83644fb31b46bd2eb49 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 13:02:59 +0100 Subject: [PATCH 018/122] Use beforeAfterSnapshotWrapper in updateDepositorFeeDivisor tests The wrapper ensures the state of the chain is snapshotted before running the test and restored after, so the test doesn't affect state for other test suites. --- core/test/TbtcDepositor.test.ts | 2 ++ core/test/helpers/snapshot.ts | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 core/test/helpers/snapshot.ts diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 267387a54..4df5286d9 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -31,6 +31,8 @@ describe("TbtcDepositor", () => { describe("finalizeStake", () => {}) describe("updateDepositorFeeDivisor", () => { + beforeAfterSnapshotWrapper() + context("when caller is not governance", () => { it("should revert", async () => { await expect( diff --git a/core/test/helpers/snapshot.ts b/core/test/helpers/snapshot.ts new file mode 100644 index 000000000..9a5caf2c9 --- /dev/null +++ b/core/test/helpers/snapshot.ts @@ -0,0 +1,21 @@ +/* eslint-disable import/prefer-default-export */ +import { + SnapshotRestorer, + takeSnapshot, +} from "@nomicfoundation/hardhat-toolbox/network-helpers" + +/** + * Adds a before/after hook pair to snapshot the EVM state before and after tests + * in a test suite. + */ +export function beforeAfterSnapshotWrapper(): void { + let snapshot: SnapshotRestorer + + before(async () => { + snapshot = await takeSnapshot() + }) + + after(async () => { + await snapshot.restore() + }) +} From a111ebacc5e7bf1950e48749f8fd487c61a93be3 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 13:13:36 +0100 Subject: [PATCH 019/122] Add unit test for calculateDepositKey function --- core/test/TbtcDepositor.test.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 4df5286d9..3c9d7f606 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -79,7 +79,19 @@ describe("TbtcDepositor", () => { }) }) - describe("calculateDepositKey", () => {}) + describe("calculateDepositKey", () => { + it("should calculate the deposit key", async () => { + // Test data from transaction: https://etherscan.io/tx/0x7816e66d2b1a7858c2e8c49099bf009e52d07e081d5b562ac9ff6d2b072387c9 + expect( + await tbtcDepositor.calculateDepositKey( + "0xa08d41ee8e044b25d365fd54d27d79da6db9e9e2f8be166b82a510d0d31b9406", + 114, + ), + ).to.be.equal( + "0x4e89fe01b92ff0ebf0bdeb70891fcb6c286d750b191971999091c8a1e5b3f11d", + ) + }) + }) const extraDataValidTestData = new Map< string, From 81d983144377c69b55df9dbef2fc852194abf17c Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 14:42:11 +0100 Subject: [PATCH 020/122] Add unit tests for initializeStake function --- core/test/TbtcDepositor.test.ts | 149 ++++++++++++++++++++++++++++++-- 1 file changed, 140 insertions(+), 9 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 3c9d7f606..a46fd83aa 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -3,37 +3,168 @@ import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" -import { ContractTransactionResponse } from "ethers" -import type { TbtcDepositor } from "../typechain" +import { ContractTransactionResponse, ZeroAddress } from "ethers" +import type { BridgeStub, TBTCVaultStub, TbtcDepositor } from "../typechain" import { deployment, getNamedSigner, getUnnamedSigner } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" +import { tbtcDepositData } from "./data/tbtc" +import { lastBlockTime } from "./helpers/time" async function fixture() { - const { tbtcDepositor } = await deployment() + const { tbtcDepositor, tbtcBridge, tbtcVault } = await deployment() - return { tbtcDepositor } + return { tbtcDepositor, tbtcBridge, tbtcVault } } -describe("TbtcDepositor", () => { +describe.only("TbtcDepositor", () => { let tbtcDepositor: TbtcDepositor + let tbtcBridge: BridgeStub + let tbtcVault: TBTCVaultStub let governance: HardhatEthersSigner let thirdParty: HardhatEthersSigner before(async () => { - ;({ tbtcDepositor } = await loadFixture(fixture)) + ;({ tbtcDepositor, tbtcBridge, tbtcVault } = await loadFixture(fixture)) ;({ governance } = await getNamedSigner()) ;[thirdParty] = await getUnnamedSigner() }) - describe("initializeStake", () => {}) + describe("initializeStake", () => { + describe("when receiver is zero address", () => { + it("should revert", async () => { + await expect( + tbtcDepositor.initializeStake( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + ZeroAddress, + 0, + ), + ).to.be.revertedWithCustomError(tbtcDepositor, "ReceiverIsZeroAddress") + }) + }) + + describe("when receiver is non zero address", () => { + describe("when stake request is not in progress", () => { + describe("when referral is non-zero", () => { + beforeAfterSnapshotWrapper() + + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .initializeStake( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + }) + + it("should emit StakeInitialized event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeInitialized") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + }) + + it("should store request data", async () => { + const storedStakeRequest = await tbtcDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect( + storedStakeRequest.requestedAt, + "invalid requestedAt", + ).to.be.equal(await lastBlockTime()) + expect( + storedStakeRequest.finalizedAt, + "invalid finalizedAt", + ).to.be.equal(0) + expect( + storedStakeRequest.tbtcDepositTxMaxFee, + "invalid tbtcDepositTxMaxFee", + ).to.be.equal(1000) + expect( + storedStakeRequest.tbtcOptimisticMintingFeeDivisor, + "invalid tbtcOptimisticMintingFeeDivisor", + ).to.be.equal(500) + }) + + it("should reveal the deposit to the bridge contract with extra data", async () => { + const storedRevealedDeposit = await tbtcBridge.depositsMap( + tbtcDepositData.depositKey, + ) + + expect( + storedRevealedDeposit.extraData, + "invalid extraData", + ).to.be.equal(tbtcDepositData.extraData) + }) + }) + + describe("when referral is zero", () => { + beforeAfterSnapshotWrapper() + + it("should succeed", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStake( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + 0, + ), + ).to.be.not.reverted + }) + }) + }) + + describe("when stake request is already in progress", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(thirdParty) + .initializeStake( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStake( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestAlreadyInProgress", + ) + }) + }) + }) + }) describe("finalizeStake", () => {}) describe("updateDepositorFeeDivisor", () => { beforeAfterSnapshotWrapper() - context("when caller is not governance", () => { + describe("when caller is not governance", () => { it("should revert", async () => { await expect( tbtcDepositor.connect(thirdParty).updateDepositorFeeDivisor(1234), @@ -46,7 +177,7 @@ describe("TbtcDepositor", () => { }) }) - context("when caller is governance", () => { + describe("when caller is governance", () => { const testUpdateDepositorFeeDivisor = (newValue: number) => function () { beforeAfterSnapshotWrapper() From 6f722e91d92e72090eedf5d2d28e0affb63b876b Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 14:42:39 +0100 Subject: [PATCH 021/122] Add helper function to get latest block timestamp --- core/test/helpers/time.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 core/test/helpers/time.ts diff --git a/core/test/helpers/time.ts b/core/test/helpers/time.ts new file mode 100644 index 000000000..933a47c3b --- /dev/null +++ b/core/test/helpers/time.ts @@ -0,0 +1,10 @@ +/* eslint-disable import/prefer-default-export */ +import { ethers } from "hardhat" + +/** + * Returns timestamp of the latest block. + * @return {number} Latest block timestamp. + */ +export async function lastBlockTime(): Promise { + return (await ethers.provider.getBlock("latest"))!.timestamp +} From f009b3c8ff627dd20d525f4102ec04e2652307f2 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 14:43:08 +0100 Subject: [PATCH 022/122] Add test data for tBTC deposit --- core/test/data/tbtc.ts | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 core/test/data/tbtc.ts diff --git a/core/test/data/tbtc.ts b/core/test/data/tbtc.ts new file mode 100644 index 000000000..a5838a198 --- /dev/null +++ b/core/test/data/tbtc.ts @@ -0,0 +1,46 @@ +/* eslint-disable import/prefer-default-export */ + +// TODO: Revisit the data once full integration is tested on testnet with valid +// contracts integration. +// Fixture used for revealDepositWithExtraData test scenario. +// source: https://github.com/keep-network/tbtc-v2/blob/103411a595c33895ff6bff8457383a69eca4963c/solidity/test/bridge/Bridge.Deposit.test.ts#L132 +export const tbtcDepositData = { + // Data of a proper P2SH deposit funding transaction embedding some + // extra data. Little-endian hash is: + // 0x6383cd1829260b6034cd12bad36171748e8c3c6a8d57fcb6463c62f96116dfbc. + fundingTxInfo: { + version: "0x01000000", + inputVector: + "0x018348cdeb551134fe1f19d378a8adec9b146671cb67b945b71bf56b20d" + + "c2b952f0100000000ffffffff", + outputVector: + "0x02102700000000000017a9149fe6615a307aa1d7eee668c1227802b2fbc" + + "aa919877ed73b00000000001600147ac2d9378a1c47e589dfb8095ca95ed2" + + "140d2726", + locktime: "0x00000000", + }, + fundingTxHash: + "0x6383cd1829260b6034cd12bad36171748e8c3c6a8d57fcb6463c62f96116dfbc", + // Data matching the redeem script locking the funding output of + // P2SHFundingTx and P2WSHFundingTx. + depositorAddress: "0x934B98637cA318a4D6E7CA6ffd1690b8e77df637", + reveal: { + fundingOutputIndex: 0, + blindingFactor: "0xf9f0c90d00039523", + // HASH160 of 03989d253b17a6a0f41838b84ff0d20e8898f9d7b1a98f2564da4cc29dcf8581d9. + walletPubKeyHash: "0x8db50eb52063ea9d98b3eac91489a90f738986f6", + // HASH160 of 0300d6f28a2f6bf9836f57fcda5d284c9a8f849316119779f0d6090830d97763a9. + refundPubKeyHash: "0x28e081f285138ccbe389c1eb8985716230129f89", + refundLocktime: "0x60bcea61", + vault: "0x594cfd89700040163727828AE20B52099C58F02C", + }, + // 20-bytes of extraData + receiver: "0xa9B38eA6435c8941d6eDa6a46b68E3e211719699", + // 2-bytes of extraData + referral: "0x5bd1", + extraData: + "0xa9b38ea6435c8941d6eda6a46b68e3e2117196995bd100000000000000000000", + // Deposit key is keccak256(fundingTxHash | fundingOutputIndex). + depositKey: + "0x8dde6118338ae2a046eb77a4acceb0521699275f9cc8e9b50057b29d9de1e844", +} From a9945a88eeb5bc40766dd35e108660054b642334 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 14:44:08 +0100 Subject: [PATCH 023/122] Add treasury address reference to Acre deployment script --- core/deploy/01_deploy_acre.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/deploy/01_deploy_acre.ts b/core/deploy/01_deploy_acre.ts index 531fc6c12..69d331009 100644 --- a/core/deploy/01_deploy_acre.ts +++ b/core/deploy/01_deploy_acre.ts @@ -3,13 +3,13 @@ import type { DeployFunction } from "hardhat-deploy/types" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { getNamedAccounts, deployments } = hre - const { deployer } = await getNamedAccounts() + const { deployer, treasury } = await getNamedAccounts() const tbtc = await deployments.get("TBTC") await deployments.deploy("Acre", { from: deployer, - args: [tbtc.address], + args: [tbtc.address, treasury], log: true, waitConfirmations: 1, }) From b20f02b614531c869b66eb97eceace863bb1f8f6 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 5 Jan 2024 15:03:27 +0100 Subject: [PATCH 024/122] Remove only from test --- core/test/TbtcDepositor.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index a46fd83aa..674046552 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -16,7 +16,7 @@ async function fixture() { return { tbtcDepositor, tbtcBridge, tbtcVault } } -describe.only("TbtcDepositor", () => { +describe("TbtcDepositor", () => { let tbtcDepositor: TbtcDepositor let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub @@ -97,7 +97,7 @@ describe.only("TbtcDepositor", () => { }) it("should reveal the deposit to the bridge contract with extra data", async () => { - const storedRevealedDeposit = await tbtcBridge.depositsMap( + const storedRevealedDeposit = await tbtcBridge.deposits( tbtcDepositData.depositKey, ) From 81aa38eca21d9c598c8df4ce17753d05278aa12e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:35:04 +0100 Subject: [PATCH 025/122] Add unit tests for finalizeStake function --- core/test/TbtcDepositor.test.ts | 331 +++++++++++++++++++++++++++++++- 1 file changed, 326 insertions(+), 5 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 674046552..349d4676a 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -4,30 +4,64 @@ import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { ContractTransactionResponse, ZeroAddress } from "ethers" -import type { BridgeStub, TBTCVaultStub, TbtcDepositor } from "../typechain" +import type { + Acre, + BridgeStub, + TBTCVaultStub, + TbtcDepositor, + TestERC20, +} from "../typechain" import { deployment, getNamedSigner, getUnnamedSigner } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" import { tbtcDepositData } from "./data/tbtc" import { lastBlockTime } from "./helpers/time" +import { to1ePrecision } from "./utils" async function fixture() { - const { tbtcDepositor, tbtcBridge, tbtcVault } = await deployment() + const { tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } = + await deployment() - return { tbtcDepositor, tbtcBridge, tbtcVault } + return { tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } } describe("TbtcDepositor", () => { + const defaultDepositTreasuryFeeDivisor = 2000 // 1/2000 = 0.05% = 0.0005 + const defaultDepositTxMaxFee = 1000 // 1000 satoshi = 0.00001 BTC + const defaultOptimisticFeeDivisor = 500 // 1/500 = 0.002 = 0.2% + const defaultDepositorFeeDivisor = 80 // 1/80 = 0.0125 = 1.25% + let tbtcDepositor: TbtcDepositor let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub + let acre: Acre + let tbtc: TestERC20 let governance: HardhatEthersSigner let thirdParty: HardhatEthersSigner before(async () => { - ;({ tbtcDepositor, tbtcBridge, tbtcVault } = await loadFixture(fixture)) + ;({ tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } = + await loadFixture(fixture)) ;({ governance } = await getNamedSigner()) ;[thirdParty] = await getUnnamedSigner() + + await acre.connect(governance).updateDepositParameters( + 10000000000000, // 0.00001 + await acre.maximumTotalAssets(), + ) + + await tbtcBridge + .connect(governance) + .setDepositTreasuryFeeDivisor(defaultDepositTreasuryFeeDivisor) + await tbtcBridge + .connect(governance) + .setDepositTxMaxFee(defaultDepositTxMaxFee) + await tbtcVault + .connect(governance) + .setOptimisticMintingFeeDivisor(defaultOptimisticFeeDivisor) + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) }) describe("initializeStake", () => { @@ -159,7 +193,294 @@ describe("TbtcDepositor", () => { }) }) - describe("finalizeStake", () => {}) + describe("finalizeStake", () => { + beforeAfterSnapshotWrapper() + + // Funding transaction amount: 10000 satoshi + // tBTC Deposit Treasury Fee: 0.05% = 10000 * 0.05% = 5 satoshi + // tBTC Deposit Transaction Max Fee: 1000 satoshi + // tBTC Optimistic Minting Fee: 0.2% = 10000 * 0.2% = 20 satoshi + // Depositor Fee: 1.25% = 10000 * 1.25% = 125 satoshi + + describe("when stake request has not been initialized", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStake(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestNotInitialized", + ) + }) + }) + + describe("when stake request has been initialized", () => { + function initializeStake() { + return tbtcDepositor + .connect(thirdParty) + .initializeStake( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + } + + describe("when stake request has not been finalized", () => { + function testFinalizeStake( + expectedAssetsAmount: bigint, + expectedReceivedSharesAmount = expectedAssetsAmount, + ) { + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .finalizeStake(tbtcDepositData.depositKey) + }) + + it("should emit StakeFinalized event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeFinalized") + .withArgs(tbtcDepositData.depositKey, thirdParty.address) + }) + + it("should emit StakeReferral event", async () => { + await expect(tx) + .to.emit(acre, "StakeReferral") + .withArgs(tbtcDepositData.referral, expectedAssetsAmount) + }) + + it("should emit Deposit event", async () => { + await expect(tx) + .to.emit(acre, "Deposit") + .withArgs( + await tbtcDepositor.getAddress(), + tbtcDepositData.receiver, + expectedAssetsAmount, + expectedReceivedSharesAmount, + ) + }) + + it("should stake in Acre contract", async () => { + await expect( + tx, + "invalid minted stBTC amount", + ).to.changeTokenBalances( + acre, + [tbtcDepositData.receiver], + [expectedReceivedSharesAmount], + ) + + await expect( + tx, + "invalid staked tBTC amount", + ).to.changeTokenBalances(tbtc, [acre], [expectedAssetsAmount]) + }) + } + + describe("when revealed depositor doesn't match tbtc depositor contract", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStake() + + await tbtcBridge.setDepositor( + tbtcDepositData.depositKey, + thirdParty.address, + ) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStake(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "UnexpectedDepositor", + ) + }) + }) + + describe("when revealed depositor matches tbtc depositor contract", () => { + beforeAfterSnapshotWrapper() + + describe("when minting request was finalized by optimistic minting", () => { + describe("when optimistic minting fee divisor is zero", () => { + beforeAfterSnapshotWrapper() + + const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi + + before(async () => { + await tbtcVault.setOptimisticMintingFeeDivisor(0) + + await initializeStake() + + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMinting( + tbtcDepositData.depositKey, + ) + }) + + testFinalizeStake(expectedAssetsAmount) + }) + + describe("when optimistic minting fee divisor is not zero", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcVault.setOptimisticMintingFeeDivisor( + defaultOptimisticFeeDivisor, + ) + }) + + describe("when current optimistic minting fee is greater than it was on stake initialization", () => { + beforeAfterSnapshotWrapper() + + const expectedAssetsAmount = to1ePrecision(8830, 10) // 8830 satoshi + + before(async () => { + await initializeStake() + + await tbtcVault.setOptimisticMintingFeeDivisor( + defaultOptimisticFeeDivisor / 2, + ) // 1/250 = 0.004 = 0.4% + + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMinting( + tbtcDepositData.depositKey, + ) + }) + + testFinalizeStake(expectedAssetsAmount) + }) + + describe("when current optimistic minting fee is lower than it was on stake initialization", () => { + beforeAfterSnapshotWrapper() + + // Since the current Optimistic Fee (10 satoshi) is lower than + // the one calculated on request initialization (20 satoshi) the + // higher value is deducted from the funding transaction amount. + const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi + + before(async () => { + await initializeStake() + + await tbtcVault.setOptimisticMintingFeeDivisor( + defaultOptimisticFeeDivisor * 2, + ) // 1/1000 = 0.001 = 0.1% + + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMinting( + tbtcDepositData.depositKey, + ) + }) + + testFinalizeStake(expectedAssetsAmount) + }) + }) + }) + + describe("when minting request was not finalized by optimistic minting", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStake() + }) + + describe("when minting request has not been swept", () => { + beforeAfterSnapshotWrapper() + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStake(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "TbtcDepositNotCompleted", + ) + }) + }) + + describe("when minting request was swept", () => { + describe("when depositor fee divisor is zero", () => { + beforeAfterSnapshotWrapper() + + const expectedAssetsAmount = to1ePrecision(8995, 10) // 8995 satoshi + + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(0) + + // Simulate deposit request finalization via sweeping. + await tbtcBridge.sweep( + tbtcDepositData.fundingTxHash, + tbtcDepositData.reveal.fundingOutputIndex, + ) + }) + + testFinalizeStake(expectedAssetsAmount) + }) + + describe("when depositor fee divisor is not zero", () => { + beforeAfterSnapshotWrapper() + + const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi + + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) + + // Simulate deposit request finalization via sweeping. + await tbtcBridge.sweep( + tbtcDepositData.fundingTxHash, + tbtcDepositData.reveal.fundingOutputIndex, + ) + }) + + testFinalizeStake(expectedAssetsAmount) + }) + }) + }) + }) + }) + + describe("when stake request has been finalized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStake() + + // Simulate deposit request finalization via sweeping. + await tbtcBridge.sweep( + tbtcDepositData.fundingTxHash, + tbtcDepositData.reveal.fundingOutputIndex, + ) + + // Finalize stake request. + await tbtcDepositor + .connect(thirdParty) + .finalizeStake(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStake(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestAlreadyFinalized", + ) + }) + }) + }) + }) describe("updateDepositorFeeDivisor", () => { beforeAfterSnapshotWrapper() From b6f52f40f0e30a2cc63ab837e8ea74bc606b0cd3 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:35:21 +0100 Subject: [PATCH 026/122] Add clarification for depositor address check --- core/contracts/tbtc/TbtcDepositor.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 59cdc8a22..86e4211b5 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -263,6 +263,11 @@ contract TbtcDepositor is Ownable { // Check if Depositor revealed to the tBTC Bridge contract matches the // current contract address. + // This is very unlikely scenario, that would require unexpected change or + // bug in tBTC Bridge contract, as the depositor is set automatically + // to the reveal deposit message sender, which will be this contract. + // Anyway we check if the depositor that got the tBTC tokens minted + // is this contract, before we stake them. if (bridgeDepositRequest.depositor != address(this)) revert UnexpectedDepositor(bridgeDepositRequest.depositor); From b918ee86197945372bd2b0b654619192547197da Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:35:46 +0100 Subject: [PATCH 027/122] Use Math.min for OM fee divisors comparison We want to take the bigger fee, so we need to use the smaller divisor. --- core/contracts/tbtc/TbtcDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 86e4211b5..a5566590a 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -285,8 +285,8 @@ contract TbtcDepositor is Ownable { // call, and not stored in the contract. // There is a possibility the fee has changed since the snapshot of // the `tbtcOptimisticMintingFeeDivisor`, to cover this scenario - // in fee computation we use the bigger of these. - uint256 optimisticMintingFeeDivisor = Math.max( + // we want to assume the bigger fee, so we use the smaller divisor. + uint256 optimisticMintingFeeDivisor = Math.min( request.tbtcOptimisticMintingFeeDivisor, tbtcVault.optimisticMintingFeeDivisor() ); From 0909d828f2b63f583c50e9505bef612cc1011614 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:36:38 +0100 Subject: [PATCH 028/122] Add name and symbol to TestERC20 constructor We want to use the contract in different tests, so we want to have the flexibility to use different names. --- core/contracts/test/TestERC20.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/contracts/test/TestERC20.sol b/core/contracts/test/TestERC20.sol index 44e5e14dc..c6b25896d 100644 --- a/core/contracts/test/TestERC20.sol +++ b/core/contracts/test/TestERC20.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.21; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract TestERC20 is ERC20 { - constructor() ERC20("Test Token", "TEST") {} + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} function mint(address account, uint256 value) external { _mint(account, value); From 4ca73bf17ef32ef8df985488e941c4485d70e017 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:38:01 +0100 Subject: [PATCH 029/122] Remove estimateFee function The calculations are not required on-chain, so we remove the function. The calculations should be performed off-chain by SDK. --- core/contracts/tbtc/TbtcDepositor.sol | 55 --------------------------- 1 file changed, 55 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index a5566590a..19b5a2375 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -336,61 +336,6 @@ contract TbtcDepositor is Ownable { acre.stake(amountToStakeTbtc, receiver, referral); } - /// @notice Estimate and breakdown fees taken for `amount` of stake. - /// @dev It doesn't validate the amount against minimum and maximum limits - /// for tBTC minting and Acre depositing processes. - /// @param amount Amount of Bitcoin the user wants to stake. - /// @return maxTbtcMintingFee Maximum tBTC protocol minting fees for the given - /// amount. - /// @return tbtcDepositorFee TbtcDepositor fee for the given amount. - /// @return acreDepositFee Acre deposit fee for the given amount. - function estimateFees( - uint256 amount - ) - external - view - returns ( - uint256 maxTbtcMintingFee, - uint256 tbtcDepositorFee, - uint256 acreDepositFee - ) - { - ( - , - uint64 tbtcDepositTreasuryFeeDivisor, - uint64 tbtcDepositTxMaxFee, - - ) = bridge.depositParameters(); - - // Calculate Treasury fee. - uint256 tbtcTreasuryFee = tbtcDepositTreasuryFeeDivisor > 0 - ? amount / tbtcDepositTreasuryFeeDivisor - : 0; - - // Calculate Optimistic Minting fee. - uint32 tbtcOptimisticMintingFeeDivisor = tbtcVault - .optimisticMintingFeeDivisor(); - uint256 optimisticMintingFee = tbtcOptimisticMintingFeeDivisor > 0 - ? (amount / tbtcOptimisticMintingFeeDivisor) - : 0; - - // Total maximum tBTC minting fees. - maxTbtcMintingFee = - tbtcTreasuryFee + - tbtcDepositTxMaxFee + - optimisticMintingFee; - - // Calculate TbtcDepositor fee. - tbtcDepositorFee = depositorFeeDivisor > 0 - ? amount / depositorFeeDivisor - : 0; - - // Calculate Acre deposit fee. - // TODO: Make sure the calculation takes into account the Acre contract - // deposit fee charged by `Acre.deposit` function once it is implemented. - acreDepositFee = 0; - } - /// @notice Updates the depositor fee divisor. /// @param newDepositorFeeDivisor New depositor fee divisor value. function updateDepositorFeeDivisor( From 89d6df3b45a5303c5997f0f9cc30dce7d62c9b85 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:40:07 +0100 Subject: [PATCH 030/122] Add tBTC Bridge and tBTC Vault contracts stubs The contracts are used by tBTC Depositor contract for integration. The logic in stubs follows the actual code from the tbtc-v2 repository. --- core/contracts/test/BridgeStub.sol | 140 ++++++++++++++++++++++++++ core/contracts/test/TBTCVaultStub.sol | 56 +++++++++++ 2 files changed, 196 insertions(+) create mode 100644 core/contracts/test/BridgeStub.sol create mode 100644 core/contracts/test/TBTCVaultStub.sol diff --git a/core/contracts/test/BridgeStub.sol b/core/contracts/test/BridgeStub.sol new file mode 100644 index 000000000..f52390ad3 --- /dev/null +++ b/core/contracts/test/BridgeStub.sol @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol"; +import {IBridge} from "../external/tbtc/IBridge.sol"; +import {TestERC20} from "./TestERC20.sol"; + +contract BridgeStub is IBridge { + using BTCUtils for bytes; + + TestERC20 public tbtc; + + /// @notice Multiplier to convert satoshi to TBTC token units. + uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; + + // The values set here are tweaked for test purposes. These are not + // the exact values used in the Bridge contract on mainnet. + // See: https://github.com/keep-network/tbtc-v2/blob/103411a595c33895ff6bff8457383a69eca4963c/solidity/test/bridge/Bridge.Deposit.test.ts#L70-L77 + uint64 public depositDustThreshold = 10000; // 10000 satoshi = 0.0001 BTC + uint64 public depositTreasuryFeeDivisor = 2000; // 1/2000 == 5bps == 0.05% == 0.0005 + uint64 public depositTxMaxFee = 1000; // 1000 satoshi = 0.00001 BTC + uint32 public depositRevealAheadPeriod = 15 days; + + mapping(uint256 => DepositRequest) depositsMap; + + constructor(TestERC20 _tbtc) { + tbtc = _tbtc; + } + + function revealDepositWithExtraData( + BitcoinTxInfo calldata fundingTx, + DepositRevealInfo calldata reveal, + bytes32 extraData + ) external { + bytes32 fundingTxHash = abi + .encodePacked( + fundingTx.version, + fundingTx.inputVector, + fundingTx.outputVector, + fundingTx.locktime + ) + .hash256View(); + + DepositRequest storage deposit = depositsMap[ + calculateDepositKey(fundingTxHash, reveal.fundingOutputIndex) + ]; + + require(deposit.revealedAt == 0, "Deposit already revealed"); + + bytes memory fundingOutput = fundingTx + .outputVector + .extractOutputAtIndex(reveal.fundingOutputIndex); + + uint64 fundingOutputAmount = fundingOutput.extractValue(); + + require( + fundingOutputAmount >= depositDustThreshold, + "Deposit amount too small" + ); + + deposit.amount = fundingOutputAmount; + deposit.depositor = msg.sender; + /* solhint-disable-next-line not-rely-on-time */ + deposit.revealedAt = uint32(block.timestamp); + deposit.vault = reveal.vault; + deposit.treasuryFee = depositTreasuryFeeDivisor > 0 + ? fundingOutputAmount / depositTreasuryFeeDivisor + : 0; + deposit.extraData = extraData; + } + + function deposits( + uint256 depositKey + ) external view returns (DepositRequest memory) { + return depositsMap[depositKey]; + } + + function sweep(bytes32 fundingTxHash, uint32 fundingOutputIndex) external { + DepositRequest storage deposit = depositsMap[ + calculateDepositKey(fundingTxHash, fundingOutputIndex) + ]; + + deposit.sweptAt = uint32(block.timestamp); + + (, , uint64 depositTxMaxFee, ) = depositParameters(); + // For test purposes as deposit tx fee we take value lower than the max + // possible value as this follows how Bridge may sweep the deposit + // with a fee lower than the max. + // Here we arbitrary choose the deposit tx fee to be at 80% of max deposit fee. + uint64 depositTxFee = (depositTxMaxFee * 8) / 10; + + uint64 amountToMintSat = deposit.amount - + deposit.treasuryFee - + depositTxFee; + + tbtc.mint(deposit.depositor, amountToMintSat * SATOSHI_MULTIPLIER); + } + + function depositParameters() + public + view + returns (uint64, uint64, uint64, uint32) + { + return ( + depositDustThreshold, + depositTreasuryFeeDivisor, + depositTxMaxFee, + depositRevealAheadPeriod + ); + } + + function calculateDepositKey( + bytes32 fundingTxHash, + uint32 fundingOutputIndex + ) private pure returns (uint256) { + return + uint256( + keccak256(abi.encodePacked(fundingTxHash, fundingOutputIndex)) + ); + } + + function setDepositDustThreshold(uint64 _depositDustThreshold) external { + depositDustThreshold = _depositDustThreshold; + } + + function setDepositTreasuryFeeDivisor( + uint64 _depositTreasuryFeeDivisor + ) external { + depositTreasuryFeeDivisor = _depositTreasuryFeeDivisor; + } + + function setDepositTxMaxFee(uint64 _depositTxMaxFee) external { + depositTxMaxFee = _depositTxMaxFee; + } + + function setDepositor(uint256 depositKey, address _depositor) external { + DepositRequest storage deposit = depositsMap[depositKey]; + deposit.depositor = _depositor; + } +} diff --git a/core/contracts/test/TBTCVaultStub.sol b/core/contracts/test/TBTCVaultStub.sol new file mode 100644 index 000000000..6d38ae4bd --- /dev/null +++ b/core/contracts/test/TBTCVaultStub.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; +import {ITBTCVault} from "../tbtc/TbtcDepositor.sol"; +import {IBridge} from "../external/tbtc/IBridge.sol"; +import {TestERC20} from "./TestERC20.sol"; + +contract TBTCVaultStub is ITBTCVault { + TestERC20 public tbtc; + IBridge public bridge; + + /// @notice Multiplier to convert satoshi to TBTC token units. + uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; + + uint32 public optimisticMintingFeeDivisor = 500; // 1/500 = 0.002 = 0.2% + + mapping(uint256 => OptimisticMintingRequest) public requests; + + constructor(TestERC20 _tbtc, IBridge _bridge) { + tbtc = _tbtc; + bridge = _bridge; + } + + function optimisticMintingRequests( + uint256 depositKey + ) external view returns (OptimisticMintingRequest memory) { + return requests[depositKey]; + } + + function mintTbtc(address account, uint256 valueSat) public { + tbtc.mint(account, valueSat * SATOSHI_MULTIPLIER); + } + + function finalizeOptimisticMinting(uint256 depositKey) external { + OptimisticMintingRequest storage request = requests[depositKey]; + + IBridge.DepositRequest memory deposit = bridge.deposits(depositKey); + + uint256 amountToMint = (deposit.amount - deposit.treasuryFee) * + SATOSHI_MULTIPLIER; + + uint256 optimisticMintFee = optimisticMintingFeeDivisor > 0 + ? (amountToMint / optimisticMintingFeeDivisor) + : 0; + + tbtc.mint(deposit.depositor, amountToMint - optimisticMintFee); + + /* solhint-disable-next-line not-rely-on-time */ + request.finalizedAt = uint64(block.timestamp); + } + + function setOptimisticMintingFeeDivisor( + uint32 _optimisticMintingFeeDivisor + ) public { + optimisticMintingFeeDivisor = _optimisticMintingFeeDivisor; + } +} From 8ed2a3b4ba051ae94f925ede4478ea694e57f767 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:41:35 +0100 Subject: [PATCH 031/122] Update deployment scripts for tBTC Depositor We deploy stubs used in tests and tBTC Depositor contract. --- core/deploy/00_resolve_tbtc_bridge.ts | 37 +++++++++++++++++ ...solve_tbtc.ts => 00_resolve_tbtc_token.ts} | 13 ++++-- core/deploy/00_resolve_tbtc_vault.ts | 41 +++++++++++++++++++ core/deploy/03_deploy_tbtc_depositor.ts | 26 ++++++++++++ core/test/helpers/context.ts | 11 ++++- 5 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 core/deploy/00_resolve_tbtc_bridge.ts rename core/deploy/{00_resolve_tbtc.ts => 00_resolve_tbtc_token.ts} (72%) create mode 100644 core/deploy/00_resolve_tbtc_vault.ts create mode 100644 core/deploy/03_deploy_tbtc_depositor.ts diff --git a/core/deploy/00_resolve_tbtc_bridge.ts b/core/deploy/00_resolve_tbtc_bridge.ts new file mode 100644 index 000000000..4b69a2343 --- /dev/null +++ b/core/deploy/00_resolve_tbtc_bridge.ts @@ -0,0 +1,37 @@ +import type { DeployFunction } from "hardhat-deploy/types" +import type { + HardhatNetworkConfig, + HardhatRuntimeEnvironment, +} from "hardhat/types" +import { isNonZeroAddress } from "../helpers/address" + +const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { + const { getNamedAccounts, deployments } = hre + const { log } = deployments + const { deployer } = await getNamedAccounts() + + const bridge = await deployments.getOrNull("Bridge") + + if (bridge && isNonZeroAddress(bridge.address)) { + log(`using Bridge contract at ${bridge.address}`) + } else if ((hre.network.config as HardhatNetworkConfig)?.forking?.enabled) { + throw new Error("deployed Bridge contract not found") + } else { + log("deploying Bridge contract stub") + + const tbtc = await deployments.get("TBTC") + + await deployments.deploy("Bridge", { + contract: "BridgeStub", + args: [tbtc.address], + from: deployer, + log: true, + waitConfirmations: 1, + }) + } +} + +export default func + +func.tags = ["TBTC", "Bridge"] +func.dependencies = ["TBTCToken"] diff --git a/core/deploy/00_resolve_tbtc.ts b/core/deploy/00_resolve_tbtc_token.ts similarity index 72% rename from core/deploy/00_resolve_tbtc.ts rename to core/deploy/00_resolve_tbtc_token.ts index dc1bfeff5..3eb9ce90c 100644 --- a/core/deploy/00_resolve_tbtc.ts +++ b/core/deploy/00_resolve_tbtc_token.ts @@ -1,5 +1,8 @@ -import type { HardhatRuntimeEnvironment } from "hardhat/types" import type { DeployFunction } from "hardhat-deploy/types" +import type { + HardhatNetworkConfig, + HardhatRuntimeEnvironment, +} from "hardhat/types" import { isNonZeroAddress } from "../helpers/address" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { @@ -11,13 +14,17 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { if (tbtc && isNonZeroAddress(tbtc.address)) { log(`using TBTC contract at ${tbtc.address}`) - } else if (!hre.network.tags.allowStubs) { + } else if ( + !hre.network.tags.allowStubs || + (hre.network.config as HardhatNetworkConfig)?.forking?.enabled + ) { throw new Error("deployed TBTC contract not found") } else { log("deploying TBTC contract stub") await deployments.deploy("TBTC", { contract: "TestERC20", + args: ["Test tBTC", "TestTBTC"], from: deployer, log: true, waitConfirmations: 1, @@ -27,4 +34,4 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func -func.tags = ["TBTC"] +func.tags = ["TBTC", "TBTCToken"] diff --git a/core/deploy/00_resolve_tbtc_vault.ts b/core/deploy/00_resolve_tbtc_vault.ts new file mode 100644 index 000000000..8088f69e1 --- /dev/null +++ b/core/deploy/00_resolve_tbtc_vault.ts @@ -0,0 +1,41 @@ +import type { DeployFunction } from "hardhat-deploy/types" +import type { + HardhatNetworkConfig, + HardhatRuntimeEnvironment, +} from "hardhat/types" +import { isNonZeroAddress } from "../helpers/address" + +const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { + const { getNamedAccounts, deployments } = hre + const { log } = deployments + const { deployer } = await getNamedAccounts() + + const tbtcVault = await deployments.getOrNull("TBTCVault") + + if (tbtcVault && isNonZeroAddress(tbtcVault.address)) { + log(`using TBTCVault contract at ${tbtcVault.address}`) + } else if ( + !hre.network.tags.allowStubs || + (hre.network.config as HardhatNetworkConfig)?.forking?.enabled + ) { + throw new Error("deployed TBTCVault contract not found") + } else { + log("deploying TBTCVault contract stub") + + const tbtc = await deployments.get("TBTC") + const bridge = await deployments.get("Bridge") + + await deployments.deploy("TBTCVault", { + contract: "TBTCVaultStub", + args: [tbtc.address, bridge.address], + from: deployer, + log: true, + waitConfirmations: 1, + }) + } +} + +export default func + +func.tags = ["TBTC", "TBTCVault"] +func.dependencies = ["TBTCToken", "Bridge"] diff --git a/core/deploy/03_deploy_tbtc_depositor.ts b/core/deploy/03_deploy_tbtc_depositor.ts new file mode 100644 index 000000000..9d81cf364 --- /dev/null +++ b/core/deploy/03_deploy_tbtc_depositor.ts @@ -0,0 +1,26 @@ +import type { DeployFunction } from "hardhat-deploy/types" +import type { HardhatRuntimeEnvironment } from "hardhat/types" + +const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { + const { getNamedAccounts, deployments } = hre + const { deployer } = await getNamedAccounts() + + const bridge = await deployments.get("Bridge") + const tbtcVault = await deployments.get("TBTCVault") + const acre = await deployments.get("Acre") + + await deployments.deploy("TbtcDepositor", { + from: deployer, + args: [bridge.address, tbtcVault.address, acre.address], + log: true, + waitConfirmations: 1, + }) + + // TODO: Add Etherscan verification + // TODO: Add Tenderly verification +} + +export default func + +func.tags = ["TbtcDepositor"] +func.dependencies = ["TBTC", "Acre"] diff --git a/core/test/helpers/context.ts b/core/test/helpers/context.ts index 84d661445..d6b41a822 100644 --- a/core/test/helpers/context.ts +++ b/core/test/helpers/context.ts @@ -7,19 +7,26 @@ import type { Dispatcher, TestERC20, TbtcDepositor, + BridgeStub, TestERC4626, + TBTCVaultStub, } from "../../typechain" // eslint-disable-next-line import/prefer-default-export export async function deployment() { await deployments.fixture() - const tbtc: TestERC20 = await getDeployedContract("TBTC") const acre: Acre = await getDeployedContract("Acre") const tbtcDepositor: TbtcDepositor = await getDeployedContract("TbtcDepositor") + + const tbtc: TestERC20 = await getDeployedContract("TBTC") + const tbtcBridge: BridgeStub = await getDeployedContract("Bridge") + const tbtcVault: TBTCVaultStub = await getDeployedContract("TBTCVault") + const dispatcher: Dispatcher = await getDeployedContract("Dispatcher") + const vault: TestERC4626 = await getDeployedContract("Vault") - return { tbtc, acre, tbtcDepositor, dispatcher, vault } + return { tbtc, acre, tbtcDepositor, tbtcBridge, tbtcVault, dispatcher, vault } } From 7c2fea3aff83269751a244b4a5fb8564da5c5dfc Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 15 Jan 2024 16:46:25 +0100 Subject: [PATCH 032/122] Fix solhint problems --- core/contracts/test/BridgeStub.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/contracts/test/BridgeStub.sol b/core/contracts/test/BridgeStub.sol index f52390ad3..2e6213134 100644 --- a/core/contracts/test/BridgeStub.sol +++ b/core/contracts/test/BridgeStub.sol @@ -21,7 +21,7 @@ contract BridgeStub is IBridge { uint64 public depositTxMaxFee = 1000; // 1000 satoshi = 0.00001 BTC uint32 public depositRevealAheadPeriod = 15 days; - mapping(uint256 => DepositRequest) depositsMap; + mapping(uint256 => DepositRequest) internal depositsMap; constructor(TestERC20 _tbtc) { tbtc = _tbtc; @@ -80,6 +80,7 @@ contract BridgeStub is IBridge { calculateDepositKey(fundingTxHash, fundingOutputIndex) ]; + // solhint-disable-next-line not-rely-on-time deposit.sweptAt = uint32(block.timestamp); (, , uint64 depositTxMaxFee, ) = depositParameters(); From c4c19b30f393930e77076d1b0fb93a4edc3ae7a1 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 22 Jan 2024 17:36:30 +0100 Subject: [PATCH 033/122] Let the user recall bridged tBTC The Acre contract has a limit for the maximum number of deposits they can accept; due to an asynchronous manner of staking where Bitcoin has to be first bridged to tBTC via tBTC Bridge, the limit for deposits may be reached in the meantime of stake request initialization and finalization. In such cases, the stake request has to wait until more deposits are accepted by the Acre contract (the maximum limit is increased, or funds are withdrawn from the Acre contract, making space for new deposits). We added a path where the user is not willing to wait anymore for the stake request to be finalized and has the possibility to recall the tBTC stake waiting to be completed and withdraw the liquid tBTC to their wallet. --- core/contracts/tbtc/TbtcDepositor.sol | 127 ++++++++++++++++++++++---- 1 file changed, 109 insertions(+), 18 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 19b5a2375..3d1463323 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -50,6 +50,9 @@ contract TbtcDepositor is Ownable { // tBTC Optimistic Minting Fee Divisor snapshotted from the TBTC Vault // contract at the moment of deposit reveal. uint32 tbtcOptimisticMintingFeeDivisor; + // tBTC token amount to stake after deducting tBTC minting fees and the + // Depositor fee. + uint256 amountToStake; } /// @notice tBTC Bridge contract. @@ -91,6 +94,16 @@ contract TbtcDepositor is Ownable { uint16 referral ); + /// @notice Emitted when bridging completion has been notified. + /// @param depositKey Deposit identifier. + /// @param caller Address that notified about bridging completion. + /// @param amountToStake Amount of tBTC token that is available to stake. + event BridgingCompleted( + uint256 indexed depositKey, + address indexed caller, + uint256 amountToStake + ); + /// @notice Emitted when a stake request is finalized. /// @dev Deposit details can be fetched from {{ ERC4626.Deposit }} /// event emitted in the same transaction. @@ -98,6 +111,11 @@ contract TbtcDepositor is Ownable { /// @param caller Address that finalized the stake request. event StakeFinalized(uint256 indexed depositKey, address indexed caller); + /// @notice Emitted when a stake request is recalled. + /// @param depositKey Deposit identifier. + /// @param caller Address that called the function to recall the stake. + event StakeRecalled(uint256 indexed depositKey, address indexed caller); + /// @notice Emitted when a depositor fee divisor is updated. /// @param depositorFeeDivisor New value of the depositor fee divisor. event DepositorFeeDivisorUpdated(uint64 depositorFeeDivisor); @@ -111,9 +129,20 @@ contract TbtcDepositor is Ownable { /// @dev Attempted to finalize a stake request that has not been initialized. error StakeRequestNotInitialized(); + /// @dev Attempted to notify about completed bridging while the notification + /// was already submitted. + error BridgingAlreadyCompleted(); + + /// @dev Attempted to finalize a stake request, while bridging completion has + /// not been notified yet. + error BridgingNotCompleted(); + /// @dev Attempted to finalize a stake request that was already finalized. error StakeRequestAlreadyFinalized(); + /// @dev Attempted to call function by an account that is not the receiver. + error CallerNotReceiver(); + /// @dev Depositor address stored in the Deposit Request in the tBTC Bridge /// contract doesn't match the current contract address. error UnexpectedDepositor(address bridgeDepositRequestDepositor); @@ -169,7 +198,7 @@ contract TbtcDepositor is Ownable { /// @param reveal Deposit reveal data, see `IBridge.DepositRevealInfo`. /// @param receiver The address to which the stBTC shares will be minted. /// @param referral Data used for referral program. - function initializeStake( + function initializeStakeRequest( IBridge.BitcoinTxInfo calldata fundingTx, IBridge.DepositRevealInfo calldata reveal, address receiver, @@ -244,14 +273,11 @@ contract TbtcDepositor is Ownable { /// stake request finalization. /// @param depositKey Deposit key computed as /// `keccak256(fundingTxHash | fundingOutputIndex)`. - function finalizeStake(uint256 depositKey) external { + function notifyBridgingCompleted(uint256 depositKey) public { StakeRequest storage request = stakeRequests[depositKey]; if (request.requestedAt == 0) revert StakeRequestNotInitialized(); - if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); - - // solhint-disable-next-line not-rely-on-time - request.finalizedAt = uint64(block.timestamp); + if (request.amountToStake > 0) revert BridgingAlreadyCompleted(); // Get deposit details from tBTC Bridge and Vault contracts. IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( @@ -309,9 +335,46 @@ contract TbtcDepositor is Ownable { // Calculate tBTC amount available to stake after subtracting all the fees. // Convert amount in satoshi to tBTC token precision. - uint256 amountToStakeTbtc = (fundingTxAmount - - tbtcMintingFees - - depositorFee) * SATOSHI_MULTIPLIER; + request.amountToStake = + (fundingTxAmount - tbtcMintingFees - depositorFee) * + SATOSHI_MULTIPLIER; + + emit BridgingCompleted(depositKey, msg.sender, request.amountToStake); + + // Transfer depositor fee to the treasury wallet. + if (depositorFee > 0) { + tbtcToken.safeTransfer(acre.treasury(), depositorFee); + } + } + + /// @notice This function should be called for previously initialized stake + /// request, after tBTC minting process completed and tBTC was deposited + /// in this contract. + /// It stakes the tBTC from the given deposit into Acre, emitting the + /// stBTC shares to the receiver specified in the deposit extra data + /// and using the referral provided in the extra data. + /// @dev This function is expected to be called after `notifyBridgingCompleted`. + /// In case the call to `Acre.stake` function fails (e.g. because of the + /// maximum deposit limit being reached), the function should be retried + /// after the limit is increased or other user withdraws their funds + /// from Acre contract to make place for another deposit. + /// The staker has a possibility to submit `recallStakeRequest` that + /// will withdraw the minted tBTC token and abort staking in Acre contract. + /// @param depositKey Deposit key computed as + /// `keccak256(fundingTxHash | fundingOutputIndex)`. + function finalizeStakeRequest(uint256 depositKey) public { + StakeRequest storage request = stakeRequests[depositKey]; + + if (request.amountToStake == 0) revert BridgingNotCompleted(); + if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); + + // solhint-disable-next-line not-rely-on-time + request.finalizedAt = uint64(block.timestamp); + + // Get deposit details from tBTC Bridge. + IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( + depositKey + ); // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit. // Request. @@ -320,20 +383,48 @@ contract TbtcDepositor is Ownable { emit StakeFinalized(depositKey, msg.sender); - // Transfer depositor fee to the treasury wallet. - if (depositorFee > 0) { - IERC20(acre.asset()).safeTransfer(acre.treasury(), depositorFee); - } - // Stake tBTC in Acre. IERC20(acre.asset()).safeIncreaseAllowance( address(acre), - amountToStakeTbtc + request.amountToStake + ); + acre.stake(request.amountToStake, receiver, referral); + } + + /// @notice Recall bridged tBTC tokens from being requested to stake. This + /// function can be called by the staker to recover tBTC that cannot + /// be finalized to stake in Acre contract due to a deposit limit being + /// reached. + /// @dev This function can be called only after bridging in tBTC Bridge was + /// completed. Only receiver provided in the extra data of the stake + /// request can call this function. + /// @param depositKey Deposit key computed as + /// `keccak256(fundingTxHash | fundingOutputIndex)`. + function recallStakeRequest(uint256 depositKey) external { + StakeRequest storage request = stakeRequests[depositKey]; + + if (request.amountToStake == 0) revert BridgingNotCompleted(); + if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); + + // solhint-disable-next-line not-rely-on-time + request.finalizedAt = uint64(block.timestamp); + + // Get deposit details from tBTC Bridge and Vault contracts. + IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( + depositKey ); - // TODO: Figure out what to do if deposit limit is reached in Acre - // TODO: Consider extracting stake function with referrals from Acre to this contract. - acre.stake(amountToStakeTbtc, receiver, referral); + // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit. + // Request. + bytes32 extraData = bridgeDepositRequest.extraData; + (address receiver, ) = decodeExtraData(extraData); + + // Check if caller is the receiver. + if (msg.sender != receiver) revert CallerNotReceiver(); + + emit StakeRecalled(depositKey, msg.sender); + + IERC20(acre.asset()).safeTransfer(receiver, request.amountToStake); } /// @notice Updates the depositor fee divisor. From 01c8feba9dc4c8f379255a171241c60d8e9f5d46 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 22 Jan 2024 17:58:27 +0100 Subject: [PATCH 034/122] Add tBTC token reference in tBTC Depositor contract Instead of reading the tBTC token address from Acre.asset(), we define it in this contract. --- core/contracts/tbtc/TbtcDepositor.sol | 11 ++++++----- core/deploy/03_deploy_tbtc_depositor.ts | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 3d1463323..793943d32 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -59,6 +59,8 @@ contract TbtcDepositor is Ownable { IBridge public bridge; /// @notice tBTC Vault contract. ITBTCVault public tbtcVault; + /// @notice tBTC Token contract. + IERC20 public immutable tbtcToken; /// @notice Acre contract. Acre public acre; @@ -159,10 +161,12 @@ contract TbtcDepositor is Ownable { constructor( IBridge _bridge, ITBTCVault _tbtcVault, + IERC20 _tbtcToken, Acre _acre ) Ownable(msg.sender) { bridge = _bridge; tbtcVault = _tbtcVault; + tbtcToken = _tbtcToken; acre = _acre; depositorFeeDivisor = 0; // Depositor fee is disabled initially. @@ -384,10 +388,7 @@ contract TbtcDepositor is Ownable { emit StakeFinalized(depositKey, msg.sender); // Stake tBTC in Acre. - IERC20(acre.asset()).safeIncreaseAllowance( - address(acre), - request.amountToStake - ); + tbtcToken.safeIncreaseAllowance(address(acre), request.amountToStake); acre.stake(request.amountToStake, receiver, referral); } @@ -424,7 +425,7 @@ contract TbtcDepositor is Ownable { emit StakeRecalled(depositKey, msg.sender); - IERC20(acre.asset()).safeTransfer(receiver, request.amountToStake); + tbtcToken.safeTransfer(receiver, request.amountToStake); } /// @notice Updates the depositor fee divisor. diff --git a/core/deploy/03_deploy_tbtc_depositor.ts b/core/deploy/03_deploy_tbtc_depositor.ts index 9d81cf364..e6cd03d6c 100644 --- a/core/deploy/03_deploy_tbtc_depositor.ts +++ b/core/deploy/03_deploy_tbtc_depositor.ts @@ -7,11 +7,12 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const bridge = await deployments.get("Bridge") const tbtcVault = await deployments.get("TBTCVault") + const tbtc = await deployments.get("TBTC") const acre = await deployments.get("Acre") await deployments.deploy("TbtcDepositor", { from: deployer, - args: [bridge.address, tbtcVault.address, acre.address], + args: [bridge.address, tbtcVault.address, tbtc.address, acre.address], log: true, waitConfirmations: 1, }) From 4d5cdbbcdfb5060b469a5ca49f9d9dd79504001c Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 22 Jan 2024 22:45:55 +0100 Subject: [PATCH 035/122] Check revealed tBTC Vault matches the expected The tBTC Depositor contract expects tokens to be processed by a specific tBTC Vault. We need to make sure that this is the same vault as the one staker selected in the deposit transaction. --- core/contracts/tbtc/TbtcDepositor.sol | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 793943d32..c33d3891c 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -149,6 +149,10 @@ contract TbtcDepositor is Ownable { /// contract doesn't match the current contract address. error UnexpectedDepositor(address bridgeDepositRequestDepositor); + /// @dev Vault address stored in the Deposit Request in the tBTC Bridge + /// contract doesn't match the expected tBTC Vault contract address. + error UnexpectedTbtcVault(address bridgeDepositRequestVault); + /// @dev Deposit was not completed on the tBTC side and tBTC was not minted /// to the depositor contract. It is thrown when the deposit neither has /// been optimistically minted nor swept. @@ -244,6 +248,16 @@ contract TbtcDepositor is Ownable { (, , request.tbtcDepositTxMaxFee, ) = bridge.depositParameters(); request.tbtcOptimisticMintingFeeDivisor = tbtcVault .optimisticMintingFeeDivisor(); + + // Get deposit details from tBTC Bridge contract. + IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( + depositKey + ); + + // Check if Vault revealed to the tBTC Bridge contract matches the + // tBTC Vault supported by this contract. + if (bridgeDepositRequest.vault != address(tbtcVault)) + revert UnexpectedTbtcVault(bridgeDepositRequest.vault); } /// @notice This function should be called for previously initialized stake From 2b9b222b23728c770bacc083a51f7e651ad57790 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 23 Jan 2024 15:51:29 +0100 Subject: [PATCH 036/122] Update initialize/finalize stake request function names in tests --- core/test/TbtcDepositor.test.ts | 42 ++++++++++++++++----------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 349d4676a..4655509c8 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -64,11 +64,11 @@ describe("TbtcDepositor", () => { .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) }) - describe("initializeStake", () => { + describe("initializeStakeRequest", () => { describe("when receiver is zero address", () => { it("should revert", async () => { await expect( - tbtcDepositor.initializeStake( + tbtcDepositor.initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, ZeroAddress, @@ -88,7 +88,7 @@ describe("TbtcDepositor", () => { before(async () => { tx = await tbtcDepositor .connect(thirdParty) - .initializeStake( + .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.receiver, @@ -149,7 +149,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .initializeStake( + .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.receiver, @@ -166,7 +166,7 @@ describe("TbtcDepositor", () => { before(async () => { await tbtcDepositor .connect(thirdParty) - .initializeStake( + .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.receiver, @@ -178,7 +178,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .initializeStake( + .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.receiver, @@ -193,7 +193,7 @@ describe("TbtcDepositor", () => { }) }) - describe("finalizeStake", () => { + describe("finalizeStakeRequest", () => { beforeAfterSnapshotWrapper() // Funding transaction amount: 10000 satoshi @@ -207,7 +207,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStake(tbtcDepositData.depositKey), + .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, "StakeRequestNotInitialized", @@ -216,10 +216,10 @@ describe("TbtcDepositor", () => { }) describe("when stake request has been initialized", () => { - function initializeStake() { + function initializeStakeRequest() { return tbtcDepositor .connect(thirdParty) - .initializeStake( + .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.receiver, @@ -237,7 +237,7 @@ describe("TbtcDepositor", () => { before(async () => { tx = await tbtcDepositor .connect(thirdParty) - .finalizeStake(tbtcDepositData.depositKey) + .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should emit StakeFinalized event", async () => { @@ -284,7 +284,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStake() + await initializeStakeRequest() await tbtcBridge.setDepositor( tbtcDepositData.depositKey, @@ -296,7 +296,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStake(tbtcDepositData.depositKey), + .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, "UnexpectedDepositor", @@ -316,7 +316,7 @@ describe("TbtcDepositor", () => { before(async () => { await tbtcVault.setOptimisticMintingFeeDivisor(0) - await initializeStake() + await initializeStakeRequest() // Simulate deposit request finalization via optimistic minting. await tbtcVault.finalizeOptimisticMinting( @@ -342,7 +342,7 @@ describe("TbtcDepositor", () => { const expectedAssetsAmount = to1ePrecision(8830, 10) // 8830 satoshi before(async () => { - await initializeStake() + await initializeStakeRequest() await tbtcVault.setOptimisticMintingFeeDivisor( defaultOptimisticFeeDivisor / 2, @@ -366,7 +366,7 @@ describe("TbtcDepositor", () => { const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi before(async () => { - await initializeStake() + await initializeStakeRequest() await tbtcVault.setOptimisticMintingFeeDivisor( defaultOptimisticFeeDivisor * 2, @@ -387,7 +387,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStake() + await initializeStakeRequest() }) describe("when minting request has not been swept", () => { @@ -397,7 +397,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStake(tbtcDepositData.depositKey), + .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, "TbtcDepositNotCompleted", @@ -454,7 +454,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStake() + await initializeStakeRequest() // Simulate deposit request finalization via sweeping. await tbtcBridge.sweep( @@ -465,14 +465,14 @@ describe("TbtcDepositor", () => { // Finalize stake request. await tbtcDepositor .connect(thirdParty) - .finalizeStake(tbtcDepositData.depositKey) + .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStake(tbtcDepositData.depositKey), + .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, "StakeRequestAlreadyFinalized", From 8b5fdc8c52654455a86fe28022996c469696bfcc Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 24 Jan 2024 17:02:07 +0100 Subject: [PATCH 037/122] Move TBTCVault check to the beginign of initializeStakeRequest Check TBTCVault at the beginning of the function to fail early. --- core/contracts/tbtc/TbtcDepositor.sol | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index c33d3891c..2d50f3ca2 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -212,6 +212,11 @@ contract TbtcDepositor is Ownable { address receiver, uint16 referral ) external { + // Check if Vault revealed to the tBTC Bridge contract matches the + // tBTC Vault supported by this contract. + if (reveal.vault != address(tbtcVault)) + revert UnexpectedTbtcVault(reveal.vault); + if (receiver == address(0)) revert ReceiverIsZeroAddress(); // Calculate Bitcoin transaction hash. @@ -248,16 +253,6 @@ contract TbtcDepositor is Ownable { (, , request.tbtcDepositTxMaxFee, ) = bridge.depositParameters(); request.tbtcOptimisticMintingFeeDivisor = tbtcVault .optimisticMintingFeeDivisor(); - - // Get deposit details from tBTC Bridge contract. - IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( - depositKey - ); - - // Check if Vault revealed to the tBTC Bridge contract matches the - // tBTC Vault supported by this contract. - if (bridgeDepositRequest.vault != address(tbtcVault)) - revert UnexpectedTbtcVault(bridgeDepositRequest.vault); } /// @notice This function should be called for previously initialized stake From c78ec0a13878e769910d21365bac42ec89bda66d Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 24 Jan 2024 17:05:36 +0100 Subject: [PATCH 038/122] Move Depositor address check to initializeStakeRequest Move the check to detect problem earlier. --- core/contracts/tbtc/TbtcDepositor.sol | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 2d50f3ca2..c9d0708ef 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -253,6 +253,21 @@ contract TbtcDepositor is Ownable { (, , request.tbtcDepositTxMaxFee, ) = bridge.depositParameters(); request.tbtcOptimisticMintingFeeDivisor = tbtcVault .optimisticMintingFeeDivisor(); + + // Get deposit details from tBTC Bridge contract. + IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( + depositKey + ); + + // Check if Depositor revealed to the tBTC Bridge contract matches the + // current contract address. + // This is very unlikely scenario, that would require unexpected change or + // bug in tBTC Bridge contract, as the depositor is set automatically + // to the reveal deposit message sender, which will be this contract. + // Anyway we check if the depositor that got the tBTC tokens minted + // is this contract, before we stake them. + if (bridgeDepositRequest.depositor != address(this)) + revert UnexpectedDepositor(bridgeDepositRequest.depositor); } /// @notice This function should be called for previously initialized stake @@ -300,16 +315,6 @@ contract TbtcDepositor is Ownable { memory optimisticMintingRequest = tbtcVault .optimisticMintingRequests(depositKey); - // Check if Depositor revealed to the tBTC Bridge contract matches the - // current contract address. - // This is very unlikely scenario, that would require unexpected change or - // bug in tBTC Bridge contract, as the depositor is set automatically - // to the reveal deposit message sender, which will be this contract. - // Anyway we check if the depositor that got the tBTC tokens minted - // is this contract, before we stake them. - if (bridgeDepositRequest.depositor != address(this)) - revert UnexpectedDepositor(bridgeDepositRequest.depositor); - // Extract funding transaction amount sent by the user in Bitcoin transaction. uint256 fundingTxAmount = bridgeDepositRequest.amount; From e1e9a1e6fde8ab6612d5e18f40bc20f080b533dc Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 24 Jan 2024 17:31:21 +0100 Subject: [PATCH 039/122] Update tests to reflect vault and depositor checks change --- core/contracts/test/BridgeStub.sol | 12 +- core/test/TbtcDepositor.test.ts | 402 ++++++++++++++++------------- 2 files changed, 228 insertions(+), 186 deletions(-) diff --git a/core/contracts/test/BridgeStub.sol b/core/contracts/test/BridgeStub.sol index 2e6213134..9b3401064 100644 --- a/core/contracts/test/BridgeStub.sol +++ b/core/contracts/test/BridgeStub.sol @@ -21,6 +21,9 @@ contract BridgeStub is IBridge { uint64 public depositTxMaxFee = 1000; // 1000 satoshi = 0.00001 BTC uint32 public depositRevealAheadPeriod = 15 days; + // Used in tests to fake invalid depositor being set. + address overrideDepositor; + mapping(uint256 => DepositRequest) internal depositsMap; constructor(TestERC20 _tbtc) { @@ -59,7 +62,9 @@ contract BridgeStub is IBridge { ); deposit.amount = fundingOutputAmount; - deposit.depositor = msg.sender; + deposit.depositor = overrideDepositor != address(0) + ? overrideDepositor + : msg.sender; /* solhint-disable-next-line not-rely-on-time */ deposit.revealedAt = uint32(block.timestamp); deposit.vault = reveal.vault; @@ -134,8 +139,7 @@ contract BridgeStub is IBridge { depositTxMaxFee = _depositTxMaxFee; } - function setDepositor(uint256 depositKey, address _depositor) external { - DepositRequest storage deposit = depositsMap[depositKey]; - deposit.depositor = _depositor; + function setDepositorOverride(address depositor) external { + overrideDepositor = depositor; } } diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 4655509c8..4435b4301 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -1,6 +1,7 @@ /* eslint-disable func-names */ import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" +import { ethers } from "hardhat" import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { ContractTransactionResponse, ZeroAddress } from "ethers" @@ -50,6 +51,8 @@ describe("TbtcDepositor", () => { await acre.maximumTotalAssets(), ) + tbtcDepositData.reveal.vault = await tbtcVault.getAddress() + await tbtcBridge .connect(governance) .setDepositTreasuryFeeDivisor(defaultDepositTreasuryFeeDivisor) @@ -80,82 +83,141 @@ describe("TbtcDepositor", () => { describe("when receiver is non zero address", () => { describe("when stake request is not in progress", () => { - describe("when referral is non-zero", () => { + describe("when tbtc vault address is incorrect", () => { beforeAfterSnapshotWrapper() - let tx: ContractTransactionResponse + it("should revert", async () => { + const invalidTbtcVault = + await ethers.Wallet.createRandom().getAddress() - before(async () => { - tx = await tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + { ...tbtcDepositData.reveal, vault: invalidTbtcVault }, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ), + ) + .to.be.revertedWithCustomError( + tbtcDepositor, + "UnexpectedTbtcVault", ) + .withArgs(invalidTbtcVault) }) + }) - it("should emit StakeInitialized event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "StakeInitialized") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) - }) + describe("when tbtc vault address is correct", () => { + describe("when referral is non-zero", () => { + describe("when revealed depositor doesn't match tbtc depositor contract", () => { + beforeAfterSnapshotWrapper() - it("should store request data", async () => { - const storedStakeRequest = await tbtcDepositor.stakeRequests( - tbtcDepositData.depositKey, - ) + let invalidDepositor: string - expect( - storedStakeRequest.requestedAt, - "invalid requestedAt", - ).to.be.equal(await lastBlockTime()) - expect( - storedStakeRequest.finalizedAt, - "invalid finalizedAt", - ).to.be.equal(0) - expect( - storedStakeRequest.tbtcDepositTxMaxFee, - "invalid tbtcDepositTxMaxFee", - ).to.be.equal(1000) - expect( - storedStakeRequest.tbtcOptimisticMintingFeeDivisor, - "invalid tbtcOptimisticMintingFeeDivisor", - ).to.be.equal(500) - }) + before(async () => { + invalidDepositor = + await ethers.Wallet.createRandom().getAddress() - it("should reveal the deposit to the bridge contract with extra data", async () => { - const storedRevealedDeposit = await tbtcBridge.deposits( - tbtcDepositData.depositKey, - ) + await tbtcBridge.setDepositorOverride(invalidDepositor) + }) - expect( - storedRevealedDeposit.extraData, - "invalid extraData", - ).to.be.equal(tbtcDepositData.extraData) + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ), + ) + .to.be.revertedWithCustomError( + tbtcDepositor, + "UnexpectedDepositor", + ) + .withArgs(invalidDepositor) + }) + }) + describe("when revealed depositor matches tbtc depositor contract", () => { + beforeAfterSnapshotWrapper() + + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + }) + + it("should emit StakeInitialized event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeInitialized") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + }) + + it("should store request data", async () => { + const storedStakeRequest = await tbtcDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect( + storedStakeRequest.requestedAt, + "invalid requestedAt", + ).to.be.equal(await lastBlockTime()) + expect( + storedStakeRequest.finalizedAt, + "invalid finalizedAt", + ).to.be.equal(0) + expect( + storedStakeRequest.tbtcDepositTxMaxFee, + "invalid tbtcDepositTxMaxFee", + ).to.be.equal(1000) + expect( + storedStakeRequest.tbtcOptimisticMintingFeeDivisor, + "invalid tbtcOptimisticMintingFeeDivisor", + ).to.be.equal(500) + }) + + it("should reveal the deposit to the bridge contract with extra data", async () => { + const storedRevealedDeposit = await tbtcBridge.deposits( + tbtcDepositData.depositKey, + ) + + expect( + storedRevealedDeposit.extraData, + "invalid extraData", + ).to.be.equal(tbtcDepositData.extraData) + }) + }) }) - }) - describe("when referral is zero", () => { - beforeAfterSnapshotWrapper() + describe("when referral is zero", () => { + beforeAfterSnapshotWrapper() - it("should succeed", async () => { - await expect( - tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - 0, - ), - ).to.be.not.reverted + it("should succeed", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + 0, + ), + ).to.be.not.reverted + }) }) }) }) @@ -193,6 +255,8 @@ describe("TbtcDepositor", () => { }) }) + describe("notifyBridgingCompleted", () => {}) + describe("finalizeStakeRequest", () => { beforeAfterSnapshotWrapper() @@ -280,44 +344,49 @@ describe("TbtcDepositor", () => { }) } - describe("when revealed depositor doesn't match tbtc depositor contract", () => { - beforeAfterSnapshotWrapper() + beforeAfterSnapshotWrapper() - before(async () => { - await initializeStakeRequest() + describe("when minting request was finalized by optimistic minting", () => { + describe("when optimistic minting fee divisor is zero", () => { + beforeAfterSnapshotWrapper() - await tbtcBridge.setDepositor( - tbtcDepositData.depositKey, - thirdParty.address, - ) - }) + const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi - it("should revert", async () => { - await expect( - tbtcDepositor - .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "UnexpectedDepositor", - ) + before(async () => { + await tbtcVault.setOptimisticMintingFeeDivisor(0) + + await initializeStakeRequest() + + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMinting( + tbtcDepositData.depositKey, + ) + }) + + testFinalizeStake(expectedAssetsAmount) }) - }) - describe("when revealed depositor matches tbtc depositor contract", () => { - beforeAfterSnapshotWrapper() + describe("when optimistic minting fee divisor is not zero", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcVault.setOptimisticMintingFeeDivisor( + defaultOptimisticFeeDivisor, + ) + }) - describe("when minting request was finalized by optimistic minting", () => { - describe("when optimistic minting fee divisor is zero", () => { + describe("when current optimistic minting fee is greater than it was on stake initialization", () => { beforeAfterSnapshotWrapper() - const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi + const expectedAssetsAmount = to1ePrecision(8830, 10) // 8830 satoshi before(async () => { - await tbtcVault.setOptimisticMintingFeeDivisor(0) - await initializeStakeRequest() + await tbtcVault.setOptimisticMintingFeeDivisor( + defaultOptimisticFeeDivisor / 2, + ) // 1/250 = 0.004 = 0.4% + // Simulate deposit request finalization via optimistic minting. await tbtcVault.finalizeOptimisticMinting( tbtcDepositData.depositKey, @@ -327,124 +396,93 @@ describe("TbtcDepositor", () => { testFinalizeStake(expectedAssetsAmount) }) - describe("when optimistic minting fee divisor is not zero", () => { + describe("when current optimistic minting fee is lower than it was on stake initialization", () => { beforeAfterSnapshotWrapper() - before(async () => { - await tbtcVault.setOptimisticMintingFeeDivisor( - defaultOptimisticFeeDivisor, - ) - }) - - describe("when current optimistic minting fee is greater than it was on stake initialization", () => { - beforeAfterSnapshotWrapper() - - const expectedAssetsAmount = to1ePrecision(8830, 10) // 8830 satoshi + // Since the current Optimistic Fee (10 satoshi) is lower than + // the one calculated on request initialization (20 satoshi) the + // higher value is deducted from the funding transaction amount. + const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi - before(async () => { - await initializeStakeRequest() - - await tbtcVault.setOptimisticMintingFeeDivisor( - defaultOptimisticFeeDivisor / 2, - ) // 1/250 = 0.004 = 0.4% + before(async () => { + await initializeStakeRequest() - // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMinting( - tbtcDepositData.depositKey, - ) - }) + await tbtcVault.setOptimisticMintingFeeDivisor( + defaultOptimisticFeeDivisor * 2, + ) // 1/1000 = 0.001 = 0.1% - testFinalizeStake(expectedAssetsAmount) + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMinting( + tbtcDepositData.depositKey, + ) }) - describe("when current optimistic minting fee is lower than it was on stake initialization", () => { - beforeAfterSnapshotWrapper() - - // Since the current Optimistic Fee (10 satoshi) is lower than - // the one calculated on request initialization (20 satoshi) the - // higher value is deducted from the funding transaction amount. - const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi - - before(async () => { - await initializeStakeRequest() - - await tbtcVault.setOptimisticMintingFeeDivisor( - defaultOptimisticFeeDivisor * 2, - ) // 1/1000 = 0.001 = 0.1% + testFinalizeStake(expectedAssetsAmount) + }) + }) + }) - // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMinting( - tbtcDepositData.depositKey, - ) - }) + describe("when minting request was not finalized by optimistic minting", () => { + beforeAfterSnapshotWrapper() - testFinalizeStake(expectedAssetsAmount) - }) - }) + before(async () => { + await initializeStakeRequest() }) - describe("when minting request was not finalized by optimistic minting", () => { + describe("when minting request has not been swept", () => { beforeAfterSnapshotWrapper() - before(async () => { - await initializeStakeRequest() + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "TbtcDepositNotCompleted", + ) }) + }) - describe("when minting request has not been swept", () => { + describe("when minting request was swept", () => { + describe("when depositor fee divisor is zero", () => { beforeAfterSnapshotWrapper() - it("should revert", async () => { - await expect( - tbtcDepositor - .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "TbtcDepositNotCompleted", + const expectedAssetsAmount = to1ePrecision(8995, 10) // 8995 satoshi + + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(0) + + // Simulate deposit request finalization via sweeping. + await tbtcBridge.sweep( + tbtcDepositData.fundingTxHash, + tbtcDepositData.reveal.fundingOutputIndex, ) }) - }) - describe("when minting request was swept", () => { - describe("when depositor fee divisor is zero", () => { - beforeAfterSnapshotWrapper() - - const expectedAssetsAmount = to1ePrecision(8995, 10) // 8995 satoshi + testFinalizeStake(expectedAssetsAmount) + }) - before(async () => { - await tbtcDepositor - .connect(governance) - .updateDepositorFeeDivisor(0) + describe("when depositor fee divisor is not zero", () => { + beforeAfterSnapshotWrapper() - // Simulate deposit request finalization via sweeping. - await tbtcBridge.sweep( - tbtcDepositData.fundingTxHash, - tbtcDepositData.reveal.fundingOutputIndex, - ) - }) + const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi - testFinalizeStake(expectedAssetsAmount) + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) + + // Simulate deposit request finalization via sweeping. + await tbtcBridge.sweep( + tbtcDepositData.fundingTxHash, + tbtcDepositData.reveal.fundingOutputIndex, + ) }) - describe("when depositor fee divisor is not zero", () => { - beforeAfterSnapshotWrapper() - - const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi - - before(async () => { - await tbtcDepositor - .connect(governance) - .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) - - // Simulate deposit request finalization via sweeping. - await tbtcBridge.sweep( - tbtcDepositData.fundingTxHash, - tbtcDepositData.reveal.fundingOutputIndex, - ) - }) - - testFinalizeStake(expectedAssetsAmount) - }) + testFinalizeStake(expectedAssetsAmount) }) }) }) From 3d168b1fd73a32f7d95e2e05c8cb9316c778b46a Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 24 Jan 2024 18:34:05 +0100 Subject: [PATCH 040/122] Fix conversion of fees from sat to tBTC depositor fee that is transferred to the treasury should be used in `safeTransfer` in tBTC precision. So we would need to convert it twice: ``` request.amountToStake = (fundingTxAmount - tbtcMintingFees - depositorFee) * SATOSHI_MULTIPLIER; tbtcToken.safeTransfer(acre.treasury(), depositorFee * SATOSHI_MULTIPLIER); ``` which may be easy to confuse. In this commit I try to conver it just once to be sure it's handled correctly. --- core/contracts/tbtc/TbtcDepositor.sol | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index c9d0708ef..874d756c5 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -316,10 +316,10 @@ contract TbtcDepositor is Ownable { .optimisticMintingRequests(depositKey); // Extract funding transaction amount sent by the user in Bitcoin transaction. - uint256 fundingTxAmount = bridgeDepositRequest.amount; + uint256 fundingTxAmountSat = bridgeDepositRequest.amount; // Estimate tBTC protocol fees for minting. - uint256 tbtcMintingFees = bridgeDepositRequest.treasuryFee + + uint256 tbtcMintingFeesSat = bridgeDepositRequest.treasuryFee + request.tbtcDepositTxMaxFee; // Check if deposit was optimistically minted. @@ -336,10 +336,10 @@ contract TbtcDepositor is Ownable { ); uint256 optimisticMintingFee = optimisticMintingFeeDivisor > 0 - ? (fundingTxAmount / optimisticMintingFeeDivisor) + ? (fundingTxAmountSat / optimisticMintingFeeDivisor) : 0; - tbtcMintingFees += optimisticMintingFee; + tbtcMintingFeesSat += optimisticMintingFee; } else { // If the deposit wasn't optimistically minted check if it was swept. if (bridgeDepositRequest.sweptAt == 0) @@ -347,21 +347,22 @@ contract TbtcDepositor is Ownable { } // Compute depositor fee. - uint256 depositorFee = depositorFeeDivisor > 0 - ? (fundingTxAmount / depositorFeeDivisor) + uint256 depositorFeeTbtc = depositorFeeDivisor > 0 + ? (fundingTxAmountSat / depositorFeeDivisor) * SATOSHI_MULTIPLIER : 0; // Calculate tBTC amount available to stake after subtracting all the fees. // Convert amount in satoshi to tBTC token precision. request.amountToStake = - (fundingTxAmount - tbtcMintingFees - depositorFee) * - SATOSHI_MULTIPLIER; + (fundingTxAmountSat - tbtcMintingFeesSat) * + SATOSHI_MULTIPLIER - + depositorFeeTbtc; emit BridgingCompleted(depositKey, msg.sender, request.amountToStake); // Transfer depositor fee to the treasury wallet. - if (depositorFee > 0) { - tbtcToken.safeTransfer(acre.treasury(), depositorFee); + if (depositorFeeTbtc > 0) { + tbtcToken.safeTransfer(acre.treasury(), depositorFeeTbtc); } } From a06822ae1963a4ee79c90212b28158aa47d5bc4b Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 24 Jan 2024 18:40:12 +0100 Subject: [PATCH 041/122] Update unit tests for notify/finalize function changes --- core/test/TbtcDepositor.test.ts | 231 ++++++++++++++++++++++++-------- 1 file changed, 173 insertions(+), 58 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 4435b4301..4916dba99 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -38,12 +38,13 @@ describe("TbtcDepositor", () => { let tbtc: TestERC20 let governance: HardhatEthersSigner + let treasury: HardhatEthersSigner let thirdParty: HardhatEthersSigner before(async () => { ;({ tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } = await loadFixture(fixture)) - ;({ governance } = await getNamedSigner()) + ;({ governance, treasury } = await getNamedSigner()) ;[thirdParty] = await getUnnamedSigner() await acre.connect(governance).updateDepositParameters( @@ -255,23 +256,13 @@ describe("TbtcDepositor", () => { }) }) - describe("notifyBridgingCompleted", () => {}) - - describe("finalizeStakeRequest", () => { - beforeAfterSnapshotWrapper() - - // Funding transaction amount: 10000 satoshi - // tBTC Deposit Treasury Fee: 0.05% = 10000 * 0.05% = 5 satoshi - // tBTC Deposit Transaction Max Fee: 1000 satoshi - // tBTC Optimistic Minting Fee: 0.2% = 10000 * 0.2% = 20 satoshi - // Depositor Fee: 1.25% = 10000 * 1.25% = 125 satoshi - + describe("notifyBridgingCompleted", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .notifyBridgingCompleted(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, "StakeRequestNotInitialized", @@ -291,56 +282,50 @@ describe("TbtcDepositor", () => { ) } - describe("when stake request has not been finalized", () => { - function testFinalizeStake( + describe("when bridging completion has not been notified", () => { + // Funding transaction amount: 10000 satoshi + // tBTC Deposit Treasury Fee: 0.05% = 10000 * 0.05% = 5 satoshi + // tBTC Deposit Transaction Max Fee: 1000 satoshi + // tBTC Optimistic Minting Fee: 0.2% = 10000 * 0.2% = 20 satoshi + // Depositor Fee: 1.25% = 10000 satoshi * 1.25% = 125 satoshi + + const defaultDepositorFee = to1ePrecision(125, 10) + + function testNotifyBridgingCompleted( expectedAssetsAmount: bigint, - expectedReceivedSharesAmount = expectedAssetsAmount, + expectedDepositorFee = defaultDepositorFee, ) { let tx: ContractTransactionResponse before(async () => { tx = await tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) - }) - - it("should emit StakeFinalized event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "StakeFinalized") - .withArgs(tbtcDepositData.depositKey, thirdParty.address) + .notifyBridgingCompleted(tbtcDepositData.depositKey) }) - it("should emit StakeReferral event", async () => { + it("should emit BridgingCompleted event", async () => { await expect(tx) - .to.emit(acre, "StakeReferral") - .withArgs(tbtcDepositData.referral, expectedAssetsAmount) - }) - - it("should emit Deposit event", async () => { - await expect(tx) - .to.emit(acre, "Deposit") + .to.emit(tbtcDepositor, "BridgingCompleted") .withArgs( - await tbtcDepositor.getAddress(), - tbtcDepositData.receiver, + tbtcDepositData.depositKey, + thirdParty.address, expectedAssetsAmount, - expectedReceivedSharesAmount, ) }) - it("should stake in Acre contract", async () => { - await expect( - tx, - "invalid minted stBTC amount", - ).to.changeTokenBalances( - acre, - [tbtcDepositData.receiver], - [expectedReceivedSharesAmount], - ) + it("should store amount to stake", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .amountToStake, + ).to.be.equal(expectedAssetsAmount) + }) - await expect( - tx, - "invalid staked tBTC amount", - ).to.changeTokenBalances(tbtc, [acre], [expectedAssetsAmount]) + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [treasury], + [expectedDepositorFee], + ) }) } @@ -363,7 +348,7 @@ describe("TbtcDepositor", () => { ) }) - testFinalizeStake(expectedAssetsAmount) + testNotifyBridgingCompleted(expectedAssetsAmount) }) describe("when optimistic minting fee divisor is not zero", () => { @@ -393,7 +378,7 @@ describe("TbtcDepositor", () => { ) }) - testFinalizeStake(expectedAssetsAmount) + testNotifyBridgingCompleted(expectedAssetsAmount) }) describe("when current optimistic minting fee is lower than it was on stake initialization", () => { @@ -417,7 +402,7 @@ describe("TbtcDepositor", () => { ) }) - testFinalizeStake(expectedAssetsAmount) + testNotifyBridgingCompleted(expectedAssetsAmount) }) }) }) @@ -439,7 +424,7 @@ describe("TbtcDepositor", () => { .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "TbtcDepositNotCompleted", + "BridgingNotCompleted", ) }) }) @@ -462,7 +447,7 @@ describe("TbtcDepositor", () => { ) }) - testFinalizeStake(expectedAssetsAmount) + testNotifyBridgingCompleted(expectedAssetsAmount, 0n) }) describe("when depositor fee divisor is not zero", () => { @@ -482,13 +467,13 @@ describe("TbtcDepositor", () => { ) }) - testFinalizeStake(expectedAssetsAmount) + testNotifyBridgingCompleted(expectedAssetsAmount) }) }) }) }) - describe("when stake request has been finalized", () => { + describe("when bridging completion has been notified", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -500,21 +485,151 @@ describe("TbtcDepositor", () => { tbtcDepositData.reveal.fundingOutputIndex, ) - // Finalize stake request. + // Notify bridging completed. await tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) + .notifyBridgingCompleted(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .notifyBridgingCompleted(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "StakeRequestAlreadyFinalized", + "BridgingAlreadyCompleted", + ) + }) + }) + }) + }) + + describe("finalizeStakeRequest", () => { + beforeAfterSnapshotWrapper() + + describe("when stake request has not been initialized", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + }) + }) + + describe("when stake request has been initialized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, ) + }) + + describe("when bridging completion has not been notified", () => { + beforeAfterSnapshotWrapper() + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + }) + }) + + describe("when bridging completion has been notified", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMinting(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey) + }) + + describe("when stake request has not been finalized", () => { + beforeAfterSnapshotWrapper() + + const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi + const expectedReceivedSharesAmount = expectedAssetsAmount + + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey) + }) + + it("should emit StakeFinalized event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeFinalized") + .withArgs(tbtcDepositData.depositKey, thirdParty.address) + }) + + it("should emit StakeReferral event", async () => { + await expect(tx) + .to.emit(acre, "StakeReferral") + .withArgs(tbtcDepositData.referral, expectedAssetsAmount) + }) + + it("should emit Deposit event", async () => { + await expect(tx) + .to.emit(acre, "Deposit") + .withArgs( + await tbtcDepositor.getAddress(), + tbtcDepositData.receiver, + expectedAssetsAmount, + expectedReceivedSharesAmount, + ) + }) + + it("should stake in Acre contract", async () => { + await expect( + tx, + "invalid minted stBTC amount", + ).to.changeTokenBalances( + acre, + [tbtcDepositData.receiver], + [expectedReceivedSharesAmount], + ) + + await expect( + tx, + "invalid staked tBTC amount", + ).to.changeTokenBalances(tbtc, [acre], [expectedAssetsAmount]) + }) + }) + + describe("when stake request has been finalized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Finalize stake request. + await tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestAlreadyFinalized", + ) + }) }) }) }) From 2c39ed50fadbad00765fa7f0525d707a8b4b21fe Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 14:20:01 +0100 Subject: [PATCH 042/122] Implement TBTCDepositorProxy Use TBTCDepositorProxy abstract contract implemented in https://github.com/keep-network/tbtc-v2/pull/778 as a base for the depositor contract. The abstract contract handles calculation of the approximate bridged tBTC amount. The tbtcAmount caveat: The tbtcAmount computed by _calculateTbtcAmount and returned by _finalizeDeposit may not correspond to the actual amount of TBTC minted for the deposit. Although the treasury fee cut upon minting is known precisely, this is not the case for the optimistic minting fee and the Bitcoin transaction fee. To overcome that problem, this contract just takes the current maximum values of both fees, at the moment of deposit finalization. For the great majority of the deposits, such an algorithm will return a tbtcAmount slightly lesser than the actual amount of TBTC minted for the deposit. This will cause some TBTC to be left in the contract and ensure there is enough liquidity to finalize the deposit. However, in some rare cases, where the actual values of those fees change between the deposit minting and finalization, the tbtcAmount returned by this function may be greater than the actual amount of TBTC minted for the deposit. If this happens and the reserve coming from previous deposits leftovers does not provide enough liquidity, the deposit will have to wait for finalization until the reserve is refilled by subsequent deposits or a manual top-up. The integrator is responsible for handling such cases. --- core/contracts/tbtc/TbtcDepositor.sol | 410 ++++++++------------------ 1 file changed, 127 insertions(+), 283 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index 874d756c5..eb0225b8c 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -7,8 +7,8 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; -import {IBridge} from "../external/tbtc/IBridge.sol"; -import {ITBTCVault} from "../external/tbtc/ITBTCVault.sol"; +import "@keep-network/tbtc-v2/contracts/integrator/TBTCDepositorProxy.sol"; + import {Acre} from "../Acre.sol"; // TODO: Add Missfund token protection. @@ -34,45 +34,35 @@ import {Acre} from "../Acre.sol"; /// After tBTC is minted to the Depositor, on the stake finalization /// tBTC is staked in Acre contract and stBTC shares are emitted to the /// receiver pointed by the staker. -contract TbtcDepositor is Ownable { +contract TbtcDepositor is TBTCDepositorProxy, Ownable { using BTCUtils for bytes; using SafeERC20 for IERC20; struct StakeRequest { - // UNIX timestamp at which the deposit request was initialized. - uint64 requestedAt; + // Timestamp at which the deposit request was initialized is not stored + // in this structure, as it is available under `Bridge.DepositRequest.revealedAt`. + // UNIX timestamp at which the deposit request was finalized. // 0 if not yet finalized. uint64 finalizedAt; - // Maximum tBTC Deposit Transaction Fee snapshotted from the Bridge - // contract at the moment of deposit reveal. - uint64 tbtcDepositTxMaxFee; - // tBTC Optimistic Minting Fee Divisor snapshotted from the TBTC Vault - // contract at the moment of deposit reveal. - uint32 tbtcOptimisticMintingFeeDivisor; + // The address to which the stBTC shares will be minted. + address receiver; + // Identifier of a partner in the referral program. + uint16 referral; // tBTC token amount to stake after deducting tBTC minting fees and the // Depositor fee. uint256 amountToStake; } - /// @notice tBTC Bridge contract. - IBridge public bridge; - /// @notice tBTC Vault contract. - ITBTCVault public tbtcVault; /// @notice tBTC Token contract. IERC20 public immutable tbtcToken; /// @notice Acre contract. Acre public acre; /// @notice Mapping of stake requests. - /// @dev The key is a deposit key computed in the same way as in tBTC Bridge: - /// `keccak256(fundingTxHash | fundingOutputIndex)`. + /// @dev The key is a deposit key identifying the deposit. mapping(uint256 => StakeRequest) public stakeRequests; - /// @notice Multiplier to convert satoshi (8 decimals precision) to tBTC - /// token units (18 decimals precision). - uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; - /// @notice Divisor used to compute the depositor fee taken from each deposit /// and transferred to the treasury upon stake request finalization. /// @dev That fee is computed as follows: @@ -85,38 +75,50 @@ contract TbtcDepositor is Ownable { /// @notice Emitted when a stake request is initialized. /// @dev Deposit details can be fetched from {{ Bridge.DepositRevealed }} /// event emitted in the same transaction. - /// @param depositKey Deposit identifier. + /// @param depositKey Deposit key identifying the deposit. /// @param caller Address that initialized the stake request. /// @param receiver The address to which the stBTC shares will be minted. - /// @param referral Data used for referral program. - event StakeInitialized( + event StakeRequestInitialized( uint256 indexed depositKey, address indexed caller, - address receiver, - uint16 referral + address indexed receiver ); /// @notice Emitted when bridging completion has been notified. - /// @param depositKey Deposit identifier. + /// @param depositKey Deposit key identifying the deposit. /// @param caller Address that notified about bridging completion. - /// @param amountToStake Amount of tBTC token that is available to stake. + /// @param referral Identifier of a partner in the referral program. + /// @param bridgedAmount Amount of tBTC tokens that was bridged by the tBTC bridge. + /// @param depositorFee Depositor fee amount. event BridgingCompleted( uint256 indexed depositKey, address indexed caller, - uint256 amountToStake + uint16 indexed referral, + uint256 bridgedAmount, + uint256 depositorFee ); /// @notice Emitted when a stake request is finalized. /// @dev Deposit details can be fetched from {{ ERC4626.Deposit }} /// event emitted in the same transaction. - /// @param depositKey Deposit identifier. + /// @param depositKey Deposit key identifying the deposit. /// @param caller Address that finalized the stake request. - event StakeFinalized(uint256 indexed depositKey, address indexed caller); + /// @param amountToStake Amount of staked tBTC tokens. + event StakeRequestFinalized( + uint256 indexed depositKey, + address indexed caller, + uint256 amountToStake + ); /// @notice Emitted when a stake request is recalled. - /// @param depositKey Deposit identifier. + /// @param depositKey Deposit key identifying the deposit. /// @param caller Address that called the function to recall the stake. - event StakeRecalled(uint256 indexed depositKey, address indexed caller); + /// @param amountToStake Amount of recalled tBTC tokens. + event StakeRequestRecalled( + uint256 indexed depositKey, + address indexed caller, + uint256 amountToStake + ); /// @notice Emitted when a depositor fee divisor is updated. /// @param depositorFeeDivisor New value of the depositor fee divisor. @@ -125,263 +127,150 @@ contract TbtcDepositor is Ownable { /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); - /// @dev Attempted to initiate a stake request that was already initialized. - error StakeRequestAlreadyInProgress(); - - /// @dev Attempted to finalize a stake request that has not been initialized. - error StakeRequestNotInitialized(); - - /// @dev Attempted to notify about completed bridging while the notification - /// was already submitted. - error BridgingAlreadyCompleted(); - /// @dev Attempted to finalize a stake request, while bridging completion has /// not been notified yet. error BridgingNotCompleted(); + /// @dev Calculated depositor fee exceeds the amount of minted tBTC tokens. + error DepositorFeeExceedsBridgedAmount( + uint256 depositorFee, + uint256 bridgedAmount + ); + /// @dev Attempted to finalize a stake request that was already finalized. error StakeRequestAlreadyFinalized(); /// @dev Attempted to call function by an account that is not the receiver. error CallerNotReceiver(); - /// @dev Depositor address stored in the Deposit Request in the tBTC Bridge - /// contract doesn't match the current contract address. - error UnexpectedDepositor(address bridgeDepositRequestDepositor); - - /// @dev Vault address stored in the Deposit Request in the tBTC Bridge - /// contract doesn't match the expected tBTC Vault contract address. - error UnexpectedTbtcVault(address bridgeDepositRequestVault); - - /// @dev Deposit was not completed on the tBTC side and tBTC was not minted - /// to the depositor contract. It is thrown when the deposit neither has - /// been optimistically minted nor swept. - error TbtcDepositNotCompleted(); - /// @notice Tbtc Depositor contract constructor. /// @param _bridge tBTC Bridge contract instance. /// @param _tbtcVault tBTC Vault contract instance. /// @param _acre Acre contract instance. + // TODO: Move to initializer when making the contract upgradeable. constructor( - IBridge _bridge, - ITBTCVault _tbtcVault, - IERC20 _tbtcToken, - Acre _acre + address _bridge, + address _tbtcVault, + address _tbtcToken, + address _acre ) Ownable(msg.sender) { - bridge = _bridge; - tbtcVault = _tbtcVault; - tbtcToken = _tbtcToken; - acre = _acre; + __TBTCDepositorProxy_initialize(_bridge, _tbtcVault); + + require(_tbtcToken != address(0), "TBTCToken address cannot be zero"); + require(_acre != address(0), "Acre address cannot be zero"); - depositorFeeDivisor = 0; // Depositor fee is disabled initially. + tbtcToken = IERC20(_tbtcToken); + acre = Acre(_acre); + + depositorFeeDivisor = 1000; // 1/1000 == 10bps == 0.1% == 0.001 } /// @notice This function allows staking process initialization for a Bitcoin /// deposit made by an user with a P2(W)SH transaction. It uses the /// supplied information to reveal a deposit to the tBTC Bridge contract. /// @dev Requirements: - /// - `reveal.walletPubKeyHash` must identify a `Live` wallet, - /// - `reveal.vault` must be 0x0 or point to a trusted vault, - /// - `reveal.fundingOutputIndex` must point to the actual P2(W)SH - /// output of the BTC deposit transaction, - /// - `reveal.blindingFactor` must be the blinding factor used in the - /// P2(W)SH BTC deposit transaction, - /// - `reveal.walletPubKeyHash` must be the wallet pub key hash used in - /// the P2(W)SH BTC deposit transaction, - /// - `reveal.refundPubKeyHash` must be the refund pub key hash used in - /// the P2(W)SH BTC deposit transaction, - /// - `reveal.refundLocktime` must be the refund locktime used in the - /// P2(W)SH BTC deposit transaction, + /// - The revealed vault address must match the TBTCVault address, + /// - All requirements from {Bridge#revealDepositWithExtraData} + /// function must be met. /// - `receiver` must be the receiver address used in the P2(W)SH BTC /// deposit transaction as part of the extra data. /// - `referral` must be the referral info used in the P2(W)SH BTC /// deposit transaction as part of the extra data. /// - BTC deposit for the given `fundingTxHash`, `fundingOutputIndex` /// can be revealed only one time. - /// - /// If any of these requirements is not met, the wallet _must_ refuse - /// to sweep the deposit and the depositor has to wait until the - /// deposit script unlocks to receive their BTC back. - /// @param fundingTx Bitcoin funding transaction data, see `IBridge.BitcoinTxInfo`. - /// @param reveal Deposit reveal data, see `IBridge.DepositRevealInfo`. + /// @param fundingTx Bitcoin funding transaction data, see `IBridgeTypes.BitcoinTxInfo`. + /// @param reveal Deposit reveal data, see `IBridgeTypes.DepositRevealInfo`. /// @param receiver The address to which the stBTC shares will be minted. /// @param referral Data used for referral program. function initializeStakeRequest( - IBridge.BitcoinTxInfo calldata fundingTx, - IBridge.DepositRevealInfo calldata reveal, + IBridgeTypes.BitcoinTxInfo calldata fundingTx, + IBridgeTypes.DepositRevealInfo calldata reveal, address receiver, uint16 referral ) external { - // Check if Vault revealed to the tBTC Bridge contract matches the - // tBTC Vault supported by this contract. - if (reveal.vault != address(tbtcVault)) - revert UnexpectedTbtcVault(reveal.vault); - if (receiver == address(0)) revert ReceiverIsZeroAddress(); - // Calculate Bitcoin transaction hash. - bytes32 fundingTxHash = abi - .encodePacked( - fundingTx.version, - fundingTx.inputVector, - fundingTx.outputVector, - fundingTx.locktime - ) - .hash256View(); - - uint256 depositKey = calculateDepositKey( - fundingTxHash, - reveal.fundingOutputIndex - ); - StakeRequest storage request = stakeRequests[depositKey]; - - if (request.requestedAt > 0) revert StakeRequestAlreadyInProgress(); + // We don't check if the request was already initialized, as this check + // is enforced in `_initializeDeposit` when calling the + // `Bridge.revealDepositWithExtraData` function. - emit StakeInitialized(depositKey, msg.sender, receiver, referral); - - // solhint-disable-next-line not-rely-on-time - request.requestedAt = uint64(block.timestamp); - - // Reveal the deposit to tBTC Bridge contract. - bridge.revealDepositWithExtraData( + uint256 depositKey = _initializeDeposit( fundingTx, reveal, encodeExtraData(receiver, referral) ); - // Snapshot parameters required for fee calculation. - (, , request.tbtcDepositTxMaxFee, ) = bridge.depositParameters(); - request.tbtcOptimisticMintingFeeDivisor = tbtcVault - .optimisticMintingFeeDivisor(); - - // Get deposit details from tBTC Bridge contract. - IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( - depositKey - ); + StakeRequest storage request = stakeRequests[depositKey]; + request.receiver = receiver; + request.referral = referral; - // Check if Depositor revealed to the tBTC Bridge contract matches the - // current contract address. - // This is very unlikely scenario, that would require unexpected change or - // bug in tBTC Bridge contract, as the depositor is set automatically - // to the reveal deposit message sender, which will be this contract. - // Anyway we check if the depositor that got the tBTC tokens minted - // is this contract, before we stake them. - if (bridgeDepositRequest.depositor != address(this)) - revert UnexpectedDepositor(bridgeDepositRequest.depositor); + emit StakeRequestInitialized(depositKey, msg.sender, receiver); } /// @notice This function should be called for previously initialized stake - /// request, after tBTC minting process completed and tBTC was deposited - /// in this Depositor contract. - /// @dev It calculates the amount to stake in Acre contract by deducting - /// tBTC protocol minting fee and the Depositor fee from the initial - /// funding transaction amount. - /// - /// The tBTC protocol minting fee is calculated depending on the process - /// the tBTC was minted in: - /// - for swept deposits: - /// `amount = depositAmount - depositTreasuryFee - depositTxMaxFee` - /// - for optimistically minted deposits: - /// ``` - /// amount = depositAmount - depositTreasuryFee - depositTxMaxFee - /// - optimisticMintingFee - /// ``` - /// These calculation are simplified and can leave some positive - /// imbalance in the Depositor contract. - /// - depositTxMaxFee - this is a maximum transaction fee that can be deducted - /// on Bitcoin transaction sweeping, - /// - optimisticMintingFee - this is a optimistic minting fee snapshotted - /// at the moment of the deposit reveal, there is a chance that the fee - /// parameter is updated in the tBTC Vault contract before the optimistic - /// minting is finalized. - /// The imbalance is left in the tBTC Depositor contract. - /// - /// The Depositor fee is computed based on the `depositorFeeDivisor` - /// parameter. The fee is transferred to the treasury wallet on the - /// stake request finalization. - /// @param depositKey Deposit key computed as - /// `keccak256(fundingTxHash | fundingOutputIndex)`. - function notifyBridgingCompleted(uint256 depositKey) public { - StakeRequest storage request = stakeRequests[depositKey]; - - if (request.requestedAt == 0) revert StakeRequestNotInitialized(); - if (request.amountToStake > 0) revert BridgingAlreadyCompleted(); + /// request, after tBTC minting process completed, meaning tBTC was + /// minted to this contract. + /// @dev It calculates the amount to stake based on the approximate minted + /// tBTC amount reduced by the depositor fee. + /// @dev IMPORTANT NOTE: The minted tBTC amount used by this function is an + /// approximation. See documentation of the + /// {{TBTCDepositorProxy#_calculateTbtcAmount}} responsible for calculating + /// this value for more details. + /// @param depositKey Deposit key identifying the deposit. + function notifyBridgingCompleted(uint256 depositKey) external { + ( + uint256 depositAmount, + uint256 depositSubBridgingFeesAmount, + + ) = _finalizeDeposit(depositKey); + + // Compute depositor fee. The fee is calculated based on the initial funding + // transaction amount, before the tBTC protocol network fees were taken. + uint256 depositorFee = depositorFeeDivisor > 0 + ? (depositAmount / depositorFeeDivisor) + : 0; - // Get deposit details from tBTC Bridge and Vault contracts. - IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( - depositKey - ); - ITBTCVault.OptimisticMintingRequest - memory optimisticMintingRequest = tbtcVault - .optimisticMintingRequests(depositKey); - - // Extract funding transaction amount sent by the user in Bitcoin transaction. - uint256 fundingTxAmountSat = bridgeDepositRequest.amount; - - // Estimate tBTC protocol fees for minting. - uint256 tbtcMintingFeesSat = bridgeDepositRequest.treasuryFee + - request.tbtcDepositTxMaxFee; - - // Check if deposit was optimistically minted. - if (optimisticMintingRequest.finalizedAt > 0) { - // For tBTC minted with optimistic minting process additional fee - // is taken. The fee is calculated on `TBTCVault.finalizeOptimisticMint` - // call, and not stored in the contract. - // There is a possibility the fee has changed since the snapshot of - // the `tbtcOptimisticMintingFeeDivisor`, to cover this scenario - // we want to assume the bigger fee, so we use the smaller divisor. - uint256 optimisticMintingFeeDivisor = Math.min( - request.tbtcOptimisticMintingFeeDivisor, - tbtcVault.optimisticMintingFeeDivisor() + // Ensure the depositor fee does not exceed the approximate minted tBTC + // amount. + if (depositorFee >= depositSubBridgingFeesAmount) { + revert DepositorFeeExceedsBridgedAmount( + depositorFee, + depositSubBridgingFeesAmount ); - - uint256 optimisticMintingFee = optimisticMintingFeeDivisor > 0 - ? (fundingTxAmountSat / optimisticMintingFeeDivisor) - : 0; - - tbtcMintingFeesSat += optimisticMintingFee; - } else { - // If the deposit wasn't optimistically minted check if it was swept. - if (bridgeDepositRequest.sweptAt == 0) - revert TbtcDepositNotCompleted(); } - // Compute depositor fee. - uint256 depositorFeeTbtc = depositorFeeDivisor > 0 - ? (fundingTxAmountSat / depositorFeeDivisor) * SATOSHI_MULTIPLIER - : 0; + StakeRequest storage request = stakeRequests[depositKey]; - // Calculate tBTC amount available to stake after subtracting all the fees. - // Convert amount in satoshi to tBTC token precision. - request.amountToStake = - (fundingTxAmountSat - tbtcMintingFeesSat) * - SATOSHI_MULTIPLIER - - depositorFeeTbtc; + request.amountToStake = depositSubBridgingFeesAmount - depositorFee; - emit BridgingCompleted(depositKey, msg.sender, request.amountToStake); + emit BridgingCompleted( + depositKey, + msg.sender, + request.referral, + depositSubBridgingFeesAmount, + depositorFee + ); // Transfer depositor fee to the treasury wallet. - if (depositorFeeTbtc > 0) { - tbtcToken.safeTransfer(acre.treasury(), depositorFeeTbtc); + if (depositorFee > 0) { + tbtcToken.safeTransfer(acre.treasury(), depositorFee); } } /// @notice This function should be called for previously initialized stake - /// request, after tBTC minting process completed and tBTC was deposited - /// in this contract. + /// request, after tBTC bridging process was finalized. /// It stakes the tBTC from the given deposit into Acre, emitting the /// stBTC shares to the receiver specified in the deposit extra data /// and using the referral provided in the extra data. /// @dev This function is expected to be called after `notifyBridgingCompleted`. - /// In case the call to `Acre.stake` function fails (e.g. because of the + /// In case depositing in stBTC vault fails (e.g. because of the /// maximum deposit limit being reached), the function should be retried /// after the limit is increased or other user withdraws their funds - /// from Acre contract to make place for another deposit. + /// from the stBTC contract to make place for another deposit. /// The staker has a possibility to submit `recallStakeRequest` that - /// will withdraw the minted tBTC token and abort staking in Acre contract. - /// @param depositKey Deposit key computed as - /// `keccak256(fundingTxHash | fundingOutputIndex)`. - function finalizeStakeRequest(uint256 depositKey) public { + /// will withdraw the minted tBTC token and abort staking process. + /// @param depositKey Deposit key identifying the deposit. + function finalizeStakeRequest(uint256 depositKey) external { StakeRequest storage request = stakeRequests[depositKey]; if (request.amountToStake == 0) revert BridgingNotCompleted(); @@ -390,21 +279,15 @@ contract TbtcDepositor is Ownable { // solhint-disable-next-line not-rely-on-time request.finalizedAt = uint64(block.timestamp); - // Get deposit details from tBTC Bridge. - IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( - depositKey + emit StakeRequestFinalized( + depositKey, + msg.sender, + request.amountToStake ); - // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit. - // Request. - bytes32 extraData = bridgeDepositRequest.extraData; - (address receiver, uint16 referral) = decodeExtraData(extraData); - - emit StakeFinalized(depositKey, msg.sender); - // Stake tBTC in Acre. tbtcToken.safeIncreaseAllowance(address(acre), request.amountToStake); - acre.stake(request.amountToStake, receiver, referral); + acre.deposit(request.amountToStake, request.receiver); } /// @notice Recall bridged tBTC tokens from being requested to stake. This @@ -414,33 +297,26 @@ contract TbtcDepositor is Ownable { /// @dev This function can be called only after bridging in tBTC Bridge was /// completed. Only receiver provided in the extra data of the stake /// request can call this function. - /// @param depositKey Deposit key computed as - /// `keccak256(fundingTxHash | fundingOutputIndex)`. + /// @param depositKey Deposit key identifying the deposit. function recallStakeRequest(uint256 depositKey) external { StakeRequest storage request = stakeRequests[depositKey]; if (request.amountToStake == 0) revert BridgingNotCompleted(); if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); + // Check if caller is the receiver. + if (msg.sender != request.receiver) revert CallerNotReceiver(); + // solhint-disable-next-line not-rely-on-time request.finalizedAt = uint64(block.timestamp); - // Get deposit details from tBTC Bridge and Vault contracts. - IBridge.DepositRequest memory bridgeDepositRequest = bridge.deposits( - depositKey + emit StakeRequestRecalled( + depositKey, + msg.sender, + request.amountToStake ); - // Fetch receiver and referral stored in extra data in tBTC Bridge Deposit. - // Request. - bytes32 extraData = bridgeDepositRequest.extraData; - (address receiver, ) = decodeExtraData(extraData); - - // Check if caller is the receiver. - if (msg.sender != receiver) revert CallerNotReceiver(); - - emit StakeRecalled(depositKey, msg.sender); - - tbtcToken.safeTransfer(receiver, request.amountToStake); + tbtcToken.safeTransfer(request.receiver, request.amountToStake); } /// @notice Updates the depositor fee divisor. @@ -456,23 +332,6 @@ contract TbtcDepositor is Ownable { // TODO: Handle minimum deposit amount in tBTC Bridge vs Acre. - /// @notice Calculates deposit key the same way as the Bridge contract. - /// @dev The deposit key is computed as - /// `keccak256(fundingTxHash | fundingOutputIndex)`. - /// @param fundingTxHash Bitcoin transaction hash (ordered as in Bitcoin internally) - /// @param fundingOutputIndex Output in Bitcoin transaction used to fund - /// the deposit. - /// @return Calculated Deposit Key. - function calculateDepositKey( - bytes32 fundingTxHash, - uint32 fundingOutputIndex - ) public pure returns (uint256) { - return - uint256( - keccak256(abi.encodePacked(fundingTxHash, fundingOutputIndex)) - ); - } - /// @notice Encode receiver address and referral as extra data. /// @dev Packs the data to bytes32: 20 bytes of receiver address and /// 2 bytes of referral, 10 bytes of trailing zeros. @@ -485,19 +344,4 @@ contract TbtcDepositor is Ownable { ) public pure returns (bytes32) { return bytes32(abi.encodePacked(receiver, referral)); } - - /// @notice Decodes receiver address and referral from extra data, - /// @dev Unpacks the data from bytes32: 20 bytes of receiver address and - /// 2 bytes of referral, 10 bytes of trailing zeros. - /// @param extraData Encoded extra data. - /// @return receiver The address to which the stBTC shares will be minted. - /// @return referral Data used for referral program. - function decodeExtraData( - bytes32 extraData - ) public pure returns (address receiver, uint16 referral) { - // First 20 bytes of extra data is receiver address. - receiver = address(uint160(bytes20(extraData))); - // Next 2 bytes of extra data is referral info. - referral = uint16(bytes2(extraData << (8 * 20))); - } } From a82393ecb2cf4f7cd5adad27b6176cbe8d089420 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 14:25:30 +0100 Subject: [PATCH 043/122] Update unit tests for changes in TbtcDepositor contract The tests were updated to match the changes to the contract that handles fee calculation in the abstract contract. --- core/test/TbtcDepositor.test.ts | 657 +++++++++++++------------------- 1 file changed, 271 insertions(+), 386 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 4916dba99..5a70f22b6 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -15,7 +15,6 @@ import type { import { deployment, getNamedSigner, getUnnamedSigner } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" import { tbtcDepositData } from "./data/tbtc" -import { lastBlockTime } from "./helpers/time" import { to1ePrecision } from "./utils" async function fixture() { @@ -29,7 +28,17 @@ describe("TbtcDepositor", () => { const defaultDepositTreasuryFeeDivisor = 2000 // 1/2000 = 0.05% = 0.0005 const defaultDepositTxMaxFee = 1000 // 1000 satoshi = 0.00001 BTC const defaultOptimisticFeeDivisor = 500 // 1/500 = 0.002 = 0.2% - const defaultDepositorFeeDivisor = 80 // 1/80 = 0.0125 = 1.25% + const defaultDepositorFeeDivisor = 1000 // 1/1000 = 0.001 = 0.1% + + // Funding transaction amount: 10000 satoshi + // tBTC Deposit Treasury Fee: 0.05% = 10000 * 0.05% = 5 satoshi + // tBTC Optimistic Minting Fee: 0.2% = (10000 - 5) * 0.2% = 19,99 satoshi + // tBTC Deposit Transaction Max Fee: 1000 satoshi + // Depositor Fee: 1.25% = 10000 satoshi * 0.01% = 10 satoshi + const initialDepositAmount = to1ePrecision(10000, 10) // 10000 satoshi + const bridgedTbtcAmount = to1ePrecision(897501, 8) // 8975,01 satoshi + const depositorFee = to1ePrecision(10, 10) // 10 satoshi + const amountToStake = to1ePrecision(896501, 8) // 8850,01 satoshi let tbtcDepositor: TbtcDepositor let tbtcBridge: BridgeStub @@ -100,107 +109,69 @@ describe("TbtcDepositor", () => { tbtcDepositData.receiver, tbtcDepositData.referral, ), - ) - .to.be.revertedWithCustomError( - tbtcDepositor, - "UnexpectedTbtcVault", - ) - .withArgs(invalidTbtcVault) + ).to.be.revertedWith("Vault address mismatch") }) }) describe("when tbtc vault address is correct", () => { describe("when referral is non-zero", () => { - describe("when revealed depositor doesn't match tbtc depositor contract", () => { - beforeAfterSnapshotWrapper() - - let invalidDepositor: string - - before(async () => { - invalidDepositor = - await ethers.Wallet.createRandom().getAddress() - - await tbtcBridge.setDepositorOverride(invalidDepositor) - }) - - it("should revert", async () => { - await expect( - tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ), - ) - .to.be.revertedWithCustomError( - tbtcDepositor, - "UnexpectedDepositor", - ) - .withArgs(invalidDepositor) - }) - }) - describe("when revealed depositor matches tbtc depositor contract", () => { - beforeAfterSnapshotWrapper() + beforeAfterSnapshotWrapper() - let tx: ContractTransactionResponse + let tx: ContractTransactionResponse - before(async () => { - tx = await tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) - }) - - it("should emit StakeInitialized event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "StakeInitialized") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) - }) - - it("should store request data", async () => { - const storedStakeRequest = await tbtcDepositor.stakeRequests( - tbtcDepositData.depositKey, + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, ) + }) - expect( - storedStakeRequest.requestedAt, - "invalid requestedAt", - ).to.be.equal(await lastBlockTime()) - expect( - storedStakeRequest.finalizedAt, - "invalid finalizedAt", - ).to.be.equal(0) - expect( - storedStakeRequest.tbtcDepositTxMaxFee, - "invalid tbtcDepositTxMaxFee", - ).to.be.equal(1000) - expect( - storedStakeRequest.tbtcOptimisticMintingFeeDivisor, - "invalid tbtcOptimisticMintingFeeDivisor", - ).to.be.equal(500) - }) - - it("should reveal the deposit to the bridge contract with extra data", async () => { - const storedRevealedDeposit = await tbtcBridge.deposits( + it("should emit StakeRequestInitialized event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeRequestInitialized") + .withArgs( tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.receiver, ) + }) + + it("should store request data", async () => { + const storedStakeRequest = await tbtcDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect( + storedStakeRequest.finalizedAt, + "invalid finalizedAt", + ).to.be.equal(0) + expect( + storedStakeRequest.receiver, + "invalid receiver", + ).to.be.equal(tbtcDepositData.receiver) + expect( + storedStakeRequest.referral, + "invalid referral", + ).to.be.equal(tbtcDepositData.referral) + expect( + storedStakeRequest.amountToStake, + "invalid amountToStake", + ).to.be.equal(0) + }) + + it("should reveal the deposit to the bridge contract with extra data", async () => { + const storedRevealedDeposit = await tbtcBridge.deposits( + tbtcDepositData.depositKey, + ) - expect( - storedRevealedDeposit.extraData, - "invalid extraData", - ).to.be.equal(tbtcDepositData.extraData) - }) + expect( + storedRevealedDeposit.extraData, + "invalid extraData", + ).to.be.equal(tbtcDepositData.extraData) }) }) @@ -247,10 +218,42 @@ describe("TbtcDepositor", () => { tbtcDepositData.receiver, tbtcDepositData.referral, ), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "StakeRequestAlreadyInProgress", - ) + ).to.be.revertedWith("Deposit already revealed") + }) + }) + + describe("when stake request is already finalized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + + // Simulate deposit request finalization. + await finalizeBridging(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ), + ).to.be.revertedWith("Deposit already revealed") }) }) }) @@ -263,16 +266,15 @@ describe("TbtcDepositor", () => { tbtcDepositor .connect(thirdParty) .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "StakeRequestNotInitialized", - ) + ).to.be.revertedWith("Deposit not initialized") }) }) describe("when stake request has been initialized", () => { - function initializeStakeRequest() { - return tbtcDepositor + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -280,226 +282,146 @@ describe("TbtcDepositor", () => { tbtcDepositData.receiver, tbtcDepositData.referral, ) - } - - describe("when bridging completion has not been notified", () => { - // Funding transaction amount: 10000 satoshi - // tBTC Deposit Treasury Fee: 0.05% = 10000 * 0.05% = 5 satoshi - // tBTC Deposit Transaction Max Fee: 1000 satoshi - // tBTC Optimistic Minting Fee: 0.2% = 10000 * 0.2% = 20 satoshi - // Depositor Fee: 1.25% = 10000 satoshi * 1.25% = 125 satoshi - - const defaultDepositorFee = to1ePrecision(125, 10) - - function testNotifyBridgingCompleted( - expectedAssetsAmount: bigint, - expectedDepositorFee = defaultDepositorFee, - ) { - let tx: ContractTransactionResponse + }) - before(async () => { - tx = await tbtcDepositor + describe("when deposit was not bridged", () => { + it("should revert", async () => { + await expect( + tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) - }) - - it("should emit BridgingCompleted event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - expectedAssetsAmount, - ) - }) - - it("should store amount to stake", async () => { - expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .amountToStake, - ).to.be.equal(expectedAssetsAmount) - }) - - it("should transfer depositor fee", async () => { - await expect(tx).to.changeTokenBalances( - tbtc, - [treasury], - [expectedDepositorFee], - ) - }) - } + .notifyBridgingCompleted(tbtcDepositData.depositKey), + ).to.be.revertedWith("Deposit not finalized by the bridge") + }) + }) + describe("when deposit was bridged", () => { beforeAfterSnapshotWrapper() - describe("when minting request was finalized by optimistic minting", () => { - describe("when optimistic minting fee divisor is zero", () => { + before(async () => { + // Simulate deposit request finalization. + await finalizeBridging(tbtcDepositData.depositKey) + }) + + describe("when bridging completion has not been notified", () => { + describe("when depositor fee divisor is not zero", () => { beforeAfterSnapshotWrapper() - const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi + let tx: ContractTransactionResponse before(async () => { - await tbtcVault.setOptimisticMintingFeeDivisor(0) - - await initializeStakeRequest() - - // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMinting( - tbtcDepositData.depositKey, - ) + tx = await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey) }) - testNotifyBridgingCompleted(expectedAssetsAmount) - }) + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + depositorFee, + ) + }) - describe("when optimistic minting fee divisor is not zero", () => { - beforeAfterSnapshotWrapper() + it("should store amount to stake", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .amountToStake, + ).to.be.equal(amountToStake) + }) - before(async () => { - await tbtcVault.setOptimisticMintingFeeDivisor( - defaultOptimisticFeeDivisor, + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [treasury], + [depositorFee], ) }) + }) - describe("when current optimistic minting fee is greater than it was on stake initialization", () => { - beforeAfterSnapshotWrapper() - - const expectedAssetsAmount = to1ePrecision(8830, 10) // 8830 satoshi - - before(async () => { - await initializeStakeRequest() + describe("when depositor fee divisor is zero", () => { + beforeAfterSnapshotWrapper() - await tbtcVault.setOptimisticMintingFeeDivisor( - defaultOptimisticFeeDivisor / 2, - ) // 1/250 = 0.004 = 0.4% + let tx: ContractTransactionResponse - // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMinting( - tbtcDepositData.depositKey, - ) - }) + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(0) - testNotifyBridgingCompleted(expectedAssetsAmount) + tx = await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey) }) - describe("when current optimistic minting fee is lower than it was on stake initialization", () => { - beforeAfterSnapshotWrapper() - - // Since the current Optimistic Fee (10 satoshi) is lower than - // the one calculated on request initialization (20 satoshi) the - // higher value is deducted from the funding transaction amount. - const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi - - before(async () => { - await initializeStakeRequest() - - await tbtcVault.setOptimisticMintingFeeDivisor( - defaultOptimisticFeeDivisor * 2, - ) // 1/1000 = 0.001 = 0.1% - - // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMinting( + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "BridgingCompleted") + .withArgs( tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + 0, ) - }) - - testNotifyBridgingCompleted(expectedAssetsAmount) }) - }) - }) - describe("when minting request was not finalized by optimistic minting", () => { - beforeAfterSnapshotWrapper() + it("should store amount to stake", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .amountToStake, + ).to.be.equal(bridgedTbtcAmount) + }) - before(async () => { - await initializeStakeRequest() + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) + }) }) - describe("when minting request has not been swept", () => { + describe("when depositor fee exceeds bridged amount", () => { beforeAfterSnapshotWrapper() + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(1) + }) + it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "BridgingNotCompleted", + .notifyBridgingCompleted(tbtcDepositData.depositKey), ) - }) - }) - - describe("when minting request was swept", () => { - describe("when depositor fee divisor is zero", () => { - beforeAfterSnapshotWrapper() - - const expectedAssetsAmount = to1ePrecision(8995, 10) // 8995 satoshi - - before(async () => { - await tbtcDepositor - .connect(governance) - .updateDepositorFeeDivisor(0) - - // Simulate deposit request finalization via sweeping. - await tbtcBridge.sweep( - tbtcDepositData.fundingTxHash, - tbtcDepositData.reveal.fundingOutputIndex, - ) - }) - - testNotifyBridgingCompleted(expectedAssetsAmount, 0n) - }) - - describe("when depositor fee divisor is not zero", () => { - beforeAfterSnapshotWrapper() - - const expectedAssetsAmount = to1ePrecision(8870, 10) // 8870 satoshi - - before(async () => { - await tbtcDepositor - .connect(governance) - .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) - - // Simulate deposit request finalization via sweeping. - await tbtcBridge.sweep( - tbtcDepositData.fundingTxHash, - tbtcDepositData.reveal.fundingOutputIndex, + .to.be.revertedWithCustomError( + tbtcDepositor, + "DepositorFeeExceedsBridgedAmount", ) - }) - - testNotifyBridgingCompleted(expectedAssetsAmount) + .withArgs(initialDepositAmount, bridgedTbtcAmount) }) }) }) - }) - - describe("when bridging completion has been notified", () => { - beforeAfterSnapshotWrapper() - before(async () => { - await initializeStakeRequest() - - // Simulate deposit request finalization via sweeping. - await tbtcBridge.sweep( - tbtcDepositData.fundingTxHash, - tbtcDepositData.reveal.fundingOutputIndex, - ) - - // Notify bridging completed. - await tbtcDepositor - .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) - }) + describe("when bridging completion has been notified", () => { + beforeAfterSnapshotWrapper() - it("should revert", async () => { - await expect( - tbtcDepositor + before(async () => { + // Notify bridging completed. + await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "BridgingAlreadyCompleted", - ) + .notifyBridgingCompleted(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey), + ).to.be.revertedWith("Deposit not initialized") + }) }) }) }) @@ -548,8 +470,8 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMinting(tbtcDepositData.depositKey) + // Simulate deposit request finalization. + await finalizeBridging(tbtcDepositData.depositKey) await tbtcDepositor .connect(thirdParty) @@ -559,8 +481,8 @@ describe("TbtcDepositor", () => { describe("when stake request has not been finalized", () => { beforeAfterSnapshotWrapper() - const expectedAssetsAmount = to1ePrecision(8850, 10) // 8850 satoshi - const expectedReceivedSharesAmount = expectedAssetsAmount + const expectedAssetsAmount = amountToStake + const expectedReceivedSharesAmount = amountToStake let tx: ContractTransactionResponse @@ -570,16 +492,14 @@ describe("TbtcDepositor", () => { .finalizeStakeRequest(tbtcDepositData.depositKey) }) - it("should emit StakeFinalized event", async () => { + it("should emit StakeRequestFinalized event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "StakeFinalized") - .withArgs(tbtcDepositData.depositKey, thirdParty.address) - }) - - it("should emit StakeReferral event", async () => { - await expect(tx) - .to.emit(acre, "StakeReferral") - .withArgs(tbtcDepositData.referral, expectedAssetsAmount) + .to.emit(tbtcDepositor, "StakeRequestFinalized") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + expectedAssetsAmount, + ) }) it("should emit Deposit event", async () => { @@ -635,6 +555,8 @@ describe("TbtcDepositor", () => { }) }) + // TODO: ADD TESTS FOR recallStakeRequest function + describe("updateDepositorFeeDivisor", () => { beforeAfterSnapshotWrapper() @@ -684,20 +606,6 @@ describe("TbtcDepositor", () => { }) }) - describe("calculateDepositKey", () => { - it("should calculate the deposit key", async () => { - // Test data from transaction: https://etherscan.io/tx/0x7816e66d2b1a7858c2e8c49099bf009e52d07e081d5b562ac9ff6d2b072387c9 - expect( - await tbtcDepositor.calculateDepositKey( - "0xa08d41ee8e044b25d365fd54d27d79da6db9e9e2f8be166b82a510d0d31b9406", - 114, - ), - ).to.be.equal( - "0x4e89fe01b92ff0ebf0bdeb70891fcb6c286d750b191971999091c8a1e5b3f11d", - ) - }) - }) - const extraDataValidTestData = new Map< string, { @@ -715,51 +623,51 @@ describe("TbtcDepositor", () => { "0x000055d85e80a49b5930c4a77975d44f012d86c11ac300000000000000000000", }, ], - [ - "receiver has trailing zeros", - { - receiver: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", - referral: 6851, // hex: 0x1ac3 - extraData: - "0x2d2f8bc7923f7f806dc9bb2e17f950b42cfe00001ac300000000000000000000", - }, - ], - [ - "referral is zero", - { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - referral: 0, - extraData: - "0xeb098d6cde6a202981316b24b19e64d82721e89e000000000000000000000000", - }, - ], - [ - "referral has leading zeros", - { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - referral: 31, // hex: 0x001f - extraData: - "0xeb098d6cde6a202981316b24b19e64d82721e89e001f00000000000000000000", - }, - ], - [ - "referral has trailing zeros", - { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - referral: 19712, // hex: 0x4d00 - extraData: - "0xeb098d6cde6a202981316b24b19e64d82721e89e4d0000000000000000000000", - }, - ], - [ - "referral is maximum value", - { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - referral: 65535, // max uint16 - extraData: - "0xeb098d6cde6a202981316b24b19e64d82721e89effff00000000000000000000", - }, - ], + // [ + // "receiver has trailing zeros", + // { + // receiver: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", + // referral: 6851, // hex: 0x1ac3 + // extraData: + // "0x2d2f8bc7923f7f806dc9bb2e17f950b42cfe00001ac300000000000000000000", + // }, + // ], + // [ + // "referral is zero", + // { + // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + // referral: 0, + // extraData: + // "0xeb098d6cde6a202981316b24b19e64d82721e89e000000000000000000000000", + // }, + // ], + // [ + // "referral has leading zeros", + // { + // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + // referral: 31, // hex: 0x001f + // extraData: + // "0xeb098d6cde6a202981316b24b19e64d82721e89e001f00000000000000000000", + // }, + // ], + // [ + // "referral has trailing zeros", + // { + // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + // referral: 19712, // hex: 0x4d00 + // extraData: + // "0xeb098d6cde6a202981316b24b19e64d82721e89e4d0000000000000000000000", + // }, + // ], + // [ + // "referral is maximum value", + // { + // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + // referral: 65535, // max uint16 + // extraData: + // "0xeb098d6cde6a202981316b24b19e64d82721e89effff00000000000000000000", + // }, + // ], ]) describe("encodeExtraData", () => { @@ -769,45 +677,22 @@ describe("TbtcDepositor", () => { expect( await tbtcDepositor.encodeExtraData(receiver, referral), ).to.be.equal(expectedExtraData) - }) - }, - ) - }) - describe("decodeExtraData", () => { - extraDataValidTestData.forEach( - ( - { receiver: expectedReceiver, referral: expectedReferral, extraData }, - testName, - ) => { - it(testName, async () => { - const [actualReceiver, actualReferral] = - await tbtcDepositor.decodeExtraData(extraData) - - expect(actualReceiver, "invalid receiver").to.be.equal( - expectedReceiver, - ) - expect(actualReferral, "invalid referral").to.be.equal( - expectedReferral, - ) + expect( + ethers.zeroPadBytes( + ethers.solidityPacked(["address", "int16"], [receiver, referral]), + 32, + ), + ).to.be.equal(expectedExtraData) }) }, ) + }) - it("with unused bytes filled with data", async () => { - // Extra data uses address (20 bytes) and referral (2 bytes), leaving the - // remaining 10 bytes unused. This test fills the unused bytes with a random - // value. - const extraData = - "0xeb098d6cde6a202981316b24b19e64d82721e89e1ac3105f9919321ea7d75f58" - const expectedReceiver = "0xeb098d6cDE6A202981316b24B19e64D82721e89E" - const expectedReferral = 6851 // hex: 0x1ac3 - - const [actualReceiver, actualReferral] = - await tbtcDepositor.decodeExtraData(extraData) + async function finalizeBridging(depositKey: bigint) { + await tbtcVault.createOptimisticMintingRequest(depositKey) - expect(actualReceiver, "invalid receiver").to.be.equal(expectedReceiver) - expect(actualReferral, "invalid referral").to.be.equal(expectedReferral) - }) - }) + // Simulate deposit request finalization via optimistic minting. + await tbtcVault.finalizeOptimisticMintingRequestAndMint(depositKey) + } }) From 6d8d8c7838e351918e6b5d91c868b5a2d9de21e2 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 14:26:12 +0100 Subject: [PATCH 044/122] Remove external tbtc contracts The contracts are imported from the tbtc-v2 dependency now. --- core/contracts/external/tbtc/IBridge.sol | 189 -------------------- core/contracts/external/tbtc/ITBTCVault.sol | 50 ------ 2 files changed, 239 deletions(-) delete mode 100644 core/contracts/external/tbtc/IBridge.sol delete mode 100644 core/contracts/external/tbtc/ITBTCVault.sol diff --git a/core/contracts/external/tbtc/IBridge.sol b/core/contracts/external/tbtc/IBridge.sol deleted file mode 100644 index 1f5749955..000000000 --- a/core/contracts/external/tbtc/IBridge.sol +++ /dev/null @@ -1,189 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -// This file defines an interface based on the Bridge contract. It defines functions -// from the external source contract that are used in this repository. -// Source: -// https://github.com/keep-network/tbtc-v2/blob/a78cc16e3521a6339f1c27891bb1ad60b9202406/solidity/contracts/bridge/Bridge.sol -// -// TODO: Update after the released version with a commit hash after PR is merged -// https://github.com/keep-network/tbtc-v2/pull/760 and released. - -/// @title Bitcoin Bridge -/// @notice Bridge manages BTC deposit and redemption flow and is increasing and -/// decreasing balances in the Bank as a result of BTC deposit and -/// redemption operations performed by depositors and redeemers. -/// -/// Depositors send BTC funds to the most recently created off-chain -/// ECDSA wallet of the bridge using pay-to-script-hash (P2SH) or -/// pay-to-witness-script-hash (P2WSH) containing hashed information -/// about the depositor’s Ethereum address. Then, the depositor reveals -/// their Ethereum address along with their deposit blinding factor, -/// refund public key hash and refund locktime to the Bridge on Ethereum -/// chain. The off-chain ECDSA wallet listens for these sorts of -/// messages and when it gets one, it checks the Bitcoin network to make -/// sure the deposit lines up. If it does, the off-chain ECDSA wallet -/// may decide to pick the deposit transaction for sweeping, and when -/// the sweep operation is confirmed on the Bitcoin network, the ECDSA -/// wallet informs the Bridge about the sweep increasing appropriate -/// balances in the Bank. -/// @dev Bridge is an upgradeable component of the Bank. The order of -/// functionalities in this contract is: deposit, sweep, redemption, -/// moving funds, wallet lifecycle, frauds, parameters. -interface IBridge { - /// @notice Represents Bitcoin transaction data. - struct BitcoinTxInfo { - /// @notice Bitcoin transaction version. - /// @dev `version` from raw Bitcoin transaction data. - /// Encoded as 4-bytes signed integer, little endian. - bytes4 version; - /// @notice All Bitcoin transaction inputs, prepended by the number of - /// transaction inputs. - /// @dev `tx_in_count | tx_in` from raw Bitcoin transaction data. - /// - /// The number of transaction inputs encoded as compactSize - /// unsigned integer, little-endian. - /// - /// Note that some popular block explorers reverse the order of - /// bytes from `outpoint`'s `hash` and display it as big-endian. - /// Solidity code of Bridge expects hashes in little-endian, just - /// like they are represented in a raw Bitcoin transaction. - bytes inputVector; - /// @notice All Bitcoin transaction outputs prepended by the number of - /// transaction outputs. - /// @dev `tx_out_count | tx_out` from raw Bitcoin transaction data. - /// - /// The number of transaction outputs encoded as a compactSize - /// unsigned integer, little-endian. - bytes outputVector; - /// @notice Bitcoin transaction locktime. - /// - /// @dev `lock_time` from raw Bitcoin transaction data. - /// Encoded as 4-bytes unsigned integer, little endian. - bytes4 locktime; - // This struct doesn't contain `__gap` property as the structure is not - // stored, it is used as a function's calldata argument. - } - - /// @notice Represents data which must be revealed by the depositor during - /// deposit reveal. - struct DepositRevealInfo { - // Index of the funding output belonging to the funding transaction. - uint32 fundingOutputIndex; - // The blinding factor as 8 bytes. Byte endianness doesn't matter - // as this factor is not interpreted as uint. The blinding factor allows - // to distinguish deposits from the same depositor. - bytes8 blindingFactor; - // The compressed Bitcoin public key (33 bytes and 02 or 03 prefix) - // of the deposit's wallet hashed in the HASH160 Bitcoin opcode style. - bytes20 walletPubKeyHash; - // The compressed Bitcoin public key (33 bytes and 02 or 03 prefix) - // that can be used to make the deposit refund after the refund - // locktime passes. Hashed in the HASH160 Bitcoin opcode style. - bytes20 refundPubKeyHash; - // The refund locktime (4-byte LE). Interpreted according to locktime - // parsing rules described in: - // https://developer.bitcoin.org/devguide/transactions.html#locktime-and-sequence-number - // and used with OP_CHECKLOCKTIMEVERIFY opcode as described in: - // https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki - bytes4 refundLocktime; - // Address of the Bank vault to which the deposit is routed to. - // Optional, can be 0x0. The vault must be trusted by the Bridge. - address vault; - } - - /// @notice Represents tBTC deposit request data. - struct DepositRequest { - // Ethereum depositor address. - address depositor; - // Deposit amount in satoshi. - uint64 amount; - // UNIX timestamp the deposit was revealed at. - // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. - uint32 revealedAt; - // Address of the Bank vault the deposit is routed to. - // Optional, can be 0x0. - address vault; - // Treasury TBTC fee in satoshi at the moment of deposit reveal. - uint64 treasuryFee; - // UNIX timestamp the deposit was swept at. Note this is not the - // time when the deposit was swept on the Bitcoin chain but actually - // the time when the sweep proof was delivered to the Ethereum chain. - // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. - uint32 sweptAt; - // The 32-byte deposit extra data. Optional, can be bytes32(0). - bytes32 extraData; - // This struct doesn't contain `__gap` property as the structure is stored - // in a mapping, mappings store values in different slots and they are - // not contiguous with other values. - } - - /// @notice Sibling of the `revealDeposit` function. This function allows - /// to reveal a P2(W)SH Bitcoin deposit with 32-byte extra data - /// embedded in the deposit script. The extra data allows to - /// attach additional context to the deposit. For example, - /// it allows a third-party smart contract to reveal the - /// deposit on behalf of the original depositor and provide - /// additional services once the deposit is handled. In this - /// case, the address of the original depositor can be encoded - /// as extra data. - /// @param fundingTx Bitcoin funding transaction data, see `BitcoinTx.Info`. - /// @param reveal Deposit reveal data, see `RevealInfo struct. - /// @param extraData 32-byte deposit extra data. - /// @dev Requirements: - /// - All requirements from `revealDeposit` function must be met, - /// - `extraData` must not be bytes32(0), - /// - `extraData` must be the actual extra data used in the P2(W)SH - /// BTC deposit transaction. - /// - /// If any of these requirements is not met, the wallet _must_ refuse - /// to sweep the deposit and the depositor has to wait until the - /// deposit script unlocks to receive their BTC back. - function revealDepositWithExtraData( - BitcoinTxInfo calldata fundingTx, - DepositRevealInfo calldata reveal, - bytes32 extraData - ) external; - - /// @notice Collection of all revealed deposits indexed by - /// keccak256(fundingTxHash | fundingOutputIndex). - /// The fundingTxHash is bytes32 (ordered as in Bitcoin internally) - /// and fundingOutputIndex an uint32. This mapping may contain valid - /// and invalid deposits and the wallet is responsible for - /// validating them before attempting to execute a sweep. - function deposits( - uint256 depositKey - ) external view returns (DepositRequest memory); - - /// @notice Returns the current values of Bridge deposit parameters. - /// @return depositDustThreshold The minimal amount that can be requested - /// to deposit. Value of this parameter must take into account the - /// value of `depositTreasuryFeeDivisor` and `depositTxMaxFee` - /// parameters in order to make requests that can incur the - /// treasury and transaction fee and still satisfy the depositor. - /// @return depositTreasuryFeeDivisor Divisor used to compute the treasury - /// fee taken from each deposit and transferred to the treasury upon - /// sweep proof submission. That fee is computed as follows: - /// `treasuryFee = depositedAmount / depositTreasuryFeeDivisor` - /// For example, if the treasury fee needs to be 2% of each deposit, - /// the `depositTreasuryFeeDivisor` should be set to `50` - /// because `1/50 = 0.02 = 2%`. - /// @return depositTxMaxFee Maximum amount of BTC transaction fee that can - /// be incurred by each swept deposit being part of the given sweep - /// transaction. If the maximum BTC transaction fee is exceeded, - /// such transaction is considered a fraud. - /// @return depositRevealAheadPeriod Defines the length of the period that - /// must be preserved between the deposit reveal time and the - /// deposit refund locktime. For example, if the deposit become - /// refundable on August 1st, and the ahead period is 7 days, the - /// latest moment for deposit reveal is July 25th. Value in seconds. - function depositParameters() - external - view - returns ( - uint64 depositDustThreshold, - uint64 depositTreasuryFeeDivisor, - uint64 depositTxMaxFee, - uint32 depositRevealAheadPeriod - ); -} diff --git a/core/contracts/external/tbtc/ITBTCVault.sol b/core/contracts/external/tbtc/ITBTCVault.sol deleted file mode 100644 index bbc2cb103..000000000 --- a/core/contracts/external/tbtc/ITBTCVault.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -// This file defines an interface based on the TBTCVault contract. It defines functions -// from the external source contract that are used in this repository. -// Source: -// https://github.com/keep-network/tbtc-v2/blob/a78cc16e3521a6339f1c27891bb1ad60b9202406/solidity/contracts/vault/TBTCVault.sol -// -// TODO: Update after the released version with a commit hash after PR is merged -// https://github.com/keep-network/tbtc-v2/pull/760 and released. - -/// @title TBTC application vault -/// @notice TBTC is a fully Bitcoin-backed ERC-20 token pegged to the price of -/// Bitcoin. It facilitates Bitcoin holders to act on the Ethereum -/// blockchain and access the decentralized finance (DeFi) ecosystem. -/// TBTC Vault mints and unmints TBTC based on Bitcoin balances in the -/// Bank. -/// @dev TBTC Vault is the owner of TBTC token contract and is the only contract -/// minting the token. -interface ITBTCVault { - // Represents optimistic minting request for the given deposit revealed - // to the Bridge. - struct OptimisticMintingRequest { - // UNIX timestamp at which the optimistic minting was requested. - uint64 requestedAt; - // UNIX timestamp at which the optimistic minting was finalized. - // 0 if not yet finalized. - uint64 finalizedAt; - } - - /// @notice Collection of all revealed deposits for which the optimistic - /// minting was requested. Indexed by a deposit key computed as - /// `keccak256(fundingTxHash | fundingOutputIndex)`. - function optimisticMintingRequests( - uint256 depositKey - ) external returns (OptimisticMintingRequest memory); - - /// @notice Divisor used to compute the treasury fee taken from each - /// optimistically minted deposit and transferred to the treasury - /// upon finalization of the optimistic mint. This fee is computed - /// as follows: `fee = amount / optimisticMintingFeeDivisor`. - /// For example, if the fee needs to be 2%, the - /// `optimisticMintingFeeDivisor` should be set to `50` because - /// `1/50 = 0.02 = 2%`. - /// The optimistic minting fee does not replace the deposit treasury - /// fee cut by the Bridge. The optimistic fee is a percentage AFTER - /// the treasury fee is cut: - /// `optimisticMintingFee = (depositAmount - treasuryFee) / optimisticMintingFeeDivisor` - function optimisticMintingFeeDivisor() external view returns (uint32); -} From 2a401f07319c85c750224d45b06f836edf5c83de Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 14:30:13 +0100 Subject: [PATCH 045/122] Update stub contracts Use the mock contracts implemented in the tbtc-v2 package. --- core/contracts/test/BridgeStub.sol | 143 +------------------------- core/contracts/test/TBTCVaultStub.sol | 50 ++++----- core/deploy/00_resolve_tbtc_bridge.ts | 5 +- 3 files changed, 24 insertions(+), 174 deletions(-) diff --git a/core/contracts/test/BridgeStub.sol b/core/contracts/test/BridgeStub.sol index 9b3401064..e2298e039 100644 --- a/core/contracts/test/BridgeStub.sol +++ b/core/contracts/test/BridgeStub.sol @@ -1,145 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol"; -import {IBridge} from "../external/tbtc/IBridge.sol"; +import {MockBridge} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositorProxy.sol"; +import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {TestERC20} from "./TestERC20.sol"; -contract BridgeStub is IBridge { - using BTCUtils for bytes; - - TestERC20 public tbtc; - - /// @notice Multiplier to convert satoshi to TBTC token units. - uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; - - // The values set here are tweaked for test purposes. These are not - // the exact values used in the Bridge contract on mainnet. - // See: https://github.com/keep-network/tbtc-v2/blob/103411a595c33895ff6bff8457383a69eca4963c/solidity/test/bridge/Bridge.Deposit.test.ts#L70-L77 - uint64 public depositDustThreshold = 10000; // 10000 satoshi = 0.0001 BTC - uint64 public depositTreasuryFeeDivisor = 2000; // 1/2000 == 5bps == 0.05% == 0.0005 - uint64 public depositTxMaxFee = 1000; // 1000 satoshi = 0.00001 BTC - uint32 public depositRevealAheadPeriod = 15 days; - - // Used in tests to fake invalid depositor being set. - address overrideDepositor; - - mapping(uint256 => DepositRequest) internal depositsMap; - - constructor(TestERC20 _tbtc) { - tbtc = _tbtc; - } - - function revealDepositWithExtraData( - BitcoinTxInfo calldata fundingTx, - DepositRevealInfo calldata reveal, - bytes32 extraData - ) external { - bytes32 fundingTxHash = abi - .encodePacked( - fundingTx.version, - fundingTx.inputVector, - fundingTx.outputVector, - fundingTx.locktime - ) - .hash256View(); - - DepositRequest storage deposit = depositsMap[ - calculateDepositKey(fundingTxHash, reveal.fundingOutputIndex) - ]; - - require(deposit.revealedAt == 0, "Deposit already revealed"); - - bytes memory fundingOutput = fundingTx - .outputVector - .extractOutputAtIndex(reveal.fundingOutputIndex); - - uint64 fundingOutputAmount = fundingOutput.extractValue(); - - require( - fundingOutputAmount >= depositDustThreshold, - "Deposit amount too small" - ); - - deposit.amount = fundingOutputAmount; - deposit.depositor = overrideDepositor != address(0) - ? overrideDepositor - : msg.sender; - /* solhint-disable-next-line not-rely-on-time */ - deposit.revealedAt = uint32(block.timestamp); - deposit.vault = reveal.vault; - deposit.treasuryFee = depositTreasuryFeeDivisor > 0 - ? fundingOutputAmount / depositTreasuryFeeDivisor - : 0; - deposit.extraData = extraData; - } - - function deposits( - uint256 depositKey - ) external view returns (DepositRequest memory) { - return depositsMap[depositKey]; - } - - function sweep(bytes32 fundingTxHash, uint32 fundingOutputIndex) external { - DepositRequest storage deposit = depositsMap[ - calculateDepositKey(fundingTxHash, fundingOutputIndex) - ]; - - // solhint-disable-next-line not-rely-on-time - deposit.sweptAt = uint32(block.timestamp); - - (, , uint64 depositTxMaxFee, ) = depositParameters(); - // For test purposes as deposit tx fee we take value lower than the max - // possible value as this follows how Bridge may sweep the deposit - // with a fee lower than the max. - // Here we arbitrary choose the deposit tx fee to be at 80% of max deposit fee. - uint64 depositTxFee = (depositTxMaxFee * 8) / 10; - - uint64 amountToMintSat = deposit.amount - - deposit.treasuryFee - - depositTxFee; - - tbtc.mint(deposit.depositor, amountToMintSat * SATOSHI_MULTIPLIER); - } - - function depositParameters() - public - view - returns (uint64, uint64, uint64, uint32) - { - return ( - depositDustThreshold, - depositTreasuryFeeDivisor, - depositTxMaxFee, - depositRevealAheadPeriod - ); - } - - function calculateDepositKey( - bytes32 fundingTxHash, - uint32 fundingOutputIndex - ) private pure returns (uint256) { - return - uint256( - keccak256(abi.encodePacked(fundingTxHash, fundingOutputIndex)) - ); - } - - function setDepositDustThreshold(uint64 _depositDustThreshold) external { - depositDustThreshold = _depositDustThreshold; - } - - function setDepositTreasuryFeeDivisor( - uint64 _depositTreasuryFeeDivisor - ) external { - depositTreasuryFeeDivisor = _depositTreasuryFeeDivisor; - } - - function setDepositTxMaxFee(uint64 _depositTxMaxFee) external { - depositTxMaxFee = _depositTxMaxFee; - } - - function setDepositorOverride(address depositor) external { - overrideDepositor = depositor; - } -} +contract BridgeStub is MockBridge {} diff --git a/core/contracts/test/TBTCVaultStub.sol b/core/contracts/test/TBTCVaultStub.sol index 6d38ae4bd..0e8c9fb7c 100644 --- a/core/contracts/test/TBTCVaultStub.sol +++ b/core/contracts/test/TBTCVaultStub.sol @@ -1,56 +1,46 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {ITBTCVault} from "../tbtc/TbtcDepositor.sol"; -import {IBridge} from "../external/tbtc/IBridge.sol"; +import {MockTBTCVault} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositorProxy.sol"; +import {IBridge} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; +import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; + import {TestERC20} from "./TestERC20.sol"; -contract TBTCVaultStub is ITBTCVault { +contract TBTCVaultStub is MockTBTCVault { TestERC20 public tbtc; IBridge public bridge; /// @notice Multiplier to convert satoshi to TBTC token units. uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; - uint32 public optimisticMintingFeeDivisor = 500; // 1/500 = 0.002 = 0.2% - - mapping(uint256 => OptimisticMintingRequest) public requests; - constructor(TestERC20 _tbtc, IBridge _bridge) { tbtc = _tbtc; bridge = _bridge; } - function optimisticMintingRequests( + function finalizeOptimisticMintingRequestAndMint( uint256 depositKey - ) external view returns (OptimisticMintingRequest memory) { - return requests[depositKey]; - } - - function mintTbtc(address account, uint256 valueSat) public { - tbtc.mint(account, valueSat * SATOSHI_MULTIPLIER); - } - - function finalizeOptimisticMinting(uint256 depositKey) external { - OptimisticMintingRequest storage request = requests[depositKey]; + ) public { + MockTBTCVault.finalizeOptimisticMintingRequest(depositKey); - IBridge.DepositRequest memory deposit = bridge.deposits(depositKey); + IBridgeTypes.DepositRequest memory deposit = bridge.deposits( + depositKey + ); - uint256 amountToMint = (deposit.amount - deposit.treasuryFee) * + uint256 amountSubTreasury = (deposit.amount - deposit.treasuryFee) * SATOSHI_MULTIPLIER; - uint256 optimisticMintFee = optimisticMintingFeeDivisor > 0 - ? (amountToMint / optimisticMintingFeeDivisor) + uint256 omFee = optimisticMintingFeeDivisor > 0 + ? (amountSubTreasury / optimisticMintingFeeDivisor) : 0; - tbtc.mint(deposit.depositor, amountToMint - optimisticMintFee); + // The deposit transaction max fee is in the 1e8 satoshi precision. + // We need to convert them to the 1e18 TBTC precision. + (, , uint64 depositTxMaxFee, ) = bridge.depositParameters(); + uint256 txMaxFee = depositTxMaxFee * SATOSHI_MULTIPLIER; - /* solhint-disable-next-line not-rely-on-time */ - request.finalizedAt = uint64(block.timestamp); - } + uint256 amountToMint = amountSubTreasury - omFee - txMaxFee; - function setOptimisticMintingFeeDivisor( - uint32 _optimisticMintingFeeDivisor - ) public { - optimisticMintingFeeDivisor = _optimisticMintingFeeDivisor; + tbtc.mint(deposit.depositor, amountToMint); } } diff --git a/core/deploy/00_resolve_tbtc_bridge.ts b/core/deploy/00_resolve_tbtc_bridge.ts index 4b69a2343..8de16d317 100644 --- a/core/deploy/00_resolve_tbtc_bridge.ts +++ b/core/deploy/00_resolve_tbtc_bridge.ts @@ -19,11 +19,9 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { } else { log("deploying Bridge contract stub") - const tbtc = await deployments.get("TBTC") - await deployments.deploy("Bridge", { contract: "BridgeStub", - args: [tbtc.address], + args: [], from: deployer, log: true, waitConfirmations: 1, @@ -34,4 +32,3 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func func.tags = ["TBTC", "Bridge"] -func.dependencies = ["TBTCToken"] From 83da0c4bca6f7befe65cd649b2c9886ea74acece Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 14:30:48 +0100 Subject: [PATCH 046/122] Disable no-use-before-define rule We can disable this rule, as it often reports false problems in tests. --- core/.eslintrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/.eslintrc b/core/.eslintrc index 8090228c6..fddf9e0e7 100644 --- a/core/.eslintrc +++ b/core/.eslintrc @@ -12,7 +12,8 @@ "test/**" ] } - ] + ], + "@typescript-eslint/no-use-before-define": "off" }, "overrides": [ { From 10bcee4869c42a8522e049b674b99aa45cc45b3c Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 16:34:22 +0100 Subject: [PATCH 047/122] Rename Acre contact references to stBTC --- core/contracts/tbtc/TbtcDepositor.sol | 30 ++++++++++++------------- core/deploy/03_deploy_tbtc_depositor.ts | 6 ++--- core/test/TbtcDepositor.test.ts | 20 ++++++++--------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/tbtc/TbtcDepositor.sol index eb0225b8c..201bb2ca2 100644 --- a/core/contracts/tbtc/TbtcDepositor.sol +++ b/core/contracts/tbtc/TbtcDepositor.sol @@ -9,7 +9,7 @@ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import "@keep-network/tbtc-v2/contracts/integrator/TBTCDepositorProxy.sol"; -import {Acre} from "../Acre.sol"; +import {stBTC} from "../stBTC.sol"; // TODO: Add Missfund token protection. // TODO: Make Upgradable @@ -32,7 +32,7 @@ import {Acre} from "../Acre.sol"; /// the sweep operation is confirmed on the Bitcoin network, the tBTC Bridge /// and tBTC vault mint the tBTC token to the Depositor address. /// After tBTC is minted to the Depositor, on the stake finalization -/// tBTC is staked in Acre contract and stBTC shares are emitted to the +/// tBTC is staked in stBTC contract and stBTC shares are emitted to the /// receiver pointed by the staker. contract TbtcDepositor is TBTCDepositorProxy, Ownable { using BTCUtils for bytes; @@ -56,8 +56,8 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { /// @notice tBTC Token contract. IERC20 public immutable tbtcToken; - /// @notice Acre contract. - Acre public acre; + /// @notice stBTC contract. + stBTC public stbtc; /// @notice Mapping of stake requests. /// @dev The key is a deposit key identifying the deposit. @@ -146,21 +146,21 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { /// @notice Tbtc Depositor contract constructor. /// @param _bridge tBTC Bridge contract instance. /// @param _tbtcVault tBTC Vault contract instance. - /// @param _acre Acre contract instance. + /// @param _stbtc stBTC contract instance. // TODO: Move to initializer when making the contract upgradeable. constructor( address _bridge, address _tbtcVault, address _tbtcToken, - address _acre + address _stbtc ) Ownable(msg.sender) { __TBTCDepositorProxy_initialize(_bridge, _tbtcVault); require(_tbtcToken != address(0), "TBTCToken address cannot be zero"); - require(_acre != address(0), "Acre address cannot be zero"); + require(_stbtc != address(0), "stBTC address cannot be zero"); tbtcToken = IERC20(_tbtcToken); - acre = Acre(_acre); + stbtc = stBTC(_stbtc); depositorFeeDivisor = 1000; // 1/1000 == 10bps == 0.1% == 0.001 } @@ -253,13 +253,13 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { // Transfer depositor fee to the treasury wallet. if (depositorFee > 0) { - tbtcToken.safeTransfer(acre.treasury(), depositorFee); + tbtcToken.safeTransfer(stbtc.treasury(), depositorFee); } } /// @notice This function should be called for previously initialized stake /// request, after tBTC bridging process was finalized. - /// It stakes the tBTC from the given deposit into Acre, emitting the + /// It stakes the tBTC from the given deposit into stBTC, emitting the /// stBTC shares to the receiver specified in the deposit extra data /// and using the referral provided in the extra data. /// @dev This function is expected to be called after `notifyBridgingCompleted`. @@ -285,14 +285,14 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { request.amountToStake ); - // Stake tBTC in Acre. - tbtcToken.safeIncreaseAllowance(address(acre), request.amountToStake); - acre.deposit(request.amountToStake, request.receiver); + // Deposit tBTC in stBTC. + tbtcToken.safeIncreaseAllowance(address(stbtc), request.amountToStake); + stbtc.deposit(request.amountToStake, request.receiver); } /// @notice Recall bridged tBTC tokens from being requested to stake. This /// function can be called by the staker to recover tBTC that cannot - /// be finalized to stake in Acre contract due to a deposit limit being + /// be finalized to stake in stBTC contract due to a deposit limit being /// reached. /// @dev This function can be called only after bridging in tBTC Bridge was /// completed. Only receiver provided in the extra data of the stake @@ -330,7 +330,7 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { emit DepositorFeeDivisorUpdated(newDepositorFeeDivisor); } - // TODO: Handle minimum deposit amount in tBTC Bridge vs Acre. + // TODO: Handle minimum deposit amount in tBTC Bridge vs stBTC. /// @notice Encode receiver address and referral as extra data. /// @dev Packs the data to bytes32: 20 bytes of receiver address and diff --git a/core/deploy/03_deploy_tbtc_depositor.ts b/core/deploy/03_deploy_tbtc_depositor.ts index e6cd03d6c..ae7b60039 100644 --- a/core/deploy/03_deploy_tbtc_depositor.ts +++ b/core/deploy/03_deploy_tbtc_depositor.ts @@ -8,11 +8,11 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const bridge = await deployments.get("Bridge") const tbtcVault = await deployments.get("TBTCVault") const tbtc = await deployments.get("TBTC") - const acre = await deployments.get("Acre") + const stbtc = await deployments.get("stBTC") await deployments.deploy("TbtcDepositor", { from: deployer, - args: [bridge.address, tbtcVault.address, tbtc.address, acre.address], + args: [bridge.address, tbtcVault.address, tbtc.address, stbtc.address], log: true, waitConfirmations: 1, }) @@ -24,4 +24,4 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func func.tags = ["TbtcDepositor"] -func.dependencies = ["TBTC", "Acre"] +func.dependencies = ["TBTC", "stBTC"] diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 5a70f22b6..f36bd7dbe 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -6,7 +6,7 @@ import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { ContractTransactionResponse, ZeroAddress } from "ethers" import type { - Acre, + StBTC, BridgeStub, TBTCVaultStub, TbtcDepositor, @@ -18,10 +18,10 @@ import { tbtcDepositData } from "./data/tbtc" import { to1ePrecision } from "./utils" async function fixture() { - const { tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } = + const { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = await deployment() - return { tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } + return { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } } describe("TbtcDepositor", () => { @@ -43,7 +43,7 @@ describe("TbtcDepositor", () => { let tbtcDepositor: TbtcDepositor let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub - let acre: Acre + let stbtc: StBTC let tbtc: TestERC20 let governance: HardhatEthersSigner @@ -51,14 +51,14 @@ describe("TbtcDepositor", () => { let thirdParty: HardhatEthersSigner before(async () => { - ;({ tbtcDepositor, tbtcBridge, tbtcVault, acre, tbtc } = + ;({ tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = await loadFixture(fixture)) ;({ governance, treasury } = await getNamedSigner()) ;[thirdParty] = await getUnnamedSigner() - await acre.connect(governance).updateDepositParameters( + await stbtc.connect(governance).updateDepositParameters( 10000000000000, // 0.00001 - await acre.maximumTotalAssets(), + await stbtc.maximumTotalAssets(), ) tbtcDepositData.reveal.vault = await tbtcVault.getAddress() @@ -504,7 +504,7 @@ describe("TbtcDepositor", () => { it("should emit Deposit event", async () => { await expect(tx) - .to.emit(acre, "Deposit") + .to.emit(stbtc, "Deposit") .withArgs( await tbtcDepositor.getAddress(), tbtcDepositData.receiver, @@ -518,7 +518,7 @@ describe("TbtcDepositor", () => { tx, "invalid minted stBTC amount", ).to.changeTokenBalances( - acre, + stbtc, [tbtcDepositData.receiver], [expectedReceivedSharesAmount], ) @@ -526,7 +526,7 @@ describe("TbtcDepositor", () => { await expect( tx, "invalid staked tBTC amount", - ).to.changeTokenBalances(tbtc, [acre], [expectedAssetsAmount]) + ).to.changeTokenBalances(tbtc, [stbtc], [expectedAssetsAmount]) }) }) From d5fe01ff39e420245ae8fb17b3a0fdf4bbb4a56e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 16:39:55 +0100 Subject: [PATCH 048/122] Set entry fee basis points to zero We don't need to test the entry fee in stBTC contract in this test suite. --- core/test/TbtcDepositor.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index f36bd7dbe..2078149d1 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -75,6 +75,8 @@ describe("TbtcDepositor", () => { await tbtcDepositor .connect(governance) .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) + + await stbtc.connect(governance).updateEntryFeeBasisPoints(0) }) describe("initializeStakeRequest", () => { From 4dc776fea8173902c2568c37492e6b832530692f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 16:48:49 +0100 Subject: [PATCH 049/122] Move TbtcDepositor.sol file --- core/contracts/{tbtc => }/TbtcDepositor.sol | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename core/contracts/{tbtc => }/TbtcDepositor.sol (100%) diff --git a/core/contracts/tbtc/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol similarity index 100% rename from core/contracts/tbtc/TbtcDepositor.sol rename to core/contracts/TbtcDepositor.sol From 10c4126f2118cd4c39eec5b0fb1a9766842a32d2 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 16:50:05 +0100 Subject: [PATCH 050/122] Move TbtcDepositor.sol file --- core/contracts/TbtcDepositor.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 201bb2ca2..bb376da32 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -9,7 +9,7 @@ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import "@keep-network/tbtc-v2/contracts/integrator/TBTCDepositorProxy.sol"; -import {stBTC} from "../stBTC.sol"; +import {stBTC} from "./stBTC.sol"; // TODO: Add Missfund token protection. // TODO: Make Upgradable From 9e9d9757ae807a1530847258517983eb35aeb160 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 18:29:40 +0100 Subject: [PATCH 051/122] Enable encode extra data test cases --- core/test/TbtcDepositor.test.ts | 98 ++++++++++++++++----------------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 2078149d1..1cf33616e 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -625,67 +625,61 @@ describe("TbtcDepositor", () => { "0x000055d85e80a49b5930c4a77975d44f012d86c11ac300000000000000000000", }, ], - // [ - // "receiver has trailing zeros", - // { - // receiver: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", - // referral: 6851, // hex: 0x1ac3 - // extraData: - // "0x2d2f8bc7923f7f806dc9bb2e17f950b42cfe00001ac300000000000000000000", - // }, - // ], - // [ - // "referral is zero", - // { - // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - // referral: 0, - // extraData: - // "0xeb098d6cde6a202981316b24b19e64d82721e89e000000000000000000000000", - // }, - // ], - // [ - // "referral has leading zeros", - // { - // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - // referral: 31, // hex: 0x001f - // extraData: - // "0xeb098d6cde6a202981316b24b19e64d82721e89e001f00000000000000000000", - // }, - // ], - // [ - // "referral has trailing zeros", - // { - // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - // referral: 19712, // hex: 0x4d00 - // extraData: - // "0xeb098d6cde6a202981316b24b19e64d82721e89e4d0000000000000000000000", - // }, - // ], - // [ - // "referral is maximum value", - // { - // receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", - // referral: 65535, // max uint16 - // extraData: - // "0xeb098d6cde6a202981316b24b19e64d82721e89effff00000000000000000000", - // }, - // ], + [ + "receiver has trailing zeros", + { + receiver: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", + referral: 6851, // hex: 0x1ac3 + extraData: + "0x2d2f8bc7923f7f806dc9bb2e17f950b42cfe00001ac300000000000000000000", + }, + ], + [ + "referral is zero", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 0, + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89e000000000000000000000000", + }, + ], + [ + "referral has leading zeros", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 31, // hex: 0x001f + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89e001f00000000000000000000", + }, + ], + [ + "referral has trailing zeros", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 19712, // hex: 0x4d00 + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89e4d0000000000000000000000", + }, + ], + [ + "referral is maximum value", + { + receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + referral: 65535, // max uint16 + extraData: + "0xeb098d6cde6a202981316b24b19e64d82721e89effff00000000000000000000", + }, + ], ]) describe("encodeExtraData", () => { extraDataValidTestData.forEach( + // eslint-disable-next-line @typescript-eslint/no-shadow ({ receiver, referral, extraData: expectedExtraData }, testName) => { it(testName, async () => { expect( await tbtcDepositor.encodeExtraData(receiver, referral), ).to.be.equal(expectedExtraData) - - expect( - ethers.zeroPadBytes( - ethers.solidityPacked(["address", "int16"], [receiver, referral]), - 32, - ), - ).to.be.equal(expectedExtraData) }) }, ) From 0c151acc094caa70eecb7667f13032844074e395 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 18:32:27 +0100 Subject: [PATCH 052/122] Add unit tests for recallStakeRequest --- core/hardhat.config.ts | 1 + core/package.json | 1 + core/test/TbtcDepositor.test.ts | 227 +++++++++++++++++++++++++++----- 3 files changed, 195 insertions(+), 34 deletions(-) diff --git a/core/hardhat.config.ts b/core/hardhat.config.ts index df0ebebd1..3bd677dbf 100644 --- a/core/hardhat.config.ts +++ b/core/hardhat.config.ts @@ -4,6 +4,7 @@ import "@nomicfoundation/hardhat-toolbox" import "hardhat-contract-sizer" import "hardhat-deploy" import "solidity-docgen" +import "@keep-network/hardhat-helpers" const config: HardhatUserConfig = { solidity: { diff --git a/core/package.json b/core/package.json index ce300e6b8..947dad691 100644 --- a/core/package.json +++ b/core/package.json @@ -29,6 +29,7 @@ "test": "hardhat test" }, "devDependencies": { + "@keep-network/hardhat-helpers": "^0.7.1", "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.9", diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 1cf33616e..994c397f3 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -1,7 +1,7 @@ /* eslint-disable func-names */ import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" -import { ethers } from "hardhat" +import { ethers, helpers } from "hardhat" import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { ContractTransactionResponse, ZeroAddress } from "ethers" @@ -16,6 +16,7 @@ import { deployment, getNamedSigner, getUnnamedSigner } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" import { tbtcDepositData } from "./data/tbtc" import { to1ePrecision } from "./utils" +import { lastBlockTime } from "./helpers/time" async function fixture() { const { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = @@ -49,6 +50,7 @@ describe("TbtcDepositor", () => { let governance: HardhatEthersSigner let treasury: HardhatEthersSigner let thirdParty: HardhatEthersSigner + let receiver: HardhatEthersSigner before(async () => { ;({ tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = @@ -56,6 +58,13 @@ describe("TbtcDepositor", () => { ;({ governance, treasury } = await getNamedSigner()) ;[thirdParty] = await getUnnamedSigner() + receiver = await helpers.account.impersonateAccount( + tbtcDepositData.receiver, + { + from: thirdParty, + }, + ) + await stbtc.connect(governance).updateDepositParameters( 10000000000000, // 0.00001 await stbtc.maximumTotalAssets(), @@ -200,14 +209,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) + await initializeStakeRequest() }) it("should revert", async () => { @@ -228,14 +230,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) + await initializeStakeRequest() // Simulate deposit request finalization. await finalizeBridging(tbtcDepositData.depositKey) @@ -276,14 +271,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) + await initializeStakeRequest() }) describe("when deposit was not bridged", () => { @@ -446,14 +434,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor - .connect(thirdParty) - .initializeStakeRequest( - tbtcDepositData.fundingTxInfo, - tbtcDepositData.reveal, - tbtcDepositData.receiver, - tbtcDepositData.referral, - ) + await initializeStakeRequest() }) describe("when bridging completion has not been notified", () => { @@ -494,6 +475,13 @@ describe("TbtcDepositor", () => { .finalizeStakeRequest(tbtcDepositData.depositKey) }) + it("should set finalizedAt timestamp", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .finalizedAt, + ).to.be.equal(await lastBlockTime()) + }) + it("should emit StakeRequestFinalized event", async () => { await expect(tx) .to.emit(tbtcDepositor, "StakeRequestFinalized") @@ -532,6 +520,27 @@ describe("TbtcDepositor", () => { }) }) + describe("when stake request has been recalled", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(receiver) + .recallStakeRequest(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestAlreadyFinalized", + ) + }) + }) + describe("when stake request has been finalized", () => { beforeAfterSnapshotWrapper() @@ -557,7 +566,146 @@ describe("TbtcDepositor", () => { }) }) - // TODO: ADD TESTS FOR recallStakeRequest function + describe("recallStakeRequest", () => { + describe("when stake request has not been initialized", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(receiver) + .recallStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + }) + }) + + describe("when stake request has been initialized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStakeRequest() + }) + + describe("when bridging completion has not been notified", () => { + beforeAfterSnapshotWrapper() + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .recallStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + }) + }) + + describe("when bridging completion has been notified", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Simulate deposit request finalization. + await finalizeBridging(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey) + }) + + describe("when stake request has not been recalled", () => { + describe("when caller is non-receiver", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .recallStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "CallerNotReceiver", + ) + }) + }) + + describe("when caller is receiver", () => { + beforeAfterSnapshotWrapper() + + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(receiver) + .recallStakeRequest(tbtcDepositData.depositKey) + }) + + it("should set finalizedAt timestamp", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .finalizedAt, + ).to.be.equal(await lastBlockTime()) + }) + + it("should emit StakeRequestRecalled event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeRequestRecalled") + .withArgs( + tbtcDepositData.depositKey, + receiver.address, + amountToStake, + ) + }) + + it("should transfer tbtc to receiver", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [tbtcDepositor, receiver], + [-amountToStake, amountToStake], + ) + }) + }) + }) + + describe("when stake request has been recalled", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Finalize stake request. + await tbtcDepositor + .connect(receiver) + .recallStakeRequest(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .recallStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestAlreadyFinalized", + ) + }) + }) + + describe("when stake request has been finalized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Finalize stake request. + await tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .recallStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestAlreadyFinalized", + ) + }) + }) + }) + }) + }) describe("updateDepositorFeeDivisor", () => { beforeAfterSnapshotWrapper() @@ -685,6 +833,17 @@ describe("TbtcDepositor", () => { ) }) + async function initializeStakeRequest() { + await tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ) + } + async function finalizeBridging(depositKey: bigint) { await tbtcVault.createOptimisticMintingRequest(depositKey) From 610abb5920f4ea88e130af484ce10e60c7f717d1 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 18:33:19 +0100 Subject: [PATCH 053/122] Update StakeRequestRecalled event --- core/contracts/TbtcDepositor.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index bb376da32..348e02bd2 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -112,11 +112,11 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { /// @notice Emitted when a stake request is recalled. /// @param depositKey Deposit key identifying the deposit. - /// @param caller Address that called the function to recall the stake. + /// @param receiver Address of the receiver. /// @param amountToStake Amount of recalled tBTC tokens. event StakeRequestRecalled( uint256 indexed depositKey, - address indexed caller, + address indexed receiver, uint256 amountToStake ); @@ -312,7 +312,7 @@ contract TbtcDepositor is TBTCDepositorProxy, Ownable { emit StakeRequestRecalled( depositKey, - msg.sender, + request.receiver, request.amountToStake ); From 1d3cea3d98531b9b9ea506f917b73a19258b0568 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 1 Feb 2024 18:42:45 +0100 Subject: [PATCH 054/122] Convert depositKey value to bigint --- core/test/data/tbtc.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/test/data/tbtc.ts b/core/test/data/tbtc.ts index a5838a198..3f48b4a0d 100644 --- a/core/test/data/tbtc.ts +++ b/core/test/data/tbtc.ts @@ -1,5 +1,7 @@ /* eslint-disable import/prefer-default-export */ +import { ethers } from "hardhat" + // TODO: Revisit the data once full integration is tested on testnet with valid // contracts integration. // Fixture used for revealDepositWithExtraData test scenario. @@ -41,6 +43,7 @@ export const tbtcDepositData = { extraData: "0xa9b38ea6435c8941d6eda6a46b68e3e2117196995bd100000000000000000000", // Deposit key is keccak256(fundingTxHash | fundingOutputIndex). - depositKey: + depositKey: ethers.getBigInt( "0x8dde6118338ae2a046eb77a4acceb0521699275f9cc8e9b50057b29d9de1e844", + ), } From 850f980a691ff57d887131bedc99fcfe7eaa86c2 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 2 Feb 2024 12:32:57 +0100 Subject: [PATCH 055/122] Upgrade dependency to tbtc-v2 This version contains changes from https://github.com/keep-network/tbtc-v2/pull/780 --- core/contracts/TbtcDepositor.sol | 4 +- core/contracts/test/BridgeStub.sol | 2 +- core/package.json | 1 + pnpm-lock.yaml | 20051 ++++++++++++--------------- 4 files changed, 8505 insertions(+), 11553 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 348e02bd2..339b8861b 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -7,7 +7,7 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; -import "@keep-network/tbtc-v2/contracts/integrator/TBTCDepositorProxy.sol"; +import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; import {stBTC} from "./stBTC.sol"; @@ -34,7 +34,7 @@ import {stBTC} from "./stBTC.sol"; /// After tBTC is minted to the Depositor, on the stake finalization /// tBTC is staked in stBTC contract and stBTC shares are emitted to the /// receiver pointed by the staker. -contract TbtcDepositor is TBTCDepositorProxy, Ownable { +contract TbtcDepositor is AbstractTBTCDepositor, Ownable { using BTCUtils for bytes; using SafeERC20 for IERC20; diff --git a/core/contracts/test/BridgeStub.sol b/core/contracts/test/BridgeStub.sol index e2298e039..cea692c49 100644 --- a/core/contracts/test/BridgeStub.sol +++ b/core/contracts/test/BridgeStub.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {MockBridge} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositorProxy.sol"; +import {MockBridge} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositor.sol"; import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {TestERC20} from "./TestERC20.sol"; diff --git a/core/package.json b/core/package.json index 947dad691..02a1965b3 100644 --- a/core/package.json +++ b/core/package.json @@ -62,6 +62,7 @@ }, "dependencies": { "@keep-network/bitcoin-spv-sol": "3.4.0-solc-0.8", + "@keep-network/tbtc-v2": "^1.6.0-dev.18", "@openzeppelin/contracts": "^5.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fe953bae..b45977303 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,13 +1,14 @@ -lockfileVersion: "6.0" +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: + .: devDependencies: - "@thesis/prettier-config": + '@thesis/prettier-config': specifier: github:thesis/prettier-config version: github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0) prettier: @@ -19,50 +20,56 @@ importers: core: dependencies: - "@keep-network/bitcoin-spv-sol": + '@keep-network/bitcoin-spv-sol': specifier: 3.4.0-solc-0.8 version: 3.4.0-solc-0.8 - "@openzeppelin/contracts": + '@keep-network/tbtc-v2': + specifier: ^1.6.0-dev.18 + version: 1.6.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) + '@openzeppelin/contracts': specifier: ^5.0.0 version: 5.0.0 devDependencies: - "@nomicfoundation/hardhat-chai-matchers": + '@keep-network/hardhat-helpers': + specifier: ^0.7.1 + version: 0.7.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(@openzeppelin/hardhat-upgrades@2.4.1)(ethers@6.8.1)(hardhat-deploy@0.11.43)(hardhat@2.19.1) + '@nomicfoundation/hardhat-chai-matchers': specifier: ^2.0.2 version: 2.0.2(@nomicfoundation/hardhat-ethers@3.0.5)(chai@4.3.10)(ethers@6.8.1)(hardhat@2.19.1) - "@nomicfoundation/hardhat-ethers": + '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 version: 3.0.5(ethers@6.8.1)(hardhat@2.19.1) - "@nomicfoundation/hardhat-network-helpers": + '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.9 version: 1.0.9(hardhat@2.19.1) - "@nomicfoundation/hardhat-toolbox": + '@nomicfoundation/hardhat-toolbox': specifier: ^4.0.0 version: 4.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@2.0.1)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.11)(@types/mocha@10.0.6)(@types/node@20.9.4)(chai@4.3.10)(ethers@6.8.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.19.1)(solidity-coverage@0.8.5)(ts-node@10.9.1)(typechain@8.3.2)(typescript@5.3.2) - "@nomicfoundation/hardhat-verify": + '@nomicfoundation/hardhat-verify': specifier: ^2.0.1 version: 2.0.1(hardhat@2.19.1) - "@nomiclabs/hardhat-etherscan": + '@nomiclabs/hardhat-etherscan': specifier: ^3.1.7 version: 3.1.7(hardhat@2.19.1) - "@openzeppelin/hardhat-upgrades": + '@openzeppelin/hardhat-upgrades': specifier: ^2.4.1 version: 2.4.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(ethers@6.8.1)(hardhat@2.19.1) - "@thesis-co/eslint-config": + '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) - "@typechain/ethers-v6": + '@typechain/ethers-v6': specifier: ^0.5.1 version: 0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2) - "@typechain/hardhat": + '@typechain/hardhat': specifier: ^9.1.0 version: 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.8.1)(hardhat@2.19.1)(typechain@8.3.2) - "@types/chai": + '@types/chai': specifier: ^4.3.11 version: 4.3.11 - "@types/mocha": + '@types/mocha': specifier: ^10.0.6 version: 10.0.6 - "@types/node": + '@types/node': specifier: ^20.9.4 version: 20.9.4 chai: @@ -116,22 +123,22 @@ importers: dapp: dependencies: - "@chakra-ui/react": + '@chakra-ui/react': specifier: ^2.8.2 version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) - "@emotion/react": + '@emotion/react': specifier: ^11.11.1 version: 11.11.1(@types/react@18.2.38)(react@18.2.0) - "@emotion/styled": + '@emotion/styled': specifier: ^11.11.0 version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) - "@ledgerhq/wallet-api-client": + '@ledgerhq/wallet-api-client': specifier: ^1.5.0 version: 1.5.0 - "@ledgerhq/wallet-api-client-react": + '@ledgerhq/wallet-api-client-react': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.11.3 version: 8.11.3(react-dom@18.2.0)(react@18.2.0) formik: @@ -150,22 +157,22 @@ importers: specifier: ^5.3.1 version: 5.3.1(react-dom@18.2.0)(react@18.2.0) devDependencies: - "@thesis-co/eslint-config": + '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) - "@types/react": + '@types/react': specifier: ^18.2.38 version: 18.2.38 - "@types/react-dom": + '@types/react-dom': specifier: ^18.2.17 version: 18.2.17 - "@typescript-eslint/eslint-plugin": + '@typescript-eslint/eslint-plugin': specifier: ^6.12.0 version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^6.12.0 version: 6.12.0(eslint@8.54.0)(typescript@5.3.2) - "@vitejs/plugin-react": + '@vitejs/plugin-react': specifier: ^4.2.0 version: 4.2.0(vite@5.0.2) eslint: @@ -192,16 +199,16 @@ importers: sdk: devDependencies: - "@thesis-co/eslint-config": + '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) - "@types/chai": + '@types/chai': specifier: ^4.3.11 version: 4.3.11 - "@types/mocha": + '@types/mocha': specifier: ^10.0.6 version: 10.0.6 - "@types/node": + '@types/node': specifier: ^20.9.4 version: 20.9.4 chai: @@ -244,25 +251,25 @@ importers: specifier: ^6.1.0 version: 6.1.0(react@18.2.0) devDependencies: - "@thesis-co/eslint-config": + '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) - "@types/node": + '@types/node': specifier: ^20.9.4 version: 20.9.4 - "@types/react": + '@types/react': specifier: ^18.2.38 version: 18.2.38 - "@types/react-dom": + '@types/react-dom': specifier: ^18.2.17 version: 18.2.17 - "@types/react-helmet": + '@types/react-helmet': specifier: ^6.1.9 version: 6.1.9 - "@typescript-eslint/eslint-plugin": + '@typescript-eslint/eslint-plugin': specifier: ^6.12.0 version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^6.12.0 version: 6.12.0(eslint@8.54.0)(typescript@5.3.2) eslint: @@ -279,45 +286,34 @@ importers: version: 5.3.2 packages: + /@aashutoshrathi/word-wrap@1.2.6: - resolution: - { - integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} /@adraffy/ens-normalize@1.10.0: - resolution: - { - integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==, - } + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} dev: true /@ampproject/remapping@2.2.1: - resolution: - { - integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.20 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): - resolution: - { - integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==, - } + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true peerDependencies: - graphql: "*" + graphql: '*' dependencies: - "@babel/core": 7.23.3 - "@babel/generator": 7.23.4 - "@babel/parser": 7.23.4 - "@babel/runtime": 7.23.4 - "@babel/traverse": 7.23.4 - "@babel/types": 7.23.4 + '@babel/core': 7.23.3 + '@babel/generator': 7.23.4 + '@babel/parser': 7.23.4 + '@babel/runtime': 7.23.4 + '@babel/traverse': 7.23.4 + '@babel/types': 7.23.4 babel-preset-fbjs: 3.4.0(@babel/core@7.23.3) chalk: 4.1.2 fb-watchman: 2.0.2 @@ -335,89 +331,65 @@ packages: - supports-color /@aws-crypto/sha256-js@1.2.2: - resolution: - { - integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==, - } + resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} dependencies: - "@aws-crypto/util": 1.2.2 - "@aws-sdk/types": 3.451.0 + '@aws-crypto/util': 1.2.2 + '@aws-sdk/types': 3.451.0 tslib: 1.14.1 dev: true /@aws-crypto/util@1.2.2: - resolution: - { - integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==, - } + resolution: {integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==} dependencies: - "@aws-sdk/types": 3.451.0 - "@aws-sdk/util-utf8-browser": 3.259.0 + '@aws-sdk/types': 3.451.0 + '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: true /@aws-sdk/types@3.451.0: - resolution: - { - integrity: sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==} + engines: {node: '>=14.0.0'} dependencies: - "@smithy/types": 2.6.0 + '@smithy/types': 2.6.0 tslib: 2.6.2 dev: true /@aws-sdk/util-utf8-browser@3.259.0: - resolution: - { - integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==, - } + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: tslib: 2.6.2 dev: true /@babel/code-frame@7.12.11: - resolution: - { - integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==, - } + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - "@babel/highlight": 7.23.4 + '@babel/highlight': 7.23.4 /@babel/code-frame@7.23.4: - resolution: - { - integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/highlight": 7.23.4 + '@babel/highlight': 7.23.4 chalk: 2.4.2 /@babel/compat-data@7.23.3: - resolution: - { - integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} + engines: {node: '>=6.9.0'} /@babel/core@7.23.3: - resolution: - { - integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@ampproject/remapping": 2.2.1 - "@babel/code-frame": 7.23.4 - "@babel/generator": 7.23.4 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.3) - "@babel/helpers": 7.23.4 - "@babel/parser": 7.23.4 - "@babel/template": 7.22.15 - "@babel/traverse": 7.23.4 - "@babel/types": 7.23.4 + resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.4 + '@babel/generator': 7.23.4 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helpers': 7.23.4 + '@babel/parser': 7.23.4 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.4 + '@babel/types': 7.23.4 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -427,109 +399,85 @@ packages: - supports-color /@babel/eslint-parser@7.23.3(@babel/core@7.23.3)(eslint@7.32.0): - resolution: - { - integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==, - } - engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } + resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: - "@babel/core": ^7.11.0 + '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 dependencies: - "@babel/core": 7.23.3 - "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 + '@babel/core': 7.23.3 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 7.32.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 /@babel/generator@7.23.4: - resolution: - { - integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/types": 7.23.4 - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.20 + resolution: {integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: - resolution: - { - integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: - { - integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-compilation-targets@7.22.15: - resolution: - { - integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/compat-data": 7.23.3 - "@babel/helper-validator-option": 7.22.15 + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.3 + '@babel/helper-validator-option': 7.22.15 browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.3): - resolution: - { - integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0 - dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-function-name": 7.23.0 - "@babel/helper-member-expression-to-functions": 7.23.0 - "@babel/helper-optimise-call-expression": 7.22.5 - "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.3) - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/helper-split-export-declaration": 7.22.6 + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.3): - resolution: - { - integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==, - } + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -537,1187 +485,896 @@ packages: - supports-color /@babel/helper-environment-visitor@7.22.20: - resolution: - { - integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} /@babel/helper-function-name@7.23.0: - resolution: - { - integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/template": 7.22.15 - "@babel/types": 7.23.4 + '@babel/template': 7.22.15 + '@babel/types': 7.23.4 /@babel/helper-hoist-variables@7.22.5: - resolution: - { - integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-member-expression-to-functions@7.23.0: - resolution: - { - integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-module-imports@7.22.15: - resolution: - { - integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-module-imports": 7.22.15 - "@babel/helper-simple-access": 7.22.5 - "@babel/helper-split-export-declaration": 7.22.6 - "@babel/helper-validator-identifier": 7.22.20 + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 /@babel/helper-optimise-call-expression@7.22.5: - resolution: - { - integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-plugin-utils@7.22.5: - resolution: - { - integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.3): - resolution: - { - integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-wrap-function": 7.22.20 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.3): - resolution: - { - integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-member-expression-to-functions": 7.23.0 - "@babel/helper-optimise-call-expression": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 /@babel/helper-simple-access@7.22.5: - resolution: - { - integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: - { - integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-split-export-declaration@7.22.6: - resolution: - { - integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/helper-string-parser@7.23.4: - resolution: - { - integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.22.20: - resolution: - { - integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.22.15: - resolution: - { - integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} /@babel/helper-wrap-function@7.22.20: - resolution: - { - integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/helper-function-name": 7.23.0 - "@babel/template": 7.22.15 - "@babel/types": 7.23.4 + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.4 /@babel/helpers@7.23.4: - resolution: - { - integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/template": 7.22.15 - "@babel/traverse": 7.23.4 - "@babel/types": 7.23.4 + resolution: {integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.4 + '@babel/types': 7.23.4 transitivePeerDependencies: - supports-color /@babel/highlight@7.23.4: - resolution: - { - integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/helper-validator-identifier": 7.22.20 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 /@babel/parser@7.23.4: - resolution: - { - integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==} + engines: {node: '>=6.0.0'} hasBin: true dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.13.0 + '@babel/core': ^7.13.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/plugin-transform-optional-chaining": 7.23.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.3) /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.3): - resolution: - { - integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.3): - resolution: - { - integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-nullish-coalescing-operator": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.3): - resolution: - { - integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-numeric-separator": 7.10.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.3): - resolution: - { - integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/compat-data": 7.23.3 - "@babel/core": 7.23.3 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-transform-parameters": 7.23.3(@babel/core@7.23.3) + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.3): - resolution: - { - integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3): - resolution: - { - integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 + '@babel/core': 7.23.3 /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, - } + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.3): - resolution: - { - integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, - } + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.3): - resolution: - { - integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, - } + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, - } + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, - } + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, - } + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, - } + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, - } + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, - } + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, - } + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, - } + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, - } + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.3): - resolution: - { - integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.3): - resolution: - { - integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.3): - resolution: - { - integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-regexp-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-remap-async-to-generator": 7.22.20(@babel/core@7.23.3) - "@babel/plugin-syntax-async-generators": 7.8.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-module-imports": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-remap-async-to-generator": 7.22.20(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.12.0 + '@babel/core': ^7.12.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) /@babel/plugin-transform-classes@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-function-name": 7.23.0 - "@babel/helper-optimise-call-expression": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.3) - "@babel/helper-split-export-declaration": 7.22.6 + resolution: {integrity: sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/template": 7.22.15 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-regexp-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-dynamic-import": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-builder-binary-assignment-operator-visitor": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-export-namespace-from": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-flow": 7.23.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.3) /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-function-name": 7.23.0 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-json-strings": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-logical-assignment-operators": 7.10.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-simple-access": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-hoist-variables": 7.22.5 - "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-validator-identifier": 7.22.20 + '@babel/core': 7.23.3 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.3): - resolution: - { - integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-regexp-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-nullish-coalescing-operator": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-numeric-separator": 7.10.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/compat-data": 7.23.3 - "@babel/core": 7.23.3 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-transform-parameters": 7.23.3(@babel/core@7.23.3) + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-optional-catch-binding": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 - "@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.3): - resolution: - { - integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/plugin-transform-react-jsx": 7.23.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.3) /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-module-imports": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-jsx": 7.23.3(@babel/core@7.23.3) - "@babel/types": 7.23.4 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) + '@babel/types': 7.23.4 /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-runtime@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-module-imports": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.3) babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.3) babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.3) @@ -1726,217 +1383,184 @@ packages: - supports-color /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-typescript@7.23.4(@babel/core@7.23.3): - resolution: - { - integrity: sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-annotate-as-pure": 7.22.5 - "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/plugin-syntax-typescript": 7.23.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.3) /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-regexp-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-regexp-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-create-regexp-features-plugin": 7.22.15(@babel/core@7.23.3) - "@babel/helper-plugin-utils": 7.22.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 /@babel/preset-env@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/compat-data": 7.23.3 - "@babel/core": 7.23.3 - "@babel/helper-compilation-targets": 7.22.15 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-validator-option": 7.22.15 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3) - "@babel/plugin-syntax-async-generators": 7.8.4(@babel/core@7.23.3) - "@babel/plugin-syntax-class-properties": 7.12.13(@babel/core@7.23.3) - "@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.23.3) - "@babel/plugin-syntax-dynamic-import": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-export-namespace-from": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-import-assertions": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-syntax-import-attributes": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-syntax-import-meta": 7.10.4(@babel/core@7.23.3) - "@babel/plugin-syntax-json-strings": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-logical-assignment-operators": 7.10.4(@babel/core@7.23.3) - "@babel/plugin-syntax-nullish-coalescing-operator": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-numeric-separator": 7.10.4(@babel/core@7.23.3) - "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-optional-catch-binding": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.23.3) - "@babel/plugin-syntax-top-level-await": 7.14.5(@babel/core@7.23.3) - "@babel/plugin-syntax-unicode-sets-regex": 7.18.6(@babel/core@7.23.3) - "@babel/plugin-transform-arrow-functions": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-async-generator-functions": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-async-to-generator": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-block-scoped-functions": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-block-scoping": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-class-properties": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-class-static-block": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-classes": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-computed-properties": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-destructuring": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-dotall-regex": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-duplicate-keys": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-dynamic-import": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-exponentiation-operator": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-export-namespace-from": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-for-of": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-function-name": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-json-strings": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-logical-assignment-operators": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-member-expression-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-modules-amd": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-modules-systemjs": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-modules-umd": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-named-capturing-groups-regex": 7.22.5(@babel/core@7.23.3) - "@babel/plugin-transform-new-target": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-nullish-coalescing-operator": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-numeric-separator": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-object-rest-spread": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-object-super": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-optional-catch-binding": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-optional-chaining": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-parameters": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-private-methods": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-private-property-in-object": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-property-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-regenerator": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-reserved-words": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-shorthand-properties": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-spread": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-sticky-regex": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-template-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-typeof-symbol": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-unicode-escapes": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-unicode-property-regex": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-unicode-regex": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-unicode-sets-regex": 7.23.3(@babel/core@7.23.3) - "@babel/preset-modules": 0.1.6-no-external-plugins(@babel/core@7.23.3) + resolution: {integrity: sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.3) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.3) babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.3) babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.3) babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.3) @@ -1946,1585 +1570,1424 @@ packages: - supports-color /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.3): - resolution: - { - integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, - } + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/types": 7.23.4 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.4 esutils: 2.0.3 /@babel/preset-react@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==, - } - engines: { node: ">=6.9.0" } - peerDependencies: - "@babel/core": ^7.0.0-0 - dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-validator-option": 7.22.15 - "@babel/plugin-transform-react-display-name": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-react-jsx": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-react-jsx-development": 7.22.5(@babel/core@7.23.3) - "@babel/plugin-transform-react-pure-annotations": 7.23.3(@babel/core@7.23.3) + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.3) /@babel/preset-typescript@7.23.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/helper-validator-option": 7.22.15 - "@babel/plugin-syntax-jsx": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-typescript": 7.23.4(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-typescript': 7.23.4(@babel/core@7.23.3) /@babel/regjsgen@0.8.0: - resolution: - { - integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==, - } + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} /@babel/runtime@7.23.4: - resolution: - { - integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} + engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 /@babel/template@7.22.15: - resolution: - { - integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} dependencies: - "@babel/code-frame": 7.23.4 - "@babel/parser": 7.23.4 - "@babel/types": 7.23.4 + '@babel/code-frame': 7.23.4 + '@babel/parser': 7.23.4 + '@babel/types': 7.23.4 /@babel/traverse@7.23.4: - resolution: - { - integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/code-frame": 7.23.4 - "@babel/generator": 7.23.4 - "@babel/helper-environment-visitor": 7.22.20 - "@babel/helper-function-name": 7.23.0 - "@babel/helper-hoist-variables": 7.22.5 - "@babel/helper-split-export-declaration": 7.22.6 - "@babel/parser": 7.23.4 - "@babel/types": 7.23.4 + resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.4 + '@babel/generator': 7.23.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.4 + '@babel/types': 7.23.4 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color /@babel/types@7.23.4: - resolution: - { - integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==, - } - engines: { node: ">=6.9.0" } - dependencies: - "@babel/helper-string-parser": 7.23.4 - "@babel/helper-validator-identifier": 7.22.20 + resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 /@builder.io/partytown@0.7.6: - resolution: - { - integrity: sha512-snXIGNiZpqjno3XYQN2lbBB+05hsQR/LSttbtIW1c0gmZ7Kh/DIo0YrxlDxCDulAMFPFM8J+4voLwvYepSj3sw==, - } + resolution: {integrity: sha512-snXIGNiZpqjno3XYQN2lbBB+05hsQR/LSttbtIW1c0gmZ7Kh/DIo0YrxlDxCDulAMFPFM8J+4voLwvYepSj3sw==} hasBin: true + /@celo/base@1.5.2: + resolution: {integrity: sha512-KGf6Dl9E6D01vAfkgkjL2sG+zqAjspAogILIpWstljWdG5ifyA75jihrnDEHaMCoQS0KxHvTdP1XYS/GS6BEyQ==} + dev: false + + /@celo/connect@1.5.2(web3@1.3.6): + resolution: {integrity: sha512-IHsvYp1HizIPfPPeIHyvsmJytIf7HNtNWo9CqCbsqfNfmw53q6dFJu2p5X0qz/fUnR5840cUga8cEyuYZTfp+w==} + engines: {node: '>=8.13.0'} + deprecated: Versions less than 5.1 are deprecated and will no longer be able to submit transactions to celo in a future hardfork + peerDependencies: + web3: 1.3.6 + dependencies: + '@celo/utils': 1.5.2 + '@types/debug': 4.1.12 + '@types/utf8': 2.1.6 + bignumber.js: 9.1.2 + debug: 4.3.4(supports-color@8.1.1) + utf8: 3.0.0 + web3: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@celo/contractkit@0.3.8: + resolution: {integrity: sha512-lEXciI3tYnDKNdyazW6etR/ZFm0wrNlX1OxNgzv5D8HCPJcFSUF3Bi4fYtL/Ocx2oHNpK4k3eDZ6aj+ZbkRC+Q==} + engines: {node: '>=8.13.0'} + deprecated: Versions less than 5.1 are deprecated and will no longer be able to submit transactions to celo in a future hardfork + dependencies: + '@celo/utils': 0.1.11 + '@ledgerhq/hw-app-eth': 5.53.0 + '@ledgerhq/hw-transport': 5.51.1 + '@types/debug': 4.1.12 + bignumber.js: 9.1.2 + cross-fetch: 3.0.4 + debug: 4.3.4(supports-color@8.1.1) + eth-lib: 0.2.8 + ethereumjs-util: 5.2.1 + fp-ts: 2.1.1 + io-ts: 2.0.1(fp-ts@2.1.1) + web3: 1.2.4 + web3-core: 1.2.4 + web3-core-helpers: 1.2.4 + web3-eth-abi: 1.2.4 + web3-eth-contract: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@celo/contractkit@1.5.2: + resolution: {integrity: sha512-b0r5TlfYDEscxze1Ai2jyJayiVElA9jvEehMD6aOSNtVhfP8oirjFIIffRe0Wzw1MSDGkw+q1c4m0Yw5sEOlvA==} + engines: {node: '>=8.13.0'} + deprecated: Versions less than 5.1 are deprecated and will no longer be able to submit transactions to celo in a future hardfork + dependencies: + '@celo/base': 1.5.2 + '@celo/connect': 1.5.2(web3@1.3.6) + '@celo/utils': 1.5.2 + '@celo/wallet-local': 1.5.2(web3@1.3.6) + '@types/debug': 4.1.12 + bignumber.js: 9.1.2 + cross-fetch: 3.1.8 + debug: 4.3.4(supports-color@8.1.1) + fp-ts: 2.1.1 + io-ts: 2.0.1(fp-ts@2.1.1) + semver: 7.5.4 + web3: 1.3.6 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@celo/utils@0.1.11: + resolution: {integrity: sha512-i3oK1guBxH89AEBaVA1d5CHnANehL36gPIcSpPBWiYZrKTGGVvbwNmVoaDwaKFXih0N22vXQAf2Rul8w5VzC3w==} + dependencies: + '@umpirsky/country-list': github.com/umpirsky/country-list/05fda51 + bigi: 1.4.2 + bignumber.js: 9.1.2 + bip32: 2.0.5 + bip39: 3.0.2 + bls12377js: github.com/celo-org/bls12377js/400bcaeec9e7620b040bfad833268f5289699cac + bn.js: 4.11.8 + buffer-reverse: 1.0.1 + country-data: 0.0.31 + crypto-js: 3.3.0 + elliptic: 6.5.4 + ethereumjs-util: 5.2.1 + futoin-hkdf: 1.5.3 + google-libphonenumber: 3.2.34 + keccak256: 1.0.6 + lodash: 4.17.21 + numeral: 2.0.6 + web3-utils: 1.2.4 + dev: false + + /@celo/utils@1.5.2: + resolution: {integrity: sha512-JyKjuVMbdkyFOb1TpQw6zqamPQWYg7I9hOnva3MeIcQ3ZrJIaNHx0/I+JXFjuu3YYBc1mG8nXp2uPJJTGrwzCQ==} + dependencies: + '@celo/base': 1.5.2 + '@types/country-data': 0.0.0 + '@types/elliptic': 6.4.18 + '@types/ethereumjs-util': 5.2.0 + '@types/google-libphonenumber': 7.4.30 + '@types/lodash': 4.14.202 + '@types/node': 10.17.60 + '@types/randombytes': 2.0.3 + bigi: 1.4.2 + bignumber.js: 9.1.2 + bip32: 2.0.5 + bip39: github.com/bitcoinjs/bip39/d8ea080a18b40f301d4e2219a2991cd2417e83c2 + bls12377js: github.com/celo-org/bls12377js/cb38a4cfb643c778619d79b20ca3e5283a2122a6 + bn.js: 4.11.8 + buffer-reverse: 1.0.1 + country-data: 0.0.31 + crypto-js: 3.3.0 + elliptic: 6.5.4 + ethereumjs-util: 5.2.1 + fp-ts: 2.1.1 + google-libphonenumber: 3.2.34 + io-ts: 2.0.1(fp-ts@2.1.1) + keccak256: 1.0.6 + lodash: 4.17.21 + numeral: 2.0.6 + web3-eth-abi: 1.3.6 + web3-utils: 1.3.6 + dev: false + + /@celo/wallet-base@1.5.2(web3@1.3.6): + resolution: {integrity: sha512-NYJu7OtSRFpGcvSMl2Wc8zN32S6oTkAzKqhH7rXisQ0I2q4yNwCzoquzPVYB0G2UVUFKuuxgsA5V+Zda/LQCyw==} + engines: {node: '>=8.13.0'} + deprecated: Versions less than 5.1 are deprecated and will no longer be able to submit transactions to celo in a future hardfork + dependencies: + '@celo/base': 1.5.2 + '@celo/connect': 1.5.2(web3@1.3.6) + '@celo/utils': 1.5.2 + '@types/debug': 4.1.12 + '@types/ethereumjs-util': 5.2.0 + bignumber.js: 9.1.2 + debug: 4.3.4(supports-color@8.1.1) + eth-lib: 0.2.8 + ethereumjs-util: 5.2.1 + transitivePeerDependencies: + - supports-color + - web3 + dev: false + + /@celo/wallet-local@1.5.2(web3@1.3.6): + resolution: {integrity: sha512-Aas4SwqQc8ap0OFAOZc+jBR4cXr20V9AReHNEI8Y93R3g1+RlSEJ1Zmsu4vN+Rriz58YqgMnr+pihorw8QydFQ==} + engines: {node: '>=8.13.0'} + dependencies: + '@celo/connect': 1.5.2(web3@1.3.6) + '@celo/utils': 1.5.2 + '@celo/wallet-base': 1.5.2(web3@1.3.6) + '@types/ethereumjs-util': 5.2.0 + eth-lib: 0.2.8 + ethereumjs-util: 5.2.1 + transitivePeerDependencies: + - supports-color + - web3 + dev: false + /@chainsafe/as-sha256@0.3.1: - resolution: - { - integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==, - } + resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} dev: true /@chainsafe/persistent-merkle-tree@0.4.2: - resolution: - { - integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==, - } + resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} dependencies: - "@chainsafe/as-sha256": 0.3.1 + '@chainsafe/as-sha256': 0.3.1 dev: true /@chainsafe/persistent-merkle-tree@0.5.0: - resolution: - { - integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==, - } + resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} dependencies: - "@chainsafe/as-sha256": 0.3.1 + '@chainsafe/as-sha256': 0.3.1 dev: true /@chainsafe/ssz@0.10.2: - resolution: - { - integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==, - } + resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} dependencies: - "@chainsafe/as-sha256": 0.3.1 - "@chainsafe/persistent-merkle-tree": 0.5.0 + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.5.0 dev: true /@chainsafe/ssz@0.9.4: - resolution: - { - integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==, - } + resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} dependencies: - "@chainsafe/as-sha256": 0.3.1 - "@chainsafe/persistent-merkle-tree": 0.4.2 + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.4.2 case: 1.6.3 dev: true /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0): - resolution: - { - integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - framer-motion: ">=4.0.0" - react: ">=18" - dependencies: - "@chakra-ui/descendant": 3.1.0(react@18.2.0) - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/transition": 2.1.0(framer-motion@10.16.5)(react@18.2.0) + resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + dependencies: + '@chakra-ui/descendant': 3.1.0(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/spinner": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/anatomy@2.2.2: - resolution: - { - integrity: sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==, - } + resolution: {integrity: sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==} dev: false /@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/image": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/breakpoint-utils@2.0.8: - resolution: - { - integrity: sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==, - } + resolution: {integrity: sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==} dependencies: - "@chakra-ui/shared-utils": 2.0.5 + '@chakra-ui/shared-utils': 2.0.5 dev: false /@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/spinner": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==, - } + resolution: {integrity: sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/visually-hidden": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@zag-js/focus-visible": 0.16.0 + resolution: {integrity: sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@zag-js/focus-visible': 0.16.0 react: 18.2.0 dev: false /@chakra-ui/clickable@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==, - } + resolution: {integrity: sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 react: 18.2.0 dev: false /@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==, - } + resolution: {integrity: sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/color-mode@2.2.0(react@18.2.0): - resolution: - { - integrity: sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==, - } + resolution: {integrity: sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==, - } + resolution: {integrity: sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/counter@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==, - } + resolution: {integrity: sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/number-utils": 2.0.7 - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 + '@chakra-ui/number-utils': 2.0.7 + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 react: 18.2.0 dev: false /@chakra-ui/css-reset@2.3.0(@emotion/react@11.11.1)(react@18.2.0): - resolution: - { - integrity: sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==, - } + resolution: {integrity: sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==} peerDependencies: - "@emotion/react": ">=10.0.35" - react: ">=18" + '@emotion/react': '>=10.0.35' + react: '>=18' dependencies: - "@emotion/react": 11.11.1(@types/react@18.2.38)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/descendant@3.1.0(react@18.2.0): - resolution: - { - integrity: sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==, - } + resolution: {integrity: sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/dom-utils@2.1.0: - resolution: - { - integrity: sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==, - } + resolution: {integrity: sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==} dev: false /@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-focus-on-pointer-down": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/event-utils@2.0.8: - resolution: - { - integrity: sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==, - } + resolution: {integrity: sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==} dev: false /@chakra-ui/focus-lock@2.1.0(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==, - } + resolution: {integrity: sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/dom-utils": 2.1.0 + '@chakra-ui/dom-utils': 2.1.0 react: 18.2.0 react-focus-lock: 2.9.6(@types/react@18.2.38)(react@18.2.0) transitivePeerDependencies: - - "@types/react" + - '@types/react' dev: false /@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/hooks@2.2.1(react@18.2.0): - resolution: - { - integrity: sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==, - } + resolution: {integrity: sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-utils": 2.0.12(react@18.2.0) - "@chakra-ui/utils": 2.0.15 + '@chakra-ui/react-utils': 2.0.12(react@18.2.0) + '@chakra-ui/utils': 2.0.15 compute-scroll-into-view: 3.0.3 copy-to-clipboard: 3.3.3 react: 18.2.0 dev: false /@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==, - } + resolution: {integrity: sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==, - } + resolution: {integrity: sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/object-utils": 2.1.0 - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/object-utils': 2.1.0 + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/breakpoint-utils": 2.0.8 - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/object-utils": 2.1.0 - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/breakpoint-utils': 2.0.8 + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/object-utils': 2.1.0 + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/lazy-utils@2.0.5: - resolution: - { - integrity: sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==, - } + resolution: {integrity: sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==} dev: false /@chakra-ui/live-region@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==, - } + resolution: {integrity: sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/breakpoint-utils": 2.0.8 - "@chakra-ui/react-env": 3.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/breakpoint-utils': 2.0.8 + '@chakra-ui/react-env': 3.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0): - resolution: - { - integrity: sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - framer-motion: ">=4.0.0" - react: ">=18" - dependencies: - "@chakra-ui/clickable": 2.1.0(react@18.2.0) - "@chakra-ui/descendant": 3.1.0(react@18.2.0) - "@chakra-ui/lazy-utils": 2.0.5 - "@chakra-ui/popper": 3.1.0(react@18.2.0) - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-animation-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-disclosure": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-focus-effect": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-outside-click": 2.2.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/transition": 2.1.0(framer-motion@10.16.5)(react@18.2.0) + resolution: {integrity: sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + dependencies: + '@chakra-ui/clickable': 2.1.0(react@18.2.0) + '@chakra-ui/descendant': 3.1.0(react@18.2.0) + '@chakra-ui/lazy-utils': 2.0.5 + '@chakra-ui/popper': 3.1.0(react@18.2.0) + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-animation-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-disclosure': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-focus-effect': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-outside-click': 2.2.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - framer-motion: ">=4.0.0" - react: ">=18" - react-dom: ">=18" - dependencies: - "@chakra-ui/close-button": 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/focus-lock": 2.1.0(@types/react@18.2.38)(react@18.2.0) - "@chakra-ui/portal": 2.1.0(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/transition": 2.1.0(framer-motion@10.16.5)(react@18.2.0) + resolution: {integrity: sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + dependencies: + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.38)(react@18.2.0) + '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0) aria-hidden: 1.2.3 framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.7(@types/react@18.2.38)(react@18.2.0) transitivePeerDependencies: - - "@types/react" + - '@types/react' dev: false /@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/counter": 2.1.0(react@18.2.0) - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-event-listener": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-interval": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/counter': 2.1.0(react@18.2.0) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-interval': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/number-utils@2.0.7: - resolution: - { - integrity: sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==, - } + resolution: {integrity: sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==} dev: false /@chakra-ui/object-utils@2.1.0: - resolution: - { - integrity: sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==, - } + resolution: {integrity: sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==} dev: false /@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/descendant": 3.1.0(react@18.2.0) - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/descendant': 3.1.0(react@18.2.0) + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0): - resolution: - { - integrity: sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - framer-motion: ">=4.0.0" - react: ">=18" - dependencies: - "@chakra-ui/close-button": 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/lazy-utils": 2.0.5 - "@chakra-ui/popper": 3.1.0(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-animation-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-disclosure": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-focus-effect": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-focus-on-pointer-down": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + dependencies: + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/lazy-utils': 2.0.5 + '@chakra-ui/popper': 3.1.0(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-animation-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-disclosure': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-focus-effect': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/popper@3.1.0(react@18.2.0): - resolution: - { - integrity: sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==, - } + resolution: {integrity: sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@popperjs/core": 2.11.8 + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@popperjs/core': 2.11.8 react: 18.2.0 dev: false /@chakra-ui/portal@2.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==, - } + resolution: {integrity: sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==} peerDependencies: - react: ">=18" - react-dom: ">=18" + react: '>=18' + react-dom: '>=18' dependencies: - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==, - } + resolution: {integrity: sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/provider@2.4.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==, - } - peerDependencies: - "@emotion/react": ^11.0.0 - "@emotion/styled": ^11.0.0 - react: ">=18" - react-dom: ">=18" - dependencies: - "@chakra-ui/css-reset": 2.3.0(@emotion/react@11.11.1)(react@18.2.0) - "@chakra-ui/portal": 2.1.0(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/react-env": 3.1.0(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/utils": 2.0.15 - "@emotion/react": 11.11.1(@types/react@18.2.38)(react@18.2.0) - "@emotion/styled": 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) + resolution: {integrity: sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==} + peerDependencies: + '@emotion/react': ^11.0.0 + '@emotion/styled': ^11.0.0 + react: '>=18' + react-dom: '>=18' + dependencies: + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.1)(react@18.2.0) + '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/react-env': 3.1.0(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/utils': 2.0.15 + '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@zag-js/focus-visible": 0.16.0 + resolution: {integrity: sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@zag-js/focus-visible': 0.16.0 react: 18.2.0 dev: false /@chakra-ui/react-children-utils@2.0.6(react@18.2.0): - resolution: - { - integrity: sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==, - } + resolution: {integrity: sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-context@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==, - } + resolution: {integrity: sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-env@3.1.0(react@18.2.0): - resolution: - { - integrity: sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==, - } + resolution: {integrity: sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-types@2.0.7(react@18.2.0): - resolution: - { - integrity: sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==, - } + resolution: {integrity: sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-use-animation-state@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==, - } + resolution: {integrity: sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/dom-utils": 2.1.0 - "@chakra-ui/react-use-event-listener": 2.1.0(react@18.2.0) + '@chakra-ui/dom-utils': 2.1.0 + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-callback-ref@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==, - } + resolution: {integrity: sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-use-controllable-state@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==, - } + resolution: {integrity: sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-disclosure@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==, - } + resolution: {integrity: sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-event-listener@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==, - } + resolution: {integrity: sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-focus-effect@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==, - } + resolution: {integrity: sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/dom-utils": 2.1.0 - "@chakra-ui/react-use-event-listener": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) + '@chakra-ui/dom-utils': 2.1.0 + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-focus-on-pointer-down@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==, - } + resolution: {integrity: sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-event-listener": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-interval@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==, - } + resolution: {integrity: sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-latest-ref@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==, - } + resolution: {integrity: sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-use-merge-refs@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==, - } + resolution: {integrity: sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-use-outside-click@2.2.0(react@18.2.0): - resolution: - { - integrity: sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==, - } + resolution: {integrity: sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-pan-event@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==, - } + resolution: {integrity: sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/event-utils": 2.0.8 - "@chakra-ui/react-use-latest-ref": 2.1.0(react@18.2.0) + '@chakra-ui/event-utils': 2.0.8 + '@chakra-ui/react-use-latest-ref': 2.1.0(react@18.2.0) framesync: 6.1.2 react: 18.2.0 dev: false /@chakra-ui/react-use-previous@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==, - } + resolution: {integrity: sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-use-safe-layout-effect@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==, - } + resolution: {integrity: sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-use-size@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==, - } + resolution: {integrity: sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@zag-js/element-size": 0.10.5 + '@zag-js/element-size': 0.10.5 react: 18.2.0 dev: false /@chakra-ui/react-use-timeout@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==, - } + resolution: {integrity: sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/react-use-update-effect@2.1.0(react@18.2.0): - resolution: - { - integrity: sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==, - } + resolution: {integrity: sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: react: 18.2.0 dev: false /@chakra-ui/react-utils@2.0.12(react@18.2.0): - resolution: - { - integrity: sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==, - } + resolution: {integrity: sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==} peerDependencies: - react: ">=18" + react: '>=18' dependencies: - "@chakra-ui/utils": 2.0.15 + '@chakra-ui/utils': 2.0.15 react: 18.2.0 dev: false /@chakra-ui/react@2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==, - } - peerDependencies: - "@emotion/react": ^11.0.0 - "@emotion/styled": ^11.0.0 - framer-motion: ">=4.0.0" - react: ">=18" - react-dom: ">=18" - dependencies: - "@chakra-ui/accordion": 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) - "@chakra-ui/alert": 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/avatar": 2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/breadcrumb": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/button": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/card": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/checkbox": 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/close-button": 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/control-box": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/counter": 2.1.0(react@18.2.0) - "@chakra-ui/css-reset": 2.3.0(@emotion/react@11.11.1)(react@18.2.0) - "@chakra-ui/editable": 3.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/focus-lock": 2.1.0(@types/react@18.2.38)(react@18.2.0) - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/hooks": 2.2.1(react@18.2.0) - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/image": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/input": 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/layout": 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/live-region": 2.1.0(react@18.2.0) - "@chakra-ui/media-query": 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/menu": 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) - "@chakra-ui/modal": 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/number-input": 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/pin-input": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/popover": 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) - "@chakra-ui/popper": 3.1.0(react@18.2.0) - "@chakra-ui/portal": 2.1.0(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/progress": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/provider": 2.4.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/radio": 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-env": 3.1.0(react@18.2.0) - "@chakra-ui/select": 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/skeleton": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/skip-nav": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/slider": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/spinner": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/stat": 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/stepper": 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/styled-system": 2.9.2 - "@chakra-ui/switch": 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/table": 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/tabs": 3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/tag": 3.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/textarea": 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/theme": 3.3.1(@chakra-ui/styled-system@2.9.2) - "@chakra-ui/theme-utils": 2.0.21 - "@chakra-ui/toast": 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/tooltip": 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/transition": 2.1.0(framer-motion@10.16.5)(react@18.2.0) - "@chakra-ui/utils": 2.0.15 - "@chakra-ui/visually-hidden": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@emotion/react": 11.11.1(@types/react@18.2.38)(react@18.2.0) - "@emotion/styled": 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) + resolution: {integrity: sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==} + peerDependencies: + '@emotion/react': ^11.0.0 + '@emotion/styled': ^11.0.0 + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + dependencies: + '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/counter': 2.1.0(react@18.2.0) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.1)(react@18.2.0) + '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.38)(react@18.2.0) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/hooks': 2.2.1(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/live-region': 2.1.0(react@18.2.0) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) + '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) + '@chakra-ui/popper': 3.1.0(react@18.2.0) + '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/provider': 2.4.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-env': 3.1.0(react@18.2.0) + '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) + '@chakra-ui/theme-utils': 2.0.21 + '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0) + '@chakra-ui/utils': 2.0.15 + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - "@types/react" + - '@types/react' dev: false /@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==, - } + resolution: {integrity: sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/shared-utils@2.0.5: - resolution: - { - integrity: sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==, - } + resolution: {integrity: sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==} dev: false /@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/media-query": 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-use-previous": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-use-previous': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==, - } + resolution: {integrity: sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/number-utils": 2.0.7 - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-callback-ref": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-latest-ref": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-pan-event": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-size": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/number-utils': 2.0.7 + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-latest-ref': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-pan-event': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-size': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==, - } + resolution: {integrity: sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/styled-system@2.9.2: - resolution: - { - integrity: sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==, - } + resolution: {integrity: sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==} dependencies: - "@chakra-ui/shared-utils": 2.0.5 + '@chakra-ui/shared-utils': 2.0.5 csstype: 3.1.2 lodash.mergewith: 4.6.2 dev: false /@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0): - resolution: - { - integrity: sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - framer-motion: ">=4.0.0" - react: ">=18" - dependencies: - "@chakra-ui/checkbox": 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + dependencies: + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/system@2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0): - resolution: - { - integrity: sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==, - } - peerDependencies: - "@emotion/react": ^11.0.0 - "@emotion/styled": ^11.0.0 - react: ">=18" - dependencies: - "@chakra-ui/color-mode": 2.2.0(react@18.2.0) - "@chakra-ui/object-utils": 2.1.0 - "@chakra-ui/react-utils": 2.0.12(react@18.2.0) - "@chakra-ui/styled-system": 2.9.2 - "@chakra-ui/theme-utils": 2.0.21 - "@chakra-ui/utils": 2.0.15 - "@emotion/react": 11.11.1(@types/react@18.2.38)(react@18.2.0) - "@emotion/styled": 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) + resolution: {integrity: sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==} + peerDependencies: + '@emotion/react': ^11.0.0 + '@emotion/styled': ^11.0.0 + react: '>=18' + dependencies: + '@chakra-ui/color-mode': 2.2.0(react@18.2.0) + '@chakra-ui/object-utils': 2.1.0 + '@chakra-ui/react-utils': 2.0.12(react@18.2.0) + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/theme-utils': 2.0.21 + '@chakra-ui/utils': 2.0.15 + '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0) react: 18.2.0 react-fast-compare: 3.2.2 dev: false /@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==, - } + resolution: {integrity: sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" - dependencies: - "@chakra-ui/clickable": 2.1.0(react@18.2.0) - "@chakra-ui/descendant": 3.1.0(react@18.2.0) - "@chakra-ui/lazy-utils": 2.0.5 - "@chakra-ui/react-children-utils": 2.0.6(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-controllable-state": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-safe-layout-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + dependencies: + '@chakra-ui/clickable': 2.1.0(react@18.2.0) + '@chakra-ui/descendant': 3.1.0(react@18.2.0) + '@chakra-ui/lazy-utils': 2.0.5 + '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==, - } + resolution: {integrity: sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/icon": 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==, - } + resolution: {integrity: sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/form-control": 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2): - resolution: - { - integrity: sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==, - } + resolution: {integrity: sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==} peerDependencies: - "@chakra-ui/styled-system": ">=2.0.0" + '@chakra-ui/styled-system': '>=2.0.0' dependencies: - "@chakra-ui/anatomy": 2.2.2 - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/styled-system": 2.9.2 + '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 color2k: 2.0.2 dev: false /@chakra-ui/theme-utils@2.0.21: - resolution: - { - integrity: sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==, - } - dependencies: - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/styled-system": 2.9.2 - "@chakra-ui/theme": 3.3.1(@chakra-ui/styled-system@2.9.2) + resolution: {integrity: sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==} + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) lodash.mergewith: 4.6.2 dev: false /@chakra-ui/theme@3.3.1(@chakra-ui/styled-system@2.9.2): - resolution: - { - integrity: sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==, - } + resolution: {integrity: sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==} peerDependencies: - "@chakra-ui/styled-system": ">=2.8.0" + '@chakra-ui/styled-system': '>=2.8.0' dependencies: - "@chakra-ui/anatomy": 2.2.2 - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/styled-system": 2.9.2 - "@chakra-ui/theme-tools": 2.1.2(@chakra-ui/styled-system@2.9.2) + '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2) dev: false /@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==, - } - peerDependencies: - "@chakra-ui/system": 2.6.2 - framer-motion: ">=4.0.0" - react: ">=18" - react-dom: ">=18" - dependencies: - "@chakra-ui/alert": 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/close-button": 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - "@chakra-ui/portal": 2.1.0(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/react-context": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-timeout": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-update-effect": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/styled-system": 2.9.2 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) - "@chakra-ui/theme": 3.3.1(@chakra-ui/styled-system@2.9.2) + resolution: {integrity: sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==} + peerDependencies: + '@chakra-ui/system': 2.6.2 + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + dependencies: + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/react-context': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-timeout': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==, - } - peerDependencies: - "@chakra-ui/system": ">=2.0.0" - framer-motion: ">=4.0.0" - react: ">=18" - react-dom: ">=18" - dependencies: - "@chakra-ui/dom-utils": 2.1.0 - "@chakra-ui/popper": 3.1.0(react@18.2.0) - "@chakra-ui/portal": 2.1.0(react-dom@18.2.0)(react@18.2.0) - "@chakra-ui/react-types": 2.0.7(react@18.2.0) - "@chakra-ui/react-use-disclosure": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-event-listener": 2.1.0(react@18.2.0) - "@chakra-ui/react-use-merge-refs": 2.1.0(react@18.2.0) - "@chakra-ui/shared-utils": 2.0.5 - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + resolution: {integrity: sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + dependencies: + '@chakra-ui/dom-utils': 2.1.0 + '@chakra-ui/popper': 3.1.0(react@18.2.0) + '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/react-types': 2.0.7(react@18.2.0) + '@chakra-ui/react-use-disclosure': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.2.0) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@chakra-ui/transition@2.1.0(framer-motion@10.16.5)(react@18.2.0): - resolution: - { - integrity: sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==, - } + resolution: {integrity: sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==} peerDependencies: - framer-motion: ">=4.0.0" - react: ">=18" + framer-motion: '>=4.0.0' + react: '>=18' dependencies: - "@chakra-ui/shared-utils": 2.0.5 + '@chakra-ui/shared-utils': 2.0.5 framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false /@chakra-ui/utils@2.0.15: - resolution: - { - integrity: sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==, - } + resolution: {integrity: sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==} dependencies: - "@types/lodash.mergewith": 4.6.7 + '@types/lodash.mergewith': 4.6.7 css-box-model: 1.2.1 framesync: 6.1.2 lodash.mergewith: 4.6.2 dev: false /@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: - { - integrity: sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==, - } + resolution: {integrity: sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==} peerDependencies: - "@chakra-ui/system": ">=2.0.0" - react: ">=18" + '@chakra-ui/system': '>=2.0.0' + react: '>=18' dependencies: - "@chakra-ui/system": 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false /@colors/colors@1.5.0: - resolution: - { - integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, - } - engines: { node: ">=0.1.90" } + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} requiresBuild: true dev: true optional: true /@cspotcode/source-map-support@0.8.1: - resolution: - { - integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} dependencies: - "@jridgewell/trace-mapping": 0.3.9 + '@jridgewell/trace-mapping': 0.3.9 dev: true /@effect/data@0.17.1: - resolution: - { - integrity: sha512-QCYkLE5Y5Dm5Yax5R3GmW4ZIgTx7W+kSZ7yq5eqQ/mFWa8i4yxbLuu8cudqzdeZtRtTGZKlhDxfFfgVtMywXJg==, - } + resolution: {integrity: sha512-QCYkLE5Y5Dm5Yax5R3GmW4ZIgTx7W+kSZ7yq5eqQ/mFWa8i4yxbLuu8cudqzdeZtRtTGZKlhDxfFfgVtMywXJg==} dev: true /@effect/io@0.38.0(@effect/data@0.17.1): - resolution: - { - integrity: sha512-qlVC9ASxNC+L2NKX5qOV9672CE5wWizfwBSFaX2XLI7CC118WRvohCTIPQ52n50Bj5TmR20+na+U9C7e4VkqzA==, - } + resolution: {integrity: sha512-qlVC9ASxNC+L2NKX5qOV9672CE5wWizfwBSFaX2XLI7CC118WRvohCTIPQ52n50Bj5TmR20+na+U9C7e4VkqzA==} peerDependencies: - "@effect/data": ^0.17.1 + '@effect/data': ^0.17.1 dependencies: - "@effect/data": 0.17.1 + '@effect/data': 0.17.1 dev: true /@effect/match@0.32.0(@effect/data@0.17.1)(@effect/schema@0.33.1): - resolution: - { - integrity: sha512-04QfnIgCcMnnNbGxTv2xa9/7q1c5kgpsBodqTUZ8eX86A/EdE8Czz+JkVarG00/xE+nYhQLXOXCN9Zj+dtqVkQ==, - } + resolution: {integrity: sha512-04QfnIgCcMnnNbGxTv2xa9/7q1c5kgpsBodqTUZ8eX86A/EdE8Czz+JkVarG00/xE+nYhQLXOXCN9Zj+dtqVkQ==} peerDependencies: - "@effect/data": ^0.17.1 - "@effect/schema": ^0.33.0 + '@effect/data': ^0.17.1 + '@effect/schema': ^0.33.0 dependencies: - "@effect/data": 0.17.1 - "@effect/schema": 0.33.1(@effect/data@0.17.1)(@effect/io@0.38.0) + '@effect/data': 0.17.1 + '@effect/schema': 0.33.1(@effect/data@0.17.1)(@effect/io@0.38.0) dev: true /@effect/schema@0.33.1(@effect/data@0.17.1)(@effect/io@0.38.0): - resolution: - { - integrity: sha512-h+fQInui4q3we8fegAygL0Cs5B2DD/+oC3JWthOh8eLcbKkbYM9smCD/PsHuyQ+BaeWiSP5JdvREGlP4Sg+Ysw==, - } + resolution: {integrity: sha512-h+fQInui4q3we8fegAygL0Cs5B2DD/+oC3JWthOh8eLcbKkbYM9smCD/PsHuyQ+BaeWiSP5JdvREGlP4Sg+Ysw==} peerDependencies: - "@effect/data": ^0.17.1 - "@effect/io": ^0.38.0 + '@effect/data': ^0.17.1 + '@effect/io': ^0.38.0 dependencies: - "@effect/data": 0.17.1 - "@effect/io": 0.38.0(@effect/data@0.17.1) + '@effect/data': 0.17.1 + '@effect/io': 0.38.0(@effect/data@0.17.1) fast-check: 3.14.0 dev: true /@emotion/babel-plugin@11.11.0: - resolution: - { - integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==, - } - dependencies: - "@babel/helper-module-imports": 7.22.15 - "@babel/runtime": 7.23.4 - "@emotion/hash": 0.9.1 - "@emotion/memoize": 0.8.1 - "@emotion/serialize": 1.1.2 + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.4 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.2 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -3534,167 +2997,122 @@ packages: dev: false /@emotion/cache@11.11.0: - resolution: - { - integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==, - } - dependencies: - "@emotion/memoize": 0.8.1 - "@emotion/sheet": 1.2.2 - "@emotion/utils": 1.2.1 - "@emotion/weak-memoize": 0.3.1 + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 stylis: 4.2.0 dev: false /@emotion/hash@0.9.1: - resolution: - { - integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==, - } + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} dev: false /@emotion/is-prop-valid@0.8.8: - resolution: - { - integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==, - } + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} requiresBuild: true dependencies: - "@emotion/memoize": 0.7.4 + '@emotion/memoize': 0.7.4 dev: false optional: true /@emotion/is-prop-valid@1.2.1: - resolution: - { - integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==, - } + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} dependencies: - "@emotion/memoize": 0.8.1 + '@emotion/memoize': 0.8.1 dev: false /@emotion/memoize@0.7.4: - resolution: - { - integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==, - } + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} requiresBuild: true dev: false optional: true /@emotion/memoize@0.8.1: - resolution: - { - integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==, - } + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false /@emotion/react@11.11.1(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==, - } + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: - "@types/react": "*" - react: ">=16.8.0" + '@types/react': '*' + react: '>=16.8.0' peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@babel/runtime": 7.23.4 - "@emotion/babel-plugin": 11.11.0 - "@emotion/cache": 11.11.0 - "@emotion/serialize": 1.1.2 - "@emotion/use-insertion-effect-with-fallbacks": 1.0.1(react@18.2.0) - "@emotion/utils": 1.2.1 - "@emotion/weak-memoize": 0.3.1 - "@types/react": 18.2.38 + '@babel/runtime': 7.23.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.38 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false /@emotion/serialize@1.1.2: - resolution: - { - integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==, - } - dependencies: - "@emotion/hash": 0.9.1 - "@emotion/memoize": 0.8.1 - "@emotion/unitless": 0.8.1 - "@emotion/utils": 1.2.1 + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 csstype: 3.1.2 dev: false /@emotion/sheet@1.2.2: - resolution: - { - integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==, - } + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} dev: false /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==, - } - peerDependencies: - "@emotion/react": ^11.0.0-rc.0 - "@types/react": "*" - react: ">=16.8.0" + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@babel/runtime": 7.23.4 - "@emotion/babel-plugin": 11.11.0 - "@emotion/is-prop-valid": 1.2.1 - "@emotion/react": 11.11.1(@types/react@18.2.38)(react@18.2.0) - "@emotion/serialize": 1.1.2 - "@emotion/use-insertion-effect-with-fallbacks": 1.0.1(react@18.2.0) - "@emotion/utils": 1.2.1 - "@types/react": 18.2.38 + '@babel/runtime': 7.23.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0) + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@types/react': 18.2.38 react: 18.2.0 dev: false /@emotion/unitless@0.8.1: - resolution: - { - integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==, - } + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} dev: false /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): - resolution: - { - integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==, - } + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: - react: ">=16.8.0" + react: '>=16.8.0' dependencies: react: 18.2.0 dev: false /@emotion/utils@1.2.1: - resolution: - { - integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==, - } + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} dev: false /@emotion/weak-memoize@0.3.1: - resolution: - { - integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==, - } + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false /@esbuild/android-arm64@0.19.7: - resolution: - { - integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -3702,11 +3120,8 @@ packages: optional: true /@esbuild/android-arm@0.19.7: - resolution: - { - integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true @@ -3714,11 +3129,8 @@ packages: optional: true /@esbuild/android-x64@0.19.7: - resolution: - { - integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -3726,11 +3138,8 @@ packages: optional: true /@esbuild/darwin-arm64@0.19.7: - resolution: - { - integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -3738,11 +3147,8 @@ packages: optional: true /@esbuild/darwin-x64@0.19.7: - resolution: - { - integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -3750,11 +3156,8 @@ packages: optional: true /@esbuild/freebsd-arm64@0.19.7: - resolution: - { - integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -3762,11 +3165,8 @@ packages: optional: true /@esbuild/freebsd-x64@0.19.7: - resolution: - { - integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -3774,11 +3174,8 @@ packages: optional: true /@esbuild/linux-arm64@0.19.7: - resolution: - { - integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -3786,11 +3183,8 @@ packages: optional: true /@esbuild/linux-arm@0.19.7: - resolution: - { - integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -3798,11 +3192,8 @@ packages: optional: true /@esbuild/linux-ia32@0.19.7: - resolution: - { - integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -3810,11 +3201,8 @@ packages: optional: true /@esbuild/linux-loong64@0.19.7: - resolution: - { - integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -3822,11 +3210,8 @@ packages: optional: true /@esbuild/linux-mips64el@0.19.7: - resolution: - { - integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -3834,11 +3219,8 @@ packages: optional: true /@esbuild/linux-ppc64@0.19.7: - resolution: - { - integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -3846,11 +3228,8 @@ packages: optional: true /@esbuild/linux-riscv64@0.19.7: - resolution: - { - integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -3858,11 +3237,8 @@ packages: optional: true /@esbuild/linux-s390x@0.19.7: - resolution: - { - integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -3870,11 +3246,8 @@ packages: optional: true /@esbuild/linux-x64@0.19.7: - resolution: - { - integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -3882,11 +3255,8 @@ packages: optional: true /@esbuild/netbsd-x64@0.19.7: - resolution: - { - integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -3894,11 +3264,8 @@ packages: optional: true /@esbuild/openbsd-x64@0.19.7: - resolution: - { - integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -3906,11 +3273,8 @@ packages: optional: true /@esbuild/sunos-x64@0.19.7: - resolution: - { - integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -3918,11 +3282,8 @@ packages: optional: true /@esbuild/win32-arm64@0.19.7: - resolution: - { - integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -3930,11 +3291,8 @@ packages: optional: true /@esbuild/win32-ia32@0.19.7: - resolution: - { - integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -3942,11 +3300,8 @@ packages: optional: true /@esbuild/win32-x64@0.19.7: - resolution: - { - integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -3954,11 +3309,8 @@ packages: optional: true /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0): - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: @@ -3966,11 +3318,8 @@ packages: eslint-visitor-keys: 3.4.3 /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: @@ -3978,18 +3327,12 @@ packages: eslint-visitor-keys: 3.4.3 /@eslint-community/regexpp@4.10.0: - resolution: - { - integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@0.4.3: - resolution: - { - integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) @@ -4004,11 +3347,8 @@ packages: - supports-color /@eslint/eslintrc@2.1.3: - resolution: - { - integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) @@ -4023,465 +3363,341 @@ packages: - supports-color /@eslint/js@8.54.0: - resolution: - { - integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /@ethereumjs/rlp@4.0.1: - resolution: - { - integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} hasBin: true dev: true /@ethereumjs/util@8.1.0: - resolution: - { - integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} dependencies: - "@ethereumjs/rlp": 4.0.1 + '@ethereumjs/rlp': 4.0.1 ethereum-cryptography: 2.1.2 micro-ftch: 0.3.1 dev: true + /@ethersproject/abi@5.0.7: + resolution: {integrity: sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + /@ethersproject/abi@5.7.0: - resolution: - { - integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==, - } - dependencies: - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 /@ethersproject/abstract-provider@5.7.0: - resolution: - { - integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==, - } + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} dependencies: - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/networks": 5.7.1 - "@ethersproject/properties": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/web": 5.7.1 - dev: true + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 /@ethersproject/abstract-signer@5.7.0: - resolution: - { - integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==, - } + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} dependencies: - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - dev: true + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 /@ethersproject/address@5.7.0: - resolution: - { - integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==, - } + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} dependencies: - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/rlp": 5.7.0 - dev: true + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 /@ethersproject/base64@5.7.0: - resolution: - { - integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==, - } + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} dependencies: - "@ethersproject/bytes": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 /@ethersproject/basex@5.7.0: - resolution: - { - integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==, - } + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/properties": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 /@ethersproject/bignumber@5.7.0: - resolution: - { - integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==, - } + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 bn.js: 5.2.1 - dev: true /@ethersproject/bytes@5.7.0: - resolution: - { - integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==, - } + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} dependencies: - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/logger': 5.7.0 /@ethersproject/constants@5.7.0: - resolution: - { - integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==, - } + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} dependencies: - "@ethersproject/bignumber": 5.7.0 - dev: true + '@ethersproject/bignumber': 5.7.0 /@ethersproject/contracts@5.7.0: - resolution: - { - integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==, - } - dependencies: - "@ethersproject/abi": 5.7.0 - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/transactions": 5.7.0 - dev: true + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 /@ethersproject/hash@5.7.0: - resolution: - { - integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==, - } - dependencies: - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/base64": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 /@ethersproject/hdnode@5.7.0: - resolution: - { - integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==, - } - dependencies: - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/basex": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/pbkdf2": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/sha2": 5.7.0 - "@ethersproject/signing-key": 5.7.0 - "@ethersproject/strings": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/wordlists": 5.7.0 - dev: true + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 /@ethersproject/json-wallets@5.7.0: - resolution: - { - integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==, - } - dependencies: - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/hdnode": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/pbkdf2": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/random": 5.7.0 - "@ethersproject/strings": 5.7.0 - "@ethersproject/transactions": 5.7.0 + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 aes-js: 3.0.0 scrypt-js: 3.0.1 - dev: true /@ethersproject/keccak256@5.7.0: - resolution: - { - integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==, - } + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} dependencies: - "@ethersproject/bytes": 5.7.0 + '@ethersproject/bytes': 5.7.0 js-sha3: 0.8.0 - dev: true /@ethersproject/logger@5.7.0: - resolution: - { - integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==, - } - dev: true + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} /@ethersproject/networks@5.7.1: - resolution: - { - integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==, - } + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} dependencies: - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/logger': 5.7.0 /@ethersproject/pbkdf2@5.7.0: - resolution: - { - integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==, - } + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/sha2": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 /@ethersproject/properties@5.7.0: - resolution: - { - integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==, - } + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} dependencies: - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/logger': 5.7.0 /@ethersproject/providers@5.7.2: - resolution: - { - integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==, - } - dependencies: - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/base64": 5.7.0 - "@ethersproject/basex": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/networks": 5.7.1 - "@ethersproject/properties": 5.7.0 - "@ethersproject/random": 5.7.0 - "@ethersproject/rlp": 5.7.0 - "@ethersproject/sha2": 5.7.0 - "@ethersproject/strings": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/web": 5.7.1 + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 bech32: 1.1.4 ws: 7.4.6 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true /@ethersproject/random@5.7.0: - resolution: - { - integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==, - } + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 /@ethersproject/rlp@5.7.0: - resolution: - { - integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==, - } + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 /@ethersproject/sha2@5.7.0: - resolution: - { - integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==, - } + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 hash.js: 1.1.7 - dev: true /@ethersproject/signing-key@5.7.0: - resolution: - { - integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==, - } - dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 bn.js: 5.2.1 elliptic: 6.5.4 hash.js: 1.1.7 - dev: true /@ethersproject/solidity@5.7.0: - resolution: - { - integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==, - } + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} dependencies: - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/sha2": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 /@ethersproject/strings@5.7.0: - resolution: - { - integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==, - } + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 /@ethersproject/transactions@5.7.0: - resolution: - { - integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==, - } - dependencies: - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/rlp": 5.7.0 - "@ethersproject/signing-key": 5.7.0 - dev: true + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 /@ethersproject/units@5.7.0: - resolution: - { - integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==, - } + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} dependencies: - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/logger": 5.7.0 - dev: true + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 /@ethersproject/wallet@5.7.0: - resolution: - { - integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==, - } - dependencies: - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/hdnode": 5.7.0 - "@ethersproject/json-wallets": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/random": 5.7.0 - "@ethersproject/signing-key": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/wordlists": 5.7.0 - dev: true + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 /@ethersproject/web@5.7.1: - resolution: - { - integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==, - } + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} dependencies: - "@ethersproject/base64": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 /@ethersproject/wordlists@5.7.0: - resolution: - { - integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==, - } + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 /@fastify/busboy@2.1.0: - resolution: - { - integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + engines: {node: '>=14'} dev: true /@gatsbyjs/parcel-namer-relative-to-cwd@2.12.1(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-DYtRRu0yhs/T3eWtOsuJK8qG5+TPfMnbB3q20hYOxsm6BnOuIUYIHNmZNlP7VcrBTCCZJUW/6xhq81mA6GvHWA==, - } - engines: { node: ">=18.0.0", parcel: 2.x } - dependencies: - "@babel/runtime": 7.23.4 - "@parcel/namer-default": 2.8.3(@parcel/core@2.8.3) - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-DYtRRu0yhs/T3eWtOsuJK8qG5+TPfMnbB3q20hYOxsm6BnOuIUYIHNmZNlP7VcrBTCCZJUW/6xhq81mA6GvHWA==} + engines: {node: '>=18.0.0', parcel: 2.x} + dependencies: + '@babel/runtime': 7.23.4 + '@parcel/namer-default': 2.8.3(@parcel/core@2.8.3) + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) gatsby-core-utils: 4.12.1 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@gatsbyjs/reach-router@2.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-gmSZniS9/phwgEgpFARMpNg21PkYDZEpfgEzvkgpE/iku4uvXqCrxr86fXbTpI9mkrhKS1SCTYmLGe60VdHcdQ==, - } + resolution: {integrity: sha512-gmSZniS9/phwgEgpFARMpNg21PkYDZEpfgEzvkgpE/iku4uvXqCrxr86fXbTpI9mkrhKS1SCTYmLGe60VdHcdQ==} peerDependencies: react: 18.x react-dom: 18.x @@ -4492,50 +3708,38 @@ packages: react-dom: 18.2.0(react@18.2.0) /@gatsbyjs/webpack-hot-middleware@2.25.3: - resolution: - { - integrity: sha512-ul17OZ8Dlw+ATRbnuU+kwxuAlq9lKbYz/2uBS1FLCdgoPTF1H2heP7HbUbgfMZbfRQNcCG2rMscMnr32ritCDw==, - } + resolution: {integrity: sha512-ul17OZ8Dlw+ATRbnuU+kwxuAlq9lKbYz/2uBS1FLCdgoPTF1H2heP7HbUbgfMZbfRQNcCG2rMscMnr32ritCDw==} dependencies: ansi-html-community: 0.0.8 html-entities: 2.4.0 strip-ansi: 6.0.1 /@graphql-codegen/add@3.2.3(graphql@16.8.1): - resolution: - { - integrity: sha512-sQOnWpMko4JLeykwyjFTxnhqjd/3NOG2OyMuvK76Wnnwh8DRrNf2VEs2kmSvLl7MndMlOj7Kh5U154dVcvhmKQ==, - } + resolution: {integrity: sha512-sQOnWpMko4JLeykwyjFTxnhqjd/3NOG2OyMuvK76Wnnwh8DRrNf2VEs2kmSvLl7MndMlOj7Kh5U154dVcvhmKQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) graphql: 16.8.1 tslib: 2.4.1 /@graphql-codegen/core@2.6.8(graphql@16.8.1): - resolution: - { - integrity: sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ==, - } + resolution: {integrity: sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) - "@graphql-tools/schema": 9.0.19(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.4.1 /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1): - resolution: - { - integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==, - } + resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-tools/utils": 8.13.1(graphql@16.8.1) + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) change-case-all: 1.0.14 common-tags: 1.8.2 graphql: 16.8.1 @@ -4544,14 +3748,11 @@ packages: tslib: 2.4.1 /@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1): - resolution: - { - integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==, - } + resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.8.1 @@ -4560,29 +3761,23 @@ packages: tslib: 2.4.1 /@graphql-codegen/schema-ast@2.6.1(graphql@16.8.1): - resolution: - { - integrity: sha512-5TNW3b1IHJjCh07D2yQNGDQzUpUl2AD+GVe1Dzjqyx/d2Fn0TPMxLsHsKPS4Plg4saO8FK/QO70wLsP7fdbQ1w==, - } + resolution: {integrity: sha512-5TNW3b1IHJjCh07D2yQNGDQzUpUl2AD+GVe1Dzjqyx/d2Fn0TPMxLsHsKPS4Plg4saO8FK/QO70wLsP7fdbQ1w==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.4.1 /@graphql-codegen/typescript-operations@2.5.13(graphql@16.8.1): - resolution: - { - integrity: sha512-3vfR6Rx6iZU0JRt29GBkFlrSNTM6t+MSLF86ChvL4d/Jfo/JYAGuB3zNzPhirHYzJPCvLOAx2gy9ID1ltrpYiw==, - } + resolution: {integrity: sha512-3vfR6Rx6iZU0JRt29GBkFlrSNTM6t+MSLF86ChvL4d/Jfo/JYAGuB3zNzPhirHYzJPCvLOAx2gy9ID1ltrpYiw==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) - "@graphql-codegen/typescript": 2.8.8(graphql@16.8.1) - "@graphql-codegen/visitor-plugin-common": 2.13.8(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/typescript': 2.8.8(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 tslib: 2.4.1 @@ -4591,16 +3786,13 @@ packages: - supports-color /@graphql-codegen/typescript@2.8.8(graphql@16.8.1): - resolution: - { - integrity: sha512-A0oUi3Oy6+DormOlrTC4orxT9OBZkIglhbJBcDmk34jAKKUgesukXRd4yOhmTrnbchpXz2T8IAOFB3FWIaK4Rw==, - } + resolution: {integrity: sha512-A0oUi3Oy6+DormOlrTC4orxT9OBZkIglhbJBcDmk34jAKKUgesukXRd4yOhmTrnbchpXz2T8IAOFB3FWIaK4Rw==} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) - "@graphql-codegen/schema-ast": 2.6.1(graphql@16.8.1) - "@graphql-codegen/visitor-plugin-common": 2.13.8(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/schema-ast': 2.6.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 tslib: 2.4.1 @@ -4609,17 +3801,14 @@ packages: - supports-color /@graphql-codegen/visitor-plugin-common@2.13.8(graphql@16.8.1): - resolution: - { - integrity: sha512-IQWu99YV4wt8hGxIbBQPtqRuaWZhkQRG2IZKbMoSvh0vGeWb3dB0n0hSgKaOOxDY+tljtOf9MTcUYvJslQucMQ==, - } + resolution: {integrity: sha512-IQWu99YV4wt8hGxIbBQPtqRuaWZhkQRG2IZKbMoSvh0vGeWb3dB0n0hSgKaOOxDY+tljtOf9MTcUYvJslQucMQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) - "@graphql-tools/optimize": 1.4.0(graphql@16.8.1) - "@graphql-tools/relay-operation-optimizer": 6.5.18(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/optimize': 1.4.0(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 @@ -4632,73 +3821,58 @@ packages: - supports-color /@graphql-tools/code-file-loader@7.3.23(@babel/core@7.23.3)(graphql@16.8.1): - resolution: - { - integrity: sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==, - } + resolution: {integrity: sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-tools/graphql-tag-pluck": 7.5.2(@babel/core@7.23.3)(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.23.3)(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - - "@babel/core" + - '@babel/core' - supports-color /@graphql-tools/graphql-tag-pluck@7.5.2(@babel/core@7.23.3)(graphql@16.8.1): - resolution: - { - integrity: sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==, - } + resolution: {integrity: sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@babel/parser": 7.23.4 - "@babel/plugin-syntax-import-assertions": 7.23.3(@babel/core@7.23.3) - "@babel/traverse": 7.23.4 - "@babel/types": 7.23.4 - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@babel/parser': 7.23.4 + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.3) + '@babel/traverse': 7.23.4 + '@babel/types': 7.23.4 + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: - - "@babel/core" + - '@babel/core' - supports-color /@graphql-tools/load@7.8.14(graphql@16.8.1): - resolution: - { - integrity: sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==, - } + resolution: {integrity: sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-tools/schema": 9.0.19(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-tools/schema': 9.0.19(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 p-limit: 3.1.0 tslib: 2.6.2 /@graphql-tools/merge@8.4.2(graphql@16.8.1): - resolution: - { - integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==, - } + resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 /@graphql-tools/optimize@1.4.0(graphql@16.8.1): - resolution: - { - integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==, - } + resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -4706,15 +3880,12 @@ packages: tslib: 2.6.2 /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1): - resolution: - { - integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==, - } + resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@ardatan/relay-compiler": 12.0.0(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: @@ -4722,24 +3893,18 @@ packages: - supports-color /@graphql-tools/schema@9.0.19(graphql@16.8.1): - resolution: - { - integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==, - } + resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-tools/merge": 8.4.2(graphql@16.8.1) - "@graphql-tools/utils": 9.2.1(graphql@16.8.1) + '@graphql-tools/merge': 8.4.2(graphql@16.8.1) + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 /@graphql-tools/utils@8.13.1(graphql@16.8.1): - resolution: - { - integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==, - } + resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -4747,365 +3912,431 @@ packages: tslib: 2.6.2 /@graphql-tools/utils@9.2.1(graphql@16.8.1): - resolution: - { - integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==, - } + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - "@graphql-typed-document-node/core": 3.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): - resolution: - { - integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==, - } + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 16.8.1 /@hapi/hoek@9.3.0: - resolution: - { - integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==, - } + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} /@hapi/topo@5.1.0: - resolution: - { - integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==, - } + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} dependencies: - "@hapi/hoek": 9.3.0 + '@hapi/hoek': 9.3.0 /@humanwhocodes/config-array@0.11.13: - resolution: - { - integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==, - } - engines: { node: ">=10.10.0" } + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} dependencies: - "@humanwhocodes/object-schema": 2.0.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color /@humanwhocodes/config-array@0.5.0: - resolution: - { - integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==, - } - engines: { node: ">=10.10.0" } + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} + engines: {node: '>=10.10.0'} dependencies: - "@humanwhocodes/object-schema": 1.2.1 + '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color /@humanwhocodes/module-importer@1.0.1: - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} /@humanwhocodes/object-schema@1.2.1: - resolution: - { - integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, - } + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} /@humanwhocodes/object-schema@2.0.1: - resolution: - { - integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==, - } + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} /@jridgewell/gen-mapping@0.3.3: - resolution: - { - integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - "@jridgewell/set-array": 1.1.2 - "@jridgewell/sourcemap-codec": 1.4.15 - "@jridgewell/trace-mapping": 0.3.20 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/resolve-uri@3.1.1: - resolution: - { - integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} /@jridgewell/set-array@1.1.2: - resolution: - { - integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} /@jridgewell/source-map@0.3.5: - resolution: - { - integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==, - } + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - "@jridgewell/gen-mapping": 0.3.3 - "@jridgewell/trace-mapping": 0.3.20 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/sourcemap-codec@1.4.15: - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, - } + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} /@jridgewell/trace-mapping@0.3.20: - resolution: - { - integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==, - } + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - "@jridgewell/resolve-uri": 3.1.1 - "@jridgewell/sourcemap-codec": 1.4.15 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@jridgewell/trace-mapping@0.3.9: - resolution: - { - integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, - } + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - "@jridgewell/resolve-uri": 3.1.1 - "@jridgewell/sourcemap-codec": 1.4.15 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@keep-network/bitcoin-spv-sol@3.4.0-solc-0.8: - resolution: - { - integrity: sha512-KlpY9BbasyLvYXSS7dsJktgRChu/yjdFLOX8ldGA/pltLicCm/l0F4oqxL8wSws9XD12vq9x0B5qzPygVLB2TQ==, - } + resolution: {integrity: sha512-KlpY9BbasyLvYXSS7dsJktgRChu/yjdFLOX8ldGA/pltLicCm/l0F4oqxL8wSws9XD12vq9x0B5qzPygVLB2TQ==} + dev: false + + /@keep-network/ecdsa@2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-VjgQL5wROhUHrVnu2glkLi0x6wj3Q0AW4f843cr/PgMhQoJ6LG6WQoE6OANbg4WbNIx5Tcf9/9FZ2m1k+IYQXQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@keep-network/random-beacon': 2.1.0-dev.17(@keep-network/keep-core@1.8.1-dev.0) + '@keep-network/sortition-pools': 2.0.0 + '@openzeppelin/contracts': 4.9.5 + '@openzeppelin/contracts-upgradeable': 4.9.5 + '@threshold-network/solidity-contracts': 1.3.0-dev.11(@keep-network/keep-core@1.8.1-dev.0) + transitivePeerDependencies: + - '@keep-network/keep-core' + dev: false + + /@keep-network/hardhat-helpers@0.7.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(@openzeppelin/hardhat-upgrades@2.4.1)(ethers@6.8.1)(hardhat-deploy@0.11.43)(hardhat@2.19.1): + resolution: {integrity: sha512-de6Gy45JukZwGgZqVuR+Zq5PSqnmvKLDJn0/KrKT5tFzGspARUf1WzhDgTTB/D7gTK04sxlrL6WJM3XQ/wZEkw==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.5 + '@nomicfoundation/hardhat-verify': ^2.0.3 + '@openzeppelin/hardhat-upgrades': ^3.0.2 + ethers: ^6.10.0 + hardhat: ^2.19.4 + hardhat-deploy: ^0.11.45 + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.8.1)(hardhat@2.19.1) + '@nomicfoundation/hardhat-verify': 2.0.1(hardhat@2.19.1) + '@openzeppelin/hardhat-upgrades': 2.4.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(ethers@6.8.1)(hardhat@2.19.1) + ethers: 6.8.1 + hardhat: 2.19.1(ts-node@10.9.1)(typescript@5.3.2) + hardhat-deploy: 0.11.43 + dev: true + + /@keep-network/keep-core@1.8.1-dev.0: + resolution: {integrity: sha512-gFXkgN4PYOYCZ14AskL7fZHEFW5mu3BDd+TJKBuKZc1q9CgRMOK+dxpJnSctxmSH1tV+Ln9v9yqlSkfPCoiBHw==} + dependencies: + '@openzeppelin/upgrades': 2.8.0 + openzeppelin-solidity: 2.4.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@keep-network/keep-core@1.8.1-goerli.0: + resolution: {integrity: sha512-h3La/RqbyEZjBBPg8V+pcRFo3UpWZUF4CxWfXHZnUR4PnkZKnIDrTNFQPhpV2uYFZwrbJxTR9mzOq/DOAiXPwA==} + dependencies: + '@openzeppelin/upgrades': 2.8.0 + openzeppelin-solidity: 2.4.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@keep-network/keep-ecdsa@1.9.0-goerli.0: + resolution: {integrity: sha512-EA/oTcxmia5nznQ35ub9/5xBqBK4T+78oWYxASCc+THdPLalzriSAtQ517R4QnvkHi82NFhJjZH8WBoRXniddA==} + dependencies: + '@keep-network/keep-core': 1.8.1-goerli.0 + '@keep-network/sortition-pools': 1.2.0-dev.1 + '@openzeppelin/upgrades': 2.8.0 + openzeppelin-solidity: 2.3.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@keep-network/random-beacon@2.1.0-dev.17(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-alfd2sHdMrX15qKzM4zwkZ3l/CXboLoeos4l3WvChW978VJIwUPm2ZIXd8tNTaHlykQ57eSSX7esaLfIjeO3Kg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@keep-network/sortition-pools': 2.0.0 + '@openzeppelin/contracts': 4.7.3 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + '@threshold-network/solidity-contracts': 1.3.0-dev.8(@keep-network/keep-core@1.8.1-dev.0) + transitivePeerDependencies: + - '@keep-network/keep-core' + dev: false + + /@keep-network/random-beacon@2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-UrVq///+jqOLQ5k8/aFvD1ZUMvVe49iS81U8mDoi9A005FiQzKUK9QFKv3Z0h6joG4prF/hlABRTEQ1UA7tgRA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@keep-network/sortition-pools': 2.0.0 + '@openzeppelin/contracts': 4.7.3 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + '@threshold-network/solidity-contracts': 1.3.0-dev.11(@keep-network/keep-core@1.8.1-dev.0) + transitivePeerDependencies: + - '@keep-network/keep-core' + dev: false + + /@keep-network/sortition-pools@1.2.0-dev.1: + resolution: {integrity: sha512-CaOsvxNWHgXRFwPThDn3C/LiCwq9pL8ICLXXkysRSLw1Hx69wLnToaXYuwyXeIEy5pGqe5+288DBIqvJ3T4+jA==} + dependencies: + '@openzeppelin/contracts': 2.5.1 + dev: false + + /@keep-network/sortition-pools@2.0.0: + resolution: {integrity: sha512-82pDOKcDBvHBFblCt0ALVr6qC6mxk339ZqnCfYx1zIPaPhzkw1RKOv28AqPoqzhzcdqLIoPh8g9RS/M2Lplh1A==} + dependencies: + '@openzeppelin/contracts': 4.9.5 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + dev: false + + /@keep-network/tbtc-v2@1.6.0-dev.18(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-62QBEPAsE3dju5Hk+yqeLhE5ohmVg8ZdFE+x+lmkDPbVz6DrHx0NqF6a1TLC/yH826zhnVCTNpXoPuOv3QUnvA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@keep-network/bitcoin-spv-sol': 3.4.0-solc-0.8 + '@keep-network/ecdsa': 2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) + '@keep-network/random-beacon': 2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) + '@keep-network/tbtc': 1.1.2-dev.1 + '@openzeppelin/contracts': 4.9.5 + '@openzeppelin/contracts-upgradeable': 4.9.5 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + transitivePeerDependencies: + - '@keep-network/keep-core' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@keep-network/tbtc@1.1.2-dev.1: + resolution: {integrity: sha512-IRa0j1D7JBG8UpduaFxkaq2Ii6F61HhNMUBmxr7kAIZwj/yx8sYXWi921mn0L2Z+hAYNcwEUVhCM91VKQH29pQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@celo/contractkit': 1.5.2 + '@keep-network/keep-ecdsa': 1.9.0-goerli.0 + '@summa-tx/bitcoin-spv-sol': 3.1.0 + '@summa-tx/relay-sol': 2.0.2 + openzeppelin-solidity: 2.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@ledgerhq/cryptoassets@5.53.0: + resolution: {integrity: sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw==} + dependencies: + invariant: 2.2.4 + dev: false + + /@ledgerhq/devices@5.51.1: + resolution: {integrity: sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==} + dependencies: + '@ledgerhq/errors': 5.50.0 + '@ledgerhq/logs': 5.50.0 + rxjs: 6.6.7 + semver: 7.5.4 dev: false /@ledgerhq/devices@8.0.8: - resolution: - { - integrity: sha512-0j7E8DY2jeSSATc8IJk+tXDZ9u+Z7tXxB8I4TzXrfV/8A5exMh/K1IwX6Jt1zlw1wre4CT9MV4mzUs3M/TE7lg==, - } + resolution: {integrity: sha512-0j7E8DY2jeSSATc8IJk+tXDZ9u+Z7tXxB8I4TzXrfV/8A5exMh/K1IwX6Jt1zlw1wre4CT9MV4mzUs3M/TE7lg==} dependencies: - "@ledgerhq/errors": 6.15.0 - "@ledgerhq/logs": 6.11.0 + '@ledgerhq/errors': 6.15.0 + '@ledgerhq/logs': 6.11.0 rxjs: 7.8.1 semver: 7.5.4 dev: false + /@ledgerhq/errors@5.50.0: + resolution: {integrity: sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==} + dev: false + /@ledgerhq/errors@6.15.0: - resolution: - { - integrity: sha512-6xaw5/mgoht62TnL3rXsaQYEFwpnXyNDk1AOSJksIjFHx9bHUnkyVmrnGQDj0JLzi+E7bHEgTrpCs8wpeDh9jA==, - } + resolution: {integrity: sha512-6xaw5/mgoht62TnL3rXsaQYEFwpnXyNDk1AOSJksIjFHx9bHUnkyVmrnGQDj0JLzi+E7bHEgTrpCs8wpeDh9jA==} + dev: false + + /@ledgerhq/hw-app-eth@5.53.0: + resolution: {integrity: sha512-LKi/lDA9tW0GdoYP1ng0VY/PXNYjSrwZ1cj0R0MQ9z+knmFlPcVkGK2MEqE8W8cXrC0tjsUXITMcngvpk5yfKA==} + dependencies: + '@ledgerhq/cryptoassets': 5.53.0 + '@ledgerhq/errors': 5.50.0 + '@ledgerhq/hw-transport': 5.51.1 + '@ledgerhq/logs': 5.50.0 + bignumber.js: 9.1.2 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@ledgerhq/hw-transport@5.51.1: + resolution: {integrity: sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==} + dependencies: + '@ledgerhq/devices': 5.51.1 + '@ledgerhq/errors': 5.50.0 + events: 3.3.0 dev: false /@ledgerhq/hw-transport@6.29.0: - resolution: - { - integrity: sha512-WQfzxt3EnnbOmzZVYiCgSmNsqafBOFQn40awvUPY2IZviJRs23/1ANPHAo76bzPV88+Qk0+1wZlcnIanGN6fFA==, - } - dependencies: - "@ledgerhq/devices": 8.0.8 - "@ledgerhq/errors": 6.15.0 - "@ledgerhq/logs": 6.11.0 + resolution: {integrity: sha512-WQfzxt3EnnbOmzZVYiCgSmNsqafBOFQn40awvUPY2IZviJRs23/1ANPHAo76bzPV88+Qk0+1wZlcnIanGN6fFA==} + dependencies: + '@ledgerhq/devices': 8.0.8 + '@ledgerhq/errors': 6.15.0 + '@ledgerhq/logs': 6.11.0 events: 3.3.0 dev: false + /@ledgerhq/logs@5.50.0: + resolution: {integrity: sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==} + dev: false + /@ledgerhq/logs@6.11.0: - resolution: - { - integrity: sha512-HHK9y4GGe4X7CXbRUCh7z8Mp+WggpJn1dmUjmuk1rNugESF6o8nAOnXA+BxwtRRNV3CgNJR3Wxdos4J9qV0Zsg==, - } + resolution: {integrity: sha512-HHK9y4GGe4X7CXbRUCh7z8Mp+WggpJn1dmUjmuk1rNugESF6o8nAOnXA+BxwtRRNV3CgNJR3Wxdos4J9qV0Zsg==} dev: false /@ledgerhq/wallet-api-client-react@1.3.0(react@18.2.0): - resolution: - { - integrity: sha512-UYNKQ1Yp/ZieqY4SGKgkoxKXJ3t0Zj/PPnZDoOrG/YbAFd4r3bL4XvTMa5T+bIdjbqITTo7VRiA9mhk5ootLrA==, - } + resolution: {integrity: sha512-UYNKQ1Yp/ZieqY4SGKgkoxKXJ3t0Zj/PPnZDoOrG/YbAFd4r3bL4XvTMa5T+bIdjbqITTo7VRiA9mhk5ootLrA==} peerDependencies: react: ^16.8.0 || ^17 || ^18 dependencies: - "@ledgerhq/wallet-api-client": 1.5.0 + '@ledgerhq/wallet-api-client': 1.5.0 react: 18.2.0 dev: false /@ledgerhq/wallet-api-client@1.5.0: - resolution: - { - integrity: sha512-I07RlTmHw0uia5xhHa8Z3I7yVlYkxUWPfKWruh0vM6o0hDzPddGp+oDJZlriJIIrj2eHfaUCO1bEgycewPe0jA==, - } + resolution: {integrity: sha512-I07RlTmHw0uia5xhHa8Z3I7yVlYkxUWPfKWruh0vM6o0hDzPddGp+oDJZlriJIIrj2eHfaUCO1bEgycewPe0jA==} dependencies: - "@ledgerhq/hw-transport": 6.29.0 - "@ledgerhq/wallet-api-core": 1.6.0 + '@ledgerhq/hw-transport': 6.29.0 + '@ledgerhq/wallet-api-core': 1.6.0 bignumber.js: 9.1.2 dev: false /@ledgerhq/wallet-api-core@1.6.0: - resolution: - { - integrity: sha512-nVPN3yu5+5pbhfFYh0iKmij5U7KVKZfpDkusXbj4yKvueKY8ZXU1wgvw1rDhgxlqu+s7JTA50MX56doyhm46Qg==, - } + resolution: {integrity: sha512-nVPN3yu5+5pbhfFYh0iKmij5U7KVKZfpDkusXbj4yKvueKY8ZXU1wgvw1rDhgxlqu+s7JTA50MX56doyhm46Qg==} dependencies: - "@ledgerhq/errors": 6.15.0 + '@ledgerhq/errors': 6.15.0 bignumber.js: 9.1.2 uuid: 9.0.1 zod: 3.22.4 dev: false /@lezer/common@1.1.1: - resolution: - { - integrity: sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==, - } + resolution: {integrity: sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==} /@lezer/lr@1.3.14: - resolution: - { - integrity: sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==, - } + resolution: {integrity: sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==} dependencies: - "@lezer/common": 1.1.1 + '@lezer/common': 1.1.1 /@lmdb/lmdb-darwin-arm64@2.5.2: - resolution: - { - integrity: sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==, - } + resolution: {integrity: sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true /@lmdb/lmdb-darwin-arm64@2.5.3: - resolution: - { - integrity: sha512-RXwGZ/0eCqtCY8FLTM/koR60w+MXyvBUpToXiIyjOcBnC81tAlTUHrRUavCEWPI9zc9VgvpK3+cbumPyR8BSuA==, - } + resolution: {integrity: sha512-RXwGZ/0eCqtCY8FLTM/koR60w+MXyvBUpToXiIyjOcBnC81tAlTUHrRUavCEWPI9zc9VgvpK3+cbumPyR8BSuA==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true /@lmdb/lmdb-darwin-x64@2.5.2: - resolution: - { - integrity: sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==, - } + resolution: {integrity: sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==} cpu: [x64] os: [darwin] requiresBuild: true optional: true /@lmdb/lmdb-darwin-x64@2.5.3: - resolution: - { - integrity: sha512-337dNzh5yCdNCTk8kPfoU7jR3otibSlPDGW0vKZT97rKnQMb9tNdto3RtWoGPsQ8hKmlRZpojOJtmwjncq1MoA==, - } + resolution: {integrity: sha512-337dNzh5yCdNCTk8kPfoU7jR3otibSlPDGW0vKZT97rKnQMb9tNdto3RtWoGPsQ8hKmlRZpojOJtmwjncq1MoA==} cpu: [x64] os: [darwin] requiresBuild: true optional: true /@lmdb/lmdb-linux-arm64@2.5.2: - resolution: - { - integrity: sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==, - } + resolution: {integrity: sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@lmdb/lmdb-linux-arm64@2.5.3: - resolution: - { - integrity: sha512-VJw60Mdgb4n+L0fO1PqfB0C7TyEQolJAC8qpqvG3JoQwvyOv6LH7Ib/WE3wxEW9nuHmVz9jkK7lk5HfWWgoO1Q==, - } + resolution: {integrity: sha512-VJw60Mdgb4n+L0fO1PqfB0C7TyEQolJAC8qpqvG3JoQwvyOv6LH7Ib/WE3wxEW9nuHmVz9jkK7lk5HfWWgoO1Q==} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@lmdb/lmdb-linux-arm@2.5.2: - resolution: - { - integrity: sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==, - } + resolution: {integrity: sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==} cpu: [arm] os: [linux] requiresBuild: true optional: true /@lmdb/lmdb-linux-arm@2.5.3: - resolution: - { - integrity: sha512-mU2HFJDGwECkoD9dHQEfeTG5mp8hNS2BCfwoiOpVPMeapjYpQz9Uw3FkUjRZ4dGHWKbin40oWHuL0bk2bCx+Sg==, - } + resolution: {integrity: sha512-mU2HFJDGwECkoD9dHQEfeTG5mp8hNS2BCfwoiOpVPMeapjYpQz9Uw3FkUjRZ4dGHWKbin40oWHuL0bk2bCx+Sg==} cpu: [arm] os: [linux] requiresBuild: true optional: true /@lmdb/lmdb-linux-x64@2.5.2: - resolution: - { - integrity: sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==, - } + resolution: {integrity: sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==} cpu: [x64] os: [linux] requiresBuild: true optional: true /@lmdb/lmdb-linux-x64@2.5.3: - resolution: - { - integrity: sha512-qaReO5aV8griBDsBr8uBF/faO3ieGjY1RY4p8JvTL6Mu1ylLrTVvOONqKFlNaCwrmUjWw5jnf7VafxDAeQHTow==, - } + resolution: {integrity: sha512-qaReO5aV8griBDsBr8uBF/faO3ieGjY1RY4p8JvTL6Mu1ylLrTVvOONqKFlNaCwrmUjWw5jnf7VafxDAeQHTow==} cpu: [x64] os: [linux] requiresBuild: true optional: true /@lmdb/lmdb-win32-x64@2.5.2: - resolution: - { - integrity: sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==, - } + resolution: {integrity: sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==} cpu: [x64] os: [win32] requiresBuild: true optional: true /@lmdb/lmdb-win32-x64@2.5.3: - resolution: - { - integrity: sha512-cK+Elf3RjEzrm3SerAhrFWL5oQAsZSJ/LmjL1joIpTfEP1etJJ9CTRvdaV6XLYAxaEkfdhk/9hOvHLbR9yIhCA==, - } + resolution: {integrity: sha512-cK+Elf3RjEzrm3SerAhrFWL5oQAsZSJ/LmjL1joIpTfEP1etJJ9CTRvdaV6XLYAxaEkfdhk/9hOvHLbR9yIhCA==} cpu: [x64] os: [win32] requiresBuild: true optional: true /@metamask/eth-sig-util@4.0.1: - resolution: - { - integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} dependencies: ethereumjs-abi: 0.6.8 ethereumjs-util: 6.2.1 @@ -5115,171 +4346,117 @@ packages: dev: true /@mischnic/json-sourcemap@0.1.1: - resolution: - { - integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==, - } - engines: { node: ">=12.0.0" } - dependencies: - "@lezer/common": 1.1.1 - "@lezer/lr": 1.3.14 + resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} + engines: {node: '>=12.0.0'} + dependencies: + '@lezer/common': 1.1.1 + '@lezer/lr': 1.3.14 json5: 2.2.3 /@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2: - resolution: - { - integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==, - } + resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true /@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2: - resolution: - { - integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==, - } + resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==} cpu: [x64] os: [darwin] requiresBuild: true optional: true /@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2: - resolution: - { - integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==, - } + resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2: - resolution: - { - integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==, - } + resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==} cpu: [arm] os: [linux] requiresBuild: true optional: true /@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2: - resolution: - { - integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==, - } + resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==} cpu: [x64] os: [linux] requiresBuild: true optional: true /@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2: - resolution: - { - integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==, - } + resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==} cpu: [x64] os: [win32] requiresBuild: true optional: true /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: - { - integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, - } + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: eslint-scope: 5.1.1 /@noble/curves@1.1.0: - resolution: - { - integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==, - } + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} dependencies: - "@noble/hashes": 1.3.1 + '@noble/hashes': 1.3.1 dev: true /@noble/curves@1.2.0: - resolution: - { - integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==, - } + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} dependencies: - "@noble/hashes": 1.3.2 + '@noble/hashes': 1.3.2 dev: true /@noble/hashes@1.2.0: - resolution: - { - integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==, - } + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} dev: true /@noble/hashes@1.3.1: - resolution: - { - integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==, - } - engines: { node: ">= 16" } + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} dev: true /@noble/hashes@1.3.2: - resolution: - { - integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==, - } - engines: { node: ">= 16" } + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} dev: true /@noble/secp256k1@1.7.1: - resolution: - { - integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==, - } + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} dev: true /@nodelib/fs.scandir@2.1.5: - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.stat": 2.0.5 + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 /@nodelib/fs.stat@2.0.5: - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} /@nodelib/fs.walk@1.2.8: - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 /@nomicfoundation/ethereumjs-block@5.0.2: - resolution: - { - integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==, - } - engines: { node: ">=14" } - dependencies: - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-trie": 6.0.2 - "@nomicfoundation/ethereumjs-tx": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 + resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 ethereum-cryptography: 0.1.3 ethers: 5.7.2 transitivePeerDependencies: @@ -5288,19 +4465,16 @@ packages: dev: true /@nomicfoundation/ethereumjs-blockchain@7.0.2: - resolution: - { - integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==, - } - engines: { node: ">=14" } - dependencies: - "@nomicfoundation/ethereumjs-block": 5.0.2 - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-ethash": 3.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-trie": 6.0.2 - "@nomicfoundation/ethereumjs-tx": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 + resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-ethash': 3.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 abstract-level: 1.0.3 debug: 4.3.4(supports-color@8.1.1) ethereum-cryptography: 0.1.3 @@ -5314,25 +4488,19 @@ packages: dev: true /@nomicfoundation/ethereumjs-common@4.0.2: - resolution: - { - integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==, - } + resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} dependencies: - "@nomicfoundation/ethereumjs-util": 9.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 crc-32: 1.2.2 dev: true /@nomicfoundation/ethereumjs-ethash@3.0.2: - resolution: - { - integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==, - } - engines: { node: ">=14" } - dependencies: - "@nomicfoundation/ethereumjs-block": 5.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 + resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 abstract-level: 1.0.3 bigint-crypto-utils: 3.3.0 ethereum-cryptography: 0.1.3 @@ -5342,16 +4510,13 @@ packages: dev: true /@nomicfoundation/ethereumjs-evm@2.0.2: - resolution: - { - integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==, - } - engines: { node: ">=14" } - dependencies: - "@ethersproject/providers": 5.7.2 - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-tx": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 + resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} + engines: {node: '>=14'} + dependencies: + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 debug: 4.3.4(supports-color@8.1.1) ethereum-cryptography: 0.1.3 mcl-wasm: 0.7.9 @@ -5363,22 +4528,16 @@ packages: dev: true /@nomicfoundation/ethereumjs-rlp@5.0.2: - resolution: - { - integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} + engines: {node: '>=14'} hasBin: true dev: true /@nomicfoundation/ethereumjs-statemanager@2.0.2: - resolution: - { - integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==, - } + resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} dependencies: - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 debug: 4.3.4(supports-color@8.1.1) ethereum-cryptography: 0.1.3 ethers: 5.7.2 @@ -5390,31 +4549,25 @@ packages: dev: true /@nomicfoundation/ethereumjs-trie@6.0.2: - resolution: - { - integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==, - } - engines: { node: ">=14" } - dependencies: - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 - "@types/readable-stream": 2.3.15 + resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + '@types/readable-stream': 2.3.15 ethereum-cryptography: 0.1.3 readable-stream: 3.6.2 dev: true /@nomicfoundation/ethereumjs-tx@5.0.2: - resolution: - { - integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==, - } - engines: { node: ">=14" } - dependencies: - "@chainsafe/ssz": 0.9.4 - "@ethersproject/providers": 5.7.2 - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 + resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.9.4 + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 ethereum-cryptography: 0.1.3 transitivePeerDependencies: - bufferutil @@ -5422,33 +4575,27 @@ packages: dev: true /@nomicfoundation/ethereumjs-util@9.0.2: - resolution: - { - integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==, - } - engines: { node: ">=14" } - dependencies: - "@chainsafe/ssz": 0.10.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 + resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 ethereum-cryptography: 0.1.3 dev: true /@nomicfoundation/ethereumjs-vm@7.0.2: - resolution: - { - integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==, - } - engines: { node: ">=14" } - dependencies: - "@nomicfoundation/ethereumjs-block": 5.0.2 - "@nomicfoundation/ethereumjs-blockchain": 7.0.2 - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-evm": 2.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-statemanager": 2.0.2 - "@nomicfoundation/ethereumjs-trie": 6.0.2 - "@nomicfoundation/ethereumjs-tx": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 + resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-blockchain': 7.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-evm': 2.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-statemanager': 2.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 debug: 4.3.4(supports-color@8.1.1) ethereum-cryptography: 0.1.3 mcl-wasm: 0.7.9 @@ -5460,18 +4607,15 @@ packages: dev: true /@nomicfoundation/hardhat-chai-matchers@2.0.2(@nomicfoundation/hardhat-ethers@3.0.5)(chai@4.3.10)(ethers@6.8.1)(hardhat@2.19.1): - resolution: - { - integrity: sha512-9Wu9mRtkj0U9ohgXYFbB/RQDa+PcEdyBm2suyEtsJf3PqzZEEjLUZgWnMjlFhATMk/fp3BjmnYVPrwl+gr8oEw==, - } + resolution: {integrity: sha512-9Wu9mRtkj0U9ohgXYFbB/RQDa+PcEdyBm2suyEtsJf3PqzZEEjLUZgWnMjlFhATMk/fp3BjmnYVPrwl+gr8oEw==} peerDependencies: - "@nomicfoundation/hardhat-ethers": ^3.0.0 + '@nomicfoundation/hardhat-ethers': ^3.0.0 chai: ^4.2.0 ethers: ^6.1.0 hardhat: ^2.9.4 dependencies: - "@nomicfoundation/hardhat-ethers": 3.0.5(ethers@6.8.1)(hardhat@2.19.1) - "@types/chai-as-promised": 7.1.8 + '@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.8.1)(hardhat@2.19.1) + '@types/chai-as-promised': 7.1.8 chai: 4.3.10 chai-as-promised: 7.1.1(chai@4.3.10) deep-eql: 4.1.3 @@ -5481,10 +4625,7 @@ packages: dev: true /@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.8.1)(hardhat@2.19.1): - resolution: - { - integrity: sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==, - } + resolution: {integrity: sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==} peerDependencies: ethers: ^6.1.0 hardhat: ^2.0.0 @@ -5498,10 +4639,7 @@ packages: dev: true /@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.19.1): - resolution: - { - integrity: sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==, - } + resolution: {integrity: sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==} peerDependencies: hardhat: ^2.9.5 dependencies: @@ -5510,38 +4648,35 @@ packages: dev: true /@nomicfoundation/hardhat-toolbox@4.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.2)(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-network-helpers@1.0.9)(@nomicfoundation/hardhat-verify@2.0.1)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.11)(@types/mocha@10.0.6)(@types/node@20.9.4)(chai@4.3.10)(ethers@6.8.1)(hardhat-gas-reporter@1.0.9)(hardhat@2.19.1)(solidity-coverage@0.8.5)(ts-node@10.9.1)(typechain@8.3.2)(typescript@5.3.2): - resolution: - { - integrity: sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA==, - } - peerDependencies: - "@nomicfoundation/hardhat-chai-matchers": ^2.0.0 - "@nomicfoundation/hardhat-ethers": ^3.0.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": ">=16.0.0" + resolution: {integrity: sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA==} + peerDependencies: + '@nomicfoundation/hardhat-chai-matchers': ^2.0.0 + '@nomicfoundation/hardhat-ethers': ^3.0.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': '>=16.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" + ts-node: '>=8.0.0' typechain: ^8.3.0 - typescript: ">=4.5.0" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": 2.0.2(@nomicfoundation/hardhat-ethers@3.0.5)(chai@4.3.10)(ethers@6.8.1)(hardhat@2.19.1) - "@nomicfoundation/hardhat-ethers": 3.0.5(ethers@6.8.1)(hardhat@2.19.1) - "@nomicfoundation/hardhat-network-helpers": 1.0.9(hardhat@2.19.1) - "@nomicfoundation/hardhat-verify": 2.0.1(hardhat@2.19.1) - "@typechain/ethers-v6": 0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2) - "@typechain/hardhat": 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.8.1)(hardhat@2.19.1)(typechain@8.3.2) - "@types/chai": 4.3.11 - "@types/mocha": 10.0.6 - "@types/node": 20.9.4 + typescript: '>=4.5.0' + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.2(@nomicfoundation/hardhat-ethers@3.0.5)(chai@4.3.10)(ethers@6.8.1)(hardhat@2.19.1) + '@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.8.1)(hardhat@2.19.1) + '@nomicfoundation/hardhat-network-helpers': 1.0.9(hardhat@2.19.1) + '@nomicfoundation/hardhat-verify': 2.0.1(hardhat@2.19.1) + '@typechain/ethers-v6': 0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.8.1)(hardhat@2.19.1)(typechain@8.3.2) + '@types/chai': 4.3.11 + '@types/mocha': 10.0.6 + '@types/node': 20.9.4 chai: 4.3.10 ethers: 6.8.1 hardhat: 2.19.1(ts-node@10.9.1)(typescript@5.3.2) @@ -5553,15 +4688,12 @@ packages: dev: true /@nomicfoundation/hardhat-verify@2.0.1(hardhat@2.19.1): - resolution: - { - integrity: sha512-TuJrhW5p9x92wDRiRhNkGQ/wzRmOkfCLkoRg8+IRxyeLigOALbayQEmkNiGWR03vGlxZS4znXhKI7y97JwZ6Og==, - } + resolution: {integrity: sha512-TuJrhW5p9x92wDRiRhNkGQ/wzRmOkfCLkoRg8+IRxyeLigOALbayQEmkNiGWR03vGlxZS4znXhKI7y97JwZ6Og==} peerDependencies: hardhat: ^2.0.4 dependencies: - "@ethersproject/abi": 5.7.0 - "@ethersproject/address": 5.7.0 + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.4(supports-color@8.1.1) @@ -5575,11 +4707,8 @@ packages: dev: true /@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1: - resolution: - { - integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -5587,11 +4716,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1: - resolution: - { - integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] requiresBuild: true @@ -5599,11 +4725,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1: - resolution: - { - integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} + engines: {node: '>= 10'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -5611,11 +4734,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1: - resolution: - { - integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] requiresBuild: true @@ -5623,11 +4743,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1: - resolution: - { - integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] requiresBuild: true @@ -5635,11 +4752,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1: - resolution: - { - integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] requiresBuild: true @@ -5647,11 +4761,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1: - resolution: - { - integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] requiresBuild: true @@ -5659,11 +4770,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1: - resolution: - { - integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] requiresBuild: true @@ -5671,11 +4779,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1: - resolution: - { - integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} + engines: {node: '>= 10'} cpu: [ia32] os: [win32] requiresBuild: true @@ -5683,11 +4788,8 @@ packages: optional: true /@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1: - resolution: - { - integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] requiresBuild: true @@ -5695,34 +4797,28 @@ packages: optional: true /@nomicfoundation/solidity-analyzer@0.1.1: - resolution: - { - integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==, - } - engines: { node: ">= 12" } + resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} + engines: {node: '>= 12'} optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64": 0.1.1 - "@nomicfoundation/solidity-analyzer-darwin-x64": 0.1.1 - "@nomicfoundation/solidity-analyzer-freebsd-x64": 0.1.1 - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": 0.1.1 - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": 0.1.1 - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": 0.1.1 - "@nomicfoundation/solidity-analyzer-linux-x64-musl": 0.1.1 - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": 0.1.1 - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": 0.1.1 - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": 0.1.1 + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.1 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-freebsd-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-arm64-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 dev: true /@nomiclabs/hardhat-etherscan@3.1.7(hardhat@2.19.1): - resolution: - { - integrity: sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==, - } + resolution: {integrity: sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==} peerDependencies: hardhat: ^2.0.4 dependencies: - "@ethersproject/abi": 5.7.0 - "@ethersproject/address": 5.7.0 + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.4(supports-color@8.1.1) @@ -5736,20 +4832,38 @@ packages: - supports-color dev: true + /@openzeppelin/contracts-upgradeable@4.5.2: + resolution: {integrity: sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==} + dev: false + + /@openzeppelin/contracts-upgradeable@4.9.5: + resolution: {integrity: sha512-f7L1//4sLlflAN7fVzJLoRedrf5Na3Oal5PZfIq55NFcVZ90EpV1q5xOvL4lFvg3MNICSDr2hH0JUBxwlxcoPg==} + dev: false + + /@openzeppelin/contracts@2.5.1: + resolution: {integrity: sha512-qIy6tLx8rtybEsIOAlrM4J/85s2q2nPkDqj/Rx46VakBZ0LwtFhXIVub96LXHczQX0vaqmAueDqNPXtbSXSaYQ==} + dev: false + + /@openzeppelin/contracts@4.5.0: + resolution: {integrity: sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==} + dev: false + + /@openzeppelin/contracts@4.7.3: + resolution: {integrity: sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==} + dev: false + + /@openzeppelin/contracts@4.9.5: + resolution: {integrity: sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==} + dev: false + /@openzeppelin/contracts@5.0.0: - resolution: - { - integrity: sha512-bv2sdS6LKqVVMLI5+zqnNrNU/CA+6z6CmwFXm/MzmOPBRSO5reEJN7z0Gbzvs0/bv/MZZXNklubpwy3v2+azsw==, - } + resolution: {integrity: sha512-bv2sdS6LKqVVMLI5+zqnNrNU/CA+6z6CmwFXm/MzmOPBRSO5reEJN7z0Gbzvs0/bv/MZZXNklubpwy3v2+azsw==} dev: false /@openzeppelin/defender-admin-client@1.52.0(debug@4.3.4): - resolution: - { - integrity: sha512-CKs5mMLL7+nXyugsHaAw0aPfLwFNA+vq7ftuJ3sWUKdbQRZsJ+/189HAwp2/BJC64yUbarEeWqOh3jNpaKRJLw==, - } + resolution: {integrity: sha512-CKs5mMLL7+nXyugsHaAw0aPfLwFNA+vq7ftuJ3sWUKdbQRZsJ+/189HAwp2/BJC64yUbarEeWqOh3jNpaKRJLw==} dependencies: - "@openzeppelin/defender-base-client": 1.52.0(debug@4.3.4) + '@openzeppelin/defender-base-client': 1.52.0(debug@4.3.4) axios: 1.6.2(debug@4.3.4) ethers: 5.7.2 lodash: 4.17.21 @@ -5762,10 +4876,7 @@ packages: dev: true /@openzeppelin/defender-base-client@1.52.0(debug@4.3.4): - resolution: - { - integrity: sha512-VFNu/pjVpAnFKIfuKT1cn9dRpbcO8FO8EAmVZ2XrrAsKXEWDZ3TNBtACxmj7fAu0ad/TzRkb66o5rMts7Fv7jw==, - } + resolution: {integrity: sha512-VFNu/pjVpAnFKIfuKT1cn9dRpbcO8FO8EAmVZ2XrrAsKXEWDZ3TNBtACxmj7fAu0ad/TzRkb66o5rMts7Fv7jw==} dependencies: amazon-cognito-identity-js: 6.3.7 async-retry: 1.3.3 @@ -5778,10 +4889,7 @@ packages: dev: true /@openzeppelin/defender-sdk-base-client@1.5.0: - resolution: - { - integrity: sha512-8aN4sEE15/6LctA14ADr8c6QvEzEXfAtFlxo/Ys0N6UVfp8lRAYqDOpHd4mb8dMfkRzq5izMCuMYgAjC9GFflQ==, - } + resolution: {integrity: sha512-8aN4sEE15/6LctA14ADr8c6QvEzEXfAtFlxo/Ys0N6UVfp8lRAYqDOpHd4mb8dMfkRzq5izMCuMYgAjC9GFflQ==} dependencies: amazon-cognito-identity-js: 6.3.7 async-retry: 1.3.3 @@ -5790,13 +4898,10 @@ packages: dev: true /@openzeppelin/defender-sdk-deploy-client@1.5.0(debug@4.3.4): - resolution: - { - integrity: sha512-DbE4Rpa90vSN7o5/sim5qzAVVsSWkZBJ+Z9yjkc8qPRheh2dRk6oe2GhVoQfXI/04XwMb2uNvtfU1VAH8AzgaQ==, - } + resolution: {integrity: sha512-DbE4Rpa90vSN7o5/sim5qzAVVsSWkZBJ+Z9yjkc8qPRheh2dRk6oe2GhVoQfXI/04XwMb2uNvtfU1VAH8AzgaQ==} dependencies: - "@ethersproject/abi": 5.7.0 - "@openzeppelin/defender-sdk-base-client": 1.5.0 + '@ethersproject/abi': 5.7.0 + '@openzeppelin/defender-sdk-base-client': 1.5.0 axios: 1.6.2(debug@4.3.4) lodash: 4.17.21 transitivePeerDependencies: @@ -5805,27 +4910,24 @@ packages: dev: true /@openzeppelin/hardhat-upgrades@2.4.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(ethers@6.8.1)(hardhat@2.19.1): - resolution: - { - integrity: sha512-IF1nQ0Jbi9bUqGWAAaX6zP5CY5tgTM3jF+ipXXatPYLooFzyGbkk7wHHWzi/+9Rx64Ar7XQVtGlwVdAohMuRcw==, - } + resolution: {integrity: sha512-IF1nQ0Jbi9bUqGWAAaX6zP5CY5tgTM3jF+ipXXatPYLooFzyGbkk7wHHWzi/+9Rx64Ar7XQVtGlwVdAohMuRcw==} hasBin: true peerDependencies: - "@nomicfoundation/hardhat-ethers": ^3.0.0 - "@nomicfoundation/hardhat-verify": ^1.1.0 + '@nomicfoundation/hardhat-ethers': ^3.0.0 + '@nomicfoundation/hardhat-verify': ^1.1.0 ethers: ^6.6.0 hardhat: ^2.0.2 peerDependenciesMeta: - "@nomicfoundation/hardhat-verify": + '@nomicfoundation/hardhat-verify': optional: true dependencies: - "@nomicfoundation/hardhat-ethers": 3.0.5(ethers@6.8.1)(hardhat@2.19.1) - "@nomicfoundation/hardhat-verify": 2.0.1(hardhat@2.19.1) - "@openzeppelin/defender-admin-client": 1.52.0(debug@4.3.4) - "@openzeppelin/defender-base-client": 1.52.0(debug@4.3.4) - "@openzeppelin/defender-sdk-base-client": 1.5.0 - "@openzeppelin/defender-sdk-deploy-client": 1.5.0(debug@4.3.4) - "@openzeppelin/upgrades-core": 1.31.1 + '@nomicfoundation/hardhat-ethers': 3.0.5(ethers@6.8.1)(hardhat@2.19.1) + '@nomicfoundation/hardhat-verify': 2.0.1(hardhat@2.19.1) + '@openzeppelin/defender-admin-client': 1.52.0(debug@4.3.4) + '@openzeppelin/defender-base-client': 1.52.0(debug@4.3.4) + '@openzeppelin/defender-sdk-base-client': 1.5.0 + '@openzeppelin/defender-sdk-deploy-client': 1.5.0(debug@4.3.4) + '@openzeppelin/upgrades-core': 1.31.1 chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) ethereumjs-util: 7.1.5 @@ -5841,10 +4943,7 @@ packages: dev: true /@openzeppelin/upgrades-core@1.31.1: - resolution: - { - integrity: sha512-BdkTZwvBxgZ9BYYfhOhuivmqZLOZ/bm6mK5eEDZ36I3Fy64a9BDL/NusaDV5XAoGn4La/j9dZSbTtgP/6d8jAQ==, - } + resolution: {integrity: sha512-BdkTZwvBxgZ9BYYfhOhuivmqZLOZ/bm6mK5eEDZ36I3Fy64a9BDL/NusaDV5XAoGn4La/j9dZSbTtgP/6d8jAQ==} hasBin: true dependencies: cbor: 9.0.1 @@ -5859,78 +4958,88 @@ packages: - supports-color dev: true + /@openzeppelin/upgrades@2.8.0: + resolution: {integrity: sha512-LzjTQPeljPsgHDPdZyH9cMCbIHZILgd2cpNcYEkdsC2IylBYRHShlbEDXJV9snnqg9JWfzPiKIqyj3XVliwtqQ==} + deprecated: The OpenZeppelin SDK is no longer being developed. For smart contract upgrades check out the OpenZeppelin Upgrades Plugins. https://zpl.in/upgrades-plugins + dependencies: + '@types/cbor': 2.0.0 + axios: 0.18.1 + bignumber.js: 7.2.1 + cbor: 4.3.0 + chalk: 2.4.2 + ethers: 4.0.49 + glob: 7.2.3 + lodash: 4.17.21 + semver: 5.7.2 + spinnies: 0.4.3 + truffle-flattener: 1.6.0 + web3: 1.2.2 + web3-eth: 1.2.2 + web3-eth-contract: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@parcel/bundler-default@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/diagnostic": 2.8.3 - "@parcel/graph": 2.8.3 - "@parcel/hash": 2.8.3 - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/graph': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/cache@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==, - } - engines: { node: ">= 12.0.0" } - peerDependencies: - "@parcel/core": ^2.8.3 - dependencies: - "@parcel/core": 2.8.3 - "@parcel/fs": 2.8.3(@parcel/core@2.8.3) - "@parcel/logger": 2.8.3 - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.8.3) + '@parcel/logger': 2.8.3 + '@parcel/utils': 2.8.3 lmdb: 2.5.2 /@parcel/codeframe@2.8.3: - resolution: - { - integrity: sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==} + engines: {node: '>= 12.0.0'} dependencies: chalk: 4.1.2 /@parcel/compressor-raw@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } + resolution: {integrity: sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/core@2.8.3: - resolution: - { - integrity: sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==, - } - engines: { node: ">= 12.0.0" } - dependencies: - "@mischnic/json-sourcemap": 0.1.1 - "@parcel/cache": 2.8.3(@parcel/core@2.8.3) - "@parcel/diagnostic": 2.8.3 - "@parcel/events": 2.8.3 - "@parcel/fs": 2.8.3(@parcel/core@2.8.3) - "@parcel/graph": 2.8.3 - "@parcel/hash": 2.8.3 - "@parcel/logger": 2.8.3 - "@parcel/package-manager": 2.8.3(@parcel/core@2.8.3) - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/source-map": 2.1.1 - "@parcel/types": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 - "@parcel/workers": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/cache': 2.8.3(@parcel/core@2.8.3) + '@parcel/diagnostic': 2.8.3 + '@parcel/events': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.8.3) + '@parcel/graph': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/package-manager': 2.8.3(@parcel/core@2.8.3) + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3(@parcel/core@2.8.3) abortcontroller-polyfill: 1.7.5 base-x: 3.0.9 browserslist: 4.22.1 @@ -5943,245 +5052,185 @@ packages: semver: 5.7.2 /@parcel/diagnostic@2.8.3: - resolution: - { - integrity: sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==} + engines: {node: '>= 12.0.0'} dependencies: - "@mischnic/json-sourcemap": 0.1.1 + '@mischnic/json-sourcemap': 0.1.1 nullthrows: 1.1.1 /@parcel/events@2.8.3: - resolution: - { - integrity: sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==} + engines: {node: '>= 12.0.0'} /@parcel/fs-search@2.8.3: - resolution: - { - integrity: sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==} + engines: {node: '>= 12.0.0'} dependencies: detect-libc: 1.0.3 /@parcel/fs@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==} + engines: {node: '>= 12.0.0'} peerDependencies: - "@parcel/core": ^2.8.3 + '@parcel/core': ^2.8.3 dependencies: - "@parcel/core": 2.8.3 - "@parcel/fs-search": 2.8.3 - "@parcel/types": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 - "@parcel/watcher": 2.3.0 - "@parcel/workers": 2.8.3(@parcel/core@2.8.3) + '@parcel/core': 2.8.3 + '@parcel/fs-search': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 + '@parcel/watcher': 2.3.0 + '@parcel/workers': 2.8.3(@parcel/core@2.8.3) /@parcel/graph@2.8.3: - resolution: - { - integrity: sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==} + engines: {node: '>= 12.0.0'} dependencies: nullthrows: 1.1.1 /@parcel/hash@2.8.3: - resolution: - { - integrity: sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==} + engines: {node: '>= 12.0.0'} dependencies: detect-libc: 1.0.3 xxhash-wasm: 0.4.2 /@parcel/logger@2.8.3: - resolution: - { - integrity: sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==} + engines: {node: '>= 12.0.0'} dependencies: - "@parcel/diagnostic": 2.8.3 - "@parcel/events": 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/events': 2.8.3 /@parcel/markdown-ansi@2.8.3: - resolution: - { - integrity: sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==} + engines: {node: '>= 12.0.0'} dependencies: chalk: 4.1.2 /@parcel/namer-default@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/diagnostic": 2.8.3 - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) nullthrows: 1.1.1 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/node-resolver-core@2.8.3: - resolution: - { - integrity: sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==, - } - engines: { node: ">= 12.0.0" } - dependencies: - "@parcel/diagnostic": 2.8.3 - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 semver: 5.7.2 /@parcel/optimizer-terser@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/diagnostic": 2.8.3 - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/source-map": 2.1.1 - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 terser: 5.24.0 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/package-manager@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==, - } - engines: { node: ">= 12.0.0" } - peerDependencies: - "@parcel/core": ^2.8.3 - dependencies: - "@parcel/core": 2.8.3 - "@parcel/diagnostic": 2.8.3 - "@parcel/fs": 2.8.3(@parcel/core@2.8.3) - "@parcel/logger": 2.8.3 - "@parcel/types": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 - "@parcel/workers": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.8.3) + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3(@parcel/core@2.8.3) semver: 5.7.2 /@parcel/packager-js@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/diagnostic": 2.8.3 - "@parcel/hash": 2.8.3 - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/source-map": 2.1.1 - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.8.3 globals: 13.23.0 nullthrows: 1.1.1 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/packager-raw@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } + resolution: {integrity: sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/plugin@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==} + engines: {node: '>= 12.0.0'} dependencies: - "@parcel/types": 2.8.3(@parcel/core@2.8.3) + '@parcel/types': 2.8.3(@parcel/core@2.8.3) transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/reporter-dev-server@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/resolver-default@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/node-resolver-core": 2.8.3 - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/node-resolver-core': 2.8.3 + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/runtime-js@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - dependencies: - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/source-map@2.1.1: - resolution: - { - integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==, - } - engines: { node: ^12.18.3 || >=14 } + resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} + engines: {node: ^12.18.3 || >=14} dependencies: detect-libc: 1.0.3 /@parcel/transformer-js@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } - peerDependencies: - "@parcel/core": ^2.8.3 - dependencies: - "@parcel/core": 2.8.3 - "@parcel/diagnostic": 2.8.3 - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) - "@parcel/source-map": 2.1.1 - "@parcel/utils": 2.8.3 - "@parcel/workers": 2.8.3(@parcel/core@2.8.3) - "@swc/helpers": 0.4.36 + resolution: {integrity: sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3(@parcel/core@2.8.3) + '@swc/helpers': 0.4.36 browserslist: 4.22.1 detect-libc: 1.0.3 nullthrows: 1.1.1 @@ -6189,228 +5238,174 @@ packages: semver: 5.7.2 /@parcel/transformer-json@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==, - } - engines: { node: ">= 12.0.0", parcel: ^2.8.3 } + resolution: {integrity: sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - "@parcel/plugin": 2.8.3(@parcel/core@2.8.3) + '@parcel/plugin': 2.8.3(@parcel/core@2.8.3) json5: 2.2.3 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/types@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==, - } - dependencies: - "@parcel/cache": 2.8.3(@parcel/core@2.8.3) - "@parcel/diagnostic": 2.8.3 - "@parcel/fs": 2.8.3(@parcel/core@2.8.3) - "@parcel/package-manager": 2.8.3(@parcel/core@2.8.3) - "@parcel/source-map": 2.1.1 - "@parcel/workers": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==} + dependencies: + '@parcel/cache': 2.8.3(@parcel/core@2.8.3) + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.8.3) + '@parcel/package-manager': 2.8.3(@parcel/core@2.8.3) + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.8.3(@parcel/core@2.8.3) utility-types: 3.10.0 transitivePeerDependencies: - - "@parcel/core" + - '@parcel/core' /@parcel/utils@2.8.3: - resolution: - { - integrity: sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==, - } - engines: { node: ">= 12.0.0" } - dependencies: - "@parcel/codeframe": 2.8.3 - "@parcel/diagnostic": 2.8.3 - "@parcel/hash": 2.8.3 - "@parcel/logger": 2.8.3 - "@parcel/markdown-ansi": 2.8.3 - "@parcel/source-map": 2.1.1 + resolution: {integrity: sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/codeframe': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/markdown-ansi': 2.8.3 + '@parcel/source-map': 2.1.1 chalk: 4.1.2 /@parcel/watcher-android-arm64@2.3.0: - resolution: - { - integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] requiresBuild: true optional: true /@parcel/watcher-darwin-arm64@2.3.0: - resolution: - { - integrity: sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true /@parcel/watcher-darwin-x64@2.3.0: - resolution: - { - integrity: sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] requiresBuild: true optional: true /@parcel/watcher-freebsd-x64@2.3.0: - resolution: - { - integrity: sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] requiresBuild: true optional: true /@parcel/watcher-linux-arm-glibc@2.3.0: - resolution: - { - integrity: sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==} + engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] requiresBuild: true optional: true /@parcel/watcher-linux-arm64-glibc@2.3.0: - resolution: - { - integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@parcel/watcher-linux-arm64-musl@2.3.0: - resolution: - { - integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] requiresBuild: true optional: true /@parcel/watcher-linux-x64-glibc@2.3.0: - resolution: - { - integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] requiresBuild: true optional: true /@parcel/watcher-linux-x64-musl@2.3.0: - resolution: - { - integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] requiresBuild: true optional: true /@parcel/watcher-win32-arm64@2.3.0: - resolution: - { - integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] requiresBuild: true optional: true /@parcel/watcher-win32-ia32@2.3.0: - resolution: - { - integrity: sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==} + engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] requiresBuild: true optional: true /@parcel/watcher-win32-x64@2.3.0: - resolution: - { - integrity: sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] requiresBuild: true optional: true /@parcel/watcher@2.3.0: - resolution: - { - integrity: sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==} + engines: {node: '>= 10.0.0'} dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.5 node-addon-api: 7.0.0 optionalDependencies: - "@parcel/watcher-android-arm64": 2.3.0 - "@parcel/watcher-darwin-arm64": 2.3.0 - "@parcel/watcher-darwin-x64": 2.3.0 - "@parcel/watcher-freebsd-x64": 2.3.0 - "@parcel/watcher-linux-arm-glibc": 2.3.0 - "@parcel/watcher-linux-arm64-glibc": 2.3.0 - "@parcel/watcher-linux-arm64-musl": 2.3.0 - "@parcel/watcher-linux-x64-glibc": 2.3.0 - "@parcel/watcher-linux-x64-musl": 2.3.0 - "@parcel/watcher-win32-arm64": 2.3.0 - "@parcel/watcher-win32-ia32": 2.3.0 - "@parcel/watcher-win32-x64": 2.3.0 + '@parcel/watcher-android-arm64': 2.3.0 + '@parcel/watcher-darwin-arm64': 2.3.0 + '@parcel/watcher-darwin-x64': 2.3.0 + '@parcel/watcher-freebsd-x64': 2.3.0 + '@parcel/watcher-linux-arm-glibc': 2.3.0 + '@parcel/watcher-linux-arm64-glibc': 2.3.0 + '@parcel/watcher-linux-arm64-musl': 2.3.0 + '@parcel/watcher-linux-x64-glibc': 2.3.0 + '@parcel/watcher-linux-x64-musl': 2.3.0 + '@parcel/watcher-win32-arm64': 2.3.0 + '@parcel/watcher-win32-ia32': 2.3.0 + '@parcel/watcher-win32-x64': 2.3.0 /@parcel/workers@2.8.3(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==, - } - engines: { node: ">= 12.0.0" } - peerDependencies: - "@parcel/core": ^2.8.3 - dependencies: - "@parcel/core": 2.8.3 - "@parcel/diagnostic": 2.8.3 - "@parcel/logger": 2.8.3 - "@parcel/types": 2.8.3(@parcel/core@2.8.3) - "@parcel/utils": 2.8.3 + resolution: {integrity: sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.8.3) + '@parcel/utils': 2.8.3 chrome-trace-event: 1.0.3 nullthrows: 1.1.1 /@pkgr/utils@2.4.2: - resolution: - { - integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, - } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 fast-glob: 3.3.2 @@ -6421,22 +5416,19 @@ packages: dev: true /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack@5.89.0): - resolution: - { - integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==, - } - engines: { node: ">= 10.13" } - peerDependencies: - "@types/webpack": 4.x || 5.x - react-refresh: ">=0.10.0 <1.0.0" + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <5.0.0" - webpack: ">=4.43.0 <6.0.0" + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' webpack-dev-server: 3.x || 4.x webpack-hot-middleware: 2.x webpack-plugin-serve: 0.x || 1.x peerDependenciesMeta: - "@types/webpack": + '@types/webpack': optional: true sockjs-client: optional: true @@ -6462,78 +5454,95 @@ packages: webpack: 5.89.0 /@pnpm/config.env-replace@1.1.0: - resolution: - { - integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==, - } - engines: { node: ">=12.22.0" } + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} /@pnpm/network.ca-file@1.0.2: - resolution: - { - integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==, - } - engines: { node: ">=12.22.0" } + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} dependencies: graceful-fs: 4.2.10 /@pnpm/npm-conf@2.2.2: - resolution: - { - integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==, - } - engines: { node: ">=12" } - dependencies: - "@pnpm/config.env-replace": 1.1.0 - "@pnpm/network.ca-file": 1.0.2 + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 /@popperjs/core@2.11.8: - resolution: - { - integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==, - } + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@rollup/plugin-inject@5.0.5: - resolution: - { - integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==, - } - engines: { node: ">=14.0.0" } - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: + /@resolver-engine/core@0.2.1: + resolution: {integrity: sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==} + dependencies: + debug: 3.2.7 + request: 2.88.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@resolver-engine/fs@0.2.1: + resolution: {integrity: sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==} + dependencies: + '@resolver-engine/core': 0.2.1 + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@resolver-engine/imports-fs@0.2.2: + resolution: {integrity: sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==} + dependencies: + '@resolver-engine/fs': 0.2.1 + '@resolver-engine/imports': 0.2.2 + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@resolver-engine/imports@0.2.2: + resolution: {integrity: sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==} + dependencies: + '@resolver-engine/core': 0.2.1 + debug: 3.2.7 + hosted-git-info: 2.8.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@rollup/plugin-inject@5.0.5: + resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: optional: true dependencies: - "@rollup/pluginutils": 5.1.0 + '@rollup/pluginutils': 5.1.0 estree-walker: 2.0.2 magic-string: 0.30.5 dev: true /@rollup/pluginutils@5.1.0: - resolution: - { - integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - "@types/estree": 1.0.5 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 dev: true /@rollup/rollup-android-arm-eabi@4.5.1: - resolution: - { - integrity: sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==, - } + resolution: {integrity: sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==} cpu: [arm] os: [android] requiresBuild: true @@ -6541,10 +5550,7 @@ packages: optional: true /@rollup/rollup-android-arm64@4.5.1: - resolution: - { - integrity: sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==, - } + resolution: {integrity: sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==} cpu: [arm64] os: [android] requiresBuild: true @@ -6552,10 +5558,7 @@ packages: optional: true /@rollup/rollup-darwin-arm64@4.5.1: - resolution: - { - integrity: sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==, - } + resolution: {integrity: sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==} cpu: [arm64] os: [darwin] requiresBuild: true @@ -6563,10 +5566,7 @@ packages: optional: true /@rollup/rollup-darwin-x64@4.5.1: - resolution: - { - integrity: sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==, - } + resolution: {integrity: sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==} cpu: [x64] os: [darwin] requiresBuild: true @@ -6574,10 +5574,7 @@ packages: optional: true /@rollup/rollup-linux-arm-gnueabihf@4.5.1: - resolution: - { - integrity: sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==, - } + resolution: {integrity: sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==} cpu: [arm] os: [linux] requiresBuild: true @@ -6585,10 +5582,7 @@ packages: optional: true /@rollup/rollup-linux-arm64-gnu@4.5.1: - resolution: - { - integrity: sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==, - } + resolution: {integrity: sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==} cpu: [arm64] os: [linux] requiresBuild: true @@ -6596,10 +5590,7 @@ packages: optional: true /@rollup/rollup-linux-arm64-musl@4.5.1: - resolution: - { - integrity: sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==, - } + resolution: {integrity: sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==} cpu: [arm64] os: [linux] requiresBuild: true @@ -6607,10 +5598,7 @@ packages: optional: true /@rollup/rollup-linux-x64-gnu@4.5.1: - resolution: - { - integrity: sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==, - } + resolution: {integrity: sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==} cpu: [x64] os: [linux] requiresBuild: true @@ -6618,10 +5606,7 @@ packages: optional: true /@rollup/rollup-linux-x64-musl@4.5.1: - resolution: - { - integrity: sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==, - } + resolution: {integrity: sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==} cpu: [x64] os: [linux] requiresBuild: true @@ -6629,10 +5614,7 @@ packages: optional: true /@rollup/rollup-win32-arm64-msvc@4.5.1: - resolution: - { - integrity: sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==, - } + resolution: {integrity: sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==} cpu: [arm64] os: [win32] requiresBuild: true @@ -6640,10 +5622,7 @@ packages: optional: true /@rollup/rollup-win32-ia32-msvc@4.5.1: - resolution: - { - integrity: sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==, - } + resolution: {integrity: sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==} cpu: [ia32] os: [win32] requiresBuild: true @@ -6651,10 +5630,7 @@ packages: optional: true /@rollup/rollup-win32-x64-msvc@4.5.1: - resolution: - { - integrity: sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==, - } + resolution: {integrity: sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==} cpu: [x64] os: [win32] requiresBuild: true @@ -6662,104 +5638,77 @@ packages: optional: true /@scure/base@1.1.3: - resolution: - { - integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==, - } + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} dev: true /@scure/bip32@1.1.5: - resolution: - { - integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==, - } + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} dependencies: - "@noble/hashes": 1.2.0 - "@noble/secp256k1": 1.7.1 - "@scure/base": 1.1.3 + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.3 dev: true /@scure/bip32@1.3.1: - resolution: - { - integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==, - } + resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: - "@noble/curves": 1.1.0 - "@noble/hashes": 1.3.2 - "@scure/base": 1.1.3 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 dev: true /@scure/bip39@1.1.1: - resolution: - { - integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==, - } + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} dependencies: - "@noble/hashes": 1.2.0 - "@scure/base": 1.1.3 + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.3 dev: true /@scure/bip39@1.2.1: - resolution: - { - integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==, - } + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: - "@noble/hashes": 1.3.2 - "@scure/base": 1.1.3 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 dev: true /@sentry/core@5.30.0: - resolution: - { - integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==, - } - engines: { node: ">=6" } - dependencies: - "@sentry/hub": 5.30.0 - "@sentry/minimal": 5.30.0 - "@sentry/types": 5.30.0 - "@sentry/utils": 5.30.0 + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 tslib: 1.14.1 dev: true /@sentry/hub@5.30.0: - resolution: - { - integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==, - } - engines: { node: ">=6" } - dependencies: - "@sentry/types": 5.30.0 - "@sentry/utils": 5.30.0 + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 tslib: 1.14.1 dev: true /@sentry/minimal@5.30.0: - resolution: - { - integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==, - } - engines: { node: ">=6" } - dependencies: - "@sentry/hub": 5.30.0 - "@sentry/types": 5.30.0 + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 tslib: 1.14.1 dev: true /@sentry/node@5.30.0: - resolution: - { - integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==, - } - engines: { node: ">=6" } - 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 + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + 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.2 https-proxy-agent: 5.0.1 lru_map: 0.3.3 @@ -6769,283 +5718,248 @@ packages: dev: true /@sentry/tracing@5.30.0: - resolution: - { - integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==, - } - engines: { node: ">=6" } - dependencies: - "@sentry/hub": 5.30.0 - "@sentry/minimal": 5.30.0 - "@sentry/types": 5.30.0 - "@sentry/utils": 5.30.0 + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 tslib: 1.14.1 dev: true /@sentry/types@5.30.0: - resolution: - { - integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} dev: true /@sentry/utils@5.30.0: - resolution: - { - integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} dependencies: - "@sentry/types": 5.30.0 + '@sentry/types': 5.30.0 tslib: 1.14.1 dev: true /@sideway/address@4.1.4: - resolution: - { - integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==, - } + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: - "@hapi/hoek": 9.3.0 + '@hapi/hoek': 9.3.0 /@sideway/formula@3.0.1: - resolution: - { - integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==, - } + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} /@sideway/pinpoint@2.0.0: - resolution: - { - integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==, - } + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + /@sindresorhus/is@0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: false /@sindresorhus/is@4.6.0: - resolution: - { - integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} /@sindresorhus/is@5.6.0: - resolution: - { - integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} /@sindresorhus/slugify@1.1.2: - resolution: - { - integrity: sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==} + engines: {node: '>=10'} dependencies: - "@sindresorhus/transliterate": 0.1.2 + '@sindresorhus/transliterate': 0.1.2 escape-string-regexp: 4.0.0 /@sindresorhus/transliterate@0.1.2: - resolution: - { - integrity: sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 lodash.deburr: 4.1.0 /@smithy/types@2.6.0: - resolution: - { - integrity: sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==} + engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 dev: true /@socket.io/component-emitter@3.1.0: - resolution: - { - integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==, - } + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} /@solidity-parser/parser@0.14.5: - resolution: - { - integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==, - } + resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} dependencies: antlr4ts: 0.5.0-alpha.4 - dev: true /@solidity-parser/parser@0.16.2: - resolution: - { - integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==, - } + resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==} dependencies: antlr4ts: 0.5.0-alpha.4 dev: true + /@stablelib/binary@0.7.2: + resolution: {integrity: sha512-J7iGppeKR112ICTZTAoALcT3yBpTrd2Z/F0wwiOUZPVPTDFTQFWHZZdYzfal9+mY1uMUPRSEnNmDuXRZbtE8Xg==} + dependencies: + '@stablelib/int': 0.5.0 + dev: false + + /@stablelib/blake2s@0.10.4: + resolution: {integrity: sha512-IasdklC7YfXXLmVbnsxqmd66+Ki+Ysbp0BtcrNxAtrGx/HRGjkUZbSTbEa7HxFhBWIstJRcE5ExgY+RCqAiULQ==} + dependencies: + '@stablelib/binary': 0.7.2 + '@stablelib/hash': 0.5.0 + '@stablelib/wipe': 0.5.0 + dev: false + + /@stablelib/blake2xs@0.10.4: + resolution: {integrity: sha512-1N0S4cruso/StV9TmoujPGj3RU0Cy42wlZneBWLWby7m2ssnY57l/CsYQSm03TshOoYss4hqc5kwSy5pmWAdUA==} + dependencies: + '@stablelib/blake2s': 0.10.4 + '@stablelib/hash': 0.5.0 + '@stablelib/wipe': 0.5.0 + dev: false + + /@stablelib/hash@0.5.0: + resolution: {integrity: sha512-rlNEBTskjKVl9f4rpRgM2GV3IrZWfNJFY5Y/2tmQtA2ozEkPLoUp9J/uJnBRnOpCsuflPW2z+pwqPbEYOPCHwQ==} + dev: false + + /@stablelib/int@0.5.0: + resolution: {integrity: sha512-cuaPoxm3K14LiEICiA3iz0aeGurg75v+haZMV+xloVTw3CT25oMRJgQ6VxZ2p2cHy4kjhVI68kX4oaYrhnTm+g==} + dev: false + + /@stablelib/wipe@0.5.0: + resolution: {integrity: sha512-SifvRV0rTTFR1qEF6G1hondGZyrmiM1laR8PPrO6TZwQG03hJduVbUX8uQk+Q6FdkND2Z9B8uLPyUAquQIk3iA==} + dev: false + + /@summa-tx/bitcoin-spv-sol@3.1.0: + resolution: {integrity: sha512-YIwxTNCTIsL+qgzcMhzQk9f0A7yQ6dimlLj4i3gGhWrnqBIg3ljBxJ/aj9JRQyIdNDoCPmqS2s8ZZIdyM+vaGQ==} + dev: false + + /@summa-tx/relay-sol@2.0.2: + resolution: {integrity: sha512-r5pNimQwpHklxrP+LAvNrhz4jdngVw8ret/98Ls1rLhleVCKKOFHpsRnh9zUzIDqlhIOOQwTZNe5wn7Ex63HNA==} + dependencies: + '@celo/contractkit': 0.3.8 + '@summa-tx/bitcoin-spv-sol': 3.1.0 + bn.js: 5.2.1 + dotenv: 8.6.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@swc/helpers@0.4.14: - resolution: - { - integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==, - } + resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: tslib: 2.6.2 /@swc/helpers@0.4.36: - resolution: - { - integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==, - } + resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} dependencies: legacy-swc-helpers: /@swc/helpers@0.4.14 tslib: 2.6.2 + /@szmarczak/http-timer@1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + dependencies: + defer-to-connect: 1.1.3 + dev: false + /@szmarczak/http-timer@4.0.6: - resolution: - { - integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 /@szmarczak/http-timer@5.0.1: - resolution: - { - integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} dependencies: defer-to-connect: 2.0.1 /@tanstack/react-table@8.11.3(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-Gwwm7po1MaObBguw69L+UiACkaj+eOtThQEArj/3fmUwMPiWaJcXvNG2X5Te5z2hg0HMx8h0T0Q7p5YmQlTUfw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Gwwm7po1MaObBguw69L+UiACkaj+eOtThQEArj/3fmUwMPiWaJcXvNG2X5Te5z2hg0HMx8h0T0Q7p5YmQlTUfw==} + engines: {node: '>=12'} peerDependencies: - react: ">=16" - react-dom: ">=16" + react: '>=16' + react-dom: '>=16' dependencies: - "@tanstack/table-core": 8.11.3 + '@tanstack/table-core': 8.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@tanstack/table-core@8.11.3: - resolution: - { - integrity: sha512-nkcFIL696wTf1QMvhGR7dEg60OIRwEZm1OqFTYYDTRc4JOWspgrsJO3IennsOJ7ptumHWLDjV8e5BjPkZcSZAQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-nkcFIL696wTf1QMvhGR7dEg60OIRwEZm1OqFTYYDTRc4JOWspgrsJO3IennsOJ7ptumHWLDjV8e5BjPkZcSZAQ==} + engines: {node: '>=12'} dev: false - /@thesis-co/eslint-config@0.6.1(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-0vJCCI4UwUdniDCQeTFlMBT+bSp5pGkrtHrZrG2vmyLZwSVdJNtInjkBc/Jd0sGfMtPo3pqQRwA40Zo80lPi+Q==, - } - engines: { node: ">=14.0.0" } + /@threshold-network/solidity-contracts@1.3.0-dev.11(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-QQJB17BvuU/7UaitneoD7zFmIA3fZQ3FAvOAP2q+FkWEBZPYtAMf3+vB7y+Y+QlrcUl1kcA9wXD5auirsdxCBQ==} peerDependencies: - eslint: ">=6.8.0" + '@keep-network/keep-core': '>1.8.1-dev <1.8.1-goerli' dependencies: - "@thesis-co/prettier-config": github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0) - "@typescript-eslint/eslint-plugin": 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) - eslint: 8.54.0 - eslint-config-airbnb: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.54.0) - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.54.0) - eslint-config-airbnb-typescript: 17.1.0(@typescript-eslint/eslint-plugin@6.12.0)(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.1)(eslint@8.54.0) - eslint-config-prettier: 9.0.0(eslint@8.54.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.12.0)(eslint@8.54.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.54.0) - eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0) - eslint-plugin-react: 7.33.2(eslint@8.54.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0) - transitivePeerDependencies: - - "@types/eslint" - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - prettier - - supports-color - - typescript - dev: true + '@keep-network/keep-core': 1.8.1-dev.0 + '@openzeppelin/contracts': 4.5.0 + '@openzeppelin/contracts-upgradeable': 4.5.2 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + dev: false + + /@threshold-network/solidity-contracts@1.3.0-dev.8(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-s6SFZyf1xXgOdMK1zYnjsURnVz7Xxzf0z/34vH+hDg8n/G8L0jPR6Iz4laWSSL2y1P3ffFAFTUMvwfJMJitfVw==} + peerDependencies: + '@keep-network/keep-core': '>1.8.1-dev <1.8.1-goerli' + dependencies: + '@keep-network/keep-core': 1.8.1-dev.0 + '@openzeppelin/contracts': 4.5.0 + '@openzeppelin/contracts-upgradeable': 4.5.2 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + dev: false /@tokenizer/token@0.3.0: - resolution: - { - integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==, - } + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} /@trysound/sax@0.2.0: - resolution: - { - integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} /@tsconfig/node10@1.0.9: - resolution: - { - integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==, - } + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true /@tsconfig/node12@1.0.11: - resolution: - { - integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, - } + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true /@tsconfig/node14@1.0.3: - resolution: - { - integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, - } + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true /@tsconfig/node16@1.0.4: - resolution: - { - integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==, - } + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true /@turist/fetch@7.2.0(node-fetch@2.7.0): - resolution: - { - integrity: sha512-2x7EGw+6OJ29phunsbGvtxlNmSfcuPcyYudkMbi8gARCP9eJ1CtuMvnVUHL//O9Ixi9SJiug8wNt6lj86pN8XQ==, - } + resolution: {integrity: sha512-2x7EGw+6OJ29phunsbGvtxlNmSfcuPcyYudkMbi8gARCP9eJ1CtuMvnVUHL//O9Ixi9SJiug8wNt6lj86pN8XQ==} peerDependencies: - node-fetch: "2" + node-fetch: '2' dependencies: - "@types/node-fetch": 2.6.9 + '@types/node-fetch': 2.6.9 node-fetch: 2.7.0 /@turist/time@0.0.2: - resolution: - { - integrity: sha512-qLOvfmlG2vCVw5fo/oz8WAZYlpe5a5OurgTj3diIxJCdjRHpapC+vQCz3er9LV79Vcat+DifBjeAhOAdmndtDQ==, - } + resolution: {integrity: sha512-qLOvfmlG2vCVw5fo/oz8WAZYlpe5a5OurgTj3diIxJCdjRHpapC+vQCz3er9LV79Vcat+DifBjeAhOAdmndtDQ==} /@typechain/ethers-v6@0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2): - resolution: - { - integrity: sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==, - } + resolution: {integrity: sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==} peerDependencies: ethers: 6.x typechain: ^8.3.2 - typescript: ">=4.7.0" + typescript: '>=4.7.0' dependencies: ethers: 6.8.1 lodash: 4.17.21 @@ -7055,17 +5969,14 @@ packages: dev: true /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.8.1)(hardhat@2.19.1)(typechain@8.3.2): - resolution: - { - integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==, - } + resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} peerDependencies: - "@typechain/ethers-v6": ^0.5.1 + '@typechain/ethers-v6': ^0.5.1 ethers: ^6.1.0 hardhat: ^2.9.9 typechain: ^8.3.2 dependencies: - "@typechain/ethers-v6": 0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2) + '@typechain/ethers-v6': 0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2) ethers: 6.8.1 fs-extra: 9.1.0 hardhat: 2.19.1(ts-node@10.9.1)(typescript@5.3.2) @@ -7073,472 +5984,359 @@ packages: dev: true /@types/babel__core@7.20.5: - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, - } + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - "@babel/parser": 7.23.4 - "@babel/types": 7.23.4 - "@types/babel__generator": 7.6.7 - "@types/babel__template": 7.4.4 - "@types/babel__traverse": 7.20.4 + '@babel/parser': 7.23.4 + '@babel/types': 7.23.4 + '@types/babel__generator': 7.6.7 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 dev: true /@types/babel__generator@7.6.7: - resolution: - { - integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==, - } + resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 dev: true /@types/babel__template@7.4.4: - resolution: - { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, - } + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - "@babel/parser": 7.23.4 - "@babel/types": 7.23.4 + '@babel/parser': 7.23.4 + '@babel/types': 7.23.4 dev: true /@types/babel__traverse@7.20.4: - resolution: - { - integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==, - } + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - "@babel/types": 7.23.4 + '@babel/types': 7.23.4 dev: true + /@types/bignumber.js@5.0.0: + resolution: {integrity: sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==} + deprecated: This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed! + dependencies: + bignumber.js: 9.1.2 + dev: false + /@types/bn.js@4.11.6: - resolution: - { - integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==, - } + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - "@types/node": 20.9.4 - dev: true + '@types/node': 20.9.4 /@types/bn.js@5.1.5: - resolution: - { - integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==, - } + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} dependencies: - "@types/node": 20.9.4 - dev: true + '@types/node': 20.9.4 /@types/cacheable-request@6.0.3: - resolution: - { - integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==, - } + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 20.9.4 + '@types/responselike': 1.0.3 + + /@types/cbor@2.0.0: + resolution: {integrity: sha512-yQH0JLcrHrH/GBIFFFq6DAsj9M4rmYsmSpGGGs67JrLGWPepYr2c1YugGjMd2Ib5pebluRAfNPJ4O1p80qX9HQ==} dependencies: - "@types/http-cache-semantics": 4.0.4 - "@types/keyv": 3.1.4 - "@types/node": 20.9.4 - "@types/responselike": 1.0.3 + '@types/node': 20.9.4 + dev: false /@types/chai-as-promised@7.1.8: - resolution: - { - integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==, - } + resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} dependencies: - "@types/chai": 4.3.11 + '@types/chai': 4.3.11 dev: true /@types/chai@4.3.11: - resolution: - { - integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==, - } + resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} dev: true /@types/common-tags@1.8.4: - resolution: - { - integrity: sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==, - } + resolution: {integrity: sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==} /@types/concat-stream@1.6.1: - resolution: - { - integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==, - } + resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 dev: true /@types/configstore@2.1.1: - resolution: - { - integrity: sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ==, - } + resolution: {integrity: sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ==} /@types/cookie@0.4.1: - resolution: - { - integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==, - } + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} /@types/cors@2.8.17: - resolution: - { - integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==, - } + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 + + /@types/country-data@0.0.0: + resolution: {integrity: sha512-lIxCk6G7AwmUagQ4gIQGxUBnvAq664prFD9nSAz6dgd1XmBXBtZABV/op+QsJsIyaP1GZsf/iXhYKHX3azSRCw==} + dev: false /@types/debug@0.0.30: - resolution: - { - integrity: sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==, - } + resolution: {integrity: sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==} + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + + /@types/elliptic@6.4.18: + resolution: {integrity: sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==} + dependencies: + '@types/bn.js': 5.1.5 + dev: false /@types/eslint-scope@3.7.7: - resolution: - { - integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, - } + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - "@types/eslint": 8.44.7 - "@types/estree": 1.0.5 + '@types/eslint': 8.44.7 + '@types/estree': 1.0.5 /@types/eslint@7.29.0: - resolution: - { - integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==, - } + resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} dependencies: - "@types/estree": 1.0.5 - "@types/json-schema": 7.0.15 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 /@types/eslint@8.44.7: - resolution: - { - integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==, - } + resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==} dependencies: - "@types/estree": 1.0.5 - "@types/json-schema": 7.0.15 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 /@types/estree@1.0.5: - resolution: - { - integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, - } + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/ethereumjs-util@5.2.0: + resolution: {integrity: sha512-qwQgQqXXTRv2h2AlJef+tMEszLFkCB9dWnrJYIdAwqjubERXEc/geB+S3apRw0yQyTVnsBf8r6BhlrE8vx+3WQ==} + dependencies: + '@types/bn.js': 5.1.5 + '@types/node': 20.9.4 + dev: false /@types/form-data@0.0.33: - resolution: - { - integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==, - } + resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 dev: true /@types/get-port@3.2.0: - resolution: - { - integrity: sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==, - } + resolution: {integrity: sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==} /@types/glob@5.0.38: - resolution: - { - integrity: sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==, - } + resolution: {integrity: sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==} dependencies: - "@types/minimatch": 5.1.2 - "@types/node": 20.9.4 + '@types/minimatch': 5.1.2 + '@types/node': 20.9.4 /@types/glob@7.2.0: - resolution: - { - integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, - } + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: - "@types/minimatch": 5.1.2 - "@types/node": 20.9.4 + '@types/minimatch': 5.1.2 + '@types/node': 20.9.4 + + /@types/google-libphonenumber@7.4.30: + resolution: {integrity: sha512-Td1X1ayRxePEm6/jPHUBs2tT6TzW1lrVB6ZX7ViPGellyzO/0xMNi+wx5nH6jEitjznq276VGIqjK5qAju0XVw==} + dev: false /@types/hoist-non-react-statics@3.3.5: - resolution: - { - integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==, - } + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 hoist-non-react-statics: 3.3.2 dev: false /@types/http-cache-semantics@4.0.4: - resolution: - { - integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==, - } + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} /@types/http-proxy@1.17.14: - resolution: - { - integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==, - } + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 /@types/json-schema@7.0.15: - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} /@types/json5@0.0.29: - resolution: - { - integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, - } + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} /@types/keyv@3.1.4: - resolution: - { - integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==, - } + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 /@types/lodash.mergewith@4.6.7: - resolution: - { - integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==, - } + resolution: {integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==} dependencies: - "@types/lodash": 4.14.202 + '@types/lodash': 4.14.202 dev: false /@types/lodash@4.14.202: - resolution: - { - integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==, - } + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} /@types/lru-cache@5.1.1: - resolution: - { - integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==, - } + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: true /@types/minimatch@5.1.2: - resolution: - { - integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, - } + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} /@types/mkdirp@0.5.2: - resolution: - { - integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==, - } + resolution: {integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 /@types/mocha@10.0.6: - resolution: - { - integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==, - } + resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + /@types/node-fetch@2.6.9: - resolution: - { - integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==, - } + resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 form-data: 4.0.0 + /@types/node@10.12.18: + resolution: {integrity: sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==} + dev: false + /@types/node@10.17.60: - resolution: - { - integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==, - } - dev: true + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + /@types/node@11.11.6: + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} + dev: false + + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: false /@types/node@18.15.13: - resolution: - { - integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==, - } + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: true /@types/node@20.9.4: - resolution: - { - integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==, - } + resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==} dependencies: undici-types: 5.26.5 /@types/node@8.10.66: - resolution: - { - integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==, - } + resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} /@types/parse-json@4.0.2: - resolution: - { - integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, - } + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} /@types/pbkdf2@3.1.2: - resolution: - { - integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==, - } + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} dependencies: - "@types/node": 20.9.4 - dev: true + '@types/node': 20.9.4 /@types/prettier@2.7.3: - resolution: - { - integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==, - } + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true /@types/prop-types@15.7.11: - resolution: - { - integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==, - } + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} /@types/qs@6.9.10: - resolution: - { - integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==, - } + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} dev: true + /@types/randombytes@2.0.3: + resolution: {integrity: sha512-+NRgihTfuURllWCiIAhm1wsJqzsocnqXM77V/CalsdJIYSRGEHMnritxh+6EsBklshC+clo1KgnN14qgSGeQdw==} + dependencies: + '@types/node': 20.9.4 + dev: false + /@types/reach__router@1.3.14: - resolution: - { - integrity: sha512-2iOQZbwfw1ZYwYK+dRp7D1b8kU6GlFPJ/iEt33zDYxfId5CAKT7vX3lN/XmJ+FaMZ3FyB99tPgfajcmZnTqdtg==, - } + resolution: {integrity: sha512-2iOQZbwfw1ZYwYK+dRp7D1b8kU6GlFPJ/iEt33zDYxfId5CAKT7vX3lN/XmJ+FaMZ3FyB99tPgfajcmZnTqdtg==} dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 /@types/react-dom@18.2.17: - resolution: - { - integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==, - } + resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 dev: true /@types/react-helmet@6.1.9: - resolution: - { - integrity: sha512-nuOeTefP4yPTWHvjGksCBKb/4hsgJxSX7aSTjTIDFXJIkZ6Wo2Y4/cmE1FO9OlYBrHjKOer/0zLwY7s4qiQBtw==, - } + resolution: {integrity: sha512-nuOeTefP4yPTWHvjGksCBKb/4hsgJxSX7aSTjTIDFXJIkZ6Wo2Y4/cmE1FO9OlYBrHjKOer/0zLwY7s4qiQBtw==} dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 dev: true /@types/react@18.2.38: - resolution: - { - integrity: sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==, - } + resolution: {integrity: sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==} dependencies: - "@types/prop-types": 15.7.11 - "@types/scheduler": 0.16.8 + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 csstype: 3.1.2 /@types/readable-stream@2.3.15: - resolution: - { - integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==, - } + resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 safe-buffer: 5.1.2 dev: true /@types/responselike@1.0.3: - resolution: - { - integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==, - } + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 /@types/rimraf@2.0.5: - resolution: - { - integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==, - } + resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} dependencies: - "@types/glob": 7.2.0 - "@types/node": 20.9.4 + '@types/glob': 7.2.0 + '@types/node': 20.9.4 /@types/scheduler@0.16.8: - resolution: - { - integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==, - } + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} /@types/secp256k1@4.0.6: - resolution: - { - integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==, - } + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: - "@types/node": 20.9.4 - dev: true + '@types/node': 20.9.4 /@types/semver@7.5.6: - resolution: - { - integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==, - } + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} /@types/tmp@0.0.33: - resolution: - { - integrity: sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==, - } + resolution: {integrity: sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==} + + /@types/utf8@2.1.6: + resolution: {integrity: sha512-pRs2gYF5yoKYrgSaira0DJqVg2tFuF+Qjp838xS7K+mJyY2jJzjsrl6y17GbIa4uMRogMbxs+ghNCvKg6XyNrA==} + dev: false /@types/yoga-layout@1.9.2: - resolution: - { - integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==, - } + resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - "@typescript-eslint/parser": ^5.0.0 + '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@eslint-community/regexpp": 4.10.0 - "@typescript-eslint/parser": 5.62.0(eslint@7.32.0)(typescript@5.3.2) - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/type-utils": 5.62.0(eslint@7.32.0)(typescript@5.3.2) - "@typescript-eslint/utils": 5.62.0(eslint@7.32.0)(typescript@5.3.2) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@7.32.0)(typescript@5.3.2) + '@typescript-eslint/utils': 5.62.0(eslint@7.32.0)(typescript@5.3.2) debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 graphemer: 1.4.0 @@ -7551,25 +6349,22 @@ packages: - supports-color /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@eslint-community/regexpp": 4.10.0 - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/scope-manager": 6.12.0 - "@typescript-eslint/type-utils": 6.12.0(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/utils": 6.12.0(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/visitor-keys": 6.12.0 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.12.0 + '@typescript-eslint/type-utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.12.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 graphemer: 1.4.0 @@ -7583,21 +6378,18 @@ packages: dev: true /@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0(typescript@5.3.2) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 typescript: 5.3.2 @@ -7605,22 +6397,19 @@ packages: - supports-color /@typescript-eslint/parser@6.12.0(eslint@8.54.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/scope-manager": 6.12.0 - "@typescript-eslint/types": 6.12.0 - "@typescript-eslint/typescript-estree": 6.12.0(typescript@5.3.2) - "@typescript-eslint/visitor-keys": 6.12.0 + '@typescript-eslint/scope-manager': 6.12.0 + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.12.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 typescript: 5.3.2 @@ -7628,40 +6417,31 @@ packages: - supports-color /@typescript-eslint/scope-manager@5.62.0: - resolution: - { - integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 /@typescript-eslint/scope-manager@6.12.0: - resolution: - { - integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - "@typescript-eslint/types": 6.12.0 - "@typescript-eslint/visitor-keys": 6.12.0 + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/visitor-keys': 6.12.0 /@typescript-eslint/type-utils@5.62.0(eslint@7.32.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - peerDependencies: - eslint: "*" - typescript: "*" + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/typescript-estree": 5.62.0(typescript@5.3.2) - "@typescript-eslint/utils": 5.62.0(eslint@7.32.0)(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) + '@typescript-eslint/utils': 5.62.0(eslint@7.32.0)(typescript@5.3.2) debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 tsutils: 3.21.0(typescript@5.3.2) @@ -7670,20 +6450,17 @@ packages: - supports-color /@typescript-eslint/type-utils@6.12.0(eslint@8.54.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/typescript-estree": 6.12.0(typescript@5.3.2) - "@typescript-eslint/utils": 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) + '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 ts-api-utils: 1.0.3(typescript@5.3.2) @@ -7693,33 +6470,24 @@ packages: dev: true /@typescript-eslint/types@5.62.0: - resolution: - { - integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /@typescript-eslint/types@6.12.0: - resolution: - { - integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==} + engines: {node: ^16.0.0 || >=18.0.0} /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.2): - resolution: - { - integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -7730,19 +6498,16 @@ packages: - supports-color /@typescript-eslint/typescript-estree@6.12.0(typescript@5.3.2): - resolution: - { - integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/types": 6.12.0 - "@typescript-eslint/visitor-keys": 6.12.0 + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/visitor-keys': 6.12.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -7753,20 +6518,17 @@ packages: - supports-color /@typescript-eslint/utils@5.62.0(eslint@7.32.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@7.32.0) - "@types/json-schema": 7.0.15 - "@types/semver": 7.5.6 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0(typescript@5.3.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.2) eslint: 7.32.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -7775,20 +6537,17 @@ packages: - typescript /@typescript-eslint/utils@6.12.0(eslint@8.54.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.54.0) - "@types/json-schema": 7.0.15 - "@types/semver": 7.5.6 - "@typescript-eslint/scope-manager": 6.12.0 - "@typescript-eslint/types": 6.12.0 - "@typescript-eslint/typescript-estree": 6.12.0(typescript@5.3.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.12.0 + '@typescript-eslint/types': 6.12.0 + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) eslint: 8.54.0 semver: 7.5.4 transitivePeerDependencies: @@ -7797,248 +6556,188 @@ packages: dev: true /@typescript-eslint/visitor-keys@5.62.0: - resolution: - { - integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - "@typescript-eslint/types": 5.62.0 + '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 /@typescript-eslint/visitor-keys@6.12.0: - resolution: - { - integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - "@typescript-eslint/types": 6.12.0 + '@typescript-eslint/types': 6.12.0 eslint-visitor-keys: 3.4.3 /@ungap/structured-clone@1.2.0: - resolution: - { - integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, - } + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} /@vercel/webpack-asset-relocator-loader@1.7.3: - resolution: - { - integrity: sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g==, - } + resolution: {integrity: sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g==} dependencies: resolve: 1.22.8 /@vitejs/plugin-react@4.2.0(vite@5.0.2): - resolution: - { - integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/plugin-transform-react-jsx-self": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-react-jsx-source": 7.23.3(@babel/core@7.23.3) - "@types/babel__core": 7.20.5 + '@babel/core': 7.23.3 + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.3) + '@types/babel__core': 7.20.5 react-refresh: 0.14.0 vite: 5.0.2 transitivePeerDependencies: - supports-color dev: true + /@web3-js/scrypt-shim@0.1.0: + resolution: {integrity: sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw==} + deprecated: This package is deprecated, for a pure JS implementation please use scrypt-js + requiresBuild: true + dependencies: + scryptsy: 2.1.0 + semver: 6.3.1 + dev: false + + /@web3-js/websocket@1.0.30: + resolution: {integrity: sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==} + engines: {node: '>=0.10.0'} + deprecated: The branch for this fork was merged upstream, please update your package to websocket@1.0.31 + requiresBuild: true + dependencies: + debug: 2.6.9 + es5-ext: 0.10.62 + nan: 2.18.0 + typedarray-to-buffer: 3.1.5 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + dev: false + /@webassemblyjs/ast@1.11.6: - resolution: - { - integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==, - } + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: - "@webassemblyjs/helper-numbers": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: - { - integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==, - } + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} /@webassemblyjs/helper-api-error@1.11.6: - resolution: - { - integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==, - } + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} /@webassemblyjs/helper-buffer@1.11.6: - resolution: - { - integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==, - } + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} /@webassemblyjs/helper-numbers@1.11.6: - resolution: - { - integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==, - } + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.6 - "@webassemblyjs/helper-api-error": 1.11.6 - "@xtuc/long": 4.2.2 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: - { - integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==, - } + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: - { - integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==, - } + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-buffer": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/wasm-gen": 1.11.6 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 /@webassemblyjs/ieee754@1.11.6: - resolution: - { - integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==, - } + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: - "@xtuc/ieee754": 1.2.0 + '@xtuc/ieee754': 1.2.0 /@webassemblyjs/leb128@1.11.6: - resolution: - { - integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==, - } + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: - "@xtuc/long": 4.2.2 + '@xtuc/long': 4.2.2 /@webassemblyjs/utf8@1.11.6: - resolution: - { - integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==, - } + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} /@webassemblyjs/wasm-edit@1.11.6: - resolution: - { - integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==, - } - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-buffer": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/helper-wasm-section": 1.11.6 - "@webassemblyjs/wasm-gen": 1.11.6 - "@webassemblyjs/wasm-opt": 1.11.6 - "@webassemblyjs/wasm-parser": 1.11.6 - "@webassemblyjs/wast-printer": 1.11.6 + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 /@webassemblyjs/wasm-gen@1.11.6: - resolution: - { - integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==, - } + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/ieee754": 1.11.6 - "@webassemblyjs/leb128": 1.11.6 - "@webassemblyjs/utf8": 1.11.6 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 /@webassemblyjs/wasm-opt@1.11.6: - resolution: - { - integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==, - } + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-buffer": 1.11.6 - "@webassemblyjs/wasm-gen": 1.11.6 - "@webassemblyjs/wasm-parser": 1.11.6 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 /@webassemblyjs/wasm-parser@1.11.6: - resolution: - { - integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==, - } - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-api-error": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/ieee754": 1.11.6 - "@webassemblyjs/leb128": 1.11.6 - "@webassemblyjs/utf8": 1.11.6 + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 /@webassemblyjs/wast-printer@1.11.6: - resolution: - { - integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==, - } + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} dependencies: - "@webassemblyjs/ast": 1.11.6 - "@xtuc/long": 4.2.2 + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 /@xtuc/ieee754@1.2.0: - resolution: - { - integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, - } + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} /@xtuc/long@4.2.2: - resolution: - { - integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, - } + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} /@zag-js/dom-query@0.16.0: - resolution: - { - integrity: sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==, - } + resolution: {integrity: sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==} dev: false /@zag-js/element-size@0.10.5: - resolution: - { - integrity: sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==, - } + resolution: {integrity: sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==} dev: false /@zag-js/focus-visible@0.16.0: - resolution: - { - integrity: sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==, - } + resolution: {integrity: sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==} dependencies: - "@zag-js/dom-query": 0.16.0 + '@zag-js/dom-query': 0.16.0 dev: false /abbrev@1.0.9: - resolution: - { - integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==, - } + resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true /abortcontroller-polyfill@1.7.5: - resolution: - { - integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==, - } + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} /abstract-level@1.0.3: - resolution: - { - integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} + engines: {node: '>=12'} dependencies: buffer: 6.0.3 catering: 2.1.1 @@ -8050,120 +6749,77 @@ packages: dev: true /accepts@1.3.8: - resolution: - { - integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 /acorn-import-assertions@1.9.0(acorn@8.11.2): - resolution: - { - integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==, - } + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: acorn: 8.11.2 /acorn-jsx@5.3.2(acorn@7.4.1): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 7.4.1 /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.11.2 /acorn-loose@8.4.0: - resolution: - { - integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==} + engines: {node: '>=0.4.0'} dependencies: acorn: 8.11.2 /acorn-walk@8.3.0: - resolution: - { - integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + engines: {node: '>=0.4.0'} /acorn@6.4.2: - resolution: - { - integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} hasBin: true /acorn@7.4.1: - resolution: - { - integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} hasBin: true /acorn@8.11.2: - resolution: - { - integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} hasBin: true /address@1.2.2: - resolution: - { - integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} /adm-zip@0.4.16: - resolution: - { - integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==, - } - engines: { node: ">=0.3.0" } + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} dev: true /aes-js@3.0.0: - resolution: - { - integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==, - } - dev: true + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} /aes-js@4.0.0-beta.5: - resolution: - { - integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==, - } + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} dev: true /agent-base@6.0.2: - resolution: - { - integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, - } - engines: { node: ">= 6.0.0" } + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} dependencies: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: @@ -8171,31 +6827,22 @@ packages: dev: true /aggregate-error@3.1.0: - resolution: - { - integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 dev: true /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: - { - integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, - } + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 dependencies: ajv: 6.12.6 /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -8203,10 +6850,7 @@ packages: uri-js: 4.4.1 /ajv@8.12.0: - resolution: - { - integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, - } + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -8214,12 +6858,9 @@ packages: uri-js: 4.4.1 /amazon-cognito-identity-js@6.3.7: - resolution: - { - integrity: sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ==, - } + resolution: {integrity: sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ==} dependencies: - "@aws-crypto/sha256-js": 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 buffer: 4.9.2 fast-base64-decode: 1.0.0 isomorphic-unfetch: 3.1.0 @@ -8229,227 +6870,146 @@ packages: dev: true /amdefine@1.0.1: - resolution: - { - integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==, - } - engines: { node: ">=0.4.2" } + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} requiresBuild: true dev: true optional: true /anser@2.1.1: - resolution: - { - integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==, - } + resolution: {integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==} /ansi-align@3.0.1: - resolution: - { - integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==, - } + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 + /ansi-colors@3.2.3: + resolution: {integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==} + engines: {node: '>=6'} + dev: false + /ansi-colors@4.1.1: - resolution: - { - integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} dev: true /ansi-colors@4.1.3: - resolution: - { - integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} /ansi-escapes@4.3.2: - resolution: - { - integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 /ansi-html-community@0.0.8: - resolution: - { - integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==, - } - engines: { "0": node >= 0.8.0 } + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} hasBin: true /ansi-regex@2.1.1: - resolution: - { - integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} /ansi-regex@3.0.1: - resolution: - { - integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==, - } - engines: { node: ">=4" } - dev: true + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} /ansi-regex@4.1.1: - resolution: - { - integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} /ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} /ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 /ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 /antlr4@4.13.1: - resolution: - { - integrity: sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==} + engines: {node: '>=16'} dev: true /antlr4ts@0.5.0-alpha.4: - resolution: - { - integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==, - } - dev: true + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false /anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 /append-field@1.0.0: - resolution: - { - integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==, - } + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} /application-config-path@0.1.1: - resolution: - { - integrity: sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==, - } + resolution: {integrity: sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==} /arch@2.2.0: - resolution: - { - integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, - } + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} /arg@4.1.3: - resolution: - { - integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, - } - dev: true + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} /argparse@1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, - } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 /argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} /aria-hidden@1.2.3: - resolution: - { - integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} dependencies: tslib: 2.6.2 dev: false /aria-query@5.3.0: - resolution: - { - integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, - } + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 /array-back@3.1.0: - resolution: - { - integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} dev: true /array-back@4.0.2: - resolution: - { - integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} dev: true /array-buffer-byte-length@1.0.0: - resolution: - { - integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, - } + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: call-bind: 1.0.5 is-array-buffer: 3.0.2 /array-flatten@1.1.1: - resolution: - { - integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, - } + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} /array-includes@3.1.7: - resolution: - { - integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -8458,26 +7018,17 @@ packages: is-string: 1.0.7 /array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} /array-uniq@1.0.3: - resolution: - { - integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} dev: true /array.prototype.findlast@1.2.3: - resolution: - { - integrity: sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -8487,11 +7038,8 @@ packages: dev: true /array.prototype.findlastindex@1.2.3: - resolution: - { - integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -8500,11 +7048,8 @@ packages: get-intrinsic: 1.2.2 /array.prototype.flat@1.3.2: - resolution: - { - integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -8512,22 +7057,27 @@ packages: es-shim-unscopables: 1.0.2 /array.prototype.flatmap@1.3.2: - resolution: - { - integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: false + /array.prototype.tosorted@1.1.2: - resolution: - { - integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==, - } + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -8536,11 +7086,8 @@ packages: get-intrinsic: 1.2.2 /arraybuffer.prototype.slice@1.0.2: - resolution: - { - integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.5 @@ -8551,35 +7098,33 @@ packages: is-shared-array-buffer: 1.0.2 /arrify@2.0.1: - resolution: - { - integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} /asap@2.0.6: - resolution: - { - integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==, - } + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} /asn1.js@5.4.1: - resolution: - { - integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==, - } + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 inherits: 2.0.4 minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 - dev: true + + /asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: false /assert@2.1.0: - resolution: - { - integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==, - } + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} dependencies: call-bind: 1.0.5 is-nan: 1.3.2 @@ -8589,81 +7134,51 @@ packages: dev: true /assertion-error@1.1.0: - resolution: - { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, - } - dev: true + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} /ast-parents@0.0.1: - resolution: - { - integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==, - } + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} dev: true /ast-types-flow@0.0.8: - resolution: - { - integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, - } + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} /astral-regex@2.0.0: - resolution: - { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: false /async-retry@1.3.3: - resolution: - { - integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==, - } + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} dependencies: retry: 0.13.1 dev: true /async@1.5.2: - resolution: - { - integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==, - } + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} /asynciterator.prototype@1.0.0: - resolution: - { - integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==, - } + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: has-symbols: 1.0.3 /asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, - } + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} /at-least-node@1.0.0: - resolution: - { - integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, - } - engines: { node: ">= 4.0.0" } + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} /auto-bind@4.0.0: - resolution: - { - integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} /autoprefixer@10.4.16(postcss@8.4.31): - resolution: - { - integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 @@ -8677,34 +7192,40 @@ packages: postcss-value-parser: 4.2.0 /available-typed-arrays@1.0.5: - resolution: - { - integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + /aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: false + + /aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: false /axe-core@4.7.0: - resolution: - { - integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + + /axios@0.18.1: + resolution: {integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==} + deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 + dependencies: + follow-redirects: 1.5.10 + is-buffer: 2.0.5 + transitivePeerDependencies: + - supports-color + dev: false /axios@0.21.4(debug@4.3.4): - resolution: - { - integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==, - } + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: follow-redirects: 1.15.3(debug@4.3.4) transitivePeerDependencies: - debug /axios@1.6.2(debug@4.3.4): - resolution: - { - integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==, - } + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} dependencies: follow-redirects: 1.15.3(debug@4.3.4) form-data: 4.0.0 @@ -8714,34 +7235,25 @@ packages: dev: true /axobject-query@3.2.1: - resolution: - { - integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==, - } + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: dequal: 2.0.3 /b4a@1.6.4: - resolution: - { - integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==, - } + resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} requiresBuild: true /babel-eslint@10.1.0(eslint@8.54.0): - resolution: - { - integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} + engines: {node: '>=6'} deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. peerDependencies: - eslint: ">= 4.12.1" + eslint: '>= 4.12.1' dependencies: - "@babel/code-frame": 7.23.4 - "@babel/parser": 7.23.4 - "@babel/traverse": 7.23.4 - "@babel/types": 7.23.4 + '@babel/code-frame': 7.23.4 + '@babel/parser': 7.23.4 + '@babel/traverse': 7.23.4 + '@babel/types': 7.23.4 eslint: 8.54.0 eslint-visitor-keys: 1.3.0 resolve: 1.22.8 @@ -8749,22 +7261,16 @@ packages: - supports-color /babel-jsx-utils@1.1.0: - resolution: - { - integrity: sha512-Mh1j/rw4xM9T3YICkw22aBQ78FhsHdsmlb9NEk4uVAFBOg+Ez9ZgXXHugoBPCZui3XLomk/7/JBBH4daJqTkQQ==, - } + resolution: {integrity: sha512-Mh1j/rw4xM9T3YICkw22aBQ78FhsHdsmlb9NEk4uVAFBOg+Ez9ZgXXHugoBPCZui3XLomk/7/JBBH4daJqTkQQ==} /babel-loader@8.3.0(@babel/core@7.23.3)(webpack@5.89.0): - resolution: - { - integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==, - } - engines: { node: ">= 8.9" } + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" + '@babel/core': ^7.0.0 + webpack: '>=2' dependencies: - "@babel/core": 7.23.3 + '@babel/core': 7.23.3 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 @@ -8772,170 +7278,134 @@ packages: webpack: 5.89.0 /babel-plugin-add-module-exports@1.0.4: - resolution: - { - integrity: sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==, - } + resolution: {integrity: sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==} /babel-plugin-dynamic-import-node@2.3.3: - resolution: - { - integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, - } + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} dependencies: object.assign: 4.1.4 /babel-plugin-lodash@3.3.4: - resolution: - { - integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==, - } + resolution: {integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==} dependencies: - "@babel/helper-module-imports": 7.22.15 - "@babel/types": 7.23.4 + '@babel/helper-module-imports': 7.22.15 + '@babel/types': 7.23.4 glob: 7.2.3 lodash: 4.17.21 require-package-name: 2.0.1 /babel-plugin-macros@3.1.0: - resolution: - { - integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==, - } - engines: { node: ">=10", npm: ">=6" } + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 cosmiconfig: 7.1.0 resolve: 1.22.8 /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.3): - resolution: - { - integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==, - } + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/compat-data": 7.23.3 - "@babel/core": 7.23.3 - "@babel/helper-define-polyfill-provider": 0.4.3(@babel/core@7.23.3) + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) semver: 6.3.1 transitivePeerDependencies: - supports-color /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.3): - resolution: - { - integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==, - } + resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-define-polyfill-provider": 0.4.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) core-js-compat: 3.33.3 transitivePeerDependencies: - supports-color /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.3): - resolution: - { - integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==, - } + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/helper-define-polyfill-provider": 0.4.3(@babel/core@7.23.3) + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) transitivePeerDependencies: - supports-color /babel-plugin-remove-graphql-queries@5.12.1(@babel/core@7.23.3)(gatsby@5.12.11): - resolution: - { - integrity: sha512-R5FyZLs+YfhCpUJkpSyVwIbaw9Ya4TC4xIOBJzPK9Z3u5XVCI459aykLPyfYAWwbsI9yvjm/Ux5ft4/U4rNvMQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-R5FyZLs+YfhCpUJkpSyVwIbaw9Ya4TC4xIOBJzPK9Z3u5XVCI459aykLPyfYAWwbsI9yvjm/Ux5ft4/U4rNvMQ==} + engines: {node: '>=18.0.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 gatsby: ^5.0.0-next dependencies: - "@babel/core": 7.23.3 - "@babel/runtime": 7.23.4 - "@babel/types": 7.23.4 + '@babel/core': 7.23.3 + '@babel/runtime': 7.23.4 + '@babel/types': 7.23.4 gatsby: 5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) gatsby-core-utils: 4.12.1 /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: - resolution: - { - integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==, - } + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} /babel-plugin-transform-react-remove-prop-types@0.4.24: - resolution: - { - integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==, - } + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} /babel-preset-fbjs@3.4.0(@babel/core@7.23.3): - resolution: - { - integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==, - } - peerDependencies: - "@babel/core": ^7.0.0 - dependencies: - "@babel/core": 7.23.3 - "@babel/plugin-proposal-class-properties": 7.18.6(@babel/core@7.23.3) - "@babel/plugin-proposal-object-rest-spread": 7.20.7(@babel/core@7.23.3) - "@babel/plugin-syntax-class-properties": 7.12.13(@babel/core@7.23.3) - "@babel/plugin-syntax-flow": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-syntax-jsx": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-transform-arrow-functions": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-block-scoped-functions": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-block-scoping": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-classes": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-computed-properties": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-destructuring": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-flow-strip-types": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-for-of": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-function-name": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-member-expression-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-object-super": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-parameters": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-property-literals": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-react-display-name": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-react-jsx": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-shorthand-properties": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-spread": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-template-literals": 7.23.3(@babel/core@7.23.3) + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.3) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 /babel-preset-gatsby@3.12.1(@babel/core@7.23.3)(core-js@3.33.3): - resolution: - { - integrity: sha512-M3q7TB9YOpILjyd4ShjvWG0Agzjapu+FPQUczy9iBxlzVPcAe5hiPRlEin1v0CvXrlwj+GNydrhlczCPaf8YkA==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-M3q7TB9YOpILjyd4ShjvWG0Agzjapu+FPQUczy9iBxlzVPcAe5hiPRlEin1v0CvXrlwj+GNydrhlczCPaf8YkA==} + engines: {node: '>=18.0.0'} peerDependencies: - "@babel/core": ^7.11.6 + '@babel/core': ^7.11.6 core-js: ^3.0.0 dependencies: - "@babel/core": 7.23.3 - "@babel/plugin-proposal-class-properties": 7.18.6(@babel/core@7.23.3) - "@babel/plugin-proposal-nullish-coalescing-operator": 7.18.6(@babel/core@7.23.3) - "@babel/plugin-proposal-optional-chaining": 7.21.0(@babel/core@7.23.3) - "@babel/plugin-syntax-dynamic-import": 7.8.3(@babel/core@7.23.3) - "@babel/plugin-transform-classes": 7.23.3(@babel/core@7.23.3) - "@babel/plugin-transform-runtime": 7.23.4(@babel/core@7.23.3) - "@babel/plugin-transform-spread": 7.23.3(@babel/core@7.23.3) - "@babel/preset-env": 7.23.3(@babel/core@7.23.3) - "@babel/preset-react": 7.23.3(@babel/core@7.23.3) - "@babel/runtime": 7.23.4 + '@babel/core': 7.23.3 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-runtime': 7.23.4(@babel/core@7.23.3) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.3) + '@babel/preset-env': 7.23.3(@babel/core@7.23.3) + '@babel/preset-react': 7.23.3(@babel/core@7.23.3) + '@babel/runtime': 7.23.4 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 @@ -8946,89 +7416,100 @@ packages: - supports-color /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base-x@3.0.9: - resolution: - { - integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==, - } + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} dependencies: safe-buffer: 5.2.1 /base64-js@1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, - } + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} /base64id@2.0.0: - resolution: - { - integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==, - } - engines: { node: ^4.5.0 || >= 5.9 } + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + /bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: false /bech32@1.1.4: - resolution: - { - integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==, - } - dev: true + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} /better-opn@2.1.1: - resolution: - { - integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==, - } - engines: { node: ">8.0.0" } + resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} + engines: {node: '>8.0.0'} dependencies: open: 7.4.2 /big-integer@1.6.52: - resolution: - { - integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==, - } - engines: { node: ">=0.6" } - dev: true + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} /big.js@5.2.2: - resolution: - { - integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, - } + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + /bigi@1.4.2: + resolution: {integrity: sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw==} + dev: false /bigint-crypto-utils@3.3.0: - resolution: - { - integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} + engines: {node: '>=14.0.0'} dev: true + /bignumber.js@7.2.1: + resolution: {integrity: sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==} + dev: false + /bignumber.js@9.1.2: - resolution: - { - integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==, - } + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} dev: false /binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + + /bip32@2.0.5: + resolution: {integrity: sha512-zVY4VvJV+b2fS0/dcap/5XLlpqtgwyN8oRkuGgAS1uLOeEp0Yo6Tw2yUTozTtlrMJO3G8n4g/KX/XGFHW6Pq3g==} + engines: {node: '>=6.0.0'} + dependencies: + '@types/node': 10.12.18 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + tiny-secp256k1: 1.1.6 + typeforce: 1.18.0 + wif: 2.0.6 + dev: false + + /bip39@3.0.2: + resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + dev: false + + /bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + dev: false /bl@4.1.0: - resolution: - { - integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, - } + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} requiresBuild: true dependencies: buffer: 5.7.1 @@ -9036,45 +7517,27 @@ packages: readable-stream: 3.6.2 /blakejs@1.2.1: - resolution: - { - integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==, - } - dev: true + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} /bluebird@3.7.2: - resolution: - { - integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, - } + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} /bn.js@4.11.6: - resolution: - { - integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==, - } - dev: true + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + /bn.js@4.11.8: + resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==} + dev: false /bn.js@4.12.0: - resolution: - { - integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==, - } - dev: true + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} /bn.js@5.2.1: - resolution: - { - integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==, - } - dev: true + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} /body-parser@1.20.1: - resolution: - { - integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==, - } - engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -9092,17 +7555,11 @@ packages: - supports-color /boolbase@1.0.0: - resolution: - { - integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, - } + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} /boxen@5.1.2: - resolution: - { - integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} dependencies: ansi-align: 3.0.1 camelcase: 6.3.0 @@ -9114,54 +7571,35 @@ packages: wrap-ansi: 7.0.0 /bplist-parser@0.2.0: - resolution: - { - integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==, - } - engines: { node: ">= 5.10.0" } + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.52 dev: true /brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 /brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, - } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true /braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 /brorand@1.1.0: - resolution: - { - integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==, - } - dev: true + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} /browser-level@1.0.1: - resolution: - { - integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==, - } + resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} dependencies: abstract-level: 1.0.3 catering: 2.1.1 @@ -9170,26 +7608,16 @@ packages: dev: true /browser-resolve@2.0.0: - resolution: - { - integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==, - } + resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.8 dev: true /browser-stdout@1.3.1: - resolution: - { - integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==, - } - dev: true + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} /browserify-aes@1.2.0: - resolution: - { - integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==, - } + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 cipher-base: 1.0.4 @@ -9197,47 +7625,31 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true /browserify-cipher@1.0.1: - resolution: - { - integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==, - } + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 browserify-des: 1.0.2 evp_bytestokey: 1.0.3 - dev: true /browserify-des@1.0.2: - resolution: - { - integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==, - } + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true /browserify-rsa@4.1.0: - resolution: - { - integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==, - } + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 - dev: true /browserify-sign@4.2.2: - resolution: - { - integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.0 @@ -9248,23 +7660,16 @@ packages: parse-asn1: 5.1.6 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: true /browserify-zlib@0.2.0: - resolution: - { - integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==, - } + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true /browserslist@4.22.1: - resolution: - { - integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: caniuse-lite: 1.0.30001564 @@ -9273,51 +7678,57 @@ packages: update-browserslist-db: 1.0.13(browserslist@4.22.1) /bs58@4.0.1: - resolution: - { - integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==, - } + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: base-x: 3.0.9 - dev: true /bs58check@2.1.2: - resolution: - { - integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==, - } + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} dependencies: bs58: 4.0.1 create-hash: 1.2.0 safe-buffer: 5.2.1 - dev: true /bser@2.1.1: - resolution: - { - integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, - } + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + /buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: false + + /buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + dev: false + + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: false + + /buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: false + /buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + /buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + dev: false + + /buffer-to-arraybuffer@0.0.5: + resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} + dev: false /buffer-xor@1.0.3: - resolution: - { - integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==, - } - dev: true + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} /buffer@4.9.2: - resolution: - { - integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==, - } + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 @@ -9325,106 +7736,77 @@ packages: dev: true /buffer@5.7.1: - resolution: - { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, - } + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} requiresBuild: true dependencies: base64-js: 1.5.1 ieee754: 1.2.1 /buffer@6.0.3: - resolution: - { - integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, - } + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.7.0 + dev: false /builtin-status-codes@3.0.0: - resolution: - { - integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==, - } + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true /builtins@5.0.1: - resolution: - { - integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==, - } + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: semver: 7.5.4 dev: true /bundle-name@3.0.0: - resolution: - { - integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 dev: true /busboy@1.6.0: - resolution: - { - integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, - } - engines: { node: ">=10.16.0" } + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 /bytes@3.0.0: - resolution: - { - integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} /bytes@3.1.2: - resolution: - { - integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} /cache-manager@2.11.1: - resolution: - { - integrity: sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==, - } + resolution: {integrity: sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==} dependencies: async: 1.5.2 lodash.clonedeep: 4.5.0 lru-cache: 4.0.0 /cacheable-lookup@5.0.4: - resolution: - { - integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==, - } - engines: { node: ">=10.6.0" } + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} /cacheable-lookup@7.0.0: - resolution: - { - integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} /cacheable-request@10.2.14: - resolution: - { - integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} dependencies: - "@types/http-cache-semantics": 4.0.4 + '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 http-cache-semantics: 4.1.1 keyv: 4.5.4 @@ -9432,12 +7814,22 @@ packages: normalize-url: 8.0.0 responselike: 3.0.0 + /cacheable-request@6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + dev: false + /cacheable-request@7.0.4: - resolution: - { - integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -9448,50 +7840,32 @@ packages: responselike: 2.0.1 /call-bind@1.0.5: - resolution: - { - integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==, - } + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.1.1 /callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} /camel-case@4.1.2: - resolution: - { - integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, - } + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 tslib: 2.6.2 /camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} /camelcase@6.3.0: - resolution: - { - integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} /caniuse-api@3.0.0: - resolution: - { - integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==, - } + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.22.1 caniuse-lite: 1.0.30001564 @@ -9499,82 +7873,65 @@ packages: lodash.uniq: 4.5.0 /caniuse-lite@1.0.30001564: - resolution: - { - integrity: sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==, - } + resolution: {integrity: sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==} /capital-case@1.0.4: - resolution: - { - integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==, - } + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 /case@1.6.3: - resolution: - { - integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} dev: true /caseless@0.12.0: - resolution: - { - integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, - } - dev: true + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} /catering@2.1.1: - resolution: - { - integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} + engines: {node: '>=6'} dev: true + /cbor@4.3.0: + resolution: {integrity: sha512-CvzaxQlaJVa88sdtTWvLJ++MbdtPHtZOBBNjm7h3YKUHILMs9nQyD4AC6hvFZy7GBVB3I6bRibJcxeHydyT2IQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + bignumber.js: 9.1.2 + commander: 3.0.2 + json-text-sequence: 0.1.1 + nofilter: 1.0.4 + dev: false + /cbor@8.1.0: - resolution: - { - integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==, - } - engines: { node: ">=12.19" } + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} dependencies: nofilter: 3.1.0 dev: true /cbor@9.0.1: - resolution: - { - integrity: sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ==} + engines: {node: '>=16'} dependencies: nofilter: 3.1.0 dev: true /chai-as-promised@7.1.1(chai@4.3.10): - resolution: - { - integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==, - } + resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} peerDependencies: - chai: ">= 2.1.2 < 5" + chai: '>= 2.1.2 < 5' dependencies: chai: 4.3.10 check-error: 1.0.3 dev: true /chai@4.3.10: - resolution: - { - integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -9583,34 +7940,24 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 - dev: true /chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 /chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 /change-case-all@1.0.14: - resolution: - { - integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==, - } + resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -9624,10 +7971,7 @@ packages: upper-case-first: 2.0.2 /change-case-all@1.0.15: - resolution: - { - integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==, - } + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -9641,10 +7985,7 @@ packages: upper-case-first: 2.0.2 /change-case@4.1.2: - resolution: - { - integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==, - } + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} dependencies: camel-case: 4.1.2 capital-case: 1.0.4 @@ -9660,33 +8001,20 @@ packages: tslib: 2.6.2 /chardet@0.7.0: - resolution: - { - integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, - } + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} /charenc@0.0.2: - resolution: - { - integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==, - } + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true /check-error@1.0.3: - resolution: - { - integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==, - } + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: get-func-name: 2.0.2 - dev: true /chokidar@3.5.3: - resolution: - { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, - } - engines: { node: ">= 8.10.0" } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -9699,41 +8027,41 @@ packages: fsevents: 2.3.3 /chownr@1.1.4: - resolution: - { - integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==, - } + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} requiresBuild: true /chrome-trace-event@1.0.3: - resolution: - { - integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} /ci-info@2.0.0: - resolution: - { - integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, - } + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - /cipher-base@1.0.4: - resolution: - { - integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==, - } + /cids@0.7.5: + resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} + engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module + dependencies: + buffer: 5.7.1 + class-is: 1.1.0 + multibase: 0.6.1 + multicodec: 1.0.4 + multihashes: 0.4.21 + dev: false + + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true + + /class-is@1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + dev: false /classic-level@1.3.0: - resolution: - { - integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} + engines: {node: '>=12'} requiresBuild: true dependencies: abstract-level: 1.0.3 @@ -9744,43 +8072,28 @@ packages: dev: true /clean-stack@2.2.0: - resolution: - { - integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} dev: true /cli-boxes@2.2.1: - resolution: - { - integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} /cli-cursor@3.1.0: - resolution: - { - integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 /cli-spinners@2.9.1: - resolution: - { - integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} dev: true /cli-table3@0.5.1: - resolution: - { - integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + engines: {node: '>=6'} dependencies: object-assign: 4.1.1 string-width: 2.1.1 @@ -9789,50 +8102,43 @@ packages: dev: true /cli-table3@0.6.3: - resolution: - { - integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==, - } - engines: { node: 10.* || >= 12.* } + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} dependencies: string-width: 4.2.3 optionalDependencies: - "@colors/colors": 1.5.0 + '@colors/colors': 1.5.0 dev: true /cli-width@3.0.0: - resolution: - { - integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} /clipboardy@2.3.0: - resolution: - { - integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} + engines: {node: '>=8'} dependencies: arch: 2.2.0 execa: 1.0.0 is-wsl: 2.2.0 + /cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: false + /cliui@6.0.0: - resolution: - { - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, - } + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 /cliui@7.0.4: - resolution: - { - integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, - } + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -9840,137 +8146,86 @@ packages: dev: true /clone-deep@4.0.1: - resolution: - { - integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 /clone-response@1.0.3: - resolution: - { - integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==, - } + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 /clone@1.0.4: - resolution: - { - integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} dev: true /clone@2.1.2: - resolution: - { - integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} /color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 /color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 /color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, - } + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} /color-string@1.9.1: - resolution: - { - integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, - } + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} requiresBuild: true dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 /color2k@2.0.2: - resolution: - { - integrity: sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w==, - } + resolution: {integrity: sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w==} dev: false /color@4.2.3: - resolution: - { - integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==, - } - engines: { node: ">=12.5.0" } + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} requiresBuild: true dependencies: color-convert: 2.0.1 color-string: 1.9.1 /colord@2.9.3: - resolution: - { - integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==, - } + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} /colorette@1.4.0: - resolution: - { - integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==, - } + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} /colors@1.4.0: - resolution: - { - integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==, - } - engines: { node: ">=0.1.90" } + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} dev: true /combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 /command-exists@1.2.9: - resolution: - { - integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==, - } + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} /command-line-args@5.2.1: - resolution: - { - integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==, - } - engines: { node: ">=4.0.0" } + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 find-replace: 3.0.0 @@ -9979,11 +8234,8 @@ packages: dev: true /command-line-usage@6.1.3: - resolution: - { - integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} dependencies: array-back: 4.0.2 chalk: 2.4.2 @@ -9992,82 +8244,48 @@ packages: dev: true /commander@10.0.1: - resolution: - { - integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} dev: true /commander@11.0.0: - resolution: - { - integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} dev: true /commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} /commander@3.0.2: - resolution: - { - integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==, - } - dev: true + resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} /commander@7.2.0: - resolution: - { - integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} /common-path-prefix@3.0.0: - resolution: - { - integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==, - } + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} /common-tags@1.8.2: - resolution: - { - integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, - } - engines: { node: ">=4.0.0" } + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} /commondir@1.0.1: - resolution: - { - integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, - } + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} /compare-versions@6.1.0: - resolution: - { - integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==, - } + resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} dev: true /compressible@2.0.18: - resolution: - { - integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 /compression@1.7.4: - resolution: - { - integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 bytes: 3.0.0 @@ -10080,24 +8298,15 @@ packages: - supports-color /compute-scroll-into-view@3.0.3: - resolution: - { - integrity: sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==, - } + resolution: {integrity: sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==} dev: false /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /concat-stream@1.6.2: - resolution: - { - integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==, - } - engines: { "0": node >= 0.8 } + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 @@ -10105,20 +8314,14 @@ packages: typedarray: 0.0.6 /config-chain@1.1.13: - resolution: - { - integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, - } + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: ini: 1.3.8 proto-list: 1.2.4 /configstore@5.0.1: - resolution: - { - integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} dependencies: dot-prop: 5.3.0 graceful-fs: 4.2.11 @@ -10128,178 +8331,128 @@ packages: xdg-basedir: 4.0.0 /confusing-browser-globals@1.0.11: - resolution: - { - integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==, - } + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} /console-browserify@1.2.0: - resolution: - { - integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==, - } + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true /constant-case@3.0.4: - resolution: - { - integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==, - } + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case: 2.0.2 /constants-browserify@1.0.0: - resolution: - { - integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==, - } + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true /content-disposition@0.5.4: - resolution: - { - integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 + /content-hash@2.5.2: + resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} + dependencies: + cids: 0.7.5 + multicodec: 0.5.7 + multihashes: 0.4.21 + dev: false + /content-type@1.0.5: - resolution: - { - integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} /convert-hrtime@3.0.0: - resolution: - { - integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} + engines: {node: '>=8'} /convert-source-map@1.9.0: - resolution: - { - integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, - } + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: false /convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} /cookie-signature@1.0.6: - resolution: - { - integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, - } + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} /cookie@0.4.2: - resolution: - { - integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} /cookie@0.5.0: - resolution: - { - integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + /cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: false /copy-to-clipboard@3.3.3: - resolution: - { - integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==, - } + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} dependencies: toggle-selection: 1.0.6 dev: false /core-js-compat@3.31.0: - resolution: - { - integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==, - } + resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} dependencies: browserslist: 4.22.1 /core-js-compat@3.33.3: - resolution: - { - integrity: sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==, - } + resolution: {integrity: sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==} dependencies: browserslist: 4.22.1 /core-js-pure@3.33.3: - resolution: - { - integrity: sha512-taJ00IDOP+XYQEA2dAe4ESkmHt1fL8wzYDo3mRWQey8uO9UojlBFMneA65kMyxfYP7106c6LzWaq7/haDT6BCQ==, - } + resolution: {integrity: sha512-taJ00IDOP+XYQEA2dAe4ESkmHt1fL8wzYDo3mRWQey8uO9UojlBFMneA65kMyxfYP7106c6LzWaq7/haDT6BCQ==} requiresBuild: true /core-js@3.33.3: - resolution: - { - integrity: sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==, - } + resolution: {integrity: sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==} requiresBuild: true + /core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: false + /core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, - } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} /cors@2.8.5: - resolution: - { - integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} dependencies: object-assign: 4.1.1 vary: 1.1.2 /cosmiconfig@6.0.0: - resolution: - { - integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} dependencies: - "@types/parse-json": 4.0.2 + '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 /cosmiconfig@7.1.0: - resolution: - { - integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} dependencies: - "@types/parse-json": 4.0.2 + '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 /cosmiconfig@8.2.0: - resolution: - { - integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + engines: {node: '>=14'} dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -10307,52 +8460,42 @@ packages: path-type: 4.0.0 dev: true + /country-data@0.0.31: + resolution: {integrity: sha512-YqlY/i6ikZwoBFfdjK+hJTGaBdTgDpXLI15MCj2UsXZ2cPBb+Kx86AXmDH7PRGt0LUleck0cCgNdWeIhfbcxkQ==} + dependencies: + currency-symbol-map: 2.2.0 + underscore: 1.13.6 + dev: false + /crc-32@1.2.2: - resolution: - { - integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} hasBin: true dev: true /create-ecdh@4.0.4: - resolution: - { - integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==, - } + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 - dev: true /create-gatsby@3.12.3: - resolution: - { - integrity: sha512-N0K/Z/MD5LMRJcBy669WpSgrn+31zBV72Lv0RHolX0fXa77Yx58HsEiLWz83j/dtciGMQfEOEHFRetUqZhOggA==, - } + resolution: {integrity: sha512-N0K/Z/MD5LMRJcBy669WpSgrn+31zBV72Lv0RHolX0fXa77Yx58HsEiLWz83j/dtciGMQfEOEHFRetUqZhOggA==} hasBin: true dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 /create-hash@1.2.0: - resolution: - { - integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==, - } + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 - dev: true /create-hmac@1.1.7: - resolution: - { - integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==, - } + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 create-hash: 1.2.0 @@ -10360,31 +8503,28 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: true /create-require@1.1.1: - resolution: - { - integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, - } + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-fetch@3.0.4: + resolution: {integrity: sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==} + dependencies: + node-fetch: 2.6.0 + whatwg-fetch: 3.0.0 + dev: false + /cross-fetch@3.1.8: - resolution: - { - integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==, - } + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding /cross-spawn@6.0.5: - resolution: - { - integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, - } - engines: { node: ">=4.8" } + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -10393,28 +8533,19 @@ packages: which: 1.3.1 /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 /crypt@0.0.2: - resolution: - { - integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==, - } + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} dev: true /crypto-browserify@3.12.0: - resolution: - { - integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==, - } + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 browserify-sign: 4.2.2 @@ -10427,41 +8558,32 @@ packages: public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 - dev: true + + /crypto-js@3.3.0: + resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} + dev: false /crypto-random-string@2.0.0: - resolution: - { - integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} /css-box-model@1.2.1: - resolution: - { - integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==, - } + resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} dependencies: tiny-invariant: 1.3.1 dev: false /css-declaration-sorter@6.4.1(postcss@8.4.31): - resolution: - { - integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 dependencies: postcss: 8.4.31 /css-loader@5.2.7(webpack@5.89.0): - resolution: - { - integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: @@ -10478,14 +8600,11 @@ packages: webpack: 5.89.0 /css-minimizer-webpack-plugin@2.0.0(webpack@5.89.0): - resolution: - { - integrity: sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==, - } - engines: { node: ">= 10.13.0" } - peerDependencies: - clean-css: "*" - csso: "*" + resolution: {integrity: sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + clean-css: '*' + csso: '*' webpack: ^5.0.0 peerDependenciesMeta: clean-css: @@ -10503,10 +8622,7 @@ packages: webpack: 5.89.0 /css-select@4.3.0: - resolution: - { - integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, - } + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: boolbase: 1.0.0 css-what: 6.1.0 @@ -10515,42 +8631,27 @@ packages: nth-check: 2.1.1 /css-tree@1.1.3: - resolution: - { - integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} dependencies: mdn-data: 2.0.14 source-map: 0.6.1 /css-what@6.1.0: - resolution: - { - integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} /css.escape@1.5.1: - resolution: - { - integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, - } + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} /cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true /cssnano-preset-default@5.2.14(postcss@8.4.31): - resolution: - { - integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -10586,22 +8687,16 @@ packages: postcss-unique-selectors: 5.1.1(postcss@8.4.31) /cssnano-utils@3.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: postcss: 8.4.31 /cssnano@5.1.15(postcss@8.4.31): - resolution: - { - integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -10611,71 +8706,82 @@ packages: yaml: 1.10.2 /csso@4.2.0: - resolution: - { - integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} dependencies: css-tree: 1.1.3 /csstype@3.1.2: - resolution: - { - integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, - } + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /currency-symbol-map@2.2.0: + resolution: {integrity: sha512-fPZJ3jqM68+AAgqQ7UaGbgHL/39rp6l7GyqS2k1HJPu/kpS8D07x/+Uup6a9tCUKIlOFcRrDCf1qxSt8jnI5BA==} + dev: false /d@1.0.1: - resolution: - { - integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==, - } + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: es5-ext: 0.10.62 type: 1.2.0 /damerau-levenshtein@1.0.8: - resolution: - { - integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, - } + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + /dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: false /date-fns@2.30.0: - resolution: - { - integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==, - } - engines: { node: ">=0.11" } + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 /death@1.1.0: - resolution: - { - integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==, - } + resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} dev: true /debug@2.6.9: - resolution: - { - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, - } + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + + /debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true dependencies: ms: 2.0.0 + dev: false + + /debug@3.2.6(supports-color@6.0.0): + resolution: {integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==} + deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + supports-color: 6.0.0 + dev: false /debug@3.2.7: - resolution: - { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, - } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -10683,13 +8789,10 @@ packages: ms: 2.1.3 /debug@4.3.4(supports-color@8.1.1): - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -10698,91 +8801,117 @@ packages: supports-color: 8.1.1 /decamelize@1.2.0: - resolution: - { - integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} /decamelize@4.0.0: - resolution: - { - integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} dev: true /decode-uri-component@0.2.2: - resolution: - { - integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + /decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: false /decompress-response@6.0.0: - resolution: - { - integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 + /decompress-tar@4.1.1: + resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} + engines: {node: '>=4'} + dependencies: + file-type: 5.2.0 + is-stream: 1.1.0 + tar-stream: 1.6.2 + dev: false + + /decompress-tarbz2@4.1.1: + resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 6.2.0 + is-stream: 1.1.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + dev: false + + /decompress-targz@4.1.1: + resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 5.2.0 + is-stream: 1.1.0 + dev: false + + /decompress-unzip@4.0.1: + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} + engines: {node: '>=4'} + dependencies: + file-type: 3.9.0 + get-stream: 2.3.1 + pify: 2.3.0 + yauzl: 2.10.0 + dev: false + + /decompress@4.2.1: + resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + decompress-tarbz2: 4.1.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + graceful-fs: 4.2.11 + make-dir: 1.3.0 + pify: 2.3.0 + strip-dirs: 2.1.0 + dev: false + /deep-eql@4.1.3: - resolution: - { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} dependencies: type-detect: 4.0.8 - dev: true /deep-extend@0.6.0: - resolution: - { - integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, - } - engines: { node: ">=4.0.0" } + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} /deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} /deepmerge@2.2.1: - resolution: - { - integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} dev: false /deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} /default-browser-id@3.0.0: - resolution: - { - integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 dev: true /default-browser@4.0.0: - resolution: - { - integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} dependencies: bundle-name: 3.0.0 default-browser-id: 3.0.0 @@ -10791,132 +8920,91 @@ packages: dev: true /defaults@1.0.4: - resolution: - { - integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, - } + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 dev: true + /defer-to-connect@1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: false + /defer-to-connect@2.0.1: - resolution: - { - integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} /define-data-property@1.1.1: - resolution: - { - integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 /define-lazy-prop@2.0.0: - resolution: - { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} /define-lazy-prop@3.0.0: - resolution: - { - integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} dev: true /define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 has-property-descriptors: 1.0.1 object-keys: 1.1.1 /delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + /delimit-stream@0.1.0: + resolution: {integrity: sha512-a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ==} + dev: false /depd@2.0.0: - resolution: - { - integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} /dependency-graph@0.11.0: - resolution: - { - integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==, - } - engines: { node: ">= 0.6.0" } + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} /dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} /des.js@1.1.0: - resolution: - { - integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==, - } + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true /destroy@1.2.0: - resolution: - { - integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, - } - engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} /detect-libc@1.0.3: - resolution: - { - integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} hasBin: true /detect-libc@2.0.2: - resolution: - { - integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} requiresBuild: true /detect-node-es@1.1.0: - resolution: - { - integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, - } + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false /detect-port-alt@1.1.6: - resolution: - { - integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==, - } - engines: { node: ">= 4.2.1" } + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} hasBin: true dependencies: address: 1.2.2 @@ -10925,10 +9013,7 @@ packages: - supports-color /detect-port@1.5.1: - resolution: - { - integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==, - } + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} hasBin: true dependencies: address: 1.2.2 @@ -10937,20 +9022,17 @@ packages: - supports-color /devcert@1.2.2: - resolution: - { - integrity: sha512-UsLqvtJGPiGwsIZnJINUnFYaWgK7CroreGRndWHZkRD58tPFr3pVbbSyHR8lbh41+azR4jKvuNZ+eCoBZGA5kA==, - } - dependencies: - "@types/configstore": 2.1.1 - "@types/debug": 0.0.30 - "@types/get-port": 3.2.0 - "@types/glob": 5.0.38 - "@types/lodash": 4.14.202 - "@types/mkdirp": 0.5.2 - "@types/node": 8.10.66 - "@types/rimraf": 2.0.5 - "@types/tmp": 0.0.33 + resolution: {integrity: sha512-UsLqvtJGPiGwsIZnJINUnFYaWgK7CroreGRndWHZkRD58tPFr3pVbbSyHR8lbh41+azR4jKvuNZ+eCoBZGA5kA==} + dependencies: + '@types/configstore': 2.1.1 + '@types/debug': 0.0.30 + '@types/get-port': 3.2.0 + '@types/glob': 5.0.38 + '@types/lodash': 4.14.202 + '@types/mkdirp': 0.5.2 + '@types/node': 8.10.66 + '@types/rimraf': 2.0.5 + '@types/tmp': 0.0.33 application-config-path: 0.1.1 command-exists: 1.2.9 debug: 3.2.7 @@ -10968,181 +9050,142 @@ packages: transitivePeerDependencies: - supports-color + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: false + /diff@4.0.2: - resolution: - { - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, - } - engines: { node: ">=0.3.1" } - dev: true + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} /diff@5.0.0: - resolution: - { - integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==, - } - engines: { node: ">=0.3.1" } + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} dev: true /diffie-hellman@5.0.3: - resolution: - { - integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==, - } + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 miller-rabin: 4.0.1 randombytes: 2.1.0 - dev: true /difflib@0.2.4: - resolution: - { - integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==, - } + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} dependencies: heap: 0.2.7 dev: true /dir-glob@3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 /doctrine@2.1.0: - resolution: - { - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 /doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 /dom-converter@0.2.0: - resolution: - { - integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==, - } + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dependencies: utila: 0.4.0 /dom-serializer@1.4.1: - resolution: - { - integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, - } + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dependencies: domelementtype: 2.3.0 domhandler: 4.3.1 entities: 2.2.0 + /dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: false + /domain-browser@4.23.0: - resolution: - { - integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==} + engines: {node: '>=10'} dev: true /domelementtype@2.3.0: - resolution: - { - integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, - } + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} /domhandler@4.3.1: - resolution: - { - integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 /domutils@2.8.0: - resolution: - { - integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, - } + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dependencies: dom-serializer: 1.4.1 domelementtype: 2.3.0 domhandler: 4.3.1 /dot-case@3.0.4: - resolution: - { - integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, - } + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 tslib: 2.6.2 /dot-prop@5.3.0: - resolution: - { - integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dependencies: is-obj: 2.0.0 /dotenv-expand@5.1.0: - resolution: - { - integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==, - } + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} /dotenv@7.0.0: - resolution: - { - integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==} + engines: {node: '>=6'} /dotenv@8.6.0: - resolution: - { - integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + /duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: false /duplexer@0.1.2: - resolution: - { - integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, - } + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + /ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: false /ee-first@1.1.1: - resolution: - { - integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, - } + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} /electron-to-chromium@1.4.592: - resolution: - { - integrity: sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww==, - } + resolution: {integrity: sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww==} + + /elliptic@6.3.3: + resolution: {integrity: sha512-cIky9SO2H8W2eU1NOLySnhOYJnuEWCq9ZJeHvHd/lXzEL9vyraIMfilZSn57X3aVX+wkfYmqkch2LvmTzkjFpA==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + inherits: 2.0.4 + dev: false /elliptic@6.5.4: - resolution: - { - integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==, - } + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -11151,57 +9194,39 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: true + + /emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: false /emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} /emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} /emojis-list@3.0.0: - resolution: - { - integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} /encode-utf8@1.0.3: - resolution: - { - integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==, - } + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} dev: true /encodeurl@1.0.2: - resolution: - { - integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} /end-of-stream@1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, - } + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} requiresBuild: true dependencies: once: 1.4.0 /engine.io-client@6.5.3: - resolution: - { - integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==, - } + resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} dependencies: - "@socket.io/component-emitter": 3.1.0 + '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) engine.io-parser: 5.2.1 ws: 8.11.0 @@ -11212,22 +9237,16 @@ packages: - utf-8-validate /engine.io-parser@5.2.1: - resolution: - { - integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + engines: {node: '>=10.0.0'} /engine.io@6.5.4: - resolution: - { - integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==, - } - engines: { node: ">=10.2.0" } - dependencies: - "@types/cookie": 0.4.1 - "@types/cors": 2.8.17 - "@types/node": 20.9.4 + resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==} + engines: {node: '>=10.2.0'} + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 20.9.4 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -11241,75 +9260,48 @@ packages: - utf-8-validate /enhanced-resolve@5.15.0: - resolution: - { - integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 /enquirer@2.4.1: - resolution: - { - integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 /entities@2.2.0: - resolution: - { - integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, - } + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} /env-paths@2.2.1: - resolution: - { - integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} dev: true /envinfo@7.11.0: - resolution: - { - integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} + engines: {node: '>=4'} hasBin: true /eol@0.9.1: - resolution: - { - integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==, - } + resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} /error-ex@1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, - } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 /error-stack-parser@2.1.4: - resolution: - { - integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, - } + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} dependencies: stackframe: 1.3.4 /es-abstract@1.22.3: - resolution: - { - integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 @@ -11351,11 +9343,12 @@ packages: unbox-primitive: 1.0.2 which-typed-array: 1.1.13 + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: false + /es-iterator-helpers@1.0.15: - resolution: - { - integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==, - } + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: asynciterator.prototype: 1.0.0 call-bind: 1.0.5 @@ -11373,47 +9366,32 @@ packages: safe-array-concat: 1.0.1 /es-module-lexer@1.4.1: - resolution: - { - integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==, - } + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} /es-set-tostringtag@2.0.2: - resolution: - { - integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 hasown: 2.0.0 /es-shim-unscopables@1.0.2: - resolution: - { - integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==, - } + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.0 /es-to-primitive@1.2.1: - resolution: - { - integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 /es5-ext@0.10.62: - resolution: - { - integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} requiresBuild: true dependencies: es6-iterator: 2.0.3 @@ -11421,35 +9399,23 @@ packages: next-tick: 1.1.0 /es6-iterator@2.0.3: - resolution: - { - integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==, - } + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: d: 1.0.1 es5-ext: 0.10.62 es6-symbol: 3.1.3 /es6-promise@4.2.8: - resolution: - { - integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==, - } + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} /es6-symbol@3.1.3: - resolution: - { - integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==, - } + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} dependencies: d: 1.0.1 ext: 1.7.0 /es6-weak-map@2.0.3: - resolution: - { - integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==, - } + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} dependencies: d: 1.0.1 es5-ext: 0.10.62 @@ -11457,78 +9423,57 @@ packages: es6-symbol: 3.1.3 /esbuild@0.19.7: - resolution: - { - integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.19.7 - "@esbuild/android-arm64": 0.19.7 - "@esbuild/android-x64": 0.19.7 - "@esbuild/darwin-arm64": 0.19.7 - "@esbuild/darwin-x64": 0.19.7 - "@esbuild/freebsd-arm64": 0.19.7 - "@esbuild/freebsd-x64": 0.19.7 - "@esbuild/linux-arm": 0.19.7 - "@esbuild/linux-arm64": 0.19.7 - "@esbuild/linux-ia32": 0.19.7 - "@esbuild/linux-loong64": 0.19.7 - "@esbuild/linux-mips64el": 0.19.7 - "@esbuild/linux-ppc64": 0.19.7 - "@esbuild/linux-riscv64": 0.19.7 - "@esbuild/linux-s390x": 0.19.7 - "@esbuild/linux-x64": 0.19.7 - "@esbuild/netbsd-x64": 0.19.7 - "@esbuild/openbsd-x64": 0.19.7 - "@esbuild/sunos-x64": 0.19.7 - "@esbuild/win32-arm64": 0.19.7 - "@esbuild/win32-ia32": 0.19.7 - "@esbuild/win32-x64": 0.19.7 + '@esbuild/android-arm': 0.19.7 + '@esbuild/android-arm64': 0.19.7 + '@esbuild/android-x64': 0.19.7 + '@esbuild/darwin-arm64': 0.19.7 + '@esbuild/darwin-x64': 0.19.7 + '@esbuild/freebsd-arm64': 0.19.7 + '@esbuild/freebsd-x64': 0.19.7 + '@esbuild/linux-arm': 0.19.7 + '@esbuild/linux-arm64': 0.19.7 + '@esbuild/linux-ia32': 0.19.7 + '@esbuild/linux-loong64': 0.19.7 + '@esbuild/linux-mips64el': 0.19.7 + '@esbuild/linux-ppc64': 0.19.7 + '@esbuild/linux-riscv64': 0.19.7 + '@esbuild/linux-s390x': 0.19.7 + '@esbuild/linux-x64': 0.19.7 + '@esbuild/netbsd-x64': 0.19.7 + '@esbuild/openbsd-x64': 0.19.7 + '@esbuild/sunos-x64': 0.19.7 + '@esbuild/win32-arm64': 0.19.7 + '@esbuild/win32-ia32': 0.19.7 + '@esbuild/win32-x64': 0.19.7 dev: true /escalade@3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} /escape-html@1.0.3: - resolution: - { - integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, - } + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} /escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} /escape-string-regexp@2.0.0: - resolution: - { - integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} /escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} /escodegen@1.8.1: - resolution: - { - integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} + engines: {node: '>=0.12.0'} hasBin: true dependencies: esprima: 2.7.3 @@ -11540,11 +9485,8 @@ packages: dev: true /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0): - resolution: - { - integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.2 @@ -11558,29 +9500,23 @@ packages: dev: true /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.12.0)(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0): - resolution: - { - integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==, - } + resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.13.0 || ^6.0.0 - "@typescript-eslint/parser": ^5.0.0 || ^6.0.0 + '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 + '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 dependencies: - "@typescript-eslint/eslint-plugin": 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) eslint: 8.54.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0) dev: true /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.0)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.54.0): - resolution: - { - integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==, - } - engines: { node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} + engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 @@ -11599,26 +9535,20 @@ packages: dev: true /eslint-config-prettier@9.0.0(eslint@8.54.0): - resolution: - { - integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==, - } + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: - eslint: ">=7.0.0" + eslint: '>=7.0.0' dependencies: eslint: 8.54.0 dev: true /eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@7.32.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==, - } - engines: { node: ^10.12.0 || >=12.0.0 } - peerDependencies: - "@typescript-eslint/eslint-plugin": ^4.0.0 - "@typescript-eslint/parser": ^4.0.0 + resolution: {integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 + '@typescript-eslint/parser': ^4.0.0 babel-eslint: ^10.0.0 eslint: ^7.5.0 eslint-plugin-flowtype: ^5.2.0 @@ -11628,7 +9558,7 @@ packages: eslint-plugin-react: ^7.20.3 eslint-plugin-react-hooks: ^4.0.8 eslint-plugin-testing-library: ^3.9.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: eslint-plugin-jest: optional: true @@ -11637,8 +9567,8 @@ packages: typescript: optional: true dependencies: - "@typescript-eslint/eslint-plugin": 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@5.3.2) - "@typescript-eslint/parser": 5.62.0(eslint@7.32.0)(typescript@5.3.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@5.3.2) + '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@5.3.2) babel-eslint: 10.1.0(eslint@8.54.0) confusing-browser-globals: 1.0.11 eslint: 7.32.0 @@ -11650,22 +9580,16 @@ packages: typescript: 5.3.2 /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: - { - integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} peerDependencies: - eslint-plugin-import: ">=1.4.0" + eslint-plugin-import: '>=1.4.0' dependencies: eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.12.0)(eslint@8.54.0) dev: true /eslint-import-resolver-node@0.3.9: - resolution: - { - integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, - } + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 is-core-module: 2.13.1 @@ -11674,19 +9598,16 @@ packages: - supports-color /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): - resolution: - { - integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, - } - engines: { node: ">=4" } - peerDependencies: - "@typescript-eslint/parser": "*" - eslint: "*" - eslint-import-resolver-node: "*" - eslint-import-resolver-typescript: "*" - eslint-import-resolver-webpack: "*" + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint: optional: true @@ -11697,7 +9618,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) debug: 3.2.7 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 @@ -11705,11 +9626,8 @@ packages: - supports-color /eslint-plugin-flowtype@5.10.0(eslint@8.54.0): - resolution: - { - integrity: sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^7.1.0 dependencies: @@ -11718,19 +9636,16 @@ packages: string-natural-compare: 3.0.1 /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0): - resolution: - { - integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true dependencies: - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -11756,19 +9671,16 @@ packages: dev: true /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.12.0)(eslint@8.54.0): - resolution: - { - integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true dependencies: - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -11793,15 +9705,12 @@ packages: - supports-color /eslint-plugin-jsx-a11y@6.8.0(eslint@8.54.0): - resolution: - { - integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -11820,26 +9729,20 @@ packages: object.fromentries: 2.0.7 /eslint-plugin-no-only-tests@3.1.0: - resolution: - { - integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==, - } - engines: { node: ">=5.0.0" } + resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + engines: {node: '>=5.0.0'} dev: true /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0): - resolution: - { - integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==, - } - engines: { node: ^14.18.0 || >=16.0.0 } - peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' peerDependenciesMeta: - "@types/eslint": + '@types/eslint': optional: true eslint-config-prettier: optional: true @@ -11852,22 +9755,16 @@ packages: dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.54.0): - resolution: - { - integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 8.54.0 /eslint-plugin-react@7.33.2(eslint@8.54.0): - resolution: - { - integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: @@ -11890,66 +9787,45 @@ packages: string.prototype.matchall: 4.0.10 /eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 /eslint-scope@7.2.2: - resolution: - { - integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 /eslint-utils@2.1.0: - resolution: - { - integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 /eslint-visitor-keys@1.3.0: - resolution: - { - integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} /eslint-visitor-keys@2.1.0: - resolution: - { - integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} /eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /eslint-webpack-plugin@2.7.0(eslint@7.32.0)(webpack@5.89.0): - resolution: - { - integrity: sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==} + engines: {node: '>= 10.13.0'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 webpack: ^4.0.0 || ^5.0.0 dependencies: - "@types/eslint": 7.29.0 + '@types/eslint': 7.29.0 arrify: 2.0.1 eslint: 7.32.0 jest-worker: 27.5.1 @@ -11959,16 +9835,13 @@ packages: webpack: 5.89.0 /eslint@7.32.0: - resolution: - { - integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} + engines: {node: ^10.12.0 || >=12.0.0} hasBin: true dependencies: - "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": 0.4.3 - "@humanwhocodes/config-array": 0.5.0 + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -12010,21 +9883,18 @@ packages: - supports-color /eslint@8.54.0: - resolution: - { - integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.54.0) - "@eslint-community/regexpp": 4.10.0 - "@eslint/eslintrc": 2.1.3 - "@eslint/js": 8.54.0 - "@humanwhocodes/config-array": 0.11.13 - "@humanwhocodes/module-importer": 1.0.1 - "@nodelib/fs.walk": 1.2.8 - "@ungap/structured-clone": 1.2.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.54.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -12059,117 +9929,85 @@ packages: - supports-color /espree@7.3.1: - resolution: - { - integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 /espree@9.6.1: - resolution: - { - integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.11.2 acorn-jsx: 5.3.2(acorn@8.11.2) eslint-visitor-keys: 3.4.3 /esprima@2.7.3: - resolution: - { - integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} + engines: {node: '>=0.10.0'} hasBin: true dev: true /esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true /esquery@1.5.0: - resolution: - { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 /esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 /estraverse@1.9.3: - resolution: - { - integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} + engines: {node: '>=0.10.0'} dev: true /estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} /estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} /estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true /esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} /etag@1.8.1: - resolution: - { - integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + /eth-ens-namehash@2.0.8: + resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} + dependencies: + idna-uts46-hx: 2.3.1 + js-sha3: 0.5.7 + dev: false /eth-gas-reporter@0.2.27: - resolution: - { - integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==, - } + resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} peerDependencies: - "@codechecks/client": ^0.1.0 + '@codechecks/client': ^0.1.0 peerDependenciesMeta: - "@codechecks/client": + '@codechecks/client': optional: true dependencies: - "@solidity-parser/parser": 0.14.5 + '@solidity-parser/parser': 0.14.5 axios: 1.6.2(debug@4.3.4) cli-table3: 0.5.1 colors: 1.4.0 @@ -12188,23 +10026,47 @@ packages: - utf-8-validate dev: true + /eth-lib@0.1.29: + resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3 + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /eth-lib@0.2.7: + resolution: {integrity: sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + xhr-request-promise: 0.1.3 + dev: false + + /eth-lib@0.2.8: + resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + xhr-request-promise: 0.1.3 + dev: false + /ethereum-bloom-filters@1.0.10: - resolution: - { - integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==, - } + resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: js-sha3: 0.8.0 - dev: true /ethereum-cryptography@0.1.3: - resolution: - { - integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==, - } + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} dependencies: - "@types/pbkdf2": 3.1.2 - "@types/secp256k1": 4.0.6 + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.6 blakejs: 1.2.1 browserify-aes: 1.2.0 bs58check: 2.1.2 @@ -12218,123 +10080,153 @@ packages: scrypt-js: 3.0.1 secp256k1: 4.0.3 setimmediate: 1.0.5 - dev: true /ethereum-cryptography@1.2.0: - resolution: - { - integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==, - } + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} dependencies: - "@noble/hashes": 1.2.0 - "@noble/secp256k1": 1.7.1 - "@scure/bip32": 1.1.5 - "@scure/bip39": 1.1.1 + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 dev: true /ethereum-cryptography@2.1.2: - resolution: - { - integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==, - } + resolution: {integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==} dependencies: - "@noble/curves": 1.1.0 - "@noble/hashes": 1.3.1 - "@scure/bip32": 1.3.1 - "@scure/bip39": 1.2.1 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/bip32': 1.3.1 + '@scure/bip39': 1.2.1 dev: true /ethereumjs-abi@0.6.8: - resolution: - { - integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==, - } + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: bn.js: 4.12.0 ethereumjs-util: 6.2.1 dev: true + /ethereumjs-common@1.5.2: + resolution: {integrity: sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==} + deprecated: 'New package name format for new versions: @ethereumjs/common. Please update.' + dev: false + + /ethereumjs-tx@2.1.2: + resolution: {integrity: sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==} + deprecated: 'New package name format for new versions: @ethereumjs/tx. Please update.' + dependencies: + ethereumjs-common: 1.5.2 + ethereumjs-util: 6.2.1 + dev: false + + /ethereumjs-util@5.2.1: + resolution: {integrity: sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==} + dependencies: + bn.js: 4.12.0 + create-hash: 1.2.0 + elliptic: 6.5.4 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + safe-buffer: 5.2.1 + dev: false + /ethereumjs-util@6.2.1: - resolution: - { - integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==, - } + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} dependencies: - "@types/bn.js": 4.11.6 + '@types/bn.js': 4.11.6 bn.js: 4.12.0 create-hash: 1.2.0 elliptic: 6.5.4 ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 - dev: true /ethereumjs-util@7.1.5: - resolution: - { - integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} dependencies: - "@types/bn.js": 5.1.5 + '@types/bn.js': 5.1.5 bn.js: 5.2.1 create-hash: 1.2.0 ethereum-cryptography: 0.1.3 rlp: 2.2.7 dev: true + /ethers@4.0.0-beta.3: + resolution: {integrity: sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==} + dependencies: + '@types/node': 10.17.60 + aes-js: 3.0.0 + bn.js: 4.12.0 + elliptic: 6.3.3 + hash.js: 1.1.3 + js-sha3: 0.5.7 + scrypt-js: 2.0.3 + setimmediate: 1.0.4 + uuid: 2.0.1 + xmlhttprequest: 1.8.0 + dev: false + + /ethers@4.0.49: + resolution: {integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==} + dependencies: + aes-js: 3.0.0 + bn.js: 4.12.0 + elliptic: 6.5.4 + hash.js: 1.1.3 + js-sha3: 0.5.7 + scrypt-js: 2.0.4 + setimmediate: 1.0.4 + uuid: 2.0.1 + xmlhttprequest: 1.8.0 + dev: false + /ethers@5.7.2: - resolution: - { - integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==, - } - dependencies: - "@ethersproject/abi": 5.7.0 - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/base64": 5.7.0 - "@ethersproject/basex": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/contracts": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/hdnode": 5.7.0 - "@ethersproject/json-wallets": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/networks": 5.7.1 - "@ethersproject/pbkdf2": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/providers": 5.7.2 - "@ethersproject/random": 5.7.0 - "@ethersproject/rlp": 5.7.0 - "@ethersproject/sha2": 5.7.0 - "@ethersproject/signing-key": 5.7.0 - "@ethersproject/solidity": 5.7.0 - "@ethersproject/strings": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/units": 5.7.0 - "@ethersproject/wallet": 5.7.0 - "@ethersproject/web": 5.7.1 - "@ethersproject/wordlists": 5.7.0 + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true /ethers@6.8.1: - resolution: - { - integrity: sha512-iEKm6zox5h1lDn6scuRWdIdFJUCGg3+/aQWu0F4K0GVyEZiktFkqrJbRjTn1FlYEPz7RKA707D6g5Kdk6j7Ljg==, - } - engines: { node: ">=14.0.0" } - dependencies: - "@adraffy/ens-normalize": 1.10.0 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@types/node": 18.15.13 + resolution: {integrity: sha512-iEKm6zox5h1lDn6scuRWdIdFJUCGg3+/aQWu0F4K0GVyEZiktFkqrJbRjTn1FlYEPz7RKA707D6g5Kdk6j7Ljg==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 aes-js: 4.0.0-beta.5 tslib: 2.4.0 ws: 8.5.0 @@ -12344,65 +10236,49 @@ packages: dev: true /ethjs-unit@0.1.6: - resolution: - { - integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==, - } - engines: { node: ">=6.5.0", npm: ">=3" } + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} dependencies: bn.js: 4.11.6 number-to-bn: 1.7.0 - dev: true /ethjs-util@0.1.6: - resolution: - { - integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==, - } - engines: { node: ">=6.5.0", npm: ">=3" } + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} dependencies: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 - dev: true /event-emitter@0.3.5: - resolution: - { - integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==, - } + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} dependencies: d: 1.0.1 es5-ext: 0.10.62 /event-source-polyfill@1.0.31: - resolution: - { - integrity: sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==, - } + resolution: {integrity: sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==} + + /eventemitter3@3.1.2: + resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} + dev: false + + /eventemitter3@4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + dev: false /events@3.3.0: - resolution: - { - integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, - } - engines: { node: ">=0.8.x" } + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} /evp_bytestokey@1.0.3: - resolution: - { - integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==, - } + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: true /execa@1.0.0: - resolution: - { - integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} dependencies: cross-spawn: 6.0.5 get-stream: 4.1.0 @@ -12413,11 +10289,8 @@ packages: strip-eof: 1.0.0 /execa@5.1.1: - resolution: - { - integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -12430,11 +10303,8 @@ packages: strip-final-newline: 2.0.0 /execa@7.2.0: - resolution: - { - integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, - } - engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 } + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -12448,19 +10318,13 @@ packages: dev: true /expand-template@2.0.3: - resolution: - { - integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} requiresBuild: true /express-http-proxy@1.6.3: - resolution: - { - integrity: sha512-/l77JHcOUrDUX8V67E287VEUQT0lbm71gdGVoodnlWBziarYKgMcpqT7xvh/HM8Jv52phw8Bd8tY+a7QjOr7Yg==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-/l77JHcOUrDUX8V67E287VEUQT0lbm71gdGVoodnlWBziarYKgMcpqT7xvh/HM8Jv52phw8Bd8tY+a7QjOr7Yg==} + engines: {node: '>=6.0.0'} dependencies: debug: 3.2.7 es6-promise: 4.2.8 @@ -12469,11 +10333,8 @@ packages: - supports-color /express@4.18.2: - resolution: - { - integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==, - } - engines: { node: ">= 0.10.0" } + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -12510,120 +10371,84 @@ packages: - supports-color /ext@1.7.0: - resolution: - { - integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==, - } + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: type: 2.7.2 + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /external-editor@3.1.0: - resolution: - { - integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + /extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: false + /fast-base64-decode@1.0.0: - resolution: - { - integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==, - } + resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} dev: true /fast-check@3.14.0: - resolution: - { - integrity: sha512-9Z0zqASzDNjXBox/ileV/fd+4P+V/f3o4shM6QawvcdLFh8yjPG4h5BrHUZ8yzY6amKGDTAmRMyb/JZqe+dCgw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-9Z0zqASzDNjXBox/ileV/fd+4P+V/f3o4shM6QawvcdLFh8yjPG4h5BrHUZ8yzY6amKGDTAmRMyb/JZqe+dCgw==} + engines: {node: '>=8.0.0'} dependencies: pure-rand: 6.0.4 dev: true /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} /fast-diff@1.3.0: - resolution: - { - integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, - } + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true /fast-fifo@1.3.2: - resolution: - { - integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, - } + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} requiresBuild: true /fast-glob@3.3.2: - resolution: - { - integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, - } - engines: { node: ">=8.6.0" } - dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} /fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} /fastest-levenshtein@1.0.16: - resolution: - { - integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==, - } - engines: { node: ">= 4.9.1" } + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} /fastq@1.15.0: - resolution: - { - integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, - } + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 /fb-watchman@2.0.2: - resolution: - { - integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, - } + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 /fbjs-css-vars@1.0.2: - resolution: - { - integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==, - } + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} /fbjs@3.0.5: - resolution: - { - integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==, - } + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} dependencies: cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 @@ -12635,30 +10460,27 @@ packages: transitivePeerDependencies: - encoding + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: false + /figures@3.2.0: - resolution: - { - integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 /file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 /file-loader@6.2.0(webpack@5.89.0): - resolution: - { - integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: @@ -12667,45 +10489,49 @@ packages: webpack: 5.89.0 /file-type@16.5.4: - resolution: - { - integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} dependencies: readable-web-to-node-stream: 3.0.2 strtok3: 6.3.0 token-types: 4.2.1 + /file-type@3.9.0: + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} + engines: {node: '>=0.10.0'} + dev: false + + /file-type@5.2.0: + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} + engines: {node: '>=4'} + dev: false + + /file-type@6.2.0: + resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} + engines: {node: '>=4'} + dev: false + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + /filesize@8.0.7: - resolution: - { - integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==, - } - engines: { node: ">= 0.4.0" } + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} /fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 /filter-obj@1.1.0: - resolution: - { - integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} /finalhandler@1.2.0: - resolution: - { - integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -12718,156 +10544,130 @@ packages: - supports-color /find-cache-dir@3.3.2: - resolution: - { - integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 /find-replace@3.0.0: - resolution: - { - integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==, - } - engines: { node: ">=4.0.0" } + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 dev: true /find-root@1.1.0: - resolution: - { - integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, - } + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: false /find-up@2.1.0: - resolution: - { - integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} dependencies: locate-path: 2.0.0 - dev: true /find-up@3.0.0: - resolution: - { - integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 /find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 /flat-cache@3.2.0: - resolution: - { - integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 + /flat@4.1.1: + resolution: {integrity: sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==} + hasBin: true + dependencies: + is-buffer: 2.0.5 + dev: false + /flat@5.0.2: - resolution: - { - integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, - } + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true /flatted@3.2.9: - resolution: - { - integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==, - } + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} /fmix@0.1.0: - resolution: - { - integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==, - } + resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} dependencies: imul: 1.0.1 dev: true /focus-lock@1.0.0: - resolution: - { - integrity: sha512-a8Ge6cdKh9za/GZR/qtigTAk7SrGore56EFcoMshClsh7FLk1zwszc/ltuMfKhx56qeuyL/jWQ4J4axou0iJ9w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-a8Ge6cdKh9za/GZR/qtigTAk7SrGore56EFcoMshClsh7FLk1zwszc/ltuMfKhx56qeuyL/jWQ4J4axou0iJ9w==} + engines: {node: '>=10'} dependencies: tslib: 2.6.2 dev: false /follow-redirects@1.15.3(debug@4.3.4): - resolution: - { - integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} peerDependencies: - debug: "*" + debug: '*' peerDependenciesMeta: debug: optional: true dependencies: debug: 4.3.4(supports-color@8.1.1) + /follow-redirects@1.5.10: + resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} + engines: {node: '>=4.0'} + dependencies: + debug: 3.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, - } + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + /forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: false + /fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.3.2)(webpack@5.89.0): - resolution: - { - integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==, - } - engines: { node: ">=10", yarn: ">=1.0.0" } - peerDependencies: - eslint: ">= 6" - typescript: ">= 2.7" - vue-template-compiler: "*" - webpack: ">= 4" + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' peerDependenciesMeta: eslint: optional: true vue-template-compiler: optional: true dependencies: - "@babel/code-frame": 7.23.4 - "@types/json-schema": 7.0.15 + '@babel/code-frame': 7.23.4 + '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 @@ -12884,18 +10684,21 @@ packages: webpack: 5.89.0 /form-data-encoder@2.1.4: - resolution: - { - integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==, - } - engines: { node: ">= 14.17" } + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + /form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false /form-data@2.5.1: - resolution: - { - integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==, - } - engines: { node: ">= 0.12" } + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -12903,25 +10706,19 @@ packages: dev: true /form-data@4.0.0: - resolution: - { - integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 /formik@2.4.5(react@18.2.0): - resolution: - { - integrity: sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ==, - } + resolution: {integrity: sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ==} peerDependencies: - react: ">=16.8.0" + react: '>=16.8.0' dependencies: - "@types/hoist-non-react-statics": 3.3.5 + '@types/hoist-non-react-statics': 3.3.5 deepmerge: 2.2.1 hoist-non-react-statics: 3.3.2 lodash: 4.17.21 @@ -12933,30 +10730,22 @@ packages: dev: false /forwarded@0.2.0: - resolution: - { - integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} /fp-ts@1.19.3: - resolution: - { - integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==, - } + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true + /fp-ts@2.1.1: + resolution: {integrity: sha512-YcWhMdDCFCja0MmaDroTgNu+NWWrrnUEn92nvDgrtVy9Z71YFnhNVIghoHPt8gs82ijoMzFGeWKvArbyICiJgw==} + dev: false + /fraction.js@4.3.7: - resolution: - { - integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, - } + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} /framer-motion@10.16.5(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-GEzVjOYP2MIpV9bT/GbhcsBNoImG3/2X3O/xVNWmktkv9MdJ7P/44zELm/7Fjb+O3v39SmKFnoDQB32giThzpg==, - } + resolution: {integrity: sha512-GEzVjOYP2MIpV9bT/GbhcsBNoImG3/2X3O/xVNWmktkv9MdJ7P/44zELm/7Fjb+O3v39SmKFnoDQB32giThzpg==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -12970,43 +10759,28 @@ packages: react-dom: 18.2.0(react@18.2.0) tslib: 2.6.2 optionalDependencies: - "@emotion/is-prop-valid": 0.8.8 + '@emotion/is-prop-valid': 0.8.8 dev: false /framesync@6.1.2: - resolution: - { - integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==, - } + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} dependencies: tslib: 2.4.0 dev: false /fresh@0.5.2: - resolution: - { - integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} /fs-constants@1.0.0: - resolution: - { - integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, - } + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} requiresBuild: true /fs-exists-cached@1.0.0: - resolution: - { - integrity: sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==, - } + resolution: {integrity: sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==} /fs-extra@0.30.0: - resolution: - { - integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==, - } + resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} dependencies: graceful-fs: 4.2.11 jsonfile: 2.4.0 @@ -13016,11 +10790,8 @@ packages: dev: true /fs-extra@10.1.0: - resolution: - { - integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 @@ -13028,22 +10799,24 @@ packages: dev: true /fs-extra@11.1.1: - resolution: - { - integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, - } - engines: { node: ">=14.14" } + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + /fs-extra@4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + /fs-extra@7.0.1: - resolution: - { - integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, - } - engines: { node: ">=6 <7 || >=8" } + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 @@ -13051,11 +10824,8 @@ packages: dev: true /fs-extra@8.1.0: - resolution: - { - integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, - } - engines: { node: ">=6 <7 || >=8" } + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 @@ -13063,58 +10833,43 @@ packages: dev: true /fs-extra@9.1.0: - resolution: - { - integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + /fs-minipass@1.2.7: + resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} + dependencies: + minipass: 2.9.0 + dev: false + /fs-monkey@1.0.5: - resolution: - { - integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==, - } + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} /fs-readdir-recursive@1.1.0: - resolution: - { - integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==, - } + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true /fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, - } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} /fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true /function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, - } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} /function.prototype.name@1.1.6: - resolution: - { - integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -13122,36 +10877,32 @@ packages: functions-have-names: 1.2.3 /functional-red-black-tree@1.0.1: - resolution: - { - integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==, - } + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} /functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + /futoin-hkdf@1.5.3: + resolution: {integrity: sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==} + engines: {node: '>=8'} + dev: false /gatsby-cli@5.12.4: - resolution: - { - integrity: sha512-GD+otyd5LlgSbYK4ODrKyAise/k32G7Qy7H/k+gJ2P8DCG9sU+j//2zNwF7mY8C5dl0SpROqFTL+I0Y1DK4tmQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-GD+otyd5LlgSbYK4ODrKyAise/k32G7Qy7H/k+gJ2P8DCG9sU+j//2zNwF7mY8C5dl0SpROqFTL+I0Y1DK4tmQ==} + engines: {node: '>=18.0.0'} hasBin: true requiresBuild: true dependencies: - "@babel/code-frame": 7.23.4 - "@babel/core": 7.23.3 - "@babel/generator": 7.23.4 - "@babel/helper-plugin-utils": 7.22.5 - "@babel/preset-typescript": 7.23.3(@babel/core@7.23.3) - "@babel/runtime": 7.23.4 - "@babel/template": 7.22.15 - "@babel/types": 7.23.4 - "@jridgewell/trace-mapping": 0.3.20 - "@types/common-tags": 1.8.4 + '@babel/code-frame': 7.23.4 + '@babel/core': 7.23.3 + '@babel/generator': 7.23.4 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.3) + '@babel/runtime': 7.23.4 + '@babel/template': 7.22.15 + '@babel/types': 7.23.4 + '@jridgewell/trace-mapping': 0.3.20 + '@types/common-tags': 1.8.4 better-opn: 2.1.1 boxen: 5.1.2 chalk: 4.1.2 @@ -13188,13 +10939,10 @@ packages: - supports-color /gatsby-core-utils@4.12.1: - resolution: - { - integrity: sha512-YW7eCK2M6yGQerT5LkdOHLZTNYMsDvcgeDMRy0q66FWKj7twPZX428I6NaLCMeF5dYoj1HOOO0u96iNlW5jcKQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-YW7eCK2M6yGQerT5LkdOHLZTNYMsDvcgeDMRy0q66FWKj7twPZX428I6NaLCMeF5dYoj1HOOO0u96iNlW5jcKQ==} + engines: {node: '>=18.0.0'} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 ci-info: 2.0.0 configstore: 5.0.1 fastq: 1.15.0 @@ -13212,47 +10960,35 @@ packages: xdg-basedir: 4.0.0 /gatsby-graphiql-explorer@3.12.1: - resolution: - { - integrity: sha512-c2iG+4nAft2cTS9zgnPUAYNBtxTWGKjI26QIfjuo25j7/klnz8rLQYdj6TA4Z2Y3yyTyBspAHr9ho6zvOHlBJg==, - } - engines: { node: ">=14.15.0" } + resolution: {integrity: sha512-c2iG+4nAft2cTS9zgnPUAYNBtxTWGKjI26QIfjuo25j7/klnz8rLQYdj6TA4Z2Y3yyTyBspAHr9ho6zvOHlBJg==} + engines: {node: '>=14.15.0'} /gatsby-legacy-polyfills@3.12.0: - resolution: - { - integrity: sha512-hj0M4w4xFvKHtBNE3StkLmbCS3LXK0oxW5g3UkubbyMAwFqylQnWzXfysBpeFicQN/tr2px1cNGaqp91Z3Nh+g==, - } + resolution: {integrity: sha512-hj0M4w4xFvKHtBNE3StkLmbCS3LXK0oxW5g3UkubbyMAwFqylQnWzXfysBpeFicQN/tr2px1cNGaqp91Z3Nh+g==} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 core-js-compat: 3.31.0 /gatsby-link@5.12.1(@gatsbyjs/reach-router@2.0.1)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-0xhQhRnpPRHWouoNzkVTu8qhbUa8GhbRrCo2QKiOyAdVzU96ZzWEMw2FUkgG6Ht5kglDXHek6LOiWyAv6jf49g==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-0xhQhRnpPRHWouoNzkVTu8qhbUa8GhbRrCo2QKiOyAdVzU96ZzWEMw2FUkgG6Ht5kglDXHek6LOiWyAv6jf49g==} + engines: {node: '>=18.0.0'} peerDependencies: - "@gatsbyjs/reach-router": ^2.0.0 + '@gatsbyjs/reach-router': ^2.0.0 react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - "@gatsbyjs/reach-router": 2.0.1(react-dom@18.2.0)(react@18.2.0) - "@types/reach__router": 1.3.14 + '@gatsbyjs/reach-router': 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@types/reach__router': 1.3.14 gatsby-page-utils: 3.12.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /gatsby-page-utils@3.12.1: - resolution: - { - integrity: sha512-BGtAvx4JZ143uRHYlUbWS8ZjOJ14fpj3nQfb68y9ZsNL1gdwjdWjuPXTM1gQ+w6wXDsHD/ovmYz1ZHG7qrQjJQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-BGtAvx4JZ143uRHYlUbWS8ZjOJ14fpj3nQfb68y9ZsNL1gdwjdWjuPXTM1gQ+w6wXDsHD/ovmYz1ZHG7qrQjJQ==} + engines: {node: '>=18.0.0'} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 bluebird: 3.7.2 chokidar: 3.5.3 fs-exists-cached: 1.0.0 @@ -13262,38 +10998,32 @@ packages: micromatch: 4.0.5 /gatsby-parcel-config@1.12.1(@parcel/core@2.8.3): - resolution: - { - integrity: sha512-hH9m/dSJTkdeksBzLGi9U+Pey0CsPeHHrRP6pugxd7owtJUQqid37noyadqnawBo2LOwcGE4o69HhqGxGNXxbw==, - } - engines: { parcel: 2.x } - peerDependencies: - "@parcel/core": ^2.0.0 - dependencies: - "@gatsbyjs/parcel-namer-relative-to-cwd": 2.12.1(@parcel/core@2.8.3) - "@parcel/bundler-default": 2.8.3(@parcel/core@2.8.3) - "@parcel/compressor-raw": 2.8.3(@parcel/core@2.8.3) - "@parcel/core": 2.8.3 - "@parcel/namer-default": 2.8.3(@parcel/core@2.8.3) - "@parcel/optimizer-terser": 2.8.3(@parcel/core@2.8.3) - "@parcel/packager-js": 2.8.3(@parcel/core@2.8.3) - "@parcel/packager-raw": 2.8.3(@parcel/core@2.8.3) - "@parcel/reporter-dev-server": 2.8.3(@parcel/core@2.8.3) - "@parcel/resolver-default": 2.8.3(@parcel/core@2.8.3) - "@parcel/runtime-js": 2.8.3(@parcel/core@2.8.3) - "@parcel/transformer-js": 2.8.3(@parcel/core@2.8.3) - "@parcel/transformer-json": 2.8.3(@parcel/core@2.8.3) + resolution: {integrity: sha512-hH9m/dSJTkdeksBzLGi9U+Pey0CsPeHHrRP6pugxd7owtJUQqid37noyadqnawBo2LOwcGE4o69HhqGxGNXxbw==} + engines: {parcel: 2.x} + peerDependencies: + '@parcel/core': ^2.0.0 + dependencies: + '@gatsbyjs/parcel-namer-relative-to-cwd': 2.12.1(@parcel/core@2.8.3) + '@parcel/bundler-default': 2.8.3(@parcel/core@2.8.3) + '@parcel/compressor-raw': 2.8.3(@parcel/core@2.8.3) + '@parcel/core': 2.8.3 + '@parcel/namer-default': 2.8.3(@parcel/core@2.8.3) + '@parcel/optimizer-terser': 2.8.3(@parcel/core@2.8.3) + '@parcel/packager-js': 2.8.3(@parcel/core@2.8.3) + '@parcel/packager-raw': 2.8.3(@parcel/core@2.8.3) + '@parcel/reporter-dev-server': 2.8.3(@parcel/core@2.8.3) + '@parcel/resolver-default': 2.8.3(@parcel/core@2.8.3) + '@parcel/runtime-js': 2.8.3(@parcel/core@2.8.3) + '@parcel/transformer-js': 2.8.3(@parcel/core@2.8.3) + '@parcel/transformer-json': 2.8.3(@parcel/core@2.8.3) /gatsby-plugin-manifest@5.12.3(gatsby@5.12.11)(graphql@16.8.1): - resolution: - { - integrity: sha512-qpH0pSIIt7ggO7OnP127eKn6fhD1DKTzg9Aw8vaMCO8MMOQ5qfOn3ZrRCgH6DuaU1admZU18gFKlCKH+QHoGfQ==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-qpH0pSIIt7ggO7OnP127eKn6fhD1DKTzg9Aw8vaMCO8MMOQ5qfOn3ZrRCgH6DuaU1admZU18gFKlCKH+QHoGfQ==} + engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 gatsby: 5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) gatsby-core-utils: 4.12.1 gatsby-plugin-utils: 4.12.3(gatsby@5.12.11)(graphql@16.8.1) @@ -13304,17 +11034,14 @@ packages: dev: false /gatsby-plugin-page-creator@5.12.3(gatsby@5.12.11)(graphql@16.8.1): - resolution: - { - integrity: sha512-li9jKy70h4vXNxxRrXP2DpgEx05m5E7EDOLCjAWNsm7e9EO1szixXQ0ev6Ie1SBKT6vAHAoIonet6+oFattf9w==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-li9jKy70h4vXNxxRrXP2DpgEx05m5E7EDOLCjAWNsm7e9EO1szixXQ0ev6Ie1SBKT6vAHAoIonet6+oFattf9w==} + engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next dependencies: - "@babel/runtime": 7.23.4 - "@babel/traverse": 7.23.4 - "@sindresorhus/slugify": 1.1.2 + '@babel/runtime': 7.23.4 + '@babel/traverse': 7.23.4 + '@sindresorhus/slugify': 1.1.2 chokidar: 3.5.3 fs-exists-cached: 1.0.0 fs-extra: 11.1.1 @@ -13331,10 +11058,7 @@ packages: - supports-color /gatsby-plugin-pnpm@1.2.10(gatsby@5.12.11): - resolution: - { - integrity: sha512-29xjIakNEUY42OBb3wI9Thmawr5EcUUOB3dB8nE51yr/TfKQFCREk+HAOATQHTNedG3VZhgU4wVjl2V3wgOXJA==, - } + resolution: {integrity: sha512-29xjIakNEUY42OBb3wI9Thmawr5EcUUOB3dB8nE51yr/TfKQFCREk+HAOATQHTNedG3VZhgU4wVjl2V3wgOXJA==} peerDependencies: gatsby: ~2.x.x || ~3.x.x || ~4.x.x dependencies: @@ -13344,51 +11068,42 @@ packages: dev: true /gatsby-plugin-react-helmet@6.12.0(gatsby@5.12.11)(react-helmet@6.1.0): - resolution: - { - integrity: sha512-agcBCT9H8nlpkAU3D1fUeJbjh7IMPjGO/njoa7avIYLGsQ2nyGlHwcrEmS2zBHxYKaxPkztvr47OpCdnuEIvEw==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-agcBCT9H8nlpkAU3D1fUeJbjh7IMPjGO/njoa7avIYLGsQ2nyGlHwcrEmS2zBHxYKaxPkztvr47OpCdnuEIvEw==} + engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next react-helmet: ^5.1.3 || ^6.0.0 dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 gatsby: 5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) react-helmet: 6.1.0(react@18.2.0) dev: false /gatsby-plugin-typescript@5.12.1(gatsby@5.12.11): - resolution: - { - integrity: sha512-NIigc9TnhjLam/WAQxvVLKpRgjOXzDDgetOt2F2qtO+1KjMuUgLxHdd613Z0JoSPGpi5ug0KG8U99gh9zge7jA==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-NIigc9TnhjLam/WAQxvVLKpRgjOXzDDgetOt2F2qtO+1KjMuUgLxHdd613Z0JoSPGpi5ug0KG8U99gh9zge7jA==} + engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next dependencies: - "@babel/core": 7.23.3 - "@babel/plugin-proposal-nullish-coalescing-operator": 7.18.6(@babel/core@7.23.3) - "@babel/plugin-proposal-numeric-separator": 7.18.6(@babel/core@7.23.3) - "@babel/plugin-proposal-optional-chaining": 7.21.0(@babel/core@7.23.3) - "@babel/preset-typescript": 7.23.3(@babel/core@7.23.3) - "@babel/runtime": 7.23.4 + '@babel/core': 7.23.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.3) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.3) + '@babel/runtime': 7.23.4 babel-plugin-remove-graphql-queries: 5.12.1(@babel/core@7.23.3)(gatsby@5.12.11) gatsby: 5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) transitivePeerDependencies: - supports-color /gatsby-plugin-utils@4.12.3(gatsby@5.12.11)(graphql@16.8.1): - resolution: - { - integrity: sha512-AMagRfVAIwc3w66RZzq9cGPma3pkrGe/iyhktmHWDOtu45tOt0zlbSY91juuCw2Oov17WzJp2TWKQ/i0nkuLbA==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-AMagRfVAIwc3w66RZzq9cGPma3pkrGe/iyhktmHWDOtu45tOt0zlbSY91juuCw2Oov17WzJp2TWKQ/i0nkuLbA==} + engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next graphql: ^16.0.0 dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 fastq: 1.15.0 fs-extra: 11.1.1 gatsby: 5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) @@ -13401,58 +11116,46 @@ packages: mime: 3.0.0 /gatsby-react-router-scroll@6.12.0(@gatsbyjs/reach-router@2.0.1)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-KZqkJE/2LPtBemFVKKzCSDN86jqZatTCfMi+D0fkfeHDteaxDhJxIILtCizxr4TfPJRvvip0Wy/Oaafv4exmiA==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-KZqkJE/2LPtBemFVKKzCSDN86jqZatTCfMi+D0fkfeHDteaxDhJxIILtCizxr4TfPJRvvip0Wy/Oaafv4exmiA==} + engines: {node: '>=18.0.0'} peerDependencies: - "@gatsbyjs/reach-router": ^2.0.0 + '@gatsbyjs/reach-router': ^2.0.0 react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - "@babel/runtime": 7.23.4 - "@gatsbyjs/reach-router": 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.4 + '@gatsbyjs/reach-router': 2.0.1(react-dom@18.2.0)(react@18.2.0) prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /gatsby-script@2.12.0(@gatsbyjs/reach-router@2.0.1)(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-prYN8x8q+ErQpy8G4c8VR+BalFe1H7v09/esJWF8Ufmy7xi0FsbG56a/Ee2YDrnuu942lhY+ailWR+UnDSDA8g==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-prYN8x8q+ErQpy8G4c8VR+BalFe1H7v09/esJWF8Ufmy7xi0FsbG56a/Ee2YDrnuu942lhY+ailWR+UnDSDA8g==} + engines: {node: '>=18.0.0'} peerDependencies: - "@gatsbyjs/reach-router": ^2.0.0 + '@gatsbyjs/reach-router': ^2.0.0 react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - "@gatsbyjs/reach-router": 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@gatsbyjs/reach-router': 2.0.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /gatsby-sharp@1.12.1: - resolution: - { - integrity: sha512-e7lqA74UZau7MOktc9V+sNh86a8oNZPFIsY5Atk+C0sGlzHx0IcivsJjwLHJ6OF11SIC38a9z2wE8Nl6YiG/Ig==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-e7lqA74UZau7MOktc9V+sNh86a8oNZPFIsY5Atk+C0sGlzHx0IcivsJjwLHJ6OF11SIC38a9z2wE8Nl6YiG/Ig==} + engines: {node: '>=18.0.0'} dependencies: sharp: 0.32.6 /gatsby-telemetry@4.12.1: - resolution: - { - integrity: sha512-MTHcKt5Cl68DveBpsduwfJdRjoXg48fcjITo1TspbxS2R0WnTZPRohGbA+JmQdY+O1eUSysdrONIjf6r86nhiA==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-MTHcKt5Cl68DveBpsduwfJdRjoXg48fcjITo1TspbxS2R0WnTZPRohGbA+JmQdY+O1eUSysdrONIjf6r86nhiA==} + engines: {node: '>=18.0.0'} requiresBuild: true dependencies: - "@babel/code-frame": 7.23.4 - "@babel/runtime": 7.23.4 - "@turist/fetch": 7.2.0(node-fetch@2.7.0) - "@turist/time": 0.0.2 + '@babel/code-frame': 7.23.4 + '@babel/runtime': 7.23.4 + '@turist/fetch': 7.2.0(node-fetch@2.7.0) + '@turist/time': 0.0.2 boxen: 5.1.2 configstore: 5.0.1 fs-extra: 11.1.1 @@ -13465,58 +11168,52 @@ packages: - encoding /gatsby-worker@2.12.0: - resolution: - { - integrity: sha512-wQTlAH8HdbJvCYZJ9jHCHSzF8E4SwB65suQ2hNo29wg4BhuMMpPWrLmraqPIGeAsBnWUEjzNGdedtzbCVwBJPQ==, - } - engines: { node: ">=18.0.0" } - dependencies: - "@babel/core": 7.23.3 - "@babel/runtime": 7.23.4 + resolution: {integrity: sha512-wQTlAH8HdbJvCYZJ9jHCHSzF8E4SwB65suQ2hNo29wg4BhuMMpPWrLmraqPIGeAsBnWUEjzNGdedtzbCVwBJPQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@babel/core': 7.23.3 + '@babel/runtime': 7.23.4 fs-extra: 11.1.1 signal-exit: 3.0.7 transitivePeerDependencies: - supports-color /gatsby@5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-4XuN4bo6W6JnIYkvaCeV+5fKTzxv78aAgOTEW4doupP8/bD0bgLwuIHFwnvhEMHQiGdALoKukLkqhkgAShUK0w==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-4XuN4bo6W6JnIYkvaCeV+5fKTzxv78aAgOTEW4doupP8/bD0bgLwuIHFwnvhEMHQiGdALoKukLkqhkgAShUK0w==} + engines: {node: '>=18.0.0'} hasBin: true requiresBuild: true peerDependencies: react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - "@babel/code-frame": 7.23.4 - "@babel/core": 7.23.3 - "@babel/eslint-parser": 7.23.3(@babel/core@7.23.3)(eslint@7.32.0) - "@babel/helper-plugin-utils": 7.22.5 - "@babel/parser": 7.23.4 - "@babel/runtime": 7.23.4 - "@babel/traverse": 7.23.4 - "@babel/types": 7.23.4 - "@builder.io/partytown": 0.7.6 - "@gatsbyjs/reach-router": 2.0.1(react-dom@18.2.0)(react@18.2.0) - "@gatsbyjs/webpack-hot-middleware": 2.25.3 - "@graphql-codegen/add": 3.2.3(graphql@16.8.1) - "@graphql-codegen/core": 2.6.8(graphql@16.8.1) - "@graphql-codegen/plugin-helpers": 2.7.2(graphql@16.8.1) - "@graphql-codegen/typescript": 2.8.8(graphql@16.8.1) - "@graphql-codegen/typescript-operations": 2.5.13(graphql@16.8.1) - "@graphql-tools/code-file-loader": 7.3.23(@babel/core@7.23.3)(graphql@16.8.1) - "@graphql-tools/load": 7.8.14(graphql@16.8.1) - "@jridgewell/trace-mapping": 0.3.20 - "@nodelib/fs.walk": 1.2.8 - "@parcel/cache": 2.8.3(@parcel/core@2.8.3) - "@parcel/core": 2.8.3 - "@pmmmwh/react-refresh-webpack-plugin": 0.5.11(react-refresh@0.14.0)(webpack@5.89.0) - "@types/http-proxy": 1.17.14 - "@typescript-eslint/eslint-plugin": 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@5.3.2) - "@typescript-eslint/parser": 5.62.0(eslint@7.32.0)(typescript@5.3.2) - "@vercel/webpack-asset-relocator-loader": 1.7.3 + '@babel/code-frame': 7.23.4 + '@babel/core': 7.23.3 + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.3)(eslint@7.32.0) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/parser': 7.23.4 + '@babel/runtime': 7.23.4 + '@babel/traverse': 7.23.4 + '@babel/types': 7.23.4 + '@builder.io/partytown': 0.7.6 + '@gatsbyjs/reach-router': 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@gatsbyjs/webpack-hot-middleware': 2.25.3 + '@graphql-codegen/add': 3.2.3(graphql@16.8.1) + '@graphql-codegen/core': 2.6.8(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.1) + '@graphql-codegen/typescript': 2.8.8(graphql@16.8.1) + '@graphql-codegen/typescript-operations': 2.5.13(graphql@16.8.1) + '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.23.3)(graphql@16.8.1) + '@graphql-tools/load': 7.8.14(graphql@16.8.1) + '@jridgewell/trace-mapping': 0.3.20 + '@nodelib/fs.walk': 1.2.8 + '@parcel/cache': 2.8.3(@parcel/core@2.8.3) + '@parcel/core': 2.8.3 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.89.0) + '@types/http-proxy': 1.17.14 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@5.3.2) + '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@5.3.2) + '@vercel/webpack-asset-relocator-loader': 1.7.3 acorn-loose: 8.4.0 acorn-walk: 8.3.0 address: 1.2.2 @@ -13661,8 +11358,8 @@ packages: optionalDependencies: gatsby-sharp: 1.12.1 transitivePeerDependencies: - - "@swc/core" - - "@types/webpack" + - '@swc/core' + - '@types/webpack' - babel-eslint - bufferutil - clean-css @@ -13686,31 +11383,18 @@ packages: - webpack-plugin-serve /gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} /get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} /get-func-name@2.0.2: - resolution: - { - integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, - } - dev: true + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} /get-intrinsic@1.2.2: - resolution: - { - integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==, - } + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: function-bind: 1.1.2 has-proto: 1.0.1 @@ -13718,60 +11402,58 @@ packages: hasown: 2.0.0 /get-nonce@1.0.1: - resolution: - { - integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} dev: false /get-port@3.2.0: - resolution: - { - integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + + /get-stream@2.3.1: + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + dev: false + + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: false /get-stream@4.1.0: - resolution: - { - integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} dependencies: pump: 3.0.0 /get-stream@5.2.0: - resolution: - { - integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} dependencies: pump: 3.0.0 /get-stream@6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} /get-symbol-description@1.0.0: - resolution: - { - integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 + /getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: false + /ghost-testrpc@0.0.2: - resolution: - { - integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==, - } + resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} hasBin: true dependencies: chalk: 2.4.2 @@ -13779,50 +11461,32 @@ packages: dev: true /git-up@7.0.0: - resolution: - { - integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==, - } + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} dependencies: is-ssh: 1.4.0 parse-url: 8.1.0 /github-from-package@0.0.0: - resolution: - { - integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==, - } + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} requiresBuild: true /glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 /glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 /glob-to-regexp@0.4.1: - resolution: - { - integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, - } + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} /glob@5.0.15: - resolution: - { - integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==, - } + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} dependencies: inflight: 1.0.6 inherits: 2.0.4 @@ -13831,11 +11495,19 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob@7.1.3: + resolution: {integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + /glob@7.1.7: - resolution: - { - integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==, - } + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13846,10 +11518,7 @@ packages: dev: true /glob@7.2.0: - resolution: - { - integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==, - } + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13860,10 +11529,7 @@ packages: dev: true /glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13873,11 +11539,8 @@ packages: path-is-absolute: 1.0.1 /glob@8.1.0: - resolution: - { - integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -13887,58 +11550,47 @@ packages: dev: true /global-modules@2.0.0: - resolution: - { - integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} dependencies: global-prefix: 3.0.0 /global-prefix@3.0.0: - resolution: - { - integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} dependencies: ini: 1.3.8 kind-of: 6.0.3 which: 1.3.1 + /global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + dev: false + /globals@11.12.0: - resolution: - { - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} /globals@13.23.0: - resolution: - { - integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 /globalthis@1.0.3: - resolution: - { - integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 /globby@10.0.2: - resolution: - { - integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} dependencies: - "@types/glob": 7.2.0 + '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 @@ -13949,11 +11601,8 @@ packages: dev: true /globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -13962,25 +11611,24 @@ packages: merge2: 1.4.1 slash: 3.0.0 + /google-libphonenumber@3.2.34: + resolution: {integrity: sha512-CLwkp0lZvMywh6dCh0T3Fm8XsfJhLAupc8AECwYkJNQBPW8wQPrv/tV0oFKCs8FMw+pTQyNPZoycgBzYjqtTZQ==} + engines: {node: '>=0.10'} + dev: false + /gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, - } + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.2 /got@11.8.6: - resolution: - { - integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==, - } - engines: { node: ">=10.19.0" } - dependencies: - "@sindresorhus/is": 4.6.0 - "@szmarczak/http-timer": 4.0.6 - "@types/cacheable-request": 6.0.3 - "@types/responselike": 1.0.3 + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -13990,14 +11638,11 @@ packages: responselike: 2.0.1 /got@12.6.1: - resolution: - { - integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==, - } - engines: { node: ">=14.16" } - dependencies: - "@sindresorhus/is": 5.6.0 - "@szmarczak/http-timer": 5.0.1 + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 cacheable-lookup: 7.0.0 cacheable-request: 10.2.14 decompress-response: 6.0.0 @@ -14008,29 +11653,58 @@ packages: p-cancelable: 3.0.0 responselike: 3.0.0 + /got@7.1.0: + resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} + engines: {node: '>=4'} + dependencies: + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.3 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + is-plain-obj: 1.1.0 + is-retry-allowed: 1.2.0 + is-stream: 1.1.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + p-cancelable: 0.3.0 + p-timeout: 1.2.1 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 1.0.0 + url-to-options: 1.0.1 + dev: false + + /got@9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.3 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: false + /graceful-fs@4.2.10: - resolution: - { - integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, - } + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} /graphemer@1.4.0: - resolution: - { - integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, - } + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} /graphql-compose@9.0.10(graphql@16.8.1): - resolution: - { - integrity: sha512-UsVoxfi2+c8WbHl2pEB+teoRRZoY4mbWBoijeLDGpAZBSPChnqtSRjp+T9UcouLCwGr5ooNyOQLoI3OVzU1bPQ==, - } + resolution: {integrity: sha512-UsVoxfi2+c8WbHl2pEB+teoRRZoY4mbWBoijeLDGpAZBSPChnqtSRjp+T9UcouLCwGr5ooNyOQLoI3OVzU1bPQ==} peerDependencies: graphql: ^14.2.0 || ^15.0.0 || ^16.0.0 dependencies: @@ -14038,22 +11712,16 @@ packages: graphql-type-json: 0.3.2(graphql@16.8.1) /graphql-http@1.22.0(graphql@16.8.1): - resolution: - { - integrity: sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==} + engines: {node: '>=12'} peerDependencies: - graphql: ">=0.11 <=16" + graphql: '>=0.11 <=16' dependencies: graphql: 16.8.1 /graphql-tag@2.12.6(graphql@16.8.1): - resolution: - { - integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: @@ -14061,37 +11729,30 @@ packages: tslib: 2.6.2 /graphql-type-json@0.3.2(graphql@16.8.1): - resolution: - { - integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==, - } + resolution: {integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==} peerDependencies: - graphql: ">=0.8.0" + graphql: '>=0.8.0' dependencies: graphql: 16.8.1 /graphql@16.8.1: - resolution: - { - integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==, - } - engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + /growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + dev: false /gzip-size@6.0.0: - resolution: - { - integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} dependencies: duplexer: 0.1.2 /handlebars@4.7.8: - resolution: - { - integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==, - } - engines: { node: ">=0.4.7" } + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} hasBin: true dependencies: minimist: 1.2.8 @@ -14102,11 +11763,22 @@ packages: uglify-js: 3.17.4 dev: true + /har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: false + + /har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + dev: false + /hardhat-contract-sizer@2.10.0(hardhat@2.19.1): - resolution: - { - integrity: sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==, - } + resolution: {integrity: sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==} peerDependencies: hardhat: ^2.0.0 dependencies: @@ -14117,23 +11789,20 @@ packages: dev: true /hardhat-deploy@0.11.43: - resolution: - { - integrity: sha512-D760CjDtinwjOCpKOvdyRtIJYLQIYXmhfgkFe+AkxlYM9bPZ/T4tZ/xIB2tR89ZT+z0hF1YuZFBXIL3/G/9T5g==, - } - dependencies: - "@ethersproject/abi": 5.7.0 - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/contracts": 5.7.0 - "@ethersproject/providers": 5.7.2 - "@ethersproject/solidity": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/wallet": 5.7.0 - "@types/qs": 6.9.10 + resolution: {integrity: sha512-D760CjDtinwjOCpKOvdyRtIJYLQIYXmhfgkFe+AkxlYM9bPZ/T4tZ/xIB2tR89ZT+z0hF1YuZFBXIL3/G/9T5g==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@types/qs': 6.9.10 axios: 0.21.4(debug@4.3.4) chalk: 4.1.2 chokidar: 3.5.3 @@ -14153,10 +11822,7 @@ packages: dev: true /hardhat-gas-reporter@1.0.9(hardhat@2.19.1): - resolution: - { - integrity: sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==, - } + resolution: {integrity: sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==} peerDependencies: hardhat: ^2.0.2 dependencies: @@ -14165,43 +11831,40 @@ packages: hardhat: 2.19.1(ts-node@10.9.1)(typescript@5.3.2) sha1: 1.1.1 transitivePeerDependencies: - - "@codechecks/client" + - '@codechecks/client' - bufferutil - debug - utf-8-validate dev: true /hardhat@2.19.1(ts-node@10.9.1)(typescript@5.3.2): - resolution: - { - integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==, - } + resolution: {integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==} hasBin: true peerDependencies: - ts-node: "*" - typescript: "*" + ts-node: '*' + typescript: '*' peerDependenciesMeta: ts-node: optional: true typescript: optional: true dependencies: - "@ethersproject/abi": 5.7.0 - "@metamask/eth-sig-util": 4.0.1 - "@nomicfoundation/ethereumjs-block": 5.0.2 - "@nomicfoundation/ethereumjs-blockchain": 7.0.2 - "@nomicfoundation/ethereumjs-common": 4.0.2 - "@nomicfoundation/ethereumjs-evm": 2.0.2 - "@nomicfoundation/ethereumjs-rlp": 5.0.2 - "@nomicfoundation/ethereumjs-statemanager": 2.0.2 - "@nomicfoundation/ethereumjs-trie": 6.0.2 - "@nomicfoundation/ethereumjs-tx": 5.0.2 - "@nomicfoundation/ethereumjs-util": 9.0.2 - "@nomicfoundation/ethereumjs-vm": 7.0.2 - "@nomicfoundation/solidity-analyzer": 0.1.1 - "@sentry/node": 5.30.0 - "@types/bn.js": 5.1.5 - "@types/lru-cache": 5.1.1 + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-blockchain': 7.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-evm': 2.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-statemanager': 2.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + '@nomicfoundation/ethereumjs-vm': 7.0.2 + '@nomicfoundation/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 adm-zip: 0.4.16 aggregate-error: 3.1.0 ansi-escapes: 4.3.2 @@ -14243,184 +11906,136 @@ packages: dev: true /has-bigints@1.0.2: - resolution: - { - integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, - } + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} /has-flag@1.0.0: - resolution: - { - integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} dev: true /has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} /has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} /has-property-descriptors@1.0.1: - resolution: - { - integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==, - } + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: get-intrinsic: 1.2.2 /has-proto@1.0.1: - resolution: - { - integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbol-support-x@1.4.2: + resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + dev: false /has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-to-string-tag-x@1.4.1: + resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + dependencies: + has-symbol-support-x: 1.4.2 + dev: false /has-tostringtag@1.0.0: - resolution: - { - integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 /hash-base@3.1.0: - resolution: - { - integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} dependencies: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: true /hash-wasm@4.11.0: - resolution: - { - integrity: sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ==, - } + resolution: {integrity: sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ==} + + /hash.js@1.1.3: + resolution: {integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false /hash.js@1.1.7: - resolution: - { - integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==, - } + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: true /hasha@5.2.2: - resolution: - { - integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} dependencies: is-stream: 2.0.1 type-fest: 0.8.1 /hasown@2.0.0: - resolution: - { - integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 /he@1.2.0: - resolution: - { - integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, - } + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true /header-case@2.0.4: - resolution: - { - integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==, - } + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} dependencies: capital-case: 1.0.4 tslib: 2.6.2 /heap@0.2.7: - resolution: - { - integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==, - } + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: true /hmac-drbg@1.0.1: - resolution: - { - integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==, - } + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: true /hoist-non-react-statics@3.3.2: - resolution: - { - integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==, - } + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 dev: false + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: false + /hosted-git-info@3.0.8: - resolution: - { - integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 /hosted-git-info@6.1.1: - resolution: - { - integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==, - } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: lru-cache: 7.18.3 dev: true /html-entities@2.4.0: - resolution: - { - integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==, - } + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} /htmlparser2@6.1.0: - resolution: - { - integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==, - } + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: domelementtype: 2.3.0 domhandler: 4.3.1 @@ -14428,11 +12043,8 @@ packages: entities: 2.2.0 /http-basic@8.1.3: - resolution: - { - integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} + engines: {node: '>=6.0.0'} dependencies: caseless: 0.12.0 concat-stream: 1.6.2 @@ -14441,17 +12053,11 @@ packages: dev: true /http-cache-semantics@4.1.1: - resolution: - { - integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, - } + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} /http-errors@2.0.0: - resolution: - { - integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 @@ -14459,48 +12065,46 @@ packages: statuses: 2.0.1 toidentifier: 1.0.1 + /http-https@1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + dev: false + /http-response-object@3.0.2: - resolution: - { - integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==, - } + resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} dependencies: - "@types/node": 10.17.60 + '@types/node': 10.17.60 dev: true + /http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + dev: false + /http2-wrapper@1.0.3: - resolution: - { - integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==, - } - engines: { node: ">=10.19.0" } + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 /http2-wrapper@2.2.1: - resolution: - { - integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==, - } - engines: { node: ">=10.19.0" } + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 /https-browserify@1.0.0: - resolution: - { - integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==, - } + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true /https-proxy-agent@5.0.1: - resolution: - { - integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) @@ -14509,153 +12113,100 @@ packages: dev: true /human-signals@2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, - } - engines: { node: ">=10.17.0" } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} /human-signals@4.3.1: - resolution: - { - integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==, - } - engines: { node: ">=14.18.0" } + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} dev: true /iconv-lite@0.4.24: - resolution: - { - integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 /icss-utils@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: postcss: 8.4.31 + /idna-uts46-hx@2.3.1: + resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} + engines: {node: '>=4.0.0'} + dependencies: + punycode: 2.1.0 + dev: false + /ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} /ignore@4.0.6: - resolution: - { - integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} /ignore@5.3.0: - resolution: - { - integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} /immer@9.0.21: - resolution: - { - integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==, - } + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} /immutable@3.7.6: - resolution: - { - integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} /immutable@4.3.4: - resolution: - { - integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==, - } + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} dev: true /import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 /import-from@4.0.0: - resolution: - { - integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==, - } - engines: { node: ">=12.2" } + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} /imul@1.0.1: - resolution: - { - integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} + engines: {node: '>=0.10.0'} dev: true /imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} /indent-string@4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} dev: true /inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} /ini@1.3.8: - resolution: - { - integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, - } + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} /inline-style-parser@0.1.1: - resolution: - { - integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==, - } + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} /inquirer@7.3.3: - resolution: - { - integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -14672,609 +12223,410 @@ packages: through: 2.3.8 /internal-slot@1.0.6: - resolution: - { - integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.2 hasown: 2.0.0 side-channel: 1.0.4 /interpret@1.4.0: - resolution: - { - integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} dev: true /invariant@2.2.4: - resolution: - { - integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, - } + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 /io-ts@1.10.4: - resolution: - { - integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==, - } + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} dependencies: fp-ts: 1.19.3 dev: true + /io-ts@2.0.1(fp-ts@2.1.1): + resolution: {integrity: sha512-RezD+WcCfW4VkMkEcQWL/Nmy/nqsWTvTYg7oUmTGzglvSSV2P9h2z1PVeREPFf0GWNzruYleAt1XCMQZSg1xxQ==} + peerDependencies: + fp-ts: ^2.0.0 + dependencies: + fp-ts: 2.1.1 + dev: false + /ipaddr.js@1.9.1: - resolution: - { - integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} /is-absolute-url@3.0.3: - resolution: - { - integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} /is-absolute@1.0.0: - resolution: - { - integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} dependencies: is-relative: 1.0.0 is-windows: 1.0.2 /is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true /is-array-buffer@3.0.2: - resolution: - { - integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, - } + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 /is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} /is-arrayish@0.3.2: - resolution: - { - integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, - } + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} requiresBuild: true /is-async-function@2.0.0: - resolution: - { - integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-bigint@1.0.4: - resolution: - { - integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, - } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 /is-boolean-object@1.1.2: - resolution: - { - integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-buffer@2.0.5: - resolution: - { - integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==, - } - engines: { node: ">=4" } - dev: true + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} /is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} /is-ci@2.0.0: - resolution: - { - integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==, - } + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true dependencies: ci-info: 2.0.0 /is-core-module@2.13.1: - resolution: - { - integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==, - } + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 /is-date-object@1.0.5: - resolution: - { - integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-docker@2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true /is-docker@3.0.0: - resolution: - { - integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true dev: true /is-extglob@1.0.0: - resolution: - { - integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} + engines: {node: '>=0.10.0'} /is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} /is-finalizationregistry@1.0.2: - resolution: - { - integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==, - } + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: call-bind: 1.0.5 /is-fullwidth-code-point@2.0.0: - resolution: - { - integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==, - } - engines: { node: ">=4" } - dev: true + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} /is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + dev: false /is-generator-function@1.0.10: - resolution: - { - integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-glob@2.0.1: - resolution: - { - integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 1.0.0 /is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 /is-hex-prefixed@1.0.0: - resolution: - { - integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==, - } - engines: { node: ">=6.5.0", npm: ">=3" } - dev: true + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} /is-inside-container@1.0.0: - resolution: - { - integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} hasBin: true dependencies: is-docker: 3.0.0 dev: true /is-interactive@1.0.0: - resolution: - { - integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} dev: true /is-invalid-path@0.1.0: - resolution: - { - integrity: sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==} + engines: {node: '>=0.10.0'} dependencies: is-glob: 2.0.1 /is-lower-case@2.0.2: - resolution: - { - integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==, - } + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} dependencies: tslib: 2.6.2 /is-map@2.0.2: - resolution: - { - integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==, - } + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} /is-nan@1.3.2: - resolution: - { - integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 dev: true + /is-natural-number@4.0.1: + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} + dev: false + /is-negative-zero@2.0.2: - resolution: - { - integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} /is-number-object@1.0.7: - resolution: - { - integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} /is-obj@2.0.0: - resolution: - { - integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + /is-object@1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + dev: false /is-path-inside@3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: false /is-plain-obj@2.1.0: - resolution: - { - integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} dev: true /is-plain-object@2.0.4: - resolution: - { - integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 /is-promise@2.2.2: - resolution: - { - integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, - } + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} /is-regex@1.1.4: - resolution: - { - integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-relative-url@3.0.0: - resolution: - { - integrity: sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==} + engines: {node: '>=8'} dependencies: is-absolute-url: 3.0.3 /is-relative@1.0.0: - resolution: - { - integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} dependencies: is-unc-path: 1.0.0 + /is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: false + /is-root@2.1.0: - resolution: - { - integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} /is-set@2.0.2: - resolution: - { - integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==, - } + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} /is-shared-array-buffer@1.0.2: - resolution: - { - integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, - } + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.5 /is-ssh@1.4.0: - resolution: - { - integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==, - } + resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} dependencies: protocols: 2.0.1 /is-stream@1.1.0: - resolution: - { - integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} /is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} /is-stream@3.0.0: - resolution: - { - integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-string@1.0.7: - resolution: - { - integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 /is-symbol@1.0.4: - resolution: - { - integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 /is-typed-array@1.1.12: - resolution: - { - integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.13 /is-typedarray@1.0.0: - resolution: - { - integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, - } + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} /is-unc-path@1.0.0: - resolution: - { - integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} dependencies: unc-path-regex: 0.1.2 /is-unicode-supported@0.1.0: - resolution: - { - integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} dev: true /is-upper-case@2.0.2: - resolution: - { - integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==, - } + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} dependencies: tslib: 2.6.2 /is-valid-domain@0.1.6: - resolution: - { - integrity: sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==, - } + resolution: {integrity: sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==} dependencies: punycode: 2.3.1 /is-valid-path@0.1.1: - resolution: - { - integrity: sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==} + engines: {node: '>=0.10.0'} dependencies: is-invalid-path: 0.1.0 /is-weakmap@2.0.1: - resolution: - { - integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==, - } + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} /is-weakref@1.0.2: - resolution: - { - integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, - } + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.5 /is-weakset@2.0.2: - resolution: - { - integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==, - } + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 /is-windows@1.0.2: - resolution: - { - integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} /is-wsl@2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 /isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, - } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} /isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} /isobject@3.0.1: - resolution: - { - integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} /isomorphic-timers-promises@1.0.1: - resolution: - { - integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} + engines: {node: '>=10'} dev: true /isomorphic-unfetch@3.1.0: - resolution: - { - integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==, - } + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: node-fetch: 2.7.0 unfetch: 4.2.0 @@ -15282,11 +12634,20 @@ packages: - encoding dev: true + /isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: false + + /isurl@1.0.0: + resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} + engines: {node: '>= 4'} + dependencies: + has-to-string-tag-x: 1.4.1 + is-object: 1.0.2 + dev: false + /iterator.prototype@1.1.2: - resolution: - { - integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==, - } + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.2 @@ -15295,356 +12656,282 @@ packages: set-function-name: 2.0.1 /javascript-stringify@2.1.0: - resolution: - { - integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==, - } + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} /jest-worker@26.6.2: - resolution: - { - integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 merge-stream: 2.0.0 supports-color: 7.2.0 /jest-worker@27.5.1: - resolution: - { - integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} dependencies: - "@types/node": 20.9.4 + '@types/node': 20.9.4 merge-stream: 2.0.0 supports-color: 8.1.1 /joi@17.11.0: - resolution: - { - integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==, - } + resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} dependencies: - "@hapi/hoek": 9.3.0 - "@hapi/topo": 5.1.0 - "@sideway/address": 4.1.4 - "@sideway/formula": 3.0.1 - "@sideway/pinpoint": 2.0.0 + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 /js-cookie@2.2.1: - resolution: - { - integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==, - } + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} dev: true /js-sdsl@4.4.2: - resolution: - { - integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==, - } + resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} dev: true + /js-sha3@0.5.7: + resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + dev: false + /js-sha3@0.8.0: - resolution: - { - integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==, - } - dev: true + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} /js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@3.13.1: + resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false /js-yaml@3.14.1: - resolution: - { - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, - } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 + /jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: false + /jsesc@0.5.0: - resolution: - { - integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, - } + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true /jsesc@2.5.2: - resolution: - { - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true + /json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: false + /json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} /json-loader@0.5.7: - resolution: - { - integrity: sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==, - } + resolution: {integrity: sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==} /json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} /json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false /json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false + + /json-text-sequence@0.1.1: + resolution: {integrity: sha512-L3mEegEWHRekSHjc7+sc8eJhba9Clq1PZ8kMkzf8OxElhXc8O4TS5MwcVlj9aEbm5dr81N90WHC5nAz3UO971w==} + dependencies: + delimit-stream: 0.1.0 + dev: false /json5@1.0.2: - resolution: - { - integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, - } + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: minimist: 1.2.8 /json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true /jsonfile@2.4.0: - resolution: - { - integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==, - } + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} optionalDependencies: graceful-fs: 4.2.11 dev: true /jsonfile@4.0.0: - resolution: - { - integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, - } + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsonfile@6.1.0: - resolution: - { - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, - } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 /jsonschema@1.4.1: - resolution: - { - integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==, - } + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: true + /jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: false + /jsx-ast-utils@3.3.5: - resolution: - { - integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: array-includes: 3.1.7 array.prototype.flat: 1.3.2 object.assign: 4.1.4 object.values: 1.1.7 + /keccak256@1.0.6: + resolution: {integrity: sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==} + dependencies: + bn.js: 5.2.1 + buffer: 6.0.3 + keccak: 3.0.4 + dev: false + /keccak@3.0.4: - resolution: - { - integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} requiresBuild: true dependencies: node-addon-api: 2.0.2 node-gyp-build: 4.7.0 readable-stream: 3.6.2 - dev: true + + /keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + dependencies: + json-buffer: 3.0.0 + dev: false /keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, - } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 /kind-of@6.0.3: - resolution: - { - integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} /klaw@1.3.1: - resolution: - { - integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==, - } + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} optionalDependencies: graceful-fs: 4.2.11 dev: true /kleur@3.0.3: - resolution: - { - integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} /klona@2.0.6: - resolution: - { - integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} /language-subtag-registry@0.3.22: - resolution: - { - integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==, - } + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} /language-tags@1.0.9: - resolution: - { - integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: language-subtag-registry: 0.3.22 /latest-version@7.0.0: - resolution: - { - integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} dependencies: package-json: 8.1.1 /level-supports@4.0.1: - resolution: - { - integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} + engines: {node: '>=12'} dev: true /level-transcoder@1.0.1: - resolution: - { - integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} + engines: {node: '>=12'} dependencies: buffer: 6.0.3 module-error: 1.0.2 dev: true /level@8.0.0: - resolution: - { - integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==} + engines: {node: '>=12'} dependencies: browser-level: 1.0.1 classic-level: 1.3.0 dev: true /levn@0.3.0: - resolution: - { - integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 dev: true /levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 /lilconfig@2.1.0: - resolution: - { - integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} /lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} /linkfs@2.1.0: - resolution: - { - integrity: sha512-kmsGcmpvjStZ0ATjuHycBujtNnXiZR28BTivEu0gAMDTT7GEyodcK6zSRtu6xsrdorrPZEIN380x7BD7xEYkew==, - } + resolution: {integrity: sha512-kmsGcmpvjStZ0ATjuHycBujtNnXiZR28BTivEu0gAMDTT7GEyodcK6zSRtu6xsrdorrPZEIN380x7BD7xEYkew==} /lmdb@2.5.2: - resolution: - { - integrity: sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==, - } + resolution: {integrity: sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==} requiresBuild: true dependencies: msgpackr: 1.9.9 @@ -15653,18 +12940,15 @@ packages: ordered-binary: 1.4.1 weak-lru-cache: 1.2.2 optionalDependencies: - "@lmdb/lmdb-darwin-arm64": 2.5.2 - "@lmdb/lmdb-darwin-x64": 2.5.2 - "@lmdb/lmdb-linux-arm": 2.5.2 - "@lmdb/lmdb-linux-arm64": 2.5.2 - "@lmdb/lmdb-linux-x64": 2.5.2 - "@lmdb/lmdb-win32-x64": 2.5.2 + '@lmdb/lmdb-darwin-arm64': 2.5.2 + '@lmdb/lmdb-darwin-x64': 2.5.2 + '@lmdb/lmdb-linux-arm': 2.5.2 + '@lmdb/lmdb-linux-arm64': 2.5.2 + '@lmdb/lmdb-linux-x64': 2.5.2 + '@lmdb/lmdb-win32-x64': 2.5.2 /lmdb@2.5.3: - resolution: - { - integrity: sha512-iBA0cb13CobBSoGJLfZgnrykLlfJipDAnvtf+YwIqqzBEsTeQYsXrHaSBkaHd5wCWeabwrNvhjZoFMUrlo+eLw==, - } + resolution: {integrity: sha512-iBA0cb13CobBSoGJLfZgnrykLlfJipDAnvtf+YwIqqzBEsTeQYsXrHaSBkaHd5wCWeabwrNvhjZoFMUrlo+eLw==} requiresBuild: true dependencies: msgpackr: 1.9.9 @@ -15673,422 +12957,275 @@ packages: ordered-binary: 1.4.1 weak-lru-cache: 1.2.2 optionalDependencies: - "@lmdb/lmdb-darwin-arm64": 2.5.3 - "@lmdb/lmdb-darwin-x64": 2.5.3 - "@lmdb/lmdb-linux-arm": 2.5.3 - "@lmdb/lmdb-linux-arm64": 2.5.3 - "@lmdb/lmdb-linux-x64": 2.5.3 - "@lmdb/lmdb-win32-x64": 2.5.3 + '@lmdb/lmdb-darwin-arm64': 2.5.3 + '@lmdb/lmdb-darwin-x64': 2.5.3 + '@lmdb/lmdb-linux-arm': 2.5.3 + '@lmdb/lmdb-linux-arm64': 2.5.3 + '@lmdb/lmdb-linux-x64': 2.5.3 + '@lmdb/lmdb-win32-x64': 2.5.3 /loader-runner@4.3.0: - resolution: - { - integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, - } - engines: { node: ">=6.11.5" } + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} /loader-utils@2.0.4: - resolution: - { - integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, - } - engines: { node: ">=8.9.0" } + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 /loader-utils@3.2.1: - resolution: - { - integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==, - } - engines: { node: ">= 12.13.0" } + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} /locate-path@2.0.0: - resolution: - { - integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} dependencies: p-locate: 2.0.0 path-exists: 3.0.0 - dev: true /locate-path@3.0.0: - resolution: - { - integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 /locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 /lock@1.1.0: - resolution: - { - integrity: sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==, - } + resolution: {integrity: sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==} /lodash-es@4.17.21: - resolution: - { - integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, - } + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false /lodash.camelcase@4.3.0: - resolution: - { - integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==, - } + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true /lodash.clonedeep@4.5.0: - resolution: - { - integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==, - } + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} /lodash.debounce@4.0.8: - resolution: - { - integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, - } + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} /lodash.deburr@4.1.0: - resolution: - { - integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==, - } + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} /lodash.every@4.6.0: - resolution: - { - integrity: sha512-isF82d+65/sNvQ3aaQAW7LLHnnTxSN/2fm4rhYyuufLzA4VtHz6y6S5vFwe6PQVr2xdqUOyxBbTNKDpnmeu50w==, - } + resolution: {integrity: sha512-isF82d+65/sNvQ3aaQAW7LLHnnTxSN/2fm4rhYyuufLzA4VtHz6y6S5vFwe6PQVr2xdqUOyxBbTNKDpnmeu50w==} /lodash.flattendeep@4.4.0: - resolution: - { - integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==, - } + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} /lodash.foreach@4.5.0: - resolution: - { - integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==, - } + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} /lodash.get@4.4.2: - resolution: - { - integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, - } + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true /lodash.isequal@4.5.0: - resolution: - { - integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, - } + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true /lodash.map@4.6.0: - resolution: - { - integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==, - } + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} /lodash.maxby@4.6.0: - resolution: - { - integrity: sha512-QfTqQTwzmKxLy7VZlbx2M/ipWv8DCQ2F5BI/MRxLharOQ5V78yMSuB+JE+EuUM22txYfj09R2Q7hUlEYj7KdNg==, - } + resolution: {integrity: sha512-QfTqQTwzmKxLy7VZlbx2M/ipWv8DCQ2F5BI/MRxLharOQ5V78yMSuB+JE+EuUM22txYfj09R2Q7hUlEYj7KdNg==} /lodash.memoize@4.1.2: - resolution: - { - integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, - } + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} /lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} /lodash.mergewith@4.6.2: - resolution: - { - integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==, - } + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: false /lodash.truncate@4.4.2: - resolution: - { - integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, - } + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} /lodash.uniq@4.5.0: - resolution: - { - integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, - } + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} /lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, - } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols@2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} + dependencies: + chalk: 2.4.2 + dev: false /log-symbols@4.1.0: - resolution: - { - integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 dev: true /loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, - } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 /loupe@2.3.7: - resolution: - { - integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==, - } + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: get-func-name: 2.0.2 - dev: true /lower-case-first@2.0.2: - resolution: - { - integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==, - } + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} dependencies: tslib: 2.6.2 /lower-case@2.0.2: - resolution: - { - integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, - } + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.6.2 + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: false + /lowercase-keys@2.0.0: - resolution: - { - integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} /lowercase-keys@3.0.0: - resolution: - { - integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} /lru-cache@4.0.0: - resolution: - { - integrity: sha512-WKhDkjlLwzE8jAQdQlsxLUQTPXLCKX/4cJk6s5AlRtJkDBk0IKH5O51bVDH61K9N4bhbbyvLM6EiOuE8ovApPA==, - } + resolution: {integrity: sha512-WKhDkjlLwzE8jAQdQlsxLUQTPXLCKX/4cJk6s5AlRtJkDBk0IKH5O51bVDH61K9N4bhbbyvLM6EiOuE8ovApPA==} dependencies: pseudomap: 1.0.2 yallist: 2.1.2 /lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 /lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 /lru-cache@7.18.3: - resolution: - { - integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} dev: true /lru-queue@0.1.0: - resolution: - { - integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==, - } + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} dependencies: es5-ext: 0.10.62 /lru_map@0.3.3: - resolution: - { - integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==, - } + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: true /magic-string@0.30.5: - resolution: - { - integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} dependencies: - "@jridgewell/sourcemap-codec": 1.4.15 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /make-dir@1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: false + /make-dir@3.1.0: - resolution: - { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: semver: 6.3.1 /make-error@1.3.6: - resolution: - { - integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, - } - dev: true + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} /map-age-cleaner@0.1.3: - resolution: - { - integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} dependencies: p-defer: 1.0.0 /map-cache@0.2.2: - resolution: - { - integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} /markdown-table@1.1.3: - resolution: - { - integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==, - } + resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true /match-all@1.2.6: - resolution: - { - integrity: sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==, - } + resolution: {integrity: sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==} dev: true /mcl-wasm@0.7.9: - resolution: - { - integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==, - } - engines: { node: ">=8.9.0" } + resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} + engines: {node: '>=8.9.0'} dev: true /md5.js@1.3.5: - resolution: - { - integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==, - } + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true /mdn-data@2.0.14: - resolution: - { - integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, - } + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} /meant@1.0.3: - resolution: - { - integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==, - } + resolution: {integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==} /media-typer@0.3.0: - resolution: - { - integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} /mem@8.1.1: - resolution: - { - integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} + engines: {node: '>=10'} dependencies: map-age-cleaner: 0.1.3 mimic-fn: 3.1.0 /memfs@3.5.3: - resolution: - { - integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==, - } - engines: { node: ">= 4.0.0" } + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.5 /memoizee@0.4.15: - resolution: - { - integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==, - } + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: d: 1.0.1 es5-ext: 0.10.62 @@ -16100,11 +13237,8 @@ packages: timers-ext: 0.1.7 /memory-level@1.0.0: - resolution: - { - integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} + engines: {node: '>=12'} dependencies: abstract-level: 1.0.3 functional-red-black-tree: 1.0.1 @@ -16112,148 +13246,96 @@ packages: dev: true /memorystream@0.3.1: - resolution: - { - integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==, - } - engines: { node: ">= 0.10.0" } + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} dev: true /merge-descriptors@1.0.1: - resolution: - { - integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==, - } + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} /merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} /merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} /methods@1.1.2: - resolution: - { - integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} /micro-ftch@0.3.1: - resolution: - { - integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==, - } + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} dev: true /micromatch@4.0.5: - resolution: - { - integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 /miller-rabin@4.0.1: - resolution: - { - integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==, - } + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 - dev: true /mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} /mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 /mime@1.6.0: - resolution: - { - integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} hasBin: true /mime@3.0.0: - resolution: - { - integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} hasBin: true /mimic-fn@2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} /mimic-fn@3.1.0: - resolution: - { - integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} /mimic-fn@4.0.0: - resolution: - { - integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} dev: true /mimic-response@1.0.1: - resolution: - { - integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} /mimic-response@3.1.0: - resolution: - { - integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} /mimic-response@4.0.0: - resolution: - { - integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + /min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + dev: false /mini-css-extract-plugin@1.6.2(webpack@5.89.0): - resolution: - { - integrity: sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.4.0 || ^5.0.0 dependencies: @@ -16263,109 +13345,102 @@ packages: webpack-sources: 1.4.3 /minimalistic-assert@1.0.1: - resolution: - { - integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, - } - dev: true + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} /minimalistic-crypto-utils@1.0.1: - resolution: - { - integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==, - } - dev: true + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + /minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: false /minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 /minimatch@5.0.1: - resolution: - { - integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true /minimatch@5.1.6: - resolution: - { - integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true /minimatch@9.0.3: - resolution: - { - integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true /minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, - } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /minipass@2.9.0: + resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} + dependencies: + safe-buffer: 5.2.1 + yallist: 3.1.1 + dev: false + + /minizlib@1.3.3: + resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} + dependencies: + minipass: 2.9.0 + dev: false /mitt@1.2.0: - resolution: - { - integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==, - } + resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} /mkdirp-classic@0.5.3: - resolution: - { - integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==, - } + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} requiresBuild: true + /mkdirp-promise@5.0.1: + resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} + engines: {node: '>=4'} + deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. + dependencies: + mkdirp: 1.0.4 + dev: false + + /mkdirp@0.5.4: + resolution: {integrity: sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==} + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + /mkdirp@0.5.6: - resolution: - { - integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, - } + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 /mkdirp@1.0.4: - resolution: - { - integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} hasBin: true - dev: true /mnemonist@0.38.5: - resolution: - { - integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==, - } + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} dependencies: obliterator: 2.0.4 dev: true /mocha@10.2.0: - resolution: - { - integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==, - } - engines: { node: ">= 14.0.0" } + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} hasBin: true dependencies: ansi-colors: 4.1.1 @@ -16391,70 +13466,84 @@ packages: yargs-unparser: 2.0.0 dev: true + /mocha@6.2.3: + resolution: {integrity: sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==} + engines: {node: '>= 6.0.0'} + hasBin: true + dependencies: + ansi-colors: 3.2.3 + browser-stdout: 1.3.1 + debug: 3.2.6(supports-color@6.0.0) + diff: 3.5.0 + escape-string-regexp: 1.0.5 + find-up: 3.0.0 + glob: 7.1.3 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 3.13.1 + log-symbols: 2.2.0 + minimatch: 3.0.4 + mkdirp: 0.5.4 + ms: 2.1.1 + node-environment-flags: 1.0.5 + object.assign: 4.1.0 + strip-json-comments: 2.0.1 + supports-color: 6.0.0 + which: 1.3.1 + wide-align: 1.1.3 + yargs: 13.3.2 + yargs-parser: 13.1.2 + yargs-unparser: 1.6.0 + dev: false + + /mock-fs@4.14.0: + resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} + dev: false + /module-error@1.0.2: - resolution: - { - integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} + engines: {node: '>=10'} dev: true /moment@2.29.4: - resolution: - { - integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==, - } + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} /ms@2.0.0: - resolution: - { - integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, - } + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + /ms@2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + dev: false /ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} /ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} /msgpackr-extract@3.0.2: - resolution: - { - integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==, - } + resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==} hasBin: true requiresBuild: true dependencies: node-gyp-build-optional-packages: 5.0.7 optionalDependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-darwin-x64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-linux-arm": 3.0.2 - "@msgpackr-extract/msgpackr-extract-linux-arm64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-linux-x64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-win32-x64": 3.0.2 + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.2 optional: true /msgpackr@1.9.9: - resolution: - { - integrity: sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A==, - } + resolution: {integrity: sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A==} optionalDependencies: msgpackr-extract: 3.0.2 /multer@1.4.5-lts.1: - resolution: - { - integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==, - } - engines: { node: ">= 6.0.0" } + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} dependencies: append-field: 1.0.0 busboy: 1.6.0 @@ -16464,11 +13553,47 @@ packages: type-is: 1.6.18 xtend: 4.0.2 + /multibase@0.6.1: + resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} + deprecated: This module has been superseded by the multiformats module + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + dev: false + + /multibase@0.7.0: + resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} + deprecated: This module has been superseded by the multiformats module + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + dev: false + + /multicodec@0.5.7: + resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} + deprecated: This module has been superseded by the multiformats module + dependencies: + varint: 5.0.2 + dev: false + + /multicodec@1.0.4: + resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} + deprecated: This module has been superseded by the multiformats module + dependencies: + buffer: 5.7.1 + varint: 5.0.2 + dev: false + + /multihashes@0.4.21: + resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} + dependencies: + buffer: 5.7.1 + multibase: 0.7.0 + varint: 5.0.2 + dev: false + /murmur-128@0.2.1: - resolution: - { - integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==, - } + resolution: {integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==} dependencies: encode-utf8: 1.0.3 fmix: 0.1.0 @@ -16476,139 +13601,101 @@ packages: dev: true /mute-stream@0.0.8: - resolution: - { - integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, - } + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + dev: false + + /nano-json-stream-parser@0.1.2: + resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} + dev: false /nanoid@3.3.3: - resolution: - { - integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true /nanoid@3.3.7: - resolution: - { - integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true /napi-build-utils@1.0.2: - resolution: - { - integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==, - } + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} requiresBuild: true /napi-macros@2.2.2: - resolution: - { - integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==, - } + resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} dev: true /natural-compare-lite@1.4.0: - resolution: - { - integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, - } + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} /natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} /negotiator@0.6.3: - resolution: - { - integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} /neo-async@2.6.2: - resolution: - { - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, - } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} /next-tick@1.1.0: - resolution: - { - integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==, - } + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} /nice-try@1.0.5: - resolution: - { - integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, - } + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} /no-case@3.0.4: - resolution: - { - integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, - } + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 tslib: 2.6.2 /node-abi@3.51.0: - resolution: - { - integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} + engines: {node: '>=10'} requiresBuild: true dependencies: semver: 7.5.4 /node-addon-api@2.0.2: - resolution: - { - integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==, - } - dev: true + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} /node-addon-api@4.3.0: - resolution: - { - integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==, - } + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} /node-addon-api@6.1.0: - resolution: - { - integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==, - } + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} requiresBuild: true /node-addon-api@7.0.0: - resolution: - { - integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==, - } + resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} /node-emoji@1.11.0: - resolution: - { - integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==, - } + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: lodash: 4.17.21 dev: true + /node-environment-flags@1.0.5: + resolution: {integrity: sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==} + dependencies: + object.getownpropertydescriptors: 2.1.7 + semver: 5.7.2 + dev: false + + /node-fetch@2.6.0: + resolution: {integrity: sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==} + engines: {node: 4.x || >=6.0.0} + dev: false + /node-fetch@2.7.0: - resolution: - { - integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, - } - engines: { node: 4.x || >=6.0.0 } + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -16618,63 +13705,38 @@ packages: whatwg-url: 5.0.0 /node-gyp-build-optional-packages@5.0.3: - resolution: - { - integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==, - } + resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==} hasBin: true /node-gyp-build-optional-packages@5.0.7: - resolution: - { - integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==, - } + resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} hasBin: true requiresBuild: true optional: true /node-gyp-build@4.7.0: - resolution: - { - integrity: sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==, - } + resolution: {integrity: sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==} hasBin: true - dev: true /node-html-parser@5.4.2: - resolution: - { - integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==, - } + resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==} dependencies: css-select: 4.3.0 he: 1.2.0 /node-int64@0.4.0: - resolution: - { - integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, - } + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} /node-object-hash@2.3.10: - resolution: - { - integrity: sha512-jY5dPJzw6NHd/KPSfPKJ+IHoFS81/tJ43r34ZeNMXGzCOM8jwQDCD12HYayKIB6MuznrnqIYy2e891NA2g0ibA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-jY5dPJzw6NHd/KPSfPKJ+IHoFS81/tJ43r34ZeNMXGzCOM8jwQDCD12HYayKIB6MuznrnqIYy2e891NA2g0ibA==} + engines: {node: '>=0.10.0'} /node-releases@2.0.13: - resolution: - { - integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, - } + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} /node-stdlib-browser@1.2.0: - resolution: - { - integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==} + engines: {node: '>=10'} dependencies: assert: 2.1.0 browser-resolve: 2.0.0 @@ -16705,67 +13767,53 @@ packages: vm-browserify: 1.1.2 dev: true + /nofilter@1.0.4: + resolution: {integrity: sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==} + engines: {node: '>=8'} + dev: false + /nofilter@3.1.0: - resolution: - { - integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==, - } - engines: { node: ">=12.19" } + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} dev: true /nopt@3.0.6: - resolution: - { - integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==, - } + resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} hasBin: true dependencies: abbrev: 1.0.9 dev: true /normalize-path@2.1.1: - resolution: - { - integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} /normalize-range@0.1.2: - resolution: - { - integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + /normalize-url@4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: false /normalize-url@6.1.0: - resolution: - { - integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} /normalize-url@8.0.0: - resolution: - { - integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} /npm-package-arg@10.1.0: - resolution: - { - integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==, - } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 @@ -16774,47 +13822,32 @@ packages: dev: true /npm-run-path@2.0.2: - resolution: - { - integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} dependencies: path-key: 2.0.1 /npm-run-path@4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 /npm-run-path@5.1.0: - resolution: - { - integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true /nth-check@2.1.1: - resolution: - { - integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, - } + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: boolbase: 1.0.0 /null-loader@4.0.1(webpack@5.89.0): - resolution: - { - integrity: sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: @@ -16823,59 +13856,55 @@ packages: webpack: 5.89.0 /nullthrows@1.1.1: - resolution: - { - integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==, - } + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} /number-to-bn@1.7.0: - resolution: - { - integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==, - } - engines: { node: ">=6.5.0", npm: ">=3" } + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} dependencies: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - dev: true + + /numeral@2.0.6: + resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} + dev: false + + /oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: false /object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} /object-inspect@1.13.1: - resolution: - { - integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==, - } + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-is@1.1.5: - resolution: - { - integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 dev: true /object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + /object.assign@4.1.0: + resolution: {integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + function-bind: 1.1.2 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false /object.assign@4.1.4: - resolution: - { - integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -16883,32 +13912,34 @@ packages: object-keys: 1.1.1 /object.entries@1.1.7: - resolution: - { - integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 /object.fromentries@2.0.7: - resolution: - { - integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.6 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + safe-array-concat: 1.0.1 + dev: false + /object.groupby@1.0.1: - resolution: - { - integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==, - } + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -16916,102 +13947,81 @@ packages: get-intrinsic: 1.2.2 /object.hasown@1.1.3: - resolution: - { - integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==, - } + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 es-abstract: 1.22.3 /object.values@1.1.7: - resolution: - { - integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 /obliterator@2.0.4: - resolution: - { - integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==, - } + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true + /oboe@2.1.4: + resolution: {integrity: sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ==} + dependencies: + http-https: 1.0.0 + dev: false + + /oboe@2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + dependencies: + http-https: 1.0.0 + dev: false + /on-finished@2.4.1: - resolution: - { - integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 /on-headers@1.0.2: - resolution: - { - integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} /once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 /onetime@5.1.2: - resolution: - { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 /onetime@6.0.0: - resolution: - { - integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true /open@7.4.2: - resolution: - { - integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 /open@8.4.2: - resolution: - { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 /open@9.1.0: - resolution: - { - integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} dependencies: default-browser: 4.0.0 define-lazy-prop: 3.0.0 @@ -17020,18 +14030,20 @@ packages: dev: true /opentracing@0.14.7: - resolution: - { - integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==} + engines: {node: '>=0.10'} + + /openzeppelin-solidity@2.3.0: + resolution: {integrity: sha512-QYeiPLvB1oSbDt6lDQvvpx7k8ODczvE474hb2kLXZBPKMsxKT1WxTCHBYrCU7kS7hfAku4DcJ0jqOyL+jvjwQw==} + dev: false + + /openzeppelin-solidity@2.4.0: + resolution: {integrity: sha512-533gc5jkspxW5YT0qJo02Za5q1LHwXK9CJCc48jNj/22ncNM/3M/3JfWLqfpB90uqLwOKOovpl0JfaMQTR+gXQ==} + dev: false /optionator@0.8.3: - resolution: - { - integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -17042,13 +14054,10 @@ packages: dev: true /optionator@0.9.3: - resolution: - { - integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: - "@aashutoshrathi/word-wrap": 1.2.6 + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 @@ -17056,11 +14065,8 @@ packages: type-check: 0.4.0 /ora@5.4.1: - resolution: - { - integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -17074,163 +14080,117 @@ packages: dev: true /ordered-binary@1.4.1: - resolution: - { - integrity: sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg==, - } + resolution: {integrity: sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg==} /ordinal@1.0.3: - resolution: - { - integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==, - } + resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} dev: true /os-browserify@0.3.0: - resolution: - { - integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==, - } + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true /os-tmpdir@1.0.2: - resolution: - { - integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + /p-cancelable@0.3.0: + resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} + engines: {node: '>=4'} + dev: false + + /p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: false /p-cancelable@2.1.1: - resolution: - { - integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} /p-cancelable@3.0.0: - resolution: - { - integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==, - } - engines: { node: ">=12.20" } + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} /p-defer@1.0.0: - resolution: - { - integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} /p-defer@3.0.0: - resolution: - { - integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} /p-finally@1.0.0: - resolution: - { - integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} /p-limit@1.3.0: - resolution: - { - integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} dependencies: p-try: 1.0.0 - dev: true /p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 /p-locate@2.0.0: - resolution: - { - integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} dependencies: p-limit: 1.3.0 - dev: true /p-locate@3.0.0: - resolution: - { - integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 /p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 /p-map@4.0.0: - resolution: - { - integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true + /p-timeout@1.2.1: + resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==} + engines: {node: '>=4'} + dependencies: + p-finally: 1.0.0 + dev: false + /p-try@1.0.0: - resolution: - { - integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==, - } - engines: { node: ">=4" } - dev: true + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} /p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} /package-json@8.1.1: - resolution: - { - integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} dependencies: got: 12.6.1 registry-auth-token: 5.0.2 @@ -17238,310 +14198,227 @@ packages: semver: 7.5.4 /pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, - } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true /param-case@3.0.4: - resolution: - { - integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, - } + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 tslib: 2.6.2 /parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 /parse-asn1@5.1.6: - resolution: - { - integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==, - } + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 pbkdf2: 3.1.2 safe-buffer: 5.2.1 - dev: true /parse-cache-control@1.0.1: - resolution: - { - integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==, - } + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} dev: true /parse-filepath@1.0.2: - resolution: - { - integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 + /parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + dev: false + /parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - "@babel/code-frame": 7.23.4 + '@babel/code-frame': 7.23.4 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 /parse-path@7.0.0: - resolution: - { - integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==, - } + resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} dependencies: protocols: 2.0.1 /parse-url@8.1.0: - resolution: - { - integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==, - } + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} dependencies: parse-path: 7.0.0 /parseurl@1.3.3: - resolution: - { - integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} /pascal-case@3.1.2: - resolution: - { - integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, - } + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 tslib: 2.6.2 /password-prompt@1.1.3: - resolution: - { - integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==, - } + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} dependencies: ansi-escapes: 4.3.2 cross-spawn: 7.0.3 /path-browserify@1.0.1: - resolution: - { - integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==, - } + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true /path-case@3.0.4: - resolution: - { - integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==, - } + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} dependencies: dot-case: 3.0.4 tslib: 2.6.2 /path-exists@3.0.0: - resolution: - { - integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} /path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} /path-key@2.0.1: - resolution: - { - integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} /path-key@4.0.0: - resolution: - { - integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} dev: true /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} /path-root-regex@0.1.2: - resolution: - { - integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} /path-root@0.1.1: - resolution: - { - integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} dependencies: path-root-regex: 0.1.2 /path-to-regexp@0.1.7: - resolution: - { - integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==, - } + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} /path-type@4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} /pathval@1.1.1: - resolution: - { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, - } - dev: true + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} /pbkdf2@3.1.2: - resolution: - { - integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: true /peek-readable@4.1.0: - resolution: - { - integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: false + + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false /physical-cpu-count@2.0.0: - resolution: - { - integrity: sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==, - } + resolution: {integrity: sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==} /picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, - } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false /pify@4.0.1: - resolution: - { - integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} dev: true + /pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: false + + /pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: false + /pkg-dir@4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 /pkg-dir@5.0.0: - resolution: - { - integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} dependencies: find-up: 5.0.0 dev: true /pkg-up@3.1.0: - resolution: - { - integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} dependencies: find-up: 3.0.0 /platform@1.3.6: - resolution: - { - integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==, - } + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} /pluralize@8.0.0: - resolution: - { - integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} dev: true /postcss-calc@8.2.4(postcss@8.4.31): - resolution: - { - integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==, - } + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: postcss: ^8.2.2 dependencies: @@ -17550,11 +14427,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-colormin@5.3.1(postcss@8.4.31): - resolution: - { - integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17565,11 +14439,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-convert-values@5.1.3(postcss@8.4.31): - resolution: - { - integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17578,65 +14449,47 @@ packages: postcss-value-parser: 4.2.0 /postcss-discard-comments@5.1.2(postcss@8.4.31): - resolution: - { - integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: postcss: 8.4.31 /postcss-discard-duplicates@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: postcss: 8.4.31 /postcss-discard-empty@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: postcss: 8.4.31 /postcss-discard-overridden@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: postcss: 8.4.31 /postcss-flexbugs-fixes@5.0.2(postcss@8.4.31): - resolution: - { - integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==, - } + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} peerDependencies: postcss: ^8.1.4 dependencies: postcss: 8.4.31 /postcss-loader@5.3.0(postcss@8.4.31)(webpack@5.89.0): - resolution: - { - integrity: sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==} + engines: {node: '>= 10.13.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 @@ -17648,11 +14501,8 @@ packages: webpack: 5.89.0 /postcss-merge-longhand@5.1.7(postcss@8.4.31): - resolution: - { - integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17661,11 +14511,8 @@ packages: stylehacks: 5.1.1(postcss@8.4.31) /postcss-merge-rules@5.1.4(postcss@8.4.31): - resolution: - { - integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17676,11 +14523,8 @@ packages: postcss-selector-parser: 6.0.13 /postcss-minify-font-values@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17688,11 +14532,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-minify-gradients@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17702,11 +14543,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-minify-params@5.1.4(postcss@8.4.31): - resolution: - { - integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17716,11 +14554,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-minify-selectors@5.2.1(postcss@8.4.31): - resolution: - { - integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17728,22 +14563,16 @@ packages: postcss-selector-parser: 6.0.13 /postcss-modules-extract-imports@3.0.0(postcss@8.4.31): - resolution: - { - integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: postcss: 8.4.31 /postcss-modules-local-by-default@4.0.3(postcss@8.4.31): - resolution: - { - integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: @@ -17753,11 +14582,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-modules-scope@3.0.0(postcss@8.4.31): - resolution: - { - integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: @@ -17765,11 +14591,8 @@ packages: postcss-selector-parser: 6.0.13 /postcss-modules-values@4.0.0(postcss@8.4.31): - resolution: - { - integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: @@ -17777,22 +14600,16 @@ packages: postcss: 8.4.31 /postcss-normalize-charset@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: postcss: 8.4.31 /postcss-normalize-display-values@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17800,11 +14617,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-positions@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17812,11 +14626,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-repeat-style@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17824,11 +14635,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-string@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17836,11 +14644,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-timing-functions@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17848,11 +14653,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-unicode@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17861,11 +14663,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-url@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17874,11 +14673,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-normalize-whitespace@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17886,11 +14682,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-ordered-values@5.1.3(postcss@8.4.31): - resolution: - { - integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17899,11 +14692,8 @@ packages: postcss-value-parser: 4.2.0 /postcss-reduce-initial@5.1.2(postcss@8.4.31): - resolution: - { - integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17912,11 +14702,8 @@ packages: postcss: 8.4.31 /postcss-reduce-transforms@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17924,21 +14711,15 @@ packages: postcss-value-parser: 4.2.0 /postcss-selector-parser@6.0.13: - resolution: - { - integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 /postcss-svgo@5.1.0(postcss@8.4.31): - resolution: - { - integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17947,11 +14728,8 @@ packages: svgo: 2.8.0 /postcss-unique-selectors@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -17959,28 +14737,19 @@ packages: postcss-selector-parser: 6.0.13 /postcss-value-parser@4.2.0: - resolution: - { - integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, - } + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} /postcss@8.4.31: - resolution: - { - integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 /prebuild-install@7.1.1: - resolution: - { - integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} hasBin: true requiresBuild: true dependencies: @@ -17998,188 +14767,135 @@ packages: tunnel-agent: 0.6.0 /prelude-ls@1.1.2: - resolution: - { - integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} dev: true /prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + /prepend-http@1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} + engines: {node: '>=0.10.0'} + dev: false + + /prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: false /prettier-linter-helpers@1.0.0: - resolution: - { - integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.3.0 dev: true /prettier-plugin-solidity@1.2.0(prettier@3.1.0): - resolution: - { - integrity: sha512-fgxcUZpVAP+LlRfy5JI5oaAkXGkmsje2VJ5krv/YMm+rcTZbIUwFguSw5f+WFuttMjpDm6wB4UL7WVkArEfiVA==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-fgxcUZpVAP+LlRfy5JI5oaAkXGkmsje2VJ5krv/YMm+rcTZbIUwFguSw5f+WFuttMjpDm6wB4UL7WVkArEfiVA==} + engines: {node: '>=16'} peerDependencies: - prettier: ">=2.3.0" + prettier: '>=2.3.0' dependencies: - "@solidity-parser/parser": 0.16.2 + '@solidity-parser/parser': 0.16.2 prettier: 3.1.0 semver: 7.5.4 solidity-comments-extractor: 0.0.7 dev: true /prettier@2.8.8: - resolution: - { - integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} hasBin: true dev: true /prettier@3.1.0: - resolution: - { - integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + engines: {node: '>=14'} hasBin: true dev: true /pretty-error@2.1.2: - resolution: - { - integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==, - } + resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} dependencies: lodash: 4.17.21 renderkid: 2.0.7 /proc-log@3.0.0: - resolution: - { - integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==, - } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true /process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} /process@0.11.10: - resolution: - { - integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, - } - engines: { node: ">= 0.6.0" } - dev: true + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} /progress@2.0.3: - resolution: - { - integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} /promise@7.3.1: - resolution: - { - integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==, - } + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: asap: 2.0.6 /promise@8.3.0: - resolution: - { - integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==, - } + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: asap: 2.0.6 dev: true /prompts@2.4.2: - resolution: - { - integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 /prop-types@15.8.1: - resolution: - { - integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, - } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 /proper-lockfile@4.1.2: - resolution: - { - integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==, - } + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} dependencies: graceful-fs: 4.2.11 retry: 0.12.0 signal-exit: 3.0.7 /proto-list@1.2.4: - resolution: - { - integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, - } + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} /protocols@2.0.1: - resolution: - { - integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==, - } + resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} /proxy-addr@2.0.7: - resolution: - { - integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 /proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, - } + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true /pseudomap@1.0.2: - resolution: - { - integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, - } + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false /public-encrypt@4.0.3: - resolution: - { - integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==, - } + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 browserify-rsa: 4.1.0 @@ -18187,63 +14903,60 @@ packages: parse-asn1: 5.1.6 randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true /pump@3.0.0: - resolution: - { - integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, - } + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 /punycode@1.4.1: - resolution: - { - integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, - } + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true + /punycode@2.1.0: + resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} + engines: {node: '>=6'} + dev: false + /punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} /pure-rand@6.0.4: - resolution: - { - integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==, - } + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true /qs@6.11.0: - resolution: - { - integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, - } - engines: { node: ">=0.6" } + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 /qs@6.11.2: - resolution: - { - integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==, - } - engines: { node: ">=0.6" } + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true + /qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + dev: false + + /query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: false + /query-string@6.14.1: - resolution: - { - integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} + engines: {node: '>=6'} dependencies: decode-uri-component: 0.2.2 filter-obj: 1.1.0 @@ -18251,64 +14964,39 @@ packages: strict-uri-encode: 2.0.0 /querystring-es3@0.2.1: - resolution: - { - integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==, - } - engines: { node: ">=0.4.x" } + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} dev: true /queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} /queue-tick@1.0.1: - resolution: - { - integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==, - } + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} requiresBuild: true /quick-lru@5.1.1: - resolution: - { - integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} /randombytes@2.1.0: - resolution: - { - integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, - } + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 /randomfill@1.0.4: - resolution: - { - integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==, - } + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: true /range-parser@1.2.1: - resolution: - { - integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} /raw-body@2.5.1: - resolution: - { - integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 http-errors: 2.0.0 @@ -18316,11 +15004,8 @@ packages: unpipe: 1.0.0 /raw-body@2.5.2: - resolution: - { - integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 http-errors: 2.0.0 @@ -18328,11 +15013,8 @@ packages: unpipe: 1.0.0 /raw-loader@4.0.2(webpack@5.89.0): - resolution: - { - integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: @@ -18341,10 +15023,7 @@ packages: webpack: 5.89.0 /rc@1.2.8: - resolution: - { - integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, - } + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: deep-extend: 0.6.0 @@ -18353,31 +15032,25 @@ packages: strip-json-comments: 2.0.1 /react-clientside-effect@1.2.6(react@18.2.0): - resolution: - { - integrity: sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==, - } + resolution: {integrity: sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==} peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 react: 18.2.0 dev: false /react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.3.2)(webpack@5.89.0): - resolution: - { - integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==, - } - engines: { node: ">=14" } - peerDependencies: - typescript: ">=2.7" - webpack: ">=4" + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' peerDependenciesMeta: typescript: optional: true dependencies: - "@babel/code-frame": 7.23.4 + '@babel/code-frame': 7.23.4 address: 1.2.2 browserslist: 4.22.1 chalk: 4.1.2 @@ -18409,10 +15082,7 @@ packages: - vue-template-compiler /react-dom@18.2.0(react@18.2.0): - resolution: - { - integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==, - } + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 dependencies: @@ -18421,39 +15091,27 @@ packages: scheduler: 0.23.0 /react-error-overlay@6.0.11: - resolution: - { - integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==, - } + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} /react-fast-compare@2.0.4: - resolution: - { - integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==, - } + resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} dev: false /react-fast-compare@3.2.2: - resolution: - { - integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==, - } + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: false /react-focus-lock@2.9.6(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-B7gYnCjHNrNYwY2juS71dHbf0+UpXXojt02svxybj8N5bxceAkzPChKEncHuratjUHkIFNCn06k2qj1DRlzTug==, - } + resolution: {integrity: sha512-B7gYnCjHNrNYwY2juS71dHbf0+UpXXojt02svxybj8N5bxceAkzPChKEncHuratjUHkIFNCn06k2qj1DRlzTug==} peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@babel/runtime": 7.23.4 - "@types/react": 18.2.38 + '@babel/runtime': 7.23.4 + '@types/react': 18.2.38 focus-lock: 1.0.0 prop-types: 15.8.1 react: 18.2.0 @@ -18463,12 +15121,9 @@ packages: dev: false /react-helmet@6.1.0(react@18.2.0): - resolution: - { - integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==, - } + resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==} peerDependencies: - react: ">=16.3.0" + react: '>=16.3.0' dependencies: object-assign: 4.1.1 prop-types: 15.8.1 @@ -18478,16 +15133,10 @@ packages: dev: false /react-is@16.13.1: - resolution: - { - integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, - } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} /react-number-format@5.3.1(react-dom@18.2.0)(react@18.2.0): - resolution: - { - integrity: sha512-qpYcQLauIeEhCZUZY9jXZnnroOtdy3jYaS1zQ3M1Sr6r/KMOBEIGNIb7eKT19g2N1wbYgFgvDzs19hw5TrB8XQ==, - } + resolution: {integrity: sha512-qpYcQLauIeEhCZUZY9jXZnnroOtdy3jYaS1zQ3M1Sr6r/KMOBEIGNIb7eKT19g2N1wbYgFgvDzs19hw5TrB8XQ==} peerDependencies: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 @@ -18498,45 +15147,36 @@ packages: dev: false /react-refresh@0.14.0: - resolution: - { - integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} /react-remove-scroll-bar@2.3.4(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.38)(react@18.2.0) tslib: 2.6.2 dev: false /react-remove-scroll@2.5.7(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.38)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.38)(react@18.2.0) @@ -18546,11 +15186,8 @@ packages: dev: false /react-server-dom-webpack@0.0.0-experimental-c8b778b7f-20220825(react@18.2.0)(webpack@5.89.0): - resolution: - { - integrity: sha512-JyCjbp6ZvkH/T0EuVPdceYlC8u5WqWDSJr2KxDvc81H2eJ+7zYUN++IcEycnR2F+HmER8QVgxfotnIx352zi+w==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-JyCjbp6ZvkH/T0EuVPdceYlC8u5WqWDSJr2KxDvc81H2eJ+7zYUN++IcEycnR2F+HmER8QVgxfotnIx352zi+w==} + engines: {node: '>=0.10.0'} peerDependencies: react: 0.0.0-experimental-c8b778b7f-20220825 webpack: ^5.59.0 @@ -18562,10 +15199,7 @@ packages: webpack: 5.89.0 /react-side-effect@2.1.2(react@18.2.0): - resolution: - { - integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==, - } + resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==} peerDependencies: react: ^16.3.0 || ^17.0.0 || ^18.0.0 dependencies: @@ -18573,19 +15207,16 @@ packages: dev: false /react-style-singleton@2.2.1(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -18593,39 +15224,27 @@ packages: dev: false /react@18.2.0: - resolution: - { - integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 /read-yaml-file@2.1.0: - resolution: - { - integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==, - } - engines: { node: ">=10.13" } + resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} + engines: {node: '>=10.13'} dependencies: js-yaml: 4.1.0 strip-bom: 4.0.0 dev: true /read@1.0.7: - resolution: - { - integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} + engines: {node: '>=0.8'} dependencies: mute-stream: 0.0.8 /readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, - } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -18636,85 +15255,58 @@ packages: util-deprecate: 1.0.2 /readable-stream@3.6.2: - resolution: - { - integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 /readable-web-to-node-stream@3.0.2: - resolution: - { - integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} dependencies: readable-stream: 3.6.2 /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 /rechoir@0.6.2: - resolution: - { - integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==, - } - engines: { node: ">= 0.10" } + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} dependencies: resolve: 1.22.8 dev: true /recursive-readdir@2.2.3: - resolution: - { - integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} dependencies: minimatch: 3.1.2 /reduce-flatten@2.0.0: - resolution: - { - integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} dev: true /redux-thunk@2.4.2(redux@4.2.1): - resolution: - { - integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==, - } + resolution: {integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==} peerDependencies: redux: ^4 dependencies: redux: 4.2.1 /redux@4.2.1: - resolution: - { - integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==, - } + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 /reflect.getprototypeof@1.0.4: - resolution: - { - integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -18724,66 +15316,42 @@ packages: which-builtin-type: 1.1.3 /regenerate-unicode-properties@10.1.1: - resolution: - { - integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 /regenerate@1.4.2: - resolution: - { - integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, - } + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} /regenerator-runtime@0.13.11: - resolution: - { - integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, - } + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} /regenerator-runtime@0.14.0: - resolution: - { - integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, - } + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} /regenerator-transform@0.15.2: - resolution: - { - integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, - } + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 /regexp.prototype.flags@1.5.1: - resolution: - { - integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 /regexpp@3.2.0: - resolution: - { - integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} /regexpu-core@5.3.2: - resolution: - { - integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} dependencies: - "@babel/regjsgen": 0.8.0 + '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 regenerate-unicode-properties: 10.1.1 regjsparser: 0.9.1 @@ -18791,55 +15359,37 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 /registry-auth-token@5.0.2: - resolution: - { - integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} dependencies: - "@pnpm/npm-conf": 2.2.2 + '@pnpm/npm-conf': 2.2.2 /registry-url@6.0.1: - resolution: - { - integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} dependencies: rc: 1.2.8 /regjsparser@0.9.1: - resolution: - { - integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, - } + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 /relay-runtime@12.0.0: - resolution: - { - integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==, - } + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - "@babel/runtime": 7.23.4 + '@babel/runtime': 7.23.4 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: - encoding /remove-trailing-separator@1.1.0: - resolution: - { - integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==, - } + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} /renderkid@2.0.7: - resolution: - { - integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==, - } + resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==} dependencies: css-select: 4.3.0 dom-converter: 0.2.0 @@ -18848,109 +15398,94 @@ packages: strip-ansi: 3.0.1 /req-cwd@2.0.0: - resolution: - { - integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} + engines: {node: '>=4'} dependencies: req-from: 2.0.0 dev: true /req-from@2.0.0: - resolution: - { - integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} + engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true + /request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + dev: false + /require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} /require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} /require-main-filename@2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, - } + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} /require-package-name@2.0.1: - resolution: - { - integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==, - } + resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} /resolve-alpn@1.2.1: - resolution: - { - integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==, - } + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} /resolve-cwd@3.0.0: - resolution: - { - integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 /resolve-from@3.0.0: - resolution: - { - integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} dev: true /resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} /resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} /resolve@1.1.7: - resolution: - { - integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==, - } + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: true /resolve@1.17.0: - resolution: - { - integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==, - } + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} dependencies: path-parse: 1.0.7 dev: true /resolve@1.22.8: - resolution: - { - integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, - } + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: is-core-module: 2.13.1 @@ -18958,191 +15493,135 @@ packages: supports-preserve-symlinks-flag: 1.0.0 /resolve@2.0.0-next.5: - resolution: - { - integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==, - } + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + dependencies: + lowercase-keys: 1.0.1 + dev: false + /responselike@2.0.1: - resolution: - { - integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==, - } + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 /responselike@3.0.0: - resolution: - { - integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} dependencies: lowercase-keys: 3.0.0 /restore-cursor@3.1.0: - resolution: - { - integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 /retry@0.12.0: - resolution: - { - integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} /retry@0.13.1: - resolution: - { - integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} dev: true /reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} /rimraf@2.7.1: - resolution: - { - integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, - } + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 /rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 /ripemd160@2.0.2: - resolution: - { - integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==, - } + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 - dev: true /rlp@2.2.7: - resolution: - { - integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==, - } + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true dependencies: bn.js: 5.2.1 - dev: true /rollup@4.5.1: - resolution: - { - integrity: sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==, - } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - "@rollup/rollup-android-arm-eabi": 4.5.1 - "@rollup/rollup-android-arm64": 4.5.1 - "@rollup/rollup-darwin-arm64": 4.5.1 - "@rollup/rollup-darwin-x64": 4.5.1 - "@rollup/rollup-linux-arm-gnueabihf": 4.5.1 - "@rollup/rollup-linux-arm64-gnu": 4.5.1 - "@rollup/rollup-linux-arm64-musl": 4.5.1 - "@rollup/rollup-linux-x64-gnu": 4.5.1 - "@rollup/rollup-linux-x64-musl": 4.5.1 - "@rollup/rollup-win32-arm64-msvc": 4.5.1 - "@rollup/rollup-win32-ia32-msvc": 4.5.1 - "@rollup/rollup-win32-x64-msvc": 4.5.1 + '@rollup/rollup-android-arm-eabi': 4.5.1 + '@rollup/rollup-android-arm64': 4.5.1 + '@rollup/rollup-darwin-arm64': 4.5.1 + '@rollup/rollup-darwin-x64': 4.5.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.5.1 + '@rollup/rollup-linux-arm64-gnu': 4.5.1 + '@rollup/rollup-linux-arm64-musl': 4.5.1 + '@rollup/rollup-linux-x64-gnu': 4.5.1 + '@rollup/rollup-linux-x64-musl': 4.5.1 + '@rollup/rollup-win32-arm64-msvc': 4.5.1 + '@rollup/rollup-win32-ia32-msvc': 4.5.1 + '@rollup/rollup-win32-x64-msvc': 4.5.1 fsevents: 2.3.3 dev: true /run-applescript@5.0.0: - resolution: - { - integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} dependencies: execa: 5.1.1 dev: true /run-async@2.4.1: - resolution: - { - integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} /run-parallel-limit@1.1.0: - resolution: - { - integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==, - } + resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: queue-microtask: 1.2.3 dev: true /run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 /rustbn.js@0.2.0: - resolution: - { - integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==, - } + resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} dev: true /rxjs@6.6.7: - resolution: - { - integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, - } - engines: { npm: ">=2.0.0" } + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} dependencies: tslib: 1.14.1 /rxjs@7.8.1: - resolution: - { - integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, - } + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.2 dev: false /safe-array-concat@1.0.1: - resolution: - { - integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 @@ -19150,38 +15629,23 @@ packages: isarray: 2.0.5 /safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} /safe-buffer@5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, - } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} /safe-regex-test@1.0.0: - resolution: - { - integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, - } + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-regex: 1.1.4 /safer-buffer@2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, - } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} /sc-istanbul@0.4.6: - resolution: - { - integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==, - } + resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} hasBin: true dependencies: abbrev: 1.0.9 @@ -19201,96 +15665,83 @@ packages: dev: true /scheduler@0.23.0: - resolution: - { - integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, - } + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 /schema-utils@2.7.0: - resolution: - { - integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==, - } - engines: { node: ">= 8.9.0" } + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) /schema-utils@2.7.1: - resolution: - { - integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, - } - engines: { node: ">= 8.9.0" } + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) /schema-utils@3.3.0: - resolution: - { - integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + /scrypt-js@2.0.3: + resolution: {integrity: sha512-d8DzQxNivoNDogyYmb/9RD5mEQE/Q7vG2dLDUgvfPmKL9xCVzgqUntOdS0me9Cq9Sh9VxIZuoNEFcsfyXRnyUw==} + dev: false + + /scrypt-js@2.0.4: + resolution: {integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==} + dev: false + /scrypt-js@3.0.1: - resolution: - { - integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==, - } - dev: true + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + /scryptsy@2.1.0: + resolution: {integrity: sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==} + dev: false /secp256k1@4.0.3: - resolution: - { - integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} requiresBuild: true dependencies: elliptic: 6.5.4 node-addon-api: 2.0.2 node-gyp-build: 4.7.0 - dev: true + + /seek-bzip@1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + dependencies: + commander: 2.20.3 + dev: false /semver@5.7.2: - resolution: - { - integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, - } + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true /semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true /semver@7.5.4: - resolution: - { - integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 /send@0.18.0: - resolution: - { - integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 @@ -19309,46 +15760,31 @@ packages: - supports-color /sentence-case@3.0.4: - resolution: - { - integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==, - } + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 /serialize-javascript@5.0.1: - resolution: - { - integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==, - } + resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} dependencies: randombytes: 2.1.0 /serialize-javascript@6.0.0: - resolution: - { - integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==, - } + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: randombytes: 2.1.0 dev: true /serialize-javascript@6.0.1: - resolution: - { - integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==, - } + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 /serve-static@1.15.0: - resolution: - { - integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -19357,18 +15793,25 @@ packages: transitivePeerDependencies: - supports-color + /servify@0.1.12: + resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} + engines: {node: '>=6'} + dependencies: + body-parser: 1.20.1 + cors: 2.8.5 + express: 4.18.2 + request: 2.88.2 + xhr: 2.6.0 + transitivePeerDependencies: + - supports-color + dev: false + /set-blocking@2.0.0: - resolution: - { - integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, - } + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} /set-function-length@1.1.1: - resolution: - { - integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 get-intrinsic: 1.2.2 @@ -19376,70 +15819,49 @@ packages: has-property-descriptors: 1.0.1 /set-function-name@2.0.1: - resolution: - { - integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 + /setimmediate@1.0.4: + resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} + dev: false + /setimmediate@1.0.5: - resolution: - { - integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, - } + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} /setprototypeof@1.2.0: - resolution: - { - integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, - } + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} /sha.js@2.4.11: - resolution: - { - integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==, - } + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true /sha1@1.1.1: - resolution: - { - integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==, - } + resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} dependencies: charenc: 0.0.2 crypt: 0.0.2 dev: true /shallow-clone@3.0.1: - resolution: - { - integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} dependencies: kind-of: 6.0.3 /shallow-compare@1.2.2: - resolution: - { - integrity: sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==, - } + resolution: {integrity: sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==} /sharp@0.32.6: - resolution: - { - integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==, - } - engines: { node: ">=14.15.0" } + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} requiresBuild: true dependencies: color: 4.2.3 @@ -19452,49 +15874,31 @@ packages: tunnel-agent: 0.6.0 /shebang-command@1.2.0: - resolution: - { - integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 /shebang-regex@1.0.0: - resolution: - { - integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} /shell-quote@1.8.1: - resolution: - { - integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, - } + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} /shelljs@0.8.5: - resolution: - { - integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} hasBin: true dependencies: glob: 7.2.3 @@ -19503,39 +15907,32 @@ packages: dev: true /side-channel@1.0.4: - resolution: - { - integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, - } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.13.1 /signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} /signedsource@1.0.0: - resolution: - { - integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==, - } + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} /simple-concat@1.0.1: - resolution: - { - integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==, - } + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} requiresBuild: true + /simple-get@2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + /simple-get@4.0.1: - resolution: - { - integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==, - } + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} requiresBuild: true dependencies: decompress-response: 6.0.0 @@ -19543,59 +15940,38 @@ packages: simple-concat: 1.0.1 /simple-swizzle@0.2.2: - resolution: - { - integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, - } + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} requiresBuild: true dependencies: is-arrayish: 0.3.2 /sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} /slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} /slice-ansi@4.0.0: - resolution: - { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 /slugify@1.6.6: - resolution: - { - integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + engines: {node: '>=8.0.0'} /snake-case@3.0.4: - resolution: - { - integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, - } + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 tslib: 2.6.2 /socket.io-adapter@2.5.2: - resolution: - { - integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==, - } + resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} dependencies: ws: 8.11.0 transitivePeerDependencies: @@ -19603,13 +15979,10 @@ packages: - utf-8-validate /socket.io-client@4.7.1: - resolution: - { - integrity: sha512-Qk3Xj8ekbnzKu3faejo4wk2MzXA029XppiXtTF/PkbTg+fcwaTw1PlDrTrrrU4mKoYC4dvlApOnSeyLCKwek2w==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Qk3Xj8ekbnzKu3faejo4wk2MzXA029XppiXtTF/PkbTg+fcwaTw1PlDrTrrrU4mKoYC4dvlApOnSeyLCKwek2w==} + engines: {node: '>=10.0.0'} dependencies: - "@socket.io/component-emitter": 3.1.0 + '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) engine.io-client: 6.5.3 socket.io-parser: 4.2.4 @@ -19619,23 +15992,17 @@ packages: - utf-8-validate /socket.io-parser@4.2.4: - resolution: - { - integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} dependencies: - "@socket.io/component-emitter": 3.1.0 + '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color /socket.io@4.7.1: - resolution: - { - integrity: sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==} + engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 @@ -19650,11 +16017,8 @@ packages: - utf-8-validate /solc@0.7.3(debug@4.3.4): - resolution: - { - integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} + engines: {node: '>=8.0.0'} hasBin: true dependencies: command-exists: 1.2.9 @@ -19671,13 +16035,10 @@ packages: dev: true /solhint@4.0.0: - resolution: - { - integrity: sha512-bFViMcFvhqVd/HK3Roo7xZXX5nbujS7Bxeg5vnZc9QvH0yCWCrQ38Yrn1pbAY9tlKROc6wFr+rK1mxYgYrjZgA==, - } + resolution: {integrity: sha512-bFViMcFvhqVd/HK3Roo7xZXX5nbujS7Bxeg5vnZc9QvH0yCWCrQ38Yrn1pbAY9tlKROc6wFr+rK1mxYgYrjZgA==} hasBin: true dependencies: - "@solidity-parser/parser": 0.16.2 + '@solidity-parser/parser': 0.16.2 ajv: 6.12.6 antlr4: 4.13.1 ast-parents: 0.0.1 @@ -19700,32 +16061,23 @@ packages: dev: true /solidity-ast@0.4.53: - resolution: - { - integrity: sha512-/7xYF//mAt4iP9S21fCFSLMouYXzXJqrd84jbI1LHL1rq7XhyFLUXxVcRkl9KqEEQmI+DmDbTeS6W5cEwcJ2wQ==, - } + resolution: {integrity: sha512-/7xYF//mAt4iP9S21fCFSLMouYXzXJqrd84jbI1LHL1rq7XhyFLUXxVcRkl9KqEEQmI+DmDbTeS6W5cEwcJ2wQ==} dependencies: array.prototype.findlast: 1.2.3 dev: true /solidity-comments-extractor@0.0.7: - resolution: - { - integrity: sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==, - } + resolution: {integrity: sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==} dev: true /solidity-coverage@0.8.5(hardhat@2.19.1): - resolution: - { - integrity: sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ==, - } + resolution: {integrity: sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ==} hasBin: true peerDependencies: hardhat: ^2.11.0 dependencies: - "@ethersproject/abi": 5.7.0 - "@solidity-parser/parser": 0.16.2 + '@ethersproject/abi': 5.7.0 + '@solidity-parser/parser': 0.16.2 chalk: 2.4.2 death: 1.1.0 detect-port: 1.5.1 @@ -19750,10 +16102,7 @@ packages: dev: true /solidity-docgen@0.6.0-beta.36(hardhat@2.19.1): - resolution: - { - integrity: sha512-f/I5G2iJgU1h0XrrjRD0hHMr7C10u276vYvm//rw1TzFcYQ4xTOyAoi9oNAHRU0JU4mY9eTuxdVc2zahdMuhaQ==, - } + resolution: {integrity: sha512-f/I5G2iJgU1h0XrrjRD0hHMr7C10u276vYvm//rw1TzFcYQ4xTOyAoi9oNAHRU0JU4mY9eTuxdVc2zahdMuhaQ==} peerDependencies: hardhat: ^2.8.0 dependencies: @@ -19763,33 +16112,21 @@ packages: dev: true /source-list-map@2.0.1: - resolution: - { - integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==, - } + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} /source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} /source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 /source-map@0.2.0: - resolution: - { - integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} + engines: {node: '>=0.8.0'} requiresBuild: true dependencies: amdefine: 1.0.1 @@ -19797,99 +16134,84 @@ packages: optional: true /source-map@0.5.7: - resolution: - { - integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} dev: false /source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} /source-map@0.7.4: - resolution: - { - integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + /spinnies@0.4.3: + resolution: {integrity: sha512-TTA2vWXrXJpfThWAl2t2hchBnCMI1JM5Wmb2uyI7Zkefdw/xO98LDy6/SBYwQPiYXL3swx3Eb44ZxgoS8X5wpA==} + dependencies: + chalk: 2.4.2 + cli-cursor: 3.1.0 + strip-ansi: 5.2.0 + dev: false /split-on-first@1.1.0: - resolution: - { - integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} /sponge-case@1.0.1: - resolution: - { - integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==, - } + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} dependencies: tslib: 2.6.2 /sprintf-js@1.0.3: - resolution: - { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, - } + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + /sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: false /stable@0.1.8: - resolution: - { - integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, - } - deprecated: "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' /stack-trace@0.0.10: - resolution: - { - integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==, - } + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} /stackframe@1.3.4: - resolution: - { - integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, - } + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} /stacktrace-parser@0.1.10: - resolution: - { - integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} dependencies: type-fest: 0.7.1 dev: true /statuses@2.0.1: - resolution: - { - integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} /stream-browserify@3.0.0: - resolution: - { - integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==, - } + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 readable-stream: 3.6.2 dev: true /stream-http@3.2.0: - resolution: - { - integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==, - } + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} dependencies: builtin-status-codes: 3.0.0 inherits: 2.0.4 @@ -19898,47 +16220,34 @@ packages: dev: true /streamsearch@1.1.0: - resolution: - { - integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} /streamx@2.15.5: - resolution: - { - integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==, - } + resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} requiresBuild: true dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 + /strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: false + /strict-uri-encode@2.0.0: - resolution: - { - integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} /string-format@2.0.0: - resolution: - { - integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==, - } + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} dev: true /string-natural-compare@3.0.1: - resolution: - { - integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==, - } + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} /string-similarity@1.2.2: - resolution: - { - integrity: sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==, - } + resolution: {integrity: sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dependencies: lodash.every: 4.6.0 @@ -19948,32 +16257,31 @@ packages: lodash.maxby: 4.6.0 /string-width@2.1.1: - resolution: - { - integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 - dev: true + + /string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: false /string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 /string.prototype.matchall@4.0.10: - resolution: - { - integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==, - } + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -19986,167 +16294,114 @@ packages: side-channel: 1.0.4 /string.prototype.trim@1.2.8: - resolution: - { - integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 /string.prototype.trimend@1.0.7: - resolution: - { - integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==, - } + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 /string.prototype.trimstart@1.0.7: - resolution: - { - integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==, - } + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 /string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 /string_decoder@1.3.0: - resolution: - { - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, - } + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 /strip-ansi@3.0.1: - resolution: - { - integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 /strip-ansi@4.0.0: - resolution: - { - integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} dependencies: ansi-regex: 3.0.1 - dev: true /strip-ansi@5.2.0: - resolution: - { - integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 /strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 /strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} /strip-bom@4.0.0: - resolution: - { - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} dev: true + /strip-dirs@2.1.0: + resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + dependencies: + is-natural-number: 4.0.1 + dev: false + /strip-eof@1.0.0: - resolution: - { - integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} /strip-final-newline@2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} /strip-final-newline@3.0.0: - resolution: - { - integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} dev: true /strip-hex-prefix@1.0.0: - resolution: - { - integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==, - } - engines: { node: ">=6.5.0", npm: ">=3" } + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} dependencies: is-hex-prefixed: 1.0.0 - dev: true /strip-json-comments@2.0.1: - resolution: - { - integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} requiresBuild: true /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} /strtok3@6.3.0: - resolution: - { - integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} dependencies: - "@tokenizer/token": 0.3.0 + '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 /style-loader@2.0.0(webpack@5.89.0): - resolution: - { - integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: @@ -20155,19 +16410,13 @@ packages: webpack: 5.89.0 /style-to-object@0.4.4: - resolution: - { - integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==, - } + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: inline-style-parser: 0.1.1 /stylehacks@5.1.1(postcss@8.4.31): - resolution: - { - integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==, - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: @@ -20176,71 +16425,54 @@ packages: postcss-selector-parser: 6.0.13 /stylis@4.2.0: - resolution: - { - integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==, - } + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} dev: false /sudo-prompt@8.2.5: - resolution: - { - integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==, - } + resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} /supports-color@3.2.3: - resolution: - { - integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} dependencies: has-flag: 1.0.0 dev: true /supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + /supports-color@6.0.0: + resolution: {integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==} + engines: {node: '>=6'} + dependencies: + has-flag: 3.0.0 + dev: false + /supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 /supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} /svgo@2.8.0: - resolution: - { - integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} hasBin: true dependencies: - "@trysound/sax": 0.2.0 + '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 4.3.0 css-tree: 1.1.3 @@ -20249,19 +16481,54 @@ packages: stable: 0.1.8 /swap-case@2.0.2: - resolution: - { - integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==, - } + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} dependencies: tslib: 2.6.2 + /swarm-js@0.1.39: + resolution: {integrity: sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==} + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + decompress: 4.2.1 + eth-lib: 0.1.29 + fs-extra: 4.0.3 + got: 7.1.0 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /swarm-js@0.1.42: + resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29 + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /sync-request@6.1.0: - resolution: - { - integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} + engines: {node: '>=8.0.0'} dependencies: http-response-object: 3.0.2 sync-rpc: 1.3.6 @@ -20269,37 +16536,28 @@ packages: dev: true /sync-rpc@1.3.6: - resolution: - { - integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==, - } + resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} dependencies: get-port: 3.2.0 dev: true /synckit@0.8.5: - resolution: - { - integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: - "@pkgr/utils": 2.4.2 + '@pkgr/utils': 2.4.2 tslib: 2.6.2 dev: true /syncpack@11.2.1: - resolution: - { - integrity: sha512-WoUtm+ZLmWUvy0cLJy8ds/smVRH3ivI6iANcGTPrsvareCc4SmRVMvr+TwjZyFm0FDGmEfMVsAX7z16+yxL6bQ==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-WoUtm+ZLmWUvy0cLJy8ds/smVRH3ivI6iANcGTPrsvareCc4SmRVMvr+TwjZyFm0FDGmEfMVsAX7z16+yxL6bQ==} + engines: {node: '>=16'} hasBin: true dependencies: - "@effect/data": 0.17.1 - "@effect/io": 0.38.0(@effect/data@0.17.1) - "@effect/match": 0.32.0(@effect/data@0.17.1)(@effect/schema@0.33.1) - "@effect/schema": 0.33.1(@effect/data@0.17.1)(@effect/io@0.38.0) + '@effect/data': 0.17.1 + '@effect/io': 0.38.0(@effect/data@0.17.1) + '@effect/match': 0.32.0(@effect/data@0.17.1)(@effect/schema@0.33.1) + '@effect/schema': 0.33.1(@effect/data@0.17.1)(@effect/io@0.38.0) chalk: 4.1.2 commander: 11.0.0 cosmiconfig: 8.2.0 @@ -20316,11 +16574,8 @@ packages: dev: true /table-layout@1.0.2: - resolution: - { - integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} dependencies: array-back: 4.0.2 deep-extend: 0.6.0 @@ -20329,11 +16584,8 @@ packages: dev: true /table@6.8.1: - resolution: - { - integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} dependencies: ajv: 8.12.0 lodash.truncate: 4.4.2 @@ -20342,24 +16594,15 @@ packages: strip-ansi: 6.0.1 /tapable@1.1.3: - resolution: - { - integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} /tapable@2.2.1: - resolution: - { - integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} /tar-fs@2.1.1: - resolution: - { - integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==, - } + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} requiresBuild: true dependencies: chownr: 1.1.4 @@ -20368,22 +16611,29 @@ packages: tar-stream: 2.2.0 /tar-fs@3.0.4: - resolution: - { - integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==, - } + resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} requiresBuild: true dependencies: mkdirp-classic: 0.5.3 pump: 3.0.0 tar-stream: 3.1.6 + /tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + dev: false + /tar-stream@2.2.0: - resolution: - { - integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} requiresBuild: true dependencies: bl: 4.1.0 @@ -20393,36 +16643,43 @@ packages: readable-stream: 3.6.2 /tar-stream@3.1.6: - resolution: - { - integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==, - } + resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} requiresBuild: true dependencies: b4a: 1.6.4 fast-fifo: 1.3.2 streamx: 2.15.5 + /tar@4.4.19: + resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} + engines: {node: '>=4.5'} + dependencies: + chownr: 1.1.4 + fs-minipass: 1.2.7 + minipass: 2.9.0 + minizlib: 1.3.3 + mkdirp: 0.5.6 + safe-buffer: 5.2.1 + yallist: 3.1.1 + dev: false + /terser-webpack-plugin@5.3.9(webpack@5.89.0): - resolution: - { - integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==, - } - engines: { node: ">= 10.13.0" } - peerDependencies: - "@swc/core": "*" - esbuild: "*" - uglify-js: "*" + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: - "@swc/core": + '@swc/core': optional: true esbuild: optional: true uglify-js: optional: true dependencies: - "@jridgewell/trace-mapping": 0.3.20 + '@jridgewell/trace-mapping': 0.3.20 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 @@ -20430,35 +16687,26 @@ packages: webpack: 5.89.0 /terser@5.24.0: - resolution: - { - integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} + engines: {node: '>=10'} hasBin: true dependencies: - "@jridgewell/source-map": 0.3.5 + '@jridgewell/source-map': 0.3.5 acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 /text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, - } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} /then-request@6.0.2: - resolution: - { - integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==, - } - engines: { node: ">=6.0.0" } - dependencies: - "@types/concat-stream": 1.6.1 - "@types/form-data": 0.0.33 - "@types/node": 8.10.66 - "@types/qs": 6.9.10 + resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} + engines: {node: '>=6.0.0'} + dependencies: + '@types/concat-stream': 1.6.1 + '@types/form-data': 0.0.33 + '@types/node': 8.10.66 + '@types/qs': 6.9.10 caseless: 0.12.0 concat-stream: 1.6.2 form-data: 2.5.1 @@ -20469,154 +16717,144 @@ packages: dev: true /through@2.3.8: - resolution: - { - integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, - } + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} /tightrope@0.1.0: - resolution: - { - integrity: sha512-HHHNYdCAIYwl1jOslQBT455zQpdeSo8/A346xpIb/uuqhSg+tCvYNsP5f11QW+z9VZ3vSX8YIfzTApjjuGH63w==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-HHHNYdCAIYwl1jOslQBT455zQpdeSo8/A346xpIb/uuqhSg+tCvYNsP5f11QW+z9VZ3vSX8YIfzTApjjuGH63w==} + engines: {node: '>=14'} dev: true + /timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + dev: false + /timers-browserify@2.0.12: - resolution: - { - integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==, - } - engines: { node: ">=0.6.0" } + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} dependencies: setimmediate: 1.0.5 dev: true /timers-ext@0.1.7: - resolution: - { - integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==, - } + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} dependencies: es5-ext: 0.10.62 next-tick: 1.1.0 /tiny-invariant@1.3.1: - resolution: - { - integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==, - } + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + dev: false + + /tiny-secp256k1@1.1.6: + resolution: {integrity: sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==} + engines: {node: '>=6.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + bn.js: 4.12.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + nan: 2.18.0 dev: false /tiny-warning@1.0.3: - resolution: - { - integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==, - } + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: false /title-case@3.0.3: - resolution: - { - integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==, - } + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} dependencies: tslib: 2.6.2 /titleize@3.0.0: - resolution: - { - integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} dev: true /tmp@0.0.33: - resolution: - { - integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, - } - engines: { node: ">=0.6.0" } + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 /tmp@0.2.1: - resolution: - { - integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==, - } - engines: { node: ">=8.17.0" } + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} dependencies: rimraf: 3.0.2 + /to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + dev: false + /to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-readable-stream@1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: false /to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 /toggle-selection@1.0.6: - resolution: - { - integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==, - } + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} dev: false /toidentifier@1.0.1: - resolution: - { - integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, - } - engines: { node: ">=0.6" } + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} /token-types@4.2.1: - resolution: - { - integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} dependencies: - "@tokenizer/token": 0.3.0 + '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + /tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + dev: false + /tr46@0.0.3: - resolution: - { - integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, - } + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} /true-case-path@2.2.1: - resolution: - { - integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==, - } + resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} + + /truffle-flattener@1.6.0: + resolution: {integrity: sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==} + hasBin: true + dependencies: + '@resolver-engine/imports-fs': 0.2.2 + '@solidity-parser/parser': 0.14.5 + find-up: 2.1.0 + mkdirp: 1.0.4 + tsort: 0.0.1 + transitivePeerDependencies: + - supports-color + dev: false /ts-api-utils@1.0.3(typescript@5.3.2): - resolution: - { - integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==, - } - engines: { node: ">=16.13.0" } + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} peerDependencies: - typescript: ">=4.2.0" + typescript: '>=4.2.0' dependencies: typescript: 5.3.2 /ts-command-line-args@2.5.1: - resolution: - { - integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==, - } + resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} hasBin: true dependencies: chalk: 4.1.2 @@ -20626,39 +16864,33 @@ packages: dev: true /ts-essentials@7.0.3(typescript@5.3.2): - resolution: - { - integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==, - } + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} peerDependencies: - typescript: ">=3.7.0" + typescript: '>=3.7.0' dependencies: typescript: 5.3.2 dev: true /ts-node@10.9.1(@types/node@20.9.4)(typescript@5.3.2): - resolution: - { - integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==, - } + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' peerDependenciesMeta: - "@swc/core": + '@swc/core': optional: true - "@swc/wasm": + '@swc/wasm': optional: true dependencies: - "@cspotcode/source-map-support": 0.8.1 - "@tsconfig/node10": 1.0.9 - "@tsconfig/node12": 1.0.11 - "@tsconfig/node14": 1.0.3 - "@tsconfig/node16": 1.0.4 - "@types/node": 20.9.4 + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.9.4 acorn: 8.11.2 acorn-walk: 8.3.0 arg: 4.1.3 @@ -20670,203 +16902,145 @@ packages: yn: 3.1.1 dev: true + /ts-node@8.10.2(typescript@3.9.10): + resolution: {integrity: sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==} + engines: {node: '>=6.0.0'} + hasBin: true + peerDependencies: + typescript: '>=2.7' + dependencies: + arg: 4.1.3 + diff: 4.0.2 + make-error: 1.3.6 + source-map-support: 0.5.21 + typescript: 3.9.10 + yn: 3.1.1 + dev: false + /ts-toolbelt@9.6.0: - resolution: - { - integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==, - } + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} dev: true /tsconfig-paths@3.14.2: - resolution: - { - integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==, - } + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: - "@types/json5": 0.0.29 + '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 dev: true /tsconfig-paths@3.15.0: - resolution: - { - integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==, - } + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: - "@types/json5": 0.0.29 + '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 /tslib@1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, - } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} /tslib@2.4.0: - resolution: - { - integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==, - } + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} /tslib@2.4.1: - resolution: - { - integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==, - } + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} /tslib@2.6.2: - resolution: - { - integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, - } + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} /tsort@0.0.1: - resolution: - { - integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==, - } - dev: true + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} /tsutils@3.21.0(typescript@5.3.2): - resolution: - { - integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 typescript: 5.3.2 /tty-browserify@0.0.1: - resolution: - { - integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==, - } + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true /tunnel-agent@0.6.0: - resolution: - { - integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, - } + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} requiresBuild: true dependencies: safe-buffer: 5.2.1 /tweetnacl-util@0.15.1: - resolution: - { - integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==, - } + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} dev: true + /tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: false + /tweetnacl@1.0.3: - resolution: - { - integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==, - } + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} dev: true /type-check@0.3.2: - resolution: - { - integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true /type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 /type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: ">=4" } - dev: true + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} /type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} /type-fest@0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} /type-fest@0.7.1: - resolution: - { - integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} dev: true /type-fest@0.8.1: - resolution: - { - integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} /type-is@1.6.18: - resolution: - { - integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 mime-types: 2.1.35 /type-of@2.0.1: - resolution: - { - integrity: sha512-39wxbwHdQ2sTiBB8wAzKfQ9GN+om8w+sjNWzr+vZJR5AMD5J+J7Yc8AtXnU9r/r2c8XiDZ/smxutDmZehX/qpQ==, - } + resolution: {integrity: sha512-39wxbwHdQ2sTiBB8wAzKfQ9GN+om8w+sjNWzr+vZJR5AMD5J+J7Yc8AtXnU9r/r2c8XiDZ/smxutDmZehX/qpQ==} /type@1.2.0: - resolution: - { - integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==, - } + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} /type@2.7.2: - resolution: - { - integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==, - } + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} /typechain@8.3.2(typescript@5.3.2): - resolution: - { - integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==, - } + resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} hasBin: true peerDependencies: - typescript: ">=4.3.0" + typescript: '>=4.3.0' dependencies: - "@types/prettier": 2.7.3 + '@types/prettier': 2.7.3 debug: 4.3.4(supports-color@8.1.1) fs-extra: 7.0.1 glob: 7.1.7 @@ -20882,22 +17056,16 @@ packages: dev: true /typed-array-buffer@1.0.0: - resolution: - { - integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 /typed-array-byte-length@1.0.0: - resolution: - { - integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 for-each: 0.3.3 @@ -20905,11 +17073,8 @@ packages: is-typed-array: 1.1.12 /typed-array-byte-offset@1.0.0: - resolution: - { - integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.5 @@ -20918,235 +17083,183 @@ packages: is-typed-array: 1.1.12 /typed-array-length@1.0.4: - resolution: - { - integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, - } + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 /typedarray-to-buffer@3.1.5: - resolution: - { - integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==, - } + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 /typedarray@0.0.6: - resolution: - { - integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, - } + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + /typeforce@1.18.0: + resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} + dev: false + + /typescript@3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false /typescript@5.3.2: - resolution: - { - integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} hasBin: true /typical@4.0.0: - resolution: - { - integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} dev: true /typical@5.2.0: - resolution: - { - integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} dev: true /ua-parser-js@1.0.37: - resolution: - { - integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==, - } + resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} /uglify-js@3.17.4: - resolution: - { - integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true dev: true optional: true + /ultron@1.1.1: + resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} + dev: false + /unbox-primitive@1.0.2: - resolution: - { - integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, - } + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: false + /unc-path-regex@0.1.2: - resolution: - { - integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + + /underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + dev: false + + /underscore@1.13.6: + resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + dev: false + + /underscore@1.9.1: + resolution: {integrity: sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==} + dev: false /undici-types@5.26.5: - resolution: - { - integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, - } + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} /undici@5.27.2: - resolution: - { - integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==, - } - engines: { node: ">=14.0" } + resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} + engines: {node: '>=14.0'} dependencies: - "@fastify/busboy": 2.1.0 + '@fastify/busboy': 2.1.0 dev: true /unfetch@4.2.0: - resolution: - { - integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==, - } + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: - { - integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} /unicode-match-property-ecmascript@2.0.0: - resolution: - { - integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 /unicode-match-property-value-ecmascript@2.1.0: - resolution: - { - integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} /unicode-property-aliases-ecmascript@2.1.0: - resolution: - { - integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} /unique-string@2.0.0: - resolution: - { - integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} dependencies: crypto-random-string: 2.0.0 /universalify@0.1.2: - resolution: - { - integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, - } - engines: { node: ">= 4.0.0" } - dev: true + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} /universalify@2.0.1: - resolution: - { - integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, - } - engines: { node: ">= 10.0.0" } + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} /unixify@1.0.0: - resolution: - { - integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} dependencies: normalize-path: 2.1.1 /unpipe@1.0.0: - resolution: - { - integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} /untildify@4.0.0: - resolution: - { - integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} dev: true /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: - { - integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==, - } + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' dependencies: browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 /upper-case-first@2.0.2: - resolution: - { - integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==, - } + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} dependencies: tslib: 2.6.2 /upper-case@2.0.2: - resolution: - { - integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==, - } + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} dependencies: tslib: 2.6.2 /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 /url-loader@4.1.1(file-loader@6.2.0)(webpack@5.89.0): - resolution: - { - integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} peerDependencies: - file-loader: "*" + file-loader: '*' webpack: ^4.0.0 || ^5.0.0 peerDependenciesMeta: file-loader: @@ -21158,160 +17271,168 @@ packages: schema-utils: 3.3.0 webpack: 5.89.0 + /url-parse-lax@1.0.0: + resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} + engines: {node: '>=0.10.0'} + dependencies: + prepend-http: 1.0.4 + dev: false + + /url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: false + + /url-set-query@1.0.0: + resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} + dev: false + + /url-to-options@1.0.1: + resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} + engines: {node: '>= 4'} + dev: false + /url@0.11.3: - resolution: - { - integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==, - } + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 qs: 6.11.2 dev: true /use-callback-ref@1.3.0(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 react: 18.2.0 tslib: 2.6.2 dev: false /use-sidecar@1.1.2(@types/react@18.2.38)(react@18.2.0): - resolution: - { - integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true dependencies: - "@types/react": 18.2.38 + '@types/react': 18.2.38 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 dev: false + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.7.0 + dev: false + /utf8@3.0.0: - resolution: - { - integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==, - } - dev: true + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} /util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} /util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, - } + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.12 which-typed-array: 1.1.13 - dev: true /utila@0.4.0: - resolution: - { - integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==, - } + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} /utility-types@3.10.0: - resolution: - { - integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} + engines: {node: '>= 4'} /utils-merge@1.0.1: - resolution: - { - integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, - } - engines: { node: ">= 0.4.0" } + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + /uuid@2.0.1: + resolution: {integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + dev: false + + /uuid@3.3.2: + resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false /uuid@8.3.2: - resolution: - { - integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, - } + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true /uuid@9.0.1: - resolution: - { - integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, - } + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: false /v8-compile-cache-lib@3.0.1: - resolution: - { - integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, - } + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true /v8-compile-cache@2.4.0: - resolution: - { - integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==, - } + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} /validate-npm-package-name@5.0.0: - resolution: - { - integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==, - } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: builtins: 5.0.1 dev: true /value-or-promise@1.0.12: - resolution: - { - integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + + /varint@5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + dev: false /vary@1.1.2: - resolution: - { - integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + /verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: false /vite-plugin-node-polyfills@0.19.0(vite@5.0.2): - resolution: - { - integrity: sha512-AhdVxAmVnd1doUlIRGUGV6ZRPfB9BvIwDF10oCOmL742IsvsFIAV4tSMxSfu5e0Px0QeJLgWVOSbtHIvblzqMw==, - } + resolution: {integrity: sha512-AhdVxAmVnd1doUlIRGUGV6ZRPfB9BvIwDF10oCOmL742IsvsFIAV4tSMxSfu5e0Px0QeJLgWVOSbtHIvblzqMw==} peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: - "@rollup/plugin-inject": 5.0.5 + '@rollup/plugin-inject': 5.0.5 node-stdlib-browser: 1.2.0 vite: 5.0.2 transitivePeerDependencies: @@ -21319,22 +17440,19 @@ packages: dev: true /vite@5.0.2: - resolution: - { - integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" + sass: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -21357,134 +17475,901 @@ packages: dev: true /vm-browserify@1.1.2: - resolution: - { - integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==, - } + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true /watchpack@2.4.0: - resolution: - { - integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 /wcwidth@1.0.1: - resolution: - { - integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, - } + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 dev: true /weak-lru-cache@1.2.2: - resolution: - { - integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==, - } + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} - /web3-utils@1.10.3: - resolution: - { - integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==, - } - engines: { node: ">=8.0.0" } + /web3-bzz@1.2.2: + resolution: {integrity: sha512-b1O2ObsqUN1lJxmFSjvnEC4TsaCbmh7Owj3IAIWTKqL9qhVgx7Qsu5O9cD13pBiSPNZJ68uJPaKq380QB4NWeA==} + engines: {node: '>=8.0.0'} dependencies: - "@ethereumjs/util": 8.1.0 - bn.js: 5.2.1 - ethereum-bloom-filters: 1.0.10 - ethereum-cryptography: 2.1.2 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: 2.1.0 - utf8: 3.0.0 - dev: true + '@types/node': 10.17.60 + got: 9.6.0 + swarm-js: 0.1.39 + underscore: 1.9.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false - /webidl-conversions@3.0.1: - resolution: - { - integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, - } + /web3-bzz@1.2.4: + resolution: {integrity: sha512-MqhAo/+0iQSMBtt3/QI1rU83uvF08sYq8r25+OUZ+4VtihnYsmkkca+rdU0QbRyrXY2/yGIpI46PFdh0khD53A==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 10.17.60 + got: 9.6.0 + swarm-js: 0.1.39 + underscore: 1.9.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false - /webpack-dev-middleware@4.3.0(webpack@5.89.0): - resolution: - { - integrity: sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==, - } - engines: { node: ">= v10.23.3" } - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 + /web3-bzz@1.3.6: + resolution: {integrity: sha512-ibHdx1wkseujFejrtY7ZyC0QxQ4ATXjzcNUpaLrvM6AEae8prUiyT/OloG9FWDgFD2CPLwzKwfSQezYQlANNlw==} + engines: {node: '>=8.0.0'} + requiresBuild: true dependencies: - colorette: 1.4.0 - mem: 8.1.1 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 3.3.0 - webpack: 5.89.0 + '@types/node': 12.20.55 + got: 9.6.0 + swarm-js: 0.1.42 + underscore: 1.12.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false - /webpack-merge@5.10.0: - resolution: - { - integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==, - } - engines: { node: ">=10.0.0" } + /web3-core-helpers@1.2.2: + resolution: {integrity: sha512-HJrRsIGgZa1jGUIhvGz4S5Yh6wtOIo/TMIsSLe+Xay+KVnbseJpPprDI5W3s7H2ODhMQTbogmmUFquZweW2ImQ==} + engines: {node: '>=8.0.0'} dependencies: - clone-deep: 4.0.1 - flat: 5.0.2 - wildcard: 2.0.1 + underscore: 1.9.1 + web3-eth-iban: 1.2.2 + web3-utils: 1.2.2 + dev: false - /webpack-sources@1.4.3: - resolution: - { - integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==, - } + /web3-core-helpers@1.2.4: + resolution: {integrity: sha512-U7wbsK8IbZvF3B7S+QMSNP0tni/6VipnJkB0tZVEpHEIV2WWeBHYmZDnULWcsS/x/jn9yKhJlXIxWGsEAMkjiw==} + engines: {node: '>=8.0.0'} dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 + underscore: 1.9.1 + web3-eth-iban: 1.2.4 + web3-utils: 1.2.4 + dev: false - /webpack-sources@3.2.3: - resolution: - { - integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, - } - engines: { node: ">=10.13.0" } + /web3-core-helpers@1.3.6: + resolution: {integrity: sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.12.1 + web3-eth-iban: 1.3.6 + web3-utils: 1.3.6 + dev: false - /webpack-stats-plugin@1.1.3: - resolution: - { - integrity: sha512-yUKYyy+e0iF/w31QdfioRKY+h3jDBRpthexBOWGKda99iu2l/wxYsI/XqdlP5IU58/0KB9CsJZgWNAl+/MPkRw==, - } + /web3-core-method@1.2.2: + resolution: {integrity: sha512-szR4fDSBxNHaF1DFqE+j6sFR/afv9Aa36OW93saHZnrh+iXSrYeUUDfugeNcRlugEKeUCkd4CZylfgbK2SKYJA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core-helpers: 1.2.2 + web3-core-promievent: 1.2.2 + web3-core-subscriptions: 1.2.2 + web3-utils: 1.2.2 + dev: false - /webpack-virtual-modules@0.5.0: - resolution: - { - integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==, - } + /web3-core-method@1.2.4: + resolution: {integrity: sha512-8p9kpL7di2qOVPWgcM08kb+yKom0rxRCMv6m/K+H+yLSxev9TgMbCgMSbPWAHlyiF3SJHw7APFKahK5Z+8XT5A==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core-helpers: 1.2.4 + web3-core-promievent: 1.2.4 + web3-core-subscriptions: 1.2.4 + web3-utils: 1.2.4 + dev: false - /webpack@5.89.0: - resolution: - { - integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==, - } - engines: { node: ">=10.13.0" } + /web3-core-method@1.3.6: + resolution: {integrity: sha512-RyegqVGxn0cyYW5yzAwkPlsSEynkdPiegd7RxgB4ak1eKk2Cv1q2x4C7D2sZjeeCEF+q6fOkVmo2OZNqS2iQxg==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/transactions': 5.7.0 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + web3-core-promievent: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-utils: 1.3.6 + dev: false + + /web3-core-promievent@1.2.2: + resolution: {integrity: sha512-tKvYeT8bkUfKABcQswK6/X79blKTKYGk949urZKcLvLDEaWrM3uuzDwdQT3BNKzQ3vIvTggFPX9BwYh0F1WwqQ==} + engines: {node: '>=8.0.0'} + dependencies: + any-promise: 1.3.0 + eventemitter3: 3.1.2 + dev: false + + /web3-core-promievent@1.2.4: + resolution: {integrity: sha512-gEUlm27DewUsfUgC3T8AxkKi8Ecx+e+ZCaunB7X4Qk3i9F4C+5PSMGguolrShZ7Zb6717k79Y86f3A00O0VAZw==} + engines: {node: '>=8.0.0'} + dependencies: + any-promise: 1.3.0 + eventemitter3: 3.1.2 + dev: false + + /web3-core-promievent@1.3.6: + resolution: {integrity: sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + dev: false + + /web3-core-requestmanager@1.2.2: + resolution: {integrity: sha512-a+gSbiBRHtHvkp78U2bsntMGYGF2eCb6219aMufuZWeAZGXJ63Wc2321PCbA8hF9cQrZI4EoZ4kVLRI4OF15Hw==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core-helpers: 1.2.2 + web3-providers-http: 1.2.2 + web3-providers-ipc: 1.2.2 + web3-providers-ws: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core-requestmanager@1.2.4: + resolution: {integrity: sha512-eZJDjyNTDtmSmzd3S488nR/SMJtNnn/GuwxnMh3AzYCqG3ZMfOylqTad2eYJPvc2PM5/Gj1wAMQcRpwOjjLuPg==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core-helpers: 1.2.4 + web3-providers-http: 1.2.4 + web3-providers-ipc: 1.2.4 + web3-providers-ws: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core-requestmanager@1.3.6: + resolution: {integrity: sha512-2rIaeuqeo7QN1Eex7aXP0ZqeteJEPWXYFS/M3r3LXMiV8R4STQBKE+//dnHJXoo2ctzEB5cgd+7NaJM8S3gPyA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.12.1 + util: 0.12.5 + web3-core-helpers: 1.3.6 + web3-providers-http: 1.3.6 + web3-providers-ipc: 1.3.6 + web3-providers-ws: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core-subscriptions@1.2.2: + resolution: {integrity: sha512-QbTgigNuT4eicAWWr7ahVpJyM8GbICsR1Ys9mJqzBEwpqS+RXTRVSkwZ2IsxO+iqv6liMNwGregbJLq4urMFcQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 3.1.2 + underscore: 1.9.1 + web3-core-helpers: 1.2.2 + dev: false + + /web3-core-subscriptions@1.2.4: + resolution: {integrity: sha512-3D607J2M8ymY9V+/WZq4MLlBulwCkwEjjC2U+cXqgVO1rCyVqbxZNCmHyNYHjDDCxSEbks9Ju5xqJxDSxnyXEw==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 3.1.2 + underscore: 1.9.1 + web3-core-helpers: 1.2.4 + dev: false + + /web3-core-subscriptions@1.3.6: + resolution: {integrity: sha512-wi9Z9X5X75OKvxAg42GGIf81ttbNR2TxzkAsp1g+nnp5K8mBwgZvXrIsDuj7Z7gx72Y45mWJADCWjk/2vqNu8g==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + dev: false + + /web3-core@1.2.2: + resolution: {integrity: sha512-miHAX3qUgxV+KYfaOY93Hlc3kLW2j5fH8FJy6kSxAv+d4d5aH0wwrU2IIoJylQdT+FeenQ38sgsCnFu9iZ1hCQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + '@types/node': 12.20.55 + web3-core-helpers: 1.2.2 + web3-core-method: 1.2.2 + web3-core-requestmanager: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core@1.2.4: + resolution: {integrity: sha512-CHc27sMuET2cs1IKrkz7xzmTdMfZpYswe7f0HcuyneTwS1yTlTnHyqjAaTy0ZygAb/x4iaVox+Gvr4oSAqSI+A==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bignumber.js': 5.0.0 + '@types/bn.js': 4.11.6 + '@types/node': 12.20.55 + web3-core-helpers: 1.2.4 + web3-core-method: 1.2.4 + web3-core-requestmanager: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core@1.3.6: + resolution: {integrity: sha512-gkLDM4T1Sc0T+HZIwxrNrwPg0IfWI0oABSglP2X5ZbBAYVUeEATA0o92LWV8BeF+okvKXLK1Fek/p6axwM/h3Q==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-requestmanager: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-abi@1.2.2: + resolution: {integrity: sha512-Yn/ZMgoOLxhTVxIYtPJ0eS6pnAnkTAaJgUJh1JhZS4ekzgswMfEYXOwpMaD5eiqPJLpuxmZFnXnBZlnQ1JMXsw==} + engines: {node: '>=8.0.0'} + dependencies: + ethers: 4.0.0-beta.3 + underscore: 1.9.1 + web3-utils: 1.2.2 + dev: false + + /web3-eth-abi@1.2.4: + resolution: {integrity: sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg==} + engines: {node: '>=8.0.0'} + dependencies: + ethers: 4.0.0-beta.3 + underscore: 1.9.1 + web3-utils: 1.2.4 + dev: false + + /web3-eth-abi@1.3.6: + resolution: {integrity: sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/abi': 5.0.7 + underscore: 1.12.1 + web3-utils: 1.3.6 + dev: false + + /web3-eth-accounts@1.2.2: + resolution: {integrity: sha512-KzHOEyXOEZ13ZOkWN3skZKqSo5f4Z1ogPFNn9uZbKCz+kSp+gCAEKxyfbOsB/JMAp5h7o7pb6eYsPCUBJmFFiA==} + engines: {node: '>=8.0.0'} + dependencies: + any-promise: 1.3.0 + crypto-browserify: 3.12.0 + eth-lib: 0.2.7 + ethereumjs-common: 1.5.2 + ethereumjs-tx: 2.1.2 + scrypt-shim: github.com/web3-js/scrypt-shim/aafdadda13e660e25e1c525d1f5b2443f5eb1ebb + underscore: 1.9.1 + uuid: 3.3.2 + web3-core: 1.2.2 + web3-core-helpers: 1.2.2 + web3-core-method: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-accounts@1.2.4: + resolution: {integrity: sha512-04LzT/UtWmRFmi4hHRewP5Zz43fWhuHiK5XimP86sUQodk/ByOkXQ3RoXyGXFMNoRxdcAeRNxSfA2DpIBc9xUw==} + engines: {node: '>=8.0.0'} + dependencies: + '@web3-js/scrypt-shim': 0.1.0 + any-promise: 1.3.0 + crypto-browserify: 3.12.0 + eth-lib: 0.2.7 + ethereumjs-common: 1.5.2 + ethereumjs-tx: 2.1.2 + underscore: 1.9.1 + uuid: 3.3.2 + web3-core: 1.2.4 + web3-core-helpers: 1.2.4 + web3-core-method: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-accounts@1.3.6: + resolution: {integrity: sha512-Ilr0hG6ONbCdSlVKffasCmNwftD5HsNpwyQASevocIQwHdTlvlwO0tb3oGYuajbKOaDzNTwXfz25bttAEoFCGA==} + engines: {node: '>=8.0.0'} + dependencies: + crypto-browserify: 3.12.0 + eth-lib: 0.2.8 + ethereumjs-common: 1.5.2 + ethereumjs-tx: 2.1.2 + scrypt-js: 3.0.1 + underscore: 1.12.1 + uuid: 3.3.2 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-contract@1.2.2: + resolution: {integrity: sha512-EKT2yVFws3FEdotDQoNsXTYL798+ogJqR2//CaGwx3p0/RvQIgfzEwp8nbgA6dMxCsn9KOQi7OtklzpnJMkjtA==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + underscore: 1.9.1 + web3-core: 1.2.2 + web3-core-helpers: 1.2.2 + web3-core-method: 1.2.2 + web3-core-promievent: 1.2.2 + web3-core-subscriptions: 1.2.2 + web3-eth-abi: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-contract@1.2.4: + resolution: {integrity: sha512-b/9zC0qjVetEYnzRA1oZ8gF1OSSUkwSYi5LGr4GeckLkzXP7osEnp9lkO/AQcE4GpG+l+STnKPnASXJGZPgBRQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + underscore: 1.9.1 + web3-core: 1.2.4 + web3-core-helpers: 1.2.4 + web3-core-method: 1.2.4 + web3-core-promievent: 1.2.4 + web3-core-subscriptions: 1.2.4 + web3-eth-abi: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-contract@1.3.6: + resolution: {integrity: sha512-8gDaRrLF2HCg+YEZN1ov0zN35vmtPnGf3h1DxmJQK5Wm2lRMLomz9rsWsuvig3UJMHqZAQKD7tOl3ocJocQsmA==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-promievent: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-eth-abi: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-ens@1.2.2: + resolution: {integrity: sha512-CFjkr2HnuyMoMFBoNUWojyguD4Ef+NkyovcnUc/iAb9GP4LHohKrODG4pl76R5u61TkJGobC2ij6TyibtsyVYg==} + engines: {node: '>=8.0.0'} + dependencies: + eth-ens-namehash: 2.0.8 + underscore: 1.9.1 + web3-core: 1.2.2 + web3-core-helpers: 1.2.2 + web3-core-promievent: 1.2.2 + web3-eth-abi: 1.2.2 + web3-eth-contract: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-ens@1.2.4: + resolution: {integrity: sha512-g8+JxnZlhdsCzCS38Zm6R/ngXhXzvc3h7bXlxgKU4coTzLLoMpgOAEz71GxyIJinWTFbLXk/WjNY0dazi9NwVw==} + engines: {node: '>=8.0.0'} + dependencies: + eth-ens-namehash: 2.0.8 + underscore: 1.9.1 + web3-core: 1.2.4 + web3-core-helpers: 1.2.4 + web3-core-promievent: 1.2.4 + web3-eth-abi: 1.2.4 + web3-eth-contract: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-ens@1.3.6: + resolution: {integrity: sha512-n27HNj7lpSkRxTgSx+Zo7cmKAgyg2ElFilaFlUu/X2CNH23lXfcPm2bWssivH9z0ndhg0OyR4AYFZqPaqDHkJA==} + engines: {node: '>=8.0.0'} + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-promievent: 1.3.6 + web3-eth-abi: 1.3.6 + web3-eth-contract: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-iban@1.2.2: + resolution: {integrity: sha512-gxKXBoUhaTFHr0vJB/5sd4i8ejF/7gIsbM/VvemHT3tF5smnmY6hcwSMmn7sl5Gs+83XVb/BngnnGkf+I/rsrQ==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.11.8 + web3-utils: 1.2.2 + dev: false + + /web3-eth-iban@1.2.4: + resolution: {integrity: sha512-D9HIyctru/FLRpXakRwmwdjb5bWU2O6UE/3AXvRm6DCOf2e+7Ve11qQrPtaubHfpdW3KWjDKvlxV9iaFv/oTMQ==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.11.8 + web3-utils: 1.2.4 + dev: false + + /web3-eth-iban@1.3.6: + resolution: {integrity: sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.12.0 + web3-utils: 1.3.6 + dev: false + + /web3-eth-personal@1.2.2: + resolution: {integrity: sha512-4w+GLvTlFqW3+q4xDUXvCEMU7kRZ+xm/iJC8gm1Li1nXxwwFbs+Y+KBK6ZYtoN1qqAnHR+plYpIoVo27ixI5Rg==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.2.2 + web3-core-helpers: 1.2.2 + web3-core-method: 1.2.2 + web3-net: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-personal@1.2.4: + resolution: {integrity: sha512-5Russ7ZECwHaZXcN3DLuLS7390Vzgrzepl4D87SD6Sn1DHsCZtvfdPIYwoTmKNp69LG3mORl7U23Ga5YxqkICw==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.2.4 + web3-core-helpers: 1.2.4 + web3-core-method: 1.2.4 + web3-net: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-personal@1.3.6: + resolution: {integrity: sha512-pOHU0+/h1RFRYoh1ehYBehRbcKWP4OSzd4F7mDljhHngv6W8ewMHrAN8O1ol9uysN2MuCdRE19qkRg5eNgvzFQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-net: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth@1.2.2: + resolution: {integrity: sha512-UXpC74mBQvZzd4b+baD4Ocp7g+BlwxhBHumy9seyE/LMIcMlePXwCKzxve9yReNpjaU16Mmyya6ZYlyiKKV8UA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core: 1.2.2 + web3-core-helpers: 1.2.2 + web3-core-method: 1.2.2 + web3-core-subscriptions: 1.2.2 + web3-eth-abi: 1.2.2 + web3-eth-accounts: 1.2.2 + web3-eth-contract: 1.2.2 + web3-eth-ens: 1.2.2 + web3-eth-iban: 1.2.2 + web3-eth-personal: 1.2.2 + web3-net: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth@1.2.4: + resolution: {integrity: sha512-+j+kbfmZsbc3+KJpvHM16j1xRFHe2jBAniMo1BHKc3lho6A8Sn9Buyut6odubguX2AxoRArCdIDCkT9hjUERpA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core: 1.2.4 + web3-core-helpers: 1.2.4 + web3-core-method: 1.2.4 + web3-core-subscriptions: 1.2.4 + web3-eth-abi: 1.2.4 + web3-eth-accounts: 1.2.4 + web3-eth-contract: 1.2.4 + web3-eth-ens: 1.2.4 + web3-eth-iban: 1.2.4 + web3-eth-personal: 1.2.4 + web3-net: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth@1.3.6: + resolution: {integrity: sha512-9+rnywRRpyX3C4hfsAQXPQh6vHh9XzQkgLxo3gyeXfbhbShUoq2gFVuy42vsRs//6JlsKdyZS7Z3hHPHz2wreA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-eth-abi: 1.3.6 + web3-eth-accounts: 1.3.6 + web3-eth-contract: 1.3.6 + web3-eth-ens: 1.3.6 + web3-eth-iban: 1.3.6 + web3-eth-personal: 1.3.6 + web3-net: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-net@1.2.2: + resolution: {integrity: sha512-K07j2DXq0x4UOJgae65rWZKraOznhk8v5EGSTdFqASTx7vWE/m+NqBijBYGEsQY1lSMlVaAY9UEQlcXK5HzXTw==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.2.2 + web3-core-method: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-net@1.2.4: + resolution: {integrity: sha512-wKOsqhyXWPSYTGbp7ofVvni17yfRptpqoUdp3SC8RAhDmGkX6irsiT9pON79m6b3HUHfLoBilFQyt/fTUZOf7A==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.2.4 + web3-core-method: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-net@1.3.6: + resolution: {integrity: sha512-KhzU3wMQY/YYjyMiQzbaLPt2kut88Ncx2iqjy3nw28vRux3gVX0WOCk9EL/KVJBiAA/fK7VklTXvgy9dZnnipw==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.3.6 + web3-core-method: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-providers-http@1.2.2: + resolution: {integrity: sha512-BNZ7Hguy3eBszsarH5gqr9SIZNvqk9eKwqwmGH1LQS1FL3NdoOn7tgPPdddrXec4fL94CwgNk4rCU+OjjZRNDg==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core-helpers: 1.2.2 + xhr2-cookies: 1.1.0 + dev: false + + /web3-providers-http@1.2.4: + resolution: {integrity: sha512-dzVCkRrR/cqlIrcrWNiPt9gyt0AZTE0J+MfAu9rR6CyIgtnm1wFUVVGaxYRxuTGQRO4Dlo49gtoGwaGcyxqiTw==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core-helpers: 1.2.4 + xhr2-cookies: 1.1.0 + dev: false + + /web3-providers-http@1.3.6: + resolution: {integrity: sha512-OQkT32O1A06dISIdazpGLveZcOXhEo5cEX6QyiSQkiPk/cjzDrXMw4SKZOGQbbS1+0Vjizm1Hrp7O8Vp2D1M5Q==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core-helpers: 1.3.6 + xhr2-cookies: 1.1.0 + dev: false + + /web3-providers-ipc@1.2.2: + resolution: {integrity: sha512-t97w3zi5Kn/LEWGA6D9qxoO0LBOG+lK2FjlEdCwDQatffB/+vYrzZ/CLYVQSoyFZAlsDoBasVoYSWZK1n39aHA==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.4 + underscore: 1.9.1 + web3-core-helpers: 1.2.2 + dev: false + + /web3-providers-ipc@1.2.4: + resolution: {integrity: sha512-8J3Dguffin51gckTaNrO3oMBo7g+j0UNk6hXmdmQMMNEtrYqw4ctT6t06YOf9GgtOMjSAc1YEh3LPrvgIsR7og==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.4 + underscore: 1.9.1 + web3-core-helpers: 1.2.4 + dev: false + + /web3-providers-ipc@1.3.6: + resolution: {integrity: sha512-+TVsSd2sSVvVgHG4s6FXwwYPPT91boKKcRuEFXqEfAbUC5t52XOgmyc2LNiD9LzPhed65FbV4LqICpeYGUvSwA==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.5 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + dev: false + + /web3-providers-ws@1.2.2: + resolution: {integrity: sha512-Wb1mrWTGMTXOpJkL0yGvL/WYLt8fUIXx8k/l52QB2IiKzvyd42dTWn4+j8IKXGSYYzOm7NMqv6nhA5VDk12VfA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.9.1 + web3-core-helpers: 1.2.2 + websocket: github.com/web3-js/WebSocket-Node/ef5ea2f41daf4a2113b80c9223df884b4d56c400 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-providers-ws@1.2.4: + resolution: {integrity: sha512-F/vQpDzeK+++oeeNROl1IVTufFCwCR2hpWe5yRXN0ApLwHqXrMI7UwQNdJ9iyibcWjJf/ECbauEEQ8CHgE+MYQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@web3-js/websocket': 1.0.30 + underscore: 1.9.1 + web3-core-helpers: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-providers-ws@1.3.6: + resolution: {integrity: sha512-bk7MnJf5or0Re2zKyhR3L3CjGululLCHXx4vlbc/drnaTARUVvi559OI5uLytc/1k5HKUUyENAxLvetz2G1dnQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-shh@1.2.2: + resolution: {integrity: sha512-og258NPhlBn8yYrDWjoWBBb6zo1OlBgoWGT+LL5/LPqRbjPe09hlOYHgscAAr9zZGtohTOty7RrxYw6Z6oDWCg==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.2.2 + web3-core-method: 1.2.2 + web3-core-subscriptions: 1.2.2 + web3-net: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-shh@1.2.4: + resolution: {integrity: sha512-z+9SCw0dE+69Z/Hv8809XDbLj7lTfEv9Sgu8eKEIdGntZf4v7ewj5rzN5bZZSz8aCvfK7Y6ovz1PBAu4QzS4IQ==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.2.4 + web3-core-method: 1.2.4 + web3-core-subscriptions: 1.2.4 + web3-net: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-shh@1.3.6: + resolution: {integrity: sha512-9zRo415O0iBslxBnmu9OzYjNErzLnzOsy+IOvSpIreLYbbAw0XkDWxv3SfcpKnTIWIACBR4AYMIxmmyi5iB3jw==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-core: 1.3.6 + web3-core-method: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-net: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-utils@1.10.3: + resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.0.10 + ethereum-cryptography: 2.1.2 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + dev: true + + /web3-utils@1.2.2: + resolution: {integrity: sha512-joF+s3243TY5cL7Z7y4h1JsJpUCf/kmFmj+eJar7Y2yNIGVcW961VyrAms75tjUysSuHaUQ3eQXjBEUJueT52A==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.11.8 + eth-lib: 0.2.7 + ethereum-bloom-filters: 1.0.10 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + underscore: 1.9.1 + utf8: 3.0.0 + dev: false + + /web3-utils@1.2.4: + resolution: {integrity: sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.11.8 + eth-lib: 0.2.7 + ethereum-bloom-filters: 1.0.10 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + underscore: 1.9.1 + utf8: 3.0.0 + dev: false + + /web3-utils@1.3.6: + resolution: {integrity: sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.12.0 + eth-lib: 0.2.8 + ethereum-bloom-filters: 1.0.10 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + underscore: 1.12.1 + utf8: 3.0.0 + dev: false + + /web3@1.2.2: + resolution: {integrity: sha512-/ChbmB6qZpfGx6eNpczt5YSUBHEA5V2+iUCbn85EVb3Zv6FVxrOo5Tv7Lw0gE2tW7EEjASbCyp3mZeiZaCCngg==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + '@types/node': 12.20.55 + web3-bzz: 1.2.2 + web3-core: 1.2.2 + web3-eth: 1.2.2 + web3-eth-personal: 1.2.2 + web3-net: 1.2.2 + web3-shh: 1.2.2 + web3-utils: 1.2.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /web3@1.2.4: + resolution: {integrity: sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + '@types/node': 12.20.55 + web3-bzz: 1.2.4 + web3-core: 1.2.4 + web3-eth: 1.2.4 + web3-eth-personal: 1.2.4 + web3-net: 1.2.4 + web3-shh: 1.2.4 + web3-utils: 1.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /web3@1.3.6: + resolution: {integrity: sha512-jEpPhnL6GDteifdVh7ulzlPrtVQeA30V9vnki9liYlUvLV82ZM7BNOQJiuzlDePuE+jZETZSP/0G/JlUVt6pOA==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-bzz: 1.3.6 + web3-core: 1.3.6 + web3-eth: 1.3.6 + web3-eth-personal: 1.3.6 + web3-net: 1.3.6 + web3-shh: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /webpack-dev-middleware@4.3.0(webpack@5.89.0): + resolution: {integrity: sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==} + engines: {node: '>= v10.23.3'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 1.4.0 + mem: 8.1.1 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 3.3.0 + webpack: 5.89.0 + + /webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + /webpack-stats-plugin@1.1.3: + resolution: {integrity: sha512-yUKYyy+e0iF/w31QdfioRKY+h3jDBRpthexBOWGKda99iu2l/wxYsI/XqdlP5IU58/0KB9CsJZgWNAl+/MPkRw==} + + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + + /webpack@5.89.0: + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + engines: {node: '>=10.13.0'} hasBin: true peerDependencies: - webpack-cli: "*" + webpack-cli: '*' peerDependenciesMeta: webpack-cli: optional: true dependencies: - "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.5 - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/wasm-edit": 1.11.6 - "@webassemblyjs/wasm-parser": 1.11.6 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.11.2 acorn-import-assertions: 1.9.0(acorn@8.11.2) browserslist: 4.22.1 @@ -21505,24 +18390,36 @@ packages: watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: - - "@swc/core" + - '@swc/core' - esbuild - uglify-js + /websocket@1.0.34: + resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} + engines: {node: '>=4.0.0'} + dependencies: + bufferutil: 4.0.8 + debug: 2.6.9 + es5-ext: 0.10.62 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + dev: false + + /whatwg-fetch@3.0.0: + resolution: {integrity: sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==} + dev: false + /whatwg-url@5.0.0: - resolution: - { - integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, - } + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 /which-boxed-primitive@1.0.2: - resolution: - { - integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, - } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -21531,11 +18428,8 @@ packages: is-symbol: 1.0.4 /which-builtin-type@1.1.3: - resolution: - { - integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.0 @@ -21551,10 +18445,7 @@ packages: which-typed-array: 1.1.13 /which-collection@1.0.1: - resolution: - { - integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==, - } + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} dependencies: is-map: 2.0.2 is-set: 2.0.2 @@ -21562,17 +18453,11 @@ packages: is-weakset: 2.0.2 /which-module@2.0.1: - resolution: - { - integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, - } + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} /which-typed-array@1.1.13: - resolution: - { - integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.5 @@ -21581,117 +18466,115 @@ packages: has-tostringtag: 1.0.0 /which@1.3.1: - resolution: - { - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, - } + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 + /wide-align@1.1.3: + resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + dependencies: + string-width: 2.1.1 + dev: false + /widest-line@3.1.0: - resolution: - { - integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} dependencies: string-width: 4.2.3 + /wif@2.0.6: + resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} + dependencies: + bs58check: 2.1.2 + dev: false + /wildcard@2.0.1: - resolution: - { - integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==, - } + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} /word-wrap@1.2.5: - resolution: - { - integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} dev: true /wordwrap@1.0.0: - resolution: - { - integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, - } + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true /wordwrapjs@4.0.1: - resolution: - { - integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} dependencies: reduce-flatten: 2.0.0 typical: 5.2.0 dev: true /workerpool@6.2.1: - resolution: - { - integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==, - } + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true + /wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: false + /wrap-ansi@6.2.0: - resolution: - { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 /wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} /write-file-atomic@3.0.3: - resolution: - { - integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==, - } + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + /ws@3.3.3: + resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + dev: false + /ws@7.4.6: - resolution: - { - integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==, - } - engines: { node: ">=8.3.0" } + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21700,14 +18583,10 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws@7.5.9: - resolution: - { - integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, - } - engines: { node: ">=8.3.0" } + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21719,11 +18598,8 @@ packages: dev: true /ws@8.11.0: - resolution: - { - integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21734,11 +18610,8 @@ packages: optional: true /ws@8.5.0: - resolution: - { - integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21750,119 +18623,130 @@ packages: dev: true /xdg-basedir@4.0.0: - resolution: - { - integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + + /xhr-request-promise@0.1.3: + resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} + dependencies: + xhr-request: 1.1.0 + dev: false + + /xhr-request@1.1.0: + resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} + dependencies: + buffer-to-arraybuffer: 0.0.5 + object-assign: 4.1.1 + query-string: 5.1.1 + simple-get: 2.8.2 + timed-out: 4.0.1 + url-set-query: 1.0.0 + xhr: 2.6.0 + dev: false + + /xhr2-cookies@1.1.0: + resolution: {integrity: sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==} + dependencies: + cookiejar: 2.1.4 + dev: false + + /xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + dev: false /xmlhttprequest-ssl@2.0.0: - resolution: - { - integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + + /xmlhttprequest@1.8.0: + resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} + engines: {node: '>=0.4.0'} + dev: false /xstate@4.38.3: - resolution: - { - integrity: sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==, - } + resolution: {integrity: sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==} /xtend@4.0.2: - resolution: - { - integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} /xxhash-wasm@0.4.2: - resolution: - { - integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==, - } + resolution: {integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==} /y18n@4.0.3: - resolution: - { - integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, - } + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} /y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} dev: true + /yaeti@0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + dev: false + /yallist@2.1.2: - resolution: - { - integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, - } + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} /yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} /yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} /yaml-loader@0.8.0: - resolution: - { - integrity: sha512-LjeKnTzVBKWiQBeE2L9ssl6WprqaUIxCSNs5tle8PaDydgu3wVFXTbMfsvF2MSErpy9TDVa092n4q6adYwJaWg==, - } - engines: { node: ">= 12.13" } + resolution: {integrity: sha512-LjeKnTzVBKWiQBeE2L9ssl6WprqaUIxCSNs5tle8PaDydgu3wVFXTbMfsvF2MSErpy9TDVa092n4q6adYwJaWg==} + engines: {node: '>= 12.13'} dependencies: javascript-stringify: 2.1.0 loader-utils: 2.0.4 yaml: 2.3.4 /yaml@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} /yaml@2.3.4: - resolution: - { - integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==, - } - engines: { node: ">= 14" } + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + + /yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false /yargs-parser@18.1.3: - resolution: - { - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 /yargs-parser@20.2.4: - resolution: - { - integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} dev: true + /yargs-unparser@1.6.0: + resolution: {integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==} + engines: {node: '>=6'} + dependencies: + flat: 4.1.1 + lodash: 4.17.21 + yargs: 13.3.2 + dev: false + /yargs-unparser@2.0.0: - resolution: - { - integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} dependencies: camelcase: 6.3.0 decamelize: 4.0.0 @@ -21870,12 +18754,24 @@ packages: is-plain-obj: 2.1.0 dev: true + /yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 13.1.2 + dev: false + /yargs@15.4.1: - resolution: - { - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -21890,11 +18786,8 @@ packages: yargs-parser: 18.1.3 /yargs@16.2.0: - resolution: - { - integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -21905,36 +18798,30 @@ packages: yargs-parser: 20.2.4 dev: true + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: false + /yn@3.1.1: - resolution: - { - integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, - } - engines: { node: ">=6" } - dev: true + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} /yoga-layout-prebuilt@1.10.0: - resolution: - { - integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} + engines: {node: '>=8'} dependencies: - "@types/yoga-layout": 1.9.2 + '@types/yoga-layout': 1.9.2 /yurnalist@2.1.0: - resolution: - { - integrity: sha512-PgrBqosQLM3gN2xBFIMDLACRTV9c365VqityKKpSTWpwR+U4LAFR3rSVyEoscWlu3EzX9+Y0I86GXUKxpHFl6w==, - } - engines: { node: ">=4.0.0" } + resolution: {integrity: sha512-PgrBqosQLM3gN2xBFIMDLACRTV9c365VqityKKpSTWpwR+U4LAFR3rSVyEoscWlu3EzX9+Y0I86GXUKxpHFl6w==} + engines: {node: '>=4.0.0'} dependencies: chalk: 2.4.2 inquirer: 7.3.3 @@ -21943,10 +18830,7 @@ packages: strip-ansi: 5.2.0 /zksync-web3@0.14.4(ethers@5.7.2): - resolution: - { - integrity: sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==, - } + resolution: {integrity: sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==} peerDependencies: ethers: ^5.7.0 dependencies: @@ -21954,27 +18838,60 @@ packages: dev: true /zod@3.22.4: - resolution: - { - integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==, - } + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + github.com/bitcoinjs/bip39/d8ea080a18b40f301d4e2219a2991cd2417e83c2: + resolution: {tarball: https://codeload.github.com/bitcoinjs/bip39/tar.gz/d8ea080a18b40f301d4e2219a2991cd2417e83c2} + name: bip39 + version: 3.0.3 + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + dev: false + + github.com/celo-org/bls12377js/400bcaeec9e7620b040bfad833268f5289699cac: + resolution: {tarball: https://codeload.github.com/celo-org/bls12377js/tar.gz/400bcaeec9e7620b040bfad833268f5289699cac} + name: bls12377js + version: 0.1.0 + dependencies: + '@stablelib/blake2xs': 0.10.4 + '@types/node': 12.20.55 + big-integer: 1.6.52 + chai: 4.3.10 + mocha: 6.2.3 + ts-node: 8.10.2(typescript@3.9.10) + typescript: 3.9.10 + dev: false + + github.com/celo-org/bls12377js/cb38a4cfb643c778619d79b20ca3e5283a2122a6: + resolution: {tarball: https://codeload.github.com/celo-org/bls12377js/tar.gz/cb38a4cfb643c778619d79b20ca3e5283a2122a6} + name: bls12377js + version: 0.1.0 + dependencies: + '@stablelib/blake2xs': 0.10.4 + '@types/node': 12.20.55 + big-integer: 1.6.52 + chai: 4.3.10 + mocha: 6.2.3 + ts-node: 8.10.2(typescript@3.9.10) + typescript: 3.9.10 dev: false github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2): - resolution: - { - tarball: https://codeload.github.com/thesis/eslint-config/tar.gz/7b9bc8c, - } + resolution: {tarball: https://codeload.github.com/thesis/eslint-config/tar.gz/7b9bc8c} id: github.com/thesis/eslint-config/7b9bc8c - name: "@thesis-co/eslint-config" + name: '@thesis-co/eslint-config' version: 0.8.0-pre - engines: { node: ">=14.0.0" } + engines: {node: '>=14.0.0'} peerDependencies: - eslint: ">=6.8.0" + eslint: '>=6.8.0' dependencies: - "@thesis-co/prettier-config": github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0) - "@typescript-eslint/eslint-plugin": 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) - "@typescript-eslint/parser": 6.12.0(eslint@8.54.0)(typescript@5.3.2) + '@thesis-co/prettier-config': github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0) + '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) eslint: 8.54.0 eslint-config-airbnb: 19.0.4(eslint-plugin-import@2.29.0)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.54.0) eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.54.0) @@ -21987,7 +18904,7 @@ packages: eslint-plugin-react: 7.33.2(eslint@8.54.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0) transitivePeerDependencies: - - "@types/eslint" + - '@types/eslint' - eslint-import-resolver-typescript - eslint-import-resolver-webpack - prettier @@ -21996,30 +18913,64 @@ packages: dev: true github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0): - resolution: - { - tarball: https://codeload.github.com/thesis/prettier-config/tar.gz/daeaac564056a7885e4366ce12bfde6fd823fc90, - } + resolution: {tarball: https://codeload.github.com/thesis/prettier-config/tar.gz/daeaac564056a7885e4366ce12bfde6fd823fc90} id: github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90 - name: "@thesis/prettier-config" + name: '@thesis/prettier-config' version: 0.0.2 peerDependencies: - prettier: ">=2.3.0 <4" + prettier: '>=2.3.0 <4' dependencies: prettier: 3.1.0 dev: true github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d(solhint@4.0.0): - resolution: - { - tarball: https://codeload.github.com/thesis/solhint-config/tar.gz/266de12d96d58f01171e20858b855ec80520de8d, - } + resolution: {tarball: https://codeload.github.com/thesis/solhint-config/tar.gz/266de12d96d58f01171e20858b855ec80520de8d} id: github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d name: solhint-config-thesis version: 0.1.0 - engines: { node: ">=0.10.0" } + engines: {node: '>=0.10.0'} peerDependencies: - solhint: ">=3.3.4" + solhint: '>=3.3.4' dependencies: solhint: 4.0.0 dev: true + + github.com/thesis/solidity-contracts/4985bcf: + resolution: {tarball: https://codeload.github.com/thesis/solidity-contracts/tar.gz/4985bcf} + name: '@thesis/solidity-contracts' + version: 0.0.1 + dependencies: + '@openzeppelin/contracts': 4.9.5 + dev: false + + github.com/umpirsky/country-list/05fda51: + resolution: {tarball: https://codeload.github.com/umpirsky/country-list/tar.gz/05fda51} + name: '@umpirsky/country-list' + version: 1.0.0 + dev: false + + github.com/web3-js/WebSocket-Node/ef5ea2f41daf4a2113b80c9223df884b4d56c400: + resolution: {tarball: https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400} + name: websocket + version: 1.0.29 + engines: {node: '>=0.10.0'} + requiresBuild: true + dependencies: + debug: 2.6.9 + es5-ext: 0.10.62 + nan: 2.18.0 + typedarray-to-buffer: 3.1.5 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + dev: false + + github.com/web3-js/scrypt-shim/aafdadda13e660e25e1c525d1f5b2443f5eb1ebb: + resolution: {tarball: https://codeload.github.com/web3-js/scrypt-shim/tar.gz/aafdadda13e660e25e1c525d1f5b2443f5eb1ebb} + name: '@web3-js/scrypt-shim' + version: 0.1.0 + requiresBuild: true + dependencies: + scryptsy: 2.1.0 + semver: 6.3.1 + dev: false From cbf198b0aed1dde26b0b8164e71c249f668e11e8 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 2 Feb 2024 12:47:51 +0100 Subject: [PATCH 056/122] Update tBTC contract mocks Cleanup mock contracts for tBTC --- core/contracts/test/BridgeStub.sol | 8 -------- .../test/{TBTCVaultStub.sol => MockTbtcBridge.sol} | 5 ++++- 2 files changed, 4 insertions(+), 9 deletions(-) delete mode 100644 core/contracts/test/BridgeStub.sol rename core/contracts/test/{TBTCVaultStub.sol => MockTbtcBridge.sol} (91%) diff --git a/core/contracts/test/BridgeStub.sol b/core/contracts/test/BridgeStub.sol deleted file mode 100644 index cea692c49..000000000 --- a/core/contracts/test/BridgeStub.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import {MockBridge} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositor.sol"; -import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; -import {TestERC20} from "./TestERC20.sol"; - -contract BridgeStub is MockBridge {} diff --git a/core/contracts/test/TBTCVaultStub.sol b/core/contracts/test/MockTbtcBridge.sol similarity index 91% rename from core/contracts/test/TBTCVaultStub.sol rename to core/contracts/test/MockTbtcBridge.sol index 0e8c9fb7c..a84703a46 100644 --- a/core/contracts/test/TBTCVaultStub.sol +++ b/core/contracts/test/MockTbtcBridge.sol @@ -1,11 +1,14 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {MockTBTCVault} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositorProxy.sol"; + +import {MockBridge, MockTBTCVault} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositor.sol"; import {IBridge} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {TestERC20} from "./TestERC20.sol"; +contract BridgeStub is MockBridge {} + contract TBTCVaultStub is MockTBTCVault { TestERC20 public tbtc; IBridge public bridge; From e8227aba5b692e0565bba32b6f88f4c97c12dab2 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 2 Feb 2024 12:49:14 +0100 Subject: [PATCH 057/122] Update name of used initialize function The function was renamed in the AbstractTBTCDepositor contract, so we need to align it here. --- core/contracts/TbtcDepositor.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 339b8861b..a069601b4 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -154,7 +154,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable { address _tbtcToken, address _stbtc ) Ownable(msg.sender) { - __TBTCDepositorProxy_initialize(_bridge, _tbtcVault); + __AbstractTBTCDepositor_initialize(_bridge, _tbtcVault); require(_tbtcToken != address(0), "TBTCToken address cannot be zero"); require(_stbtc != address(0), "stBTC address cannot be zero"); From debc8dc197057226d36270977e02250ac6c3dd5e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 2 Feb 2024 13:23:25 +0100 Subject: [PATCH 058/122] Fix not needed import --- core/test/stBTC.test.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/core/test/stBTC.test.ts b/core/test/stBTC.test.ts index b151a29a6..38a20cee4 100644 --- a/core/test/stBTC.test.ts +++ b/core/test/stBTC.test.ts @@ -3,12 +3,7 @@ import { loadFixture, } from "@nomicfoundation/hardhat-toolbox/network-helpers" import { expect } from "chai" -import { - ContractTransactionResponse, - MaxUint256, - ZeroAddress, - encodeBytes32String, -} from "ethers" +import { ContractTransactionResponse, MaxUint256, ZeroAddress } from "ethers" import { ethers } from "hardhat" import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" From 873e1cdfc029ae5d0b50f2a4e114ee27ca15a98b Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 2 Feb 2024 14:35:23 +0100 Subject: [PATCH 059/122] Update reference to @keep-network/tbtc-v2 --- core/package.json | 2 +- pnpm-lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/package.json b/core/package.json index 02a1965b3..0d490f806 100644 --- a/core/package.json +++ b/core/package.json @@ -62,7 +62,7 @@ }, "dependencies": { "@keep-network/bitcoin-spv-sol": "3.4.0-solc-0.8", - "@keep-network/tbtc-v2": "^1.6.0-dev.18", + "@keep-network/tbtc-v2": "development", "@openzeppelin/contracts": "^5.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b45977303..0b18e6bf4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: specifier: 3.4.0-solc-0.8 version: 3.4.0-solc-0.8 '@keep-network/tbtc-v2': - specifier: ^1.6.0-dev.18 + specifier: development version: 1.6.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) '@openzeppelin/contracts': specifier: ^5.0.0 From 1237ced45461fec06d7fd2ecb77298d8a6709a17 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 2 Feb 2024 14:39:03 +0100 Subject: [PATCH 060/122] Fix slither errors --- core/contracts/TbtcDepositor.sol | 3 ++- core/contracts/test/MockTbtcBridge.sol | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index a069601b4..98777167a 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -57,7 +57,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable { /// @notice tBTC Token contract. IERC20 public immutable tbtcToken; /// @notice stBTC contract. - stBTC public stbtc; + stBTC public immutable stbtc; /// @notice Mapping of stake requests. /// @dev The key is a deposit key identifying the deposit. @@ -287,6 +287,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable { // Deposit tBTC in stBTC. tbtcToken.safeIncreaseAllowance(address(stbtc), request.amountToStake); + // slither-disable-next-line unused-return stbtc.deposit(request.amountToStake, request.receiver); } diff --git a/core/contracts/test/MockTbtcBridge.sol b/core/contracts/test/MockTbtcBridge.sol index a84703a46..19fe2be93 100644 --- a/core/contracts/test/MockTbtcBridge.sol +++ b/core/contracts/test/MockTbtcBridge.sol @@ -10,8 +10,8 @@ import {TestERC20} from "./TestERC20.sol"; contract BridgeStub is MockBridge {} contract TBTCVaultStub is MockTBTCVault { - TestERC20 public tbtc; - IBridge public bridge; + TestERC20 public immutable tbtc; + IBridge public immutable bridge; /// @notice Multiplier to convert satoshi to TBTC token units. uint256 public constant SATOSHI_MULTIPLIER = 10 ** 10; @@ -39,6 +39,7 @@ contract TBTCVaultStub is MockTBTCVault { // The deposit transaction max fee is in the 1e8 satoshi precision. // We need to convert them to the 1e18 TBTC precision. + // slither-disable-next-line unused-return (, , uint64 depositTxMaxFee, ) = bridge.depositParameters(); uint256 txMaxFee = depositTxMaxFee * SATOSHI_MULTIPLIER; From 8fdab6f6d3b3863908366b097d5d53ba32540125 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 15:16:55 +0100 Subject: [PATCH 061/122] Remove unused imports --- core/contracts/TbtcDepositor.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 98777167a..7731ace8a 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -1,11 +1,9 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; @@ -35,7 +33,6 @@ import {stBTC} from "./stBTC.sol"; /// tBTC is staked in stBTC contract and stBTC shares are emitted to the /// receiver pointed by the staker. contract TbtcDepositor is AbstractTBTCDepositor, Ownable { - using BTCUtils for bytes; using SafeERC20 for IERC20; struct StakeRequest { From bcb127eb393309a8c12816eebc5326010e2c1567 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 16:00:30 +0100 Subject: [PATCH 062/122] Clarify minting process in docs --- core/contracts/TbtcDepositor.sol | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 7731ace8a..190ce35a8 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -23,15 +23,19 @@ import {stBTC} from "./stBTC.sol"; /// address along with their deposit blinding factor, refund public key /// hash and refund locktime on the tBTC Bridge through this Depositor /// contract. -/// The off-chain ECDSA wallet listens for these sorts of -/// messages and when it gets one, it checks the Bitcoin network to make -/// sure the deposit lines up. If it does, the off-chain ECDSA wallet -/// may decide to pick the deposit transaction for sweeping, and when -/// the sweep operation is confirmed on the Bitcoin network, the tBTC Bridge -/// and tBTC vault mint the tBTC token to the Depositor address. -/// After tBTC is minted to the Depositor, on the stake finalization -/// tBTC is staked in stBTC contract and stBTC shares are emitted to the -/// receiver pointed by the staker. +/// The off-chain ECDSA wallet and Optimistic Minting bots listen for these +/// sorts of messages and when they get one, they check the Bitcoin network +/// to make sure the deposit lines up. Majority of tBTC minting is finalized +/// by the Optimistic Minting process, where Minter bot initializes +/// minting process and if there is no veto from the Guardians, the +/// process is finalized and tBTC minted to the Depositor address. If +/// the revealed deposit is not handled by the Optimistic Minting process +/// the off-chain ECDSA wallet may decide to pick the deposit transaction +/// for sweeping, and when the sweep operation is confirmed on the Bitcoin +/// network, the tBTC Bridge and tBTC vault mint the tBTC token to the +/// Depositor address. After tBTC is minted to the Depositor, on the stake +/// finalization tBTC is staked in stBTC contract and stBTC shares are emitted +/// to the receiver pointed by the staker. contract TbtcDepositor is AbstractTBTCDepositor, Ownable { using SafeERC20 for IERC20; From defea022e5e592a2ee6f3a602ab853620259c444 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 16:04:28 +0100 Subject: [PATCH 063/122] Use Ownable2Step instead of Ownable --- core/contracts/TbtcDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 190ce35a8..63b37506c 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/Ownable2Step.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -36,7 +36,7 @@ import {stBTC} from "./stBTC.sol"; /// Depositor address. After tBTC is minted to the Depositor, on the stake /// finalization tBTC is staked in stBTC contract and stBTC shares are emitted /// to the receiver pointed by the staker. -contract TbtcDepositor is AbstractTBTCDepositor, Ownable { +contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { using SafeERC20 for IERC20; struct StakeRequest { From ec35beda8e50ce1f347044f39d55edd5b05ef62d Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 16:10:55 +0100 Subject: [PATCH 064/122] Accept ownership transfer in deployment script --- core/deploy/23_transfer_ownership_tbtc_depositor.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/deploy/23_transfer_ownership_tbtc_depositor.ts b/core/deploy/23_transfer_ownership_tbtc_depositor.ts index d448b30a5..6adb33de5 100644 --- a/core/deploy/23_transfer_ownership_tbtc_depositor.ts +++ b/core/deploy/23_transfer_ownership_tbtc_depositor.ts @@ -14,6 +14,14 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { "transferOwnership", governance, ) + + if (hre.network.name !== "mainnet") { + await deployments.execute( + "TbtcDepositor", + { from: governance, log: true, waitConfirmations: 1 }, + "acceptOwnership", + ) + } } export default func From 60740dd29b7bc023edfeb83d9b4cafb4b434d8ff Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 16:18:56 +0100 Subject: [PATCH 065/122] Rename amount related variables --- core/contracts/TbtcDepositor.sol | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 63b37506c..2b1aaeee1 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -219,36 +219,31 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// this value for more details. /// @param depositKey Deposit key identifying the deposit. function notifyBridgingCompleted(uint256 depositKey) external { - ( - uint256 depositAmount, - uint256 depositSubBridgingFeesAmount, - - ) = _finalizeDeposit(depositKey); + (uint256 initialDepositAmount, uint256 tbtcAmount, ) = _finalizeDeposit( + depositKey + ); // Compute depositor fee. The fee is calculated based on the initial funding // transaction amount, before the tBTC protocol network fees were taken. uint256 depositorFee = depositorFeeDivisor > 0 - ? (depositAmount / depositorFeeDivisor) + ? (initialDepositAmount / depositorFeeDivisor) : 0; // Ensure the depositor fee does not exceed the approximate minted tBTC // amount. - if (depositorFee >= depositSubBridgingFeesAmount) { - revert DepositorFeeExceedsBridgedAmount( - depositorFee, - depositSubBridgingFeesAmount - ); + if (depositorFee >= tbtcAmount) { + revert DepositorFeeExceedsBridgedAmount(depositorFee, tbtcAmount); } StakeRequest storage request = stakeRequests[depositKey]; - request.amountToStake = depositSubBridgingFeesAmount - depositorFee; + request.amountToStake = tbtcAmount - depositorFee; emit BridgingCompleted( depositKey, msg.sender, request.referral, - depositSubBridgingFeesAmount, + tbtcAmount, depositorFee ); From 68f58b408d57ce4b9c101917bc8727e254dd83b4 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 16:28:28 +0100 Subject: [PATCH 066/122] Introduce recalledAt property --- core/contracts/TbtcDepositor.sol | 14 +++++++++++--- core/test/TbtcDepositor.test.ts | 8 ++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 2b1aaeee1..db1440a48 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -43,9 +43,12 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { // Timestamp at which the deposit request was initialized is not stored // in this structure, as it is available under `Bridge.DepositRequest.revealedAt`. - // UNIX timestamp at which the deposit request was finalized. + // UNIX timestamp at which the stake request was finalized. // 0 if not yet finalized. uint64 finalizedAt; + // UNIX timestamp at which the stake request was recalled. + // 0 if not yet recalled. + uint64 recalledAt; // The address to which the stBTC shares will be minted. address receiver; // Identifier of a partner in the referral program. @@ -138,9 +141,12 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 bridgedAmount ); - /// @dev Attempted to finalize a stake request that was already finalized. + /// @dev Attempted to finalize or recall a stake request that was already finalized. error StakeRequestAlreadyFinalized(); + /// @dev Attempted to finalize or recall a stake request that was already recalled. + error StakeRequestAlreadyRecalled(); + /// @dev Attempted to call function by an account that is not the receiver. error CallerNotReceiver(); @@ -271,6 +277,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { if (request.amountToStake == 0) revert BridgingNotCompleted(); if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); + if (request.recalledAt > 0) revert StakeRequestAlreadyRecalled(); // solhint-disable-next-line not-rely-on-time request.finalizedAt = uint64(block.timestamp); @@ -300,12 +307,13 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { if (request.amountToStake == 0) revert BridgingNotCompleted(); if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); + if (request.recalledAt > 0) revert StakeRequestAlreadyRecalled(); // Check if caller is the receiver. if (msg.sender != request.receiver) revert CallerNotReceiver(); // solhint-disable-next-line not-rely-on-time - request.finalizedAt = uint64(block.timestamp); + request.recalledAt = uint64(block.timestamp); emit StakeRequestRecalled( depositKey, diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 994c397f3..bc83e70c1 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -536,7 +536,7 @@ describe("TbtcDepositor", () => { .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "StakeRequestAlreadyFinalized", + "StakeRequestAlreadyRecalled", ) }) }) @@ -633,10 +633,10 @@ describe("TbtcDepositor", () => { .recallStakeRequest(tbtcDepositData.depositKey) }) - it("should set finalizedAt timestamp", async () => { + it("should set recalledAt timestamp", async () => { expect( (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .finalizedAt, + .recalledAt, ).to.be.equal(await lastBlockTime()) }) @@ -677,7 +677,7 @@ describe("TbtcDepositor", () => { .recallStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "StakeRequestAlreadyFinalized", + "StakeRequestAlreadyRecalled", ) }) }) From 932bd1b07d4ff14a76b466a0d9a88ee9261bca71 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 17:00:35 +0100 Subject: [PATCH 067/122] Use helpers from @keep-network/hardhat-helpers The latest version of the hardhat-helpers is compliant with ethers v6, so we can use it now! --- core/.eslintrc | 2 +- core/test/Deployment.test.ts | 6 ++++-- core/test/Dispatcher.test.ts | 10 +++++----- core/test/TbtcDepositor.test.ts | 11 +++++++---- core/test/helpers/contract.ts | 7 ++++--- core/test/helpers/index.ts | 1 - core/test/helpers/signer.ts | 31 ------------------------------- core/test/helpers/time.ts | 10 ---------- core/test/stBTC.test.ts | 15 ++++++--------- 9 files changed, 27 insertions(+), 66 deletions(-) delete mode 100644 core/test/helpers/signer.ts delete mode 100644 core/test/helpers/time.ts diff --git a/core/.eslintrc b/core/.eslintrc index a67c8dda7..00fc354f3 100644 --- a/core/.eslintrc +++ b/core/.eslintrc @@ -17,7 +17,7 @@ }, "overrides": [ { - "files": ["deploy/*.ts"], + "files": ["deploy/**/*.ts", "test/**/*.ts"], "rules": { "@typescript-eslint/unbound-method": "off" } diff --git a/core/test/Deployment.test.ts b/core/test/Deployment.test.ts index 4c0d9233b..5914e98bb 100644 --- a/core/test/Deployment.test.ts +++ b/core/test/Deployment.test.ts @@ -1,16 +1,18 @@ import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" import { expect } from "chai" import { MaxUint256 } from "ethers" +import { helpers } from "hardhat" import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { deployment } from "./helpers/context" -import { getNamedSigner } from "./helpers/signer" import type { StBTC as stBTC, Dispatcher, TestERC20 } from "../typechain" +const { getNamedSigners } = helpers.signers + async function fixture() { const { tbtc, stbtc, dispatcher } = await deployment() - const { governance, maintainer, treasury } = await getNamedSigner() + const { governance, maintainer, treasury } = await getNamedSigners() return { stbtc, dispatcher, tbtc, governance, maintainer, treasury } } diff --git a/core/test/Dispatcher.test.ts b/core/test/Dispatcher.test.ts index 8328ffbef..4e1e8a987 100644 --- a/core/test/Dispatcher.test.ts +++ b/core/test/Dispatcher.test.ts @@ -1,4 +1,4 @@ -import { ethers } from "hardhat" +import { ethers, helpers } from "hardhat" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { expect } from "chai" import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers" @@ -8,8 +8,6 @@ import { beforeAfterEachSnapshotWrapper, beforeAfterSnapshotWrapper, deployment, - getNamedSigner, - getUnnamedSigner, } from "./helpers" import { @@ -21,10 +19,12 @@ import { import { to1e18 } from "./utils" +const { getNamedSigners, getUnnamedSigners } = helpers.signers + async function fixture() { const { tbtc, stbtc, dispatcher, vault } = await deployment() - const { governance, maintainer } = await getNamedSigner() - const [thirdParty] = await getUnnamedSigner() + const { governance, maintainer } = await getNamedSigners() + const [thirdParty] = await getUnnamedSigners() return { dispatcher, governance, thirdParty, maintainer, vault, tbtc, stbtc } } diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index bc83e70c1..61b65b9cb 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -5,6 +5,7 @@ import { ethers, helpers } from "hardhat" import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { ContractTransactionResponse, ZeroAddress } from "ethers" + import type { StBTC, BridgeStub, @@ -12,11 +13,10 @@ import type { TbtcDepositor, TestERC20, } from "../typechain" -import { deployment, getNamedSigner, getUnnamedSigner } from "./helpers" +import { deployment } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" import { tbtcDepositData } from "./data/tbtc" import { to1ePrecision } from "./utils" -import { lastBlockTime } from "./helpers/time" async function fixture() { const { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = @@ -25,6 +25,9 @@ async function fixture() { return { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } } +const { lastBlockTime } = helpers.time +const { getNamedSigners, getUnnamedSigners } = helpers.signers + describe("TbtcDepositor", () => { const defaultDepositTreasuryFeeDivisor = 2000 // 1/2000 = 0.05% = 0.0005 const defaultDepositTxMaxFee = 1000 // 1000 satoshi = 0.00001 BTC @@ -55,8 +58,8 @@ describe("TbtcDepositor", () => { before(async () => { ;({ tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = await loadFixture(fixture)) - ;({ governance, treasury } = await getNamedSigner()) - ;[thirdParty] = await getUnnamedSigner() + ;({ governance, treasury } = await getNamedSigners()) + ;[thirdParty] = await getUnnamedSigners() receiver = await helpers.account.impersonateAccount( tbtcDepositData.receiver, diff --git a/core/test/helpers/contract.ts b/core/test/helpers/contract.ts index 6ba7b36ae..9233529d4 100644 --- a/core/test/helpers/contract.ts +++ b/core/test/helpers/contract.ts @@ -1,7 +1,8 @@ -import { deployments, ethers } from "hardhat" +import { deployments, ethers, helpers } from "hardhat" import type { BaseContract } from "ethers" -import { getUnnamedSigner } from "./signer" + +const { getUnnamedSigners } = helpers.signers /** * Get instance of a contract from Hardhat Deployments. @@ -15,7 +16,7 @@ export async function getDeployedContract( const { address, abi } = await deployments.get(deploymentName) // Use default unnamed signer from index 0 to initialize the contract runner. - const [defaultSigner] = await getUnnamedSigner() + const [defaultSigner] = await getUnnamedSigners() return new ethers.BaseContract(address, abi, defaultSigner) as T } diff --git a/core/test/helpers/index.ts b/core/test/helpers/index.ts index e4df2196a..40da2ef89 100644 --- a/core/test/helpers/index.ts +++ b/core/test/helpers/index.ts @@ -1,4 +1,3 @@ export * from "./context" export * from "./contract" -export * from "./signer" export * from "./snapshot" diff --git a/core/test/helpers/signer.ts b/core/test/helpers/signer.ts deleted file mode 100644 index 0ae57f35e..000000000 --- a/core/test/helpers/signer.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ethers, getNamedAccounts, getUnnamedAccounts } from "hardhat" - -import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" - -/** - * Get named Hardhat Ethers Signers. - * @returns Map of named Hardhat Ethers Signers. - */ -export async function getNamedSigner(): Promise<{ - [name: string]: HardhatEthersSigner -}> { - const namedSigners: { [name: string]: HardhatEthersSigner } = {} - - await Promise.all( - Object.entries(await getNamedAccounts()).map(async ([name, address]) => { - namedSigners[name] = await ethers.getSigner(address) - }), - ) - - return namedSigners -} - -/** - * Get unnamed Hardhat Ethers Signers. - * @returns Array of unnamed Hardhat Ethers Signers. - */ -export async function getUnnamedSigner(): Promise { - const accounts = await getUnnamedAccounts() - - return Promise.all(accounts.map(ethers.getSigner)) -} diff --git a/core/test/helpers/time.ts b/core/test/helpers/time.ts deleted file mode 100644 index 933a47c3b..000000000 --- a/core/test/helpers/time.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable import/prefer-default-export */ -import { ethers } from "hardhat" - -/** - * Returns timestamp of the latest block. - * @return {number} Latest block timestamp. - */ -export async function lastBlockTime(): Promise { - return (await ethers.provider.getBlock("latest"))!.timestamp -} diff --git a/core/test/stBTC.test.ts b/core/test/stBTC.test.ts index 8fd361e09..75559fe59 100644 --- a/core/test/stBTC.test.ts +++ b/core/test/stBTC.test.ts @@ -4,26 +4,23 @@ import { } from "@nomicfoundation/hardhat-toolbox/network-helpers" import { expect } from "chai" import { ContractTransactionResponse, MaxUint256, ZeroAddress } from "ethers" -import { ethers } from "hardhat" +import { ethers, helpers } from "hardhat" import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import type { SnapshotRestorer } from "@nomicfoundation/hardhat-toolbox/network-helpers" -import { - beforeAfterSnapshotWrapper, - deployment, - getNamedSigner, - getUnnamedSigner, -} from "./helpers" +import { beforeAfterSnapshotWrapper, deployment } from "./helpers" import { to1e18 } from "./utils" import type { StBTC as stBTC, TestERC20, Dispatcher } from "../typechain" +const { getNamedSigners, getUnnamedSigners } = helpers.signers + async function fixture() { const { tbtc, stbtc, dispatcher } = await deployment() - const { governance, treasury } = await getNamedSigner() + const { governance, treasury } = await getNamedSigners() - const [depositor1, depositor2, thirdParty] = await getUnnamedSigner() + const [depositor1, depositor2, thirdParty] = await getUnnamedSigners() const amountToMint = to1e18(100000) await tbtc.mint(depositor1, amountToMint) From c73e98dbd829d8f6531138c0d816f2c0e862f20f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 17:02:31 +0100 Subject: [PATCH 068/122] Fix tag of onwership transfer script --- core/deploy/23_transfer_ownership_tbtc_depositor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/deploy/23_transfer_ownership_tbtc_depositor.ts b/core/deploy/23_transfer_ownership_tbtc_depositor.ts index 6adb33de5..fa0494ae0 100644 --- a/core/deploy/23_transfer_ownership_tbtc_depositor.ts +++ b/core/deploy/23_transfer_ownership_tbtc_depositor.ts @@ -26,5 +26,5 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func -func.tags = ["TransferOwnershipAcre"] +func.tags = ["TransferOwnershipTbtcDepositor"] func.dependencies = ["TbtcDepositor"] From 4c7259130b7d780d4d37385aaf47924664c42173 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 7 Feb 2024 17:09:23 +0100 Subject: [PATCH 069/122] Use Ownable2Step in all contracts We switch to Ownable2Step as it gives better security against unintended onwership transfer. --- core/contracts/Dispatcher.sol | 4 ++-- core/contracts/stBTC.sol | 4 ++-- core/deploy/21_transfer_ownership_stbtc.ts | 8 ++++++++ core/deploy/22_transfer_ownership_dispatcher.ts | 8 ++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/core/contracts/Dispatcher.sol b/core/contracts/Dispatcher.sol index cac8fa317..ec1696239 100644 --- a/core/contracts/Dispatcher.sol +++ b/core/contracts/Dispatcher.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/interfaces/IERC4626.sol"; import "./Router.sol"; @@ -11,7 +11,7 @@ import "./stBTC.sol"; /// @notice Dispatcher is a contract that routes tBTC from stBTC to /// yield vaults and back. Vaults supply yield strategies with tBTC that /// generate yield for Bitcoin holders. -contract Dispatcher is Router, Ownable { +contract Dispatcher is Router, Ownable2Step { using SafeERC20 for IERC20; /// Struct holds information about a vault. diff --git a/core/contracts/stBTC.sol b/core/contracts/stBTC.sol index 99079919b..803b9a2de 100644 --- a/core/contracts/stBTC.sol +++ b/core/contracts/stBTC.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.21; import "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "./Dispatcher.sol"; import "./lib/ERC4626Fees.sol"; @@ -18,7 +18,7 @@ import "./lib/ERC4626Fees.sol"; /// of yield-bearing vaults. This contract facilitates the minting and /// burning of shares (stBTC), which are represented as standard ERC20 /// tokens, providing a seamless exchange with tBTC tokens. -contract stBTC is ERC4626Fees, Ownable { +contract stBTC is ERC4626Fees, Ownable2Step { using SafeERC20 for IERC20; /// Dispatcher contract that routes tBTC from stBTC to a given vault and back. diff --git a/core/deploy/21_transfer_ownership_stbtc.ts b/core/deploy/21_transfer_ownership_stbtc.ts index 9d19bcbcf..fa2ad6c47 100644 --- a/core/deploy/21_transfer_ownership_stbtc.ts +++ b/core/deploy/21_transfer_ownership_stbtc.ts @@ -14,6 +14,14 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { "transferOwnership", governance, ) + + if (hre.network.name !== "mainnet") { + await deployments.execute( + "stBTC", + { from: governance, log: true, waitConfirmations: 1 }, + "acceptOwnership", + ) + } } export default func diff --git a/core/deploy/22_transfer_ownership_dispatcher.ts b/core/deploy/22_transfer_ownership_dispatcher.ts index 5e85a15d0..5b8e930dc 100644 --- a/core/deploy/22_transfer_ownership_dispatcher.ts +++ b/core/deploy/22_transfer_ownership_dispatcher.ts @@ -14,6 +14,14 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { "transferOwnership", governance, ) + + if (hre.network.name !== "mainnet") { + await deployments.execute( + "Dispatcher", + { from: governance, log: true, waitConfirmations: 1 }, + "acceptOwnership", + ) + } } export default func From 563cca9a020f110220981ae521f127b855b9870c Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 8 Feb 2024 12:32:20 +0100 Subject: [PATCH 070/122] Combine notifyBridgingCompleted and finalizeStakeRequest To optimize gas usage we combine finalizeStakeRequest and finalizeStakeRequest in one function to call in one transaction. In majority of cases both actions will be executed together, only if deposit limit is reached in stbtc, the finalizeStakeRequest should be called right after bridging completed and later when deposit can be finalized in stbtc contract the finalizeStakeRequest should be called. --- core/contracts/TbtcDepositor.sol | 19 ++- core/test/TbtcDepositor.test.ts | 272 ++++++++++++++++++++++++++++++- 2 files changed, 284 insertions(+), 7 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index db1440a48..0d364efd3 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -224,7 +224,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// {{TBTCDepositorProxy#_calculateTbtcAmount}} responsible for calculating /// this value for more details. /// @param depositKey Deposit key identifying the deposit. - function notifyBridgingCompleted(uint256 depositKey) external { + function notifyBridgingCompleted(uint256 depositKey) public { (uint256 initialDepositAmount, uint256 tbtcAmount, ) = _finalizeDeposit( depositKey ); @@ -272,7 +272,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// The staker has a possibility to submit `recallStakeRequest` that /// will withdraw the minted tBTC token and abort staking process. /// @param depositKey Deposit key identifying the deposit. - function finalizeStakeRequest(uint256 depositKey) external { + function finalizeStakeRequest(uint256 depositKey) public { StakeRequest storage request = stakeRequests[depositKey]; if (request.amountToStake == 0) revert BridgingNotCompleted(); @@ -294,6 +294,21 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { stbtc.deposit(request.amountToStake, request.receiver); } + /// @notice This function combines execution of `notifyBridgingCompleted` and + /// `finalizeStakeRequest` in one transaction. + /// @dev It should be used by default to finalize staking process after minting + /// tBTC. Execution may fail at the very end of `stbtc.deposit` call + /// due to reaching a max deposit limit. In such case only `notifyBridgingCompleted` + /// should be executed, and once stBTC contract is ready to accept new + /// deposit the `finalizeStakeRequest` function should be executed. + /// @param depositKey Deposit key identifying the deposit. + function notifyBridgingCompletedAndFinalizeStakeRequest( + uint256 depositKey + ) external { + notifyBridgingCompleted(depositKey); + finalizeStakeRequest(depositKey); + } + /// @notice Recall bridged tBTC tokens from being requested to stake. This /// function can be called by the staker to recover tBTC that cannot /// be finalized to stake in stBTC contract due to a deposit limit being diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 61b65b9cb..d519a2e91 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -408,12 +408,31 @@ describe("TbtcDepositor", () => { .notifyBridgingCompleted(tbtcDepositData.depositKey) }) - it("should revert", async () => { - await expect( - tbtcDepositor + describe("when stake request has not been finalized", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey), + ).to.be.revertedWith("Deposit not initialized") + }) + }) + + describe("when stake request has been finalized", () => { + before(async () => { + // Notify bridging completed. + await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWith("Deposit not initialized") + .finalizeStakeRequest(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey), + ).to.be.revertedWith("Deposit not initialized") + }) }) }) }) @@ -569,6 +588,249 @@ describe("TbtcDepositor", () => { }) }) + describe("notifyBridgingCompletedAndFinalizeStakeRequest", () => { + describe("when stake request has not been initialized", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ), + ).to.be.revertedWith("Deposit not initialized") + }) + }) + + describe("when stake request has been initialized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStakeRequest() + }) + + describe("when deposit was not bridged", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ), + ).to.be.revertedWith("Deposit not finalized by the bridge") + }) + }) + + describe("when deposit was bridged", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Simulate deposit request finalization. + await finalizeBridging(tbtcDepositData.depositKey) + }) + + describe("when bridging completion has not been notified and finalized", () => { + describe("when depositor fee divisor is not zero", () => { + beforeAfterSnapshotWrapper() + + const expectedAssetsAmount = amountToStake + const expectedReceivedSharesAmount = amountToStake + + let tx: ContractTransactionResponse + + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ) + }) + + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + depositorFee, + ) + }) + + it("should store amount to stake", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .amountToStake, + ).to.be.equal(amountToStake) + }) + + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [treasury], + [depositorFee], + ) + }) + + it("should set finalizedAt timestamp", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .finalizedAt, + ).to.be.equal(await lastBlockTime()) + }) + + it("should emit StakeRequestFinalized event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeRequestFinalized") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + expectedAssetsAmount, + ) + }) + + it("should emit Deposit event", async () => { + await expect(tx) + .to.emit(stbtc, "Deposit") + .withArgs( + await tbtcDepositor.getAddress(), + tbtcDepositData.receiver, + expectedAssetsAmount, + expectedReceivedSharesAmount, + ) + }) + + it("should stake in Acre contract", async () => { + await expect( + tx, + "invalid minted stBTC amount", + ).to.changeTokenBalances( + stbtc, + [tbtcDepositData.receiver], + [expectedReceivedSharesAmount], + ) + + await expect( + tx, + "invalid staked tBTC amount", + ).to.changeTokenBalances(tbtc, [stbtc], [expectedAssetsAmount]) + }) + }) + + describe("when depositor fee divisor is zero", () => { + beforeAfterSnapshotWrapper() + + let tx: ContractTransactionResponse + + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(0) + + tx = await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ) + }) + + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + 0, + ) + }) + + it("should store amount to stake", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .amountToStake, + ).to.be.equal(bridgedTbtcAmount) + }) + + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) + }) + }) + + describe("when depositor fee exceeds bridged amount", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(governance) + .updateDepositorFeeDivisor(1) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ), + ) + .to.be.revertedWithCustomError( + tbtcDepositor, + "DepositorFeeExceedsBridgedAmount", + ) + .withArgs(initialDepositAmount, bridgedTbtcAmount) + }) + }) + }) + + describe("when bridging completion has been notified", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Notify bridging completed. + await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompleted(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ), + ).to.be.revertedWith("Deposit not initialized") + }) + }) + + describe("when bridging completion has been notified and finalized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + // Notify bridging completed. + await tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .notifyBridgingCompletedAndFinalizeStakeRequest( + tbtcDepositData.depositKey, + ), + ).to.be.revertedWith("Deposit not initialized") + }) + }) + }) + }) + }) + describe("recallStakeRequest", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { From abfe788a7d63e9af08401097c9db6dc4f46ddfac Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 8 Feb 2024 14:01:43 +0100 Subject: [PATCH 071/122] Check if notifyBridgingCompleted was already called With the changes to AbstractTBTCDepositor contract proposed in https://github.com/keep-network/tbtc-v2/pull/783 it becomes implementation contract responsibility to ensure the `_finalizeDeposit` function is called just once. Here we add validation to enfore this rule. --- core/contracts/TbtcDepositor.sol | 11 +++++++++-- core/test/TbtcDepositor.test.ts | 20 ++++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 0d364efd3..1fde65dcd 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -131,6 +131,10 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); + /// @dev Attempted to notify a bridging completion, while it was already + /// notified. + error BridgingCompletionAlreadyNotified(); + /// @dev Attempted to finalize a stake request, while bridging completion has /// not been notified yet. error BridgingNotCompleted(); @@ -225,6 +229,11 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// this value for more details. /// @param depositKey Deposit key identifying the deposit. function notifyBridgingCompleted(uint256 depositKey) public { + StakeRequest storage request = stakeRequests[depositKey]; + + if (request.amountToStake > 0) + revert BridgingCompletionAlreadyNotified(); + (uint256 initialDepositAmount, uint256 tbtcAmount, ) = _finalizeDeposit( depositKey ); @@ -241,8 +250,6 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { revert DepositorFeeExceedsBridgedAmount(depositorFee, tbtcAmount); } - StakeRequest storage request = stakeRequests[depositKey]; - request.amountToStake = tbtcAmount - depositorFee; emit BridgingCompleted( diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index d519a2e91..145ee1a8a 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -414,7 +414,10 @@ describe("TbtcDepositor", () => { tbtcDepositor .connect(thirdParty) .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWith("Deposit not initialized") + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingCompletionAlreadyNotified", + ) }) }) @@ -431,7 +434,10 @@ describe("TbtcDepositor", () => { tbtcDepositor .connect(thirdParty) .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWith("Deposit not initialized") + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingCompletionAlreadyNotified", + ) }) }) }) @@ -801,7 +807,10 @@ describe("TbtcDepositor", () => { .notifyBridgingCompletedAndFinalizeStakeRequest( tbtcDepositData.depositKey, ), - ).to.be.revertedWith("Deposit not initialized") + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingCompletionAlreadyNotified", + ) }) }) @@ -824,7 +833,10 @@ describe("TbtcDepositor", () => { .notifyBridgingCompletedAndFinalizeStakeRequest( tbtcDepositData.depositKey, ), - ).to.be.revertedWith("Deposit not initialized") + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingCompletionAlreadyNotified", + ) }) }) }) From 14e0c65d46d793055201279e21b313a153e113bd Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 8 Feb 2024 14:29:00 +0100 Subject: [PATCH 072/122] Update dependency to tbtc-v2 contracts --- pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index beadc2501..42e4ce9ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 3.4.0-solc-0.8 '@keep-network/tbtc-v2': specifier: development - version: 1.6.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) + version: 1.6.0-dev.19(@keep-network/keep-core@1.8.1-dev.0) '@openzeppelin/contracts': specifier: ^5.0.0 version: 5.0.0 @@ -4486,8 +4486,8 @@ packages: - utf-8-validate dev: false - /@keep-network/tbtc-v2@1.6.0-dev.18(@keep-network/keep-core@1.8.1-dev.0): - resolution: {integrity: sha512-62QBEPAsE3dju5Hk+yqeLhE5ohmVg8ZdFE+x+lmkDPbVz6DrHx0NqF6a1TLC/yH826zhnVCTNpXoPuOv3QUnvA==} + /@keep-network/tbtc-v2@1.6.0-dev.19(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-b29a5AzRX+ub3oJctTEOIphEpBD2pYqVzmebyGZl43WN61q3gCFy9k5rDJYTYWTT1ly2mSt5DB51+sUwzToqFA==} engines: {node: '>= 14.0.0'} dependencies: '@keep-network/bitcoin-spv-sol': 3.4.0-solc-0.8 From 8c026171bae2b373f52e59979b23520f54a31d1e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 13 Feb 2024 13:03:36 +0100 Subject: [PATCH 073/122] Add decodeExtraData function back The function was added initially in: a6d27d49bf3b8e4bdea34b17f77265288dc16107 and 53e33f07d13853e1d4c0b4c51dbb38d5cf47f8e1, but later removed during refactoring, but it turns out we will actually need it. --- core/contracts/TbtcDepositor.sol | 15 +++++++++++++ core/test/TbtcDepositor.test.ts | 37 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 1fde65dcd..867f38ac6 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -371,4 +371,19 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { ) public pure returns (bytes32) { return bytes32(abi.encodePacked(receiver, referral)); } + + /// @notice Decodes receiver address and referral from extra data, + /// @dev Unpacks the data from bytes32: 20 bytes of receiver address and + /// 2 bytes of referral, 10 bytes of trailing zeros. + /// @param extraData Encoded extra data. + /// @return receiver The address to which the stBTC shares will be minted. + /// @return referral Data used for referral program. + function decodeExtraData( + bytes32 extraData + ) public pure returns (address receiver, uint16 referral) { + // First 20 bytes of extra data is receiver address. + receiver = address(uint160(bytes20(extraData))); + // Next 2 bytes of extra data is referral info. + referral = uint16(bytes2(extraData << (8 * 20))); + } } diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index 145ee1a8a..ba195540f 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -1110,6 +1110,43 @@ describe("TbtcDepositor", () => { ) }) + describe("decodeExtraData", () => { + extraDataValidTestData.forEach( + ( + { receiver: expectedReceiver, referral: expectedReferral, extraData }, + testName, + ) => { + it(testName, async () => { + const [actualReceiver, actualReferral] = + await tbtcDepositor.decodeExtraData(extraData) + + expect(actualReceiver, "invalid receiver").to.be.equal( + expectedReceiver, + ) + expect(actualReferral, "invalid referral").to.be.equal( + expectedReferral, + ) + }) + }, + ) + + it("with unused bytes filled with data", async () => { + // Extra data uses address (20 bytes) and referral (2 bytes), leaving the + // remaining 10 bytes unused. This test fills the unused bytes with a random + // value. + const extraData = + "0xeb098d6cde6a202981316b24b19e64d82721e89e1ac3105f9919321ea7d75f58" + const expectedReceiver = "0xeb098d6cDE6A202981316b24B19e64D82721e89E" + const expectedReferral = 6851 // hex: 0x1ac3 + + const [actualReceiver, actualReferral] = + await tbtcDepositor.decodeExtraData(extraData) + + expect(actualReceiver, "invalid receiver").to.be.equal(expectedReceiver) + expect(actualReferral, "invalid referral").to.be.equal(expectedReferral) + }) + }) + async function initializeStakeRequest() { await tbtcDepositor .connect(thirdParty) From ecdf80f58730451c9ca18db18c95af8cf8b18546 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 13 Feb 2024 13:31:19 +0100 Subject: [PATCH 074/122] Introduce finalizeStakeRequest function and queue To optimize gas usage it is expected that after tBTC is bridged only one function is called: `finalizeStakeRequest`. If the function fails due to stBTC deposit limit being reached the stake request shoudl be added to a queue with `queueForStaking` function. When stBTC is ready to accept the deposit the `stakeFromQueue` function should be called. --- core/contracts/TbtcDepositor.sol | 200 ++++++++++++++++++++----------- 1 file changed, 132 insertions(+), 68 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 867f38ac6..05d01c5e5 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -43,19 +43,30 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { // Timestamp at which the deposit request was initialized is not stored // in this structure, as it is available under `Bridge.DepositRequest.revealedAt`. + // UNIX timestamp at which tBTC bridging was notified to the stake request. + // It is used by `finalizeBridging` to ensure it is called only once for + // a given stake request, as the `AbstractTBTCDepositor#_finalizeDeposit` + // function is not validating that. + // For request finalized with `finalizeStakeRequest` function it will match + // the finalization timestamp. For request added to the queue it will match + // the queueing timestamp. + // 0 if bridging finalization has not been called yet. + // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. + uint32 bridgingFinalizedAt; // UNIX timestamp at which the stake request was finalized. // 0 if not yet finalized. - uint64 finalizedAt; + // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. + uint32 finalizedAt; // UNIX timestamp at which the stake request was recalled. // 0 if not yet recalled. - uint64 recalledAt; - // The address to which the stBTC shares will be minted. + // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. + uint32 recalledAt; + // The address to which the stBTC shares will be minted. Stored only when + // request is queued. address receiver; - // Identifier of a partner in the referral program. - uint16 referral; // tBTC token amount to stake after deducting tBTC minting fees and the - // Depositor fee. - uint256 amountToStake; + // Depositor fee. Stored only when request is queued. + uint256 queuedAmount; } /// @notice tBTC Token contract. @@ -107,11 +118,33 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// event emitted in the same transaction. /// @param depositKey Deposit key identifying the deposit. /// @param caller Address that finalized the stake request. - /// @param amountToStake Amount of staked tBTC tokens. + /// @param stakedAmount Amount of staked tBTC tokens. event StakeRequestFinalized( uint256 indexed depositKey, address indexed caller, - uint256 amountToStake + uint256 stakedAmount + ); + + /// @notice Emitted when a stake request is queued. + /// @param depositKey Deposit key identifying the deposit. + /// @param caller Address that finalized the stake request. + /// @param queuedAmount Amount of queued tBTC tokens. + event StakeRequestQueued( + uint256 indexed depositKey, + address indexed caller, + uint256 queuedAmount + ); + + /// @notice Emitted when a stake request is finalized from the queue. + /// @dev Deposit details can be fetched from {{ ERC4626.Deposit }} + /// event emitted in the same transaction. + /// @param depositKey Deposit key identifying the deposit. + /// @param caller Address that finalized the stake request. + /// @param stakedAmount Amount of staked tBTC tokens. + event StakeRequestFinalizedFromQueue( + uint256 indexed depositKey, + address indexed caller, + uint256 stakedAmount ); /// @notice Emitted when a stake request is recalled. @@ -145,11 +178,13 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 bridgedAmount ); - /// @dev Attempted to finalize or recall a stake request that was already finalized. - error StakeRequestAlreadyFinalized(); + /// @dev Attempted to call bridging finalization for a stake request for + /// which the function was already called. + error BridgingFinalizationAlreadyCalled(); - /// @dev Attempted to finalize or recall a stake request that was already recalled. - error StakeRequestAlreadyRecalled(); + /// @dev Attempted to finalize or recall a stake request that was not added + /// to the queue, or was already finalized or recalled. + error StakeRequestNotQueued(); /// @dev Attempted to call function by an account that is not the receiver. error CallerNotReceiver(); @@ -211,10 +246,6 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { encodeExtraData(receiver, referral) ); - StakeRequest storage request = stakeRequests[depositKey]; - request.receiver = receiver; - request.referral = referral; - emit StakeRequestInitialized(depositKey, msg.sender, receiver); } @@ -228,15 +259,28 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// {{TBTCDepositorProxy#_calculateTbtcAmount}} responsible for calculating /// this value for more details. /// @param depositKey Deposit key identifying the deposit. - function notifyBridgingCompleted(uint256 depositKey) public { + /// @return amountToStake tBTC token amount to stake after deducting tBTC bridging + /// fees and the depositor fee. + /// @return receiver The address to which the stBTC shares will be minted. + function finalizeBridging( + uint256 depositKey + ) internal returns (uint256, address) { StakeRequest storage request = stakeRequests[depositKey]; - if (request.amountToStake > 0) - revert BridgingCompletionAlreadyNotified(); + if (request.bridgingFinalizedAt > 0) + revert BridgingFinalizationAlreadyCalled(); - (uint256 initialDepositAmount, uint256 tbtcAmount, ) = _finalizeDeposit( - depositKey - ); + // solhint-disable-next-line not-rely-on-time + request.bridgingFinalizedAt = uint32(block.timestamp); + + // TODO: Don't store the referral, but read it from extraData + ( + uint256 initialDepositAmount, + uint256 tbtcAmount, + bytes32 extraData + ) = _finalizeDeposit(depositKey); + + (address receiver, uint16 referral) = decodeExtraData(extraData); // Compute depositor fee. The fee is calculated based on the initial funding // transaction amount, before the tBTC protocol network fees were taken. @@ -250,12 +294,12 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { revert DepositorFeeExceedsBridgedAmount(depositorFee, tbtcAmount); } - request.amountToStake = tbtcAmount - depositorFee; + uint256 amountToStake = tbtcAmount - depositorFee; emit BridgingCompleted( depositKey, msg.sender, - request.referral, + referral, tbtcAmount, depositorFee ); @@ -264,6 +308,8 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { if (depositorFee > 0) { tbtcToken.safeTransfer(stbtc.treasury(), depositorFee); } + + return (amountToStake, receiver); } /// @notice This function should be called for previously initialized stake @@ -271,79 +317,97 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// It stakes the tBTC from the given deposit into stBTC, emitting the /// stBTC shares to the receiver specified in the deposit extra data /// and using the referral provided in the extra data. - /// @dev This function is expected to be called after `notifyBridgingCompleted`. - /// In case depositing in stBTC vault fails (e.g. because of the - /// maximum deposit limit being reached), the function should be retried + /// @dev In case depositing in stBTC vault fails (e.g. because of the + /// maximum deposit limit being reached), the `queueForStaking` function + /// should be called to add the stake request to the staking queue. + /// @param depositKey Deposit key identifying the deposit. + function finalizeStakeRequest(uint256 depositKey) public { + (uint256 amountToStake, address receiver) = finalizeBridging( + depositKey + ); + + emit StakeRequestFinalized(depositKey, msg.sender, amountToStake); + + // solhint-disable-next-line not-rely-on-time + stakeRequests[depositKey].finalizedAt = uint32(block.timestamp); + + // Deposit tBTC in stBTC. + tbtcToken.safeIncreaseAllowance(address(stbtc), amountToStake); + // slither-disable-next-line unused-return + stbtc.deposit(amountToStake, receiver); + } + + /// @notice This function should be called for previously initialized stake + /// request, after tBTC bridging process was finalized, in case the + /// `finalizeStakeRequest` failed due to stBTC vault deposit limit + /// being reached. + /// @dev It queues the stake request, until the stBTC vault is ready to + /// accept the deposit. The request must be finalized with `stakeFromQueue` /// after the limit is increased or other user withdraws their funds /// from the stBTC contract to make place for another deposit. - /// The staker has a possibility to submit `recallStakeRequest` that + /// The staker has a possibility to submit `recallFromQueue` that /// will withdraw the minted tBTC token and abort staking process. /// @param depositKey Deposit key identifying the deposit. - function finalizeStakeRequest(uint256 depositKey) public { + function queueForStaking(uint256 depositKey) external { StakeRequest storage request = stakeRequests[depositKey]; - if (request.amountToStake == 0) revert BridgingNotCompleted(); - if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); - if (request.recalledAt > 0) revert StakeRequestAlreadyRecalled(); + (request.queuedAmount, request.receiver) = finalizeBridging(depositKey); + + emit StakeRequestQueued(depositKey, msg.sender, request.queuedAmount); + } + + /// @notice This function should be called for previously queued stake + /// request, when stBTC vault is able to accept a deposit. + /// @param depositKey Deposit key identifying the deposit. + function stakeFromQueue(uint256 depositKey) external { + StakeRequest storage request = stakeRequests[depositKey]; + + if (request.queuedAmount == 0) revert StakeRequestNotQueued(); + + uint256 amountToStake = request.queuedAmount; + delete (request.queuedAmount); // solhint-disable-next-line not-rely-on-time - request.finalizedAt = uint64(block.timestamp); + request.finalizedAt = uint32(block.timestamp); - emit StakeRequestFinalized( + emit StakeRequestFinalizedFromQueue( depositKey, msg.sender, - request.amountToStake + amountToStake ); // Deposit tBTC in stBTC. - tbtcToken.safeIncreaseAllowance(address(stbtc), request.amountToStake); + tbtcToken.safeIncreaseAllowance(address(stbtc), amountToStake); // slither-disable-next-line unused-return - stbtc.deposit(request.amountToStake, request.receiver); + stbtc.deposit(amountToStake, request.receiver); } - /// @notice This function combines execution of `notifyBridgingCompleted` and - /// `finalizeStakeRequest` in one transaction. - /// @dev It should be used by default to finalize staking process after minting - /// tBTC. Execution may fail at the very end of `stbtc.deposit` call - /// due to reaching a max deposit limit. In such case only `notifyBridgingCompleted` - /// should be executed, and once stBTC contract is ready to accept new - /// deposit the `finalizeStakeRequest` function should be executed. - /// @param depositKey Deposit key identifying the deposit. - function notifyBridgingCompletedAndFinalizeStakeRequest( - uint256 depositKey - ) external { - notifyBridgingCompleted(depositKey); - finalizeStakeRequest(depositKey); - } - - /// @notice Recall bridged tBTC tokens from being requested to stake. This + /// @notice Recall bridged tBTC tokens from the staking queue. This /// function can be called by the staker to recover tBTC that cannot /// be finalized to stake in stBTC contract due to a deposit limit being /// reached. - /// @dev This function can be called only after bridging in tBTC Bridge was - /// completed. Only receiver provided in the extra data of the stake - /// request can call this function. + /// @dev This function can be called only after the stake request was added + /// to queue. + /// @dev Only receiver provided in the extra data of the stake request can + /// call this function. /// @param depositKey Deposit key identifying the deposit. - function recallStakeRequest(uint256 depositKey) external { + function recallFromQueue(uint256 depositKey) external { StakeRequest storage request = stakeRequests[depositKey]; - if (request.amountToStake == 0) revert BridgingNotCompleted(); - if (request.finalizedAt > 0) revert StakeRequestAlreadyFinalized(); - if (request.recalledAt > 0) revert StakeRequestAlreadyRecalled(); + if (request.queuedAmount == 0) revert StakeRequestNotQueued(); // Check if caller is the receiver. if (msg.sender != request.receiver) revert CallerNotReceiver(); + uint256 amount = request.queuedAmount; + delete (request.queuedAmount); + // solhint-disable-next-line not-rely-on-time - request.recalledAt = uint64(block.timestamp); + request.recalledAt = uint32(block.timestamp); - emit StakeRequestRecalled( - depositKey, - request.receiver, - request.amountToStake - ); + emit StakeRequestRecalled(depositKey, request.receiver, amount); - tbtcToken.safeTransfer(request.receiver, request.amountToStake); + tbtcToken.safeTransfer(request.receiver, amount); } /// @notice Updates the depositor fee divisor. From c95f17a67ff0678a456170e37dff18034a1f9209 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 13 Feb 2024 13:41:45 +0100 Subject: [PATCH 075/122] Update unit tests after queue updates --- core/contracts/test/TbtcDepositor.t.sol | 22 + core/deploy/03_deploy_tbtc_depositor.ts | 4 + core/package.json | 2 +- core/test/TbtcDepositor.test.ts | 747 ++++++++++++++++-------- core/test/helpers/context.ts | 4 +- 5 files changed, 527 insertions(+), 252 deletions(-) create mode 100644 core/contracts/test/TbtcDepositor.t.sol diff --git a/core/contracts/test/TbtcDepositor.t.sol b/core/contracts/test/TbtcDepositor.t.sol new file mode 100644 index 000000000..4f625e5e6 --- /dev/null +++ b/core/contracts/test/TbtcDepositor.t.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {TbtcDepositor} from "../TbtcDepositor.sol"; + +/// @dev A test contract to expose internal function from TbtcDepositor contract. +/// This solution follows Foundry recommendation: +/// https://book.getfoundry.sh/tutorials/best-practices#internal-functions +contract TbtcDepositorHarness is TbtcDepositor { + constructor( + address _bridge, + address _tbtcVault, + address _tbtcToken, + address _stbtc + ) TbtcDepositor(_bridge, _tbtcVault, _tbtcToken, _stbtc) {} + + function exposed_finalizeBridging( + uint256 depositKey + ) external returns (uint256 amountToStake, address receiver) { + return finalizeBridging(depositKey); + } +} diff --git a/core/deploy/03_deploy_tbtc_depositor.ts b/core/deploy/03_deploy_tbtc_depositor.ts index ae7b60039..ecfa99dfe 100644 --- a/core/deploy/03_deploy_tbtc_depositor.ts +++ b/core/deploy/03_deploy_tbtc_depositor.ts @@ -11,6 +11,10 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const stbtc = await deployments.get("stBTC") await deployments.deploy("TbtcDepositor", { + contract: + process.env.HARDHAT_TEST === "true" + ? "TbtcDepositorHarness" + : "TbtcDepositor", from: deployer, args: [bridge.address, tbtcVault.address, tbtc.address, stbtc.address], log: true, diff --git a/core/package.json b/core/package.json index 0d490f806..096cdb9c5 100644 --- a/core/package.json +++ b/core/package.json @@ -26,7 +26,7 @@ "lint:sol:fix": "solhint 'contracts/**/*.sol' --fix && prettier --write 'contracts/**/*.sol'", "lint:config": "prettier --check '**/*.@(json)'", "lint:config:fix": "prettier --write '**/*.@(json)'", - "test": "hardhat test" + "test": "HARDHAT_TEST=true hardhat test" }, "devDependencies": { "@keep-network/hardhat-helpers": "^0.7.1", diff --git a/core/test/TbtcDepositor.test.ts b/core/test/TbtcDepositor.test.ts index ba195540f..432ead468 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/TbtcDepositor.test.ts @@ -10,7 +10,7 @@ import type { StBTC, BridgeStub, TBTCVaultStub, - TbtcDepositor, + TbtcDepositorHarness, TestERC20, } from "../typechain" import { deployment } from "./helpers" @@ -42,9 +42,9 @@ describe("TbtcDepositor", () => { const initialDepositAmount = to1ePrecision(10000, 10) // 10000 satoshi const bridgedTbtcAmount = to1ePrecision(897501, 8) // 8975,01 satoshi const depositorFee = to1ePrecision(10, 10) // 10 satoshi - const amountToStake = to1ePrecision(896501, 8) // 8850,01 satoshi + const amountToStake = to1ePrecision(896501, 8) // 8965,01 satoshi - let tbtcDepositor: TbtcDepositor + let tbtcDepositor: TbtcDepositorHarness let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub let stbtc: StBTC @@ -154,26 +154,30 @@ describe("TbtcDepositor", () => { ) }) - it("should store request data", async () => { + it("should not store stake request data", async () => { const storedStakeRequest = await tbtcDepositor.stakeRequests( tbtcDepositData.depositKey, ) + expect( + storedStakeRequest.bridgingFinalizedAt, + "invalid bridgingFinalizedAt", + ).to.be.equal(0) expect( storedStakeRequest.finalizedAt, "invalid finalizedAt", ).to.be.equal(0) + expect( + storedStakeRequest.recalledAt, + "invalid recalledAt", + ).to.be.equal(0) expect( storedStakeRequest.receiver, "invalid receiver", - ).to.be.equal(tbtcDepositData.receiver) + ).to.be.equal(ZeroAddress) expect( - storedStakeRequest.referral, - "invalid referral", - ).to.be.equal(tbtcDepositData.referral) - expect( - storedStakeRequest.amountToStake, - "invalid amountToStake", + storedStakeRequest.queuedAmount, + "invalid queuedAmount", ).to.be.equal(0) }) @@ -182,6 +186,11 @@ describe("TbtcDepositor", () => { tbtcDepositData.depositKey, ) + expect( + storedRevealedDeposit.revealedAt, + "invalid revealedAt", + ).to.be.equal(await lastBlockTime()) + expect( storedRevealedDeposit.extraData, "invalid extraData", @@ -236,11 +245,71 @@ describe("TbtcDepositor", () => { await initializeStakeRequest() // Simulate deposit request finalization. - await finalizeBridging(tbtcDepositData.depositKey) + await finalizeMinting(tbtcDepositData.depositKey) await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + .finalizeStakeRequest(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ), + ).to.be.revertedWith("Deposit already revealed") + }) + }) + + describe("when stake request is already queued", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStakeRequest() + + // Simulate deposit request finalization. + await finalizeMinting(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .initializeStakeRequest( + tbtcDepositData.fundingTxInfo, + tbtcDepositData.reveal, + tbtcDepositData.receiver, + tbtcDepositData.referral, + ), + ).to.be.revertedWith("Deposit already revealed") + }) + }) + + describe("when stake request is already recalled", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStakeRequest() + + // Simulate deposit request finalization. + await finalizeMinting(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -259,13 +328,13 @@ describe("TbtcDepositor", () => { }) }) - describe("notifyBridgingCompleted", () => { + describe("finalizeBridging", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), + .exposed_finalizeBridging(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not initialized") }) }) @@ -282,7 +351,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), + .exposed_finalizeBridging(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") }) }) @@ -292,19 +361,24 @@ describe("TbtcDepositor", () => { before(async () => { // Simulate deposit request finalization. - await finalizeBridging(tbtcDepositData.depositKey) + await finalizeMinting(tbtcDepositData.depositKey) }) - describe("when bridging completion has not been notified", () => { + describe("when bridging finalization has not been called", () => { describe("when depositor fee divisor is not zero", () => { beforeAfterSnapshotWrapper() + let returnedValue: bigint let tx: ContractTransactionResponse before(async () => { + returnedValue = await tbtcDepositor + .connect(thirdParty) + .exposed_finalizeBridging.staticCall(tbtcDepositData.depositKey) + tx = await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + .exposed_finalizeBridging(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { @@ -319,11 +393,19 @@ describe("TbtcDepositor", () => { ) }) - it("should store amount to stake", async () => { + it("should return amount to stake", () => { + expect(returnedValue[0]).to.be.equal(amountToStake) + }) + + it("should return receiver", () => { + expect(returnedValue[1]).to.be.equal(tbtcDepositData.receiver) + }) + + it("should set bridgingFinalizedAt timestamp", async () => { expect( (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .amountToStake, - ).to.be.equal(amountToStake) + .bridgingFinalizedAt, + ).to.be.equal(await lastBlockTime()) }) it("should transfer depositor fee", async () => { @@ -338,6 +420,7 @@ describe("TbtcDepositor", () => { describe("when depositor fee divisor is zero", () => { beforeAfterSnapshotWrapper() + let returnedValue: bigint let tx: ContractTransactionResponse before(async () => { @@ -345,9 +428,13 @@ describe("TbtcDepositor", () => { .connect(governance) .updateDepositorFeeDivisor(0) + returnedValue = await tbtcDepositor + .connect(thirdParty) + .exposed_finalizeBridging.staticCall(tbtcDepositData.depositKey) + tx = await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + .exposed_finalizeBridging(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { @@ -362,14 +449,22 @@ describe("TbtcDepositor", () => { ) }) - it("should store amount to stake", async () => { + it("should return amount to stake", () => { + expect(returnedValue[0]).to.be.equal(bridgedTbtcAmount) + }) + + it("should return receiver", () => { + expect(returnedValue[1]).to.be.equal(tbtcDepositData.receiver) + }) + + it("should set bridgingFinalizedAt timestamp", async () => { expect( (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .amountToStake, - ).to.be.equal(bridgedTbtcAmount) + .bridgingFinalizedAt, + ).to.be.equal(await lastBlockTime()) }) - it("should transfer depositor fee", async () => { + it("should not transfer depositor fee", async () => { await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) }) }) @@ -387,7 +482,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), + .exposed_finalizeBridging(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( tbtcDepositor, @@ -398,47 +493,25 @@ describe("TbtcDepositor", () => { }) }) - describe("when bridging completion has been notified", () => { + describe("when bridging finalization has been called", () => { beforeAfterSnapshotWrapper() before(async () => { // Notify bridging completed. await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + .exposed_finalizeBridging(tbtcDepositData.depositKey) }) - describe("when stake request has not been finalized", () => { - it("should revert", async () => { - await expect( - tbtcDepositor - .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "BridgingCompletionAlreadyNotified", - ) - }) - }) - - describe("when stake request has been finalized", () => { - before(async () => { - // Notify bridging completed. - await tbtcDepositor + it("should revert", async () => { + await expect( + tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) - }) - - it("should revert", async () => { - await expect( - tbtcDepositor - .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "BridgingCompletionAlreadyNotified", - ) - }) + .exposed_finalizeBridging(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", + ) }) }) }) @@ -454,7 +527,7 @@ describe("TbtcDepositor", () => { tbtcDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + ).to.be.revertedWith("Deposit not initialized") }) }) @@ -465,28 +538,22 @@ describe("TbtcDepositor", () => { await initializeStakeRequest() }) - describe("when bridging completion has not been notified", () => { - beforeAfterSnapshotWrapper() - + describe("when deposit was not bridged", () => { it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + ).to.be.revertedWith("Deposit not finalized by the bridge") }) }) - describe("when bridging completion has been notified", () => { + describe("when deposit was bridged", () => { beforeAfterSnapshotWrapper() before(async () => { // Simulate deposit request finalization. - await finalizeBridging(tbtcDepositData.depositKey) - - await tbtcDepositor - .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + await finalizeMinting(tbtcDepositData.depositKey) }) describe("when stake request has not been finalized", () => { @@ -503,6 +570,26 @@ describe("TbtcDepositor", () => { .finalizeStakeRequest(tbtcDepositData.depositKey) }) + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + depositorFee, + ) + }) + + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [treasury], + [depositorFee], + ) + }) + it("should set finalizedAt timestamp", async () => { expect( (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) @@ -548,24 +635,68 @@ describe("TbtcDepositor", () => { }) }) - describe("when stake request has been recalled", () => { + describe("when stake request has been queued", () => { beforeAfterSnapshotWrapper() before(async () => { await tbtcDepositor - .connect(receiver) - .recallStakeRequest(tbtcDepositData.depositKey) + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey) }) - it("should revert", async () => { - await expect( - tbtcDepositor + describe("when stake request is still in the queue", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", + ) + }) + }) + + describe("when stake request is finalized from the queue", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - tbtcDepositor, - "StakeRequestAlreadyRecalled", - ) + .stakeFromQueue(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", + ) + }) + }) + + describe("when stake request has been recalled", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .finalizeStakeRequest(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", + ) + }) }) }) @@ -586,7 +717,7 @@ describe("TbtcDepositor", () => { .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "StakeRequestAlreadyFinalized", + "BridgingFinalizationAlreadyCalled", ) }) }) @@ -594,15 +725,15 @@ describe("TbtcDepositor", () => { }) }) - describe("notifyBridgingCompletedAndFinalizeStakeRequest", () => { + describe("queueForStaking", () => { + beforeAfterSnapshotWrapper() + describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ), + .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not initialized") }) }) @@ -619,9 +750,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ), + .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") }) }) @@ -631,211 +760,324 @@ describe("TbtcDepositor", () => { before(async () => { // Simulate deposit request finalization. - await finalizeBridging(tbtcDepositData.depositKey) + await finalizeMinting(tbtcDepositData.depositKey) }) - describe("when bridging completion has not been notified and finalized", () => { - describe("when depositor fee divisor is not zero", () => { - beforeAfterSnapshotWrapper() + describe("when stake request has not been finalized", () => { + beforeAfterSnapshotWrapper() - const expectedAssetsAmount = amountToStake - const expectedReceivedSharesAmount = amountToStake + let tx: ContractTransactionResponse - let tx: ContractTransactionResponse + before(async () => { + tx = await tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey) + }) - before(async () => { - tx = await tbtcDepositor - .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ) - }) + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + depositorFee, + ) + }) - it("should emit BridgingCompleted event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - tbtcDepositData.referral, - bridgedTbtcAmount, - depositorFee, - ) - }) + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [treasury], + [depositorFee], + ) + }) - it("should store amount to stake", async () => { - expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .amountToStake, - ).to.be.equal(amountToStake) - }) + it("should not set finalizedAt timestamp", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .finalizedAt, + ).to.be.equal(0) + }) - it("should transfer depositor fee", async () => { - await expect(tx).to.changeTokenBalances( - tbtc, - [treasury], - [depositorFee], + it("should set receiver", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .receiver, + ).to.be.equal(tbtcDepositData.receiver) + }) + + it("should set queuedAmount", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .queuedAmount, + ).to.be.equal(amountToStake) + }) + + it("should not emit StakeRequestQueued event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeRequestQueued") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + amountToStake, ) - }) + }) - it("should set finalizedAt timestamp", async () => { - expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .finalizedAt, - ).to.be.equal(await lastBlockTime()) - }) + it("should not emit StakeRequestFinalized event", async () => { + await expect(tx).to.not.emit(tbtcDepositor, "StakeRequestFinalized") + }) - it("should emit StakeRequestFinalized event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "StakeRequestFinalized") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - expectedAssetsAmount, - ) - }) + it("should not emit Deposit event", async () => { + await expect(tx).to.not.emit(stbtc, "Deposit") + }) - it("should emit Deposit event", async () => { - await expect(tx) - .to.emit(stbtc, "Deposit") - .withArgs( - await tbtcDepositor.getAddress(), - tbtcDepositData.receiver, - expectedAssetsAmount, - expectedReceivedSharesAmount, - ) - }) + it("should not stake in Acre contract", async () => { + await expect( + tx, + "invalid minted stBTC amount", + ).to.changeTokenBalances(stbtc, [tbtcDepositData.receiver], [0]) - it("should stake in Acre contract", async () => { - await expect( - tx, - "invalid minted stBTC amount", - ).to.changeTokenBalances( - stbtc, - [tbtcDepositData.receiver], - [expectedReceivedSharesAmount], - ) + await expect( + tx, + "invalid staked tBTC amount", + ).to.changeTokenBalances(tbtc, [stbtc], [0]) + }) + }) + + describe("when stake request has been queued", () => { + beforeAfterSnapshotWrapper() + before(async () => { + await tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey) + }) + + describe("when stake request is still in the queue", () => { + it("should revert", async () => { await expect( - tx, - "invalid staked tBTC amount", - ).to.changeTokenBalances(tbtc, [stbtc], [expectedAssetsAmount]) + tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", + ) }) }) - describe("when depositor fee divisor is zero", () => { + describe("when stake request is finalized from the queue", () => { beforeAfterSnapshotWrapper() - let tx: ContractTransactionResponse - before(async () => { await tbtcDepositor - .connect(governance) - .updateDepositorFeeDivisor(0) - - tx = await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ) - }) - - it("should emit BridgingCompleted event", async () => { - await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - tbtcDepositData.referral, - bridgedTbtcAmount, - 0, - ) + .stakeFromQueue(tbtcDepositData.depositKey) }) - it("should store amount to stake", async () => { - expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .amountToStake, - ).to.be.equal(bridgedTbtcAmount) - }) - - it("should transfer depositor fee", async () => { - await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", + ) }) }) - describe("when depositor fee exceeds bridged amount", () => { + describe("when stake request has been recalled", () => { beforeAfterSnapshotWrapper() before(async () => { await tbtcDepositor - .connect(governance) - .updateDepositorFeeDivisor(1) + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ), + .queueForStaking(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "BridgingFinalizationAlreadyCalled", ) - .to.be.revertedWithCustomError( - tbtcDepositor, - "DepositorFeeExceedsBridgedAmount", - ) - .withArgs(initialDepositAmount, bridgedTbtcAmount) }) }) }) - describe("when bridging completion has been notified", () => { + describe("when stake request has been finalized", () => { beforeAfterSnapshotWrapper() before(async () => { - // Notify bridging completed. + // Finalize stake request. await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ), + .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "BridgingCompletionAlreadyNotified", + "BridgingFinalizationAlreadyCalled", ) }) }) + }) + }) + }) + + describe("stakeFromQueue", () => { + describe("when stake request has not been initialized", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(receiver) + .stakeFromQueue(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError(tbtcDepositor, "StakeRequestNotQueued") + }) + }) + + describe("when stake request has been initialized", () => { + describe("when stake request has not been queued", () => { + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .stakeFromQueue(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestNotQueued", + ) + }) + }) - describe("when bridging completion has been notified and finalized", () => { + describe("when stake request has been queued", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStakeRequest() + + await finalizeMinting(tbtcDepositData.depositKey) + + await tbtcDepositor + .connect(thirdParty) + .queueForStaking(tbtcDepositData.depositKey) + }) + + describe("when stake request has not been finalized", () => { beforeAfterSnapshotWrapper() + const expectedAssetsAmount = amountToStake + const expectedReceivedSharesAmount = amountToStake + + let tx: ContractTransactionResponse + before(async () => { - // Notify bridging completed. - await tbtcDepositor + tx = await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( + .stakeFromQueue(tbtcDepositData.depositKey) + }) + + it("should set finalizedAt timestamp", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .finalizedAt, + ).to.be.equal(await lastBlockTime()) + }) + + it("should set queuedAmount to zero", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .queuedAmount, + ).to.be.equal(0) + }) + + it("should emit StakeRequestFinalizedFromQueue event", async () => { + await expect(tx) + .to.emit(tbtcDepositor, "StakeRequestFinalizedFromQueue") + .withArgs( tbtcDepositData.depositKey, + thirdParty.address, + expectedAssetsAmount, ) }) + it("should emit Deposit event", async () => { + await expect(tx) + .to.emit(stbtc, "Deposit") + .withArgs( + await tbtcDepositor.getAddress(), + tbtcDepositData.receiver, + expectedAssetsAmount, + expectedReceivedSharesAmount, + ) + }) + + it("should stake in Acre contract", async () => { + await expect( + tx, + "invalid minted stBTC amount", + ).to.changeTokenBalances( + stbtc, + [tbtcDepositData.receiver], + [expectedReceivedSharesAmount], + ) + + await expect( + tx, + "invalid staked tBTC amount", + ).to.changeTokenBalances(tbtc, [stbtc], [expectedAssetsAmount]) + }) + }) + + describe("when stake request has been finalized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(thirdParty) + .stakeFromQueue(tbtcDepositData.depositKey) + }) + it("should revert", async () => { await expect( tbtcDepositor .connect(thirdParty) - .notifyBridgingCompletedAndFinalizeStakeRequest( - tbtcDepositData.depositKey, - ), + .stakeFromQueue(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestNotQueued", + ) + }) + }) + + describe("when stake request has been recalled", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await tbtcDepositor + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey) + }) + + it("should revert", async () => { + await expect( + tbtcDepositor + .connect(thirdParty) + .stakeFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "BridgingCompletionAlreadyNotified", + "StakeRequestNotQueued", ) }) }) @@ -843,14 +1085,14 @@ describe("TbtcDepositor", () => { }) }) - describe("recallStakeRequest", () => { + describe("recallFromQueue", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( tbtcDepositor .connect(receiver) - .recallStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + .recallFromQueue(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError(tbtcDepositor, "StakeRequestNotQueued") }) }) @@ -861,28 +1103,30 @@ describe("TbtcDepositor", () => { await initializeStakeRequest() }) - describe("when bridging completion has not been notified", () => { + describe("when stake request has not been queued", () => { beforeAfterSnapshotWrapper() it("should revert", async () => { await expect( tbtcDepositor - .connect(thirdParty) - .recallStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError(tbtcDepositor, "BridgingNotCompleted") + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey), + ).to.be.revertedWithCustomError( + tbtcDepositor, + "StakeRequestNotQueued", + ) }) }) - describe("when bridging completion has been notified", () => { + describe("when stake request has been queued", () => { beforeAfterSnapshotWrapper() before(async () => { - // Simulate deposit request finalization. - await finalizeBridging(tbtcDepositData.depositKey) + await finalizeMinting(tbtcDepositData.depositKey) await tbtcDepositor .connect(thirdParty) - .notifyBridgingCompleted(tbtcDepositData.depositKey) + .queueForStaking(tbtcDepositData.depositKey) }) describe("when stake request has not been recalled", () => { @@ -891,7 +1135,7 @@ describe("TbtcDepositor", () => { await expect( tbtcDepositor .connect(thirdParty) - .recallStakeRequest(tbtcDepositData.depositKey), + .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, "CallerNotReceiver", @@ -907,7 +1151,7 @@ describe("TbtcDepositor", () => { before(async () => { tx = await tbtcDepositor .connect(receiver) - .recallStakeRequest(tbtcDepositData.depositKey) + .recallFromQueue(tbtcDepositData.depositKey) }) it("should set recalledAt timestamp", async () => { @@ -917,6 +1161,13 @@ describe("TbtcDepositor", () => { ).to.be.equal(await lastBlockTime()) }) + it("should set queuedAmount to zero", async () => { + expect( + (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + .queuedAmount, + ).to.be.equal(0) + }) + it("should emit StakeRequestRecalled event", async () => { await expect(tx) .to.emit(tbtcDepositor, "StakeRequestRecalled") @@ -937,46 +1188,44 @@ describe("TbtcDepositor", () => { }) }) - describe("when stake request has been recalled", () => { + describe("when stake request has been finalized", () => { beforeAfterSnapshotWrapper() before(async () => { - // Finalize stake request. await tbtcDepositor - .connect(receiver) - .recallStakeRequest(tbtcDepositData.depositKey) + .connect(thirdParty) + .stakeFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( tbtcDepositor - .connect(thirdParty) - .recallStakeRequest(tbtcDepositData.depositKey), + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "StakeRequestAlreadyRecalled", + "StakeRequestNotQueued", ) }) }) - describe("when stake request has been finalized", () => { + describe("when stake request has been recalled", () => { beforeAfterSnapshotWrapper() before(async () => { - // Finalize stake request. await tbtcDepositor - .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( tbtcDepositor - .connect(thirdParty) - .recallStakeRequest(tbtcDepositData.depositKey), + .connect(receiver) + .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( tbtcDepositor, - "StakeRequestAlreadyFinalized", + "StakeRequestNotQueued", ) }) }) @@ -1158,7 +1407,7 @@ describe("TbtcDepositor", () => { ) } - async function finalizeBridging(depositKey: bigint) { + async function finalizeMinting(depositKey: bigint) { await tbtcVault.createOptimisticMintingRequest(depositKey) // Simulate deposit request finalization via optimistic minting. diff --git a/core/test/helpers/context.ts b/core/test/helpers/context.ts index b53453d67..4187aac73 100644 --- a/core/test/helpers/context.ts +++ b/core/test/helpers/context.ts @@ -5,7 +5,7 @@ import type { StBTC as stBTC, Dispatcher, TestERC20, - TbtcDepositor, + TbtcDepositorHarness, BridgeStub, TestERC4626, TBTCVaultStub, @@ -16,7 +16,7 @@ export async function deployment() { await deployments.fixture() const stbtc: stBTC = await getDeployedContract("stBTC") - const tbtcDepositor: TbtcDepositor = + const tbtcDepositor: TbtcDepositorHarness = await getDeployedContract("TbtcDepositor") const tbtc: TestERC20 = await getDeployedContract("TBTC") From 7741b92f54333a91e7f6498b38585d6f002dad9f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 13 Feb 2024 13:43:41 +0100 Subject: [PATCH 076/122] Update function order in TbtcDepositor contract --- core/contracts/TbtcDepositor.sol | 127 +++++++++++++++---------------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/TbtcDepositor.sol index 05d01c5e5..ebd2da18c 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/TbtcDepositor.sol @@ -249,69 +249,6 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { emit StakeRequestInitialized(depositKey, msg.sender, receiver); } - /// @notice This function should be called for previously initialized stake - /// request, after tBTC minting process completed, meaning tBTC was - /// minted to this contract. - /// @dev It calculates the amount to stake based on the approximate minted - /// tBTC amount reduced by the depositor fee. - /// @dev IMPORTANT NOTE: The minted tBTC amount used by this function is an - /// approximation. See documentation of the - /// {{TBTCDepositorProxy#_calculateTbtcAmount}} responsible for calculating - /// this value for more details. - /// @param depositKey Deposit key identifying the deposit. - /// @return amountToStake tBTC token amount to stake after deducting tBTC bridging - /// fees and the depositor fee. - /// @return receiver The address to which the stBTC shares will be minted. - function finalizeBridging( - uint256 depositKey - ) internal returns (uint256, address) { - StakeRequest storage request = stakeRequests[depositKey]; - - if (request.bridgingFinalizedAt > 0) - revert BridgingFinalizationAlreadyCalled(); - - // solhint-disable-next-line not-rely-on-time - request.bridgingFinalizedAt = uint32(block.timestamp); - - // TODO: Don't store the referral, but read it from extraData - ( - uint256 initialDepositAmount, - uint256 tbtcAmount, - bytes32 extraData - ) = _finalizeDeposit(depositKey); - - (address receiver, uint16 referral) = decodeExtraData(extraData); - - // Compute depositor fee. The fee is calculated based on the initial funding - // transaction amount, before the tBTC protocol network fees were taken. - uint256 depositorFee = depositorFeeDivisor > 0 - ? (initialDepositAmount / depositorFeeDivisor) - : 0; - - // Ensure the depositor fee does not exceed the approximate minted tBTC - // amount. - if (depositorFee >= tbtcAmount) { - revert DepositorFeeExceedsBridgedAmount(depositorFee, tbtcAmount); - } - - uint256 amountToStake = tbtcAmount - depositorFee; - - emit BridgingCompleted( - depositKey, - msg.sender, - referral, - tbtcAmount, - depositorFee - ); - - // Transfer depositor fee to the treasury wallet. - if (depositorFee > 0) { - tbtcToken.safeTransfer(stbtc.treasury(), depositorFee); - } - - return (amountToStake, receiver); - } - /// @notice This function should be called for previously initialized stake /// request, after tBTC bridging process was finalized. /// It stakes the tBTC from the given deposit into stBTC, emitting the @@ -321,7 +258,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// maximum deposit limit being reached), the `queueForStaking` function /// should be called to add the stake request to the staking queue. /// @param depositKey Deposit key identifying the deposit. - function finalizeStakeRequest(uint256 depositKey) public { + function finalizeStakeRequest(uint256 depositKey) external { (uint256 amountToStake, address receiver) = finalizeBridging( depositKey ); @@ -450,4 +387,66 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { // Next 2 bytes of extra data is referral info. referral = uint16(bytes2(extraData << (8 * 20))); } + + /// @notice This function should be called for previously initialized stake + /// request, after tBTC minting process completed, meaning tBTC was + /// minted to this contract. + /// @dev It calculates the amount to stake based on the approximate minted + /// tBTC amount reduced by the depositor fee. + /// @dev IMPORTANT NOTE: The minted tBTC amount used by this function is an + /// approximation. See documentation of the + /// {{TBTCDepositorProxy#_calculateTbtcAmount}} responsible for calculating + /// this value for more details. + /// @param depositKey Deposit key identifying the deposit. + /// @return amountToStake tBTC token amount to stake after deducting tBTC bridging + /// fees and the depositor fee. + /// @return receiver The address to which the stBTC shares will be minted. + function finalizeBridging( + uint256 depositKey + ) internal returns (uint256, address) { + StakeRequest storage request = stakeRequests[depositKey]; + + if (request.bridgingFinalizedAt > 0) + revert BridgingFinalizationAlreadyCalled(); + + // solhint-disable-next-line not-rely-on-time + request.bridgingFinalizedAt = uint32(block.timestamp); + + ( + uint256 initialDepositAmount, + uint256 tbtcAmount, + bytes32 extraData + ) = _finalizeDeposit(depositKey); + + (address receiver, uint16 referral) = decodeExtraData(extraData); + + // Compute depositor fee. The fee is calculated based on the initial funding + // transaction amount, before the tBTC protocol network fees were taken. + uint256 depositorFee = depositorFeeDivisor > 0 + ? (initialDepositAmount / depositorFeeDivisor) + : 0; + + // Ensure the depositor fee does not exceed the approximate minted tBTC + // amount. + if (depositorFee >= tbtcAmount) { + revert DepositorFeeExceedsBridgedAmount(depositorFee, tbtcAmount); + } + + uint256 amountToStake = tbtcAmount - depositorFee; + + emit BridgingCompleted( + depositKey, + msg.sender, + referral, + tbtcAmount, + depositorFee + ); + + // Transfer depositor fee to the treasury wallet. + if (depositorFee > 0) { + tbtcToken.safeTransfer(stbtc.treasury(), depositorFee); + } + + return (amountToStake, receiver); + } } From a56117e93a632ac7aa7de4ac143a96e48c645f6e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 13 Feb 2024 13:57:20 +0100 Subject: [PATCH 077/122] Rename TbtcDepositor to AcreBitcoinDepositor The name seems more accurate when exposed to user, as they will deposit Bitcoin, and shouldn't care about underlying Tbtc bridging. The name will be aligned with posssible `AcreBitcoinRedeemer` contract when we add unstaking part of contracts. --- ...Depositor.sol => AcreBitcoinDepositor.sol} | 6 +- core/contracts/stBTC.sol | 2 +- ...sitor.t.sol => AcreBitcoinDepositor.t.sol} | 8 +- ...ts => 03_deploy_acre_bitcoin_depositor.ts} | 8 +- ...nsfer_ownership_acre_bitcoin_depositor.ts} | 12 +- ...r.test.ts => AcreBitcoinDepositor.test.ts} | 278 ++++++++++-------- core/test/helpers/context.ts | 8 +- 7 files changed, 175 insertions(+), 147 deletions(-) rename core/contracts/{TbtcDepositor.sol => AcreBitcoinDepositor.sol} (99%) rename core/contracts/test/{TbtcDepositor.t.sol => AcreBitcoinDepositor.t.sol} (63%) rename core/deploy/{03_deploy_tbtc_depositor.ts => 03_deploy_acre_bitcoin_depositor.ts} (83%) rename core/deploy/{23_transfer_ownership_tbtc_depositor.ts => 23_transfer_ownership_acre_bitcoin_depositor.ts} (72%) rename core/test/{TbtcDepositor.test.ts => AcreBitcoinDepositor.test.ts} (86%) diff --git a/core/contracts/TbtcDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol similarity index 99% rename from core/contracts/TbtcDepositor.sol rename to core/contracts/AcreBitcoinDepositor.sol index ebd2da18c..87d546e58 100644 --- a/core/contracts/TbtcDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -12,7 +12,7 @@ import {stBTC} from "./stBTC.sol"; // TODO: Add Missfund token protection. // TODO: Make Upgradable -/// @title tBTC Depositor contract. +/// @title Acre Bitcoin Depositor contract. /// @notice The contract integrates Acre staking with tBTC minting. /// User who wants to stake BTC in Acre should submit a Bitcoin transaction /// to the most recently created off-chain ECDSA wallets of the tBTC Bridge @@ -36,7 +36,7 @@ import {stBTC} from "./stBTC.sol"; /// Depositor address. After tBTC is minted to the Depositor, on the stake /// finalization tBTC is staked in stBTC contract and stBTC shares are emitted /// to the receiver pointed by the staker. -contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { +contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { using SafeERC20 for IERC20; struct StakeRequest { @@ -189,7 +189,7 @@ contract TbtcDepositor is AbstractTBTCDepositor, Ownable2Step { /// @dev Attempted to call function by an account that is not the receiver. error CallerNotReceiver(); - /// @notice Tbtc Depositor contract constructor. + /// @notice Acre Bitcoin Depositor contract constructor. /// @param _bridge tBTC Bridge contract instance. /// @param _tbtcVault tBTC Vault contract instance. /// @param _stbtc stBTC contract instance. diff --git a/core/contracts/stBTC.sol b/core/contracts/stBTC.sol index 259710741..2735ed623 100644 --- a/core/contracts/stBTC.sol +++ b/core/contracts/stBTC.sol @@ -31,7 +31,7 @@ contract stBTC is ERC4626Fees, Ownable2Step { uint256 public entryFeeBasisPoints; /// Minimum amount for a single deposit operation. The value should be set - /// low enough so the deposits routed through TbtcDepositor contract won't + /// low enough so the deposits routed through Bitcoin Depositor contract won't /// be rejected. It means that minimumDepositAmount should be lower than /// tBTC protocol's depositDustThreshold reduced by all the minting fees taken /// before depositing in the Acre contract. diff --git a/core/contracts/test/TbtcDepositor.t.sol b/core/contracts/test/AcreBitcoinDepositor.t.sol similarity index 63% rename from core/contracts/test/TbtcDepositor.t.sol rename to core/contracts/test/AcreBitcoinDepositor.t.sol index 4f625e5e6..f7a561423 100644 --- a/core/contracts/test/TbtcDepositor.t.sol +++ b/core/contracts/test/AcreBitcoinDepositor.t.sol @@ -1,18 +1,18 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {TbtcDepositor} from "../TbtcDepositor.sol"; +import {AcreBitcoinDepositor} from "../AcreBitcoinDepositor.sol"; -/// @dev A test contract to expose internal function from TbtcDepositor contract. +/// @dev A test contract to expose internal function from AcreBitcoinDepositor contract. /// This solution follows Foundry recommendation: /// https://book.getfoundry.sh/tutorials/best-practices#internal-functions -contract TbtcDepositorHarness is TbtcDepositor { +contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { constructor( address _bridge, address _tbtcVault, address _tbtcToken, address _stbtc - ) TbtcDepositor(_bridge, _tbtcVault, _tbtcToken, _stbtc) {} + ) AcreBitcoinDepositor(_bridge, _tbtcVault, _tbtcToken, _stbtc) {} function exposed_finalizeBridging( uint256 depositKey diff --git a/core/deploy/03_deploy_tbtc_depositor.ts b/core/deploy/03_deploy_acre_bitcoin_depositor.ts similarity index 83% rename from core/deploy/03_deploy_tbtc_depositor.ts rename to core/deploy/03_deploy_acre_bitcoin_depositor.ts index ecfa99dfe..e013f6981 100644 --- a/core/deploy/03_deploy_tbtc_depositor.ts +++ b/core/deploy/03_deploy_acre_bitcoin_depositor.ts @@ -10,11 +10,11 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const tbtc = await deployments.get("TBTC") const stbtc = await deployments.get("stBTC") - await deployments.deploy("TbtcDepositor", { + await deployments.deploy("AcreBitcoinDepositor", { contract: process.env.HARDHAT_TEST === "true" - ? "TbtcDepositorHarness" - : "TbtcDepositor", + ? "AcreBitcoinDepositorHarness" + : "AcreBitcoinDepositor", from: deployer, args: [bridge.address, tbtcVault.address, tbtc.address, stbtc.address], log: true, @@ -27,5 +27,5 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func -func.tags = ["TbtcDepositor"] +func.tags = ["AcreBitcoinDepositor"] func.dependencies = ["TBTC", "stBTC"] diff --git a/core/deploy/23_transfer_ownership_tbtc_depositor.ts b/core/deploy/23_transfer_ownership_acre_bitcoin_depositor.ts similarity index 72% rename from core/deploy/23_transfer_ownership_tbtc_depositor.ts rename to core/deploy/23_transfer_ownership_acre_bitcoin_depositor.ts index fa0494ae0..c04f6f679 100644 --- a/core/deploy/23_transfer_ownership_tbtc_depositor.ts +++ b/core/deploy/23_transfer_ownership_acre_bitcoin_depositor.ts @@ -6,10 +6,12 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { deployer, governance } = await getNamedAccounts() const { log } = deployments - log(`transferring ownership of TbtcDepositor contract to ${governance}`) + log( + `transferring ownership of AcreBitcoinDepositor contract to ${governance}`, + ) await deployments.execute( - "TbtcDepositor", + "AcreBitcoinDepositor", { from: deployer, log: true, waitConfirmations: 1 }, "transferOwnership", governance, @@ -17,7 +19,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { if (hre.network.name !== "mainnet") { await deployments.execute( - "TbtcDepositor", + "AcreBitcoinDepositor", { from: governance, log: true, waitConfirmations: 1 }, "acceptOwnership", ) @@ -26,5 +28,5 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { export default func -func.tags = ["TransferOwnershipTbtcDepositor"] -func.dependencies = ["TbtcDepositor"] +func.tags = ["TransferOwnershipAcreBitcoinDepositor"] +func.dependencies = ["AcreBitcoinDepositor"] diff --git a/core/test/TbtcDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts similarity index 86% rename from core/test/TbtcDepositor.test.ts rename to core/test/AcreBitcoinDepositor.test.ts index 432ead468..3298b183e 100644 --- a/core/test/TbtcDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -10,7 +10,7 @@ import type { StBTC, BridgeStub, TBTCVaultStub, - TbtcDepositorHarness, + AcreBitcoinDepositorHarness, TestERC20, } from "../typechain" import { deployment } from "./helpers" @@ -19,16 +19,16 @@ import { tbtcDepositData } from "./data/tbtc" import { to1ePrecision } from "./utils" async function fixture() { - const { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = + const { bitcoinDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = await deployment() - return { tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } + return { bitcoinDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } } const { lastBlockTime } = helpers.time const { getNamedSigners, getUnnamedSigners } = helpers.signers -describe("TbtcDepositor", () => { +describe("AcreBitcoinDepositor", () => { const defaultDepositTreasuryFeeDivisor = 2000 // 1/2000 = 0.05% = 0.0005 const defaultDepositTxMaxFee = 1000 // 1000 satoshi = 0.00001 BTC const defaultOptimisticFeeDivisor = 500 // 1/500 = 0.002 = 0.2% @@ -44,7 +44,7 @@ describe("TbtcDepositor", () => { const depositorFee = to1ePrecision(10, 10) // 10 satoshi const amountToStake = to1ePrecision(896501, 8) // 8965,01 satoshi - let tbtcDepositor: TbtcDepositorHarness + let bitcoinDepositor: AcreBitcoinDepositorHarness let tbtcBridge: BridgeStub let tbtcVault: TBTCVaultStub let stbtc: StBTC @@ -56,7 +56,7 @@ describe("TbtcDepositor", () => { let receiver: HardhatEthersSigner before(async () => { - ;({ tbtcDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = + ;({ bitcoinDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = await loadFixture(fixture)) ;({ governance, treasury } = await getNamedSigners()) ;[thirdParty] = await getUnnamedSigners() @@ -84,7 +84,7 @@ describe("TbtcDepositor", () => { await tbtcVault .connect(governance) .setOptimisticMintingFeeDivisor(defaultOptimisticFeeDivisor) - await tbtcDepositor + await bitcoinDepositor .connect(governance) .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) @@ -95,13 +95,16 @@ describe("TbtcDepositor", () => { describe("when receiver is zero address", () => { it("should revert", async () => { await expect( - tbtcDepositor.initializeStakeRequest( + bitcoinDepositor.initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, ZeroAddress, 0, ), - ).to.be.revertedWithCustomError(tbtcDepositor, "ReceiverIsZeroAddress") + ).to.be.revertedWithCustomError( + bitcoinDepositor, + "ReceiverIsZeroAddress", + ) }) }) @@ -115,7 +118,7 @@ describe("TbtcDepositor", () => { await ethers.Wallet.createRandom().getAddress() await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -134,7 +137,7 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -146,7 +149,7 @@ describe("TbtcDepositor", () => { it("should emit StakeRequestInitialized event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "StakeRequestInitialized") + .to.emit(bitcoinDepositor, "StakeRequestInitialized") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -155,7 +158,7 @@ describe("TbtcDepositor", () => { }) it("should not store stake request data", async () => { - const storedStakeRequest = await tbtcDepositor.stakeRequests( + const storedStakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -203,7 +206,7 @@ describe("TbtcDepositor", () => { it("should succeed", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -226,7 +229,7 @@ describe("TbtcDepositor", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -247,14 +250,14 @@ describe("TbtcDepositor", () => { // Simulate deposit request finalization. await finalizeMinting(tbtcDepositData.depositKey) - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -275,14 +278,14 @@ describe("TbtcDepositor", () => { // Simulate deposit request finalization. await finalizeMinting(tbtcDepositData.depositKey) - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -303,18 +306,18 @@ describe("TbtcDepositor", () => { // Simulate deposit request finalization. await finalizeMinting(tbtcDepositData.depositKey) - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) - await tbtcDepositor + await bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, @@ -332,7 +335,7 @@ describe("TbtcDepositor", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not initialized") @@ -349,7 +352,7 @@ describe("TbtcDepositor", () => { describe("when deposit was not bridged", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") @@ -372,18 +375,18 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - returnedValue = await tbtcDepositor + returnedValue = await bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging.staticCall(tbtcDepositData.depositKey) - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") + .to.emit(bitcoinDepositor, "BridgingCompleted") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -403,8 +406,11 @@ describe("TbtcDepositor", () => { it("should set bridgingFinalizedAt timestamp", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .bridgingFinalizedAt, + ( + await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + ).bridgingFinalizedAt, ).to.be.equal(await lastBlockTime()) }) @@ -424,22 +430,22 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(governance) .updateDepositorFeeDivisor(0) - returnedValue = await tbtcDepositor + returnedValue = await bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging.staticCall(tbtcDepositData.depositKey) - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") + .to.emit(bitcoinDepositor, "BridgingCompleted") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -459,8 +465,11 @@ describe("TbtcDepositor", () => { it("should set bridgingFinalizedAt timestamp", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .bridgingFinalizedAt, + ( + await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + ).bridgingFinalizedAt, ).to.be.equal(await lastBlockTime()) }) @@ -473,19 +482,19 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(governance) .updateDepositorFeeDivisor(1) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "DepositorFeeExceedsBridgedAmount", ) .withArgs(initialDepositAmount, bridgedTbtcAmount) @@ -498,18 +507,18 @@ describe("TbtcDepositor", () => { before(async () => { // Notify bridging completed. - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -524,7 +533,7 @@ describe("TbtcDepositor", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not initialized") @@ -541,7 +550,7 @@ describe("TbtcDepositor", () => { describe("when deposit was not bridged", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") @@ -565,14 +574,14 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") + .to.emit(bitcoinDepositor, "BridgingCompleted") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -592,14 +601,14 @@ describe("TbtcDepositor", () => { it("should set finalizedAt timestamp", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) .finalizedAt, ).to.be.equal(await lastBlockTime()) }) it("should emit StakeRequestFinalized event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "StakeRequestFinalized") + .to.emit(bitcoinDepositor, "StakeRequestFinalized") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -611,7 +620,7 @@ describe("TbtcDepositor", () => { await expect(tx) .to.emit(stbtc, "Deposit") .withArgs( - await tbtcDepositor.getAddress(), + await bitcoinDepositor.getAddress(), tbtcDepositData.receiver, expectedAssetsAmount, expectedReceivedSharesAmount, @@ -639,7 +648,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) }) @@ -647,11 +656,11 @@ describe("TbtcDepositor", () => { describe("when stake request is still in the queue", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -661,18 +670,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -682,18 +691,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -705,18 +714,18 @@ describe("TbtcDepositor", () => { before(async () => { // Finalize stake request. - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -731,7 +740,7 @@ describe("TbtcDepositor", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not initialized") @@ -748,7 +757,7 @@ describe("TbtcDepositor", () => { describe("when deposit was not bridged", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") @@ -769,14 +778,14 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "BridgingCompleted") + .to.emit(bitcoinDepositor, "BridgingCompleted") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -796,28 +805,28 @@ describe("TbtcDepositor", () => { it("should not set finalizedAt timestamp", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) .finalizedAt, ).to.be.equal(0) }) it("should set receiver", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) .receiver, ).to.be.equal(tbtcDepositData.receiver) }) it("should set queuedAmount", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) .queuedAmount, ).to.be.equal(amountToStake) }) it("should not emit StakeRequestQueued event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "StakeRequestQueued") + .to.emit(bitcoinDepositor, "StakeRequestQueued") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -826,7 +835,10 @@ describe("TbtcDepositor", () => { }) it("should not emit StakeRequestFinalized event", async () => { - await expect(tx).to.not.emit(tbtcDepositor, "StakeRequestFinalized") + await expect(tx).to.not.emit( + bitcoinDepositor, + "StakeRequestFinalized", + ) }) it("should not emit Deposit event", async () => { @@ -850,7 +862,7 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) }) @@ -858,11 +870,11 @@ describe("TbtcDepositor", () => { describe("when stake request is still in the queue", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -872,18 +884,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -893,18 +905,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -916,18 +928,18 @@ describe("TbtcDepositor", () => { before(async () => { // Finalize stake request. - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "BridgingFinalizationAlreadyCalled", ) }) @@ -940,10 +952,13 @@ describe("TbtcDepositor", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(receiver) .stakeFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError(tbtcDepositor, "StakeRequestNotQueued") + ).to.be.revertedWithCustomError( + bitcoinDepositor, + "StakeRequestNotQueued", + ) }) }) @@ -951,11 +966,11 @@ describe("TbtcDepositor", () => { describe("when stake request has not been queued", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "StakeRequestNotQueued", ) }) @@ -969,7 +984,7 @@ describe("TbtcDepositor", () => { await finalizeMinting(tbtcDepositData.depositKey) - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) }) @@ -983,28 +998,28 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey) }) it("should set finalizedAt timestamp", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) .finalizedAt, ).to.be.equal(await lastBlockTime()) }) it("should set queuedAmount to zero", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) + (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) .queuedAmount, ).to.be.equal(0) }) it("should emit StakeRequestFinalizedFromQueue event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "StakeRequestFinalizedFromQueue") + .to.emit(bitcoinDepositor, "StakeRequestFinalizedFromQueue") .withArgs( tbtcDepositData.depositKey, thirdParty.address, @@ -1016,7 +1031,7 @@ describe("TbtcDepositor", () => { await expect(tx) .to.emit(stbtc, "Deposit") .withArgs( - await tbtcDepositor.getAddress(), + await bitcoinDepositor.getAddress(), tbtcDepositData.receiver, expectedAssetsAmount, expectedReceivedSharesAmount, @@ -1044,18 +1059,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "StakeRequestNotQueued", ) }) @@ -1065,18 +1080,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "StakeRequestNotQueued", ) }) @@ -1089,10 +1104,13 @@ describe("TbtcDepositor", () => { describe("when stake request has not been initialized", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError(tbtcDepositor, "StakeRequestNotQueued") + ).to.be.revertedWithCustomError( + bitcoinDepositor, + "StakeRequestNotQueued", + ) }) }) @@ -1108,11 +1126,11 @@ describe("TbtcDepositor", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "StakeRequestNotQueued", ) }) @@ -1124,7 +1142,7 @@ describe("TbtcDepositor", () => { before(async () => { await finalizeMinting(tbtcDepositData.depositKey) - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey) }) @@ -1133,11 +1151,11 @@ describe("TbtcDepositor", () => { describe("when caller is non-receiver", () => { it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(thirdParty) .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "CallerNotReceiver", ) }) @@ -1149,28 +1167,34 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey) }) it("should set recalledAt timestamp", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .recalledAt, + ( + await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + ).recalledAt, ).to.be.equal(await lastBlockTime()) }) it("should set queuedAmount to zero", async () => { expect( - (await tbtcDepositor.stakeRequests(tbtcDepositData.depositKey)) - .queuedAmount, + ( + await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + ).queuedAmount, ).to.be.equal(0) }) it("should emit StakeRequestRecalled event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "StakeRequestRecalled") + .to.emit(bitcoinDepositor, "StakeRequestRecalled") .withArgs( tbtcDepositData.depositKey, receiver.address, @@ -1181,7 +1205,7 @@ describe("TbtcDepositor", () => { it("should transfer tbtc to receiver", async () => { await expect(tx).to.changeTokenBalances( tbtc, - [tbtcDepositor, receiver], + [bitcoinDepositor, receiver], [-amountToStake, amountToStake], ) }) @@ -1192,18 +1216,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "StakeRequestNotQueued", ) }) @@ -1213,18 +1237,18 @@ describe("TbtcDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await tbtcDepositor + await bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( - tbtcDepositor + bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "StakeRequestNotQueued", ) }) @@ -1239,10 +1263,10 @@ describe("TbtcDepositor", () => { describe("when caller is not governance", () => { it("should revert", async () => { await expect( - tbtcDepositor.connect(thirdParty).updateDepositorFeeDivisor(1234), + bitcoinDepositor.connect(thirdParty).updateDepositorFeeDivisor(1234), ) .to.be.revertedWithCustomError( - tbtcDepositor, + bitcoinDepositor, "OwnableUnauthorizedAccount", ) .withArgs(thirdParty.address) @@ -1257,19 +1281,21 @@ describe("TbtcDepositor", () => { let tx: ContractTransactionResponse before(async () => { - tx = await tbtcDepositor + tx = await bitcoinDepositor .connect(governance) .updateDepositorFeeDivisor(newValue) }) it("should emit DepositorFeeDivisorUpdated event", async () => { await expect(tx) - .to.emit(tbtcDepositor, "DepositorFeeDivisorUpdated") + .to.emit(bitcoinDepositor, "DepositorFeeDivisorUpdated") .withArgs(newValue) }) it("should update value correctly", async () => { - expect(await tbtcDepositor.depositorFeeDivisor()).to.be.eq(newValue) + expect(await bitcoinDepositor.depositorFeeDivisor()).to.be.eq( + newValue, + ) }) } @@ -1352,7 +1378,7 @@ describe("TbtcDepositor", () => { ({ receiver, referral, extraData: expectedExtraData }, testName) => { it(testName, async () => { expect( - await tbtcDepositor.encodeExtraData(receiver, referral), + await bitcoinDepositor.encodeExtraData(receiver, referral), ).to.be.equal(expectedExtraData) }) }, @@ -1367,7 +1393,7 @@ describe("TbtcDepositor", () => { ) => { it(testName, async () => { const [actualReceiver, actualReferral] = - await tbtcDepositor.decodeExtraData(extraData) + await bitcoinDepositor.decodeExtraData(extraData) expect(actualReceiver, "invalid receiver").to.be.equal( expectedReceiver, @@ -1389,7 +1415,7 @@ describe("TbtcDepositor", () => { const expectedReferral = 6851 // hex: 0x1ac3 const [actualReceiver, actualReferral] = - await tbtcDepositor.decodeExtraData(extraData) + await bitcoinDepositor.decodeExtraData(extraData) expect(actualReceiver, "invalid receiver").to.be.equal(expectedReceiver) expect(actualReferral, "invalid referral").to.be.equal(expectedReferral) @@ -1397,7 +1423,7 @@ describe("TbtcDepositor", () => { }) async function initializeStakeRequest() { - await tbtcDepositor + await bitcoinDepositor .connect(thirdParty) .initializeStakeRequest( tbtcDepositData.fundingTxInfo, diff --git a/core/test/helpers/context.ts b/core/test/helpers/context.ts index 4187aac73..239721235 100644 --- a/core/test/helpers/context.ts +++ b/core/test/helpers/context.ts @@ -5,10 +5,10 @@ import type { StBTC as stBTC, Dispatcher, TestERC20, - TbtcDepositorHarness, BridgeStub, TestERC4626, TBTCVaultStub, + AcreBitcoinDepositorHarness, } from "../../typechain" // eslint-disable-next-line import/prefer-default-export @@ -16,8 +16,8 @@ export async function deployment() { await deployments.fixture() const stbtc: stBTC = await getDeployedContract("stBTC") - const tbtcDepositor: TbtcDepositorHarness = - await getDeployedContract("TbtcDepositor") + const bitcoinDepositor: AcreBitcoinDepositorHarness = + await getDeployedContract("AcreBitcoinDepositor") const tbtc: TestERC20 = await getDeployedContract("TBTC") const tbtcBridge: BridgeStub = await getDeployedContract("Bridge") @@ -30,7 +30,7 @@ export async function deployment() { return { tbtc, stbtc, - tbtcDepositor, + bitcoinDepositor, tbtcBridge, tbtcVault, dispatcher, From 348575283c2e15a35688267d4d205924cb75a8a8 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 13 Feb 2024 14:06:14 +0100 Subject: [PATCH 078/122] Add a TODO to SDK about renaming TBTC Depositor --- sdk/src/lib/ethereum/tbtc-depositor.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/src/lib/ethereum/tbtc-depositor.ts b/sdk/src/lib/ethereum/tbtc-depositor.ts index e0b8697a5..6d9571b48 100644 --- a/sdk/src/lib/ethereum/tbtc-depositor.ts +++ b/sdk/src/lib/ethereum/tbtc-depositor.ts @@ -2,7 +2,7 @@ import { DepositReceipt, packRevealDepositParameters as tbtcPackRevealDepositParameters, } from "@keep-network/tbtc-v2.ts" -import { TbtcDepositor as TbtcDepositorTypechain } from "core/typechain/contracts/TbtcDepositor" +import { AcreBitcoinDepositor as TbtcDepositorTypechain } from "core/typechain/contracts/AcreBitcoinDepositor" import { ZeroAddress, dataSlice, @@ -24,6 +24,8 @@ import { EthereumNetwork } from "./network" import SepoliaTbtcDepositor from "./artifacts/sepolia/TbtcDepositor.json" +// TODO: Rename TBTCDepositor to AcreBitcoinDepositor + /** * Ethereum implementation of the TBTCDepositor. */ From a72344cd26a6cddc3f6bc887a7c6ec4b0ae75396 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 14 Feb 2024 11:02:58 +0100 Subject: [PATCH 079/122] Update tbtc-v2 dependency to 1.6.0-dev.21 --- core/contracts/test/MockTbtcBridge.sol | 4 ++-- core/test/AcreBitcoinDepositor.test.ts | 2 +- pnpm-lock.yaml | 27 ++++++++++++++++++-------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/core/contracts/test/MockTbtcBridge.sol b/core/contracts/test/MockTbtcBridge.sol index 19fe2be93..4f1398f52 100644 --- a/core/contracts/test/MockTbtcBridge.sol +++ b/core/contracts/test/MockTbtcBridge.sol @@ -21,9 +21,9 @@ contract TBTCVaultStub is MockTBTCVault { bridge = _bridge; } - function finalizeOptimisticMintingRequestAndMint( + function finalizeOptimisticMintingRequest( uint256 depositKey - ) public { + ) public override { MockTBTCVault.finalizeOptimisticMintingRequest(depositKey); IBridgeTypes.DepositRequest memory deposit = bridge.deposits( diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 3298b183e..1eb14c48c 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -1437,6 +1437,6 @@ describe("AcreBitcoinDepositor", () => { await tbtcVault.createOptimisticMintingRequest(depositKey) // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMintingRequestAndMint(depositKey) + await tbtcVault.finalizeOptimisticMintingRequest(depositKey) } }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42e4ce9ff..392e30dce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 3.4.0-solc-0.8 '@keep-network/tbtc-v2': specifier: development - version: 1.6.0-dev.19(@keep-network/keep-core@1.8.1-dev.0) + version: 1.6.0-dev.21(@keep-network/keep-core@1.8.1-dev.0) '@openzeppelin/contracts': specifier: ^5.0.0 version: 5.0.0 @@ -4340,15 +4340,15 @@ packages: - '@keep-network/keep-core' dev: false - /@keep-network/ecdsa@2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0): - resolution: {integrity: sha512-VjgQL5wROhUHrVnu2glkLi0x6wj3Q0AW4f843cr/PgMhQoJ6LG6WQoE6OANbg4WbNIx5Tcf9/9FZ2m1k+IYQXQ==} + /@keep-network/ecdsa@2.1.0-dev.19(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-cyqRqK/sOqyaXZWY/O9ij6EINQuJ+bHLMiuufOFyP5YCj4GCuNqOcCytGAZPT+mED/0J/xn0vm+fgiCBq/uJkQ==} engines: {node: '>= 14.0.0'} dependencies: - '@keep-network/random-beacon': 2.1.0-dev.17(@keep-network/keep-core@1.8.1-dev.0) + '@keep-network/random-beacon': 2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) '@keep-network/sortition-pools': 2.0.0 '@openzeppelin/contracts': 4.9.5 '@openzeppelin/contracts-upgradeable': 4.9.5 - '@threshold-network/solidity-contracts': 1.3.0-dev.11(@keep-network/keep-core@1.8.1-dev.0) + '@threshold-network/solidity-contracts': 1.3.0-dev.12(@keep-network/keep-core@1.8.1-dev.0) transitivePeerDependencies: - '@keep-network/keep-core' dev: false @@ -4486,12 +4486,12 @@ packages: - utf-8-validate dev: false - /@keep-network/tbtc-v2@1.6.0-dev.19(@keep-network/keep-core@1.8.1-dev.0): - resolution: {integrity: sha512-b29a5AzRX+ub3oJctTEOIphEpBD2pYqVzmebyGZl43WN61q3gCFy9k5rDJYTYWTT1ly2mSt5DB51+sUwzToqFA==} + /@keep-network/tbtc-v2@1.6.0-dev.21(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-/p2PCm0lWEnVbILrBhSO9MWjv6PvJ0lThEzUat85h6SkrGiIojqIMiOlI+pCIi8rhPtZ1xY+9jG6AbDs7XrupQ==} engines: {node: '>= 14.0.0'} dependencies: '@keep-network/bitcoin-spv-sol': 3.4.0-solc-0.8 - '@keep-network/ecdsa': 2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) + '@keep-network/ecdsa': 2.1.0-dev.19(@keep-network/keep-core@1.8.1-dev.0) '@keep-network/random-beacon': 2.1.0-dev.18(@keep-network/keep-core@1.8.1-dev.0) '@keep-network/tbtc': 1.1.2-dev.1 '@openzeppelin/contracts': 4.9.5 @@ -6383,6 +6383,17 @@ packages: '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf dev: false + /@threshold-network/solidity-contracts@1.3.0-dev.12(@keep-network/keep-core@1.8.1-dev.0): + resolution: {integrity: sha512-06EF583uEwko3ik7qjnMOg+sJ+Vb7YWkqag4a9xZq8Mmy8rifpmLjnfDKCVGeKbUis3uI++pTGC9U/EfvVOrlQ==} + peerDependencies: + '@keep-network/keep-core': '>1.8.1-dev <1.8.1-goerli' + dependencies: + '@keep-network/keep-core': 1.8.1-dev.0 + '@openzeppelin/contracts': 4.5.0 + '@openzeppelin/contracts-upgradeable': 4.5.2 + '@thesis/solidity-contracts': github.com/thesis/solidity-contracts/4985bcf + dev: false + /@threshold-network/solidity-contracts@1.3.0-dev.8(@keep-network/keep-core@1.8.1-dev.0): resolution: {integrity: sha512-s6SFZyf1xXgOdMK1zYnjsURnVz7Xxzf0z/34vH+hDg8n/G8L0jPR6Iz4laWSSL2y1P3ffFAFTUMvwfJMJitfVw==} peerDependencies: From e30ff010cd544ebac634096c8730ae20bd335a77 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 16 Feb 2024 13:25:43 +0100 Subject: [PATCH 080/122] Remove updateEntryFeeBasisPoints call in tests --- core/test/AcreBitcoinDepositor.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 1eb14c48c..d56cceab0 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -87,8 +87,6 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(governance) .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) - - await stbtc.connect(governance).updateEntryFeeBasisPoints(0) }) describe("initializeStakeRequest", () => { From 3e69dcdb277fa71c0f2ca67c184ec49991a4ac14 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 16 Feb 2024 13:34:01 +0100 Subject: [PATCH 081/122] Ensure max value can be set for fee divisor --- core/test/AcreBitcoinDepositor.test.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index d56cceab0..3082a6a3a 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -1272,7 +1272,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("when caller is governance", () => { - const testUpdateDepositorFeeDivisor = (newValue: number) => + const testUpdateDepositorFeeDivisor = (newValue: bigint) => function () { beforeAfterSnapshotWrapper() @@ -1299,10 +1299,15 @@ describe("AcreBitcoinDepositor", () => { describe( "when new value is non-zero", - testUpdateDepositorFeeDivisor(47281), + testUpdateDepositorFeeDivisor(47281n), ) - describe("when new value is zero", testUpdateDepositorFeeDivisor(0)) + describe("when new value is zero", testUpdateDepositorFeeDivisor(0n)) + + describe( + "when new value is max uint64", + testUpdateDepositorFeeDivisor(18446744073709551615n), + ) }) }) From f4b4c274645b414a9e1ff2ce3fcf288818b62f53 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 16 Feb 2024 15:14:16 +0100 Subject: [PATCH 082/122] Use enum to track request state Enum state gives better clarity on state at which request is and simpler transitions between states. The state from enum can be used directly in the dApp to show requests states to the users. --- core/contracts/AcreBitcoinDepositor.sol | 109 ++++++--- core/test/AcreBitcoinDepositor.test.ts | 301 ++++++++++++++---------- core/tsconfig.json | 2 +- core/types/index.ts | 9 + 4 files changed, 263 insertions(+), 158 deletions(-) create mode 100644 core/types/index.ts diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 87d546e58..802536653 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -39,28 +39,19 @@ import {stBTC} from "./stBTC.sol"; contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { using SafeERC20 for IERC20; + /// @notice State of the stake request. + enum StakeRequestState { + Unknown, + Initialized, + Finalized, + Queued, + FinalizedFromQueue, + RecalledFromQueue + } + struct StakeRequest { - // Timestamp at which the deposit request was initialized is not stored - // in this structure, as it is available under `Bridge.DepositRequest.revealedAt`. - - // UNIX timestamp at which tBTC bridging was notified to the stake request. - // It is used by `finalizeBridging` to ensure it is called only once for - // a given stake request, as the `AbstractTBTCDepositor#_finalizeDeposit` - // function is not validating that. - // For request finalized with `finalizeStakeRequest` function it will match - // the finalization timestamp. For request added to the queue it will match - // the queueing timestamp. - // 0 if bridging finalization has not been called yet. - // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. - uint32 bridgingFinalizedAt; - // UNIX timestamp at which the stake request was finalized. - // 0 if not yet finalized. - // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. - uint32 finalizedAt; - // UNIX timestamp at which the stake request was recalled. - // 0 if not yet recalled. - // XXX: Unsigned 32-bit int unix seconds, will break February 7th 2106. - uint32 recalledAt; + // State of the stake request. + StakeRequestState state; // The address to which the stBTC shares will be minted. Stored only when // request is queued. address receiver; @@ -164,6 +155,13 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); + /// @dev Attempted to execute function for stake request in unexpected current + /// state. + error UnexpectedStakeRequestState( + StakeRequestState currentState, + StakeRequestState expectedState + ); + /// @dev Attempted to notify a bridging completion, while it was already /// notified. error BridgingCompletionAlreadyNotified(); @@ -246,6 +244,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { encodeExtraData(receiver, referral) ); + transitionStakeRequestState( + depositKey, + StakeRequestState.Unknown, + StakeRequestState.Initialized + ); + emit StakeRequestInitialized(depositKey, msg.sender, receiver); } @@ -259,15 +263,18 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// should be called to add the stake request to the staking queue. /// @param depositKey Deposit key identifying the deposit. function finalizeStakeRequest(uint256 depositKey) external { + transitionStakeRequestState( + depositKey, + StakeRequestState.Initialized, + StakeRequestState.Finalized + ); + (uint256 amountToStake, address receiver) = finalizeBridging( depositKey ); emit StakeRequestFinalized(depositKey, msg.sender, amountToStake); - // solhint-disable-next-line not-rely-on-time - stakeRequests[depositKey].finalizedAt = uint32(block.timestamp); - // Deposit tBTC in stBTC. tbtcToken.safeIncreaseAllowance(address(stbtc), amountToStake); // slither-disable-next-line unused-return @@ -286,6 +293,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// will withdraw the minted tBTC token and abort staking process. /// @param depositKey Deposit key identifying the deposit. function queueForStaking(uint256 depositKey) external { + transitionStakeRequestState( + depositKey, + StakeRequestState.Initialized, + StakeRequestState.Queued + ); + StakeRequest storage request = stakeRequests[depositKey]; (request.queuedAmount, request.receiver) = finalizeBridging(depositKey); @@ -297,6 +310,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// request, when stBTC vault is able to accept a deposit. /// @param depositKey Deposit key identifying the deposit. function stakeFromQueue(uint256 depositKey) external { + transitionStakeRequestState( + depositKey, + StakeRequestState.Queued, + StakeRequestState.FinalizedFromQueue + ); + StakeRequest storage request = stakeRequests[depositKey]; if (request.queuedAmount == 0) revert StakeRequestNotQueued(); @@ -304,9 +323,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 amountToStake = request.queuedAmount; delete (request.queuedAmount); - // solhint-disable-next-line not-rely-on-time - request.finalizedAt = uint32(block.timestamp); - emit StakeRequestFinalizedFromQueue( depositKey, msg.sender, @@ -329,6 +345,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// call this function. /// @param depositKey Deposit key identifying the deposit. function recallFromQueue(uint256 depositKey) external { + transitionStakeRequestState( + depositKey, + StakeRequestState.Queued, + StakeRequestState.RecalledFromQueue + ); + StakeRequest storage request = stakeRequests[depositKey]; if (request.queuedAmount == 0) revert StakeRequestNotQueued(); @@ -339,9 +361,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 amount = request.queuedAmount; delete (request.queuedAmount); - // solhint-disable-next-line not-rely-on-time - request.recalledAt = uint32(block.timestamp); - emit StakeRequestRecalled(depositKey, request.receiver, amount); tbtcToken.safeTransfer(request.receiver, amount); @@ -388,6 +407,28 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { referral = uint16(bytes2(extraData << (8 * 20))); } + /// @notice This function is used for state transitions. It ensures the current + /// stakte matches expected, and updates the stake request to a new + /// state. + /// @param depositKey Deposit key identifying the deposit. + /// @param expectedState Expected current stake request state. + /// @param newState New stake request state. + function transitionStakeRequestState( + uint256 depositKey, + StakeRequestState expectedState, + StakeRequestState newState + ) internal { + // Validate current stake request state. + if (stakeRequests[depositKey].state != expectedState) + revert UnexpectedStakeRequestState( + stakeRequests[depositKey].state, + expectedState + ); + + // Transition to a new state. + stakeRequests[depositKey].state = newState; + } + /// @notice This function should be called for previously initialized stake /// request, after tBTC minting process completed, meaning tBTC was /// minted to this contract. @@ -404,14 +445,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { function finalizeBridging( uint256 depositKey ) internal returns (uint256, address) { - StakeRequest storage request = stakeRequests[depositKey]; - - if (request.bridgingFinalizedAt > 0) - revert BridgingFinalizationAlreadyCalled(); - - // solhint-disable-next-line not-rely-on-time - request.bridgingFinalizedAt = uint32(block.timestamp); - ( uint256 initialDepositAmount, uint256 tbtcAmount, diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 3082a6a3a..6f352d8bb 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -6,6 +6,8 @@ import { expect } from "chai" import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers" import { ContractTransactionResponse, ZeroAddress } from "ethers" +import { StakeRequestState } from "../types" + import type { StBTC, BridgeStub, @@ -155,29 +157,26 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should not store stake request data", async () => { - const storedStakeRequest = await bitcoinDepositor.stakeRequests( + it("should update stake request state", async () => { + const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) + expect(stakeRequest.state).to.be.equal( + StakeRequestState.Initialized, + ) + }) + + it("should not store stake request data in queue", async () => { + const stakeRequest = await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect(stakeRequest.receiver, "invalid receiver").to.be.equal( + ZeroAddress, + ) expect( - storedStakeRequest.bridgingFinalizedAt, - "invalid bridgingFinalizedAt", - ).to.be.equal(0) - expect( - storedStakeRequest.finalizedAt, - "invalid finalizedAt", - ).to.be.equal(0) - expect( - storedStakeRequest.recalledAt, - "invalid recalledAt", - ).to.be.equal(0) - expect( - storedStakeRequest.receiver, - "invalid receiver", - ).to.be.equal(ZeroAddress) - expect( - storedStakeRequest.queuedAmount, + stakeRequest.queuedAmount, "invalid queuedAmount", ).to.be.equal(0) }) @@ -402,16 +401,6 @@ describe("AcreBitcoinDepositor", () => { expect(returnedValue[1]).to.be.equal(tbtcDepositData.receiver) }) - it("should set bridgingFinalizedAt timestamp", async () => { - expect( - ( - await bitcoinDepositor.stakeRequests( - tbtcDepositData.depositKey, - ) - ).bridgingFinalizedAt, - ).to.be.equal(await lastBlockTime()) - }) - it("should transfer depositor fee", async () => { await expect(tx).to.changeTokenBalances( tbtc, @@ -461,16 +450,6 @@ describe("AcreBitcoinDepositor", () => { expect(returnedValue[1]).to.be.equal(tbtcDepositData.receiver) }) - it("should set bridgingFinalizedAt timestamp", async () => { - expect( - ( - await bitcoinDepositor.stakeRequests( - tbtcDepositData.depositKey, - ) - ).bridgingFinalizedAt, - ).to.be.equal(await lastBlockTime()) - }) - it("should not transfer depositor fee", async () => { await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) }) @@ -510,15 +489,12 @@ describe("AcreBitcoinDepositor", () => { .exposed_finalizeBridging(tbtcDepositData.depositKey) }) - it("should revert", async () => { + it("should not revert", async () => { await expect( bitcoinDepositor .connect(thirdParty) .exposed_finalizeBridging(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", - ) + ).to.be.not.reverted }) }) }) @@ -534,7 +510,12 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWith("Deposit not initialized") + ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs(StakeRequestState.Unknown, StakeRequestState.Initialized) }) }) @@ -597,11 +578,12 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should set finalizedAt timestamp", async () => { - expect( - (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) - .finalizedAt, - ).to.be.equal(await lastBlockTime()) + it("should update stake request state", async () => { + const stakeRequest = await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect(stakeRequest.state).to.be.equal(StakeRequestState.Finalized) }) it("should emit StakeRequestFinalized event", async () => { @@ -657,10 +639,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.Queued, + StakeRequestState.Initialized, + ) }) }) @@ -678,10 +665,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.FinalizedFromQueue, + StakeRequestState.Initialized, + ) }) }) @@ -699,10 +691,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.RecalledFromQueue, + StakeRequestState.Initialized, + ) }) }) }) @@ -722,10 +719,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .finalizeStakeRequest(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.Finalized, + StakeRequestState.Initialized, + ) }) }) }) @@ -741,7 +743,12 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), - ).to.be.revertedWith("Deposit not initialized") + ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs(StakeRequestState.Unknown, StakeRequestState.Initialized) }) }) @@ -801,11 +808,12 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should not set finalizedAt timestamp", async () => { - expect( - (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) - .finalizedAt, - ).to.be.equal(0) + it("should update stake request state", async () => { + const stakeRequest = await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect(stakeRequest.state).to.be.equal(StakeRequestState.Queued) }) it("should set receiver", async () => { @@ -871,10 +879,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.Queued, + StakeRequestState.Initialized, + ) }) }) @@ -892,10 +905,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.FinalizedFromQueue, + StakeRequestState.Initialized, + ) }) }) @@ -913,10 +931,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.RecalledFromQueue, + StakeRequestState.Initialized, + ) }) }) }) @@ -936,10 +959,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .queueForStaking(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "BridgingFinalizationAlreadyCalled", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.Finalized, + StakeRequestState.Initialized, + ) }) }) }) @@ -953,24 +981,34 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(receiver) .stakeFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs(StakeRequestState.Unknown, StakeRequestState.Queued) }) }) describe("when stake request has been initialized", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await initializeStakeRequest() + }) + describe("when stake request has not been queued", () => { it("should revert", async () => { await expect( bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs(StakeRequestState.Initialized, StakeRequestState.Queued) }) }) @@ -978,8 +1016,6 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() - await finalizeMinting(tbtcDepositData.depositKey) await bitcoinDepositor @@ -1001,11 +1037,14 @@ describe("AcreBitcoinDepositor", () => { .stakeFromQueue(tbtcDepositData.depositKey) }) - it("should set finalizedAt timestamp", async () => { - expect( - (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) - .finalizedAt, - ).to.be.equal(await lastBlockTime()) + it("should update stake request state", async () => { + const stakeRequest = await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect(stakeRequest.state).to.be.equal( + StakeRequestState.FinalizedFromQueue, + ) }) it("should set queuedAmount to zero", async () => { @@ -1067,10 +1106,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.FinalizedFromQueue, + StakeRequestState.Queued, + ) }) }) @@ -1088,10 +1132,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(thirdParty) .stakeFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.RecalledFromQueue, + StakeRequestState.Queued, + ) }) }) }) @@ -1105,10 +1154,12 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs(StakeRequestState.Unknown, StakeRequestState.Queued) }) }) @@ -1127,10 +1178,12 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs(StakeRequestState.Initialized, StakeRequestState.Queued) }) }) @@ -1170,14 +1223,14 @@ describe("AcreBitcoinDepositor", () => { .recallFromQueue(tbtcDepositData.depositKey) }) - it("should set recalledAt timestamp", async () => { - expect( - ( - await bitcoinDepositor.stakeRequests( - tbtcDepositData.depositKey, - ) - ).recalledAt, - ).to.be.equal(await lastBlockTime()) + it("should update stake request state", async () => { + const stakeRequest = await bitcoinDepositor.stakeRequests( + tbtcDepositData.depositKey, + ) + + expect(stakeRequest.state).to.be.equal( + StakeRequestState.RecalledFromQueue, + ) }) it("should set queuedAmount to zero", async () => { @@ -1224,10 +1277,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.FinalizedFromQueue, + StakeRequestState.Queued, + ) }) }) @@ -1245,10 +1303,15 @@ describe("AcreBitcoinDepositor", () => { bitcoinDepositor .connect(receiver) .recallFromQueue(tbtcDepositData.depositKey), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "StakeRequestNotQueued", ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "UnexpectedStakeRequestState", + ) + .withArgs( + StakeRequestState.RecalledFromQueue, + StakeRequestState.Queued, + ) }) }) }) diff --git a/core/tsconfig.json b/core/tsconfig.json index f9167f325..0350f4062 100644 --- a/core/tsconfig.json +++ b/core/tsconfig.json @@ -9,5 +9,5 @@ "resolveJsonModule": true }, "files": ["./hardhat.config.ts"], - "include": ["./deploy", "./test", "./typechain", "./helpers"] + "include": ["./deploy", "./test", "./typechain", "./helpers", "./types"] } diff --git a/core/types/index.ts b/core/types/index.ts new file mode 100644 index 000000000..a52a5c775 --- /dev/null +++ b/core/types/index.ts @@ -0,0 +1,9 @@ +/* eslint-disable import/prefer-default-export */ +export enum StakeRequestState { + Unknown, + Initialized, + Finalized, + Queued, + FinalizedFromQueue, + RecalledFromQueue, +} From b3949feb2c3a117864436329d1a5f199adb497e2 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:25:21 +0100 Subject: [PATCH 083/122] Don't underscore parameters We underscore parameters only if there is a collision. --- core/contracts/AcreBitcoinDepositor.sol | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 802536653..f301a86ab 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -188,17 +188,18 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { error CallerNotReceiver(); /// @notice Acre Bitcoin Depositor contract constructor. - /// @param _bridge tBTC Bridge contract instance. - /// @param _tbtcVault tBTC Vault contract instance. + /// @param bridge tBTC Bridge contract instance. + /// @param tbtcVault tBTC Vault contract instance. + /// @param _tbtcToken tBTC token contract instance. /// @param _stbtc stBTC contract instance. // TODO: Move to initializer when making the contract upgradeable. constructor( - address _bridge, - address _tbtcVault, + address bridge, + address tbtcVault, address _tbtcToken, address _stbtc ) Ownable(msg.sender) { - __AbstractTBTCDepositor_initialize(_bridge, _tbtcVault); + __AbstractTBTCDepositor_initialize(bridge, tbtcVault); require(_tbtcToken != address(0), "TBTCToken address cannot be zero"); require(_stbtc != address(0), "stBTC address cannot be zero"); From 4f4dd4a3bcffb246489e6cf5936e84d1d801444f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:30:25 +0100 Subject: [PATCH 084/122] User custom error instead of require Custom errors use less gas than the require statements with string messages. --- core/contracts/AcreBitcoinDepositor.sol | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index f301a86ab..4978b3edb 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -152,6 +152,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @param depositorFeeDivisor New value of the depositor fee divisor. event DepositorFeeDivisorUpdated(uint64 depositorFeeDivisor); + /// Reverts if the tBTC Token address is zero. + error TbtcTokenZeroAddress(); + + /// Reverts if the stBTC address is zero. + error StbtcZeroAddress(); + /// @dev Receiver address is zero. error ReceiverIsZeroAddress(); @@ -201,8 +207,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { ) Ownable(msg.sender) { __AbstractTBTCDepositor_initialize(bridge, tbtcVault); - require(_tbtcToken != address(0), "TBTCToken address cannot be zero"); - require(_stbtc != address(0), "stBTC address cannot be zero"); + if (address(_tbtcToken) == address(0)) { + revert TbtcTokenZeroAddress(); + } + if (address(_stbtc) == address(0)) { + revert StbtcZeroAddress(); + } tbtcToken = IERC20(_tbtcToken); stbtc = stBTC(_stbtc); From 7a13d75c85e0ba37589525e691a84e9f220e29b5 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:31:47 +0100 Subject: [PATCH 085/122] Add TODO to make contract pausable --- core/contracts/AcreBitcoinDepositor.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 4978b3edb..25d7d0eb8 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -11,6 +11,7 @@ import {stBTC} from "./stBTC.sol"; // TODO: Add Missfund token protection. // TODO: Make Upgradable +// TODO: Make Pausable /// @title Acre Bitcoin Depositor contract. /// @notice The contract integrates Acre staking with tBTC minting. From 005435d7e04b95c9ec9d57d2cee27c9bf25e5e9e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:38:43 +0100 Subject: [PATCH 086/122] Rename receiver to staker We decided to rename receiver to staker in the Depositor contract and SDK. See: https://github.com/thesis/acre/pull/106#discussion_r1458998789 --- core/contracts/AcreBitcoinDepositor.sol | 82 ++++++----- .../contracts/test/AcreBitcoinDepositor.t.sol | 2 +- core/test/AcreBitcoinDepositor.test.ts | 134 ++++++++---------- core/test/data/tbtc.ts | 2 +- 4 files changed, 105 insertions(+), 115 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 25d7d0eb8..e38440343 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -36,7 +36,7 @@ import {stBTC} from "./stBTC.sol"; /// network, the tBTC Bridge and tBTC vault mint the tBTC token to the /// Depositor address. After tBTC is minted to the Depositor, on the stake /// finalization tBTC is staked in stBTC contract and stBTC shares are emitted -/// to the receiver pointed by the staker. +/// to the staker. contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { using SafeERC20 for IERC20; @@ -55,7 +55,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequestState state; // The address to which the stBTC shares will be minted. Stored only when // request is queued. - address receiver; + address staker; // tBTC token amount to stake after deducting tBTC minting fees and the // Depositor fee. Stored only when request is queued. uint256 queuedAmount; @@ -84,11 +84,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// event emitted in the same transaction. /// @param depositKey Deposit key identifying the deposit. /// @param caller Address that initialized the stake request. - /// @param receiver The address to which the stBTC shares will be minted. + /// @param staker The address to which the stBTC shares will be minted. event StakeRequestInitialized( uint256 indexed depositKey, address indexed caller, - address indexed receiver + address indexed staker ); /// @notice Emitted when bridging completion has been notified. @@ -141,11 +141,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @notice Emitted when a stake request is recalled. /// @param depositKey Deposit key identifying the deposit. - /// @param receiver Address of the receiver. + /// @param staker Address of the staker. /// @param amountToStake Amount of recalled tBTC tokens. event StakeRequestRecalled( uint256 indexed depositKey, - address indexed receiver, + address indexed staker, uint256 amountToStake ); @@ -159,8 +159,8 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// Reverts if the stBTC address is zero. error StbtcZeroAddress(); - /// @dev Receiver address is zero. - error ReceiverIsZeroAddress(); + /// @dev Staker address is zero. + error StakerIsZeroAddress(); /// @dev Attempted to execute function for stake request in unexpected current /// state. @@ -191,8 +191,8 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// to the queue, or was already finalized or recalled. error StakeRequestNotQueued(); - /// @dev Attempted to call function by an account that is not the receiver. - error CallerNotReceiver(); + /// @dev Attempted to call function by an account that is not the staker. + error CallerNotStaker(); /// @notice Acre Bitcoin Depositor contract constructor. /// @param bridge tBTC Bridge contract instance. @@ -228,7 +228,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// - The revealed vault address must match the TBTCVault address, /// - All requirements from {Bridge#revealDepositWithExtraData} /// function must be met. - /// - `receiver` must be the receiver address used in the P2(W)SH BTC + /// - `staker` must be the staker address used in the P2(W)SH BTC /// deposit transaction as part of the extra data. /// - `referral` must be the referral info used in the P2(W)SH BTC /// deposit transaction as part of the extra data. @@ -236,15 +236,15 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// can be revealed only one time. /// @param fundingTx Bitcoin funding transaction data, see `IBridgeTypes.BitcoinTxInfo`. /// @param reveal Deposit reveal data, see `IBridgeTypes.DepositRevealInfo`. - /// @param receiver The address to which the stBTC shares will be minted. + /// @param staker The address to which the stBTC shares will be minted. /// @param referral Data used for referral program. function initializeStakeRequest( IBridgeTypes.BitcoinTxInfo calldata fundingTx, IBridgeTypes.DepositRevealInfo calldata reveal, - address receiver, + address staker, uint16 referral ) external { - if (receiver == address(0)) revert ReceiverIsZeroAddress(); + if (staker == address(0)) revert StakerIsZeroAddress(); // We don't check if the request was already initialized, as this check // is enforced in `_initializeDeposit` when calling the @@ -253,7 +253,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 depositKey = _initializeDeposit( fundingTx, reveal, - encodeExtraData(receiver, referral) + encodeExtraData(staker, referral) ); transitionStakeRequestState( @@ -262,13 +262,13 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequestState.Initialized ); - emit StakeRequestInitialized(depositKey, msg.sender, receiver); + emit StakeRequestInitialized(depositKey, msg.sender, staker); } /// @notice This function should be called for previously initialized stake /// request, after tBTC bridging process was finalized. /// It stakes the tBTC from the given deposit into stBTC, emitting the - /// stBTC shares to the receiver specified in the deposit extra data + /// stBTC shares to the staker specified in the deposit extra data /// and using the referral provided in the extra data. /// @dev In case depositing in stBTC vault fails (e.g. because of the /// maximum deposit limit being reached), the `queueForStaking` function @@ -281,16 +281,14 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequestState.Finalized ); - (uint256 amountToStake, address receiver) = finalizeBridging( - depositKey - ); + (uint256 amountToStake, address staker) = finalizeBridging(depositKey); emit StakeRequestFinalized(depositKey, msg.sender, amountToStake); // Deposit tBTC in stBTC. tbtcToken.safeIncreaseAllowance(address(stbtc), amountToStake); // slither-disable-next-line unused-return - stbtc.deposit(amountToStake, receiver); + stbtc.deposit(amountToStake, staker); } /// @notice This function should be called for previously initialized stake @@ -313,7 +311,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequest storage request = stakeRequests[depositKey]; - (request.queuedAmount, request.receiver) = finalizeBridging(depositKey); + (request.queuedAmount, request.staker) = finalizeBridging(depositKey); emit StakeRequestQueued(depositKey, msg.sender, request.queuedAmount); } @@ -344,7 +342,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { // Deposit tBTC in stBTC. tbtcToken.safeIncreaseAllowance(address(stbtc), amountToStake); // slither-disable-next-line unused-return - stbtc.deposit(amountToStake, request.receiver); + stbtc.deposit(amountToStake, request.staker); } /// @notice Recall bridged tBTC tokens from the staking queue. This @@ -353,7 +351,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// reached. /// @dev This function can be called only after the stake request was added /// to queue. - /// @dev Only receiver provided in the extra data of the stake request can + /// @dev Only staker provided in the extra data of the stake request can /// call this function. /// @param depositKey Deposit key identifying the deposit. function recallFromQueue(uint256 depositKey) external { @@ -367,15 +365,15 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { if (request.queuedAmount == 0) revert StakeRequestNotQueued(); - // Check if caller is the receiver. - if (msg.sender != request.receiver) revert CallerNotReceiver(); + // Check if caller is the staker. + if (msg.sender != request.staker) revert CallerNotStaker(); uint256 amount = request.queuedAmount; delete (request.queuedAmount); - emit StakeRequestRecalled(depositKey, request.receiver, amount); + emit StakeRequestRecalled(depositKey, request.staker, amount); - tbtcToken.safeTransfer(request.receiver, amount); + tbtcToken.safeTransfer(request.staker, amount); } /// @notice Updates the depositor fee divisor. @@ -391,30 +389,30 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { // TODO: Handle minimum deposit amount in tBTC Bridge vs stBTC. - /// @notice Encode receiver address and referral as extra data. - /// @dev Packs the data to bytes32: 20 bytes of receiver address and + /// @notice Encode staker address and referral as extra data. + /// @dev Packs the data to bytes32: 20 bytes of staker address and /// 2 bytes of referral, 10 bytes of trailing zeros. - /// @param receiver The address to which the stBTC shares will be minted. + /// @param staker The address to which the stBTC shares will be minted. /// @param referral Data used for referral program. /// @return Encoded extra data. function encodeExtraData( - address receiver, + address staker, uint16 referral ) public pure returns (bytes32) { - return bytes32(abi.encodePacked(receiver, referral)); + return bytes32(abi.encodePacked(staker, referral)); } - /// @notice Decodes receiver address and referral from extra data, - /// @dev Unpacks the data from bytes32: 20 bytes of receiver address and + /// @notice Decodes staker address and referral from extra data, + /// @dev Unpacks the data from bytes32: 20 bytes of staker address and /// 2 bytes of referral, 10 bytes of trailing zeros. /// @param extraData Encoded extra data. - /// @return receiver The address to which the stBTC shares will be minted. + /// @return staker The address to which the stBTC shares will be minted. /// @return referral Data used for referral program. function decodeExtraData( bytes32 extraData - ) public pure returns (address receiver, uint16 referral) { - // First 20 bytes of extra data is receiver address. - receiver = address(uint160(bytes20(extraData))); + ) public pure returns (address staker, uint16 referral) { + // First 20 bytes of extra data is staker address. + staker = address(uint160(bytes20(extraData))); // Next 2 bytes of extra data is referral info. referral = uint16(bytes2(extraData << (8 * 20))); } @@ -453,7 +451,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @param depositKey Deposit key identifying the deposit. /// @return amountToStake tBTC token amount to stake after deducting tBTC bridging /// fees and the depositor fee. - /// @return receiver The address to which the stBTC shares will be minted. + /// @return staker The address to which the stBTC shares will be minted. function finalizeBridging( uint256 depositKey ) internal returns (uint256, address) { @@ -463,7 +461,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { bytes32 extraData ) = _finalizeDeposit(depositKey); - (address receiver, uint16 referral) = decodeExtraData(extraData); + (address staker, uint16 referral) = decodeExtraData(extraData); // Compute depositor fee. The fee is calculated based on the initial funding // transaction amount, before the tBTC protocol network fees were taken. @@ -492,6 +490,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { tbtcToken.safeTransfer(stbtc.treasury(), depositorFee); } - return (amountToStake, receiver); + return (amountToStake, staker); } } diff --git a/core/contracts/test/AcreBitcoinDepositor.t.sol b/core/contracts/test/AcreBitcoinDepositor.t.sol index f7a561423..6ae6d71e9 100644 --- a/core/contracts/test/AcreBitcoinDepositor.t.sol +++ b/core/contracts/test/AcreBitcoinDepositor.t.sol @@ -16,7 +16,7 @@ contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { function exposed_finalizeBridging( uint256 depositKey - ) external returns (uint256 amountToStake, address receiver) { + ) external returns (uint256 amountToStake, address staker) { return finalizeBridging(depositKey); } } diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 6f352d8bb..6895abf0e 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -55,7 +55,7 @@ describe("AcreBitcoinDepositor", () => { let governance: HardhatEthersSigner let treasury: HardhatEthersSigner let thirdParty: HardhatEthersSigner - let receiver: HardhatEthersSigner + let staker: HardhatEthersSigner before(async () => { ;({ bitcoinDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = @@ -63,12 +63,9 @@ describe("AcreBitcoinDepositor", () => { ;({ governance, treasury } = await getNamedSigners()) ;[thirdParty] = await getUnnamedSigners() - receiver = await helpers.account.impersonateAccount( - tbtcDepositData.receiver, - { - from: thirdParty, - }, - ) + staker = await helpers.account.impersonateAccount(tbtcDepositData.staker, { + from: thirdParty, + }) await stbtc.connect(governance).updateDepositParameters( 10000000000000, // 0.00001 @@ -92,7 +89,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("initializeStakeRequest", () => { - describe("when receiver is zero address", () => { + describe("when staker is zero address", () => { it("should revert", async () => { await expect( bitcoinDepositor.initializeStakeRequest( @@ -101,14 +98,11 @@ describe("AcreBitcoinDepositor", () => { ZeroAddress, 0, ), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "ReceiverIsZeroAddress", - ) + ).to.be.revertedWithCustomError(bitcoinDepositor, "StakerIsZeroAddress") }) }) - describe("when receiver is non zero address", () => { + describe("when staker is non zero address", () => { describe("when stake request is not in progress", () => { describe("when tbtc vault address is incorrect", () => { beforeAfterSnapshotWrapper() @@ -123,7 +117,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, { ...tbtcDepositData.reveal, vault: invalidTbtcVault }, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ), ).to.be.revertedWith("Vault address mismatch") @@ -142,7 +136,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ) }) @@ -153,7 +147,7 @@ describe("AcreBitcoinDepositor", () => { .withArgs( tbtcDepositData.depositKey, thirdParty.address, - tbtcDepositData.receiver, + tbtcDepositData.staker, ) }) @@ -172,7 +166,7 @@ describe("AcreBitcoinDepositor", () => { tbtcDepositData.depositKey, ) - expect(stakeRequest.receiver, "invalid receiver").to.be.equal( + expect(stakeRequest.staker, "invalid staker").to.be.equal( ZeroAddress, ) expect( @@ -208,7 +202,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, 0, ), ).to.be.not.reverted @@ -231,7 +225,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ), ).to.be.revertedWith("Deposit already revealed") @@ -259,7 +253,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ), ).to.be.revertedWith("Deposit already revealed") @@ -287,7 +281,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ), ).to.be.revertedWith("Deposit already revealed") @@ -308,7 +302,7 @@ describe("AcreBitcoinDepositor", () => { .queueForStaking(tbtcDepositData.depositKey) await bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey) }) @@ -319,7 +313,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ), ).to.be.revertedWith("Deposit already revealed") @@ -397,8 +391,8 @@ describe("AcreBitcoinDepositor", () => { expect(returnedValue[0]).to.be.equal(amountToStake) }) - it("should return receiver", () => { - expect(returnedValue[1]).to.be.equal(tbtcDepositData.receiver) + it("should return staker", () => { + expect(returnedValue[1]).to.be.equal(tbtcDepositData.staker) }) it("should transfer depositor fee", async () => { @@ -446,8 +440,8 @@ describe("AcreBitcoinDepositor", () => { expect(returnedValue[0]).to.be.equal(bridgedTbtcAmount) }) - it("should return receiver", () => { - expect(returnedValue[1]).to.be.equal(tbtcDepositData.receiver) + it("should return staker", () => { + expect(returnedValue[1]).to.be.equal(tbtcDepositData.staker) }) it("should not transfer depositor fee", async () => { @@ -601,7 +595,7 @@ describe("AcreBitcoinDepositor", () => { .to.emit(stbtc, "Deposit") .withArgs( await bitcoinDepositor.getAddress(), - tbtcDepositData.receiver, + tbtcDepositData.staker, expectedAssetsAmount, expectedReceivedSharesAmount, ) @@ -613,7 +607,7 @@ describe("AcreBitcoinDepositor", () => { "invalid minted stBTC amount", ).to.changeTokenBalances( stbtc, - [tbtcDepositData.receiver], + [tbtcDepositData.staker], [expectedReceivedSharesAmount], ) @@ -682,7 +676,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey) }) @@ -816,11 +810,11 @@ describe("AcreBitcoinDepositor", () => { expect(stakeRequest.state).to.be.equal(StakeRequestState.Queued) }) - it("should set receiver", async () => { + it("should set staker", async () => { expect( (await bitcoinDepositor.stakeRequests(tbtcDepositData.depositKey)) - .receiver, - ).to.be.equal(tbtcDepositData.receiver) + .staker, + ).to.be.equal(tbtcDepositData.staker) }) it("should set queuedAmount", async () => { @@ -855,7 +849,7 @@ describe("AcreBitcoinDepositor", () => { await expect( tx, "invalid minted stBTC amount", - ).to.changeTokenBalances(stbtc, [tbtcDepositData.receiver], [0]) + ).to.changeTokenBalances(stbtc, [tbtcDepositData.staker], [0]) await expect( tx, @@ -922,7 +916,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey) }) @@ -979,7 +973,7 @@ describe("AcreBitcoinDepositor", () => { it("should revert", async () => { await expect( bitcoinDepositor - .connect(receiver) + .connect(staker) .stakeFromQueue(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( @@ -1069,7 +1063,7 @@ describe("AcreBitcoinDepositor", () => { .to.emit(stbtc, "Deposit") .withArgs( await bitcoinDepositor.getAddress(), - tbtcDepositData.receiver, + tbtcDepositData.staker, expectedAssetsAmount, expectedReceivedSharesAmount, ) @@ -1081,7 +1075,7 @@ describe("AcreBitcoinDepositor", () => { "invalid minted stBTC amount", ).to.changeTokenBalances( stbtc, - [tbtcDepositData.receiver], + [tbtcDepositData.staker], [expectedReceivedSharesAmount], ) @@ -1123,7 +1117,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey) }) @@ -1152,7 +1146,7 @@ describe("AcreBitcoinDepositor", () => { it("should revert", async () => { await expect( bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( @@ -1176,7 +1170,7 @@ describe("AcreBitcoinDepositor", () => { it("should revert", async () => { await expect( bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( @@ -1199,7 +1193,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("when stake request has not been recalled", () => { - describe("when caller is non-receiver", () => { + describe("when caller is non-staker", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -1207,19 +1201,19 @@ describe("AcreBitcoinDepositor", () => { .recallFromQueue(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( bitcoinDepositor, - "CallerNotReceiver", + "CallerNotStaker", ) }) }) - describe("when caller is receiver", () => { + describe("when caller is staker", () => { beforeAfterSnapshotWrapper() let tx: ContractTransactionResponse before(async () => { tx = await bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey) }) @@ -1248,15 +1242,15 @@ describe("AcreBitcoinDepositor", () => { .to.emit(bitcoinDepositor, "StakeRequestRecalled") .withArgs( tbtcDepositData.depositKey, - receiver.address, + staker.address, amountToStake, ) }) - it("should transfer tbtc to receiver", async () => { + it("should transfer tbtc to staker", async () => { await expect(tx).to.changeTokenBalances( tbtc, - [bitcoinDepositor, receiver], + [bitcoinDepositor, staker], [-amountToStake, amountToStake], ) }) @@ -1275,7 +1269,7 @@ describe("AcreBitcoinDepositor", () => { it("should revert", async () => { await expect( bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( @@ -1294,14 +1288,14 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( bitcoinDepositor - .connect(receiver) + .connect(staker) .recallFromQueue(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( @@ -1377,24 +1371,24 @@ describe("AcreBitcoinDepositor", () => { const extraDataValidTestData = new Map< string, { - receiver: string + staker: string referral: number extraData: string } >([ [ - "receiver has leading zeros", + "staker has leading zeros", { - receiver: "0x000055d85E80A49B5930C4a77975d44f012D86C1", + staker: "0x000055d85E80A49B5930C4a77975d44f012D86C1", referral: 6851, // hex: 0x1ac3 extraData: "0x000055d85e80a49b5930c4a77975d44f012d86c11ac300000000000000000000", }, ], [ - "receiver has trailing zeros", + "staker has trailing zeros", { - receiver: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", + staker: "0x2d2F8BC7923F7F806Dc9bb2e17F950b42CfE0000", referral: 6851, // hex: 0x1ac3 extraData: "0x2d2f8bc7923f7f806dc9bb2e17f950b42cfe00001ac300000000000000000000", @@ -1403,7 +1397,7 @@ describe("AcreBitcoinDepositor", () => { [ "referral is zero", { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + staker: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", referral: 0, extraData: "0xeb098d6cde6a202981316b24b19e64d82721e89e000000000000000000000000", @@ -1412,7 +1406,7 @@ describe("AcreBitcoinDepositor", () => { [ "referral has leading zeros", { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + staker: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", referral: 31, // hex: 0x001f extraData: "0xeb098d6cde6a202981316b24b19e64d82721e89e001f00000000000000000000", @@ -1421,7 +1415,7 @@ describe("AcreBitcoinDepositor", () => { [ "referral has trailing zeros", { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + staker: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", referral: 19712, // hex: 0x4d00 extraData: "0xeb098d6cde6a202981316b24b19e64d82721e89e4d0000000000000000000000", @@ -1430,7 +1424,7 @@ describe("AcreBitcoinDepositor", () => { [ "referral is maximum value", { - receiver: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", + staker: "0xeb098d6cDE6A202981316b24B19e64D82721e89E", referral: 65535, // max uint16 extraData: "0xeb098d6cde6a202981316b24b19e64d82721e89effff00000000000000000000", @@ -1441,10 +1435,10 @@ describe("AcreBitcoinDepositor", () => { describe("encodeExtraData", () => { extraDataValidTestData.forEach( // eslint-disable-next-line @typescript-eslint/no-shadow - ({ receiver, referral, extraData: expectedExtraData }, testName) => { + ({ staker, referral, extraData: expectedExtraData }, testName) => { it(testName, async () => { expect( - await bitcoinDepositor.encodeExtraData(receiver, referral), + await bitcoinDepositor.encodeExtraData(staker, referral), ).to.be.equal(expectedExtraData) }) }, @@ -1454,16 +1448,14 @@ describe("AcreBitcoinDepositor", () => { describe("decodeExtraData", () => { extraDataValidTestData.forEach( ( - { receiver: expectedReceiver, referral: expectedReferral, extraData }, + { staker: expectedStaker, referral: expectedReferral, extraData }, testName, ) => { it(testName, async () => { - const [actualReceiver, actualReferral] = + const [actualStaker, actualReferral] = await bitcoinDepositor.decodeExtraData(extraData) - expect(actualReceiver, "invalid receiver").to.be.equal( - expectedReceiver, - ) + expect(actualStaker, "invalid staker").to.be.equal(expectedStaker) expect(actualReferral, "invalid referral").to.be.equal( expectedReferral, ) @@ -1477,13 +1469,13 @@ describe("AcreBitcoinDepositor", () => { // value. const extraData = "0xeb098d6cde6a202981316b24b19e64d82721e89e1ac3105f9919321ea7d75f58" - const expectedReceiver = "0xeb098d6cDE6A202981316b24B19e64D82721e89E" + const expectedStaker = "0xeb098d6cDE6A202981316b24B19e64D82721e89E" const expectedReferral = 6851 // hex: 0x1ac3 - const [actualReceiver, actualReferral] = + const [actualStaker, actualReferral] = await bitcoinDepositor.decodeExtraData(extraData) - expect(actualReceiver, "invalid receiver").to.be.equal(expectedReceiver) + expect(actualStaker, "invalid staker").to.be.equal(expectedStaker) expect(actualReferral, "invalid referral").to.be.equal(expectedReferral) }) }) @@ -1494,7 +1486,7 @@ describe("AcreBitcoinDepositor", () => { .initializeStakeRequest( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, - tbtcDepositData.receiver, + tbtcDepositData.staker, tbtcDepositData.referral, ) } diff --git a/core/test/data/tbtc.ts b/core/test/data/tbtc.ts index 3f48b4a0d..fd491081f 100644 --- a/core/test/data/tbtc.ts +++ b/core/test/data/tbtc.ts @@ -37,7 +37,7 @@ export const tbtcDepositData = { vault: "0x594cfd89700040163727828AE20B52099C58F02C", }, // 20-bytes of extraData - receiver: "0xa9B38eA6435c8941d6eDa6a46b68E3e211719699", + staker: "0xa9B38eA6435c8941d6eDa6a46b68E3e211719699", // 2-bytes of extraData referral: "0x5bd1", extraData: From 29d054a84712b2fba814e04fd5a40d230daf68c6 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:40:06 +0100 Subject: [PATCH 087/122] Remove empty line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafał Czajkowski <57687279+r-czajkowski@users.noreply.github.com> --- core/contracts/AcreBitcoinDepositor.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index e38440343..b6b749c57 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -249,7 +249,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { // We don't check if the request was already initialized, as this check // is enforced in `_initializeDeposit` when calling the // `Bridge.revealDepositWithExtraData` function. - uint256 depositKey = _initializeDeposit( fundingTx, reveal, From 9d745ceb3688bbdb67ee222c045f93d88d57db06 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:41:47 +0100 Subject: [PATCH 088/122] Move decodeExtraData closer to emit BridgingCompleted The decode line was moved to a part of the code where it is is used. --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index b6b749c57..c47ea3786 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -460,8 +460,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { bytes32 extraData ) = _finalizeDeposit(depositKey); - (address staker, uint16 referral) = decodeExtraData(extraData); - // Compute depositor fee. The fee is calculated based on the initial funding // transaction amount, before the tBTC protocol network fees were taken. uint256 depositorFee = depositorFeeDivisor > 0 @@ -476,6 +474,8 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 amountToStake = tbtcAmount - depositorFee; + (address staker, uint16 referral) = decodeExtraData(extraData); + emit BridgingCompleted( depositKey, msg.sender, From 313d1931b1e473228138687f4a6da4994ed73707 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 12:51:22 +0100 Subject: [PATCH 089/122] Clarify BridgingCompleted event emission --- core/contracts/AcreBitcoinDepositor.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index c47ea3786..a38a47e7b 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -476,6 +476,8 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { (address staker, uint16 referral) = decodeExtraData(extraData); + // Emit event for accounting purposes to track partner's referral ID and + // depositor fee taken. emit BridgingCompleted( depositKey, msg.sender, From 0b03baeff38e0c16c94e742c5b37fa16aa2dcc47 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:06:18 +0100 Subject: [PATCH 090/122] queueForStaking -> queueStake --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- core/test/AcreBitcoinDepositor.test.ts | 28 ++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index a38a47e7b..cc1a432b8 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -270,7 +270,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// stBTC shares to the staker specified in the deposit extra data /// and using the referral provided in the extra data. /// @dev In case depositing in stBTC vault fails (e.g. because of the - /// maximum deposit limit being reached), the `queueForStaking` function + /// maximum deposit limit being reached), the `queueStake` function /// should be called to add the stake request to the staking queue. /// @param depositKey Deposit key identifying the deposit. function finalizeStakeRequest(uint256 depositKey) external { @@ -301,7 +301,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// The staker has a possibility to submit `recallFromQueue` that /// will withdraw the minted tBTC token and abort staking process. /// @param depositKey Deposit key identifying the deposit. - function queueForStaking(uint256 depositKey) external { + function queueStake(uint256 depositKey) external { transitionStakeRequestState( depositKey, StakeRequestState.Initialized, diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 6895abf0e..0eb141c5d 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -271,7 +271,7 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -299,7 +299,7 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) await bitcoinDepositor .connect(staker) @@ -624,7 +624,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) }) describe("when stake request is still in the queue", () => { @@ -728,7 +728,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("queueForStaking", () => { + describe("queueStake", () => { beforeAfterSnapshotWrapper() describe("when stake request has not been initialized", () => { @@ -736,7 +736,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey), + .queueStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -758,7 +758,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey), + .queueStake(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") }) }) @@ -779,7 +779,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { tx = await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { @@ -864,7 +864,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) }) describe("when stake request is still in the queue", () => { @@ -872,7 +872,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey), + .queueStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -898,7 +898,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey), + .queueStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -924,7 +924,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey), + .queueStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -952,7 +952,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey), + .queueStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1014,7 +1014,7 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) }) describe("when stake request has not been finalized", () => { @@ -1189,7 +1189,7 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(thirdParty) - .queueForStaking(tbtcDepositData.depositKey) + .queueStake(tbtcDepositData.depositKey) }) describe("when stake request has not been recalled", () => { From fbbf10d91eb2963c43a4fbe39b5b869d30de7809 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:08:16 +0100 Subject: [PATCH 091/122] initializeStakeRequest -> initializeStake --- core/contracts/AcreBitcoinDepositor.sol | 2 +- core/test/AcreBitcoinDepositor.test.ts | 40 ++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index cc1a432b8..5c5bc638d 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -238,7 +238,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @param reveal Deposit reveal data, see `IBridgeTypes.DepositRevealInfo`. /// @param staker The address to which the stBTC shares will be minted. /// @param referral Data used for referral program. - function initializeStakeRequest( + function initializeStake( IBridgeTypes.BitcoinTxInfo calldata fundingTx, IBridgeTypes.DepositRevealInfo calldata reveal, address staker, diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 0eb141c5d..825233226 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -88,11 +88,11 @@ describe("AcreBitcoinDepositor", () => { .updateDepositorFeeDivisor(defaultDepositorFeeDivisor) }) - describe("initializeStakeRequest", () => { + describe("initializeStake", () => { describe("when staker is zero address", () => { it("should revert", async () => { await expect( - bitcoinDepositor.initializeStakeRequest( + bitcoinDepositor.initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, ZeroAddress, @@ -114,7 +114,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, { ...tbtcDepositData.reveal, vault: invalidTbtcVault }, tbtcDepositData.staker, @@ -133,7 +133,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { tx = await bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, @@ -199,7 +199,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, @@ -215,14 +215,14 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() }) it("should revert", async () => { await expect( bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, @@ -236,7 +236,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() // Simulate deposit request finalization. await finalizeMinting(tbtcDepositData.depositKey) @@ -250,7 +250,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, @@ -264,7 +264,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() // Simulate deposit request finalization. await finalizeMinting(tbtcDepositData.depositKey) @@ -278,7 +278,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, @@ -292,7 +292,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() // Simulate deposit request finalization. await finalizeMinting(tbtcDepositData.depositKey) @@ -310,7 +310,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, @@ -337,7 +337,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() }) describe("when deposit was not bridged", () => { @@ -517,7 +517,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() }) describe("when deposit was not bridged", () => { @@ -750,7 +750,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() }) describe("when deposit was not bridged", () => { @@ -988,7 +988,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() }) describe("when stake request has not been queued", () => { @@ -1161,7 +1161,7 @@ describe("AcreBitcoinDepositor", () => { beforeAfterSnapshotWrapper() before(async () => { - await initializeStakeRequest() + await initializeStake() }) describe("when stake request has not been queued", () => { @@ -1480,10 +1480,10 @@ describe("AcreBitcoinDepositor", () => { }) }) - async function initializeStakeRequest() { + async function initializeStake() { await bitcoinDepositor .connect(thirdParty) - .initializeStakeRequest( + .initializeStake( tbtcDepositData.fundingTxInfo, tbtcDepositData.reveal, tbtcDepositData.staker, From 327c9f4ca72cf515981c59d14540e5322175b26c Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:09:24 +0100 Subject: [PATCH 092/122] finalizeStakeRequest -> finalizeStake --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- core/test/AcreBitcoinDepositor.test.ts | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 5c5bc638d..28ce5f201 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -273,7 +273,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// maximum deposit limit being reached), the `queueStake` function /// should be called to add the stake request to the staking queue. /// @param depositKey Deposit key identifying the deposit. - function finalizeStakeRequest(uint256 depositKey) external { + function finalizeStake(uint256 depositKey) external { transitionStakeRequestState( depositKey, StakeRequestState.Initialized, @@ -292,7 +292,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @notice This function should be called for previously initialized stake /// request, after tBTC bridging process was finalized, in case the - /// `finalizeStakeRequest` failed due to stBTC vault deposit limit + /// `finalizeStake` failed due to stBTC vault deposit limit /// being reached. /// @dev It queues the stake request, until the stBTC vault is ready to /// accept the deposit. The request must be finalized with `stakeFromQueue` diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 825233226..4c42ecfde 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -243,7 +243,7 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) + .finalizeStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -495,7 +495,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("finalizeStakeRequest", () => { + describe("finalizeStake", () => { beforeAfterSnapshotWrapper() describe("when stake request has not been initialized", () => { @@ -503,7 +503,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .finalizeStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -525,7 +525,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .finalizeStake(tbtcDepositData.depositKey), ).to.be.revertedWith("Deposit not finalized by the bridge") }) }) @@ -549,7 +549,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { tx = await bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) + .finalizeStake(tbtcDepositData.depositKey) }) it("should emit BridgingCompleted event", async () => { @@ -632,7 +632,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .finalizeStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -658,7 +658,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .finalizeStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -684,7 +684,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .finalizeStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -705,14 +705,14 @@ describe("AcreBitcoinDepositor", () => { // Finalize stake request. await bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) + .finalizeStake(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey), + .finalizeStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -945,7 +945,7 @@ describe("AcreBitcoinDepositor", () => { // Finalize stake request. await bitcoinDepositor .connect(thirdParty) - .finalizeStakeRequest(tbtcDepositData.depositKey) + .finalizeStake(tbtcDepositData.depositKey) }) it("should revert", async () => { From f226b5692d939fe9b9048acfac27f942b9507701 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:10:58 +0100 Subject: [PATCH 093/122] Update test cases names for stakes --- core/test/AcreBitcoinDepositor.test.ts | 90 +++++++++++++------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 4c42ecfde..aa9d953b8 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -103,7 +103,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("when staker is non zero address", () => { - describe("when stake request is not in progress", () => { + describe("when stake is not in progress", () => { describe("when tbtc vault address is incorrect", () => { beforeAfterSnapshotWrapper() @@ -151,7 +151,7 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should update stake request state", async () => { + it("should update stake state", async () => { const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -161,7 +161,7 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should not store stake request data in queue", async () => { + it("should not store stake data in queue", async () => { const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -211,7 +211,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request is already in progress", () => { + describe("when stake is already in progress", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -232,7 +232,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request is already finalized", () => { + describe("when stake is already finalized", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -260,7 +260,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request is already queued", () => { + describe("when stake is already queued", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -288,7 +288,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request is already recalled", () => { + describe("when stake is already recalled", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -323,7 +323,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("finalizeBridging", () => { - describe("when stake request has not been initialized", () => { + describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -333,7 +333,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been initialized", () => { + describe("when stake has been initialized", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -498,7 +498,7 @@ describe("AcreBitcoinDepositor", () => { describe("finalizeStake", () => { beforeAfterSnapshotWrapper() - describe("when stake request has not been initialized", () => { + describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -513,7 +513,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been initialized", () => { + describe("when stake has been initialized", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -538,7 +538,7 @@ describe("AcreBitcoinDepositor", () => { await finalizeMinting(tbtcDepositData.depositKey) }) - describe("when stake request has not been finalized", () => { + describe("when stake has not been finalized", () => { beforeAfterSnapshotWrapper() const expectedAssetsAmount = amountToStake @@ -572,7 +572,7 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should update stake request state", async () => { + it("should update stake state", async () => { const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -618,7 +618,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been queued", () => { + describe("when stake has been queued", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -627,7 +627,7 @@ describe("AcreBitcoinDepositor", () => { .queueStake(tbtcDepositData.depositKey) }) - describe("when stake request is still in the queue", () => { + describe("when stake is still in the queue", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -645,7 +645,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request is finalized from the queue", () => { + describe("when stake is finalized from the queue", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -671,7 +671,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been recalled", () => { + describe("when stake has been recalled", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -698,11 +698,11 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been finalized", () => { + describe("when stake has been finalized", () => { beforeAfterSnapshotWrapper() before(async () => { - // Finalize stake request. + // Finalize stake. await bitcoinDepositor .connect(thirdParty) .finalizeStake(tbtcDepositData.depositKey) @@ -731,7 +731,7 @@ describe("AcreBitcoinDepositor", () => { describe("queueStake", () => { beforeAfterSnapshotWrapper() - describe("when stake request has not been initialized", () => { + describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -746,7 +746,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been initialized", () => { + describe("when stake has been initialized", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -771,7 +771,7 @@ describe("AcreBitcoinDepositor", () => { await finalizeMinting(tbtcDepositData.depositKey) }) - describe("when stake request has not been finalized", () => { + describe("when stake has not been finalized", () => { beforeAfterSnapshotWrapper() let tx: ContractTransactionResponse @@ -802,7 +802,7 @@ describe("AcreBitcoinDepositor", () => { ) }) - it("should update stake request state", async () => { + it("should update stake state", async () => { const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -858,7 +858,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been queued", () => { + describe("when stake has been queued", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -867,7 +867,7 @@ describe("AcreBitcoinDepositor", () => { .queueStake(tbtcDepositData.depositKey) }) - describe("when stake request is still in the queue", () => { + describe("when stake is still in the queue", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -885,7 +885,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request is finalized from the queue", () => { + describe("when stake is finalized from the queue", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -911,7 +911,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been recalled", () => { + describe("when stake has been recalled", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -938,11 +938,11 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been finalized", () => { + describe("when stake has been finalized", () => { beforeAfterSnapshotWrapper() before(async () => { - // Finalize stake request. + // Finalize stake. await bitcoinDepositor .connect(thirdParty) .finalizeStake(tbtcDepositData.depositKey) @@ -969,7 +969,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("stakeFromQueue", () => { - describe("when stake request has not been initialized", () => { + describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -984,14 +984,14 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been initialized", () => { + describe("when stake has been initialized", () => { beforeAfterSnapshotWrapper() before(async () => { await initializeStake() }) - describe("when stake request has not been queued", () => { + describe("when stake has not been queued", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -1006,7 +1006,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been queued", () => { + describe("when stake has been queued", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -1017,7 +1017,7 @@ describe("AcreBitcoinDepositor", () => { .queueStake(tbtcDepositData.depositKey) }) - describe("when stake request has not been finalized", () => { + describe("when stake has not been finalized", () => { beforeAfterSnapshotWrapper() const expectedAssetsAmount = amountToStake @@ -1031,7 +1031,7 @@ describe("AcreBitcoinDepositor", () => { .stakeFromQueue(tbtcDepositData.depositKey) }) - it("should update stake request state", async () => { + it("should update stake state", async () => { const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -1086,7 +1086,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been finalized", () => { + describe("when stake has been finalized", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -1112,7 +1112,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been recalled", () => { + describe("when stake has been recalled", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -1142,7 +1142,7 @@ describe("AcreBitcoinDepositor", () => { }) describe("recallFromQueue", () => { - describe("when stake request has not been initialized", () => { + describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor @@ -1157,14 +1157,14 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been initialized", () => { + describe("when stake has been initialized", () => { beforeAfterSnapshotWrapper() before(async () => { await initializeStake() }) - describe("when stake request has not been queued", () => { + describe("when stake has not been queued", () => { beforeAfterSnapshotWrapper() it("should revert", async () => { @@ -1181,7 +1181,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been queued", () => { + describe("when stake has been queued", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -1192,7 +1192,7 @@ describe("AcreBitcoinDepositor", () => { .queueStake(tbtcDepositData.depositKey) }) - describe("when stake request has not been recalled", () => { + describe("when stake has not been recalled", () => { describe("when caller is non-staker", () => { it("should revert", async () => { await expect( @@ -1217,7 +1217,7 @@ describe("AcreBitcoinDepositor", () => { .recallFromQueue(tbtcDepositData.depositKey) }) - it("should update stake request state", async () => { + it("should update stake state", async () => { const stakeRequest = await bitcoinDepositor.stakeRequests( tbtcDepositData.depositKey, ) @@ -1257,7 +1257,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been finalized", () => { + describe("when stake has been finalized", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -1283,7 +1283,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake request has been recalled", () => { + describe("when stake has been recalled", () => { beforeAfterSnapshotWrapper() before(async () => { From 7f94c4447861b2c97e245e8426faadb8e173bd55 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:18:57 +0100 Subject: [PATCH 094/122] Minor docs improvements --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 28ce5f201..502889c9a 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -388,7 +388,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { // TODO: Handle minimum deposit amount in tBTC Bridge vs stBTC. - /// @notice Encode staker address and referral as extra data. + /// @notice Encodes staker address and referral as extra data. /// @dev Packs the data to bytes32: 20 bytes of staker address and /// 2 bytes of referral, 10 bytes of trailing zeros. /// @param staker The address to which the stBTC shares will be minted. @@ -401,7 +401,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { return bytes32(abi.encodePacked(staker, referral)); } - /// @notice Decodes staker address and referral from extra data, + /// @notice Decodes staker address and referral from extra data. /// @dev Unpacks the data from bytes32: 20 bytes of staker address and /// 2 bytes of referral, 10 bytes of trailing zeros. /// @param extraData Encoded extra data. From ac3f268296432fc262734facafdf21b8939eeb26 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:19:48 +0100 Subject: [PATCH 095/122] Remove underscores for constructor params names --- core/contracts/test/AcreBitcoinDepositor.t.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/contracts/test/AcreBitcoinDepositor.t.sol b/core/contracts/test/AcreBitcoinDepositor.t.sol index 6ae6d71e9..fee3b1630 100644 --- a/core/contracts/test/AcreBitcoinDepositor.t.sol +++ b/core/contracts/test/AcreBitcoinDepositor.t.sol @@ -8,11 +8,11 @@ import {AcreBitcoinDepositor} from "../AcreBitcoinDepositor.sol"; /// https://book.getfoundry.sh/tutorials/best-practices#internal-functions contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { constructor( - address _bridge, - address _tbtcVault, - address _tbtcToken, - address _stbtc - ) AcreBitcoinDepositor(_bridge, _tbtcVault, _tbtcToken, _stbtc) {} + address bridge, + address tbtcVault, + address tbtcToken, + address stbtc + ) AcreBitcoinDepositor(bridge, tbtcVault, tbtcToken, stbtc) {} function exposed_finalizeBridging( uint256 depositKey From 628de755500f27a3c12ea2917baa2a6d82ad2cd1 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 21 Feb 2024 13:57:01 +0100 Subject: [PATCH 096/122] Use initializeStake function instead of initializeStakeRequest The function was renamed in the AcreBitcoinDepositor contract. --- sdk/src/lib/ethereum/tbtc-depositor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/lib/ethereum/tbtc-depositor.ts b/sdk/src/lib/ethereum/tbtc-depositor.ts index ac2cdf3fd..1f25d2570 100644 --- a/sdk/src/lib/ethereum/tbtc-depositor.ts +++ b/sdk/src/lib/ethereum/tbtc-depositor.ts @@ -86,7 +86,7 @@ class EthereumTBTCDepositor const { staker, referral } = this.decodeExtraData(extraData) - const tx = await this.instance.initializeStakeRequest( + const tx = await this.instance.initializeStake( fundingTx, reveal, `0x${staker.identifierHex}`, From 75295470d4042afa2f5874497bd63ad7abf2c8a6 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 22 Feb 2024 09:20:06 +0100 Subject: [PATCH 097/122] Fix initializeStake func name in depositor mock --- sdk/test/lib/ethereum/tbtc-depositor.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sdk/test/lib/ethereum/tbtc-depositor.test.ts b/sdk/test/lib/ethereum/tbtc-depositor.test.ts index 2edca897f..a631bbefe 100644 --- a/sdk/test/lib/ethereum/tbtc-depositor.test.ts +++ b/sdk/test/lib/ethereum/tbtc-depositor.test.ts @@ -21,7 +21,7 @@ describe("TBTCDepositor", () => { const mockedContractInstance = { tbtcVault: jest.fn().mockImplementation(() => vaultAddress.identifierHex), - initializeStakeRequest: jest.fn(), + initializeStake: jest.fn(), } let depositor: EthereumTBTCDepositor let depositorAddress: EthereumAddress @@ -103,7 +103,7 @@ describe("TBTCDepositor", () => { let result: Hex beforeAll(async () => { - mockedContractInstance.initializeStakeRequest.mockReturnValue({ + mockedContractInstance.initializeStake.mockReturnValue({ hash: mockedTx.toPrefixedString(), }) @@ -154,9 +154,7 @@ describe("TBTCDepositor", () => { vault: `0x${vaultAddress.identifierHex}`, } - expect( - mockedContractInstance.initializeStakeRequest, - ).toHaveBeenCalledWith( + expect(mockedContractInstance.initializeStake).toHaveBeenCalledWith( btcTxInfo, revealInfo, `0x${staker.identifierHex}`, From 18dc65c26162a28bcddea7f0ee36ea097edf932e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 22 Feb 2024 11:57:49 +0100 Subject: [PATCH 098/122] Exclude contracts/test dir from slither checks The directory defines contracts used for testing only, we don't need to run slither for them. --- core/slither.config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/slither.config.json b/core/slither.config.json index fed211ee1..46c3cb424 100644 --- a/core/slither.config.json +++ b/core/slither.config.json @@ -1,5 +1,5 @@ { "detectors_to_exclude": "assembly,naming-convention,timestamp,pragma,solc-version", "hardhat_artifacts_directory": "build", - "filter_paths": "node_modules/.*" + "filter_paths": "contracts/test|node_modules" } From 6f48b162cc99170c326ded7a1c346a0fca2c4ea6 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 22 Feb 2024 12:14:20 +0100 Subject: [PATCH 099/122] Rename recallFromQueue to cancelQueuedStake As per suggestion in https://github.com/thesis/acre/pull/91#discussion_r1497622518 we decided to replace recall with cancel. --- core/contracts/AcreBitcoinDepositor.sol | 24 ++++++------ core/test/AcreBitcoinDepositor.test.ts | 50 ++++++++++++------------- core/types/index.ts | 2 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 502889c9a..a46d5560a 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -47,7 +47,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { Finalized, Queued, FinalizedFromQueue, - RecalledFromQueue + CancelledFromQueue } struct StakeRequest { @@ -139,11 +139,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 stakedAmount ); - /// @notice Emitted when a stake request is recalled. + /// @notice Emitted when a queued stake request is cancelled. /// @param depositKey Deposit key identifying the deposit. /// @param staker Address of the staker. - /// @param amountToStake Amount of recalled tBTC tokens. - event StakeRequestRecalled( + /// @param amountToStake Amount of queued tBTC tokens that got cancelled. + event StakeRequestCancelledFromQueue( uint256 indexed depositKey, address indexed staker, uint256 amountToStake @@ -187,8 +187,8 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// which the function was already called. error BridgingFinalizationAlreadyCalled(); - /// @dev Attempted to finalize or recall a stake request that was not added - /// to the queue, or was already finalized or recalled. + /// @dev Attempted to finalize or cancel a stake request that was not added + /// to the queue, or was already finalized or cancelled. error StakeRequestNotQueued(); /// @dev Attempted to call function by an account that is not the staker. @@ -298,7 +298,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// accept the deposit. The request must be finalized with `stakeFromQueue` /// after the limit is increased or other user withdraws their funds /// from the stBTC contract to make place for another deposit. - /// The staker has a possibility to submit `recallFromQueue` that + /// The staker has a possibility to submit `cancelQueuedStake` that /// will withdraw the minted tBTC token and abort staking process. /// @param depositKey Deposit key identifying the deposit. function queueStake(uint256 depositKey) external { @@ -344,8 +344,8 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { stbtc.deposit(amountToStake, request.staker); } - /// @notice Recall bridged tBTC tokens from the staking queue. This - /// function can be called by the staker to recover tBTC that cannot + /// @notice Cancel queued stake. + /// The function can be called by the staker to recover tBTC that cannot /// be finalized to stake in stBTC contract due to a deposit limit being /// reached. /// @dev This function can be called only after the stake request was added @@ -353,11 +353,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @dev Only staker provided in the extra data of the stake request can /// call this function. /// @param depositKey Deposit key identifying the deposit. - function recallFromQueue(uint256 depositKey) external { + function cancelQueuedStake(uint256 depositKey) external { transitionStakeRequestState( depositKey, StakeRequestState.Queued, - StakeRequestState.RecalledFromQueue + StakeRequestState.CancelledFromQueue ); StakeRequest storage request = stakeRequests[depositKey]; @@ -370,7 +370,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint256 amount = request.queuedAmount; delete (request.queuedAmount); - emit StakeRequestRecalled(depositKey, request.staker, amount); + emit StakeRequestCancelledFromQueue(depositKey, request.staker, amount); tbtcToken.safeTransfer(request.staker, amount); } diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index aa9d953b8..2640f6bfa 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -288,7 +288,7 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake is already recalled", () => { + describe("when stake is already cancelled", () => { beforeAfterSnapshotWrapper() before(async () => { @@ -303,7 +303,7 @@ describe("AcreBitcoinDepositor", () => { await bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey) + .cancelQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -671,13 +671,13 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake has been recalled", () => { + describe("when stake has been cancelled", () => { beforeAfterSnapshotWrapper() before(async () => { await bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey) + .cancelQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -691,7 +691,7 @@ describe("AcreBitcoinDepositor", () => { "UnexpectedStakeRequestState", ) .withArgs( - StakeRequestState.RecalledFromQueue, + StakeRequestState.CancelledFromQueue, StakeRequestState.Initialized, ) }) @@ -911,13 +911,13 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake has been recalled", () => { + describe("when stake has been cancelled", () => { beforeAfterSnapshotWrapper() before(async () => { await bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey) + .cancelQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -931,7 +931,7 @@ describe("AcreBitcoinDepositor", () => { "UnexpectedStakeRequestState", ) .withArgs( - StakeRequestState.RecalledFromQueue, + StakeRequestState.CancelledFromQueue, StakeRequestState.Initialized, ) }) @@ -1112,13 +1112,13 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake has been recalled", () => { + describe("when stake has been cancelled", () => { beforeAfterSnapshotWrapper() before(async () => { await bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey) + .cancelQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -1132,7 +1132,7 @@ describe("AcreBitcoinDepositor", () => { "UnexpectedStakeRequestState", ) .withArgs( - StakeRequestState.RecalledFromQueue, + StakeRequestState.CancelledFromQueue, StakeRequestState.Queued, ) }) @@ -1141,13 +1141,13 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("recallFromQueue", () => { + describe("cancelQueuedStake", () => { describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey), + .cancelQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1171,7 +1171,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey), + .cancelQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1192,13 +1192,13 @@ describe("AcreBitcoinDepositor", () => { .queueStake(tbtcDepositData.depositKey) }) - describe("when stake has not been recalled", () => { + describe("when stake has not been cancelled", () => { describe("when caller is non-staker", () => { it("should revert", async () => { await expect( bitcoinDepositor .connect(thirdParty) - .recallFromQueue(tbtcDepositData.depositKey), + .cancelQueuedStake(tbtcDepositData.depositKey), ).to.be.revertedWithCustomError( bitcoinDepositor, "CallerNotStaker", @@ -1214,7 +1214,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { tx = await bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey) + .cancelQueuedStake(tbtcDepositData.depositKey) }) it("should update stake state", async () => { @@ -1223,7 +1223,7 @@ describe("AcreBitcoinDepositor", () => { ) expect(stakeRequest.state).to.be.equal( - StakeRequestState.RecalledFromQueue, + StakeRequestState.CancelledFromQueue, ) }) @@ -1237,9 +1237,9 @@ describe("AcreBitcoinDepositor", () => { ).to.be.equal(0) }) - it("should emit StakeRequestRecalled event", async () => { + it("should emit StakeRequestCancelledFromQueue event", async () => { await expect(tx) - .to.emit(bitcoinDepositor, "StakeRequestRecalled") + .to.emit(bitcoinDepositor, "StakeRequestCancelledFromQueue") .withArgs( tbtcDepositData.depositKey, staker.address, @@ -1270,7 +1270,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey), + .cancelQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1283,27 +1283,27 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("when stake has been recalled", () => { + describe("when stake has been cancelled", () => { beforeAfterSnapshotWrapper() before(async () => { await bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey) + .cancelQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( bitcoinDepositor .connect(staker) - .recallFromQueue(tbtcDepositData.depositKey), + .cancelQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, "UnexpectedStakeRequestState", ) .withArgs( - StakeRequestState.RecalledFromQueue, + StakeRequestState.CancelledFromQueue, StakeRequestState.Queued, ) }) diff --git a/core/types/index.ts b/core/types/index.ts index a52a5c775..8365a2fc1 100644 --- a/core/types/index.ts +++ b/core/types/index.ts @@ -5,5 +5,5 @@ export enum StakeRequestState { Finalized, Queued, FinalizedFromQueue, - RecalledFromQueue, + CancelledFromQueue, } From 55087aed2c0c75bb5eee11e5935b0588bf0eb867 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 22 Feb 2024 12:18:30 +0100 Subject: [PATCH 100/122] Rename stakeFromQueue to finalizeQueuedStake To be consistent with cancellQueuedStake function we rename this function to finalizeQueuedStake. --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- core/test/AcreBitcoinDepositor.test.ts | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index a46d5560a..a01ac91ef 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -295,7 +295,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// `finalizeStake` failed due to stBTC vault deposit limit /// being reached. /// @dev It queues the stake request, until the stBTC vault is ready to - /// accept the deposit. The request must be finalized with `stakeFromQueue` + /// accept the deposit. The request must be finalized with `finalizeQueuedStake` /// after the limit is increased or other user withdraws their funds /// from the stBTC contract to make place for another deposit. /// The staker has a possibility to submit `cancelQueuedStake` that @@ -318,7 +318,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @notice This function should be called for previously queued stake /// request, when stBTC vault is able to accept a deposit. /// @param depositKey Deposit key identifying the deposit. - function stakeFromQueue(uint256 depositKey) external { + function finalizeQueuedStake(uint256 depositKey) external { transitionStakeRequestState( depositKey, StakeRequestState.Queued, diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 2640f6bfa..cb3bb634e 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -651,7 +651,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey) + .finalizeQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -891,7 +891,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey) + .finalizeQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { @@ -968,13 +968,13 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("stakeFromQueue", () => { + describe("finalizeQueuedStake", () => { describe("when stake has not been initialized", () => { it("should revert", async () => { await expect( bitcoinDepositor .connect(staker) - .stakeFromQueue(tbtcDepositData.depositKey), + .finalizeQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -996,7 +996,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey), + .finalizeQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1028,7 +1028,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { tx = await bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey) + .finalizeQueuedStake(tbtcDepositData.depositKey) }) it("should update stake state", async () => { @@ -1092,14 +1092,14 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey) + .finalizeQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { await expect( bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey), + .finalizeQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1125,7 +1125,7 @@ describe("AcreBitcoinDepositor", () => { await expect( bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey), + .finalizeQueuedStake(tbtcDepositData.depositKey), ) .to.be.revertedWithCustomError( bitcoinDepositor, @@ -1263,7 +1263,7 @@ describe("AcreBitcoinDepositor", () => { before(async () => { await bitcoinDepositor .connect(thirdParty) - .stakeFromQueue(tbtcDepositData.depositKey) + .finalizeQueuedStake(tbtcDepositData.depositKey) }) it("should revert", async () => { From 3e1f42c4fffaac5235f272f671967ae117545988 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 22 Feb 2024 16:56:38 +0100 Subject: [PATCH 101/122] Add misfund recovery to the Depositor contract Implement functions for governance to recover ERC20 and ERC721 misfunded tokens. Recovery of tBTC token is not allowed. --- core/contracts/AcreBitcoinDepositor.sol | 37 +++++- core/test/AcreBitcoinDepositor.test.ts | 145 +++++++++++++++++++++++- 2 files changed, 180 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index a01ac91ef..5e7e39ece 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -4,12 +4,12 @@ pragma solidity ^0.8.21; import "@openzeppelin/contracts/access/Ownable2Step.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; import {stBTC} from "./stBTC.sol"; -// TODO: Add Missfund token protection. // TODO: Make Upgradable // TODO: Make Pausable @@ -194,6 +194,9 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @dev Attempted to call function by an account that is not the staker. error CallerNotStaker(); + /// @dev Attempted to recover tBTC token. + error RecoverTbtcNotAllowed(); + /// @notice Acre Bitcoin Depositor contract constructor. /// @param bridge tBTC Bridge contract instance. /// @param tbtcVault tBTC Vault contract instance. @@ -386,6 +389,38 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { emit DepositorFeeDivisorUpdated(newDepositorFeeDivisor); } + /// @notice Allows the governance to recover any ERC20 token sent - mistakenly + /// or not - to the contract address. + /// @dev It doesn't allow the governance to recover tBTC tokens. + /// @param token Address of the recovered ERC20 token contract. + /// @param recipient Address the recovered token should be sent to. + /// @param amount Recovered amount. + function recoverERC20( + IERC20 token, + address recipient, + uint256 amount + ) external onlyOwner { + if (address(token) == address(tbtcToken)) + revert RecoverTbtcNotAllowed(); + + token.safeTransfer(recipient, amount); + } + + /// @notice Allows the governance to recover any ERC721 token sent mistakenly + /// to the contract address. + /// @param token Address of the recovered ERC721 token contract. + /// @param recipient Address the recovered token should be sent to. + /// @param tokenId Identifier of the recovered token. + /// @param data Additional data. + function recoverERC721( + IERC721 token, + address recipient, + uint256 tokenId, + bytes calldata data + ) external onlyOwner { + token.safeTransferFrom(address(this), recipient, tokenId, data); + } + // TODO: Handle minimum deposit amount in tBTC Bridge vs stBTC. /// @notice Encodes staker address and referral as extra data. diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index cb3bb634e..7b2d0908f 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -18,7 +18,7 @@ import type { import { deployment } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" import { tbtcDepositData } from "./data/tbtc" -import { to1ePrecision } from "./utils" +import { to1e18, to1ePrecision } from "./utils" async function fixture() { const { bitcoinDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = @@ -1368,6 +1368,149 @@ describe("AcreBitcoinDepositor", () => { }) }) + describe("recoverERC20", () => { + beforeAfterSnapshotWrapper() + + let testToken: TestERC20 + + before(async () => { + const TestToken = await ethers.getContractFactory("TestERC20") + testToken = await TestToken.deploy("Test ERC20", "T20") + await testToken.waitForDeployment() + }) + + describe("when caller is not governance", () => { + it("should revert", async () => { + await expect( + bitcoinDepositor + .connect(thirdParty) + .recoverERC20( + await testToken.getAddress(), + thirdParty.address, + to1e18(800), + ), + ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "OwnableUnauthorizedAccount", + ) + .withArgs(thirdParty.address) + }) + }) + + describe("when caller is governance", () => { + describe("when recovering tBTC token", () => { + beforeAfterSnapshotWrapper() + + it("should do a successful recovery", async () => { + await expect( + bitcoinDepositor + .connect(governance) + .recoverERC20( + await tbtc.getAddress(), + thirdParty.address, + to1e18(800), + ), + ).to.be.revertedWithCustomError( + bitcoinDepositor, + "RecoverTbtcNotAllowed", + ) + }) + }) + + describe("when recovering non-tBTC token", () => { + beforeAfterSnapshotWrapper() + + const initialAmount = to1e18(1000) + const amountToRecover = to1e18(800) + let tx: ContractTransactionResponse + + before(async () => { + await testToken.mint(thirdParty.address, initialAmount) + await testToken + .connect(thirdParty) + .transfer(await bitcoinDepositor.getAddress(), initialAmount) + + tx = await bitcoinDepositor + .connect(governance) + .recoverERC20( + await testToken.getAddress(), + thirdParty.address, + amountToRecover, + ) + }) + + it("should do a successful recovery", async () => { + await expect(tx).to.changeTokenBalances( + testToken, + [bitcoinDepositor, thirdParty], + [-amountToRecover, amountToRecover], + ) + }) + }) + }) + }) + + describe("recoverERC721", () => { + beforeAfterSnapshotWrapper() + + let testToken: TestERC721 + + before(async () => { + const TestToken = await ethers.getContractFactory("TestERC721") + testToken = await TestToken.deploy() + await testToken.waitForDeployment() + }) + + describe("when caller is not governance", () => { + it("should revert", async () => { + await expect( + bitcoinDepositor + .connect(thirdParty) + .recoverERC721( + await testToken.getAddress(), + thirdParty.address, + 1, + "0x", + ), + ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "OwnableUnauthorizedAccount", + ) + .withArgs(thirdParty.address) + }) + }) + + context("when called with correct parameters", () => { + beforeAfterSnapshotWrapper() + + before(async () => { + await testToken.mint(thirdParty.address, 1) + await testToken + .connect(thirdParty) + .transferFrom( + thirdParty.address, + await bitcoinDepositor.getAddress(), + 1, + ) + + await bitcoinDepositor + .connect(governance) + .recoverERC721( + await testToken.getAddress(), + thirdParty.address, + 1, + "0x", + ) + }) + + it("should do a successful recovery", async () => { + expect(await testToken.ownerOf(1)).to.be.equal(thirdParty.address) + }) + }) + }) + const extraDataValidTestData = new Map< string, { From 0ff413a3f714c0692f20c1942731e9d9315825df Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 23 Feb 2024 08:30:40 +0100 Subject: [PATCH 102/122] Add missing TestERC721 type import --- core/test/AcreBitcoinDepositor.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 7b2d0908f..2e898ed1c 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -14,6 +14,7 @@ import type { TBTCVaultStub, AcreBitcoinDepositorHarness, TestERC20, + TestERC721, } from "../typechain" import { deployment } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" From 28b65a2c0e56096a0ece6e3e92161ce3e0fa7a3d Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Fri, 23 Feb 2024 08:33:10 +0100 Subject: [PATCH 103/122] Add TestERC721 contract implementation --- core/contracts/test/TestERC721.sol | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 core/contracts/test/TestERC721.sol diff --git a/core/contracts/test/TestERC721.sol b/core/contracts/test/TestERC721.sol new file mode 100644 index 000000000..23f75cf7a --- /dev/null +++ b/core/contracts/test/TestERC721.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +contract TestERC721 is ERC721 { + string public constant NAME = "Test ERC721 Token"; + string public constant SYMBOL = "TT"; + + constructor() ERC721(NAME, SYMBOL) {} + + function mint(address to, uint256 tokenId) public { + _mint(to, tokenId); + } +} From c03c37aa5248c8694482ae893e379f83f9f12f1f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 26 Feb 2024 17:36:26 +0100 Subject: [PATCH 104/122] Store queued amount as uint88 Before StakeRequest was `uint8` + `uint160` + `uint256` which gives 2 storage slots. However, we don't need `uint256` for `queuedAmount` as the maximum BTC supply is 21M. That gives `21000000000000000000000000` in 1e18 precision. In practice, we can fit everything in one slot: `uint8 + uint160 + uint88`. The `uint88` type gives us the max value of `2^88-1 = 309485009821345068724781055`. This is more than enough to store the entire BTC supply because `21000000000000000000000000 < 309485009821345068724781055 = 21M < ~309M`. --- core/contracts/AcreBitcoinDepositor.sol | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 5e7e39ece..4b91f0db2 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts/access/Ownable2Step.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; @@ -58,7 +59,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { address staker; // tBTC token amount to stake after deducting tBTC minting fees and the // Depositor fee. Stored only when request is queued. - uint256 queuedAmount; + uint88 queuedAmount; } /// @notice tBTC Token contract. @@ -313,7 +314,10 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequest storage request = stakeRequests[depositKey]; - (request.queuedAmount, request.staker) = finalizeBridging(depositKey); + uint256 amountToStake; + (amountToStake, request.staker) = finalizeBridging(depositKey); + + request.queuedAmount = SafeCast.toUint88(amountToStake); emit StakeRequestQueued(depositKey, msg.sender, request.queuedAmount); } From 79f4d43e0c6fc1a5bc67218aa40b92900b7f7b3d Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 26 Feb 2024 17:44:57 +0100 Subject: [PATCH 105/122] Re-order state variables to optimize storage We can re-order those state variables to leverage tight packing and get a more optimal storage layout (right now it's 4 slots). For example: ``` // 1st slot mapping(uint256 => StakeRequest) public stakeRequests; // 32 bytes // 2nd slot IERC20 public immutable tbtcToken; // 20 bytes // 3rd slot stBTC public immutable stbtc; // 20 bytes uint64 public depositorFeeDivisor; // 8 bytes ``` --- core/contracts/AcreBitcoinDepositor.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 4b91f0db2..9ee002df3 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -62,15 +62,15 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { uint88 queuedAmount; } + /// @notice Mapping of stake requests. + /// @dev The key is a deposit key identifying the deposit. + mapping(uint256 => StakeRequest) public stakeRequests; + /// @notice tBTC Token contract. IERC20 public immutable tbtcToken; /// @notice stBTC contract. stBTC public immutable stbtc; - /// @notice Mapping of stake requests. - /// @dev The key is a deposit key identifying the deposit. - mapping(uint256 => StakeRequest) public stakeRequests; - /// @notice Divisor used to compute the depositor fee taken from each deposit /// and transferred to the treasury upon stake request finalization. /// @dev That fee is computed as follows: From 48f6c3770de9b94233173905de019e984b26ad17 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 26 Feb 2024 17:48:09 +0100 Subject: [PATCH 106/122] Remove immutable variables from AcreBitcoinDepositor As per @lukasz-zimnoch suggestion: > If we aim to make `AcreBitcoinDepositor` upgradable, I would consider > removing the `immutable` keyword. Otherwise, we will have to use a >constructor to initialize those fields and they will be set at the > bytecode level, not in the proxy's storage. This is rather not >recommended for upgradable contracts as the OZ plugin cannot ensure >safety of the upgrade. > > See [OZ docs](https://docs.openzeppelin.com/upgrades-plugins/1.x/faq#why-cant-i-use-immutable-variables) for reference. --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 9ee002df3..2a3ab063a 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -67,9 +67,9 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { mapping(uint256 => StakeRequest) public stakeRequests; /// @notice tBTC Token contract. - IERC20 public immutable tbtcToken; + IERC20 public tbtcToken; /// @notice stBTC contract. - stBTC public immutable stbtc; + stBTC public stbtc; /// @notice Divisor used to compute the depositor fee taken from each deposit /// and transferred to the treasury upon stake request finalization. From 591a9b325f656e9aac3c3597edccf8bf10414528 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Mon, 26 Feb 2024 17:51:20 +0100 Subject: [PATCH 107/122] Update TBTCDepositorProxy ref to AbstractTBTCDepositor The contract was renamed to AbstractTBTCDepositor --- core/contracts/AcreBitcoinDepositor.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 2a3ab063a..130b0a37c 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -484,7 +484,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// tBTC amount reduced by the depositor fee. /// @dev IMPORTANT NOTE: The minted tBTC amount used by this function is an /// approximation. See documentation of the - /// {{TBTCDepositorProxy#_calculateTbtcAmount}} responsible for calculating + /// {{AbstractTBTCDepositor#_calculateTbtcAmount}} responsible for calculating /// this value for more details. /// @param depositKey Deposit key identifying the deposit. /// @return amountToStake tBTC token amount to stake after deducting tBTC bridging From e0b8d6c369e65d344f2d1fd2613223dbf5da9710 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 27 Feb 2024 10:29:08 +0100 Subject: [PATCH 108/122] Check if depositor balance is enough for bridged amount Due to how AbstractTBTCDepositor#_calculateTbtcAmount approximates the bridged tBTC amount, there is a low chance that balance of depositor contract is lower than the calculated amount. This is a signal to the governance to top-up the reserve in the depositor contract. --- core/contracts/AcreBitcoinDepositor.sol | 20 ++ core/contracts/test/MockTbtcBridge.sol | 13 +- core/test/AcreBitcoinDepositor.test.ts | 245 +++++++++++++----------- 3 files changed, 163 insertions(+), 115 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 130b0a37c..406f431e4 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -170,6 +170,15 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequestState expectedState ); + /// @dev Attempted to finalize bridging with depositor's contract tBTC balance + /// lower than the calculated bridged tBTC amount. This error means + /// that Governance should top-up the tBTC reserve for bridging fees + /// approximation. + error InsufficientTbtcBalance( + uint256 amountToStake, + uint256 currentBalance + ); + /// @dev Attempted to notify a bridging completion, while it was already /// notified. error BridgingCompletionAlreadyNotified(); @@ -486,6 +495,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// approximation. See documentation of the /// {{AbstractTBTCDepositor#_calculateTbtcAmount}} responsible for calculating /// this value for more details. + /// @dev In case balance of tBTC tokens in this contract doesn't meet the + /// calculated tBTC amount, the function reverts with `InsufficientTbtcBalance` + /// error. This case requires Governance's validation, as tBTC Bridge minting + /// fees might changed in the way that reserve mentioned in + /// {{AbstractTBTCDepositor#_calculateTbtcAmount}} needs a top-up. /// @param depositKey Deposit key identifying the deposit. /// @return amountToStake tBTC token amount to stake after deducting tBTC bridging /// fees and the depositor fee. @@ -499,6 +513,12 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { bytes32 extraData ) = _finalizeDeposit(depositKey); + // Check if current balance is sufficient to finalize bridging of `tbtcAmount`. + uint256 currentBalance = tbtcToken.balanceOf(address(this)); + if (tbtcAmount > tbtcToken.balanceOf(address(this))) { + revert InsufficientTbtcBalance(tbtcAmount, currentBalance); + } + // Compute depositor fee. The fee is calculated based on the initial funding // transaction amount, before the tBTC protocol network fees were taken. uint256 depositorFee = depositorFeeDivisor > 0 diff --git a/core/contracts/test/MockTbtcBridge.sol b/core/contracts/test/MockTbtcBridge.sol index 4f1398f52..fa78a3be3 100644 --- a/core/contracts/test/MockTbtcBridge.sol +++ b/core/contracts/test/MockTbtcBridge.sol @@ -24,8 +24,6 @@ contract TBTCVaultStub is MockTBTCVault { function finalizeOptimisticMintingRequest( uint256 depositKey ) public override { - MockTBTCVault.finalizeOptimisticMintingRequest(depositKey); - IBridgeTypes.DepositRequest memory deposit = bridge.deposits( depositKey ); @@ -45,6 +43,15 @@ contract TBTCVaultStub is MockTBTCVault { uint256 amountToMint = amountSubTreasury - omFee - txMaxFee; - tbtc.mint(deposit.depositor, amountToMint); + finalizeOptimisticMintingRequestWithAmount(depositKey, amountToMint); + } + + function finalizeOptimisticMintingRequestWithAmount( + uint256 depositKey, + uint256 amountToMint + ) public { + MockTBTCVault.finalizeOptimisticMintingRequest(depositKey); + + tbtc.mint(bridge.deposits(depositKey).depositor, amountToMint); } } diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 2e898ed1c..b11a079f8 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -354,142 +354,156 @@ describe("AcreBitcoinDepositor", () => { describe("when deposit was bridged", () => { beforeAfterSnapshotWrapper() - before(async () => { - // Simulate deposit request finalization. - await finalizeMinting(tbtcDepositData.depositKey) - }) + describe("when depositor contract balance is lower than bridged amount", () => { + beforeAfterSnapshotWrapper() - describe("when bridging finalization has not been called", () => { - describe("when depositor fee divisor is not zero", () => { - beforeAfterSnapshotWrapper() + // The minted value should be less than calculated `bridgedTbtcAmount`. + const mintedAmount = to1ePrecision(7455, 10) // 7455 satoshi - let returnedValue: bigint - let tx: ContractTransactionResponse - - before(async () => { - returnedValue = await bitcoinDepositor - .connect(thirdParty) - .exposed_finalizeBridging.staticCall(tbtcDepositData.depositKey) + before(async () => { + // Simulate deposit request finalization. + await finalizeMinting(tbtcDepositData.depositKey, mintedAmount) + }) - tx = await bitcoinDepositor + it("should revert", async () => { + await expect( + bitcoinDepositor .connect(thirdParty) - .exposed_finalizeBridging(tbtcDepositData.depositKey) - }) + .exposed_finalizeBridging(tbtcDepositData.depositKey), + ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "InsufficientTbtcBalance", + ) + .withArgs(bridgedTbtcAmount, mintedAmount) + }) + }) - it("should emit BridgingCompleted event", async () => { - await expect(tx) - .to.emit(bitcoinDepositor, "BridgingCompleted") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - tbtcDepositData.referral, - bridgedTbtcAmount, - depositorFee, - ) - }) + describe("when depositor contract balance is higher than bridged amount", () => { + beforeAfterSnapshotWrapper() - it("should return amount to stake", () => { - expect(returnedValue[0]).to.be.equal(amountToStake) - }) + before(async () => { + // Simulate deposit request finalization. + await finalizeMinting(tbtcDepositData.depositKey) + }) - it("should return staker", () => { - expect(returnedValue[1]).to.be.equal(tbtcDepositData.staker) - }) + describe("when bridging finalization has not been called", () => { + describe("when depositor fee divisor is not zero", () => { + beforeAfterSnapshotWrapper() - it("should transfer depositor fee", async () => { - await expect(tx).to.changeTokenBalances( - tbtc, - [treasury], - [depositorFee], - ) - }) - }) + let returnedValue: bigint + let tx: ContractTransactionResponse - describe("when depositor fee divisor is zero", () => { - beforeAfterSnapshotWrapper() + before(async () => { + returnedValue = await bitcoinDepositor + .connect(thirdParty) + .exposed_finalizeBridging.staticCall( + tbtcDepositData.depositKey, + ) - let returnedValue: bigint - let tx: ContractTransactionResponse + tx = await bitcoinDepositor + .connect(thirdParty) + .exposed_finalizeBridging(tbtcDepositData.depositKey) + }) - before(async () => { - await bitcoinDepositor - .connect(governance) - .updateDepositorFeeDivisor(0) + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(bitcoinDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + depositorFee, + ) + }) - returnedValue = await bitcoinDepositor - .connect(thirdParty) - .exposed_finalizeBridging.staticCall(tbtcDepositData.depositKey) + it("should return amount to stake", () => { + expect(returnedValue[0]).to.be.equal(amountToStake) + }) - tx = await bitcoinDepositor - .connect(thirdParty) - .exposed_finalizeBridging(tbtcDepositData.depositKey) - }) + it("should return staker", () => { + expect(returnedValue[1]).to.be.equal(tbtcDepositData.staker) + }) - it("should emit BridgingCompleted event", async () => { - await expect(tx) - .to.emit(bitcoinDepositor, "BridgingCompleted") - .withArgs( - tbtcDepositData.depositKey, - thirdParty.address, - tbtcDepositData.referral, - bridgedTbtcAmount, - 0, + it("should transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances( + tbtc, + [treasury], + [depositorFee], ) + }) }) - it("should return amount to stake", () => { - expect(returnedValue[0]).to.be.equal(bridgedTbtcAmount) - }) - - it("should return staker", () => { - expect(returnedValue[1]).to.be.equal(tbtcDepositData.staker) - }) + describe("when depositor fee divisor is zero", () => { + beforeAfterSnapshotWrapper() - it("should not transfer depositor fee", async () => { - await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) - }) - }) + let returnedValue: bigint + let tx: ContractTransactionResponse - describe("when depositor fee exceeds bridged amount", () => { - beforeAfterSnapshotWrapper() + before(async () => { + await bitcoinDepositor + .connect(governance) + .updateDepositorFeeDivisor(0) - before(async () => { - await bitcoinDepositor - .connect(governance) - .updateDepositorFeeDivisor(1) - }) + returnedValue = await bitcoinDepositor + .connect(thirdParty) + .exposed_finalizeBridging.staticCall( + tbtcDepositData.depositKey, + ) - it("should revert", async () => { - await expect( - bitcoinDepositor + tx = await bitcoinDepositor .connect(thirdParty) - .exposed_finalizeBridging(tbtcDepositData.depositKey), - ) - .to.be.revertedWithCustomError( - bitcoinDepositor, - "DepositorFeeExceedsBridgedAmount", - ) - .withArgs(initialDepositAmount, bridgedTbtcAmount) + .exposed_finalizeBridging(tbtcDepositData.depositKey) + }) + + it("should emit BridgingCompleted event", async () => { + await expect(tx) + .to.emit(bitcoinDepositor, "BridgingCompleted") + .withArgs( + tbtcDepositData.depositKey, + thirdParty.address, + tbtcDepositData.referral, + bridgedTbtcAmount, + 0, + ) + }) + + it("should return amount to stake", () => { + expect(returnedValue[0]).to.be.equal(bridgedTbtcAmount) + }) + + it("should return staker", () => { + expect(returnedValue[1]).to.be.equal(tbtcDepositData.staker) + }) + + it("should not transfer depositor fee", async () => { + await expect(tx).to.changeTokenBalances(tbtc, [treasury], [0]) + }) }) - }) - }) - describe("when bridging finalization has been called", () => { - beforeAfterSnapshotWrapper() + describe("when depositor fee exceeds bridged amount", () => { + beforeAfterSnapshotWrapper() - before(async () => { - // Notify bridging completed. - await bitcoinDepositor - .connect(thirdParty) - .exposed_finalizeBridging(tbtcDepositData.depositKey) - }) + before(async () => { + await bitcoinDepositor + .connect(governance) + .updateDepositorFeeDivisor(1) + }) - it("should not revert", async () => { - await expect( - bitcoinDepositor - .connect(thirdParty) - .exposed_finalizeBridging(tbtcDepositData.depositKey), - ).to.be.not.reverted + it("should revert", async () => { + await expect( + bitcoinDepositor + .connect(thirdParty) + .exposed_finalizeBridging(tbtcDepositData.depositKey), + ) + .to.be.revertedWithCustomError( + bitcoinDepositor, + "DepositorFeeExceedsBridgedAmount", + ) + .withArgs(initialDepositAmount, bridgedTbtcAmount) + }) + }) }) }) }) @@ -1635,10 +1649,17 @@ describe("AcreBitcoinDepositor", () => { ) } - async function finalizeMinting(depositKey: bigint) { + async function finalizeMinting(depositKey: bigint, amountToMint?: bigint) { await tbtcVault.createOptimisticMintingRequest(depositKey) // Simulate deposit request finalization via optimistic minting. - await tbtcVault.finalizeOptimisticMintingRequest(depositKey) + if (amountToMint) { + await tbtcVault.finalizeOptimisticMintingRequestWithAmount( + depositKey, + amountToMint, + ) + } else { + await tbtcVault.finalizeOptimisticMintingRequest(depositKey) + } } }) From ea20b433c16dbe96ec9693369477100fcfa9ca28 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 27 Feb 2024 10:38:01 +0100 Subject: [PATCH 109/122] Revert "Add misfund recovery to the Depositor contract" There is no point in adding misfund recovery to this contract, as users will not interact directly with it, by sending the tokens. This reverts commit 3e1f42c4fffaac5235f272f671967ae117545988. This reverts commit 28b65a2c0e56096a0ece6e3e92161ce3e0fa7a3d --- core/contracts/AcreBitcoinDepositor.sol | 36 ------ core/contracts/test/TestERC721.sol | 15 --- core/test/AcreBitcoinDepositor.test.ts | 145 +----------------------- 3 files changed, 1 insertion(+), 195 deletions(-) delete mode 100644 core/contracts/test/TestERC721.sol diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 406f431e4..9ce5f2200 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.21; import "@openzeppelin/contracts/access/Ownable2Step.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "@keep-network/tbtc-v2/contracts/integrator/AbstractTBTCDepositor.sol"; @@ -204,9 +203,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @dev Attempted to call function by an account that is not the staker. error CallerNotStaker(); - /// @dev Attempted to recover tBTC token. - error RecoverTbtcNotAllowed(); - /// @notice Acre Bitcoin Depositor contract constructor. /// @param bridge tBTC Bridge contract instance. /// @param tbtcVault tBTC Vault contract instance. @@ -402,38 +398,6 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { emit DepositorFeeDivisorUpdated(newDepositorFeeDivisor); } - /// @notice Allows the governance to recover any ERC20 token sent - mistakenly - /// or not - to the contract address. - /// @dev It doesn't allow the governance to recover tBTC tokens. - /// @param token Address of the recovered ERC20 token contract. - /// @param recipient Address the recovered token should be sent to. - /// @param amount Recovered amount. - function recoverERC20( - IERC20 token, - address recipient, - uint256 amount - ) external onlyOwner { - if (address(token) == address(tbtcToken)) - revert RecoverTbtcNotAllowed(); - - token.safeTransfer(recipient, amount); - } - - /// @notice Allows the governance to recover any ERC721 token sent mistakenly - /// to the contract address. - /// @param token Address of the recovered ERC721 token contract. - /// @param recipient Address the recovered token should be sent to. - /// @param tokenId Identifier of the recovered token. - /// @param data Additional data. - function recoverERC721( - IERC721 token, - address recipient, - uint256 tokenId, - bytes calldata data - ) external onlyOwner { - token.safeTransferFrom(address(this), recipient, tokenId, data); - } - // TODO: Handle minimum deposit amount in tBTC Bridge vs stBTC. /// @notice Encodes staker address and referral as extra data. diff --git a/core/contracts/test/TestERC721.sol b/core/contracts/test/TestERC721.sol deleted file mode 100644 index 23f75cf7a..000000000 --- a/core/contracts/test/TestERC721.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; - -contract TestERC721 is ERC721 { - string public constant NAME = "Test ERC721 Token"; - string public constant SYMBOL = "TT"; - - constructor() ERC721(NAME, SYMBOL) {} - - function mint(address to, uint256 tokenId) public { - _mint(to, tokenId); - } -} diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index b11a079f8..835462b71 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -19,7 +19,7 @@ import type { import { deployment } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" import { tbtcDepositData } from "./data/tbtc" -import { to1e18, to1ePrecision } from "./utils" +import { to1ePrecision } from "./utils" async function fixture() { const { bitcoinDepositor, tbtcBridge, tbtcVault, stbtc, tbtc } = @@ -1383,149 +1383,6 @@ describe("AcreBitcoinDepositor", () => { }) }) - describe("recoverERC20", () => { - beforeAfterSnapshotWrapper() - - let testToken: TestERC20 - - before(async () => { - const TestToken = await ethers.getContractFactory("TestERC20") - testToken = await TestToken.deploy("Test ERC20", "T20") - await testToken.waitForDeployment() - }) - - describe("when caller is not governance", () => { - it("should revert", async () => { - await expect( - bitcoinDepositor - .connect(thirdParty) - .recoverERC20( - await testToken.getAddress(), - thirdParty.address, - to1e18(800), - ), - ) - .to.be.revertedWithCustomError( - bitcoinDepositor, - "OwnableUnauthorizedAccount", - ) - .withArgs(thirdParty.address) - }) - }) - - describe("when caller is governance", () => { - describe("when recovering tBTC token", () => { - beforeAfterSnapshotWrapper() - - it("should do a successful recovery", async () => { - await expect( - bitcoinDepositor - .connect(governance) - .recoverERC20( - await tbtc.getAddress(), - thirdParty.address, - to1e18(800), - ), - ).to.be.revertedWithCustomError( - bitcoinDepositor, - "RecoverTbtcNotAllowed", - ) - }) - }) - - describe("when recovering non-tBTC token", () => { - beforeAfterSnapshotWrapper() - - const initialAmount = to1e18(1000) - const amountToRecover = to1e18(800) - let tx: ContractTransactionResponse - - before(async () => { - await testToken.mint(thirdParty.address, initialAmount) - await testToken - .connect(thirdParty) - .transfer(await bitcoinDepositor.getAddress(), initialAmount) - - tx = await bitcoinDepositor - .connect(governance) - .recoverERC20( - await testToken.getAddress(), - thirdParty.address, - amountToRecover, - ) - }) - - it("should do a successful recovery", async () => { - await expect(tx).to.changeTokenBalances( - testToken, - [bitcoinDepositor, thirdParty], - [-amountToRecover, amountToRecover], - ) - }) - }) - }) - }) - - describe("recoverERC721", () => { - beforeAfterSnapshotWrapper() - - let testToken: TestERC721 - - before(async () => { - const TestToken = await ethers.getContractFactory("TestERC721") - testToken = await TestToken.deploy() - await testToken.waitForDeployment() - }) - - describe("when caller is not governance", () => { - it("should revert", async () => { - await expect( - bitcoinDepositor - .connect(thirdParty) - .recoverERC721( - await testToken.getAddress(), - thirdParty.address, - 1, - "0x", - ), - ) - .to.be.revertedWithCustomError( - bitcoinDepositor, - "OwnableUnauthorizedAccount", - ) - .withArgs(thirdParty.address) - }) - }) - - context("when called with correct parameters", () => { - beforeAfterSnapshotWrapper() - - before(async () => { - await testToken.mint(thirdParty.address, 1) - await testToken - .connect(thirdParty) - .transferFrom( - thirdParty.address, - await bitcoinDepositor.getAddress(), - 1, - ) - - await bitcoinDepositor - .connect(governance) - .recoverERC721( - await testToken.getAddress(), - thirdParty.address, - 1, - "0x", - ) - }) - - it("should do a successful recovery", async () => { - expect(await testToken.ownerOf(1)).to.be.equal(thirdParty.address) - }) - }) - }) - const extraDataValidTestData = new Map< string, { From 4489d12bda699782f9e34fefcf7c1ceb8453aa7c Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 27 Feb 2024 10:57:47 +0100 Subject: [PATCH 110/122] Disable slither checks for non-immutable vars Slither reports these variables required to be immutable, but we will introduce upgradeability, and they no longer will be set in the constructor, so slither will stop reporting problems. --- core/contracts/AcreBitcoinDepositor.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 9ce5f2200..6bd346bfb 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -66,7 +66,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { mapping(uint256 => StakeRequest) public stakeRequests; /// @notice tBTC Token contract. + // TODO: Remove slither disable when introducing upgradeability. + // slither-disable-next-line constable-states IERC20 public tbtcToken; + // TODO: Remove slither disable when introducing upgradeability. + // slither-disable-next-line constable-states /// @notice stBTC contract. stBTC public stbtc; From e3ff790c664385523603cbe061a731319984d2ec Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 27 Feb 2024 11:20:01 +0100 Subject: [PATCH 111/122] Remove unused import --- core/test/AcreBitcoinDepositor.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/core/test/AcreBitcoinDepositor.test.ts b/core/test/AcreBitcoinDepositor.test.ts index 835462b71..f87ab02ac 100644 --- a/core/test/AcreBitcoinDepositor.test.ts +++ b/core/test/AcreBitcoinDepositor.test.ts @@ -14,7 +14,6 @@ import type { TBTCVaultStub, AcreBitcoinDepositorHarness, TestERC20, - TestERC721, } from "../typechain" import { deployment } from "./helpers" import { beforeAfterSnapshotWrapper } from "./helpers/snapshot" From c99f286ab2fce6b389171bea36ac46cfd7dfa56b Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 27 Feb 2024 13:29:54 +0100 Subject: [PATCH 112/122] Fix the name of slither rule to disable --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 6bd346bfb..5164cf609 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -67,10 +67,10 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @notice tBTC Token contract. // TODO: Remove slither disable when introducing upgradeability. - // slither-disable-next-line constable-states + // slither-disable-next-line immutable-states IERC20 public tbtcToken; // TODO: Remove slither disable when introducing upgradeability. - // slither-disable-next-line constable-states + // slither-disable-next-line immutable-states /// @notice stBTC contract. stBTC public stbtc; From 0355f7cba249f24fc2e2d383a327810024bbed62 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Tue, 27 Feb 2024 14:30:15 +0100 Subject: [PATCH 113/122] Fix slither disable rule --- core/contracts/AcreBitcoinDepositor.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 5164cf609..579d83613 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -69,9 +69,10 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { // TODO: Remove slither disable when introducing upgradeability. // slither-disable-next-line immutable-states IERC20 public tbtcToken; + + /// @notice stBTC contract. // TODO: Remove slither disable when introducing upgradeability. // slither-disable-next-line immutable-states - /// @notice stBTC contract. stBTC public stbtc; /// @notice Divisor used to compute the depositor fee taken from each deposit From c2b54db13fa89d8251d94785576d1d4be280dd4f Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 29 Feb 2024 11:55:54 +0100 Subject: [PATCH 114/122] Add etherscan verification for AcreBitcoinDepositor --- core/deploy/03_deploy_acre_bitcoin_depositor.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/deploy/03_deploy_acre_bitcoin_depositor.ts b/core/deploy/03_deploy_acre_bitcoin_depositor.ts index e013f6981..94c6f0a1a 100644 --- a/core/deploy/03_deploy_acre_bitcoin_depositor.ts +++ b/core/deploy/03_deploy_acre_bitcoin_depositor.ts @@ -2,7 +2,7 @@ import type { DeployFunction } from "hardhat-deploy/types" import type { HardhatRuntimeEnvironment } from "hardhat/types" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { getNamedAccounts, deployments } = hre + const { getNamedAccounts, deployments, helpers } = hre const { deployer } = await getNamedAccounts() const bridge = await deployments.get("Bridge") @@ -10,7 +10,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const tbtc = await deployments.get("TBTC") const stbtc = await deployments.get("stBTC") - await deployments.deploy("AcreBitcoinDepositor", { + const depositor = await deployments.deploy("AcreBitcoinDepositor", { contract: process.env.HARDHAT_TEST === "true" ? "AcreBitcoinDepositorHarness" @@ -21,7 +21,10 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { waitConfirmations: 1, }) - // TODO: Add Etherscan verification + if (hre.network.tags.etherscan) { + await helpers.etherscan.verify(depositor) + } + // TODO: Add Tenderly verification } From c0c074604ca39f92c490c1177a45eba522cd2662 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Thu, 29 Feb 2024 11:56:09 +0100 Subject: [PATCH 115/122] Fix etherscan verification for Dispatcher --- core/deploy/02_deploy_dispatcher.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/deploy/02_deploy_dispatcher.ts b/core/deploy/02_deploy_dispatcher.ts index 8104d906f..4473531e9 100644 --- a/core/deploy/02_deploy_dispatcher.ts +++ b/core/deploy/02_deploy_dispatcher.ts @@ -9,7 +9,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const tbtc = await deployments.get("TBTC") const stbtc = await deployments.get("stBTC") - await deployments.deploy("Dispatcher", { + const dispatcher = await deployments.deploy("Dispatcher", { from: deployer, args: [stbtc.address, tbtc.address], log: true, @@ -17,7 +17,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { }) if (hre.network.tags.etherscan) { - await helpers.etherscan.verify(stbtc) + await helpers.etherscan.verify(dispatcher) } // TODO: Add Tenderly verification From 2e03a624b9bc104d1407a077fc235a7285e8cc28 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 10:07:51 +0100 Subject: [PATCH 116/122] Docs improvements --- core/contracts/AcreBitcoinDepositor.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 579d83613..51a4ee47f 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -35,7 +35,7 @@ import {stBTC} from "./stBTC.sol"; /// for sweeping, and when the sweep operation is confirmed on the Bitcoin /// network, the tBTC Bridge and tBTC vault mint the tBTC token to the /// Depositor address. After tBTC is minted to the Depositor, on the stake -/// finalization tBTC is staked in stBTC contract and stBTC shares are emitted +/// finalization tBTC is staked in Acre and stBTC shares are emitted /// to the staker. contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { using SafeERC20 for IERC20; @@ -434,7 +434,7 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { } /// @notice This function is used for state transitions. It ensures the current - /// stakte matches expected, and updates the stake request to a new + /// state matches expected, and updates the stake request to a new /// state. /// @param depositKey Deposit key identifying the deposit. /// @param expectedState Expected current stake request state. From 46ae9a14c8330f63cfe586b9f32328e3cc5f5ed9 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 10:12:36 +0100 Subject: [PATCH 117/122] Improve variables naming --- core/contracts/AcreBitcoinDepositor.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/contracts/AcreBitcoinDepositor.sol b/core/contracts/AcreBitcoinDepositor.sol index 51a4ee47f..2bf4da21f 100644 --- a/core/contracts/AcreBitcoinDepositor.sol +++ b/core/contracts/AcreBitcoinDepositor.sol @@ -147,11 +147,11 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { /// @notice Emitted when a queued stake request is cancelled. /// @param depositKey Deposit key identifying the deposit. /// @param staker Address of the staker. - /// @param amountToStake Amount of queued tBTC tokens that got cancelled. + /// @param amountCancelled Amount of queued tBTC tokens that got cancelled. event StakeRequestCancelledFromQueue( uint256 indexed depositKey, address indexed staker, - uint256 amountToStake + uint256 amountCancelled ); /// @notice Emitted when a depositor fee divisor is updated. @@ -324,10 +324,10 @@ contract AcreBitcoinDepositor is AbstractTBTCDepositor, Ownable2Step { StakeRequest storage request = stakeRequests[depositKey]; - uint256 amountToStake; - (amountToStake, request.staker) = finalizeBridging(depositKey); + uint256 amountToQueue; + (amountToQueue, request.staker) = finalizeBridging(depositKey); - request.queuedAmount = SafeCast.toUint88(amountToStake); + request.queuedAmount = SafeCast.toUint88(amountToQueue); emit StakeRequestQueued(depositKey, msg.sender, request.queuedAmount); } From a335dadc26ad510ba655ef5b930c3f5e421f5dbe Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 10:30:28 +0100 Subject: [PATCH 118/122] Reorganize test contracts To reduce confusion we put all the test contracts related to tBTC bridging into one file. --- .../contracts/test/AcreBitcoinDepositor.t.sol | 22 ---------------- ...ge.sol => AcreBitcoinDepositorHarness.sol} | 25 ++++++++++++++++++- 2 files changed, 24 insertions(+), 23 deletions(-) delete mode 100644 core/contracts/test/AcreBitcoinDepositor.t.sol rename core/contracts/test/{MockTbtcBridge.sol => AcreBitcoinDepositorHarness.sol} (69%) diff --git a/core/contracts/test/AcreBitcoinDepositor.t.sol b/core/contracts/test/AcreBitcoinDepositor.t.sol deleted file mode 100644 index fee3b1630..000000000 --- a/core/contracts/test/AcreBitcoinDepositor.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.21; - -import {AcreBitcoinDepositor} from "../AcreBitcoinDepositor.sol"; - -/// @dev A test contract to expose internal function from AcreBitcoinDepositor contract. -/// This solution follows Foundry recommendation: -/// https://book.getfoundry.sh/tutorials/best-practices#internal-functions -contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { - constructor( - address bridge, - address tbtcVault, - address tbtcToken, - address stbtc - ) AcreBitcoinDepositor(bridge, tbtcVault, tbtcToken, stbtc) {} - - function exposed_finalizeBridging( - uint256 depositKey - ) external returns (uint256 amountToStake, address staker) { - return finalizeBridging(depositKey); - } -} diff --git a/core/contracts/test/MockTbtcBridge.sol b/core/contracts/test/AcreBitcoinDepositorHarness.sol similarity index 69% rename from core/contracts/test/MockTbtcBridge.sol rename to core/contracts/test/AcreBitcoinDepositorHarness.sol index fa78a3be3..ef40dbb1a 100644 --- a/core/contracts/test/MockTbtcBridge.sol +++ b/core/contracts/test/AcreBitcoinDepositorHarness.sol @@ -1,14 +1,37 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; +import {AcreBitcoinDepositor} from "../AcreBitcoinDepositor.sol"; import {MockBridge, MockTBTCVault} from "@keep-network/tbtc-v2/contracts/test/TestTBTCDepositor.sol"; import {IBridge} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {IBridgeTypes} from "@keep-network/tbtc-v2/contracts/integrator/IBridge.sol"; import {TestERC20} from "./TestERC20.sol"; -contract BridgeStub is MockBridge {} +/// @dev A test contract to expose internal function from AcreBitcoinDepositor contract. +/// This solution follows Foundry recommendation: +/// https://book.getfoundry.sh/tutorials/best-practices#internal-functions +contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { + constructor( + address bridge, + address tbtcVault, + address tbtcToken, + address stbtc + ) AcreBitcoinDepositor(bridge, tbtcVault, tbtcToken, stbtc) {} + function exposed_finalizeBridging( + uint256 depositKey + ) external returns (uint256 amountToStake, address staker) { + return finalizeBridging(depositKey); + } +} + +/// @dev A test contract to stub tBTC Bridge contract. +contract BridgeStub is MockBridge { + +} + +/// @dev A test contract to stub tBTC Vault contract. contract TBTCVaultStub is MockTBTCVault { TestERC20 public immutable tbtc; IBridge public immutable bridge; From cebb35e4ff8f7dc071ffdec5008f8f214f15db40 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 10:33:54 +0100 Subject: [PATCH 119/122] Use waitConfirmationsNumber in deployment --- core/deploy/03_deploy_acre_bitcoin_depositor.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/deploy/03_deploy_acre_bitcoin_depositor.ts b/core/deploy/03_deploy_acre_bitcoin_depositor.ts index 94c6f0a1a..4863dd77b 100644 --- a/core/deploy/03_deploy_acre_bitcoin_depositor.ts +++ b/core/deploy/03_deploy_acre_bitcoin_depositor.ts @@ -1,5 +1,6 @@ import type { DeployFunction } from "hardhat-deploy/types" import type { HardhatRuntimeEnvironment } from "hardhat/types" +import { waitConfirmationsNumber } from "../helpers/deployment" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { getNamedAccounts, deployments, helpers } = hre @@ -18,7 +19,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { from: deployer, args: [bridge.address, tbtcVault.address, tbtc.address, stbtc.address], log: true, - waitConfirmations: 1, + waitConfirmations: waitConfirmationsNumber(hre), }) if (hre.network.tags.etherscan) { From b6eea220ed367e272d6abdfa278c3ee366e91236 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 10:58:15 +0100 Subject: [PATCH 120/122] Disable func-name-mixedcase solhint rule for harness contract The contract defines `exposed_finalizeBridging` which is a naming pattern recommended by Foundry. We need to disable the rule for the file. --- core/contracts/test/AcreBitcoinDepositorHarness.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/contracts/test/AcreBitcoinDepositorHarness.sol b/core/contracts/test/AcreBitcoinDepositorHarness.sol index ef40dbb1a..9a57f61e0 100644 --- a/core/contracts/test/AcreBitcoinDepositorHarness.sol +++ b/core/contracts/test/AcreBitcoinDepositorHarness.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-only +/* solhint-disable func-name-mixedcase */ pragma solidity ^0.8.21; import {AcreBitcoinDepositor} from "../AcreBitcoinDepositor.sol"; @@ -27,9 +28,7 @@ contract AcreBitcoinDepositorHarness is AcreBitcoinDepositor { } /// @dev A test contract to stub tBTC Bridge contract. -contract BridgeStub is MockBridge { - -} +contract BridgeStub is MockBridge {} /// @dev A test contract to stub tBTC Vault contract. contract TBTCVaultStub is MockTBTCVault { From 54a2427c86bd063164783c57f7973b3ee1912425 Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 11:41:56 +0100 Subject: [PATCH 121/122] Use waitConfirmationsNumber in all deploy scripts --- core/deploy/00_resolve_tbtc_bridge.ts | 2 +- core/deploy/00_resolve_tbtc_token.ts | 2 +- core/deploy/00_resolve_tbtc_vault.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/deploy/00_resolve_tbtc_bridge.ts b/core/deploy/00_resolve_tbtc_bridge.ts index 8de16d317..30e6e5a8b 100644 --- a/core/deploy/00_resolve_tbtc_bridge.ts +++ b/core/deploy/00_resolve_tbtc_bridge.ts @@ -24,7 +24,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { args: [], from: deployer, log: true, - waitConfirmations: 1, + waitConfirmations: waitConfirmationsNumber(hre), }) } } diff --git a/core/deploy/00_resolve_tbtc_token.ts b/core/deploy/00_resolve_tbtc_token.ts index 3eb9ce90c..0452aab48 100644 --- a/core/deploy/00_resolve_tbtc_token.ts +++ b/core/deploy/00_resolve_tbtc_token.ts @@ -27,7 +27,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { args: ["Test tBTC", "TestTBTC"], from: deployer, log: true, - waitConfirmations: 1, + waitConfirmations: waitConfirmationsNumber(hre), }) } } diff --git a/core/deploy/00_resolve_tbtc_vault.ts b/core/deploy/00_resolve_tbtc_vault.ts index 8088f69e1..960697706 100644 --- a/core/deploy/00_resolve_tbtc_vault.ts +++ b/core/deploy/00_resolve_tbtc_vault.ts @@ -30,7 +30,7 @@ const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { args: [tbtc.address, bridge.address], from: deployer, log: true, - waitConfirmations: 1, + waitConfirmations: waitConfirmationsNumber(hre), }) } } From e4d3062dec018ea40de3e97a635e667fa891a42e Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski Date: Wed, 6 Mar 2024 11:45:10 +0100 Subject: [PATCH 122/122] Add missing waitConfirmationsNumber import --- core/deploy/00_resolve_tbtc_bridge.ts | 1 + core/deploy/00_resolve_tbtc_token.ts | 1 + core/deploy/00_resolve_tbtc_vault.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/core/deploy/00_resolve_tbtc_bridge.ts b/core/deploy/00_resolve_tbtc_bridge.ts index 30e6e5a8b..4150b696a 100644 --- a/core/deploy/00_resolve_tbtc_bridge.ts +++ b/core/deploy/00_resolve_tbtc_bridge.ts @@ -4,6 +4,7 @@ import type { HardhatRuntimeEnvironment, } from "hardhat/types" import { isNonZeroAddress } from "../helpers/address" +import { waitConfirmationsNumber } from "../helpers/deployment" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { getNamedAccounts, deployments } = hre diff --git a/core/deploy/00_resolve_tbtc_token.ts b/core/deploy/00_resolve_tbtc_token.ts index 0452aab48..ef00bcdef 100644 --- a/core/deploy/00_resolve_tbtc_token.ts +++ b/core/deploy/00_resolve_tbtc_token.ts @@ -4,6 +4,7 @@ import type { HardhatRuntimeEnvironment, } from "hardhat/types" import { isNonZeroAddress } from "../helpers/address" +import { waitConfirmationsNumber } from "../helpers/deployment" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { getNamedAccounts, deployments } = hre diff --git a/core/deploy/00_resolve_tbtc_vault.ts b/core/deploy/00_resolve_tbtc_vault.ts index 960697706..46edbd919 100644 --- a/core/deploy/00_resolve_tbtc_vault.ts +++ b/core/deploy/00_resolve_tbtc_vault.ts @@ -4,6 +4,7 @@ import type { HardhatRuntimeEnvironment, } from "hardhat/types" import { isNonZeroAddress } from "../helpers/address" +import { waitConfirmationsNumber } from "../helpers/deployment" const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { getNamedAccounts, deployments } = hre