MOVR Price: $2.29 (-0.88%)

Contract

0x530d28814AF3155b6eAee3eE14E5F4d869A87703

Overview

MOVR Balance

Moonriver Chain LogoMoonriver Chain LogoMoonriver Chain Logo0 MOVR

MOVR Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Withdraw From Ga...73290592024-07-14 21:52:54560 days ago1720993974IN
0x530d2881...869A87703
0 MOVR0.013108291.25
Withdraw From Ga...57016872023-12-09 6:07:54779 days ago1702102074IN
0x530d2881...869A87703
0 MOVR0.002810082.9475
Withdraw From Ga...57016732023-12-09 6:04:12779 days ago1702101852IN
0x530d2881...869A87703
0 MOVR0.002809762.9475
Withdraw From Ga...55127642023-11-11 15:14:30806 days ago1699715670IN
0x530d2881...869A87703
0 MOVR0.003031642.896575
Deposit Underlyi...54880842023-11-07 23:30:30810 days ago1699399830IN
0x530d2881...869A87703
0 MOVR0.002349772.75
Deposit Underlyi...54158992023-10-28 9:14:24820 days ago1698484464IN
0x530d2881...869A87703
0 MOVR0.004433022.75
Withdraw From Ga...51073322023-09-14 9:11:54864 days ago1694682714IN
0x530d2881...869A87703
0 MOVR0.003302012.9475
Deposit Underlyi...50204882023-09-02 5:20:06877 days ago1693632006IN
0x530d2881...869A87703
0 MOVR0.00623372.895
Withdraw From Ga...45328652023-06-25 5:30:06946 days ago1687671006IN
0x530d2881...869A87703
0 MOVR0.002558142.9475
Withdraw From Ga...45328462023-06-25 5:26:18946 days ago1687670778IN
0x530d2881...869A87703
0 MOVR0.002507342.9475
Withdraw From Ga...42215062023-05-11 18:56:06990 days ago1683831366IN
0x530d2881...869A87703
0 MOVR0.002200532.75
Withdraw From Ga...42214692023-05-11 18:48:12990 days ago1683830892IN
0x530d2881...869A87703
0 MOVR0.005716822.75
Withdraw From Ga...40462642023-04-16 5:07:121016 days ago1681621632IN
0x530d2881...869A87703
0 MOVR0.002939971.25
Withdraw From Ga...38182162023-03-14 16:23:181048 days ago1678810998IN
0x530d2881...869A87703
0 MOVR0.008231552.5
Withdraw From Ga...35986622023-02-11 6:32:301079 days ago1676097150IN
0x530d2881...869A87703
0 MOVR0.001761842.5
Withdraw From Ga...35224742023-01-31 11:20:541090 days ago1675164054IN
0x530d2881...869A87703
0 MOVR0.001654942.5
Withdraw From Ga...35157052023-01-30 12:15:121091 days ago1675080912IN
0x530d2881...869A87703
0 MOVR0.001698812.5
Deposit Underlyi...35156582023-01-30 12:05:481091 days ago1675080348IN
0x530d2881...869A87703
0 MOVR0.002904842.5
Withdraw From Ga...32973022022-12-30 7:43:361122 days ago1672386216IN
0x530d2881...869A87703
0 MOVR0.001149491
Withdraw From Ga...32972982022-12-30 7:42:421122 days ago1672386162IN
0x530d2881...869A87703
0 MOVR0.000889711
Withdraw From Ga...32816432022-12-28 2:09:001125 days ago1672193340IN
0x530d2881...869A87703
0 MOVR0.000753261
Withdraw From Ga...32681062022-12-26 3:53:361127 days ago1672026816IN
0x530d2881...869A87703
0 MOVR0.001492591.01
Withdraw From Ga...31264092022-12-04 18:46:541148 days ago1670179614IN
0x530d2881...869A87703
0 MOVR0.001813742.5
Withdraw From Ga...31064582022-12-01 22:00:541151 days ago1669932054IN
0x530d2881...869A87703
0 MOVR0.0324764242.13854222
Withdraw From Ga...29627442022-11-10 23:44:301172 days ago1668123870IN
0x530d2881...869A87703
0 MOVR0.000720931.01
View all transactions

View more zero value Internal Transactions in Advanced View mode

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GaugeHelper

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;

