20M+ users trust MoonPay worldwide. Checkout with your preferred payment method.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
100s of games, generous bonuses, 20+ years of trusted gaming. Join CryptoWins & start winning today!
Overview
ETH Balance
Eth Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (51)3,000,000 aEthsUSDeAave Ethereu... (aEthsU...)10,006,432.8122606 aEthUSDSAave Ethereu... (aEthUS...)0.00000017 DC_sUSDeDefaultColla... (DC_sUS...)17,700 GHOGHO Token (GHO)$17,658.58@0.99770.00081024 PENDLE-LPTPendle Marke... (PENDLE...)0.00000062 PENDLE-LPTPendle Marke... (PENDLE...)0.0198967 PT-sUSDE-25JUL2024PT Ethena sU... (PT-sUS...)0.00000086 PT-sUSDE-26SEP2024PT Ethena sU... (PT-sUS...)0.00977218 PT-USDe-25JUL2024PT Ethena US... (PT-USD...)0.84213873 PT-Karak-sUSDe-26SEP2024PT Karak sUS... (PT-Kar...)0.42973334 PT-Karak-USDE-26SEP2024PT Karak USD... (PT-Kar...)1,178.70477879 sDAISavings Dai (sDAI)$1,320.15@1.123,253,725.72236335 sUSDeStaked USDe (sUSDe)$3,676,710.07@1.130.00000587 SY-sUSDESY Ethena sU... (SY-sUS...)0.00079256 SY-sUSDESY Ethena sU... (SY-sUS...)0.001 SY-USDeSY Ethena US... (SY-USD...)0.58108241 SY-Karak-sUSDeSY Karak sUS... (SY-Kar...)11,543.25341559 USDeUSDe (USDe)$11,577.88@1.0030.00008588 YT-sUSDE-25JUL2024YT Ethena sU... (YT-sUS...)0.00099653 YT-sUSDE-26SEP2024YT Ethena sU... (YT-sUS...)0.24514774 YT-Karak-sUSDe-26SEP2024YT Karak sUS... (YT-Kar...)2,100,000.043549 variableDebtEthUSDCAave Ethereu... (variab...)999.999998 cUSDCv3Compound USD... (cUSDCv...)1,167.77334109 DAIDai Stableco... (DAI)$1,168.94@1.0012,685.14181363 CakePancakeSwap ... (Cake)$5,773.05@2.15663.50523139 PENDLEPendle (PENDLE)$3,549.75@5.350.00000043 PENDLE-LPTPendle Marke... (PENDLE...)0.00040315 PENDLE-LPTPendle Marke... (PENDLE...)0.00000146 PT-sUSDE-24OCT2024PT Ethena sU... (PT-sUS...)4,084,058.43719508 PT-sUSDE-26DEC2024PT Ethena sU... (PT-sUS...)0.00000101 PT-USDe-24OCT2024PT Ethena US... (PT-USD...)0.00000007 PT-zs-USDe-22AUG2024PT Zircuit S... (PT-zs-...)0.26014742 SY-sUSDESY Ethena sU... (SY-sUS...)0.76080785 SY-sUSDESY Ethena sU... (SY-sUS...)0.0000008 SY-USDeSY Ethena US... (SY-USD...)46,955.942497 USDTTether USD (USDT)$47,049.85@1.002106,732.06955 USDCUSDC (USDC)$106,732.07@1.006,823.557748 USDSUSDS Stablec... (USDS)0.88065987 YT-sUSDE-26DEC2024YT Ethena sU... (YT-sUS...)48,000 Earn $TUSD airdrops at https://www.tenorusd.org$ tenorusd.o... (Earn $...)7,450,000.12048136 variableDebtEthGHOAave Ethereu... (variab...)28,101.94774827 deUSDdeUSD$28,158.15@1.0027,450,000 fGHOFluid Gho To... (fGHO)0.747983 PYUSDPayPal USD$0.75@1.002,825,218.6418534 sdeUSDStaked deUSD2,016,916.666666ERC20 ***752.086401ERC20 ***9,283 TokenERC-20 TOKEN*[Spam]29,176 TokenERC-20 TOKEN*[Spam]3,129,009.70663442 TokenERC-20 TOKEN*[Spam]181 TokenERC-20 TOKEN*[Spam]NFT Tokens (15)UNI-V3-POSUniswap V3: Positions NFTERC-721claim rewards on apyusd.netapyusd.netERC-1155PCS-V3-POSPancake V3 Positions NFT-V1ERC-721Puffer Mystery Box NFT pufether.orgPuffer Mystery Box NFT pufether.orgERC-1155debridgeth.comWithdrawal Badge debridgeth.comERC-1155ether-origin.comWithdrawal NFT ether-origin.comERC-1155ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
1 address found via- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Cards New
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Transaction Hash MethodBlockFromTo0x4ee0d22256eec7ff8a35ab2cd8a53659f8fad33ad2ac380325318e040cd99fa4 Approve (pending) 2024-10-13 12:20:39 41 days ago 1728822039 IN 0 ETH$0.00 (Pending) (Pending) Transfer 21248379 2024-11-23 5:34:59 7 hrs ago 1732340099 IN 0 ETH$0.00 0.00052538 9.66991881 Approve 21245715 2024-11-22 20:40:11 16 hrs ago 1732308011 IN 0 ETH$0.00 0.00031794 12.13189597 Approve 21245495 2024-11-22 19:55:59 16 hrs ago 1732305359 IN 0 ETH$0.00 0.00050502 10.94197054 Approve 21244985 2024-11-22 18:13:59 18 hrs ago 1732299239 IN 0 ETH$0.00 0.00049932 10.8183545 Approve 21242087 2024-11-22 8:30:11 28 hrs ago 1732264211 IN 0 ETH$0.00 0.00050476 10.93635808 Approve 21239044 2024-11-21 22:18:11 38 hrs ago 1732227491 IN 0 ETH$0.00 0.0006307 13.66494122 Approve 21236875 2024-11-21 15:02:59 45 hrs ago 1732201379 IN 0 ETH$0.00 0.00136847 29.63403941 Approve 21234837 2024-11-21 8:13:11 2 days ago 1732176791 IN 0 ETH$0.00 0.00026197 9.97367233 Approve 21234798 2024-11-21 8:05:23 2 days ago 1732176323 IN 0 ETH$0.00 0.00025842 9.83853242 Approve 21234782 2024-11-21 8:01:59 2 days ago 1732176119 IN 0 ETH$0.00 0.00024784 9.43548832 Approve 21234513 2024-11-21 7:07:47 2 days ago 1732172867 IN 0 ETH$0.00 0.00051665 11.19396788 Approve 21234002 2024-11-21 5:24:59 2 days ago 1732166699 IN 0 ETH$0.00 0.00058596 12.69237157 Transfer 21233666 2024-11-21 4:17:11 2 days ago 1732162631 IN 0 ETH$0.00 0.0005248 9.66143215 Approve 21228917 2024-11-20 12:21:35 3 days ago 1732105295 IN 0 ETH$0.00 0.00048305 10.46587067 Approve 21228837 2024-11-20 12:05:35 3 days ago 1732104335 IN 0 ETH$0.00 0.00054008 11.70153654 Approve 21228477 2024-11-20 10:53:11 3 days ago 1732099991 IN 0 ETH$0.00 0.00043425 9.40867924 Approve 21225748 2024-11-20 1:45:11 3 days ago 1732067111 IN 0 ETH$0.00 0.00023327 9.63650505 Approve 21225514 2024-11-20 0:58:11 3 days ago 1732064291 IN 0 ETH$0.00 0.00027643 10.54819837 Approve 21225504 2024-11-20 0:56:11 3 days ago 1732064171 IN 0 ETH$0.00 0.00023055 9.52449232 Approve 21225440 2024-11-20 0:43:11 3 days ago 1732063391 IN 0 ETH$0.00 0.00047159 10.21763081 Approve 21224122 2024-11-19 20:18:23 3 days ago 1732047503 IN 0 ETH$0.00 0.00092653 20.07445774 Approve 21223864 2024-11-19 19:26:47 3 days ago 1732044407 IN 0 ETH$0.00 0.00113732 24.64132138 Approve 21223175 2024-11-19 17:08:47 3 days ago 1732036127 IN 0 ETH$0.00 0.00052302 21.60651272 Approve 21222135 2024-11-19 13:39:59 3 days ago 1732023599 IN 0 ETH$0.00 0.00122421 26.52400852 Latest 1 internal transaction
Advanced mode:Parent Transaction Hash Block From To 19672707 2024-04-17 4:08:23 220 days ago 1713326903 Contract Creation 0 ETH$0.00 Loading...LoadingContract Name:BoringVault
Compiler Versionv0.8.21+commit.d9974bed
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol"; import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol"; import {ERC20} from "@solmate/tokens/ERC20.sol"; import {BeforeTransferHook} from "src/interfaces/BeforeTransferHook.sol"; import {Auth, Authority} from "@solmate/auth/Auth.sol"; contract BoringVault is ERC20, Auth, ERC721Holder, ERC1155Holder { using Address for address; using SafeTransferLib for ERC20; using FixedPointMathLib for uint256; // ========================================= STATE ========================================= /** * @notice Contract responsbile for implementing `beforeTransfer`. */ BeforeTransferHook public hook; //============================== EVENTS =============================== event Enter(address indexed from, address indexed asset, uint256 amount, address indexed to, uint256 shares); event Exit(address indexed to, address indexed asset, uint256 amount, address indexed from, uint256 shares); //============================== CONSTRUCTOR =============================== constructor(address _owner, string memory _name, string memory _symbol, uint8 _decimals) ERC20(_name, _symbol, _decimals) Auth(_owner, Authority(address(0))) {} //============================== MANAGE =============================== /** * @notice Allows manager to make an arbitrary function call from this contract. * @dev Callable by MANAGER_ROLE. */ function manage(address target, bytes calldata data, uint256 value) external requiresAuth returns (bytes memory result) { result = target.functionCallWithValue(data, value); } /** * @notice Allows manager to make arbitrary function calls from this contract. * @dev Callable by MANAGER_ROLE. */ function manage(address[] calldata targets, bytes[] calldata data, uint256[] calldata values) external requiresAuth returns (bytes[] memory results) { uint256 targetsLength = targets.length; results = new bytes[](targetsLength); for (uint256 i; i < targetsLength; ++i) { results[i] = targets[i].functionCallWithValue(data[i], values[i]); } } //============================== ENTER =============================== /** * @notice Allows minter to mint shares, in exchange for assets. * @dev If assetAmount is zero, no assets are transferred in. * @dev Callable by MINTER_ROLE. */ function enter(address from, ERC20 asset, uint256 assetAmount, address to, uint256 shareAmount) external requiresAuth { // Transfer assets in if (assetAmount > 0) asset.safeTransferFrom(from, address(this), assetAmount); // Mint shares. _mint(to, shareAmount); emit Enter(from, address(asset), assetAmount, to, shareAmount); } //============================== EXIT =============================== /** * @notice Allows burner to burn shares, in exchange for assets. * @dev If assetAmount is zero, no assets are transferred out. * @dev Callable by BURNER_ROLE. */ function exit(address to, ERC20 asset, uint256 assetAmount, address from, uint256 shareAmount) external requiresAuth { // Burn shares. _burn(from, shareAmount); // Transfer assets out. if (assetAmount > 0) asset.safeTransfer(to, assetAmount); emit Exit(to, address(asset), assetAmount, from, shareAmount); } //============================== BEFORE TRANSFER HOOK =============================== /** * @notice Sets the share locker. * @notice If set to zero address, the share locker logic is disabled. * @dev Callable by OWNER_ROLE. */ function setBeforeTransferHook(address _hook) external requiresAuth { hook = BeforeTransferHook(_hook); } /** * @notice Check if from addresses shares are locked, reverting if so. */ function _callBeforeTransfer(address from) internal view { if (address(hook) != address(0)) hook.beforeTransfer(from); } function transfer(address to, uint256 amount) public override returns (bool) { _callBeforeTransfer(msg.sender); return super.transfer(to, amount); } function transferFrom(address from, address to, uint256 amount) public override returns (bool) { _callBeforeTransfer(from); return super.transferFrom(from, to, amount); } //============================== RECEIVE =============================== receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.20; import {IERC721Receiver} from "../IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or * {IERC721-setApprovalForAll}. */ abstract contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.20; import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol"; import {IERC1155Receiver} from "../IERC1155Receiver.sol"; /** * @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. */ abstract contract ERC1155Holder is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Arithmetic library with operations for fixed-point numbers. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol) /// @author Inspired by USM (https://github.com/usmfum/USM/blob/master/contracts/WadMath.sol) library FixedPointMathLib { /*////////////////////////////////////////////////////////////// SIMPLIFIED FIXED POINT OPERATIONS //////////////////////////////////////////////////////////////*/ uint256 internal constant MAX_UINT256 = 2**256 - 1; uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s. function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) { return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down. } function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) { return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up. } function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) { return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down. } function divWadUp(uint256 x, uint256 y) internal pure returns (uint256) { return mulDivUp(x, WAD, y); // Equivalent to (x * WAD) / y rounded up. } /*////////////////////////////////////////////////////////////// LOW LEVEL FIXED POINT OPERATIONS //////////////////////////////////////////////////////////////*/ function mulDivDown( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 z) { /// @solidity memory-safe-assembly assembly { // Equivalent to require(denominator != 0 && (y == 0 || x <= type(uint256).max / y)) if iszero(mul(denominator, iszero(mul(y, gt(x, div(MAX_UINT256, y)))))) { revert(0, 0) } // Divide x * y by the denominator. z := div(mul(x, y), denominator) } } function mulDivUp( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 z) { /// @solidity memory-safe-assembly assembly { // Equivalent to require(denominator != 0 && (y == 0 || x <= type(uint256).max / y)) if iszero(mul(denominator, iszero(mul(y, gt(x, div(MAX_UINT256, y)))))) { revert(0, 0) } // If x * y modulo the denominator is strictly greater than 0, // 1 is added to round up the division of x * y by the denominator. z := add(gt(mod(mul(x, y), denominator), 0), div(mul(x, y), denominator)) } } function rpow( uint256 x, uint256 n, uint256 scalar ) internal pure returns (uint256 z) { /// @solidity memory-safe-assembly assembly { switch x case 0 { switch n case 0 { // 0 ** 0 = 1 z := scalar } default { // 0 ** n = 0 z := 0 } } default { switch mod(n, 2) case 0 { // If n is even, store scalar in z for now. z := scalar } default { // If n is odd, store x in z for now. z := x } // Shifting right by 1 is like dividing by 2. let half := shr(1, scalar) for { // Shift n right by 1 before looping to halve it. n := shr(1, n) } n { // Shift n right by 1 each iteration to halve it. n := shr(1, n) } { // Revert immediately if x ** 2 would overflow. // Equivalent to iszero(eq(div(xx, x), x)) here. if shr(128, x) { revert(0, 0) } // Store x squared. let xx := mul(x, x) // Round to the nearest number. let xxRound := add(xx, half) // Revert if xx + half overflowed. if lt(xxRound, xx) { revert(0, 0) } // Set x to scaled xxRound. x := div(xxRound, scalar) // If n is even: if mod(n, 2) { // Compute z * x. let zx := mul(z, x) // If z * x overflowed: if iszero(eq(div(zx, x), z)) { // Revert if x is non-zero. if iszero(iszero(x)) { revert(0, 0) } } // Round to the nearest number. let zxRound := add(zx, half) // Revert if zx + half overflowed. if lt(zxRound, zx) { revert(0, 0) } // Return properly scaled zxRound. z := div(zxRound, scalar) } } } } } /*////////////////////////////////////////////////////////////// GENERAL NUMBER UTILITIES //////////////////////////////////////////////////////////////*/ function sqrt(uint256 x) internal pure returns (uint256 z) { /// @solidity memory-safe-assembly assembly { let y := x // We start y at x, which will help us make our initial estimate. z := 181 // The "correct" value is 1, but this saves a multiplication later. // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically. // We check y >= 2^(k + 8) but shift right by k bits // each branch to ensure that if x >= 256, then y >= 256. if iszero(lt(y, 0x10000000000000000000000000000000000)) { y := shr(128, y) z := shl(64, z) } if iszero(lt(y, 0x1000000000000000000)) { y := shr(64, y) z := shl(32, z) } if iszero(lt(y, 0x10000000000)) { y := shr(32, y) z := shl(16, z) } if iszero(lt(y, 0x1000000)) { y := shr(16, y) z := shl(8, z) } // Goal was to get z*z*y within a small factor of x. More iterations could // get y in a tighter range. Currently, we will have y in [256, 256*2^16). // We ensured y >= 256 so that the relative difference between y and y+1 is small. // That's not possible if x < 256 but we can just verify those cases exhaustively. // Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256. // Correctness can be checked exhaustively for x < 256, so we assume y >= 256. // Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps. // For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range // (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256. // Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate // sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18. // There is no overflow risk here since y < 2^136 after the first branch above. z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181. // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough. z := shr(1, add(z, div(x, z))) z := shr(1, add(z, div(x, z))) z := shr(1, add(z, div(x, z))) z := shr(1, add(z, div(x, z))) z := shr(1, add(z, div(x, z))) z := shr(1, add(z, div(x, z))) z := shr(1, add(z, div(x, z))) // If x+1 is a perfect square, the Babylonian method cycles between // floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor. // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case. // If you don't care whether the floor or ceil square root is returned, you can remove this statement. z := sub(z, lt(div(x, z), z)) } } function unsafeMod(uint256 x, uint256 y) internal pure returns (uint256 z) { /// @solidity memory-safe-assembly assembly { // Mod x by y. Note this will return // 0 instead of reverting if y is zero. z := mod(x, y) } } function unsafeDiv(uint256 x, uint256 y) internal pure returns (uint256 r) { /// @solidity memory-safe-assembly assembly { // Divide x by y. Note this will return // 0 instead of reverting if y is zero. r := div(x, y) } } function unsafeDivUp(uint256 x, uint256 y) internal pure returns (uint256 z) { /// @solidity memory-safe-assembly assembly { // Add 1 to x * y if x % y > 0. Note this will // return 0 instead of reverting if y is zero. z := add(gt(mod(x, y), 0), div(x, y)) } } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; import {ERC20} from "../tokens/ERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; interface BeforeTransferHook { function beforeTransfer(address from) external view; }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol) /// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol) abstract contract Auth { event OwnershipTransferred(address indexed user, address indexed newOwner); event AuthorityUpdated(address indexed user, Authority indexed newAuthority); address public owner; Authority public authority; constructor(address _owner, Authority _authority) { owner = _owner; authority = _authority; emit OwnershipTransferred(msg.sender, _owner); emit AuthorityUpdated(msg.sender, _authority); } modifier requiresAuth() virtual { require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED"); _; } function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) { Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas. // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be // aware that this makes protected functions uncallable even to the owner if the authority is out of order. return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner; } function setAuthority(Authority newAuthority) public virtual { // We check if the caller is the owner first because we want to ensure they can // always swap out the authority even if it's reverting or using up a lot of gas. require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig)); authority = newAuthority; emit AuthorityUpdated(msg.sender, newAuthority); } function transferOwnership(address newOwner) public virtual requiresAuth { owner = newOwner; emit OwnershipTransferred(msg.sender, newOwner); } } /// @notice A generic interface for a contract which provides authorization data to an Auth instance. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol) /// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol) interface Authority { function canCall( address user, address target, bytes4 functionSig ) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be * reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Interface that must be implemented by smart contracts in order to receive * ERC-1155 token transfers. */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@solmate/=lib/solmate/src/", "@forge-std/=lib/forge-std/src/", "@ds-test/=lib/forge-std/lib/ds-test/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "shanghai", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Enter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Exit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"contract ERC20","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"shareAmount","type":"uint256"}],"name":"enter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"contract ERC20","name":"asset","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"shareAmount","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hook","outputs":[{"internalType":"contract BeforeTransferHook","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"manage","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manage","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hook","type":"address"}],"name":"setBeforeTransferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405234801562000010575f80fd5b506040516200223838038062002238833981016040819052620000339162000263565b835f848484836200004584826200038c565b5060016200005483826200038c565b5060ff81166080524660a0526200006a6200010b565b60c0525050600680546001600160a01b038086166001600160a01b03199283168117909355600780549186169190921617905560405190915033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a3505050505050620004ce565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516200013d919062000454565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620001c9575f80fd5b81516001600160401b0380821115620001e657620001e6620001a5565b604051601f8301601f19908116603f01168101908282118183101715620002115762000211620001a5565b816040528381526020925086838588010111156200022d575f80fd5b5f91505b8382101562000250578582018301518183018401529082019062000231565b5f93810190920192909252949350505050565b5f805f806080858703121562000277575f80fd5b84516001600160a01b03811681146200028e575f80fd5b60208601519094506001600160401b0380821115620002ab575f80fd5b620002b988838901620001b9565b94506040870151915080821115620002cf575f80fd5b50620002de87828801620001b9565b925050606085015160ff81168114620002f5575f80fd5b939692955090935050565b600181811c908216806200031557607f821691505b6020821081036200033457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000387575f81815260208120601f850160051c81016020861015620003625750805b601f850160051c820191505b8181101562000383578281556001016200036e565b5050505b505050565b81516001600160401b03811115620003a857620003a8620001a5565b620003c081620003b9845462000300565b846200033a565b602080601f831160018114620003f6575f8415620003de5750858301515b5f19600386901b1c1916600185901b17855562000383565b5f85815260208120601f198616915b82811015620004265788860151825594840194600190910190840162000405565b50858210156200044457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f808354620004638162000300565b600182811680156200047e57600181146200049457620004c2565b60ff1984168752821515830287019450620004c2565b875f526020805f205f5b85811015620004b95781548a8201529084019082016200049e565b50505082870194505b50929695505050505050565b60805160a05160c051611d3f620004f95f395f61092801525f6108f301525f6102e00152611d3f5ff3fe60806040526004361061017e575f3560e01c80637ecebe00116100cd578063bc197c8111610087578063dd62ed3e11610062578063dd62ed3e146104cd578063f23a6e6114610503578063f2fde38b1461052e578063f6e715d01461054d575f80fd5b8063bc197c8114610464578063bf7e214f1461048f578063d505accf146104ae575f80fd5b80637ecebe00146103915780637f5a7c7b146103bc5780638929565f146103f35780638da5cb5b1461041257806395d89b4114610431578063a9059cbb14610445575f80fd5b8063224d8703116101385780633644e515116101135780633644e5151461031457806339d6ba321461032857806370a08231146103475780637a9e5e4b14610372575f80fd5b8063224d87031461028457806323b872dd146102b0578063313ce567146102cf575f80fd5b806301ffc9a71461018957806306fdde03146101bd578063095ea7b3146101de578063150b7a02146101fd57806318160ddd1461024057806318457e6114610263575f80fd5b3661018557005b5f80fd5b348015610194575f80fd5b506101a86101a3366004611463565b61056c565b60405190151581526020015b60405180910390f35b3480156101c8575f80fd5b506101d16105a2565b6040516101b491906114d7565b3480156101e9575f80fd5b506101a86101f83660046114fd565b61062d565b348015610208575f80fd5b506102276102173660046115d8565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101b4565b34801561024b575f80fd5b5061025560025481565b6040519081526020016101b4565b34801561026e575f80fd5b5061028261027d366004611640565b610698565b005b34801561028f575f80fd5b506102a361029e3660046116df565b61075d565b6040516101b49190611772565b3480156102bb575f80fd5b506101a86102ca3660046117d2565b6108d1565b3480156102da575f80fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101b4565b34801561031f575f80fd5b506102556108f0565b348015610333575f80fd5b50610282610342366004611640565b61094a565b348015610352575f80fd5b50610255610361366004611810565b60036020525f908152604090205481565b34801561037d575f80fd5b5061028261038c366004611810565b6109f8565b34801561039c575f80fd5b506102556103ab366004611810565b60056020525f908152604090205481565b3480156103c7575f80fd5b506008546103db906001600160a01b031681565b6040516001600160a01b0390911681526020016101b4565b3480156103fe575f80fd5b5061028261040d366004611810565b610add565b34801561041d575f80fd5b506006546103db906001600160a01b031681565b34801561043c575f80fd5b506101d1610b30565b348015610450575f80fd5b506101a861045f3660046114fd565b610b3d565b34801561046f575f80fd5b5061022761047e3660046118a8565b63bc197c8160e01b95945050505050565b34801561049a575f80fd5b506007546103db906001600160a01b031681565b3480156104b9575f80fd5b506102826104c836600461194f565b610b51565b3480156104d8575f80fd5b506102556104e73660046119c0565b600460209081525f928352604080842090915290825290205481565b34801561050e575f80fd5b5061022761051d3660046119f7565b63f23a6e6160e01b95945050505050565b348015610539575f80fd5b50610282610548366004611810565b610d8f565b348015610558575f80fd5b506101d1610567366004611a5b565b610e0b565b5f6001600160e01b03198216630271189760e51b148061059c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f80546105ae90611adf565b80601f01602080910402602001604051908101604052809291908181526020018280546105da90611adf565b80156106255780601f106105fc57610100808354040283529160200191610625565b820191905f5260205f20905b81548152906001019060200180831161060857829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106879086815260200190565b60405180910390a350600192915050565b6106ad335f356001600160e01b031916610e91565b6106d25760405162461bcd60e51b81526004016106c990611b17565b60405180910390fd5b6106dc8282610f38565b82156106f6576106f66001600160a01b0385168685610f9f565b816001600160a01b0316846001600160a01b0316866001600160a01b03167fe0c82280a1164680e0cf43be7db4c4c9f985423623ad7a544fb76c772bdc6043868560405161074e929190918252602082015260400190565b60405180910390a45050505050565b6060610774335f356001600160e01b031916610e91565b6107905760405162461bcd60e51b81526004016106c990611b17565b858067ffffffffffffffff8111156107aa576107aa611527565b6040519080825280602002602001820160405280156107dd57816020015b60608152602001906001900390816107c85790505b5091505f5b818110156108c5576108978787838181106107ff576107ff611b3d565b90506020028101906108119190611b51565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525089925088915085905081811061085957610859611b3d565b905060200201358b8b8581811061087257610872611b3d565b90506020020160208101906108879190611810565b6001600160a01b03169190611022565b8382815181106108a9576108a9611b3d565b6020026020010181905250806108be90611ba8565b90506107e2565b50509695505050505050565b5f6108db846110bb565b6108e6848484611129565b90505b9392505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461092557610920611203565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b61095f335f356001600160e01b031916610e91565b61097b5760405162461bcd60e51b81526004016106c990611b17565b8215610996576109966001600160a01b03851686308661129b565b6109a0828261132c565b816001600160a01b0316846001600160a01b0316866001600160a01b03167fea00f88768a86184a6e515238a549c171769fe7460a011d6fd0bcd48ca078ea4868560405161074e929190918252602082015260400190565b6006546001600160a01b0316331480610a8a575060075460405163b700961360e01b81526001600160a01b039091169063b700961390610a4b90339030906001600160e01b03195f351690600401611bc0565b602060405180830381865afa158015610a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8a9190611bed565b610a92575f80fd5b600780546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350565b610af2335f356001600160e01b031916610e91565b610b0e5760405162461bcd60e51b81526004016106c990611b17565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600180546105ae90611adf565b5f610b47336110bb565b6108e9838361137b565b42841015610ba15760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016106c9565b5f6001610bac6108f0565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610cb4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811615801590610cea5750876001600160a01b0316816001600160a01b0316145b610d275760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016106c9565b6001600160a01b039081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b610da4335f356001600160e01b031916610e91565b610dc05760405162461bcd60e51b81526004016106c990611b17565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b6060610e22335f356001600160e01b031916610e91565b610e3e5760405162461bcd60e51b81526004016106c990611b17565b610e8884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050506001600160a01b03881691905084611022565b95945050505050565b6007545f906001600160a01b03168015801590610f18575060405163b700961360e01b81526001600160a01b0382169063b700961390610ed990879030908890600401611bc0565b602060405180830381865afa158015610ef4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f189190611bed565b80610f3057506006546001600160a01b038581169116145b949350505050565b6001600160a01b0382165f9081526003602052604081208054839290610f5f908490611c0c565b90915550506002805482900390556040518181525f906001600160a01b038416905f80516020611cea833981519152906020015b60405180910390a35050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f51141617169150508061101c5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016106c9565b50505050565b6060814710156110475760405163cd78605960e01b81523060048201526024016106c9565b5f80856001600160a01b031684866040516110629190611c1f565b5f6040518083038185875af1925050503d805f811461109c576040519150601f19603f3d011682016040523d82523d5f602084013e6110a1565b606091505b50915091506110b18683836113de565b9695505050505050565b6008546001600160a01b0316156111265760085460405163e83931af60e01b81526001600160a01b0383811660048301529091169063e83931af906024015f6040518083038186803b15801561110f575f80fd5b505afa158015611121573d5f803e3d5ffd5b505050505b50565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146111825761115e8382611c0c565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f90815260036020526040812080548592906111a9908490611c0c565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716905f80516020611cea833981519152906111f09087815260200190565b60405180910390a3506001949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516112339190611c3a565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f5114161716915050806111215760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016106c9565b8060025f82825461133d9190611cd6565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481525f80516020611cea8339815191529101610f93565b335f9081526003602052604081208054839190839061139b908490611c0c565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133905f80516020611cea833981519152906106879086815260200190565b6060826113f3576113ee8261143a565b6108e9565b815115801561140a57506001600160a01b0384163b155b1561143357604051639996b31560e01b81526001600160a01b03851660048201526024016106c9565b50806108e9565b80511561144a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611473575f80fd5b81356001600160e01b0319811681146108e9575f80fd5b5f5b838110156114a457818101518382015260200161148c565b50505f910152565b5f81518084526114c381602086016020860161148a565b601f01601f19169290920160200192915050565b602081525f6108e960208301846114ac565b6001600160a01b0381168114611126575f80fd5b5f806040838503121561150e575f80fd5b8235611519816114e9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561156457611564611527565b604052919050565b5f82601f83011261157b575f80fd5b813567ffffffffffffffff81111561159557611595611527565b6115a8601f8201601f191660200161153b565b8181528460208386010111156115bc575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156115eb575f80fd5b84356115f6816114e9565b93506020850135611606816114e9565b925060408501359150606085013567ffffffffffffffff811115611628575f80fd5b6116348782880161156c565b91505092959194509250565b5f805f805f60a08688031215611654575f80fd5b853561165f816114e9565b9450602086013561166f816114e9565b9350604086013592506060860135611686816114e9565b949793965091946080013592915050565b5f8083601f8401126116a7575f80fd5b50813567ffffffffffffffff8111156116be575f80fd5b6020830191508360208260051b85010111156116d8575f80fd5b9250929050565b5f805f805f80606087890312156116f4575f80fd5b863567ffffffffffffffff8082111561170b575f80fd5b6117178a838b01611697565b9098509650602089013591508082111561172f575f80fd5b61173b8a838b01611697565b90965094506040890135915080821115611753575f80fd5b5061176089828a01611697565b979a9699509497509295939492505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b828110156117c557603f198886030184526117b38583516114ac565b94509285019290850190600101611797565b5092979650505050505050565b5f805f606084860312156117e4575f80fd5b83356117ef816114e9565b925060208401356117ff816114e9565b929592945050506040919091013590565b5f60208284031215611820575f80fd5b81356108e9816114e9565b5f82601f83011261183a575f80fd5b8135602067ffffffffffffffff82111561185657611856611527565b8160051b61186582820161153b565b928352848101820192828101908785111561187e575f80fd5b83870192505b8483101561189d57823582529183019190830190611884565b979650505050505050565b5f805f805f60a086880312156118bc575f80fd5b85356118c7816114e9565b945060208601356118d7816114e9565b9350604086013567ffffffffffffffff808211156118f3575f80fd5b6118ff89838a0161182b565b94506060880135915080821115611914575f80fd5b61192089838a0161182b565b93506080880135915080821115611935575f80fd5b506119428882890161156c565b9150509295509295909350565b5f805f805f805f60e0888a031215611965575f80fd5b8735611970816114e9565b96506020880135611980816114e9565b95506040880135945060608801359350608088013560ff811681146119a3575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f80604083850312156119d1575f80fd5b82356119dc816114e9565b915060208301356119ec816114e9565b809150509250929050565b5f805f805f60a08688031215611a0b575f80fd5b8535611a16816114e9565b94506020860135611a26816114e9565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a4f575f80fd5b6119428882890161156c565b5f805f8060608587031215611a6e575f80fd5b8435611a79816114e9565b9350602085013567ffffffffffffffff80821115611a95575f80fd5b818701915087601f830112611aa8575f80fd5b813581811115611ab6575f80fd5b886020828501011115611ac7575f80fd5b95986020929092019750949560400135945092505050565b600181811c90821680611af357607f821691505b602082108103611b1157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112611b66575f80fd5b83018035915067ffffffffffffffff821115611b80575f80fd5b6020019150368190038213156116d8575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201611bb957611bb9611b94565b5060010190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b5f60208284031215611bfd575f80fd5b815180151581146108e9575f80fd5b8181038181111561059c5761059c611b94565b5f8251611c3081846020870161148a565b9190910192915050565b5f80835481600182811c915080831680611c5557607f831692505b60208084108203611c7457634e487b7160e01b86526022600452602486fd5b818015611c885760018114611c9d57611cc8565b60ff1986168952841515850289019650611cc8565b5f8a8152602090205f5b86811015611cc05781548b820152908501908301611ca7565b505084890196505b509498975050505050505050565b8082018082111561059c5761059c611b9456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122048c0c2371d0fdc2f694f435ecf17dfdc6207313aacec7ccfec78c1b67f0cb6c064736f6c634300081500330000000000000000000000002322ba43eff1542b6a7baed35e66099ea0d12bd1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001345746865722e4669204c6971756964205553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096c69717569645553440000000000000000000000000000000000000000000000Deployed Bytecode
0x60806040526004361061017e575f3560e01c80637ecebe00116100cd578063bc197c8111610087578063dd62ed3e11610062578063dd62ed3e146104cd578063f23a6e6114610503578063f2fde38b1461052e578063f6e715d01461054d575f80fd5b8063bc197c8114610464578063bf7e214f1461048f578063d505accf146104ae575f80fd5b80637ecebe00146103915780637f5a7c7b146103bc5780638929565f146103f35780638da5cb5b1461041257806395d89b4114610431578063a9059cbb14610445575f80fd5b8063224d8703116101385780633644e515116101135780633644e5151461031457806339d6ba321461032857806370a08231146103475780637a9e5e4b14610372575f80fd5b8063224d87031461028457806323b872dd146102b0578063313ce567146102cf575f80fd5b806301ffc9a71461018957806306fdde03146101bd578063095ea7b3146101de578063150b7a02146101fd57806318160ddd1461024057806318457e6114610263575f80fd5b3661018557005b5f80fd5b348015610194575f80fd5b506101a86101a3366004611463565b61056c565b60405190151581526020015b60405180910390f35b3480156101c8575f80fd5b506101d16105a2565b6040516101b491906114d7565b3480156101e9575f80fd5b506101a86101f83660046114fd565b61062d565b348015610208575f80fd5b506102276102173660046115d8565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101b4565b34801561024b575f80fd5b5061025560025481565b6040519081526020016101b4565b34801561026e575f80fd5b5061028261027d366004611640565b610698565b005b34801561028f575f80fd5b506102a361029e3660046116df565b61075d565b6040516101b49190611772565b3480156102bb575f80fd5b506101a86102ca3660046117d2565b6108d1565b3480156102da575f80fd5b506103027f000000000000000000000000000000000000000000000000000000000000000681565b60405160ff90911681526020016101b4565b34801561031f575f80fd5b506102556108f0565b348015610333575f80fd5b50610282610342366004611640565b61094a565b348015610352575f80fd5b50610255610361366004611810565b60036020525f908152604090205481565b34801561037d575f80fd5b5061028261038c366004611810565b6109f8565b34801561039c575f80fd5b506102556103ab366004611810565b60056020525f908152604090205481565b3480156103c7575f80fd5b506008546103db906001600160a01b031681565b6040516001600160a01b0390911681526020016101b4565b3480156103fe575f80fd5b5061028261040d366004611810565b610add565b34801561041d575f80fd5b506006546103db906001600160a01b031681565b34801561043c575f80fd5b506101d1610b30565b348015610450575f80fd5b506101a861045f3660046114fd565b610b3d565b34801561046f575f80fd5b5061022761047e3660046118a8565b63bc197c8160e01b95945050505050565b34801561049a575f80fd5b506007546103db906001600160a01b031681565b3480156104b9575f80fd5b506102826104c836600461194f565b610b51565b3480156104d8575f80fd5b506102556104e73660046119c0565b600460209081525f928352604080842090915290825290205481565b34801561050e575f80fd5b5061022761051d3660046119f7565b63f23a6e6160e01b95945050505050565b348015610539575f80fd5b50610282610548366004611810565b610d8f565b348015610558575f80fd5b506101d1610567366004611a5b565b610e0b565b5f6001600160e01b03198216630271189760e51b148061059c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f80546105ae90611adf565b80601f01602080910402602001604051908101604052809291908181526020018280546105da90611adf565b80156106255780601f106105fc57610100808354040283529160200191610625565b820191905f5260205f20905b81548152906001019060200180831161060857829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106879086815260200190565b60405180910390a350600192915050565b6106ad335f356001600160e01b031916610e91565b6106d25760405162461bcd60e51b81526004016106c990611b17565b60405180910390fd5b6106dc8282610f38565b82156106f6576106f66001600160a01b0385168685610f9f565b816001600160a01b0316846001600160a01b0316866001600160a01b03167fe0c82280a1164680e0cf43be7db4c4c9f985423623ad7a544fb76c772bdc6043868560405161074e929190918252602082015260400190565b60405180910390a45050505050565b6060610774335f356001600160e01b031916610e91565b6107905760405162461bcd60e51b81526004016106c990611b17565b858067ffffffffffffffff8111156107aa576107aa611527565b6040519080825280602002602001820160405280156107dd57816020015b60608152602001906001900390816107c85790505b5091505f5b818110156108c5576108978787838181106107ff576107ff611b3d565b90506020028101906108119190611b51565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525089925088915085905081811061085957610859611b3d565b905060200201358b8b8581811061087257610872611b3d565b90506020020160208101906108879190611810565b6001600160a01b03169190611022565b8382815181106108a9576108a9611b3d565b6020026020010181905250806108be90611ba8565b90506107e2565b50509695505050505050565b5f6108db846110bb565b6108e6848484611129565b90505b9392505050565b5f7f0000000000000000000000000000000000000000000000000000000000000001461461092557610920611203565b905090565b507fbd24641783ae3c32a725a234142771f4f7b8e3997c421c63f924ee859e6195d490565b61095f335f356001600160e01b031916610e91565b61097b5760405162461bcd60e51b81526004016106c990611b17565b8215610996576109966001600160a01b03851686308661129b565b6109a0828261132c565b816001600160a01b0316846001600160a01b0316866001600160a01b03167fea00f88768a86184a6e515238a549c171769fe7460a011d6fd0bcd48ca078ea4868560405161074e929190918252602082015260400190565b6006546001600160a01b0316331480610a8a575060075460405163b700961360e01b81526001600160a01b039091169063b700961390610a4b90339030906001600160e01b03195f351690600401611bc0565b602060405180830381865afa158015610a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8a9190611bed565b610a92575f80fd5b600780546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350565b610af2335f356001600160e01b031916610e91565b610b0e5760405162461bcd60e51b81526004016106c990611b17565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600180546105ae90611adf565b5f610b47336110bb565b6108e9838361137b565b42841015610ba15760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016106c9565b5f6001610bac6108f0565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610cb4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811615801590610cea5750876001600160a01b0316816001600160a01b0316145b610d275760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016106c9565b6001600160a01b039081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b610da4335f356001600160e01b031916610e91565b610dc05760405162461bcd60e51b81526004016106c990611b17565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b6060610e22335f356001600160e01b031916610e91565b610e3e5760405162461bcd60e51b81526004016106c990611b17565b610e8884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050506001600160a01b03881691905084611022565b95945050505050565b6007545f906001600160a01b03168015801590610f18575060405163b700961360e01b81526001600160a01b0382169063b700961390610ed990879030908890600401611bc0565b602060405180830381865afa158015610ef4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f189190611bed565b80610f3057506006546001600160a01b038581169116145b949350505050565b6001600160a01b0382165f9081526003602052604081208054839290610f5f908490611c0c565b90915550506002805482900390556040518181525f906001600160a01b038416905f80516020611cea833981519152906020015b60405180910390a35050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f51141617169150508061101c5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016106c9565b50505050565b6060814710156110475760405163cd78605960e01b81523060048201526024016106c9565b5f80856001600160a01b031684866040516110629190611c1f565b5f6040518083038185875af1925050503d805f811461109c576040519150601f19603f3d011682016040523d82523d5f602084013e6110a1565b606091505b50915091506110b18683836113de565b9695505050505050565b6008546001600160a01b0316156111265760085460405163e83931af60e01b81526001600160a01b0383811660048301529091169063e83931af906024015f6040518083038186803b15801561110f575f80fd5b505afa158015611121573d5f803e3d5ffd5b505050505b50565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146111825761115e8382611c0c565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f90815260036020526040812080548592906111a9908490611c0c565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716905f80516020611cea833981519152906111f09087815260200190565b60405180910390a3506001949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f6040516112339190611c3a565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f5114161716915050806111215760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016106c9565b8060025f82825461133d9190611cd6565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481525f80516020611cea8339815191529101610f93565b335f9081526003602052604081208054839190839061139b908490611c0c565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133905f80516020611cea833981519152906106879086815260200190565b6060826113f3576113ee8261143a565b6108e9565b815115801561140a57506001600160a01b0384163b155b1561143357604051639996b31560e01b81526001600160a01b03851660048201526024016106c9565b50806108e9565b80511561144a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611473575f80fd5b81356001600160e01b0319811681146108e9575f80fd5b5f5b838110156114a457818101518382015260200161148c565b50505f910152565b5f81518084526114c381602086016020860161148a565b601f01601f19169290920160200192915050565b602081525f6108e960208301846114ac565b6001600160a01b0381168114611126575f80fd5b5f806040838503121561150e575f80fd5b8235611519816114e9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561156457611564611527565b604052919050565b5f82601f83011261157b575f80fd5b813567ffffffffffffffff81111561159557611595611527565b6115a8601f8201601f191660200161153b565b8181528460208386010111156115bc575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156115eb575f80fd5b84356115f6816114e9565b93506020850135611606816114e9565b925060408501359150606085013567ffffffffffffffff811115611628575f80fd5b6116348782880161156c565b91505092959194509250565b5f805f805f60a08688031215611654575f80fd5b853561165f816114e9565b9450602086013561166f816114e9565b9350604086013592506060860135611686816114e9565b949793965091946080013592915050565b5f8083601f8401126116a7575f80fd5b50813567ffffffffffffffff8111156116be575f80fd5b6020830191508360208260051b85010111156116d8575f80fd5b9250929050565b5f805f805f80606087890312156116f4575f80fd5b863567ffffffffffffffff8082111561170b575f80fd5b6117178a838b01611697565b9098509650602089013591508082111561172f575f80fd5b61173b8a838b01611697565b90965094506040890135915080821115611753575f80fd5b5061176089828a01611697565b979a9699509497509295939492505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b828110156117c557603f198886030184526117b38583516114ac565b94509285019290850190600101611797565b5092979650505050505050565b5f805f606084860312156117e4575f80fd5b83356117ef816114e9565b925060208401356117ff816114e9565b929592945050506040919091013590565b5f60208284031215611820575f80fd5b81356108e9816114e9565b5f82601f83011261183a575f80fd5b8135602067ffffffffffffffff82111561185657611856611527565b8160051b61186582820161153b565b928352848101820192828101908785111561187e575f80fd5b83870192505b8483101561189d57823582529183019190830190611884565b979650505050505050565b5f805f805f60a086880312156118bc575f80fd5b85356118c7816114e9565b945060208601356118d7816114e9565b9350604086013567ffffffffffffffff808211156118f3575f80fd5b6118ff89838a0161182b565b94506060880135915080821115611914575f80fd5b61192089838a0161182b565b93506080880135915080821115611935575f80fd5b506119428882890161156c565b9150509295509295909350565b5f805f805f805f60e0888a031215611965575f80fd5b8735611970816114e9565b96506020880135611980816114e9565b95506040880135945060608801359350608088013560ff811681146119a3575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f80604083850312156119d1575f80fd5b82356119dc816114e9565b915060208301356119ec816114e9565b809150509250929050565b5f805f805f60a08688031215611a0b575f80fd5b8535611a16816114e9565b94506020860135611a26816114e9565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a4f575f80fd5b6119428882890161156c565b5f805f8060608587031215611a6e575f80fd5b8435611a79816114e9565b9350602085013567ffffffffffffffff80821115611a95575f80fd5b818701915087601f830112611aa8575f80fd5b813581811115611ab6575f80fd5b886020828501011115611ac7575f80fd5b95986020929092019750949560400135945092505050565b600181811c90821680611af357607f821691505b602082108103611b1157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112611b66575f80fd5b83018035915067ffffffffffffffff821115611b80575f80fd5b6020019150368190038213156116d8575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201611bb957611bb9611b94565b5060010190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b5f60208284031215611bfd575f80fd5b815180151581146108e9575f80fd5b8181038181111561059c5761059c611b94565b5f8251611c3081846020870161148a565b9190910192915050565b5f80835481600182811c915080831680611c5557607f831692505b60208084108203611c7457634e487b7160e01b86526022600452602486fd5b818015611c885760018114611c9d57611cc8565b60ff1986168952841515850289019650611cc8565b5f8a8152602090205f5b86811015611cc05781548b820152908501908301611ca7565b505084890196505b509498975050505050505050565b8082018082111561059c5761059c611b9456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122048c0c2371d0fdc2f694f435ecf17dfdc6207313aacec7ccfec78c1b67f0cb6c064736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002322ba43eff1542b6a7baed35e66099ea0d12bd1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001345746865722e4669204c6971756964205553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096c69717569645553440000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _owner (address): 0x2322ba43eFF1542b6A7bAeD35e66099Ea0d12Bd1
Arg [1] : _name (string): Ether.Fi Liquid USD
Arg [2] : _symbol (string): liquidUSD
Arg [3] : _decimals (uint8): 6
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000002322ba43eff1542b6a7baed35e66099ea0d12bd1
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [5] : 45746865722e4669204c69717569642055534400000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 6c69717569645553440000000000000000000000000000000000000000000000Deployed Bytecode Sourcemap
627:4364:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;649:221:1;;;;;;;;;;-1:-1:-1;649:221:1;;;;;:::i;:::-;;:::i;:::-;;;470:14:13;;463:22;445:41;;433:2;418:18;649:221:1;;;;;;;;1031:18:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2461:211::-;;;;;;;;;;-1:-1:-1;2461:211:8;;;;;:::i;:::-;;:::i;639:153:3:-;;;;;;;;;;-1:-1:-1;639:153:3;;;;;:::i;:::-;-1:-1:-1;;;639:153:3;;;;;;;;;;-1:-1:-1;;;;;;3488:33:13;;;3470:52;;3458:2;3443:18;639:153:3;3326:202:13;1304:26:8;;;;;;;;;;;;;;;;;;;3679:25:13;;;3667:2;3652:18;1304:26:8;3533:177:13;3526:373:11;;;;;;;;;;-1:-1:-1;3526:373:11;;;;;:::i;:::-;;:::i;:::-;;2177:417;;;;;;;;;;-1:-1:-1;2177:417:11;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4686:190::-;;;;;;;;;;-1:-1:-1;4686:190:11;;;;;:::i;:::-;;:::i;1083:31:8:-;;;;;;;;;;;;;;;;;;7316:4:13;7304:17;;;7286:36;;7274:2;7259:18;1083:31:8;7144:184:13;5327:177:8;;;;;;;;;;;;;:::i;2864:392:11:-;;;;;;;;;;-1:-1:-1;2864:392:11;;;;;:::i;:::-;;:::i;1337:44:8:-;;;;;;;;;;-1:-1:-1;1337:44:8;;;;;:::i;:::-;;;;;;;;;;;;;;1523:434:7;;;;;;;;;;-1:-1:-1;1523:434:7;;;;;:::i;:::-;;:::i;1751:41:8:-;;;;;;;;;;-1:-1:-1;1751:41:8;;;;;:::i;:::-;;;;;;;;;;;;;;993:30:11;;;;;;;;;;-1:-1:-1;993:30:11;;;;-1:-1:-1;;;;;993:30:11;;;;;;-1:-1:-1;;;;;8227:32:13;;;8209:51;;8197:2;8182:18;993:30:11;8036:230:13;4160:117:11;;;;;;;;;;-1:-1:-1;4160:117:11;;;;;:::i;:::-;;:::i;562:20:7:-;;;;;;;;;;-1:-1:-1;562:20:7;;;;-1:-1:-1;;;;;562:20:7;;;1056::8;;;;;;;;;;;;;:::i;4512:168:11:-;;;;;;;;;;-1:-1:-1;4512:168:11;;;;;:::i;:::-;;:::i;1101:247:1:-;;;;;;;;;;-1:-1:-1;1101:247:1;;;;;:::i;:::-;-1:-1:-1;;;1101:247:1;;;;;;;;589:26:7;;;;;;;;;;-1:-1:-1;589:26:7;;;;-1:-1:-1;;;;;589:26:7;;;3838:1483:8;;;;;;;;;;-1:-1:-1;3838:1483:8;;;;;:::i;:::-;;:::i;1388:64::-;;;;;;;;;;-1:-1:-1;1388:64:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;876:219:1;;;;;;;;;;-1:-1:-1;876:219:1;;;;;:::i;:::-;-1:-1:-1;;;876:219:1;;;;;;;;1963:164:7;;;;;;;;;;-1:-1:-1;1963:164:7;;;;;:::i;:::-;;:::i;1819:215:11:-;;;;;;;;;;-1:-1:-1;1819:215:11;;;;;:::i;:::-;;:::i;649:221:1:-;751:4;-1:-1:-1;;;;;;774:49:1;;-1:-1:-1;;;774:49:1;;:89;;-1:-1:-1;;;;;;;;;;861:40:5;;;827:36:1;767:96;649:221;-1:-1:-1;;649:221:1:o;1031:18:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2461:211::-;2561:10;2535:4;2551:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2551:30:8;;;;;;;;;;:39;;;2606:37;2535:4;;2551:30;;2606:37;;;;2584:6;3679:25:13;;3667:2;3652:18;;3533:177;2606:37:8;;;;;;;;-1:-1:-1;2661:4:8;2461:211;;;;:::o;3526:373:11:-;902:33:7;915:10;927:7;;-1:-1:-1;;;;;;927:7:7;902:12;:33::i;:::-;894:58;;;;-1:-1:-1;;;894:58:7;;;;;;;:::i;:::-;;;;;;;;;3697:24:11::1;3703:4;3709:11;3697:5;:24::i;:::-;3768:15:::0;;3764:56:::1;;3785:35;-1:-1:-1::0;;;;;3785:18:11;::::1;3804:2:::0;3808:11;3785:18:::1;:35::i;:::-;3874:4;-1:-1:-1::0;;;;;3836:56:11::1;3853:5;-1:-1:-1::0;;;;;3836:56:11::1;3841:2;-1:-1:-1::0;;;;;3836:56:11::1;;3861:11;3880;3836:56;;;;;;14385:25:13::0;;;14441:2;14426:18;;14419:34;14373:2;14358:18;;14211:248;3836:56:11::1;;;;;;;;3526:373:::0;;;;;:::o;2177:417::-;2326:22;902:33:7;915:10;927:7;;-1:-1:-1;;;;;;927:7:7;902:12;:33::i;:::-;894:58;;;;-1:-1:-1;;;894:58:7;;;;;;;:::i;:::-;2388:7:11;;2422:26:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2412:36;;2463:9;2458:130;2478:13;2474:1;:17;2458:130;;;2525:52;2558:4;;2563:1;2558:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2525:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2567:6:11;;-1:-1:-1;2567:6:11;;-1:-1:-1;2574:1:11;;-1:-1:-1;2567:9:11;;::::1;;;;;:::i;:::-;;;;;;;2525:7;;2533:1;2525:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2525:32:11::1;::::0;:52;:32:::1;:52::i;:::-;2512:7;2520:1;2512:10;;;;;;;;:::i;:::-;;;;;;:65;;;;2493:3;;;;:::i;:::-;;;2458:130;;;;2354:240;2177:417:::0;;;;;;;;:::o;4686:190::-;4775:4;4791:25;4811:4;4791:19;:25::i;:::-;4833:36;4852:4;4858:2;4862:6;4833:18;:36::i;:::-;4826:43;;4686:190;;;;;;:::o;5327:177:8:-;5384:7;5427:16;5410:13;:33;:87;;5473:24;:22;:24::i;:::-;5403:94;;5327:177;:::o;5410:87::-;-1:-1:-1;5446:24:8;;5327:177::o;2864:392:11:-;902:33:7;915:10;927:7;;-1:-1:-1;;;;;;927:7:7;902:12;:33::i;:::-;894:58;;;;-1:-1:-1;;;894:58:7;;;;;;;:::i;:::-;3046:15:11;;3042:77:::1;;3063:56;-1:-1:-1::0;;;;;3063:22:11;::::1;3086:4:::0;3100::::1;3107:11:::0;3063:22:::1;:56::i;:::-;3154:22;3160:2;3164:11;3154:5;:22::i;:::-;3233:2;-1:-1:-1::0;;;;;3192:57:11::1;3212:5;-1:-1:-1::0;;;;;3192:57:11::1;3198:4;-1:-1:-1::0;;;;;3192:57:11::1;;3220:11;3237;3192:57;;;;;;14385:25:13::0;;;14441:2;14426:18;;14419:34;14373:2;14358:18;;14211:248;1523:434:7;1794:5;;-1:-1:-1;;;;;1794:5:7;1780:10;:19;;:76;;-1:-1:-1;1803:9:7;;:53;;-1:-1:-1;;;1803:53:7;;-1:-1:-1;;;;;1803:9:7;;;;:17;;:53;;1821:10;;1841:4;;-1:-1:-1;;;;;;1803:9:7;1848:7;;;1803:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1772:85;;;;;;1868:9;:24;;-1:-1:-1;;;;;;1868:24:7;-1:-1:-1;;;;;1868:24:7;;;;;;;;1908:42;;1925:10;;1908:42;;-1:-1:-1;;1908:42:7;1523:434;:::o;4160:117:11:-;902:33:7;915:10;927:7;;-1:-1:-1;;;;;;927:7:7;902:12;:33::i;:::-;894:58;;;;-1:-1:-1;;;894:58:7;;;;;;;:::i;:::-;4238:4:11::1;:32:::0;;-1:-1:-1;;;;;;4238:32:11::1;-1:-1:-1::0;;;;;4238:32:11;;;::::1;::::0;;;::::1;::::0;;4160:117::o;1056:20:8:-;;;;;;;:::i;4512:168:11:-;4583:4;4599:31;4619:10;4599:19;:31::i;:::-;4647:26;4662:2;4666:6;4647:14;:26::i;3838:1483:8:-;4057:15;4045:8;:27;;4037:63;;;;-1:-1:-1;;;4037:63:8;;16283:2:13;4037:63:8;;;16265:21:13;16322:2;16302:18;;;16295:30;16361:25;16341:18;;;16334:53;16404:18;;4037:63:8;16081:347:13;4037:63:8;4265:24;4292:805;4428:18;:16;:18::i;:::-;-1:-1:-1;;;;;4873:13:8;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4511:449;;4555:165;4511:449;;;16720:25:13;16799:18;;;16792:43;;;;16871:15;;;16851:18;;;16844:43;16903:18;;;16896:34;;;16946:19;;;16939:35;;;;16990:19;;;;16983:35;;;4511:449:8;;;;;;;;;;16692:19:13;;;4511:449:8;;;4472:514;;;;;;;;-1:-1:-1;;;4350:658:8;;;17287:27:13;17330:11;;;17323:27;;;;17366:12;;;17359:28;;;;17403:12;;4350:658:8;;;-1:-1:-1;;4350:658:8;;;;;;;;;4319:707;;4350:658;4319:707;;;;4292:805;;;;;;;;;17653:25:13;17726:4;17714:17;;17694:18;;;17687:45;17748:18;;;17741:34;;;17791:18;;;17784:34;;;17625:19;;4292:805:8;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4292:805:8;;-1:-1:-1;;4292:805:8;;;-1:-1:-1;;;;;;;5120:30:8;;;;;;:59;;;5174:5;-1:-1:-1;;;;;5154:25:8;:16;-1:-1:-1;;;;;5154:25:8;;5120:59;5112:86;;;;-1:-1:-1;;;5112:86:8;;18031:2:13;5112:86:8;;;18013:21:13;18070:2;18050:18;;;18043:30;-1:-1:-1;;;18089:18:13;;;18082:44;18143:18;;5112:86:8;17829:338:13;5112:86:8;-1:-1:-1;;;;;5213:27:8;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5283:31;3679:25:13;;;5213:36:8;;5283:31;;;;;3652:18:13;5283:31:8;;;;;;;3838:1483;;;;;;;:::o;1963:164:7:-;902:33;915:10;927:7;;-1:-1:-1;;;;;;927:7:7;902:12;:33::i;:::-;894:58;;;;-1:-1:-1;;;894:58:7;;;;;;;:::i;:::-;2046:5:::1;:16:::0;;-1:-1:-1;;;;;;2046:16:7::1;-1:-1:-1::0;;;;;2046:16:7;::::1;::::0;;::::1;::::0;;;2078:42:::1;::::0;2099:10:::1;::::0;2078:42:::1;::::0;-1:-1:-1;;2078:42:7::1;1963:164:::0;:::o;1819:215:11:-;1942:19;902:33:7;915:10;927:7;;-1:-1:-1;;;;;;927:7:7;902:12;:33::i;:::-;894:58;;;;-1:-1:-1;;;894:58:7;;;;;;;:::i;:::-;1986:41:11::1;2015:4;;1986:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;1986:28:11;::::1;::::0;;-1:-1:-1;2021:5:11;1986:28:::1;:41::i;:::-;1977:50:::0;1819:215;-1:-1:-1;;;;;1819:215:11:o;977:540:7:-;1097:9;;1064:4;;-1:-1:-1;;;;;1097:9:7;1415:27;;;;;:77;;-1:-1:-1;1446:46:7;;-1:-1:-1;;;1446:46:7;;-1:-1:-1;;;;;1446:12:7;;;;;:46;;1459:4;;1473;;1480:11;;1446:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1414:96;;;-1:-1:-1;1505:5:7;;-1:-1:-1;;;;;1497:13:7;;;1505:5;;1497:13;1414:96;1407:103;977:540;-1:-1:-1;;;;977:540:7:o;6481:328:8:-;-1:-1:-1;;;;;6553:15:8;;;;;;:9;:15;;;;;:25;;6572:6;;6553:15;:25;;6572:6;;6553:25;:::i;:::-;;;;-1:-1:-1;;6721:11:8;:21;;;;;;;6768:34;;3679:25:13;;;-1:-1:-1;;;;;;;6768:34:8;;;-1:-1:-1;;;;;;;;;;;6768:34:8;3667:2:13;3652:18;6768:34:8;;;;;;;;6481:328;;:::o;3116:1607:10:-;3228:12;3398:4;3392:11;-1:-1:-1;;;3521:17:10;3514:93;-1:-1:-1;;;;;3658:2:10;3654:51;3650:1;3631:17;3627:25;3620:86;3792:6;3787:2;3768:17;3764:26;3757:42;4644:2;4641:1;4637:2;4618:17;4615:1;4608:5;4601;4596:51;4165:16;4158:24;4152:2;4134:16;4131:24;4127:1;4123;4117:8;4114:15;4110:46;4107:76;3907:754;3896:765;;;4689:7;4681:35;;;;-1:-1:-1;;;4681:35:10;;18507:2:13;4681:35:10;;;18489:21:13;18546:2;18526:18;;;18519:30;-1:-1:-1;;;18565:18:13;;;18558:45;18620:18;;4681:35:10;18305:339:13;4681:35:10;3218:1505;3116:1607;;;:::o;3180:392:4:-;3279:12;3331:5;3307:21;:29;3303:108;;;3359:41;;-1:-1:-1;;;3359:41:4;;3394:4;3359:41;;;8209:51:13;8182:18;;3359:41:4;8036:230:13;3303:108:4;3421:12;3435:23;3462:6;-1:-1:-1;;;;;3462:11:4;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;3180:392;-1:-1:-1;;;;;;3180:392:4:o;4374:132:11:-;4453:4;;-1:-1:-1;;;;;4453:4:11;4445:27;4441:58;;4474:4;;:25;;-1:-1:-1;;;4474:25:11;;-1:-1:-1;;;;;8227:32:13;;;4474:25:11;;;8209:51:13;4474:4:11;;;;:19;;8182:18:13;;4474:25:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4441:58;4374:132;:::o;3057:592:8:-;-1:-1:-1;;;;;3209:15:8;;3175:4;3209:15;;;:9;:15;;;;;;;;3225:10;3209:27;;;;;;;;-1:-1:-1;;3287:28:8;;3283:80;;3347:16;3357:6;3347:7;:16;:::i;:::-;-1:-1:-1;;;;;3317:15:8;;;;;;:9;:15;;;;;;;;3333:10;3317:27;;;;;;;:46;3283:80;-1:-1:-1;;;;;3374:15:8;;;;;;:9;:15;;;;;:25;;3393:6;;3374:15;:25;;3393:6;;3374:25;:::i;:::-;;;;-1:-1:-1;;;;;;;3545:13:8;;;;;;;:9;:13;;;;;;;:23;;;;;;3594:26;3545:13;;3594:26;;;-1:-1:-1;;;;;;;;;;;3594:26:8;;;3562:6;3679:25:13;;3667:2;3652:18;;3533:177;3594:26:8;;;;;;;;-1:-1:-1;3638:4:8;;3057:592;-1:-1:-1;;;;3057:592:8:o;5510:446::-;5575:7;5672:95;5805:4;5789:22;;;;;;:::i;:::-;;;;;;;;;;5640:295;;;20467:25:13;;;;20508:18;;20501:34;;;;5833:14:8;20551:18:13;;;20544:34;5869:13:8;20594:18:13;;;20587:34;5912:4:8;20637:19:13;;;20630:61;20439:19;;5640:295:8;;;;;;;;;;;;5613:336;;;;;;5594:355;;5510:446;:::o;1328:1782:10:-;1466:12;1636:4;1630:11;-1:-1:-1;;;1759:17:10;1752:93;-1:-1:-1;;;;;1896:4:10;1892:53;1888:1;1869:17;1865:25;1858:88;-1:-1:-1;;;;;2038:2:10;2034:51;2029:2;2010:17;2006:26;1999:87;2172:6;2167:2;2148:17;2144:26;2137:42;3026:2;3023:1;3018:3;2999:17;2996:1;2989:5;2982;2977:52;2545:16;2538:24;2532:2;2514:16;2511:24;2507:1;2503;2497:8;2494:15;2490:46;2487:76;2287:756;2276:767;;;3071:7;3063:40;;;;-1:-1:-1;;;3063:40:10;;20904:2:13;3063:40:10;;;20886:21:13;20943:2;20923:18;;;20916:30;-1:-1:-1;;;20962:18:13;;;20955:50;21022:18;;3063:40:10;20702:344:13;6150:325:8;6235:6;6220:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6387:13:8;;;;;;:9;:13;;;;;;;;:23;;;;;;6436:32;3679:25:13;;;-1:-1:-1;;;;;;;;;;;6436:32:8;3652:18:13;6436:32:8;3533:177:13;2678:373:8;2774:10;2748:4;2764:21;;;:9;:21;;;;;:31;;2789:6;;2764:21;2748:4;;2764:31;;2789:6;;2764:31;:::i;:::-;;;;-1:-1:-1;;;;;;;2941:13:8;;;;;;:9;:13;;;;;;;:23;;;;;;2990:32;2999:10;;-1:-1:-1;;;;;;;;;;;2990:32:8;;;2958:6;3679:25:13;;3667:2;3652:18;;3533:177;4625:582:4;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:4;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:4;;-1:-1:-1;;;;;8227:32:13;;5121:24:4;;;8209:51:13;8182:18;;5121:24:4;8036:230:13;5041:119:4;-1:-1:-1;5180:10:4;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:4;;;;;;;;;;;14:286:13;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:13;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:13;721:16;;714:27;497:250::o;752:271::-;794:3;832:5;826:12;859:6;854:3;847:19;875:76;944:6;937:4;932:3;928:14;921:4;914:5;910:16;875:76;:::i;:::-;1005:2;984:15;-1:-1:-1;;980:29:13;971:39;;;;1012:4;967:50;;752:271;-1:-1:-1;;752:271:13:o;1028:220::-;1177:2;1166:9;1159:21;1140:4;1197:45;1238:2;1227:9;1223:18;1215:6;1197:45;:::i;1253:131::-;-1:-1:-1;;;;;1328:31:13;;1318:42;;1308:70;;1374:1;1371;1364:12;1389:315;1457:6;1465;1518:2;1506:9;1497:7;1493:23;1489:32;1486:52;;;1534:1;1531;1524:12;1486:52;1573:9;1560:23;1592:31;1617:5;1592:31;:::i;:::-;1642:5;1694:2;1679:18;;;;1666:32;;-1:-1:-1;;;1389:315:13:o;1709:127::-;1770:10;1765:3;1761:20;1758:1;1751:31;1801:4;1798:1;1791:15;1825:4;1822:1;1815:15;1841:275;1912:2;1906:9;1977:2;1958:13;;-1:-1:-1;;1954:27:13;1942:40;;2012:18;1997:34;;2033:22;;;1994:62;1991:88;;;2059:18;;:::i;:::-;2095:2;2088:22;1841:275;;-1:-1:-1;1841:275:13:o;2121:530::-;2163:5;2216:3;2209:4;2201:6;2197:17;2193:27;2183:55;;2234:1;2231;2224:12;2183:55;2270:6;2257:20;2296:18;2292:2;2289:26;2286:52;;;2318:18;;:::i;:::-;2362:55;2405:2;2386:13;;-1:-1:-1;;2382:27:13;2411:4;2378:38;2362:55;:::i;:::-;2442:2;2433:7;2426:19;2488:3;2481:4;2476:2;2468:6;2464:15;2460:26;2457:35;2454:55;;;2505:1;2502;2495:12;2454:55;2570:2;2563:4;2555:6;2551:17;2544:4;2535:7;2531:18;2518:55;2618:1;2593:16;;;2611:4;2589:27;2582:38;;;;2597:7;2121:530;-1:-1:-1;;;2121:530:13:o;2656:665::-;2751:6;2759;2767;2775;2828:3;2816:9;2807:7;2803:23;2799:33;2796:53;;;2845:1;2842;2835:12;2796:53;2884:9;2871:23;2903:31;2928:5;2903:31;:::i;:::-;2953:5;-1:-1:-1;3010:2:13;2995:18;;2982:32;3023:33;2982:32;3023:33;:::i;:::-;3075:7;-1:-1:-1;3129:2:13;3114:18;;3101:32;;-1:-1:-1;3184:2:13;3169:18;;3156:32;3211:18;3200:30;;3197:50;;;3243:1;3240;3233:12;3197:50;3266:49;3307:7;3298:6;3287:9;3283:22;3266:49;:::i;:::-;3256:59;;;2656:665;;;;;;;:::o;3715:681::-;3824:6;3832;3840;3848;3856;3909:3;3897:9;3888:7;3884:23;3880:33;3877:53;;;3926:1;3923;3916:12;3877:53;3965:9;3952:23;3984:31;4009:5;3984:31;:::i;:::-;4034:5;-1:-1:-1;4091:2:13;4076:18;;4063:32;4104:33;4063:32;4104:33;:::i;:::-;4156:7;-1:-1:-1;4210:2:13;4195:18;;4182:32;;-1:-1:-1;4266:2:13;4251:18;;4238:32;4279:33;4238:32;4279:33;:::i;:::-;3715:681;;;;-1:-1:-1;3715:681:13;;4385:3;4370:19;4357:33;;3715:681;-1:-1:-1;;3715:681:13:o;4401:367::-;4464:8;4474:6;4528:3;4521:4;4513:6;4509:17;4505:27;4495:55;;4546:1;4543;4536:12;4495:55;-1:-1:-1;4569:20:13;;4612:18;4601:30;;4598:50;;;4644:1;4641;4634:12;4598:50;4681:4;4673:6;4669:17;4657:29;;4741:3;4734:4;4724:6;4721:1;4717:14;4709:6;4705:27;4701:38;4698:47;4695:67;;;4758:1;4755;4748:12;4695:67;4401:367;;;;;:::o;4773:1099::-;4942:6;4950;4958;4966;4974;4982;5035:2;5023:9;5014:7;5010:23;5006:32;5003:52;;;5051:1;5048;5041:12;5003:52;5091:9;5078:23;5120:18;5161:2;5153:6;5150:14;5147:34;;;5177:1;5174;5167:12;5147:34;5216:70;5278:7;5269:6;5258:9;5254:22;5216:70;:::i;:::-;5305:8;;-1:-1:-1;5190:96:13;-1:-1:-1;5393:2:13;5378:18;;5365:32;;-1:-1:-1;5409:16:13;;;5406:36;;;5438:1;5435;5428:12;5406:36;5477:72;5541:7;5530:8;5519:9;5515:24;5477:72;:::i;:::-;5568:8;;-1:-1:-1;5451:98:13;-1:-1:-1;5656:2:13;5641:18;;5628:32;;-1:-1:-1;5672:16:13;;;5669:36;;;5701:1;5698;5691:12;5669:36;;5740:72;5804:7;5793:8;5782:9;5778:24;5740:72;:::i;:::-;4773:1099;;;;-1:-1:-1;4773:1099:13;;-1:-1:-1;4773:1099:13;;5831:8;;4773:1099;-1:-1:-1;;;4773:1099:13:o;5877:801::-;6037:4;6066:2;6106;6095:9;6091:18;6136:2;6125:9;6118:21;6159:6;6194;6188:13;6225:6;6217;6210:22;6263:2;6252:9;6248:18;6241:25;;6325:2;6315:6;6312:1;6308:14;6297:9;6293:30;6289:39;6275:53;;6363:2;6355:6;6351:15;6384:1;6394:255;6408:6;6405:1;6402:13;6394:255;;;6501:2;6497:7;6485:9;6477:6;6473:22;6469:36;6464:3;6457:49;6529:40;6562:6;6553;6547:13;6529:40;:::i;:::-;6519:50;-1:-1:-1;6627:12:13;;;;6592:15;;;;6430:1;6423:9;6394:255;;;-1:-1:-1;6666:6:13;;5877:801;-1:-1:-1;;;;;;;5877:801:13:o;6683:456::-;6760:6;6768;6776;6829:2;6817:9;6808:7;6804:23;6800:32;6797:52;;;6845:1;6842;6835:12;6797:52;6884:9;6871:23;6903:31;6928:5;6903:31;:::i;:::-;6953:5;-1:-1:-1;7010:2:13;6995:18;;6982:32;7023:33;6982:32;7023:33;:::i;:::-;6683:456;;7075:7;;-1:-1:-1;;;7129:2:13;7114:18;;;;7101:32;;6683:456::o;7515:247::-;7574:6;7627:2;7615:9;7606:7;7602:23;7598:32;7595:52;;;7643:1;7640;7633:12;7595:52;7682:9;7669:23;7701:31;7726:5;7701:31;:::i;8479:712::-;8533:5;8586:3;8579:4;8571:6;8567:17;8563:27;8553:55;;8604:1;8601;8594:12;8553:55;8640:6;8627:20;8666:4;8689:18;8685:2;8682:26;8679:52;;;8711:18;;:::i;:::-;8757:2;8754:1;8750:10;8780:28;8804:2;8800;8796:11;8780:28;:::i;:::-;8842:15;;;8912;;;8908:24;;;8873:12;;;;8944:15;;;8941:35;;;8972:1;8969;8962:12;8941:35;9008:2;9000:6;8996:15;8985:26;;9020:142;9036:6;9031:3;9028:15;9020:142;;;9102:17;;9090:30;;9053:12;;;;9140;;;;9020:142;;;9180:5;8479:712;-1:-1:-1;;;;;;;8479:712:13:o;9196:1071::-;9350:6;9358;9366;9374;9382;9435:3;9423:9;9414:7;9410:23;9406:33;9403:53;;;9452:1;9449;9442:12;9403:53;9491:9;9478:23;9510:31;9535:5;9510:31;:::i;:::-;9560:5;-1:-1:-1;9617:2:13;9602:18;;9589:32;9630:33;9589:32;9630:33;:::i;:::-;9682:7;-1:-1:-1;9740:2:13;9725:18;;9712:32;9763:18;9793:14;;;9790:34;;;9820:1;9817;9810:12;9790:34;9843:61;9896:7;9887:6;9876:9;9872:22;9843:61;:::i;:::-;9833:71;;9957:2;9946:9;9942:18;9929:32;9913:48;;9986:2;9976:8;9973:16;9970:36;;;10002:1;9999;9992:12;9970:36;10025:63;10080:7;10069:8;10058:9;10054:24;10025:63;:::i;:::-;10015:73;;10141:3;10130:9;10126:19;10113:33;10097:49;;10171:2;10161:8;10158:16;10155:36;;;10187:1;10184;10177:12;10155:36;;10210:51;10253:7;10242:8;10231:9;10227:24;10210:51;:::i;:::-;10200:61;;;9196:1071;;;;;;;;:::o;10497:829::-;10608:6;10616;10624;10632;10640;10648;10656;10709:3;10697:9;10688:7;10684:23;10680:33;10677:53;;;10726:1;10723;10716:12;10677:53;10765:9;10752:23;10784:31;10809:5;10784:31;:::i;:::-;10834:5;-1:-1:-1;10891:2:13;10876:18;;10863:32;10904:33;10863:32;10904:33;:::i;:::-;10956:7;-1:-1:-1;11010:2:13;10995:18;;10982:32;;-1:-1:-1;11061:2:13;11046:18;;11033:32;;-1:-1:-1;11117:3:13;11102:19;;11089:33;11166:4;11153:18;;11141:31;;11131:59;;11186:1;11183;11176:12;11131:59;10497:829;;;;-1:-1:-1;10497:829:13;;;;11209:7;11263:3;11248:19;;11235:33;;-1:-1:-1;11315:3:13;11300:19;;;11287:33;;10497:829;-1:-1:-1;;10497:829:13:o;11331:388::-;11399:6;11407;11460:2;11448:9;11439:7;11435:23;11431:32;11428:52;;;11476:1;11473;11466:12;11428:52;11515:9;11502:23;11534:31;11559:5;11534:31;:::i;:::-;11584:5;-1:-1:-1;11641:2:13;11626:18;;11613:32;11654:33;11613:32;11654:33;:::i;:::-;11706:7;11696:17;;;11331:388;;;;;:::o;11724:734::-;11828:6;11836;11844;11852;11860;11913:3;11901:9;11892:7;11888:23;11884:33;11881:53;;;11930:1;11927;11920:12;11881:53;11969:9;11956:23;11988:31;12013:5;11988:31;:::i;:::-;12038:5;-1:-1:-1;12095:2:13;12080:18;;12067:32;12108:33;12067:32;12108:33;:::i;:::-;12160:7;-1:-1:-1;12214:2:13;12199:18;;12186:32;;-1:-1:-1;12265:2:13;12250:18;;12237:32;;-1:-1:-1;12320:3:13;12305:19;;12292:33;12348:18;12337:30;;12334:50;;;12380:1;12377;12370:12;12334:50;12403:49;12444:7;12435:6;12424:9;12420:22;12403:49;:::i;12463:794::-;12551:6;12559;12567;12575;12628:2;12616:9;12607:7;12603:23;12599:32;12596:52;;;12644:1;12641;12634:12;12596:52;12683:9;12670:23;12702:31;12727:5;12702:31;:::i;:::-;12752:5;-1:-1:-1;12808:2:13;12793:18;;12780:32;12831:18;12861:14;;;12858:34;;;12888:1;12885;12878:12;12858:34;12926:6;12915:9;12911:22;12901:32;;12971:7;12964:4;12960:2;12956:13;12952:27;12942:55;;12993:1;12990;12983:12;12942:55;13033:2;13020:16;13059:2;13051:6;13048:14;13045:34;;;13075:1;13072;13065:12;13045:34;13120:7;13115:2;13106:6;13102:2;13098:15;13094:24;13091:37;13088:57;;;13141:1;13138;13131:12;13088:57;12463:794;;13172:2;13164:11;;;;;-1:-1:-1;13194:6:13;;13247:2;13232:18;13219:32;;-1:-1:-1;12463:794:13;-1:-1:-1;;;12463:794:13:o;13485:380::-;13564:1;13560:12;;;;13607;;;13628:61;;13682:4;13674:6;13670:17;13660:27;;13628:61;13735:2;13727:6;13724:14;13704:18;13701:38;13698:161;;13781:10;13776:3;13772:20;13769:1;13762:31;13816:4;13813:1;13806:15;13844:4;13841:1;13834:15;13698:161;;13485:380;;;:::o;13870:336::-;14072:2;14054:21;;;14111:2;14091:18;;;14084:30;-1:-1:-1;;;14145:2:13;14130:18;;14123:42;14197:2;14182:18;;13870:336::o;14464:127::-;14525:10;14520:3;14516:20;14513:1;14506:31;14556:4;14553:1;14546:15;14580:4;14577:1;14570:15;14596:521;14673:4;14679:6;14739:11;14726:25;14833:2;14829:7;14818:8;14802:14;14798:29;14794:43;14774:18;14770:68;14760:96;;14852:1;14849;14842:12;14760:96;14879:33;;14931:20;;;-1:-1:-1;14974:18:13;14963:30;;14960:50;;;15006:1;15003;14996:12;14960:50;15039:4;15027:17;;-1:-1:-1;15070:14:13;15066:27;;;15056:38;;15053:58;;;15107:1;15104;15097:12;15122:127;15183:10;15178:3;15174:20;15171:1;15164:31;15214:4;15211:1;15204:15;15238:4;15235:1;15228:15;15254:135;15293:3;15314:17;;;15311:43;;15334:18;;:::i;:::-;-1:-1:-1;15381:1:13;15370:13;;15254:135::o;15394:400::-;-1:-1:-1;;;;;15650:15:13;;;15632:34;;15702:15;;;;15697:2;15682:18;;15675:43;-1:-1:-1;;;;;;15754:33:13;;;15749:2;15734:18;;15727:61;15582:2;15567:18;;15394:400::o;15799:277::-;15866:6;15919:2;15907:9;15898:7;15894:23;15890:32;15887:52;;;15935:1;15932;15925:12;15887:52;15967:9;15961:16;16020:5;16013:13;16006:21;15999:5;15996:32;15986:60;;16042:1;16039;16032:12;18172:128;18239:9;;;18260:11;;;18257:37;;;18274:18;;:::i;18649:287::-;18778:3;18816:6;18810:13;18832:66;18891:6;18886:3;18879:4;18871:6;18867:17;18832:66;:::i;:::-;18914:16;;;;;18649:287;-1:-1:-1;;18649:287:13:o;19070:1133::-;19200:3;19229:1;19262:6;19256:13;19292:3;19314:1;19342:9;19338:2;19334:18;19324:28;;19402:2;19391:9;19387:18;19424;19414:61;;19468:4;19460:6;19456:17;19446:27;;19414:61;19494:2;19542;19534:6;19531:14;19511:18;19508:38;19505:165;;-1:-1:-1;;;19569:33:13;;19625:4;19622:1;19615:15;19655:4;19576:3;19643:17;19505:165;19686:18;19713:133;;;;19860:1;19855:323;;;;19679:499;;19713:133;-1:-1:-1;;19746:24:13;;19734:37;;19819:14;;19812:22;19800:35;;19791:45;;;-1:-1:-1;19713:133:13;;19855:323;19017:1;19010:14;;;19054:4;19041:18;;19953:1;19967:165;19981:6;19978:1;19975:13;19967:165;;;20059:14;;20046:11;;;20039:35;20102:16;;;;19996:10;;19967:165;;;19971:3;;20161:6;20156:3;20152:16;20145:23;;19679:499;-1:-1:-1;20194:3:13;;19070:1133;-1:-1:-1;;;;;;;;19070:1133:13:o;21051:125::-;21116:9;;;21137:10;;;21134:36;;;21150:18;;:::i
Swarm Source
ipfs://48c0c2371d0fdc2f694f435ecf17dfdc6207313aacec7ccfec78c1b67f0cb6c0
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ETH 94.03% $1.13 3,253,725.7224 $3,676,710.07 ETH 2.73% $1 106,732.0696 $106,732.07 ETH 1.20% $1 46,955.9425 $47,049.85 ETH 0.72% $1 28,101.9477 $28,158.15 ETH 0.45% $0.99766 17,700 $17,658.58 ETH 0.30% $1 11,543.2534 $11,577.88 ETH 0.15% $2.15 2,685.1418 $5,773.05 ETH 0.09% $5.35 663.5052 $3,549.75 ETH 0.03% $1.12 1,178.7048 $1,320.15 ETH 0.03% $1 1,167.7733 $1,168.94 ETH <0.01% $1 0.748 $0.7479 BSC 0.26% $1.86 5,499.396 $10,251.17 BASE <0.01% $0.000551 200 $0.1101 Loading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to VerbatimInvalidDeduplication (low-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.