ETH Price: $3,914.23 (-0.33%)

Contract

0x00000000009726632680FB29d3F7A9734E3010E2

Overview

ETH Balance

0.00420221415734748 ETH

ETH Value

$16.45 (@ $3,914.23/ETH)

Token Holdings

Transaction Hash
Method
Block
From
To
Fill Quote Eth T...1292332022024-12-13 4:46:2148 mins ago1734065181IN
0x00000000...34E3010E2
0.0121 ETH0.0000075718510.00010488
Fill Quote Token...1292331422024-12-13 4:44:2150 mins ago1734065061IN
0x00000000...34E3010E2
0 ETH0.0000097743890.00000048
Fill Quote Token...1292330272024-12-13 4:40:3154 mins ago1734064831IN
0x00000000...34E3010E2
0 ETH0.0000137584410.00000048
Fill Quote Token...1292327342024-12-13 4:30:451 hr ago1734064245IN
0x00000000...34E3010E2
0 ETH0.0000159027050.00000047
Fill Quote Token...1292303952024-12-13 3:12:472 hrs ago1734059567IN
0x00000000...34E3010E2
0 ETH0.0000144791010.00010493
Fill Quote Token...1292303222024-12-13 3:10:212 hrs ago1734059421IN
0x00000000...34E3010E2
0 ETH0.0000196523630.00010493
Fill Quote Eth T...1292289072024-12-13 2:23:113 hrs ago1734056591IN
0x00000000...34E3010E2
0.0001 ETH0.0000103723310.000012
Fill Quote Eth T...1292274912024-12-13 1:35:593 hrs ago1734053759IN
0x00000000...34E3010E2
0.00414 ETH0.0000065974150.00010533
Fill Quote Token...1292268562024-12-13 1:14:494 hrs ago1734052489IN
0x00000000...34E3010E2
0 ETH0.0000029920230.00000126
Fill Quote Token...1292243422024-12-12 23:51:015 hrs ago1734047461IN
0x00000000...34E3010E2
0 ETH0.0000003533940.00001061
Fill Quote Eth T...1292238932024-12-12 23:36:035 hrs ago1734046563IN
0x00000000...34E3010E2
0.033 ETH0.0000006679630.00000127
Fill Quote Token...1292229192024-12-12 23:03:356 hrs ago1734044615IN
0x00000000...34E3010E2
0 ETH0.0000014514630.00000108
Fill Quote Token...1292227912024-12-12 22:59:196 hrs ago1734044359IN
0x00000000...34E3010E2
0 ETH0.0000013501290.00000111
Fill Quote Token...1292220642024-12-12 22:35:056 hrs ago1734042905IN
0x00000000...34E3010E2
0 ETH0.000001364490.00000112
Fill Quote Token...1292220642024-12-12 22:35:056 hrs ago1734042905IN
0x00000000...34E3010E2
0 ETH0.0000007584590.00000112
Fill Quote Token...1292220332024-12-12 22:34:037 hrs ago1734042843IN
0x00000000...34E3010E2
0 ETH0.0000012860410.00000113
Fill Quote Token...1292220282024-12-12 22:33:537 hrs ago1734042833IN
0x00000000...34E3010E2
0 ETH0.0000009505080.00000113
Fill Quote Token...1292215002024-12-12 22:16:177 hrs ago1734041777IN
0x00000000...34E3010E2
0 ETH0.0000013633820.00010448
Fill Quote Eth T...1292213762024-12-12 22:12:097 hrs ago1734041529IN
0x00000000...34E3010E2
0.00031 ETH0.0000015458340.00000101
Fill Quote Token...1292213672024-12-12 22:11:517 hrs ago1734041511IN
0x00000000...34E3010E2
0 ETH0.0000014759180.00000102
Fill Quote Token...1292204802024-12-12 21:42:177 hrs ago1734039737IN
0x00000000...34E3010E2
0 ETH0.0000010956640.00010517
Fill Quote Token...1292204762024-12-12 21:42:097 hrs ago1734039729IN
0x00000000...34E3010E2
0 ETH0.0000018519660.00000087
Fill Quote Token...1292203022024-12-12 21:36:217 hrs ago1734039381IN
0x00000000...34E3010E2
0 ETH0.0000018986630.00009524
Fill Quote Token...1292192872024-12-12 21:02:318 hrs ago1734037351IN
0x00000000...34E3010E2
0 ETH0.0000052255950.00000077
Fill Quote Token...1292174882024-12-12 20:02:339 hrs ago1734033753IN
0x00000000...34E3010E2
0 ETH0.0000213493230.00010514
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1292332022024-12-13 4:46:2148 mins ago1734065181
0x00000000...34E3010E2
0.01199715 ETH
1292303952024-12-13 3:12:472 hrs ago1734059567
0x00000000...34E3010E2
0.000706933667602 ETH
1292303952024-12-13 3:12:472 hrs ago1734059567
0x00000000...34E3010E2
0.000712994117602 ETH
1292303222024-12-13 3:10:212 hrs ago1734059421
0x00000000...34E3010E2
0.000963696697352 ETH
1292303222024-12-13 3:10:212 hrs ago1734059421
0x00000000...34E3010E2
0.000971958343269 ETH
1292289072024-12-13 2:23:113 hrs ago1734056591
0x00000000...34E3010E2
0.00009915 ETH
1292274912024-12-13 1:35:593 hrs ago1734053759
0x00000000...34E3010E2
0.00410481 ETH
1292268562024-12-13 1:14:494 hrs ago1734052489
0x00000000...34E3010E2
0.000099372886078 ETH
1292268562024-12-13 1:14:494 hrs ago1734052489
0x00000000...34E3010E2
0.000100224796851 ETH
1292238932024-12-12 23:36:035 hrs ago1734046563
0x00000000...34E3010E2
0.0327195 ETH
1292229192024-12-12 23:03:356 hrs ago1734044615
0x00000000...34E3010E2
0.000847100453107 ETH
1292229192024-12-12 23:03:356 hrs ago1734044615
0x00000000...34E3010E2
0.000854362534652 ETH
1292227912024-12-12 22:59:196 hrs ago1734044359
0x00000000...34E3010E2
0.000354641383428 ETH
1292227912024-12-12 22:59:196 hrs ago1734044359
0x00000000...34E3010E2
0.000357681677689 ETH
1292220642024-12-12 22:35:056 hrs ago1734042905
0x00000000...34E3010E2
0.002021865296479 ETH
1292220642024-12-12 22:35:056 hrs ago1734042905
0x00000000...34E3010E2
0.002039198483589 ETH
1292220642024-12-12 22:35:056 hrs ago1734042905
0x00000000...34E3010E2
0.003657631527697 ETH
1292220642024-12-12 22:35:056 hrs ago1734042905
0x00000000...34E3010E2
0.00368898792506 ETH
1292220332024-12-12 22:34:037 hrs ago1734042843
0x00000000...34E3010E2
0.046989058771844 ETH
1292220332024-12-12 22:34:037 hrs ago1734042843
0x00000000...34E3010E2
0.047391889835445 ETH
1292220282024-12-12 22:33:537 hrs ago1734042833
0x00000000...34E3010E2
0.005949872323779 ETH
1292220282024-12-12 22:33:537 hrs ago1734042833
0x00000000...34E3010E2
0.006000879802097 ETH
1292215002024-12-12 22:16:177 hrs ago1734041777
0x00000000...34E3010E2
0.000321779489011 ETH
1292215002024-12-12 22:16:177 hrs ago1734041777
0x00000000...34E3010E2
0.000324538062543 ETH
1292213762024-12-12 22:12:097 hrs ago1734041529
0x00000000...34E3010E2
0.000307365 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RainbowRouter

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at optimistic.etherscan.io on 2022-03-17
*/

// Sources flattened with hardhat v2.6.5 https://hardhat.org
// SPDX-License-Identifier: GPL-3.0

// File @rari-capital/solmate/src/tokens/[email protected]

pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/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
    //////////////////////////////////////////////////////////////*/

    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    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 {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, 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);
    }
}


// File @rari-capital/solmate/src/utils/[email protected]

pragma solidity >=0.8.0;

