ETH Price: $2,519.10 (+0.43%)

Contract

0xC234c62c8C09687DFf0d9047e40042cd166F3600
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Pending Gove...124287682021-05-13 22:21:201263 days ago1620944480IN
0xC234c62c...d166F3600
0 ETH0.0056808120
Set Default Unis...124287642021-05-13 22:20:281263 days ago1620944428IN
0xC234c62c...d166F3600
0 ETH0.0056676120
Set Swap Out Req...124287482021-05-13 22:17:411263 days ago1620944261IN
0xC234c62c...d166F3600
0 ETH0.0036246120
Set Valid Balanc...124287482021-05-13 22:17:411263 days ago1620944261IN
0xC234c62c...d166F3600
0 ETH0.00573516120
Set Valid Sub Fa...124287402021-05-13 22:16:201263 days ago1620944180IN
0xC234c62c...d166F3600
0 ETH0.00590352120
Set Valid Sub Fa...124287402021-05-13 22:16:201263 days ago1620944180IN
0xC234c62c...d166F3600
0 ETH0.00590496120
Set Valid Loan F...124287312021-05-13 22:14:481263 days ago1620944088IN
0xC234c62c...d166F3600
0 ETH0.00556548120
Set Valid Sub Fa...124287312021-05-13 22:14:481263 days ago1620944088IN
0xC234c62c...d166F3600
0 ETH0.00616872120
Set Valid Sub Fa...124287312021-05-13 22:14:481263 days ago1620944088IN
0xC234c62c...d166F3600
0 ETH0.00616872120
Set Valid Sub Fa...124287312021-05-13 22:14:481263 days ago1620944088IN
0xC234c62c...d166F3600
0 ETH0.00616872120
Set Valid Pool F...124287072021-05-13 22:09:171263 days ago1620943757IN
0xC234c62c...d166F3600
0 ETH0.00556536120
Set Collateral A...124287072021-05-13 22:09:171263 days ago1620943757IN
0xC234c62c...d166F3600
0 ETH0.0070662120
Set Liquidity As...124287052021-05-13 22:09:021263 days ago1620943742IN
0xC234c62c...d166F3600
0 ETH0.0079908120
Set Calc124287042021-05-13 22:09:011263 days ago1620943741IN
0xC234c62c...d166F3600
0 ETH0.00557064120
Set Calc124287042021-05-13 22:09:011263 days ago1620943741IN
0xC234c62c...d166F3600
0 ETH0.0055692120
Set Calc124287012021-05-13 22:08:261263 days ago1620943706IN
0xC234c62c...d166F3600
0 ETH0.00557064120
Set Maple Treasu...124286972021-05-13 22:07:341263 days ago1620943654IN
0xC234c62c...d166F3600
0 ETH0.00571716120
Set Price Oracle124286972021-05-13 22:07:341263 days ago1620943654IN
0xC234c62c...d166F3600
0 ETH0.00577092120
Set Price Oracle124286972021-05-13 22:07:341263 days ago1620943654IN
0xC234c62c...d166F3600
0 ETH0.00577092120
0x60a06040124285772021-05-13 21:42:061263 days ago1620942126IN
 Create: MapleGlobals
0 ETH0.24181188120

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MapleGlobals

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-13
*/

// SPDX-License-Identifier:  AGPL-3.0-or-later // hevm: flattened sources of contracts/MapleGlobals.sol
pragma solidity =0.6.11 >=0.6.0 <0.8.0;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
/* pragma solidity >=0.6.0 <0.8.0; */

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

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

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

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

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

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

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

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

////// contracts/interfaces/IERC20Details.sol
/* pragma solidity 0.6.11; */

/* import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */

interface IERC20Details is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint256);

}

////// contracts/interfaces/IOracle.sol
/* pragma solidity 0.6.11; */

interface IOracle {

    function priceFeed() external view returns (address);

    function globals() external view returns (address);

    function assetAddress() external view returns (address);

    function manualOverride() external view returns (bool);

    function manualPrice() external view returns (int256);

    function getLatestPrice() external view returns (int256);
    
    function changeAggregator(address) external;

    function getAssetAddress() external view returns (address);
    
    function getDenomination() external view returns (bytes32);
    
    function setManualPrice(int256) external;
    
    function setManualOverride(bool) external;

}

////// contracts/interfaces/ISubFactory.sol
/* pragma solidity 0.6.11; */

interface ISubFactory {

    function factoryType() external view returns (uint8);

}

////// lib/openzeppelin-contracts/contracts/math/SafeMath.sol
/* pragma solidity >=0.6.0 <0.8.0; */

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

////// contracts/MapleGlobals.sol
/* pragma solidity 0.6.11; */
/* pragma experimental ABIEncoderV2; */

/* import "lib/openzeppelin-contracts/contracts/math/SafeMath.sol"; */

/* import "./interfaces/IERC20Details.sol"; */
/* import "./interfaces/IOracle.sol"; */
/* import "./interfaces/ISubFactory.sol"; */

interface ICalc { function calcType() external view returns (uint8); }