import "./Ownable.sol";
import "./SafeERC20.sol";

interface IHToken is IERC20 {
    function mint() external payable returns (uint); //CEther
    function mint(uint mintAmount) external returns (uint);
    function redeem(uint redeemTokens) external returns (uint);
    function underlying() external returns (address);
}

interface IBAMMv2 is IERC20 {
    function deposit(uint amount) external;
    function withdraw(uint numShares) external;
    function getCollateralValue() external view returns(uint);
    function collateralCount() external view returns(uint);
    function collaterals(uint index) external view returns(address);
    function fetchPrice(address collat) external view returns(uint);
}

interface IGauge is IERC20 {
    function deposit(uint _value, address to) external;
    function withdraw(uint _value) external;
}

interface IMinter {
    function mint(address gauge_addr) external;
    function mint_many(address[] memory gauge_addr) external;
    function mint_for(address gauge_addr, address _for) external;
    function toggle_approve_mint(address minting_user) external;
}

contract GaugeHelper is Ownable {
    using SafeERC20 for IERC20;    

    /// @notice Deposit the underlying token to the Hundred market, 
    ///         then deposit the hToken to the BAMM pool, 
    ///         then deposit the BAMM token to the gauge,
    ///         finally sending the gauge token to the destination address.
    /// @param underlying Underlying token to deposit, e.g. USDC.
    /// @param hToken Hundred market address, e.g. hUSDC
    /// @param bamm Bamm pool address, e.g. bhUSDC
    /// @param gauge Gauge address, e.g. bhUSDC-gauge
    /// @param underlyingAmount Underlying token shares to deposit.
    /// @param to The recipient of the gauge tokens.
    function depositUnderlyingToBammGauge(
        address underlying,
        address hToken,
        address bamm,
        address gauge, 
        uint underlyingAmount, 
        address to
    ) external {
        IERC20 Underlying = IERC20(underlying);
        Underlying.safeTransferFrom(msg.sender, address(this), underlyingAmount);
        Underlying.approve(hToken, underlyingAmount);
        IHToken HToken = IHToken(hToken);
        require(HToken.mint(underlyingAmount) == 0, ""); //0 is success
        uint hTokenBalance = HToken.balanceOf(address(this));
        HToken.approve(bamm, hTokenBalance);
        IBAMMv2 Bamm = IBAMMv2(bamm);
        Bamm.deposit(hTokenBalance);
        uint shares = Bamm.balanceOf(address(this));
        Bamm.approve(gauge, shares);
        IGauge Gauge = IGauge(gauge);
        Gauge.deposit(shares, to);
    }

    /// @notice Deposit the underlying token to the Hundred market, 
    ///         then deposit the hToken to the corresponding gauge, 
    ///         finally sending the gauge token to the destination address.
    /// @param underlying Underlying token to deposit, e.g. USDC.
    /// @param hToken Hundred market address, e.g. hUSDC
    /// @param gauge Gauge address, e.g. bhUSDC-gauge
    /// @param underlyingAmount Underlying token shares to deposit.
    /// @param to The recipient of the gauge tokens.
    function depositUnderlyingToGauge(
        address underlying,
        address hToken,
        address gauge, 
        uint underlyingAmount, 
        address to
    ) external {
        IERC20 Underlying = IERC20(underlying);
        Underlying.safeTransferFrom(msg.sender, address(this), underlyingAmount);
        Underlying.approve(hToken, underlyingAmount);
        IHToken HToken = IHToken(hToken);
        require(HToken.mint(underlyingAmount) == 0, ""); //0 is success
        uint hTokenBalance = HToken.balanceOf(address(this));
        HToken.approve(gauge, hTokenBalance);
        IGauge Gauge = IGauge(gauge);
        Gauge.deposit(hTokenBalance, to);
    }

    /// @notice Deposit the underlying token to the Hundred market, 
    ///         then deposit the hToken to the corresponding gauge, 
    ///         finally sending the gauge token to the destination address.
    /// @param hToken Hundred market address, e.g. hUSDC
    /// @param gauge Gauge address, e.g. bhUSDC-gauge
    /// @param to The recipient of the gauge tokens.
    function depositEtherToGauge(
        address hToken,
        address gauge, 
        address to
    ) external payable {
        IHToken HToken = IHToken(hToken);
        require(HToken.mint{value: msg.value}() == 0, ""); //0 is success
        uint hTokenBalance = HToken.balanceOf(address(this));
        HToken.approve(gauge, hTokenBalance);
        IGauge Gauge = IGauge(gauge);
        Gauge.deposit(hTokenBalance, to);
    }

    /// @notice Attempts to redeem an hToken to underlying and transfer the
    ///         underlying to the user. If the redeem fails, transfer the
    ///         hToken instead.
    function _tryRedeemAndTransfer(
        address hToken,
        address payable to,
        bool isCEther
    ) internal {
        IHToken HToken = IHToken(hToken);
        uint hTokenBalance = HToken.balanceOf(address(this));
        if (hTokenBalance == 0) return;
        uint result = HToken.redeem(hTokenBalance);
        if (result == 0) {
            if (isCEther) {
                to.transfer(address(this).balance);
            }
            else {
                IERC20 Underlying = IERC20(HToken.underlying());
                Underlying.safeTransfer(to, Underlying.balanceOf(address(this)));
            }
        }
        else { //Failed to redeem, send hTokens to user
            IERC20(HToken).safeTransfer(to, hTokenBalance);
        }
    }

    /// @notice Claims HND rewards for the msg.sender, transfers gauge tokens
    ///         from the sender to this contract and then withdraws the BAMM
    ///         lp tokens from the gauge, withdraws the hTokens from the BAMM
    ///         (both the BAMM's underlying token and any other liquidated hTokens),
    ///         then redeems the hTokens into underlying and transfers all to the
    ///         destination address. If there is not enough liquidity to redeem
    ///         any of the hTokens, transfers the hToken itself instead.
    /// @param minter Gauge's minter address, where HND rewards can be claimed
    /// @param gauge Gauge address, e.g. bhUSDC-gauge
    /// @param bamm Bamm pool address, e.g. bhUSDC
    /// @param hToken Hundred market address, e.g. hUSDC
    /// @param gaugeAmount Gauge tokens to withdraw.
    /// @param to The recipient of the underlying and/or hTokens.
    function withdrawFromBammGaugeToUnderlying(
        address minter,
        address gauge,
        address bamm,
        address hToken,
        uint gaugeAmount,
        address payable to,
        address hETH
    ) external {
        IMinter(minter).mint_for(gauge, msg.sender); //Requires toggle_approve_mint
        IGauge Gauge = IGauge(gauge);
        IERC20(Gauge).safeTransferFrom(msg.sender, address(this), gaugeAmount);
        Gauge.withdraw(gaugeAmount);
        IBAMMv2 Bamm = IBAMMv2(bamm);
        Bamm.withdraw(Bamm.balanceOf(address(this)));
        _tryRedeemAndTransfer(hToken, to, hToken == hETH);
        uint collateralCount = Bamm.collateralCount();
        for (uint i = 0; i < collateralCount; i++) {
            address collateral = Bamm.collaterals(i);
            _tryRedeemAndTransfer(collateral, to, collateral == hETH);
        }
    }

    /// @notice Claims HND rewards for the msg.sender, transfers gauge tokens
    ///         from the sender to this contract and then withdraws the 
    ///         hToken from the gauge, redeems the hTokens to underlying and
    ///         transfers to the destination address. If there is not enough 
    ///         liquidity to redeem the hToken, transfers the hToken itself instead.
    /// @param minter Gauge's minter address, where HND rewards can be claimed
    /// @param gauge Gauge address, e.g. bhUSDC-gauge
    /// @param hToken Hundred market address, e.g. hUSDC
    /// @param gaugeAmount Gauge tokens to withdraw.
    /// @param to The recipient of the underlying and/or hTokens.
    function withdrawFromGaugeToUnderlying(
        address minter,
        address gauge,
        address hToken,
        uint gaugeAmount,
        address payable to,
        bool isCEther
    ) external {
        IMinter(minter).mint_for(gauge, msg.sender); //Requires toggle_approve_mint
        IGauge Gauge = IGauge(gauge);
        IERC20(Gauge).safeTransferFrom(msg.sender, address(this), gaugeAmount);
        Gauge.withdraw(gaugeAmount);
        _tryRedeemAndTransfer(hToken, to, isCEther);
    }

    /// @notice Claims HND rewards for the msg.sender, transfers gauge tokens
    ///         from the sender to this contract and then withdraws the 
    ///         hToken from the source gauge, and deposits it to the 
    ///         destination gauge, on behalf of the `to` address.
    /// @param minter Gauge's minter address, where HND rewards can be claimed
    /// @param gaugeFrom Source gauge address, e.g. bhUSDC-gauge (old)
    /// @param gaugeTo Target gauge address, e.g. bhUSDC-gauge (new)
    /// @param hToken Hundred market address, e.g. hUSDC
    /// @param gaugeAmount Gauge tokens to migrate.
    /// @param to The recipient of the destination gaugeToken.
    function migrateGauge(
        address minter,
        address gaugeFrom,
        address hToken,
        address gaugeTo,
        uint gaugeAmount,
        address to
    ) external {
        IMinter(minter).mint_for(gaugeFrom, msg.sender); //Requires toggle_approve_mint
        IGauge GaugeFrom = IGauge(gaugeFrom);
        IERC20(GaugeFrom).safeTransferFrom(msg.sender, address(this), gaugeAmount);
        GaugeFrom.withdraw(gaugeAmount);
        IERC20 HToken = IERC20(hToken);
        uint hTokenBalance = HToken.balanceOf(address(this));
        HToken.approve(gaugeTo, hTokenBalance);
        IGauge GaugeTo = IGauge(gaugeTo);
        GaugeTo.deposit(hTokenBalance, to);
    }

    receive() external payable {}

    fallback() external payable {}

    function rescueErc20(address token) external {
        IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this)));
    }

    function rescueETH() external {
        payable(owner()).transfer(address(this).balance);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint shares) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint shares) external returns (bool);
    function transferFrom(address sender, address recipient, uint shares) external returns (bool);
    function permit(address target, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"hToken","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"depositEtherToGauge","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"address","name":"hToken","type":"address"},{"internalType":"address","name":"bamm","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositUnderlyingToBammGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"address","name":"hToken","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositUnderlyingToGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"gaugeFrom","type":"address"},{"internalType":"address","name":"hToken","type":"address"},{"internalType":"address","name":"gaugeTo","type":"address"},{"internalType":"uint256","name":"gaugeAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"migrateGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescueErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"address","name":"bamm","type":"address"},{"internalType":"address","name":"hToken","type":"address"},{"internalType":"uint256","name":"gaugeAmount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"hETH","type":"address"}],"name":"withdrawFromBammGaugeToUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"address","name":"hToken","type":"address"},{"internalType":"uint256","name":"gaugeAmount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"bool","name":"isCEther","type":"bool"}],"name":"withdrawFromGaugeToUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b158061007e6000396000f3fe60806040526004361061009a5760003560e01c80635cc0c277116100615780635cc0c27714610138578063715018a6146101585780638da5cb5b1461016d578063a611782814610199578063dc3799fc146101ac578063f2fde38b146101cc57005b80631d062e5f146100a35780631fb0e4da146100c357806320800a00146100e35780632b88c769146100f857806332b937141461011857005b366100a157005b005b3480156100af57600080fd5b506100a16100be366004611849565b6101ec565b3480156100cf57600080fd5b506100a16100de366004611849565b6105fe565b3480156100ef57600080fd5b506100a1610845565b34801561010457600080fd5b506100a16101133660046117bd565b610882565b34801561012457600080fd5b506100a161013336600461194f565b610920565b34801561014457600080fd5b506100a16101533660046119b7565b610bcd565b34801561016457600080fd5b506100a1610cb4565b34801561017957600080fd5b50600054604080516001600160a01b039092168252519081900360200190f35b6100a16101a73660046117fe565b610d1a565b3480156101b857600080fd5b506100a16101c73660046118c2565b610f28565b3480156101d857600080fd5b506100a16101e73660046117bd565b611227565b856102026001600160a01b0382163330866112ef565b60405163095ea7b360e01b81526001600160a01b0387811660048301526024820185905282169063095ea7b390604401602060405180830381600087803b15801561024c57600080fd5b505af1158015610260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102849190611a22565b5060405163140e25ad60e31b81526004810184905286906001600160a01b0382169063a0712d6890602401602060405180830381600087803b1580156102c957600080fd5b505af11580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190611a3f565b1561032d5760405162461bcd60e51b815260206004820152600060248201526044015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561036f57600080fd5b505afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190611a3f565b60405163095ea7b360e01b81526001600160a01b038981166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b1580156103f557600080fd5b505af1158015610409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042d9190611a22565b5060405163b6b55f2560e01b81526004810182905287906001600160a01b0382169063b6b55f2590602401600060405180830381600087803b15801561047257600080fd5b505af1158015610486573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092506001600160a01b03841691506370a082319060240160206040518083038186803b1580156104cc57600080fd5b505afa1580156104e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105049190611a3f565b60405163095ea7b360e01b81526001600160a01b038a81166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b15801561055257600080fd5b505af1158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038781166024830152899190821690636e553f6590604401600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b50505050505050505050505050505050565b6040516327f18ae360e01b81526001600160a01b0386811660048301523360248301528716906327f18ae390604401600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b508792506106779150506001600160a01b0382163330866112ef565b604051632e1a7d4d60e01b8152600481018490526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152879250600091506001600160a01b038316906370a082319060240160206040518083038186803b15801561071557600080fd5b505afa158015610729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074d9190611a3f565b60405163095ea7b360e01b81526001600160a01b038881166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b15801561079b57600080fd5b505af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d39190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038581166024830152879190821690636e553f6590604401600060405180830381600087803b15801561082157600080fd5b505af1158015610835573d6000803e3d6000fd5b5050505050505050505050505050565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561087f573d6000803e3d6000fd5b50565b61087f6108976000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a08231906024015b60206040518083038186803b1580156108d757600080fd5b505afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f9190611a3f565b6001600160a01b0384169190611360565b846109366001600160a01b0382163330866112ef565b60405163095ea7b360e01b81526001600160a01b0386811660048301526024820185905282169063095ea7b390604401602060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b89190611a22565b5060405163140e25ad60e31b81526004810184905285906001600160a01b0382169063a0712d6890602401602060405180830381600087803b1580156109fd57600080fd5b505af1158015610a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a359190611a3f565b15610a5c5760405162461bcd60e51b81526020600482015260006024820152604401610324565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610a9e57600080fd5b505afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190611a3f565b60405163095ea7b360e01b81526001600160a01b038881166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038581166024830152879190821690636e553f6590604401600060405180830381600087803b158015610baa57600080fd5b505af1158015610bbe573d6000803e3d6000fd5b50505050505050505050505050565b6040516327f18ae360e01b81526001600160a01b0386811660048301523360248301528716906327f18ae390604401600060405180830381600087803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b50879250610c469150506001600160a01b0382163330876112ef565b604051632e1a7d4d60e01b8152600481018590526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015610c8857600080fd5b505af1158015610c9c573d6000803e3d6000fd5b50505050610cab858484611395565b50505050505050565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610324565b610d1860006115aa565b565b6000839050806001600160a01b0316631249c58b346040518263ffffffff1660e01b81526004016020604051808303818588803b158015610d5a57600080fd5b505af1158015610d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d939190611a3f565b15610dba5760405162461bcd60e51b81526020600482015260006024820152604401610324565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611a3f565b60405163095ea7b360e01b81526001600160a01b038681166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b158015610e8257600080fd5b505af1158015610e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba9190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038481166024830152859190821690636e553f6590604401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050505050505050565b6040516327f18ae360e01b81526001600160a01b0387811660048301523360248301528816906327f18ae390604401600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b50889250610fa19150506001600160a01b0382163330876112ef565b604051632e1a7d4d60e01b8152600481018590526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528892506001600160a01b0383169150632e1a7d4d9082906370a082319060240160206040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190611a3f565b6040518263ffffffff1660e01b815260040161109a91815260200190565b600060405180830381600087803b1580156110b457600080fd5b505af11580156110c8573d6000803e3d6000fd5b505050506110eb8685856001600160a01b0316896001600160a01b031614611395565b6000816001600160a01b031663b6faaf8a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112657600080fd5b505afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e9190611a3f565b905060005b8181101561121a576040516324c1173b60e01b8152600481018290526000906001600160a01b038516906324c1173b9060240160206040518083038186803b1580156111ae57600080fd5b505afa1580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e691906117e1565b90506112078188886001600160a01b0316846001600160a01b031614611395565b508061121281611a93565b915050611163565b5050505050505050505050565b6000546001600160a01b031633146112815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610324565b6001600160a01b0381166112e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610324565b61087f816115aa565b6040516001600160a01b038085166024830152831660448201526064810182905261135a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115fa565b50505050565b6040516001600160a01b03831660248201526044810182905261139090849063a9059cbb60e01b90606401611323565b505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156113d957600080fd5b505afa1580156113ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114119190611a3f565b90508061141f575050505050565b60405163db006a7560e01b8152600481018290526000906001600160a01b0384169063db006a7590602401602060405180830381600087803b15801561146457600080fd5b505af1158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190611a3f565b90508061158e5783156114e4576040516001600160a01b038616904780156108fc02916000818181858888f193505050501580156114de573d6000803e3d6000fd5b506115a2565b6000836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155991906117e1565b6040516370a0823160e01b81523060048201529091506114de9087906001600160a01b038416906370a08231906024016108bf565b6115a26001600160a01b0384168684611360565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61160c826001600160a01b0316611781565b6116585760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006044820152606401610324565b600080836001600160a01b0316836040516116739190611a58565b6000604051808303816000865af19150503d80600081146116b0576040519150601f19603f3d011682016040523d82523d6000602084013e6116b5565b606091505b5091509150816117075760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646044820152606401610324565b80511561135a57808060200190518101906117229190611a22565b61135a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610324565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906117b55750808214155b949350505050565b6000602082840312156117cf57600080fd5b81356117da81611abc565b9392505050565b6000602082840312156117f357600080fd5b81516117da81611abc565b60008060006060848603121561181357600080fd5b833561181e81611abc565b9250602084013561182e81611abc565b9150604084013561183e81611abc565b809150509250925092565b60008060008060008060c0878903121561186257600080fd5b863561186d81611abc565b9550602087013561187d81611abc565b9450604087013561188d81611abc565b9350606087013561189d81611abc565b92506080870135915060a08701356118b481611abc565b809150509295509295509295565b600080600080600080600060e0888a0312156118dd57600080fd5b87356118e881611abc565b965060208801356118f881611abc565b9550604088013561190881611abc565b9450606088013561191881611abc565b93506080880135925060a088013561192f81611abc565b915060c088013561193f81611abc565b8091505092959891949750929550565b600080600080600060a0868803121561196757600080fd5b853561197281611abc565b9450602086013561198281611abc565b9350604086013561199281611abc565b92506060860135915060808601356119a981611abc565b809150509295509295909350565b60008060008060008060c087890312156119d057600080fd5b86356119db81611abc565b955060208701356119eb81611abc565b945060408701356119fb81611abc565b9350606087013592506080870135611a1281611abc565b915060a08701356118b481611ad1565b600060208284031215611a3457600080fd5b81516117da81611ad1565b600060208284031215611a5157600080fd5b5051919050565b6000825160005b81811015611a795760208186018101518583015201611a5f565b81811115611a88576000828501525b509190910192915050565b6000600019821415611ab557634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038116811461087f57600080fd5b801515811461087f57600080fdfea26469706673582212206454ff04d9db491d451351c6bea590d0e0fe4450dba82d9c3fc54a838051601564736f6c63430008070033

Deployed Bytecode

0x60806040526004361061009a5760003560e01c80635cc0c277116100615780635cc0c27714610138578063715018a6146101585780638da5cb5b1461016d578063a611782814610199578063dc3799fc146101ac578063f2fde38b146101cc57005b80631d062e5f146100a35780631fb0e4da146100c357806320800a00146100e35780632b88c769146100f857806332b937141461011857005b366100a157005b005b3480156100af57600080fd5b506100a16100be366004611849565b6101ec565b3480156100cf57600080fd5b506100a16100de366004611849565b6105fe565b3480156100ef57600080fd5b506100a1610845565b34801561010457600080fd5b506100a16101133660046117bd565b610882565b34801561012457600080fd5b506100a161013336600461194f565b610920565b34801561014457600080fd5b506100a16101533660046119b7565b610bcd565b34801561016457600080fd5b506100a1610cb4565b34801561017957600080fd5b50600054604080516001600160a01b039092168252519081900360200190f35b6100a16101a73660046117fe565b610d1a565b3480156101b857600080fd5b506100a16101c73660046118c2565b610f28565b3480156101d857600080fd5b506100a16101e73660046117bd565b611227565b856102026001600160a01b0382163330866112ef565b60405163095ea7b360e01b81526001600160a01b0387811660048301526024820185905282169063095ea7b390604401602060405180830381600087803b15801561024c57600080fd5b505af1158015610260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102849190611a22565b5060405163140e25ad60e31b81526004810184905286906001600160a01b0382169063a0712d6890602401602060405180830381600087803b1580156102c957600080fd5b505af11580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190611a3f565b1561032d5760405162461bcd60e51b815260206004820152600060248201526044015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561036f57600080fd5b505afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190611a3f565b60405163095ea7b360e01b81526001600160a01b038981166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b1580156103f557600080fd5b505af1158015610409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042d9190611a22565b5060405163b6b55f2560e01b81526004810182905287906001600160a01b0382169063b6b55f2590602401600060405180830381600087803b15801561047257600080fd5b505af1158015610486573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092506001600160a01b03841691506370a082319060240160206040518083038186803b1580156104cc57600080fd5b505afa1580156104e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105049190611a3f565b60405163095ea7b360e01b81526001600160a01b038a81166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b15801561055257600080fd5b505af1158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038781166024830152899190821690636e553f6590604401600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b50505050505050505050505050505050565b6040516327f18ae360e01b81526001600160a01b0386811660048301523360248301528716906327f18ae390604401600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b508792506106779150506001600160a01b0382163330866112ef565b604051632e1a7d4d60e01b8152600481018490526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152879250600091506001600160a01b038316906370a082319060240160206040518083038186803b15801561071557600080fd5b505afa158015610729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074d9190611a3f565b60405163095ea7b360e01b81526001600160a01b038881166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b15801561079b57600080fd5b505af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d39190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038581166024830152879190821690636e553f6590604401600060405180830381600087803b15801561082157600080fd5b505af1158015610835573d6000803e3d6000fd5b5050505050505050505050505050565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561087f573d6000803e3d6000fd5b50565b61087f6108976000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a08231906024015b60206040518083038186803b1580156108d757600080fd5b505afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f9190611a3f565b6001600160a01b0384169190611360565b846109366001600160a01b0382163330866112ef565b60405163095ea7b360e01b81526001600160a01b0386811660048301526024820185905282169063095ea7b390604401602060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b89190611a22565b5060405163140e25ad60e31b81526004810184905285906001600160a01b0382169063a0712d6890602401602060405180830381600087803b1580156109fd57600080fd5b505af1158015610a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a359190611a3f565b15610a5c5760405162461bcd60e51b81526020600482015260006024820152604401610324565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610a9e57600080fd5b505afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190611a3f565b60405163095ea7b360e01b81526001600160a01b038881166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038581166024830152879190821690636e553f6590604401600060405180830381600087803b158015610baa57600080fd5b505af1158015610bbe573d6000803e3d6000fd5b50505050505050505050505050565b6040516327f18ae360e01b81526001600160a01b0386811660048301523360248301528716906327f18ae390604401600060405180830381600087803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b50879250610c469150506001600160a01b0382163330876112ef565b604051632e1a7d4d60e01b8152600481018590526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015610c8857600080fd5b505af1158015610c9c573d6000803e3d6000fd5b50505050610cab858484611395565b50505050505050565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610324565b610d1860006115aa565b565b6000839050806001600160a01b0316631249c58b346040518263ffffffff1660e01b81526004016020604051808303818588803b158015610d5a57600080fd5b505af1158015610d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d939190611a3f565b15610dba5760405162461bcd60e51b81526020600482015260006024820152604401610324565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611a3f565b60405163095ea7b360e01b81526001600160a01b038681166004830152602482018390529192509083169063095ea7b390604401602060405180830381600087803b158015610e8257600080fd5b505af1158015610e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba9190611a22565b50604051636e553f6560e01b8152600481018290526001600160a01b038481166024830152859190821690636e553f6590604401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050505050505050565b6040516327f18ae360e01b81526001600160a01b0387811660048301523360248301528816906327f18ae390604401600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b50889250610fa19150506001600160a01b0382163330876112ef565b604051632e1a7d4d60e01b8152600481018590526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528892506001600160a01b0383169150632e1a7d4d9082906370a082319060240160206040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190611a3f565b6040518263ffffffff1660e01b815260040161109a91815260200190565b600060405180830381600087803b1580156110b457600080fd5b505af11580156110c8573d6000803e3d6000fd5b505050506110eb8685856001600160a01b0316896001600160a01b031614611395565b6000816001600160a01b031663b6faaf8a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112657600080fd5b505afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e9190611a3f565b905060005b8181101561121a576040516324c1173b60e01b8152600481018290526000906001600160a01b038516906324c1173b9060240160206040518083038186803b1580156111ae57600080fd5b505afa1580156111c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e691906117e1565b90506112078188886001600160a01b0316846001600160a01b031614611395565b508061121281611a93565b915050611163565b5050505050505050505050565b6000546001600160a01b031633146112815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610324565b6001600160a01b0381166112e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610324565b61087f816115aa565b6040516001600160a01b038085166024830152831660448201526064810182905261135a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115fa565b50505050565b6040516001600160a01b03831660248201526044810182905261139090849063a9059cbb60e01b90606401611323565b505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156113d957600080fd5b505afa1580156113ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114119190611a3f565b90508061141f575050505050565b60405163db006a7560e01b8152600481018290526000906001600160a01b0384169063db006a7590602401602060405180830381600087803b15801561146457600080fd5b505af1158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190611a3f565b90508061158e5783156114e4576040516001600160a01b038616904780156108fc02916000818181858888f193505050501580156114de573d6000803e3d6000fd5b506115a2565b6000836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155991906117e1565b6040516370a0823160e01b81523060048201529091506114de9087906001600160a01b038416906370a08231906024016108bf565b6115a26001600160a01b0384168684611360565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61160c826001600160a01b0316611781565b6116585760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006044820152606401610324565b600080836001600160a01b0316836040516116739190611a58565b6000604051808303816000865af19150503d80600081146116b0576040519150601f19603f3d011682016040523d82523d6000602084013e6116b5565b606091505b5091509150816117075760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646044820152606401610324565b80511561135a57808060200190518101906117229190611a22565b61135a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610324565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906117b55750808214155b949350505050565b6000602082840312156117cf57600080fd5b81356117da81611abc565b9392505050565b6000602082840312156117f357600080fd5b81516117da81611abc565b60008060006060848603121561181357600080fd5b833561181e81611abc565b9250602084013561182e81611abc565b9150604084013561183e81611abc565b809150509250925092565b60008060008060008060c0878903121561186257600080fd5b863561186d81611abc565b9550602087013561187d81611abc565b9450604087013561188d81611abc565b9350606087013561189d81611abc565b92506080870135915060a08701356118b481611abc565b809150509295509295509295565b600080600080600080600060e0888a0312156118dd57600080fd5b87356118e881611abc565b965060208801356118f881611abc565b9550604088013561190881611abc565b9450606088013561191881611abc565b93506080880135925060a088013561192f81611abc565b915060c088013561193f81611abc565b8091505092959891949750929550565b600080600080600060a0868803121561196757600080fd5b853561197281611abc565b9450602086013561198281611abc565b9350604086013561199281611abc565b92506060860135915060808601356119a981611abc565b809150509295509295909350565b60008060008060008060c087890312156119d057600080fd5b86356119db81611abc565b955060208701356119eb81611abc565b945060408701356119fb81611abc565b9350606087013592506080870135611a1281611abc565b915060a08701356118b481611ad1565b600060208284031215611a3457600080fd5b81516117da81611ad1565b600060208284031215611a5157600080fd5b5051919050565b6000825160005b81811015611a795760208186018101518583015201611a5f565b81811115611a88576000828501525b509190910192915050565b6000600019821415611ab557634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038116811461087f57600080fd5b801515811461087f57600080fdfea26469706673582212206454ff04d9db491d451351c6bea590d0e0fe4450dba82d9c3fc54a838051601564736f6c63430008070033

Block Transaction Gas Used Reward
view all blocks collator

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.