/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
library SafeTransferLib {
    /*///////////////////////////////////////////////////////////////
                            ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferETH(address to, uint256 amount) internal {
        bool callStatus;

        assembly {
            // Transfer the ETH and store if it succeeded or not.
            callStatus := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(callStatus, "ETH_TRANSFER_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                           ERC20 OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferFrom(
        ERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument.
            mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 100 because the calldata length is 4 + 32 * 3.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED");
    }

    function safeApprove(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                         INTERNAL HELPER LOGIC
    //////////////////////////////////////////////////////////////*/

    function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) {
        assembly {
            // Get how many bytes the call returned.
            let returnDataSize := returndatasize()

            // If the call reverted:
            if iszero(callStatus) {
                // Copy the revert message into memory.
                returndatacopy(0, 0, returnDataSize)

                // Revert with the same message.
                revert(0, returnDataSize)
            }

            switch returnDataSize
            case 32 {
                // Copy the return data into memory.
                returndatacopy(0, 0, returnDataSize)

                // Set success to whether it returned true.
                success := iszero(iszero(mload(0)))
            }
            case 0 {
                // There was no return data.
                success := 1
            }
            default {
                // It returned some malformed input.
                success := 0
            }
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}


// File contracts/interfaces/IERC2612.sol

pragma solidity =0.8.11;


interface IERC2612 is IERC20Metadata, IERC20Permit {
    function _nonces(address owner) external view returns (uint256);

    function version() external view returns (string memory);
}


// File @uniswap/v3-periphery/contracts/interfaces/external/[email protected]

pragma solidity >=0.5.0;

/// @title Interface for permit
/// @notice Interface used by DAI/CHAI for permit
interface IERC20PermitAllowed {
    /// @notice Approve the spender to spend some tokens via the holder signature
    /// @dev This is the permit interface used by DAI and CHAI
    /// @param holder The address of the token holder, the token owner
    /// @param spender The address of the token spender
    /// @param nonce The holder's nonce, increases at each call to permit
    /// @param expiry The timestamp at which the permit is no longer valid
    /// @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0
    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
    function permit(
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        bool allowed,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}


// File contracts/interfaces/IDAI.sol

pragma solidity =0.8.11;


interface IDAI is IERC20Metadata, IERC20PermitAllowed {
    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function version() external view returns (string memory);
}


// File contracts/libraries/PermitHelper.sol

pragma solidity =0.8.11;


/// @title PermitHelper
/// @dev Helper methods for using ERC20 Permit (ERC2612 or DAI/CHAI like)
library PermitHelper {
    struct Permit {
        uint256 value;
        uint256 nonce;
        uint256 deadline;
        bool isDaiStylePermit;
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    /// @dev permit method helper that will handle both known implementations
    // DAI vs ERC2612 tokens
    /// @param permitData bytes containing the encoded permit signature
    /// @param tokenAddress address of the token that will be permitted
    /// @param holder address that holds the tokens to be permitted
    /// @param spender address that will be permitted to spend the tokens
    function permit(
        Permit memory permitData,
        address tokenAddress,
        address holder,
        address spender
    ) internal {
        if (permitData.isDaiStylePermit) {
            IDAI(tokenAddress).permit(
                holder,
                spender,
                permitData.nonce,
                permitData.deadline,
                true,
                permitData.v,
                permitData.r,
                permitData.s
            );
        } else {
            IERC2612(tokenAddress).permit(
                holder,
                spender,
                permitData.value,
                permitData.deadline,
                permitData.v,
                permitData.r,
                permitData.s
            );
        }
    }
}


// File contracts/routers/BaseAggregator.sol

pragma solidity =0.8.11;



/// @title Rainbow base aggregator contract
contract BaseAggregator {
    /// @dev Used to prevent re-entrancy
    uint256 internal status;

    /// @dev Set of allowed swapTargets.
    mapping(address => bool) public swapTargets;

    /// @dev modifier that prevents reentrancy attacks on specific methods
    modifier nonReentrant() {
        // On the first call to nonReentrant, status will be 1
        require(status != 2, "NON_REENTRANT");

        // Any calls to nonReentrant after this point will fail
        status = 2;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        status = 1;
    }

    /// @dev modifier that ensures only approved targets can be called
    modifier onlyApprovedTarget(address target) {
        require(swapTargets[target], "TARGET_NOT_AUTH");
        _;
    }

    /** EXTERNAL **/

    /// @param buyTokenAddress the address of token that the user should receive
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param feeAmount the amount of ETH that we will take as a fee
    function fillQuoteEthToToken(
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 feeAmount
    ) external payable nonReentrant onlyApprovedTarget(target) {
        // 1 - Get the initial balances
        uint256 initialTokenBalance = ERC20(buyTokenAddress).balanceOf(
            address(this)
        );
        uint256 initialEthAmount = address(this).balance - msg.value;
        uint256 sellAmount = msg.value - feeAmount;

        // 2 - Call the encoded swap function call on the contract at `target`,
        // passing along any ETH attached to this function call to cover protocol fees
        // minus our fees, which are kept in this contract
        (bool success, bytes memory res) = target.call{value: sellAmount}(
            swapCallData
        );

        // Get the revert message of the call and revert with it if the call failed
        if (!success) {
            assembly {
                let returndata_size := mload(res)
                revert(add(32, res), returndata_size)
            }
        }

        // 3 - Make sure we received the tokens
        {
            uint256 finalTokenBalance = ERC20(buyTokenAddress).balanceOf(
                address(this)
            );
            require(initialTokenBalance < finalTokenBalance, "NO_TOKENS");
        }

        // 4 - Send the received tokens back to the user
        SafeTransferLib.safeTransfer(
            ERC20(buyTokenAddress),
            msg.sender,
            ERC20(buyTokenAddress).balanceOf(address(this)) -
                initialTokenBalance
        );

        // 5 - Return the remaining ETH to the user (if any)
        {
            uint256 finalEthAmount = address(this).balance - feeAmount;
            if (finalEthAmount > initialEthAmount) {
                SafeTransferLib.safeTransferETH(
                    msg.sender,
                    finalEthAmount - initialEthAmount
                );
            }
        }
    }

    /// @param sellTokenAddress the address of token that the user is selling
    /// @param buyTokenAddress the address of token that the user should receive
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feeAmount the amount of the tokens to sell that we will take as a fee
    function fillQuoteTokenToToken(
        address sellTokenAddress,
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feeAmount
    ) external payable nonReentrant onlyApprovedTarget(target) {
        _fillQuoteTokenToToken(
            sellTokenAddress,
            buyTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feeAmount
        );
    }

    /// @dev method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input
    // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction
    /// @param sellTokenAddress the address of token that the user is selling
    /// @param buyTokenAddress the address of token that the user should receive
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feeAmount the amount of the tokens to sell that we will take as a fee
    /// @param permitData struct containing the value, nonce, deadline, v, r and s values of the permit data
    function fillQuoteTokenToTokenWithPermit(
        address sellTokenAddress,
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feeAmount,
        PermitHelper.Permit calldata permitData
    ) external payable nonReentrant onlyApprovedTarget(target) {
        // 1 - Apply permit
        PermitHelper.permit(
            permitData,
            sellTokenAddress,
            msg.sender,
            address(this)
        );

        //2 - Call fillQuoteTokenToToken
        _fillQuoteTokenToToken(
            sellTokenAddress,
            buyTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feeAmount
        );
    }

    /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output
    /// @param sellTokenAddress the address of token that the user is selling
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision)
    function fillQuoteTokenToEth(
        address sellTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feePercentageBasisPoints
    ) external payable nonReentrant onlyApprovedTarget(target) {
        _fillQuoteTokenToEth(
            sellTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feePercentageBasisPoints
        );
    }

    /// @dev method that executes ERC20 to ETH token swaps with the ability to take a fee from the output
    // and accepts a signature to use permit, so the user doesn't have to make an previous approval transaction
    /// @param sellTokenAddress the address of token that the user is selling
    /// @param target the address of the aggregator contract that will exec the swap
    /// @param swapCallData the calldata that will be passed to the aggregator contract
    /// @param sellAmount the amount of tokens that the user is selling
    /// @param feePercentageBasisPoints the amount of ETH that we will take as a fee in 1e18 basis points (basis points with 4 decimals plus 14 extra decimals of precision)
    /// @param permitData struct containing the amount, nonce, deadline, v, r and s values of the permit data
    function fillQuoteTokenToEthWithPermit(
        address sellTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feePercentageBasisPoints,
        PermitHelper.Permit calldata permitData
    ) external payable nonReentrant onlyApprovedTarget(target) {
        // 1 - Apply permit
        PermitHelper.permit(
            permitData,
            sellTokenAddress,
            msg.sender,
            address(this)
        );

        // 2 - call fillQuoteTokenToEth
        _fillQuoteTokenToEth(
            sellTokenAddress,
            target,
            swapCallData,
            sellAmount,
            feePercentageBasisPoints
        );
    }

    /** INTERNAL **/

    /// @dev internal method that executes ERC20 to ETH token swaps with the ability to take a fee from the output
    function _fillQuoteTokenToEth(
        address sellTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feePercentageBasisPoints
    ) internal {
        // 1 - Get the initial ETH amount
        uint256 initialEthAmount = address(this).balance - msg.value;

        // 2 - Move the tokens to this contract
        // NOTE: This implicitly assumes that the the necessary approvals have been granted
        // from msg.sender to the BaseAggregator
        SafeTransferLib.safeTransferFrom(
            ERC20(sellTokenAddress),
            msg.sender,
            address(this),
            sellAmount
        );

        // 3 - Approve the aggregator's contract to swap the tokens
        SafeTransferLib.safeApprove(
            ERC20(sellTokenAddress),
            target,
            sellAmount
        );

        // 4 - Call the encoded swap function call on the contract at `target`,
        // passing along any ETH attached to this function call to cover protocol fees.
        (bool success, bytes memory res) = target.call{value: msg.value}(
            swapCallData
        );

        // Get the revert message of the call and revert with it if the call failed
        if (!success) {
            assembly {
                let returndata_size := mload(res)
                revert(add(32, res), returndata_size)
            }
        }

        // 5 - Check that the tokens were fully spent during the swap
        uint256 allowance = ERC20(sellTokenAddress).allowance(
            address(this),
            target
        );
        require(allowance == 0, "ALLOWANCE_NOT_ZERO");

        // 6 - Subtract the fees and send the rest to the user
        // Fees will be held in this contract
        uint256 finalEthAmount = address(this).balance;
        uint256 ethDiff = finalEthAmount - initialEthAmount;

        require(ethDiff > 0, "NO_ETH_BACK");

        if (feePercentageBasisPoints > 0) {
            uint256 fees = (ethDiff * feePercentageBasisPoints) / 1e18;
            uint256 amountMinusFees = ethDiff - fees;
            SafeTransferLib.safeTransferETH(msg.sender, amountMinusFees);
            // when there's no fee, 1inch sends the funds directly to the user
            // we check to prevent sending 0 ETH in that case
        } else if (ethDiff > 0) {
            SafeTransferLib.safeTransferETH(msg.sender, ethDiff);
        }
    }

    /// @dev internal method that executes ERC20 to ERC20 token swaps with the ability to take a fee from the input
    function _fillQuoteTokenToToken(
        address sellTokenAddress,
        address buyTokenAddress,
        address payable target,
        bytes calldata swapCallData,
        uint256 sellAmount,
        uint256 feeAmount
    ) internal {
        // 1 - Get the initial output token balance
        uint256 initialOutputTokenAmount = ERC20(buyTokenAddress).balanceOf(
            address(this)
        );

        // 2 - Move the tokens to this contract (which includes our fees)
        // NOTE: This implicitly assumes that the the necessary approvals have been granted
        // from msg.sender to the BaseAggregator
        SafeTransferLib.safeTransferFrom(
            ERC20(sellTokenAddress),
            msg.sender,
            address(this),
            sellAmount
        );

        // 3 - Approve the aggregator's contract to swap the tokens if needed
        SafeTransferLib.safeApprove(
            ERC20(sellTokenAddress),
            target,
            sellAmount - feeAmount
        );

        // 4 - Call the encoded swap function call on the contract at `target`,
        // passing along any ETH attached to this function call to cover protocol fees.
        (bool success, bytes memory res) = target.call{value: msg.value}(
            swapCallData
        );

        // Get the revert message of the call and revert with it if the call failed
        if (!success) {
            assembly {
                let returndata_size := mload(res)
                revert(add(32, res), returndata_size)
            }
        }

        // 5 - Check that the tokens were fully spent during the swap
        uint256 allowance = ERC20(sellTokenAddress).allowance(
            address(this),
            target
        );
        require(allowance == 0, "ALLOWANCE_NOT_ZERO");

        // 6 - Make sure we received the tokens
        uint256 finalOutputTokenAmount = ERC20(buyTokenAddress).balanceOf(
            address(this)
        );
        require(initialOutputTokenAmount < finalOutputTokenAmount, "NO_TOKENS");

        // 7 - Send tokens to the user
        SafeTransferLib.safeTransfer(
            ERC20(buyTokenAddress),
            msg.sender,
            finalOutputTokenAmount - initialOutputTokenAmount
        );
    }
}


// File contracts/RainbowRouter.sol

/*

                                                            ▐██▒           ███
                                            ,╓, ▄▄  ,▄▄▄,   .▄▄. ,╓, ▄▄▄   ██▌ ▄▄▄     ,▄▄▄,  ,╓╓   ╓╓   ,╓
                                            ██████ ███▀▀██⌐ ▐██⌐ ███▀▀███⌐ ████▀▀███ ╓██▀▀▀██▄`██▌ ▐██▌ ▐██
                                            ███    ▄▄█████▌ ▐██⌐ ██▌  ▐██▌ ██▌   ║██⌐███   ▓██ ╙██▄█▌██▄██⌐
                                            ██▌   ▐██▄▄███▌,▐██⌐ ██▌  ▐██▌ ███▓▄▄███ ╙██▄▄▄██▀  ║███¬╙███▌
                                            ╙╙└    ╙╙▀╙─╙▀▀└"╙╙` ╙╙└   ╙╙" ╙╙`╙╙▀▀└    ╙╙▀▀╙`    ╙╙└  ╙╙╙
                                            

        
                                            _," _   _"""ⁿ=-,  _
                                            ⌠            _    __"=.__
                                            ▐░......   _  _          "=._
                                            ▐░░░░░░░░░░░░░░░░.           "= _
                                            ╚╩╩╩╩╩╩δφφφφ░░░░░░░░░░░          >__
                                            ▐░░░░░░░░__ _ ╙╙╚╩φφ░░░░░░░        ^=_
                                            ▐░░░░░░░░░░░░░░░,░  `╙╠φ░░░░░░░       ⁿ
                                            ▐░░░░░░░░░░░░░░░░░░░░._ `╚Åφ░░░░░       " _
                                            ╚╠╠╠╠╠╠╠╬╬╬▒▒φ░░░░░░░░░░░░  ╙╠░░░░░       "
                                            ╚╝╝╝╝╝╝╝╬╬╬╠╢╬╠╬╠╬▒░░░░░░░░░░ "╚φ░░░░       ½_
                                            ▐░░░░░░░░░░;░╙╙╝╬╠╬╠╠▒▒░░░░░░░░_ ╚φ░░░░      "_
                                            ╚▒φφφ░░░░░░░░░░░░-╙╚╬╠╠╠╬▒░░░░░░░ `╠▒░░░░      ,
                                            ╞╬╬╬╠╠╠╬╬╬╬▒φ▒░░░░░░░╙╚╬╬╠╬▒▒░░░░░ .╙╠░░░░      ≥
                                            _▒░░░ΓΓ╙╙╙╚╩╬╠╬╠▒▒░░░░░░╙╬╬╠╬▒▒░░░░░' ╠▒░░░░     ≥
                                            `╙ⁿⁿ≈≈σ╓░ '╙╙╚╬╠╬▒░░░░░░╙╬╬╠╬▒░░░░░  ╠▒░░░░     [
                                                        _╙Θ░ ░╙╠╠╬╬▒░░░░░╬╠╠╠▒▒░░░░  ╠▒░░░░    '_
                                                        _╙φ░'╙╠╠╬▒░░░░░╟╠╠╠▒░░░░░ _╠▒░░░     ░_
                                                            _`φ ░╚╬╠╠▒░░░░║╠╠╠▒░░░░░.`╠░░░░     [
                                                            _╚░⌡╚╠╬╬▒░░░░╠╠╠╬▒░░░░░ ╠▒░░░░    ░
                                                                _╙░⌡╚╠╠╬▒░░░"▒╠╠╬▒░░░░ ⌠╠░░░░    ⌡_
                                                                ╠ ░╠╠╠╬▒░░░║╠╬╠╬▒░░░ _╠▒░░░     Γ
                                                                ▐░░░╠╠╠▒░░░╟╠╠╠╬▒░░░░ ╠▒░░░░    [
                                                                _░.░╠╠╠▒░░░▐╬╠╠╬▒░░░░[╠╬░░░░    │
                                                                _╙φ░╠╠╠╬▒░░▐╬╬╠╬╬▒░░░[╠╬░░░░  ░≥_
                                                                    ____ ____  __ _______ ____


    /$$$$$$                                           /$$$$$$                                                                /$$                        
    /$$__  $$                                         /$$__  $$                                                              | $$                        
    | $$  \__/ /$$  /$$  /$$  /$$$$$$   /$$$$$$       | $$  \ $$  /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$   /$$$$$$  /$$$$$$    /$$$$$$   /$$$$$$ 
    |  $$$$$$ | $$ | $$ | $$ |____  $$ /$$__  $$      | $$$$$$$$ /$$__  $$ /$$__  $$ /$$__  $$ /$$__  $$ /$$__  $$ |____  $$|_  $$_/   /$$__  $$ /$$__  $$
    \____  $$| $$ | $$ | $$  /$$$$$$$| $$  \ $$      | $$__  $$| $$  \ $$| $$  \ $$| $$  \__/| $$$$$$$$| $$  \ $$  /$$$$$$$  | $$    | $$  \ $$| $$  \__/
    /$$  \ $$| $$ | $$ | $$ /$$__  $$| $$  | $$      | $$  | $$| $$  | $$| $$  | $$| $$      | $$_____/| $$  | $$ /$$__  $$  | $$ /$$| $$  | $$| $$      
    |  $$$$$$/|  $$$$$/$$$$/|  $$$$$$$| $$$$$$$/      | $$  | $$|  $$$$$$$|  $$$$$$$| $$      |  $$$$$$$|  $$$$$$$|  $$$$$$$  |  $$$$/|  $$$$$$/| $$      
    \______/  \_____/\___/  \_______/| $$____/       |__/  |__/ \____  $$ \____  $$|__/       \_______/ \____  $$ \_______/   \___/   \______/ |__/      
                                    | $$                       /$$  \ $$ /$$  \ $$                     /$$  \ $$                                        
                                    | $$                      |  $$$$$$/|  $$$$$$/                    |  $$$$$$/                                        
                                    |__/                       \______/  \______/                      \______/                                         
                
     
*/

pragma solidity =0.8.11;



/// @title Rainbow swap aggregator contract
contract RainbowRouter is BaseAggregator {
    /// @dev The address that is the current owner of this contract
    address public owner;

    /// @dev Event emitted when the owner changes
    event OwnerChanged(address indexed newOwner, address indexed oldOwner);

    /// @dev Event emitted when a swap target gets added
    event SwapTargetAdded(address indexed target);

    /// @dev Event emitted when a swap target gets removed
    event SwapTargetRemoved(address indexed target);

    /// @dev Event emitted when token fees are withdrawn
    event TokenWithdrawn(
        address indexed token,
        address indexed target,
        uint256 amount
    );

    /// @dev Event emitted when ETH fees are withdrawn
    event EthWithdrawn(address indexed target, uint256 amount);

    /// @dev modifier that ensures only the owner is allowed to call a specific method
    modifier onlyOwner() {
        require(msg.sender == owner, "ONLY_OWNER");
        _;
    }

    constructor() {
        owner = msg.sender;
        status = 1;
    }

    /// @dev We don't want to accept any ETH, except refunds from aggregators
    /// or the owner (for testing purposes), which can also withdraw
    /// This is done by evaluating the value of status, which is set to 2
    /// only during swaps due to the "nonReentrant" modifier
    receive() external payable {
        require(status == 2 || msg.sender == owner, "NO_RECEIVE");
    }

    /// @dev method to add or remove swap targets from swapTargets
    /// This is required so we only approve "trusted" swap targets
    /// to transfer tokens out of this contract
    /// @param target address of the swap target to add
    /// @param add flag to add or remove the swap target
    function updateSwapTargets(address target, bool add) external onlyOwner {
        swapTargets[target] = add;
        if (add) {
            emit SwapTargetAdded(target);
        } else {
            emit SwapTargetRemoved(target);
        }
    }

    /// @dev method to withdraw ERC20 tokens (from the fees)
    /// @param token address of the token to withdraw
    /// @param to address that's receiving the tokens
    /// @param amount amount of tokens to withdraw
    function withdrawToken(
        address token,
        address to,
        uint256 amount
    ) external onlyOwner {
        require(to != address(0), "ZERO_ADDRESS");
        SafeTransferLib.safeTransfer(ERC20(token), to, amount);
        emit TokenWithdrawn(token, to, amount);
    }

    /// @dev method to withdraw ETH (from the fees)
    /// @param to address that's receiving the ETH
    /// @param amount amount of ETH to withdraw
    function withdrawEth(address to, uint256 amount) external onlyOwner {
        require(to != address(0), "ZERO_ADDRESS");
        SafeTransferLib.safeTransferETH(to, amount);
        emit EthWithdrawn(to, amount);
    }

    /// @dev Transfers ownership of the contract to a new account (`newOwner`).
    /// @param newOwner address of the new owner
    /// Can only be called by the current owner.
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "ZERO_ADDRESS");
        require(newOwner != owner, "SAME_OWNER");
        address previousOwner = owner;
        owner = newOwner;
        emit OwnerChanged(newOwner, previousOwner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"SwapTargetRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenWithdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteEthToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"}],"name":"fillQuoteTokenToEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feePercentageBasisPoints","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToEthWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"fillQuoteTokenToToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sellTokenAddress","type":"address"},{"internalType":"address","name":"buyTokenAddress","type":"address"},{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"isDaiStylePermit","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct PermitHelper.Permit","name":"permitData","type":"tuple"}],"name":"fillQuoteTokenToTokenWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"add","type":"bool"}],"name":"updateSwapTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50600280546001600160a01b031916331790556001600055611afd806100376000396000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106100c05760003560e01c80638da5cb5b11610074578063b0480bbd1161004e578063b0480bbd1461024e578063b309383814610261578063f2fde38b1461027457600080fd5b80638da5cb5b146101e357806397bbda0e1461021b578063999b64641461023b57600080fd5b80633c2b9a7d116100a55780633c2b9a7d1461017857806355e4b7be1461018b57806383c4a19d1461019e57600080fd5b806301e33667146101385780631b9a91a41461015857600080fd5b3661013357600054600214806100e057506002546001600160a01b031633145b6101315760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f524543454956450000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561014457600080fd5b506101316101533660046115a6565b610294565b34801561016457600080fd5b506101316101733660046115e7565b61037d565b61013161018636600461165c565b61045a565b6101316101993660046116c9565b61075f565b3480156101aa57600080fd5b506101ce6101b9366004611754565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ef57600080fd5b50600254610203906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561022757600080fd5b5061013161023636600461178d565b610820565b6101316102493660046117c2565b610904565b61013161025c366004611851565b6109c3565b61013161026f3660046118f1565b610a9f565b34801561028057600080fd5b5061013161028f366004611754565b610b6a565b6002546001600160a01b031633146102db5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166103205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b61032b838383610cbd565b816001600160a01b0316836001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208360405161037091815260200190565b60405180910390a3505050565b6002546001600160a01b031633146103c45760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166104095760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6104138282610d63565b816001600160a01b03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405161044e91815260200190565b60405180910390a25050565b6000546002141561049d5760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038516815260016020526040902054849060ff166104fd5760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610544573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610568919061197f565b9050600061057634476119ae565b9050600061058485346119ae565b9050600080896001600160a01b0316838a8a6040516105a49291906119c5565b60006040518083038185875af1925050503d80600081146105e1576040519150601f19603f3d011682016040523d82523d6000602084013e6105e6565b606091505b5091509150816105f95780518082602001fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038d16906370a0823190602401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610664919061197f565b90508086106106a15760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b506040516370a0823160e01b8152306004820152610723908c90339088906001600160a01b038416906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061197f565b61071e91906119ae565b610cbd565b600061072f88476119ae565b90508481111561074c5761074c3361074787846119ae565b610d63565b5050600160005550505050505050505050565b600054600214156107a25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166108025760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b61081188888888888888610dc3565b50506001600055505050505050565b6002546001600160a01b031633146108675760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b0382166000908152600160205260409020805460ff191682158015919091179091556108cc576040516001600160a01b038316907fb907822409611d127ab6a64611591b98e03a6a85ade4f258bae26b7c1efdfeaf90600090a25050565b6040516001600160a01b038316907f393b8be3e26787f19285ecd039dfd80bc6507828750f4d50367e6efe2524695c90600090a25050565b600054600214156109475760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038616815260016020526040902054859060ff166109a75760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b6109b587878787878761104c565b505060016000555050505050565b60005460021415610a065760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610a665760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610a80610a78368490038401846119e6565b8a333061125d565b610a8f89898989898989610dc3565b5050600160005550505050505050565b60005460021415610ae25760405162461bcd60e51b815260206004820152600d60248201526c1393d397d49151539514905395609a1b6044820152606401610128565b600260009081556001600160a01b038716815260016020526040902054869060ff16610b425760405162461bcd60e51b815260206004820152600f60248201526e0a882a48e8aa8be9c9ea8be82aaa89608b1b6044820152606401610128565b610b5c610b54368490038401846119e6565b89333061125d565b61081188888888888861104c565b6002546001600160a01b03163314610bb15760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa7aba722a960b11b6044820152606401610128565b6001600160a01b038116610bf65760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610128565b6002546001600160a01b0382811691161415610c545760405162461bcd60e51b815260206004820152600a60248201527f53414d455f4f574e4552000000000000000000000000000000000000000000006044820152606401610128565b600280546001600160a01b038381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169182917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a35050565b60006040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050610d11816113f1565b610d5d5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610128565b50505050565b600080600080600085875af1905080610dbe5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610128565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061197f565b9050610e3c88333086611438565b610e508887610e4b85876119ae565b6114ee565b600080876001600160a01b0316348888604051610e6e9291906119c5565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b509150915081610ec35780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908c169063dd62ed3e90604401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061197f565b90508015610f875760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061197f565b905080851061102f5760405162461bcd60e51b81526020600482015260096024820152684e4f5f544f4b454e5360b81b6044820152606401610128565b61103e8b3361071e88856119ae565b505050505050505050505050565b600061105834476119ae565b905061106687333086611438565b6110718787856114ee565b600080876001600160a01b031634888860405161108f9291906119c5565b60006040518083038185875af1925050503d80600081146110cc576040519150601f19603f3d011682016040523d82523d6000602084013e6110d1565b606091505b5091509150816110e45780518082602001fd5b604051636eb1769f60e11b81523060048201526001600160a01b038981166024830152600091908b169063dd62ed3e90604401602060405180830381865afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061197f565b905080156111a85760405162461bcd60e51b815260206004820152601260248201527f414c4c4f57414e43455f4e4f545f5a45524f00000000000000000000000000006044820152606401610128565b4760006111b586836119ae565b9050600081116112075760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f4554485f4241434b0000000000000000000000000000000000000000006044820152606401610128565b861561124d576000670de0b6b3a76400006112228984611a86565b61122c9190611aa5565b9050600061123a82846119ae565b90506112463382610d63565b505061103e565b801561103e5761103e3382610d63565b836060015115611331576020840151604080860151608087015160a088015160c089015193517f8fcbaf0c0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482019690965260648101939093526001608484015260ff90911660a483015260c482015260e481019190915290841690638fcbaf0c9061010401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050610d5d565b8351604080860151608087015160a088015160c089015193517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301526044820196909652606481019390935260ff909116608483015260a482015260c48101919091529084169063d505accf9060e401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b5050505050505050565b60003d8261140357806000803e806000fd5b806020811461141b57801561142c5760009250611431565b816000803e60005115159250611431565b600192505b5050919050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af191505061149b816113f1565b6114e75760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610128565b5050505050565b60006040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201528260248201526000806044836000895af1915050611542816113f1565b610d5d5760405162461bcd60e51b815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610128565b6001600160a01b03811681146115a357600080fd5b50565b6000806000606084860312156115bb57600080fd5b83356115c68161158e565b925060208401356115d68161158e565b929592945050506040919091013590565b600080604083850312156115fa57600080fd5b82356116058161158e565b946020939093013593505050565b60008083601f84011261162557600080fd5b50813567ffffffffffffffff81111561163d57600080fd5b60208301915083602082850101111561165557600080fd5b9250929050565b60008060008060006080868803121561167457600080fd5b853561167f8161158e565b9450602086013561168f8161158e565b9350604086013567ffffffffffffffff8111156116ab57600080fd5b6116b788828901611613565b96999598509660600135949350505050565b600080600080600080600060c0888a0312156116e457600080fd5b87356116ef8161158e565b965060208801356116ff8161158e565b9550604088013561170f8161158e565b9450606088013567ffffffffffffffff81111561172b57600080fd5b6117378a828b01611613565b989b979a50959895979660808701359660a0013595509350505050565b60006020828403121561176657600080fd5b81356117718161158e565b9392505050565b8035801515811461178857600080fd5b919050565b600080604083850312156117a057600080fd5b82356117ab8161158e565b91506117b960208401611778565b90509250929050565b60008060008060008060a087890312156117db57600080fd5b86356117e68161158e565b955060208701356117f68161158e565b9450604087013567ffffffffffffffff81111561181257600080fd5b61181e89828a01611613565b979a9699509760608101359660809091013595509350505050565b600060e0828403121561184b57600080fd5b50919050565b6000806000806000806000806101a0898b03121561186e57600080fd5b88356118798161158e565b975060208901356118898161158e565b965060408901356118998161158e565b9550606089013567ffffffffffffffff8111156118b557600080fd5b6118c18b828c01611613565b9096509450506080890135925060a089013591506118e28a60c08b01611839565b90509295985092959890939650565b6000806000806000806000610180888a03121561190d57600080fd5b87356119188161158e565b965060208801356119288161158e565b9550604088013567ffffffffffffffff81111561194457600080fd5b6119508a828b01611613565b90965094505060608801359250608088013591506119718960a08a01611839565b905092959891949750929550565b60006020828403121561199157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156119c0576119c0611998565b500390565b8183823760009101908152919050565b803560ff8116811461178857600080fd5b600060e082840312156119f857600080fd5b60405160e0810181811067ffffffffffffffff82111715611a2957634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152611a5260608401611778565b6060820152611a63608084016119d5565b608082015260a083013560a082015260c083013560c08201528091505092915050565b6000816000190483118215151615611aa057611aa0611998565b500290565b600082611ac257634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf87764736f6c634300080b0033

