ETH Price: $3,589.74 (+0.69%)
Gas: 35 Gwei

Contract

0x4CD9563D5365e2B495A9E7963Ff1554aC443Bb6d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer Ownersh...122795982021-04-20 21:46:291072 days ago1618955189IN
0x4CD9563D...aC443Bb6d
0 ETH0.00739034236
0x61014060122793712021-04-20 21:00:501072 days ago1618952450IN
 Create: CompoundStrategy
0 ETH0.57811036232

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CompoundStrategy

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-20
*/

// Sources flattened with hardhat v2.0.11 https://hardhat.org

// File contracts/interfaces/IStrategy.sol

// License-Identifier: MIT
pragma solidity 0.6.12;

interface IStrategy {
    /// @notice Send the assets to the Strategy and call skim to invest them.
    /// @param amount The amount of tokens to invest.
    function skim(uint256 amount) external;

    /// @notice Harvest any profits made converted to the asset and pass them to the caller.
    /// @param balance The amount of tokens the caller thinks it has invested.
    /// @param sender The address of the initiator of this transaction. Can be used for reimbursements, etc.
    /// @return amountAdded The delta (+profit or -loss) that occured in contrast to `balance`.
    function harvest(uint256 balance, address sender) external returns (int256 amountAdded);

    /// @notice Withdraw assets. The returned amount can differ from the requested amount due to rounding.
    /// @dev The `actualAmount` should be very close to the amount.
    /// The difference should NOT be used to report a loss. That's what harvest is for.
    /// @param amount The requested amount the caller wants to withdraw.
    /// @return actualAmount The real amount that is withdrawn.
    function withdraw(uint256 amount) external returns (uint256 actualAmount);

    /// @notice Withdraw all assets in the safest way possible. This shouldn't fail.
    /// @param balance The amount of tokens the caller thinks it has invested.
    /// @return amountAdded The delta (+profit or -loss) that occured in contrast to `balance`.
    function exit(uint256 balance) external returns (int256 amountAdded);
}


// File @boringcrypto/boring-solidity/contracts/[email protected]

// License-Identifier: MIT
pragma solidity 0.6.12;

// Audit on 5-Jan-2021 by Keno and BoringCrypto
// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol
// Edited by BoringCrypto

contract BoringOwnableData {
    address public owner;
    address public pendingOwner;
}