/// @title MapleGlobals maintains a central source of parameters and allowlists for the Maple protocol.
contract MapleGlobals {

    using SafeMath for uint256;

    address public immutable mpl;         // The ERC-2222 Maple Token for the Maple protocol.

    address public pendingGovernor;       // The Governor that is declared for governorship transfer. Must be accepted for transfer to take effect.
    address public governor;              // The Governor responsible for management of global Maple variables.
    address public mapleTreasury;         // The MapleTreasury is the Treasury where all fees pass through for conversion, prior to distribution.
    address public globalAdmin;           // The Global Admin of the whole network. Has the power to switch off/on the functionality of entire protocol.

    uint256 public defaultGracePeriod;    // Represents the amount of time a Borrower has to make a missed payment before a default can be triggered.
    uint256 public swapOutRequired;       // Represents minimum amount of Pool cover that a Pool Delegate has to provide before they can finalize a Pool.
    uint256 public fundingPeriod;         // Amount of time to allow a Borrower to drawdown on their Loan after funding period ends.
    uint256 public investorFee;           // Portion of drawdown that goes to the Pool Delegates and individual Lenders.
    uint256 public treasuryFee;           // Portion of drawdown that goes to the MapleTreasury.
    uint256 public maxSwapSlippage;       // Maximum amount of slippage for Uniswap transactions.
    uint256 public minLoanEquity;         // Minimum amount of LoanFDTs required to trigger liquidations (basis points percentage of totalSupply).
    uint256 public stakerCooldownPeriod;  // Period (in secs) after which Stakers are allowed to unstake  their BPTs  from a StakeLocker.
    uint256 public lpCooldownPeriod;      // Period (in secs) after which LPs     are allowed to withdraw their funds from a Pool.
    uint256 public stakerUnstakeWindow;   // Window of time (in secs) after `stakerCooldownPeriod` that an account has to withdraw before their intent to unstake  is invalidated.
    uint256 public lpWithdrawWindow;      // Window of time (in secs) after `lpCooldownPeriod`     that an account has to withdraw before their intent to withdraw is invalidated.

    bool public protocolPaused;  // Switch to pause the functionality of the entire protocol.

    mapping(address => bool) public isValidLiquidityAsset;            // Mapping of valid Liquidity Assets.
    mapping(address => bool) public isValidCollateralAsset;           // Mapping of valid Collateral Assets.
    mapping(address => bool) public validCalcs;                       // Mapping of valid Calculators
    mapping(address => bool) public isValidPoolDelegate;              // Mapping of valid Pool Delegates (prevent unauthorized/unknown addresses from creating Pools).
    mapping(address => bool) public isValidBalancerPool;              // Mapping of valid Balancer Pools that Maple has approved for BPT staking.

    // Determines the liquidation path of various assets in Loans and the Treasury.
    // The value provided will determine whether or not to perform a bilateral or triangular swap on Uniswap.
    // For example, `defaultUniswapPath[WBTC][USDC]` value would indicate what asset to convert WBTC into before conversion to USDC.
    // If `defaultUniswapPath[WBTC][USDC] == USDC`, then the swap is bilateral and no middle asset is swapped.
    // If `defaultUniswapPath[WBTC][USDC] == WETH`, then swap WBTC for WETH, then WETH for USDC.
    mapping(address => mapping(address => address)) public defaultUniswapPath;

    mapping(address => address) public oracleFor;  // Chainlink oracle for a given asset.

    mapping(address => bool)                     public isValidPoolFactory;  // Mapping of valid Pool Factories.
    mapping(address => bool)                     public isValidLoanFactory;  // Mapping of valid Loan Factories.
    mapping(address => mapping(address => bool)) public validSubFactories;   // Mapping of valid sub factories.

    event                     Initialized();
    event              CollateralAssetSet(address asset, uint256 decimals, string symbol, bool valid);
    event               LiquidityAssetSet(address asset, uint256 decimals, string symbol, bool valid);
    event                       OracleSet(address asset, address oracle);
    event TransferRestrictionExemptionSet(address indexed exemptedContract, bool valid);
    event                 BalancerPoolSet(address balancerPool, bool valid);
    event              PendingGovernorSet(address indexed pendingGovernor);
    event                GovernorAccepted(address indexed governor);
    event                 GlobalsParamSet(bytes32 indexed which, uint256 value);
    event               GlobalsAddressSet(bytes32 indexed which, address addr);
    event                  ProtocolPaused(bool pause);
    event                  GlobalAdminSet(address indexed newGlobalAdmin);
    event                 PoolDelegateSet(address indexed delegate, bool valid);

    /**
        @dev Checks that `msg.sender` is the Governor.
    */
    modifier isGovernor() {
        require(msg.sender == governor, "MG:NOT_GOV");
        _;
    }

    /**
        @dev   Constructor function.
        @dev   It emits an `Initialized` event.
        @param _governor    Address of Governor.
        @param _mpl         Address of the ERC-2222 Maple Token for the Maple protocol.
        @param _globalAdmin Address the Global Admin.
    */
    constructor(address _governor, address _mpl, address _globalAdmin) public {
        governor             = _governor;
        mpl                  = _mpl;
        swapOutRequired      = 10_000;     // $10,000 of Pool cover
        fundingPeriod        = 10 days;
        defaultGracePeriod   = 5 days;
        investorFee          = 50;         // 0.5 %
        treasuryFee          = 50;         // 0.5 %
        maxSwapSlippage      = 1000;       // 10 %
        minLoanEquity        = 2000;       // 20 %
        globalAdmin          = _globalAdmin;
        stakerCooldownPeriod = 10 days;
        lpCooldownPeriod     = 10 days;
        stakerUnstakeWindow  = 2 days;
        lpWithdrawWindow     = 2 days;
        emit Initialized();
    }

    /************************/
    /*** Setter Functions ***/
    /************************/

    /**
        @dev  Sets the Staker cooldown period. This change will affect the existing cool down period for the Stakers that already intended to unstake.
              Only the Governor can call this function.
        @dev  It emits a `GlobalsParamSet` event.
        @param newCooldownPeriod New value for the cool down period.
    */
    function setStakerCooldownPeriod(uint256 newCooldownPeriod) external isGovernor {
        stakerCooldownPeriod = newCooldownPeriod;
        emit GlobalsParamSet("STAKER_COOLDOWN_PERIOD", newCooldownPeriod);
    }

    /**
        @dev   Sets the Liquidity Pool cooldown period. This change will affect the existing cool down period for the LPs that already intended to withdraw.
               Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param newCooldownPeriod New value for the cool down period.
    */
    function setLpCooldownPeriod(uint256 newCooldownPeriod) external isGovernor {
        lpCooldownPeriod = newCooldownPeriod;
        emit GlobalsParamSet("LP_COOLDOWN_PERIOD", newCooldownPeriod);
    }

    /**
        @dev   Sets the Staker unstake window. This change will affect the existing window for the Stakers that already intended to unstake.
               Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param newUnstakeWindow New value for the unstake window.
    */
    function setStakerUnstakeWindow(uint256 newUnstakeWindow) external isGovernor {
        stakerUnstakeWindow = newUnstakeWindow;
        emit GlobalsParamSet("STAKER_UNSTAKE_WINDOW", newUnstakeWindow);
    }

    /**
        @dev   Sets the Liquidity Pool withdraw window. This change will affect the existing window for the LPs that already intended to withdraw.
               Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param newLpWithdrawWindow New value for the withdraw window.
    */
    function setLpWithdrawWindow(uint256 newLpWithdrawWindow) external isGovernor {
        lpWithdrawWindow = newLpWithdrawWindow;
        emit GlobalsParamSet("LP_WITHDRAW_WINDOW", newLpWithdrawWindow);
    }

    /**
        @dev   Sets the allowed Uniswap slippage percentage, in basis points. Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param newMaxSlippage New max slippage percentage (in basis points)
    */
    function setMaxSwapSlippage(uint256 newMaxSlippage) external isGovernor {
        _checkPercentageRange(newMaxSlippage);
        maxSwapSlippage = newMaxSlippage;
        emit GlobalsParamSet("MAX_SWAP_SLIPPAGE", newMaxSlippage);
    }

    /**
      @dev   Sets the Global Admin. Only the Governor can call this function.
      @dev   It emits a `GlobalAdminSet` event.
      @param newGlobalAdmin New global admin address.
    */
    function setGlobalAdmin(address newGlobalAdmin) external {
        require(msg.sender == governor && newGlobalAdmin != address(0), "MG:NOT_GOV_OR_ADMIN");
        require(!protocolPaused, "MG:PROTO_PAUSED");
        globalAdmin = newGlobalAdmin;
        emit GlobalAdminSet(newGlobalAdmin);
    }

    /**
        @dev   Sets the validity of a Balancer Pool. Only the Governor can call this function.
        @dev   It emits a `BalancerPoolSet` event.
        @param balancerPool Address of Balancer Pool contract.
        @param valid        The new validity status of a Balancer Pool.
    */
    function setValidBalancerPool(address balancerPool, bool valid) external isGovernor {
        isValidBalancerPool[balancerPool] = valid;
        emit BalancerPoolSet(balancerPool, valid);
    }

    /**
      @dev   Sets the paused/unpaused state of the protocol. Only the Global Admin can call this function.
      @dev   It emits a `ProtocolPaused` event.
      @param pause Boolean flag to switch externally facing functionality in the protocol on/off.
    */
    function setProtocolPause(bool pause) external {
        require(msg.sender == globalAdmin, "MG:NOT_ADMIN");
        protocolPaused = pause;
        emit ProtocolPaused(pause);
    }

    /**
        @dev   Sets the validity of a PoolFactory. Only the Governor can call this function.
        @param poolFactory Address of PoolFactory.
        @param valid       The new validity status of a PoolFactory.
    */
    function setValidPoolFactory(address poolFactory, bool valid) external isGovernor {
        isValidPoolFactory[poolFactory] = valid;
    }

    /**
        @dev   Sets the validity of a LoanFactory. Only the Governor can call this function.
        @param loanFactory Address of LoanFactory.
        @param valid       The new validity status of a LoanFactory.
    */
    function setValidLoanFactory(address loanFactory, bool valid) external isGovernor {
        isValidLoanFactory[loanFactory] = valid;
    }

    /**
        @dev   Sets the validity of a sub factory as it relates to a super factory. Only the Governor can call this function.
        @param superFactory The core factory (e.g. PoolFactory, LoanFactory).
        @param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).
        @param valid        The new validity status of a subFactory within context of super factory.
    */
    function setValidSubFactory(address superFactory, address subFactory, bool valid) external isGovernor {
        require(isValidLoanFactory[superFactory] || isValidPoolFactory[superFactory], "MG:INVALID_SUPER_F");
        validSubFactories[superFactory][subFactory] = valid;
    }

    /**
        @dev   Sets the path to swap an asset through Uniswap. Only the Governor can call this function.
        @param from Asset being swapped.
        @param to   Final asset to receive. **
        @param mid  Middle asset.

        ** Set to == mid to enable a bilateral swap (single path swap).
           Set to != mid to enable a triangular swap (multi path swap).
    */
    function setDefaultUniswapPath(address from, address to, address mid) external isGovernor {
        defaultUniswapPath[from][to] = mid;
    }

    /**
        @dev   Sets the validity of a Pool Delegate (those allowed to create Pools). Only the Governor can call this function.
        @dev   It emits a `PoolDelegateSet` event.
        @param delegate Address to manage permissions for.
        @param valid    The new validity status of a Pool Delegate.
    */
    function setPoolDelegateAllowlist(address delegate, bool valid) external isGovernor {
        isValidPoolDelegate[delegate] = valid;
        emit PoolDelegateSet(delegate, valid);
    }

    /**
        @dev   Sets the validity of an asset for collateral. Only the Governor can call this function.
        @dev   It emits a `CollateralAssetSet` event.
        @param asset The asset to assign validity to.
        @param valid The new validity status of a Collateral Asset.
    */
    function setCollateralAsset(address asset, bool valid) external isGovernor {
        isValidCollateralAsset[asset] = valid;
        emit CollateralAssetSet(asset, IERC20Details(asset).decimals(), IERC20Details(asset).symbol(), valid);
    }

    /**
        @dev   Sets the validity of an asset for liquidity in Pools. Only the Governor can call this function.
        @dev   It emits a `LiquidityAssetSet` event.
        @param asset Address of the valid asset.
        @param valid The new validity status a Liquidity Asset in Pools.
    */
    function setLiquidityAsset(address asset, bool valid) external isGovernor {
        isValidLiquidityAsset[asset] = valid;
        emit LiquidityAssetSet(asset, IERC20Details(asset).decimals(), IERC20Details(asset).symbol(), valid);
    }

    /**
        @dev   Sets the validity of a calculator contract. Only the Governor can call this function.
        @param calc  Calculator address.
        @param valid The new validity status of a Calculator.
    */
    function setCalc(address calc, bool valid) external isGovernor {
        validCalcs[calc] = valid;
    }

    /**
        @dev   Sets the investor fee (in basis points). Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param _fee The fee, e.g., 50 = 0.50%.
    */
    function setInvestorFee(uint256 _fee) external isGovernor {
        _checkPercentageRange(treasuryFee.add(_fee));
        investorFee = _fee;
        emit GlobalsParamSet("INVESTOR_FEE", _fee);
    }

    /**
        @dev   Sets the treasury fee (in basis points). Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param _fee The fee, e.g., 50 = 0.50%.
    */
    function setTreasuryFee(uint256 _fee) external isGovernor {
        _checkPercentageRange(investorFee.add(_fee));
        treasuryFee = _fee;
        emit GlobalsParamSet("TREASURY_FEE", _fee);
    }

    /**
        @dev   Sets the MapleTreasury. Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param _mapleTreasury New MapleTreasury address.
    */
    function setMapleTreasury(address _mapleTreasury) external isGovernor {
        require(_mapleTreasury != address(0), "MG:ZERO_ADDR");
        mapleTreasury = _mapleTreasury;
        emit GlobalsAddressSet("MAPLE_TREASURY", _mapleTreasury);
    }

    /**
        @dev   Sets the default grace period. Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param _defaultGracePeriod Number of seconds to set the grace period to.
    */
    function setDefaultGracePeriod(uint256 _defaultGracePeriod) external isGovernor {
        defaultGracePeriod = _defaultGracePeriod;
        emit GlobalsParamSet("DEFAULT_GRACE_PERIOD", _defaultGracePeriod);
    }

    /**
        @dev   Sets the minimum Loan equity. Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param _minLoanEquity Min percentage of Loan equity an account must have to trigger liquidations.
    */
    function setMinLoanEquity(uint256 _minLoanEquity) external isGovernor {
        _checkPercentageRange(_minLoanEquity);
        minLoanEquity = _minLoanEquity;
        emit GlobalsParamSet("MIN_LOAN_EQUITY", _minLoanEquity);
    }

    /**
        @dev   Sets the funding period. Only the Governor can call this function.
        @dev   It emits a `GlobalsParamSet` event.
        @param _fundingPeriod Number of seconds to set the drawdown grace period to.
    */
    function setFundingPeriod(uint256 _fundingPeriod) external isGovernor {
        fundingPeriod = _fundingPeriod;
        emit GlobalsParamSet("FUNDING_PERIOD", _fundingPeriod);
    }

    /**
        @dev   Sets the the minimum Pool cover required to finalize a Pool. Only the Governor can call this function. FIX
        @dev   It emits a `GlobalsParamSet` event.
        @param amt The new minimum swap out required.
    */
    function setSwapOutRequired(uint256 amt) external isGovernor {
        require(amt >= uint256(10_000), "MG:SWAP_OUT_TOO_LOW");
        swapOutRequired = amt;
        emit GlobalsParamSet("SWAP_OUT_REQUIRED", amt);
    }

    /**
        @dev   Sets a price feed's oracle. Only the Governor can call this function.
        @dev   It emits a `OracleSet` event.
        @param asset  Asset to update price for.
        @param oracle New oracle to use.
    */
    function setPriceOracle(address asset, address oracle) external isGovernor {
        oracleFor[asset] = oracle;
        emit OracleSet(asset, oracle);
    }

    /************************************/
    /*** Transfer Ownership Functions ***/
    /************************************/

    /**
        @dev   Sets a new Pending Governor. This address can become Governor if they accept. Only the Governor can call this function.
        @dev   It emits a `PendingGovernorSet` event.
        @param _pendingGovernor Address of new Pending Governor.
    */
    function setPendingGovernor(address _pendingGovernor) external isGovernor {
        require(_pendingGovernor != address(0), "MG:ZERO_ADDR");
        pendingGovernor = _pendingGovernor;
        emit PendingGovernorSet(_pendingGovernor);
    }

    /**
        @dev Accept the Governor position. Only the Pending Governor can call this function.
        @dev It emits a `GovernorAccepted` event.
    */
    function acceptGovernor() external {
        require(msg.sender == pendingGovernor, "MG:NOT_PENDING_GOV");
        governor        = msg.sender;
        pendingGovernor = address(0);
        emit GovernorAccepted(msg.sender);
    }

    /************************/
    /*** Getter Functions ***/
    /************************/

    /**
        @dev    Fetch price for asset from Chainlink oracles.
        @param  asset Asset to fetch price of.
        @return Price of asset in USD.
    */
    function getLatestPrice(address asset) external view returns (uint256) {
        return uint256(IOracle(oracleFor[asset]).getLatestPrice());
    }

    /**
        @dev   Checks that a subFactory is valid as it relates to a super factory.
        @param superFactory The core factory (e.g. PoolFactory, LoanFactory).
        @param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).
        @param factoryType  The type expected for the subFactory. References listed below.
                                0 = COLLATERAL_LOCKER_FACTORY
                                1 = DEBT_LOCKER_FACTORY
                                2 = FUNDING_LOCKER_FACTORY
                                3 = LIQUIDITY_LOCKER_FACTORY
                                4 = STAKE_LOCKER_FACTORY
    */
    function isValidSubFactory(address superFactory, address subFactory, uint8 factoryType) external view returns (bool) {
        return validSubFactories[superFactory][subFactory] && ISubFactory(subFactory).factoryType() == factoryType;
    }

    /**
        @dev   Checks that a Calculator is valid.
        @param calc     Calculator address.
        @param calcType Calculator type.
    */
    function isValidCalc(address calc, uint8 calcType) external view returns (bool) {
        return validCalcs[calc] && ICalc(calc).calcType() == calcType;
    }

    /**
        @dev    Returns the `lpCooldownPeriod` and `lpWithdrawWindow` as a tuple, for convenience.
        @return [0] = lpCooldownPeriod
                [1] = lpWithdrawWindow
    */
    function getLpCooldownParams() external view returns (uint256, uint256) {
        return (lpCooldownPeriod, lpWithdrawWindow);
    }

    /************************/
    /*** Helper Functions ***/
    /************************/

    /**
        @dev Checks that percentage is less than 100%.
    */
    function _checkPercentageRange(uint256 percentage) internal pure {
        require(percentage <= uint256(10_000), "MG:PCT_OOB");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_governor","type":"address"},{"internalType":"address","name":"_mpl","type":"address"},{"internalType":"address","name":"_globalAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"balancerPool","type":"address"},{"indexed":false,"internalType":"bool","name":"valid","type":"bool"}],"name":"BalancerPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"decimals","type":"uint256"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"bool","name":"valid","type":"bool"}],"name":"CollateralAssetSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGlobalAdmin","type":"address"}],"name":"GlobalAdminSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"which","type":"bytes32"},{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"GlobalsAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"which","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"GlobalsParamSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"governor","type":"address"}],"name":"GovernorAccepted","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"decimals","type":"uint256"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"bool","name":"valid","type":"bool"}],"name":"LiquidityAssetSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"}],"name":"OracleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingGovernor","type":"address"}],"name":"PendingGovernorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"bool","name":"valid","type":"bool"}],"name":"PoolDelegateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pause","type":"bool"}],"name":"ProtocolPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"exemptedContract","type":"address"},{"indexed":false,"internalType":"bool","name":"valid","type":"bool"}],"name":"TransferRestrictionExemptionSet","type":"event"},{"inputs":[],"name":"acceptGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultGracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"defaultUniswapPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLpCooldownParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isValidBalancerPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"calc","type":"address"},{"internalType":"uint8","name":"calcType","type":"uint8"}],"name":"isValidCalc","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isValidCollateralAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isValidLiquidityAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isValidLoanFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isValidPoolDelegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isValidPoolFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"superFactory","type":"address"},{"internalType":"address","name":"subFactory","type":"address"},{"internalType":"uint8","name":"factoryType","type":"uint8"}],"name":"isValidSubFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpCooldownPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mapleTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLoanEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oracleFor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"calc","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setCalc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setCollateralAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultGracePeriod","type":"uint256"}],"name":"setDefaultGracePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"mid","type":"address"}],"name":"setDefaultUniswapPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fundingPeriod","type":"uint256"}],"name":"setFundingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGlobalAdmin","type":"address"}],"name":"setGlobalAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setInvestorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setLiquidityAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCooldownPeriod","type":"uint256"}],"name":"setLpCooldownPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLpWithdrawWindow","type":"uint256"}],"name":"setLpWithdrawWindow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mapleTreasury","type":"address"}],"name":"setMapleTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSlippage","type":"uint256"}],"name":"setMaxSwapSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLoanEquity","type":"uint256"}],"name":"setMinLoanEquity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingGovernor","type":"address"}],"name":"setPendingGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setPoolDelegateAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"oracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pause","type":"bool"}],"name":"setProtocolPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCooldownPeriod","type":"uint256"}],"name":"setStakerCooldownPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newUnstakeWindow","type":"uint256"}],"name":"setStakerUnstakeWindow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setSwapOutRequired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"balancerPool","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setValidBalancerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"loanFactory","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setValidLoanFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolFactory","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setValidPoolFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"superFactory","type":"address"},{"internalType":"address","name":"subFactory","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"name":"setValidSubFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakerCooldownPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakerUnstakeWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validCalcs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"validSubFactories","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162001f9638038062001f968339810160408190526200003491620000e8565b600180546001600160a01b038086166001600160a01b0319928316179092556001600160601b0319606085901b16608052612710600555620d2f00600681905562069780600455603260078190556008556103e86009556107d0600a556003805493851693909216929092179055600b819055600c556202a300600d819055600e556040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a150505062000154565b600080600060608486031215620000fd578283fd5b83516200010a816200013b565b60208501519093506200011d816200013b565b604085015190925062000130816200013b565b809150509250925092565b6001600160a01b03811681146200015157600080fd5b50565b60805160601c611e2462000172600039806111be5250611e246000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c80637303de25116101de578063c9c672401161010f578063e58bb639116100ad578063f33ef09a1161007c578063f33ef09a146106e6578063f3897663146106f9578063f85ee6f81461070c578063fd4a91211461071f57610383565b8063e58bb639146106b0578063ec9a9368146106b8578063efdb16fc146106c0578063f235757f146106d357610383565b8063dbc6c552116100e9578063dbc6c55214610685578063dd02e0ec14610698578063df3d02bd146106a0578063e3056a34146106a857610383565b8063c9c6724014610657578063cc32d1761461066a578063d1cdf3011461067257610383565b8063a05309461161017c578063aed019b911610156578063aed019b91461060b578063b53afda71461061e578063be44ed6b14610631578063c52bc31d1461064457610383565b8063a0530946146105f3578063a5a27605146105fb578063a965d6b51461060357610383565b80638608a6e1116101b85780638608a6e1146105a45780638695118a146105b75780638c14834b146105ca5780639f51290b146105dd57610383565b80637303de251461057657806374d7c62b1461058957806377e741c71461059157610383565b80633106374c116102b85780634e989118116102565780636597b899116102305780636597b8991461053557806367a74ddc14610548578063705d5f241461055b57806372a22d711461056357610383565b80634e98911814610507578063553231951461051a5780635e0454671461052257610383565b806344c14f711161029257806344c14f71146104c6578063490dae64146104d95780634a2697c4146104ec5780634d866592146104f457610383565b80633106374c146104a3578063372e3546146104ab578063425fad58146104be57610383565b80631beb84e711610325578063298b795d116102ff578063298b795d146104575780632a5aa2921461046a5780632daa0d891461047d5780632fa6c88f1461049057610383565b80631beb84e7146104275780632018b8701461043a578063267186061461044257610383565b806316345f181161036157806316345f18146103d957806316a12d7a146103f95780631b1804aa146104015780631b5833f71461041457610383565b80630c340a2414610388578063107c0240146103a657806313d459fb146103c6575b600080fd5b610390610732565b60405161039d9190611b0a565b60405180910390f35b6103b96103b4366004611885565b610741565b60405161039d9190611ba4565b6103b96103d4366004611963565b610756565b6103ec6103e7366004611885565b61080a565b60405161039d9190611d55565b6103ec61089a565b6103b961040f3660046118a0565b6108a0565b6103b96104223660046119db565b6108c0565b6103b9610435366004611885565b610964565b6103ec610979565b610455610450366004611ad6565b61097f565b005b610455610465366004611ad6565b6109f7565b610455610478366004611ad6565b610a61565b61045561048b3660046119a0565b610ac1565b61045561049e3660046119a0565b610c31565b6103ec610cd7565b6103b96104b9366004611885565b610cdd565b6103b9610cf2565b6104556104d4366004611ad6565b610cfb565b6104556104e73660046119a0565b610d61565b6103ec610de1565b6103906105023660046118a0565b610de7565b610455610515366004611a07565b610e0d565b6103ec610e80565b610455610530366004611ad6565b610e86565b6104556105433660046119a0565b610f00565b6104556105563660046118a0565b610f55565b6103ec610fe0565b6103b9610571366004611885565b610fe6565b610455610584366004611885565b610ffb565b6103ec6110a9565b61045561059f366004611ad6565b6110af565b6104556105b2366004611ad6565b611124565b6103b96105c5366004611885565b611188565b6103b96105d8366004611885565b61119d565b6105e56111b2565b60405161039d929190611d5e565b6103906111bc565b6103906111e0565b6103ec6111ef565b610390610619366004611885565b6111f5565b6103b961062c366004611885565b611210565b61045561063f3660046119a0565b611225565b610455610652366004611885565b61127a565b6104556106653660046119a0565b611325565b6103ec61137a565b610455610680366004611ad6565b611380565b610455610693366004611ad6565b6113e7565b6103ec61146c565b6103ec611472565b610390611478565b610455611487565b6103906114f9565b6104556106ce3660046119a0565b611508565b6104556106e1366004611885565b611592565b6104556106f4366004611ad6565b61162a565b6104556107073660046118d4565b611696565b61045561071a366004611919565b6116fd565b61045561072d366004611ad6565b6117bc565b6001546001600160a01b031681565b60176020526000908152604090205460ff1681565b6001600160a01b03808416600090815260196020908152604080832093861683529290529081205460ff16801561080257508160ff16836001600160a01b03166364e1fd556040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190611aee565b60ff16145b949350505050565b6001600160a01b038082166000908152601660209081526040808320548151638e15f47360e01b8152915193941692638e15f47392600480840193919291829003018186803b15801561085c57600080fd5b505afa158015610870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108949190611a23565b92915050565b60075481565b601960209081526000928352604080842090915290825290205460ff1681565b6001600160a01b03821660009081526012602052604081205460ff16801561095d57508160ff16836001600160a01b0316639d8ae4466040518163ffffffff1660e01b815260040160206040518083038186803b15801561092057600080fd5b505afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109589190611aee565b60ff16145b9392505050565b60126020526000908152604090205460ff1681565b600d5481565b6001546001600160a01b031633146109b25760405162461bcd60e51b81526004016109a990611cdf565b60405180910390fd5b80600e81905550714c505f57495448445241575f57494e444f5760701b600080516020611dcf833981519152826040516109ec9190611d55565b60405180910390a250565b6001546001600160a01b03163314610a215760405162461bcd60e51b81526004016109a990611cdf565b610a2a81611824565b80600a819055506e4d494e5f4c4f414e5f45515549545960881b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610a8b5760405162461bcd60e51b81526004016109a990611cdf565b806006819055506d11955391125391d7d411549253d160921b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610aeb5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b038216600081815260106020908152604091829020805460ff1916851515179055815163313ce56760e01b815291517f18d231995d1f7e4354b1786418aa8f34f99996ded9cc6b1d43c3815eb6f5ab79938693909263313ce56792600480840193829003018186803b158015610b6757600080fd5b505afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f9190611a23565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c149190810190611a3b565b84604051610c259493929190611b53565b60405180910390a15050565b6001546001600160a01b03163314610c5b5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b038216600081815260116020908152604091829020805460ff1916851515179055815163313ce56760e01b815291517fb9456501e6a30eefbf8c4f9d199ef0c7ac7491abb068d594bbafbdec85447ccc938693909263313ce56792600480840193829003018186803b158015610b6757600080fd5b60055481565b60136020526000908152604090205460ff1681565b600f5460ff1681565b6001546001600160a01b03163314610d255760405162461bcd60e51b81526004016109a990611cdf565b80600481905550731111519055531517d1d49050d157d411549253d160621b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610d8b5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03821660009081526014602052604090819020805460ff1916831515179055517f936e0e50587b3c03d3e833e5cc880e9a62afb49d51808e96d00c4790ed03796290610c259084908490611b38565b600a5481565b60156020908152600092835260408084209091529082529020546001600160a01b031681565b6003546001600160a01b03163314610e375760405162461bcd60e51b81526004016109a990611d2f565b600f805460ff19168215151790556040517f6e0cb5fa7a57c38eb7939c1104f95fccb5b7a6a8c1a7cab76934305439b639f590610e75908390611ba4565b60405180910390a150565b60095481565b6001546001600160a01b03163314610eb05760405162461bcd60e51b81526004016109a990611cdf565b600854610ecc90610ec7908363ffffffff61184916565b611824565b806007819055506b494e564553544f525f46454560a01b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610f2a5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314610f7f5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b038281166000908152601660205260409081902080546001600160a01b03191692841692909217909155517fc1d3048301c0d23629a2532c8defa6d68f8e1a0e4157918769e9fb1b2eeb888e90610c259084908490611b1e565b60045481565b60146020526000908152604090205460ff1681565b6001546001600160a01b031633146110255760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03811661104b5760405162461bcd60e51b81526004016109a990611cb9565b600280546001600160a01b0319166001600160a01b0383161790556040516d4d41504c455f545245415355525960901b907f806b6f19dfa971f58fc9140115f19907b73e8336024786c79c2ffc56f6678ec1906109ec908490611b0a565b60065481565b6001546001600160a01b031633146110d95760405162461bcd60e51b81526004016109a990611cdf565b6007546110f090610ec7908363ffffffff61184916565b806008819055506b54524541535552595f46454560a01b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b0316331461114e5760405162461bcd60e51b81526004016109a990611cdf565b80600c8190555071131417d0d3d3d31113d5d397d411549253d160721b600080516020611dcf833981519152826040516109ec9190611d55565b60106020526000908152604090205460ff1681565b60116020526000908152604090205460ff1681565b600c54600e549091565b7f000000000000000000000000000000000000000000000000000000000000000081565b6002546001600160a01b031681565b600b5481565b6016602052600090815260409020546001600160a01b031681565b60186020526000908152604090205460ff1681565b6001546001600160a01b0316331461124f5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314801561129c57506001600160a01b03811615155b6112b85760405162461bcd60e51b81526004016109a990611bd3565b600f5460ff16156112db5760405162461bcd60e51b81526004016109a990611c63565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fad3f8fa73ce3985d027e4c3bbe1194701a23e635a746bcf73d8632f677ac388290600090a250565b6001546001600160a01b0316331461134f5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b60085481565b6001546001600160a01b031633146113aa5760405162461bcd60e51b81526004016109a990611cdf565b80600d81905550745354414b45525f554e5354414b455f57494e444f5760581b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b031633146114115760405162461bcd60e51b81526004016109a990611cdf565b6127108110156114335760405162461bcd60e51b81526004016109a990611c8c565b806005819055507014d5d05417d3d55517d491545552549151607a1b600080516020611dcf833981519152826040516109ec9190611d55565b600c5481565b600e5481565b6000546001600160a01b031681565b6000546001600160a01b031633146114b15760405162461bcd60e51b81526004016109a990611c00565b60018054336001600160a01b031991821681179092556000805490911681556040517fb7a4788848eba3319c766bdd6428c7d7a10e4cba4fd6ade9b79b7102b7099b369190a2565b6003546001600160a01b031681565b6001546001600160a01b031633146115325760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03821660008181526013602052604090819020805460ff1916841515179055517fd2e6a599a52383178be9bf2d0be60c96615b89f8d9cf6c680f06962aa73679fc90611586908490611ba4565b60405180910390a25050565b6001546001600160a01b031633146115bc5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b0381166115e25760405162461bcd60e51b81526004016109a990611cb9565b600080546001600160a01b0319166001600160a01b038316908117825560405190917f56bddfa0cee9697cebddf9acd7f23dc6583663b05e007b877056d05017994def91a250565b6001546001600160a01b031633146116545760405162461bcd60e51b81526004016109a990611cdf565b61165d81611824565b80600981905550704d41585f535741505f534c49505041474560781b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b031633146116c05760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03928316600090815260156020908152604080832094861683529390529190912080546001600160a01b03191691909216179055565b6001546001600160a01b031633146117275760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03831660009081526018602052604090205460ff168061176657506001600160a01b03831660009081526017602052604090205460ff165b6117825760405162461bcd60e51b81526004016109a990611d03565b6001600160a01b03928316600090815260196020908152604080832094909516825292909252919020805460ff1916911515919091179055565b6001546001600160a01b031633146117e65760405162461bcd60e51b81526004016109a990611cdf565b80600b819055507514d51052d15497d0d3d3d31113d5d397d411549253d160521b600080516020611dcf833981519152826040516109ec9190611d55565b6127108111156118465760405162461bcd60e51b81526004016109a990611baf565b50565b60008282018381101561095d5760405162461bcd60e51b81526004016109a990611c2c565b80356001600160a01b038116811461089457600080fd5b600060208284031215611896578081fd5b61095d838361186e565b600080604083850312156118b2578081fd5b6118bc848461186e565b91506118cb846020850161186e565b90509250929050565b6000806000606084860312156118e8578081fd5b6118f2858561186e565b9250611901856020860161186e565b9150611910856040860161186e565b90509250925092565b60008060006060848603121561192d578283fd5b833561193881611d9c565b9250602084013561194881611d9c565b9150604084013561195881611db1565b809150509250925092565b600080600060608486031215611977578283fd5b611981858561186e565b9250611990856020860161186e565b9150604084013561195881611dbf565b600080604083850312156119b2578182fd5b6119bc848461186e565b9150602083013580151581146119d0578182fd5b809150509250929050565b600080604083850312156119ed578182fd5b6119f7848461186e565b915060208301356119d081611dbf565b600060208284031215611a18578081fd5b813561095d81611db1565b600060208284031215611a34578081fd5b5051919050565b600060208284031215611a4c578081fd5b815167ffffffffffffffff80821115611a63578283fd5b81840185601f820112611a74578384fd5b8051925081831115611a84578384fd5b604051601f8401601f191681016020018381118282101715611aa4578586fd5b604052838152818401602001871015611abb578485fd5b611acc846020830160208501611d6c565b9695505050505050565b600060208284031215611ae7578081fd5b5035919050565b600060208284031215611aff578081fd5b815161095d81611dbf565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b600060018060a01b0386168252846020830152608060408301528351806080840152611b868160a0850160208801611d6c565b921515606083015250601f91909101601f19160160a0019392505050565b901515815260200190565b6020808252600a908201526926a39d2821aa2fa7a7a160b11b604082015260600190565b60208082526013908201527226a39d2727aa2fa3a7ab2fa7a92fa0a226a4a760691b604082015260600190565b60208082526012908201527126a39d2727aa2fa822a72224a723afa3a7ab60711b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e1351ce941493d513d7d4105554d151608a1b604082015260600190565b6020808252601390820152724d473a535741505f4f55545f544f4f5f4c4f5760681b604082015260600190565b6020808252600c908201526b26a39d2d22a927afa0a2222960a11b604082015260600190565b6020808252600a908201526926a39d2727aa2fa3a7ab60b11b604082015260600190565b60208082526012908201527126a39d24a72b20a624a22fa9aaa822a92fa360711b604082015260600190565b6020808252600c908201526b26a39d2727aa2fa0a226a4a760a11b604082015260600190565b90815260200190565b918252602082015260400190565b60005b83811015611d87578181015183820152602001611d6f565b83811115611d96576000848401525b50505050565b6001600160a01b038116811461184657600080fd5b801515811461184657600080fd5b60ff8116811461184657600080fdfed8780a041c72589f51af8b3fade9cc8a466d00ecef64d45657dd6cdebf1ecf47a26469706673582212200eae2d9f76d9e4b6263a8c2ce45b8314aba61d9256119fb0e8ef82085983da3764736f6c634300060b00330000000000000000000000009686328198e51479c6aa5eb87f20b09dbd1bca2500000000000000000000000033349b282065b0284d756f0577fb39c158f935e600000000000000000000000093cc3e39c91cf93fd57aca416ed6fe66e8bdd573

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103835760003560e01c80637303de25116101de578063c9c672401161010f578063e58bb639116100ad578063f33ef09a1161007c578063f33ef09a146106e6578063f3897663146106f9578063f85ee6f81461070c578063fd4a91211461071f57610383565b8063e58bb639146106b0578063ec9a9368146106b8578063efdb16fc146106c0578063f235757f146106d357610383565b8063dbc6c552116100e9578063dbc6c55214610685578063dd02e0ec14610698578063df3d02bd146106a0578063e3056a34146106a857610383565b8063c9c6724014610657578063cc32d1761461066a578063d1cdf3011461067257610383565b8063a05309461161017c578063aed019b911610156578063aed019b91461060b578063b53afda71461061e578063be44ed6b14610631578063c52bc31d1461064457610383565b8063a0530946146105f3578063a5a27605146105fb578063a965d6b51461060357610383565b80638608a6e1116101b85780638608a6e1146105a45780638695118a146105b75780638c14834b146105ca5780639f51290b146105dd57610383565b80637303de251461057657806374d7c62b1461058957806377e741c71461059157610383565b80633106374c116102b85780634e989118116102565780636597b899116102305780636597b8991461053557806367a74ddc14610548578063705d5f241461055b57806372a22d711461056357610383565b80634e98911814610507578063553231951461051a5780635e0454671461052257610383565b806344c14f711161029257806344c14f71146104c6578063490dae64146104d95780634a2697c4146104ec5780634d866592146104f457610383565b80633106374c146104a3578063372e3546146104ab578063425fad58146104be57610383565b80631beb84e711610325578063298b795d116102ff578063298b795d146104575780632a5aa2921461046a5780632daa0d891461047d5780632fa6c88f1461049057610383565b80631beb84e7146104275780632018b8701461043a578063267186061461044257610383565b806316345f181161036157806316345f18146103d957806316a12d7a146103f95780631b1804aa146104015780631b5833f71461041457610383565b80630c340a2414610388578063107c0240146103a657806313d459fb146103c6575b600080fd5b610390610732565b60405161039d9190611b0a565b60405180910390f35b6103b96103b4366004611885565b610741565b60405161039d9190611ba4565b6103b96103d4366004611963565b610756565b6103ec6103e7366004611885565b61080a565b60405161039d9190611d55565b6103ec61089a565b6103b961040f3660046118a0565b6108a0565b6103b96104223660046119db565b6108c0565b6103b9610435366004611885565b610964565b6103ec610979565b610455610450366004611ad6565b61097f565b005b610455610465366004611ad6565b6109f7565b610455610478366004611ad6565b610a61565b61045561048b3660046119a0565b610ac1565b61045561049e3660046119a0565b610c31565b6103ec610cd7565b6103b96104b9366004611885565b610cdd565b6103b9610cf2565b6104556104d4366004611ad6565b610cfb565b6104556104e73660046119a0565b610d61565b6103ec610de1565b6103906105023660046118a0565b610de7565b610455610515366004611a07565b610e0d565b6103ec610e80565b610455610530366004611ad6565b610e86565b6104556105433660046119a0565b610f00565b6104556105563660046118a0565b610f55565b6103ec610fe0565b6103b9610571366004611885565b610fe6565b610455610584366004611885565b610ffb565b6103ec6110a9565b61045561059f366004611ad6565b6110af565b6104556105b2366004611ad6565b611124565b6103b96105c5366004611885565b611188565b6103b96105d8366004611885565b61119d565b6105e56111b2565b60405161039d929190611d5e565b6103906111bc565b6103906111e0565b6103ec6111ef565b610390610619366004611885565b6111f5565b6103b961062c366004611885565b611210565b61045561063f3660046119a0565b611225565b610455610652366004611885565b61127a565b6104556106653660046119a0565b611325565b6103ec61137a565b610455610680366004611ad6565b611380565b610455610693366004611ad6565b6113e7565b6103ec61146c565b6103ec611472565b610390611478565b610455611487565b6103906114f9565b6104556106ce3660046119a0565b611508565b6104556106e1366004611885565b611592565b6104556106f4366004611ad6565b61162a565b6104556107073660046118d4565b611696565b61045561071a366004611919565b6116fd565b61045561072d366004611ad6565b6117bc565b6001546001600160a01b031681565b60176020526000908152604090205460ff1681565b6001600160a01b03808416600090815260196020908152604080832093861683529290529081205460ff16801561080257508160ff16836001600160a01b03166364e1fd556040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190611aee565b60ff16145b949350505050565b6001600160a01b038082166000908152601660209081526040808320548151638e15f47360e01b8152915193941692638e15f47392600480840193919291829003018186803b15801561085c57600080fd5b505afa158015610870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108949190611a23565b92915050565b60075481565b601960209081526000928352604080842090915290825290205460ff1681565b6001600160a01b03821660009081526012602052604081205460ff16801561095d57508160ff16836001600160a01b0316639d8ae4466040518163ffffffff1660e01b815260040160206040518083038186803b15801561092057600080fd5b505afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109589190611aee565b60ff16145b9392505050565b60126020526000908152604090205460ff1681565b600d5481565b6001546001600160a01b031633146109b25760405162461bcd60e51b81526004016109a990611cdf565b60405180910390fd5b80600e81905550714c505f57495448445241575f57494e444f5760701b600080516020611dcf833981519152826040516109ec9190611d55565b60405180910390a250565b6001546001600160a01b03163314610a215760405162461bcd60e51b81526004016109a990611cdf565b610a2a81611824565b80600a819055506e4d494e5f4c4f414e5f45515549545960881b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610a8b5760405162461bcd60e51b81526004016109a990611cdf565b806006819055506d11955391125391d7d411549253d160921b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610aeb5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b038216600081815260106020908152604091829020805460ff1916851515179055815163313ce56760e01b815291517f18d231995d1f7e4354b1786418aa8f34f99996ded9cc6b1d43c3815eb6f5ab79938693909263313ce56792600480840193829003018186803b158015610b6757600080fd5b505afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f9190611a23565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c149190810190611a3b565b84604051610c259493929190611b53565b60405180910390a15050565b6001546001600160a01b03163314610c5b5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b038216600081815260116020908152604091829020805460ff1916851515179055815163313ce56760e01b815291517fb9456501e6a30eefbf8c4f9d199ef0c7ac7491abb068d594bbafbdec85447ccc938693909263313ce56792600480840193829003018186803b158015610b6757600080fd5b60055481565b60136020526000908152604090205460ff1681565b600f5460ff1681565b6001546001600160a01b03163314610d255760405162461bcd60e51b81526004016109a990611cdf565b80600481905550731111519055531517d1d49050d157d411549253d160621b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610d8b5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03821660009081526014602052604090819020805460ff1916831515179055517f936e0e50587b3c03d3e833e5cc880e9a62afb49d51808e96d00c4790ed03796290610c259084908490611b38565b600a5481565b60156020908152600092835260408084209091529082529020546001600160a01b031681565b6003546001600160a01b03163314610e375760405162461bcd60e51b81526004016109a990611d2f565b600f805460ff19168215151790556040517f6e0cb5fa7a57c38eb7939c1104f95fccb5b7a6a8c1a7cab76934305439b639f590610e75908390611ba4565b60405180910390a150565b60095481565b6001546001600160a01b03163314610eb05760405162461bcd60e51b81526004016109a990611cdf565b600854610ecc90610ec7908363ffffffff61184916565b611824565b806007819055506b494e564553544f525f46454560a01b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b03163314610f2a5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314610f7f5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b038281166000908152601660205260409081902080546001600160a01b03191692841692909217909155517fc1d3048301c0d23629a2532c8defa6d68f8e1a0e4157918769e9fb1b2eeb888e90610c259084908490611b1e565b60045481565b60146020526000908152604090205460ff1681565b6001546001600160a01b031633146110255760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03811661104b5760405162461bcd60e51b81526004016109a990611cb9565b600280546001600160a01b0319166001600160a01b0383161790556040516d4d41504c455f545245415355525960901b907f806b6f19dfa971f58fc9140115f19907b73e8336024786c79c2ffc56f6678ec1906109ec908490611b0a565b60065481565b6001546001600160a01b031633146110d95760405162461bcd60e51b81526004016109a990611cdf565b6007546110f090610ec7908363ffffffff61184916565b806008819055506b54524541535552595f46454560a01b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b0316331461114e5760405162461bcd60e51b81526004016109a990611cdf565b80600c8190555071131417d0d3d3d31113d5d397d411549253d160721b600080516020611dcf833981519152826040516109ec9190611d55565b60106020526000908152604090205460ff1681565b60116020526000908152604090205460ff1681565b600c54600e549091565b7f00000000000000000000000033349b282065b0284d756f0577fb39c158f935e681565b6002546001600160a01b031681565b600b5481565b6016602052600090815260409020546001600160a01b031681565b60186020526000908152604090205460ff1681565b6001546001600160a01b0316331461124f5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314801561129c57506001600160a01b03811615155b6112b85760405162461bcd60e51b81526004016109a990611bd3565b600f5460ff16156112db5760405162461bcd60e51b81526004016109a990611c63565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fad3f8fa73ce3985d027e4c3bbe1194701a23e635a746bcf73d8632f677ac388290600090a250565b6001546001600160a01b0316331461134f5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b60085481565b6001546001600160a01b031633146113aa5760405162461bcd60e51b81526004016109a990611cdf565b80600d81905550745354414b45525f554e5354414b455f57494e444f5760581b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b031633146114115760405162461bcd60e51b81526004016109a990611cdf565b6127108110156114335760405162461bcd60e51b81526004016109a990611c8c565b806005819055507014d5d05417d3d55517d491545552549151607a1b600080516020611dcf833981519152826040516109ec9190611d55565b600c5481565b600e5481565b6000546001600160a01b031681565b6000546001600160a01b031633146114b15760405162461bcd60e51b81526004016109a990611c00565b60018054336001600160a01b031991821681179092556000805490911681556040517fb7a4788848eba3319c766bdd6428c7d7a10e4cba4fd6ade9b79b7102b7099b369190a2565b6003546001600160a01b031681565b6001546001600160a01b031633146115325760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03821660008181526013602052604090819020805460ff1916841515179055517fd2e6a599a52383178be9bf2d0be60c96615b89f8d9cf6c680f06962aa73679fc90611586908490611ba4565b60405180910390a25050565b6001546001600160a01b031633146115bc5760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b0381166115e25760405162461bcd60e51b81526004016109a990611cb9565b600080546001600160a01b0319166001600160a01b038316908117825560405190917f56bddfa0cee9697cebddf9acd7f23dc6583663b05e007b877056d05017994def91a250565b6001546001600160a01b031633146116545760405162461bcd60e51b81526004016109a990611cdf565b61165d81611824565b80600981905550704d41585f535741505f534c49505041474560781b600080516020611dcf833981519152826040516109ec9190611d55565b6001546001600160a01b031633146116c05760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03928316600090815260156020908152604080832094861683529390529190912080546001600160a01b03191691909216179055565b6001546001600160a01b031633146117275760405162461bcd60e51b81526004016109a990611cdf565b6001600160a01b03831660009081526018602052604090205460ff168061176657506001600160a01b03831660009081526017602052604090205460ff165b6117825760405162461bcd60e51b81526004016109a990611d03565b6001600160a01b03928316600090815260196020908152604080832094909516825292909252919020805460ff1916911515919091179055565b6001546001600160a01b031633146117e65760405162461bcd60e51b81526004016109a990611cdf565b80600b819055507514d51052d15497d0d3d3d31113d5d397d411549253d160521b600080516020611dcf833981519152826040516109ec9190611d55565b6127108111156118465760405162461bcd60e51b81526004016109a990611baf565b50565b60008282018381101561095d5760405162461bcd60e51b81526004016109a990611c2c565b80356001600160a01b038116811461089457600080fd5b600060208284031215611896578081fd5b61095d838361186e565b600080604083850312156118b2578081fd5b6118bc848461186e565b91506118cb846020850161186e565b90509250929050565b6000806000606084860312156118e8578081fd5b6118f2858561186e565b9250611901856020860161186e565b9150611910856040860161186e565b90509250925092565b60008060006060848603121561192d578283fd5b833561193881611d9c565b9250602084013561194881611d9c565b9150604084013561195881611db1565b809150509250925092565b600080600060608486031215611977578283fd5b611981858561186e565b9250611990856020860161186e565b9150604084013561195881611dbf565b600080604083850312156119b2578182fd5b6119bc848461186e565b9150602083013580151581146119d0578182fd5b809150509250929050565b600080604083850312156119ed578182fd5b6119f7848461186e565b915060208301356119d081611dbf565b600060208284031215611a18578081fd5b813561095d81611db1565b600060208284031215611a34578081fd5b5051919050565b600060208284031215611a4c578081fd5b815167ffffffffffffffff80821115611a63578283fd5b81840185601f820112611a74578384fd5b8051925081831115611a84578384fd5b604051601f8401601f191681016020018381118282101715611aa4578586fd5b604052838152818401602001871015611abb578485fd5b611acc846020830160208501611d6c565b9695505050505050565b600060208284031215611ae7578081fd5b5035919050565b600060208284031215611aff578081fd5b815161095d81611dbf565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b600060018060a01b0386168252846020830152608060408301528351806080840152611b868160a0850160208801611d6c565b921515606083015250601f91909101601f19160160a0019392505050565b901515815260200190565b6020808252600a908201526926a39d2821aa2fa7a7a160b11b604082015260600190565b60208082526013908201527226a39d2727aa2fa3a7ab2fa7a92fa0a226a4a760691b604082015260600190565b60208082526012908201527126a39d2727aa2fa822a72224a723afa3a7ab60711b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e1351ce941493d513d7d4105554d151608a1b604082015260600190565b6020808252601390820152724d473a535741505f4f55545f544f4f5f4c4f5760681b604082015260600190565b6020808252600c908201526b26a39d2d22a927afa0a2222960a11b604082015260600190565b6020808252600a908201526926a39d2727aa2fa3a7ab60b11b604082015260600190565b60208082526012908201527126a39d24a72b20a624a22fa9aaa822a92fa360711b604082015260600190565b6020808252600c908201526b26a39d2727aa2fa0a226a4a760a11b604082015260600190565b90815260200190565b918252602082015260400190565b60005b83811015611d87578181015183820152602001611d6f565b83811115611d96576000848401525b50505050565b6001600160a01b038116811461184657600080fd5b801515811461184657600080fd5b60ff8116811461184657600080fdfed8780a041c72589f51af8b3fade9cc8a466d00ecef64d45657dd6cdebf1ecf47a26469706673582212200eae2d9f76d9e4b6263a8c2ce45b8314aba61d9256119fb0e8ef82085983da3764736f6c634300060b0033

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