Deployed Bytecode Sourcemap

42640:3441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44053:6;;44063:1;44053:11;:34;;;-1:-1:-1;44082:5:0;;-1:-1:-1;;;;;44082:5:0;44068:10;:19;44053:34;44045:57;;;;-1:-1:-1;;;44045:57:0;;216:2:1;44045:57:0;;;198:21:1;255:2;235:18;;;228:30;294:12;274:18;;;267:40;324:18;;44045:57:0;;;;;;;;;42640:3441;;;;;44903:293;;;;;;;;;;-1:-1:-1;44903:293:0;;;;;:::i;:::-;;:::i;45358:222::-;;;;;;;;;;-1:-1:-1;45358:222:0;;;;;:::i;:::-;;:::i;23698:2054::-;;;;;;:::i;:::-;;:::i;26255:502::-;;;;;;:::i;:::-;;:::i;22605:43::-;;;;;;;;;;-1:-1:-1;22605:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3807:14:1;;3800:22;3782:41;;3770:2;3755:18;22605:43:0;;;;;;;;42757:20;;;;;;;;;;-1:-1:-1;42757:20:0;;;;-1:-1:-1;;;;;42757:20:0;;;;;;-1:-1:-1;;;;;3998:55:1;;;3980:74;;3968:2;3953:18;42757:20:0;3834:226:1;44418:253:0;;;;;;;;;;-1:-1:-1;44418:253:0;;;;;:::i;:::-;;:::i;28992:464::-;;;;;;:::i;:::-;;:::i;27591:785::-;;;;;;:::i;:::-;;:::i;30296:746::-;;;;;;:::i;:::-;;:::i;45769:309::-;;;;;;;;;;-1:-1:-1;45769:309:0;;;;;:::i;:::-;;:::i;44903:293::-;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;45041:16:0;::::1;45033:41;;;::::0;-1:-1:-1;;;45033:41:0;;8149:2:1;45033:41:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:42;8259:18;;45033:41:0::1;7947:336:1::0;45033:41:0::1;45085:54;45120:5;45128:2;45132:6;45085:28;:54::i;:::-;45177:2;-1:-1:-1::0;;;;;45155:33:0::1;45170:5;-1:-1:-1::0;;;;;45155:33:0::1;;45181:6;45155:33;;;;8434:25:1::0;;8422:2;8407:18;;8288:177;45155:33:0::1;;;;;;;;44903:293:::0;;;:::o;45358:222::-;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;45445:16:0;::::1;45437:41;;;::::0;-1:-1:-1;;;45437:41:0;;8149:2:1;45437:41:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:42;8259:18;;45437:41:0::1;7947:336:1::0;45437:41:0::1;45489:43;45521:2;45525:6;45489:31;:43::i;:::-;45561:2;-1:-1:-1::0;;;;;45548:24:0::1;;45565:6;45548:24;;;;8434:25:1::0;;8422:2;8407:18;;8288:177;45548:24:0::1;;;;;;;;45358:222:::0;;:::o;23698:2054::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;23916:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;24006:71:::2;::::0;-1:-1:-1;;;24006:71:0;;24061:4:::2;24006:71;::::0;::::2;3980:74:1::0;23976:27:0::2;::::0;-1:-1:-1;;;;;24006:32:0;::::2;::::0;::::2;::::0;3953:18:1;;24006:71:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23976:101:::0;-1:-1:-1;24088:24:0::2;24115:33;24139:9;24115:21;:33;:::i;:::-;24088:60:::0;-1:-1:-1;24159:18:0::2;24180:21;24192:9:::0;24180::::2;:21;:::i;:::-;24159:42;;24444:12;24458:16:::0;24478:6:::2;-1:-1:-1::0;;;;;24478:11:0::2;24497:10;24523:12;;24478:68;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24443:103;;;;24649:7;24644:171;;24730:3;24724:10;24773:15;24767:3;24763:2;24759:12;24752:37;24644:171;24919:79;::::0;-1:-1:-1;;;24919:79:0;;24978:4:::2;24919:79;::::0;::::2;3980:74:1::0;24891:25:0::2;::::0;-1:-1:-1;;;;;24919:32:0;::::2;::::0;::::2;::::0;3953:18:1;;24919:79:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24891:107;;25043:17;25021:19;:39;25013:61;;;::::0;-1:-1:-1;;;25013:61:0;;10142:2:1;25013:61:0::2;::::0;::::2;10124:21:1::0;10181:1;10161:18;;;10154:29;-1:-1:-1;;;10199:18:1;;;10192:39;10248:18;;25013:61:0::2;9940:332:1::0;25013:61:0::2;-1:-1:-1::0;25261:47:0::2;::::0;-1:-1:-1;;;25261:47:0;;25302:4:::2;25261:47;::::0;::::2;3980:74:1::0;25156:202:0::2;::::0;25205:15;;25236:10:::2;::::0;25328:19;;-1:-1:-1;;;;;25261:32:0;::::2;::::0;::::2;::::0;3953:18:1;;25261:47:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:86;;;;:::i;:::-;25156:28;:202::i;:::-;25448:22;25473:33;25497:9:::0;25473:21:::2;:33;:::i;:::-;25448:58;;25542:16;25525:14;:33;25521:213;;;25579:139;25633:10;25666:33;25683:16:::0;25666:14;:33:::2;:::i;:::-;25579:31;:139::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;;;;;;23698:2054:0:o;26255:502::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;26539:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;26558:191:::2;26595:16;26626:15;26656:6;26677:12;;26704:10;26729:9;26558:22;:191::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;;26255:502:0:o;44418:253::-;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;44501:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;:25;;-1:-1:-1;;44501:25:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;44537:127:::1;;44566:23;::::0;-1:-1:-1;;;;;44566:23:0;::::1;::::0;::::1;::::0;;;::::1;44418:253:::0;;:::o;44537:127::-:1;44627:25;::::0;-1:-1:-1;;;;;44627:25:0;::::1;::::0;::::1;::::0;;;::::1;44418:253:::0;;:::o;28992:464::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;29255:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;29274:174:::2;29309:16;29340:6;29361:12;;29388:10;29413:24;29274:20;:174::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;28992:464:0:o;27591:785::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;27935:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;27983:139:::2;;;::::0;;::::2;::::0;::::2;28017:10:::0;27983:139:::2;:::i;:::-;28042:16;28073:10;28106:4;27983:19;:139::i;:::-;28177:191;28214:16;28245:15;28275:6;28296:12;;28323:10;28348:9;28177:22;:191::i;:::-;-1:-1:-1::0;;23127:1:0;23118:6;:10;-1:-1:-1;;;;;;;27591:785:0:o;30296:746::-;22840:6;;22850:1;22840:11;;22832:37;;;;-1:-1:-1;;;22832:37:0;;8672:2:1;22832:37:0;;;8654:21:1;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8730:18:1;;;8723:43;8783:18;;22832:37:0;8470:337:1;22832:37:0;22956:1;22947:6;:10;;;-1:-1:-1;;;;;23279:19:0;::::1;::::0;;:11:::1;:19;::::0;;;;;30619:6;;23279:19:::1;;23271:47;;;::::0;-1:-1:-1;;;23271:47:0;;9014:2:1;23271:47:0::1;::::0;::::1;8996:21:1::0;9053:2;9033:18;;;9026:30;-1:-1:-1;;;9072:18:1;;;9065:45;9127:18;;23271:47:0::1;8812:339:1::0;23271:47:0::1;30667:139:::2;;;::::0;;::::2;::::0;::::2;30701:10:::0;30667:139:::2;:::i;:::-;30726:16;30757:10;30790:4;30667:19;:139::i;:::-;30860:174;30895:16;30926:6;30947:12;;30974:10;30999:24;30860:20;:174::i;45769:309::-:0;43593:5;;-1:-1:-1;;;;;43593:5:0;43579:10;:19;43571:42;;;;-1:-1:-1;;;43571:42:0;;7810:2:1;43571:42:0;;;7792:21:1;7849:2;7829:18;;;7822:30;-1:-1:-1;;;7868:18:1;;;7861:40;7918:18;;43571:42:0;7608:334:1;43571:42:0;-1:-1:-1;;;;;45860:22:0;::::1;45852:47;;;::::0;-1:-1:-1;;;45852:47:0;;8149:2:1;45852:47:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;-1:-1:-1;;;8207:18:1;;;8200:42;8259:18;;45852:47:0::1;7947:336:1::0;45852:47:0::1;45930:5;::::0;-1:-1:-1;;;;;45918:17:0;;::::1;45930:5:::0;::::1;45918:17;;45910:40;;;::::0;-1:-1:-1;;;45910:40:0;;11646:2:1;45910:40:0::1;::::0;::::1;11628:21:1::0;11685:2;11665:18;;;11658:30;11724:12;11704:18;;;11697:40;11754:18;;45910:40:0::1;11444:334:1::0;45910:40:0::1;45985:5;::::0;;-1:-1:-1;;;;;46001:16:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;46033:37:::1;::::0;45985:5;::::1;::::0;;;46033:37:::1;::::0;45961:21:::1;::::0;46033:37:::1;45841:237;45769:309:::0;:::o;9338:1065::-;9455:15;9589:4;9583:11;9709:66;9690:17;9683:93;-1:-1:-1;;;;;9865:2:0;9861:51;9857:1;9838:17;9834:25;9827:86;10000:6;9995:2;9976:17;9972:26;9965:42;10298:1;10295;10291:2;10272:17;10269:1;10262:5;10255;10250:50;10236:64;;;10331:44;10364:10;10331:32;:44::i;:::-;10323:72;;;;-1:-1:-1;;;10323:72:0;;11985:2:1;10323:72:0;;;11967:21:1;12024:2;12004:18;;;11997:30;12063:17;12043:18;;;12036:45;12098:18;;10323:72:0;11783:339:1;10323:72:0;9444:959;9338:1065;;;:::o;7578:314::-;7651:15;7817:1;7814;7811;7808;7800:6;7796:2;7789:5;7784:35;7770:49;;7850:10;7842:42;;;;-1:-1:-1;;;7842:42:0;;12329:2:1;7842:42:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:21;12387:18;;;12380:49;12446:18;;7842:42:0;12127:343:1;7842:42:0;7640:252;7578:314;;:::o;33821:2311::-;34165:71;;-1:-1:-1;;;34165:71:0;;34220:4;34165:71;;;3980:74:1;34130:32:0;;-1:-1:-1;;;;;34165:32:0;;;;;3953:18:1;;34165:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34130:106;;34467:159;34520:16;34552:10;34585:4;34605:10;34467:32;:159::i;:::-;34718:134;34766:16;34798:6;34819:22;34832:9;34819:10;:22;:::i;:::-;34718:27;:134::i;:::-;35036:12;35050:16;35070:6;-1:-1:-1;;;;;35070:11:0;35089:9;35114:12;;35070:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35035:102;;;;35240:7;35235:171;;35321:3;35315:10;35364:15;35358:3;35354:2;35350:12;35343:37;35235:171;35509:93;;-1:-1:-1;;;35509:93:0;;35565:4;35509:93;;;12718:34:1;-1:-1:-1;;;;;12788:15:1;;;12768:18;;;12761:43;35489:17:0;;35509:33;;;;;;12630:18:1;;35509:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35489:113;-1:-1:-1;35621:14:0;;35613:45;;;;-1:-1:-1;;;35613:45:0;;13017:2:1;35613:45:0;;;12999:21:1;13056:2;13036:18;;;13029:30;13095:20;13075:18;;;13068:48;13133:18;;35613:45:0;12815:342:1;35613:45:0;35753:71;;-1:-1:-1;;;35753:71:0;;35808:4;35753:71;;;3980:74:1;35720:30:0;;-1:-1:-1;;;;;35753:32:0;;;;;3953:18:1;;35753:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35720:104;;35870:22;35843:24;:49;35835:71;;;;-1:-1:-1;;;35835:71:0;;10142:2:1;35835:71:0;;;10124:21:1;10181:1;10161:18;;;10154:29;-1:-1:-1;;;10199:18:1;;;10192:39;10248:18;;35835:71:0;9940:332:1;35835:71:0;35959:165;36008:15;36039:10;36064:49;36089:24;36064:22;:49;:::i;35959:165::-;34066:2066;;;;;33821:2311;;;;;;;:::o;31190:2506::-;31468:24;31495:33;31519:9;31495:21;:33;:::i;:::-;31468:60;;31733:159;31786:16;31818:10;31851:4;31871:10;31733:32;:159::i;:::-;31974:122;32022:16;32054:6;32075:10;31974:27;:122::i;:::-;32280:12;32294:16;32314:6;-1:-1:-1;;;;;32314:11:0;32333:9;32358:12;;32314:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32279:102;;;;32484:7;32479:171;;32565:3;32559:10;32608:15;32602:3;32598:2;32594:12;32587:37;32479:171;32753:93;;-1:-1:-1;;;32753:93:0;;32809:4;32753:93;;;12718:34:1;-1:-1:-1;;;;;12788:15:1;;;12768:18;;;12761:43;32733:17:0;;32753:33;;;;;;12630:18:1;;32753:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32733:113;-1:-1:-1;32865:14:0;;32857:45;;;;-1:-1:-1;;;32857:45:0;;13017:2:1;32857:45:0;;;12999:21:1;13056:2;13036:18;;;13029:30;13095:20;13075:18;;;13068:48;13133:18;;32857:45:0;12815:342:1;32857:45:0;33051:21;33026:22;33101:33;33118:16;33051:21;33101:33;:::i;:::-;33083:51;;33165:1;33155:7;:11;33147:35;;;;-1:-1:-1;;;33147:35:0;;13364:2:1;33147:35:0;;;13346:21:1;13403:2;13383:18;;;13376:30;13442:13;13422:18;;;13415:41;13473:18;;33147:35:0;13162:335:1;33147:35:0;33199:28;;33195:494;;33244:12;33298:4;33260:34;33270:24;33260:7;:34;:::i;:::-;33259:43;;;;:::i;:::-;33244:58;-1:-1:-1;33317:23:0;33343:14;33244:58;33343:7;:14;:::i;:::-;33317:40;;33372:60;33404:10;33416:15;33372:31;:60::i;:::-;33229:358;;33195:494;;;33597:11;;33593:96;;33625:52;33657:10;33669:7;33625:31;:52::i;21523:801::-;21687:10;:27;;;21683:634;;;21826:16;;;;21861:19;;;;;21922:12;;;;21953;;;;21984;;;;21731:280;;;;;-1:-1:-1;;;;;14366:15:1;;;21731:280:0;;;14348:34:1;14418:15;;;14398:18;;;14391:43;14450:18;;;14443:34;;;;14493:18;;;14486:34;;;;21899:4:0;14536:19:1;;;14529:51;14629:4;14617:17;;;14596:19;;;14589:46;14651:19;;;14644:35;14695:19;;;14688:35;;;;21731:25:0;;;;;;14259:19:1;;21731:280:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21683:634;;;22143:16;;22178:19;;;;;22216:12;;;;22247;;;;22278;;;;22044:261;;;;;-1:-1:-1;;;;;15124:15:1;;;22044:261:0;;;15106:34:1;15176:15;;;15156:18;;;15149:43;15208:18;;;15201:34;;;;15251:18;;;15244:34;;;;15327:4;15315:17;;;15294:19;;;15287:46;15349:19;;;15342:35;15393:19;;;15386:35;;;;22044:29:0;;;;;;15017:19:1;;22044:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21523:801;;;;:::o;11673:1072::-;11754:12;11879:16;11959:10;11949:244;;12068:14;12065:1;12062;12047:36;12163:14;12160:1;12153:25;11949:244;12216:14;12249:2;12244:248;;;;12506:99;;;;12711:1;12700:12;;12209:518;;12244:248;12346:14;12343:1;12340;12325:36;12473:1;12467:8;12460:16;12453:24;12442:35;;12244:248;;12506:99;12589:1;12578:12;;12209:518;;;11673:1072;;;:::o;8088:1242::-;8232:15;8366:4;8360:11;8486:66;8467:17;8460:93;-1:-1:-1;;;;;8642:4:0;8638:53;8634:1;8615:17;8611:25;8604:88;-1:-1:-1;;;;;8785:2:0;8781:51;8776:2;8757:17;8753:26;8746:87;8920:6;8915:2;8896:17;8892:26;8885:42;9220:1;9217;9212:3;9193:17;9190:1;9183:5;9176;9171:51;9157:65;;;9253:44;9286:10;9253:32;:44::i;:::-;9245:77;;;;-1:-1:-1;;;9245:77:0;;15634:2:1;9245:77:0;;;15616:21:1;15673:2;15653:18;;;15646:30;15712:22;15692:18;;;15685:50;15752:18;;9245:77:0;15432:344:1;9245:77:0;8221:1109;8088:1242;;;;:::o;10411:1063::-;10527:15;10661:4;10655:11;10781:66;10762:17;10755:93;-1:-1:-1;;;;;10937:2:0;10933:51;10929:1;10910:17;10906:25;10899:86;11072:6;11067:2;11048:17;11044:26;11037:42;11370:1;11367;11363:2;11344:17;11341:1;11334:5;11327;11322:50;11308:64;;;11403:44;11436:10;11403:32;:44::i;:::-;11395:71;;;;-1:-1:-1;;;11395:71:0;;15983:2:1;11395:71:0;;;15965:21:1;16022:2;16002:18;;;15995:30;16061:16;16041:18;;;16034:44;16095:18;;11395:71:0;15781:338:1;353:154;-1:-1:-1;;;;;432:5:1;428:54;421:5;418:65;408:93;;497:1;494;487:12;408:93;353:154;:::o;512:456::-;589:6;597;605;658:2;646:9;637:7;633:23;629:32;626:52;;;674:1;671;664:12;626:52;713:9;700:23;732:31;757:5;732:31;:::i;:::-;782:5;-1:-1:-1;839:2:1;824:18;;811:32;852:33;811:32;852:33;:::i;:::-;512:456;;904:7;;-1:-1:-1;;;958:2:1;943:18;;;;930:32;;512:456::o;973:315::-;1041:6;1049;1102:2;1090:9;1081:7;1077:23;1073:32;1070:52;;;1118:1;1115;1108:12;1070:52;1157:9;1144:23;1176:31;1201:5;1176:31;:::i;:::-;1226:5;1278:2;1263:18;;;;1250:32;;-1:-1:-1;;;973:315:1:o;1293:347::-;1344:8;1354:6;1408:3;1401:4;1393:6;1389:17;1385:27;1375:55;;1426:1;1423;1416:12;1375:55;-1:-1:-1;1449:20:1;;1492:18;1481:30;;1478:50;;;1524:1;1521;1514:12;1478:50;1561:4;1553:6;1549:17;1537:29;;1613:3;1606:4;1597:6;1589;1585:19;1581:30;1578:39;1575:59;;;1630:1;1627;1620:12;1575:59;1293:347;;;;;:::o;1645:762::-;1750:6;1758;1766;1774;1782;1835:3;1823:9;1814:7;1810:23;1806:33;1803:53;;;1852:1;1849;1842:12;1803:53;1891:9;1878:23;1910:31;1935:5;1910:31;:::i;:::-;1960:5;-1:-1:-1;2017:2:1;2002:18;;1989:32;2030:33;1989:32;2030:33;:::i;:::-;2082:7;-1:-1:-1;2140:2:1;2125:18;;2112:32;2167:18;2156:30;;2153:50;;;2199:1;2196;2189:12;2153:50;2238:58;2288:7;2279:6;2268:9;2264:22;2238:58;:::i;:::-;1645:762;;;;-1:-1:-1;2315:8:1;2397:2;2382:18;2369:32;;1645:762;-1:-1:-1;;;;1645:762:1:o;2412:973::-;2535:6;2543;2551;2559;2567;2575;2583;2636:3;2624:9;2615:7;2611:23;2607:33;2604:53;;;2653:1;2650;2643:12;2604:53;2692:9;2679:23;2711:31;2736:5;2711:31;:::i;:::-;2761:5;-1:-1:-1;2818:2:1;2803:18;;2790:32;2831:33;2790:32;2831:33;:::i;:::-;2883:7;-1:-1:-1;2942:2:1;2927:18;;2914:32;2955:33;2914:32;2955:33;:::i;:::-;3007:7;-1:-1:-1;3065:2:1;3050:18;;3037:32;3092:18;3081:30;;3078:50;;;3124:1;3121;3114:12;3078:50;3163:58;3213:7;3204:6;3193:9;3189:22;3163:58;:::i;:::-;2412:973;;;;-1:-1:-1;2412:973:1;;3240:8;;3137:84;3322:3;3307:19;;3294:33;;3374:3;3359:19;3346:33;;-1:-1:-1;2412:973:1;-1:-1:-1;;;;2412:973:1:o;3390:247::-;3449:6;3502:2;3490:9;3481:7;3477:23;3473:32;3470:52;;;3518:1;3515;3508:12;3470:52;3557:9;3544:23;3576:31;3601:5;3576:31;:::i;:::-;3626:5;3390:247;-1:-1:-1;;;3390:247:1:o;4065:160::-;4130:20;;4186:13;;4179:21;4169:32;;4159:60;;4215:1;4212;4205:12;4159:60;4065:160;;;:::o;4230:315::-;4295:6;4303;4356:2;4344:9;4335:7;4331:23;4327:32;4324:52;;;4372:1;4369;4362:12;4324:52;4411:9;4398:23;4430:31;4455:5;4430:31;:::i;:::-;4480:5;-1:-1:-1;4504:35:1;4535:2;4520:18;;4504:35;:::i;:::-;4494:45;;4230:315;;;;;:::o;4550:831::-;4664:6;4672;4680;4688;4696;4704;4757:3;4745:9;4736:7;4732:23;4728:33;4725:53;;;4774:1;4771;4764:12;4725:53;4813:9;4800:23;4832:31;4857:5;4832:31;:::i;:::-;4882:5;-1:-1:-1;4939:2:1;4924:18;;4911:32;4952:33;4911:32;4952:33;:::i;:::-;5004:7;-1:-1:-1;5062:2:1;5047:18;;5034:32;5089:18;5078:30;;5075:50;;;5121:1;5118;5111:12;5075:50;5160:58;5210:7;5201:6;5190:9;5186:22;5160:58;:::i;:::-;4550:831;;;;-1:-1:-1;5237:8:1;5319:2;5304:18;;5291:32;;5370:3;5355:19;;;5342:33;;-1:-1:-1;4550:831:1;-1:-1:-1;;;;4550:831:1:o;5386:155::-;5445:5;5490:3;5481:6;5476:3;5472:16;5468:26;5465:46;;;5507:1;5504;5497:12;5465:46;-1:-1:-1;5529:6:1;5386:155;-1:-1:-1;5386:155:1:o;5546:1097::-;5703:6;5711;5719;5727;5735;5743;5751;5759;5812:3;5800:9;5791:7;5787:23;5783:33;5780:53;;;5829:1;5826;5819:12;5780:53;5868:9;5855:23;5887:31;5912:5;5887:31;:::i;:::-;5937:5;-1:-1:-1;5994:2:1;5979:18;;5966:32;6007:33;5966:32;6007:33;:::i;:::-;6059:7;-1:-1:-1;6118:2:1;6103:18;;6090:32;6131:33;6090:32;6131:33;:::i;:::-;6183:7;-1:-1:-1;6241:2:1;6226:18;;6213:32;6268:18;6257:30;;6254:50;;;6300:1;6297;6290:12;6254:50;6339:58;6389:7;6380:6;6369:9;6365:22;6339:58;:::i;:::-;6416:8;;-1:-1:-1;6313:84:1;-1:-1:-1;;6498:3:1;6483:19;;6470:33;;-1:-1:-1;6550:3:1;6535:19;;6522:33;;-1:-1:-1;6574:63:1;6629:7;6623:3;6608:19;;6574:63;:::i;:::-;6564:73;;5546:1097;;;;;;;;;;;:::o;6648:955::-;6796:6;6804;6812;6820;6828;6836;6844;6897:3;6885:9;6876:7;6872:23;6868:33;6865:53;;;6914:1;6911;6904:12;6865:53;6953:9;6940:23;6972:31;6997:5;6972:31;:::i;:::-;7022:5;-1:-1:-1;7079:2:1;7064:18;;7051:32;7092:33;7051:32;7092:33;:::i;:::-;7144:7;-1:-1:-1;7202:2:1;7187:18;;7174:32;7229:18;7218:30;;7215:50;;;7261:1;7258;7251:12;7215:50;7300:58;7350:7;7341:6;7330:9;7326:22;7300:58;:::i;:::-;7377:8;;-1:-1:-1;7274:84:1;-1:-1:-1;;7459:2:1;7444:18;;7431:32;;-1:-1:-1;7510:3:1;7495:19;;7482:33;;-1:-1:-1;7534:63:1;7589:7;7583:3;7568:19;;7534:63;:::i;:::-;7524:73;;6648:955;;;;;;;;;;:::o;9156:184::-;9226:6;9279:2;9267:9;9258:7;9254:23;9250:32;9247:52;;;9295:1;9292;9285:12;9247:52;-1:-1:-1;9318:16:1;;9156:184;-1:-1:-1;9156:184:1:o;9345:::-;-1:-1:-1;;;9394:1:1;9387:88;9494:4;9491:1;9484:15;9518:4;9515:1;9508:15;9534:125;9574:4;9602:1;9599;9596:8;9593:34;;;9607:18;;:::i;:::-;-1:-1:-1;9644:9:1;;9534:125::o;9664:271::-;9847:6;9839;9834:3;9821:33;9803:3;9873:16;;9898:13;;;9873:16;9664:271;-1:-1:-1;9664:271:1:o;10277:156::-;10343:20;;10403:4;10392:16;;10382:27;;10372:55;;10423:1;10420;10413:12;10438:1001;10520:6;10573:3;10561:9;10552:7;10548:23;10544:33;10541:53;;;10590:1;10587;10580:12;10541:53;10623:2;10617:9;10665:3;10657:6;10653:16;10735:6;10723:10;10720:22;10699:18;10687:10;10684:34;10681:62;10678:242;;;-1:-1:-1;;;10773:1:1;10766:88;10877:4;10874:1;10867:15;10905:4;10902:1;10895:15;10678:242;10940:10;10936:2;10929:22;;10988:9;10975:23;10967:6;10960:39;11060:2;11049:9;11045:18;11032:32;11027:2;11019:6;11015:15;11008:57;11126:2;11115:9;11111:18;11098:32;11093:2;11085:6;11081:15;11074:57;11164:35;11195:2;11184:9;11180:18;11164:35;:::i;:::-;11159:2;11151:6;11147:15;11140:60;11234:37;11266:3;11255:9;11251:19;11234:37;:::i;:::-;11228:3;11220:6;11216:16;11209:63;11334:3;11323:9;11319:19;11306:33;11300:3;11292:6;11288:16;11281:59;11402:3;11391:9;11387:19;11374:33;11368:3;11360:6;11356:16;11349:59;11427:6;11417:16;;;10438:1001;;;;:::o;13502:168::-;13542:7;13608:1;13604;13600:6;13596:14;13593:1;13590:21;13585:1;13578:9;13571:17;13567:45;13564:71;;;13615:18;;:::i;:::-;-1:-1:-1;13655:9:1;;13502:168::o;13675:274::-;13715:1;13741;13731:189;;-1:-1:-1;;;13773:1:1;13766:88;13877:4;13874:1;13867:15;13905:4;13902:1;13895:15;13731:189;-1:-1:-1;13934:9:1;;13675:274::o