contract BoringOwnable is BoringOwnableData {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice `owner` defaults to msg.sender on construction.
    constructor() public {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner.
    /// Can only be invoked by the current `owner`.
    /// @param newOwner Address of the new owner.
    /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`.
    /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise.
    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) public onlyOwner {
        if (direct) {
            // Checks
            require(newOwner != address(0) || renounce, "Ownable: zero address");

            // Effects
            emit OwnershipTransferred(owner, newOwner);
            owner = newOwner;
            pendingOwner = address(0);
        } else {
            // Effects
            pendingOwner = newOwner;
        }
    }

    /// @notice Needs to be called by `pendingOwner` to claim ownership.
    function claimOwnership() public {
        address _pendingOwner = pendingOwner;

        // Checks
        require(msg.sender == _pendingOwner, "Ownable: caller != pending owner");

        // Effects
        emit OwnershipTransferred(owner, _pendingOwner);
        owner = _pendingOwner;
        pendingOwner = address(0);
    }

    /// @notice Only allows the `owner` to execute the function.
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
}


// File @boringcrypto/boring-solidity/contracts/libraries/[email protected]

// License-Identifier: MIT
pragma solidity 0.6.12;

/// @notice A library for performing overflow-/underflow-safe math,
/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).
library BoringMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "BoringMath: Mul Overflow");
    }

    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "BoringMath: uint128 Overflow");
        c = uint128(a);
    }

    function to64(uint256 a) internal pure returns (uint64 c) {
        require(a <= uint64(-1), "BoringMath: uint64 Overflow");
        c = uint64(a);
    }

    function to32(uint256 a) internal pure returns (uint32 c) {
        require(a <= uint32(-1), "BoringMath: uint32 Overflow");
        c = uint32(a);
    }
}

/// @notice A library for performing overflow-/underflow-safe addition and subtraction on uint128.
library BoringMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }
}

/// @notice A library for performing overflow-/underflow-safe addition and subtraction on uint64.
library BoringMath64 {
    function add(uint64 a, uint64 b) internal pure returns (uint64 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }
}

/// @notice A library for performing overflow-/underflow-safe addition and subtraction on uint32.
library BoringMath32 {
    function add(uint32 a, uint32 b) internal pure returns (uint32 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }
}


// File @boringcrypto/boring-solidity/contracts/interfaces/[email protected]

// License-Identifier: MIT
pragma solidity 0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice EIP 2612
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}


// File @boringcrypto/boring-solidity/contracts/libraries/[email protected]

// License-Identifier: MIT
pragma solidity 0.6.12;

// solhint-disable avoid-low-level-calls

library BoringERC20 {
    bytes4 private constant SIG_SYMBOL = 0x95d89b41; // symbol()
    bytes4 private constant SIG_NAME = 0x06fdde03; // name()
    bytes4 private constant SIG_DECIMALS = 0x313ce567; // decimals()
    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)
    bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256)

    function returnDataToString(bytes memory data) internal pure returns (string memory) {
        if (data.length >= 64) {
            return abi.decode(data, (string));
        } else if (data.length == 32) {
            uint8 i = 0;
            while(i < 32 && data[i] != 0) {
                i++;
            }
            bytes memory bytesArray = new bytes(i);
            for (i = 0; i < 32 && data[i] != 0; i++) {
                bytesArray[i] = data[i];
            }
            return string(bytesArray);
        } else {
            return "???";
        }
    }

    /// @notice Provides a safe ERC20.symbol version which returns '???' as fallback string.
    /// @param token The address of the ERC-20 token contract.
    /// @return (string) Token symbol.
    function safeSymbol(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_SYMBOL));
        return success ? returnDataToString(data) : "???";
    }

    /// @notice Provides a safe ERC20.name version which returns '???' as fallback string.
    /// @param token The address of the ERC-20 token contract.
    /// @return (string) Token name.
    function safeName(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_NAME));
        return success ? returnDataToString(data) : "???";
    }

    /// @notice Provides a safe ERC20.decimals version which returns '18' as fallback value.
    /// @param token The address of the ERC-20 token contract.
    /// @return (uint8) Token decimals.
    function safeDecimals(IERC20 token) internal view returns (uint8) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_DECIMALS));
        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
    }

    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.
    /// Reverts on a failed transfer.
    /// @param token The address of the ERC-20 token.
    /// @param to Transfer tokens to.
    /// @param amount The token amount.
    function safeTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed");
    }

    /// @notice Provides a safe ERC20.transferFrom version for different ERC-20 implementations.
    /// Reverts on a failed transfer.
    /// @param token The address of the ERC-20 token.
    /// @param from Transfer tokens from.
    /// @param to Transfer tokens to.
    /// @param amount The token amount.
    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed");
    }
}


// File contracts/strategies/CompoundStrategy.sol

// License-Identifier: MIT
pragma solidity 0.6.12;




// solhint-disable avoid-low-level-calls
// solhint-disable not-rely-on-time
// solhint-disable no-empty-blocks
// solhint-disable avoid-tx-origin

interface IFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IPair {
    function totalSupply() external view returns (uint256);

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

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
}

interface IcToken is IERC20 {
    function mint(uint256 mintAmount) external returns (uint256);

    function redeem(uint256 redeemTokens) external returns (uint256);

    function redeemUnderlying(uint256 redeemAmount) external returns (uint256);

    function balanceOfUnderlying(address account) external returns (uint256);
}

contract CompoundStrategy is IStrategy, BoringOwnable {
    using BoringMath for uint256;
    using BoringERC20 for IERC20;
    using BoringERC20 for IcToken;

    address public immutable bentobox;
    IERC20 public immutable token;
    IcToken public immutable cToken;
    IERC20 public immutable compToken;
    IERC20 public immutable weth;
    IFactory public immutable factory;
    bool public exited;

    constructor(
        address bentobox_,
        IFactory factory_,
        IERC20 token_,
        IcToken cToken_,
        IERC20 compToken_,
        IERC20 weth_
    ) public {
        bentobox = bentobox_;
        factory = factory_;
        token = token_;
        cToken = cToken_;
        compToken = compToken_;
        weth = weth_;

        token_.approve(address(cToken_), type(uint256).max);
    }

    modifier onlyBentobox {
        // Only the bentobox can call harvest on this strategy
        require(msg.sender == bentobox, "CompoundStrategy: only bento");
        require(!exited, "CompoundStrategy: exited");
        _;
    }

    function _swapAll(
        IERC20 fromToken,
        IERC20 toToken,
        address to
    ) internal returns (uint256 amountOut) {
        IPair pair = IPair(factory.getPair(address(fromToken), address(toToken)));
        require(address(pair) != address(0), "CompoundStrategy: Cannot convert");

        uint256 amountIn = fromToken.balanceOf(address(this));
        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
        uint256 amountInWithFee = amountIn.mul(997);
        IERC20(fromToken).safeTransfer(address(pair), amountIn);
        if (fromToken < toToken) {
            amountOut = amountIn.mul(997).mul(reserve1) / reserve0.mul(1000).add(amountInWithFee);
            pair.swap(0, amountOut, to, new bytes(0));
        } else {
            amountOut = amountIn.mul(997).mul(reserve0) / reserve1.mul(1000).add(amountInWithFee);
            pair.swap(amountOut, 0, to, new bytes(0));
        }
    }

    // Send the assets to the Strategy and call skim to invest them
    /// @inheritdoc IStrategy
    function skim(uint256 amount) external override onlyBentobox {
        require(cToken.mint(amount) == 0, "CompoundStrategy: mint error");
    }

    // Harvest any profits made converted to the asset and pass them to the caller
    /// @inheritdoc IStrategy
    function harvest(uint256 balance, address sender) external override onlyBentobox returns (int256 amountAdded) {
        // To prevent anyone from using flash loans to 'steal' part of the profits, only EOA is allowed to call harvest
        require(sender == tx.origin, "CompoundStrategy: EOA only");
        // Get the amount of tokens that the cTokens currently represent
        uint256 tokenBalance = cToken.balanceOfUnderlying(address(this));
        // Convert enough cToken to take out the profit
        // If the amount is negative due to rounding (near impossible), just revert. Should be positive soon enough.
        require(cToken.redeemUnderlying(tokenBalance.sub(balance)) == 0, "CompoundStrategy: profit fail");

        // Find out how much has been added (+ sitting on the contract from harvestCOMP)
        uint256 amountAdded_ = token.balanceOf(address(this));
        // Transfer the profit to the bentobox, the amountAdded at this point matches the amount transferred
        token.safeTransfer(bentobox, amountAdded_);

        return int256(amountAdded_);
    }

    function harvestCOMP(uint256 minAmount) public onlyOwner {
        // To prevent flash loan sandwich attacks to 'steal' the profit, only the owner can harvest the COMP
        // Swap all COMP to WETH
        _swapAll(compToken, weth, address(this));
        // Swap all WETH to token and leave it on the contract to be swept up in the next harvest
        require(_swapAll(weth, token, address(this)) >= minAmount, "CompoundStrategy: not enough");
    }

    // Withdraw assets.
    /// @inheritdoc IStrategy
    function withdraw(uint256 amount) external override onlyBentobox returns (uint256 actualAmount) {
        // Convert enough cToken to take out 'amount' tokens
        require(cToken.redeemUnderlying(amount) == 0, "CompoundStrategy: redeem fail");

        // Make sure we send and report the exact same amount of tokens by using balanceOf
        actualAmount = token.balanceOf(address(this));
        token.safeTransfer(bentobox, actualAmount);
    }

    // Withdraw all assets in the safest way possible. This shouldn't fail.
    /// @inheritdoc IStrategy
    function exit(uint256 balance) external override onlyBentobox returns (int256 amountAdded) {
        // Get the amount of tokens that the cTokens currently represent
        uint256 tokenBalance = cToken.balanceOfUnderlying(address(this));
        // Get the actual token balance of the cToken contract
        uint256 available = token.balanceOf(address(cToken));

        // Check that the cToken contract has enough balance to pay out in full
        if (tokenBalance <= available) {
            // If there are more tokens available than our full position, take all based on cToken balance (continue if unsuccesful)
            try cToken.redeem(cToken.balanceOf(address(this))) {} catch {}
        } else {
            // Otherwise redeem all available and take a loss on the missing amount (continue if unsuccesful)
            try cToken.redeemUnderlying(available) {} catch {}
        }

        // Check balance of token on the contract
        uint256 amount = token.balanceOf(address(this));
        // Calculate tokens added (or lost)
        amountAdded = int256(amount) - int256(balance);
        // Transfer all tokens to bentobox
        token.safeTransfer(bentobox, amount);
        // Flag as exited, allowing the owner to manually deal with any amounts available later
        exited = true;
    }

    function afterExit(
        address to,
        uint256 value,
        bytes memory data
    ) public onlyOwner returns (bool success) {
        // After exited, the owner can perform ANY call. This is to rescue any funds that didn't get released during exit or
        // got earned afterwards due to vesting or airdrops, etc.
        require(exited, "CompoundStrategy: Not exited");
        (success, ) = to.call{value: value}(data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"bentobox_","type":"address"},{"internalType":"contract IFactory","name":"factory_","type":"address"},{"internalType":"contract IERC20","name":"token_","type":"address"},{"internalType":"contract IcToken","name":"cToken_","type":"address"},{"internalType":"contract IERC20","name":"compToken_","type":"address"},{"internalType":"contract IERC20","name":"weth_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"afterExit","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bentobox","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cToken","outputs":[{"internalType":"contract IcToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"exit","outputs":[{"internalType":"int256","name":"amountAdded","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"harvest","outputs":[{"internalType":"int256","name":"amountAdded","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"harvestCOMP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"actualAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

6101406040523480156200001257600080fd5b5060405162002f5038038062002f50833981810160405260c08110156200003857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508473ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff1660601b815250508373ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff1660601b815250508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b3847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015620002f457600080fd5b505af115801562000309573d6000803e3d6000fd5b505050506040513d60208110156200032057600080fd5b81019080805190602001909291905050505050505050505060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c612b306200042060003980611e3252806120a952508061065a528061068652806112bc52508061063952806114ba525080610be85280610cb052806110675280611624528061174852806118b452806119b85280611a675280611aa35280611bdf5250806106a75280610de55280610ece52806111885280611271528061197c5280611c945280611d825280612082525080610a015280610eac5280610f21528061124f52806114de528061176e5280611d605280611e0e5250612b306000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80636939aaf5116100a2578063b649d03211610071578063b649d032146103a8578063c45a0155146103dc578063d9253c2d14610410578063e30c39781461050b578063fc0c546a1461053f5761010b565b80636939aaf5146102d057806369e527da146102fe5780637f8661a1146103325780638da5cb5b146103745761010b565b80633fc8cef3116100de5780633fc8cef31461023e5780634e71e0c8146102725780635ce6c3271461027c5780636605dfa71461029c5761010b565b8063022444e614610110578063078dfbe71461013e57806318fccc761461019a5780632e1a7d4d146101fc575b600080fd5b61013c6004803603602081101561012657600080fd5b8101908080359060200190929190505050610573565b005b6101986004803603606081101561015457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050610743565b005b6101e6600480360360408110156101b057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109fd565b6040518082815260200191505060405180910390f35b6102286004803603602081101561021257600080fd5b8101908080359060200190929190505050610f1d565b6040518082815260200191505060405180910390f35b6102466112ba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61027a6112de565b005b6102846114a5565b60405180821515815260200191505060405180910390f35b6102a46114b8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fc600480360360208110156102e657600080fd5b81019080803590602001909291905050506114dc565b005b610306611746565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61035e6004803603602081101561034857600080fd5b810190808035906020019092919050505061176a565b6040518082815260200191505060405180910390f35b61037c611de8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103b0611e0c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e4611e30565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104f36004803603606081101561042657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561046d57600080fd5b82018360208201111561047f57600080fd5b803590602001918460018302840111640100000000831117156104a157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e54565b60405180821515815260200191505060405180910390f35b61051361205a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610547612080565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610634576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61067f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000306120a4565b50806106cc7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000306120a4565b1015610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206e6f7420656e6f7567680000000081525060200191505060405180910390fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81156109b657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806108435750805b6108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e61626c653a207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109f8565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615610b43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f6d706f756e6453747261746567793a20454f41206f6e6c7900000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633af9e669306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610c6f57600080fd5b505af1158015610c83573d6000803e3d6000fd5b505050506040513d6020811015610c9957600080fd5b8101908080519060200190929190505050905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663852a12e3610cfd878561275d90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015610d3357600080fd5b505af1158015610d47573d6000803e3d6000fd5b505050506040513d6020811015610d5d57600080fd5b810190808051906020019092919050505014610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f436f6d706f756e6453747261746567793a2070726f666974206661696c00000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6a57600080fd5b505afa158015610e7e573d6000803e3d6000fd5b505050506040513d6020811015610e9457600080fd5b81019080805190602001909291905050509050610f127f0000000000000000000000000000000000000000000000000000000000000000827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b809250505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611063576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663852a12e3846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156110d857600080fd5b505af11580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b810190808051906020019092919050505014611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f436f6d706f756e6453747261746567793a2072656465656d206661696c00000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561120d57600080fd5b505afa158015611221573d6000803e3d6000fd5b505050506040513d602081101561123757600080fd5b810190808051906020019092919050505090506112b57f0000000000000000000000000000000000000000000000000000000000000000827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561169557600080fd5b505af11580156116a9573d6000803e3d6000fd5b505050506040513d60208110156116bf57600080fd5b810190808051906020019092919050505014611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206d696e74206572726f720000000081525060200191505060405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff16156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633af9e669306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561193b57600080fd5b505af115801561194f573d6000803e3d6000fd5b505050506040513d602081101561196557600080fd5b8101908080519060200190929190505050905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a2157600080fd5b505afa158015611a35573d6000803e3d6000fd5b505050506040513d6020811015611a4b57600080fd5b81019080805190602001909291905050509050808211611bdd577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663db006a757f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b2857600080fd5b505afa158015611b3c573d6000803e3d6000fd5b505050506040513d6020811015611b5257600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611b9957600080fd5b505af1925050508015611bcd57506040513d6020811015611bb957600080fd5b810190808051906020019092919050505060015b611bd657611bd8565b505b611c90565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663852a12e3826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611c5057600080fd5b505af1925050508015611c8457506040513d6020811015611c7057600080fd5b810190808051906020019092919050505060015b611c8d57611c8f565b505b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d1957600080fd5b505afa158015611d2d573d6000803e3d6000fd5b505050506040513d6020811015611d4357600080fd5b810190808051906020019092919050505090508481039350611dc67f0000000000000000000000000000000000000000000000000000000000000000827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b60018060146101000a81548160ff021916908315150217905550505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600160149054906101000a900460ff16611f9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a204e6f74206578697465640000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1683836040518082805190602001908083835b60208310611fe65780518252602082019150602081019050602083039250611fc3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612048576040519150601f19603f3d011682016040523d82523d6000602084013e61204d565b606091505b5050809150509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390586866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561214c57600080fd5b505afa158015612160573d6000803e3d6000fd5b505050506040513d602081101561217657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561222c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6d706f756e6453747261746567793a2043616e6e6f7420636f6e7665727481525060200191505060405180910390fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561229557600080fd5b505afa1580156122a9573d6000803e3d6000fd5b505050506040513d60208110156122bf57600080fd5b810190808051906020019092919050505090506000808373ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561231b57600080fd5b505afa15801561232f573d6000803e3d6000fd5b505050506040513d606081101561234557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060006123a66103e5856129e290919063ffffffff16565b90506123d385858b73ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610156125ae5761242e816124206103e8866129e290919063ffffffff16565b612a7790919063ffffffff16565b612455836124476103e5886129e290919063ffffffff16565b6129e290919063ffffffff16565b8161245c57fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f6000888a600067ffffffffffffffff8111801561249757600080fd5b506040519080825280601f01601f1916602001820160405280156124ca5781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612542578082015181840152602081019050612527565b50505050905090810190601f16801561256f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561259157600080fd5b505af11580156125a5573d6000803e3d6000fd5b50505050612751565b6125d5816125c76103e8856129e290919063ffffffff16565b612a7790919063ffffffff16565b6125fc846125ee6103e5886129e290919063ffffffff16565b6129e290919063ffffffff16565b8161260357fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f8760008a600067ffffffffffffffff8111801561263e57600080fd5b506040519080825280601f01601f1916602001820160405280156126715781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156126e95780820151818401526020810190506126ce565b50505050905090810190601f1680156127165780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b505050505b50505050509392505050565b60008282840391508111156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f426f72696e674d6174683a20556e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106128c2578051825260208201915060208101905060208303925061289f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612924576040519150601f19603f3d011682016040523d82523d6000602084013e612929565b606091505b50915091508180156129695750600081511480612968575080806020019051602081101561295657600080fd5b81019080805190602001909291905050505b5b6129db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f426f72696e6745524332303a205472616e73666572206661696c65640000000081525060200191505060405180910390fd5b5050505050565b6000808214806129ff57508282838502925082816129fc57fe5b04145b612a71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f426f72696e674d6174683a204d756c204f766572666c6f77000000000000000081525060200191505060405180910390fd5b92915050565b6000818284019150811015612af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f426f72696e674d6174683a20416464204f766572666c6f77000000000000000081525060200191505060405180910390fd5b9291505056fea2646970667358221220fba71288910f734cf1da8df09e436943eb37bf7bee29e1ce101bb5e45a11df8964736f6c634300060c0033000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80636939aaf5116100a2578063b649d03211610071578063b649d032146103a8578063c45a0155146103dc578063d9253c2d14610410578063e30c39781461050b578063fc0c546a1461053f5761010b565b80636939aaf5146102d057806369e527da146102fe5780637f8661a1146103325780638da5cb5b146103745761010b565b80633fc8cef3116100de5780633fc8cef31461023e5780634e71e0c8146102725780635ce6c3271461027c5780636605dfa71461029c5761010b565b8063022444e614610110578063078dfbe71461013e57806318fccc761461019a5780632e1a7d4d146101fc575b600080fd5b61013c6004803603602081101561012657600080fd5b8101908080359060200190929190505050610573565b005b6101986004803603606081101561015457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050610743565b005b6101e6600480360360408110156101b057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109fd565b6040518082815260200191505060405180910390f35b6102286004803603602081101561021257600080fd5b8101908080359060200190929190505050610f1d565b6040518082815260200191505060405180910390f35b6102466112ba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61027a6112de565b005b6102846114a5565b60405180821515815260200191505060405180910390f35b6102a46114b8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fc600480360360208110156102e657600080fd5b81019080803590602001909291905050506114dc565b005b610306611746565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61035e6004803603602081101561034857600080fd5b810190808035906020019092919050505061176a565b6040518082815260200191505060405180910390f35b61037c611de8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103b0611e0c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e4611e30565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104f36004803603606081101561042657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561046d57600080fd5b82018360208201111561047f57600080fd5b803590602001918460018302840111640100000000831117156104a157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e54565b60405180821515815260200191505060405180910390f35b61051361205a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610547612080565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610634576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61067f7f000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2306120a4565b50806106cc7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599306120a4565b1015610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206e6f7420656e6f7567680000000081525060200191505060405180910390fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81156109b657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806108435750805b6108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e61626c653a207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109f8565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b60007f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615610b43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f6d706f756e6453747261746567793a20454f41206f6e6c7900000000000081525060200191505060405180910390fd5b60007f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff16633af9e669306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610c6f57600080fd5b505af1158015610c83573d6000803e3d6000fd5b505050506040513d6020811015610c9957600080fd5b8101908080519060200190929190505050905060007f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff1663852a12e3610cfd878561275d90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015610d3357600080fd5b505af1158015610d47573d6000803e3d6000fd5b505050506040513d6020811015610d5d57600080fd5b810190808051906020019092919050505014610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f436f6d706f756e6453747261746567793a2070726f666974206661696c00000081525060200191505060405180910390fd5b60007f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6a57600080fd5b505afa158015610e7e573d6000803e3d6000fd5b505050506040513d6020811015610e9457600080fd5b81019080805190602001909291905050509050610f127f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966827f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b809250505092915050565b60007f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611063576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff1663852a12e3846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156110d857600080fd5b505af11580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b810190808051906020019092919050505014611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f436f6d706f756e6453747261746567793a2072656465656d206661696c00000081525060200191505060405180910390fd5b7f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561120d57600080fd5b505afa158015611221573d6000803e3d6000fd5b505050506040513d602081101561123757600080fd5b810190808051906020019092919050505090506112b57f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966827f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b919050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b7f000000000000000000000000c00e94cb662c3520282e6f5717214004a7f2688881565b7f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff1615611620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561169557600080fd5b505af11580156116a9573d6000803e3d6000fd5b505050506040513d60208110156116bf57600080fd5b810190808051906020019092919050505014611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206d696e74206572726f720000000081525060200191505060405180910390fd5b50565b7f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f481565b60007f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a206f6e6c792062656e746f0000000081525060200191505060405180910390fd5b600160149054906101000a900460ff16156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6d706f756e6453747261746567793a20657869746564000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff16633af9e669306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561193b57600080fd5b505af115801561194f573d6000803e3d6000fd5b505050506040513d602081101561196557600080fd5b8101908080519060200190929190505050905060007f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f46040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a2157600080fd5b505afa158015611a35573d6000803e3d6000fd5b505050506040513d6020811015611a4b57600080fd5b81019080805190602001909291905050509050808211611bdd577f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff1663db006a757f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b2857600080fd5b505afa158015611b3c573d6000803e3d6000fd5b505050506040513d6020811015611b5257600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611b9957600080fd5b505af1925050508015611bcd57506040513d6020811015611bb957600080fd5b810190808051906020019092919050505060015b611bd657611bd8565b505b611c90565b7f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f473ffffffffffffffffffffffffffffffffffffffff1663852a12e3826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611c5057600080fd5b505af1925050508015611c8457506040513d6020811015611c7057600080fd5b810190808051906020019092919050505060015b611c8d57611c8f565b505b5b60007f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d1957600080fd5b505afa158015611d2d573d6000803e3d6000fd5b505050506040513d6020811015611d4357600080fd5b810190808051906020019092919050505090508481039350611dc67f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966827f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59973ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b60018060146101000a81548160ff021916908315150217905550505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396681565b7f000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600160149054906101000a900460ff16611f9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6d706f756e6453747261746567793a204e6f74206578697465640000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1683836040518082805190602001908083835b60208310611fe65780518252602082019150602081019050602083039250611fc3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612048576040519150601f19603f3d011682016040523d82523d6000602084013e61204d565b606091505b5050809150509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59981565b6000807f000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac73ffffffffffffffffffffffffffffffffffffffff1663e6a4390586866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561214c57600080fd5b505afa158015612160573d6000803e3d6000fd5b505050506040513d602081101561217657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561222c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6d706f756e6453747261746567793a2043616e6e6f7420636f6e7665727481525060200191505060405180910390fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561229557600080fd5b505afa1580156122a9573d6000803e3d6000fd5b505050506040513d60208110156122bf57600080fd5b810190808051906020019092919050505090506000808373ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561231b57600080fd5b505afa15801561232f573d6000803e3d6000fd5b505050506040513d606081101561234557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060006123a66103e5856129e290919063ffffffff16565b90506123d385858b73ffffffffffffffffffffffffffffffffffffffff166127e09092919063ffffffff16565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610156125ae5761242e816124206103e8866129e290919063ffffffff16565b612a7790919063ffffffff16565b612455836124476103e5886129e290919063ffffffff16565b6129e290919063ffffffff16565b8161245c57fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f6000888a600067ffffffffffffffff8111801561249757600080fd5b506040519080825280601f01601f1916602001820160405280156124ca5781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612542578082015181840152602081019050612527565b50505050905090810190601f16801561256f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561259157600080fd5b505af11580156125a5573d6000803e3d6000fd5b50505050612751565b6125d5816125c76103e8856129e290919063ffffffff16565b612a7790919063ffffffff16565b6125fc846125ee6103e5886129e290919063ffffffff16565b6129e290919063ffffffff16565b8161260357fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f8760008a600067ffffffffffffffff8111801561263e57600080fd5b506040519080825280601f01601f1916602001820160405280156126715781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156126e95780820151818401526020810190506126ce565b50505050905090810190601f1680156127165780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b505050505b50505050509392505050565b60008282840391508111156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f426f72696e674d6174683a20556e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106128c2578051825260208201915060208101905060208303925061289f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612924576040519150601f19603f3d011682016040523d82523d6000602084013e612929565b606091505b50915091508180156129695750600081511480612968575080806020019051602081101561295657600080fd5b81019080805190602001909291905050505b5b6129db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f426f72696e6745524332303a205472616e73666572206661696c65640000000081525060200191505060405180910390fd5b5050505050565b6000808214806129ff57508282838502925082816129fc57fe5b04145b612a71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f426f72696e674d6174683a204d756c204f766572666c6f77000000000000000081525060200191505060405180910390fd5b92915050565b6000818284019150811015612af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f426f72696e674d6174683a20416464204f766572666c6f77000000000000000081525060200191505060405180910390fd5b9291505056fea2646970667358221220fba71288910f734cf1da8df09e436943eb37bf7bee29e1ce101bb5e45a11df8964736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : bentobox_ (address): 0xF5BCE5077908a1b7370B9ae04AdC565EBd643966
Arg [1] : factory_ (address): 0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac
Arg [2] : token_ (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [3] : cToken_ (address): 0xC11b1268C1A384e55C48c2391d8d480264A3A7F4
Arg [4] : compToken_ (address): 0xc00e94Cb662C3520282E6f5717214004A7f26888
Arg [5] : weth_ (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966
Arg [1] : 000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [2] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [3] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [4] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [5] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

12639:6423:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16164:460;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2900:506;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15057:1099;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16688:458;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12962:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3488:340;;;:::i;:::-;;13037:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12922:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14789:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12884:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17262:1339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2046:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12808:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12997;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18609:450;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2073:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12848:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16164:460;3956:5;;;;;;;;;;3942:19;;:10;:19;;;3934:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16376:40:::1;16385:9;16396:4;16410;16376:8;:40::i;:::-;;16574:9;16534:36;16543:4;16549:5;16564:4;16534:8;:36::i;:::-;:49;;16526:90;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16164:460:::0;:::o;2900:506::-;3956:5;;;;;;;;;;3942:19;;:10;:19;;;3934:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:6:::1;3035:364;;;3113:1;3093:22;;:8;:22;;;;:34;;;;3119:8;3093:34;3085:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3227:8;3199:37;;3220:5;::::0;::::1;;;;;;;;3199:37;;;;;;;;;;;;3259:8;3251:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;3305:1;3282:12;;:25;;;;;;;;;;;;;;;;;;3035:364;;;3379:8;3364:12;;:23;;;;;;;;;;;;;;;;;;3035:364;2900:506:::0;;;:::o;15057:1099::-;15147:18;13614:8;13600:22;;:10;:22;;;13592:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13675:6;;;;;;;;;;;13674:7;13666:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15317:9:::1;15307:19;;:6;:19;;;15299:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15442:20;15465:6;:26;;;15500:4;15465:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15442:64;;15754:1;15700:6;:23;;;15724:25;15741:7;15724:12;:16;;:25;;;;:::i;:::-;15700:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:55;15692:97;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15892:20;15915:5;:15;;;15939:4;15915:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15892:53;;16066:42;16085:8;16095:12;16066:5;:18;;;;:42;;;;;:::i;:::-;16135:12;16121:27;;;;15057:1099:::0;;;;:::o;16688:458::-;16762:20;13614:8;13600:22;;:10;:22;;;13592:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13675:6;;;;;;;;;;;13674:7;13666:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16900:1:::1;16865:6;:23;;;16889:6;16865:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:36;16857:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17055:5;:15;;;17079:4;17055:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17040:45;;17096:42;17115:8;17125:12;17096:5;:18;;;;:42;;;;;:::i;:::-;16688:458:::0;;;:::o;12962:28::-;;;:::o;3488:340::-;3532:21;3556:12;;;;;;;;;;;3532:36;;3622:13;3608:27;;:10;:27;;;3600:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3738:13;3710:42;;3731:5;;;;;;;;;;3710:42;;;;;;;;;;;;3771:13;3763:5;;:21;;;;;;;;;;;;;;;;;;3818:1;3795:12;;:25;;;;;;;;;;;;;;;;;;3488:340;:::o;13037:18::-;;;;;;;;;;;;;:::o;12922:33::-;;;:::o;14789:145::-;13614:8;13600:22;;:10;:22;;;13592:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13675:6;;;;;;;;;;;13674:7;13666:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14892:1:::1;14869:6;:11;;;14881:6;14869:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:24;14861:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;14789:145:::0;:::o;12884:31::-;;;:::o;17262:1339::-;17333:18;13614:8;13600:22;;:10;:22;;;13592:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13675:6;;;;;;;;;;;13674:7;13666:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17438:20:::1;17461:6;:26;;;17496:4;17461:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17438:64;;17577:17;17597:5;:15;;;17621:6;17597:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17577:52;;17743:9;17727:12;:25;17723:446;;17907:6;:13;;;17921:6;:16;;;17946:4;17921:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17907:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;17903:62;;;;;;;17723:446;;;18112:6;:23;;;18136:9;18112:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;18108:50;;;;;;;17723:446;18232:14;18249:5;:15;;;18273:4;18249:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18232:47;;18373:7;18356:6;18349:32;18335:46;;18436:36;18455:8;18465:6;18436:5;:18;;;;:36;;;;;:::i;:::-;18589:4;18580:6:::0;::::1;:13;;;;;;;;;;;;;;;;;;13721:1;;;17262:1339:::0;;;:::o;2046:20::-;;;;;;;;;;;;:::o;12808:33::-;;;:::o;12997:::-;;;:::o;18609:450::-;18734:12;3956:5;;;;;;;;;;;3942:19;;:10;:19;;;3934:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18960:6:::1;;;;;;;;;;;18952:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19024:2;:7;;19039:5;19046:4;19024:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19010:41;;;;;18609:450:::0;;;;;:::o;2073:27::-;;;;;;;;;;;;;:::o;12848:29::-;;;:::o;13738:943::-;13854:17;13884:10;13903:7;:15;;;13927:9;13947:7;13903:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13884:73;;14001:1;13976:27;;13984:4;13976:27;;;;13968:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14053:16;14072:9;:19;;;14100:4;14072:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14053:53;;14118:16;14136;14158:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14117:59;;;;;;;;;14187:23;14213:17;14226:3;14213:8;:12;;:17;;;;:::i;:::-;14187:43;;14241:55;14280:4;14287:8;14248:9;14241:30;;;;:55;;;;;:::i;:::-;14323:7;14311:19;;:9;:19;;;14307:367;;;14393:39;14416:15;14393:18;14406:4;14393:8;:12;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;14359:31;14381:8;14359:17;14372:3;14359:8;:12;;:17;;;;:::i;:::-;:21;;:31;;;;:::i;:::-;:73;;;;;;14347:85;;14447:4;:9;;;14457:1;14460:9;14471:2;14485:1;14475:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14447:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14307:367;;;14567:39;14590:15;14567:18;14580:4;14567:8;:12;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;14533:31;14555:8;14533:17;14546:3;14533:8;:12;;:17;;;;:::i;:::-;:21;;:31;;;;:::i;:::-;:73;;;;;;14521:85;;14621:4;:9;;;14631;14642:1;14645:2;14659:1;14649:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14621:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14307:367;13738:943;;;;;;;;;;:::o;4493:138::-;4551:9;4596:1;4590;4586;:5;4582:9;;;4581:16;;4573:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4493:138;;;;:::o;10243:340::-;10362:12;10376:17;10405:5;10397:19;;7861:10;10440:12;;10454:2;10458:6;10417:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10397:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10361:105;;;;10485:7;:57;;;;;10512:1;10497:4;:11;:16;:44;;;;10528:4;10517:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10497:44;10485:57;10477:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10243:340;;;;;:::o;4639:155::-;4697:9;4732:1;4727;:6;:30;;;;4756:1;4751;4746;4742;:5;4738:9;;;4737:15;;;;;;:20;4727:30;4719:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4639:155;;;;:::o;4344:141::-;4402:9;4447:1;4441;4437;:5;4433:9;;;4432:16;;4424:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4344:141;;;;:::o

Swarm Source

ipfs://fba71288910f734cf1da8df09e436943eb37bf7bee29e1ce101bb5e45a11df89

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.