0000000000000000000000009686328198e51479c6aa5eb87f20b09dbd1bca2500000000000000000000000033349b282065b0284d756f0577fb39c158f935e600000000000000000000000093cc3e39c91cf93fd57aca416ed6fe66e8bdd573

-----Decoded View---------------
Arg [0] : _governor (address): 0x9686328198E51479C6aA5EB87f20B09dbD1bca25
Arg [1] : _mpl (address): 0x33349B282065b0284d756F0577FB39c158F935e6
Arg [2] : _globalAdmin (address): 0x93CC3E39C91cf93fd57acA416ed6fE66e8bdD573

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009686328198e51479c6aa5eb87f20b09dbd1bca25
Arg [1] : 00000000000000000000000033349b282065b0284d756f0577fb39c158f935e6
Arg [2] : 00000000000000000000000093cc3e39c91cf93fd57aca416ed6fe66e8bdd573


Deployed Bytecode Sourcemap

10246:21650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10558:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13965:70;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30672:242::-;;;;;;:::i;:::-;;:::i;29847:148::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11414:26::-;;;:::i;14193:69::-;;;;;;:::i;:::-;;:::i;31077:160::-;;;;;;:::i;:::-;;:::i;12830:42::-;;;;;;:::i;:::-;;:::i;12152:34::-;;;:::i;18709:209::-;;;;;;:::i;:::-;;:::i;:::-;;26957:233;;;;;;:::i;:::-;;:::i;27436:184::-;;;;;;:::i;:::-;;:::i;24323:240::-;;;;;;:::i;:::-;;:::i;23765:243::-;;;;;;:::i;:::-;;:::i;11125:30::-;;;:::i;12933:51::-;;;;;;:::i;:::-;;:::i;12514:26::-;;;:::i;26470:215::-;;;;;;:::i;:::-;;:::i;20251:196::-;;;;;;:::i;:::-;;:::i;11733:28::-;;;:::i;13790:73::-;;;;;;:::i;:::-;;:::i;20728:186::-;;;;;;:::i;:::-;;:::i;11634:30::-;;;:::i;25125:203::-;;;;;;:::i;:::-;;:::i;21155:140::-;;;;;;:::i;:::-;;:::i;28347:159::-;;;;;;:::i;:::-;;:::i;10974:33::-;;;:::i;13101:51::-;;;;;;:::i;:::-;;:::i;25972:250::-;;;;;;:::i;:::-;;:::i;11280:28::-;;;:::i;25552:203::-;;;;;;:::i;:::-;;:::i;17599:::-;;;;;;:::i;:::-;;:::i;12611:53::-;;;;;;:::i;:::-;;:::i;12720:54::-;;;;;;:::i;:::-;;:::i;31442:134::-;;;:::i;:::-;;;;;;;;:::i;10312:28::-;;;:::i;10671:::-;;;:::i;11881:35::-;;;:::i;13872:44::-;;;;;;:::i;:::-;;:::i;14079:70::-;;;;;;:::i;:::-;;:::i;24795:106::-;;;;;;:::i;:::-;;:::i;19640:301::-;;;;;;:::i;:::-;;:::i;21536:140::-;;;;;;:::i;:::-;;:::i;11536:26::-;;;:::i;18146:209::-;;;;;;:::i;:::-;;:::i;27875:223::-;;;;;;:::i;:::-;;:::i;12020:31::-;;;:::i;12332:::-;;;:::i;10409:30::-;;;:::i;29337:236::-;;;:::i;10818:26::-;;;:::i;23269:188::-;;;;;;:::i;:::-;;:::i;28922:245::-;;;;;;:::i;:::-;;:::i;19193:239::-;;;;;;:::i;:::-;;:::i;22792:143::-;;;;;;:::i;:::-;;:::i;22106:282::-;;;;;;:::i;:::-;;:::i;17021:215::-;;;;;;:::i;:::-;;:::i;10558:23::-;;;-1:-1:-1;;;;;10558:23:0;;:::o;13965:70::-;;;;;;;;;;;;;;;:::o;30672:242::-;-1:-1:-1;;;;;30807:31:0;;;30783:4;30807:31;;;:17;:31;;;;;;;;:43;;;;;;;;;;;;;;:99;;;;;30895:11;30854:52;;30866:10;-1:-1:-1;;;;;30854:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;30807:99;30800:106;30672:242;-1:-1:-1;;;;30672:242:0:o;29847:148::-;-1:-1:-1;;;;;29952:16:0;;;29909:7;29952:16;;;:9;:16;;;;;;;;;29944:42;;-1:-1:-1;;;29944:42:0;;;;29909:7;;29952:16;;29944:40;;:42;;;;;29952:16;;29944:42;;;;;;29952:16;29944:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29929:58;29847:148;-1:-1:-1;;29847:148:0:o;11414:26::-;;;;:::o;14193:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31077:160::-;-1:-1:-1;;;;;31175:16:0;;31151:4;31175:16;;;:10;:16;;;;;;;;:54;;;;;31221:8;31195:34;;31201:4;-1:-1:-1;;;;;31195:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;31175:54;31168:61;31077:160;-1:-1:-1;;;31077:160:0:o;12830:42::-;;;;;;;;;;;;;;;:::o;12152:34::-;;;;:::o;18709:209::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;;;;;;;;;18817:19:::1;18798:16;:38;;;;-1:-1:-1::0;;;;;;;;;;;;;;18890:19:0::1;18852:58;;;;;;:::i;:::-;;;;;;;;18709:209:::0;:::o;26957:233::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;27038:37:::1;27060:14;27038:21;:37::i;:::-;27102:14;27086:13;:30;;;;-1:-1:-1::0;;;;;;;;;;;;;;27167:14:0::1;27132:50;;;;;;:::i;27436:184::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;27533:14:::1;27517:13;:30;;;;-1:-1:-1::0;;;;;;;;;;;;;;27597:14:0::1;27563:49;;;;;;:::i;24323:240::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24408:28:0;::::1;;::::0;;;:21:::1;:28;::::0;;;;;;;;:36;;-1:-1:-1;;24408:36:0::1;::::0;::::1;;;::::0;;24485:31;;-1:-1:-1;;;24485:31:0;;;;24460:95:::1;::::0;24408:28;;;;24485:29:::1;::::0;:31:::1;::::0;;::::1;::::0;;;;;;24408:28;24485:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24532:5;-1:-1:-1::0;;;;;24518:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;24518:29:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;24549:5;24460:95;;;;;;;;;:::i;:::-;;;;;;;;24323:240:::0;;:::o;23765:243::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23851:29:0;::::1;;::::0;;;:22:::1;:29;::::0;;;;;;;;:37;;-1:-1:-1;;23851:37:0::1;::::0;::::1;;;::::0;;23930:31;;-1:-1:-1;;;23930:31:0;;;;23904:96:::1;::::0;23851:29;;;;23930::::1;::::0;:31:::1;::::0;;::::1;::::0;;;;;;23851:29;23930:31;::::1;;::::0;::::1;;;;::::0;::::1;11125:30:::0;;;;:::o;12933:51::-;;;;;;;;;;;;;;;:::o;12514:26::-;;;;;;:::o;26470:215::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;26582:19:::1;26561:18;:40;;;;-1:-1:-1::0;;;;;;;;;;;;;;26657:19:0::1;26617:60;;;;;;:::i;20251:196::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20346:33:0;::::1;;::::0;;;:19:::1;:33;::::0;;;;;;:41;;-1:-1:-1;;20346:41:0::1;::::0;::::1;;;::::0;;20403:36;::::1;::::0;::::1;::::0;20346:33;;:41;;20403:36:::1;:::i;11733:28::-:0;;;;:::o;13790:73::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13790:73:0;;:::o;20728:186::-;20808:11;;-1:-1:-1;;;;;20808:11:0;20794:10;:25;20786:50;;;;-1:-1:-1;;;20786:50:0;;;;;;;:::i;:::-;20847:14;:22;;-1:-1:-1;;20847:22:0;;;;;;;20885:21;;;;;;20847:22;;20885:21;:::i;:::-;;;;;;;;20728:186;:::o;11634:30::-;;;;:::o;25125:203::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;25216:11:::1;::::0;25194:44:::1;::::0;25216:21:::1;::::0;25232:4;25216:21:::1;:15;:21;:::i;:::-;25194;:44::i;:::-;25263:4;25249:11;:18;;;;-1:-1:-1::0;;;;;;;;;;;;;;25315:4:0::1;25283:37;;;;;;:::i;21155:140::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21248:31:0;;;::::1;;::::0;;;:18:::1;:31;::::0;;;;:39;;-1:-1:-1;;21248:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21155:140::o;28347:159::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28433:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;:25;;-1:-1:-1;;;;;;28433:25:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;28474:24;::::1;::::0;::::1;::::0;28433:16;;:25;;28474:24:::1;:::i;10974:33::-:0;;;;:::o;13101:51::-;;;;;;;;;;;;;;;:::o;25972:250::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26061:28:0;::::1;26053:53;;;;-1:-1:-1::0;;;26053:53:0::1;;;;;;;:::i;:::-;26117:13;:30:::0;;-1:-1:-1;;;;;;26117:30:0::1;-1:-1:-1::0;;;;;26117:30:0;::::1;;::::0;;26163:51:::1;::::0;-1:-1:-1;;;26163:51:0;::::1;::::0;::::1;::::0;26117:30;;26163:51:::1;:::i;11280:28::-:0;;;;:::o;25552:203::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;25643:11:::1;::::0;25621:44:::1;::::0;25643:21:::1;::::0;25659:4;25643:21:::1;:15;:21;:::i;25621:44::-;25690:4;25676:11;:18;;;;-1:-1:-1::0;;;;;;;;;;;;;;25742:4:0::1;25710:37;;;;;;:::i;17599:203::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;17705:17:::1;17686:16;:36;;;;-1:-1:-1::0;;;;;;;;;;;;;;17776:17:0::1;17738:56;;;;;;:::i;12611:53::-:0;;;;;;;;;;;;;;;:::o;12720:54::-;;;;;;;;;;;;;;;:::o;31442:134::-;31533:16;;31551;;31442:134;;:::o;10312:28::-;;;:::o;10671:::-;;;-1:-1:-1;;;;;10671:28:0;;:::o;11881:35::-;;;;:::o;13872:44::-;;;;;;;;;;;;-1:-1:-1;;;;;13872:44:0;;:::o;14079:70::-;;;;;;;;;;;;;;;:::o;24795:106::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24869:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;24869:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24795:106::o;19640:301::-;19730:8;;-1:-1:-1;;;;;19730:8:0;19716:10;:22;:54;;;;-1:-1:-1;;;;;;19742:28:0;;;;19716:54;19708:86;;;;-1:-1:-1;;;19708:86:0;;;;;;;:::i;:::-;19814:14;;;;19813:15;19805:43;;;;-1:-1:-1;;;19805:43:0;;;;;;;:::i;:::-;19859:11;:28;;-1:-1:-1;;;;;;19859:28:0;-1:-1:-1;;;;;19859:28:0;;;;;;;;19903:30;;;;-1:-1:-1;;19903:30:0;19640:301;:::o;21536:140::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21629:31:0;;;::::1;;::::0;;;:18:::1;:31;::::0;;;;:39;;-1:-1:-1;;21629:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21536:140::o;11536:26::-;;;;:::o;18146:209::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;18257:16:::1;18235:19;:38;;;;-1:-1:-1::0;;;;;;;;;;;;;;18330:16:0::1;18289:58;;;;;;:::i;27875:223::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;27970:6:::1;27955:3;:22;;27947:54;;;;-1:-1:-1::0;;;27947:54:0::1;;;;;;;:::i;:::-;28030:3;28012:15;:21;;;;-1:-1:-1::0;;;;;;;;;;;;;;28086:3:0::1;28049:41;;;;;;:::i;12020:31::-:0;;;;:::o;12332:::-;;;;:::o;10409:30::-;;;-1:-1:-1;;;;;10409:30:0;;:::o;29337:236::-;29405:15;;-1:-1:-1;;;;;29405:15:0;29391:10;:29;29383:60;;;;-1:-1:-1;;;29383:60:0;;;;;;;:::i;:::-;29454:8;:28;;29472:10;-1:-1:-1;;;;;;29454:28:0;;;;;;;;-1:-1:-1;29493:28:0;;;;;;;29537;;;;-1:-1:-1;29537:28:0;29337:236::o;10818:26::-;;;-1:-1:-1;;;;;10818:26:0;;:::o;23269:188::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23364:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;:37;;-1:-1:-1;;23364:37:0::1;::::0;::::1;;;::::0;;23417:32;::::1;::::0;::::1;::::0;23364:37;;23417:32:::1;:::i;:::-;;;;;;;;23269:188:::0;;:::o;28922:245::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29015:30:0;::::1;29007:55;;;;-1:-1:-1::0;;;29007:55:0::1;;;;;;;:::i;:::-;29073:15;:34:::0;;-1:-1:-1;;;;;;29073:34:0::1;-1:-1:-1::0;;;;;29073:34:0;::::1;::::0;;::::1;::::0;;29123:36:::1;::::0;29073:34;;29123:36:::1;::::0;::::1;28922:245:::0;:::o;19193:239::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;19276:37:::1;19298:14;19276:21;:37::i;:::-;19342:14;19324:15;:32;;;;-1:-1:-1::0;;;;;;;;;;;;;;19409:14:0::1;19372:52;;;;;;:::i;22792:143::-:0;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22893:24:0;;::::1;;::::0;;;:18:::1;:24;::::0;;;;;;;:28;;::::1;::::0;;;;;;;;;:34;;-1:-1:-1;;;;;;22893:34:0::1;::::0;;;::::1;;::::0;;22792:143::o;22106:282::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22227:32:0;::::1;;::::0;;;:18:::1;:32;::::0;;;;;::::1;;::::0;:68:::1;;-1:-1:-1::0;;;;;;22263:32:0;::::1;;::::0;;;:18:::1;:32;::::0;;;;;::::1;;22227:68;22219:99;;;;-1:-1:-1::0;;;22219:99:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22329:31:0;;::::1;;::::0;;;:17:::1;:31;::::0;;;;;;;:43;;;::::1;::::0;;;;;;;;;:51;;-1:-1:-1;;22329:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22106:282::o;17021:215::-;15459:8;;-1:-1:-1;;;;;15459:8:0;15445:10;:22;15437:45;;;;-1:-1:-1;;;15437:45:0;;;;;;;:::i;:::-;17135:17:::1;17112:20;:40;;;;-1:-1:-1::0;;;;;;;;;;;;;;17210:17:0::1;17168:60;;;;;;:::i;31755:136::-:0;31861:6;31839:10;:29;;31831:52;;;;-1:-1:-1;;;31831:52:0;;;;;;;:::i;:::-;31755:136;:::o;5286:181::-;5344:7;5376:5;;;5400:6;;;;5392:46;;;;-1:-1:-1;;;5392:46:0;;;;;;;:::i;5:130:-1:-;72:20;;-1:-1;;;;;17647:54;;18321:35;;18311:2;;18370:1;;18360:12;1413:241;;1517:2;1505:9;1496:7;1492:23;1488:32;1485:2;;;-1:-1;;1523:12;1485:2;1585:53;1630:7;1606:22;1585:53;:::i;1661:366::-;;;1782:2;1770:9;1761:7;1757:23;1753:32;1750:2;;;-1:-1;;1788:12;1750:2;1850:53;1895:7;1871:22;1850:53;:::i;:::-;1840:63;;1958:53;2003:7;1940:2;1983:9;1979:22;1958:53;:::i;:::-;1948:63;;1744:283;;;;;:::o;2034:491::-;;;;2172:2;2160:9;2151:7;2147:23;2143:32;2140:2;;;-1:-1;;2178:12;2140:2;2240:53;2285:7;2261:22;2240:53;:::i;:::-;2230:63;;2348:53;2393:7;2330:2;2373:9;2369:22;2348:53;:::i;:::-;2338:63;;2456:53;2501:7;2438:2;2481:9;2477:22;2456:53;:::i;:::-;2446:63;;2134:391;;;;;:::o;2532:485::-;;;;2667:2;2655:9;2646:7;2642:23;2638:32;2635:2;;;-1:-1;;2673:12;2635:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2725:63;-1:-1;2825:2;2864:22;;72:20;97:33;72:20;97:33;:::i;:::-;2833:63;-1:-1;2933:2;2969:22;;206:20;231:30;206:20;231:30;:::i;:::-;2941:60;;;;2629:388;;;;;:::o;3024:487::-;;;;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;-1:-1;;3166:12;3128:2;3228:53;3273:7;3249:22;3228:53;:::i;:::-;3218:63;;3336:53;3381:7;3318:2;3361:9;3357:22;3336:53;:::i;:::-;3326:63;;3426:2;3467:9;3463:22;1208:20;1233:31;1258:5;1233:31;:::i;3518:360::-;;;3636:2;3624:9;3615:7;3611:23;3607:32;3604:2;;;-1:-1;;3642:12;3604:2;3704:53;3749:7;3725:22;3704:53;:::i;:::-;3694:63;;3794:2;3834:9;3830:22;206:20;18467:5;17481:13;17474:21;18445:5;18442:32;18432:2;;-1:-1;;18478:12;18432:2;3802:60;;;;3598:280;;;;;:::o;3885:362::-;;;4004:2;3992:9;3983:7;3979:23;3975:32;3972:2;;;-1:-1;;4010:12;3972:2;4072:53;4117:7;4093:22;4072:53;:::i;:::-;4062:63;;4162:2;4203:9;4199:22;1208:20;1233:31;1258:5;1233:31;:::i;4254:235::-;;4355:2;4343:9;4334:7;4330:23;4326:32;4323:2;;;-1:-1;;4361:12;4323:2;219:6;206:20;231:30;255:5;231:30;:::i;4496:261::-;;4610:2;4598:9;4589:7;4585:23;4581:32;4578:2;;;-1:-1;;4616:12;4578:2;-1:-1;350:13;;4572:185;-1:-1;4572:185::o;4764:362::-;;4889:2;4877:9;4868:7;4864:23;4860:32;4857:2;;;-1:-1;;4895:12;4857:2;4946:17;4940:24;4984:18;;4976:6;4973:30;4970:2;;;-1:-1;;5006:12;4970:2;5093:6;5082:9;5078:22;526:3;519:4;511:6;507:17;503:27;493:2;;-1:-1;;534:12;493:2;574:6;568:13;554:27;;4984:18;16823:6;16820:30;16817:2;;;-1:-1;;16853:12;16817:2;16486;16480:9;16926;16907:17;;-1:-1;;16903:33;16512:17;;4889:2;16512:17;16572:34;;;16608:22;;;16569:62;16566:2;;;-1:-1;;16634:12;16566:2;16486;16653:22;667:21;;;767:16;;;4889:2;767:16;764:25;-1:-1;761:2;;;-1:-1;;792:12;761:2;812:39;844:6;4889:2;743:5;739:16;4889:2;709:6;705:17;812:39;:::i;:::-;5026:84;4851:275;-1:-1;;;;;;4851:275::o;5133:241::-;;5237:2;5225:9;5216:7;5212:23;5208:32;5205:2;;;-1:-1;;5243:12;5205:2;-1:-1;932:20;;5199:175;-1:-1;5199:175::o;5651:259::-;;5764:2;5752:9;5743:7;5739:23;5735:32;5732:2;;;-1:-1;;5770:12;5732:2;1358:6;1352:13;1370:31;1395:5;1370:31;:::i;9872:222::-;-1:-1;;;;;17647:54;;;;5988:37;;9999:2;9984:18;;9970:124::o;10101:333::-;-1:-1;;;;;17647:54;;;5988:37;;17647:54;;10420:2;10405:18;;5988:37;10256:2;10241:18;;10227:207::o;10441:321::-;-1:-1;;;;;17647:54;;;;5988:37;;17481:13;17474:21;10748:2;10733:18;;6102:34;10590:2;10575:18;;10561:201::o;10769:632::-;;17658:42;;;;;17651:5;17647:54;5995:3;5988:37;9853:5;11159:2;11148:9;11144:18;9823:37;10994:3;11196:2;11185:9;11181:18;11174:48;6293:5;17104:12;17261:6;10994:3;10983:9;10979:19;17249;6387:52;6432:6;17289:14;10983:9;17289:14;11159:2;6413:5;6409:16;6387:52;:::i;:::-;17481:13;;17474:21;11387:2;11372:18;;6102:34;-1:-1;16926:9;18225:14;;;;-1:-1;;18221:28;6451:39;17289:14;6451:39;;10965:436;-1:-1;;;10965:436::o;11408:210::-;17481:13;;17474:21;6102:34;;11529:2;11514:18;;11500:118::o;11625:416::-;11825:2;11839:47;;;6727:2;11810:18;;;17249:19;-1:-1;;;17289:14;;;6743:33;6795:12;;;11796:245::o;12048:416::-;12248:2;12262:47;;;7046:2;12233:18;;;17249:19;-1:-1;;;17289:14;;;7062:42;7123:12;;;12219:245::o;12471:416::-;12671:2;12685:47;;;7374:2;12656:18;;;17249:19;-1:-1;;;17289:14;;;7390:41;7450:12;;;12642:245::o;12894:416::-;13094:2;13108:47;;;7701:2;13079:18;;;17249:19;7737:29;17289:14;;;7717:50;7786:12;;;13065:245::o;13317:416::-;13517:2;13531:47;;;8037:2;13502:18;;;17249:19;-1:-1;;;17289:14;;;8053:38;8110:12;;;13488:245::o;13740:416::-;13940:2;13954:47;;;8361:2;13925:18;;;17249:19;-1:-1;;;17289:14;;;8377:42;8438:12;;;13911:245::o;14163:416::-;14363:2;14377:47;;;8689:2;14348:18;;;17249:19;-1:-1;;;17289:14;;;8705:35;8759:12;;;14334:245::o;14586:416::-;14786:2;14800:47;;;9010:2;14771:18;;;17249:19;-1:-1;;;17289:14;;;9026:33;9078:12;;;14757:245::o;15009:416::-;15209:2;15223:47;;;9329:2;15194:18;;;17249:19;-1:-1;;;17289:14;;;9345:41;9405:12;;;15180:245::o;15432:416::-;15632:2;15646:47;;;9656:2;15617:18;;;17249:19;-1:-1;;;17289:14;;;9672:35;9726:12;;;15603:245::o;15855:222::-;9823:37;;;15982:2;15967:18;;15953:124::o;16084:333::-;9823:37;;;16403:2;16388:18;;9823:37;16239:2;16224:18;;16210:207::o;17881:268::-;17946:1;17953:101;17967:6;17964:1;17961:13;17953:101;;;18034:11;;;18028:18;18015:11;;;18008:39;17989:2;17982:10;17953:101;;;18069:6;18066:1;18063:13;18060:2;;;17946:1;18125:6;18120:3;18116:16;18109:27;18060:2;;17930:219;;;:::o;18262:117::-;-1:-1;;;;;17647:54;;18321:35;;18311:2;;18370:1;;18360:12;18386:111;18467:5;17481:13;17474:21;18445:5;18442:32;18432:2;;18488:1;;18478:12;18750:113;17863:4;18833:5;17852:16;18810:5;18807:33;18797:2;;18854:1;;18844:12

Swarm Source

ipfs://0eae2d9f76d9e4b6263a8c2ce45b8314aba61d9256119fb0e8ef82085983da37

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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