Swarm Source

ipfs://9870dd0dc3fb83baf72036a002768c9388c9b2cbf93b6d7b09369fddefaaf877

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
ETH1.21%$43.9323.2877$1,023.03
ETH1.11%$3,920.40.239$936.98
ETH1.04%<$0.0000015,729,687,798.023$878.17
ETH0.99%$0.1375426,089.7835$837.6
ETH0.88%$5.11145.4264$743.13
ETH0.85%$1719.9324$719.93
ETH0.84%$14.9647.5591$711.48
ETH0.74%$1.85339.4775$628.03
ETH0.71%$4,139.980.1448$599.44
ETH0.69%$0.4847441,199.4561$581.43
ETH0.68%$29.319.6728$576.41
ETH0.63%$0.0572119,408.2337$538.25
ETH0.63%$1.22440.672$538.04
ETH0.63%$6.6680.1464$533.78
ETH0.62%$0.00002422,208,875.1636$525.02
ETH0.62%$0.2580772,032.55$524.55
ETH0.59%$0.787208640.3371$504.08
ETH0.59%$3,914.050.1277$499.85
ETH0.58%$0.0576338,514.4422$490.72
ETH0.58%$0.682175719.1367$490.58
ETH0.57%$3.44140$481.6
ETH0.53%$0.67012664.5435$445.32
ETH0.49%$1.05396.1238$414.74
ETH0.46%$1.61244.7126$393.99
ETH0.43%$4.4880.7746$361.87
ETH0.42%$2,093.830.17$355.9
ETH0.42%$0.1124323,151.1469$354.29
ETH0.41%$0.0617785,612.7588$346.74
ETH0.40%$0.000566597,549.5903$338.23
ETH0.39%$0.3296441,013.513$334.1
ETH0.39%$84.843.8546$327.03
ETH0.39%$0.00421177,624.1366$326.89
ETH0.39%$41.387.8905$326.51
ETH0.36%$6.0949.9705$304.32
ETH0.35%$9.3731.8486$298.42
ETH0.35%$165.051.7875$295.02
ETH0.34%$0.0547275,310.8821$290.65
ETH0.33%$0.01467118,924.4901$277.64
ETH0.33%$0.00002312,278,225.1334$277.02
ETH0.32%$0.0001192,295,550.4757$272.34
ETH0.32%$0.0277289,759.8421$270.62
ETH0.31%$4.2461.4028$260.35
ETH0.30%$0.1485021,724.4714$256.09
ETH0.30%$0.1003932,539.2362$254.92
ETH0.29%$0.0361386,863.6413$248.04
ETH0.29%$0.001376178,378.58$245.43
ETH0.28%$0.0600284,003.915$240.35
ETH0.27%$8.4327.381$230.82
ETH0.27%$0.683811336.8788$230.36
ETH0.27%$0.451393507.4897$229.08
ETH0.26%$0.99507224.8479$223.74
ETH0.26%$6.9831.1497$217.42
ETH0.26%$0.000211,030,957.3616$216.99
ETH0.25%$0.00548438,094.8182$208.93
ETH0.25%$1.84113.3919$208.64
ETH0.25%$0.0219439,490.3884$208.25
ETH0.24%$0.1027051,990.6114$204.45
ETH0.24%$0.337956599.1552$202.49
ETH0.24%$0.00987520,266.329$200.12
ETH0.21%$2.864.2041$179.77
ETH0.21%$0.001669106,967.0176$178.56
ETH0.21%$0.00720924,717.5802$178.2
ETH0.21%$40.484.39$177.71
ETH0.21%$0.31719557.8189$176.93
ETH0.20%$100,0570.00173289$173.39
ETH0.20%$6.6324.9539$165.44
ETH0.19%$0.1532971,072.4531$164.4
ETH0.18%$0.00183382,127.7637$150.58
ETH0.18%$0.298078497.6559$148.34
ETH0.17%$0.00267454,964.6146$146.95
ETH0.17%$3,914.050.0374$146.29
ETH0.17%$11.1613.0509$145.63
ETH0.17%$0.17758814.3841$144.62
ETH0.17%$0.155805927.2491$144.47
ETH0.17%$0.000374385,603.7733$144.08
ETH0.17%$46.673.0527$142.48
ETH0.17%$54.412.5837$140.58
ETH0.17%$2.2761.8364$140.37
ETH0.16%$3.9735.1874$139.69
ETH0.16%$32.94.2401$139.5
ETH0.16%$0.157959880.3323$139.06
ETH0.16%$0.38034360.4177$137.08
ETH0.16%$2.0865.7434$136.64
ETH0.16%$0.0001131,203,486.4991$136.5
ETH0.16%$4,403.230.0307$135.36
ETH0.16%$2.3258.2272$135.09
ETH0.16%$0.0514852,616.895$134.73
ETH0.15%$4.1131.6873$130.15
ETH0.15%$1.07119.6977$127.96
ETH0.15%$0.000834151,626.7272$126.41
ETH0.14%$1119.6898$119.81
ETH0.14%$0.501834238.2716$119.57
ETH0.14%$0.0382963,085.6486$118.17
ETH0.14%$0.774333148.7541$115.19
ETH0.14%$3.2435.5316$115.12
ETH0.13%$0.0593981,926.1267$114.41
ETH0.13%$0.00000716,204,046.4402$114.24
ETH0.13%<$0.0000019,392,523,220.4146$114.08
ETH0.13%$0.00164469,208.4875$113.79
ETH0.13%$77.981.439$112.22
ETH0.13%$6.3816.981$108.34
ETH0.13%$12.88.4466$108.12
ETH0.13%$0.000175611,474.0651$107.19
ETH0.12%$1105.63$105.63
ETH0.12%$5,575.450.0187$104.51
ETH0.12%$0.415807246.5833$102.53
ETH0.12%<$0.00000154,661,125,756.009$102.22
ETH0.12%$0.024214,190.3572$101.45
ETH0.12%$0.0143297,076.9271$101.41
ETH0.12%$666.520.1507$100.44
ETH0.12%$3.0832.606$100.43
ETH0.12%$0.0511521,944.9824$99.49
ETH0.12%$0.0312343,175.4235$99.18
ETH0.12%$0.646571153.1909$99.05
ETH0.12%$3,999.050.0246$98.49
ETH0.12%$1.9849.3731$97.76
ETH0.12%$2.244.3582$97.59
ETH0.11%$4,256.580.0225$95.59
ETH0.11%$1.0491.8844$95.47
ETH0.11%$0.94453999.1015$93.61
ETH0.11%$3.8923.5536$91.62
ETH0.11%$2.2340.6171$90.58
ETH0.10%$1.9944.294$88.14
ETH0.10%$0.702204123.2419$86.54
ETH0.10%$0.386714223.2782$86.34
ETH0.10%$709.710.1215$86.21
ETH0.10%$0.100592835.7669$84.07
ETH0.10%$0.140725595.6903$83.83
ETH0.10%<$0.0000015,776,584,157.1907$81.09
ETH0.10%$57.711.4008$80.84
ETH0.09%$0.0452271,779.1894$80.47
ETH0.09%$0.626344127.8833$80.1
ETH0.09%$4,219.340.019$80.03
ETH0.09%$0.0000282,843,599.5691$79.65
ETH0.09%$0.86923991.5206$79.55
ETH0.09%$0.000196405,933.9541$79.38
ETH0.09%$0.436754179.919$78.58
ETH0.09%$0.770485100.5474$77.47
ETH0.09%$0.359278215.2976$77.35
ETH0.09%$0.506563151.5644$76.78
ETH0.09%$1.6146.92$75.54
ETH0.09%$1.6445.8246$75.27
ETH0.09%$21.163.4745$73.52
ETH0.09%$0.163752440.4965$72.13
ETH0.08%$2.4129.8754$72
ETH0.08%$0.00098772,674.8363$71.75
ETH0.08%$0.6391111.4068$71.2
ETH0.08%$0.00658910,805.6588$71.2
ETH0.08%$0.0687961,024.8002$70.5
ETH0.08%$0.000241292,906.1057$70.46
ETH0.08%$2.429.1707$70.01
ETH0.08%$0.0278732,452.6451$68.36
ETH0.08%$1.7938.0418$68.09
ETH0.08%<$0.000001265,078,561.703$68.06
ETH0.08%$0.0000491,383,129.8813$67.91
ETH0.08%<$0.0000013,263,345,570.3515$67.74
ETH0.08%<$0.0000014,467,158,276.8727$66.21
ETH0.08%<$0.000001285,190,437.4095$65.57
ETH0.08%$0.0148644,358.5888$64.78
ETH0.08%$0.000001101,683,104.2921$64.24
ETH0.08%$0.0374921,707.9668$64.04
ETH0.07%$23.462.7018$63.38
ETH0.07%$0.0526031,203.8452$63.33
ETH0.07%$0.00000319,654,041.8014$62.61
ETH0.07%$0.00065195,400.719$62.09
ETH0.07%$1.2250.2758$61.34
ETH0.07%$0.067171911.4718$61.22
ETH0.07%$0.23849256.4515$61.16
ETH0.07%$0.445994136.5323$60.89
ETH0.07%$0.562261107.5811$60.49
ETH0.07%$0.0085527,072.691$60.48
ETH0.07%$290.670.2061$59.91
ETH0.07%<$0.0000013,145,000,000$59.28
ETH0.07%$2.3524.9213$58.57
ETH0.07%$0.444256131.2734$58.32
ETH0.07%$0.0465821,251.1028$58.28
ETH0.07%$52.171.1062$57.71
ETH0.07%$0.201576286.236$57.7
ETH0.07%$0.0000087,066,924.7656$57.17
ETH0.07%<$0.0000011,544,166,646.6789$57.07
ETH0.07%$0.0410261,387.7124$56.93
ETH0.07%<$0.00000129,392,052,963.7812$56.21
ETH0.07%$0.99988455.5254$55.52
ETH0.06%$0.164951333.2373$54.97
ETH0.06%$0.301283182.2103$54.9
ETH0.06%$0.0361181,515.3836$54.73
ETH0.06%$0.091405596.7992$54.55
ETH0.06%$3.9713.5139$53.65
ETH0.06%$2.0126.6285$53.52
ETH0.06%$1.1745.5494$53.17
ETH0.06%$0.0201642,627.7562$52.99
ETH0.06%$0.000015,100,000$52.89
ETH0.06%$0.171014307.0993$52.52
ETH0.06%$0.00014371,760.3657$52.12
ETH0.06%$0.54838694.8795$52.03
ETH0.06%$4,038.420.0127$51.35
ETH0.06%$0.20812245.7323$51.14
ETH0.06%$0.289041173.7432$50.22
ETH0.06%$19.842.4954$49.51
ETH0.06%$1.2738.8922$49.39
ETH0.06%$27.311.7748$48.47
ETH0.06%$0.00000230,117,171.4168$48.19
ETH0.06%$0.088933535.1523$47.59
ETH0.06%$94,9450.00049705$47.19
ETH0.06%$575.980.0815$46.95
ETH0.06%$55.10.85$46.84
ETH0.05%<$0.000001342,611,860.1877$45.93
ETH0.05%$0.281767162.948$45.91
ETH0.05%$1.0543.514$45.6
ETH0.05%<$0.0000014,165,464,155.7912$44.96
ETH0.05%$0.0117643,818.7745$44.92
ETH0.05%$59.710.7517$44.88
ETH0.05%$0.00000317,269,888.3361$44.73
ETH0.05%$0.37399119.2146$44.59
ETH0.05%$18.552.4021$44.57
ETH0.05%$0.66271467.1918$44.53
ETH0.05%$0.0329711,335.7572$44.04
ETH0.05%$4,661.190.00942674$43.94
ETH0.05%$0.48990188.9039$43.55
ETH0.05%$1.529.0874$43.52
ETH0.05%$0.275893157.6266$43.49
ETH0.05%$0.19123226.6825$43.35
ETH0.05%$1.3332.4728$43.22
ETH0.05%$0.082859520.3068$43.11
ETH0.05%$3.2613.2061$43.05
ETH0.05%$0.63255168$43.01
ETH0.05%$1.2933.0885$42.68
ETH0.05%$0.52382181.4294$42.65
ETH0.05%$0.000092463,445.8148$42.47
ETH0.05%$123.5354$42.41
ETH0.05%$0.177618236.9665$42.09
ETH0.05%$0.043353969.8837$42.05
ETH0.05%$0.171395244.6315$41.93
ETH0.05%$0.00086848,181.4751$41.83
ETH0.05%<$0.000001182,569,767.4659$41.12
ETH0.05%$0.44792990.9373$40.73
ETH0.05%$0.091565441.15$40.39
ETH0.05%$0.055272729.6875$40.33
ETH0.05%$1.8121.9645$39.76
ETH0.05%$0.0000291,367,387.0142$39.64
ETH0.05%$12.543.1393$39.37
ETH0.05%$0.51468476.0568$39.15
ETH0.05%$0.0033811,530.2011$38.98
ETH0.05%$0.197491196.1699$38.74
ETH0.05%$0.043164894.7508$38.62
ETH0.05%$0.182018211.9871$38.59
ETH0.05%$0.0099283,882.2334$38.54
ETH0.05%$0.333375114.5435$38.19
ETH0.04%$137.515$37.59
ETH0.04%$0.321999116.4511$37.5
ETH0.04%$0.033711,109.1696$37.39
ETH0.04%$0.081084455.2901$36.92
ETH0.04%$0.0041668,855.2051$36.89
ETH0.04%<$0.0000017,081,470,123.6697$36.8
ETH0.04%<$0.000001149,030,427.6863$36.59
ETH0.04%$0.00102235,772.4454$36.56
ETH0.04%$3.679.9501$36.52
ETH0.04%$421.820.0863$36.42
ETH0.04%$29.051.2538$36.42
ETH0.04%$0.068749523.9912$36.02
ETH0.04%$1.1331.6906$35.81
ETH0.04%$7.944.4969$35.71
ETH0.04%$0.0318551,114.494$35.5
ETH0.04%$0.119911294.6812$35.34
ETH0.04%$0.000031,193,772.19$35.26
ETH0.04%$1.0533.6239$35.2
ETH0.04%$6.945.0534$35.07
ETH0.04%$0.0000132,773,598.0428$34.89
ETH0.04%$0.47790472.7191$34.75
ETH0.04%$0.124497275.7644$34.33
ETH0.04%$0.0269841,264.7357$34.13
ETH0.04%$377.090.0902$34.01
ETH0.04%<$0.000001207,963,637,365.3179$33.9
ETH0.04%<$0.00000111,101,258,362.6911$33.28
ETH0.04%$0.36941288.8848$32.84
ETH0.04%<$0.0000014,990,740,794.7702$32.72
ETH0.04%$876.090.0368$32.27
ETH0.04%$0.123307259.0019$31.94
ETH0.04%$0.173579182.1424$31.62
ETH0.04%$0.060692518.9466$31.5
ETH0.04%$0.0000191,615,000$31.48
ETH0.04%$1.7817.623$31.4
ETH0.04%$0.0263381,146.9006$30.21
ETH0.04%$1.8316.4808$30.16
ETH0.04%$1.3522.3142$30.12
ETH0.04%$0.143141209.8126$30.03
ETH0.03%$1.1425.9621$29.6
ETH0.03%$57.160.5095$29.13
ETH0.03%$0.65885444.0881$29.05
ETH0.03%$0.0083383,482.9731$29.04
ETH0.03%$0.074834386.4744$28.92
ETH0.03%$1.8915.2304$28.84
ETH0.03%$0.00162817,622.9241$28.69
ETH0.03%$0.0115662,454.7358$28.39
ETH0.03%$0.191769147.0737$28.2
ETH0.03%$0.031849878.6853$27.99
ETH0.03%$3.797.375$27.95
ETH0.03%$0.000038738,965.8859$27.92
ETH0.03%$0.136043204.9261$27.88
ETH0.03%$0.146433188.6062$27.62
ETH0.03%$4,006.870.00687596$27.55
ETH0.03%$9.133.0056$27.44
ETH0.03%$0.193889141.3262$27.4
ETH0.03%$0.039235694.9693$27.27
ETH0.03%$0.0264351,030.5698$27.24
ETH0.03%$0.195582137.5795$26.91
ETH0.03%$1.2621.3544$26.91
ETH0.03%$0.0000261,024,412.4254$26.5
ETH0.03%$0.0000083,183,063.0542$26.1
ETH0.03%$0.080937318.7796$25.8
ETH0.03%$0.087789292.9458$25.72
ETH0.03%<$0.0000018,919,063,978.8323$25.64
ETH0.03%$125.5$25.52
ETH0.03%$0.172872147.6036$25.52
ETH0.03%$0.196088129.6682$25.43
ETH0.03%$0.0033047,682.2161$25.38
ETH0.03%$0.0089992,796.5$25.17
ETH0.03%$0.71163935.2358$25.08
ETH0.03%$0.0087342,855.0335$24.94
ETH0.03%<$0.000001356,069,519.797$24.91
ETH0.03%$0.0141651,757.0218$24.89
ETH0.03%$0.39414762.3784$24.59
ETH0.03%$0.0051454,742$24.4
ETH0.03%$110.120.2202$24.24
ETH0.03%$2.0711.5217$23.85
ETH0.03%$0.0000171,399,830.5512$23.63
ETH0.03%$0.68276334.3336$23.44
ETH0.03%$0.0071543,258.8715$23.31
ETH0.03%$0.134896172.1809$23.23
ETH0.03%$0.91703625.2179$23.13
ETH0.03%<$0.0000014,581,787,243.6019$23.08
ETH0.03%$4.015.7286$22.97
ETH0.03%$1.3516.9215$22.84
ETH0.03%$0.056024403.75$22.62
ETH0.03%$0.78471628.7077$22.53
ETH0.03%$0.059014378.7128$22.35
ETH0.03%$0.27419281.3534$22.31
ETH0.03%$0.0000054,231,649.1669$22.3
ETH0.03%$1.2317.9248$22.05
ETH0.03%$210.9791$22
ETH0.03%$0.145852149.3154$21.78
ETH0.03%$0.00000116,228,224.2427$21.71
ETH0.03%$0.00183911,741.1425$21.59
ETH0.03%$0.136597157.6224$21.53
ETH0.02%$0.00042948,922.9096$20.99
ETH0.02%$0.24245485.9125$20.83
ETH0.02%$0.000032649,267.3695$20.77
ETH0.02%$63.4592$20.75
ETH0.02%$0.20605299.4944$20.5
ETH0.02%$0.99874920.4$20.37
ETH0.02%$0.024216840.1892$20.35
ETH0.02%$0.0000072,849,219.0696$20.31
ETH0.02%$11.91.6928$20.14
ETH0.02%$139.270.1441$20.07
ETH0.02%$0.63114931.518$19.89
ETH0.02%$0.0189421,040.108$19.7
ETH0.02%<$0.000001339,530,579.0159$19.67
ETH0.02%$0.00103618,897.0545$19.58
ETH0.02%$0.25022877.0389$19.28
ETH0.02%$0.116279165.2376$19.21
ETH0.02%$0.024968764.0285$19.08
ETH0.02%$0.125145151.7083$18.99
ETH0.02%$27.790.6802$18.9
ETH0.02%$2.67.2655$18.89
ETH0.02%$0.96507119.4603$18.78
ETH0.02%$0.0000111,708,911.1146$18.76
ETH0.02%$0.00082122,723.3983$18.65
ETH0.02%<$0.00000164,314,650,040.1513$18.61
ETH0.02%$0.22071983.4828$18.43
ETH0.02%$2,166.970.0085$18.42
ETH0.02%$0.002347,843.2438$18.36
ETH0.02%$0.000044410,842.4947$18.04
ETH0.02%$60.540.2951$17.87
ETH0.02%$0.0000062,821,772.7631$17.84
ETH0.02%$0.00030957,419.0543$17.76
ETH0.02%$1.3712.8561$17.66
ETH0.02%$0.0136391,294.9165$17.66
ETH0.02%$0.82921121.222$17.6
ETH0.02%$0.066375264.8101$17.58
ETH0.02%$1.1415.4118$17.57
ETH0.02%$1.3213.3023$17.5
ETH0.02%$296.830.0588$17.45
ETH0.02%$0.9968517.4445$17.39
ETH0.02%$0.127921135.6043$17.35
ETH0.02%$0.99400617.4419$17.34
ETH0.02%$1.3412.8178$17.18
ETH0.02%$0.00155411,011.0086$17.11
ETH0.02%$4,146.110.0041021$17.01
ETH0.02%$0.0095211,785.7464$17
ETH0.02%$0.000011,681,806.9129$16.87
ETH0.02%$1.1514.6193$16.81
ETH0.02%$0.7468822.4546$16.77
ETH0.02%$391.160.0427$16.72
ETH0.02%$0.068388243.4551$16.65
ETH0.02%<$0.0000011,478,453,390.7652$16.58
ETH0.02%$0.0020637,954.6727$16.41
ETH0.02%$24.320.6718$16.34
ETH0.02%$18.570.8754$16.26
ETH0.02%$0.024547654.791$16.07
ETH0.02%$6.962.3029$16.03
ETH0.02%$0.16197397.9659$15.87
ETH0.02%$0.123029128.4472$15.8
ETH0.02%$8.391.8662$15.66
ETH0.02%<$0.00000134,528,094.327$15.42
ETH0.02%$0.00130911,767.4767$15.4
ETH0.02%$0.109987139.381$15.33
ETH0.02%$0.077301197.7433$15.29
ETH0.02%$0.000043350,954.5206$15.22
ETH0.02%$0.00085217,757.435$15.13
ETH0.02%$0.105349141.4624$14.9
ETH0.02%$0.062995226.0908$14.24
ETH0.02%$0.026612531.0794$14.13
ETH0.02%$0.080198175.2049$14.05
ETH0.02%<$0.000001391,718,019.443$13.87
ETH0.02%$0.018389752.3071$13.83
ETH0.02%$0.79459517.3834$13.81
ETH0.02%$0.51252326.5815$13.62
ETH0.02%$0.014863916.3084$13.62
ETH0.02%$0.050973265.1651$13.52
ETH0.02%$0.0000025,927,265.0688$13.51
ETH0.02%$99,2570.000136$13.5
ETH0.02%$2.236.0313$13.45
ETH0.02%$0.0129361,037.0734$13.42
ETH0.02%<$0.0000012,961,021,515.9471$13.36
ETH0.02%$0.067654197.2707$13.35
ETH0.02%$0.015581856.0834$13.34
ETH0.02%<$0.0000012,107,716,428.8369$13.23
ETH0.02%$0.0000062,069,299.4659$13.21
ETH0.02%$0.0000043,469,908.2107$13.15
ETH0.02%$27.150.4833$13.12
ETH0.02%$0.054255241.6061$13.11
ETH0.02%$0.0088641,472.9484$13.06
ETH0.02%$0.34003538.25$13.01
ETH0.02%$0.75066117.3016$12.99
ETH0.02%$0.0000062,012,873.2416$12.98
ETH0.02%$0.19131767.6776$12.95
ETH0.02%$1.856.9557$12.89
ETH0.02%$0.18699668.3036$12.77
ETH0.02%$0.00000120,919,539.5734$12.77
ETH0.01%$3.173.9502$12.52
ETH0.01%$0.0025934,806.9331$12.46
ETH0.01%$0.81660615.0835$12.32
ETH0.01%$0.00000110,866,821.9193$12.31
ETH0.01%$0.000084144,202$12.1
ETH0.01%$1.418.5262$12.02
ETH0.01%$0.10842110.5595$11.99
ETH0.01%$0.0066761,790.8883$11.96
ETH0.01%$1.378.721$11.95
ETH0.01%$32.340.3668$11.86
ETH0.01%$0.59150620.0488$11.86
ETH0.01%$0.13001290.3645$11.75
ETH0.01%$0.00000113,228,765.685$11.72
ETH0.01%$3.183.6826$11.71
ETH0.01%$17.420.6708$11.68
ETH0.01%$0.00087213,349.7064$11.64
ETH0.01%$0.21868853.1575$11.62
ETH0.01%$0.94562312.1527$11.49
ETH0.01%$0.0109521,044.6496$11.44
ETH0.01%$1.617.0961$11.42
ETH0.01%$0.00052121,886.5786$11.39
ETH0.01%$0.2662642.3938$11.29
ETH0.01%$0.96649511.6746$11.28
ETH0.01%$1.816.2352$11.27
ETH0.01%$20.620.5464$11.27
ETH0.01%$0.00025144,440.4202$11.14
ETH0.01%$0.25564443.4557$11.11
ETH0.01%$0.00026641,660.9815$11.1
ETH0.01%$0.24809644.4613$11.03
ETH0.01%<$0.000001698,158,398.8623$10.96
ETH0.01%$0.98641311.05$10.9
ETH0.01%$0.38701327.9004$10.8
ETH0.01%$0.02311455.6313$10.53
ETH0.01%<$0.00000124,463,879.9844$10.51
ETH0.01%$3.532.9724$10.49
ETH0.01%$0.77746813.4686$10.47
ETH0.01%$0.11542390.1801$10.41
ETH0.01%$2.055.0745$10.4
ETH0.01%$0.028127366.3789$10.31
ETH0.01%$0.013444765$10.28
ETH0.01%$0.090982112.764$10.26
ETH0.01%$0.059148172.5298$10.2
ETH0.01%$0.083962120.1535$10.09
ETH0.01%$0.018292549.5251$10.05
ETH0.01%$0.59241716.8272$9.97
ETH0.01%$0.22868443.4467$9.94
ETH0.01%$0.58649316.9167$9.92
ETH0.01%$0.093266105.9919$9.89
ETH0.01%$0.0010419,469.7797$9.86
ETH0.01%$1.825.409$9.84
ETH0.01%$0.016136605.0379$9.76
ETH0.01%$0.53400418.0484$9.64
ETH0.01%$0.0023563,982.8467$9.38
ETH0.01%$0.00042222,117.3202$9.33
ETH0.01%$0.0019094,847.4202$9.25
ETH0.01%$0.015959573.359$9.15
ETH0.01%$0.0054221,679.0344$9.1
ETH0.01%$0.000014653,076.867$9.07
ETH0.01%$0.0020034,462.5$8.94
ETH0.01%$1.725.18$8.91
ETH0.01%$0.0013786,445.7955$8.88
ETH0.01%$0.017761498.3646$8.85
ETH0.01%$0.012533703.8663$8.82
ETH0.01%$0.010273850.6958$8.74
ETH0.01%$0.00058814,737.2924$8.66
ETH0.01%$0.085018101.62$8.64
ETH0.01%$0.1311965.6242$8.61
ETH0.01%<$0.00000168,308,654.7935$8.6
ETH0.01%$0.9929058.6445$8.58
ETH0.01%$0.013937613.5748$8.55
ETH0.01%$0.039823213.3868$8.5
ETH0.01%$99,9330.000085$8.49
ETH0.01%$0.049787170.5927$8.49
ETH0.01%$0.000032261,959.5047$8.48
ETH<0.01%$0.16290651.8083$8.44
ETH<0.01%$2,694.90.0031$8.35
ETH<0.01%$0.0021233,913.5125$8.31
ETH<0.01%$3.622.2744$8.24
ETH<0.01%$0.48627216.8839$8.21
ETH<0.01%$0.054215150.2847$8.15
ETH<0.01%$0.003722,181.1569$8.11
ETH<0.01%$2.523.1983$8.05
ETH<0.01%<$0.000001387,906,250.7352$8.04
ETH<0.01%$0.26851729.892$8.03
ETH<0.01%$0.0021223,776.8312$8.02
ETH<0.01%$0.1311960.6372$7.95
ETH<0.01%<$0.00000118,766,116.756$7.81
ETH<0.01%$0.0016464,658.102$7.67
ETH<0.01%$0.32802423.3237$7.65
ETH<0.01%<$0.000001812,807,335.3001$7.63
ETH<0.01%$12.620.6034$7.62
ETH<0.01%$0.11590965.5194$7.59
ETH<0.01%$0.010688710.4542$7.59
ETH<0.01%$0.47221916.0073$7.56
ETH<0.01%$0.0000024,141,027.3347$7.45
ETH<0.01%$0.00043617,000$7.41
ETH<0.01%$0.43264317$7.35
ETH<0.01%$17.225$7.23
ETH<0.01%$0.0000017,576,862.9719$7.22
ETH<0.01%$0.11305963.7025$7.2
ETH<0.01%$0.0062251,156.3202$7.2
ETH<0.01%$0.16101144.622$7.18
ETH<0.01%$15.610.459$7.16
ETH<0.01%$0.29322724.3644$7.14
ETH<0.01%$0.26585626.7391$7.11
ETH<0.01%$0.012346559.3$6.9
ETH<0.01%$0.10545565.3668$6.89
ETH<0.01%$0.19665335.005$6.88
ETH<0.01%$3,925.660.0017502$6.87
ETH<0.01%$0.0000061,107,700.41$6.78
ETH<0.01%$0.0035921,882.7364$6.76
ETH<0.01%$0.38910417.3575$6.75
ETH<0.01%$0.33907719.7277$6.69
ETH<0.01%$0.00057511,625.6176$6.69
ETH<0.01%$0.29886222.2203$6.64
ETH<0.01%$0.000045148,556.2803$6.62
ETH<0.01%$0.00039216,807.8605$6.59
ETH<0.01%$2.752.3903$6.56
ETH<0.01%<$0.0000012,899,880,472.6245$6.55
ETH<0.01%<$0.00000165,995,421.5601$6.49
ETH<0.01%$0.61209810.6038$6.49
ETH<0.01%$0.0057941,116.9176$6.47
ETH<0.01%$0.06797594.8314$6.45
ETH<0.01%$0.0024242,658.4389$6.44
ETH<0.01%$0.031519204.4054$6.44
ETH<0.01%$0.50411612.7434$6.42
ETH<0.01%$0.013878462.5766$6.42
ETH<0.01%$0.12042953.2755$6.42
ETH<0.01%$0.51728312.4025$6.42
ETH<0.01%$283.910.0226$6.4
ETH<0.01%$16.3998$6.4
ETH<0.01%$2.212.8555$6.31
ETH<0.01%$0.49763612.5729$6.26
ETH<0.01%$4,050.620.00152387$6.17
ETH<0.01%$0.044865137.4568$6.17
ETH<0.01%$0.0000015,510,495.5947$6.12
ETH<0.01%$48.370.1241$6
ETH<0.01%$1.394.3091$5.99
ETH<0.01%$0.0006868,666.3326$5.95
ETH<0.01%$0.023827246.7015$5.88
ETH